@elastic/distillate 0.0.0 → 0.1.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 (285) 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 +420 -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 +79 -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 +42 -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/styles/authoring.js +169 -0
  37. package/dist/cjs/styles/authoring.js.map +1 -0
  38. package/dist/cjs/styles/declarations.js +139 -0
  39. package/dist/cjs/styles/declarations.js.map +1 -0
  40. package/dist/cjs/styles/index.js +32 -0
  41. package/dist/cjs/styles/index.js.map +1 -0
  42. package/dist/cjs/styles/module.js +233 -0
  43. package/dist/cjs/styles/module.js.map +1 -0
  44. package/dist/cjs/styles/registry.js +187 -0
  45. package/dist/cjs/styles/registry.js.map +1 -0
  46. package/dist/cjs/styles/types.js +9 -0
  47. package/dist/cjs/styles/types.js.map +1 -0
  48. package/dist/cjs/testing.js +37 -0
  49. package/dist/cjs/testing.js.map +1 -0
  50. package/dist/cjs/theme.js +249 -0
  51. package/dist/cjs/theme.js.map +1 -0
  52. package/dist/cjs/tokens/contextual_var.js +39 -0
  53. package/dist/cjs/tokens/contextual_var.js.map +1 -0
  54. package/dist/cjs/tokens/index.js +24 -0
  55. package/dist/cjs/tokens/index.js.map +1 -0
  56. package/dist/cjs/tokens/kind.js +14 -0
  57. package/dist/cjs/tokens/kind.js.map +1 -0
  58. package/dist/cjs/tokens/light_dark.js +42 -0
  59. package/dist/cjs/tokens/light_dark.js.map +1 -0
  60. package/dist/cjs/tokens/scale_token.js +28 -0
  61. package/dist/cjs/tokens/scale_token.js.map +1 -0
  62. package/dist/cjs/tokens/theme_token.js +28 -0
  63. package/dist/cjs/tokens/theme_token.js.map +1 -0
  64. package/dist/cjs/var_invariant.js +115 -0
  65. package/dist/cjs/var_invariant.js.map +1 -0
  66. package/dist/collector.d.ts +84 -0
  67. package/dist/collector.d.ts.map +1 -0
  68. package/dist/collector.js +416 -0
  69. package/dist/collector.js.map +1 -0
  70. package/dist/css_scan.d.ts +57 -0
  71. package/dist/css_scan.d.ts.map +1 -0
  72. package/dist/css_scan.js +180 -0
  73. package/dist/css_scan.js.map +1 -0
  74. package/dist/dom_sink.d.ts +27 -0
  75. package/dist/dom_sink.d.ts.map +1 -0
  76. package/dist/dom_sink.js +36 -0
  77. package/dist/dom_sink.js.map +1 -0
  78. package/dist/emotion.d.ts +47 -0
  79. package/dist/emotion.d.ts.map +1 -0
  80. package/dist/emotion.js +184 -0
  81. package/dist/emotion.js.map +1 -0
  82. package/dist/engine.d.ts +41 -0
  83. package/dist/engine.d.ts.map +1 -0
  84. package/dist/engine.js +75 -0
  85. package/dist/engine.js.map +1 -0
  86. package/dist/environment.d.ts +43 -0
  87. package/dist/environment.d.ts.map +1 -0
  88. package/dist/environment.js +8 -0
  89. package/dist/environment.js.map +1 -0
  90. package/dist/hash.d.ts +2 -0
  91. package/dist/hash.d.ts.map +1 -0
  92. package/dist/hash.js +82 -0
  93. package/dist/hash.js.map +1 -0
  94. package/dist/idents.d.ts +9 -0
  95. package/dist/idents.d.ts.map +1 -0
  96. package/dist/idents.js +19 -0
  97. package/dist/idents.js.map +1 -0
  98. package/dist/index.d.ts +9 -0
  99. package/dist/index.d.ts.map +1 -0
  100. package/dist/index.js +14 -0
  101. package/dist/index.js.map +1 -0
  102. package/dist/instance.d.ts +16 -0
  103. package/dist/instance.d.ts.map +1 -0
  104. package/dist/instance.js +30 -0
  105. package/dist/instance.js.map +1 -0
  106. package/dist/local_vars.d.ts +75 -0
  107. package/dist/local_vars.d.ts.map +1 -0
  108. package/dist/local_vars.js +92 -0
  109. package/dist/local_vars.js.map +1 -0
  110. package/dist/minify.d.ts +11 -0
  111. package/dist/minify.d.ts.map +1 -0
  112. package/dist/minify.js +73 -0
  113. package/dist/minify.js.map +1 -0
  114. package/dist/names.d.ts +39 -0
  115. package/dist/names.d.ts.map +1 -0
  116. package/dist/names.js +70 -0
  117. package/dist/names.js.map +1 -0
  118. package/dist/nesting.d.ts +59 -0
  119. package/dist/nesting.d.ts.map +1 -0
  120. package/dist/nesting.js +400 -0
  121. package/dist/nesting.js.map +1 -0
  122. package/dist/runtime.d.ts +36 -0
  123. package/dist/runtime.d.ts.map +1 -0
  124. package/dist/runtime.js +252 -0
  125. package/dist/runtime.js.map +1 -0
  126. package/dist/styles/authoring.d.ts +59 -0
  127. package/dist/styles/authoring.d.ts.map +1 -0
  128. package/dist/styles/authoring.js +155 -0
  129. package/dist/styles/authoring.js.map +1 -0
  130. package/dist/styles/declarations.d.ts +10 -0
  131. package/dist/styles/declarations.d.ts.map +1 -0
  132. package/dist/styles/declarations.js +132 -0
  133. package/dist/styles/declarations.js.map +1 -0
  134. package/dist/styles/index.d.ts +7 -0
  135. package/dist/styles/index.d.ts.map +1 -0
  136. package/dist/styles/index.js +12 -0
  137. package/dist/styles/index.js.map +1 -0
  138. package/dist/styles/module.d.ts +5 -0
  139. package/dist/styles/module.d.ts.map +1 -0
  140. package/dist/styles/module.js +229 -0
  141. package/dist/styles/module.js.map +1 -0
  142. package/dist/styles/registry.d.ts +48 -0
  143. package/dist/styles/registry.d.ts.map +1 -0
  144. package/dist/styles/registry.js +182 -0
  145. package/dist/styles/registry.js.map +1 -0
  146. package/dist/styles/types.d.ts +211 -0
  147. package/dist/styles/types.d.ts.map +1 -0
  148. package/dist/styles/types.js +8 -0
  149. package/dist/styles/types.js.map +1 -0
  150. package/dist/testing.d.ts +10 -0
  151. package/dist/testing.d.ts.map +1 -0
  152. package/dist/testing.js +31 -0
  153. package/dist/testing.js.map +1 -0
  154. package/dist/theme.d.ts +85 -0
  155. package/dist/theme.d.ts.map +1 -0
  156. package/dist/theme.js +240 -0
  157. package/dist/theme.js.map +1 -0
  158. package/dist/tokens/contextual_var.d.ts +35 -0
  159. package/dist/tokens/contextual_var.d.ts.map +1 -0
  160. package/dist/tokens/contextual_var.js +33 -0
  161. package/dist/tokens/contextual_var.js.map +1 -0
  162. package/dist/tokens/index.d.ts +5 -0
  163. package/dist/tokens/index.d.ts.map +1 -0
  164. package/dist/tokens/index.js +11 -0
  165. package/dist/tokens/index.js.map +1 -0
  166. package/dist/tokens/kind.d.ts +2 -0
  167. package/dist/tokens/kind.d.ts.map +1 -0
  168. package/dist/tokens/kind.js +10 -0
  169. package/dist/tokens/kind.js.map +1 -0
  170. package/dist/tokens/light_dark.d.ts +20 -0
  171. package/dist/tokens/light_dark.d.ts.map +1 -0
  172. package/dist/tokens/light_dark.js +37 -0
  173. package/dist/tokens/light_dark.js.map +1 -0
  174. package/dist/tokens/scale_token.d.ts +20 -0
  175. package/dist/tokens/scale_token.d.ts.map +1 -0
  176. package/dist/tokens/scale_token.js +23 -0
  177. package/dist/tokens/scale_token.js.map +1 -0
  178. package/dist/tokens/theme_token.d.ts +20 -0
  179. package/dist/tokens/theme_token.d.ts.map +1 -0
  180. package/dist/tokens/theme_token.js +23 -0
  181. package/dist/tokens/theme_token.js.map +1 -0
  182. package/dist/var_invariant.d.ts +25 -0
  183. package/dist/var_invariant.d.ts.map +1 -0
  184. package/dist/var_invariant.js +108 -0
  185. package/dist/var_invariant.js.map +1 -0
  186. package/docs/concepts/authoring.md +115 -0
  187. package/docs/concepts/collection.md +66 -0
  188. package/docs/concepts/distillery.md +47 -0
  189. package/docs/concepts/index.md +18 -0
  190. package/docs/concepts/naming-and-output.md +123 -0
  191. package/docs/concepts/ordering.md +61 -0
  192. package/docs/concepts/single-copy.md +103 -0
  193. package/docs/concepts/tokens.md +99 -0
  194. package/docs/docset.yml +53 -0
  195. package/docs/examples/01-stylesheet.ts +20 -0
  196. package/docs/examples/02-artifact.ts +26 -0
  197. package/docs/examples/03-variants.ts +40 -0
  198. package/docs/examples/04-emotion.ts +33 -0
  199. package/docs/examples/05-var-invariant.ts +31 -0
  200. package/docs/examples/06-payload.ts +85 -0
  201. package/docs/examples/fixture.ts +22 -0
  202. package/docs/getting-started/index.md +14 -0
  203. package/docs/getting-started/installation.md +30 -0
  204. package/docs/getting-started/quick-start.md +61 -0
  205. package/docs/getting-started/your-first-stylesheet.md +57 -0
  206. package/docs/guides/compact-artifacts.md +87 -0
  207. package/docs/guides/emotion-migration.md +60 -0
  208. package/docs/guides/index.md +17 -0
  209. package/docs/guides/name-collisions.md +37 -0
  210. package/docs/guides/non-css-surfaces.md +73 -0
  211. package/docs/guides/react-renderer.md +158 -0
  212. package/docs/guides/theming.md +107 -0
  213. package/docs/guides/var-invariant.md +24 -0
  214. package/docs/guides/vs-emotion.md +61 -0
  215. package/docs/index.md +73 -0
  216. package/docs/logo.svg +7 -0
  217. package/docs/playground/index.html +12 -0
  218. package/docs/playground/package.json +23 -0
  219. package/docs/playground/src/app/app.tsx +109 -0
  220. package/docs/playground/src/app/css_panel.tsx +119 -0
  221. package/docs/playground/src/app/editor_panel.tsx +87 -0
  222. package/docs/playground/src/app/index.ts +8 -0
  223. package/docs/playground/src/app/monaco_css_editor.tsx +84 -0
  224. package/docs/playground/src/app/monaco_source_editor.tsx +132 -0
  225. package/docs/playground/src/app/preview_panel.tsx +99 -0
  226. package/docs/playground/src/app/tokens_panel.tsx +117 -0
  227. package/docs/playground/src/app/types.ts +10 -0
  228. package/docs/playground/src/examples/snippets.test.ts +28 -0
  229. package/docs/playground/src/examples/snippets.ts +418 -0
  230. package/docs/playground/src/lib/compile.test.ts +157 -0
  231. package/docs/playground/src/lib/compile.ts +242 -0
  232. package/docs/playground/src/lib/demo_environment.test.ts +123 -0
  233. package/docs/playground/src/lib/demo_environment.ts +140 -0
  234. package/docs/playground/src/lib/editor_lib.test.ts +39 -0
  235. package/docs/playground/src/lib/editor_lib.ts +142 -0
  236. package/docs/playground/src/lib/format_css.test.ts +41 -0
  237. package/docs/playground/src/lib/format_css.ts +71 -0
  238. package/docs/playground/src/main.tsx +25 -0
  239. package/docs/playground/src/setup/chrome.test.ts +47 -0
  240. package/docs/playground/src/setup/chrome.ts +365 -0
  241. package/docs/playground/src/setup/monaco_env.ts +64 -0
  242. package/docs/playground/tsconfig.json +22 -0
  243. package/docs/playground/vite.config.ts +37 -0
  244. package/docs/playground/vitest.config.ts +35 -0
  245. package/docs/playground.md +28 -0
  246. package/docs/reference/api/emotion.md +372 -0
  247. package/docs/reference/api/index-1.md +2180 -0
  248. package/docs/reference/api/index.md +9 -0
  249. package/docs/reference/api/testing.md +92 -0
  250. package/docs/reference/api.md +12 -0
  251. package/docs/reference/entry-points.md +125 -0
  252. package/docs/reference/environment.md +60 -0
  253. package/docs/reference/index.md +11 -0
  254. package/docs/reference/okf-map.md +92 -0
  255. package/package.json +127 -4
  256. package/src/collector.ts +526 -0
  257. package/src/css_scan.ts +263 -0
  258. package/src/dom_sink.ts +65 -0
  259. package/src/emotion.ts +311 -0
  260. package/src/engine.ts +191 -0
  261. package/src/environment.ts +56 -0
  262. package/src/hash.ts +111 -0
  263. package/src/idents.ts +21 -0
  264. package/src/index.ts +93 -0
  265. package/src/instance.ts +49 -0
  266. package/src/local_vars.ts +220 -0
  267. package/src/minify.ts +87 -0
  268. package/src/names.ts +129 -0
  269. package/src/nesting.ts +596 -0
  270. package/src/runtime.ts +428 -0
  271. package/src/styles/authoring.ts +244 -0
  272. package/src/styles/declarations.ts +172 -0
  273. package/src/styles/index.ts +58 -0
  274. package/src/styles/module.ts +396 -0
  275. package/src/styles/registry.ts +261 -0
  276. package/src/styles/types.ts +283 -0
  277. package/src/testing.ts +48 -0
  278. package/src/theme.ts +454 -0
  279. package/src/tokens/contextual_var.ts +72 -0
  280. package/src/tokens/index.ts +17 -0
  281. package/src/tokens/kind.ts +13 -0
  282. package/src/tokens/light_dark.ts +58 -0
  283. package/src/tokens/scale_token.ts +41 -0
  284. package/src/tokens/theme_token.ts +42 -0
  285. package/src/var_invariant.ts +147 -0
@@ -0,0 +1,184 @@
1
+ /*
2
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
3
+ * or more contributor license agreements. Licensed under the Elastic License
4
+ * 2.0; you may not use this file except in compliance with the Elastic License
5
+ * 2.0.
6
+ */
7
+ import { contentHash64 } from './hash.js';
8
+ import { flattenTemplate, isHandleLike } from './nesting.js';
9
+ import { globalStylesFromFlattened, pendingHandleFromFlattened, } from './styles/index.js';
10
+ export { createDomSink, } from './dom_sink.js';
11
+ const stateByRegistry = new WeakMap();
12
+ const stateFor = (registry) => {
13
+ let state = stateByRegistry.get(registry);
14
+ if (!state) {
15
+ state = {
16
+ wrappers: new Map(),
17
+ rawSources: new Map(),
18
+ canonicalByModule: new Map(),
19
+ globals: [],
20
+ brand: new WeakSet(),
21
+ sinks: new Set(),
22
+ };
23
+ stateByRegistry.set(registry, state);
24
+ }
25
+ return state;
26
+ };
27
+ /**
28
+ * `@emotion/css`-shaped API over a distillery.
29
+ *
30
+ * `String(css\`...\`)` is the readable class name and does not collect. Passing the wrapper through `resolveClassName` collects and compacts like a native handle.
31
+ *
32
+ * @param distillery Bound distillery that owns the underlying registry.
33
+ * @param options Optional sink for DOM injection.
34
+ */
35
+ export const createEmotion = (distillery, options = {}) => {
36
+ const { registry } = distillery;
37
+ const state = stateFor(registry);
38
+ const stylesheet = () => distillery.renderStyles(distillery.stylesheetCollector('readable'));
39
+ const invalidateSinks = () => {
40
+ for (const sink of state.sinks) {
41
+ sink.invalidate(stylesheet);
42
+ }
43
+ };
44
+ if (options.sink) {
45
+ state.sinks.add(options.sink);
46
+ // Catch a late-attached sink up to styles already registered on this
47
+ // registry: cached `css`/`injectGlobal` calls return early without
48
+ // invalidating, so without this the managed `<style>` would miss every
49
+ // style registered before the sink was attached.
50
+ options.sink.invalidate(stylesheet);
51
+ }
52
+ const inlineValue = (value, position) => {
53
+ if (position !== 'statement' || !isBranded(state, value)) {
54
+ return null;
55
+ }
56
+ return state.rawSources.get(value.key) ?? null;
57
+ };
58
+ const css = (strings, ...values) => {
59
+ assertTemplate(strings, 'css');
60
+ const hash = contentHash64(strings, values);
61
+ const cached = state.wrappers.get(hash);
62
+ if (cached) {
63
+ return cached;
64
+ }
65
+ const moduleName = `css-${hash}`;
66
+ const canonical = canonicalKey(strings, values);
67
+ detectCollision(state, moduleName, canonical);
68
+ const flat = flattenTemplate(strings, values, {
69
+ mode: 'self',
70
+ inlineValue,
71
+ });
72
+ const pending = pendingHandleFromFlattened(flat);
73
+ const module = distillery.createStyleModule(moduleName, () => ({
74
+ root: pending,
75
+ }));
76
+ const handle = module.handles.root;
77
+ state.rawSources.set(handle.key, {
78
+ strings: [...strings],
79
+ values: [...values],
80
+ });
81
+ const wrapper = makeWrapper(handle);
82
+ state.brand.add(wrapper);
83
+ state.wrappers.set(hash, wrapper);
84
+ state.canonicalByModule.set(moduleName, canonical);
85
+ invalidateSinks();
86
+ return wrapper;
87
+ };
88
+ const injectGlobal = (strings, ...values) => {
89
+ assertTemplate(strings, 'injectGlobal');
90
+ const hash = contentHash64(strings, values);
91
+ const moduleName = `global-${hash}`;
92
+ if (registry.module(moduleName)) {
93
+ return;
94
+ }
95
+ const canonical = canonicalKey(strings, values);
96
+ detectCollision(state, moduleName, canonical);
97
+ const flat = flattenTemplate(strings, values, {
98
+ mode: 'global',
99
+ inlineValue,
100
+ });
101
+ const module = distillery.createStyleModule(moduleName, () => globalStylesFromFlattened(flat));
102
+ state.canonicalByModule.set(moduleName, canonical);
103
+ state.globals.push(module);
104
+ invalidateSinks();
105
+ };
106
+ const cx = (...args) => {
107
+ const classes = [];
108
+ const walk = (arg) => {
109
+ if (!arg) {
110
+ return;
111
+ }
112
+ if (typeof arg === 'string') {
113
+ classes.push(arg);
114
+ return;
115
+ }
116
+ if (typeof arg === 'number') {
117
+ classes.push(String(arg));
118
+ return;
119
+ }
120
+ if (Array.isArray(arg)) {
121
+ arg.forEach(walk);
122
+ return;
123
+ }
124
+ if (isBranded(state, arg)) {
125
+ classes.push(String(arg));
126
+ return;
127
+ }
128
+ if (isHandleLike(arg)) {
129
+ classes.push(arg.readableName);
130
+ return;
131
+ }
132
+ for (const [className, enabled] of Object.entries(arg)) {
133
+ if (enabled) {
134
+ classes.push(className);
135
+ }
136
+ }
137
+ };
138
+ args.forEach(walk);
139
+ return classes.join(' ');
140
+ };
141
+ return {
142
+ css,
143
+ cx,
144
+ injectGlobal,
145
+ stylesheet,
146
+ globalModules: () => [...state.globals],
147
+ };
148
+ };
149
+ const makeWrapper = (handle) => {
150
+ const readable = handle.readableName;
151
+ const asString = () => readable;
152
+ // Spread copy keeps `resolveClassName` (closed over the original handle) and
153
+ // `key` intact so collector dedupe and compaction work unchanged.
154
+ const wrapper = { ...handle };
155
+ wrapper.toString = asString;
156
+ wrapper[Symbol.toPrimitive] = asString;
157
+ return wrapper;
158
+ };
159
+ const isBranded = (state, value) => Boolean(value && typeof value === 'object' && state.brand.has(value));
160
+ const assertTemplate = (strings, fn) => {
161
+ if (!Array.isArray(strings) || !('raw' in strings)) {
162
+ throw new Error(`${fn} is a template tag; object styles (${fn}({...})) are not supported.`);
163
+ }
164
+ };
165
+ const detectCollision = (state, moduleName, canonical) => {
166
+ const prior = state.canonicalByModule.get(moduleName);
167
+ if (prior !== undefined && prior !== canonical) {
168
+ throw new Error(`Content-hash collision for "${moduleName}"; two distinct templates hashed to the same name.`);
169
+ }
170
+ };
171
+ // A cheap, exact collision tripwire independent of the (lossy) hash. NUL-joins
172
+ // strings and String()s values — good enough because it is only ever compared
173
+ // against another canonical string for the same module name.
174
+ const canonicalKey = (strings, values) => {
175
+ const segments = [];
176
+ strings.forEach((part, index) => {
177
+ segments.push(part);
178
+ if (index < values.length) {
179
+ segments.push(String(values[index]));
180
+ }
181
+ });
182
+ return segments.join('\u0000');
183
+ };
184
+ //# sourceMappingURL=emotion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emotion.js","sourceRoot":"","sources":["../src/emotion.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 { Distillery } from './engine';\nimport { contentHash64 } from './hash';\nimport { flattenTemplate, isHandleLike, type TemplateSlice } from './nesting';\nimport {\n globalStylesFromFlattened,\n pendingHandleFromFlattened,\n type StyleHandle,\n type StyleRegistry,\n type StylesModule,\n} from './styles';\n\nexport {\n createDomSink,\n type CreateDomSinkOptions,\n type DocumentLike,\n type StyleElementLike,\n} from './dom_sink';\n\n/** Receives stylesheet invalidation from Emotion compat modules. */\nexport interface StyleSink {\n /** Marks the sink dirty. `render` produces the current stylesheet when it flushes. */\n invalidate(render: () => string): void;\n}\n\n/** Shared sink for Emotion compat modules on one registry. */\nexport interface CreateEmotionOptions {\n /** Notified when a compat module registers. Shared across `createEmotion` calls on the same registry. */\n sink?: StyleSink;\n}\n\n/** Style handle that stringifies to its readable class name. */\nexport interface EmotionCss extends StyleHandle {\n /** Stringifies to the readable class name. */\n toString(): string;\n /** Template interpolation; same as {@link EmotionCss.toString}. */\n [Symbol.toPrimitive](hint: string): string;\n}\n\n/** One `cx(...)` argument: a class, handle, list, or truthy map. */\nexport type ClassNameArg =\n | string\n | number\n | false\n | null\n | undefined\n | EmotionCss\n | StyleHandle\n | ClassNameArg[]\n | { readonly [className: string]: boolean };\n\n/** Emotion-shaped authoring API bound to one Distillery registry. */\nexport interface Emotion {\n /** Authors styles and returns a handle that can be used directly or passed to `cx`. */\n css(strings: TemplateStringsArray, ...values: readonly unknown[]): EmotionCss;\n /** Combines handles, conditional classes, and plain strings into a space-separated string. */\n cx(...args: readonly ClassNameArg[]): string;\n /** Defines styles that apply globally (e.g. `body`, `html`). */\n injectGlobal(\n strings: TemplateStringsArray,\n ...values: readonly unknown[]\n ): void;\n /** Emits the full CSS for all generated emotion styles. */\n stylesheet(): string;\n /** Returns the underlying modules backing `injectGlobal` calls. */\n globalModules(): readonly StylesModule[];\n}\n\n/** Per-registry Emotion compat cache. */\ninterface EmotionState {\n /** `css` handles keyed by source hash. */\n readonly wrappers: Map<string, EmotionCss>;\n /** Original templates for inlining nested compat handles. */\n readonly rawSources: Map<string, TemplateSlice>;\n /** Module name → canonical source hash. */\n readonly canonicalByModule: Map<string, string>;\n /** Modules produced by `injectGlobal`. */\n readonly globals: StylesModule[];\n /** Handles created by this registry's Emotion instance. */\n readonly brand: WeakSet<object>;\n /** Sinks notified when a compat module registers. */\n readonly sinks: Set<StyleSink>;\n}\n\nconst stateByRegistry = new WeakMap<StyleRegistry, EmotionState>();\n\nconst stateFor = (registry: StyleRegistry): EmotionState => {\n let state = stateByRegistry.get(registry);\n if (!state) {\n state = {\n wrappers: new Map(),\n rawSources: new Map(),\n canonicalByModule: new Map(),\n globals: [],\n brand: new WeakSet(),\n sinks: new Set(),\n };\n stateByRegistry.set(registry, state);\n }\n return state;\n};\n\n/**\n * `@emotion/css`-shaped API over a distillery.\n *\n * `String(css\\`...\\`)` is the readable class name and does not collect. Passing the wrapper through `resolveClassName` collects and compacts like a native handle.\n *\n * @param distillery Bound distillery that owns the underlying registry.\n * @param options Optional sink for DOM injection.\n */\nexport const createEmotion = <TTokens>(\n distillery: Distillery<TTokens>,\n options: CreateEmotionOptions = {}\n): Emotion => {\n const { registry } = distillery;\n const state = stateFor(registry);\n\n const stylesheet = (): string =>\n distillery.renderStyles(distillery.stylesheetCollector('readable'));\n\n const invalidateSinks = (): void => {\n for (const sink of state.sinks) {\n sink.invalidate(stylesheet);\n }\n };\n\n if (options.sink) {\n state.sinks.add(options.sink);\n // Catch a late-attached sink up to styles already registered on this\n // registry: cached `css`/`injectGlobal` calls return early without\n // invalidating, so without this the managed `<style>` would miss every\n // style registered before the sink was attached.\n options.sink.invalidate(stylesheet);\n }\n\n const inlineValue = (\n value: unknown,\n position: 'selector' | 'statement'\n ): TemplateSlice | null => {\n if (position !== 'statement' || !isBranded(state, value)) {\n return null;\n }\n return state.rawSources.get((value as StyleHandle).key) ?? null;\n };\n\n const css = (\n strings: TemplateStringsArray,\n ...values: readonly unknown[]\n ): EmotionCss => {\n assertTemplate(strings, 'css');\n const hash = contentHash64(strings, values);\n const cached = state.wrappers.get(hash);\n if (cached) {\n return cached;\n }\n const moduleName = `css-${hash}`;\n const canonical = canonicalKey(strings, values);\n detectCollision(state, moduleName, canonical);\n\n const flat = flattenTemplate(strings, values, {\n mode: 'self',\n inlineValue,\n });\n const pending = pendingHandleFromFlattened(flat);\n const module = distillery.createStyleModule(moduleName, () => ({\n root: pending,\n }));\n const handle = module.handles.root;\n\n state.rawSources.set(handle.key, {\n strings: [...strings],\n values: [...values],\n });\n const wrapper = makeWrapper(handle);\n state.brand.add(wrapper);\n state.wrappers.set(hash, wrapper);\n state.canonicalByModule.set(moduleName, canonical);\n invalidateSinks();\n return wrapper;\n };\n\n const injectGlobal = (\n strings: TemplateStringsArray,\n ...values: readonly unknown[]\n ): void => {\n assertTemplate(strings, 'injectGlobal');\n const hash = contentHash64(strings, values);\n const moduleName = `global-${hash}`;\n if (registry.module(moduleName)) {\n return;\n }\n const canonical = canonicalKey(strings, values);\n detectCollision(state, moduleName, canonical);\n\n const flat = flattenTemplate(strings, values, {\n mode: 'global',\n inlineValue,\n });\n const module = distillery.createStyleModule(moduleName, () =>\n globalStylesFromFlattened(flat)\n );\n state.canonicalByModule.set(moduleName, canonical);\n state.globals.push(module);\n invalidateSinks();\n };\n\n const cx = (...args: readonly ClassNameArg[]): string => {\n const classes: string[] = [];\n const walk = (arg: ClassNameArg): void => {\n if (!arg) {\n return;\n }\n if (typeof arg === 'string') {\n classes.push(arg);\n return;\n }\n if (typeof arg === 'number') {\n classes.push(String(arg));\n return;\n }\n if (Array.isArray(arg)) {\n arg.forEach(walk);\n return;\n }\n if (isBranded(state, arg)) {\n classes.push(String(arg));\n return;\n }\n if (isHandleLike(arg)) {\n classes.push(arg.readableName);\n return;\n }\n for (const [className, enabled] of Object.entries(arg)) {\n if (enabled) {\n classes.push(className);\n }\n }\n };\n args.forEach(walk);\n return classes.join(' ');\n };\n\n return {\n css,\n cx,\n injectGlobal,\n stylesheet,\n globalModules: () => [...state.globals],\n };\n};\n\nconst makeWrapper = (handle: StyleHandle): EmotionCss => {\n const readable = handle.readableName;\n const asString = (): string => readable;\n // Spread copy keeps `resolveClassName` (closed over the original handle) and\n // `key` intact so collector dedupe and compaction work unchanged.\n const wrapper = { ...handle } as EmotionCss & {\n toString: () => string;\n [Symbol.toPrimitive]: () => string;\n };\n wrapper.toString = asString;\n wrapper[Symbol.toPrimitive] = asString;\n return wrapper;\n};\n\nconst isBranded = (state: EmotionState, value: unknown): value is EmotionCss =>\n Boolean(value && typeof value === 'object' && state.brand.has(value));\n\nconst assertTemplate = (strings: unknown, fn: string): void => {\n if (!Array.isArray(strings) || !('raw' in (strings as object))) {\n throw new Error(\n `${fn} is a template tag; object styles (${fn}({...})) are not supported.`\n );\n }\n};\n\nconst detectCollision = (\n state: EmotionState,\n moduleName: string,\n canonical: string\n): void => {\n const prior = state.canonicalByModule.get(moduleName);\n if (prior !== undefined && prior !== canonical) {\n throw new Error(\n `Content-hash collision for \"${moduleName}\"; two distinct templates hashed to the same name.`\n );\n }\n};\n\n// A cheap, exact collision tripwire independent of the (lossy) hash. NUL-joins\n// strings and String()s values — good enough because it is only ever compared\n// against another canonical string for the same module name.\nconst canonicalKey = (\n strings: readonly string[],\n values: readonly unknown[]\n): string => {\n const segments: string[] = [];\n strings.forEach((part, index) => {\n segments.push(part);\n if (index < values.length) {\n segments.push(String(values[index]));\n }\n });\n return segments.join('\\u0000');\n};\n"]}
@@ -0,0 +1,41 @@
1
+ import { StylesCollector, type StylesCollectorOptions } from './collector.js';
2
+ import type { DistilleryEnvironment, DistilleryOptions, ThemeVarDefinition } from './environment.js';
3
+ import { type StyleNameMode, type StyleNameResolver, type StyleNameResolverOptions } from './names.js';
4
+ import { type RenderStylesOptions } from './runtime.js';
5
+ import { type PrimitiveStyleAuthoringApi, type ResolvedStyles, type StyleAuthoringApi, StyleRegistry, type StylesModule, type StylesObject } from './styles/index.js';
6
+ import { type ThemeTree, type TokensOf, type ValuesOf } from './theme.js';
7
+ /** One component library's binding: environment, registry, and pre-bound operations. Destructure-safe (no `this`). */
8
+ export interface Distillery<TTokens = unknown, TTheme extends ThemeTree = ThemeTree> {
9
+ /** Resolved environment (tokens, prefix, derived theme vars). */
10
+ readonly environment: DistilleryEnvironment<TTokens>;
11
+ /** Derived token tree, same object as `environment.tokens`. */
12
+ readonly tokens: TTokens;
13
+ /** Derived theme-var registry, same object as `environment.themeVars`. */
14
+ readonly themeVars: Readonly<Record<string, ThemeVarDefinition>>;
15
+ /** Nested literal values for one scheme. Optional `variation` is a name from `variations`. */
16
+ readonly resolveValues: (scheme: 'light' | 'dark', variation?: string) => ValuesOf<TTheme>;
17
+ /** The module registry accumulating collected handles and rules. */
18
+ readonly registry: StyleRegistry;
19
+ /** When `true`, collectors warn about no-op handles. */
20
+ readonly dev: boolean;
21
+ /** Named handle tree plus tokens. */
22
+ readonly createStyleModule: <TStyles extends StylesObject>(name: string, factory: (api: StyleAuthoringApi<TTokens>) => TStyles) => StylesModule<ResolvedStyles<TStyles>>;
23
+ /** Named handles plus tokens only. */
24
+ readonly primitiveStyles: <TStyles extends StylesObject>(name: string, factory: (api: PrimitiveStyleAuthoringApi<TTokens>) => TStyles) => StylesModule<ResolvedStyles<TStyles>>;
25
+ /** Collector for one render. Class-name resolution collects as a side effect. No-op warnings require `dev: true`; pass `{ warn }` to capture them. */
26
+ readonly artifactCollector: (names: StyleNameMode, options?: Pick<StylesCollectorOptions, 'warn'>) => StylesCollector;
27
+ /** Collector preloaded with every registered module. No-op warnings require `dev: true`; pass `{ warn }` to capture them. */
28
+ readonly stylesheetCollector: (names?: StyleNameMode, options?: Pick<StylesCollectorOptions, 'warn'>) => StylesCollector;
29
+ /** Emits collected CSS for this environment. */
30
+ readonly renderStyles: (collector: StylesCollector, resolver?: StyleNameResolver, options?: RenderStylesOptions) => string;
31
+ /** Creates a standalone name resolver using this distillery's prefix. */
32
+ readonly createNameResolver: (options: Omit<StyleNameResolverOptions, 'prefix'>) => StyleNameResolver;
33
+ }
34
+ /**
35
+ * Binds the engine to one library's prefix and theme tree.
36
+ *
37
+ * @param options Brand prefix, theme scope, and authoring theme tree.
38
+ * @throws If `prefix` is not a CSS identifier segment, if a theme key contains a hyphen, if a `lightDark` value is not a CSS `<color>`, if a named variation disagrees with the base, or if `themeVars` / `sharedVars` claim the same readable custom-property name.
39
+ */
40
+ export declare const createDistillery: <const TTheme extends ThemeTree>(options: DistilleryOptions<TTheme>) => Distillery<TokensOf<TTheme>, TTheme>;
41
+ //# sourceMappingURL=engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"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"}
package/dist/engine.js ADDED
@@ -0,0 +1,75 @@
1
+ /*
2
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
3
+ * or more contributor license agreements. Licensed under the Elastic License
4
+ * 2.0; you may not use this file except in compliance with the Elastic License
5
+ * 2.0.
6
+ */
7
+ import { StylesCollector } from './collector.js';
8
+ import { assertCssIdentSegment } from './idents.js';
9
+ import { createStyleNameResolver, } from './names.js';
10
+ import { renderStyles } from './runtime.js';
11
+ import { createStyleModuleWithEnvironment, readableVarOwnersFromEnvironment, StyleRegistry, } from './styles/index.js';
12
+ import { deriveTheme, requireThemeVariation, resolveThemeValues, resolveThemeVariations, } from './theme.js';
13
+ /**
14
+ * Binds the engine to one library's prefix and theme tree.
15
+ *
16
+ * @param options Brand prefix, theme scope, and authoring theme tree.
17
+ * @throws If `prefix` is not a CSS identifier segment, if a theme key contains a hyphen, if a `lightDark` value is not a CSS `<color>`, if a named variation disagrees with the base, or if `themeVars` / `sharedVars` claim the same readable custom-property name.
18
+ */
19
+ export const createDistillery = (options) => {
20
+ const { prefix, themeScope, theme, sharedVars: sharedVarList, variations, dev = false, } = options;
21
+ assertCssIdentSegment(prefix, 'Distillery prefix');
22
+ const { tokens, themeVars } = deriveTheme(prefix, theme);
23
+ const sharedVars = sharedVarList
24
+ ? Object.freeze(new Set(sharedVarList))
25
+ : undefined;
26
+ const resolvedVariations = resolveThemeVariations(prefix, theme, themeVars, variations);
27
+ const environment = {
28
+ prefix,
29
+ themeScope,
30
+ themeVars: Object.freeze(themeVars),
31
+ tokens,
32
+ ...(sharedVars ? { sharedVars } : {}),
33
+ ...(Object.keys(resolvedVariations).length > 0
34
+ ? { variations: resolvedVariations }
35
+ : {}),
36
+ };
37
+ const registry = new StyleRegistry(prefix, readableVarOwnersFromEnvironment(environment), sharedVars ?? new Set());
38
+ return {
39
+ environment,
40
+ tokens,
41
+ themeVars: environment.themeVars,
42
+ resolveValues: (scheme, variation) => resolveThemeValues(theme, themeVars, scheme, variation === undefined
43
+ ? undefined
44
+ : requireThemeVariation(environment.variations, variation)),
45
+ registry,
46
+ dev,
47
+ createStyleModule: (name, factory) => createStyleModuleWithEnvironment(environment, registry, name, factory),
48
+ primitiveStyles: (name, factory) => createStyleModuleWithEnvironment(environment, registry, name, ({ css: style, tokens: moduleTokens }) => factory({ style, tokens: moduleTokens })),
49
+ artifactCollector: (names, options) => new StylesCollector({
50
+ target: 'artifact',
51
+ names,
52
+ registry,
53
+ prefix,
54
+ dev,
55
+ ...(options?.warn ? { warn: options.warn } : {}),
56
+ }),
57
+ stylesheetCollector: (names = 'readable', options) => {
58
+ const collector = new StylesCollector({
59
+ target: 'stylesheet',
60
+ names,
61
+ registry,
62
+ prefix,
63
+ dev,
64
+ ...(options?.warn ? { warn: options.warn } : {}),
65
+ });
66
+ for (const module of registry.modules) {
67
+ collector.useAllEntries(module);
68
+ }
69
+ return collector;
70
+ },
71
+ renderStyles: (collector, resolver, renderOptions) => renderStyles(environment, collector, resolver, renderOptions),
72
+ createNameResolver: (resolverOptions) => createStyleNameResolver({ ...resolverOptions, prefix }),
73
+ };
74
+ };
75
+ //# sourceMappingURL=engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,eAAe,EAA+B,MAAM,aAAa,CAAC;AAM3E,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AACjD,OAAO,EACL,uBAAuB,GAIxB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,YAAY,EAA4B,MAAM,WAAW,CAAC;AACnE,OAAO,EACL,gCAAgC,EAEhC,gCAAgC,EAGhC,aAAa,GAGd,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,WAAW,EACX,qBAAqB,EACrB,kBAAkB,EAClB,sBAAsB,GAIvB,MAAM,SAAS,CAAC;AAsDjB;;;;;GAKG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC9B,OAAkC,EACI,EAAE;IACxC,MAAM,EACJ,MAAM,EACN,UAAU,EACV,KAAK,EACL,UAAU,EAAE,aAAa,EACzB,UAAU,EACV,GAAG,GAAG,KAAK,GACZ,GAAG,OAAO,CAAC;IACZ,qBAAqB,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;IACnD,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACzD,MAAM,UAAU,GAAG,aAAa;QAC9B,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,aAAa,CAAC,CAAC;QACvC,CAAC,CAAC,SAAS,CAAC;IACd,MAAM,kBAAkB,GAAG,sBAAsB,CAC/C,MAAM,EACN,KAAK,EACL,SAAS,EACT,UAAU,CACX,CAAC;IACF,MAAM,WAAW,GAA4C;QAC3D,MAAM;QACN,UAAU;QACV,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC;QACnC,MAAM;QACN,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,MAAM,GAAG,CAAC;YAC5C,CAAC,CAAC,EAAE,UAAU,EAAE,kBAAkB,EAAE;YACpC,CAAC,CAAC,EAAE,CAAC;KACR,CAAC;IACF,MAAM,QAAQ,GAAG,IAAI,aAAa,CAChC,MAAM,EACN,gCAAgC,CAAC,WAAW,CAAC,EAC7C,UAAU,IAAI,IAAI,GAAG,EAAE,CACxB,CAAC;IAEF,OAAO;QACL,WAAW;QACX,MAAM;QACN,SAAS,EAAE,WAAW,CAAC,SAAS;QAChC,aAAa,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,CACnC,kBAAkB,CAChB,KAAK,EACL,SAAS,EACT,MAAM,EACN,SAAS,KAAK,SAAS;YACrB,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,qBAAqB,CAAC,WAAW,CAAC,UAAU,EAAE,SAAS,CAAC,CAC7D;QACH,QAAQ;QACR,GAAG;QACH,iBAAiB,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,CACnC,gCAAgC,CAAC,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC;QACxE,eAAe,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,CACjC,gCAAgC,CAC9B,WAAW,EACX,QAAQ,EACR,IAAI,EACJ,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,EAAE,EAAE,CACvC,OAAO,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAC3C;QACH,iBAAiB,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,CACpC,IAAI,eAAe,CAAC;YAClB,MAAM,EAAE,UAAU;YAClB,KAAK;YACL,QAAQ;YACR,MAAM;YACN,GAAG;YACH,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACjD,CAAC;QACJ,mBAAmB,EAAE,CAAC,KAAK,GAAG,UAAU,EAAE,OAAO,EAAE,EAAE;YACnD,MAAM,SAAS,GAAG,IAAI,eAAe,CAAC;gBACpC,MAAM,EAAE,YAAY;gBACpB,KAAK;gBACL,QAAQ;gBACR,MAAM;gBACN,GAAG;gBACH,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACjD,CAAC,CAAC;YACH,KAAK,MAAM,MAAM,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;gBACtC,SAAS,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YAClC,CAAC;YACD,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,YAAY,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,aAAa,EAAE,EAAE,CACnD,YAAY,CAAC,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,CAAC;QAC/D,kBAAkB,EAAE,CAAC,eAAe,EAAE,EAAE,CACtC,uBAAuB,CAAC,EAAE,GAAG,eAAe,EAAE,MAAM,EAAE,CAAC;KAC1D,CAAC;AACJ,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 { StylesCollector, type StylesCollectorOptions } from './collector';\nimport type {\n DistilleryEnvironment,\n DistilleryOptions,\n ThemeVarDefinition,\n} from './environment';\nimport { assertCssIdentSegment } from './idents';\nimport {\n createStyleNameResolver,\n type StyleNameMode,\n type StyleNameResolver,\n type StyleNameResolverOptions,\n} from './names';\nimport { renderStyles, type RenderStylesOptions } from './runtime';\nimport {\n createStyleModuleWithEnvironment,\n type PrimitiveStyleAuthoringApi,\n readableVarOwnersFromEnvironment,\n type ResolvedStyles,\n type StyleAuthoringApi,\n StyleRegistry,\n type StylesModule,\n type StylesObject,\n} from './styles';\nimport {\n deriveTheme,\n requireThemeVariation,\n resolveThemeValues,\n resolveThemeVariations,\n type ThemeTree,\n type TokensOf,\n type ValuesOf,\n} from './theme';\n\n/** One component library's binding: environment, registry, and pre-bound operations. Destructure-safe (no `this`). */\nexport interface Distillery<\n TTokens = unknown,\n TTheme extends ThemeTree = ThemeTree,\n> {\n /** Resolved environment (tokens, prefix, derived theme vars). */\n readonly environment: DistilleryEnvironment<TTokens>;\n /** Derived token tree, same object as `environment.tokens`. */\n readonly tokens: TTokens;\n /** Derived theme-var registry, same object as `environment.themeVars`. */\n readonly themeVars: Readonly<Record<string, ThemeVarDefinition>>;\n /** Nested literal values for one scheme. Optional `variation` is a name from `variations`. */\n readonly resolveValues: (\n scheme: 'light' | 'dark',\n variation?: string\n ) => ValuesOf<TTheme>;\n /** The module registry accumulating collected handles and rules. */\n readonly registry: StyleRegistry;\n /** When `true`, collectors warn about no-op handles. */\n readonly dev: boolean;\n /** Named handle tree plus tokens. */\n readonly createStyleModule: <TStyles extends StylesObject>(\n name: string,\n factory: (api: StyleAuthoringApi<TTokens>) => TStyles\n ) => StylesModule<ResolvedStyles<TStyles>>;\n /** Named handles plus tokens only. */\n readonly primitiveStyles: <TStyles extends StylesObject>(\n name: string,\n factory: (api: PrimitiveStyleAuthoringApi<TTokens>) => TStyles\n ) => StylesModule<ResolvedStyles<TStyles>>;\n /** Collector for one render. Class-name resolution collects as a side effect. No-op warnings require `dev: true`; pass `{ warn }` to capture them. */\n readonly artifactCollector: (\n names: StyleNameMode,\n options?: Pick<StylesCollectorOptions, 'warn'>\n ) => StylesCollector;\n /** Collector preloaded with every registered module. No-op warnings require `dev: true`; pass `{ warn }` to capture them. */\n readonly stylesheetCollector: (\n names?: StyleNameMode,\n options?: Pick<StylesCollectorOptions, 'warn'>\n ) => StylesCollector;\n /** Emits collected CSS for this environment. */\n readonly renderStyles: (\n collector: StylesCollector,\n resolver?: StyleNameResolver,\n options?: RenderStylesOptions\n ) => string;\n /** Creates a standalone name resolver using this distillery's prefix. */\n readonly createNameResolver: (\n options: Omit<StyleNameResolverOptions, 'prefix'>\n ) => StyleNameResolver;\n}\n\n/**\n * Binds the engine to one library's prefix and theme tree.\n *\n * @param options Brand prefix, theme scope, and authoring theme tree.\n * @throws If `prefix` is not a CSS identifier segment, if a theme key contains a hyphen, if a `lightDark` value is not a CSS `<color>`, if a named variation disagrees with the base, or if `themeVars` / `sharedVars` claim the same readable custom-property name.\n */\nexport const createDistillery = <const TTheme extends ThemeTree>(\n options: DistilleryOptions<TTheme>\n): Distillery<TokensOf<TTheme>, TTheme> => {\n const {\n prefix,\n themeScope,\n theme,\n sharedVars: sharedVarList,\n variations,\n dev = false,\n } = options;\n assertCssIdentSegment(prefix, 'Distillery prefix');\n const { tokens, themeVars } = deriveTheme(prefix, theme);\n const sharedVars = sharedVarList\n ? Object.freeze(new Set(sharedVarList))\n : undefined;\n const resolvedVariations = resolveThemeVariations(\n prefix,\n theme,\n themeVars,\n variations\n );\n const environment: DistilleryEnvironment<TokensOf<TTheme>> = {\n prefix,\n themeScope,\n themeVars: Object.freeze(themeVars),\n tokens,\n ...(sharedVars ? { sharedVars } : {}),\n ...(Object.keys(resolvedVariations).length > 0\n ? { variations: resolvedVariations }\n : {}),\n };\n const registry = new StyleRegistry(\n prefix,\n readableVarOwnersFromEnvironment(environment),\n sharedVars ?? new Set()\n );\n\n return {\n environment,\n tokens,\n themeVars: environment.themeVars,\n resolveValues: (scheme, variation) =>\n resolveThemeValues(\n theme,\n themeVars,\n scheme,\n variation === undefined\n ? undefined\n : requireThemeVariation(environment.variations, variation)\n ),\n registry,\n dev,\n createStyleModule: (name, factory) =>\n createStyleModuleWithEnvironment(environment, registry, name, factory),\n primitiveStyles: (name, factory) =>\n createStyleModuleWithEnvironment(\n environment,\n registry,\n name,\n ({ css: style, tokens: moduleTokens }) =>\n factory({ style, tokens: moduleTokens })\n ),\n artifactCollector: (names, options) =>\n new StylesCollector({\n target: 'artifact',\n names,\n registry,\n prefix,\n dev,\n ...(options?.warn ? { warn: options.warn } : {}),\n }),\n stylesheetCollector: (names = 'readable', options) => {\n const collector = new StylesCollector({\n target: 'stylesheet',\n names,\n registry,\n prefix,\n dev,\n ...(options?.warn ? { warn: options.warn } : {}),\n });\n for (const module of registry.modules) {\n collector.useAllEntries(module);\n }\n return collector;\n },\n renderStyles: (collector, resolver, renderOptions) =>\n renderStyles(environment, collector, resolver, renderOptions),\n createNameResolver: (resolverOptions) =>\n createStyleNameResolver({ ...resolverOptions, prefix }),\n };\n};\n"]}
@@ -0,0 +1,43 @@
1
+ import type { ResolvedThemeVariation, ThemeTree, ThemeVariation } from './theme.js';
2
+ /** One theme CSS variable. Differing `light`/`dark` fold into `light-dark(...)`. */
3
+ export interface ThemeVarDefinition {
4
+ /** Theme-tree path this definition was derived from. */
5
+ readonly path: string;
6
+ /** Emitted CSS custom property name. Equal to `cssVarName(prefix, path)`. */
7
+ readonly cssVar: `--${string}`;
8
+ /** Value for light color scheme. */
9
+ readonly light: string;
10
+ /** Value for dark color scheme. Equal to `light` for scheme-invariant tokens. */
11
+ readonly dark: string;
12
+ }
13
+ /** Authoring input to `createDistillery`. */
14
+ export interface DistilleryOptions<TTheme extends ThemeTree = ThemeTree> {
15
+ /** Brand identifier used in readable class and CSS-variable names. Must be a CSS identifier segment. */
16
+ readonly prefix: string;
17
+ /** Selector wrapping emitted theme-var declarations. */
18
+ readonly themeScope: string;
19
+ /** Nested value tree. Strings and `lightDark` leaves become theme vars; `ScaleToken` leaves inline. */
20
+ readonly theme: TTheme;
21
+ /** Named partial variations of `theme`. Declaring a variation does not emit it; name it at `renderStyles`. */
22
+ readonly variations?: Readonly<Record<string, ThemeVariation<TTheme>>>;
23
+ /** Cross-module contextual-var paths. Names are `cssVarName(prefix, path)`. Module-local `vars(...)` groups are not listed here. */
24
+ readonly sharedVars?: readonly `vars/${string}`[];
25
+ /** When `true`, collectors warn about no-op handles. Default `false`. Does not affect the single-copy guard. */
26
+ readonly dev?: boolean;
27
+ }
28
+ /** Resolved environment: derived `themeVars` / `tokens` plus the bind-time prefix and scope. */
29
+ export interface DistilleryEnvironment<TTokens = unknown> {
30
+ /** Brand identifier used in readable class and CSS-variable names. Must be a CSS identifier segment. */
31
+ readonly prefix: string;
32
+ /** Selector wrapping emitted theme-var declarations. */
33
+ readonly themeScope: string;
34
+ /** Theme token path → definition. Emission sorts paths. */
35
+ readonly themeVars: Readonly<Record<string, ThemeVarDefinition>>;
36
+ /** Cross-module contextual-var paths. Module-local `vars(...)` groups are not listed here. */
37
+ readonly sharedVars?: ReadonlySet<`vars/${string}`>;
38
+ /** Typed token tree, surfaced as `tokens` on the authoring API. */
39
+ readonly tokens: TTokens;
40
+ /** Named variations resolved against `themeVars`. Absent when no `variations` were declared. */
41
+ readonly variations?: Readonly<Record<string, ResolvedThemeVariation>>;
42
+ }
43
+ //# sourceMappingURL=environment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"environment.d.ts","sourceRoot":"","sources":["../src/environment.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,sBAAsB,EACtB,SAAS,EACT,cAAc,EACf,MAAM,SAAS,CAAC;AAEjB,oFAAoF;AACpF,MAAM,WAAW,kBAAkB;IACjC,wDAAwD;IACxD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,6EAA6E;IAC7E,QAAQ,CAAC,MAAM,EAAE,KAAK,MAAM,EAAE,CAAC;IAC/B,oCAAoC;IACpC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,iFAAiF;IACjF,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,6CAA6C;AAC7C,MAAM,WAAW,iBAAiB,CAAC,MAAM,SAAS,SAAS,GAAG,SAAS;IACrE,wGAAwG;IACxG,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,wDAAwD;IACxD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,uGAAuG;IACvG,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,8GAA8G;IAC9G,QAAQ,CAAC,UAAU,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACvE,oIAAoI;IACpI,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,QAAQ,MAAM,EAAE,EAAE,CAAC;IAClD,gHAAgH;IAChH,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,gGAAgG;AAChG,MAAM,WAAW,qBAAqB,CAAC,OAAO,GAAG,OAAO;IACtD,wGAAwG;IACxG,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,wDAAwD;IACxD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,2DAA2D;IAC3D,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC,CAAC;IACjE,8FAA8F;IAC9F,QAAQ,CAAC,UAAU,CAAC,EAAE,WAAW,CAAC,QAAQ,MAAM,EAAE,CAAC,CAAC;IACpD,mEAAmE;IACnE,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,gGAAgG;IAChG,QAAQ,CAAC,UAAU,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC,CAAC;CACxE"}
@@ -0,0 +1,8 @@
1
+ /*
2
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
3
+ * or more contributor license agreements. Licensed under the Elastic License
4
+ * 2.0; you may not use this file except in compliance with the Elastic License
5
+ * 2.0.
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=environment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"environment.js","sourceRoot":"","sources":["../src/environment.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 ResolvedThemeVariation,\n ThemeTree,\n ThemeVariation,\n} from './theme';\n\n/** One theme CSS variable. Differing `light`/`dark` fold into `light-dark(...)`. */\nexport interface ThemeVarDefinition {\n /** Theme-tree path this definition was derived from. */\n readonly path: string;\n /** Emitted CSS custom property name. Equal to `cssVarName(prefix, path)`. */\n readonly cssVar: `--${string}`;\n /** Value for light color scheme. */\n readonly light: string;\n /** Value for dark color scheme. Equal to `light` for scheme-invariant tokens. */\n readonly dark: string;\n}\n\n/** Authoring input to `createDistillery`. */\nexport interface DistilleryOptions<TTheme extends ThemeTree = ThemeTree> {\n /** Brand identifier used in readable class and CSS-variable names. Must be a CSS identifier segment. */\n readonly prefix: string;\n /** Selector wrapping emitted theme-var declarations. */\n readonly themeScope: string;\n /** Nested value tree. Strings and `lightDark` leaves become theme vars; `ScaleToken` leaves inline. */\n readonly theme: TTheme;\n /** Named partial variations of `theme`. Declaring a variation does not emit it; name it at `renderStyles`. */\n readonly variations?: Readonly<Record<string, ThemeVariation<TTheme>>>;\n /** Cross-module contextual-var paths. Names are `cssVarName(prefix, path)`. Module-local `vars(...)` groups are not listed here. */\n readonly sharedVars?: readonly `vars/${string}`[];\n /** When `true`, collectors warn about no-op handles. Default `false`. Does not affect the single-copy guard. */\n readonly dev?: boolean;\n}\n\n/** Resolved environment: derived `themeVars` / `tokens` plus the bind-time prefix and scope. */\nexport interface DistilleryEnvironment<TTokens = unknown> {\n /** Brand identifier used in readable class and CSS-variable names. Must be a CSS identifier segment. */\n readonly prefix: string;\n /** Selector wrapping emitted theme-var declarations. */\n readonly themeScope: string;\n /** Theme token path → definition. Emission sorts paths. */\n readonly themeVars: Readonly<Record<string, ThemeVarDefinition>>;\n /** Cross-module contextual-var paths. Module-local `vars(...)` groups are not listed here. */\n readonly sharedVars?: ReadonlySet<`vars/${string}`>;\n /** Typed token tree, surfaced as `tokens` on the authoring API. */\n readonly tokens: TTokens;\n /** Named variations resolved against `themeVars`. Absent when no `variations` were declared. */\n readonly variations?: Readonly<Record<string, ResolvedThemeVariation>>;\n}\n"]}
package/dist/hash.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ export declare const contentHash64: (strings: readonly string[], values: readonly unknown[]) => string;
2
+ //# sourceMappingURL=hash.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hash.d.ts","sourceRoot":"","sources":["../src/hash.ts"],"names":[],"mappings":"AAyCA,eAAO,MAAM,aAAa,GACxB,SAAS,SAAS,MAAM,EAAE,EAC1B,QAAQ,SAAS,OAAO,EAAE,KACzB,MAMF,CAAC"}
package/dist/hash.js ADDED
@@ -0,0 +1,82 @@
1
+ /*
2
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
3
+ * or more contributor license agreements. Licensed under the Elastic License
4
+ * 2.0; you may not use this file except in compliance with the Elastic License
5
+ * 2.0.
6
+ */
7
+ import { isLocalVarMarker } from './local_vars.js';
8
+ import { isLocalVarRef } from './local_vars.js';
9
+ import { isHandleLike } from './nesting.js';
10
+ import { isContextualCssVar, isContextualCssVarName, isCssToken, isScaleToken, } from './tokens/index.js';
11
+ const FNV_PRIME = 0x01000193;
12
+ const FNV_OFFSET_A = 0x811c9dc5;
13
+ // A second basis derived from the golden-ratio constant so the two passes
14
+ // disagree, widening the effective hash to 64 bits.
15
+ const FNV_OFFSET_B = (0x811c9dc5 ^ 0x9e3779b9) >>> 0;
16
+ const fnv1a = (input, offset) => {
17
+ let hash = offset;
18
+ for (let i = 0; i < input.length; i += 1) {
19
+ hash ^= input.charCodeAt(i);
20
+ hash = Math.imul(hash, FNV_PRIME);
21
+ }
22
+ return hash >>> 0;
23
+ };
24
+ const base36 = (value) => value.toString(36).padStart(7, '0');
25
+ export const contentHash64 = (strings, values) => {
26
+ const canonical = canonicalize(strings, values);
27
+ return (base36(fnv1a(canonical, FNV_OFFSET_A)) +
28
+ base36(fnv1a(canonical, FNV_OFFSET_B)));
29
+ };
30
+ // Canonical, injective-enough serialization. Template strings and tagged
31
+ // values are interleaved and joined with a NUL sentinel that cannot appear in
32
+ // authored CSS, so distinct templates cannot collide by concatenation.
33
+ const canonicalize = (strings, values) => {
34
+ const segments = [];
35
+ strings.forEach((part, index) => {
36
+ segments.push(part);
37
+ if (index < values.length) {
38
+ segments.push(tagValue(values[index]));
39
+ }
40
+ });
41
+ return segments.join('\u0000');
42
+ };
43
+ const tagValue = (value) => {
44
+ if (typeof value === 'string' || typeof value === 'number') {
45
+ return `r:${value}`;
46
+ }
47
+ if (isCssToken(value)) {
48
+ return `t:${value.path}`;
49
+ }
50
+ if (isContextualCssVar(value)) {
51
+ return `v:${value.path}`;
52
+ }
53
+ if (isContextualCssVarName(value)) {
54
+ return `n:${value.path}`;
55
+ }
56
+ if (isLocalVarRef(value)) {
57
+ return `l:${value.path}`;
58
+ }
59
+ if (isScaleToken(value)) {
60
+ return `s:${value.value}`;
61
+ }
62
+ if (isLocalVarMarker(value)) {
63
+ return tagMarker(value);
64
+ }
65
+ if (isHandleLike(value)) {
66
+ return `h:${value.key}`;
67
+ }
68
+ throw new Error(`Unsupported interpolation in css template. Interpolate a theme token, scale token, contextual var, local var (ref/marker), string, number, or a style handle.`);
69
+ };
70
+ const tagMarker = (marker) => {
71
+ if (marker.__kind === 'local-var-default-marker') {
72
+ const entries = marker.defaults
73
+ .map((item) => `${item.key}=${tagValue(item.value)}`)
74
+ .sort();
75
+ return `m:default:${marker.groupId}:${entries.join(',')}`;
76
+ }
77
+ const entries = marker.overrides
78
+ .map((item) => `${item.key}=${tagValue(item.value)}`)
79
+ .sort();
80
+ return `m:override:${marker.groupId}:${entries.join(',')}`;
81
+ };
82
+ //# sourceMappingURL=hash.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hash.js","sourceRoot":"","sources":["../src/hash.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\n// Content hashing for anonymous emotion `css`/`injectGlobal` modules.\n//\n// Deterministic 64-bit FNV-1a (two 32-bit passes with distinct offset bases)\n// over a canonical serialization of the authored template. Determinism lets\n// server-rendered and client-rendered class names agree without coordination.\n\nimport type { LocalVarMarker } from './local_vars';\nimport { isLocalVarMarker } from './local_vars';\nimport { isLocalVarRef } from './local_vars';\nimport { isHandleLike } from './nesting';\nimport {\n isContextualCssVar,\n isContextualCssVarName,\n isCssToken,\n isScaleToken,\n} from './tokens';\n\nconst FNV_PRIME = 0x01000193;\nconst FNV_OFFSET_A = 0x811c9dc5;\n// A second basis derived from the golden-ratio constant so the two passes\n// disagree, widening the effective hash to 64 bits.\nconst FNV_OFFSET_B = (0x811c9dc5 ^ 0x9e3779b9) >>> 0;\n\nconst fnv1a = (input: string, offset: number): number => {\n let hash = offset;\n for (let i = 0; i < input.length; i += 1) {\n hash ^= input.charCodeAt(i);\n hash = Math.imul(hash, FNV_PRIME);\n }\n return hash >>> 0;\n};\n\nconst base36 = (value: number): string => value.toString(36).padStart(7, '0');\n\nexport const contentHash64 = (\n strings: readonly string[],\n values: readonly unknown[]\n): string => {\n const canonical = canonicalize(strings, values);\n return (\n base36(fnv1a(canonical, FNV_OFFSET_A)) +\n base36(fnv1a(canonical, FNV_OFFSET_B))\n );\n};\n\n// Canonical, injective-enough serialization. Template strings and tagged\n// values are interleaved and joined with a NUL sentinel that cannot appear in\n// authored CSS, so distinct templates cannot collide by concatenation.\nconst canonicalize = (\n strings: readonly string[],\n values: readonly unknown[]\n): string => {\n const segments: string[] = [];\n strings.forEach((part, index) => {\n segments.push(part);\n if (index < values.length) {\n segments.push(tagValue(values[index]));\n }\n });\n return segments.join('\\u0000');\n};\n\nconst tagValue = (value: unknown): string => {\n if (typeof value === 'string' || typeof value === 'number') {\n return `r:${value}`;\n }\n if (isCssToken(value)) {\n return `t:${value.path}`;\n }\n if (isContextualCssVar(value)) {\n return `v:${value.path}`;\n }\n if (isContextualCssVarName(value)) {\n return `n:${value.path}`;\n }\n if (isLocalVarRef(value)) {\n return `l:${value.path}`;\n }\n if (isScaleToken(value)) {\n return `s:${value.value}`;\n }\n if (isLocalVarMarker(value)) {\n return tagMarker(value);\n }\n if (isHandleLike(value)) {\n return `h:${value.key}`;\n }\n throw new Error(\n `Unsupported interpolation in css template. Interpolate a theme token, scale token, contextual var, local var (ref/marker), string, number, or a style handle.`\n );\n};\n\nconst tagMarker = (marker: LocalVarMarker): string => {\n if (marker.__kind === 'local-var-default-marker') {\n const entries = marker.defaults\n .map((item) => `${item.key}=${tagValue(item.value)}`)\n .sort();\n return `m:default:${marker.groupId}:${entries.join(',')}`;\n }\n const entries = marker.overrides\n .map((item) => `${item.key}=${tagValue(item.value)}`)\n .sort();\n return `m:override:${marker.groupId}:${entries.join(',')}`;\n};\n"]}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Throws if `segment` is not a valid CSS identifier segment.
3
+ *
4
+ * @param segment Value to validate.
5
+ * @param role Human-readable label for the error message (e.g. `'Distillery prefix'`).
6
+ * @throws If `segment` contains characters outside `[A-Za-z_][A-Za-z0-9_-]*`.
7
+ */
8
+ export declare const assertCssIdentSegment: (segment: string, role: string) => void;
9
+ //# sourceMappingURL=idents.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"idents.d.ts","sourceRoot":"","sources":["../src/idents.ts"],"names":[],"mappings":"AAOA;;;;;;GAMG;AACH,eAAO,MAAM,qBAAqB,GAAI,SAAS,MAAM,EAAE,MAAM,MAAM,KAAG,IAMrE,CAAC"}
package/dist/idents.js ADDED
@@ -0,0 +1,19 @@
1
+ /*
2
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
3
+ * or more contributor license agreements. Licensed under the Elastic License
4
+ * 2.0; you may not use this file except in compliance with the Elastic License
5
+ * 2.0.
6
+ */
7
+ /**
8
+ * Throws if `segment` is not a valid CSS identifier segment.
9
+ *
10
+ * @param segment Value to validate.
11
+ * @param role Human-readable label for the error message (e.g. `'Distillery prefix'`).
12
+ * @throws If `segment` contains characters outside `[A-Za-z_][A-Za-z0-9_-]*`.
13
+ */
14
+ export const assertCssIdentSegment = (segment, role) => {
15
+ if (!/^[A-Za-z_][A-Za-z0-9_-]*$/.test(segment)) {
16
+ throw new Error(`${role} "${segment}" is not a CSS identifier segment. Use a letter or underscore, then letters, digits, hyphens, or underscores.`);
17
+ }
18
+ };
19
+ //# sourceMappingURL=idents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"idents.js","sourceRoot":"","sources":["../src/idents.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,OAAe,EAAE,IAAY,EAAQ,EAAE;IAC3E,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAC/C,MAAM,IAAI,KAAK,CACb,GAAG,IAAI,KAAK,OAAO,+GAA+G,CACnI,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\n/**\n * Throws if `segment` is not a valid CSS identifier segment.\n *\n * @param segment Value to validate.\n * @param role Human-readable label for the error message (e.g. `'Distillery prefix'`).\n * @throws If `segment` contains characters outside `[A-Za-z_][A-Za-z0-9_-]*`.\n */\nexport const assertCssIdentSegment = (segment: string, role: string): void => {\n if (!/^[A-Za-z_][A-Za-z0-9_-]*$/.test(segment)) {\n throw new Error(\n `${role} \"${segment}\" is not a CSS identifier segment. Use a letter or underscore, then letters, digits, hyphens, or underscores.`\n );\n }\n};\n"]}
@@ -0,0 +1,9 @@
1
+ export { createDistillery, type Distillery } from './engine.js';
2
+ export { type DistilleryEnvironment, type DistilleryOptions, type ThemeVarDefinition, } from './environment.js';
3
+ export { resolveThemeValues, zipSchemes, type DeepPartialTheme, type MediaThemeVariation, type PathsOf, type ResolvedThemeVariation, type SchemeValueTree, type ThemeTree, type ThemeVariation, type TokensOf, type ValuesOf, type Zipped, } from './theme.js';
4
+ export { contextualVar, cq, isContextualCssVar, isContextualCssVarName, isCssToken, isScaleToken, lightDark, scaleToken, themeToken, type ContextualCssVar, type ContextualCssVarName, type CssToken, type ScaleToken, type SchemePair, } from './tokens/index.js';
5
+ export { createStyleNameResolver, cssVarName, type StyleNameMode, type StyleNameResolver, type StyleNameResolverOptions, type StyleTarget, } from './names.js';
6
+ export { StylesCollector, type StylesCollectorOptions } from './collector.js';
7
+ export { renderStyles, type RenderStylesOptions, type ThemeAlternate, } from './runtime.js';
8
+ export { combineClassNames, container, css, decls, mapDomain, media, rule, StyleRegistry, variants, type ContextualVarPath, type CssValue, type CssVarPath, type Declarations, type DeclarationSegment, type DefaultGroupDeps, type DefaultKeyDeps, type LocalVarDefaultMarker, type LocalVarGroup, type LocalVarMarker, type LocalVarOverrideMarker, type LocalVarRef, type PrimitiveStyleAuthoringApi, type ResolvedStyles, type RuleOptions, type StyleAuthoringApi, type StyleDeps, type StyleEntry, type StyleHandle, type StyleMedia, type StyleRegistrySnapshot, type StyleRule, type StylesModule, type StylesObject, type StyleSelectorResolver, } from './styles/index.js';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,gBAAgB,EAAE,KAAK,UAAU,EAAE,MAAM,UAAU,CAAC;AAC7D,OAAO,EACL,KAAK,qBAAqB,EAC1B,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,GACxB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,kBAAkB,EAClB,UAAU,EACV,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,EACxB,KAAK,OAAO,EACZ,KAAK,sBAAsB,EAC3B,KAAK,eAAe,EACpB,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,KAAK,QAAQ,EACb,KAAK,QAAQ,EACb,KAAK,MAAM,GACZ,MAAM,SAAS,CAAC;AACjB,OAAO,EACL,aAAa,EACb,EAAE,EACF,kBAAkB,EAClB,sBAAsB,EACtB,UAAU,EACV,YAAY,EACZ,SAAS,EACT,UAAU,EACV,UAAU,EACV,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,EACzB,KAAK,QAAQ,EACb,KAAK,UAAU,EACf,KAAK,UAAU,GAChB,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,uBAAuB,EACvB,UAAU,EACV,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACtB,KAAK,wBAAwB,EAC7B,KAAK,WAAW,GACjB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,eAAe,EAAE,KAAK,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAC3E,OAAO,EACL,YAAY,EACZ,KAAK,mBAAmB,EACxB,KAAK,cAAc,GACpB,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,iBAAiB,EACjB,SAAS,EACT,GAAG,EACH,KAAK,EACL,SAAS,EACT,KAAK,EACL,IAAI,EACJ,aAAa,EACb,QAAQ,EACR,KAAK,iBAAiB,EACtB,KAAK,QAAQ,EACb,KAAK,UAAU,EACf,KAAK,YAAY,EACjB,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,qBAAqB,EAC1B,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,sBAAsB,EAC3B,KAAK,WAAW,EAChB,KAAK,0BAA0B,EAC/B,KAAK,cAAc,EACnB,KAAK,WAAW,EAChB,KAAK,iBAAiB,EACtB,KAAK,SAAS,EACd,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,KAAK,qBAAqB,EAC1B,KAAK,SAAS,EACd,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,qBAAqB,GAC3B,MAAM,UAAU,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,14 @@
1
+ /*
2
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
3
+ * or more contributor license agreements. Licensed under the Elastic License
4
+ * 2.0; you may not use this file except in compliance with the Elastic License
5
+ * 2.0.
6
+ */
7
+ export { createDistillery } from './engine.js';
8
+ export { resolveThemeValues, zipSchemes, } from './theme.js';
9
+ export { contextualVar, cq, isContextualCssVar, isContextualCssVarName, isCssToken, isScaleToken, lightDark, scaleToken, themeToken, } from './tokens/index.js';
10
+ export { createStyleNameResolver, cssVarName, } from './names.js';
11
+ export { StylesCollector } from './collector.js';
12
+ export { renderStyles, } from './runtime.js';
13
+ export { combineClassNames, container, css, decls, mapDomain, media, rule, StyleRegistry, variants, } from './styles/index.js';
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,gBAAgB,EAAmB,MAAM,UAAU,CAAC;AAM7D,OAAO,EACL,kBAAkB,EAClB,UAAU,GAWX,MAAM,SAAS,CAAC;AACjB,OAAO,EACL,aAAa,EACb,EAAE,EACF,kBAAkB,EAClB,sBAAsB,EACtB,UAAU,EACV,YAAY,EACZ,SAAS,EACT,UAAU,EACV,UAAU,GAMX,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,uBAAuB,EACvB,UAAU,GAKX,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,eAAe,EAA+B,MAAM,aAAa,CAAC;AAC3E,OAAO,EACL,YAAY,GAGb,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,iBAAiB,EACjB,SAAS,EACT,GAAG,EACH,KAAK,EACL,SAAS,EACT,KAAK,EACL,IAAI,EACJ,aAAa,EACb,QAAQ,GA0BT,MAAM,UAAU,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\nexport { createDistillery, type Distillery } from './engine';\nexport {\n type DistilleryEnvironment,\n type DistilleryOptions,\n type ThemeVarDefinition,\n} from './environment';\nexport {\n resolveThemeValues,\n zipSchemes,\n type DeepPartialTheme,\n type MediaThemeVariation,\n type PathsOf,\n type ResolvedThemeVariation,\n type SchemeValueTree,\n type ThemeTree,\n type ThemeVariation,\n type TokensOf,\n type ValuesOf,\n type Zipped,\n} from './theme';\nexport {\n contextualVar,\n cq,\n isContextualCssVar,\n isContextualCssVarName,\n isCssToken,\n isScaleToken,\n lightDark,\n scaleToken,\n themeToken,\n type ContextualCssVar,\n type ContextualCssVarName,\n type CssToken,\n type ScaleToken,\n type SchemePair,\n} from './tokens';\nexport {\n createStyleNameResolver,\n cssVarName,\n type StyleNameMode,\n type StyleNameResolver,\n type StyleNameResolverOptions,\n type StyleTarget,\n} from './names';\nexport { StylesCollector, type StylesCollectorOptions } from './collector';\nexport {\n renderStyles,\n type RenderStylesOptions,\n type ThemeAlternate,\n} from './runtime';\nexport {\n combineClassNames,\n container,\n css,\n decls,\n mapDomain,\n media,\n rule,\n StyleRegistry,\n variants,\n type ContextualVarPath,\n type CssValue,\n type CssVarPath,\n type Declarations,\n type DeclarationSegment,\n type DefaultGroupDeps,\n type DefaultKeyDeps,\n type LocalVarDefaultMarker,\n type LocalVarGroup,\n type LocalVarMarker,\n type LocalVarOverrideMarker,\n type LocalVarRef,\n type PrimitiveStyleAuthoringApi,\n type ResolvedStyles,\n type RuleOptions,\n type StyleAuthoringApi,\n type StyleDeps,\n type StyleEntry,\n type StyleHandle,\n type StyleMedia,\n type StyleRegistrySnapshot,\n type StyleRule,\n type StylesModule,\n type StylesObject,\n type StyleSelectorResolver,\n} from './styles';\n"]}