@elastic/distillate 0.0.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (292) hide show
  1. package/LICENSE.txt +93 -0
  2. package/NOTICE.txt +30 -0
  3. package/README.md +142 -0
  4. package/THIRD_PARTY_LICENSES.md +768 -0
  5. package/dist/cjs/collector.js +491 -0
  6. package/dist/cjs/collector.js.map +1 -0
  7. package/dist/cjs/css_scan.js +186 -0
  8. package/dist/cjs/css_scan.js.map +1 -0
  9. package/dist/cjs/dom_sink.js +40 -0
  10. package/dist/cjs/dom_sink.js.map +1 -0
  11. package/dist/cjs/emotion.js +189 -0
  12. package/dist/cjs/emotion.js.map +1 -0
  13. package/dist/cjs/engine.js +95 -0
  14. package/dist/cjs/engine.js.map +1 -0
  15. package/dist/cjs/environment.js +9 -0
  16. package/dist/cjs/environment.js.map +1 -0
  17. package/dist/cjs/hash.js +86 -0
  18. package/dist/cjs/hash.js.map +1 -0
  19. package/dist/cjs/idents.js +23 -0
  20. package/dist/cjs/idents.js.map +1 -0
  21. package/dist/cjs/index.js +44 -0
  22. package/dist/cjs/index.js.map +1 -0
  23. package/dist/cjs/instance.js +34 -0
  24. package/dist/cjs/instance.js.map +1 -0
  25. package/dist/cjs/local_vars.js +100 -0
  26. package/dist/cjs/local_vars.js.map +1 -0
  27. package/dist/cjs/minify.js +77 -0
  28. package/dist/cjs/minify.js.map +1 -0
  29. package/dist/cjs/names.js +77 -0
  30. package/dist/cjs/names.js.map +1 -0
  31. package/dist/cjs/nesting.js +406 -0
  32. package/dist/cjs/nesting.js.map +1 -0
  33. package/dist/cjs/package.json +3 -0
  34. package/dist/cjs/runtime.js +257 -0
  35. package/dist/cjs/runtime.js.map +1 -0
  36. package/dist/cjs/sink.js +9 -0
  37. package/dist/cjs/sink.js.map +1 -0
  38. package/dist/cjs/styles/authoring.js +169 -0
  39. package/dist/cjs/styles/authoring.js.map +1 -0
  40. package/dist/cjs/styles/declarations.js +139 -0
  41. package/dist/cjs/styles/declarations.js.map +1 -0
  42. package/dist/cjs/styles/index.js +32 -0
  43. package/dist/cjs/styles/index.js.map +1 -0
  44. package/dist/cjs/styles/module.js +233 -0
  45. package/dist/cjs/styles/module.js.map +1 -0
  46. package/dist/cjs/styles/registry.js +187 -0
  47. package/dist/cjs/styles/registry.js.map +1 -0
  48. package/dist/cjs/styles/types.js +9 -0
  49. package/dist/cjs/styles/types.js.map +1 -0
  50. package/dist/cjs/testing.js +37 -0
  51. package/dist/cjs/testing.js.map +1 -0
  52. package/dist/cjs/theme.js +249 -0
  53. package/dist/cjs/theme.js.map +1 -0
  54. package/dist/cjs/tokens/contextual_var.js +39 -0
  55. package/dist/cjs/tokens/contextual_var.js.map +1 -0
  56. package/dist/cjs/tokens/index.js +24 -0
  57. package/dist/cjs/tokens/index.js.map +1 -0
  58. package/dist/cjs/tokens/kind.js +14 -0
  59. package/dist/cjs/tokens/kind.js.map +1 -0
  60. package/dist/cjs/tokens/light_dark.js +42 -0
  61. package/dist/cjs/tokens/light_dark.js.map +1 -0
  62. package/dist/cjs/tokens/scale_token.js +28 -0
  63. package/dist/cjs/tokens/scale_token.js.map +1 -0
  64. package/dist/cjs/tokens/theme_token.js +28 -0
  65. package/dist/cjs/tokens/theme_token.js.map +1 -0
  66. package/dist/cjs/var_invariant.js +115 -0
  67. package/dist/cjs/var_invariant.js.map +1 -0
  68. package/dist/collector.d.ts +101 -0
  69. package/dist/collector.d.ts.map +1 -0
  70. package/dist/collector.js +487 -0
  71. package/dist/collector.js.map +1 -0
  72. package/dist/css_scan.d.ts +57 -0
  73. package/dist/css_scan.d.ts.map +1 -0
  74. package/dist/css_scan.js +180 -0
  75. package/dist/css_scan.js.map +1 -0
  76. package/dist/dom_sink.d.ts +23 -0
  77. package/dist/dom_sink.d.ts.map +1 -0
  78. package/dist/dom_sink.js +36 -0
  79. package/dist/dom_sink.js.map +1 -0
  80. package/dist/emotion.d.ts +44 -0
  81. package/dist/emotion.d.ts.map +1 -0
  82. package/dist/emotion.js +184 -0
  83. package/dist/emotion.js.map +1 -0
  84. package/dist/engine.d.ts +66 -0
  85. package/dist/engine.d.ts.map +1 -0
  86. package/dist/engine.js +91 -0
  87. package/dist/engine.js.map +1 -0
  88. package/dist/environment.d.ts +43 -0
  89. package/dist/environment.d.ts.map +1 -0
  90. package/dist/environment.js +8 -0
  91. package/dist/environment.js.map +1 -0
  92. package/dist/hash.d.ts +2 -0
  93. package/dist/hash.d.ts.map +1 -0
  94. package/dist/hash.js +82 -0
  95. package/dist/hash.js.map +1 -0
  96. package/dist/idents.d.ts +9 -0
  97. package/dist/idents.d.ts.map +1 -0
  98. package/dist/idents.js +19 -0
  99. package/dist/idents.js.map +1 -0
  100. package/dist/index.d.ts +11 -0
  101. package/dist/index.d.ts.map +1 -0
  102. package/dist/index.js +15 -0
  103. package/dist/index.js.map +1 -0
  104. package/dist/instance.d.ts +16 -0
  105. package/dist/instance.d.ts.map +1 -0
  106. package/dist/instance.js +30 -0
  107. package/dist/instance.js.map +1 -0
  108. package/dist/local_vars.d.ts +75 -0
  109. package/dist/local_vars.d.ts.map +1 -0
  110. package/dist/local_vars.js +92 -0
  111. package/dist/local_vars.js.map +1 -0
  112. package/dist/minify.d.ts +11 -0
  113. package/dist/minify.d.ts.map +1 -0
  114. package/dist/minify.js +73 -0
  115. package/dist/minify.js.map +1 -0
  116. package/dist/names.d.ts +39 -0
  117. package/dist/names.d.ts.map +1 -0
  118. package/dist/names.js +70 -0
  119. package/dist/names.js.map +1 -0
  120. package/dist/nesting.d.ts +59 -0
  121. package/dist/nesting.d.ts.map +1 -0
  122. package/dist/nesting.js +400 -0
  123. package/dist/nesting.js.map +1 -0
  124. package/dist/runtime.d.ts +36 -0
  125. package/dist/runtime.d.ts.map +1 -0
  126. package/dist/runtime.js +252 -0
  127. package/dist/runtime.js.map +1 -0
  128. package/dist/sink.d.ts +16 -0
  129. package/dist/sink.d.ts.map +1 -0
  130. package/dist/sink.js +8 -0
  131. package/dist/sink.js.map +1 -0
  132. package/dist/styles/authoring.d.ts +59 -0
  133. package/dist/styles/authoring.d.ts.map +1 -0
  134. package/dist/styles/authoring.js +155 -0
  135. package/dist/styles/authoring.js.map +1 -0
  136. package/dist/styles/declarations.d.ts +10 -0
  137. package/dist/styles/declarations.d.ts.map +1 -0
  138. package/dist/styles/declarations.js +132 -0
  139. package/dist/styles/declarations.js.map +1 -0
  140. package/dist/styles/index.d.ts +7 -0
  141. package/dist/styles/index.d.ts.map +1 -0
  142. package/dist/styles/index.js +12 -0
  143. package/dist/styles/index.js.map +1 -0
  144. package/dist/styles/module.d.ts +5 -0
  145. package/dist/styles/module.d.ts.map +1 -0
  146. package/dist/styles/module.js +229 -0
  147. package/dist/styles/module.js.map +1 -0
  148. package/dist/styles/registry.d.ts +48 -0
  149. package/dist/styles/registry.d.ts.map +1 -0
  150. package/dist/styles/registry.js +182 -0
  151. package/dist/styles/registry.js.map +1 -0
  152. package/dist/styles/types.d.ts +211 -0
  153. package/dist/styles/types.d.ts.map +1 -0
  154. package/dist/styles/types.js +8 -0
  155. package/dist/styles/types.js.map +1 -0
  156. package/dist/testing.d.ts +10 -0
  157. package/dist/testing.d.ts.map +1 -0
  158. package/dist/testing.js +31 -0
  159. package/dist/testing.js.map +1 -0
  160. package/dist/theme.d.ts +85 -0
  161. package/dist/theme.d.ts.map +1 -0
  162. package/dist/theme.js +240 -0
  163. package/dist/theme.js.map +1 -0
  164. package/dist/tokens/contextual_var.d.ts +35 -0
  165. package/dist/tokens/contextual_var.d.ts.map +1 -0
  166. package/dist/tokens/contextual_var.js +33 -0
  167. package/dist/tokens/contextual_var.js.map +1 -0
  168. package/dist/tokens/index.d.ts +5 -0
  169. package/dist/tokens/index.d.ts.map +1 -0
  170. package/dist/tokens/index.js +11 -0
  171. package/dist/tokens/index.js.map +1 -0
  172. package/dist/tokens/kind.d.ts +2 -0
  173. package/dist/tokens/kind.d.ts.map +1 -0
  174. package/dist/tokens/kind.js +10 -0
  175. package/dist/tokens/kind.js.map +1 -0
  176. package/dist/tokens/light_dark.d.ts +20 -0
  177. package/dist/tokens/light_dark.d.ts.map +1 -0
  178. package/dist/tokens/light_dark.js +37 -0
  179. package/dist/tokens/light_dark.js.map +1 -0
  180. package/dist/tokens/scale_token.d.ts +20 -0
  181. package/dist/tokens/scale_token.d.ts.map +1 -0
  182. package/dist/tokens/scale_token.js +23 -0
  183. package/dist/tokens/scale_token.js.map +1 -0
  184. package/dist/tokens/theme_token.d.ts +20 -0
  185. package/dist/tokens/theme_token.d.ts.map +1 -0
  186. package/dist/tokens/theme_token.js +23 -0
  187. package/dist/tokens/theme_token.js.map +1 -0
  188. package/dist/var_invariant.d.ts +25 -0
  189. package/dist/var_invariant.d.ts.map +1 -0
  190. package/dist/var_invariant.js +108 -0
  191. package/dist/var_invariant.js.map +1 -0
  192. package/docs/concepts/authoring.md +115 -0
  193. package/docs/concepts/collection.md +66 -0
  194. package/docs/concepts/distillery.md +47 -0
  195. package/docs/concepts/index.md +18 -0
  196. package/docs/concepts/naming-and-output.md +123 -0
  197. package/docs/concepts/ordering.md +61 -0
  198. package/docs/concepts/single-copy.md +103 -0
  199. package/docs/concepts/tokens.md +99 -0
  200. package/docs/docset.yml +53 -0
  201. package/docs/examples/01-stylesheet.ts +20 -0
  202. package/docs/examples/02-artifact.ts +26 -0
  203. package/docs/examples/03-variants.ts +40 -0
  204. package/docs/examples/04-emotion.ts +33 -0
  205. package/docs/examples/05-var-invariant.ts +31 -0
  206. package/docs/examples/06-payload.ts +85 -0
  207. package/docs/examples/fixture.ts +22 -0
  208. package/docs/getting-started/index.md +14 -0
  209. package/docs/getting-started/installation.md +30 -0
  210. package/docs/getting-started/quick-start.md +61 -0
  211. package/docs/getting-started/your-first-stylesheet.md +57 -0
  212. package/docs/guides/compact-artifacts.md +87 -0
  213. package/docs/guides/emotion-migration.md +60 -0
  214. package/docs/guides/index.md +17 -0
  215. package/docs/guides/name-collisions.md +37 -0
  216. package/docs/guides/non-css-surfaces.md +73 -0
  217. package/docs/guides/react-renderer.md +202 -0
  218. package/docs/guides/theming.md +107 -0
  219. package/docs/guides/var-invariant.md +24 -0
  220. package/docs/guides/vs-emotion.md +61 -0
  221. package/docs/index.md +73 -0
  222. package/docs/logo.svg +7 -0
  223. package/docs/playground/index.html +12 -0
  224. package/docs/playground/package.json +23 -0
  225. package/docs/playground/src/app/app.tsx +109 -0
  226. package/docs/playground/src/app/css_panel.tsx +119 -0
  227. package/docs/playground/src/app/editor_panel.tsx +87 -0
  228. package/docs/playground/src/app/index.ts +8 -0
  229. package/docs/playground/src/app/monaco_css_editor.tsx +84 -0
  230. package/docs/playground/src/app/monaco_source_editor.tsx +132 -0
  231. package/docs/playground/src/app/preview_panel.tsx +99 -0
  232. package/docs/playground/src/app/tokens_panel.tsx +117 -0
  233. package/docs/playground/src/app/types.ts +10 -0
  234. package/docs/playground/src/examples/snippets.test.ts +28 -0
  235. package/docs/playground/src/examples/snippets.ts +418 -0
  236. package/docs/playground/src/lib/compile.test.ts +157 -0
  237. package/docs/playground/src/lib/compile.ts +242 -0
  238. package/docs/playground/src/lib/demo_environment.test.ts +123 -0
  239. package/docs/playground/src/lib/demo_environment.ts +140 -0
  240. package/docs/playground/src/lib/editor_lib.test.ts +39 -0
  241. package/docs/playground/src/lib/editor_lib.ts +142 -0
  242. package/docs/playground/src/lib/format_css.test.ts +41 -0
  243. package/docs/playground/src/lib/format_css.ts +71 -0
  244. package/docs/playground/src/main.tsx +25 -0
  245. package/docs/playground/src/setup/chrome.test.ts +47 -0
  246. package/docs/playground/src/setup/chrome.ts +365 -0
  247. package/docs/playground/src/setup/monaco_env.ts +64 -0
  248. package/docs/playground/tsconfig.json +22 -0
  249. package/docs/playground/vite.config.ts +37 -0
  250. package/docs/playground/vitest.config.ts +35 -0
  251. package/docs/playground.md +28 -0
  252. package/docs/reference/api/emotion.md +290 -0
  253. package/docs/reference/api/index-1.md +2387 -0
  254. package/docs/reference/api/index.md +9 -0
  255. package/docs/reference/api/testing.md +92 -0
  256. package/docs/reference/api.md +12 -0
  257. package/docs/reference/entry-points.md +139 -0
  258. package/docs/reference/environment.md +60 -0
  259. package/docs/reference/index.md +11 -0
  260. package/docs/reference/okf-map.md +93 -0
  261. package/package.json +127 -4
  262. package/src/collector.ts +612 -0
  263. package/src/css_scan.ts +263 -0
  264. package/src/dom_sink.ts +64 -0
  265. package/src/emotion.ts +308 -0
  266. package/src/engine.ts +241 -0
  267. package/src/environment.ts +56 -0
  268. package/src/hash.ts +111 -0
  269. package/src/idents.ts +21 -0
  270. package/src/index.ts +106 -0
  271. package/src/instance.ts +49 -0
  272. package/src/local_vars.ts +220 -0
  273. package/src/minify.ts +87 -0
  274. package/src/names.ts +129 -0
  275. package/src/nesting.ts +596 -0
  276. package/src/runtime.ts +428 -0
  277. package/src/sink.ts +25 -0
  278. package/src/styles/authoring.ts +244 -0
  279. package/src/styles/declarations.ts +172 -0
  280. package/src/styles/index.ts +58 -0
  281. package/src/styles/module.ts +396 -0
  282. package/src/styles/registry.ts +261 -0
  283. package/src/styles/types.ts +283 -0
  284. package/src/testing.ts +48 -0
  285. package/src/theme.ts +454 -0
  286. package/src/tokens/contextual_var.ts +72 -0
  287. package/src/tokens/index.ts +17 -0
  288. package/src/tokens/kind.ts +13 -0
  289. package/src/tokens/light_dark.ts +58 -0
  290. package/src/tokens/scale_token.ts +41 -0
  291. package/src/tokens/theme_token.ts +42 -0
  292. package/src/var_invariant.ts +147 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/styles/registry.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one\n * or more contributor license agreements. Licensed under the Elastic License\n * 2.0; you may not use this file except in compliance with the Elastic License\n * 2.0.\n */\n\nimport type { DistilleryEnvironment } from '../environment';\nimport { cssVarName } from '../names';\n\nimport type {\n ContextualVarPath,\n CssVarPath,\n Declarations,\n StyleRegistrySnapshot,\n StylesModule,\n} from './types';\n\n/**\n * Registered style modules for one distillery. Throws on duplicate module names or colliding readable class/var names.\n */\nexport class StyleRegistry {\n private readonly modulesByName = new Map<string, StylesModule>();\n private targetedKeys: Set<string> | undefined;\n\n constructor(\n private readonly prefix: string,\n private readonly reservedVarOwners: ReadonlyMap<string, string> = new Map(),\n private readonly sharedVarPaths: ReadonlySet<string> = new Set()\n ) {}\n\n /**\n * Adds `module` to this registry.\n *\n * @throws If another module already uses this name, or if a readable class or CSS-variable name collides (including `themeVars` and `sharedVars`).\n */\n registerModule(module: StylesModule): void {\n const existing = this.modulesByName.get(module.name);\n if (existing === module) {\n return;\n }\n if (existing) {\n throw new Error(`Style module \"${module.name}\" is already registered.`);\n }\n assertReadableNameCollisions(\n this.prefix,\n this.reservedVarOwners,\n this.sharedVarPaths,\n this.modulesByName.values(),\n module\n );\n this.modulesByName.set(module.name, module);\n this.targetedKeys = undefined;\n }\n\n /**\n * True when some rule, or some inner rule of an `@media` / `@container` block, reads `key` in its selector.\n *\n * A nested `&` rule records its owning handle through `recordRuleDeps`, so a handle with an empty self block but real nested rules is targeted. A rule-less nested block targets nothing.\n */\n targetsHandle(key: string): boolean {\n return this.targetedHandleKeys().has(key);\n }\n\n private targetedHandleKeys(): Set<string> {\n if (this.targetedKeys) {\n return this.targetedKeys;\n }\n const keys = new Set<string>();\n for (const module of this.modulesByName.values()) {\n for (const entry of module.entries) {\n if (entry.kind === 'rule') {\n entry.dependsOn.forEach((dep) => keys.add(dep));\n } else if (entry.kind === 'media') {\n for (const inner of entry.rules) {\n inner.dependsOn.forEach((dep) => keys.add(dep));\n }\n }\n }\n }\n this.targetedKeys = keys;\n return keys;\n }\n\n /** Registered modules, sorted by name. */\n get modules(): readonly StylesModule[] {\n return [...this.modulesByName.values()].sort((a, b) =>\n a.name.localeCompare(b.name)\n );\n }\n\n /** Looks up a module by the name passed to `createStyleModule`. */\n module(name: string): StylesModule | undefined {\n return this.modulesByName.get(name);\n }\n\n /** Handle keys across all modules. Compact-name domain for a full stylesheet. */\n get classKeys(): readonly string[] {\n return this.modules.flatMap((module) =>\n module.handleList.map((handle) => handle.key)\n );\n }\n\n /** Theme and contextual-var keys across all modules. */\n get cssVarKeys(): readonly CssVarPath[] {\n const keys = new Set<CssVarPath>();\n for (const module of this.modules) {\n module.themeDeps.forEach((path) => keys.add(path));\n module.varDeps.forEach((path) => keys.add(path));\n }\n return [...keys].sort();\n }\n\n /**\n * Frozen class and CSS-var keys for a {@link StyleNameResolver}.\n *\n * @param options Overrides the registry-wide key sets when compact-naming a subset.\n */\n freeze(\n options: {\n /** Compact class-name domain override. */\n classKeys?: Iterable<string>;\n /** Compact CSS-var domain override. */\n cssVarKeys?: Iterable<CssVarPath>;\n } = {}\n ): StyleRegistrySnapshot {\n return Object.freeze({\n classKeys: Object.freeze(\n sortedUnique(options.classKeys ?? this.classKeys)\n ),\n cssVarKeys: Object.freeze(\n sortedUnique(options.cssVarKeys ?? this.cssVarKeys)\n ),\n });\n }\n}\n\nconst sortedUnique = <TValue extends string>(\n values: Iterable<TValue>\n): readonly TValue[] => [...new Set(values)].sort();\n\nconst claimReadableVar = (\n owners: Map<string, string>,\n name: string,\n owner: string\n): void => {\n const prior = owners.get(name);\n if (prior) {\n throw new Error(\n `Readable CSS variable \"${name}\" collides between ${prior} and ${owner}.`\n );\n }\n owners.set(name, owner);\n};\n\n/** Claimed readable custom-property name and the owner that registered it. */\ninterface ReadableLocalVarOwner {\n /** Canonical variable path. */\n readonly path: ContextualVarPath;\n /** Human-readable owner used in collision errors. */\n readonly owner: string;\n}\n\n/** Readable custom-property names already claimed by `themeVars` / `sharedVars`. */\nexport const readableVarOwnersFromEnvironment = (\n environment: Pick<\n DistilleryEnvironment,\n 'prefix' | 'themeVars' | 'sharedVars'\n >\n): ReadonlyMap<string, string> => {\n const owners = new Map<string, string>();\n const { prefix } = environment;\n for (const path of Object.keys(environment.themeVars)) {\n claimReadableVar(owners, cssVarName(prefix, path), `theme var \"${path}\"`);\n }\n for (const path of environment.sharedVars ?? []) {\n claimReadableVar(owners, cssVarName(prefix, path), `shared var \"${path}\"`);\n }\n return owners;\n};\n\nconst assertReadableNameCollisions = (\n prefix: string,\n reservedVarOwners: ReadonlyMap<string, string>,\n sharedVarPaths: ReadonlySet<string>,\n existing: Iterable<StylesModule>,\n incoming: StylesModule\n): void => {\n const classOwners = new Map<string, string>();\n const reservedOwners = new Map(reservedVarOwners);\n const localVarOwners = new Map<string, ReadableLocalVarOwner>();\n const index = (module: StylesModule): void => {\n for (const handle of module.handleList) {\n const prior = classOwners.get(handle.readableName);\n if (prior) {\n throw new Error(\n `Readable class name \"${handle.readableName}\" collides between ${prior} and module \"${module.name}\" handle \"${handle.localName}\".`\n );\n }\n classOwners.set(\n handle.readableName,\n `module \"${module.name}\" handle \"${handle.localName}\"`\n );\n }\n for (const path of localVarPathsOf(module, sharedVarPaths)) {\n const name = cssVarName(prefix, path);\n const owner = `module \"${module.name}\" var \"${path}\"`;\n const reserved = reservedOwners.get(name);\n if (reserved) {\n throw new Error(\n `Readable CSS variable \"${name}\" collides between ${reserved} and ${owner}.`\n );\n }\n const prior = localVarOwners.get(name);\n if (prior && prior.path !== path) {\n throw new Error(\n `Readable CSS variable \"${name}\" collides between ${prior.owner} and ${owner}.`\n );\n }\n localVarOwners.set(name, { path, owner });\n }\n };\n for (const module of existing) {\n index(module);\n }\n index(incoming);\n};\n\n// `deps.vars` records every contextual var a module *references*, which includes\n// shared ones the module does not own. A shared path synthesizes the same\n// readable name as a local var would, so leaving them in makes two modules that\n// merely reference one shared var collide on it. The same exclusion is applied\n// when compaction maps readable names to compact ones.\nconst localVarPathsOf = (\n module: StylesModule,\n sharedVarPaths: ReadonlySet<string>\n): readonly ContextualVarPath[] => {\n const paths = new Set<ContextualVarPath>();\n const addFrom = (declarations: Declarations): void => {\n declarations.deps.vars.forEach((path) => {\n if (!sharedVarPaths.has(path)) {\n paths.add(path);\n }\n });\n for (const group of declarations.deps.defaults) {\n for (const item of group.keys) {\n paths.add(item.path);\n }\n }\n };\n for (const entry of module.entries) {\n if (entry.kind === 'handle' || entry.kind === 'rule') {\n addFrom(entry.declarations);\n } else {\n for (const nested of entry.rules) {\n addFrom(nested.declarations);\n }\n }\n }\n return [...paths];\n};\n"]}
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ /*
3
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
4
+ * or more contributor license agreements. Licensed under the Elastic License
5
+ * 2.0; you may not use this file except in compliance with the Elastic License
6
+ * 2.0.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/styles/types.ts"],"names":[],"mappings":";AAAA;;;;;GAKG","sourcesContent":["/*\n * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one\n * or more contributor license agreements. Licensed under the Elastic License\n * 2.0; you may not use this file except in compliance with the Elastic License\n * 2.0.\n */\n\nimport type {\n LocalVarDefaultMarker,\n LocalVarGroup,\n LocalVarMarker,\n LocalVarOverrideMarker,\n LocalVarRef,\n} from '../local_vars';\nimport type { SelectorAlternative } from '../nesting';\nimport type {\n ContextualCssVar,\n ContextualCssVarName,\n CssToken,\n ScaleToken,\n} from '../tokens';\n\nexport type {\n LocalVarDefaultMarker,\n LocalVarGroup,\n LocalVarMarker,\n LocalVarOverrideMarker,\n LocalVarRef,\n};\n\n/** Canonical `vars/<group>/<key>` path for a contextual or module-local CSS variable. */\nexport type ContextualVarPath = `vars/${string}`;\n/** Theme-token path or any other CSS-var key the resolver knows. */\nexport type CssVarPath = string;\n\n/** Values accepted by `t.vars(...)` defaults and `.set(...)`. */\nexport type CssValue =\n | string\n | number\n | CssToken\n | ContextualCssVar\n | ContextualCssVarName\n | ScaleToken\n | LocalVarRef;\n\n/** Reachability sets captured while authoring a declaration block. */\nexport interface StyleDeps {\n /** Theme-token paths interpolated into this block. */\n readonly theme: ReadonlySet<string>;\n /** Unconditional writes and reads. Default-marker keys land here only when reachable. */\n readonly vars: ReadonlySet<ContextualVarPath>;\n /** Read-side `var(...)` paths. Drives default-emission reachability. */\n readonly refs: ReadonlySet<ContextualVarPath>;\n /** `t.vars(...)` default-emission sites, resolved after collection. */\n readonly defaults: ReadonlyArray<DefaultGroupDeps>;\n}\n\n/** One `t.vars(...)` group's default-emission metadata. */\nexport interface DefaultGroupDeps {\n /** Target variable namespace group. */\n readonly groupPath: `vars/${string}`;\n /** Defaults registered within this group. */\n readonly keys: ReadonlyArray<DefaultKeyDeps>;\n}\n\n/** One key inside a {@link DefaultGroupDeps} group. */\nexport interface DefaultKeyDeps {\n /** The specific variable key within the group. */\n readonly key: string;\n /** Full CSS variable path (e.g. `vars/group/key`). */\n readonly path: ContextualVarPath;\n /** Theme/var paths referenced by the default value. Kept if the key is reachable. */\n readonly valueDeps: {\n /** Theme-token paths the default value interpolates. */\n readonly theme: ReadonlySet<string>;\n /** Contextual-var paths the default value interpolates. */\n readonly vars: ReadonlySet<ContextualVarPath>;\n };\n}\n\n/** Mutable twin of {@link StyleDeps} used while scanning interpolations. */\nexport interface MutableStyleDeps {\n /** Theme-token paths interpolated into this block. */\n theme: Set<string>;\n /** Unconditional writes and reads. */\n vars: Set<ContextualVarPath>;\n /** Read-side `var(...)` paths. */\n refs: Set<ContextualVarPath>;\n /** `t.vars(...)` default-emission sites. */\n defaults: DefaultGroupDeps[];\n}\n\n/** Literal CSS text or a local-var interpolation marker. */\nexport type DeclarationSegment = string | LocalVarMarker;\n\n/** Authored CSS plus the deps the collector uses for reachability. */\nexport interface Declarations {\n /** Interleaved literal CSS and local variable markers. */\n readonly css: readonly DeclarationSegment[];\n /** Reachability tracking dependencies. */\n readonly deps: StyleDeps;\n}\n\n/** A named class: readable name, declarations, and collection identity. */\nexport interface StyleHandle {\n /** Discriminant for {@link StyleEntry}. */\n readonly kind: 'handle';\n /** The registered module name this handle belongs to. */\n readonly moduleName: string;\n /** Leaf key if at root, or composed path for nested handles. */\n readonly localName: string;\n /** Full path joined by dots. */\n readonly key: string;\n /** Predictable name used for output CSS classes. */\n readonly readableName: string;\n /** CSS properties for this handle. */\n readonly declarations: Declarations;\n /** `true` when produced inside `variants(...)`. Skipped by {@link index.StylesCollector#use | StylesCollector.use}. */\n readonly variant: boolean;\n /** Produces the final class name via the provided resolver context. */\n resolveClassName(context: {\n /** Joins one or more handles into a class-name string. */\n resolveClassName: (...handles: StyleHandle[]) => string;\n }): string;\n}\n\n/** A selector plus declarations, optionally auto-collected from handle deps. */\nexport interface StyleRule {\n /** Discriminant for {@link StyleEntry}. */\n readonly kind: 'rule';\n /** The registered module name this rule belongs to. */\n readonly moduleName: string;\n /** Unique key for this rule within the module. */\n readonly key: string;\n /** Selector string factory receiving a resolver for `&` and other handles. */\n readonly selector: (h: StyleSelectorResolver) => string;\n /** CSS properties for this rule. */\n readonly declarations: Declarations;\n /** `true` when produced inside `variants(...)`. */\n readonly variant: boolean;\n /** Handle keys this selector reads. Empty until `assignEntries` fills it. */\n readonly dependsOn: ReadonlySet<string>;\n /** When `false`, skip auto-collection; the caller must `use` the rule. */\n readonly auto: boolean;\n}\n\n/** Options for {@link rule}. */\nexport interface RuleOptions {\n /** When `false`, the collector must `use` this rule explicitly. Defaults to `true`. */\n auto?: boolean;\n}\n\n/** `@media` or `@container` block wrapping inner {@link StyleRule}s. */\nexport interface StyleMedia {\n /** Discriminant for {@link StyleEntry}. */\n readonly kind: 'media';\n /**\n * At-rule this entry emits. `kind` stays `'media'` so collector rank and deps apply uniformly; see finding `media-block-ordering`.\n */\n readonly atRule?: 'media' | 'container';\n /** Stable identity for deduplication across multiple renders. */\n readonly key: string;\n /** The registered module name this media block belongs to. */\n readonly moduleName: string;\n /** The conditional query (e.g. `(min-width: 600px)`). */\n readonly query: string;\n /** Inner rules collected inside this block. */\n readonly rules: readonly StyleRule[];\n /** `true` when produced inside `variants(...)`. */\n readonly variant: boolean;\n}\n\n/** One registered handle, selector rule, or at-rule block. */\nexport type StyleEntry = StyleHandle | StyleRule | StyleMedia;\n/** Selector factory: call with a handle, or read sibling local names as `.class` strings. */\nexport type StyleSelectorResolver = ((handle: StyleHandle) => string) &\n Record<string, string>;\n\n/** Named handle tree plus flat entries after `createStyleModule`. */\nexport interface StylesModule<TStyles = StylesObject> {\n /** The unique registered name of the module. */\n readonly name: string;\n /** Authored tree of handles, rules, and media; variants nest as records. */\n readonly handles: TStyles;\n /** Flat list of style entries (handles, rules, media) defined in this module. */\n readonly entries: readonly StyleEntry[];\n /** Flat list of just the style handles defined in this module. */\n readonly handleList: readonly StyleHandle[];\n /** Aggregated theme dependencies across all entries. */\n readonly themeDeps: ReadonlySet<string>;\n /** Aggregated variable dependencies across all entries. */\n readonly varDeps: ReadonlySet<ContextualVarPath>;\n}\n\n/** Authored module tree before {@link ResolvedStyles} substitution. */\nexport type StylesObject = Record<string, unknown>;\n/** Class and CSS-var key snapshot used to build a {@link StyleNameResolver}. */\nexport interface StyleRegistrySnapshot {\n /** Collected readable class names from registered modules. */\n readonly classKeys: readonly string[];\n /** Collected custom property (CSS variable) keys. */\n readonly cssVarKeys: readonly CssVarPath[];\n}\n\n/** Resolves nested pending handles, rules, and medias into their runtime types. */\nexport type ResolvedStyles<TValue> = TValue extends PendingStyleHandle\n ? StyleHandle\n : TValue extends StyleRule\n ? StyleRule\n : TValue extends StyleMedia\n ? StyleMedia\n : TValue extends readonly (infer TItem)[]\n ? readonly ResolvedStyles<TItem>[]\n : TValue extends Record<string, unknown>\n ? { [TKey in keyof TValue]: ResolvedStyles<TValue[TKey]> }\n : TValue;\n\n/** Authoring API passed to `createStyleModule` factories. */\nexport interface StyleAuthoringApi<TTokens = unknown> {\n /** Creates a handle template where nested `&` and `@media` flatten into sibling rules. */\n css: (\n strings: TemplateStringsArray,\n ...values: readonly unknown[]\n ) => PendingStyleHandle;\n /** Creates a declaration block template for direct CSS properties. */\n decls: (\n strings: TemplateStringsArray,\n ...values: readonly unknown[]\n ) => Declarations;\n /** Module-local CSS variable group. Interpolate `${group}`, `${group.key}`, or `${group.set({...})}`. */\n vars: <TKey extends string>(\n group: string,\n defaults: Record<TKey, CssValue>\n ) => LocalVarGroup<TKey>;\n /** Environment token tree. */\n tokens: TTokens;\n}\n\n/** Authoring-time handle before module registration rewrites it to a {@link StyleHandle}. */\nexport interface PendingStyleHandle {\n /** Discriminant for pending templates. */\n readonly kind: 'pending-handle';\n /** Declaration properties authored on this pending handle. */\n readonly declarations: Declarations;\n /** Nested `&` / `@media` rules expanded into sibling entries at registration. */\n readonly nested?: readonly PendingNested[];\n}\n\n/** Nested `&` rule captured on a pending handle. */\nexport interface PendingNestedRule {\n /** Discriminant for pending nested entries. */\n readonly kind: 'nested-rule';\n /** Comma alternatives relative to the parent handle. */\n readonly alternatives: readonly SelectorAlternative[];\n /** CSS properties for this nested rule. */\n readonly declarations: Declarations;\n}\n\n/** Nested `@media` captured on a pending handle. */\nexport interface PendingNestedMedia {\n /** Discriminant for pending nested entries. */\n readonly kind: 'nested-media';\n /** Media query text. */\n readonly query: string;\n /** Bare declarations inside the block, applied to the parent handle. */\n readonly self?: Declarations;\n /** Nested `&` rules inside this media block. */\n readonly rules: readonly PendingNestedRule[];\n}\n\n/** Nested `&` rule or `@media` on a pending handle. */\nexport type PendingNested = PendingNestedRule | PendingNestedMedia;\n\n/** Pending handle or already-resolved rule/media during registration. */\nexport type PendingEntry = PendingStyleHandle | StyleRule | StyleMedia;\n\n/** Narrow `t` for `primitiveStyles`: handles and tokens only. */\nexport interface PrimitiveStyleAuthoringApi<TTokens = unknown> {\n /** Creates named style handles using the same template tag as `css`. */\n style: StyleAuthoringApi<TTokens>['css'];\n /** Environment token tree. */\n tokens: TTokens;\n}\n"]}
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ /*
3
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
4
+ * or more contributor license agreements. Licensed under the Elastic License
5
+ * 2.0; you may not use this file except in compliance with the Elastic License
6
+ * 2.0.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.tokenTreeDts = exports.findVarRefViolations = exports.assertVarRefsHaveDeclarations = void 0;
10
+ const tokens_1 = require("./tokens");
11
+ var var_invariant_1 = require("./var_invariant");
12
+ Object.defineProperty(exports, "assertVarRefsHaveDeclarations", { enumerable: true, get: function () { return var_invariant_1.assertVarRefsHaveDeclarations; } });
13
+ Object.defineProperty(exports, "findVarRefViolations", { enumerable: true, get: function () { return var_invariant_1.findVarRefViolations; } });
14
+ /**
15
+ * Emits a TypeScript `interface` for a derived token tree, for Monaco extraLib text.
16
+ *
17
+ * @param typeName Interface identifier.
18
+ * @param tree Derived {@link CssToken} / {@link ScaleToken} tree.
19
+ * @param leafType Identifier used for every leaf. Defaults to `CssInterpolable`.
20
+ */
21
+ const tokenTreeDts = (typeName, tree, leafType = 'CssInterpolable') => `interface ${typeName} ${emitTokenObject(tree, 0, leafType)}`;
22
+ exports.tokenTreeDts = tokenTreeDts;
23
+ const emitTokenObject = (value, indent, leafType) => {
24
+ const pad = ' '.repeat(indent);
25
+ const inner = ' '.repeat(indent + 1);
26
+ const lines = Object.entries(value).map(([key, child]) => {
27
+ if ((0, tokens_1.isCssToken)(child) || (0, tokens_1.isScaleToken)(child)) {
28
+ return `${inner}readonly ${key}: ${leafType};`;
29
+ }
30
+ if (child && typeof child === 'object') {
31
+ return `${inner}readonly ${key}: ${emitTokenObject(child, indent + 1, leafType)};`;
32
+ }
33
+ throw new Error(`tokenTreeDts: unexpected leaf at "${key}"`);
34
+ });
35
+ return `{\n${lines.join('\n')}\n${pad}}`;
36
+ };
37
+ //# sourceMappingURL=testing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"testing.js","sourceRoot":"","sources":["../../src/testing.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH,qCAAoD;AAEpD,iDAIyB;AAHvB,8HAAA,6BAA6B,OAAA;AAC7B,qHAAA,oBAAoB,OAAA;AAItB;;;;;;GAMG;AACI,MAAM,YAAY,GAAG,CAC1B,QAAgB,EAChB,IAAY,EACZ,QAAQ,GAAG,iBAAiB,EACpB,EAAE,CAAC,aAAa,QAAQ,IAAI,eAAe,CAAC,IAAI,EAAE,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC;AAJ9D,QAAA,YAAY,gBAIkD;AAE3E,MAAM,eAAe,GAAG,CACtB,KAAa,EACb,MAAc,EACd,QAAgB,EACR,EAAE;IACV,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAChC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACtC,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,KAAgC,CAAC,CAAC,GAAG,CAChE,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;QACf,IAAI,IAAA,mBAAU,EAAC,KAAK,CAAC,IAAI,IAAA,qBAAY,EAAC,KAAK,CAAC,EAAE,CAAC;YAC7C,OAAO,GAAG,KAAK,YAAY,GAAG,KAAK,QAAQ,GAAG,CAAC;QACjD,CAAC;QACD,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YACvC,OAAO,GAAG,KAAK,YAAY,GAAG,KAAK,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC;QACrF,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,qCAAqC,GAAG,GAAG,CAAC,CAAC;IAC/D,CAAC,CACF,CAAC;IACF,OAAO,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC;AAC3C,CAAC,CAAC","sourcesContent":["/*\n * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one\n * or more contributor license agreements. Licensed under the Elastic License\n * 2.0; you may not use this file except in compliance with the Elastic License\n * 2.0.\n */\n\nimport { isCssToken, isScaleToken } from './tokens';\n\nexport {\n assertVarRefsHaveDeclarations,\n findVarRefViolations,\n type VarInvariantViolation,\n} from './var_invariant';\n\n/**\n * Emits a TypeScript `interface` for a derived token tree, for Monaco extraLib text.\n *\n * @param typeName Interface identifier.\n * @param tree Derived {@link CssToken} / {@link ScaleToken} tree.\n * @param leafType Identifier used for every leaf. Defaults to `CssInterpolable`.\n */\nexport const tokenTreeDts = (\n typeName: string,\n tree: object,\n leafType = 'CssInterpolable'\n): string => `interface ${typeName} ${emitTokenObject(tree, 0, leafType)}`;\n\nconst emitTokenObject = (\n value: object,\n indent: number,\n leafType: string\n): string => {\n const pad = ' '.repeat(indent);\n const inner = ' '.repeat(indent + 1);\n const lines = Object.entries(value as Record<string, unknown>).map(\n ([key, child]) => {\n if (isCssToken(child) || isScaleToken(child)) {\n return `${inner}readonly ${key}: ${leafType};`;\n }\n if (child && typeof child === 'object') {\n return `${inner}readonly ${key}: ${emitTokenObject(child, indent + 1, leafType)};`;\n }\n throw new Error(`tokenTreeDts: unexpected leaf at \"${key}\"`);\n }\n );\n return `{\\n${lines.join('\\n')}\\n${pad}}`;\n};\n"]}
@@ -0,0 +1,249 @@
1
+ "use strict";
2
+ /*
3
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
4
+ * or more contributor license agreements. Licensed under the Elastic License
5
+ * 2.0; you may not use this file except in compliance with the Elastic License
6
+ * 2.0.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.resolveThemeVariations = exports.serializedThemeValue = exports.requireThemeVariation = exports.resolveThemeValues = exports.deriveTheme = exports.zipSchemes = void 0;
10
+ const names_1 = require("./names");
11
+ const tokens_1 = require("./tokens");
12
+ /** Theme-tree keys omit `-` so hyphen-joined custom properties reverse uniquely. */
13
+ const THEME_KEY_RE = /^[A-Za-z_][A-Za-z0-9_]*$/;
14
+ /**
15
+ * Folds two per-scheme trees into one authoring tree. Equal string leaves stay bare; differing strings become {@link lightDark}. {@link ScaleToken} leaves must agree.
16
+ *
17
+ * @param light Light-scheme value tree.
18
+ * @param dark Dark-scheme value tree.
19
+ * @throws If shapes, leaf kinds, or scale values disagree, or if a differing string pair is not a CSS `<color>`.
20
+ */
21
+ const zipSchemes = (light, dark) => zipNode(light, dark, '');
22
+ exports.zipSchemes = zipSchemes;
23
+ /** Walks `theme` into a {@link CssToken} / {@link ScaleToken} tree and a `themeVars` registry. */
24
+ const deriveTheme = (prefix, theme) => {
25
+ const themeVars = dict();
26
+ const tokens = walk(theme, '', prefix, themeVars);
27
+ return { tokens, themeVars };
28
+ };
29
+ exports.deriveTheme = deriveTheme;
30
+ /**
31
+ * Nested literal values for one scheme. Walks `theme` so {@link ScaleToken} leaves resolve to `.value`.
32
+ *
33
+ * @param theme Authoring tree that produced `themeVars`.
34
+ * @param themeVars Base registry from {@link Distillery.themeVars}.
35
+ * @param scheme Which side of each {@link ThemeVarDefinition} to read.
36
+ * @param variation When set, overridden paths come from `variation.diffs`; everything else stays on `themeVars`.
37
+ */
38
+ const resolveThemeValues = (theme, themeVars, scheme, variation) => {
39
+ const vars = variation
40
+ ? Object.assign(dict(), themeVars, variation.diffs)
41
+ : themeVars;
42
+ return walkValues(theme, '', vars, scheme);
43
+ };
44
+ exports.resolveThemeValues = resolveThemeValues;
45
+ /** Looks up a declared variation. @throws If `name` is not in `variations`. */
46
+ const requireThemeVariation = (variations, name) => {
47
+ const resolved = variations && Object.hasOwn(variations, name)
48
+ ? variations[name]
49
+ : undefined;
50
+ if (!resolved) {
51
+ const declared = Object.keys(variations ?? {});
52
+ const suffix = declared.length > 0
53
+ ? ` Declared: ${declared.join(', ')}.`
54
+ : ' No variations were declared.';
55
+ throw new Error(`Unknown variation "${name}".${suffix}`);
56
+ }
57
+ return resolved;
58
+ };
59
+ exports.requireThemeVariation = requireThemeVariation;
60
+ /** Serialized `light` / `light-dark(light, dark)` form used in emission and diffs. */
61
+ const serializedThemeValue = ({ light, dark, }) => light === dark ? light : `light-dark(${light},${dark})`;
62
+ exports.serializedThemeValue = serializedThemeValue;
63
+ /**
64
+ * Resolves named `variations` against `base`. Variations extend the base only (no chains).
65
+ *
66
+ * @throws If a variation introduces an unknown path, a leaf-kind mismatch, or a diverging {@link ScaleToken}.
67
+ */
68
+ const resolveThemeVariations = (prefix, base, baseVars, variations) => {
69
+ if (!variations) {
70
+ return {};
71
+ }
72
+ const out = dict();
73
+ for (const [name, declaration] of Object.entries(variations)) {
74
+ const { media, variation } = unwrapThemeVariation(declaration, name);
75
+ const merged = applyVariation(base, variation, name, '');
76
+ const { themeVars } = (0, exports.deriveTheme)(prefix, merged);
77
+ const diffs = dict();
78
+ for (const [path, definition] of Object.entries(themeVars)) {
79
+ const baseDefinition = baseVars[path];
80
+ if (!baseDefinition ||
81
+ (0, exports.serializedThemeValue)(definition) !==
82
+ (0, exports.serializedThemeValue)(baseDefinition)) {
83
+ diffs[path] = definition;
84
+ }
85
+ }
86
+ out[name] = Object.freeze({
87
+ name,
88
+ themeVars: Object.freeze(themeVars),
89
+ diffs: Object.freeze(diffs),
90
+ ...(media ? { media } : {}),
91
+ });
92
+ }
93
+ return Object.freeze(out);
94
+ };
95
+ exports.resolveThemeVariations = resolveThemeVariations;
96
+ const unwrapThemeVariation = (declaration, name) => {
97
+ if (!isMediaThemeVariation(declaration)) {
98
+ return { variation: declaration };
99
+ }
100
+ const extra = Object.keys(declaration).filter((key) => key !== 'media' && key !== 'variation');
101
+ if (extra.length > 0) {
102
+ throw new Error(`Variation "${name}" media declaration cannot include keys ${extra.map((key) => `"${key}"`).join(', ')}.`);
103
+ }
104
+ if (declaration.media.trim().length === 0) {
105
+ throw new Error(`Variation "${name}" has an empty media query.`);
106
+ }
107
+ return { media: declaration.media, variation: declaration.variation };
108
+ };
109
+ const isMediaThemeVariation = (value) => {
110
+ if (!isPlainObject(value)) {
111
+ return false;
112
+ }
113
+ const candidate = value;
114
+ return (typeof candidate.media === 'string' && isPlainObject(candidate.variation));
115
+ };
116
+ const applyVariation = (base, variation, variationName, path) => {
117
+ if (variation === undefined) {
118
+ return base;
119
+ }
120
+ if ((0, tokens_1.isScaleToken)(base) || (0, tokens_1.isScaleToken)(variation)) {
121
+ if (!(0, tokens_1.isScaleToken)(base) || !(0, tokens_1.isScaleToken)(variation)) {
122
+ throw new Error(`Variation "${variationName}": "${path}" is a ScaleToken in one tree and not the other.`);
123
+ }
124
+ if (base.value !== variation.value || base.cq !== variation.cq) {
125
+ throw new Error(`Variation "${variationName}": ScaleToken at "${path}" disagrees with the base (scale tokens inline and cannot vary by variation).`);
126
+ }
127
+ return base;
128
+ }
129
+ if ((0, tokens_1.isSchemePair)(variation) || typeof variation === 'string') {
130
+ if (typeof base !== 'string' && !(0, tokens_1.isSchemePair)(base)) {
131
+ throw new Error(`Variation "${variationName}": "${path}" is a leaf in the variation and a group in the base.`);
132
+ }
133
+ return variation;
134
+ }
135
+ if (isThemeGroup(variation) && isThemeGroup(base)) {
136
+ const out = Object.assign(dict(), base);
137
+ for (const [key, child] of Object.entries(variation)) {
138
+ if (!Object.hasOwn(base, key)) {
139
+ throw new Error(`Variation "${variationName}": unknown path "${childPath(path, key)}".`);
140
+ }
141
+ out[key] = applyVariation(base[key], child, variationName, childPath(path, key));
142
+ }
143
+ return out;
144
+ }
145
+ throw new Error(`Variation "${variationName}": "${path || '(root)'}" is not a valid partial.`);
146
+ };
147
+ const isThemeGroup = (value) => isPlainObject(value) && !(0, tokens_1.isSchemePair)(value) && !(0, tokens_1.isScaleToken)(value);
148
+ const walkValues = (node, path, themeVars, scheme) => {
149
+ if ((0, tokens_1.isScaleToken)(node)) {
150
+ assertNotRoot(path);
151
+ return node.value;
152
+ }
153
+ if ((0, tokens_1.isSchemePair)(node) || typeof node === 'string') {
154
+ assertNotRoot(path);
155
+ const definition = themeVars[path];
156
+ if (!definition) {
157
+ throw new Error(`No theme var for "${path}".`);
158
+ }
159
+ return definition[scheme];
160
+ }
161
+ if (isPlainObject(node)) {
162
+ const out = dict();
163
+ for (const [key, child] of Object.entries(node)) {
164
+ out[key] = walkValues(child, childPath(path, key), themeVars, scheme);
165
+ }
166
+ return Object.freeze(out);
167
+ }
168
+ const label = path === '' ? 'theme root' : `"${path}"`;
169
+ throw new Error(`Theme leaf at ${label} must be a string, lightDark(...), or ScaleToken.`);
170
+ };
171
+ const walk = (node, path, prefix, themeVars) => {
172
+ if ((0, tokens_1.isScaleToken)(node)) {
173
+ assertNotRoot(path);
174
+ return node;
175
+ }
176
+ if ((0, tokens_1.isSchemePair)(node)) {
177
+ assertNotRoot(path);
178
+ return registerCssToken(path, prefix, node.light, node.dark, themeVars);
179
+ }
180
+ if (typeof node === 'string') {
181
+ assertNotRoot(path);
182
+ return registerCssToken(path, prefix, node, node, themeVars);
183
+ }
184
+ if (isPlainObject(node)) {
185
+ const out = dict();
186
+ for (const [key, child] of Object.entries(node)) {
187
+ assertThemeKey(key);
188
+ const childPath = path === '' ? key : `${path}/${key}`;
189
+ out[key] = walk(child, childPath, prefix, themeVars);
190
+ }
191
+ return Object.freeze(out);
192
+ }
193
+ const label = path === '' ? 'theme root' : `"${path}"`;
194
+ throw new Error(`Theme leaf at ${label} must be a string, lightDark(...), or ScaleToken.`);
195
+ };
196
+ const registerCssToken = (path, prefix, light, dark, themeVars) => {
197
+ const cssVar = (0, names_1.cssVarName)(prefix, path);
198
+ themeVars[path] = { path, cssVar, light, dark };
199
+ return (0, tokens_1.themeToken)(path, cssVar);
200
+ };
201
+ const zipNode = (light, dark, path) => {
202
+ if ((0, tokens_1.isScaleToken)(light) || (0, tokens_1.isScaleToken)(dark)) {
203
+ if (!(0, tokens_1.isScaleToken)(light) || !(0, tokens_1.isScaleToken)(dark)) {
204
+ throw new Error(`zipSchemes: "${path}" is a ScaleToken in one scheme and not the other.`);
205
+ }
206
+ if (light.value !== dark.value || light.cq !== dark.cq) {
207
+ throw new Error(`zipSchemes: ScaleToken at "${path}" disagrees across schemes.`);
208
+ }
209
+ return light;
210
+ }
211
+ if (typeof light === 'string' || typeof dark === 'string') {
212
+ if (typeof light !== 'string' || typeof dark !== 'string') {
213
+ throw new Error(`zipSchemes: "${path}" is a string in one scheme and not the other.`);
214
+ }
215
+ return light === dark ? light : (0, tokens_1.lightDark)(light, dark);
216
+ }
217
+ if (isPlainObject(light) && isPlainObject(dark)) {
218
+ for (const key of Object.keys(light)) {
219
+ if (!Object.hasOwn(dark, key)) {
220
+ throw new Error(`zipSchemes: "${childPath(path, key)}" is missing in the dark tree.`);
221
+ }
222
+ }
223
+ for (const key of Object.keys(dark)) {
224
+ if (!Object.hasOwn(light, key)) {
225
+ throw new Error(`zipSchemes: "${childPath(path, key)}" is missing in the light tree.`);
226
+ }
227
+ }
228
+ const out = dict();
229
+ for (const key of Object.keys(light)) {
230
+ out[key] = zipNode(light[key], dark[key], childPath(path, key));
231
+ }
232
+ return out;
233
+ }
234
+ throw new Error(`zipSchemes: "${path || '(root)'}" must be a string, ScaleToken, or nested object.`);
235
+ };
236
+ const childPath = (path, key) => path === '' ? key : `${path}/${key}`;
237
+ const assertNotRoot = (path) => {
238
+ if (path === '') {
239
+ throw new Error('Theme root must be an object.');
240
+ }
241
+ };
242
+ const assertThemeKey = (key) => {
243
+ if (!THEME_KEY_RE.test(key)) {
244
+ throw new Error(`Theme key "${key}" must match /^[A-Za-z_][A-Za-z0-9_]*$/ (hyphens are rejected so path segments reverse uniquely).`);
245
+ }
246
+ };
247
+ const dict = () => Object.create(null);
248
+ const isPlainObject = (value) => Boolean(value) && typeof value === 'object' && !Array.isArray(value);
249
+ //# sourceMappingURL=theme.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme.js","sourceRoot":"","sources":["../../src/theme.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one\n * or more contributor license agreements. Licensed under the Elastic License\n * 2.0; you may not use this file except in compliance with the Elastic License\n * 2.0.\n */\n\nimport type { ThemeVarDefinition } from './environment';\nimport { cssVarName } from './names';\nimport {\n type CssToken,\n isScaleToken,\n isSchemePair,\n lightDark,\n type ScaleToken,\n type SchemePair,\n themeToken,\n} from './tokens';\n\n/** Theme-tree keys omit `-` so hyphen-joined custom properties reverse uniquely. */\nconst THEME_KEY_RE = /^[A-Za-z_][A-Za-z0-9_]*$/;\n\n/** One authoring leaf: invariant string, {@link lightDark} pair, or {@link ScaleToken}. */\nexport type ThemeLeaf = string | SchemePair | ScaleToken;\n\n/** Nested authoring tree. Keys must match `/^[A-Za-z_][A-Za-z0-9_]*$/`. */\nexport type ThemeTree = {\n readonly [key: string]: ThemeLeaf | ThemeTree;\n};\n\n/** Per-scheme value tree accepted by {@link zipSchemes}. */\nexport type SchemeValueTree = {\n readonly [key: string]: string | ScaleToken | SchemeValueTree;\n};\n\n/** Token tree derived from an authoring {@link ThemeTree}. */\nexport type TokensOf<T> = T extends ScaleToken\n ? ScaleToken\n : T extends SchemePair | string\n ? CssToken\n : T extends object\n ? { readonly [K in keyof T]: TokensOf<T[K]> }\n : never;\n\n/** Literal-value tree for one scheme. {@link ScaleToken} leaves use `.value`. */\nexport type ValuesOf<T> = T extends ScaleToken\n ? string\n : T extends SchemePair | string\n ? string\n : T extends object\n ? { readonly [K in keyof T]: ValuesOf<T[K]> }\n : never;\n\n/** Slash-delimited theme-var paths (excludes {@link ScaleToken} leaves). */\nexport type PathsOf<T, Prefix extends string = ''> = T extends ScaleToken\n ? never\n : T extends SchemePair | string\n ? Prefix extends ''\n ? never\n : Prefix\n : T extends object\n ? {\n [K in keyof T & string]: PathsOf<\n T[K],\n Prefix extends '' ? K : `${Prefix}/${K}`\n >;\n }[keyof T & string]\n : never;\n\n/** {@link zipSchemes} output: equal strings collapse; differing strings become {@link SchemePair}. */\nexport type Zipped<T> = T extends ScaleToken\n ? ScaleToken\n : T extends string\n ? string | SchemePair\n : T extends object\n ? { readonly [K in keyof T]: Zipped<T[K]> }\n : never;\n\n/** Partial variation of a {@link ThemeTree}. Leaves may change kind between `string` and {@link SchemePair}. */\nexport type DeepPartialTheme<T> = T extends ScaleToken\n ? ScaleToken\n : T extends SchemePair | string\n ? string | SchemePair\n : T extends object\n ? { readonly [K in keyof T]?: DeepPartialTheme<T[K]> }\n : never;\n\n/** Media-conditioned variation. `media` is intrinsic; it is not a selector. */\nexport interface MediaThemeVariation<T extends ThemeTree = ThemeTree> {\n /** Media query wrapping this variation's emitted diffs. */\n readonly media: string;\n /** Partial variation of the base theme. */\n readonly variation: DeepPartialTheme<T>;\n}\n\n/** Named variation: a partial of the base, or a media-conditioned partial. */\nexport type ThemeVariation<T extends ThemeTree = ThemeTree> =\n DeepPartialTheme<T> | MediaThemeVariation<T>;\n\n/** One named variation resolved against the base at construction. */\nexport interface ResolvedThemeVariation {\n /** Name passed in `variations`. */\n readonly name: string;\n /** Intrinsic media query, when declared. */\n readonly media?: string;\n /** Base theme vars with this variation applied. */\n readonly themeVars: Readonly<Record<string, ThemeVarDefinition>>;\n /** Paths whose serialized value differs from the base. */\n readonly diffs: Readonly<Record<string, ThemeVarDefinition>>;\n}\n\n/**\n * Folds two per-scheme trees into one authoring tree. Equal string leaves stay bare; differing strings become {@link lightDark}. {@link ScaleToken} leaves must agree.\n *\n * @param light Light-scheme value tree.\n * @param dark Dark-scheme value tree.\n * @throws If shapes, leaf kinds, or scale values disagree, or if a differing string pair is not a CSS `<color>`.\n */\nexport const zipSchemes = <T extends SchemeValueTree>(\n light: T,\n dark: T\n): Zipped<T> => zipNode(light, dark, '') as Zipped<T>;\n\n/** Walks `theme` into a {@link CssToken} / {@link ScaleToken} tree and a `themeVars` registry. */\nexport const deriveTheme = <T extends ThemeTree>(\n prefix: string,\n theme: T\n): { tokens: TokensOf<T>; themeVars: Record<string, ThemeVarDefinition> } => {\n const themeVars = dict<ThemeVarDefinition>();\n const tokens = walk(theme, '', prefix, themeVars) as TokensOf<T>;\n return { tokens, themeVars };\n};\n\n/**\n * Nested literal values for one scheme. Walks `theme` so {@link ScaleToken} leaves resolve to `.value`.\n *\n * @param theme Authoring tree that produced `themeVars`.\n * @param themeVars Base registry from {@link Distillery.themeVars}.\n * @param scheme Which side of each {@link ThemeVarDefinition} to read.\n * @param variation When set, overridden paths come from `variation.diffs`; everything else stays on `themeVars`.\n */\nexport const resolveThemeValues = <T extends ThemeTree>(\n theme: T,\n themeVars: Readonly<Record<string, ThemeVarDefinition>>,\n scheme: 'light' | 'dark',\n variation?: ResolvedThemeVariation\n): ValuesOf<T> => {\n const vars = variation\n ? Object.assign(dict<ThemeVarDefinition>(), themeVars, variation.diffs)\n : themeVars;\n return walkValues(theme, '', vars, scheme) as ValuesOf<T>;\n};\n\n/** Looks up a declared variation. @throws If `name` is not in `variations`. */\nexport const requireThemeVariation = (\n variations: Readonly<Record<string, ResolvedThemeVariation>> | undefined,\n name: string\n): ResolvedThemeVariation => {\n const resolved =\n variations && Object.hasOwn(variations, name)\n ? variations[name]\n : undefined;\n if (!resolved) {\n const declared = Object.keys(variations ?? {});\n const suffix =\n declared.length > 0\n ? ` Declared: ${declared.join(', ')}.`\n : ' No variations were declared.';\n throw new Error(`Unknown variation \"${name}\".${suffix}`);\n }\n return resolved;\n};\n\n/** Serialized `light` / `light-dark(light, dark)` form used in emission and diffs. */\nexport const serializedThemeValue = ({\n light,\n dark,\n}: ThemeVarDefinition): string =>\n light === dark ? light : `light-dark(${light},${dark})`;\n\n/**\n * Resolves named `variations` against `base`. Variations extend the base only (no chains).\n *\n * @throws If a variation introduces an unknown path, a leaf-kind mismatch, or a diverging {@link ScaleToken}.\n */\nexport const resolveThemeVariations = (\n prefix: string,\n base: ThemeTree,\n baseVars: Readonly<Record<string, ThemeVarDefinition>>,\n variations: Readonly<Record<string, ThemeVariation>> | undefined\n): Readonly<Record<string, ResolvedThemeVariation>> => {\n if (!variations) {\n return {};\n }\n const out = dict<ResolvedThemeVariation>();\n for (const [name, declaration] of Object.entries(variations)) {\n const { media, variation } = unwrapThemeVariation(declaration, name);\n const merged = applyVariation(base, variation, name, '') as ThemeTree;\n const { themeVars } = deriveTheme(prefix, merged);\n const diffs = dict<ThemeVarDefinition>();\n for (const [path, definition] of Object.entries(themeVars)) {\n const baseDefinition = baseVars[path];\n if (\n !baseDefinition ||\n serializedThemeValue(definition) !==\n serializedThemeValue(baseDefinition)\n ) {\n diffs[path] = definition;\n }\n }\n out[name] = Object.freeze({\n name,\n themeVars: Object.freeze(themeVars),\n diffs: Object.freeze(diffs),\n ...(media ? { media } : {}),\n });\n }\n return Object.freeze(out);\n};\n\nconst unwrapThemeVariation = (\n declaration: ThemeVariation,\n name: string\n): { media?: string; variation: DeepPartialTheme<ThemeTree> } => {\n if (!isMediaThemeVariation(declaration)) {\n return { variation: declaration };\n }\n const extra = Object.keys(declaration).filter(\n (key) => key !== 'media' && key !== 'variation'\n );\n if (extra.length > 0) {\n throw new Error(\n `Variation \"${name}\" media declaration cannot include keys ${extra.map((key) => `\"${key}\"`).join(', ')}.`\n );\n }\n if (declaration.media.trim().length === 0) {\n throw new Error(`Variation \"${name}\" has an empty media query.`);\n }\n return { media: declaration.media, variation: declaration.variation };\n};\n\nconst isMediaThemeVariation = (\n value: ThemeVariation\n): value is MediaThemeVariation => {\n if (!isPlainObject(value)) {\n return false;\n }\n const candidate = value;\n return (\n typeof candidate.media === 'string' && isPlainObject(candidate.variation)\n );\n};\n\nconst applyVariation = (\n base: unknown,\n variation: unknown,\n variationName: string,\n path: string\n): unknown => {\n if (variation === undefined) {\n return base;\n }\n if (isScaleToken(base) || isScaleToken(variation)) {\n if (!isScaleToken(base) || !isScaleToken(variation)) {\n throw new Error(\n `Variation \"${variationName}\": \"${path}\" is a ScaleToken in one tree and not the other.`\n );\n }\n if (base.value !== variation.value || base.cq !== variation.cq) {\n throw new Error(\n `Variation \"${variationName}\": ScaleToken at \"${path}\" disagrees with the base (scale tokens inline and cannot vary by variation).`\n );\n }\n return base;\n }\n if (isSchemePair(variation) || typeof variation === 'string') {\n if (typeof base !== 'string' && !isSchemePair(base)) {\n throw new Error(\n `Variation \"${variationName}\": \"${path}\" is a leaf in the variation and a group in the base.`\n );\n }\n return variation;\n }\n if (isThemeGroup(variation) && isThemeGroup(base)) {\n const out = Object.assign(dict<unknown>(), base);\n for (const [key, child] of Object.entries(variation)) {\n if (!Object.hasOwn(base, key)) {\n throw new Error(\n `Variation \"${variationName}\": unknown path \"${childPath(path, key)}\".`\n );\n }\n out[key] = applyVariation(\n base[key],\n child,\n variationName,\n childPath(path, key)\n );\n }\n return out;\n }\n throw new Error(\n `Variation \"${variationName}\": \"${path || '(root)'}\" is not a valid partial.`\n );\n};\n\nconst isThemeGroup = (value: unknown): value is Record<string, unknown> =>\n isPlainObject(value) && !isSchemePair(value) && !isScaleToken(value);\n\nconst walkValues = (\n node: unknown,\n path: string,\n themeVars: Readonly<Record<string, ThemeVarDefinition>>,\n scheme: 'light' | 'dark'\n): unknown => {\n if (isScaleToken(node)) {\n assertNotRoot(path);\n return node.value;\n }\n if (isSchemePair(node) || typeof node === 'string') {\n assertNotRoot(path);\n const definition = themeVars[path];\n if (!definition) {\n throw new Error(`No theme var for \"${path}\".`);\n }\n return definition[scheme];\n }\n if (isPlainObject(node)) {\n const out = dict<unknown>();\n for (const [key, child] of Object.entries(node)) {\n out[key] = walkValues(child, childPath(path, key), themeVars, scheme);\n }\n return Object.freeze(out);\n }\n const label = path === '' ? 'theme root' : `\"${path}\"`;\n throw new Error(\n `Theme leaf at ${label} must be a string, lightDark(...), or ScaleToken.`\n );\n};\n\nconst walk = (\n node: unknown,\n path: string,\n prefix: string,\n themeVars: Record<string, ThemeVarDefinition>\n): unknown => {\n if (isScaleToken(node)) {\n assertNotRoot(path);\n return node;\n }\n if (isSchemePair(node)) {\n assertNotRoot(path);\n return registerCssToken(path, prefix, node.light, node.dark, themeVars);\n }\n if (typeof node === 'string') {\n assertNotRoot(path);\n return registerCssToken(path, prefix, node, node, themeVars);\n }\n if (isPlainObject(node)) {\n const out = dict<unknown>();\n for (const [key, child] of Object.entries(node)) {\n assertThemeKey(key);\n const childPath = path === '' ? key : `${path}/${key}`;\n out[key] = walk(child, childPath, prefix, themeVars);\n }\n return Object.freeze(out);\n }\n const label = path === '' ? 'theme root' : `\"${path}\"`;\n throw new Error(\n `Theme leaf at ${label} must be a string, lightDark(...), or ScaleToken.`\n );\n};\n\nconst registerCssToken = (\n path: string,\n prefix: string,\n light: string,\n dark: string,\n themeVars: Record<string, ThemeVarDefinition>\n): CssToken => {\n const cssVar = cssVarName(prefix, path);\n themeVars[path] = { path, cssVar, light, dark };\n return themeToken(path, cssVar);\n};\n\nconst zipNode = (light: unknown, dark: unknown, path: string): unknown => {\n if (isScaleToken(light) || isScaleToken(dark)) {\n if (!isScaleToken(light) || !isScaleToken(dark)) {\n throw new Error(\n `zipSchemes: \"${path}\" is a ScaleToken in one scheme and not the other.`\n );\n }\n if (light.value !== dark.value || light.cq !== dark.cq) {\n throw new Error(\n `zipSchemes: ScaleToken at \"${path}\" disagrees across schemes.`\n );\n }\n return light;\n }\n if (typeof light === 'string' || typeof dark === 'string') {\n if (typeof light !== 'string' || typeof dark !== 'string') {\n throw new Error(\n `zipSchemes: \"${path}\" is a string in one scheme and not the other.`\n );\n }\n return light === dark ? light : lightDark(light, dark);\n }\n if (isPlainObject(light) && isPlainObject(dark)) {\n for (const key of Object.keys(light)) {\n if (!Object.hasOwn(dark, key)) {\n throw new Error(\n `zipSchemes: \"${childPath(path, key)}\" is missing in the dark tree.`\n );\n }\n }\n for (const key of Object.keys(dark)) {\n if (!Object.hasOwn(light, key)) {\n throw new Error(\n `zipSchemes: \"${childPath(path, key)}\" is missing in the light tree.`\n );\n }\n }\n const out = dict<unknown>();\n for (const key of Object.keys(light)) {\n out[key] = zipNode(light[key], dark[key], childPath(path, key));\n }\n return out;\n }\n throw new Error(\n `zipSchemes: \"${path || '(root)'}\" must be a string, ScaleToken, or nested object.`\n );\n};\n\nconst childPath = (path: string, key: string): string =>\n path === '' ? key : `${path}/${key}`;\n\nconst assertNotRoot = (path: string): void => {\n if (path === '') {\n throw new Error('Theme root must be an object.');\n }\n};\n\nconst assertThemeKey = (key: string): void => {\n if (!THEME_KEY_RE.test(key)) {\n throw new Error(\n `Theme key \"${key}\" must match /^[A-Za-z_][A-Za-z0-9_]*$/ (hyphens are rejected so path segments reverse uniquely).`\n );\n }\n};\n\nconst dict = <T>(): Record<string, T> =>\n Object.create(null) as Record<string, T>;\n\nconst isPlainObject = (value: unknown): value is Record<string, unknown> =>\n Boolean(value) && typeof value === 'object' && !Array.isArray(value);\n"]}
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ /*
3
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
4
+ * or more contributor license agreements. Licensed under the Elastic License
5
+ * 2.0; you may not use this file except in compliance with the Elastic License
6
+ * 2.0.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.isContextualCssVarName = exports.isContextualCssVar = exports.contextualVar = void 0;
10
+ const kind_1 = require("./kind");
11
+ /** Shared contextual var. Stringifies to `var(<prop>)`; `.name` is the ident. */
12
+ const contextualVar = (path, prop) => {
13
+ const ref = `var(${prop})`;
14
+ const propToString = () => prop;
15
+ const refToString = () => ref;
16
+ const name = {
17
+ __kind: 'contextual-var-name',
18
+ path,
19
+ name: prop,
20
+ toString: propToString,
21
+ [Symbol.toPrimitive]: propToString,
22
+ };
23
+ return {
24
+ __kind: 'contextual-var',
25
+ path,
26
+ name,
27
+ ref,
28
+ toString: refToString,
29
+ [Symbol.toPrimitive]: refToString,
30
+ };
31
+ };
32
+ exports.contextualVar = contextualVar;
33
+ /** `true` when `value` is a {@link ContextualCssVar}. @param value Value to test. */
34
+ const isContextualCssVar = (value) => (0, kind_1.hasKind)(value, 'contextual-var');
35
+ exports.isContextualCssVar = isContextualCssVar;
36
+ /** `true` when `value` is a {@link ContextualCssVarName}. @param value Value to test. */
37
+ const isContextualCssVarName = (value) => (0, kind_1.hasKind)(value, 'contextual-var-name');
38
+ exports.isContextualCssVarName = isContextualCssVarName;
39
+ //# sourceMappingURL=contextual_var.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contextual_var.js","sourceRoot":"","sources":["../../../src/tokens/contextual_var.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH,iCAAiC;AAgCjC,iFAAiF;AAC1E,MAAM,aAAa,GAAG,CAC3B,IAAsB,EACtB,IAAmB,EACD,EAAE;IACpB,MAAM,GAAG,GAAuB,OAAO,IAAI,GAAG,CAAC;IAC/C,MAAM,YAAY,GAAG,GAAW,EAAE,CAAC,IAAI,CAAC;IACxC,MAAM,WAAW,GAAG,GAAW,EAAE,CAAC,GAAG,CAAC;IACtC,MAAM,IAAI,GAAyB;QACjC,MAAM,EAAE,qBAAqB;QAC7B,IAAI;QACJ,IAAI,EAAE,IAAI;QACV,QAAQ,EAAE,YAAY;QACtB,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,YAAY;KACnC,CAAC;IACF,OAAO;QACL,MAAM,EAAE,gBAAgB;QACxB,IAAI;QACJ,IAAI;QACJ,GAAG;QACH,QAAQ,EAAE,WAAW;QACrB,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,WAAW;KAClC,CAAC;AACJ,CAAC,CAAC;AAtBW,QAAA,aAAa,iBAsBxB;AAEF,qFAAqF;AAC9E,MAAM,kBAAkB,GAAG,CAAC,KAAc,EAA6B,EAAE,CAC9E,IAAA,cAAO,EAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;AADtB,QAAA,kBAAkB,sBACI;AAEnC,yFAAyF;AAClF,MAAM,sBAAsB,GAAG,CACpC,KAAc,EACiB,EAAE,CAAC,IAAA,cAAO,EAAC,KAAK,EAAE,qBAAqB,CAAC,CAAC;AAF7D,QAAA,sBAAsB,0BAEuC","sourcesContent":["/*\n * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one\n * or more contributor license agreements. Licensed under the Elastic License\n * 2.0; you may not use this file except in compliance with the Elastic License\n * 2.0.\n */\n\nimport { hasKind } from './kind';\n\n/** Represents a contextual CSS variable name. Stringifies to its custom property name. */\nexport interface ContextualCssVarName {\n /** Brand for {@link isContextualCssVarName}. */\n readonly __kind: 'contextual-var-name';\n /** Group/key path for this variable. */\n readonly path: `vars/${string}`;\n /** Actual emitted CSS custom property name. */\n readonly name: `--${string}`;\n /** Stringifies to {@link ContextualCssVarName.name}. */\n toString(): string;\n /** Template interpolation; same as {@link ContextualCssVarName.toString}. */\n [Symbol.toPrimitive](hint: string): string;\n}\n\n/** Represents a contextual CSS variable. Stringifies to `var(--...)`. */\nexport interface ContextualCssVar {\n /** Brand for {@link isContextualCssVar}. */\n readonly __kind: 'contextual-var';\n /** Group/key path for this variable. */\n readonly path: `vars/${string}`;\n /** Wrapper yielding just the custom property name. */\n readonly name: ContextualCssVarName;\n /** Usable CSS `var(...)` reference string. */\n readonly ref: `var(--${string})`;\n /** Stringifies to {@link ContextualCssVar.ref}. */\n toString(): string;\n /** Template interpolation; same as {@link ContextualCssVar.toString}. */\n [Symbol.toPrimitive](hint: string): string;\n}\n\n/** Shared contextual var. Stringifies to `var(<prop>)`; `.name` is the ident. */\nexport const contextualVar = (\n path: `vars/${string}`,\n prop: `--${string}`\n): ContextualCssVar => {\n const ref: `var(--${string})` = `var(${prop})`;\n const propToString = (): string => prop;\n const refToString = (): string => ref;\n const name: ContextualCssVarName = {\n __kind: 'contextual-var-name',\n path,\n name: prop,\n toString: propToString,\n [Symbol.toPrimitive]: propToString,\n };\n return {\n __kind: 'contextual-var',\n path,\n name,\n ref,\n toString: refToString,\n [Symbol.toPrimitive]: refToString,\n };\n};\n\n/** `true` when `value` is a {@link ContextualCssVar}. @param value Value to test. */\nexport const isContextualCssVar = (value: unknown): value is ContextualCssVar =>\n hasKind(value, 'contextual-var');\n\n/** `true` when `value` is a {@link ContextualCssVarName}. @param value Value to test. */\nexport const isContextualCssVarName = (\n value: unknown\n): value is ContextualCssVarName => hasKind(value, 'contextual-var-name');\n"]}
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ /*
3
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
4
+ * or more contributor license agreements. Licensed under the Elastic License
5
+ * 2.0; you may not use this file except in compliance with the Elastic License
6
+ * 2.0.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.themeToken = exports.isCssToken = exports.scaleToken = exports.isScaleToken = exports.cq = exports.lightDark = exports.isSchemePair = exports.isContextualCssVarName = exports.isContextualCssVar = exports.contextualVar = void 0;
10
+ var contextual_var_1 = require("./contextual_var");
11
+ Object.defineProperty(exports, "contextualVar", { enumerable: true, get: function () { return contextual_var_1.contextualVar; } });
12
+ Object.defineProperty(exports, "isContextualCssVar", { enumerable: true, get: function () { return contextual_var_1.isContextualCssVar; } });
13
+ Object.defineProperty(exports, "isContextualCssVarName", { enumerable: true, get: function () { return contextual_var_1.isContextualCssVarName; } });
14
+ var light_dark_1 = require("./light_dark");
15
+ Object.defineProperty(exports, "isSchemePair", { enumerable: true, get: function () { return light_dark_1.isSchemePair; } });
16
+ Object.defineProperty(exports, "lightDark", { enumerable: true, get: function () { return light_dark_1.lightDark; } });
17
+ var scale_token_1 = require("./scale_token");
18
+ Object.defineProperty(exports, "cq", { enumerable: true, get: function () { return scale_token_1.cq; } });
19
+ Object.defineProperty(exports, "isScaleToken", { enumerable: true, get: function () { return scale_token_1.isScaleToken; } });
20
+ Object.defineProperty(exports, "scaleToken", { enumerable: true, get: function () { return scale_token_1.scaleToken; } });
21
+ var theme_token_1 = require("./theme_token");
22
+ Object.defineProperty(exports, "isCssToken", { enumerable: true, get: function () { return theme_token_1.isCssToken; } });
23
+ Object.defineProperty(exports, "themeToken", { enumerable: true, get: function () { return theme_token_1.themeToken; } });
24
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tokens/index.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH,mDAM0B;AAHxB,+GAAA,aAAa,OAAA;AACb,oHAAA,kBAAkB,OAAA;AAClB,wHAAA,sBAAsB,OAAA;AAExB,2CAAwE;AAA9C,0GAAA,YAAY,OAAA;AAAE,uGAAA,SAAS,OAAA;AACjD,6CAA8E;AAApD,iGAAA,EAAE,OAAA;AAAE,2GAAA,YAAY,OAAA;AAAE,yGAAA,UAAU,OAAA;AACtD,6CAAsE;AAA9C,yGAAA,UAAU,OAAA;AAAE,yGAAA,UAAU,OAAA","sourcesContent":["/*\n * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one\n * or more contributor license agreements. Licensed under the Elastic License\n * 2.0; you may not use this file except in compliance with the Elastic License\n * 2.0.\n */\n\nexport {\n type ContextualCssVar,\n type ContextualCssVarName,\n contextualVar,\n isContextualCssVar,\n isContextualCssVarName,\n} from './contextual_var';\nexport { type SchemePair, isSchemePair, lightDark } from './light_dark';\nexport { type ScaleToken, cq, isScaleToken, scaleToken } from './scale_token';\nexport { type CssToken, isCssToken, themeToken } from './theme_token';\n"]}
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ /*
3
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
4
+ * or more contributor license agreements. Licensed under the Elastic License
5
+ * 2.0; you may not use this file except in compliance with the Elastic License
6
+ * 2.0.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.hasKind = void 0;
10
+ const hasKind = (value, kind) => Boolean(value &&
11
+ typeof value === 'object' &&
12
+ value.__kind === kind);
13
+ exports.hasKind = hasKind;
14
+ //# sourceMappingURL=kind.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kind.js","sourceRoot":"","sources":["../../../src/tokens/kind.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEI,MAAM,OAAO,GAAG,CAAC,KAAc,EAAE,IAAY,EAAW,EAAE,CAC/D,OAAO,CACL,KAAK;IACL,OAAO,KAAK,KAAK,QAAQ;IACxB,KAA6B,CAAC,MAAM,KAAK,IAAI,CAC/C,CAAC;AALS,QAAA,OAAO,WAKhB","sourcesContent":["/*\n * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one\n * or more contributor license agreements. Licensed under the Elastic License\n * 2.0; you may not use this file except in compliance with the Elastic License\n * 2.0.\n */\n\nexport const hasKind = (value: unknown, kind: string): boolean =>\n Boolean(\n value &&\n typeof value === 'object' &&\n (value as { __kind?: string }).__kind === kind\n );\n"]}
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ /*
3
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
4
+ * or more contributor license agreements. Licensed under the Elastic License
5
+ * 2.0; you may not use this file except in compliance with the Elastic License
6
+ * 2.0.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.lightDark = exports.isSchemePair = void 0;
10
+ const kind_1 = require("./kind");
11
+ /** `true` when `value` is a {@link SchemePair}. @param value Value to test. */
12
+ const isSchemePair = (value) => (0, kind_1.hasKind)(value, 'scheme-pair');
13
+ exports.isSchemePair = isSchemePair;
14
+ /**
15
+ * Scheme-varying color pair. Both sides must be CSS `<color>` values.
16
+ *
17
+ * @param light Light color-scheme value.
18
+ * @param dark Dark color-scheme value.
19
+ * @throws If either value is not a CSS `<color>`.
20
+ */
21
+ const lightDark = (light, dark) => {
22
+ assertCssColor(light, 'light');
23
+ assertCssColor(dark, 'dark');
24
+ return { __kind: 'scheme-pair', light, dark };
25
+ };
26
+ exports.lightDark = lightDark;
27
+ const isCssColor = (value) => {
28
+ const trimmed = value.trim();
29
+ if (/^#(?:[\da-f]{3}|[\da-f]{4}|[\da-f]{6}|[\da-f]{8})$/i.test(trimmed)) {
30
+ return true;
31
+ }
32
+ if (/^(?:transparent|currentcolor)$/i.test(trimmed)) {
33
+ return true;
34
+ }
35
+ return (/^(?:rgba?|hsla?|hwb|lab|lch|oklab|oklch|color-mix|color)\(/i.test(trimmed) && trimmed.endsWith(')'));
36
+ };
37
+ const assertCssColor = (value, side) => {
38
+ if (!isCssColor(value)) {
39
+ throw new Error(`lightDark() ${side} value "${value}" is not a CSS <color>; light-dark() would be dropped by the browser.`);
40
+ }
41
+ };
42
+ //# sourceMappingURL=light_dark.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"light_dark.js","sourceRoot":"","sources":["../../../src/tokens/light_dark.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH,iCAAiC;AAYjC,+EAA+E;AACxE,MAAM,YAAY,GAAG,CAAC,KAAc,EAAuB,EAAE,CAClE,IAAA,cAAO,EAAC,KAAK,EAAE,aAAa,CAAC,CAAC;AADnB,QAAA,YAAY,gBACO;AAEhC;;;;;;GAMG;AACI,MAAM,SAAS,GAAG,CAAC,KAAa,EAAE,IAAY,EAAc,EAAE;IACnE,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC/B,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC7B,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AAChD,CAAC,CAAC;AAJW,QAAA,SAAS,aAIpB;AAEF,MAAM,UAAU,GAAG,CAAC,KAAa,EAAW,EAAE;IAC5C,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,IAAI,qDAAqD,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACxE,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,iCAAiC,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACpD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,CACL,6DAA6D,CAAC,IAAI,CAChE,OAAO,CACR,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAC3B,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CAAC,KAAa,EAAE,IAAsB,EAAQ,EAAE;IACrE,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CACb,eAAe,IAAI,WAAW,KAAK,uEAAuE,CAC3G,CAAC;IACJ,CAAC;AACH,CAAC,CAAC","sourcesContent":["/*\n * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one\n * or more contributor license agreements. Licensed under the Elastic License\n * 2.0; you may not use this file except in compliance with the Elastic License\n * 2.0.\n */\n\nimport { hasKind } from './kind';\n\n/** Scheme-varying color pair. Compiles to `light-dark(light, dark)`. */\nexport interface SchemePair {\n /** Brand for {@link isSchemePair}. */\n readonly __kind: 'scheme-pair';\n /** Light color-scheme value. Must be a CSS `<color>`. */\n readonly light: string;\n /** Dark color-scheme value. Must be a CSS `<color>`. */\n readonly dark: string;\n}\n\n/** `true` when `value` is a {@link SchemePair}. @param value Value to test. */\nexport const isSchemePair = (value: unknown): value is SchemePair =>\n hasKind(value, 'scheme-pair');\n\n/**\n * Scheme-varying color pair. Both sides must be CSS `<color>` values.\n *\n * @param light Light color-scheme value.\n * @param dark Dark color-scheme value.\n * @throws If either value is not a CSS `<color>`.\n */\nexport const lightDark = (light: string, dark: string): SchemePair => {\n assertCssColor(light, 'light');\n assertCssColor(dark, 'dark');\n return { __kind: 'scheme-pair', light, dark };\n};\n\nconst isCssColor = (value: string): boolean => {\n const trimmed = value.trim();\n if (/^#(?:[\\da-f]{3}|[\\da-f]{4}|[\\da-f]{6}|[\\da-f]{8})$/i.test(trimmed)) {\n return true;\n }\n if (/^(?:transparent|currentcolor)$/i.test(trimmed)) {\n return true;\n }\n return (\n /^(?:rgba?|hsla?|hwb|lab|lch|oklab|oklch|color-mix|color)\\(/i.test(\n trimmed\n ) && trimmed.endsWith(')')\n );\n};\n\nconst assertCssColor = (value: string, side: 'light' | 'dark'): void => {\n if (!isCssColor(value)) {\n throw new Error(\n `lightDark() ${side} value \"${value}\" is not a CSS <color>; light-dark() would be dropped by the browser.`\n );\n }\n};\n"]}
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ /*
3
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
4
+ * or more contributor license agreements. Licensed under the Elastic License
5
+ * 2.0; you may not use this file except in compliance with the Elastic License
6
+ * 2.0.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.isScaleToken = exports.cq = exports.scaleToken = void 0;
10
+ const kind_1 = require("./kind");
11
+ /** Literal size token. Stringifies to `value`; `cq` is the container-relative variant. */
12
+ const scaleToken = (value, cq) => {
13
+ const valueToString = () => value;
14
+ return {
15
+ __kind: 'scale-token',
16
+ value,
17
+ cq,
18
+ toString: valueToString,
19
+ [Symbol.toPrimitive]: valueToString,
20
+ };
21
+ };
22
+ exports.scaleToken = scaleToken;
23
+ /** Alias of {@link scaleToken} for theme-tree authoring. */
24
+ exports.cq = exports.scaleToken;
25
+ /** `true` when `value` is a {@link ScaleToken}. @param value Value to test. */
26
+ const isScaleToken = (value) => (0, kind_1.hasKind)(value, 'scale-token');
27
+ exports.isScaleToken = isScaleToken;
28
+ //# sourceMappingURL=scale_token.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scale_token.js","sourceRoot":"","sources":["../../../src/tokens/scale_token.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH,iCAAiC;AAgBjC,0FAA0F;AACnF,MAAM,UAAU,GAAG,CAAC,KAAa,EAAE,EAAU,EAAc,EAAE;IAClE,MAAM,aAAa,GAAG,GAAW,EAAE,CAAC,KAAK,CAAC;IAC1C,OAAO;QACL,MAAM,EAAE,aAAa;QACrB,KAAK;QACL,EAAE;QACF,QAAQ,EAAE,aAAa;QACvB,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,aAAa;KACpC,CAAC;AACJ,CAAC,CAAC;AATW,QAAA,UAAU,cASrB;AAEF,4DAA4D;AAC/C,QAAA,EAAE,GAAG,kBAAU,CAAC;AAE7B,+EAA+E;AACxE,MAAM,YAAY,GAAG,CAAC,KAAc,EAAuB,EAAE,CAClE,IAAA,cAAO,EAAC,KAAK,EAAE,aAAa,CAAC,CAAC;AADnB,QAAA,YAAY,gBACO","sourcesContent":["/*\n * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one\n * or more contributor license agreements. Licensed under the Elastic License\n * 2.0; you may not use this file except in compliance with the Elastic License\n * 2.0.\n */\n\nimport { hasKind } from './kind';\n\n/** Represents a CSS scale size token. Stringifies to its literal value. */\nexport interface ScaleToken {\n /** Brand for {@link isScaleToken}. */\n readonly __kind: 'scale-token';\n /** Literal CSS value, inlined into declarations. */\n readonly value: string;\n /** Container-query-relative variant of `value`. */\n readonly cq: string;\n /** Stringifies to {@link ScaleToken.value}. */\n toString(): string;\n /** Template interpolation; same as {@link ScaleToken.toString}. */\n [Symbol.toPrimitive](hint: string): string;\n}\n\n/** Literal size token. Stringifies to `value`; `cq` is the container-relative variant. */\nexport const scaleToken = (value: string, cq: string): ScaleToken => {\n const valueToString = (): string => value;\n return {\n __kind: 'scale-token',\n value,\n cq,\n toString: valueToString,\n [Symbol.toPrimitive]: valueToString,\n };\n};\n\n/** Alias of {@link scaleToken} for theme-tree authoring. */\nexport const cq = scaleToken;\n\n/** `true` when `value` is a {@link ScaleToken}. @param value Value to test. */\nexport const isScaleToken = (value: unknown): value is ScaleToken =>\n hasKind(value, 'scale-token');\n"]}