@exponential-at/ui 0.0.0-stage → 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 (251) hide show
  1. package/LICENSE +201 -0
  2. package/NOTICE +54 -0
  3. package/README.md +360 -2
  4. package/catalog/a11y.json +668 -0
  5. package/catalog/basic-map.json +104 -0
  6. package/catalog/code.json +58 -0
  7. package/catalog/core.catalog.json +4752 -0
  8. package/catalog/core.schema.json +22667 -0
  9. package/catalog/host.json +64 -0
  10. package/catalog/layout.json +20 -0
  11. package/catalog/limits.json +9 -0
  12. package/catalog/locale.json +48 -0
  13. package/catalog/macros.json +3417 -0
  14. package/catalog/recipes.json +61 -0
  15. package/catalog/strings.json +72 -0
  16. package/catalog/style.json +128 -0
  17. package/catalog/theme.schema.json +42543 -0
  18. package/catalog/tokens.json +47 -0
  19. package/conformance/README.md +217 -0
  20. package/conformance/baseline.ts +101 -0
  21. package/conformance/browser-page.ts +146 -0
  22. package/conformance/browser-suites.ts +683 -0
  23. package/conformance/compare.ts +201 -0
  24. package/conformance/dom.ts +96 -0
  25. package/conformance/dump.ts +163 -0
  26. package/conformance/fonts.json +154 -0
  27. package/conformance/manifest.json +224 -0
  28. package/conformance/parity-compare.ts +191 -0
  29. package/conformance/parity-report.schema.json +73 -0
  30. package/conformance/parity.ts +412 -0
  31. package/conformance/pixel.ts +177 -0
  32. package/conformance/primitives-page.ts +49 -0
  33. package/conformance/report.schema.json +66 -0
  34. package/conformance/run.ts +118 -0
  35. package/dist/chunks/index-98npjvsd.js +3940 -0
  36. package/dist/chunks/index-98npjvsd.js.map +27 -0
  37. package/dist/chunks/index-gwkt14w3.js +7314 -0
  38. package/dist/chunks/index-gwkt14w3.js.map +10 -0
  39. package/dist/chunks/index-njt7yzzm.js +134 -0
  40. package/dist/chunks/index-njt7yzzm.js.map +9 -0
  41. package/dist/chunks/index-we7va6v6.js +7984 -0
  42. package/dist/chunks/index-we7va6v6.js.map +15 -0
  43. package/dist/chunks/index-xrm6f7wc.js +2563 -0
  44. package/dist/chunks/index-xrm6f7wc.js.map +10 -0
  45. package/dist/conformance.js +182749 -0
  46. package/dist/conformance.js.map +10 -0
  47. package/dist/entries/prompt.js +251 -0
  48. package/dist/entries/prompt.js.map +11 -0
  49. package/dist/entries/schema.js +1725 -0
  50. package/dist/entries/schema.js.map +11 -0
  51. package/dist/host/index.js +122 -0
  52. package/dist/host/index.js.map +9 -0
  53. package/dist/index.js +3213 -0
  54. package/dist/index.js.map +27 -0
  55. package/dist/types/src/a11y.d.ts +21 -0
  56. package/dist/types/src/animation.d.ts +76 -0
  57. package/dist/types/src/basic-map.d.ts +38 -0
  58. package/dist/types/src/builder.d.ts +50 -0
  59. package/dist/types/src/catalog.d.ts +54 -0
  60. package/dist/types/src/catalog.described.d.ts +33 -0
  61. package/dist/types/src/catalog.generated.d.ts +829 -0
  62. package/dist/types/src/chart.d.ts +46 -0
  63. package/dist/types/src/code.d.ts +44 -0
  64. package/dist/types/src/color.d.ts +20 -0
  65. package/dist/types/src/conformance.d.ts +39 -0
  66. package/dist/types/src/connector/app.d.ts +14 -0
  67. package/dist/types/src/connector/connector.d.ts +77 -0
  68. package/dist/types/src/connector/index.d.ts +4 -0
  69. package/dist/types/src/css.d.ts +29 -0
  70. package/dist/types/src/define.d.ts +66 -0
  71. package/dist/types/src/direction.d.ts +16 -0
  72. package/dist/types/src/dynamic.d.ts +159 -0
  73. package/dist/types/src/entries/prompt.d.ts +11 -0
  74. package/dist/types/src/entries/schema.d.ts +8 -0
  75. package/dist/types/src/expr.d.ts +71 -0
  76. package/dist/types/src/extension.d.ts +4 -0
  77. package/dist/types/src/format.d.ts +112 -0
  78. package/dist/types/src/geometry.d.ts +40 -0
  79. package/dist/types/src/host/contract.d.ts +188 -0
  80. package/dist/types/src/host/decoders.d.ts +61 -0
  81. package/dist/types/src/host/index.d.ts +11 -0
  82. package/dist/types/src/host/package.d.ts +58 -0
  83. package/dist/types/src/host/policy.d.ts +105 -0
  84. package/dist/types/src/host/router.d.ts +34 -0
  85. package/dist/types/src/host/runtime.d.ts +205 -0
  86. package/dist/types/src/host/sources.d.ts +15 -0
  87. package/dist/types/src/host/transports.d.ts +109 -0
  88. package/dist/types/src/index.d.ts +63 -0
  89. package/dist/types/src/layout.d.ts +20 -0
  90. package/dist/types/src/limits.d.ts +21 -0
  91. package/dist/types/src/list.d.ts +133 -0
  92. package/dist/types/src/locale.d.ts +22 -0
  93. package/dist/types/src/macros.d.ts +29 -0
  94. package/dist/types/src/overlay.d.ts +27 -0
  95. package/dist/types/src/prompt.d.ts +44 -0
  96. package/dist/types/src/recipes.d.ts +17 -0
  97. package/dist/types/src/reducer.d.ts +41 -0
  98. package/dist/types/src/resizable.d.ts +38 -0
  99. package/dist/types/src/schema.d.ts +7 -0
  100. package/dist/types/src/strings.d.ts +13 -0
  101. package/dist/types/src/style.d.ts +201 -0
  102. package/dist/types/src/test-preload.d.ts +1 -0
  103. package/dist/types/src/text-shimmer.d.ts +24 -0
  104. package/dist/types/src/theme-types.d.ts +162 -0
  105. package/dist/types/src/theme.d.ts +73 -0
  106. package/dist/types/src/themes.d.ts +22 -0
  107. package/dist/types/src/tree-guides.d.ts +17 -0
  108. package/dist/types/src/types.d.ts +314 -0
  109. package/dist/types/src/validate.d.ts +31 -0
  110. package/dist/types/src/web/base-css.d.ts +1 -0
  111. package/dist/types/src/web/box-css.d.ts +55 -0
  112. package/dist/types/src/web/coerce.d.ts +32 -0
  113. package/dist/types/src/web/data.d.ts +105 -0
  114. package/dist/types/src/web/dates.d.ts +12 -0
  115. package/dist/types/src/web/form.d.ts +44 -0
  116. package/dist/types/src/web/host-types.d.ts +119 -0
  117. package/dist/types/src/web/index.d.ts +28 -0
  118. package/dist/types/src/web/inputs.d.ts +55 -0
  119. package/dist/types/src/web/list.d.ts +13 -0
  120. package/dist/types/src/web/listbox.d.ts +14 -0
  121. package/dist/types/src/web/markdown.d.ts +96 -0
  122. package/dist/types/src/web/media.d.ts +62 -0
  123. package/dist/types/src/web/parts.d.ts +4 -0
  124. package/dist/types/src/web/primitives/alert-dialog.d.ts +10 -0
  125. package/dist/types/src/web/primitives/alert.d.ts +9 -0
  126. package/dist/types/src/web/primitives/avatar-color.d.ts +2 -0
  127. package/dist/types/src/web/primitives/avatar.d.ts +13 -0
  128. package/dist/types/src/web/primitives/badge.d.ts +10 -0
  129. package/dist/types/src/web/primitives/breadcrumb.d.ts +10 -0
  130. package/dist/types/src/web/primitives/button.d.ts +6 -0
  131. package/dist/types/src/web/primitives/calendar.d.ts +43 -0
  132. package/dist/types/src/web/primitives/card.d.ts +9 -0
  133. package/dist/types/src/web/primitives/checkbox.d.ts +5 -0
  134. package/dist/types/src/web/primitives/choice-tiles.d.ts +32 -0
  135. package/dist/types/src/web/primitives/cn.d.ts +3 -0
  136. package/dist/types/src/web/primitives/code-block.d.ts +24 -0
  137. package/dist/types/src/web/primitives/command.d.ts +134 -0
  138. package/dist/types/src/web/primitives/context-ring.d.ts +24 -0
  139. package/dist/types/src/web/primitives/dialog-arms.d.ts +6 -0
  140. package/dist/types/src/web/primitives/dialog.d.ts +24 -0
  141. package/dist/types/src/web/primitives/disclosure-header.d.ts +5 -0
  142. package/dist/types/src/web/primitives/dock.d.ts +42 -0
  143. package/dist/types/src/web/primitives/dropdown-menu.d.ts +14 -0
  144. package/dist/types/src/web/primitives/empty-state.d.ts +15 -0
  145. package/dist/types/src/web/primitives/glass-card.d.ts +4 -0
  146. package/dist/types/src/web/primitives/hover-card.d.ts +7 -0
  147. package/dist/types/src/web/primitives/icon-disc.d.ts +12 -0
  148. package/dist/types/src/web/primitives/index.d.ts +48 -0
  149. package/dist/types/src/web/primitives/input.d.ts +5 -0
  150. package/dist/types/src/web/primitives/kbd.d.ts +4 -0
  151. package/dist/types/src/web/primitives/label.d.ts +3 -0
  152. package/dist/types/src/web/primitives/menu-surface.d.ts +17 -0
  153. package/dist/types/src/web/primitives/meter.d.ts +21 -0
  154. package/dist/types/src/web/primitives/popover.d.ts +3 -0
  155. package/dist/types/src/web/primitives/progress-ring.d.ts +5 -0
  156. package/dist/types/src/web/primitives/progress.d.ts +8 -0
  157. package/dist/types/src/web/primitives/scroll-area.d.ts +49 -0
  158. package/dist/types/src/web/primitives/segmented-control.d.ts +5 -0
  159. package/dist/types/src/web/primitives/select.d.ts +47 -0
  160. package/dist/types/src/web/primitives/separator.d.ts +3 -0
  161. package/dist/types/src/web/primitives/sheet-chrome.d.ts +4 -0
  162. package/dist/types/src/web/primitives/sheet.d.ts +20 -0
  163. package/dist/types/src/web/primitives/skeleton.d.ts +3 -0
  164. package/dist/types/src/web/primitives/spinner.d.ts +3 -0
  165. package/dist/types/src/web/primitives/switch.d.ts +4 -0
  166. package/dist/types/src/web/primitives/table.d.ts +11 -0
  167. package/dist/types/src/web/primitives/tabs.d.ts +13 -0
  168. package/dist/types/src/web/primitives/textarea.d.ts +3 -0
  169. package/dist/types/src/web/primitives/toast.d.ts +163 -0
  170. package/dist/types/src/web/primitives/tooltip.d.ts +3 -0
  171. package/dist/types/src/web/primitives/truncate.d.ts +7 -0
  172. package/dist/types/src/web/primitives/typeahead-portal.d.ts +12 -0
  173. package/dist/types/src/web/share.d.ts +6 -0
  174. package/dist/types/src/web/table.d.ts +20 -0
  175. package/dist/types/src/web/theme-css.d.ts +69 -0
  176. package/dist/types/src/web/urls.d.ts +21 -0
  177. package/dist/web/index.js +2303 -0
  178. package/dist/web/index.js.map +26 -0
  179. package/dist/web/primitives/index.js +1450 -0
  180. package/dist/web/primitives/index.js.map +57 -0
  181. package/docs/components.generated.json +6238 -0
  182. package/docs/round-1-contract.md +679 -0
  183. package/docs/round-2-contract.md +476 -0
  184. package/docs/round-3-contract.md +174 -0
  185. package/docs/themes.generated.json +3503 -0
  186. package/fixtures/animations.json +2890 -0
  187. package/fixtures/bench-list.json +58 -0
  188. package/fixtures/bind-time.json +30664 -0
  189. package/fixtures/catalog-basic-map.json +1692 -0
  190. package/fixtures/catalog-components.json +9323 -0
  191. package/fixtures/catalog-extension.json +620 -0
  192. package/fixtures/catalog-macros.json +36370 -0
  193. package/fixtures/code-tokens.json +1993 -0
  194. package/fixtures/conformance-baseline.json +55544 -0
  195. package/fixtures/conformance-cases.json +49 -0
  196. package/fixtures/conformance-known.json +2123 -0
  197. package/fixtures/control-geometry.json +4200 -0
  198. package/fixtures/dashboard.data.json +74 -0
  199. package/fixtures/dashboard.json +752 -0
  200. package/fixtures/demo-surface.json +47 -0
  201. package/fixtures/format.json +870 -0
  202. package/fixtures/host-policy.json +1067 -0
  203. package/fixtures/host-router.json +1152 -0
  204. package/fixtures/host-transport.json +590 -0
  205. package/fixtures/interactions-round1.json +773 -0
  206. package/fixtures/kitchen-sink.expanded.json +10844 -0
  207. package/fixtures/kitchen-sink.json +3049 -0
  208. package/fixtures/layout-geometry-round1.json +7278 -0
  209. package/fixtures/layout-geometry.json +2072 -0
  210. package/fixtures/overlay-geometry.json +272 -0
  211. package/fixtures/primitive-specimens.json +58 -0
  212. package/fixtures/prompt-budget.json +33 -0
  213. package/fixtures/resizable.json +714 -0
  214. package/fixtures/round4-contract.json +2985 -0
  215. package/fixtures/specimens.json +9832 -0
  216. package/fixtures/style-conditions.json +336 -0
  217. package/fixtures/template-items.json +2215 -0
  218. package/fixtures/text-direction.json +309 -0
  219. package/fixtures/text-shimmer.json +96 -0
  220. package/fixtures/theme-extends.json +573 -0
  221. package/fixtures/theme-invalid.json +1296 -0
  222. package/fixtures/theme-recipes.json +58600 -0
  223. package/fixtures/theme-resolved.json +23949 -0
  224. package/fixtures/toast-stack.json +215 -0
  225. package/fixtures/tree-guides.json +224 -0
  226. package/fixtures/virtual-list.json +733 -0
  227. package/generated/ExponentialUICatalog.generated.kt +67 -0
  228. package/generated/ExponentialUICatalog.generated.swift +67 -0
  229. package/generated/ExponentialUIThemes.generated.kt +23 -0
  230. package/generated/ExponentialUIThemes.generated.swift +23 -0
  231. package/generated/catalog.descriptions.generated.rs +6 -0
  232. package/generated/catalog.generated.rs +80 -0
  233. package/generated/catalog.themes.generated.rs +34 -0
  234. package/generated/core.descriptions.json +2505 -0
  235. package/generated/core.runtime.json +3609 -0
  236. package/package.json +87 -4
  237. package/themes/exponential.recipes.json +49 -0
  238. package/themes/exponential.theme.json +755 -0
  239. package/themes/neutral.theme.json +5676 -0
  240. package/themes/orange.theme.json +43 -0
  241. package/themes/playful.theme.json +219 -0
  242. package/vendor/a2ui/LICENSE.txt +203 -0
  243. package/vendor/a2ui/README.md +27 -0
  244. package/vendor/a2ui/v0_9/basic_catalog.json +1387 -0
  245. package/vendor/a2ui/v0_9/basic_catalog_rules.txt +5 -0
  246. package/vendor/a2ui/v0_9/client_capabilities.json +97 -0
  247. package/vendor/a2ui/v0_9/client_to_server.json +104 -0
  248. package/vendor/a2ui/v0_9/common_types.json +315 -0
  249. package/vendor/a2ui/v0_9/server_to_client.json +132 -0
  250. package/vendor/json-render/LICENSE.txt +201 -0
  251. package/vendor/json-render/README.md +13 -0
@@ -0,0 +1,10 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/catalog.ts"],
4
+ "sourcesContent": [
5
+ "// VAPP-85: the catalog as data. `catalog/core.catalog.json` is the source;\n// this module loads it, names the catalog ids and answers lookups across the\n// core plus any registered extensions. VAPP-106: what loads here is the\n// RUNTIME catalog `generated/core.runtime.json` (the source minus every\n// description, example and `$comment`), what a renderer needs and nothing a\n// model reads; `src/catalog.described.ts` attaches the text for the prompt,\n// the schema emitter and the docs.\n\nimport coreJson from \"../generated/core.runtime.json\" with { type: \"json\" }\nimport tokensJson from \"../catalog/tokens.json\" with { type: \"json\" }\nimport basicMapJson from \"../catalog/basic-map.json\" with { type: \"json\" }\nimport macrosJson from \"../catalog/macros.json\" with { type: \"json\" }\nimport type {\n CatalogSource,\n ComponentDef,\n DefSchema,\n ExtensionDef,\n MacroDef,\n} from \"./types\"\n\n/** The runtime catalog: no descriptions or examples until `describeCatalog()`\n * (src/catalog.described.ts; the `./prompt` and `./schema` entries) attaches them. */\nexport const coreCatalog = coreJson as unknown as CatalogSource\n\n/** `https://ui.exponential.at/catalogs/core/v1` */\nexport const CORE_CATALOG_ID: string = coreCatalog.id\n/** The prompt-sized subset: the app-shaped vocabulary (no overlays, media,\n * Chart, data tables or the rarer controls). A lite surface is a valid core\n * surface, so it is a second id over the same definitions. */\nexport const CORE_LITE_CATALOG_ID: string = coreCatalog.liteId\n/** The vendored A2UI basic catalog (vendor/a2ui/v0_9). */\nexport const A2UI_BASIC_CATALOG_ID: string = basicMapJson.from\n/** The A2UI wire `version` the vendored schemas carry. */\nexport const A2UI_VERSION: string = basicMapJson.version\n/** What a client sends as `supportedCatalogIds`. */\nexport const SUPPORTED_CATALOG_IDS: readonly string[] = [\n CORE_CATALOG_ID,\n CORE_LITE_CATALOG_ID,\n A2UI_BASIC_CATALOG_ID,\n]\nexport const UNKNOWN_COMPONENT: string = coreCatalog.unknownComponent\n\nexport const coreMacros = macrosJson.macros as unknown as Record<\n string,\n MacroDef\n>\n\n/** Token groups → names, flattened (`type.size`, not a nested object), so a\n * reference `$<group>.<name>` resolves by one lookup. */\nexport const TOKEN_GROUPS: Record<string, readonly string[]> = (() => {\n const out: Record<string, readonly string[]> = {}\n for (const [group, value] of Object.entries(tokensJson)) {\n if (group.startsWith(`$`)) continue\n if (Array.isArray(value)) out[group] = value\n else\n for (const [sub, names] of Object.entries(value as Record<string, string[]>))\n out[`${group}.${sub}`] = names\n }\n return out\n})()\n\nconst TOKEN_REF = /^\\$([a-z][a-zA-Z0-9]*(?:\\.[a-z][a-zA-Z0-9]*)*)\\.([a-zA-Z0-9]+)$/\n\n/** `$spacing.md` → `{ group: \"spacing\", name: \"md\" }`, or null when it is not\n * a well-formed reference. */\nexport function parseTokenRef(\n value: unknown\n): { group: string; name: string } | null {\n if (typeof value !== `string`) return null\n const match = TOKEN_REF.exec(value)\n if (!match) return null\n return { group: match[1], name: match[2] }\n}\n\n/** True when the reference names a token group AND a name in it. */\nexport function isKnownToken(value: unknown): boolean {\n const ref = parseTokenRef(value)\n return ref !== null && (TOKEN_GROUPS[ref.group]?.includes(ref.name) ?? false)\n}\n\nexport interface CatalogView {\n components: Record<string, ComponentDef>\n enums: Record<string, readonly string[]>\n defs: Record<string, DefSchema>\n macros: Record<string, MacroDef>\n}\n\n/** A prototype-less copy of a table: a lookup by an agent-chosen name\n * (`constructor`, `__proto__`, `valueOf`) finds nothing instead of\n * `Object.prototype`'s members (VAPP-107, property-tested). */\nfunction ownTable<T>(source: Record<string, T>): Record<string, T> {\n return Object.assign(Object.create(null) as Record<string, T>, source)\n}\n\n/** The core merged with the given extensions. Extension names never shadow a\n * core name (defineExtension refuses that), so a plain spread is exact. */\nexport function catalogView(extensions: readonly ExtensionDef[] = []): CatalogView {\n const view: CatalogView = {\n components: ownTable(coreCatalog.components),\n enums: ownTable(coreCatalog.enums),\n defs: ownTable(coreCatalog.defs),\n macros: ownTable(coreMacros),\n }\n for (const ext of extensions) {\n Object.assign(view.components, ext.components)\n Object.assign(view.enums, ext.enums ?? {})\n Object.assign(view.defs, ext.defs ?? {})\n Object.assign(view.macros, ext.macros ?? {})\n }\n return view\n}\n\nlet coreView: CatalogView | undefined\nconst views = new WeakMap<readonly ExtensionDef[], CatalogView>()\n\n/** `catalogView`, built once per extension list and SHARED (VAPP-152: the\n * reducer and the macro expander asked for a fresh copy of every table on\n * each streamed `updateComponents`). Read-only; an empty list is the\n * core's. */\nexport function sharedCatalogView(extensions: readonly ExtensionDef[] = []): CatalogView {\n if (extensions.length === 0) return (coreView ??= catalogView())\n let view = views.get(extensions)\n if (!view) views.set(extensions, (view = catalogView(extensions)))\n return view\n}\n\nexport function componentDef(\n name: string,\n extensions: readonly ExtensionDef[] = []\n): ComponentDef | undefined {\n return catalogView(extensions).components[name]\n}\n\n/** True for a component a model is offered: anything but the hidden\n * placeholder. */\nexport function isOffered(def: ComponentDef): boolean {\n return !def.hidden\n}\n\n/** Component names in source order, optionally the lite subset, never the\n * hidden placeholder. */\nexport function componentNames(options: { lite?: boolean } = {}): string[] {\n return Object.entries(coreCatalog.components)\n .filter(([, def]) => isOffered(def) && (!options.lite || def.lite))\n .map(([name]) => name)\n}\n\n/** The lite subset's names. */\nexport function coreLite(): string[] {\n return componentNames({ lite: true })\n}\n"
6
+ ],
7
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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",
8
+ "debugId": "B91D15B7A5F45AB964756E2164756E21",
9
+ "names": []
10
+ }
@@ -0,0 +1,134 @@
1
+ // packages/exponential-ui/catalog/style.json
2
+ var style_default = {
3
+ $comment: 'VAPP-85: the `Box` style whitelist, verbatim from the VAPP-4 spike (`vapp_spike::WHITELIST` + the logical inline properties the spike added), extended by round 1 (docs/round-1-contract.md) — ONE source for the TS keys (`src/style.ts`), the JSON Schema (`core.schema.json#/$defs/style`) and the Swift/Kotlin/Rust key lists. Numbers are px (≡ pt ≡ dp); `length` also takes `"N%"`, `"Npx"` and `"auto"`; every value may be a token reference `$<group>.<name>` from tokens.json; a COLOUR (`backgroundColor`, `color`, `borderColor`, gradient stops) is ONLY a `$color.<name>` token (round 4, VAPP-103: a literal `#hex` ignores the theme\'s light and dark modes, so validateStyle refuses it; themes keep literals). `borderWidth` and the four per-side widths are the visual keys with layout effect (a number or `$border.<name>`, VAPP-92); `fontFamily` (VAPP-92) takes only `$type.family.<name>`; `transition` takes only `$motion.<name>` (the duration every opacity/colour/transform/size change animates with; nothing animates without it) and `transitionEasing` only `$ease.<name>`; `transform` is PAINT-ONLY (`translate(Xpx, Ypx)`, `scale(N)`, `rotate(Ndeg)`, space-separated, never layout); `backgroundGradient` = `{angle, stops: [{color, offset 0..1}]}` painted OVER `backgroundColor` (CSS order: the colour shows only through transparent stops); `visibility: hidden` keeps the box in layout and paints nothing (`display: none` removes it); `cursor` is a pointer-platform hint touch platforms ignore. CONDITIONS nest one level and apply in SOURCE ORDER after the base (write narrow-first): `@media` keys match the ONE grammar in `conditions.media` — `min-width`/`max-width`/`min-height`/`max-height` against the SURFACE box (`min-*` = `size >= N`, `max-*` = `size < N`; `N` = px or a `$breakpoint.<name>` token the theme resolves BEFORE matching), `orientation` of the surface box, `hover: hover|none` = a hover-capable pointer, `prefers-reduced-motion: reduce|no-preference` from the platform; the state keys `:hover`, `:focus-visible`, `:pressed` against the node\'s own interaction state, applied after every media block in that order (pressed wins). `src/style.ts resolveConditions` is the reference flattening and fixtures/style-conditions.json locks it. Still not in v1 (confirmed by the spike, kept by round 1): calc(), named grid lines, gridAutoFlow, justifyItems, order, zIndex (paint order = tree order, absolute nodes LAST among siblings, overlays stack by LAYER), per-side border colours (gpui paints ONE border colour per box; per-side WIDTHS are in), multi-value shorthands. After macro expansion a style VALUE may be a binding or a function call (a bound macro input, e.g. Progress fill width = percent{…}); the renderer resolves it at bind time and then applies it like an authored value; authors cannot write one (validateStyle refuses). Round 2 (docs/round-2-contract.md §2): `position: sticky` = relative in layout, then pinned inside the nearest scrolling ancestor (`overflow` scroll/auto, else the surface scroller) by its `top`/`bottom`/`left`/`right`/`inset*` offsets while its parent is in view; `backdropBlur` takes only `$blur.<name>` (blurs what is BEHIND the box through its translucent background; a platform without backdrop blur paints the background alone, so pair it with a translucent `backgroundColor`); `animation` names a keyframe set of `animations` (`animationDuration` = `$motion.<name>` only); `direction` may sit on ANY node and is inherited (flex rows, logical insets/paddings, `textAlign` start/end and mirrored glyphs follow the node\'s resolved direction).',
4
+ layout: {
5
+ display: { enum: ["flex", "grid", "block", "none"] },
6
+ flexDirection: { enum: ["row", "column", "row-reverse", "column-reverse"] },
7
+ flexWrap: { enum: ["nowrap", "wrap", "wrap-reverse"] },
8
+ justifyContent: { enum: ["flex-start", "flex-end", "start", "end", "center", "stretch", "space-between", "space-around", "space-evenly"] },
9
+ alignItems: { enum: ["flex-start", "flex-end", "start", "end", "center", "stretch", "baseline"] },
10
+ alignContent: { enum: ["flex-start", "flex-end", "start", "end", "center", "stretch", "space-between", "space-around", "space-evenly"] },
11
+ alignSelf: { enum: ["flex-start", "flex-end", "start", "end", "center", "stretch", "baseline"] },
12
+ justifySelf: { enum: ["flex-start", "flex-end", "start", "end", "center", "stretch", "baseline"] },
13
+ flexGrow: { type: "number" },
14
+ flexShrink: { type: "number" },
15
+ flexBasis: { type: "length" },
16
+ gap: { type: "length" },
17
+ rowGap: { type: "length" },
18
+ columnGap: { type: "length" },
19
+ direction: { enum: ["ltr", "rtl"] },
20
+ overflow: { enum: ["visible", "hidden", "clip", "scroll", "auto"] },
21
+ overflowX: { enum: ["visible", "hidden", "clip", "scroll", "auto"] },
22
+ overflowY: { enum: ["visible", "hidden", "clip", "scroll", "auto"] },
23
+ width: { type: "length" },
24
+ height: { type: "length" },
25
+ minWidth: { type: "length" },
26
+ minHeight: { type: "length" },
27
+ maxWidth: { type: "length" },
28
+ maxHeight: { type: "length" },
29
+ aspectRatio: { type: "ratio" },
30
+ position: { enum: ["relative", "absolute", "sticky"] },
31
+ top: { type: "length" },
32
+ right: { type: "length" },
33
+ bottom: { type: "length" },
34
+ left: { type: "length" },
35
+ inset: { type: "length" },
36
+ insetInlineStart: { type: "length" },
37
+ insetInlineEnd: { type: "length" },
38
+ insetBlockStart: { type: "length" },
39
+ insetBlockEnd: { type: "length" },
40
+ padding: { type: "length" },
41
+ paddingTop: { type: "length" },
42
+ paddingRight: { type: "length" },
43
+ paddingBottom: { type: "length" },
44
+ paddingLeft: { type: "length" },
45
+ paddingHorizontal: { type: "length" },
46
+ paddingVertical: { type: "length" },
47
+ paddingInlineStart: { type: "length" },
48
+ paddingInlineEnd: { type: "length" },
49
+ margin: { type: "length" },
50
+ marginTop: { type: "length" },
51
+ marginRight: { type: "length" },
52
+ marginBottom: { type: "length" },
53
+ marginLeft: { type: "length" },
54
+ marginHorizontal: { type: "length" },
55
+ marginVertical: { type: "length" },
56
+ marginInlineStart: { type: "length" },
57
+ marginInlineEnd: { type: "length" },
58
+ gridTemplateColumns: { type: "tracks" },
59
+ gridTemplateRows: { type: "tracks" },
60
+ gridTemplateAreas: { type: "areas" },
61
+ gridArea: { type: "string" },
62
+ gridColumn: { type: "string" },
63
+ gridRow: { type: "string" }
64
+ },
65
+ visual: {
66
+ backgroundColor: { type: "color" },
67
+ backgroundGradient: { type: "gradient" },
68
+ color: { type: "color" },
69
+ borderWidth: { type: "number", layoutEffect: true },
70
+ borderTopWidth: { type: "number", layoutEffect: true },
71
+ borderRightWidth: { type: "number", layoutEffect: true },
72
+ borderBottomWidth: { type: "number", layoutEffect: true },
73
+ borderLeftWidth: { type: "number", layoutEffect: true },
74
+ borderColor: { type: "color" },
75
+ borderStyle: { enum: ["solid", "dashed", "dotted"] },
76
+ borderRadius: { type: "length" },
77
+ borderTopLeftRadius: { type: "length" },
78
+ borderTopRightRadius: { type: "length" },
79
+ borderBottomRightRadius: { type: "length" },
80
+ borderBottomLeftRadius: { type: "length" },
81
+ opacity: { type: "number" },
82
+ boxShadow: { type: "token", group: "shadow" },
83
+ fontSize: { type: "length" },
84
+ fontWeight: { enum: [300, 400, 500, 600, 700, 800] },
85
+ lineHeight: { type: "length" },
86
+ letterSpacing: { type: "length" },
87
+ textAlign: { enum: ["left", "right", "center", "start", "end", "justify"] },
88
+ textDecoration: { enum: ["none", "underline", "line-through"] },
89
+ textTransform: { enum: ["none", "uppercase", "lowercase", "capitalize"] },
90
+ fontStyle: { enum: ["normal", "italic"] },
91
+ fontFamily: { type: "token", group: "type.family" },
92
+ transition: { type: "token", group: "motion" },
93
+ transitionEasing: { type: "token", group: "ease" },
94
+ transform: { type: "transform" },
95
+ visibility: { enum: ["visible", "hidden"] },
96
+ pointerEvents: { enum: ["auto", "none"] },
97
+ userSelect: { enum: ["auto", "none", "text"] },
98
+ cursor: { enum: ["auto", "default", "pointer", "text", "not-allowed", "grab", "grabbing", "move", "col-resize", "row-resize"] },
99
+ backdropBlur: { type: "token", group: "blur" },
100
+ animation: { enum: ["pulse", "spin", "fade-in", "slide-in-up", "slide-in-down", "slide-in-left", "slide-in-right", "shimmer"] },
101
+ animationDuration: { type: "token", group: "motion" }
102
+ },
103
+ animations: {
104
+ $comment: "Round 2 (docs/round-2-contract.md §2): the keyframes behind the `animation` key. Channels: `opacity` (multiplies the node's), `translateX`/`translateY` (px), `rotate` (deg), `scale`, applied OUTSIDE the node's own `transform` about the box centre; `band` = the shimmer highlight's position across the box (-1 = one box width before it, 1 = one after), painted over the content and clipped to the border box. Duration = the theme's `duration` token (or the node's `animationDuration`) × `factor`; `easing` applies PER keyframe segment (CSS) and is a `$ease` token or `linear`; `iterations` = a count or `infinite`. An animation starts when the node enters the tree (first paint, `visible` turning true, a template item appearing). Reduced motion: no animation, the node shows the keyframe at `rest` (0 = the first, 1 = the last; shimmer draws no band). Channels are PHYSICAL, like `transform`: `direction` never mirrors them (in rtl too, `slide-in-left` moves leftwards and the shimmer band sweeps left → right).",
105
+ pulse: { duration: "$motion.slow", factor: 7, easing: "$ease.standard", iterations: "infinite", rest: 0, keyframes: [{ offset: 0, opacity: 1 }, { offset: 0.5, opacity: 0.5 }, { offset: 1, opacity: 1 }] },
106
+ spin: { duration: "$motion.slow", factor: 4, easing: "linear", iterations: "infinite", rest: 0, keyframes: [{ offset: 0, rotate: 0 }, { offset: 1, rotate: 360 }] },
107
+ "fade-in": { duration: "$motion.standard", factor: 1, easing: "$ease.decelerate", iterations: 1, rest: 1, keyframes: [{ offset: 0, opacity: 0 }, { offset: 1, opacity: 1 }] },
108
+ "slide-in-up": { duration: "$motion.standard", factor: 1, easing: "$ease.decelerate", iterations: 1, rest: 1, keyframes: [{ offset: 0, opacity: 0, translateY: 8 }, { offset: 1, opacity: 1, translateY: 0 }] },
109
+ "slide-in-down": { duration: "$motion.standard", factor: 1, easing: "$ease.decelerate", iterations: 1, rest: 1, keyframes: [{ offset: 0, opacity: 0, translateY: -8 }, { offset: 1, opacity: 1, translateY: 0 }] },
110
+ "slide-in-left": { duration: "$motion.standard", factor: 1, easing: "$ease.decelerate", iterations: 1, rest: 1, keyframes: [{ offset: 0, opacity: 0, translateX: 8 }, { offset: 1, opacity: 1, translateX: 0 }] },
111
+ "slide-in-right": { duration: "$motion.standard", factor: 1, easing: "$ease.decelerate", iterations: 1, rest: 1, keyframes: [{ offset: 0, opacity: 0, translateX: -8 }, { offset: 1, opacity: 1, translateX: 0 }] },
112
+ shimmer: { duration: "$motion.slow", factor: 5, easing: "linear", iterations: "infinite", rest: 0, keyframes: [{ offset: 0, band: -1 }, { offset: 1, band: 1 }], band: { color: "$color.background", stops: [{ offset: 0, alpha: 0 }, { offset: 0.5, alpha: 0.5 }, { offset: 1, alpha: 0 }] } }
113
+ },
114
+ conditions: {
115
+ media: "^@media \\((min-width|max-width|min-height|max-height): (\\d+(\\.\\d+)?px|\\$breakpoint\\.[a-zA-Z0-9]+)\\)$|^@media \\(orientation: (portrait|landscape)\\)$|^@media \\(hover: (hover|none)\\)$|^@media \\(prefers-reduced-motion: (reduce|no-preference)\\)$",
116
+ states: [":hover", ":focus-visible", ":pressed"],
117
+ transform: "^((translate\\(-?\\d+(\\.\\d+)?px, -?\\d+(\\.\\d+)?px\\)|scale\\(-?\\d+(\\.\\d+)?\\)|rotate\\(-?\\d+(\\.\\d+)?deg\\))( (?=\\S)|$))+$"
118
+ },
119
+ textShimmer: {
120
+ $comment: "EXP-1324: the Text `shimmer` prop (a running TraceItem title) = packages/design-tokens motion.shimmer (shadcn's `shimmer` utility), copied here because the SDK imports nothing from the app (src/text-shimmer.test.ts keeps them equal). The glyphs are filled with a linear gradient at 90deg + `angleDeg` (CSS angle: 90deg = left → right): base = the text colour, highlight (dark mode) = the text colour in OKLCH at lightness min(1, max(`highlightLightnessMin`, L + `highlightLightnessBoost`)), same a/b, alpha min(1, alpha + `highlightAlphaBoost`); light mode = the text colour at alpha × `lightAlphaFactor`; mid = the 50% OKLab mix of the two, alpha-premultiplied. Stops: base @ 50% - spread, mid @ 50% - spread/2, highlight @ 50%, mid @ 50% + spread/2, base @ 50% + spread (spread = `spreadPx`). The gradient is 200% of the text box width + 2 × spread wide and slides linearly from CSS background-position `100% 0` (its right edge on the box's right edge) to `0 0` (its left edge on the box's left edge) over `durationMs`, forever; rtl reverses. Reduced motion = the plain text. src/text-shimmer.ts textShimmer(colour, dark) is the reference (the Rust core `text_shimmer`, FFI `text_shimmer_json`); fixtures/text-shimmer.json locks the colours.",
121
+ durationMs: 2000,
122
+ angleDeg: 20,
123
+ spreadPx: 60,
124
+ highlightLightnessMin: 0.8,
125
+ highlightLightnessBoost: 0.4,
126
+ highlightAlphaBoost: 0.4,
127
+ lightAlphaFactor: 0.2
128
+ }
129
+ };
130
+
131
+ export { style_default };
132
+
133
+ //# debugId=3978F273C7A7A99664756E2164756E21
134
+ //# sourceMappingURL=index-njt7yzzm.js.map
@@ -0,0 +1,9 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [
5
+ ],
6
+ "mappings": "",
7
+ "debugId": "3978F273C7A7A99664756E2164756E21",
8
+ "names": []
9
+ }