@knapsack/types 4.70.5--canary.4921.a127e88.0 → 4.70.5
Sign up to get free protection for your applications and to get access to all the features.
- package/CHANGELOG.md +20 -0
- package/dist/api/files.d.ts +24 -0
- package/dist/api/files.d.ts.map +1 -0
- package/dist/api/index.d.ts +4 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/plugins.d.ts +17 -0
- package/dist/api/plugins.d.ts.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +104 -102
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +3 -3
- package/dist/index.mjs.map +1 -1
- package/package.json +6 -6
package/dist/index.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../src/ui-config.ts","../src/color-config.ts","../src/typography-config.ts","../src/nav-customization-config.ts","../src/app-client-data/blocks.ts","../src/app-client-data/design-tokens.ts","../src/app-client-data/design-tokens-types/token-definitions.ts","../src/app-client-data/design-tokens-types/token-data.ts","../src/app-client-data/design-tokens-types/token-src-value-info.ts","../src/app-client-data/design-tokens-types/token-src.ts","../src/app-client-data/design-tokens-types/token-utils.ts","../src/app-client-data/patterns.ts","../src/app-client-data/page.header.ts","../src/app-client-data/index.ts","../src/app-client-data-v3/index.ts","../src/app-client-data-migrations/4.1.7-demos.ts","../src/app-client-data-migrations/index.ts","../src/json-schema.ts","../src/changes.ts","../src/renderers.ts","../src/renderer-client-types.ts","../src/web-sockets.ts","../src/git-providers.ts","../src/user-roles.ts"],"names":["isColor","color","colorString","__name","ColorStringStruct","define","value","ColorConfigStruct","union","type","literal","string","ColorTokenConfigStruct","HeadingLevels","FontSizeConfigValStruct","object","enums","number","FontFaceWeightStruct","FontFaceSourceFormats","FontFaceFormatsEnumStruct","FontFaceSourceStruct","FontFaceConfigStruct","optional","size","array","TextTransforms","FontStretches","TypographyLinkConfigStruct","boolean","FontSizeConfigStruct","TypographyConfigStruct","pageElementConfig","pageLinkElementConfig","pageElements","pageElementsV2","NavCustomizationConfigStruct","PrimaryNavCustomizationConfigStruct","SecondaryNavCustomizationConfigStruct","navCustomizationConfig","secondaryNavCustomizationConfig","primaryNavCustomizationConfig","customizableNavElements","UiConfigV1Struct","UiConfigV2Struct","UiConfigV3Struct","UiConfigV4Struct","defaulted","UiConfigV5Struct","UiConfigV6Struct","UiConfigV7Struct","UiConfigV8Struct","UiConfigV9Struct","UiConfigV10Struct","UiConfigStruct","BlockSizes","BlockSpacings","tokenNameDisplayFormats","strokeStyleValues","isTokenReference","val","hasTokenReferences","isNotTokenReference","TokenReferenceStruct","ye","compositeTypesRecord","tokenTypeComposites","singularTypesRecord","tokenTypeSingulars","isTokenTypeComposite","isTokenTypeSingular","expectType","TokenDataBaseStruct","t","isTokenDataComposite","tokenData","isTokenValueColor","TokenValueColorStruct","TokenDataColorNonRefStruct","TokenDataColorRefStruct","isTokenValueDimension","TokenValueDimensionStruct","TokenDataDimensionNonRefStruct","TokenDataDimensionRefStruct","isTokenValueDuration","TokenValueDurationStruct","TokenDataDurationNonRefStruct","TokenDataDurationRefStruct","isTokenValueFontWeight","TokenValueFontWeightStruct","TokenDataFontWeightNonRefStruct","TokenDataFontWeightRefStruct","TokenValueCubicBezierStruct","v","TokenDataCubicBezierNonRefStruct","TokenDataCubicBezierRefStruct","isTokenValueShadow","isObject","TokenValueShadowStruct","TokenDataShadowNonRefStruct","TokenDataShadowRefStruct","TokenValueStrokeStyleStruct","isTokenValueBorder","TokenValueBorderStruct","TokenDataBorderNonRefStruct","TokenDataBorderRefStruct","isTokenValueTransition","TokenValueTransitionStruct","TokenDataTransitionNonRefStruct","TokenDataTransitionRefStruct","TokenDataStringNonRefStruct","TokenDataStringRefStruct","TokenDataStrokeStyleNonRefStruct","TokenDataStrokeStyleRefStruct","TokenDataNumberNonRefStruct","TokenDataNumberRefStruct","TokenDataBooleanNonRefStruct","TokenDataBooleanRefStruct","assertTokenData","data","isObjKey","kind","error","isTokenSrcValueInfoSingular","tokenSrcValueInfo","isTokenSrcValueInfoComposite","isTokenSrcExtensions","extensionsObj","isTokenSrc","tokenObject","isTokenGroup","isTokenTypeVarRef","varRefCollectionInfo","getPrimitiveValue","tokenValue","isDimensionString","parseTokenDimensionValue","valueToParse","unit","parseNumberWithUnit","isSlottedText","slottedData","isSlottedTemplateDemo","isSlottedTemplateReference","StageLayouts","isDataDemo","demo","isTemplateDemo","PageHeaderSizes","isKsAppClientDataNoMeta","key","KsAppClientDataNoMetaStruct","isKsAppClientDataAndMeta","KsAppClientDataAndMetaStruct","KsMetaStateStruct","isKsMetaState","isKsAppClientDataNoMetaV3","KsAppClientDataNoMetaStructV3","isKsAppClientDataAndMetaV3","KsAppClientDataAndMetaStructV3","KsMetaStateStructV3","isKsMetaStateV3","migration417Demos","appClientData","isDraft","pattern","slotName","slotData","pId","templates","tId","demoIds","migrations","PropTypeNames","isStringProp","prop","isNumberProp","isBooleanProp","isOptionsProp","isFunctionProp","isCustomTypeScriptProp","isArrayOfObjectsProp","isObjectProp","isArrayOfStringsProp","isArrayOfNumbersProp","PatchStructRuntime","s","PatchStruct","isPatch","patch","PatchesStructRuntime","PatchesStruct","isPatches","patches","KsRemoteChangeRuntime","KsRemoteChangeStruct","isKsRemoteChange","change","KsRemoteChangesStructRuntime","KsRemoteChangesStruct","isKsRemoteChanges","changes","rendererIds","KsRendererClientEvents","ksRendererClientMetaId","WS_EVENTS","GitProviderType","MergeableState","RestActions","TextEncoding","rolesById","roles"],"mappings":"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","file":"index.js","sourcesContent":["import {\n type,\n Describe,\n literal,\n optional,\n defaulted,\n boolean,\n array,\n object,\n} from 'superstruct';\n\nimport { ExpandRecursively } from '@knapsack/utils';\n\nimport {\n ColorConfig,\n ColorConfigStruct,\n ColorStringStruct,\n} from './color-config';\n\nimport {\n FontFaceConfigStruct,\n FontFaceConfig,\n TypographyConfigStruct,\n TypographyLinkConfigStruct,\n pageElements,\n pageElementsV2,\n} from './typography-config';\n\nimport {\n customizableNavElements,\n NavCustomizationConfigStruct,\n PrimaryNavCustomizationConfigStruct,\n SecondaryNavCustomizationConfigStruct,\n} from './nav-customization-config';\n\nexport type UiConfigV1 = {\n version: 1;\n oldSillySidebarBgColor: string;\n};\n\nexport const UiConfigV1Struct: Describe<UiConfigV1> = object({\n version: literal(1),\n oldSillySidebarBgColor: ColorStringStruct,\n});\n\nexport type UiConfigV2 = {\n version: 2;\n anotherSillySidebarBgColor: string;\n};\n\nexport const UiConfigV2Struct: Describe<UiConfigV2> = object({\n version: literal(2),\n anotherSillySidebarBgColor: ColorStringStruct,\n});\n\nexport type UiConfigV3 = {\n version: 3;\n sidebarBgColor: string;\n};\n\nexport const UiConfigV3Struct: Describe<UiConfigV3> = object({\n version: literal(3),\n sidebarBgColor: ColorStringStruct,\n});\n\nexport type UiConfigV4 = {\n version: 4;\n primaryColor: ColorConfig;\n darkColor: ColorConfig;\n lightColor: ColorConfig;\n enableSidebarIcons?: boolean;\n};\nexport const UiConfigV4Struct: Describe<UiConfigV4> = object({\n version: literal(4),\n primaryColor: ColorConfigStruct,\n darkColor: ColorConfigStruct,\n lightColor: ColorConfigStruct,\n enableSidebarIcons: optional(defaulted(boolean(), true)),\n});\n\nexport type UiConfigV5 = {\n version: 5;\n primaryColor: ColorConfig;\n darkColor: ColorConfig;\n lightColor: ColorConfig;\n linkColor: ColorConfig;\n enableSidebarIcons: boolean;\n};\nexport const UiConfigV5Struct: Describe<UiConfigV5> = object({\n version: literal(5),\n primaryColor: ColorConfigStruct,\n darkColor: ColorConfigStruct,\n lightColor: ColorConfigStruct,\n linkColor: ColorConfigStruct,\n enableSidebarIcons: optional(defaulted(boolean(), true)),\n});\n\nexport interface _UiConfigV6 extends Omit<UiConfigV5, 'version'> {\n version: 6;\n appearance: {\n customFonts?: FontFaceConfig[];\n pageElements: typeof pageElements;\n };\n}\n\n// ExpandRecursively needed to avoid \"Type 'UiConfigV6' is not assignable to type 'Record<string, unknown>'.\" error\nexport type UiConfigV6 = ExpandRecursively<_UiConfigV6>;\n\nexport const UiConfigV6Struct: Describe<UiConfigV6> = object({\n version: literal(6),\n primaryColor: ColorConfigStruct,\n darkColor: ColorConfigStruct,\n lightColor: ColorConfigStruct,\n linkColor: ColorConfigStruct,\n enableSidebarIcons: optional(defaulted(boolean(), true)),\n\n appearance: type({\n customFonts: optional(array(FontFaceConfigStruct)),\n pageElements: type({\n pageTitle: optional(TypographyConfigStruct),\n pageDescription: optional(TypographyConfigStruct),\n headingLarge: optional(TypographyConfigStruct),\n headingMedium: optional(TypographyConfigStruct),\n headingSmall: optional(TypographyConfigStruct),\n bodyText: optional(TypographyConfigStruct),\n link: optional(TypographyLinkConfigStruct),\n }),\n }),\n});\n\nexport interface _UiConfigV7 extends Omit<UiConfigV6, 'version'> {\n version: 7;\n appearance: {\n navigation?: typeof customizableNavElements;\n customFonts?: UiConfigV6['appearance']['customFonts'];\n pageElements: UiConfigV6['appearance']['pageElements'];\n };\n}\n\n// ExpandRecursively needed to avoid \"Type 'UiConfig7' is not assignable to type 'Record<string, unknown>'.\" error in ui-config.xstate.ts\nexport type UiConfigV7 = ExpandRecursively<_UiConfigV7>;\n\nexport const UiConfigV7Struct: Describe<UiConfigV7> = object({\n version: literal(7),\n primaryColor: ColorConfigStruct,\n darkColor: ColorConfigStruct,\n lightColor: ColorConfigStruct,\n linkColor: ColorConfigStruct,\n enableSidebarIcons: optional(defaulted(boolean(), true)),\n\n appearance: type({\n customFonts: optional(array(FontFaceConfigStruct)),\n navigation: optional(\n type({\n primaryNav: optional(PrimaryNavCustomizationConfigStruct),\n secondaryNav: optional(SecondaryNavCustomizationConfigStruct),\n tabs: optional(NavCustomizationConfigStruct),\n }),\n ),\n pageElements: type({\n pageTitle: optional(TypographyConfigStruct),\n pageDescription: optional(TypographyConfigStruct),\n headingLarge: optional(TypographyConfigStruct),\n headingMedium: optional(TypographyConfigStruct),\n headingSmall: optional(TypographyConfigStruct),\n bodyText: optional(TypographyConfigStruct),\n link: optional(TypographyLinkConfigStruct),\n }),\n }),\n});\n\nexport interface _UiConfigV8\n extends Omit<UiConfigV7, 'version' | 'enableSidebarIcons'> {\n version: 8;\n}\n\n// ExpandRecursively needed to avoid \"Type 'UiConfig8' is not assignable to type 'Record<string, unknown>'.\" error in ui-config.xstate.ts\n// TODO: move this to @knapsack/types\nexport type UiConfigV8 = ExpandRecursively<_UiConfigV8>;\n\nexport const UiConfigV8Struct: Describe<UiConfigV8> = object({\n version: literal(8),\n primaryColor: ColorConfigStruct,\n darkColor: ColorConfigStruct,\n lightColor: ColorConfigStruct,\n linkColor: ColorConfigStruct,\n\n appearance: type({\n customFonts: optional(array(FontFaceConfigStruct)),\n navigation: optional(\n type({\n primaryNav: optional(PrimaryNavCustomizationConfigStruct),\n secondaryNav: optional(SecondaryNavCustomizationConfigStruct),\n tabs: optional(NavCustomizationConfigStruct),\n }),\n ),\n pageElements: type({\n pageTitle: optional(TypographyConfigStruct),\n pageDescription: optional(TypographyConfigStruct),\n headingLarge: optional(TypographyConfigStruct),\n headingMedium: optional(TypographyConfigStruct),\n headingSmall: optional(TypographyConfigStruct),\n bodyText: optional(TypographyConfigStruct),\n link: optional(TypographyLinkConfigStruct),\n }),\n }),\n});\n\nexport interface _UiConfigV9\n extends Omit<\n UiConfigV8,\n 'version' | 'primaryColor' | 'darkColor' | 'lightColor' | 'linkColor'\n > {\n version: 9;\n}\nexport type UiConfigV9 = ExpandRecursively<_UiConfigV9>;\n\nexport const UiConfigV9Struct: Describe<UiConfigV9> = object({\n version: literal(9),\n\n appearance: type({\n customFonts: optional(array(FontFaceConfigStruct)),\n navigation: optional(\n type({\n primaryNav: optional(PrimaryNavCustomizationConfigStruct),\n secondaryNav: optional(SecondaryNavCustomizationConfigStruct),\n tabs: optional(NavCustomizationConfigStruct),\n }),\n ),\n pageElements: type({\n pageTitle: optional(TypographyConfigStruct),\n pageDescription: optional(TypographyConfigStruct),\n headingLarge: optional(TypographyConfigStruct),\n headingMedium: optional(TypographyConfigStruct),\n headingSmall: optional(TypographyConfigStruct),\n bodyText: optional(TypographyConfigStruct),\n link: optional(TypographyLinkConfigStruct),\n }),\n }),\n});\n\nexport interface _UiConfigV10 extends Omit<UiConfigV9, 'version'> {\n version: 10;\n appearance: {\n navigation?: UiConfigV9['appearance']['navigation'];\n customFonts?: UiConfigV9['appearance']['customFonts'];\n pageElements: typeof pageElementsV2;\n };\n}\nexport type UiConfigV10 = ExpandRecursively<_UiConfigV10>;\n\nexport const UiConfigV10Struct: Describe<UiConfigV10> = object({\n version: literal(10),\n\n appearance: type({\n customFonts: optional(array(FontFaceConfigStruct)),\n navigation: optional(\n type({\n primaryNav: optional(PrimaryNavCustomizationConfigStruct),\n secondaryNav: optional(SecondaryNavCustomizationConfigStruct),\n tabs: optional(NavCustomizationConfigStruct),\n }),\n ),\n pageElements: type({\n pageTitle: optional(TypographyConfigStruct),\n pageDescription: optional(TypographyConfigStruct),\n headingXLarge: optional(TypographyConfigStruct),\n headingLarge: optional(TypographyConfigStruct),\n headingMedium: optional(TypographyConfigStruct),\n headingSmall: optional(TypographyConfigStruct),\n headingXSmall: optional(TypographyConfigStruct),\n bodyText: optional(TypographyConfigStruct),\n link: optional(TypographyLinkConfigStruct),\n }),\n }),\n});\n\nexport type UiConfigVersions =\n | typeof UiConfigV1Struct.TYPE\n | typeof UiConfigV2Struct.TYPE\n | typeof UiConfigV3Struct.TYPE\n | typeof UiConfigV4Struct.TYPE\n | typeof UiConfigV5Struct.TYPE\n | typeof UiConfigV6Struct.TYPE\n | typeof UiConfigV7Struct.TYPE\n | typeof UiConfigV8Struct.TYPE\n | typeof UiConfigV9Struct.TYPE\n | typeof UiConfigV10Struct.TYPE;\n\n// ALIASES FOR LATEST VERSIONS\nexport type UiConfig = UiConfigV10;\nexport const UiConfigStruct: typeof UiConfigV10Struct = UiConfigV10Struct;\n\nexport type NavElementNames = keyof UiConfig['appearance']['navigation'];\n","import colorString from 'color-string';\nimport { define, Describe, literal, string, type, union } from 'superstruct'; // https://docs.superstructjs.org\n\n/** Use `import { isColor } from '@knapsack/color-utils'` if you can, need to duplicate this logic due to dep cycle */\nfunction isColor(color: unknown): color is string {\n if (typeof color !== 'string') return false;\n try {\n return !!colorString.get(color);\n } catch (e) {\n return false;\n }\n}\n\nexport type ColorTokenConfig = {\n type: 'design-token';\n /** Will be **either** `-` (old) or `.` (new) separated */\n tokenName: string;\n};\nexport type ColorConfig =\n | { type: 'value'; colorValue: string }\n | ColorTokenConfig;\n\nexport const ColorStringStruct = define<string>(\n 'ColorStringStruct',\n (value) => typeof value === 'string' && isColor(value),\n);\n\nexport const ColorConfigStruct: Describe<ColorConfig> = union([\n type({\n type: literal('value'),\n colorValue: ColorStringStruct,\n }),\n type({\n type: literal('design-token'),\n tokenName: string(),\n }),\n]);\n\n// so we can check if an object is not just a ColorConfig but specifically a token\nexport const ColorTokenConfigStruct: Describe<ColorTokenConfig> = type({\n type: literal('design-token'),\n tokenName: string(),\n});\n","import {\n Describe,\n string,\n type,\n union,\n number,\n enums,\n optional,\n literal,\n array,\n size,\n boolean,\n object,\n} from 'superstruct'; // https://docs.superstructjs.org\nimport { ColorConfig, ColorConfigStruct } from './color-config';\n\nexport const HeadingLevels = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'] as const;\nexport type HeadingLevel = (typeof HeadingLevels)[number];\n\nexport type FontSizeConfigVal = {\n unit: 'px' | 'rem';\n value: number;\n};\n\nexport const FontSizeConfigValStruct: Describe<FontSizeConfigVal> = object({\n unit: enums(['rem', 'px']),\n value: number(),\n});\n\nexport type FontFaceWeight = number | string;\n\nexport const FontFaceWeightStruct: Describe<FontFaceWeight> = union([\n string(),\n number(),\n]);\n\nexport enum FontFaceSourceFormats {\n woff2 = 'woff2',\n woff = 'woff',\n}\n\nexport type FontFaceSource = {\n /**\n * Note: if /when we eventually add 'local' type support, format isn't used!\n */\n format: keyof typeof FontFaceSourceFormats;\n type: 'url';\n path: string;\n};\n\nexport const FontFaceFormatsEnumStruct = enums(['woff2', 'woff']);\n\nexport const FontFaceSourceStruct: Describe<FontFaceSource> = type({\n format: FontFaceFormatsEnumStruct,\n type: literal('url'),\n path: string(),\n});\n\nexport type FontFaceConfig = {\n /**\n * registered name of the custom font\n *\n * MDN Docs on {@link https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-family @font-face's font-family property}\n */\n family?: string;\n\n /**\n * number between 1 and 1000.\n *\n * note: since two weights are allowed (with variable fonts), this type is an\n * optional array for easy parsing down the road.\n *\n * MDN Docs on {@link https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-weight @font-face's font-weight property}.\n */\n weight?: FontFaceWeight | FontFaceWeight[];\n\n /**\n * the collection of urls / paths pointing to font files\n *\n * MDN Docs on {@link https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/src @font-face's src property}.\n */\n src?: FontFaceSource[];\n\n /**\n * the style of the custom font (ex. normal or italic)\n *\n * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-style See MDN docs on font-style}.\n */\n style?: string;\n\n // @todo: implement these later\n // display?: 'auto' | 'block' | 'swap' | 'fallback' | 'optional';\n // variationSettings?: string;\n // unicodeRange?: string; // or ideally, URange; //\n // see https://drafts.csswg.org/css-syntax-3/#urange-syntax and\n // https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/unicode-range\n};\n\nexport const FontFaceConfigStruct: Describe<FontFaceConfig> = type({\n family: optional(string()),\n weight: optional(\n union([FontFaceWeightStruct, size(array(FontFaceWeightStruct), 2)]),\n ),\n src: optional(array(FontFaceSourceStruct)),\n style: optional(string()),\n display: optional(enums(['auto', 'block', 'swap', 'fallback', 'optional'])),\n variationSettings: optional(string()),\n unicodeRange: optional(string()),\n});\n\nexport type FontSizeConfig = {\n min: FontSizeConfigVal;\n max?: FontSizeConfigVal;\n};\n\nexport enum TextTransforms {\n inherit = 'As typed',\n capitalize = 'Capitalize',\n lowercase = 'Lowercase',\n uppercase = 'Uppercase',\n}\n\nexport enum FontStretches {\n 'ultra-condensed' = 'Ultra-condensed',\n 'extra-condensed' = 'Extra-condensed',\n condensed = 'Condensed',\n 'semi-condensed' = 'Semi-condensed',\n normal = 'Normal',\n 'semi-expanded' = 'Semi-expanded',\n expanded = 'Expanded',\n 'extra-expanded' = 'Extra-expanded',\n 'ultra-expanded' = 'Ultra-expanded',\n}\n\nexport type TypographyConfig = {\n /**\n * min / max height used to future-proof way of supporting responsive typography\n */\n fontSize?: FontSizeConfig;\n\n /**\n * reminder: line-heights can also be unitless!\n */\n lineHeight?: string | number;\n fontWeight?: FontFaceWeight;\n\n /**\n * note: letter-spacing can't be unitless, unit required!\n */\n letterSpacing?: string;\n\n /**\n * if not specified, Knapsack default font, otherwise should allow for a stack of font strings + fallbacks (including the names of custom registered fonts)\n */\n fontFamily?: string;\n\n textColor?: ColorConfig;\n\n textTransform?: keyof typeof TextTransforms;\n\n fontStretch?: keyof typeof FontStretches;\n};\n\nexport interface TypographyLinkConfig {\n fontWeight?: FontFaceWeight;\n textColor?: ColorConfig;\n hoverColor?: ColorConfig;\n underline?: boolean;\n textTransform?: keyof typeof TextTransforms;\n fontStretch?: keyof typeof FontStretches;\n}\n\nexport const TypographyLinkConfigStruct: Describe<TypographyLinkConfig> = type({\n fontWeight: optional(union([string(), number()])),\n textColor: optional(ColorConfigStruct),\n hoverColor: optional(ColorConfigStruct),\n underline: optional(boolean()),\n textTransform: optional(\n enums(['inherit', 'capitalize', 'lowercase', 'uppercase']),\n ),\n fontStretch: optional(\n enums([\n 'ultra-condensed',\n 'extra-condensed',\n 'condensed',\n 'semi-condensed',\n 'normal',\n 'semi-expanded',\n 'expanded',\n 'extra-expanded',\n 'ultra-expanded',\n ]),\n ),\n});\n\nexport const FontSizeConfigStruct: Describe<FontSizeConfig> = type({\n min: FontSizeConfigValStruct,\n max: optional(FontSizeConfigValStruct),\n});\n\nexport const TypographyConfigStruct: Describe<TypographyConfig> = type({\n fontSize: optional(FontSizeConfigStruct),\n lineHeight: optional(union([string(), number()])),\n fontWeight: optional(union([string(), number()])),\n letterSpacing: optional(string()),\n fontFamily: optional(string()),\n textColor: optional(ColorConfigStruct),\n textTransform: optional(\n enums(['inherit', 'capitalize', 'lowercase', 'uppercase']),\n ),\n fontStretch: optional(\n enums([\n 'ultra-condensed',\n 'extra-condensed',\n 'condensed',\n 'semi-condensed',\n 'normal',\n 'semi-expanded',\n 'expanded',\n 'extra-expanded',\n 'ultra-expanded',\n ]),\n ),\n});\n\nconst pageElementConfig: TypographyConfig = {};\nconst pageLinkElementConfig: TypographyLinkConfig = {};\n\nexport const pageElements = {\n pageTitle: pageElementConfig,\n pageDescription: pageElementConfig,\n headingLarge: pageElementConfig,\n headingMedium: pageElementConfig,\n headingSmall: pageElementConfig,\n bodyText: pageElementConfig,\n link: pageLinkElementConfig,\n} as const;\n\nexport const pageElementsV2 = {\n pageTitle: pageElementConfig,\n pageDescription: pageElementConfig,\n headingXLarge: pageElementConfig,\n headingLarge: pageElementConfig,\n headingMedium: pageElementConfig,\n headingSmall: pageElementConfig,\n headingXSmall: pageElementConfig,\n bodyText: pageElementConfig,\n link: pageLinkElementConfig,\n} as const;\n\nexport type PageElementNames = keyof typeof pageElementsV2;\nexport type PageElementConfig = (typeof pageElementsV2)[PageElementNames];\n","import { Describe, type, union, optional } from 'superstruct'; // https://docs.superstructjs.org\nimport { ColorConfig, ColorConfigStruct } from './color-config';\nimport { TypographyConfig, TypographyConfigStruct } from './typography-config';\n\nexport interface NavCustomizationConfig extends TypographyConfig {\n accentColor?: ColorConfig;\n}\n\nexport interface PrimaryNavCustomizationConfig extends NavCustomizationConfig {\n hoverColor?: ColorConfig;\n backgroundColor?: ColorConfig;\n}\n\nexport type SecondaryNavCustomizationConfig = Omit<\n PrimaryNavCustomizationConfig,\n 'hoverColor'\n>;\n\nexport const NavCustomizationConfigStruct: Describe<NavCustomizationConfig> =\n union([\n TypographyConfigStruct,\n type({\n accentColor: optional(ColorConfigStruct),\n }),\n ]);\n\n// hoverColor: optional(ColorConfigStruct),\nexport const PrimaryNavCustomizationConfigStruct: Describe<PrimaryNavCustomizationConfig> =\n union([\n NavCustomizationConfigStruct,\n type({\n hoverColor: optional(ColorConfigStruct),\n backgroundColor: optional(ColorConfigStruct),\n }),\n ]);\n\nexport const SecondaryNavCustomizationConfigStruct: Describe<SecondaryNavCustomizationConfig> =\n union([\n NavCustomizationConfigStruct,\n type({\n backgroundColor: optional(ColorConfigStruct),\n }),\n ]);\n\nconst navCustomizationConfig: NavCustomizationConfig = {};\nconst secondaryNavCustomizationConfig: SecondaryNavCustomizationConfig = {};\nconst primaryNavCustomizationConfig: PrimaryNavCustomizationConfig = {};\n\nexport const customizableNavElements = {\n primaryNav: primaryNavCustomizationConfig,\n secondaryNav: secondaryNavCustomizationConfig,\n tabs: navCustomizationConfig,\n} as const;\n\nexport type CustomizableNavElementNames = keyof typeof customizableNavElements;\nexport type CustomizableNavElementConfig =\n (typeof customizableNavElements)[CustomizableNavElementNames];\n","import type { JSONContent } from '@tiptap/core';\nimport { TokenType } from './design-tokens-types';\n\nexport const BlockSizes = ['large', 'medium', 'small'] as const;\ntype BlockSize = (typeof BlockSizes)[number];\n\nexport const BlockSpacings = ['large', 'medium', 'small'] as const;\ntype BlockSpacing = (typeof BlockSpacings)[number];\n\nexport type BlockHeader = {\n showHeader?: boolean;\n title?: string;\n description?: string;\n};\n\n/**\n * Data for blocks made using the `createEmbedBlock` function\n */\ntype IframeBlockData = {\n url?: string;\n clickToInteract: boolean;\n height?: number | string;\n};\n\ntype BlockConfigBase<\n BlockType extends string,\n Data extends Record<string, unknown> = never,\n> = {\n // Unique across all blocks, basically a UUID upon creation\n // e.g. `ut79D2X_H`\n id: string;\n // Match this to a Slices `id` to use it\n blockType: BlockType;\n data: Data;\n header?: BlockHeader;\n size?: BlockSize;\n /** Controls the amount of spacing AFTER a block */\n spacing?: BlockSpacing;\n};\n\ntype BlockConfigUnion =\n | BlockConfigBase<\n 'component-spec-block',\n {\n patternId?: string;\n templateId?: string;\n collapsible?: boolean;\n expanded?: boolean;\n }\n >\n | BlockConfigBase<\n 'pattern-template-block',\n {\n patternId?: string;\n templateId?: string;\n demoId?: string;\n /** @deprecated */\n demoSize?: string;\n showSchemaForm?: boolean;\n showCodeSnippet?: boolean;\n hideControls?: boolean;\n allowResizing?: boolean;\n }\n >\n | BlockConfigBase<\n 'design-src-tiles',\n {\n columns?: '4' | '3' | '2' | '1';\n imageStyles?: {\n align?: 'left' | 'right' | 'center';\n background?: 'dark' | 'light';\n corners?: 'square' | 'rounded';\n fit?: 'contain' | 'fill';\n seamless?: boolean;\n size?: 'auto' | 'small' | 'medium' | 'large' | 'xsmall' | 'xlarge';\n };\n items: {\n description?: JSONContent;\n fileId: string;\n nodeId: string;\n title?: string;\n }[];\n layout?: 'grid' | 'list';\n hideComponentProps?: boolean;\n }\n >\n | BlockConfigBase<\n 'design-src-component',\n {\n fileId: string;\n componentId: string;\n contents: Array<'variants' | 'spec' | 'usage'>;\n styles?: {\n columns?: '4' | '3' | '2' | '1';\n image?: {\n align?: 'left' | 'right' | 'center';\n background?: 'dark' | 'light';\n corners?: 'square' | 'rounded';\n size?: 'auto' | 'small' | 'medium' | 'large' | 'xsmall' | 'xlarge';\n };\n layout?: 'grid' | 'list';\n };\n hideComponentProps?: boolean;\n hideComponentTitles?: boolean;\n }\n >\n | BlockConfigBase<\n 'text-editor',\n {\n autoFocus?: boolean;\n content: JSONContent;\n }\n >\n | BlockConfigBase<\n 'files-list',\n {\n files: string[];\n }\n >\n | BlockConfigBase<\n 'callout',\n {\n type: 'error' | 'info' | 'success' | 'warning';\n content: JSONContent;\n }\n >\n | BlockConfigBase<\n 'code-snippet',\n {\n content: JSONContent;\n }\n >\n | BlockConfigBase<'divider-block', Record<string, never>>\n | BlockConfigBase<\n 'guidelines',\n {\n guidelines: {\n id: string;\n image?: {\n src: string;\n title?: string;\n alt?: string;\n };\n imageFit?: 'contain' | 'cover';\n type: 'caution' | 'do' | 'dont';\n content?: JSONContent;\n }[];\n gridStyles?: {\n centered?: boolean;\n columns?: '4' | '3' | '2' | '1';\n };\n tileStyles?: {\n headerBeforeImage?: boolean;\n imageOutlined?: boolean;\n imageRounded?: boolean;\n imageSize?:\n | 'none'\n | 'small'\n | 'medium'\n | 'large'\n | 'xsmall'\n | 'xlarge';\n };\n }\n >\n | BlockConfigBase<\n 'image-block',\n {\n imageSize?: 'xs' | 's' | 'm' | 'l' | 'full';\n images?: {\n caption?: string;\n src: string;\n }[];\n }\n >\n | BlockConfigBase<\n 'shortcut-tiles',\n {\n shortcuts: {\n description?: string;\n id: string;\n image?: string;\n link: {\n external?: boolean;\n name?: string;\n path: string;\n };\n title: string;\n }[];\n gridStyles?: {\n columns?: '4' | '3' | '2' | '1';\n centered?: boolean;\n gapSize?: number;\n };\n tileStyles?: {\n imageSize?: 'none' | 'xsmall' | 'small' | 'medium' | 'large';\n outlined?: boolean;\n rounded?: boolean;\n titleSize?: 'xsmall' | 'small' | 'medium' | 'large' | 'xlarge';\n };\n }\n >\n | BlockConfigBase<\n 'table',\n {\n content: JSONContent;\n }\n >\n | BlockConfigBase<\n 'pattern-variations',\n {\n patternId?: string;\n templateId?: string;\n demoId?: string;\n variationId?: string;\n assetSetId?: string;\n excludePropValue?: string;\n includePropValue?: string;\n size?: 's' | 'm' | 'l' | 'full';\n /** @deprecated */\n hideBlockTitle?: boolean;\n }\n >\n | BlockConfigBase<\n 'design-tokens',\n {\n tokenType: TokenType | '';\n demoId: string;\n groupIds: string[];\n exclude?: string;\n include?: string;\n }\n >\n | BlockConfigBase<\n 'design-token-collection',\n {\n collectionId: string;\n }\n >\n | BlockConfigBase<\n 'pattern-list-block',\n {\n itemSize?: 'small' | 'medium' | 'large' | 'full';\n showDescriptions?: boolean;\n excludePatterns?: string[];\n }\n >\n | BlockConfigBase<\n 'pattern-status-table-block',\n {\n excludeHiddenNavItems?: boolean;\n excludePatterns?: string[];\n }\n >\n | BlockConfigBase<\n 'video',\n {\n video: {\n format: string;\n name: string;\n size: string;\n url: string;\n };\n }\n >\n /** @deprecated */\n | BlockConfigBase<\n 'design-token-block',\n {\n tokens?: {\n type?: TokenType;\n category?: string;\n tags?: string[];\n name?: string;\n exclude?: string;\n };\n demo?: {\n id?: string;\n };\n }\n >\n | BlockConfigBase<'generic-iframe', IframeBlockData>\n | BlockConfigBase<'abstract-block', IframeBlockData>\n | BlockConfigBase<'adobe-xd-block', IframeBlockData>\n | BlockConfigBase<'airtable-block', IframeBlockData>\n | BlockConfigBase<'figma-block', IframeBlockData>\n | BlockConfigBase<'framer-cloud-block', IframeBlockData>\n | BlockConfigBase<'lucidchart-block', IframeBlockData>\n | BlockConfigBase<'vimeo-block', IframeBlockData>\n | BlockConfigBase<'youtube-block', IframeBlockData>\n | BlockConfigBase<'whimsical-block', IframeBlockData>\n | BlockConfigBase<\n 'markdown-block',\n {\n md?: string | string[];\n /** Automatically switches to edit mode + autofocuses on the editor */\n autoEdit?: boolean;\n columns?: number;\n }\n >;\n\n/**\n * This is the config for a block - which is what is stored in `block.ID.json` and available at `data.db.blocks.byId[blockId]`\n *\n * @example\n * // Use the first generic to filter down to a specific block type\n * type PatternListBlockConfig = BlockConfig<'pattern-list-block'>;\n * // Access the field `data` by doing this:\n * type Data= BlockConfig<'pattern-list-block'>['data'];\n */\nexport type BlockConfig<\n BlockType extends BlockConfigUnion['blockType'] = BlockConfigUnion['blockType'],\n> = Extract<BlockConfigUnion, { blockType: BlockType }>;\n\n/** Block Collections can be in several locations */\nexport type BlockCollectionLocation =\n | {\n type: 'page';\n pageId: string;\n }\n /** Tab on Pattern Page */\n | {\n type: 'patternSubPage';\n patternId: string;\n subPageId: string;\n }\n /** At bottom of Pattern Template page (under Spec table) - least used location */\n | {\n type: 'patternTemplate';\n patternId: string;\n templateId: string;\n };\n","export const tokenNameDisplayFormats = {\n default: 'Default',\n android: 'Android',\n cssVar: 'CSS Var',\n json: 'JSON',\n less: 'Less',\n scss: 'SCSS',\n swift: 'Swift',\n} as const;\n\nexport type TokenNameDisplayFormat = keyof typeof tokenNameDisplayFormats;\n","import * as s from 'superstruct';\n\nexport const strokeStyleValues = [\n 'solid',\n 'dashed',\n 'dotted',\n 'double',\n 'groove',\n 'ridge',\n 'outset',\n 'inset',\n] as const;\n\n/**\n * Don't use this one, use this instead:\n * @see {@link TokenDefinitionSingular}\n */\ntype TokenDefinitionSingularRaw =\n | { type: 'string'; value: string }\n | { type: 'number'; value: number }\n | { type: 'boolean'; value: boolean }\n | { type: 'color'; value: string }\n | {\n type: 'strokeStyle';\n value: (typeof strokeStyleValues)[number];\n }\n | { type: 'dimension'; value: `${number}${'px' | 'rem' | 'em' | '%'}` }\n | { type: 'duration'; value: `${number}ms` }\n // | { type: 'fontFamily'; value: string | string[] }\n | {\n type: 'fontWeight';\n // @TODO: Include union of possible strings https://tr.designtokens.org/format/#font-weight\n value: string | number;\n }\n | { type: 'cubicBezier'; value: [number, number, number, number] };\n\n/**\n * Definitions for both singular (non-composite) tokens.\n * Use first generic param to get just that type.\n * @example\n * ```ts\n * type TokenDefinitionDimension = TokenDefinitionSingular<'dimension'>\n * ```\n */\nexport type TokenDefinitionSingular<\n TheTokenType extends TokenDefinitionSingularRaw['type'] = TokenDefinitionSingularRaw['type'],\n> = Extract<TokenDefinitionSingularRaw, { type: TheTokenType }>;\n\n/**\n * Don't use this one, use this instead:\n * @see {@link TokenDefinitionComposite}\n */\ntype TokenDefinitionCompositeRaw =\n | {\n type: 'border';\n value: {\n color: { type: 'color' };\n style: { type: 'strokeStyle' };\n width: { type: 'dimension' };\n };\n }\n | {\n type: 'shadow';\n value: {\n color: { type: 'color' };\n offsetX: { type: 'dimension' };\n offsetY: { type: 'dimension' };\n spread: { type: 'dimension' };\n blur: { type: 'dimension' };\n inset: { type: 'boolean' };\n };\n }\n | {\n type: 'transition';\n value: {\n duration: { type: 'duration' };\n delay: { type: 'duration' };\n timingFunction: { type: 'cubicBezier' };\n };\n };\n// | {\n// type: 'gradient';\n// value: {\n// color: { type: 'color' };\n// position: { type: 'dimension' };\n// }[];\n// };\n\n/**\n * Definitions for composite tokens.\n * Use first generic param to get just that type.\n * @example\n * ```ts\n * type TokenDefinitionShadow = TokenDefinitionComposite<'shadow'>\n * ```\n */\nexport type TokenDefinitionComposite<\n TheTokenType extends TokenDefinitionCompositeRaw['type'] = TokenDefinitionCompositeRaw['type'],\n> = Extract<TokenDefinitionCompositeRaw, { type: TheTokenType }>;\n\n/**\n * Definitions for both singular and composite tokens.\n * Use first generic param to get just that type.\n * @example\n * ```ts\n * type TokenDefinitionDimension = TokenDefinition<'dimension'>\n * ```\n */\nexport type TokenDefinition<\n TheTokenType extends\n | TokenDefinitionComposite['type']\n | TokenDefinitionSingular['type'] =\n | TokenDefinitionComposite['type']\n | TokenDefinitionSingular['type'],\n> = Extract<\n TokenDefinitionComposite | TokenDefinitionSingular,\n { type: TheTokenType }\n>;\n\nexport type TokenReference = `{${string}}`;\n/** ensures there is no `{}` */\nexport type NotTokenReference<T> = T extends TokenReference ? never : T;\n\nexport function isTokenReference(val: unknown): val is TokenReference {\n if (typeof val !== 'string') return false;\n // total times `{` appears in `val`\n // Handle situation `{a.b} {c.d}`. Ensure count of `{` and `}` === 1. This\n // guarantees we ONLY support a single reference, ie `{a.b}`\n const totalOpenBrackets = val.split('{').length - 1;\n return totalOpenBrackets === 1 && val.startsWith('{') && val.endsWith('}');\n}\n\nexport function hasTokenReferences(val: unknown): boolean {\n return typeof val === 'string' && val.includes('{');\n}\n\nexport function isNotTokenReference<T>(\n value: T,\n): value is NotTokenReference<T> {\n return !isTokenReference(value);\n}\n\nexport const TokenReferenceStruct = s.define<TokenReference>(\n 'Token Reference',\n (value) => {\n if (typeof value !== 'string') return false;\n if (isNotTokenReference(value)) {\n return 'Must start and end with curly braces';\n }\n return true;\n },\n);\n\nexport type TokenType = TokenDefinition['type'];\nexport type TokenTypeComposite = TokenDefinitionComposite['type'];\nexport type TokenTypeSingular = TokenDefinitionSingular['type'];\nexport type TokenValueSingular = TokenDefinitionSingular['value'];\n\n// We make a Record to ensure we have *every* possible value\n// b/c TS will yell at us if a new one is added but isn't included here\n// then we make an array out of them, so we can be sure we have *every* possible value\nconst compositeTypesRecord: Record<TokenTypeComposite, TokenTypeComposite> = {\n border: 'border',\n shadow: 'shadow',\n transition: 'transition',\n};\nexport const tokenTypeComposites = Object.values(compositeTypesRecord);\nconst singularTypesRecord: Record<TokenTypeSingular, TokenTypeSingular> = {\n string: 'string',\n number: 'number',\n boolean: 'boolean',\n color: 'color',\n dimension: 'dimension',\n duration: 'duration',\n // fontFamily: 'fontFamily',\n fontWeight: 'fontWeight',\n strokeStyle: 'strokeStyle',\n cubicBezier: 'cubicBezier',\n};\nexport const tokenTypeSingulars = Object.values(singularTypesRecord);\n/**\n * @deprecated You probably want `isTokenDataComposite`\n * @see {isTokenDataComposite}\n */\nexport function isTokenTypeComposite(\n type: TokenType,\n): type is TokenTypeComposite {\n return tokenTypeComposites.includes(type as TokenTypeComposite);\n}\n\nexport function isTokenTypeSingular(\n type: TokenType,\n): type is TokenTypeSingular {\n return tokenTypeSingulars.includes(type as TokenTypeSingular);\n}\n","import { Simplify, expectType, isObjKey, isObject } from '@knapsack/utils';\nimport * as s from 'superstruct';\nimport {\n NotTokenReference,\n TokenDefinition,\n TokenDefinitionComposite,\n TokenDefinitionSingular,\n TokenReference,\n TokenReferenceStruct,\n TokenType,\n hasTokenReferences,\n isTokenTypeComposite,\n} from './token-definitions';\nimport { TokenKsExtensions, TokenOrder } from './token-misc';\nimport { TokenSrcValue } from './token-src';\n\n/** Used for tokens AND groups */\ntype TokenDataBothCommon = {\n id: string;\n description?: string;\n};\n\n// Shows what a fully de-referenced `value` of a composite token would be\ntype CreateDataValueForComposite<\n ValueObj extends Record<string, { type: TokenDefinitionSingular['type'] }>,\n> = {\n [Key in keyof ValueObj]: TokenDefinitionSingular<\n ValueObj[Key]['type']\n >['value'];\n};\n\nexpectType<\n CreateDataValueForComposite<TokenDefinitionComposite<'shadow'>['value']>[]\n>([\n {\n inset: false,\n color: '#000',\n offsetX: '0px',\n offsetY: '0px',\n spread: '0px',\n blur: '0px',\n },\n {\n color: '#000',\n offsetX: '0px',\n offsetY: '0px',\n spread: '0px',\n blur: '0px',\n inset: true,\n },\n]);\n\ntype TokenDataCommon<\n Info extends {\n /** Basically the ID */\n type: TokenDefinition['type'];\n value: unknown;\n },\n> = TokenDataBothCommon & {\n type: Info['type'];\n value: Info['value'];\n /**\n * Extracted from `$extensions['cloud.knapsack'].token`\n */\n tokenConfig?: TokenKsExtensions['token'];\n /**\n * Tokens that are references by this token\n * @todo will need to change for shadow\n * @example\n * ```\n * [\n * ['color.primary', 'color.secondary'],\n * ['spacing.medium']\n * ]\n * ```\n */\n references?: Array<string[]>;\n /**\n * Tokens that use this as a reference token\n * @see {CreateTokenData.references}\n * @example\n * * ```\n * [\n * ['color.primary', 'color.secondary'],\n * ['spacing.medium']\n * ]\n * ```\n */\n // referencedBy?: Array<string[]>;\n};\n\ntype CreateTokenData<\n Info extends {\n type: TokenDefinition['type'];\n value: unknown;\n },\n> =\n | ({\n kind: 'ref';\n /** Has `{}` removed */\n referencedTokenId: string;\n originalValue: TokenReference;\n } & TokenDataCommon<Info>)\n | ({\n kind: 'static';\n originalValue: NotTokenReference<TokenSrcValue<Info['type']>>;\n } & TokenDataCommon<Info>);\n\nconst TokenDataBaseStruct: s.Describe<\n TokenDataBothCommon & {\n references?: Array<string[]>;\n tokenConfig?: TokenKsExtensions['token'];\n }\n> = s.type({\n id: s.string(),\n description: s.optional(s.string()),\n references: s.optional(s.array(s.array(s.string()))),\n tokenConfig: s.optional(\n s.type({\n purpose: s.optional(s.string()),\n }),\n ),\n});\n\ntype TokenDataSingularRaw = {\n // ignore the key, this makes a discriminated union out of the values\n [TokenDef in TokenDefinitionSingular as TokenDef['type']]: Simplify<\n CreateTokenData<TokenDef>\n >;\n}[TokenDefinitionSingular['type']];\n\nexport type TokenDataSingular<\n TT extends TokenDataSingularRaw['type'] = TokenDataSingularRaw['type'],\n> = Extract<TokenDataSingularRaw, { type: TT }>;\n\nexpectType<TokenDataSingular[]>([\n {\n type: 'duration',\n value: '1ms',\n originalValue: '1ms',\n id: '1',\n kind: 'static',\n },\n {\n type: 'duration',\n value: '1ms',\n kind: 'ref',\n id: '1',\n originalValue: '{a.b}',\n referencedTokenId: '1',\n },\n // @ts-expect-error - kind is wrong\n {\n type: 'duration',\n value: '1ms',\n originalValue: '1ms',\n id: '1',\n kind: 'ref',\n },\n // @ts-expect-error - kind is wrong\n {\n type: 'duration',\n value: '1ms',\n kind: 'static',\n id: '1',\n originalValue: '{a.b}',\n referencedTokenId: '1',\n },\n {\n type: 'color',\n value: '#000',\n kind: 'static',\n id: '1',\n originalValue: '#000',\n },\n {\n type: 'color',\n value: '#000',\n kind: 'ref',\n id: '1',\n originalValue: '{c.b}',\n referencedTokenId: 'c.b',\n },\n {\n type: 'cubicBezier',\n kind: 'static',\n value: [0, 0, 0, 1],\n originalValue: [0, 0, 0, 1],\n id: '1',\n },\n]);\n\ntype TokenDataCompositeRaw = {\n [TokenType in TokenDefinitionComposite['type']]: Simplify<\n CreateTokenData<{\n type: TokenType;\n value: Simplify<\n CreateDataValueForComposite<\n TokenDefinitionComposite<TokenType>['value']\n >\n >;\n }>\n >;\n}[TokenDefinitionComposite['type']];\n\nexport type TokenDataComposite<\n TheTokenType extends TokenDataCompositeRaw['type'] = TokenDataCompositeRaw['type'],\n> = Extract<TokenDataCompositeRaw, { type: TheTokenType }>;\n\nexport function isTokenDataComposite(\n tokenData: TokenData,\n): tokenData is TokenDataComposite {\n return isTokenTypeComposite(tokenData.type);\n}\n\nexpectType<TokenDataComposite[]>([\n {\n type: 'border',\n kind: 'static',\n id: '1',\n value: {\n color: '#000',\n style: 'solid',\n width: '1px',\n },\n originalValue: {\n color: '#000',\n style: 'solid',\n width: '1px',\n },\n },\n {\n type: 'border',\n kind: 'ref',\n referencedTokenId: 'a.b',\n id: '1',\n value: {\n color: 'red',\n style: 'dashed',\n width: '2px',\n },\n originalValue: '{a.b}',\n },\n {\n type: 'shadow',\n value: {\n color: '#000',\n offsetX: '1px',\n offsetY: '1px',\n blur: '1px',\n spread: '1px',\n inset: false,\n },\n originalValue: {\n color: '#000',\n offsetX: '{a.a}',\n offsetY: '1px',\n blur: '1px',\n spread: '1px',\n inset: false,\n },\n id: '1',\n kind: 'static',\n },\n {\n type: 'shadow',\n kind: 'ref',\n referencedTokenId: 'a.b',\n value: {\n inset: true,\n color: 'red',\n offsetX: '1px',\n blur: '2px',\n offsetY: '3px',\n spread: '4px',\n },\n originalValue: '{a.b}',\n id: '1',\n },\n {\n type: 'transition',\n value: {\n duration: '100ms',\n delay: '200ms',\n timingFunction: [0, 0, 0, 0],\n },\n originalValue: '{a.b}',\n kind: 'ref',\n referencedTokenId: 'a.b',\n id: '1',\n },\n {\n type: 'transition',\n kind: 'static',\n value: {\n duration: '100ms',\n delay: '200ms',\n timingFunction: [0, 0, 0, 0],\n },\n originalValue: {\n duration: '100ms',\n delay: '{a.c}',\n timingFunction: '{a.c}',\n },\n id: '1',\n },\n {\n type: 'transition',\n kind: 'static',\n value: {\n duration: '100ms',\n delay: '200ms',\n timingFunction: [0, 0, 0, 0],\n },\n originalValue: {\n duration: '100ms',\n delay: '200ms',\n timingFunction: [0, 0, 0, 0],\n },\n id: '1',\n },\n]);\n\nexport type TokenData<\n TheTokenType extends TokenDataSingular['type'] | TokenDataComposite['type'] =\n | TokenDataSingular['type']\n | TokenDataComposite['type'],\n> = Extract<TokenDataSingular | TokenDataComposite, { type: TheTokenType }>;\n\nexport type TokenGroupData = Simplify<\n {\n type?: TokenType;\n /**\n * Extracted from `$extensions['cloud.knapsack'].group`\n */\n groupConfig?: TokenKsExtensions['group'];\n children: TokenOrder;\n } & TokenDataBothCommon\n>;\n\n/**\n * @deprecated Use `TokenValueColorStruct` instead\n */\nexport function isTokenValueColor(\n value: unknown,\n): value is TokenDefinitionSingular<'color'>['value'] {\n return typeof value === 'string' && !hasTokenReferences(value);\n}\n\nexport const TokenValueColorStruct = s.define<TokenData<'color'>['value']>(\n 'Color Value',\n (value) => {\n if (typeof value !== 'string') {\n return 'Value must be a string';\n }\n if (value === '') {\n return 'Value must not be empty';\n }\n if (hasTokenReferences(value)) {\n return 'Value must not contain {} (token references)';\n }\n return true;\n },\n);\n\nconst TokenDataColorNonRefStruct: s.Describe<\n Extract<TokenData<'color'>, { kind: 'static' }>\n> = s.assign(\n s.type({\n type: s.literal('color'),\n value: TokenValueColorStruct,\n kind: s.literal('static'),\n originalValue: TokenValueColorStruct,\n }),\n TokenDataBaseStruct,\n);\n\nconst TokenDataColorRefStruct: s.Describe<\n Extract<TokenData<'color'>, { kind: 'ref' }>\n> = s.assign(\n s.type({\n type: s.literal('color'),\n value: TokenValueColorStruct,\n kind: s.literal('ref'),\n originalValue: TokenReferenceStruct,\n referencedTokenId: s.string(),\n }),\n TokenDataBaseStruct,\n);\n\n/**\n * @deprecated Use `TokenValueDimensionStruct` instead\n */\nexport function isTokenValueDimension(\n value: unknown,\n): value is TokenDefinitionSingular<'dimension'>['value'] {\n return (\n typeof value === 'string' &&\n (value.endsWith('px') || value.endsWith('rem')) &&\n !hasTokenReferences(value)\n );\n}\n\nexport const TokenValueDimensionStruct = s.define<\n TokenData<'dimension'>['value']\n>('Dimension Value', (value) => {\n if (typeof value !== 'string') {\n return 'Value must be a string';\n }\n if (hasTokenReferences(value)) {\n return 'Value must not contain {} (token references)';\n }\n if (\n !value.endsWith('px') &&\n !value.endsWith('rem') &&\n !value.endsWith('em') &&\n !value.endsWith('%')\n ) {\n return 'Value must end with px, rem, em or %';\n }\n return true;\n});\n\nconst TokenDataDimensionNonRefStruct: s.Describe<\n Extract<TokenData<'dimension'>, { kind: 'static' }>\n> = s.assign(\n s.type({\n type: s.literal('dimension'),\n value: TokenValueDimensionStruct,\n kind: s.literal('static'),\n originalValue: TokenValueDimensionStruct,\n }),\n TokenDataBaseStruct,\n);\n\nconst TokenDataDimensionRefStruct: s.Describe<\n Extract<TokenData<'dimension'>, { kind: 'ref' }>\n> = s.assign(\n s.type({\n type: s.literal('dimension'),\n value: TokenValueDimensionStruct,\n kind: s.literal('ref'),\n originalValue: TokenReferenceStruct,\n referencedTokenId: s.string(),\n }),\n TokenDataBaseStruct,\n);\n\n/**\n * @deprecated Use `TokenValueDurationStruct` instead\n */\nexport function isTokenValueDuration(\n value: unknown,\n): value is TokenDefinitionSingular<'duration'>['value'] {\n return (\n typeof value === 'string' &&\n value.endsWith('ms') &&\n !hasTokenReferences(value)\n );\n}\n\nexport const TokenValueDurationStruct = s.define<\n TokenData<'duration'>['value']\n>('Duration Value', (value) => {\n if (typeof value !== 'string') {\n return 'Value must be a string';\n }\n if (hasTokenReferences(value)) {\n return 'Value must not contain {} (token references)';\n }\n\n const durationRegex = /^\\d+ms$/;\n if (!durationRegex.test(value)) {\n return 'Value must be a number followed by \"ms\" (e.g., \"100ms\")';\n }\n\n return true;\n});\n\nconst TokenDataDurationNonRefStruct: s.Describe<\n Extract<TokenData<'duration'>, { kind: 'static' }>\n> = s.assign(\n s.type({\n type: s.literal('duration'),\n value: TokenValueDurationStruct,\n kind: s.literal('static'),\n originalValue: TokenValueDurationStruct,\n }),\n TokenDataBaseStruct,\n);\n\nconst TokenDataDurationRefStruct: s.Describe<\n Extract<TokenData<'duration'>, { kind: 'ref' }>\n> = s.assign(\n s.type({\n type: s.literal('duration'),\n value: TokenValueDurationStruct,\n kind: s.literal('ref'),\n originalValue: TokenReferenceStruct,\n referencedTokenId: s.string(),\n }),\n TokenDataBaseStruct,\n);\n\n/**\n * @deprecated Use `TokenValueFontWeightStruct` instead\n */\nexport function isTokenValueFontWeight(\n value: unknown,\n): value is TokenDefinitionSingular<'fontWeight'>['value'] {\n return (\n (typeof value === 'string' || typeof value === 'number') &&\n !hasTokenReferences(value)\n );\n}\n\nexport const TokenValueFontWeightStruct = s.define<\n TokenData<'fontWeight'>['value']\n>('Font Weight Value', (value) => {\n if (typeof value !== 'string' && typeof value !== 'number') {\n return 'Value must be a string or number';\n }\n if (hasTokenReferences(value)) {\n return 'Value must not contain {} (token references)';\n }\n return true;\n});\n\nconst TokenDataFontWeightNonRefStruct: s.Describe<\n Extract<TokenData<'fontWeight'>, { kind: 'static' }>\n> = s.assign(\n s.type({\n type: s.literal('fontWeight'),\n value: TokenValueFontWeightStruct,\n kind: s.literal('static'),\n originalValue: TokenValueFontWeightStruct,\n }),\n TokenDataBaseStruct,\n);\n\nconst TokenDataFontWeightRefStruct: s.Describe<\n Extract<TokenData<'fontWeight'>, { kind: 'ref' }>\n> = s.assign(\n s.type({\n type: s.literal('fontWeight'),\n value: TokenValueFontWeightStruct,\n kind: s.literal('ref'),\n originalValue: TokenReferenceStruct,\n referencedTokenId: s.string(),\n }),\n TokenDataBaseStruct,\n);\n\nexport const TokenValueCubicBezierStruct = s.define<\n TokenData<'cubicBezier'>['value']\n>('Cubic Bezier Value', (value) => {\n if (!Array.isArray(value)) {\n return 'Value must be an array';\n }\n if (value.length !== 4) {\n return 'Value must be an array of 4 numbers';\n }\n if (!value.every((v) => typeof v === 'number')) {\n return 'Value must be an array of 4 numbers';\n }\n // check if the first and third values are between 0 and 1\n // cubic-bezier( <number [0,1]> , <number> , <number [0,1]> , <number> )\n if (value[0] < 0 || value[0] > 1 || value[2] < 0 || value[2] > 1) {\n return 'The first and third cubicBezier values must be between 0 and 1';\n }\n return true;\n});\n\nconst TokenDataCubicBezierNonRefStruct: s.Describe<\n Extract<TokenData<'cubicBezier'>, { kind: 'static' }>\n> = s.assign(\n s.type({\n type: s.literal('cubicBezier'),\n value: TokenValueCubicBezierStruct,\n kind: s.literal('static'),\n originalValue: TokenValueCubicBezierStruct,\n }),\n TokenDataBaseStruct,\n);\n\nconst TokenDataCubicBezierRefStruct: s.Describe<\n Extract<TokenData<'cubicBezier'>, { kind: 'ref' }>\n> = s.assign(\n s.type({\n type: s.literal('cubicBezier'),\n value: TokenValueCubicBezierStruct,\n kind: s.literal('ref'),\n originalValue: TokenReferenceStruct,\n referencedTokenId: s.string(),\n }),\n TokenDataBaseStruct,\n);\n\n/**\n * Determines if it's a \"shadow\" token value AND totally de-referenced\n */\nexport function isTokenValueShadow(\n value: unknown,\n): value is Simplify<\n CreateDataValueForComposite<TokenDefinitionComposite<'shadow'>['value']>\n> {\n return (\n isObject(value) &&\n isTokenValueColor(value.color) &&\n isTokenValueDimension(value.offsetX) &&\n isTokenValueDimension(value.offsetY) &&\n isTokenValueDimension(value.blur) &&\n isTokenValueDimension(value.spread)\n );\n}\n\nconst TokenValueShadowStruct = s.define<TokenData<'shadow'>['value']>(\n 'Shadow Value',\n (value) => {\n if (isTokenValueShadow(value)) return true;\n return `Expected a shadow value, got ${JSON.stringify(value)}`;\n },\n);\n\nconst TokenDataShadowNonRefStruct: s.Describe<\n Extract<TokenData<'shadow'>, { kind: 'static' }>\n> = s.assign(\n s.type({\n type: s.literal('shadow'),\n value: TokenValueShadowStruct,\n kind: s.literal('static'),\n originalValue: s.type({\n color: s.union([TokenValueColorStruct, TokenReferenceStruct]),\n offsetX: s.union([TokenValueDimensionStruct, TokenReferenceStruct]),\n offsetY: s.union([TokenValueDimensionStruct, TokenReferenceStruct]),\n blur: s.union([TokenValueDimensionStruct, TokenReferenceStruct]),\n spread: s.union([TokenValueDimensionStruct, TokenReferenceStruct]),\n inset: s.union([\n // marking this as optional b/c it could be `undefined` instead of `false`\n s.optional(s.boolean()),\n TokenReferenceStruct,\n ]),\n }),\n }),\n TokenDataBaseStruct,\n);\n\nconst TokenDataShadowRefStruct: s.Describe<\n Extract<TokenData<'shadow'>, { kind: 'ref' }>\n> = s.assign(\n s.type({\n type: s.literal('shadow'),\n value: TokenValueShadowStruct,\n kind: s.literal('ref'),\n originalValue: TokenReferenceStruct,\n referencedTokenId: s.string(),\n }),\n TokenDataBaseStruct,\n);\n\nexport const TokenValueStrokeStyleStruct = s.union([\n s.literal('solid'),\n s.literal('dashed'),\n s.literal('dotted'),\n s.literal('double'),\n s.literal('groove'),\n s.literal('ridge'),\n s.literal('outset'),\n s.literal('inset'),\n]);\n\n/**\n * Determines if it's a \"border\" token value AND totally de-referenced\n */\nexport function isTokenValueBorder(\n value: unknown,\n): value is Simplify<\n CreateDataValueForComposite<TokenDefinitionComposite<'border'>['value']>\n> {\n return (\n isObject(value) &&\n TokenValueColorStruct.is(value.color) &&\n TokenValueStrokeStyleStruct.is(value.style) &&\n TokenValueDimensionStruct.is(value.width)\n );\n}\n\nconst TokenValueBorderStruct = s.define<TokenData<'border'>['value']>(\n 'Border Value',\n isTokenValueBorder,\n);\n\nconst TokenDataBorderNonRefStruct: s.Describe<\n Extract<TokenData<'border'>, { kind: 'static' }>\n> = s.assign(\n s.type({\n type: s.literal('border'),\n value: TokenValueBorderStruct,\n kind: s.literal('static'),\n originalValue: s.type({\n color: s.union([TokenValueColorStruct, TokenReferenceStruct]),\n style: s.union([TokenValueStrokeStyleStruct, TokenReferenceStruct]),\n width: s.union([TokenValueDimensionStruct, TokenReferenceStruct]),\n }),\n }),\n TokenDataBaseStruct,\n);\n\nconst TokenDataBorderRefStruct: s.Describe<\n Extract<TokenData<'border'>, { kind: 'ref' }>\n> = s.assign(\n s.type({\n type: s.literal('border'),\n value: TokenValueBorderStruct,\n kind: s.literal('ref'),\n originalValue: TokenReferenceStruct,\n referencedTokenId: s.string(),\n }),\n TokenDataBaseStruct,\n);\n\n/**\n * Determines if it's a \"transition\" token value AND totally de-referenced\n */\nexport function isTokenValueTransition(\n value: unknown,\n): value is Simplify<\n CreateDataValueForComposite<TokenDefinitionComposite<'transition'>['value']>\n> {\n return (\n isObject(value) &&\n TokenValueCubicBezierStruct.is(value.timingFunction) &&\n TokenValueDurationStruct.is(value.duration) &&\n TokenValueDurationStruct.is(value.delay)\n );\n}\nconst TokenValueTransitionStruct = s.define<TokenData<'transition'>['value']>(\n 'Transition Value',\n isTokenValueTransition,\n);\n\nconst TokenDataTransitionNonRefStruct: s.Describe<\n Extract<TokenData<'transition'>, { kind: 'static' }>\n> = s.assign(\n s.type({\n type: s.literal('transition'),\n value: TokenValueTransitionStruct,\n kind: s.literal('static'),\n originalValue: s.type({\n timingFunction: s.union([\n TokenValueCubicBezierStruct,\n TokenReferenceStruct,\n ]),\n duration: s.union([TokenValueDurationStruct, TokenReferenceStruct]),\n delay: s.union([TokenValueDurationStruct, TokenReferenceStruct]),\n }),\n }),\n TokenDataBaseStruct,\n);\n\nconst TokenDataTransitionRefStruct: s.Describe<\n Extract<TokenData<'transition'>, { kind: 'ref' }>\n> = s.assign(\n s.type({\n type: s.literal('transition'),\n value: TokenValueTransitionStruct,\n kind: s.literal('ref'),\n originalValue: TokenReferenceStruct,\n referencedTokenId: s.string(),\n }),\n TokenDataBaseStruct,\n);\n\nconst TokenDataStringNonRefStruct: s.Describe<\n Extract<TokenData<'string'>, { kind: 'static' }>\n> = s.assign(\n s.type({\n type: s.literal('string'),\n value: s.string(),\n kind: s.literal('static'),\n originalValue: s.string(),\n }),\n TokenDataBaseStruct,\n);\n\nconst TokenDataStringRefStruct: s.Describe<\n Extract<TokenData<'string'>, { kind: 'ref' }>\n> = s.assign(\n s.type({\n type: s.literal('string'),\n value: s.string(),\n kind: s.literal('ref'),\n originalValue: TokenReferenceStruct,\n referencedTokenId: s.string(),\n }),\n TokenDataBaseStruct,\n);\n\nconst TokenDataStrokeStyleNonRefStruct: s.Describe<\n Extract<TokenData<'strokeStyle'>, { kind: 'static' }>\n> = s.assign(\n s.type({\n type: s.literal('strokeStyle'),\n value: TokenValueStrokeStyleStruct,\n kind: s.literal('static'),\n originalValue: TokenValueStrokeStyleStruct,\n }),\n TokenDataBaseStruct,\n);\n\nconst TokenDataStrokeStyleRefStruct: s.Describe<\n Extract<TokenData<'strokeStyle'>, { kind: 'ref' }>\n> = s.assign(\n s.type({\n type: s.literal('strokeStyle'),\n value: TokenValueStrokeStyleStruct,\n kind: s.literal('ref'),\n originalValue: TokenReferenceStruct,\n referencedTokenId: TokenValueStrokeStyleStruct,\n }),\n TokenDataBaseStruct,\n);\n// const TokenDataFontFamilyNonRefStruct: s.Describe<\n// Extract<TokenData<'fontFamily'>, { kind: 'static' }>\n// > = s.assign(\n// s.type({\n// type: s.literal('fontFamily'),\n// value: s.union([s.string(), s.array(s.string())]),\n// kind: s.literal('static'),\n// originalValue: s.union([s.string(), s.array(s.string())]),\n// }),\n// TokenDataBaseStruct,\n// );\n\n// const TokenDataFontFamilyRefStruct: s.Describe<\n// Extract<TokenData<'fontFamily'>, { kind: 'ref' }>\n// > = s.assign(\n// s.type({\n// type: s.literal('fontFamily'),\n// value: s.union([s.string(), s.array(s.string())]),\n// kind: s.literal('ref'),\n// originalValue: TokenReferenceStruct,\n// referencedTokenId: s.string(),\n// }),\n// TokenDataBaseStruct,\n// );\n\nconst TokenDataNumberNonRefStruct: s.Describe<\n Extract<TokenData<'number'>, { kind: 'static' }>\n> = s.assign(\n s.type({\n type: s.literal('number'),\n value: s.number(),\n kind: s.literal('static'),\n originalValue: s.number(),\n }),\n TokenDataBaseStruct,\n);\n\nconst TokenDataNumberRefStruct: s.Describe<\n Extract<TokenData<'number'>, { kind: 'ref' }>\n> = s.assign(\n s.type({\n type: s.literal('number'),\n value: s.number(),\n kind: s.literal('ref'),\n originalValue: TokenReferenceStruct,\n referencedTokenId: s.string(),\n }),\n TokenDataBaseStruct,\n);\n\nconst TokenDataBooleanNonRefStruct: s.Describe<\n Extract<TokenData<'boolean'>, { kind: 'static' }>\n> = s.assign(\n s.type({\n type: s.literal('boolean'),\n value: s.boolean(),\n kind: s.literal('static'),\n originalValue: s.boolean(),\n }),\n TokenDataBaseStruct,\n);\n\nconst TokenDataBooleanRefStruct: s.Describe<\n Extract<TokenData<'boolean'>, { kind: 'ref' }>\n> = s.assign(\n s.type({\n type: s.literal('boolean'),\n value: s.boolean(),\n kind: s.literal('ref'),\n originalValue: TokenReferenceStruct,\n referencedTokenId: s.string(),\n }),\n TokenDataBaseStruct,\n);\n\n// Instead of using `s.union` to combine all the token data structs,\n// we first find out what \"type\" the token is\n// then we find out `kind` - which is our 2nd layer of discriminated union\n// and then use the specific struct\n// that way the errors are more specific to the actual declared token \"type\"\n// In a nutshell, `s.union` is not very good at discriminated unions errors\nexport const assertTokenData = (data: unknown): asserts data is TokenData => {\n if (!isObject(data)) {\n throw new Error(\n `Expected token data to be an object, got ${JSON.stringify(data)}`,\n );\n }\n if (!isObjKey('type', data)) {\n throw new Error(\n `Expected token data to have a \"type\" property, got ${JSON.stringify(\n data,\n )}`,\n );\n }\n if (typeof data.type !== 'string') {\n throw new Error(\n `Expected token data \"type\" property to be a string, got ${JSON.stringify(\n data,\n )}`,\n );\n }\n const type = data.type as TokenData['type'];\n const kind = data.kind as TokenData['kind'];\n try {\n switch (type) {\n case 'boolean':\n if (kind === 'ref') {\n TokenDataBooleanRefStruct.assert(data);\n } else {\n TokenDataBooleanNonRefStruct.assert(data);\n }\n return;\n case 'border':\n if (kind === 'ref') {\n TokenDataBorderRefStruct.assert(data);\n } else {\n TokenDataBorderNonRefStruct.assert(data);\n }\n return;\n case 'color':\n if (kind === 'ref') {\n TokenDataColorRefStruct.assert(data);\n } else {\n TokenDataColorNonRefStruct.assert(data);\n }\n return;\n case 'cubicBezier':\n if (kind === 'ref') {\n TokenDataCubicBezierRefStruct.assert(data);\n } else {\n TokenDataCubicBezierNonRefStruct.assert(data);\n }\n return;\n case 'dimension':\n if (kind === 'ref') {\n TokenDataDimensionRefStruct.assert(data);\n } else {\n TokenDataDimensionNonRefStruct.assert(data);\n }\n return;\n case 'duration':\n if (kind === 'ref') {\n TokenDataDurationRefStruct.assert(data);\n } else {\n TokenDataDurationNonRefStruct.assert(data);\n }\n return;\n case 'fontWeight':\n if (kind === 'ref') {\n TokenDataFontWeightRefStruct.assert(data);\n } else {\n TokenDataFontWeightNonRefStruct.assert(data);\n }\n return;\n case 'number':\n if (kind === 'ref') {\n TokenDataNumberRefStruct.assert(data);\n } else {\n TokenDataNumberNonRefStruct.assert(data);\n }\n return;\n case 'shadow':\n if (kind === 'ref') {\n TokenDataShadowRefStruct.assert(data);\n } else {\n TokenDataShadowNonRefStruct.assert(data);\n }\n return;\n case 'string':\n if (kind === 'ref') {\n TokenDataStringRefStruct.assert(data);\n } else {\n TokenDataStringNonRefStruct.assert(data);\n }\n return;\n case 'strokeStyle': // temp implementation\n if (kind === 'ref') {\n TokenDataStrokeStyleRefStruct.assert(data);\n } else {\n TokenDataStrokeStyleNonRefStruct.assert(data);\n }\n return;\n // case 'fontFamily':\n // if (kind === 'ref') {\n // TokenDataFontFamilyRefStruct.assert(data);\n // } else {\n // TokenDataFontFamilyNonRefStruct.assert(data);\n // }\n // return;\n case 'transition':\n if (kind === 'ref') {\n TokenDataTransitionRefStruct.assert(data);\n } else {\n TokenDataTransitionNonRefStruct.assert(data);\n }\n return;\n default: {\n const _exhaustiveCheck: never = type;\n throw new Error(`Unknown token data type: ${type}`);\n }\n }\n } catch (error) {\n if (!(error instanceof s.StructError)) throw error;\n throw new Error(\n `Invalid token data for type \"${type}\": ${\n error.message\n }. Received this data: \"${JSON.stringify(data)}\"`,\n );\n }\n};\n","import { Simplify, expectType } from '@knapsack/utils';\nimport {\n TokenType,\n TokenDefinitionSingular,\n TokenDefinitionComposite,\n isTokenTypeComposite,\n isTokenTypeSingular,\n} from './token-definitions';\n\ntype CreateTokenSrcValueInfo<\n T extends {\n type: TokenType;\n value: unknown;\n },\n> =\n | {\n kind: 'ref';\n /** Has `{}` removed */\n referencedTokenId: string;\n isVarRef?: boolean;\n type: T['type'];\n }\n | {\n kind: 'static';\n type: T['type'];\n value: T['value'];\n };\n\ntype TokenSrcValueInfoSingularRaw = {\n // Ignore the key, pay attention to the value\n // The values become the items in the discriminated union\n [TheTokenType in TokenDefinitionSingular as TheTokenType['type']]: Simplify<\n CreateTokenSrcValueInfo<TheTokenType>\n >;\n}[TokenDefinitionSingular['type']];\n\n// This helper allows us to just pass the type string in to get that\n// item out of the discriminated union: `TokenSrcValueInfoSingular<'color'>`\ntype TokenSrcValueInfoSingular<\n TT extends TokenSrcValueInfoSingularRaw['type'] = TokenSrcValueInfoSingularRaw['type'],\n> = Extract<TokenSrcValueInfoSingularRaw, { type: TT }>;\n\nexpectType<TokenSrcValueInfoSingular<'dimension'>[]>([\n {\n type: 'dimension',\n kind: 'static',\n value: '1px',\n },\n {\n type: 'dimension',\n kind: 'ref',\n referencedTokenId: 'a.b',\n },\n]);\n\ntype CreateSrcValueInfoForComposite<\n ValueObj extends Record<string, { type: TokenDefinitionSingular['type'] }>,\n> = {\n [Key in keyof ValueObj]: Simplify<\n CreateTokenSrcValueInfo<{\n type: ValueObj[Key]['type'];\n value: TokenDefinitionSingular<ValueObj[Key]['type']>['value'];\n }>\n >;\n};\n\ntype TokenSrcValueInfoCompositeRaw = {\n [TheTokenType in TokenDefinitionComposite['type']]: Simplify<\n CreateTokenSrcValueInfo<{\n type: TheTokenType;\n value: Simplify<\n CreateSrcValueInfoForComposite<\n TokenDefinitionComposite<TheTokenType>['value']\n >\n >;\n }>\n >;\n}[TokenDefinitionComposite['type']];\n\ntype TokenSrcValueInfoComposite<\n TT extends TokenSrcValueInfoCompositeRaw['type'] = TokenSrcValueInfoCompositeRaw['type'],\n> = Extract<TokenSrcValueInfoCompositeRaw, { type: TT }>;\n\nexpectType<TokenSrcValueInfoComposite<'border'>[]>([\n {\n type: 'border',\n kind: 'ref',\n referencedTokenId: 'a.b',\n },\n {\n type: 'border',\n kind: 'static',\n value: {\n color: {\n kind: 'static',\n type: 'color',\n value: 'red',\n },\n style: {\n kind: 'ref',\n type: 'strokeStyle',\n referencedTokenId: '', // FIX\n },\n width: {\n kind: 'static',\n type: 'dimension',\n value: '2px',\n },\n },\n },\n]);\n\nexpectType<TokenSrcValueInfoComposite<'transition'>[]>([\n {\n type: 'transition',\n kind: 'ref',\n referencedTokenId: 'a.b',\n },\n {\n type: 'transition',\n kind: 'static',\n value: {\n delay: {\n kind: 'static',\n type: 'duration',\n value: '1ms',\n },\n duration: {\n kind: 'ref',\n type: 'duration',\n referencedTokenId: 'animation.slow',\n },\n timingFunction: {\n kind: 'static',\n type: 'cubicBezier',\n value: [0.4, 0.0, 0.2, 1],\n },\n },\n },\n]);\n\nexport type TokenSrcValueInfo<\n TT extends\n | TokenSrcValueInfoComposite['type']\n | TokenSrcValueInfoSingular['type'] =\n | TokenSrcValueInfoComposite['type']\n | TokenSrcValueInfoSingular['type'],\n TheKind extends\n | TokenSrcValueInfoComposite['kind']\n | TokenSrcValueInfoSingular['kind'] =\n | TokenSrcValueInfoComposite['kind']\n | TokenSrcValueInfoSingular['kind'],\n> = Extract<\n TokenSrcValueInfoComposite | TokenSrcValueInfoSingular,\n { type: TT; kind: TheKind }\n>;\n\nexport function isTokenSrcValueInfoSingular(\n tokenSrcValueInfo: TokenSrcValueInfo,\n): tokenSrcValueInfo is TokenSrcValueInfoSingular {\n return isTokenTypeSingular(tokenSrcValueInfo?.type);\n}\nexport function isTokenSrcValueInfoComposite(\n tokenSrcValueInfo: TokenSrcValueInfo,\n): tokenSrcValueInfo is TokenSrcValueInfoComposite {\n return isTokenTypeComposite(tokenSrcValueInfo?.type);\n}\n\nexpectType<TokenSrcValueInfo[]>([\n {\n type: 'dimension',\n kind: 'static',\n value: '1px',\n },\n {\n type: 'transition',\n kind: 'ref',\n referencedTokenId: 'a.b',\n },\n {\n type: 'transition',\n kind: 'ref',\n // @ts-expect-error - with `kind: 'ref'`, `value` is not allowed\n value: '1px',\n },\n {\n kind: 'ref',\n type: 'duration',\n referencedTokenId: 'animation.slow',\n },\n {\n kind: 'static',\n type: 'cubicBezier',\n value: [0.4, 0.0, 0.2, 1],\n },\n {\n type: 'transition',\n kind: 'static',\n value: {\n delay: {\n kind: 'static',\n type: 'duration',\n value: '1ms',\n },\n duration: {\n kind: 'ref',\n type: 'duration',\n referencedTokenId: 'animation.slow',\n },\n timingFunction: {\n kind: 'static',\n type: 'cubicBezier',\n value: [0.4, 0.0, 0.2, 1],\n },\n },\n },\n]);\n\n/**\n * A common object that is used to represent a token in the app.\n * Used in functions for editing communication between UI forms, Xstate,\n * and `@knapsack/design-tokens-utils`.\n */\nexport type TokenInfo<\n TheTokenType extends TokenSrcValueInfo['type'] = TokenSrcValueInfo['type'],\n> = {\n tokenSrcValueInfo: TokenSrcValueInfo<TheTokenType>;\n tokenId: string;\n description?: string;\n};\n","import { Simplify, expectType, isObjKey, isObject } from '@knapsack/utils';\nimport {\n TokenDefinitionComposite,\n TokenDefinitionSingular,\n TokenReference,\n TokenType,\n TokenDefinition,\n} from './token-definitions';\nimport { TokenKsExtensions } from './token-misc';\n\nexport type TokenSrcCommon<TheType extends TokenType = TokenType> = {\n $type?: TokenDefinition<TheType>['type'];\n $description?: string;\n $extensions?: {\n 'cloud.knapsack'?: TokenKsExtensions;\n };\n};\n\nexport function isTokenSrcExtensions(\n extensionsObj: unknown,\n): extensionsObj is TokenSrcCommon['$extensions'] {\n return isObject(extensionsObj) && isObjKey('cloud.knapsack', extensionsObj);\n}\n\ntype CreateSrcValueForComposite<\n ValueObj extends Record<string, { type: TokenDefinitionSingular['type'] }>,\n> = {\n [Key in keyof ValueObj]:\n | TokenReference\n | TokenDefinitionSingular<ValueObj[Key]['type']>['value'];\n};\n\ntype TokenSrcValueCompositeRaw = {\n [TheTokenType in TokenDefinitionComposite['type']]: Simplify<{\n type: TheTokenType;\n value: Simplify<\n CreateSrcValueForComposite<\n TokenDefinitionComposite<TheTokenType>['value']\n >\n >;\n }>;\n}[TokenDefinitionComposite['type']];\n\ntype TokenSrcValueComposite<\n TT extends TokenSrcValueCompositeRaw['type'] = TokenSrcValueCompositeRaw['type'],\n> = Extract<TokenSrcValueCompositeRaw, { type: TT }>;\n\ntype TokenSrcValueRaw = TokenDefinitionSingular | TokenSrcValueComposite;\n\nexport type TokenSrcValue<\n Type extends\n | TokenDefinitionSingular['type']\n | TokenSrcValueComposite['type'] =\n | TokenDefinitionSingular['type']\n | TokenSrcValueComposite['type'],\n> = Extract<TokenSrcValueRaw, { type: Type }>['value'] | TokenReference;\n\nexpectType<TokenSrcValue[]>([\n '#ddd',\n true,\n [83, 1, 1, 1],\n {\n color: '#000',\n style: 'solid',\n width: '1px',\n },\n {\n inset: true,\n color: '#000',\n offsetX: '0px',\n offsetY: '{spacing.medium}',\n spread: '0px',\n blur: '0px',\n },\n {\n timingFunction: '{timing.ease}',\n duration: '{timing.duration.medium}',\n delay: '7ms',\n color: '#000',\n },\n]);\n\nexport type TokenSrc<\n TheType extends\n | TokenDefinitionSingular['type']\n | TokenSrcValueComposite['type'] =\n | TokenDefinitionSingular['type']\n | TokenSrcValueComposite['type'],\n> = Simplify<\n {\n $value: TokenSrcValue<TheType>;\n } & TokenSrcCommon<TheType>\n>;\n\nexport function isTokenSrc(tokenObject: unknown): tokenObject is TokenSrc {\n if (isObject(tokenObject) && isObjKey('$value', tokenObject)) return true;\n return false;\n}\n\nexport type TokenSrcGroup = TokenSrcCommon & {\n [key: string]:\n | TokenSrcGroup\n | TokenSrc\n | TokenSrcCommon\n | TokenSrcCommon['$extensions'];\n};\n\nexport function isTokenGroup(\n tokenObject: unknown,\n): tokenObject is TokenSrcGroup {\n // @todo improve\n return (\n isObject(tokenObject) &&\n !isTokenSrcExtensions(tokenObject) &&\n !isObjKey('$value', tokenObject) &&\n // ensuring we are not in `$extensions` object\n !isObjKey('cloud.knapsack', tokenObject)\n );\n}\n\n// Token VAR references look like TokenSrcGroup\nexport function isTokenTypeVarRef(tokenObject: unknown) {\n // It's at least a TokenSrcGroup\n if (isTokenGroup(tokenObject)) {\n // The specific key within collectionInfo with the var reference\n const varRefCollectionInfo =\n tokenObject.$extensions['cloud.knapsack'].group.collectionInfo;\n if (\n isObjKey('type', varRefCollectionInfo) &&\n isObjKey('referenceId', varRefCollectionInfo)\n ) {\n return true;\n }\n }\n\n return false;\n}\n","import { parseNumberWithUnit } from '@knapsack/utils';\n\nexport function getPrimitiveValue(\n tokenValue: unknown,\n): 'string' | 'number' | 'boolean' {\n const type = typeof tokenValue;\n if (type === 'string' || type === 'number' || type === 'boolean') {\n return type;\n }\n throw new Error(\n `Invalid token value type: ${JSON.stringify(\n type,\n )}. Token value is: ${JSON.stringify(tokenValue)}`,\n );\n}\n\nexport type TokenDimensionUnit = 'px' | 'rem' | 'em' | '%';\n\n/**\n * Dimension strings require ending in 'px' or 'rem'\n * @see `libs/types/src/app-client-data/design-tokens-types/token-definitions.ts`\n */\nexport const isDimensionString = (\n value: string,\n): value is `${number}${'px' | 'rem' | 'em' | '%'}` =>\n value.includes('px') ||\n value.includes('rem') ||\n value.includes('em') ||\n value.includes('%');\n\n/**\n * Pass in values like `'12px'` to get detailed info\n * @throws if value is not a number or does not end in supported unit\n */\nexport function parseTokenDimensionValue(valueToParse: string | number): {\n value: number;\n unit?: TokenDimensionUnit;\n} {\n const { value, unit } = parseNumberWithUnit(valueToParse);\n if (!unit) {\n return { value };\n }\n if (unit !== 'px' && unit !== 'rem' && unit !== 'em' && unit !== '%') {\n throw new Error(`Invalid unit \"${unit}\" for value: ${value}`);\n }\n\n return { value, unit };\n}\n","import type { CSSProperties } from 'react';\nimport type { JsonSchemaObject } from '../json-schema';\nimport { RendererId } from '../renderers';\nimport { isObject } from '../type-utils';\nimport type { BlockConfig } from './blocks';\nimport type { Page, PageTab } from './page';\nimport { TokenSrcValueInfo } from './design-tokens-types/token-src-value-info';\n\nexport interface KsStatus {\n id: string;\n title: string;\n color?: string;\n}\n\nexport interface KsStatusSet {\n id: string;\n title: string;\n statuses: KsStatus[];\n}\n\n/**\n * Used by template renderers in addition to `path`\n * Twig: `@components/button.twig`\n * Web Components: `my-button` => `<my-button>`\n * React: a named export of the file if not `default`\n * @todo Replace this with `rendererOptions`\n */\ntype TemplateAlias = string;\n\nexport type SlottedTemplateDemo = {\n type: 'template-demo';\n /** @deprecated */\n patternId: string;\n /** @deprecated */\n templateId: string;\n /**\n * The demo referenced by `demoId` is inlined here before sending to server to\n * render, but is never stored in the json data. If this is present, it is\n * used instead of the demo referenced by `demoId`. This is done to ensure\n * server has all the latest data for a template demo by ensuring it includes\n * it's slotted children's data.\n * @see {inlineDemoData}\n */\n demo?: DataDemo;\n demoId: DemoBase['id'];\n};\n\n/**\n * i.e. Given a React Component, `Button`, this set to null/false would be\n * `<Button>` and set to true it would just be a reference to it: `Button`\n * @see {KsSlotInfo['isTemplateReference']}\n */\nexport type SlottedTemplateReference = {\n type: 'template-reference';\n patternId: string;\n templateId: string;\n};\n\nexport type SlottedText = {\n type: 'text';\n text: string;\n};\n\nexport type SlottedData =\n | SlottedText\n | SlottedTemplateDemo\n | SlottedTemplateReference;\n\n/** @deprecated - just check `type` */\nexport const isSlottedText = (\n slottedData: unknown,\n): slottedData is SlottedText =>\n isObject(slottedData) && slottedData.type === 'text';\n\n/** @deprecated - just check `type` */\nexport function isSlottedTemplateDemo(\n slottedData: unknown,\n): slottedData is SlottedTemplateDemo {\n return isObject(slottedData) && slottedData.type === 'template-demo';\n}\n\n/** @deprecated - just check `type` */\nexport function isSlottedTemplateReference(\n slottedData: unknown,\n): slottedData is SlottedTemplateReference {\n return isObject(slottedData) && slottedData.type === 'template-reference';\n}\n\n/**\n * Collection ID: Mode ID\n */\nexport type ThemeDefinition = {\n [collectionId: string]: string;\n};\n\nexport type SlotOptions = {\n /**\n * @default 'div'\n */\n wrappingElementName?: string;\n cssClasses?: string[];\n align?: {\n value:\n | 'top-left'\n | 'top-center'\n | 'top-right'\n | 'left'\n | 'center'\n | 'right'\n | 'bottom-left'\n | 'bottom-center'\n | 'bottom-right';\n };\n layout?: {\n value: 'horizontal' | 'vertical' | 'wrap';\n };\n gap?: {\n value: TokenSrcValueInfo<'dimension'>;\n };\n paddingHorizontal?: {\n value: TokenSrcValueInfo<'dimension'>[];\n };\n paddingVertical?: {\n value: TokenSrcValueInfo<'dimension'>[];\n };\n /**\n * Collection ID: Mode ID\n */\n theme?: ThemeDefinition;\n};\n\n/**\n * These are created from {SlotOptions}\n * Only available in App Client for rendering - this is NOT saved in App Client Data\n */\nexport type SlotOptionsComputed = {\n styles: CSSProperties;\n cssClasses: string[];\n /**\n * @default 'div'\n */\n wrappingElementName: string;\n /**\n * can't be `style` or `class` or `className`\n */\n attributes: {\n [attributeName: string]: string;\n };\n};\n\nexport type KnapsackTemplateData = {\n /**\n * @todo Ideal would be `{ [key: string]: string | boolean | number }`\n */\n props: {\n [prop: string]: any;\n };\n slots?: {\n [slotName: string]: Array<SlottedData>;\n };\n /**\n * Settings from users are stored here and saved in App Client Data\n * This is used to dynamically create `slotsOptionsComputed`\n */\n slotsOptions?: {\n [slotName: string]: SlotOptions;\n };\n /**\n * Use `slotsOptions` to set & save styles on slotted children\n * Never set nor stored in App Client Data that gets saved\n * This is only inlined in the demo data for rendering so the App Client can\n * apply the styles to the slotted children\n * @see {inlineDemoData}\n */\n slotsOptionsComputed?: {\n [slotName: string]: SlotOptionsComputed;\n };\n};\n\ntype DemoType = 'data' | 'template';\n\ntype DemoBase = {\n id: string;\n title: string;\n description?: string;\n /**\n * Would override what was on the template\n */\n assetSetId?: string;\n width?: number;\n height?: number;\n type: DemoType;\n /** Collection ID: Mode ID */\n theme?: ThemeDefinition;\n};\n\n/**\n * Shows usage\n */\nexport type DataDemo = DemoBase & {\n type: 'data';\n patternId: string;\n templateId: string;\n data: KnapsackTemplateData;\n};\n\n/**\n * Shows source code\n */\nexport type TemplateDemo = DemoBase & {\n type: 'template';\n templateInfo: {\n alias?: TemplateAlias;\n path?: string;\n };\n};\n\nexport type Demo = TemplateDemo | DataDemo;\n\nexport type RenderDataDemo = Demo & {\n inlineStyles?: string;\n bodyAttributes?: Record<string, string>;\n};\n\n/** @deprecated */\nexport enum StageLayouts {\n portrait = 'portrait',\n landscape = 'landscape',\n}\n\nexport function isDataDemo(demo: TemplateDemo | DataDemo): demo is DataDemo {\n return demo?.type === 'data';\n}\n\nexport function isTemplateDemo(demo: Demo): demo is TemplateDemo {\n return demo?.type === 'template';\n}\n\nexport type KsSlotInfo = {\n title: string;\n description?: string;\n disallowText?: boolean;\n isRequired?: boolean;\n allowOnlyOne?: boolean;\n /**\n * i.e. Given a React Component, `Button`, this set to null/false would be\n * `<Button>` and set to true it would just be a reference to it: `Button`\n * @see {SlottedTemplateReference}\n */\n isTemplateReference?: boolean;\n allowedPatternIds?: string[];\n};\n\n/**\n * Supersedes `schema`\n */\nexport type KsTemplateSpec = {\n /**\n * Attempt to create the props & slots spec by reading the source file.\n * Prevents ability to use spec editor.\n *\n * If `true`, then uses the template `alias` & `path` to find the file.\n *\n * If a string, then that file path is used in place of the source file.\n *\n * Scenario: the `path` is used to point to a compiled file w types stripped\n * and this is used to point to either the source file w types or the compiled\n * `.d.ts` file. Currently only React is supported. The file extension\n * determines if TypeScript (ts/tsx) or PropTypes (js/jsx) is used for\n * inference.\n */\n isInferred?: boolean | string;\n /**\n * JSON Schema defining the serializable data passed in\n * The classic, formerly `schema`\n */\n props?: JsonSchemaObject;\n /**\n * Child component slots\n */\n slots?: {\n [name: string]: KsSlotInfo;\n };\n /**\n * @todo evaluate & refine\n */\n // cssProps?: {\n // [name: string]: {\n // title: string;\n // description: string;\n // };\n // };\n hidePropsTable?: boolean;\n hideSlotsTable?: boolean;\n /**\n * Extra Docs are each shown in their own table.\n * Useful for non-traditional spec docs that are more template language specific.\n * Examples: events, methods, etc\n */\n extraDocs?: {\n id: string;\n title: string;\n description?: string;\n tableRows?: {\n [columnTitle: string]: string;\n }[];\n }[];\n};\n\nexport interface KnapsackPatternTemplate {\n id: string;\n title?: string;\n /**\n * Relative file path to the template from the config file it is declared in\n */\n path: string;\n\n alias?: TemplateAlias;\n /**\n * Which template language? i.e. `twig`, `react` Replaces\n * KnapsackTemplateRenderer.test which ran a test on the file path (similar to\n * how WebPack loader `test` works)\n */\n templateLanguageId: RendererId;\n assetSetIds?: string[];\n spec?: KsTemplateSpec;\n /** Array of demo IDs, actual demo data is stored in `db.demos.demosById` */\n demoIds: Demo['id'][];\n /** Array of block IDs, actual block content is stored in db.blocks.blocksById */\n blockIds: BlockConfig['id'][];\n}\n\nexport type KnapsackPattern = Page & {\n $schema?: string;\n statuses?: {\n [statusSetId: string]: string;\n };\n templates?: KnapsackPatternTemplate[];\n subPages?: {\n id: string;\n title: string;\n blockIds: BlockConfig['id'][];\n }[];\n designSrcComponentsById?: Record<\n string,\n {\n id: string;\n title: string;\n componentId: string;\n fileId: string;\n }\n >;\n /** Controls order of `templates` & `subPages` on Pattern Page */\n tabs?: PageTab[];\n\n aliases?: string[];\n /**\n * Prevents pattern from appearing in System Overview and Status Table blocks\n */\n hideFromOverviewBlocks?: boolean;\n /**\n * Prevents pattern from appearing as an option in Component Embed and\n * Component Demo blocks\n */\n hideFromComponentBlocks?: boolean;\n};\n\nexport interface KnapsackPatternTemplateCode {\n html: string;\n data?: Record<string, any>;\n templateSrc: string;\n usage: string;\n language: string;\n}\n\nexport type KnapsackPatternsConfig = {\n $schema?: string;\n statusSets: KsStatusSet[];\n};\n\nexport interface TemplateRendererMeta {\n id: RendererId;\n title: string;\n version?: string;\n aliasTitle?: string;\n aliasDescription?: string;\n aliasUse: 'off' | 'optional' | 'required';\n aliasIsJsNamedExport?: boolean;\n syntaxHighlightingLanguage?: string;\n enableDataDemos: boolean;\n enableTemplateDemos: boolean;\n hasSlotsSupport: boolean;\n hasSlotOptionsSupport?: boolean;\n hasInferSpecSupport: boolean;\n hasTemplateSuggestionsSupport: boolean;\n prototypingTemplate?: {\n path: string;\n alias?: string;\n spec: Pick<KsTemplateSpec, 'props' | 'slots' | 'isInferred'>;\n };\n}\n\nexport type PatternsState = {\n patterns: {\n [id: string]: KnapsackPattern;\n };\n renderers: Partial<\n Record<\n RendererId,\n {\n meta: TemplateRendererMeta;\n }\n >\n >;\n} & KnapsackPatternsConfig;\n","import { ColorConfig } from '../color-config';\n\nexport enum PageHeaderSizes {\n auto = 'auto',\n small = 'small',\n medium = 'medium',\n large = 'large',\n full = 'full',\n}\n\nexport interface PageHeaderSettings {\n size?: `${PageHeaderSizes}`;\n backgroundImage?: string;\n backgroundColor?: ColorConfig;\n backgroundOverlay?: boolean;\n backgroundSize?: 'cover' | 'contain' | 'string';\n backgroundPosition?: 'left' | 'center' | 'right' | 'string';\n backgroundRepeat?: 'no-repeat' | 'repeat-x' | 'repeat-y' | 'repeat';\n hideText?: boolean;\n textColorTitle?: ColorConfig;\n textColorDescription?: ColorConfig;\n}\n","import {\n // type structs validate that a value has a set of properties on it, but it does not assert anything about unspecified properties. This allows you to assert that a particular set of functionality exists without a strict equality check for properties.\n type,\n string,\n Describe,\n boolean,\n optional,\n array,\n number,\n define,\n} from 'superstruct';\nimport { isObjKey, isObject } from '../type-utils';\nimport type { KnapsackAssetSetsData } from './asset-sets';\nimport type { TokenSrcGroup } from './design-tokens-types';\nimport type { MetaState } from './meta';\nimport type { KnapsackNavsConfig } from './nav';\nimport type { KsFiles } from './files';\nimport type { BlockConfig } from './blocks';\nimport type { KnapsackCustomPagesData } from './custom-pages';\nimport type { Demo, PatternsState } from './patterns';\nimport { UiConfig } from '../ui-config';\nimport { PagesSettings } from './page';\nimport { BlocksSettings } from './blocks.settings';\nimport { DesignSrcFile } from '../design-src.types';\n\nexport * from './asset-sets';\nexport * from './blocks';\nexport * from './custom-pages';\nexport * from './design-tokens';\nexport * from './design-tokens-types';\nexport * from './nav';\nexport * from './files';\nexport * from './meta';\nexport * from './patterns';\nexport { PageHeaderSizes } from './page.header';\nexport type { PageHeaderSettings } from './page.header';\nexport type { PageTab, PageType } from './page';\n\nexport interface KsAppClientData {\n patternsState: PatternsState;\n customPagesState: KnapsackCustomPagesData;\n assetSetsState: KnapsackAssetSetsData;\n navsState: KnapsackNavsConfig;\n tokensSrc: TokenSrcGroup;\n metaState?: MetaState;\n filesState: KsFiles;\n db: {\n blocks: {\n byId: Record<string, BlockConfig>;\n settings: BlocksSettings;\n };\n demos: {\n byId: Record<string, Demo>;\n // \"never\" for now until there are actual settings for demos\n settings: Record<string, never>;\n };\n settings: {\n title?: string;\n hideTitleInNavigation?: boolean;\n logoUrl?: string;\n favicon?: `https://${string}`;\n theme?: UiConfig;\n pages?: PagesSettings;\n designSrcs?: {\n files?: DesignSrcFile[];\n };\n tokens?: {\n theming?: {\n /** Which template languages theming controls will show up for next to the components preview stage. */\n enabledRendererIds?: string[];\n };\n };\n prototyping?: {\n patternId: string;\n };\n };\n };\n}\n\nexport type KsAppClientDataNoMeta = Omit<KsAppClientData, 'metaState'>;\nexport type KsAppClientDataAndMeta = Required<KsAppClientData>;\n\nexport function isKsAppClientDataNoMeta(\n data: unknown,\n): data is KsAppClientDataNoMeta {\n if (!isObject(data)) return false;\n // TODO: bring in exhaustive key checking here so all keys are caught\n const requiredKeys: Array<keyof KsAppClientDataNoMeta> = [\n 'assetSetsState',\n 'customPagesState',\n 'navsState',\n 'patternsState',\n 'tokensSrc',\n 'db',\n ];\n if (!requiredKeys.every((key) => isObjKey(key, data))) return false;\n if (!isObjKey('metaState', data)) return true;\n return false;\n}\n\nexport const KsAppClientDataNoMetaStruct = define<KsAppClientDataNoMeta>(\n 'KsAppClientDataNoMeta',\n isKsAppClientDataNoMeta,\n);\n\nexport function isKsAppClientDataAndMeta(\n data: unknown,\n): data is KsAppClientDataAndMeta {\n if (!isObject(data)) return false;\n // TODO: bring in exhaustive key checking here so all keys are caught\n const requiredKeys: Array<keyof KsAppClientDataAndMeta> = [\n 'assetSetsState',\n 'customPagesState',\n 'navsState',\n 'patternsState',\n 'tokensSrc',\n 'metaState',\n 'db',\n ];\n return requiredKeys.every((key) => isObjKey(key, data));\n}\n\nexport const KsAppClientDataAndMetaStruct = define<KsAppClientDataAndMeta>(\n 'KsAppClientDataAndMeta',\n isKsAppClientDataAndMeta,\n);\n\nexport const KsMetaStateStruct: Describe<KsAppClientData['metaState']> = type({\n isLocalDev: boolean(),\n plugins: array(\n type({\n id: string(),\n hasContent: boolean(),\n clientPluginPath: optional(string()),\n cssPath: optional(string()),\n }),\n ),\n meta: optional(\n type({\n version: optional(string()),\n hasKnapsackCloud: boolean(),\n knapsackCloudSiteId: optional(string()),\n serverPort: optional(number()),\n websocketsPort: optional(number()),\n https: optional(boolean()),\n cacheDir: optional(string()),\n ksVersions: type({\n app: string(),\n }),\n }),\n ),\n});\n\nexport const isKsMetaState = KsMetaStateStruct.is;\n","import {\n // type structs validate that a value has a set of properties on it, but it does not assert anything about unspecified properties. This allows you to assert that a particular set of functionality exists without a strict equality check for properties.\n type,\n string,\n Describe,\n boolean,\n optional,\n array,\n number,\n define,\n} from 'superstruct';\nimport { isObjKey, isObject } from '../type-utils';\nimport type { KnapsackAssetSetsData } from './asset-sets';\nimport type { KsDesignTokensState } from './design-tokens';\nimport type { MetaState } from './meta';\nimport type { KnapsackNavsConfig } from './nav';\nimport type { KsFiles } from './files';\nimport type { KnapsackCustomPagesData } from './custom-pages';\nimport type { PatternsState } from './patterns';\nimport type { KnapsackSettings } from './settings';\n\nexport type {\n KsDesignToken,\n KsDesignTokenAttributes,\n KsDesignTokenData,\n KsDesignTokenDataGroup,\n KsDesignTokenSrc,\n KsDesignTokenSrcGroup,\n KsDesignTokensState,\n KsTokenType,\n KsTokenValue,\n KnapsackDesignToken,\n} from './design-tokens';\n\nexport interface KsAppClientDataV3 {\n settingsState: {\n settings: KnapsackSettings;\n };\n patternsState: PatternsState;\n customPagesState: KnapsackCustomPagesData;\n assetSetsState: KnapsackAssetSetsData;\n navsState: KnapsackNavsConfig;\n tokensState: KsDesignTokensState;\n metaState?: MetaState;\n filesState: KsFiles;\n}\n\nexport type KsAppClientDataNoMetaV3 = Omit<KsAppClientDataV3, 'metaState'>;\nexport type KsAppClientDataAndMetaV3 = Required<KsAppClientDataV3>;\n\nexport function isKsAppClientDataNoMetaV3(\n data: unknown,\n): data is KsAppClientDataNoMetaV3 {\n if (!isObject(data)) return false;\n const requiredKeys: Array<keyof KsAppClientDataNoMetaV3> = [\n 'assetSetsState',\n 'customPagesState',\n 'navsState',\n 'patternsState',\n 'settingsState',\n 'tokensState',\n ];\n if (!requiredKeys.every((key) => isObjKey(key, data))) return false;\n if (!isObjKey('metaState', data)) return true;\n return false;\n}\n\nexport const KsAppClientDataNoMetaStructV3 = define<KsAppClientDataNoMetaV3>(\n 'KsAppClientDataNoMeta',\n isKsAppClientDataNoMetaV3,\n);\n\nexport function isKsAppClientDataAndMetaV3(\n data: unknown,\n): data is KsAppClientDataAndMetaV3 {\n if (!isObject(data)) return false;\n const requiredKeys: Array<keyof KsAppClientDataAndMetaV3> = [\n 'assetSetsState',\n 'customPagesState',\n 'navsState',\n 'patternsState',\n 'settingsState',\n 'tokensState',\n 'metaState',\n ];\n return requiredKeys.every((key) => isObjKey(key, data));\n}\n\nexport const KsAppClientDataAndMetaStructV3 = define<KsAppClientDataAndMetaV3>(\n 'KsAppClientDataAndMeta',\n isKsAppClientDataAndMetaV3,\n);\n\nexport const KsMetaStateStructV3: Describe<KsAppClientDataV3['metaState']> =\n type({\n isLocalDev: boolean(),\n plugins: array(\n type({\n id: string(),\n hasContent: boolean(),\n clientPluginPath: optional(string()),\n cssPath: optional(string()),\n }),\n ),\n meta: optional(\n type({\n version: optional(string()),\n hasKnapsackCloud: boolean(),\n knapsackCloudSiteId: optional(string()),\n serverPort: optional(number()),\n websocketsPort: optional(number()),\n https: optional(boolean()),\n cacheDir: optional(string()),\n ksVersions: type({\n app: string(),\n }),\n }),\n ),\n });\n\nexport const isKsMetaStateV3 = KsMetaStateStructV3.is;\n","import { isDraft, type Draft } from 'immer';\nimport { Migration } from './migration.types';\nimport { KnapsackPattern, SlottedData } from '../app-client-data/patterns';\n\ntype Migration417DemosType = {\n version: string;\n checkIfNeeded: (appClientData: any) => boolean;\n migrate: (appClientData: Draft<any>) => void;\n};\n\nexport const migration417Demos: Migration417DemosType = {\n version: '4.1.7',\n checkIfNeeded: (appClientData) => {\n // this one will be tough to check for, so we'll just assume it's needed\n return true;\n },\n // note that `appClientData` is mutable since we're already in Immer\n migrate: (appClientData) => {\n if (!isDraft(appClientData)) {\n throw new Error(\n `Tried to run migrations on appClientData but it is not an Immer Draft`,\n );\n }\n Object.values(appClientData.patternsState.patterns).forEach(\n (\n pattern: Draft<\n KnapsackPattern & {\n demoSize?: string;\n }\n >,\n ) => {\n delete pattern.demoSize;\n },\n );\n\n Object.values(appClientData.db.demos.byId).forEach((demo) => {\n if (demo.type !== 'data') return;\n\n Object.entries(demo.data.slots ?? {}).forEach(([slotName, slotData]) => {\n demo.data.slots[slotName] = slotData.map(\n (slottedData: Draft<SlottedData | string>) => {\n // it used to be just a string\n if (typeof slottedData === 'string') {\n return {\n type: 'text',\n text: slottedData,\n };\n }\n if (\n // not doing anything with these\n slottedData.type === 'template-reference' ||\n // these already were migrated or made by the new editor\n slottedData.type === 'text'\n ) {\n return slottedData;\n }\n // these used to not have a type set\n slottedData.type = 'template-demo';\n return slottedData;\n },\n );\n });\n\n if (demo.patternId && demo.templateId) return;\n\n // using an IIFE so we can stop looping once we find it\n // would use `break` but it's a double loop\n (() => {\n for (const { id: pId, templates = [] } of Object.values(\n appClientData.patternsState.patterns,\n )) {\n for (const { id: tId, demoIds = [] } of templates) {\n if (demoIds.includes(demo.id)) {\n demo.patternId = pId;\n demo.templateId = tId;\n // found it - stop looking\n return;\n }\n }\n }\n })();\n });\n },\n} satisfies Migration;\n","import { migration417Demos } from './4.1.7-demos';\n\nexport const migrations = [migration417Demos];\n","// import { JSONSchema7 } from 'json-schema'; @todo consider using instead; though I'm not seeing it make it's way to the compiled JSON schema themselves via `convert-types-to-json-schmea.js`\n\ntype PropBase<Type = any> = {\n title?: string;\n description?: string;\n default?: Type;\n};\n\nexport enum PropTypeNames {\n 'string' = 'string',\n 'boolean' = 'boolean',\n 'number' = 'number',\n 'object' = 'object',\n 'options' = 'options',\n 'function' = 'function',\n 'customTypeScript' = 'customTypeScript',\n 'array' = 'array',\n 'arrayOfObjects' = 'arrayOfObjects',\n 'arrayOfStrings' = 'arrayOfStrings',\n 'arrayOfNumbers' = 'arrayOfNumbers',\n 'unknown' = 'unknown',\n}\nexport type PropTypeNamesList = keyof typeof PropTypeNames;\n\nexport type StringProp = {\n type: 'string';\n} & PropBase<string>;\n\nexport type BooleanProp = {\n type: 'boolean';\n} & PropBase<boolean>;\n\nexport type NumberProp = {\n type: 'number';\n} & PropBase<number>;\n\nexport type OptionsProp = {\n type: 'string';\n enum: string[];\n enumNames?: string[];\n} & PropBase<string>;\n\nexport type CustomTypeScriptProp = {\n /**\n * TypeScript type\n * @example (name: string) => void\n */\n tsType: string;\n type?: never;\n default?: string;\n} & PropBase<string>;\n\nexport type FunctionProp = {\n typeof: 'function';\n /**\n * TypeScript type\n * @example (name: string) => void\n */\n tsType: string;\n default?: string;\n type?: 'string';\n} & PropBase<string>;\n\nexport type ObjectProp = {\n type: 'object';\n additionalProperties?: boolean;\n required?: string[];\n properties: {\n [prop: string]: PropertyTypes;\n };\n} & PropBase;\n\nexport type ArrayProp = {\n type: 'array';\n items: PropertyTypes;\n} & PropBase<unknown[]>;\n\nexport type ArrayOfStringsProp = {\n type: 'array';\n uniqueItems?: boolean;\n items: StringProp;\n} & PropBase<unknown[]>;\n\nexport type ArrayOfNumbersProp = {\n type: 'array';\n uniqueItems?: boolean;\n items: NumberProp;\n} & PropBase<number[]>;\n\nexport type ArrayOfObjectsProp = {\n type: 'array';\n items: ObjectProp;\n} & PropBase<Array<Record<string, unknown>>>;\n\nexport type PropertyTypes =\n | StringProp\n | BooleanProp\n | NumberProp\n | OptionsProp\n | FunctionProp\n | CustomTypeScriptProp\n | ObjectProp\n | ArrayOfObjectsProp\n | ArrayOfStringsProp\n | ArrayOfNumbersProp\n | ArrayProp;\n\nexport const isStringProp = (prop: PropertyTypes): prop is StringProp =>\n 'type' in prop && prop.type === 'string' && !('enum' in prop);\nexport const isNumberProp = (prop: PropertyTypes): prop is NumberProp =>\n 'type' in prop && prop.type === 'number';\nexport const isBooleanProp = (prop: PropertyTypes): prop is BooleanProp =>\n 'type' in prop && prop.type === 'boolean';\nexport const isOptionsProp = (prop: PropertyTypes): prop is OptionsProp =>\n 'enum' in prop;\nexport const isFunctionProp = (prop: PropertyTypes): prop is FunctionProp =>\n 'typeof' in prop && prop?.typeof === 'function';\nexport const isCustomTypeScriptProp = (\n prop: PropertyTypes,\n): prop is CustomTypeScriptProp => !('typeof' in prop) && 'tsType' in prop;\nexport const isArrayOfObjectsProp = (\n prop: PropertyTypes,\n): prop is ArrayOfObjectsProp =>\n 'type' in prop &&\n prop.type === 'array' &&\n 'items' in prop &&\n prop.items.type === 'object';\nexport const isObjectProp = (prop: PropertyTypes): prop is ObjectProp =>\n 'type' in prop &&\n prop.type === 'object' &&\n 'properties' in prop &&\n Object.keys(prop.properties).length > 0;\nexport const isArrayOfStringsProp = (\n prop: PropertyTypes,\n): prop is ArrayOfStringsProp =>\n 'type' in prop &&\n prop.type === 'array' &&\n 'items' in prop &&\n prop.items.type === 'string';\nexport const isArrayOfNumbersProp = (\n prop: PropertyTypes,\n): prop is ArrayOfNumbersProp =>\n 'type' in prop &&\n prop.type === 'array' &&\n 'items' in prop &&\n prop.items.type === 'number';\n\nexport interface PropTypeDataBase {\n type: any;\n id: string;\n isRequired?: boolean;\n data: any;\n}\n\nexport interface StringPropTypeData extends PropTypeDataBase {\n type: typeof PropTypeNames.string;\n data: StringProp;\n}\n\nexport interface BooleanPropTypeData extends PropTypeDataBase {\n type: typeof PropTypeNames.boolean;\n data: BooleanProp;\n}\n\nexport interface NumberPropTypeData extends PropTypeDataBase {\n type: typeof PropTypeNames.number;\n data: NumberProp;\n}\n\nexport interface OptionsPropTypeData extends PropTypeDataBase {\n type: typeof PropTypeNames.options;\n data: OptionsProp;\n}\n\nexport interface FunctionPropTypeData extends PropTypeDataBase {\n type: typeof PropTypeNames.function;\n data: FunctionProp;\n}\n\nexport interface CustomTypeScriptPropTypeData extends PropTypeDataBase {\n type: typeof PropTypeNames.customTypeScript;\n data: CustomTypeScriptProp;\n}\n\nexport interface ObjectPropTypeData extends PropTypeDataBase {\n type: typeof PropTypeNames.object;\n data: ObjectProp;\n}\n\nexport interface ArrayOfObjectsPropTypeData extends PropTypeDataBase {\n type: typeof PropTypeNames.arrayOfObjects;\n data: ArrayOfObjectsProp;\n}\n\nexport interface ArrayOfStringsPropTypeData extends PropTypeDataBase {\n type: typeof PropTypeNames.arrayOfStrings;\n data: ArrayOfStringsProp;\n}\n\nexport interface ArrayOfNumbersPropTypeData extends PropTypeDataBase {\n type: typeof PropTypeNames.arrayOfNumbers;\n data: ArrayOfNumbersProp;\n}\n\nexport interface ArrayPropTypeData extends PropTypeDataBase {\n type: typeof PropTypeNames.array;\n data: ArrayProp;\n}\n\nexport type PropTypeData =\n | StringPropTypeData\n | BooleanPropTypeData\n | NumberPropTypeData\n | OptionsPropTypeData\n | FunctionPropTypeData\n | CustomTypeScriptPropTypeData\n | ObjectPropTypeData\n | ArrayOfObjectsPropTypeData\n | ArrayOfStringsPropTypeData\n | ArrayOfNumbersPropTypeData;\n\nexport type JsonSchemaObject<PropNames extends string = string> = {\n $schema?: string;\n title?: string;\n description?: string;\n type: 'object';\n required?: PropNames[];\n properties: Record<PropNames, PropertyTypes>;\n examples?: Record<string, unknown>[];\n};\n","import * as s from 'superstruct';\nimport type { Patch } from 'immer';\nimport type { SetOptional } from '@knapsack/utils';\nimport type { UUID, DateString } from './misc';\n\n/**\n * Patch\n */\n\nexport type { Patch };\n\nconst PatchStructRuntime = s.object({\n op: s.union([s.literal('replace'), s.literal('remove'), s.literal('add')]),\n path: s.array(s.union([s.string(), s.number()])),\n value: s.optional(s.any()),\n});\nconst PatchStruct: s.Describe<Patch> = PatchStructRuntime;\n\nexport const isPatch = (patch: unknown): patch is Patch =>\n PatchStruct.is(patch);\n\nconst PatchesStructRuntime = s.array(PatchStructRuntime);\nconst PatchesStruct: s.Describe<Patch[]> = PatchesStructRuntime;\n\nexport const isPatches = (patches: unknown): patches is Patch[] =>\n PatchesStruct.is(patches);\n\n/**\n * KsRemoteChange\n */\nexport type KsChange<Event extends { type: string } = { type: string }> = {\n patches: Patch[];\n inversePatches: Patch[];\n event: Event;\n id: UUID;\n date: DateString;\n};\nexport type KsRemoteChange = SetOptional<KsChange, 'inversePatches' | 'event'>;\n\nconst KsRemoteChangeRuntime = s.type({\n patches: PatchesStructRuntime,\n inversePatches: s.optional(PatchesStructRuntime),\n event: s.optional(s.object({ type: s.string() })),\n id: s.string(),\n date: s.string(),\n userId: s.optional(s.string()),\n});\nconst KsRemoteChangeStruct: s.Describe<KsRemoteChange> = KsRemoteChangeRuntime;\n\nexport const isKsRemoteChange = (change: unknown): change is KsRemoteChange =>\n KsRemoteChangeStruct.is(change);\n\nconst KsRemoteChangesStructRuntime = s.array(KsRemoteChangeRuntime);\nexport const KsRemoteChangesStruct: s.Describe<KsRemoteChange[]> =\n KsRemoteChangesStructRuntime;\n\nexport const isKsRemoteChanges = (\n changes: unknown,\n): changes is KsRemoteChange[] => KsRemoteChangesStruct.is(changes);\n","import type { KnapsackPatternTemplate, TemplateDemo } from './app-client-data';\n\nexport const rendererIds = {\n react: 'react',\n vue: 'vue',\n 'web-components': 'web-components',\n twig: 'twig',\n hbs: 'hbs',\n angular: 'angular',\n html: 'html',\n} as const;\n\n/**\n * The ID of a renderer, e.g. 'react', 'vue', 'angular', etc.\n * On Pattern Templates, this will match up to `templateLanguageId` to identify which renderer to use.\n * @see {KnapsackPatternTemplate['templateLanguageId']}\n */\nexport type RendererId = keyof typeof rendererIds;\n/**\n * Results of rendering a pattern\n */\nexport type KsRenderResults = {\n ok: boolean;\n html: string;\n usage?: string;\n templateLanguage?: string;\n message?: string;\n};\n\nexport type KsRenderApiResults = KsRenderResults & {\n wrappedHtml: string;\n};\nexport type TemplateSuggestion = {\n path: string;\n alias?: string;\n};\n\nexport type TemplateSuggestionsGetFn = (opt: {\n rendererId: RendererId;\n newPath?: string;\n state: ContentStateForRendering;\n}) => Promise<{\n suggestions: TemplateSuggestion[];\n}>;\n\n/**\n * Aliases for package paths\n * Example:\n * ```js\n * {\n * 'my-pkg': '../path/to/my-pkg',\n * }\n * ```\n */\nexport type PkgPathAliases = Record<string, string>;\n\nexport type ContentStateForRendering = {\n /**\n * Patterns by ID\n */\n patterns: {\n [patternId: string]: {\n id: string;\n templates: Pick<\n KnapsackPatternTemplate,\n 'alias' | 'path' | 'templateLanguageId' | 'spec' | 'id' | 'title'\n >[];\n templateDemos: Array<\n TemplateDemo & {\n templateId: string;\n templateLanguageId: RendererId;\n }\n >;\n };\n };\n};\n","import type { FeedbackTypes } from './misc';\n\nexport enum KsRendererClientEvents {\n ready = 'ready',\n}\n\n/**\n * Message sent from the renderer client (in the iframe) to the App UI parent window\n * using `window.parent.postMessage()`.\n * Note that this likely will become a union type of all possible messages\n */\nexport type KsRendererClientMsg =\n | {\n /**\n * Sent when a `ResizeObserver` detects a change in the contents height or width.\n */\n type: 'ksRendererClient.contentResized';\n height: number;\n width: number;\n }\n | {\n type: 'ksRendererClient.showToast';\n msg: string;\n feedbackType?: FeedbackTypes;\n };\n\n/**\n * The meta data is stored in a script tag with this id\n * @see {KsRendererClientMeta}\n */\nexport const ksRendererClientMetaId = 'ks-meta';\n\n/**\n * Metadata about the current renderer client demo\n * @see {ksRendererClientMetaId} for the ID of the script tag\n */\nexport interface KsRendererClientMeta {\n patternId: string;\n templateId: string;\n demoId: string;\n assetSetId: string;\n isInIframe: boolean;\n websocketsPort: number;\n}\n","export const WS_EVENTS = {\n PATTERN_TEMPLATE_CHANGED: 'PATTERN_TEMPLATE_CHANGED',\n PATTERN_ASSET_CHANGED: 'PATTERN_ASSET_CHANGED',\n DESIGN_TOKENS_CHANGED: 'DESIGN_TOKENS_CHANGED',\n RENDERER_CLIENT_RELOAD: 'RENDERER_CLIENT_RELOAD',\n APP_CLIENT_DATA_CHANGED: 'APP_CLIENT_DATA_CHANGED',\n};\n\nexport type WebSocketEvent = keyof typeof WS_EVENTS;\n\nexport interface WebSocketMessage {\n event: string;\n data: Record<string, unknown>;\n}\n\nexport interface DesignTokensChangedData extends WebSocketMessage {\n event: typeof WS_EVENTS.DESIGN_TOKENS_CHANGED;\n data: Record<string, unknown>;\n}\n\nexport interface PatternChangedData extends WebSocketMessage {\n event: typeof WS_EVENTS.PATTERN_TEMPLATE_CHANGED;\n data: {\n /**\n * Absolute path to template on server that was just edited\n */\n path: string;\n };\n}\n\nexport interface AssetChangedData extends WebSocketMessage {\n event: typeof WS_EVENTS.PATTERN_ASSET_CHANGED;\n data: {\n /**\n * Absolute path to asset file (CSS/JS) on server that was just edited\n */\n path: string;\n };\n}\n\nexport interface RendererClientReloadMessage extends WebSocketMessage {\n event: typeof WS_EVENTS.RENDERER_CLIENT_RELOAD;\n data: {\n // @todo add patternId etc for more details\n };\n}\n\nexport interface AppClientDataChanged extends WebSocketMessage {\n event: typeof WS_EVENTS.PATTERN_TEMPLATE_CHANGED;\n data: Record<string, unknown>;\n}\n\nexport type WebSocketMessages =\n | PatternChangedData\n | AssetChangedData\n | DesignTokensChangedData\n | RendererClientReloadMessage;\n","export enum GitProviderType {\n GitHub = 'GitHub',\n GitLab = 'GitLab',\n GitLabRest = 'GitLabRest',\n Bitbucket = 'Bitbucket',\n Azure = 'Azure',\n}\n\nexport type FileAddition = {\n /** base64 */\n contents: string;\n path: string;\n\n /** Action to perform: create, delete, move, update, or chmod. */\n action?: RestActions;\n /** Content of the file. */\n content?: string;\n /** Full path to the file. */\n filePath?: string;\n /** Encoding of the file. Default is text. */\n encoding?: TextEncoding;\n /** Last known file commit ID. */\n lastCommitId?: string;\n /** Original full path to the file being moved. */\n previousPath?: string;\n};\n\nexport type FileDeletion = {\n path: string;\n};\n\nexport enum MergeableState {\n Conflicting = 'CONFLICTING',\n Mergeable = 'MERGEABLE',\n Unknown = 'UNKNOWN',\n}\n\nexport enum RestActions {\n Create = 'CREATE',\n Move = 'MOVE',\n Update = 'UPDATE',\n Chmod = 'CHMOD',\n}\n\nexport enum TextEncoding {\n Base64 = 'BASE64',\n Text = 'TEXT',\n}\n\nexport type FileChanges = {\n /** File to add or change. */\n additions?: FileAddition[];\n\n /** Files to delete. */\n deletions?: FileDeletion[];\n\n /** Last known file commit ID. */\n lastCommitId?: string;\n};\n\nexport type CommitAction = Record<string, unknown>;\n\nexport interface RepoLabel {\n name: string;\n /** ID optional because bitbucket does not provide id. We might be able to generate one if its required, eg. reponame-labelname */\n id?: string;\n}\n\nexport interface RepoInfo {\n id: string;\n url: string;\n name: string;\n ownerName?: string;\n defaultBranch?: any;\n}\n\n// 'BranchInfo' name is currently taken by GitLab generated queries. Thus 'BranchInfoResult'\nexport interface BranchInfoResult {\n sha: string;\n shortSha?: string;\n associatedPullRequests?: Pr[];\n additions?: number;\n commitUrl?: string;\n deletions?: number;\n id?: string; // In GitLab, this is the branch name. Modelled this way to make deleteBranch work.\n default?: boolean;\n}\n\nexport interface PrInfo {\n url: string;\n number: number;\n id: string;\n}\n\nexport interface Pr {\n id: string;\n title: string;\n createdAt: string;\n headRef: {\n id?: string;\n name?: string;\n target: BranchInfoResult;\n };\n mergeable: MergeableState;\n merged: boolean;\n number: number;\n body: string;\n isDraft: boolean;\n url: string;\n author: {\n login: string;\n avatarUrl: string;\n };\n diffHeadSha?: string;\n targetBranch?: string;\n version?: string; // needed for bitbucket merge\n}\n\nexport interface GitProvider {\n type: GitProviderType;\n createBranch: (opt: { branch: string }) => Promise<BranchInfoResult>;\n commitOnBranch: (opt: {\n branch: string;\n message: string;\n fileChanges: FileChanges;\n }) => Promise<Record<string, unknown> | void>;\n getRepoLabels: () => Promise<RepoLabel[]>;\n getRepoInfo: () => Promise<RepoInfo>;\n getBranchInfo: ({ branch }: { branch: string }) => Promise<BranchInfoResult>;\n getPrs: () => Promise<Pr[]>;\n getPr: ({ prNumber }: { prNumber: number }) => Promise<Pr>;\n getTree?: (opt: { branch: string }) => Promise<{\n treeItems: {\n path: string;\n type: 'blob';\n /** SHA-1, use https://www.npmjs.com/package/git-hash-object */\n sha: string;\n url?: string;\n }[];\n }>;\n mergePr: ({ prNumber }: { prNumber: number }) => Promise<boolean>;\n createPr: ({\n siteId,\n branch,\n title,\n body,\n labelIds,\n }: {\n siteId: string;\n branch: string;\n title: string;\n body?: string;\n labelIds?: string[];\n }) => Promise<PrInfo>;\n deleteBranch: ({ id, branch }: { id: string; branch: string }) => Promise<{\n clientMutationId?: string;\n }>;\n getFileInfoOnBranchByPath: (opt: {\n filePath: string;\n branch: string;\n }) => Promise<{ exists: boolean; filePath: string }>;\n}\n","/**\n * The roles here are duplicates of the roles in the database.\n * It needs to be here, in the types package, so it can be used in all packages.\n * If we pull it in from `@knapsack/hasura-gql-client`, which is the source, we get a dependency cycle. So we do it this way.\n * If the roles change in the database, we need to change them here too. We will get a build error if we don't (see code in `@knapsack/hasura-gql-client`).\n */\n\nexport const rolesById = {\n ADMIN: 'ADMIN',\n ANONYMOUS: 'ANONYMOUS',\n CONTRIBUTOR: 'CONTRIBUTOR',\n EDITOR: 'EDITOR',\n MANAGER: 'MANAGER',\n VIEWER: 'VIEWER',\n} as const;\nexport const roles = Object.values(rolesById);\nexport type Role = keyof typeof rolesById;\n"]}
|
1
|
+
{"version":3,"sources":["../src/ui-config.ts","../src/color-config.ts","../src/typography-config.ts","../src/nav-customization-config.ts","../src/app-client-data/blocks.ts","../src/app-client-data/design-tokens.ts","../src/app-client-data/design-tokens-types/token-definitions.ts","../src/app-client-data/design-tokens-types/token-data.ts","../src/app-client-data/design-tokens-types/token-src-value-info.ts","../src/app-client-data/design-tokens-types/token-src.ts","../src/app-client-data/design-tokens-types/token-utils.ts","../src/app-client-data/patterns.ts","../src/app-client-data/page.header.ts","../src/app-client-data/index.ts","../src/app-client-data-v3/index.ts","../src/app-client-data-migrations/4.1.7-demos.ts","../src/app-client-data-migrations/index.ts","../src/json-schema.ts","../src/changes.ts","../src/renderers.ts","../src/renderer-client-types.ts","../src/web-sockets.ts","../src/git-providers.ts","../src/api/plugins.ts","../src/api/files.ts","../src/user-roles.ts"],"names":["isColor","color","colorString","__name","ColorStringStruct","define","value","ColorConfigStruct","union","type","literal","string","ColorTokenConfigStruct","HeadingLevels","FontSizeConfigValStruct","object","enums","number","FontFaceWeightStruct","FontFaceSourceFormats","FontFaceFormatsEnumStruct","FontFaceSourceStruct","FontFaceConfigStruct","optional","size","array","TextTransforms","FontStretches","TypographyLinkConfigStruct","boolean","FontSizeConfigStruct","TypographyConfigStruct","pageElementConfig","pageLinkElementConfig","pageElements","pageElementsV2","NavCustomizationConfigStruct","PrimaryNavCustomizationConfigStruct","SecondaryNavCustomizationConfigStruct","navCustomizationConfig","secondaryNavCustomizationConfig","primaryNavCustomizationConfig","customizableNavElements","UiConfigV1Struct","UiConfigV2Struct","UiConfigV3Struct","UiConfigV4Struct","defaulted","UiConfigV5Struct","UiConfigV6Struct","UiConfigV7Struct","UiConfigV8Struct","UiConfigV9Struct","UiConfigV10Struct","UiConfigStruct","BlockSizes","BlockSpacings","tokenNameDisplayFormats","strokeStyleValues","isTokenReference","val","hasTokenReferences","isNotTokenReference","TokenReferenceStruct","ke","compositeTypesRecord","tokenTypeComposites","singularTypesRecord","tokenTypeSingulars","isTokenTypeComposite","isTokenTypeSingular","expectType","TokenDataBaseStruct","t","isTokenDataComposite","tokenData","isTokenValueColor","TokenValueColorStruct","TokenDataColorNonRefStruct","TokenDataColorRefStruct","isTokenValueDimension","TokenValueDimensionStruct","TokenDataDimensionNonRefStruct","TokenDataDimensionRefStruct","isTokenValueDuration","TokenValueDurationStruct","TokenDataDurationNonRefStruct","TokenDataDurationRefStruct","isTokenValueFontWeight","TokenValueFontWeightStruct","TokenDataFontWeightNonRefStruct","TokenDataFontWeightRefStruct","TokenValueCubicBezierStruct","v","TokenDataCubicBezierNonRefStruct","TokenDataCubicBezierRefStruct","isTokenValueShadow","isObject","TokenValueShadowStruct","TokenDataShadowNonRefStruct","TokenDataShadowRefStruct","TokenValueStrokeStyleStruct","isTokenValueBorder","TokenValueBorderStruct","TokenDataBorderNonRefStruct","TokenDataBorderRefStruct","isTokenValueTransition","TokenValueTransitionStruct","TokenDataTransitionNonRefStruct","TokenDataTransitionRefStruct","TokenDataStringNonRefStruct","TokenDataStringRefStruct","TokenDataStrokeStyleNonRefStruct","TokenDataStrokeStyleRefStruct","TokenDataNumberNonRefStruct","TokenDataNumberRefStruct","TokenDataBooleanNonRefStruct","TokenDataBooleanRefStruct","assertTokenData","data","isObjKey","kind","error","isTokenSrcValueInfoSingular","tokenSrcValueInfo","isTokenSrcValueInfoComposite","isTokenSrcExtensions","extensionsObj","isTokenSrc","tokenObject","isTokenGroup","isTokenTypeVarRef","varRefCollectionInfo","getPrimitiveValue","tokenValue","isDimensionString","parseTokenDimensionValue","valueToParse","unit","parseNumberWithUnit","isSlottedText","slottedData","isSlottedTemplateDemo","isSlottedTemplateReference","StageLayouts","isDataDemo","demo","isTemplateDemo","PageHeaderSizes","isKsAppClientDataNoMeta","key","KsAppClientDataNoMetaStruct","isKsAppClientDataAndMeta","KsAppClientDataAndMetaStruct","KsMetaStateStruct","isKsMetaState","isKsAppClientDataNoMetaV3","KsAppClientDataNoMetaStructV3","isKsAppClientDataAndMetaV3","KsAppClientDataAndMetaStructV3","KsMetaStateStructV3","isKsMetaStateV3","migration417Demos","appClientData","isDraft","pattern","slotName","slotData","pId","templates","tId","demoIds","migrations","PropTypeNames","isStringProp","prop","isNumberProp","isBooleanProp","isOptionsProp","isFunctionProp","isCustomTypeScriptProp","isArrayOfObjectsProp","isObjectProp","isArrayOfStringsProp","isArrayOfNumbersProp","PatchStructRuntime","s","PatchStruct","isPatch","patch","PatchesStructRuntime","PatchesStruct","isPatches","patches","KsRemoteChangeRuntime","KsRemoteChangeStruct","isKsRemoteChange","change","KsRemoteChangesStructRuntime","KsRemoteChangesStruct","isKsRemoteChanges","changes","rendererIds","KsRendererClientEvents","ksRendererClientMetaId","WS_EVENTS","GitProviderType","MergeableState","RestActions","TextEncoding","plugins_exports","__export","ACTIONS","endpoint","files_exports","rolesById","roles"],"mappings":"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","file":"index.js","sourcesContent":["import {\n type,\n Describe,\n literal,\n optional,\n defaulted,\n boolean,\n array,\n object,\n} from 'superstruct';\n\nimport { ExpandRecursively } from '@knapsack/utils';\n\nimport {\n ColorConfig,\n ColorConfigStruct,\n ColorStringStruct,\n} from './color-config';\n\nimport {\n FontFaceConfigStruct,\n FontFaceConfig,\n TypographyConfigStruct,\n TypographyLinkConfigStruct,\n pageElements,\n pageElementsV2,\n} from './typography-config';\n\nimport {\n customizableNavElements,\n NavCustomizationConfigStruct,\n PrimaryNavCustomizationConfigStruct,\n SecondaryNavCustomizationConfigStruct,\n} from './nav-customization-config';\n\nexport type UiConfigV1 = {\n version: 1;\n oldSillySidebarBgColor: string;\n};\n\nexport const UiConfigV1Struct: Describe<UiConfigV1> = object({\n version: literal(1),\n oldSillySidebarBgColor: ColorStringStruct,\n});\n\nexport type UiConfigV2 = {\n version: 2;\n anotherSillySidebarBgColor: string;\n};\n\nexport const UiConfigV2Struct: Describe<UiConfigV2> = object({\n version: literal(2),\n anotherSillySidebarBgColor: ColorStringStruct,\n});\n\nexport type UiConfigV3 = {\n version: 3;\n sidebarBgColor: string;\n};\n\nexport const UiConfigV3Struct: Describe<UiConfigV3> = object({\n version: literal(3),\n sidebarBgColor: ColorStringStruct,\n});\n\nexport type UiConfigV4 = {\n version: 4;\n primaryColor: ColorConfig;\n darkColor: ColorConfig;\n lightColor: ColorConfig;\n enableSidebarIcons?: boolean;\n};\nexport const UiConfigV4Struct: Describe<UiConfigV4> = object({\n version: literal(4),\n primaryColor: ColorConfigStruct,\n darkColor: ColorConfigStruct,\n lightColor: ColorConfigStruct,\n enableSidebarIcons: optional(defaulted(boolean(), true)),\n});\n\nexport type UiConfigV5 = {\n version: 5;\n primaryColor: ColorConfig;\n darkColor: ColorConfig;\n lightColor: ColorConfig;\n linkColor: ColorConfig;\n enableSidebarIcons: boolean;\n};\nexport const UiConfigV5Struct: Describe<UiConfigV5> = object({\n version: literal(5),\n primaryColor: ColorConfigStruct,\n darkColor: ColorConfigStruct,\n lightColor: ColorConfigStruct,\n linkColor: ColorConfigStruct,\n enableSidebarIcons: optional(defaulted(boolean(), true)),\n});\n\nexport interface _UiConfigV6 extends Omit<UiConfigV5, 'version'> {\n version: 6;\n appearance: {\n customFonts?: FontFaceConfig[];\n pageElements: typeof pageElements;\n };\n}\n\n// ExpandRecursively needed to avoid \"Type 'UiConfigV6' is not assignable to type 'Record<string, unknown>'.\" error\nexport type UiConfigV6 = ExpandRecursively<_UiConfigV6>;\n\nexport const UiConfigV6Struct: Describe<UiConfigV6> = object({\n version: literal(6),\n primaryColor: ColorConfigStruct,\n darkColor: ColorConfigStruct,\n lightColor: ColorConfigStruct,\n linkColor: ColorConfigStruct,\n enableSidebarIcons: optional(defaulted(boolean(), true)),\n\n appearance: type({\n customFonts: optional(array(FontFaceConfigStruct)),\n pageElements: type({\n pageTitle: optional(TypographyConfigStruct),\n pageDescription: optional(TypographyConfigStruct),\n headingLarge: optional(TypographyConfigStruct),\n headingMedium: optional(TypographyConfigStruct),\n headingSmall: optional(TypographyConfigStruct),\n bodyText: optional(TypographyConfigStruct),\n link: optional(TypographyLinkConfigStruct),\n }),\n }),\n});\n\nexport interface _UiConfigV7 extends Omit<UiConfigV6, 'version'> {\n version: 7;\n appearance: {\n navigation?: typeof customizableNavElements;\n customFonts?: UiConfigV6['appearance']['customFonts'];\n pageElements: UiConfigV6['appearance']['pageElements'];\n };\n}\n\n// ExpandRecursively needed to avoid \"Type 'UiConfig7' is not assignable to type 'Record<string, unknown>'.\" error in ui-config.xstate.ts\nexport type UiConfigV7 = ExpandRecursively<_UiConfigV7>;\n\nexport const UiConfigV7Struct: Describe<UiConfigV7> = object({\n version: literal(7),\n primaryColor: ColorConfigStruct,\n darkColor: ColorConfigStruct,\n lightColor: ColorConfigStruct,\n linkColor: ColorConfigStruct,\n enableSidebarIcons: optional(defaulted(boolean(), true)),\n\n appearance: type({\n customFonts: optional(array(FontFaceConfigStruct)),\n navigation: optional(\n type({\n primaryNav: optional(PrimaryNavCustomizationConfigStruct),\n secondaryNav: optional(SecondaryNavCustomizationConfigStruct),\n tabs: optional(NavCustomizationConfigStruct),\n }),\n ),\n pageElements: type({\n pageTitle: optional(TypographyConfigStruct),\n pageDescription: optional(TypographyConfigStruct),\n headingLarge: optional(TypographyConfigStruct),\n headingMedium: optional(TypographyConfigStruct),\n headingSmall: optional(TypographyConfigStruct),\n bodyText: optional(TypographyConfigStruct),\n link: optional(TypographyLinkConfigStruct),\n }),\n }),\n});\n\nexport interface _UiConfigV8\n extends Omit<UiConfigV7, 'version' | 'enableSidebarIcons'> {\n version: 8;\n}\n\n// ExpandRecursively needed to avoid \"Type 'UiConfig8' is not assignable to type 'Record<string, unknown>'.\" error in ui-config.xstate.ts\n// TODO: move this to @knapsack/types\nexport type UiConfigV8 = ExpandRecursively<_UiConfigV8>;\n\nexport const UiConfigV8Struct: Describe<UiConfigV8> = object({\n version: literal(8),\n primaryColor: ColorConfigStruct,\n darkColor: ColorConfigStruct,\n lightColor: ColorConfigStruct,\n linkColor: ColorConfigStruct,\n\n appearance: type({\n customFonts: optional(array(FontFaceConfigStruct)),\n navigation: optional(\n type({\n primaryNav: optional(PrimaryNavCustomizationConfigStruct),\n secondaryNav: optional(SecondaryNavCustomizationConfigStruct),\n tabs: optional(NavCustomizationConfigStruct),\n }),\n ),\n pageElements: type({\n pageTitle: optional(TypographyConfigStruct),\n pageDescription: optional(TypographyConfigStruct),\n headingLarge: optional(TypographyConfigStruct),\n headingMedium: optional(TypographyConfigStruct),\n headingSmall: optional(TypographyConfigStruct),\n bodyText: optional(TypographyConfigStruct),\n link: optional(TypographyLinkConfigStruct),\n }),\n }),\n});\n\nexport interface _UiConfigV9\n extends Omit<\n UiConfigV8,\n 'version' | 'primaryColor' | 'darkColor' | 'lightColor' | 'linkColor'\n > {\n version: 9;\n}\nexport type UiConfigV9 = ExpandRecursively<_UiConfigV9>;\n\nexport const UiConfigV9Struct: Describe<UiConfigV9> = object({\n version: literal(9),\n\n appearance: type({\n customFonts: optional(array(FontFaceConfigStruct)),\n navigation: optional(\n type({\n primaryNav: optional(PrimaryNavCustomizationConfigStruct),\n secondaryNav: optional(SecondaryNavCustomizationConfigStruct),\n tabs: optional(NavCustomizationConfigStruct),\n }),\n ),\n pageElements: type({\n pageTitle: optional(TypographyConfigStruct),\n pageDescription: optional(TypographyConfigStruct),\n headingLarge: optional(TypographyConfigStruct),\n headingMedium: optional(TypographyConfigStruct),\n headingSmall: optional(TypographyConfigStruct),\n bodyText: optional(TypographyConfigStruct),\n link: optional(TypographyLinkConfigStruct),\n }),\n }),\n});\n\nexport interface _UiConfigV10 extends Omit<UiConfigV9, 'version'> {\n version: 10;\n appearance: {\n navigation?: UiConfigV9['appearance']['navigation'];\n customFonts?: UiConfigV9['appearance']['customFonts'];\n pageElements: typeof pageElementsV2;\n };\n}\nexport type UiConfigV10 = ExpandRecursively<_UiConfigV10>;\n\nexport const UiConfigV10Struct: Describe<UiConfigV10> = object({\n version: literal(10),\n\n appearance: type({\n customFonts: optional(array(FontFaceConfigStruct)),\n navigation: optional(\n type({\n primaryNav: optional(PrimaryNavCustomizationConfigStruct),\n secondaryNav: optional(SecondaryNavCustomizationConfigStruct),\n tabs: optional(NavCustomizationConfigStruct),\n }),\n ),\n pageElements: type({\n pageTitle: optional(TypographyConfigStruct),\n pageDescription: optional(TypographyConfigStruct),\n headingXLarge: optional(TypographyConfigStruct),\n headingLarge: optional(TypographyConfigStruct),\n headingMedium: optional(TypographyConfigStruct),\n headingSmall: optional(TypographyConfigStruct),\n headingXSmall: optional(TypographyConfigStruct),\n bodyText: optional(TypographyConfigStruct),\n link: optional(TypographyLinkConfigStruct),\n }),\n }),\n});\n\nexport type UiConfigVersions =\n | typeof UiConfigV1Struct.TYPE\n | typeof UiConfigV2Struct.TYPE\n | typeof UiConfigV3Struct.TYPE\n | typeof UiConfigV4Struct.TYPE\n | typeof UiConfigV5Struct.TYPE\n | typeof UiConfigV6Struct.TYPE\n | typeof UiConfigV7Struct.TYPE\n | typeof UiConfigV8Struct.TYPE\n | typeof UiConfigV9Struct.TYPE\n | typeof UiConfigV10Struct.TYPE;\n\n// ALIASES FOR LATEST VERSIONS\nexport type UiConfig = UiConfigV10;\nexport const UiConfigStruct: typeof UiConfigV10Struct = UiConfigV10Struct;\n\nexport type NavElementNames = keyof UiConfig['appearance']['navigation'];\n","import colorString from 'color-string';\nimport { define, Describe, literal, string, type, union } from 'superstruct'; // https://docs.superstructjs.org\n\n/** Use `import { isColor } from '@knapsack/color-utils'` if you can, need to duplicate this logic due to dep cycle */\nfunction isColor(color: unknown): color is string {\n if (typeof color !== 'string') return false;\n try {\n return !!colorString.get(color);\n } catch (e) {\n return false;\n }\n}\n\nexport type ColorTokenConfig = {\n type: 'design-token';\n /** Will be **either** `-` (old) or `.` (new) separated */\n tokenName: string;\n};\nexport type ColorConfig =\n | { type: 'value'; colorValue: string }\n | ColorTokenConfig;\n\nexport const ColorStringStruct = define<string>(\n 'ColorStringStruct',\n (value) => typeof value === 'string' && isColor(value),\n);\n\nexport const ColorConfigStruct: Describe<ColorConfig> = union([\n type({\n type: literal('value'),\n colorValue: ColorStringStruct,\n }),\n type({\n type: literal('design-token'),\n tokenName: string(),\n }),\n]);\n\n// so we can check if an object is not just a ColorConfig but specifically a token\nexport const ColorTokenConfigStruct: Describe<ColorTokenConfig> = type({\n type: literal('design-token'),\n tokenName: string(),\n});\n","import {\n Describe,\n string,\n type,\n union,\n number,\n enums,\n optional,\n literal,\n array,\n size,\n boolean,\n object,\n} from 'superstruct'; // https://docs.superstructjs.org\nimport { ColorConfig, ColorConfigStruct } from './color-config';\n\nexport const HeadingLevels = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'] as const;\nexport type HeadingLevel = (typeof HeadingLevels)[number];\n\nexport type FontSizeConfigVal = {\n unit: 'px' | 'rem';\n value: number;\n};\n\nexport const FontSizeConfigValStruct: Describe<FontSizeConfigVal> = object({\n unit: enums(['rem', 'px']),\n value: number(),\n});\n\nexport type FontFaceWeight = number | string;\n\nexport const FontFaceWeightStruct: Describe<FontFaceWeight> = union([\n string(),\n number(),\n]);\n\nexport enum FontFaceSourceFormats {\n woff2 = 'woff2',\n woff = 'woff',\n}\n\nexport type FontFaceSource = {\n /**\n * Note: if /when we eventually add 'local' type support, format isn't used!\n */\n format: keyof typeof FontFaceSourceFormats;\n type: 'url';\n path: string;\n};\n\nexport const FontFaceFormatsEnumStruct = enums(['woff2', 'woff']);\n\nexport const FontFaceSourceStruct: Describe<FontFaceSource> = type({\n format: FontFaceFormatsEnumStruct,\n type: literal('url'),\n path: string(),\n});\n\nexport type FontFaceConfig = {\n /**\n * registered name of the custom font\n *\n * MDN Docs on {@link https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-family @font-face's font-family property}\n */\n family?: string;\n\n /**\n * number between 1 and 1000.\n *\n * note: since two weights are allowed (with variable fonts), this type is an\n * optional array for easy parsing down the road.\n *\n * MDN Docs on {@link https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-weight @font-face's font-weight property}.\n */\n weight?: FontFaceWeight | FontFaceWeight[];\n\n /**\n * the collection of urls / paths pointing to font files\n *\n * MDN Docs on {@link https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/src @font-face's src property}.\n */\n src?: FontFaceSource[];\n\n /**\n * the style of the custom font (ex. normal or italic)\n *\n * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-style See MDN docs on font-style}.\n */\n style?: string;\n\n // @todo: implement these later\n // display?: 'auto' | 'block' | 'swap' | 'fallback' | 'optional';\n // variationSettings?: string;\n // unicodeRange?: string; // or ideally, URange; //\n // see https://drafts.csswg.org/css-syntax-3/#urange-syntax and\n // https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/unicode-range\n};\n\nexport const FontFaceConfigStruct: Describe<FontFaceConfig> = type({\n family: optional(string()),\n weight: optional(\n union([FontFaceWeightStruct, size(array(FontFaceWeightStruct), 2)]),\n ),\n src: optional(array(FontFaceSourceStruct)),\n style: optional(string()),\n display: optional(enums(['auto', 'block', 'swap', 'fallback', 'optional'])),\n variationSettings: optional(string()),\n unicodeRange: optional(string()),\n});\n\nexport type FontSizeConfig = {\n min: FontSizeConfigVal;\n max?: FontSizeConfigVal;\n};\n\nexport enum TextTransforms {\n inherit = 'As typed',\n capitalize = 'Capitalize',\n lowercase = 'Lowercase',\n uppercase = 'Uppercase',\n}\n\nexport enum FontStretches {\n 'ultra-condensed' = 'Ultra-condensed',\n 'extra-condensed' = 'Extra-condensed',\n condensed = 'Condensed',\n 'semi-condensed' = 'Semi-condensed',\n normal = 'Normal',\n 'semi-expanded' = 'Semi-expanded',\n expanded = 'Expanded',\n 'extra-expanded' = 'Extra-expanded',\n 'ultra-expanded' = 'Ultra-expanded',\n}\n\nexport type TypographyConfig = {\n /**\n * min / max height used to future-proof way of supporting responsive typography\n */\n fontSize?: FontSizeConfig;\n\n /**\n * reminder: line-heights can also be unitless!\n */\n lineHeight?: string | number;\n fontWeight?: FontFaceWeight;\n\n /**\n * note: letter-spacing can't be unitless, unit required!\n */\n letterSpacing?: string;\n\n /**\n * if not specified, Knapsack default font, otherwise should allow for a stack of font strings + fallbacks (including the names of custom registered fonts)\n */\n fontFamily?: string;\n\n textColor?: ColorConfig;\n\n textTransform?: keyof typeof TextTransforms;\n\n fontStretch?: keyof typeof FontStretches;\n};\n\nexport interface TypographyLinkConfig {\n fontWeight?: FontFaceWeight;\n textColor?: ColorConfig;\n hoverColor?: ColorConfig;\n underline?: boolean;\n textTransform?: keyof typeof TextTransforms;\n fontStretch?: keyof typeof FontStretches;\n}\n\nexport const TypographyLinkConfigStruct: Describe<TypographyLinkConfig> = type({\n fontWeight: optional(union([string(), number()])),\n textColor: optional(ColorConfigStruct),\n hoverColor: optional(ColorConfigStruct),\n underline: optional(boolean()),\n textTransform: optional(\n enums(['inherit', 'capitalize', 'lowercase', 'uppercase']),\n ),\n fontStretch: optional(\n enums([\n 'ultra-condensed',\n 'extra-condensed',\n 'condensed',\n 'semi-condensed',\n 'normal',\n 'semi-expanded',\n 'expanded',\n 'extra-expanded',\n 'ultra-expanded',\n ]),\n ),\n});\n\nexport const FontSizeConfigStruct: Describe<FontSizeConfig> = type({\n min: FontSizeConfigValStruct,\n max: optional(FontSizeConfigValStruct),\n});\n\nexport const TypographyConfigStruct: Describe<TypographyConfig> = type({\n fontSize: optional(FontSizeConfigStruct),\n lineHeight: optional(union([string(), number()])),\n fontWeight: optional(union([string(), number()])),\n letterSpacing: optional(string()),\n fontFamily: optional(string()),\n textColor: optional(ColorConfigStruct),\n textTransform: optional(\n enums(['inherit', 'capitalize', 'lowercase', 'uppercase']),\n ),\n fontStretch: optional(\n enums([\n 'ultra-condensed',\n 'extra-condensed',\n 'condensed',\n 'semi-condensed',\n 'normal',\n 'semi-expanded',\n 'expanded',\n 'extra-expanded',\n 'ultra-expanded',\n ]),\n ),\n});\n\nconst pageElementConfig: TypographyConfig = {};\nconst pageLinkElementConfig: TypographyLinkConfig = {};\n\nexport const pageElements = {\n pageTitle: pageElementConfig,\n pageDescription: pageElementConfig,\n headingLarge: pageElementConfig,\n headingMedium: pageElementConfig,\n headingSmall: pageElementConfig,\n bodyText: pageElementConfig,\n link: pageLinkElementConfig,\n} as const;\n\nexport const pageElementsV2 = {\n pageTitle: pageElementConfig,\n pageDescription: pageElementConfig,\n headingXLarge: pageElementConfig,\n headingLarge: pageElementConfig,\n headingMedium: pageElementConfig,\n headingSmall: pageElementConfig,\n headingXSmall: pageElementConfig,\n bodyText: pageElementConfig,\n link: pageLinkElementConfig,\n} as const;\n\nexport type PageElementNames = keyof typeof pageElementsV2;\nexport type PageElementConfig = (typeof pageElementsV2)[PageElementNames];\n","import { Describe, type, union, optional } from 'superstruct'; // https://docs.superstructjs.org\nimport { ColorConfig, ColorConfigStruct } from './color-config';\nimport { TypographyConfig, TypographyConfigStruct } from './typography-config';\n\nexport interface NavCustomizationConfig extends TypographyConfig {\n accentColor?: ColorConfig;\n}\n\nexport interface PrimaryNavCustomizationConfig extends NavCustomizationConfig {\n hoverColor?: ColorConfig;\n backgroundColor?: ColorConfig;\n}\n\nexport type SecondaryNavCustomizationConfig = Omit<\n PrimaryNavCustomizationConfig,\n 'hoverColor'\n>;\n\nexport const NavCustomizationConfigStruct: Describe<NavCustomizationConfig> =\n union([\n TypographyConfigStruct,\n type({\n accentColor: optional(ColorConfigStruct),\n }),\n ]);\n\n// hoverColor: optional(ColorConfigStruct),\nexport const PrimaryNavCustomizationConfigStruct: Describe<PrimaryNavCustomizationConfig> =\n union([\n NavCustomizationConfigStruct,\n type({\n hoverColor: optional(ColorConfigStruct),\n backgroundColor: optional(ColorConfigStruct),\n }),\n ]);\n\nexport const SecondaryNavCustomizationConfigStruct: Describe<SecondaryNavCustomizationConfig> =\n union([\n NavCustomizationConfigStruct,\n type({\n backgroundColor: optional(ColorConfigStruct),\n }),\n ]);\n\nconst navCustomizationConfig: NavCustomizationConfig = {};\nconst secondaryNavCustomizationConfig: SecondaryNavCustomizationConfig = {};\nconst primaryNavCustomizationConfig: PrimaryNavCustomizationConfig = {};\n\nexport const customizableNavElements = {\n primaryNav: primaryNavCustomizationConfig,\n secondaryNav: secondaryNavCustomizationConfig,\n tabs: navCustomizationConfig,\n} as const;\n\nexport type CustomizableNavElementNames = keyof typeof customizableNavElements;\nexport type CustomizableNavElementConfig =\n (typeof customizableNavElements)[CustomizableNavElementNames];\n","import type { JSONContent } from '@tiptap/core';\nimport { TokenType } from './design-tokens-types';\n\nexport const BlockSizes = ['large', 'medium', 'small'] as const;\ntype BlockSize = (typeof BlockSizes)[number];\n\nexport const BlockSpacings = ['large', 'medium', 'small'] as const;\ntype BlockSpacing = (typeof BlockSpacings)[number];\n\nexport type BlockHeader = {\n showHeader?: boolean;\n title?: string;\n description?: string;\n};\n\n/**\n * Data for blocks made using the `createEmbedBlock` function\n */\ntype IframeBlockData = {\n url?: string;\n clickToInteract: boolean;\n height?: number | string;\n};\n\ntype BlockConfigBase<\n BlockType extends string,\n Data extends Record<string, unknown> = never,\n> = {\n // Unique across all blocks, basically a UUID upon creation\n // e.g. `ut79D2X_H`\n id: string;\n // Match this to a Slices `id` to use it\n blockType: BlockType;\n data: Data;\n header?: BlockHeader;\n size?: BlockSize;\n /** Controls the amount of spacing AFTER a block */\n spacing?: BlockSpacing;\n};\n\ntype BlockConfigUnion =\n | BlockConfigBase<\n 'component-spec-block',\n {\n patternId?: string;\n templateId?: string;\n collapsible?: boolean;\n expanded?: boolean;\n }\n >\n | BlockConfigBase<\n 'pattern-template-block',\n {\n patternId?: string;\n templateId?: string;\n demoId?: string;\n /** @deprecated */\n demoSize?: string;\n showSchemaForm?: boolean;\n showCodeSnippet?: boolean;\n hideControls?: boolean;\n allowResizing?: boolean;\n }\n >\n | BlockConfigBase<\n 'design-src-tiles',\n {\n columns?: '4' | '3' | '2' | '1';\n imageStyles?: {\n align?: 'left' | 'right' | 'center';\n background?: 'dark' | 'light';\n corners?: 'square' | 'rounded';\n fit?: 'contain' | 'fill';\n seamless?: boolean;\n size?: 'auto' | 'small' | 'medium' | 'large' | 'xsmall' | 'xlarge';\n };\n items: {\n description?: JSONContent;\n fileId: string;\n nodeId: string;\n title?: string;\n }[];\n layout?: 'grid' | 'list';\n hideComponentProps?: boolean;\n }\n >\n | BlockConfigBase<\n 'design-src-component',\n {\n fileId: string;\n componentId: string;\n contents: Array<'variants' | 'spec' | 'usage'>;\n styles?: {\n columns?: '4' | '3' | '2' | '1';\n image?: {\n align?: 'left' | 'right' | 'center';\n background?: 'dark' | 'light';\n corners?: 'square' | 'rounded';\n size?: 'auto' | 'small' | 'medium' | 'large' | 'xsmall' | 'xlarge';\n };\n layout?: 'grid' | 'list';\n };\n hideComponentProps?: boolean;\n hideComponentTitles?: boolean;\n }\n >\n | BlockConfigBase<\n 'text-editor',\n {\n autoFocus?: boolean;\n content: JSONContent;\n }\n >\n | BlockConfigBase<\n 'files-list',\n {\n files: string[];\n }\n >\n | BlockConfigBase<\n 'callout',\n {\n type: 'error' | 'info' | 'success' | 'warning';\n content: JSONContent;\n }\n >\n | BlockConfigBase<\n 'code-snippet',\n {\n content: JSONContent;\n }\n >\n | BlockConfigBase<'divider-block', Record<string, never>>\n | BlockConfigBase<\n 'guidelines',\n {\n guidelines: {\n id: string;\n image?: {\n src: string;\n title?: string;\n alt?: string;\n };\n imageFit?: 'contain' | 'cover';\n type: 'caution' | 'do' | 'dont';\n content?: JSONContent;\n }[];\n gridStyles?: {\n centered?: boolean;\n columns?: '4' | '3' | '2' | '1';\n };\n tileStyles?: {\n headerBeforeImage?: boolean;\n imageOutlined?: boolean;\n imageRounded?: boolean;\n imageSize?:\n | 'none'\n | 'small'\n | 'medium'\n | 'large'\n | 'xsmall'\n | 'xlarge';\n };\n }\n >\n | BlockConfigBase<\n 'image-block',\n {\n imageSize?: 'xs' | 's' | 'm' | 'l' | 'full';\n images?: {\n caption?: string;\n src: string;\n }[];\n }\n >\n | BlockConfigBase<\n 'shortcut-tiles',\n {\n shortcuts: {\n description?: string;\n id: string;\n image?: string;\n link: {\n external?: boolean;\n name?: string;\n path: string;\n };\n title: string;\n }[];\n gridStyles?: {\n columns?: '4' | '3' | '2' | '1';\n centered?: boolean;\n gapSize?: number;\n };\n tileStyles?: {\n imageSize?: 'none' | 'xsmall' | 'small' | 'medium' | 'large';\n outlined?: boolean;\n rounded?: boolean;\n titleSize?: 'xsmall' | 'small' | 'medium' | 'large' | 'xlarge';\n };\n }\n >\n | BlockConfigBase<\n 'table',\n {\n content: JSONContent;\n }\n >\n | BlockConfigBase<\n 'pattern-variations',\n {\n patternId?: string;\n templateId?: string;\n demoId?: string;\n variationId?: string;\n assetSetId?: string;\n excludePropValue?: string;\n includePropValue?: string;\n size?: 's' | 'm' | 'l' | 'full';\n /** @deprecated */\n hideBlockTitle?: boolean;\n }\n >\n | BlockConfigBase<\n 'design-tokens',\n {\n tokenType: TokenType | '';\n demoId: string;\n groupIds: string[];\n exclude?: string;\n include?: string;\n }\n >\n | BlockConfigBase<\n 'design-token-collection',\n {\n collectionId: string;\n }\n >\n | BlockConfigBase<\n 'pattern-list-block',\n {\n itemSize?: 'small' | 'medium' | 'large' | 'full';\n showDescriptions?: boolean;\n excludePatterns?: string[];\n }\n >\n | BlockConfigBase<\n 'pattern-status-table-block',\n {\n excludeHiddenNavItems?: boolean;\n excludePatterns?: string[];\n }\n >\n | BlockConfigBase<\n 'video',\n {\n video: {\n format: string;\n name: string;\n size: string;\n url: string;\n };\n }\n >\n /** @deprecated */\n | BlockConfigBase<\n 'design-token-block',\n {\n tokens?: {\n type?: TokenType;\n category?: string;\n tags?: string[];\n name?: string;\n exclude?: string;\n };\n demo?: {\n id?: string;\n };\n }\n >\n | BlockConfigBase<'generic-iframe', IframeBlockData>\n | BlockConfigBase<'abstract-block', IframeBlockData>\n | BlockConfigBase<'adobe-xd-block', IframeBlockData>\n | BlockConfigBase<'airtable-block', IframeBlockData>\n | BlockConfigBase<'figma-block', IframeBlockData>\n | BlockConfigBase<'framer-cloud-block', IframeBlockData>\n | BlockConfigBase<'lucidchart-block', IframeBlockData>\n | BlockConfigBase<'vimeo-block', IframeBlockData>\n | BlockConfigBase<'youtube-block', IframeBlockData>\n | BlockConfigBase<'whimsical-block', IframeBlockData>\n | BlockConfigBase<\n 'markdown-block',\n {\n md?: string | string[];\n /** Automatically switches to edit mode + autofocuses on the editor */\n autoEdit?: boolean;\n columns?: number;\n }\n >;\n\n/**\n * This is the config for a block - which is what is stored in `block.ID.json` and available at `data.db.blocks.byId[blockId]`\n *\n * @example\n * // Use the first generic to filter down to a specific block type\n * type PatternListBlockConfig = BlockConfig<'pattern-list-block'>;\n * // Access the field `data` by doing this:\n * type Data= BlockConfig<'pattern-list-block'>['data'];\n */\nexport type BlockConfig<\n BlockType extends BlockConfigUnion['blockType'] = BlockConfigUnion['blockType'],\n> = Extract<BlockConfigUnion, { blockType: BlockType }>;\n\n/** Block Collections can be in several locations */\nexport type BlockCollectionLocation =\n | {\n type: 'page';\n pageId: string;\n }\n /** Tab on Pattern Page */\n | {\n type: 'patternSubPage';\n patternId: string;\n subPageId: string;\n }\n /** At bottom of Pattern Template page (under Spec table) - least used location */\n | {\n type: 'patternTemplate';\n patternId: string;\n templateId: string;\n };\n","export const tokenNameDisplayFormats = {\n default: 'Default',\n android: 'Android',\n cssVar: 'CSS Var',\n json: 'JSON',\n less: 'Less',\n scss: 'SCSS',\n swift: 'Swift',\n} as const;\n\nexport type TokenNameDisplayFormat = keyof typeof tokenNameDisplayFormats;\n","import * as s from 'superstruct';\n\nexport const strokeStyleValues = [\n 'solid',\n 'dashed',\n 'dotted',\n 'double',\n 'groove',\n 'ridge',\n 'outset',\n 'inset',\n] as const;\n\n/**\n * Don't use this one, use this instead:\n * @see {@link TokenDefinitionSingular}\n */\ntype TokenDefinitionSingularRaw =\n | { type: 'string'; value: string }\n | { type: 'number'; value: number }\n | { type: 'boolean'; value: boolean }\n | { type: 'color'; value: string }\n | {\n type: 'strokeStyle';\n value: (typeof strokeStyleValues)[number];\n }\n | { type: 'dimension'; value: `${number}${'px' | 'rem' | 'em' | '%'}` }\n | { type: 'duration'; value: `${number}ms` }\n // | { type: 'fontFamily'; value: string | string[] }\n | {\n type: 'fontWeight';\n // @TODO: Include union of possible strings https://tr.designtokens.org/format/#font-weight\n value: string | number;\n }\n | { type: 'cubicBezier'; value: [number, number, number, number] };\n\n/**\n * Definitions for both singular (non-composite) tokens.\n * Use first generic param to get just that type.\n * @example\n * ```ts\n * type TokenDefinitionDimension = TokenDefinitionSingular<'dimension'>\n * ```\n */\nexport type TokenDefinitionSingular<\n TheTokenType extends TokenDefinitionSingularRaw['type'] = TokenDefinitionSingularRaw['type'],\n> = Extract<TokenDefinitionSingularRaw, { type: TheTokenType }>;\n\n/**\n * Don't use this one, use this instead:\n * @see {@link TokenDefinitionComposite}\n */\ntype TokenDefinitionCompositeRaw =\n | {\n type: 'border';\n value: {\n color: { type: 'color' };\n style: { type: 'strokeStyle' };\n width: { type: 'dimension' };\n };\n }\n | {\n type: 'shadow';\n value: {\n color: { type: 'color' };\n offsetX: { type: 'dimension' };\n offsetY: { type: 'dimension' };\n spread: { type: 'dimension' };\n blur: { type: 'dimension' };\n inset: { type: 'boolean' };\n };\n }\n | {\n type: 'transition';\n value: {\n duration: { type: 'duration' };\n delay: { type: 'duration' };\n timingFunction: { type: 'cubicBezier' };\n };\n };\n// | {\n// type: 'gradient';\n// value: {\n// color: { type: 'color' };\n// position: { type: 'dimension' };\n// }[];\n// };\n\n/**\n * Definitions for composite tokens.\n * Use first generic param to get just that type.\n * @example\n * ```ts\n * type TokenDefinitionShadow = TokenDefinitionComposite<'shadow'>\n * ```\n */\nexport type TokenDefinitionComposite<\n TheTokenType extends TokenDefinitionCompositeRaw['type'] = TokenDefinitionCompositeRaw['type'],\n> = Extract<TokenDefinitionCompositeRaw, { type: TheTokenType }>;\n\n/**\n * Definitions for both singular and composite tokens.\n * Use first generic param to get just that type.\n * @example\n * ```ts\n * type TokenDefinitionDimension = TokenDefinition<'dimension'>\n * ```\n */\nexport type TokenDefinition<\n TheTokenType extends\n | TokenDefinitionComposite['type']\n | TokenDefinitionSingular['type'] =\n | TokenDefinitionComposite['type']\n | TokenDefinitionSingular['type'],\n> = Extract<\n TokenDefinitionComposite | TokenDefinitionSingular,\n { type: TheTokenType }\n>;\n\nexport type TokenReference = `{${string}}`;\n/** ensures there is no `{}` */\nexport type NotTokenReference<T> = T extends TokenReference ? never : T;\n\nexport function isTokenReference(val: unknown): val is TokenReference {\n if (typeof val !== 'string') return false;\n // total times `{` appears in `val`\n // Handle situation `{a.b} {c.d}`. Ensure count of `{` and `}` === 1. This\n // guarantees we ONLY support a single reference, ie `{a.b}`\n const totalOpenBrackets = val.split('{').length - 1;\n return totalOpenBrackets === 1 && val.startsWith('{') && val.endsWith('}');\n}\n\nexport function hasTokenReferences(val: unknown): boolean {\n return typeof val === 'string' && val.includes('{');\n}\n\nexport function isNotTokenReference<T>(\n value: T,\n): value is NotTokenReference<T> {\n return !isTokenReference(value);\n}\n\nexport const TokenReferenceStruct = s.define<TokenReference>(\n 'Token Reference',\n (value) => {\n if (typeof value !== 'string') return false;\n if (isNotTokenReference(value)) {\n return 'Must start and end with curly braces';\n }\n return true;\n },\n);\n\nexport type TokenType = TokenDefinition['type'];\nexport type TokenTypeComposite = TokenDefinitionComposite['type'];\nexport type TokenTypeSingular = TokenDefinitionSingular['type'];\nexport type TokenValueSingular = TokenDefinitionSingular['value'];\n\n// We make a Record to ensure we have *every* possible value\n// b/c TS will yell at us if a new one is added but isn't included here\n// then we make an array out of them, so we can be sure we have *every* possible value\nconst compositeTypesRecord: Record<TokenTypeComposite, TokenTypeComposite> = {\n border: 'border',\n shadow: 'shadow',\n transition: 'transition',\n};\nexport const tokenTypeComposites = Object.values(compositeTypesRecord);\nconst singularTypesRecord: Record<TokenTypeSingular, TokenTypeSingular> = {\n string: 'string',\n number: 'number',\n boolean: 'boolean',\n color: 'color',\n dimension: 'dimension',\n duration: 'duration',\n // fontFamily: 'fontFamily',\n fontWeight: 'fontWeight',\n strokeStyle: 'strokeStyle',\n cubicBezier: 'cubicBezier',\n};\nexport const tokenTypeSingulars = Object.values(singularTypesRecord);\n/**\n * @deprecated You probably want `isTokenDataComposite`\n * @see {isTokenDataComposite}\n */\nexport function isTokenTypeComposite(\n type: TokenType,\n): type is TokenTypeComposite {\n return tokenTypeComposites.includes(type as TokenTypeComposite);\n}\n\nexport function isTokenTypeSingular(\n type: TokenType,\n): type is TokenTypeSingular {\n return tokenTypeSingulars.includes(type as TokenTypeSingular);\n}\n","import { Simplify, expectType, isObjKey, isObject } from '@knapsack/utils';\nimport * as s from 'superstruct';\nimport {\n NotTokenReference,\n TokenDefinition,\n TokenDefinitionComposite,\n TokenDefinitionSingular,\n TokenReference,\n TokenReferenceStruct,\n TokenType,\n hasTokenReferences,\n isTokenTypeComposite,\n} from './token-definitions';\nimport { TokenKsExtensions, TokenOrder } from './token-misc';\nimport { TokenSrcValue } from './token-src';\n\n/** Used for tokens AND groups */\ntype TokenDataBothCommon = {\n id: string;\n description?: string;\n};\n\n// Shows what a fully de-referenced `value` of a composite token would be\ntype CreateDataValueForComposite<\n ValueObj extends Record<string, { type: TokenDefinitionSingular['type'] }>,\n> = {\n [Key in keyof ValueObj]: TokenDefinitionSingular<\n ValueObj[Key]['type']\n >['value'];\n};\n\nexpectType<\n CreateDataValueForComposite<TokenDefinitionComposite<'shadow'>['value']>[]\n>([\n {\n inset: false,\n color: '#000',\n offsetX: '0px',\n offsetY: '0px',\n spread: '0px',\n blur: '0px',\n },\n {\n color: '#000',\n offsetX: '0px',\n offsetY: '0px',\n spread: '0px',\n blur: '0px',\n inset: true,\n },\n]);\n\ntype TokenDataCommon<\n Info extends {\n /** Basically the ID */\n type: TokenDefinition['type'];\n value: unknown;\n },\n> = TokenDataBothCommon & {\n type: Info['type'];\n value: Info['value'];\n /**\n * Extracted from `$extensions['cloud.knapsack'].token`\n */\n tokenConfig?: TokenKsExtensions['token'];\n /**\n * Tokens that are references by this token\n * @todo will need to change for shadow\n * @example\n * ```\n * [\n * ['color.primary', 'color.secondary'],\n * ['spacing.medium']\n * ]\n * ```\n */\n references?: Array<string[]>;\n /**\n * Tokens that use this as a reference token\n * @see {CreateTokenData.references}\n * @example\n * * ```\n * [\n * ['color.primary', 'color.secondary'],\n * ['spacing.medium']\n * ]\n * ```\n */\n // referencedBy?: Array<string[]>;\n};\n\ntype CreateTokenData<\n Info extends {\n type: TokenDefinition['type'];\n value: unknown;\n },\n> =\n | ({\n kind: 'ref';\n /** Has `{}` removed */\n referencedTokenId: string;\n originalValue: TokenReference;\n } & TokenDataCommon<Info>)\n | ({\n kind: 'static';\n originalValue: NotTokenReference<TokenSrcValue<Info['type']>>;\n } & TokenDataCommon<Info>);\n\nconst TokenDataBaseStruct: s.Describe<\n TokenDataBothCommon & {\n references?: Array<string[]>;\n tokenConfig?: TokenKsExtensions['token'];\n }\n> = s.type({\n id: s.string(),\n description: s.optional(s.string()),\n references: s.optional(s.array(s.array(s.string()))),\n tokenConfig: s.optional(\n s.type({\n purpose: s.optional(s.string()),\n }),\n ),\n});\n\ntype TokenDataSingularRaw = {\n // ignore the key, this makes a discriminated union out of the values\n [TokenDef in TokenDefinitionSingular as TokenDef['type']]: Simplify<\n CreateTokenData<TokenDef>\n >;\n}[TokenDefinitionSingular['type']];\n\nexport type TokenDataSingular<\n TT extends TokenDataSingularRaw['type'] = TokenDataSingularRaw['type'],\n> = Extract<TokenDataSingularRaw, { type: TT }>;\n\nexpectType<TokenDataSingular[]>([\n {\n type: 'duration',\n value: '1ms',\n originalValue: '1ms',\n id: '1',\n kind: 'static',\n },\n {\n type: 'duration',\n value: '1ms',\n kind: 'ref',\n id: '1',\n originalValue: '{a.b}',\n referencedTokenId: '1',\n },\n // @ts-expect-error - kind is wrong\n {\n type: 'duration',\n value: '1ms',\n originalValue: '1ms',\n id: '1',\n kind: 'ref',\n },\n // @ts-expect-error - kind is wrong\n {\n type: 'duration',\n value: '1ms',\n kind: 'static',\n id: '1',\n originalValue: '{a.b}',\n referencedTokenId: '1',\n },\n {\n type: 'color',\n value: '#000',\n kind: 'static',\n id: '1',\n originalValue: '#000',\n },\n {\n type: 'color',\n value: '#000',\n kind: 'ref',\n id: '1',\n originalValue: '{c.b}',\n referencedTokenId: 'c.b',\n },\n {\n type: 'cubicBezier',\n kind: 'static',\n value: [0, 0, 0, 1],\n originalValue: [0, 0, 0, 1],\n id: '1',\n },\n]);\n\ntype TokenDataCompositeRaw = {\n [TokenType in TokenDefinitionComposite['type']]: Simplify<\n CreateTokenData<{\n type: TokenType;\n value: Simplify<\n CreateDataValueForComposite<\n TokenDefinitionComposite<TokenType>['value']\n >\n >;\n }>\n >;\n}[TokenDefinitionComposite['type']];\n\nexport type TokenDataComposite<\n TheTokenType extends TokenDataCompositeRaw['type'] = TokenDataCompositeRaw['type'],\n> = Extract<TokenDataCompositeRaw, { type: TheTokenType }>;\n\nexport function isTokenDataComposite(\n tokenData: TokenData,\n): tokenData is TokenDataComposite {\n return isTokenTypeComposite(tokenData.type);\n}\n\nexpectType<TokenDataComposite[]>([\n {\n type: 'border',\n kind: 'static',\n id: '1',\n value: {\n color: '#000',\n style: 'solid',\n width: '1px',\n },\n originalValue: {\n color: '#000',\n style: 'solid',\n width: '1px',\n },\n },\n {\n type: 'border',\n kind: 'ref',\n referencedTokenId: 'a.b',\n id: '1',\n value: {\n color: 'red',\n style: 'dashed',\n width: '2px',\n },\n originalValue: '{a.b}',\n },\n {\n type: 'shadow',\n value: {\n color: '#000',\n offsetX: '1px',\n offsetY: '1px',\n blur: '1px',\n spread: '1px',\n inset: false,\n },\n originalValue: {\n color: '#000',\n offsetX: '{a.a}',\n offsetY: '1px',\n blur: '1px',\n spread: '1px',\n inset: false,\n },\n id: '1',\n kind: 'static',\n },\n {\n type: 'shadow',\n kind: 'ref',\n referencedTokenId: 'a.b',\n value: {\n inset: true,\n color: 'red',\n offsetX: '1px',\n blur: '2px',\n offsetY: '3px',\n spread: '4px',\n },\n originalValue: '{a.b}',\n id: '1',\n },\n {\n type: 'transition',\n value: {\n duration: '100ms',\n delay: '200ms',\n timingFunction: [0, 0, 0, 0],\n },\n originalValue: '{a.b}',\n kind: 'ref',\n referencedTokenId: 'a.b',\n id: '1',\n },\n {\n type: 'transition',\n kind: 'static',\n value: {\n duration: '100ms',\n delay: '200ms',\n timingFunction: [0, 0, 0, 0],\n },\n originalValue: {\n duration: '100ms',\n delay: '{a.c}',\n timingFunction: '{a.c}',\n },\n id: '1',\n },\n {\n type: 'transition',\n kind: 'static',\n value: {\n duration: '100ms',\n delay: '200ms',\n timingFunction: [0, 0, 0, 0],\n },\n originalValue: {\n duration: '100ms',\n delay: '200ms',\n timingFunction: [0, 0, 0, 0],\n },\n id: '1',\n },\n]);\n\nexport type TokenData<\n TheTokenType extends TokenDataSingular['type'] | TokenDataComposite['type'] =\n | TokenDataSingular['type']\n | TokenDataComposite['type'],\n> = Extract<TokenDataSingular | TokenDataComposite, { type: TheTokenType }>;\n\nexport type TokenGroupData = Simplify<\n {\n type?: TokenType;\n /**\n * Extracted from `$extensions['cloud.knapsack'].group`\n */\n groupConfig?: TokenKsExtensions['group'];\n children: TokenOrder;\n } & TokenDataBothCommon\n>;\n\n/**\n * @deprecated Use `TokenValueColorStruct` instead\n */\nexport function isTokenValueColor(\n value: unknown,\n): value is TokenDefinitionSingular<'color'>['value'] {\n return typeof value === 'string' && !hasTokenReferences(value);\n}\n\nexport const TokenValueColorStruct = s.define<TokenData<'color'>['value']>(\n 'Color Value',\n (value) => {\n if (typeof value !== 'string') {\n return 'Value must be a string';\n }\n if (value === '') {\n return 'Value must not be empty';\n }\n if (hasTokenReferences(value)) {\n return 'Value must not contain {} (token references)';\n }\n return true;\n },\n);\n\nconst TokenDataColorNonRefStruct: s.Describe<\n Extract<TokenData<'color'>, { kind: 'static' }>\n> = s.assign(\n s.type({\n type: s.literal('color'),\n value: TokenValueColorStruct,\n kind: s.literal('static'),\n originalValue: TokenValueColorStruct,\n }),\n TokenDataBaseStruct,\n);\n\nconst TokenDataColorRefStruct: s.Describe<\n Extract<TokenData<'color'>, { kind: 'ref' }>\n> = s.assign(\n s.type({\n type: s.literal('color'),\n value: TokenValueColorStruct,\n kind: s.literal('ref'),\n originalValue: TokenReferenceStruct,\n referencedTokenId: s.string(),\n }),\n TokenDataBaseStruct,\n);\n\n/**\n * @deprecated Use `TokenValueDimensionStruct` instead\n */\nexport function isTokenValueDimension(\n value: unknown,\n): value is TokenDefinitionSingular<'dimension'>['value'] {\n return (\n typeof value === 'string' &&\n (value.endsWith('px') || value.endsWith('rem')) &&\n !hasTokenReferences(value)\n );\n}\n\nexport const TokenValueDimensionStruct = s.define<\n TokenData<'dimension'>['value']\n>('Dimension Value', (value) => {\n if (typeof value !== 'string') {\n return 'Value must be a string';\n }\n if (hasTokenReferences(value)) {\n return 'Value must not contain {} (token references)';\n }\n if (\n !value.endsWith('px') &&\n !value.endsWith('rem') &&\n !value.endsWith('em') &&\n !value.endsWith('%')\n ) {\n return 'Value must end with px, rem, em or %';\n }\n return true;\n});\n\nconst TokenDataDimensionNonRefStruct: s.Describe<\n Extract<TokenData<'dimension'>, { kind: 'static' }>\n> = s.assign(\n s.type({\n type: s.literal('dimension'),\n value: TokenValueDimensionStruct,\n kind: s.literal('static'),\n originalValue: TokenValueDimensionStruct,\n }),\n TokenDataBaseStruct,\n);\n\nconst TokenDataDimensionRefStruct: s.Describe<\n Extract<TokenData<'dimension'>, { kind: 'ref' }>\n> = s.assign(\n s.type({\n type: s.literal('dimension'),\n value: TokenValueDimensionStruct,\n kind: s.literal('ref'),\n originalValue: TokenReferenceStruct,\n referencedTokenId: s.string(),\n }),\n TokenDataBaseStruct,\n);\n\n/**\n * @deprecated Use `TokenValueDurationStruct` instead\n */\nexport function isTokenValueDuration(\n value: unknown,\n): value is TokenDefinitionSingular<'duration'>['value'] {\n return (\n typeof value === 'string' &&\n value.endsWith('ms') &&\n !hasTokenReferences(value)\n );\n}\n\nexport const TokenValueDurationStruct = s.define<\n TokenData<'duration'>['value']\n>('Duration Value', (value) => {\n if (typeof value !== 'string') {\n return 'Value must be a string';\n }\n if (hasTokenReferences(value)) {\n return 'Value must not contain {} (token references)';\n }\n\n const durationRegex = /^\\d+ms$/;\n if (!durationRegex.test(value)) {\n return 'Value must be a number followed by \"ms\" (e.g., \"100ms\")';\n }\n\n return true;\n});\n\nconst TokenDataDurationNonRefStruct: s.Describe<\n Extract<TokenData<'duration'>, { kind: 'static' }>\n> = s.assign(\n s.type({\n type: s.literal('duration'),\n value: TokenValueDurationStruct,\n kind: s.literal('static'),\n originalValue: TokenValueDurationStruct,\n }),\n TokenDataBaseStruct,\n);\n\nconst TokenDataDurationRefStruct: s.Describe<\n Extract<TokenData<'duration'>, { kind: 'ref' }>\n> = s.assign(\n s.type({\n type: s.literal('duration'),\n value: TokenValueDurationStruct,\n kind: s.literal('ref'),\n originalValue: TokenReferenceStruct,\n referencedTokenId: s.string(),\n }),\n TokenDataBaseStruct,\n);\n\n/**\n * @deprecated Use `TokenValueFontWeightStruct` instead\n */\nexport function isTokenValueFontWeight(\n value: unknown,\n): value is TokenDefinitionSingular<'fontWeight'>['value'] {\n return (\n (typeof value === 'string' || typeof value === 'number') &&\n !hasTokenReferences(value)\n );\n}\n\nexport const TokenValueFontWeightStruct = s.define<\n TokenData<'fontWeight'>['value']\n>('Font Weight Value', (value) => {\n if (typeof value !== 'string' && typeof value !== 'number') {\n return 'Value must be a string or number';\n }\n if (hasTokenReferences(value)) {\n return 'Value must not contain {} (token references)';\n }\n return true;\n});\n\nconst TokenDataFontWeightNonRefStruct: s.Describe<\n Extract<TokenData<'fontWeight'>, { kind: 'static' }>\n> = s.assign(\n s.type({\n type: s.literal('fontWeight'),\n value: TokenValueFontWeightStruct,\n kind: s.literal('static'),\n originalValue: TokenValueFontWeightStruct,\n }),\n TokenDataBaseStruct,\n);\n\nconst TokenDataFontWeightRefStruct: s.Describe<\n Extract<TokenData<'fontWeight'>, { kind: 'ref' }>\n> = s.assign(\n s.type({\n type: s.literal('fontWeight'),\n value: TokenValueFontWeightStruct,\n kind: s.literal('ref'),\n originalValue: TokenReferenceStruct,\n referencedTokenId: s.string(),\n }),\n TokenDataBaseStruct,\n);\n\nexport const TokenValueCubicBezierStruct = s.define<\n TokenData<'cubicBezier'>['value']\n>('Cubic Bezier Value', (value) => {\n if (!Array.isArray(value)) {\n return 'Value must be an array';\n }\n if (value.length !== 4) {\n return 'Value must be an array of 4 numbers';\n }\n if (!value.every((v) => typeof v === 'number')) {\n return 'Value must be an array of 4 numbers';\n }\n // check if the first and third values are between 0 and 1\n // cubic-bezier( <number [0,1]> , <number> , <number [0,1]> , <number> )\n if (value[0] < 0 || value[0] > 1 || value[2] < 0 || value[2] > 1) {\n return 'The first and third cubicBezier values must be between 0 and 1';\n }\n return true;\n});\n\nconst TokenDataCubicBezierNonRefStruct: s.Describe<\n Extract<TokenData<'cubicBezier'>, { kind: 'static' }>\n> = s.assign(\n s.type({\n type: s.literal('cubicBezier'),\n value: TokenValueCubicBezierStruct,\n kind: s.literal('static'),\n originalValue: TokenValueCubicBezierStruct,\n }),\n TokenDataBaseStruct,\n);\n\nconst TokenDataCubicBezierRefStruct: s.Describe<\n Extract<TokenData<'cubicBezier'>, { kind: 'ref' }>\n> = s.assign(\n s.type({\n type: s.literal('cubicBezier'),\n value: TokenValueCubicBezierStruct,\n kind: s.literal('ref'),\n originalValue: TokenReferenceStruct,\n referencedTokenId: s.string(),\n }),\n TokenDataBaseStruct,\n);\n\n/**\n * Determines if it's a \"shadow\" token value AND totally de-referenced\n */\nexport function isTokenValueShadow(\n value: unknown,\n): value is Simplify<\n CreateDataValueForComposite<TokenDefinitionComposite<'shadow'>['value']>\n> {\n return (\n isObject(value) &&\n isTokenValueColor(value.color) &&\n isTokenValueDimension(value.offsetX) &&\n isTokenValueDimension(value.offsetY) &&\n isTokenValueDimension(value.blur) &&\n isTokenValueDimension(value.spread)\n );\n}\n\nconst TokenValueShadowStruct = s.define<TokenData<'shadow'>['value']>(\n 'Shadow Value',\n (value) => {\n if (isTokenValueShadow(value)) return true;\n return `Expected a shadow value, got ${JSON.stringify(value)}`;\n },\n);\n\nconst TokenDataShadowNonRefStruct: s.Describe<\n Extract<TokenData<'shadow'>, { kind: 'static' }>\n> = s.assign(\n s.type({\n type: s.literal('shadow'),\n value: TokenValueShadowStruct,\n kind: s.literal('static'),\n originalValue: s.type({\n color: s.union([TokenValueColorStruct, TokenReferenceStruct]),\n offsetX: s.union([TokenValueDimensionStruct, TokenReferenceStruct]),\n offsetY: s.union([TokenValueDimensionStruct, TokenReferenceStruct]),\n blur: s.union([TokenValueDimensionStruct, TokenReferenceStruct]),\n spread: s.union([TokenValueDimensionStruct, TokenReferenceStruct]),\n inset: s.union([\n // marking this as optional b/c it could be `undefined` instead of `false`\n s.optional(s.boolean()),\n TokenReferenceStruct,\n ]),\n }),\n }),\n TokenDataBaseStruct,\n);\n\nconst TokenDataShadowRefStruct: s.Describe<\n Extract<TokenData<'shadow'>, { kind: 'ref' }>\n> = s.assign(\n s.type({\n type: s.literal('shadow'),\n value: TokenValueShadowStruct,\n kind: s.literal('ref'),\n originalValue: TokenReferenceStruct,\n referencedTokenId: s.string(),\n }),\n TokenDataBaseStruct,\n);\n\nexport const TokenValueStrokeStyleStruct = s.union([\n s.literal('solid'),\n s.literal('dashed'),\n s.literal('dotted'),\n s.literal('double'),\n s.literal('groove'),\n s.literal('ridge'),\n s.literal('outset'),\n s.literal('inset'),\n]);\n\n/**\n * Determines if it's a \"border\" token value AND totally de-referenced\n */\nexport function isTokenValueBorder(\n value: unknown,\n): value is Simplify<\n CreateDataValueForComposite<TokenDefinitionComposite<'border'>['value']>\n> {\n return (\n isObject(value) &&\n TokenValueColorStruct.is(value.color) &&\n TokenValueStrokeStyleStruct.is(value.style) &&\n TokenValueDimensionStruct.is(value.width)\n );\n}\n\nconst TokenValueBorderStruct = s.define<TokenData<'border'>['value']>(\n 'Border Value',\n isTokenValueBorder,\n);\n\nconst TokenDataBorderNonRefStruct: s.Describe<\n Extract<TokenData<'border'>, { kind: 'static' }>\n> = s.assign(\n s.type({\n type: s.literal('border'),\n value: TokenValueBorderStruct,\n kind: s.literal('static'),\n originalValue: s.type({\n color: s.union([TokenValueColorStruct, TokenReferenceStruct]),\n style: s.union([TokenValueStrokeStyleStruct, TokenReferenceStruct]),\n width: s.union([TokenValueDimensionStruct, TokenReferenceStruct]),\n }),\n }),\n TokenDataBaseStruct,\n);\n\nconst TokenDataBorderRefStruct: s.Describe<\n Extract<TokenData<'border'>, { kind: 'ref' }>\n> = s.assign(\n s.type({\n type: s.literal('border'),\n value: TokenValueBorderStruct,\n kind: s.literal('ref'),\n originalValue: TokenReferenceStruct,\n referencedTokenId: s.string(),\n }),\n TokenDataBaseStruct,\n);\n\n/**\n * Determines if it's a \"transition\" token value AND totally de-referenced\n */\nexport function isTokenValueTransition(\n value: unknown,\n): value is Simplify<\n CreateDataValueForComposite<TokenDefinitionComposite<'transition'>['value']>\n> {\n return (\n isObject(value) &&\n TokenValueCubicBezierStruct.is(value.timingFunction) &&\n TokenValueDurationStruct.is(value.duration) &&\n TokenValueDurationStruct.is(value.delay)\n );\n}\nconst TokenValueTransitionStruct = s.define<TokenData<'transition'>['value']>(\n 'Transition Value',\n isTokenValueTransition,\n);\n\nconst TokenDataTransitionNonRefStruct: s.Describe<\n Extract<TokenData<'transition'>, { kind: 'static' }>\n> = s.assign(\n s.type({\n type: s.literal('transition'),\n value: TokenValueTransitionStruct,\n kind: s.literal('static'),\n originalValue: s.type({\n timingFunction: s.union([\n TokenValueCubicBezierStruct,\n TokenReferenceStruct,\n ]),\n duration: s.union([TokenValueDurationStruct, TokenReferenceStruct]),\n delay: s.union([TokenValueDurationStruct, TokenReferenceStruct]),\n }),\n }),\n TokenDataBaseStruct,\n);\n\nconst TokenDataTransitionRefStruct: s.Describe<\n Extract<TokenData<'transition'>, { kind: 'ref' }>\n> = s.assign(\n s.type({\n type: s.literal('transition'),\n value: TokenValueTransitionStruct,\n kind: s.literal('ref'),\n originalValue: TokenReferenceStruct,\n referencedTokenId: s.string(),\n }),\n TokenDataBaseStruct,\n);\n\nconst TokenDataStringNonRefStruct: s.Describe<\n Extract<TokenData<'string'>, { kind: 'static' }>\n> = s.assign(\n s.type({\n type: s.literal('string'),\n value: s.string(),\n kind: s.literal('static'),\n originalValue: s.string(),\n }),\n TokenDataBaseStruct,\n);\n\nconst TokenDataStringRefStruct: s.Describe<\n Extract<TokenData<'string'>, { kind: 'ref' }>\n> = s.assign(\n s.type({\n type: s.literal('string'),\n value: s.string(),\n kind: s.literal('ref'),\n originalValue: TokenReferenceStruct,\n referencedTokenId: s.string(),\n }),\n TokenDataBaseStruct,\n);\n\nconst TokenDataStrokeStyleNonRefStruct: s.Describe<\n Extract<TokenData<'strokeStyle'>, { kind: 'static' }>\n> = s.assign(\n s.type({\n type: s.literal('strokeStyle'),\n value: TokenValueStrokeStyleStruct,\n kind: s.literal('static'),\n originalValue: TokenValueStrokeStyleStruct,\n }),\n TokenDataBaseStruct,\n);\n\nconst TokenDataStrokeStyleRefStruct: s.Describe<\n Extract<TokenData<'strokeStyle'>, { kind: 'ref' }>\n> = s.assign(\n s.type({\n type: s.literal('strokeStyle'),\n value: TokenValueStrokeStyleStruct,\n kind: s.literal('ref'),\n originalValue: TokenReferenceStruct,\n referencedTokenId: TokenValueStrokeStyleStruct,\n }),\n TokenDataBaseStruct,\n);\n// const TokenDataFontFamilyNonRefStruct: s.Describe<\n// Extract<TokenData<'fontFamily'>, { kind: 'static' }>\n// > = s.assign(\n// s.type({\n// type: s.literal('fontFamily'),\n// value: s.union([s.string(), s.array(s.string())]),\n// kind: s.literal('static'),\n// originalValue: s.union([s.string(), s.array(s.string())]),\n// }),\n// TokenDataBaseStruct,\n// );\n\n// const TokenDataFontFamilyRefStruct: s.Describe<\n// Extract<TokenData<'fontFamily'>, { kind: 'ref' }>\n// > = s.assign(\n// s.type({\n// type: s.literal('fontFamily'),\n// value: s.union([s.string(), s.array(s.string())]),\n// kind: s.literal('ref'),\n// originalValue: TokenReferenceStruct,\n// referencedTokenId: s.string(),\n// }),\n// TokenDataBaseStruct,\n// );\n\nconst TokenDataNumberNonRefStruct: s.Describe<\n Extract<TokenData<'number'>, { kind: 'static' }>\n> = s.assign(\n s.type({\n type: s.literal('number'),\n value: s.number(),\n kind: s.literal('static'),\n originalValue: s.number(),\n }),\n TokenDataBaseStruct,\n);\n\nconst TokenDataNumberRefStruct: s.Describe<\n Extract<TokenData<'number'>, { kind: 'ref' }>\n> = s.assign(\n s.type({\n type: s.literal('number'),\n value: s.number(),\n kind: s.literal('ref'),\n originalValue: TokenReferenceStruct,\n referencedTokenId: s.string(),\n }),\n TokenDataBaseStruct,\n);\n\nconst TokenDataBooleanNonRefStruct: s.Describe<\n Extract<TokenData<'boolean'>, { kind: 'static' }>\n> = s.assign(\n s.type({\n type: s.literal('boolean'),\n value: s.boolean(),\n kind: s.literal('static'),\n originalValue: s.boolean(),\n }),\n TokenDataBaseStruct,\n);\n\nconst TokenDataBooleanRefStruct: s.Describe<\n Extract<TokenData<'boolean'>, { kind: 'ref' }>\n> = s.assign(\n s.type({\n type: s.literal('boolean'),\n value: s.boolean(),\n kind: s.literal('ref'),\n originalValue: TokenReferenceStruct,\n referencedTokenId: s.string(),\n }),\n TokenDataBaseStruct,\n);\n\n// Instead of using `s.union` to combine all the token data structs,\n// we first find out what \"type\" the token is\n// then we find out `kind` - which is our 2nd layer of discriminated union\n// and then use the specific struct\n// that way the errors are more specific to the actual declared token \"type\"\n// In a nutshell, `s.union` is not very good at discriminated unions errors\nexport const assertTokenData = (data: unknown): asserts data is TokenData => {\n if (!isObject(data)) {\n throw new Error(\n `Expected token data to be an object, got ${JSON.stringify(data)}`,\n );\n }\n if (!isObjKey('type', data)) {\n throw new Error(\n `Expected token data to have a \"type\" property, got ${JSON.stringify(\n data,\n )}`,\n );\n }\n if (typeof data.type !== 'string') {\n throw new Error(\n `Expected token data \"type\" property to be a string, got ${JSON.stringify(\n data,\n )}`,\n );\n }\n const type = data.type as TokenData['type'];\n const kind = data.kind as TokenData['kind'];\n try {\n switch (type) {\n case 'boolean':\n if (kind === 'ref') {\n TokenDataBooleanRefStruct.assert(data);\n } else {\n TokenDataBooleanNonRefStruct.assert(data);\n }\n return;\n case 'border':\n if (kind === 'ref') {\n TokenDataBorderRefStruct.assert(data);\n } else {\n TokenDataBorderNonRefStruct.assert(data);\n }\n return;\n case 'color':\n if (kind === 'ref') {\n TokenDataColorRefStruct.assert(data);\n } else {\n TokenDataColorNonRefStruct.assert(data);\n }\n return;\n case 'cubicBezier':\n if (kind === 'ref') {\n TokenDataCubicBezierRefStruct.assert(data);\n } else {\n TokenDataCubicBezierNonRefStruct.assert(data);\n }\n return;\n case 'dimension':\n if (kind === 'ref') {\n TokenDataDimensionRefStruct.assert(data);\n } else {\n TokenDataDimensionNonRefStruct.assert(data);\n }\n return;\n case 'duration':\n if (kind === 'ref') {\n TokenDataDurationRefStruct.assert(data);\n } else {\n TokenDataDurationNonRefStruct.assert(data);\n }\n return;\n case 'fontWeight':\n if (kind === 'ref') {\n TokenDataFontWeightRefStruct.assert(data);\n } else {\n TokenDataFontWeightNonRefStruct.assert(data);\n }\n return;\n case 'number':\n if (kind === 'ref') {\n TokenDataNumberRefStruct.assert(data);\n } else {\n TokenDataNumberNonRefStruct.assert(data);\n }\n return;\n case 'shadow':\n if (kind === 'ref') {\n TokenDataShadowRefStruct.assert(data);\n } else {\n TokenDataShadowNonRefStruct.assert(data);\n }\n return;\n case 'string':\n if (kind === 'ref') {\n TokenDataStringRefStruct.assert(data);\n } else {\n TokenDataStringNonRefStruct.assert(data);\n }\n return;\n case 'strokeStyle': // temp implementation\n if (kind === 'ref') {\n TokenDataStrokeStyleRefStruct.assert(data);\n } else {\n TokenDataStrokeStyleNonRefStruct.assert(data);\n }\n return;\n // case 'fontFamily':\n // if (kind === 'ref') {\n // TokenDataFontFamilyRefStruct.assert(data);\n // } else {\n // TokenDataFontFamilyNonRefStruct.assert(data);\n // }\n // return;\n case 'transition':\n if (kind === 'ref') {\n TokenDataTransitionRefStruct.assert(data);\n } else {\n TokenDataTransitionNonRefStruct.assert(data);\n }\n return;\n default: {\n const _exhaustiveCheck: never = type;\n throw new Error(`Unknown token data type: ${type}`);\n }\n }\n } catch (error) {\n if (!(error instanceof s.StructError)) throw error;\n throw new Error(\n `Invalid token data for type \"${type}\": ${\n error.message\n }. Received this data: \"${JSON.stringify(data)}\"`,\n );\n }\n};\n","import { Simplify, expectType } from '@knapsack/utils';\nimport {\n TokenType,\n TokenDefinitionSingular,\n TokenDefinitionComposite,\n isTokenTypeComposite,\n isTokenTypeSingular,\n} from './token-definitions';\n\ntype CreateTokenSrcValueInfo<\n T extends {\n type: TokenType;\n value: unknown;\n },\n> =\n | {\n kind: 'ref';\n /** Has `{}` removed */\n referencedTokenId: string;\n isVarRef?: boolean;\n type: T['type'];\n }\n | {\n kind: 'static';\n type: T['type'];\n value: T['value'];\n };\n\ntype TokenSrcValueInfoSingularRaw = {\n // Ignore the key, pay attention to the value\n // The values become the items in the discriminated union\n [TheTokenType in TokenDefinitionSingular as TheTokenType['type']]: Simplify<\n CreateTokenSrcValueInfo<TheTokenType>\n >;\n}[TokenDefinitionSingular['type']];\n\n// This helper allows us to just pass the type string in to get that\n// item out of the discriminated union: `TokenSrcValueInfoSingular<'color'>`\ntype TokenSrcValueInfoSingular<\n TT extends TokenSrcValueInfoSingularRaw['type'] = TokenSrcValueInfoSingularRaw['type'],\n> = Extract<TokenSrcValueInfoSingularRaw, { type: TT }>;\n\nexpectType<TokenSrcValueInfoSingular<'dimension'>[]>([\n {\n type: 'dimension',\n kind: 'static',\n value: '1px',\n },\n {\n type: 'dimension',\n kind: 'ref',\n referencedTokenId: 'a.b',\n },\n]);\n\ntype CreateSrcValueInfoForComposite<\n ValueObj extends Record<string, { type: TokenDefinitionSingular['type'] }>,\n> = {\n [Key in keyof ValueObj]: Simplify<\n CreateTokenSrcValueInfo<{\n type: ValueObj[Key]['type'];\n value: TokenDefinitionSingular<ValueObj[Key]['type']>['value'];\n }>\n >;\n};\n\ntype TokenSrcValueInfoCompositeRaw = {\n [TheTokenType in TokenDefinitionComposite['type']]: Simplify<\n CreateTokenSrcValueInfo<{\n type: TheTokenType;\n value: Simplify<\n CreateSrcValueInfoForComposite<\n TokenDefinitionComposite<TheTokenType>['value']\n >\n >;\n }>\n >;\n}[TokenDefinitionComposite['type']];\n\ntype TokenSrcValueInfoComposite<\n TT extends TokenSrcValueInfoCompositeRaw['type'] = TokenSrcValueInfoCompositeRaw['type'],\n> = Extract<TokenSrcValueInfoCompositeRaw, { type: TT }>;\n\nexpectType<TokenSrcValueInfoComposite<'border'>[]>([\n {\n type: 'border',\n kind: 'ref',\n referencedTokenId: 'a.b',\n },\n {\n type: 'border',\n kind: 'static',\n value: {\n color: {\n kind: 'static',\n type: 'color',\n value: 'red',\n },\n style: {\n kind: 'ref',\n type: 'strokeStyle',\n referencedTokenId: '', // FIX\n },\n width: {\n kind: 'static',\n type: 'dimension',\n value: '2px',\n },\n },\n },\n]);\n\nexpectType<TokenSrcValueInfoComposite<'transition'>[]>([\n {\n type: 'transition',\n kind: 'ref',\n referencedTokenId: 'a.b',\n },\n {\n type: 'transition',\n kind: 'static',\n value: {\n delay: {\n kind: 'static',\n type: 'duration',\n value: '1ms',\n },\n duration: {\n kind: 'ref',\n type: 'duration',\n referencedTokenId: 'animation.slow',\n },\n timingFunction: {\n kind: 'static',\n type: 'cubicBezier',\n value: [0.4, 0.0, 0.2, 1],\n },\n },\n },\n]);\n\nexport type TokenSrcValueInfo<\n TT extends\n | TokenSrcValueInfoComposite['type']\n | TokenSrcValueInfoSingular['type'] =\n | TokenSrcValueInfoComposite['type']\n | TokenSrcValueInfoSingular['type'],\n TheKind extends\n | TokenSrcValueInfoComposite['kind']\n | TokenSrcValueInfoSingular['kind'] =\n | TokenSrcValueInfoComposite['kind']\n | TokenSrcValueInfoSingular['kind'],\n> = Extract<\n TokenSrcValueInfoComposite | TokenSrcValueInfoSingular,\n { type: TT; kind: TheKind }\n>;\n\nexport function isTokenSrcValueInfoSingular(\n tokenSrcValueInfo: TokenSrcValueInfo,\n): tokenSrcValueInfo is TokenSrcValueInfoSingular {\n return isTokenTypeSingular(tokenSrcValueInfo?.type);\n}\nexport function isTokenSrcValueInfoComposite(\n tokenSrcValueInfo: TokenSrcValueInfo,\n): tokenSrcValueInfo is TokenSrcValueInfoComposite {\n return isTokenTypeComposite(tokenSrcValueInfo?.type);\n}\n\nexpectType<TokenSrcValueInfo[]>([\n {\n type: 'dimension',\n kind: 'static',\n value: '1px',\n },\n {\n type: 'transition',\n kind: 'ref',\n referencedTokenId: 'a.b',\n },\n {\n type: 'transition',\n kind: 'ref',\n // @ts-expect-error - with `kind: 'ref'`, `value` is not allowed\n value: '1px',\n },\n {\n kind: 'ref',\n type: 'duration',\n referencedTokenId: 'animation.slow',\n },\n {\n kind: 'static',\n type: 'cubicBezier',\n value: [0.4, 0.0, 0.2, 1],\n },\n {\n type: 'transition',\n kind: 'static',\n value: {\n delay: {\n kind: 'static',\n type: 'duration',\n value: '1ms',\n },\n duration: {\n kind: 'ref',\n type: 'duration',\n referencedTokenId: 'animation.slow',\n },\n timingFunction: {\n kind: 'static',\n type: 'cubicBezier',\n value: [0.4, 0.0, 0.2, 1],\n },\n },\n },\n]);\n\n/**\n * A common object that is used to represent a token in the app.\n * Used in functions for editing communication between UI forms, Xstate,\n * and `@knapsack/design-tokens-utils`.\n */\nexport type TokenInfo<\n TheTokenType extends TokenSrcValueInfo['type'] = TokenSrcValueInfo['type'],\n> = {\n tokenSrcValueInfo: TokenSrcValueInfo<TheTokenType>;\n tokenId: string;\n description?: string;\n};\n","import { Simplify, expectType, isObjKey, isObject } from '@knapsack/utils';\nimport {\n TokenDefinitionComposite,\n TokenDefinitionSingular,\n TokenReference,\n TokenType,\n TokenDefinition,\n} from './token-definitions';\nimport { TokenKsExtensions } from './token-misc';\n\nexport type TokenSrcCommon<TheType extends TokenType = TokenType> = {\n $type?: TokenDefinition<TheType>['type'];\n $description?: string;\n $extensions?: {\n 'cloud.knapsack'?: TokenKsExtensions;\n };\n};\n\nexport function isTokenSrcExtensions(\n extensionsObj: unknown,\n): extensionsObj is TokenSrcCommon['$extensions'] {\n return isObject(extensionsObj) && isObjKey('cloud.knapsack', extensionsObj);\n}\n\ntype CreateSrcValueForComposite<\n ValueObj extends Record<string, { type: TokenDefinitionSingular['type'] }>,\n> = {\n [Key in keyof ValueObj]:\n | TokenReference\n | TokenDefinitionSingular<ValueObj[Key]['type']>['value'];\n};\n\ntype TokenSrcValueCompositeRaw = {\n [TheTokenType in TokenDefinitionComposite['type']]: Simplify<{\n type: TheTokenType;\n value: Simplify<\n CreateSrcValueForComposite<\n TokenDefinitionComposite<TheTokenType>['value']\n >\n >;\n }>;\n}[TokenDefinitionComposite['type']];\n\ntype TokenSrcValueComposite<\n TT extends TokenSrcValueCompositeRaw['type'] = TokenSrcValueCompositeRaw['type'],\n> = Extract<TokenSrcValueCompositeRaw, { type: TT }>;\n\ntype TokenSrcValueRaw = TokenDefinitionSingular | TokenSrcValueComposite;\n\nexport type TokenSrcValue<\n Type extends\n | TokenDefinitionSingular['type']\n | TokenSrcValueComposite['type'] =\n | TokenDefinitionSingular['type']\n | TokenSrcValueComposite['type'],\n> = Extract<TokenSrcValueRaw, { type: Type }>['value'] | TokenReference;\n\nexpectType<TokenSrcValue[]>([\n '#ddd',\n true,\n [83, 1, 1, 1],\n {\n color: '#000',\n style: 'solid',\n width: '1px',\n },\n {\n inset: true,\n color: '#000',\n offsetX: '0px',\n offsetY: '{spacing.medium}',\n spread: '0px',\n blur: '0px',\n },\n {\n timingFunction: '{timing.ease}',\n duration: '{timing.duration.medium}',\n delay: '7ms',\n color: '#000',\n },\n]);\n\nexport type TokenSrc<\n TheType extends\n | TokenDefinitionSingular['type']\n | TokenSrcValueComposite['type'] =\n | TokenDefinitionSingular['type']\n | TokenSrcValueComposite['type'],\n> = Simplify<\n {\n $value: TokenSrcValue<TheType>;\n } & TokenSrcCommon<TheType>\n>;\n\nexport function isTokenSrc(tokenObject: unknown): tokenObject is TokenSrc {\n if (isObject(tokenObject) && isObjKey('$value', tokenObject)) return true;\n return false;\n}\n\nexport type TokenSrcGroup = TokenSrcCommon & {\n [key: string]:\n | TokenSrcGroup\n | TokenSrc\n | TokenSrcCommon\n | TokenSrcCommon['$extensions'];\n};\n\nexport function isTokenGroup(\n tokenObject: unknown,\n): tokenObject is TokenSrcGroup {\n // @todo improve\n return (\n isObject(tokenObject) &&\n !isTokenSrcExtensions(tokenObject) &&\n !isObjKey('$value', tokenObject) &&\n // ensuring we are not in `$extensions` object\n !isObjKey('cloud.knapsack', tokenObject)\n );\n}\n\n// Token VAR references look like TokenSrcGroup\nexport function isTokenTypeVarRef(tokenObject: unknown) {\n // It's at least a TokenSrcGroup\n if (isTokenGroup(tokenObject)) {\n // The specific key within collectionInfo with the var reference\n const varRefCollectionInfo =\n tokenObject.$extensions['cloud.knapsack'].group.collectionInfo;\n if (\n isObjKey('type', varRefCollectionInfo) &&\n isObjKey('referenceId', varRefCollectionInfo)\n ) {\n return true;\n }\n }\n\n return false;\n}\n","import { parseNumberWithUnit } from '@knapsack/utils';\n\nexport function getPrimitiveValue(\n tokenValue: unknown,\n): 'string' | 'number' | 'boolean' {\n const type = typeof tokenValue;\n if (type === 'string' || type === 'number' || type === 'boolean') {\n return type;\n }\n throw new Error(\n `Invalid token value type: ${JSON.stringify(\n type,\n )}. Token value is: ${JSON.stringify(tokenValue)}`,\n );\n}\n\nexport type TokenDimensionUnit = 'px' | 'rem' | 'em' | '%';\n\n/**\n * Dimension strings require ending in 'px' or 'rem'\n * @see `libs/types/src/app-client-data/design-tokens-types/token-definitions.ts`\n */\nexport const isDimensionString = (\n value: string,\n): value is `${number}${'px' | 'rem' | 'em' | '%'}` =>\n value.includes('px') ||\n value.includes('rem') ||\n value.includes('em') ||\n value.includes('%');\n\n/**\n * Pass in values like `'12px'` to get detailed info\n * @throws if value is not a number or does not end in supported unit\n */\nexport function parseTokenDimensionValue(valueToParse: string | number): {\n value: number;\n unit?: TokenDimensionUnit;\n} {\n const { value, unit } = parseNumberWithUnit(valueToParse);\n if (!unit) {\n return { value };\n }\n if (unit !== 'px' && unit !== 'rem' && unit !== 'em' && unit !== '%') {\n throw new Error(`Invalid unit \"${unit}\" for value: ${value}`);\n }\n\n return { value, unit };\n}\n","import type { CSSProperties } from 'react';\nimport type { JsonSchemaObject } from '../json-schema';\nimport { RendererId } from '../renderers';\nimport { isObject } from '../type-utils';\nimport type { BlockConfig } from './blocks';\nimport type { Page, PageTab } from './page';\nimport { TokenSrcValueInfo } from './design-tokens-types/token-src-value-info';\n\nexport interface KsStatus {\n id: string;\n title: string;\n color?: string;\n}\n\nexport interface KsStatusSet {\n id: string;\n title: string;\n statuses: KsStatus[];\n}\n\n/**\n * Used by template renderers in addition to `path`\n * Twig: `@components/button.twig`\n * Web Components: `my-button` => `<my-button>`\n * React: a named export of the file if not `default`\n * @todo Replace this with `rendererOptions`\n */\ntype TemplateAlias = string;\n\nexport type SlottedTemplateDemo = {\n type: 'template-demo';\n /** @deprecated */\n patternId: string;\n /** @deprecated */\n templateId: string;\n /**\n * The demo referenced by `demoId` is inlined here before sending to server to\n * render, but is never stored in the json data. If this is present, it is\n * used instead of the demo referenced by `demoId`. This is done to ensure\n * server has all the latest data for a template demo by ensuring it includes\n * it's slotted children's data.\n * @see {inlineDemoData}\n */\n demo?: DataDemo;\n demoId: DemoBase['id'];\n};\n\n/**\n * i.e. Given a React Component, `Button`, this set to null/false would be\n * `<Button>` and set to true it would just be a reference to it: `Button`\n * @see {KsSlotInfo['isTemplateReference']}\n */\nexport type SlottedTemplateReference = {\n type: 'template-reference';\n patternId: string;\n templateId: string;\n};\n\nexport type SlottedText = {\n type: 'text';\n text: string;\n};\n\nexport type SlottedData =\n | SlottedText\n | SlottedTemplateDemo\n | SlottedTemplateReference;\n\n/** @deprecated - just check `type` */\nexport const isSlottedText = (\n slottedData: unknown,\n): slottedData is SlottedText =>\n isObject(slottedData) && slottedData.type === 'text';\n\n/** @deprecated - just check `type` */\nexport function isSlottedTemplateDemo(\n slottedData: unknown,\n): slottedData is SlottedTemplateDemo {\n return isObject(slottedData) && slottedData.type === 'template-demo';\n}\n\n/** @deprecated - just check `type` */\nexport function isSlottedTemplateReference(\n slottedData: unknown,\n): slottedData is SlottedTemplateReference {\n return isObject(slottedData) && slottedData.type === 'template-reference';\n}\n\n/**\n * Collection ID: Mode ID\n */\nexport type ThemeDefinition = {\n [collectionId: string]: string;\n};\n\nexport type SlotOptions = {\n /**\n * @default 'div'\n */\n wrappingElementName?: string;\n cssClasses?: string[];\n align?: {\n value:\n | 'top-left'\n | 'top-center'\n | 'top-right'\n | 'left'\n | 'center'\n | 'right'\n | 'bottom-left'\n | 'bottom-center'\n | 'bottom-right';\n };\n layout?: {\n value: 'horizontal' | 'vertical' | 'wrap';\n };\n gap?: {\n value: TokenSrcValueInfo<'dimension'>;\n };\n paddingHorizontal?: {\n value: TokenSrcValueInfo<'dimension'>[];\n };\n paddingVertical?: {\n value: TokenSrcValueInfo<'dimension'>[];\n };\n /**\n * Collection ID: Mode ID\n */\n theme?: ThemeDefinition;\n};\n\n/**\n * These are created from {SlotOptions}\n * Only available in App Client for rendering - this is NOT saved in App Client Data\n */\nexport type SlotOptionsComputed = {\n styles: CSSProperties;\n cssClasses: string[];\n /**\n * @default 'div'\n */\n wrappingElementName: string;\n /**\n * can't be `style` or `class` or `className`\n */\n attributes: {\n [attributeName: string]: string;\n };\n};\n\nexport type KnapsackTemplateData = {\n /**\n * @todo Ideal would be `{ [key: string]: string | boolean | number }`\n */\n props: {\n [prop: string]: any;\n };\n slots?: {\n [slotName: string]: Array<SlottedData>;\n };\n /**\n * Settings from users are stored here and saved in App Client Data\n * This is used to dynamically create `slotsOptionsComputed`\n */\n slotsOptions?: {\n [slotName: string]: SlotOptions;\n };\n /**\n * Use `slotsOptions` to set & save styles on slotted children\n * Never set nor stored in App Client Data that gets saved\n * This is only inlined in the demo data for rendering so the App Client can\n * apply the styles to the slotted children\n * @see {inlineDemoData}\n */\n slotsOptionsComputed?: {\n [slotName: string]: SlotOptionsComputed;\n };\n};\n\ntype DemoType = 'data' | 'template';\n\ntype DemoBase = {\n id: string;\n title: string;\n description?: string;\n /**\n * Would override what was on the template\n */\n assetSetId?: string;\n width?: number;\n height?: number;\n type: DemoType;\n /** Collection ID: Mode ID */\n theme?: ThemeDefinition;\n};\n\n/**\n * Shows usage\n */\nexport type DataDemo = DemoBase & {\n type: 'data';\n patternId: string;\n templateId: string;\n data: KnapsackTemplateData;\n};\n\n/**\n * Shows source code\n */\nexport type TemplateDemo = DemoBase & {\n type: 'template';\n templateInfo: {\n alias?: TemplateAlias;\n path?: string;\n };\n};\n\nexport type Demo = TemplateDemo | DataDemo;\n\nexport type RenderDataDemo = Demo & {\n inlineStyles?: string;\n bodyAttributes?: Record<string, string>;\n};\n\n/** @deprecated */\nexport enum StageLayouts {\n portrait = 'portrait',\n landscape = 'landscape',\n}\n\nexport function isDataDemo(demo: TemplateDemo | DataDemo): demo is DataDemo {\n return demo?.type === 'data';\n}\n\nexport function isTemplateDemo(demo: Demo): demo is TemplateDemo {\n return demo?.type === 'template';\n}\n\nexport type KsSlotInfo = {\n title: string;\n description?: string;\n disallowText?: boolean;\n isRequired?: boolean;\n allowOnlyOne?: boolean;\n /**\n * i.e. Given a React Component, `Button`, this set to null/false would be\n * `<Button>` and set to true it would just be a reference to it: `Button`\n * @see {SlottedTemplateReference}\n */\n isTemplateReference?: boolean;\n allowedPatternIds?: string[];\n};\n\n/**\n * Supersedes `schema`\n */\nexport type KsTemplateSpec = {\n /**\n * Attempt to create the props & slots spec by reading the source file.\n * Prevents ability to use spec editor.\n *\n * If `true`, then uses the template `alias` & `path` to find the file.\n *\n * If a string, then that file path is used in place of the source file.\n *\n * Scenario: the `path` is used to point to a compiled file w types stripped\n * and this is used to point to either the source file w types or the compiled\n * `.d.ts` file. Currently only React is supported. The file extension\n * determines if TypeScript (ts/tsx) or PropTypes (js/jsx) is used for\n * inference.\n */\n isInferred?: boolean | string;\n /**\n * JSON Schema defining the serializable data passed in\n * The classic, formerly `schema`\n */\n props?: JsonSchemaObject;\n /**\n * Child component slots\n */\n slots?: {\n [name: string]: KsSlotInfo;\n };\n /**\n * @todo evaluate & refine\n */\n // cssProps?: {\n // [name: string]: {\n // title: string;\n // description: string;\n // };\n // };\n hidePropsTable?: boolean;\n hideSlotsTable?: boolean;\n /**\n * Extra Docs are each shown in their own table.\n * Useful for non-traditional spec docs that are more template language specific.\n * Examples: events, methods, etc\n */\n extraDocs?: {\n id: string;\n title: string;\n description?: string;\n tableRows?: {\n [columnTitle: string]: string;\n }[];\n }[];\n};\n\nexport interface KnapsackPatternTemplate {\n id: string;\n title?: string;\n /**\n * Relative file path to the template from the config file it is declared in\n */\n path: string;\n\n alias?: TemplateAlias;\n /**\n * Which template language? i.e. `twig`, `react` Replaces\n * KnapsackTemplateRenderer.test which ran a test on the file path (similar to\n * how WebPack loader `test` works)\n */\n templateLanguageId: RendererId;\n assetSetIds?: string[];\n spec?: KsTemplateSpec;\n /** Array of demo IDs, actual demo data is stored in `db.demos.demosById` */\n demoIds: Demo['id'][];\n /** Array of block IDs, actual block content is stored in db.blocks.blocksById */\n blockIds: BlockConfig['id'][];\n}\n\nexport type KnapsackPattern = Page & {\n $schema?: string;\n statuses?: {\n [statusSetId: string]: string;\n };\n templates?: KnapsackPatternTemplate[];\n subPages?: {\n id: string;\n title: string;\n blockIds: BlockConfig['id'][];\n }[];\n designSrcComponentsById?: Record<\n string,\n {\n id: string;\n title: string;\n componentId: string;\n fileId: string;\n }\n >;\n /** Controls order of `templates` & `subPages` on Pattern Page */\n tabs?: PageTab[];\n\n aliases?: string[];\n /**\n * Prevents pattern from appearing in System Overview and Status Table blocks\n */\n hideFromOverviewBlocks?: boolean;\n /**\n * Prevents pattern from appearing as an option in Component Embed and\n * Component Demo blocks\n */\n hideFromComponentBlocks?: boolean;\n};\n\nexport interface KnapsackPatternTemplateCode {\n html: string;\n data?: Record<string, any>;\n templateSrc: string;\n usage: string;\n language: string;\n}\n\nexport type KnapsackPatternsConfig = {\n $schema?: string;\n statusSets: KsStatusSet[];\n};\n\nexport interface TemplateRendererMeta {\n id: RendererId;\n title: string;\n version?: string;\n aliasTitle?: string;\n aliasDescription?: string;\n aliasUse: 'off' | 'optional' | 'required';\n aliasIsJsNamedExport?: boolean;\n syntaxHighlightingLanguage?: string;\n enableDataDemos: boolean;\n enableTemplateDemos: boolean;\n hasSlotsSupport: boolean;\n hasSlotOptionsSupport?: boolean;\n hasInferSpecSupport: boolean;\n hasTemplateSuggestionsSupport: boolean;\n prototypingTemplate?: {\n path: string;\n alias?: string;\n spec: Pick<KsTemplateSpec, 'props' | 'slots' | 'isInferred'>;\n };\n}\n\nexport type PatternsState = {\n patterns: {\n [id: string]: KnapsackPattern;\n };\n renderers: Partial<\n Record<\n RendererId,\n {\n meta: TemplateRendererMeta;\n }\n >\n >;\n} & KnapsackPatternsConfig;\n","import { ColorConfig } from '../color-config';\n\nexport enum PageHeaderSizes {\n auto = 'auto',\n small = 'small',\n medium = 'medium',\n large = 'large',\n full = 'full',\n}\n\nexport interface PageHeaderSettings {\n size?: `${PageHeaderSizes}`;\n backgroundImage?: string;\n backgroundColor?: ColorConfig;\n backgroundOverlay?: boolean;\n backgroundSize?: 'cover' | 'contain' | 'string';\n backgroundPosition?: 'left' | 'center' | 'right' | 'string';\n backgroundRepeat?: 'no-repeat' | 'repeat-x' | 'repeat-y' | 'repeat';\n hideText?: boolean;\n textColorTitle?: ColorConfig;\n textColorDescription?: ColorConfig;\n}\n","import {\n // type structs validate that a value has a set of properties on it, but it does not assert anything about unspecified properties. This allows you to assert that a particular set of functionality exists without a strict equality check for properties.\n type,\n string,\n Describe,\n boolean,\n optional,\n array,\n number,\n define,\n} from 'superstruct';\nimport { isObjKey, isObject } from '../type-utils';\nimport type { KnapsackAssetSetsData } from './asset-sets';\nimport type { TokenSrcGroup } from './design-tokens-types';\nimport type { MetaState } from './meta';\nimport type { KnapsackNavsConfig } from './nav';\nimport type { KsFiles } from './files';\nimport type { BlockConfig } from './blocks';\nimport type { KnapsackCustomPagesData } from './custom-pages';\nimport type { Demo, PatternsState } from './patterns';\nimport { UiConfig } from '../ui-config';\nimport { PagesSettings } from './page';\nimport { BlocksSettings } from './blocks.settings';\nimport { DesignSrcFile } from '../design-src.types';\n\nexport * from './asset-sets';\nexport * from './blocks';\nexport * from './custom-pages';\nexport * from './design-tokens';\nexport * from './design-tokens-types';\nexport * from './nav';\nexport * from './files';\nexport * from './meta';\nexport * from './patterns';\nexport { PageHeaderSizes } from './page.header';\nexport type { PageHeaderSettings } from './page.header';\nexport type { PageTab, PageType } from './page';\n\nexport interface KsAppClientData {\n patternsState: PatternsState;\n customPagesState: KnapsackCustomPagesData;\n assetSetsState: KnapsackAssetSetsData;\n navsState: KnapsackNavsConfig;\n tokensSrc: TokenSrcGroup;\n metaState?: MetaState;\n filesState: KsFiles;\n db: {\n blocks: {\n byId: Record<string, BlockConfig>;\n settings: BlocksSettings;\n };\n demos: {\n byId: Record<string, Demo>;\n // \"never\" for now until there are actual settings for demos\n settings: Record<string, never>;\n };\n settings: {\n title?: string;\n hideTitleInNavigation?: boolean;\n logoUrl?: string;\n favicon?: `https://${string}`;\n theme?: UiConfig;\n pages?: PagesSettings;\n designSrcs?: {\n files?: DesignSrcFile[];\n };\n tokens?: {\n theming?: {\n /** Which template languages theming controls will show up for next to the components preview stage. */\n enabledRendererIds?: string[];\n };\n };\n prototyping?: {\n patternId: string;\n };\n };\n };\n}\n\nexport type KsAppClientDataNoMeta = Omit<KsAppClientData, 'metaState'>;\nexport type KsAppClientDataAndMeta = Required<KsAppClientData>;\n\nexport function isKsAppClientDataNoMeta(\n data: unknown,\n): data is KsAppClientDataNoMeta {\n if (!isObject(data)) return false;\n // TODO: bring in exhaustive key checking here so all keys are caught\n const requiredKeys: Array<keyof KsAppClientDataNoMeta> = [\n 'assetSetsState',\n 'customPagesState',\n 'navsState',\n 'patternsState',\n 'tokensSrc',\n 'db',\n ];\n if (!requiredKeys.every((key) => isObjKey(key, data))) return false;\n if (!isObjKey('metaState', data)) return true;\n return false;\n}\n\nexport const KsAppClientDataNoMetaStruct = define<KsAppClientDataNoMeta>(\n 'KsAppClientDataNoMeta',\n isKsAppClientDataNoMeta,\n);\n\nexport function isKsAppClientDataAndMeta(\n data: unknown,\n): data is KsAppClientDataAndMeta {\n if (!isObject(data)) return false;\n // TODO: bring in exhaustive key checking here so all keys are caught\n const requiredKeys: Array<keyof KsAppClientDataAndMeta> = [\n 'assetSetsState',\n 'customPagesState',\n 'navsState',\n 'patternsState',\n 'tokensSrc',\n 'metaState',\n 'db',\n ];\n return requiredKeys.every((key) => isObjKey(key, data));\n}\n\nexport const KsAppClientDataAndMetaStruct = define<KsAppClientDataAndMeta>(\n 'KsAppClientDataAndMeta',\n isKsAppClientDataAndMeta,\n);\n\nexport const KsMetaStateStruct: Describe<KsAppClientData['metaState']> = type({\n isLocalDev: boolean(),\n plugins: array(\n type({\n id: string(),\n hasContent: boolean(),\n clientPluginPath: optional(string()),\n cssPath: optional(string()),\n }),\n ),\n meta: optional(\n type({\n version: optional(string()),\n hasKnapsackCloud: boolean(),\n knapsackCloudSiteId: optional(string()),\n serverPort: optional(number()),\n websocketsPort: optional(number()),\n https: optional(boolean()),\n cacheDir: optional(string()),\n ksVersions: type({\n app: string(),\n }),\n }),\n ),\n});\n\nexport const isKsMetaState = KsMetaStateStruct.is;\n","import {\n // type structs validate that a value has a set of properties on it, but it does not assert anything about unspecified properties. This allows you to assert that a particular set of functionality exists without a strict equality check for properties.\n type,\n string,\n Describe,\n boolean,\n optional,\n array,\n number,\n define,\n} from 'superstruct';\nimport { isObjKey, isObject } from '../type-utils';\nimport type { KnapsackAssetSetsData } from './asset-sets';\nimport type { KsDesignTokensState } from './design-tokens';\nimport type { MetaState } from './meta';\nimport type { KnapsackNavsConfig } from './nav';\nimport type { KsFiles } from './files';\nimport type { KnapsackCustomPagesData } from './custom-pages';\nimport type { PatternsState } from './patterns';\nimport type { KnapsackSettings } from './settings';\n\nexport type {\n KsDesignToken,\n KsDesignTokenAttributes,\n KsDesignTokenData,\n KsDesignTokenDataGroup,\n KsDesignTokenSrc,\n KsDesignTokenSrcGroup,\n KsDesignTokensState,\n KsTokenType,\n KsTokenValue,\n KnapsackDesignToken,\n} from './design-tokens';\n\nexport interface KsAppClientDataV3 {\n settingsState: {\n settings: KnapsackSettings;\n };\n patternsState: PatternsState;\n customPagesState: KnapsackCustomPagesData;\n assetSetsState: KnapsackAssetSetsData;\n navsState: KnapsackNavsConfig;\n tokensState: KsDesignTokensState;\n metaState?: MetaState;\n filesState: KsFiles;\n}\n\nexport type KsAppClientDataNoMetaV3 = Omit<KsAppClientDataV3, 'metaState'>;\nexport type KsAppClientDataAndMetaV3 = Required<KsAppClientDataV3>;\n\nexport function isKsAppClientDataNoMetaV3(\n data: unknown,\n): data is KsAppClientDataNoMetaV3 {\n if (!isObject(data)) return false;\n const requiredKeys: Array<keyof KsAppClientDataNoMetaV3> = [\n 'assetSetsState',\n 'customPagesState',\n 'navsState',\n 'patternsState',\n 'settingsState',\n 'tokensState',\n ];\n if (!requiredKeys.every((key) => isObjKey(key, data))) return false;\n if (!isObjKey('metaState', data)) return true;\n return false;\n}\n\nexport const KsAppClientDataNoMetaStructV3 = define<KsAppClientDataNoMetaV3>(\n 'KsAppClientDataNoMeta',\n isKsAppClientDataNoMetaV3,\n);\n\nexport function isKsAppClientDataAndMetaV3(\n data: unknown,\n): data is KsAppClientDataAndMetaV3 {\n if (!isObject(data)) return false;\n const requiredKeys: Array<keyof KsAppClientDataAndMetaV3> = [\n 'assetSetsState',\n 'customPagesState',\n 'navsState',\n 'patternsState',\n 'settingsState',\n 'tokensState',\n 'metaState',\n ];\n return requiredKeys.every((key) => isObjKey(key, data));\n}\n\nexport const KsAppClientDataAndMetaStructV3 = define<KsAppClientDataAndMetaV3>(\n 'KsAppClientDataAndMeta',\n isKsAppClientDataAndMetaV3,\n);\n\nexport const KsMetaStateStructV3: Describe<KsAppClientDataV3['metaState']> =\n type({\n isLocalDev: boolean(),\n plugins: array(\n type({\n id: string(),\n hasContent: boolean(),\n clientPluginPath: optional(string()),\n cssPath: optional(string()),\n }),\n ),\n meta: optional(\n type({\n version: optional(string()),\n hasKnapsackCloud: boolean(),\n knapsackCloudSiteId: optional(string()),\n serverPort: optional(number()),\n websocketsPort: optional(number()),\n https: optional(boolean()),\n cacheDir: optional(string()),\n ksVersions: type({\n app: string(),\n }),\n }),\n ),\n });\n\nexport const isKsMetaStateV3 = KsMetaStateStructV3.is;\n","import { isDraft, type Draft } from 'immer';\nimport { Migration } from './migration.types';\nimport { KnapsackPattern, SlottedData } from '../app-client-data/patterns';\n\ntype Migration417DemosType = {\n version: string;\n checkIfNeeded: (appClientData: any) => boolean;\n migrate: (appClientData: Draft<any>) => void;\n};\n\nexport const migration417Demos: Migration417DemosType = {\n version: '4.1.7',\n checkIfNeeded: (appClientData) => {\n // this one will be tough to check for, so we'll just assume it's needed\n return true;\n },\n // note that `appClientData` is mutable since we're already in Immer\n migrate: (appClientData) => {\n if (!isDraft(appClientData)) {\n throw new Error(\n `Tried to run migrations on appClientData but it is not an Immer Draft`,\n );\n }\n Object.values(appClientData.patternsState.patterns).forEach(\n (\n pattern: Draft<\n KnapsackPattern & {\n demoSize?: string;\n }\n >,\n ) => {\n delete pattern.demoSize;\n },\n );\n\n Object.values(appClientData.db.demos.byId).forEach((demo) => {\n if (demo.type !== 'data') return;\n\n Object.entries(demo.data.slots ?? {}).forEach(([slotName, slotData]) => {\n demo.data.slots[slotName] = slotData.map(\n (slottedData: Draft<SlottedData | string>) => {\n // it used to be just a string\n if (typeof slottedData === 'string') {\n return {\n type: 'text',\n text: slottedData,\n };\n }\n if (\n // not doing anything with these\n slottedData.type === 'template-reference' ||\n // these already were migrated or made by the new editor\n slottedData.type === 'text'\n ) {\n return slottedData;\n }\n // these used to not have a type set\n slottedData.type = 'template-demo';\n return slottedData;\n },\n );\n });\n\n if (demo.patternId && demo.templateId) return;\n\n // using an IIFE so we can stop looping once we find it\n // would use `break` but it's a double loop\n (() => {\n for (const { id: pId, templates = [] } of Object.values(\n appClientData.patternsState.patterns,\n )) {\n for (const { id: tId, demoIds = [] } of templates) {\n if (demoIds.includes(demo.id)) {\n demo.patternId = pId;\n demo.templateId = tId;\n // found it - stop looking\n return;\n }\n }\n }\n })();\n });\n },\n} satisfies Migration;\n","import { migration417Demos } from './4.1.7-demos';\n\nexport const migrations = [migration417Demos];\n","// import { JSONSchema7 } from 'json-schema'; @todo consider using instead; though I'm not seeing it make it's way to the compiled JSON schema themselves via `convert-types-to-json-schmea.js`\n\ntype PropBase<Type = any> = {\n title?: string;\n description?: string;\n default?: Type;\n};\n\nexport enum PropTypeNames {\n 'string' = 'string',\n 'boolean' = 'boolean',\n 'number' = 'number',\n 'object' = 'object',\n 'options' = 'options',\n 'function' = 'function',\n 'customTypeScript' = 'customTypeScript',\n 'array' = 'array',\n 'arrayOfObjects' = 'arrayOfObjects',\n 'arrayOfStrings' = 'arrayOfStrings',\n 'arrayOfNumbers' = 'arrayOfNumbers',\n 'unknown' = 'unknown',\n}\nexport type PropTypeNamesList = keyof typeof PropTypeNames;\n\nexport type StringProp = {\n type: 'string';\n} & PropBase<string>;\n\nexport type BooleanProp = {\n type: 'boolean';\n} & PropBase<boolean>;\n\nexport type NumberProp = {\n type: 'number';\n} & PropBase<number>;\n\nexport type OptionsProp = {\n type: 'string';\n enum: string[];\n enumNames?: string[];\n} & PropBase<string>;\n\nexport type CustomTypeScriptProp = {\n /**\n * TypeScript type\n * @example (name: string) => void\n */\n tsType: string;\n type?: never;\n default?: string;\n} & PropBase<string>;\n\nexport type FunctionProp = {\n typeof: 'function';\n /**\n * TypeScript type\n * @example (name: string) => void\n */\n tsType: string;\n default?: string;\n type?: 'string';\n} & PropBase<string>;\n\nexport type ObjectProp = {\n type: 'object';\n additionalProperties?: boolean;\n required?: string[];\n properties: {\n [prop: string]: PropertyTypes;\n };\n} & PropBase;\n\nexport type ArrayProp = {\n type: 'array';\n items: PropertyTypes;\n} & PropBase<unknown[]>;\n\nexport type ArrayOfStringsProp = {\n type: 'array';\n uniqueItems?: boolean;\n items: StringProp;\n} & PropBase<unknown[]>;\n\nexport type ArrayOfNumbersProp = {\n type: 'array';\n uniqueItems?: boolean;\n items: NumberProp;\n} & PropBase<number[]>;\n\nexport type ArrayOfObjectsProp = {\n type: 'array';\n items: ObjectProp;\n} & PropBase<Array<Record<string, unknown>>>;\n\nexport type PropertyTypes =\n | StringProp\n | BooleanProp\n | NumberProp\n | OptionsProp\n | FunctionProp\n | CustomTypeScriptProp\n | ObjectProp\n | ArrayOfObjectsProp\n | ArrayOfStringsProp\n | ArrayOfNumbersProp\n | ArrayProp;\n\nexport const isStringProp = (prop: PropertyTypes): prop is StringProp =>\n 'type' in prop && prop.type === 'string' && !('enum' in prop);\nexport const isNumberProp = (prop: PropertyTypes): prop is NumberProp =>\n 'type' in prop && prop.type === 'number';\nexport const isBooleanProp = (prop: PropertyTypes): prop is BooleanProp =>\n 'type' in prop && prop.type === 'boolean';\nexport const isOptionsProp = (prop: PropertyTypes): prop is OptionsProp =>\n 'enum' in prop;\nexport const isFunctionProp = (prop: PropertyTypes): prop is FunctionProp =>\n 'typeof' in prop && prop?.typeof === 'function';\nexport const isCustomTypeScriptProp = (\n prop: PropertyTypes,\n): prop is CustomTypeScriptProp => !('typeof' in prop) && 'tsType' in prop;\nexport const isArrayOfObjectsProp = (\n prop: PropertyTypes,\n): prop is ArrayOfObjectsProp =>\n 'type' in prop &&\n prop.type === 'array' &&\n 'items' in prop &&\n prop.items.type === 'object';\nexport const isObjectProp = (prop: PropertyTypes): prop is ObjectProp =>\n 'type' in prop &&\n prop.type === 'object' &&\n 'properties' in prop &&\n Object.keys(prop.properties).length > 0;\nexport const isArrayOfStringsProp = (\n prop: PropertyTypes,\n): prop is ArrayOfStringsProp =>\n 'type' in prop &&\n prop.type === 'array' &&\n 'items' in prop &&\n prop.items.type === 'string';\nexport const isArrayOfNumbersProp = (\n prop: PropertyTypes,\n): prop is ArrayOfNumbersProp =>\n 'type' in prop &&\n prop.type === 'array' &&\n 'items' in prop &&\n prop.items.type === 'number';\n\nexport interface PropTypeDataBase {\n type: any;\n id: string;\n isRequired?: boolean;\n data: any;\n}\n\nexport interface StringPropTypeData extends PropTypeDataBase {\n type: typeof PropTypeNames.string;\n data: StringProp;\n}\n\nexport interface BooleanPropTypeData extends PropTypeDataBase {\n type: typeof PropTypeNames.boolean;\n data: BooleanProp;\n}\n\nexport interface NumberPropTypeData extends PropTypeDataBase {\n type: typeof PropTypeNames.number;\n data: NumberProp;\n}\n\nexport interface OptionsPropTypeData extends PropTypeDataBase {\n type: typeof PropTypeNames.options;\n data: OptionsProp;\n}\n\nexport interface FunctionPropTypeData extends PropTypeDataBase {\n type: typeof PropTypeNames.function;\n data: FunctionProp;\n}\n\nexport interface CustomTypeScriptPropTypeData extends PropTypeDataBase {\n type: typeof PropTypeNames.customTypeScript;\n data: CustomTypeScriptProp;\n}\n\nexport interface ObjectPropTypeData extends PropTypeDataBase {\n type: typeof PropTypeNames.object;\n data: ObjectProp;\n}\n\nexport interface ArrayOfObjectsPropTypeData extends PropTypeDataBase {\n type: typeof PropTypeNames.arrayOfObjects;\n data: ArrayOfObjectsProp;\n}\n\nexport interface ArrayOfStringsPropTypeData extends PropTypeDataBase {\n type: typeof PropTypeNames.arrayOfStrings;\n data: ArrayOfStringsProp;\n}\n\nexport interface ArrayOfNumbersPropTypeData extends PropTypeDataBase {\n type: typeof PropTypeNames.arrayOfNumbers;\n data: ArrayOfNumbersProp;\n}\n\nexport interface ArrayPropTypeData extends PropTypeDataBase {\n type: typeof PropTypeNames.array;\n data: ArrayProp;\n}\n\nexport type PropTypeData =\n | StringPropTypeData\n | BooleanPropTypeData\n | NumberPropTypeData\n | OptionsPropTypeData\n | FunctionPropTypeData\n | CustomTypeScriptPropTypeData\n | ObjectPropTypeData\n | ArrayOfObjectsPropTypeData\n | ArrayOfStringsPropTypeData\n | ArrayOfNumbersPropTypeData;\n\nexport type JsonSchemaObject<PropNames extends string = string> = {\n $schema?: string;\n title?: string;\n description?: string;\n type: 'object';\n required?: PropNames[];\n properties: Record<PropNames, PropertyTypes>;\n examples?: Record<string, unknown>[];\n};\n","import * as s from 'superstruct';\nimport type { Patch } from 'immer';\nimport type { SetOptional } from '@knapsack/utils';\nimport type { UUID, DateString } from './misc';\n\n/**\n * Patch\n */\n\nexport type { Patch };\n\nconst PatchStructRuntime = s.object({\n op: s.union([s.literal('replace'), s.literal('remove'), s.literal('add')]),\n path: s.array(s.union([s.string(), s.number()])),\n value: s.optional(s.any()),\n});\nconst PatchStruct: s.Describe<Patch> = PatchStructRuntime;\n\nexport const isPatch = (patch: unknown): patch is Patch =>\n PatchStruct.is(patch);\n\nconst PatchesStructRuntime = s.array(PatchStructRuntime);\nconst PatchesStruct: s.Describe<Patch[]> = PatchesStructRuntime;\n\nexport const isPatches = (patches: unknown): patches is Patch[] =>\n PatchesStruct.is(patches);\n\n/**\n * KsRemoteChange\n */\nexport type KsChange<Event extends { type: string } = { type: string }> = {\n patches: Patch[];\n inversePatches: Patch[];\n event: Event;\n id: UUID;\n date: DateString;\n};\nexport type KsRemoteChange = SetOptional<KsChange, 'inversePatches' | 'event'>;\n\nconst KsRemoteChangeRuntime = s.type({\n patches: PatchesStructRuntime,\n inversePatches: s.optional(PatchesStructRuntime),\n event: s.optional(s.object({ type: s.string() })),\n id: s.string(),\n date: s.string(),\n userId: s.optional(s.string()),\n});\nconst KsRemoteChangeStruct: s.Describe<KsRemoteChange> = KsRemoteChangeRuntime;\n\nexport const isKsRemoteChange = (change: unknown): change is KsRemoteChange =>\n KsRemoteChangeStruct.is(change);\n\nconst KsRemoteChangesStructRuntime = s.array(KsRemoteChangeRuntime);\nexport const KsRemoteChangesStruct: s.Describe<KsRemoteChange[]> =\n KsRemoteChangesStructRuntime;\n\nexport const isKsRemoteChanges = (\n changes: unknown,\n): changes is KsRemoteChange[] => KsRemoteChangesStruct.is(changes);\n","import type { KnapsackPatternTemplate, TemplateDemo } from './app-client-data';\n\nexport const rendererIds = {\n react: 'react',\n vue: 'vue',\n 'web-components': 'web-components',\n twig: 'twig',\n hbs: 'hbs',\n angular: 'angular',\n html: 'html',\n} as const;\n\n/**\n * The ID of a renderer, e.g. 'react', 'vue', 'angular', etc.\n * On Pattern Templates, this will match up to `templateLanguageId` to identify which renderer to use.\n * @see {KnapsackPatternTemplate['templateLanguageId']}\n */\nexport type RendererId = keyof typeof rendererIds;\n/**\n * Results of rendering a pattern\n */\nexport type KsRenderResults = {\n ok: boolean;\n html: string;\n usage?: string;\n templateLanguage?: string;\n message?: string;\n};\n\nexport type KsRenderApiResults = KsRenderResults & {\n wrappedHtml: string;\n};\nexport type TemplateSuggestion = {\n path: string;\n alias?: string;\n};\n\nexport type TemplateSuggestionsGetFn = (opt: {\n rendererId: RendererId;\n newPath?: string;\n state: ContentStateForRendering;\n}) => Promise<{\n suggestions: TemplateSuggestion[];\n}>;\n\n/**\n * Aliases for package paths\n * Example:\n * ```js\n * {\n * 'my-pkg': '../path/to/my-pkg',\n * }\n * ```\n */\nexport type PkgPathAliases = Record<string, string>;\n\nexport type ContentStateForRendering = {\n /**\n * Patterns by ID\n */\n patterns: {\n [patternId: string]: {\n id: string;\n templates: Pick<\n KnapsackPatternTemplate,\n 'alias' | 'path' | 'templateLanguageId' | 'spec' | 'id' | 'title'\n >[];\n templateDemos: Array<\n TemplateDemo & {\n templateId: string;\n templateLanguageId: RendererId;\n }\n >;\n };\n };\n};\n","import type { FeedbackTypes } from './misc';\n\nexport enum KsRendererClientEvents {\n ready = 'ready',\n}\n\n/**\n * Message sent from the renderer client (in the iframe) to the App UI parent window\n * using `window.parent.postMessage()`.\n * Note that this likely will become a union type of all possible messages\n */\nexport type KsRendererClientMsg =\n | {\n /**\n * Sent when a `ResizeObserver` detects a change in the contents height or width.\n */\n type: 'ksRendererClient.contentResized';\n height: number;\n width: number;\n }\n | {\n type: 'ksRendererClient.showToast';\n msg: string;\n feedbackType?: FeedbackTypes;\n };\n\n/**\n * The meta data is stored in a script tag with this id\n * @see {KsRendererClientMeta}\n */\nexport const ksRendererClientMetaId = 'ks-meta';\n\n/**\n * Metadata about the current renderer client demo\n * @see {ksRendererClientMetaId} for the ID of the script tag\n */\nexport interface KsRendererClientMeta {\n patternId: string;\n templateId: string;\n demoId: string;\n assetSetId: string;\n isInIframe: boolean;\n websocketsPort: number;\n}\n","export const WS_EVENTS = {\n PATTERN_TEMPLATE_CHANGED: 'PATTERN_TEMPLATE_CHANGED',\n PATTERN_ASSET_CHANGED: 'PATTERN_ASSET_CHANGED',\n DESIGN_TOKENS_CHANGED: 'DESIGN_TOKENS_CHANGED',\n RENDERER_CLIENT_RELOAD: 'RENDERER_CLIENT_RELOAD',\n APP_CLIENT_DATA_CHANGED: 'APP_CLIENT_DATA_CHANGED',\n};\n\nexport type WebSocketEvent = keyof typeof WS_EVENTS;\n\nexport interface WebSocketMessage {\n event: string;\n data: Record<string, unknown>;\n}\n\nexport interface DesignTokensChangedData extends WebSocketMessage {\n event: typeof WS_EVENTS.DESIGN_TOKENS_CHANGED;\n data: Record<string, unknown>;\n}\n\nexport interface PatternChangedData extends WebSocketMessage {\n event: typeof WS_EVENTS.PATTERN_TEMPLATE_CHANGED;\n data: {\n /**\n * Absolute path to template on server that was just edited\n */\n path: string;\n };\n}\n\nexport interface AssetChangedData extends WebSocketMessage {\n event: typeof WS_EVENTS.PATTERN_ASSET_CHANGED;\n data: {\n /**\n * Absolute path to asset file (CSS/JS) on server that was just edited\n */\n path: string;\n };\n}\n\nexport interface RendererClientReloadMessage extends WebSocketMessage {\n event: typeof WS_EVENTS.RENDERER_CLIENT_RELOAD;\n data: {\n // @todo add patternId etc for more details\n };\n}\n\nexport interface AppClientDataChanged extends WebSocketMessage {\n event: typeof WS_EVENTS.PATTERN_TEMPLATE_CHANGED;\n data: Record<string, unknown>;\n}\n\nexport type WebSocketMessages =\n | PatternChangedData\n | AssetChangedData\n | DesignTokensChangedData\n | RendererClientReloadMessage;\n","export enum GitProviderType {\n GitHub = 'GitHub',\n GitLab = 'GitLab',\n GitLabRest = 'GitLabRest',\n Bitbucket = 'Bitbucket',\n Azure = 'Azure',\n}\n\nexport type FileAddition = {\n /** base64 */\n contents: string;\n path: string;\n\n /** Action to perform: create, delete, move, update, or chmod. */\n action?: RestActions;\n /** Content of the file. */\n content?: string;\n /** Full path to the file. */\n filePath?: string;\n /** Encoding of the file. Default is text. */\n encoding?: TextEncoding;\n /** Last known file commit ID. */\n lastCommitId?: string;\n /** Original full path to the file being moved. */\n previousPath?: string;\n};\n\nexport type FileDeletion = {\n path: string;\n};\n\nexport enum MergeableState {\n Conflicting = 'CONFLICTING',\n Mergeable = 'MERGEABLE',\n Unknown = 'UNKNOWN',\n}\n\nexport enum RestActions {\n Create = 'CREATE',\n Move = 'MOVE',\n Update = 'UPDATE',\n Chmod = 'CHMOD',\n}\n\nexport enum TextEncoding {\n Base64 = 'BASE64',\n Text = 'TEXT',\n}\n\nexport type FileChanges = {\n /** File to add or change. */\n additions?: FileAddition[];\n\n /** Files to delete. */\n deletions?: FileDeletion[];\n\n /** Last known file commit ID. */\n lastCommitId?: string;\n};\n\nexport type CommitAction = Record<string, unknown>;\n\nexport interface RepoLabel {\n name: string;\n /** ID optional because bitbucket does not provide id. We might be able to generate one if its required, eg. reponame-labelname */\n id?: string;\n}\n\nexport interface RepoInfo {\n id: string;\n url: string;\n name: string;\n ownerName?: string;\n defaultBranch?: any;\n}\n\n// 'BranchInfo' name is currently taken by GitLab generated queries. Thus 'BranchInfoResult'\nexport interface BranchInfoResult {\n sha: string;\n shortSha?: string;\n associatedPullRequests?: Pr[];\n additions?: number;\n commitUrl?: string;\n deletions?: number;\n id?: string; // In GitLab, this is the branch name. Modelled this way to make deleteBranch work.\n default?: boolean;\n}\n\nexport interface PrInfo {\n url: string;\n number: number;\n id: string;\n}\n\nexport interface Pr {\n id: string;\n title: string;\n createdAt: string;\n headRef: {\n id?: string;\n name?: string;\n target: BranchInfoResult;\n };\n mergeable: MergeableState;\n merged: boolean;\n number: number;\n body: string;\n isDraft: boolean;\n url: string;\n author: {\n login: string;\n avatarUrl: string;\n };\n diffHeadSha?: string;\n targetBranch?: string;\n version?: string; // needed for bitbucket merge\n}\n\nexport interface GitProvider {\n type: GitProviderType;\n createBranch: (opt: { branch: string }) => Promise<BranchInfoResult>;\n commitOnBranch: (opt: {\n branch: string;\n message: string;\n fileChanges: FileChanges;\n }) => Promise<Record<string, unknown> | void>;\n getRepoLabels: () => Promise<RepoLabel[]>;\n getRepoInfo: () => Promise<RepoInfo>;\n getBranchInfo: ({ branch }: { branch: string }) => Promise<BranchInfoResult>;\n getPrs: () => Promise<Pr[]>;\n getPr: ({ prNumber }: { prNumber: number }) => Promise<Pr>;\n getTree?: (opt: { branch: string }) => Promise<{\n treeItems: {\n path: string;\n type: 'blob';\n /** SHA-1, use https://www.npmjs.com/package/git-hash-object */\n sha: string;\n url?: string;\n }[];\n }>;\n mergePr: ({ prNumber }: { prNumber: number }) => Promise<boolean>;\n createPr: ({\n siteId,\n branch,\n title,\n body,\n labelIds,\n }: {\n siteId: string;\n branch: string;\n title: string;\n body?: string;\n labelIds?: string[];\n }) => Promise<PrInfo>;\n deleteBranch: ({ id, branch }: { id: string; branch: string }) => Promise<{\n clientMutationId?: string;\n }>;\n getFileInfoOnBranchByPath: (opt: {\n filePath: string;\n branch: string;\n }) => Promise<{ exists: boolean; filePath: string }>;\n}\n","export const endpoint = `/plugins`;\n\nexport enum ACTIONS {\n getContent = 'getContent',\n}\n\nexport interface GetContentRequest {\n type: ACTIONS.getContent;\n pluginId: string;\n}\n\nexport interface GetContentResponse {\n type: ACTIONS.getContent;\n ok: boolean;\n message?: string;\n payload: Record<string, unknown>;\n}\n\nexport type ActionRequests = GetContentRequest;\n\nexport type ActionResponses = GetContentResponse;\n","import type { RendererId } from '../renderers';\n\nexport const endpoint = `/files`;\n\nexport enum ACTIONS {\n verify = 'verify',\n}\n\nexport interface VerifyData {\n type: ACTIONS.verify;\n payload: {\n path: string;\n rendererId: RendererId;\n };\n}\n\nexport interface VerifyDataResponse {\n type: ACTIONS.verify;\n payload: {\n exists: boolean;\n relativePath: string;\n absolutePath: string;\n type: 'absolute' | 'relative' | 'package' | 'unknown';\n };\n}\n\nexport type Actions = VerifyData;\n\nexport type ActionResponses = VerifyDataResponse;\n","/**\n * The roles here are duplicates of the roles in the database.\n * It needs to be here, in the types package, so it can be used in all packages.\n * If we pull it in from `@knapsack/hasura-gql-client`, which is the source, we get a dependency cycle. So we do it this way.\n * If the roles change in the database, we need to change them here too. We will get a build error if we don't (see code in `@knapsack/hasura-gql-client`).\n */\n\nexport const rolesById = {\n ADMIN: 'ADMIN',\n ANONYMOUS: 'ANONYMOUS',\n CONTRIBUTOR: 'CONTRIBUTOR',\n EDITOR: 'EDITOR',\n MANAGER: 'MANAGER',\n VIEWER: 'VIEWER',\n} as const;\nexport const roles = Object.values(rolesById);\nexport type Role = keyof typeof rolesById;\n"]}
|