@devoinc/genesys-tokens
Version:
Design tokens generator
1 lines • 60.2 kB
Source Map (JSON)
{"version":3,"sources":["../src/index.ts","../src/generator.ts","../src/Scheme.ts","../src/formats/json/flat/format.ts","../src/formats/json/flat/index.ts","../src/formats/json/index.ts","../src/formats/eval.ts","../src/formats/javascript/moduleReduced/format.ts","../src/formats/javascript/moduleReduced/index.ts","../src/formats/javascript/moduleReducedMin/format.ts","../src/formats/javascript/moduleReducedMin/index.ts","../src/formats/javascript/esmReducedMin/format.ts","../src/formats/javascript/esmReducedMin/index.ts","../src/formats/javascript/index.ts","../src/formats/serialization.ts","../src/formats/text/flat/format.ts","../src/formats/text/flat/index.ts","../src/formats/text/index.ts","../src/formats/typescript/moduleReducedDeclarations/format.ts","../src/formats/typescript/moduleReducedDeclarations/index.ts","../src/formats/typescript/index.ts","../src/constants.ts","../src/formats/figma/figmatokens/format.ts","../src/formats/figma/figmatokens/index.ts","../src/formats/figma/index.ts","../src/transforms/alias/cti/path.ts","../src/transforms/alias/cti/index.ts","../src/transforms/alias/group/transform.ts","../src/transforms/alias/group/index.ts","../src/transforms/alias/jsonComponent/transform.ts","../src/transforms/alias/jsonComponent/index.ts","../src/transforms/alias/index.ts","../src/transforms/shadow/boxShadowToFigma/errors.ts","../src/transforms/shadow/boxShadowToFigma/normalization.ts","../src/transforms/shadow/boxShadowToFigma/split.ts","../src/transforms/shadow/boxShadowToFigma/variations.ts","../src/transforms/shadow/boxShadowToFigma/transform.ts","../src/transforms/shadow/boxShadowToFigma/index.ts","../src/transforms/shadow/index.ts","../src/transforms/size/filter.ts","../src/transforms/size/pxToDp/transform.ts","../src/transforms/size/pxToDp/index.ts","../src/transforms/size/pxToPt/transform.ts","../src/transforms/size/pxToPt/index.ts","../src/transforms/size/remToIntegerBase10/transform.ts","../src/transforms/size/remToPxBase10/transform.ts","../src/transforms/size/remToPxBase10/index.ts","../src/transforms/size/remToIntegerBase10/index.ts","../src/transforms/size/index.ts","../src/filters/isAlias/filter.ts","../src/filters/isAlias/index.ts","../src/filters/isBrand/filter.ts","../src/filters/isBrand/index.ts","../src/filters/isCmp/filter.ts","../src/filters/isCmp/index.ts","../src/token.ts","../src/filters/isFigmaBase/filter.ts","../src/filters/isFigmaBase/index.ts","../src/filters/isFigmaScheme/filter.ts","../src/filters/isFigmaScheme/index.ts","../src/filters/isGlobal/filter.ts","../src/filters/isGlobal/index.ts","../src/filters/isGroup/filter.ts","../src/filters/isGroup/index.ts","../src/filters/isNotFigma/filter.ts","../src/filters/isNotFigma/index.ts","../src/filters/isCmpAlias/filter.ts","../src/filters/isCmpAlias/index.ts","../src/transformGroups/figma.ts","../src/transformGroups/styleguide.ts","../src/transformGroups/styleguidejs.ts","../src/transformGroups/tokensJs.ts","../src/transformGroups/tokensJson.ts","../src/transformGroups/tokensScss.ts","../src/transformGroups/tokensCss.ts","../src/transformGroups/tokensAndroid.ts","../src/styleDictionary.ts","../src/validations/json.ts"],"sourcesContent":["export * from './generator';\nexport * from './Scheme';\nexport * from './validations';\n","import StyleDictionary from 'style-dictionary';\n\nimport { Scheme } from './Scheme';\nimport * as formats from './formats';\nimport * as transforms from './transforms';\nimport * as filters from './filters';\nimport * as transformGroups from './transformGroups';\n\nimport { getStyleDictionaryConfig } from './styleDictionary';\n\nStyleDictionary.registerFormat(formats.json.flat);\nStyleDictionary.registerFormat(formats.figma.figmatokens);\nStyleDictionary.registerFormat(formats.text.flat);\nStyleDictionary.registerFormat(formats.javascript.moduleReduced);\nStyleDictionary.registerFormat(formats.javascript.moduleReducedMin);\nStyleDictionary.registerFormat(formats.javascript.esmReducedMin);\nStyleDictionary.registerFormat(formats.typescript.moduleReducedDeclarations);\n\nStyleDictionary.registerTransform(transforms.size.pxToPt);\n\nStyleDictionary.registerTransform(transforms.alias.cti);\nStyleDictionary.registerTransform(transforms.alias.group);\nStyleDictionary.registerTransform(transforms.alias.jsonComponent);\nStyleDictionary.registerTransform(transforms.size.pxToDp);\nStyleDictionary.registerTransform(transforms.size.remToPxBase10);\nStyleDictionary.registerTransform(transforms.size.remToIntegerBase10);\nStyleDictionary.registerTransform(transforms.shadow.boxShadowToFigma);\n\nStyleDictionary.registerFilter(filters.isGlobal);\nStyleDictionary.registerFilter(filters.isAlias);\nStyleDictionary.registerFilter(filters.isFigmaBase);\nStyleDictionary.registerFilter(filters.isFigmaScheme);\nStyleDictionary.registerFilter(filters.isBrand);\nStyleDictionary.registerFilter(filters.isCmp);\nStyleDictionary.registerFilter(filters.isGroup);\nStyleDictionary.registerFilter(filters.isNotFigma);\nStyleDictionary.registerFilter(filters.isCmpAlias);\n\nStyleDictionary.registerTransformGroup(transformGroups.figma);\nStyleDictionary.registerTransformGroup(transformGroups.styleguide);\nStyleDictionary.registerTransformGroup(transformGroups.styleguidejs);\nStyleDictionary.registerTransformGroup(transformGroups.tokensJs);\nStyleDictionary.registerTransformGroup(transformGroups.tokensJson);\nStyleDictionary.registerTransformGroup(transformGroups.tokensScss);\nStyleDictionary.registerTransformGroup(transformGroups.tokensCss);\nStyleDictionary.registerTransformGroup(transformGroups.tokensAndroid);\n\nexport interface GenerateParams {\n scheme?: Scheme;\n menuScheme?: Scheme;\n source: string;\n output: string;\n}\n\nexport interface GenerateTypesParams {\n output: string;\n}\n\nexport const generate = async ({\n scheme = Scheme.Light,\n menuScheme = Scheme.Light,\n source,\n output,\n}: GenerateParams) => {\n const config = getStyleDictionaryConfig(scheme, menuScheme, source, output);\n const sd = new StyleDictionary(config);\n await sd.hasInitialized;\n\n await sd.buildPlatform('web/js');\n await sd.buildPlatform('web/json');\n await sd.buildPlatform('web/scss');\n await sd.buildPlatform('web/css');\n await sd.buildPlatform('figma');\n\n return true;\n};\n\nexport const generateTypes = async ({ output }: GenerateTypesParams) => {\n const config = getStyleDictionaryConfig(\n Scheme.Light,\n Scheme.Light,\n null,\n output,\n );\n const sd = new StyleDictionary(config);\n await sd.hasInitialized;\n\n await sd.buildPlatform('web/ts');\n\n return true;\n};\n","export enum Scheme {\n Light = 'light',\n Dark = 'dark',\n}\n","import type { FormatFn } from 'style-dictionary/types';\n\nexport const format: FormatFn = ({ dictionary }) =>\n JSON.stringify(dictionary.allTokens, null, 2);\n","import type { Format } from 'style-dictionary/types';\n\nimport { format } from './format';\n\nexport const flat: Format = {\n name: 'json/flat',\n format,\n};\n","import { flat } from './flat';\n\nexport const json = {\n flat,\n};\n","import type {\n TransformedToken,\n TransformedTokens,\n} from 'style-dictionary/types';\n\nexport type Formatter<S> = (token: TransformedToken) => S;\n\nexport type EvaluatedNode<T> =\n | T\n | {\n [key: string]: EvaluatedNode<T>;\n };\n\n/**\n * Flat the last tree node based on value props\n */\nexport const evalNode = <T>(\n token: TransformedTokens,\n formatter: Formatter<T>,\n): EvaluatedNode<T> =>\n token.hasOwnProperty('value')\n ? formatter(token as TransformedToken)\n : Object.entries(token)\n .map(([key, value]) => ({ [key]: evalNode(value, formatter) }))\n .reduce((acc, cur) => ({ ...acc, ...cur }), {});\n","import type { FormatFn } from 'style-dictionary/types';\n\nimport { evalNode } from '../../eval';\n\nexport const format: FormatFn = ({ dictionary }) =>\n `module.exports = ${JSON.stringify(\n evalNode<string>(dictionary.tokens, (token) => token.value),\n null,\n 2,\n )};`;\n","import type { Format } from 'style-dictionary/types';\n\nimport { format } from './format';\n\nexport const moduleReduced: Format = {\n name: 'javascript/module-reduced',\n format,\n};\n","import type { FormatFn } from 'style-dictionary/types';\n\nimport { evalNode } from '../../eval';\n\nexport const format: FormatFn = ({ dictionary }) =>\n `module.exports = ${JSON.stringify(\n evalNode<string>(dictionary.tokens, (node) => node.value),\n )};`;\n","import type { Format } from 'style-dictionary/types';\n\nimport { format } from './format';\n\nexport const moduleReducedMin: Format = {\n name: 'javascript/module-reduced-min',\n format,\n};\n","import type { FormatFn } from 'style-dictionary/types';\n\nimport { evalNode } from '../../eval';\n\nexport const format: FormatFn = ({ dictionary }) =>\n `export default ${JSON.stringify(\n evalNode<string>(dictionary.tokens, (node) => node.value),\n )};`;\n","import type { Format } from 'style-dictionary/types';\n\nimport { format } from './format';\n\nexport const esmReducedMin: Format = {\n name: 'javascript/esm-reduced-min',\n format,\n};\n","import { moduleReduced } from './moduleReduced';\nimport { moduleReducedMin } from './moduleReducedMin';\nimport { esmReducedMin } from './esmReducedMin';\n\nexport const javascript = {\n moduleReduced,\n moduleReducedMin,\n esmReducedMin,\n};\n","import type { TransformedToken } from 'style-dictionary/types';\n\nexport const stringify = (prefix: string) => (token: TransformedToken) =>\n `${prefix}${token.name}: ${\n token.attributes?.category === 'asset'\n ? '\"' + token.value + '\"'\n : token.value\n };`;\n\nexport const addComment =\n (commentStyle: 'short' | 'normal') => (comment: string) =>\n comment\n ? comment.concat(\n commentStyle === 'short'\n ? ' // ' + comment\n : ' /* ' + comment + ' */',\n )\n : comment;\n","import type { FormatFn } from 'style-dictionary/types';\n\nimport { addComment, stringify } from '../../serialization';\n\nexport const format: FormatFn = ({ dictionary }) =>\n dictionary.allTokens\n .map((prop) => addComment('short')(stringify('')(prop)))\n .join('\\n');\n","import type { Format } from 'style-dictionary/types';\n\nimport { format } from './format';\n\nexport const flat: Format = {\n name: 'text/flat',\n format,\n};\n","import { flat } from './flat';\n\nexport const text = {\n flat,\n};\n","import type { FormatFn } from 'style-dictionary/types';\nimport {\n InputData,\n quicktypeMultiFileSync,\n jsonInputForTargetLanguage,\n} from 'quicktype-core';\n\nimport { evalNode } from '../../eval';\n\nconst quicktypeJSON = (\n targetLanguage: string,\n typeName: string,\n jsonString: string,\n) => {\n const jsonInput = jsonInputForTargetLanguage(targetLanguage);\n\n jsonInput.addSourceSync({\n name: typeName,\n samples: [jsonString],\n });\n\n const inputData = new InputData();\n inputData.addInput(jsonInput);\n\n return quicktypeMultiFileSync({\n inputData,\n lang: targetLanguage,\n rendererOptions: { 'just-types': 'true' },\n });\n};\n\nexport const format: FormatFn = ({ dictionary }) => {\n const resMap = quicktypeJSON(\n 'typescript',\n 'Brand',\n JSON.stringify(evalNode<string>(dictionary.tokens, (token) => token.value)),\n );\n const declarationsLines = resMap.get('stdout')?.lines || [];\n const declarations = JSON.parse(JSON.stringify(declarationsLines.join('\\n')));\n return declarations;\n};\n","import type { Format } from 'style-dictionary/types';\n\nimport { format } from './format';\n\nexport const moduleReducedDeclarations: Format = {\n name: 'typescript/module-reduced-declarations',\n format,\n};\n","import { moduleReducedDeclarations } from './moduleReducedDeclarations';\n\nexport const typescript = {\n moduleReducedDeclarations,\n};\n","export const TOKENS_TIER = {\n ALIAS: 'alias',\n BRAND: 'brand',\n CMP: 'cmp',\n FIGMA: 'figma',\n GLOBAL: 'global',\n META: 'meta',\n};\n\nexport const TOKENS_CAT = {\n BREAKPOINTS: 'breakpoints',\n COLOR: 'color',\n ELEVATION: 'elevation',\n MUTATION: 'mutation',\n SHAPE: 'shape',\n SIZE: 'size',\n SPACE: 'space',\n TYPO: 'typo',\n};\n\n// export const TOKENS_CAT_VALUES = Object.values(TOKENS_CAT);[\nexport const TOKENS_CAT_VALUES = [\n 'breakpoints',\n 'color',\n 'elevation',\n 'mutation',\n 'shape',\n 'size',\n 'space',\n 'typo',\n];\n\nexport const TOKENS_CAT_PROP = {\n BREAKPOINTS: {\n NAME: TOKENS_CAT.BREAKPOINTS,\n PROPS: {\n MEDIA_QUERY: 'mediaQuery',\n },\n },\n COLOR: {\n NAME: TOKENS_CAT.COLOR,\n PROPS: {\n BACKGROUND: 'background',\n TEXT: 'text',\n BORDER: 'border',\n FILL: 'fill',\n SHADOW: 'shadow',\n },\n },\n ELEVATION: {\n NAME: TOKENS_CAT.ELEVATION,\n PROPS: {\n BOX_SHADOW: 'boxShadow',\n TEXT_SHADOW: 'textShadow',\n Z_INDEX: 'zIndex',\n },\n },\n MUTATION: {\n NAME: TOKENS_CAT.MUTATION,\n PROPS: {\n TRANSITION: 'transition',\n TRANSITION_PROPERTY: 'transitionProperty',\n TRANSITION_DURATION: 'transitionDuration',\n TRANSITION_TIMING_FUNCTION: 'transitionTimingFunction',\n TRANSITION_TYPE: 'transitionType',\n TRANSITION_DELAY: 'transitionDelay',\n TRANSFORM: 'transform',\n },\n },\n SHAPE: {\n NAME: TOKENS_CAT.SHAPE,\n PROPS: {\n BORDER_RADIUS: 'borderRadius',\n BORDER: 'border',\n BORDER_SIZE: 'borderSize',\n BORDER_STYLE: 'borderStyle',\n STROKE: 'stroke',\n OUTLINE: 'outline',\n OPACITY: 'opacity',\n CONTENT: 'content',\n },\n },\n SIZE: {\n NAME: TOKENS_CAT.SIZE,\n PROPS: {\n WIDTH: 'width',\n MIN_WIDTH: 'minWidth',\n MAX_WIDTH: 'maxWidth',\n HEIGHT: 'height',\n MIN_HEIGHT: 'minHeight',\n MAX_HEIGHT: 'maxHeight',\n SQUARE: 'square',\n },\n },\n TYPO: {\n NAME: TOKENS_CAT.TYPO,\n PROPS: {\n FONT_SIZE: 'fontSize',\n FONT_WEIGHT: 'fontWeight',\n FONT_FAMILY: 'fontFamily',\n LINE_HEIGHT: 'lineHeight',\n LETTER_SPACING: 'letterSpacing',\n TEXT_TRANSFORM: 'textTransform',\n TEXT_DECORATION: 'textDecoration',\n },\n },\n SPACE: {\n NAME: TOKENS_CAT.SPACE,\n PROPS: {\n PADDING: 'padding',\n PADDING_TOP: 'paddingTop',\n PADDING_RIGHT: 'paddingRight',\n PADDING_BOTTOM: 'paddingBottom',\n PADDING_LEFT: 'paddingLeft',\n PADDING_VER: 'paddingVer',\n PADDING_HOR: 'paddingHor',\n MARGIN: 'margin',\n MARGIN_TOP: 'marginTop',\n MARGIN_RIGHT: 'marginRight',\n MARGIN_BOTTOM: 'marginBottom',\n MARGIN_LEFT: 'marginLeft',\n MARGIN_VER: 'marginVer',\n MARGIN_HOR: 'marginHor',\n GAP: 'gap',\n ROW_GAP: 'rowGap',\n COLUMN_GAP: 'columnGap',\n },\n },\n};\n\nexport const FIGMA_TOKENS_CAT = {\n COLOR: 'color',\n BORDER_RADIUS: 'borderRadius',\n SIZE: 'sizing',\n SPACE: 'spacing',\n BORDER_SIZE: 'borderWidth',\n BOX_SHADOW: 'boxShadow',\n OPACITY: 'opacity',\n TYPO: 'typography',\n FONT_SIZE: 'fontSizes',\n FONT_WEIGHT: 'fontWeights',\n FONT_FAMILY: 'fontFamilies',\n LINE_HEIGHT: 'lineHeights',\n LETTER_SPACING: 'letterSpacing',\n TEXT_TRANSFORM: 'case',\n OTHER: 'other',\n};\n","import type { FormatFn } from 'style-dictionary/types';\n\nimport { FIGMA_TOKENS_CAT } from '../../../constants';\nimport { evalNode, EvaluatedNode } from '../../eval';\n\nexport const format: FormatFn = ({ dictionary }) => {\n const tree = evalNode<{ value: string; type: string }>(\n dictionary.tokens,\n (node) => ({\n value: node.value,\n type: node.attributes?.figmaType as string,\n }),\n );\n\n // avoid redundant info in Figma\n if ('figma' in tree && FIGMA_TOKENS_CAT.TYPO in tree.figma) {\n tree[FIGMA_TOKENS_CAT.TYPO] = (\n tree.figma as {\n [key: string]: EvaluatedNode<{ value: string; type: string }>;\n }\n )[FIGMA_TOKENS_CAT.TYPO];\n delete tree.figma;\n }\n\n return JSON.stringify(tree, null, 2);\n};\n","import type { Format } from 'style-dictionary/types';\n\nimport { format } from './format';\n\nexport const figmatokens: Format = {\n name: 'figma/figmatokens',\n format,\n};\n","import { figmatokens } from './figmatokens';\n\nexport const figma = {\n figmatokens,\n};\n","import { TransformedToken } from 'style-dictionary/types';\n\nimport {\n FIGMA_TOKENS_CAT,\n TOKENS_CAT_PROP,\n TOKENS_CAT_VALUES,\n TOKENS_TIER,\n} from '../../../constants';\n\n/**\n * Get the figma tokens plugin token type: color, sizing, spacing... etc.\n *\n * @param path - The array generated by the token name, containing each name block\n */\nexport const getFigmaTokenType = (path: string[]) =>\n path.includes(TOKENS_CAT_PROP.COLOR.NAME)\n ? FIGMA_TOKENS_CAT.COLOR\n : path.includes(TOKENS_CAT_PROP.SHAPE.PROPS.BORDER_RADIUS)\n ? FIGMA_TOKENS_CAT.BORDER_RADIUS\n : path.includes(TOKENS_CAT_PROP.SIZE.NAME)\n ? FIGMA_TOKENS_CAT.SIZE\n : path.includes(TOKENS_CAT_PROP.SPACE.NAME)\n ? FIGMA_TOKENS_CAT.SPACE\n : path.includes(TOKENS_CAT_PROP.SHAPE.PROPS.BORDER_SIZE)\n ? FIGMA_TOKENS_CAT.BORDER_SIZE\n : path.includes(TOKENS_CAT_PROP.SHAPE.NAME) &&\n path.includes(TOKENS_CAT_PROP.SHAPE.PROPS.OPACITY)\n ? FIGMA_TOKENS_CAT.OPACITY\n : path.includes(TOKENS_CAT_PROP.ELEVATION.PROPS.BOX_SHADOW)\n ? FIGMA_TOKENS_CAT.BOX_SHADOW\n : path.includes(FIGMA_TOKENS_CAT.TYPO)\n ? FIGMA_TOKENS_CAT.TYPO\n : path.includes(TOKENS_CAT_PROP.TYPO.PROPS.FONT_SIZE)\n ? FIGMA_TOKENS_CAT.FONT_SIZE\n : path.includes(TOKENS_CAT_PROP.TYPO.PROPS.FONT_WEIGHT)\n ? FIGMA_TOKENS_CAT.FONT_WEIGHT\n : path.includes(TOKENS_CAT_PROP.TYPO.PROPS.LINE_HEIGHT)\n ? FIGMA_TOKENS_CAT.LINE_HEIGHT\n : path.includes(TOKENS_CAT_PROP.TYPO.PROPS.LETTER_SPACING)\n ? FIGMA_TOKENS_CAT.LETTER_SPACING\n : path.includes(TOKENS_CAT_PROP.TYPO.PROPS.FONT_FAMILY)\n ? FIGMA_TOKENS_CAT.FONT_FAMILY\n : path.includes(TOKENS_CAT_PROP.TYPO.PROPS.TEXT_TRANSFORM)\n ? FIGMA_TOKENS_CAT.TEXT_TRANSFORM\n : FIGMA_TOKENS_CAT.OTHER;\n\nexport const parsePath = (token: TransformedToken, paths: string[]) =>\n paths.reduce((acc, cur, idx) => ({ ...acc, [cur]: token.path[idx] }), {\n figmaType: getFigmaTokenType(token.path),\n });\n\nexport const getPaths = (token: TransformedToken) => {\n const isCmp = token.path[0] === TOKENS_TIER.CMP;\n const isAlias = token.path[0] === TOKENS_TIER.ALIAS;\n const isExportable = isCmp || isAlias;\n const hasElement = isExportable && TOKENS_CAT_VALUES.includes(token.path[3]);\n const hasGroup = isAlias && !TOKENS_CAT_VALUES.includes(token.path[1]);\n\n return [\n 'tier',\n ...(isCmp ? ['component'] : []),\n ...(hasGroup ? ['group'] : []),\n ...(hasElement ? ['element'] : []),\n 'category',\n 'property',\n ...(isAlias && !hasGroup ? ['concept'] : []),\n 'variant',\n 'modifier',\n ];\n};\n","import type { Transform } from 'style-dictionary/types';\n\nimport { parsePath, getPaths } from './path';\n\nexport const cti: Transform = {\n name: 'alias-cti',\n type: 'attribute',\n transform: (token) => parsePath(token, getPaths(token)),\n};\n","import type { TransformedToken } from 'style-dictionary/types';\n\nexport const transform = (token: TransformedToken) =>\n String(token.path.shift());\n","import type { Transform } from 'style-dictionary/types';\n\nimport { transform } from './transform';\n\nexport const group: Transform = {\n name: 'name/token-group',\n type: 'name',\n transform,\n};\n","import type { TransformedToken } from 'style-dictionary/types';\n\nexport const transform = (token: TransformedToken) => token.path.join('-');\n","import type { Transform } from 'style-dictionary/types';\n\nimport { transform } from './transform';\n\nexport const jsonComponent: Transform = {\n name: 'name/token-json-component',\n type: 'name',\n transform,\n};\n","import { cti } from './cti';\nimport { group } from './group';\nimport { jsonComponent } from './jsonComponent';\n\nexport const alias = {\n cti,\n group,\n jsonComponent,\n};\n","import type { TransformedToken } from 'style-dictionary/types';\n\nexport const getValidFormatMessage = (token: TransformedToken) => `\nThere is an error on the next boxShadow format:\n\n${JSON.stringify(token, null, 2)}\n\nThe accepted values are:\n- 'inset? x y color',\n- 'inset? x y blur color',\n- 'inset? x y blur spread color',\n\nFix, drop and roll...\n`;\n","/**\n * Normalize the unit to base10\n *\n * @param value The value to normalize\n * @return The value normalized\n */\nexport const unitToIntegerBase10 = (value: string) => {\n const mult = value.endsWith('rem') ? 10 : 1;\n const numberValue = Number(value.replace(/rem/, '').replace(/px/, ''));\n return parseFloat((numberValue * mult).toFixed(4));\n};\n","/**\n * Split a text by commas that are not inside of a parenthesys\n *\n * @param text Text for split\n * @return Array splited of expressions\n */\nexport const breakExpressions = (text: string) =>\n text.split(/\\s*,(?![^(]*\\))\\s*/);\n","export const InsetXYColor =\n /(inset)?\\s*([\\d.-]+(?:rem|px)?)\\s+([\\d.-]+(?:rem|px)?)\\s+(#[\\da-fA-F]{6}|rgba?\\(\\s*\\d+\\s*,\\s*\\d+\\s*,\\s*\\d+\\s*(?:\\s*,\\s*[\\d.]+)?\\)\\s*)/;\nexport const InsetXYBlurColor =\n /(inset)?\\s*([\\d.-]+(?:rem|px)?)\\s+([\\d.-]+(?:rem|px)?)\\s+([\\d.-]+(?:rem|px)?)\\s+(#[\\da-fA-F]{6}|rgba?\\(\\s*\\d+\\s*,\\s*\\d+\\s*,\\s*\\d+\\s*(?:\\s*,\\s*[\\d.]+)?\\)\\s*)/;\nexport const InsetXYBlurSpreadColor =\n /(inset)?\\s*([\\d.-]+(?:rem|px)?)\\s+([\\d.-]+(?:rem|px)?)\\s+([\\d.-]+(?:rem|px)?)\\s+([\\d.-]+(?:rem|px)?)\\s+(#[\\da-fA-F]{6}|rgba?\\(\\s*\\d+\\s*,\\s*\\d+\\s*,\\s*\\d+\\s*(?:\\s*,\\s*[\\d.]+)?\\)\\s*)/;\n","import type { TransformedToken } from 'style-dictionary/types';\n\nimport { getValidFormatMessage } from './errors';\nimport { unitToIntegerBase10 } from './normalization';\nimport { breakExpressions } from './split';\nimport {\n InsetXYColor,\n InsetXYBlurColor,\n InsetXYBlurSpreadColor,\n} from './variations';\n\nexport interface FigmaBoxShadow {\n type: 'dropShadow' | 'innerShadow';\n x: number;\n y: number;\n blur: number;\n spread: number;\n color: string;\n}\n\nexport const transform = (token: TransformedToken) =>\n Array.isArray(token.value)\n ? token.value\n : breakExpressions(token.value).map((item) => {\n let captured;\n if (\n [\n 'none',\n 'inherit',\n 'initial',\n 'revert',\n 'revert-layer',\n 'unset',\n ].includes(item)\n ) {\n return {\n type: 'dropShadow',\n x: 0,\n y: 0,\n blur: 0,\n spread: 0,\n color: 'rgba(0,0,0,0)',\n };\n } else if ((captured = InsetXYBlurSpreadColor.exec(item))) {\n return {\n type: captured[1] ? 'innerShadow' : 'dropShadow',\n x: unitToIntegerBase10(captured[2]),\n y: unitToIntegerBase10(captured[3]),\n blur: unitToIntegerBase10(captured[4]),\n spread: unitToIntegerBase10(captured[5]),\n color: captured[6],\n };\n } else if ((captured = InsetXYBlurColor.exec(item))) {\n return {\n type: captured[1] ? 'innerShadow' : 'dropShadow',\n x: unitToIntegerBase10(captured[2]),\n y: unitToIntegerBase10(captured[3]),\n blur: unitToIntegerBase10(captured[4]),\n spread: 0,\n color: captured[5],\n };\n } else if ((captured = InsetXYColor.exec(item))) {\n return {\n type: captured[1] ? 'innerShadow' : 'dropShadow',\n x: unitToIntegerBase10(captured[2]),\n y: unitToIntegerBase10(captured[3]),\n blur: 0,\n spread: 0,\n color: captured[4],\n };\n } else {\n throw new Error(getValidFormatMessage(token));\n }\n });\n","import { Transform } from 'style-dictionary/types';\n\nimport { transform } from './transform';\n\n// To transform boxShadow to Figma format\nexport const boxShadowToFigma: Transform = {\n name: 'shadow/boxShadowToFigma',\n transitive: true,\n type: 'value',\n filter: (token) => token.path.includes('boxShadow'),\n transform,\n};\n","import { boxShadowToFigma } from './boxShadowToFigma';\n\nexport const shadow = {\n boxShadowToFigma,\n};\n","import type { Filter } from 'style-dictionary/types';\n\nexport const filterPx: Filter['filter'] = (token) =>\n !!token.value.match(/^[\\d.]+px$/);\n\nexport const filterRem: Filter['filter'] = (token) =>\n typeof token.value === 'string' && !!token.value.match(/^-*[\\d.]+rem$/);\n","import type { TransformedTokens } from 'style-dictionary/types';\n\nexport const transform = (token: TransformedTokens) =>\n token.value.replace(/px$/, 'dp');\n","import type { Transform } from 'style-dictionary/types';\n\nimport { filterPx } from '../filter';\nimport { transform } from './transform';\n\nexport const pxToDp: Transform = {\n name: 'size/pxToDp',\n type: 'value',\n filter: filterPx,\n transform,\n};\n","import type { TransformedToken } from 'style-dictionary/types';\n\nexport const transform = (token: TransformedToken) =>\n token.value.replace(/px$/, 'pt');\n","import type { Transform } from 'style-dictionary/types';\n\nimport { filterPx } from '../filter';\nimport { transform } from './transform';\n\nexport const pxToPt: Transform = {\n name: 'size/pxToPt',\n type: 'value',\n filter: filterPx,\n transform,\n};\n","import type { TransformedToken } from 'style-dictionary/types';\n\nexport const transform = (token: TransformedToken) =>\n parseFloat((Number(token.value.replace(/rem$/, '')) * 10).toFixed(4));\n","import type { TransformedToken } from 'style-dictionary';\n\nimport { transform as transformToNum } from '../remToIntegerBase10/transform';\n\nexport const transform = (token: TransformedToken) =>\n `${transformToNum(token)}px`;\n","import type { Transform } from 'style-dictionary/types';\n\nimport { filterRem } from '../filter';\nimport { transform } from './transform';\n\n// To transform the size values from rem to integer without units\nexport const remToPxBase10: Transform = {\n name: 'size/remToPxBase10',\n type: 'value',\n filter: filterRem,\n transform,\n};\n","import type { Transform } from 'style-dictionary/types';\n\nimport { filterRem } from '../filter';\nimport { transform } from './transform';\n\n// To transform the size values from rem to integer without units\nexport const remToIntegerBase10: Transform = {\n name: 'size/remToIntegerBase10',\n type: 'value',\n filter: filterRem,\n transform,\n};\n","import { pxToDp } from './pxToDp';\nimport { pxToPt } from './pxToPt';\nimport { remToPxBase10 } from './remToPxBase10';\nimport { remToIntegerBase10 } from './remToIntegerBase10';\n\nexport const size = {\n pxToDp,\n pxToPt,\n remToPxBase10,\n remToIntegerBase10,\n};\n","import type { Filter } from 'style-dictionary/types';\n\nimport { TOKENS_TIER } from '../../constants';\n\nexport const filter: Filter['filter'] = (token) =>\n token.attributes?.tier === TOKENS_TIER.ALIAS;\n","import type { Filter } from 'style-dictionary/types';\n\nimport { filter } from './filter';\n\nexport const isAlias: Filter = {\n name: 'isAlias',\n filter,\n};\n","import type { Filter } from 'style-dictionary/types';\n\nimport { TOKENS_TIER } from '../../constants';\n\nexport const filter: Filter['filter'] = (token) =>\n token.attributes?.tier === TOKENS_TIER.BRAND;\n","import type { Filter } from 'style-dictionary/types';\n\nimport { filter } from './filter';\n\nexport const isBrand: Filter = {\n name: 'isBrand',\n filter,\n};\n","import type { Filter } from 'style-dictionary/types';\n\nimport { TOKENS_TIER } from '../../constants';\n\nexport const filter: Filter['filter'] = (token) =>\n token.attributes?.tier === TOKENS_TIER.CMP;\n","import type { Filter} from 'style-dictionary/types';\n\nimport { filter } from './filter';\n\nexport const isCmp: Filter = {\n name: 'isCmp',\n filter\n};\n","import type { TransformedToken } from 'style-dictionary/types';\n\nimport { FIGMA_TOKENS_CAT, TOKENS_TIER, TOKENS_CAT_PROP } from './constants';\n\n/**\n * Evaluate if the token is figma type\n */\nexport const isFigmaProp = (token: TransformedToken) =>\n (token.attributes?.tier === TOKENS_TIER.FIGMA ||\n token.attributes?.tier === TOKENS_TIER.ALIAS ||\n token.attributes?.tier === TOKENS_TIER.CMP) &&\n token.attributes.figmaType !== FIGMA_TOKENS_CAT.OTHER;\n\n/**\n * Evaluate if the token has scheme (it depends on the dark or light scheme)\n */\nexport const evalHasScheme = (token: TransformedToken) =>\n token.attributes?.category === TOKENS_CAT_PROP.COLOR.NAME ||\n (token.attributes?.category === TOKENS_CAT_PROP.ELEVATION.NAME &&\n (token.attributes.property === TOKENS_CAT_PROP.ELEVATION.PROPS.BOX_SHADOW ||\n token.attributes.property ===\n TOKENS_CAT_PROP.ELEVATION.PROPS.TEXT_SHADOW));\n","import type { Filter } from 'style-dictionary/types';\n\nimport { isFigmaProp, evalHasScheme } from '../../token';\n\nexport const filter: Filter['filter'] = (token) =>\n isFigmaProp(token) && !evalHasScheme(token);\n","import type { Filter } from 'style-dictionary/types';\n\nimport { filter } from './filter';\n\nexport const isFigmaBase: Filter = {\n name: 'isFigmaBase',\n filter,\n};\n","import type { Filter } from 'style-dictionary/types';\n\nimport { isFigmaProp, evalHasScheme } from '../../token';\n\nexport const filter: Filter['filter'] = (token) =>\n isFigmaProp(token) && evalHasScheme(token);\n","import type { Filter } from 'style-dictionary/types';\n\nimport { filter } from './filter';\n\nexport const isFigmaScheme: Filter = {\n name: 'isFigmaScheme',\n filter,\n};\n","import type { Filter } from 'style-dictionary/types';\n\nimport { TOKENS_TIER } from '../../constants';\n\nexport const filter: Filter['filter'] = (token) =>\n token.attributes?.tier === TOKENS_TIER.GLOBAL;\n","import type { Filter } from 'style-dictionary/types';\n\nimport { filter } from './filter';\n\nexport const isGlobal: Filter = {\n name: 'isGlobal',\n filter,\n};\n","import type { Filter } from 'style-dictionary/types';\n\nexport const filter: Filter['filter'] = (token) => !!token.attributes?.group;\n","import type { Filter } from 'style-dictionary/types';\n\nimport { filter } from './filter';\n\nexport const isGroup: Filter = {\n name: 'isGroup',\n filter,\n};\n","import type { Filter } from 'style-dictionary/types';\n\nimport { TOKENS_TIER } from '../../constants';\n\nexport const filter: Filter['filter'] = (token) =>\n token.attributes?.tier !== TOKENS_TIER.FIGMA;\n","import type { Filter } from 'style-dictionary';\n\nimport { filter } from './filter';\n\nexport const isNotFigma: Filter = {\n name: 'isNotFigma',\n filter,\n};\n","import type { Filter } from 'style-dictionary/types';\n\nimport { TOKENS_TIER } from '../../constants';\n\nexport const filter: Filter['filter'] = (token) =>\n [TOKENS_TIER.CMP, TOKENS_TIER.ALIAS, TOKENS_TIER.META].includes(\n token.attributes?.tier as string,\n );\n","import type { Filter } from 'style-dictionary/types';\n\nimport { filter } from './filter';\n\nexport const isCmpAlias: Filter = {\n name: 'isCmpAlias',\n filter,\n};\n","export const figma = {\n name: 'figma-alias',\n transforms: [\n 'alias-cti',\n 'name/kebab',\n 'time/seconds',\n 'color/css',\n 'size/remToIntegerBase10',\n 'shadow/boxShadowToFigma',\n ],\n};\n","export const styleguide = {\n name: 'styleguide',\n transforms: ['attribute/cti', 'name/kebab', 'color/css'],\n};\n","export const styleguidejs = {\n name: 'styleguideJs',\n transforms: ['attribute/cti', 'name/snake', 'color/css'],\n};\n","export const tokensJs = {\n name: 'tokens-js',\n transforms: ['alias-cti', 'color/css', 'name/constant'],\n};\n","export const tokensJson = {\n name: 'tokens-json',\n transforms: [\n 'alias-cti',\n 'name/kebab',\n 'name/token-json-component',\n 'color/css',\n ],\n};\n","export const tokensScss = {\n name: 'tokens-scss',\n // to see the pre-defined \"scss\" transformation use:\n // console.log(StyleDictionaryPackage.transformGroup['scss']);\n transforms: [\n 'alias-cti',\n //'name/token-group',\n 'time/seconds',\n 'color/css',\n 'name/kebab',\n ],\n};\n","export const tokensCss = {\n name: 'tokens-css',\n // to see the pre-defined \"scss\" transformation use:\n // console.log(StyleDictionaryPackage.transformGroup['scss']);\n transforms: ['alias-cti', 'time/seconds', 'color/css', 'name/kebab'],\n};\n","export const tokensAndroid = {\n name: 'tokens-android',\n // to see the pre-defined \"android\" transformation use:\n // console.log(StyleDictionaryPackage.transformGroup['android']);\n transforms: ['attribute/cti', 'name/camel', 'size/pxToDp'],\n};\n","import { Config } from 'style-dictionary/types';\nimport { resolve } from 'node:path';\nimport type { Scheme } from './Scheme';\n\nconst tokensPath = resolve(__dirname, 'tokens');\n\nexport const getStyleDictionaryConfig = (\n scheme: Scheme,\n menuScheme: Scheme,\n source: string | null,\n output: string,\n): Config => ({\n source: [\n /* --------------------- COMMON TOKENS -------------------- */\n // global.x\n `${tokensPath}/global/**/*.json`,\n // theme.x\n `${tokensPath}/schemes/${scheme}/*.json`,\n // alias.x\n `${tokensPath}/alias/**/*.json`,\n // figma.x\n `${tokensPath}/figma/**/*.json`,\n\n /* --------------- COMMON COMPONENTS TOKENS --------------- */\n // cmp.x\n `${tokensPath}/component/**/*.json`,\n\n /* --------------- COMMON MENU SCHEME TOKENS -------------- */\n // theme.mainMenu.x\n `${tokensPath}/schemes/${menuScheme}/component/theme-main-menu.json`,\n /* --------------- CUSTOM BRAND SCHEME TOKENS --------------- */\n // Overrides for brand.x in include property if brand is specified\n // brand.x\n ...(source ? [`${source}/*.json`] : []),\n ],\n include: [\n /* --------------- BASE BRAND SCHEME TOKENS --------------- */\n // brand.x\n `${tokensPath}/brand-defaults/**/*.json`,\n ],\n platforms: {\n 'web/js': {\n transformGroup: 'tokens-js',\n buildPath: output,\n files: [\n // MODULE\n {\n destination: 'js/dev/tokens.module.all.js',\n format: 'javascript/module',\n filter: 'isNotFigma',\n },\n {\n destination: 'js/dev/tokens.module.alias.js',\n format: 'javascript/module',\n filter: 'isAlias',\n },\n {\n destination: 'js/dev/tokens.module.cmp.js',\n format: 'javascript/module',\n filter: 'isCmp',\n },\n // MODULE REDUCED\n // dev\n {\n destination: 'js/dev/tokens.module.reduced.global.js',\n format: 'javascript/module-reduced',\n filter: 'isGlobal',\n },\n {\n destination: 'js/dev/tokens.module.reduced.alias.js',\n format: 'javascript/module-reduced',\n filter: 'isAlias',\n },\n {\n destination: 'js/dev/tokens.module.reduced.cmp.js',\n format: 'javascript/module-reduced',\n filter: 'isCmp',\n },\n {\n destination: 'js/dev/tokens.module.reduced.group.js',\n format: 'javascript/module-reduced',\n filter: 'isGroup',\n },\n {\n destination: 'js/dev/tokens.module.reduced.brand.js',\n format: 'javascript/module-reduced',\n filter: 'isBrand',\n },\n // root\n {\n destination: 'js/tokens.module.reduced.alias.js',\n format: 'javascript/module-reduced',\n filter: 'isAlias',\n },\n {\n destination: 'js/tokens.module.reduced.meta.js',\n format: 'javascript/module-reduced',\n filter: {\n attributes: {\n tier: 'meta',\n },\n },\n },\n {\n destination: 'js/tokens.module.reduced.cmp.js',\n format: 'javascript/module-reduced',\n filter: 'isCmp',\n },\n // MODULE REDUCED MIN\n {\n destination: 'js/tokens.module.reduced.alias.min.js',\n format: 'javascript/module-reduced-min',\n filter: 'isAlias',\n },\n {\n destination: 'js/tokens.module.reduced.cmp.min.js',\n format: 'javascript/module-reduced-min',\n filter: 'isCmp',\n },\n // ESM\n {\n destination: 'js/tokens.esm.alias.js',\n format: 'javascript/esm-reduced-min',\n filter: 'isAlias',\n },\n {\n destination: 'js/tokens.esm.meta.js',\n format: 'javascript/esm-reduced-min',\n filter: {\n attributes: {\n tier: 'meta',\n },\n },\n },\n {\n destination: 'js/tokens.esm.cmp.js',\n format: 'javascript/esm-reduced-min',\n filter: 'isCmp',\n },\n ],\n },\n 'web/ts': {\n transformGroup: 'tokens-js',\n buildPath: output,\n files: [\n {\n destination: 'brand.d.ts',\n format: 'typescript/module-reduced-declarations',\n filter: 'isCmpAlias',\n },\n ],\n },\n 'web/html': {\n transformGroup: 'tokens-js',\n buildPath: output,\n files: [\n {\n destination: 'html/preview/tokens.alias.html',\n format: 'html/preview',\n filter: 'isAlias',\n },\n {\n destination: 'html/preview/tokens.cmp.html',\n format: 'html/preview',\n filter: 'isCmp',\n },\n {\n destination: 'html/preview/tokens.all.html',\n format: 'html/preview',\n filter: 'isCmpAlias',\n },\n ],\n },\n 'web/json': {\n transformGroup: 'tokens-json',\n buildPath: output,\n files: [\n {\n destination: 'json/tokens.json.all.json',\n format: 'json/flat',\n filter: 'isNotFigma',\n },\n {\n destination: 'json/tokens.json.global.json',\n format: 'json/flat',\n filter: 'isGlobal',\n },\n {\n destination: 'json/tokens.json.alias.json',\n format: 'json/flat',\n filter: 'isAlias',\n },\n {\n destination: 'json/tokens.json.cmp.json',\n format: 'json/flat',\n filter: 'isCmp',\n },\n {\n destination: 'json/tokens.json.group.json',\n format: 'json/flat',\n filter: 'isGroup',\n },\n {\n destination: 'json/tokens.json.brand.json',\n format: 'json/flat',\n filter: 'isBrand',\n },\n ],\n },\n 'web/scss': {\n transformGroup: 'tokens-scss',\n buildPath: output,\n files: [\n {\n destination: 'scss/dev/tokens.sass.all.scss',\n format: 'scss/variables',\n filter: 'isNotFigma',\n },\n {\n destination: 'scss/dev/tokens.sass.global.scss',\n format: 'scss/variables',\n filter: 'isGlobal',\n },\n {\n destination: 'scss/dev/tokens.sass.alias.scss',\n format: 'scss/variables',\n filter: 'isAlias',\n },\n {\n destination: 'scss/tokens.sass.alias.scss',\n format: 'scss/variables',\n filter: 'isAlias',\n },\n {\n destination: 'scss/dev/tokens.sass.cmp.scss',\n format: 'scss/variables',\n filter: 'isCmp',\n },\n {\n destination: 'scss/tokens.sass.cmp.scss',\n format: 'scss/variables',\n filter: 'isCmp',\n },\n {\n destination: 'scss/dev/tokens.sass.group.scss',\n format: 'scss/variables',\n filter: 'isGroup',\n },\n {\n destination: 'scss/dev/tokens.sass.brand.scss',\n format: 'scss/variables',\n filter: 'isBrand',\n },\n ],\n },\n 'web/css': {\n transformGroup: 'tokens-css',\n buildPath: output,\n files: [\n {\n destination: 'css/dev/tokens.css.all.css',\n format: 'css/variables',\n filter: 'isNotFigma',\n },\n {\n destination: 'css/dev/tokens.css.global.css',\n format: 'css/variables',\n filter: 'isGlobal',\n },\n {\n destination: 'css/dev/tokens.css.alias.css',\n format: 'css/variables',\n filter: 'isAlias',\n },\n {\n destination: 'css/tokens.css.alias.css',\n format: 'css/variables',\n filter: 'isAlias',\n },\n {\n destination: 'css/dev/tokens.css.cmp.css',\n format: 'css/variables',\n filter: 'isCmp',\n },\n {\n destination: 'css/tokens.css.cmp.css',\n format: 'css/variables',\n filter: 'isCmp',\n },\n {\n destination: 'css/dev/tokens.css.group.css',\n format: 'css/variables',\n filter: 'isGroup',\n },\n {\n destination: 'css/dev/tokens.css.brand.css',\n format: 'css/variables',\n filter: 'isBrand',\n },\n ],\n },\n figma: {\n transformGroup: 'figma-alias',\n buildPath: output,\n files: [\n // new Figma plugin format:\n // https://www.figma.com/community/plugin/843461159747178978/Figma-Tokens\n {\n destination: 'figma/figma_base.json',\n format: 'figma/figmatokens',\n filter: 'isFigmaBase',\n },\n {\n destination: 'figma/figma_scheme.json',\n format: 'figma/figmatokens',\n filter: 'isFigmaScheme',\n },\n ],\n },\n },\n});\n","export interface TokenTestable {\n value: unknown;\n name: string;\n}\n\nexport const validate = (tokens: TokenTestable[]) =>\n tokens.reduce(\n (acc: string[], cur: TokenTestable) =>\n typeof cur.value !== 'string' &&\n typeof cur.value !== 'number' &&\n typeof cur.value !== 'object'\n ? [...acc, cur.name]\n : acc,\n []\n );\n"],"mappings":"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