@hjmds/design-contracts 1.10.0 → 1.11.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 (189) hide show
  1. package/dist/action-session.d.ts +47 -0
  2. package/dist/action-session.d.ts.map +1 -0
  3. package/dist/action-session.js +60 -0
  4. package/dist/action-session.js.map +1 -0
  5. package/dist/activity-heatmap.d.ts +22 -0
  6. package/dist/activity-heatmap.d.ts.map +1 -0
  7. package/dist/activity-heatmap.js +29 -0
  8. package/dist/activity-heatmap.js.map +1 -0
  9. package/dist/auth-screen.d.ts +4 -0
  10. package/dist/auth-screen.d.ts.map +1 -1
  11. package/dist/auth-screen.js +2 -0
  12. package/dist/auth-screen.js.map +1 -1
  13. package/dist/avatar-fallback.d.ts +25 -0
  14. package/dist/avatar-fallback.d.ts.map +1 -0
  15. package/dist/avatar-fallback.js +17 -0
  16. package/dist/avatar-fallback.js.map +1 -0
  17. package/dist/behaviors.d.ts +2 -2
  18. package/dist/bottom-navigation-defaults.d.ts +1 -1
  19. package/dist/bottom-navigation-defaults.d.ts.map +1 -1
  20. package/dist/bottom-navigation-defaults.js.map +1 -1
  21. package/dist/bottom-navigation.d.ts.map +1 -1
  22. package/dist/bottom-navigation.js +5 -1
  23. package/dist/bottom-navigation.js.map +1 -1
  24. package/dist/catalog.d.ts +29 -1
  25. package/dist/catalog.d.ts.map +1 -1
  26. package/dist/code-block.d.ts +23 -0
  27. package/dist/code-block.d.ts.map +1 -0
  28. package/dist/code-block.js +13 -0
  29. package/dist/code-block.js.map +1 -0
  30. package/dist/component-definitions.d.ts +2 -3
  31. package/dist/component-definitions.d.ts.map +1 -1
  32. package/dist/component-definitions.js +1 -2
  33. package/dist/component-definitions.js.map +1 -1
  34. package/dist/component-recipes.d.ts +25 -1
  35. package/dist/component-recipes.d.ts.map +1 -1
  36. package/dist/component-recipes.js +12 -1
  37. package/dist/component-recipes.js.map +1 -1
  38. package/dist/component-references.d.ts +0 -6
  39. package/dist/component-references.d.ts.map +1 -1
  40. package/dist/component-references.js +0 -5
  41. package/dist/component-references.js.map +1 -1
  42. package/dist/content-transition.d.ts +17 -0
  43. package/dist/content-transition.d.ts.map +1 -0
  44. package/dist/content-transition.js +15 -0
  45. package/dist/content-transition.js.map +1 -0
  46. package/dist/duration-field.d.ts +22 -0
  47. package/dist/duration-field.d.ts.map +1 -0
  48. package/dist/duration-field.js +20 -0
  49. package/dist/duration-field.js.map +1 -0
  50. package/dist/effect-surface.d.ts +29 -0
  51. package/dist/effect-surface.d.ts.map +1 -0
  52. package/dist/effect-surface.js +26 -0
  53. package/dist/effect-surface.js.map +1 -0
  54. package/dist/gooey-navigation.d.ts +13 -0
  55. package/dist/gooey-navigation.d.ts.map +1 -0
  56. package/dist/gooey-navigation.js +11 -0
  57. package/dist/gooey-navigation.js.map +1 -0
  58. package/dist/gravity-letters.d.ts +12 -0
  59. package/dist/gravity-letters.d.ts.map +1 -0
  60. package/dist/gravity-letters.js +11 -0
  61. package/dist/gravity-letters.js.map +1 -0
  62. package/dist/grid-reveal.d.ts +8 -0
  63. package/dist/grid-reveal.d.ts.map +1 -0
  64. package/dist/grid-reveal.js +5 -0
  65. package/dist/grid-reveal.js.map +1 -0
  66. package/dist/internal/object-validation.d.ts +3 -0
  67. package/dist/internal/object-validation.d.ts.map +1 -0
  68. package/dist/internal/object-validation.js +12 -0
  69. package/dist/internal/object-validation.js.map +1 -0
  70. package/dist/internal/thinking-orb/braid.d.ts.map +1 -1
  71. package/dist/internal/thinking-orb/braid.js +2 -9
  72. package/dist/internal/thinking-orb/braid.js.map +1 -1
  73. package/dist/internal/thinking-orb/core.d.ts +1 -0
  74. package/dist/internal/thinking-orb/core.d.ts.map +1 -1
  75. package/dist/internal/thinking-orb/core.js +12 -0
  76. package/dist/internal/thinking-orb/core.js.map +1 -1
  77. package/dist/internal/thinking-orb/presentation.d.ts +4 -0
  78. package/dist/internal/thinking-orb/presentation.d.ts.map +1 -0
  79. package/dist/internal/thinking-orb/presentation.js +28 -0
  80. package/dist/internal/thinking-orb/presentation.js.map +1 -0
  81. package/dist/internal/thinking-orb/ribbon.d.ts.map +1 -1
  82. package/dist/internal/thinking-orb/ribbon.js +2 -9
  83. package/dist/internal/thinking-orb/ribbon.js.map +1 -1
  84. package/dist/layout.d.ts +0 -5
  85. package/dist/layout.d.ts.map +1 -1
  86. package/dist/layout.js +0 -7
  87. package/dist/layout.js.map +1 -1
  88. package/dist/otp-field.d.ts +2 -0
  89. package/dist/otp-field.d.ts.map +1 -1
  90. package/dist/otp-field.js.map +1 -1
  91. package/dist/popover.d.ts.map +1 -1
  92. package/dist/popover.js +3 -12
  93. package/dist/popover.js.map +1 -1
  94. package/dist/reactions.d.ts +10 -0
  95. package/dist/reactions.d.ts.map +1 -0
  96. package/dist/reactions.js +20 -0
  97. package/dist/reactions.js.map +1 -0
  98. package/dist/scroll-progress.d.ts +8 -0
  99. package/dist/scroll-progress.d.ts.map +1 -0
  100. package/dist/scroll-progress.js +10 -0
  101. package/dist/scroll-progress.js.map +1 -0
  102. package/dist/task-list.d.ts +7 -0
  103. package/dist/task-list.d.ts.map +1 -0
  104. package/dist/task-list.js +4 -0
  105. package/dist/task-list.js.map +1 -0
  106. package/dist/theme-studio.d.ts +14 -0
  107. package/dist/theme-studio.d.ts.map +1 -0
  108. package/dist/theme-studio.js +16 -0
  109. package/dist/theme-studio.js.map +1 -0
  110. package/dist/thinking-orb.d.ts +4 -2
  111. package/dist/thinking-orb.d.ts.map +1 -1
  112. package/dist/thinking-orb.js +8 -3
  113. package/dist/thinking-orb.js.map +1 -1
  114. package/dist/toast-liquid.d.ts +4 -4
  115. package/dist/toast-liquid.d.ts.map +1 -1
  116. package/dist/toast-liquid.js +11 -10
  117. package/dist/toast-liquid.js.map +1 -1
  118. package/dist/toast.d.ts +4 -4
  119. package/dist/toast.d.ts.map +1 -1
  120. package/dist/toast.js +4 -3
  121. package/dist/toast.js.map +1 -1
  122. package/dist/tooltip.d.ts.map +1 -1
  123. package/dist/tooltip.js +3 -12
  124. package/dist/tooltip.js.map +1 -1
  125. package/dist/version.d.ts +1 -1
  126. package/dist/version.js +1 -1
  127. package/dist/version.js.map +1 -1
  128. package/dist/voice-note.d.ts +20 -0
  129. package/dist/voice-note.d.ts.map +1 -0
  130. package/dist/voice-note.js +16 -0
  131. package/dist/voice-note.js.map +1 -0
  132. package/docs/action-session.md +73 -0
  133. package/docs/activity-heatmap.md +32 -0
  134. package/docs/anchor.md +1 -1
  135. package/docs/auth-screen.md +44 -4
  136. package/docs/authoring-brief.md +5 -0
  137. package/docs/avatar-fallback.md +74 -0
  138. package/docs/bottom-navigation.md +16 -1
  139. package/docs/breadcrumb.md +1 -1
  140. package/docs/calendar.md +1 -1
  141. package/docs/cascader.md +1 -1
  142. package/docs/code-block.md +32 -0
  143. package/docs/command-palette.md +1 -1
  144. package/docs/compound-controls.md +83 -0
  145. package/docs/confirm-popover.md +1 -1
  146. package/docs/consumer-policy.md +30 -23
  147. package/docs/cross-platform-core-normalization.md +19 -21
  148. package/docs/data-table.md +8 -5
  149. package/docs/dialog.md +2 -0
  150. package/docs/effect-surface.md +50 -0
  151. package/docs/floating-action-button.md +1 -1
  152. package/docs/folder-preview.md +26 -0
  153. package/docs/generated/component-maturity.md +1 -1
  154. package/docs/generated/renderer-evidence.json +3 -3
  155. package/docs/generated/renderer-evidence.md +1 -1
  156. package/docs/generated/showcase-manifest.json +1 -1
  157. package/docs/gooey-navigation.md +36 -0
  158. package/docs/gravity-letters.md +26 -0
  159. package/docs/grid-reveal.md +11 -0
  160. package/docs/icon.md +26 -0
  161. package/docs/image.md +2 -2
  162. package/docs/layout.md +1 -2
  163. package/docs/migration-0.5.md +4 -1
  164. package/docs/migration-native-legacy-removal.md +59 -0
  165. package/docs/navigation-bar.md +28 -0
  166. package/docs/optional-adapters.md +24 -1
  167. package/docs/otp-field.md +15 -0
  168. package/docs/pagination.md +1 -1
  169. package/docs/popover.md +2 -2
  170. package/docs/product-adoption-1.4.md +7 -0
  171. package/docs/product-audit-2026-09-15.md +1 -1
  172. package/docs/provider-button.md +6 -3
  173. package/docs/rating.md +1 -1
  174. package/docs/react-native-completion.md +4 -4
  175. package/docs/screen-chrome.md +1 -1
  176. package/docs/scroll-progress.md +29 -0
  177. package/docs/sheet.md +2 -0
  178. package/docs/sidebar.md +6 -0
  179. package/docs/splitter.md +1 -1
  180. package/docs/step-player.md +16 -0
  181. package/docs/task-list.md +32 -0
  182. package/docs/theme-studio.md +13 -0
  183. package/docs/thinking-orb.md +9 -2
  184. package/docs/time-picker.md +1 -1
  185. package/docs/toast.md +8 -7
  186. package/docs/tour.md +1 -1
  187. package/docs/tree-select.md +2 -2
  188. package/docs/voice-note.md +19 -0
  189. package/package.json +91 -1
@@ -126,11 +126,6 @@ export function summarizeAntDesignCoverage(entries = componentCatalog) {
126
126
  fullyMature,
127
127
  partiallyMature,
128
128
  plannedOnly,
129
- // Backward-compatible aliases. These names predate the evidence registry
130
- // and must not be used as renderer or preview counts in new UI.
131
- fullyPreviewable: fullyMature,
132
- partiallyPreviewable: partiallyMature,
133
- contractOnly: plannedOnly,
134
129
  relationships,
135
130
  };
136
131
  }
@@ -1 +1 @@
1
- {"version":3,"file":"component-references.js","sourceRoot":"","sources":["../src/component-references.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n componentCatalog,\n type ComponentCatalogEntry,\n type ComponentName,\n type ComponentStatus,\n} from \"./catalog.js\";\nimport {\n componentDefinitions,\n componentIds,\n type ComponentId,\n} from \"./component-definitions.js\";\n\nexport type ReferenceRelationship = \"direct\" | \"adapted\" | \"decomposed\";\n\nexport type AntDesignCategory =\n | \"general\"\n | \"layout\"\n | \"navigation\"\n | \"data-entry\"\n | \"data-display\"\n | \"feedback\"\n | \"other\";\n\nexport type AntDesignReferenceComponent = Readonly<{\n name: string;\n category: AntDesignCategory;\n targets: readonly ComponentId[];\n relationship: ReferenceRelationship;\n lifecycle?: \"deprecated\" | \"new\";\n}>;\n\ntype AntDesignReferenceSourceComponent = Omit<AntDesignReferenceComponent, \"targets\"> &\n Readonly<{ targets: readonly ComponentName[] }>;\n\nexport const antDesignReferenceSystem = {\n id: \"ant-design\",\n name: \"Ant Design\",\n version: \"6.6.1\",\n capturedAt: \"2026-08-20\",\n scope: \"core\",\n source: \"https://ant.design/components/overview/\",\n} as const;\n\n/**\n * Ant Design is a coverage benchmark, not a runtime or API dependency.\n * Every reference component maps to one or more stable HJM component IDs so broad\n * ecosystem coverage can be tracked without copying Ant Design's appearance,\n * prop names, or Web-only assumptions into the shared core.\n */\nconst antDesignReferenceSources = [\n { name: \"Button\", category: \"general\", targets: [\"Button\"], relationship: \"direct\" },\n { name: \"FloatButton\", category: \"general\", targets: [\"FloatingActionButton\"], relationship: \"adapted\" },\n { name: \"Icon\", category: \"general\", targets: [\"Icon\"], relationship: \"direct\" },\n { name: \"Typography\", category: \"general\", targets: [\"Text\", \"Link\"], relationship: \"decomposed\" },\n\n { name: \"Divider\", category: \"layout\", targets: [\"Divider\"], relationship: \"direct\" },\n { name: \"Flex\", category: \"layout\", targets: [\"Stack\"], relationship: \"adapted\" },\n { name: \"Grid\", category: \"layout\", targets: [\"Grid\"], relationship: \"direct\" },\n { name: \"Layout\", category: \"layout\", targets: [\"Layout\"], relationship: \"direct\" },\n { name: \"Masonry\", category: \"layout\", targets: [\"Masonry\"], relationship: \"direct\" },\n { name: \"Space\", category: \"layout\", targets: [\"Stack\"], relationship: \"adapted\" },\n { name: \"Splitter\", category: \"layout\", targets: [\"Splitter\"], relationship: \"direct\" },\n\n { name: \"Anchor\", category: \"navigation\", targets: [\"Anchor\"], relationship: \"direct\" },\n { name: \"Breadcrumb\", category: \"navigation\", targets: [\"Breadcrumb\"], relationship: \"direct\" },\n { name: \"Dropdown\", category: \"navigation\", targets: [\"Menu\"], relationship: \"adapted\" },\n { name: \"Menu\", category: \"navigation\", targets: [\"Menu\"], relationship: \"direct\" },\n { name: \"Pagination\", category: \"navigation\", targets: [\"Pagination\"], relationship: \"direct\" },\n { name: \"Steps\", category: \"navigation\", targets: [\"Steps\"], relationship: \"direct\" },\n { name: \"Tabs\", category: \"navigation\", targets: [\"Tabs\"], relationship: \"direct\" },\n\n { name: \"AutoComplete\", category: \"data-entry\", targets: [\"Combobox\"], relationship: \"adapted\" },\n { name: \"Cascader\", category: \"data-entry\", targets: [\"Popover\", \"Tree\"], relationship: \"decomposed\" },\n { name: \"Checkbox\", category: \"data-entry\", targets: [\"Checkbox\", \"CheckboxGroup\"], relationship: \"decomposed\" },\n { name: \"ColorPicker\", category: \"data-entry\", targets: [\"ColorPicker\"], relationship: \"direct\" },\n { name: \"DatePicker\", category: \"data-entry\", targets: [\"DatePicker\"], relationship: \"direct\" },\n { name: \"Form\", category: \"data-entry\", targets: [\"Form\", \"Field\"], relationship: \"decomposed\" },\n { name: \"Input\", category: \"data-entry\", targets: [\"Field\", \"TextArea\", \"SearchField\", \"PasswordField\", \"OtpField\"], relationship: \"decomposed\" },\n { name: \"InputNumber\", category: \"data-entry\", targets: [\"NumberField\"], relationship: \"adapted\" },\n { name: \"Mentions\", category: \"data-entry\", targets: [\"Mentions\"], relationship: \"direct\" },\n { name: \"Radio\", category: \"data-entry\", targets: [\"Radio\", \"RadioGroup\"], relationship: \"decomposed\" },\n { name: \"Rate\", category: \"data-entry\", targets: [\"Slider\", \"Statistic\"], relationship: \"decomposed\" },\n { name: \"Select\", category: \"data-entry\", targets: [\"Select\"], relationship: \"direct\" },\n { name: \"Slider\", category: \"data-entry\", targets: [\"Slider\"], relationship: \"direct\" },\n { name: \"Switch\", category: \"data-entry\", targets: [\"Switch\"], relationship: \"direct\" },\n { name: \"TimePicker\", category: \"data-entry\", targets: [\"Select\"], relationship: \"adapted\" },\n { name: \"Transfer\", category: \"data-entry\", targets: [\"TransferList\"], relationship: \"adapted\" },\n { name: \"TreeSelect\", category: \"data-entry\", targets: [\"Popover\", \"Tree\"], relationship: \"decomposed\" },\n { name: \"Upload\", category: \"data-entry\", targets: [\"FilePicker\", \"UploadItem\"], relationship: \"decomposed\" },\n\n { name: \"Avatar\", category: \"data-display\", targets: [\"Avatar\"], relationship: \"direct\" },\n { name: \"Badge\", category: \"data-display\", targets: [\"Badge\", \"CounterBadge\"], relationship: \"decomposed\" },\n { name: \"Calendar\", category: \"data-display\", targets: [\"Calendar\"], relationship: \"direct\" },\n { name: \"Card\", category: \"data-display\", targets: [\"Card\"], relationship: \"direct\" },\n { name: \"Carousel\", category: \"data-display\", targets: [\"Carousel\"], relationship: \"direct\" },\n { name: \"Collapse\", category: \"data-display\", targets: [\"Accordion\"], relationship: \"adapted\" },\n { name: \"Descriptions\", category: \"data-display\", targets: [\"DescriptionList\"], relationship: \"adapted\" },\n { name: \"Empty\", category: \"data-display\", targets: [\"EmptyState\"], relationship: \"adapted\" },\n { name: \"Image\", category: \"data-display\", targets: [\"Image\"], relationship: \"direct\" },\n { name: \"List\", category: \"data-display\", targets: [\"List\", \"ListRow\"], relationship: \"decomposed\", lifecycle: \"deprecated\" },\n { name: \"Listy\", category: \"data-display\", targets: [\"VirtualList\"], relationship: \"adapted\", lifecycle: \"new\" },\n { name: \"Popover\", category: \"data-display\", targets: [\"Popover\"], relationship: \"direct\" },\n { name: \"QRCode\", category: \"data-display\", targets: [\"QRCode\"], relationship: \"direct\" },\n { name: \"Segmented\", category: \"data-display\", targets: [\"SegmentedControl\"], relationship: \"adapted\" },\n { name: \"Statistic\", category: \"data-display\", targets: [\"Statistic\"], relationship: \"direct\" },\n { name: \"Table\", category: \"data-display\", targets: [\"DataTable\"], relationship: \"adapted\" },\n { name: \"Tag\", category: \"data-display\", targets: [\"Tag\"], relationship: \"direct\" },\n { name: \"Timeline\", category: \"data-display\", targets: [\"Timeline\"], relationship: \"direct\" },\n { name: \"Tooltip\", category: \"data-display\", targets: [\"Tooltip\"], relationship: \"direct\" },\n { name: \"Tour\", category: \"data-display\", targets: [\"Tour\"], relationship: \"direct\" },\n { name: \"Tree\", category: \"data-display\", targets: [\"Tree\"], relationship: \"direct\" },\n\n { name: \"Alert\", category: \"feedback\", targets: [\"Notice\"], relationship: \"adapted\" },\n { name: \"Drawer\", category: \"feedback\", targets: [\"Sheet\", \"SidePanel\"], relationship: \"decomposed\" },\n { name: \"Message\", category: \"feedback\", targets: [\"Toast\"], relationship: \"adapted\" },\n { name: \"Modal\", category: \"feedback\", targets: [\"Dialog\", \"AlertDialog\"], relationship: \"decomposed\" },\n { name: \"Notification\", category: \"feedback\", targets: [\"Toast\"], relationship: \"adapted\" },\n { name: \"Popconfirm\", category: \"feedback\", targets: [\"Popover\", \"AlertDialog\"], relationship: \"decomposed\" },\n { name: \"Progress\", category: \"feedback\", targets: [\"Progress\"], relationship: \"direct\" },\n { name: \"Result\", category: \"feedback\", targets: [\"Result\"], relationship: \"direct\" },\n { name: \"Skeleton\", category: \"feedback\", targets: [\"Skeleton\"], relationship: \"direct\" },\n { name: \"Spin\", category: \"feedback\", targets: [\"Spinner\"], relationship: \"adapted\" },\n { name: \"Watermark\", category: \"feedback\", targets: [\"Watermark\"], relationship: \"direct\" },\n\n { name: \"Affix\", category: \"other\", targets: [\"Affix\"], relationship: \"direct\" },\n { name: \"ConfigProvider\", category: \"other\", targets: [\"DesignSystemProvider\"], relationship: \"adapted\" },\n] as const satisfies readonly AntDesignReferenceSourceComponent[];\n\nexport const antDesignReferenceComponents: readonly AntDesignReferenceComponent[] =\n antDesignReferenceSources.map((reference) => ({\n ...reference,\n targets: reference.targets.map((target) => componentIds[target]),\n }));\n\nexport type AntDesignComponentName = (typeof antDesignReferenceSources)[number][\"name\"];\n\nexport type ReferenceCoverageSummary = Readonly<{\n total: number;\n tracked: number;\n /** Every HJM target has reached stable or beta maturity. */\n fullyMature: number;\n /** At least one, but not every, HJM target has reached stable or beta maturity. */\n partiallyMature: number;\n /** No HJM target has moved beyond planned maturity. */\n plannedOnly: number;\n /** @deprecated Status maturity is not proof that a preview renderer exists. */\n fullyPreviewable: number;\n /** @deprecated Status maturity is not proof that a preview renderer exists. */\n partiallyPreviewable: number;\n /** @deprecated Use `plannedOnly`. */\n contractOnly: number;\n relationships: Readonly<Record<ReferenceRelationship, number>>;\n}>;\n\nexport function getAntDesignReferencesFor(\n componentNameOrId: string,\n): readonly AntDesignReferenceComponent[] {\n const definition = componentDefinitions.find(\n ({ id, name }) => id === componentNameOrId || name === componentNameOrId,\n );\n if (!definition) return [];\n return antDesignReferenceComponents.filter(({ targets }) =>\n targets.includes(definition.id),\n );\n}\n\nexport function summarizeAntDesignCoverage(\n entries: readonly ComponentCatalogEntry[] = componentCatalog,\n): ReferenceCoverageSummary {\n const statusById = new Map(\n entries.map((entry) => [componentIds[entry.name as ComponentName], entry.status]),\n );\n const relationships: Record<ReferenceRelationship, number> = {\n direct: 0,\n adapted: 0,\n decomposed: 0,\n };\n let tracked = 0;\n let fullyMature = 0;\n let partiallyMature = 0;\n\n for (const reference of antDesignReferenceComponents) {\n relationships[reference.relationship] += 1;\n const targetStatuses = reference.targets\n .map((target) => statusById.get(target))\n .filter((status): status is ComponentStatus => status !== undefined);\n if (targetStatuses.length === reference.targets.length) tracked += 1;\n const matureTargets = targetStatuses.filter(\n (status) => status === \"stable\" || status === \"beta\",\n ).length;\n if (matureTargets === reference.targets.length) fullyMature += 1;\n else if (matureTargets > 0) partiallyMature += 1;\n }\n\n const plannedOnly = antDesignReferenceComponents.length - fullyMature - partiallyMature;\n\n return {\n total: antDesignReferenceComponents.length,\n tracked,\n fullyMature,\n partiallyMature,\n plannedOnly,\n // Backward-compatible aliases. These names predate the evidence registry\n // and must not be used as renderer or preview counts in new UI.\n fullyPreviewable: fullyMature,\n partiallyPreviewable: partiallyMature,\n contractOnly: plannedOnly,\n relationships,\n };\n}\n"]}
1
+ {"version":3,"file":"component-references.js","sourceRoot":"","sources":["../src/component-references.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n componentCatalog,\n type ComponentCatalogEntry,\n type ComponentName,\n type ComponentStatus,\n} from \"./catalog.js\";\nimport {\n componentDefinitions,\n componentIds,\n type ComponentId,\n} from \"./component-definitions.js\";\n\nexport type ReferenceRelationship = \"direct\" | \"adapted\" | \"decomposed\";\n\nexport type AntDesignCategory =\n | \"general\"\n | \"layout\"\n | \"navigation\"\n | \"data-entry\"\n | \"data-display\"\n | \"feedback\"\n | \"other\";\n\nexport type AntDesignReferenceComponent = Readonly<{\n name: string;\n category: AntDesignCategory;\n targets: readonly ComponentId[];\n relationship: ReferenceRelationship;\n lifecycle?: \"deprecated\" | \"new\";\n}>;\n\ntype AntDesignReferenceSourceComponent = Omit<AntDesignReferenceComponent, \"targets\"> &\n Readonly<{ targets: readonly ComponentName[] }>;\n\nexport const antDesignReferenceSystem = {\n id: \"ant-design\",\n name: \"Ant Design\",\n version: \"6.6.1\",\n capturedAt: \"2026-08-20\",\n scope: \"core\",\n source: \"https://ant.design/components/overview/\",\n} as const;\n\n/**\n * Ant Design is a coverage benchmark, not a runtime or API dependency.\n * Every reference component maps to one or more stable HJM component IDs so broad\n * ecosystem coverage can be tracked without copying Ant Design's appearance,\n * prop names, or Web-only assumptions into the shared core.\n */\nconst antDesignReferenceSources = [\n { name: \"Button\", category: \"general\", targets: [\"Button\"], relationship: \"direct\" },\n { name: \"FloatButton\", category: \"general\", targets: [\"FloatingActionButton\"], relationship: \"adapted\" },\n { name: \"Icon\", category: \"general\", targets: [\"Icon\"], relationship: \"direct\" },\n { name: \"Typography\", category: \"general\", targets: [\"Text\", \"Link\"], relationship: \"decomposed\" },\n\n { name: \"Divider\", category: \"layout\", targets: [\"Divider\"], relationship: \"direct\" },\n { name: \"Flex\", category: \"layout\", targets: [\"Stack\"], relationship: \"adapted\" },\n { name: \"Grid\", category: \"layout\", targets: [\"Grid\"], relationship: \"direct\" },\n { name: \"Layout\", category: \"layout\", targets: [\"Layout\"], relationship: \"direct\" },\n { name: \"Masonry\", category: \"layout\", targets: [\"Masonry\"], relationship: \"direct\" },\n { name: \"Space\", category: \"layout\", targets: [\"Stack\"], relationship: \"adapted\" },\n { name: \"Splitter\", category: \"layout\", targets: [\"Splitter\"], relationship: \"direct\" },\n\n { name: \"Anchor\", category: \"navigation\", targets: [\"Anchor\"], relationship: \"direct\" },\n { name: \"Breadcrumb\", category: \"navigation\", targets: [\"Breadcrumb\"], relationship: \"direct\" },\n { name: \"Dropdown\", category: \"navigation\", targets: [\"Menu\"], relationship: \"adapted\" },\n { name: \"Menu\", category: \"navigation\", targets: [\"Menu\"], relationship: \"direct\" },\n { name: \"Pagination\", category: \"navigation\", targets: [\"Pagination\"], relationship: \"direct\" },\n { name: \"Steps\", category: \"navigation\", targets: [\"Steps\"], relationship: \"direct\" },\n { name: \"Tabs\", category: \"navigation\", targets: [\"Tabs\"], relationship: \"direct\" },\n\n { name: \"AutoComplete\", category: \"data-entry\", targets: [\"Combobox\"], relationship: \"adapted\" },\n { name: \"Cascader\", category: \"data-entry\", targets: [\"Popover\", \"Tree\"], relationship: \"decomposed\" },\n { name: \"Checkbox\", category: \"data-entry\", targets: [\"Checkbox\", \"CheckboxGroup\"], relationship: \"decomposed\" },\n { name: \"ColorPicker\", category: \"data-entry\", targets: [\"ColorPicker\"], relationship: \"direct\" },\n { name: \"DatePicker\", category: \"data-entry\", targets: [\"DatePicker\"], relationship: \"direct\" },\n { name: \"Form\", category: \"data-entry\", targets: [\"Form\", \"Field\"], relationship: \"decomposed\" },\n { name: \"Input\", category: \"data-entry\", targets: [\"Field\", \"TextArea\", \"SearchField\", \"PasswordField\", \"OtpField\"], relationship: \"decomposed\" },\n { name: \"InputNumber\", category: \"data-entry\", targets: [\"NumberField\"], relationship: \"adapted\" },\n { name: \"Mentions\", category: \"data-entry\", targets: [\"Mentions\"], relationship: \"direct\" },\n { name: \"Radio\", category: \"data-entry\", targets: [\"Radio\", \"RadioGroup\"], relationship: \"decomposed\" },\n { name: \"Rate\", category: \"data-entry\", targets: [\"Slider\", \"Statistic\"], relationship: \"decomposed\" },\n { name: \"Select\", category: \"data-entry\", targets: [\"Select\"], relationship: \"direct\" },\n { name: \"Slider\", category: \"data-entry\", targets: [\"Slider\"], relationship: \"direct\" },\n { name: \"Switch\", category: \"data-entry\", targets: [\"Switch\"], relationship: \"direct\" },\n { name: \"TimePicker\", category: \"data-entry\", targets: [\"Select\"], relationship: \"adapted\" },\n { name: \"Transfer\", category: \"data-entry\", targets: [\"TransferList\"], relationship: \"adapted\" },\n { name: \"TreeSelect\", category: \"data-entry\", targets: [\"Popover\", \"Tree\"], relationship: \"decomposed\" },\n { name: \"Upload\", category: \"data-entry\", targets: [\"FilePicker\", \"UploadItem\"], relationship: \"decomposed\" },\n\n { name: \"Avatar\", category: \"data-display\", targets: [\"Avatar\"], relationship: \"direct\" },\n { name: \"Badge\", category: \"data-display\", targets: [\"Badge\", \"CounterBadge\"], relationship: \"decomposed\" },\n { name: \"Calendar\", category: \"data-display\", targets: [\"Calendar\"], relationship: \"direct\" },\n { name: \"Card\", category: \"data-display\", targets: [\"Card\"], relationship: \"direct\" },\n { name: \"Carousel\", category: \"data-display\", targets: [\"Carousel\"], relationship: \"direct\" },\n { name: \"Collapse\", category: \"data-display\", targets: [\"Accordion\"], relationship: \"adapted\" },\n { name: \"Descriptions\", category: \"data-display\", targets: [\"DescriptionList\"], relationship: \"adapted\" },\n { name: \"Empty\", category: \"data-display\", targets: [\"EmptyState\"], relationship: \"adapted\" },\n { name: \"Image\", category: \"data-display\", targets: [\"Image\"], relationship: \"direct\" },\n { name: \"List\", category: \"data-display\", targets: [\"List\", \"ListRow\"], relationship: \"decomposed\", lifecycle: \"deprecated\" },\n { name: \"Listy\", category: \"data-display\", targets: [\"VirtualList\"], relationship: \"adapted\", lifecycle: \"new\" },\n { name: \"Popover\", category: \"data-display\", targets: [\"Popover\"], relationship: \"direct\" },\n { name: \"QRCode\", category: \"data-display\", targets: [\"QRCode\"], relationship: \"direct\" },\n { name: \"Segmented\", category: \"data-display\", targets: [\"SegmentedControl\"], relationship: \"adapted\" },\n { name: \"Statistic\", category: \"data-display\", targets: [\"Statistic\"], relationship: \"direct\" },\n { name: \"Table\", category: \"data-display\", targets: [\"DataTable\"], relationship: \"adapted\" },\n { name: \"Tag\", category: \"data-display\", targets: [\"Tag\"], relationship: \"direct\" },\n { name: \"Timeline\", category: \"data-display\", targets: [\"Timeline\"], relationship: \"direct\" },\n { name: \"Tooltip\", category: \"data-display\", targets: [\"Tooltip\"], relationship: \"direct\" },\n { name: \"Tour\", category: \"data-display\", targets: [\"Tour\"], relationship: \"direct\" },\n { name: \"Tree\", category: \"data-display\", targets: [\"Tree\"], relationship: \"direct\" },\n\n { name: \"Alert\", category: \"feedback\", targets: [\"Notice\"], relationship: \"adapted\" },\n { name: \"Drawer\", category: \"feedback\", targets: [\"Sheet\", \"SidePanel\"], relationship: \"decomposed\" },\n { name: \"Message\", category: \"feedback\", targets: [\"Toast\"], relationship: \"adapted\" },\n { name: \"Modal\", category: \"feedback\", targets: [\"Dialog\", \"AlertDialog\"], relationship: \"decomposed\" },\n { name: \"Notification\", category: \"feedback\", targets: [\"Toast\"], relationship: \"adapted\" },\n { name: \"Popconfirm\", category: \"feedback\", targets: [\"Popover\", \"AlertDialog\"], relationship: \"decomposed\" },\n { name: \"Progress\", category: \"feedback\", targets: [\"Progress\"], relationship: \"direct\" },\n { name: \"Result\", category: \"feedback\", targets: [\"Result\"], relationship: \"direct\" },\n { name: \"Skeleton\", category: \"feedback\", targets: [\"Skeleton\"], relationship: \"direct\" },\n { name: \"Spin\", category: \"feedback\", targets: [\"Spinner\"], relationship: \"adapted\" },\n { name: \"Watermark\", category: \"feedback\", targets: [\"Watermark\"], relationship: \"direct\" },\n\n { name: \"Affix\", category: \"other\", targets: [\"Affix\"], relationship: \"direct\" },\n { name: \"ConfigProvider\", category: \"other\", targets: [\"DesignSystemProvider\"], relationship: \"adapted\" },\n] as const satisfies readonly AntDesignReferenceSourceComponent[];\n\nexport const antDesignReferenceComponents: readonly AntDesignReferenceComponent[] =\n antDesignReferenceSources.map((reference) => ({\n ...reference,\n targets: reference.targets.map((target) => componentIds[target]),\n }));\n\nexport type AntDesignComponentName = (typeof antDesignReferenceSources)[number][\"name\"];\n\nexport type ReferenceCoverageSummary = Readonly<{\n total: number;\n tracked: number;\n /** Every HJM target has reached stable or beta maturity. */\n fullyMature: number;\n /** At least one, but not every, HJM target has reached stable or beta maturity. */\n partiallyMature: number;\n /** No HJM target has moved beyond planned maturity. */\n plannedOnly: number;\n relationships: Readonly<Record<ReferenceRelationship, number>>;\n}>;\n\nexport function getAntDesignReferencesFor(\n componentNameOrId: string,\n): readonly AntDesignReferenceComponent[] {\n const definition = componentDefinitions.find(\n ({ id, name }) => id === componentNameOrId || name === componentNameOrId,\n );\n if (!definition) return [];\n return antDesignReferenceComponents.filter(({ targets }) =>\n targets.includes(definition.id),\n );\n}\n\nexport function summarizeAntDesignCoverage(\n entries: readonly ComponentCatalogEntry[] = componentCatalog,\n): ReferenceCoverageSummary {\n const statusById = new Map(\n entries.map((entry) => [componentIds[entry.name as ComponentName], entry.status]),\n );\n const relationships: Record<ReferenceRelationship, number> = {\n direct: 0,\n adapted: 0,\n decomposed: 0,\n };\n let tracked = 0;\n let fullyMature = 0;\n let partiallyMature = 0;\n\n for (const reference of antDesignReferenceComponents) {\n relationships[reference.relationship] += 1;\n const targetStatuses = reference.targets\n .map((target) => statusById.get(target))\n .filter((status): status is ComponentStatus => status !== undefined);\n if (targetStatuses.length === reference.targets.length) tracked += 1;\n const matureTargets = targetStatuses.filter(\n (status) => status === \"stable\" || status === \"beta\",\n ).length;\n if (matureTargets === reference.targets.length) fullyMature += 1;\n else if (matureTargets > 0) partiallyMature += 1;\n }\n\n const plannedOnly = antDesignReferenceComponents.length - fullyMature - partiallyMature;\n\n return {\n total: antDesignReferenceComponents.length,\n tracked,\n fullyMature,\n partiallyMature,\n plannedOnly,\n relationships,\n };\n}\n"]}
@@ -0,0 +1,17 @@
1
+ export type ContentTransitionPreset = "fade" | "rise" | "slide" | "scale";
2
+ /** Small local travel preserves context; these are presentation values, never
3
+ * gesture activation thresholds. Retain the existing geometry for compatibility. */
4
+ export declare const contentTransitionMotion: {
5
+ readonly rise: 12;
6
+ readonly slide: 16;
7
+ readonly scale: 0.96;
8
+ };
9
+ /** Bounded travel keeps decorative motion close to the destination.
10
+ * Single-subtree recipes: preserve wrapping, focus and accessible content. */
11
+ export declare function resolveContentTransition(preset?: ContentTransitionPreset, direction?: "ltr" | "rtl"): {
12
+ opacity: number;
13
+ translateX: number;
14
+ translateY: number;
15
+ scale: number;
16
+ };
17
+ //# sourceMappingURL=content-transition.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content-transition.d.ts","sourceRoot":"","sources":["../src/content-transition.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,uBAAuB,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;AAC1E;oFACoF;AACpF,eAAO,MAAM,uBAAuB;;;;CAAgD,CAAC;AACrF;8EAC8E;AAC9E,wBAAgB,wBAAwB,CAAC,MAAM,GAAE,uBAAgC,EAAE,SAAS,GAAE,KAAK,GAAG,KAAa;;;;;EAQlH"}
@@ -0,0 +1,15 @@
1
+ /** Small local travel preserves context; these are presentation values, never
2
+ * gesture activation thresholds. Retain the existing geometry for compatibility. */
3
+ export const contentTransitionMotion = { rise: 12, slide: 16, scale: 0.96 };
4
+ /** Bounded travel keeps decorative motion close to the destination.
5
+ * Single-subtree recipes: preserve wrapping, focus and accessible content. */
6
+ export function resolveContentTransition(preset = "fade", direction = "ltr") {
7
+ switch (preset) {
8
+ case "fade": return { opacity: 0, translateX: 0, translateY: 0, scale: 1 };
9
+ case "rise": return { opacity: 0, translateX: 0, translateY: contentTransitionMotion.rise, scale: 1 };
10
+ case "slide": return { opacity: 0, translateX: (direction === "rtl" ? -1 : 1) * contentTransitionMotion.slide, translateY: 0, scale: 1 };
11
+ case "scale": return { opacity: 0, translateX: 0, translateY: 0, scale: contentTransitionMotion.scale };
12
+ default: throw new TypeError("Unsupported content transition preset");
13
+ }
14
+ }
15
+ //# sourceMappingURL=content-transition.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content-transition.js","sourceRoot":"","sources":["../src/content-transition.ts"],"names":[],"mappings":"AACA;oFACoF;AACpF,MAAM,CAAC,MAAM,uBAAuB,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAW,CAAC;AACrF;8EAC8E;AAC9E,MAAM,UAAU,wBAAwB,CAAC,SAAkC,MAAM,EAAE,YAA2B,KAAK;IACjH,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,MAAM,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;QAC3E,KAAK,MAAM,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,EAAE,uBAAuB,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;QACtG,KAAK,OAAO,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,SAAS,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,uBAAuB,CAAC,KAAK,EAAE,UAAU,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;QACzI,KAAK,OAAO,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,KAAK,EAAE,uBAAuB,CAAC,KAAK,EAAE,CAAC;QACxG,OAAO,CAAC,CAAC,MAAM,IAAI,SAAS,CAAC,uCAAuC,CAAC,CAAC;IACxE,CAAC;AACH,CAAC","sourcesContent":["export type ContentTransitionPreset = \"fade\" | \"rise\" | \"slide\" | \"scale\";\n/** Small local travel preserves context; these are presentation values, never\n * gesture activation thresholds. Retain the existing geometry for compatibility. */\nexport const contentTransitionMotion = { rise: 12, slide: 16, scale: 0.96 } as const;\n/** Bounded travel keeps decorative motion close to the destination.\n * Single-subtree recipes: preserve wrapping, focus and accessible content. */\nexport function resolveContentTransition(preset: ContentTransitionPreset = \"fade\", direction: \"ltr\" | \"rtl\" = \"ltr\") {\n switch (preset) {\n case \"fade\": return { opacity: 0, translateX: 0, translateY: 0, scale: 1 };\n case \"rise\": return { opacity: 0, translateX: 0, translateY: contentTransitionMotion.rise, scale: 1 };\n case \"slide\": return { opacity: 0, translateX: (direction === \"rtl\" ? -1 : 1) * contentTransitionMotion.slide, translateY: 0, scale: 1 };\n case \"scale\": return { opacity: 0, translateX: 0, translateY: 0, scale: contentTransitionMotion.scale };\n default: throw new TypeError(\"Unsupported content transition preset\");\n }\n}\n"]}
@@ -0,0 +1,22 @@
1
+ export type DurationUnit = "hours" | "minutes" | "seconds";
2
+ export type DurationRange = Readonly<{
3
+ min?: number;
4
+ max: number;
5
+ }>;
6
+ export type DurationFieldLabels = Readonly<{
7
+ label: string;
8
+ hours: string;
9
+ minutes: string;
10
+ seconds: string;
11
+ increment: (unit: DurationUnit) => string;
12
+ decrement: (unit: DurationUnit) => string;
13
+ }>;
14
+ export declare function resolveDuration(value: number, range: DurationRange): {
15
+ min: number;
16
+ max: number;
17
+ hours: number;
18
+ minutes: number;
19
+ seconds: number;
20
+ };
21
+ export declare function changeDurationUnit(value: number, unit: DurationUnit, next: number | null, range: DurationRange): number;
22
+ //# sourceMappingURL=duration-field.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"duration-field.d.ts","sourceRoot":"","sources":["../src/duration-field.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,CAAC;AAC3D,MAAM,MAAM,aAAa,GAAG,QAAQ,CAAC;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AACpE,MAAM,MAAM,mBAAmB,GAAG,QAAQ,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,MAAM,CAAC;IAAC,SAAS,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,MAAM,CAAA;CAAE,CAAC,CAAC;AACrM,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa;;;;;;EAIlE;AACD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,EAAE,KAAK,EAAE,aAAa,GAAG,MAAM,CAUvH"}
@@ -0,0 +1,20 @@
1
+ export function resolveDuration(value, range) {
2
+ const min = range.min ?? 0;
3
+ if (![min, range.max, value].every(Number.isSafeInteger) || min < 0 || range.max <= min || value < min || value > range.max)
4
+ throw new RangeError("Duration requires integer seconds within a nonnegative min/max range");
5
+ return { min, max: range.max, hours: Math.floor(value / 3600), minutes: Math.floor(value / 60) % 60, seconds: value % 60 };
6
+ }
7
+ export function changeDurationUnit(value, unit, next, range) {
8
+ if (!["hours", "minutes", "seconds"].includes(unit))
9
+ throw new TypeError("Unsupported duration unit");
10
+ const current = resolveDuration(value, range);
11
+ const amount = next ?? 0;
12
+ const limit = unit === "hours" ? Math.floor(range.max / 3600) : 59;
13
+ if (!Number.isSafeInteger(amount) || amount < 0 || amount > limit)
14
+ throw new RangeError("Invalid duration unit value");
15
+ const multiplier = unit === "hours" ? 3600 : unit === "minutes" ? 60 : 1;
16
+ // Clamp the combined value, rather than each displayed unit independently;
17
+ // otherwise editing minutes can silently violate a product's total limit.
18
+ return Math.max(current.min, Math.min(current.max, value + (amount - current[unit]) * multiplier));
19
+ }
20
+ //# sourceMappingURL=duration-field.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"duration-field.js","sourceRoot":"","sources":["../src/duration-field.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,eAAe,CAAC,KAAa,EAAE,KAAoB;IACjE,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;IAC3B,IAAI,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,KAAK,CAAC,GAAG,IAAI,GAAG,IAAI,KAAK,GAAG,GAAG,IAAI,KAAK,GAAG,KAAK,CAAC,GAAG;QAAE,MAAM,IAAI,UAAU,CAAC,sEAAsE,CAAC,CAAC;IAC1N,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,KAAK,GAAG,EAAE,EAAE,CAAC;AAC7H,CAAC;AACD,MAAM,UAAU,kBAAkB,CAAC,KAAa,EAAE,IAAkB,EAAE,IAAmB,EAAE,KAAoB;IAC7G,IAAI,CAAC,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,MAAM,IAAI,SAAS,CAAC,2BAA2B,CAAC,CAAC;IACtG,MAAM,OAAO,GAAG,eAAe,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAC9C,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,CAAC;IACzB,MAAM,KAAK,GAAG,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACnE,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,IAAI,MAAM,GAAG,KAAK;QAAE,MAAM,IAAI,UAAU,CAAC,6BAA6B,CAAC,CAAC;IACvH,MAAM,UAAU,GAAG,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACzE,2EAA2E;IAC3E,0EAA0E;IAC1E,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,GAAG,CAAC,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;AACrG,CAAC","sourcesContent":["export type DurationUnit = \"hours\" | \"minutes\" | \"seconds\";\nexport type DurationRange = Readonly<{ min?: number; max: number }>;\nexport type DurationFieldLabels = Readonly<{ label: string; hours: string; minutes: string; seconds: string; increment: (unit: DurationUnit) => string; decrement: (unit: DurationUnit) => string }>;\nexport function resolveDuration(value: number, range: DurationRange) {\n const min = range.min ?? 0;\n if (![min, range.max, value].every(Number.isSafeInteger) || min < 0 || range.max <= min || value < min || value > range.max) throw new RangeError(\"Duration requires integer seconds within a nonnegative min/max range\");\n return { min, max: range.max, hours: Math.floor(value / 3600), minutes: Math.floor(value / 60) % 60, seconds: value % 60 };\n}\nexport function changeDurationUnit(value: number, unit: DurationUnit, next: number | null, range: DurationRange): number {\n if (![\"hours\", \"minutes\", \"seconds\"].includes(unit)) throw new TypeError(\"Unsupported duration unit\");\n const current = resolveDuration(value, range);\n const amount = next ?? 0;\n const limit = unit === \"hours\" ? Math.floor(range.max / 3600) : 59;\n if (!Number.isSafeInteger(amount) || amount < 0 || amount > limit) throw new RangeError(\"Invalid duration unit value\");\n const multiplier = unit === \"hours\" ? 3600 : unit === \"minutes\" ? 60 : 1;\n // Clamp the combined value, rather than each displayed unit independently;\n // otherwise editing minutes can silently violate a product's total limit.\n return Math.max(current.min, Math.min(current.max, value + (amount - current[unit]) * multiplier));\n}\n"]}
@@ -0,0 +1,29 @@
1
+ import { type ColorReference } from "./color-references.js";
2
+ export type EffectLayer = "mesh" | "glow" | "grain";
3
+ export type EffectSurfaceDescriptor = Readonly<{
4
+ layers?: readonly EffectLayer[];
5
+ seed?: string;
6
+ intensity?: number;
7
+ /** One slow cycle in seconds; decorative motion is off unless explicitly active. */
8
+ period?: number;
9
+ active?: boolean;
10
+ colors?: readonly [ColorReference, ColorReference, ColorReference];
11
+ }>;
12
+ export declare function resolveEffectSurface(descriptor?: EffectSurfaceDescriptor): {
13
+ layers: readonly EffectLayer[];
14
+ intensity: number;
15
+ period: number;
16
+ active: boolean;
17
+ colors: readonly [ColorReference, ColorReference, ColorReference];
18
+ points: {
19
+ x: number;
20
+ y: number;
21
+ radius: number;
22
+ }[];
23
+ anchors: {
24
+ x: number;
25
+ y: number;
26
+ radius: number;
27
+ }[];
28
+ };
29
+ //# sourceMappingURL=effect-surface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effect-surface.d.ts","sourceRoot":"","sources":["../src/effect-surface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACxE,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AACpD,MAAM,MAAM,uBAAuB,GAAG,QAAQ,CAAC;IAC7C,MAAM,CAAC,EAAE,SAAS,WAAW,EAAE,CAAC;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oFAAoF;IACpF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,SAAS,CAAC,cAAc,EAAE,cAAc,EAAE,cAAc,CAAC,CAAC;CACpE,CAAC,CAAC;AACH,wBAAgB,oBAAoB,CAAC,UAAU,GAAE,uBAA4B;;;;;;;;;;;;;;;;EAkB5E"}
@@ -0,0 +1,26 @@
1
+ import { themeColor } from "./color-references.js";
2
+ export function resolveEffectSurface(descriptor = {}) {
3
+ const layers = descriptor.layers ?? ["mesh"];
4
+ if (!layers.length || layers.length > 3 || new Set(layers).size !== layers.length || layers.some(layer => !["mesh", "glow", "grain"].includes(layer)))
5
+ throw new TypeError("Choose one to three unique effect layers");
6
+ const intensity = descriptor.intensity ?? 0.22;
7
+ if (!Number.isFinite(intensity) || intensity < 0 || intensity > 1)
8
+ throw new RangeError("Effect intensity must be between 0 and 1");
9
+ const period = descriptor.period ?? 12;
10
+ if (!Number.isFinite(period) || period < 2 || period > 120)
11
+ throw new RangeError("Effect period must be between 2 and 120 seconds");
12
+ const seed = descriptor.seed ?? "hjm";
13
+ if (typeof seed !== "string" || seed.length === 0)
14
+ throw new TypeError("Effect seed must not be empty");
15
+ // Small deterministic spatial sampling keeps SSR/native geometry consistent;
16
+ // it is decorative randomness, not a security or account identifier hash.
17
+ let state = 2166136261;
18
+ for (const character of seed)
19
+ state = Math.imul(state ^ character.codePointAt(0), 16777619) >>> 0;
20
+ const random = () => { state = (Math.imul(state, 1664525) + 1013904223) >>> 0; return state / 4294967296; };
21
+ const points = Array.from({ length: 32 }, () => ({ x: Math.round(random() * 100), y: Math.round(random() * 100), radius: 0.2 + random() * 0.5 }));
22
+ return { layers, intensity, period, active: descriptor.active ?? false,
23
+ colors: descriptor.colors ?? [themeColor("primary"), themeColor("contentBrand"), themeColor("surfaceAccent")],
24
+ points, anchors: points.slice(0, 3) };
25
+ }
26
+ //# sourceMappingURL=effect-surface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effect-surface.js","sourceRoot":"","sources":["../src/effect-surface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAuB,MAAM,uBAAuB,CAAC;AAWxE,MAAM,UAAU,oBAAoB,CAAC,aAAsC,EAAE;IAC3E,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC;IAC7C,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAAE,MAAM,IAAI,SAAS,CAAC,0CAA0C,CAAC,CAAC;IACvN,MAAM,SAAS,GAAG,UAAU,CAAC,SAAS,IAAI,IAAI,CAAC;IAC/C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,SAAS,GAAG,CAAC,IAAI,SAAS,GAAG,CAAC;QAAE,MAAM,IAAI,UAAU,CAAC,0CAA0C,CAAC,CAAC;IACpI,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,IAAI,EAAE,CAAC;IACvC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,IAAI,MAAM,GAAG,GAAG;QAAE,MAAM,IAAI,UAAU,CAAC,iDAAiD,CAAC,CAAC;IACpI,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,IAAI,KAAK,CAAC;IACtC,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,SAAS,CAAC,+BAA+B,CAAC,CAAC;IACxG,6EAA6E;IAC7E,0EAA0E;IAC1E,IAAI,KAAK,GAAG,UAAU,CAAC;IACvB,KAAK,MAAM,SAAS,IAAI,IAAI;QAAE,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC,WAAW,CAAC,CAAC,CAAE,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;IACnG,MAAM,MAAM,GAAG,GAAG,EAAE,GAAG,KAAK,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;IAC5G,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,GAAG,MAAM,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC;IAClJ,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,IAAI,KAAK;QACpE,MAAM,EAAE,UAAU,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,UAAU,CAAC,cAAc,CAAC,EAAE,UAAU,CAAC,eAAe,CAAC,CAAU;QACtH,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;AAC1C,CAAC","sourcesContent":["import { themeColor, type ColorReference } from \"./color-references.js\";\nexport type EffectLayer = \"mesh\" | \"glow\" | \"grain\";\nexport type EffectSurfaceDescriptor = Readonly<{\n layers?: readonly EffectLayer[];\n seed?: string;\n intensity?: number;\n /** One slow cycle in seconds; decorative motion is off unless explicitly active. */\n period?: number;\n active?: boolean;\n colors?: readonly [ColorReference, ColorReference, ColorReference];\n}>;\nexport function resolveEffectSurface(descriptor: EffectSurfaceDescriptor = {}) {\n const layers = descriptor.layers ?? [\"mesh\"];\n if (!layers.length || layers.length > 3 || new Set(layers).size !== layers.length || layers.some(layer => ![\"mesh\", \"glow\", \"grain\"].includes(layer))) throw new TypeError(\"Choose one to three unique effect layers\");\n const intensity = descriptor.intensity ?? 0.22;\n if (!Number.isFinite(intensity) || intensity < 0 || intensity > 1) throw new RangeError(\"Effect intensity must be between 0 and 1\");\n const period = descriptor.period ?? 12;\n if (!Number.isFinite(period) || period < 2 || period > 120) throw new RangeError(\"Effect period must be between 2 and 120 seconds\");\n const seed = descriptor.seed ?? \"hjm\";\n if (typeof seed !== \"string\" || seed.length === 0) throw new TypeError(\"Effect seed must not be empty\");\n // Small deterministic spatial sampling keeps SSR/native geometry consistent;\n // it is decorative randomness, not a security or account identifier hash.\n let state = 2166136261;\n for (const character of seed) state = Math.imul(state ^ character.codePointAt(0)!, 16777619) >>> 0;\n const random = () => { state = (Math.imul(state, 1664525) + 1013904223) >>> 0; return state / 4294967296; };\n const points = Array.from({ length: 32 }, () => ({ x: Math.round(random() * 100), y: Math.round(random() * 100), radius: 0.2 + random() * 0.5 }));\n return { layers, intensity, period, active: descriptor.active ?? false,\n colors: descriptor.colors ?? [themeColor(\"primary\"), themeColor(\"contentBrand\"), themeColor(\"surfaceAccent\")] as const,\n points, anchors: points.slice(0, 3) };\n}\n"]}
@@ -0,0 +1,13 @@
1
+ export type TabsAppearance = "standard" | "gooey";
2
+ export type GooeyIndicatorRect = Readonly<{
3
+ x: number;
4
+ width: number;
5
+ }>;
6
+ /** Stretch only the selected indicator; tab hit targets and text never move. */
7
+ export declare function resolveGooeyIndicator(from: GooeyIndicatorRect, to: GooeyIndicatorRect): {
8
+ readonly duration: 320;
9
+ readonly input: readonly [0, 0.45, 1];
10
+ readonly x: readonly [number, number, number];
11
+ readonly width: readonly [number, number, number];
12
+ };
13
+ //# sourceMappingURL=gooey-navigation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gooey-navigation.d.ts","sourceRoot":"","sources":["../src/gooey-navigation.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,GAAG,UAAU,GAAG,OAAO,CAAC;AAClD,MAAM,MAAM,kBAAkB,GAAG,QAAQ,CAAC;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AACxE,gFAAgF;AAChF,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,kBAAkB,EAAE,EAAE,EAAE,kBAAkB;;;;;EAMrF"}
@@ -0,0 +1,11 @@
1
+ /** Stretch only the selected indicator; tab hit targets and text never move. */
2
+ export function resolveGooeyIndicator(from, to) {
3
+ for (const rect of [from, to])
4
+ if (!Number.isFinite(rect.x) || !Number.isFinite(rect.width) || rect.width <= 0)
5
+ throw new RangeError("Indicator needs finite coordinates and positive widths");
6
+ // Keep the elastic bridge within the measured source/destination span, including RTL layouts.
7
+ const left = Math.min(from.x, to.x);
8
+ const right = Math.max(from.x + from.width, to.x + to.width);
9
+ return { duration: 320, input: [0, 0.45, 1], x: [from.x, left, to.x], width: [from.width, right - left, to.width] };
10
+ }
11
+ //# sourceMappingURL=gooey-navigation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gooey-navigation.js","sourceRoot":"","sources":["../src/gooey-navigation.ts"],"names":[],"mappings":"AAEA,gFAAgF;AAChF,MAAM,UAAU,qBAAqB,CAAC,IAAwB,EAAE,EAAsB;IACpF,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;QAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC;YAAE,MAAM,IAAI,UAAU,CAAC,wDAAwD,CAAC,CAAC;IAC/L,8FAA8F;IAC9F,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IACpC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;IAC7D,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,EAAW,CAAC;AAC/H,CAAC","sourcesContent":["export type TabsAppearance = \"standard\" | \"gooey\";\nexport type GooeyIndicatorRect = Readonly<{ x: number; width: number }>;\n/** Stretch only the selected indicator; tab hit targets and text never move. */\nexport function resolveGooeyIndicator(from: GooeyIndicatorRect, to: GooeyIndicatorRect) {\n for (const rect of [from, to]) if (!Number.isFinite(rect.x) || !Number.isFinite(rect.width) || rect.width <= 0) throw new RangeError(\"Indicator needs finite coordinates and positive widths\");\n // Keep the elastic bridge within the measured source/destination span, including RTL layouts.\n const left = Math.min(from.x, to.x);\n const right = Math.max(from.x + from.width, to.x + to.width);\n return { duration: 320, input: [0, 0.45, 1], x: [from.x, left, to.x], width: [from.width, right - left, to.width] } as const;\n}\n"]}
@@ -0,0 +1,12 @@
1
+ /** Host-provided graphemes avoid splitting emoji or complex scripts with UTF-16 indexing. */
2
+ export declare function resolveGravityLetters(glyphs: readonly string[]): {
3
+ glyph: string;
4
+ delay: number;
5
+ rotation: number;
6
+ }[];
7
+ export declare const gravityLetterMotion: {
8
+ readonly duration: 640;
9
+ readonly input: readonly [0, 0.55, 0.75, 0.9, 1];
10
+ readonly y: readonly [-36, 0, -10, 0, 0];
11
+ };
12
+ //# sourceMappingURL=gravity-letters.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gravity-letters.d.ts","sourceRoot":"","sources":["../src/gravity-letters.ts"],"names":[],"mappings":"AAAA,6FAA6F;AAC7F,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE;;;;IAM9D;AAED,eAAO,MAAM,mBAAmB;;;;CAAqF,CAAC"}
@@ -0,0 +1,11 @@
1
+ /** Host-provided graphemes avoid splitting emoji or complex scripts with UTF-16 indexing. */
2
+ export function resolveGravityLetters(glyphs) {
3
+ // A promotional accent is bounded to 32 units; paragraphs belong in canonical Text.
4
+ if (glyphs.length > 32 || glyphs.some(glyph => !glyph || glyph.includes("\n"))) {
5
+ throw new RangeError("GravityLetters requires at most 32 nonempty, single-line glyphs");
6
+ }
7
+ return glyphs.map((glyph, index) => ({ glyph, delay: index * 24, rotation: index % 2 ? -6 : 6 }));
8
+ }
9
+ // One authored drop/rebound curve, not a physics engine. Fixed geometry prevents layout shifts.
10
+ export const gravityLetterMotion = { duration: 640, input: [0, 0.55, 0.75, 0.9, 1], y: [-36, 0, -10, 0, 0] };
11
+ //# sourceMappingURL=gravity-letters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gravity-letters.js","sourceRoot":"","sources":["../src/gravity-letters.ts"],"names":[],"mappings":"AAAA,6FAA6F;AAC7F,MAAM,UAAU,qBAAqB,CAAC,MAAyB;IAC7D,oFAAoF;IACpF,IAAI,MAAM,CAAC,MAAM,GAAG,EAAE,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;QAC/E,MAAM,IAAI,UAAU,CAAC,iEAAiE,CAAC,CAAC;IAC1F,CAAC;IACD,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,GAAG,EAAE,EAAE,QAAQ,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACpG,CAAC;AACD,gGAAgG;AAChG,MAAM,CAAC,MAAM,mBAAmB,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAW,CAAC","sourcesContent":["/** Host-provided graphemes avoid splitting emoji or complex scripts with UTF-16 indexing. */\nexport function resolveGravityLetters(glyphs: readonly string[]) {\n // A promotional accent is bounded to 32 units; paragraphs belong in canonical Text.\n if (glyphs.length > 32 || glyphs.some(glyph => !glyph || glyph.includes(\"\\n\"))) {\n throw new RangeError(\"GravityLetters requires at most 32 nonempty, single-line glyphs\");\n }\n return glyphs.map((glyph, index) => ({ glyph, delay: index * 24, rotation: index % 2 ? -6 : 6 }));\n}\n// One authored drop/rebound curve, not a physics engine. Fixed geometry prevents layout shifts.\nexport const gravityLetterMotion = { duration: 640, input: [0, 0.55, 0.75, 0.9, 1], y: [-36, 0, -10, 0, 0] } as const;\n"]}
@@ -0,0 +1,8 @@
1
+ export declare const gridRevealTiles: {
2
+ id: number;
3
+ row: number;
4
+ column: number;
5
+ delay: number;
6
+ }[];
7
+ export declare const gridRevealDuration: 200;
8
+ //# sourceMappingURL=grid-reveal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grid-reveal.d.ts","sourceRoot":"","sources":["../src/grid-reveal.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,eAAe;;;;;GAA8H,CAAC;AAC3J,eAAO,MAAM,kBAAkB,KAAc,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { motion } from "./foundations.js";
2
+ // A fixed 4×4 mask bounds layer count on low-end phones; no image pixels are duplicated.
3
+ export const gridRevealTiles = Array.from({ length: 16 }, (_, index) => ({ id: index, row: Math.floor(index / 4), column: index % 4, delay: (Math.floor(index / 4) + index % 4) * 30 }));
4
+ export const gridRevealDuration = motion.normal;
5
+ //# sourceMappingURL=grid-reveal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grid-reveal.js","sourceRoot":"","sources":["../src/grid-reveal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,yFAAyF;AACzF,MAAM,CAAC,MAAM,eAAe,GAAC,KAAK,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,EAAE,EAAC,EAAC,CAAC,CAAC,EAAC,KAAK,EAAC,EAAE,CAAA,CAAC,EAAC,EAAE,EAAC,KAAK,EAAC,GAAG,EAAC,IAAI,CAAC,KAAK,CAAC,KAAK,GAAC,CAAC,CAAC,EAAC,MAAM,EAAC,KAAK,GAAC,CAAC,EAAC,KAAK,EAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,GAAC,CAAC,CAAC,GAAC,KAAK,GAAC,CAAC,CAAC,GAAC,EAAE,EAAC,CAAC,CAAC,CAAC;AAC3J,MAAM,CAAC,MAAM,kBAAkB,GAAC,MAAM,CAAC,MAAM,CAAC","sourcesContent":["import { motion } from \"./foundations.js\";\n// A fixed 4×4 mask bounds layer count on low-end phones; no image pixels are duplicated.\nexport const gridRevealTiles=Array.from({length:16},(_,index)=>({id:index,row:Math.floor(index/4),column:index%4,delay:(Math.floor(index/4)+index%4)*30}));\nexport const gridRevealDuration=motion.normal;\n"]}
@@ -0,0 +1,3 @@
1
+ export declare function isObject(value: unknown): value is Readonly<Record<string, unknown>>;
2
+ export declare function rejectUnknownKeys(value: Readonly<Record<string, unknown>>, allowed: ReadonlySet<string>, field: string, component: string): void;
3
+ //# sourceMappingURL=object-validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"object-validation.d.ts","sourceRoot":"","sources":["../../src/internal/object-validation.ts"],"names":[],"mappings":"AAEA,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAEnF;AACD,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACxC,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,EAC5B,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,GAChB,IAAI,CAIN"}
@@ -0,0 +1,12 @@
1
+ // Anchored overlay contracts share shape validation, but preserve their public
2
+ // component-specific error messages instead of merging Tooltip/Popover semantics.
3
+ export function isObject(value) {
4
+ return value !== null && typeof value === "object" && !Array.isArray(value);
5
+ }
6
+ export function rejectUnknownKeys(value, allowed, field, component) {
7
+ for (const key of Object.keys(value)) {
8
+ if (!allowed.has(key))
9
+ throw new TypeError(`Unsupported ${component} ${field} field: ${key}`);
10
+ }
11
+ }
12
+ //# sourceMappingURL=object-validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"object-validation.js","sourceRoot":"","sources":["../../src/internal/object-validation.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,kFAAkF;AAClF,MAAM,UAAU,QAAQ,CAAC,KAAc;IACrC,OAAO,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AACD,MAAM,UAAU,iBAAiB,CAC/B,KAAwC,EACxC,OAA4B,EAC5B,KAAa,EACb,SAAiB;IAEjB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACrC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,MAAM,IAAI,SAAS,CAAC,eAAe,SAAS,IAAI,KAAK,WAAW,GAAG,EAAE,CAAC,CAAC;IAChG,CAAC;AACH,CAAC","sourcesContent":["// Anchored overlay contracts share shape validation, but preserve their public\n// component-specific error messages instead of merging Tooltip/Popover semantics.\nexport function isObject(value: unknown): value is Readonly<Record<string, unknown>> {\n return value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\nexport function rejectUnknownKeys(\n value: Readonly<Record<string, unknown>>,\n allowed: ReadonlySet<string>,\n field: string,\n component: string,\n): void {\n for (const key of Object.keys(value)) {\n if (!allowed.has(key)) throw new TypeError(`Unsupported ${component} ${field} field: ${key}`);\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"braid.d.ts","sourceRoot":"","sources":["../../../src/internal/thinking-orb/braid.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAO,SAAS,EAAE,MAAM,YAAY,CAAC;AAGjD,eAAO,MAAM,UAAU,EAAE,SA0CxB,CAAC"}
1
+ {"version":3,"file":"braid.d.ts","sourceRoot":"","sources":["../../../src/internal/thinking-orb/braid.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAG5C,eAAO,MAAM,UAAU,EAAE,SAmCxB,CAAC"}
@@ -2,21 +2,14 @@
2
2
  // Braid: three strands plait around the sphere — the "weaving" state.
3
3
  // Each strand runs pole to pole on a helix, and a radial breathing term
4
4
  // makes them trade places, reading as the over/under of a plait.
5
- import { fibDir, finalizeFrame, frac, makeProj, radiusScale } from './core.js';
5
+ import { ghostSphereDots, finalizeFrame, frac, makeProj, radiusScale } from './core.js';
6
6
  export const frameBraid = (size, t, o) => {
7
7
  const cx = size / 2;
8
8
  const cy = size / 2;
9
9
  const R = (size / 2) * 0.76;
10
10
  const pt = makeProj(t * 0.4, 0.3, cx, cy, 1);
11
11
  const rs = radiusScale(size, o.rsPow ?? 0.6);
12
- const dots = [];
13
- const ghostN = o.ghostN ?? 150;
14
- for (let i = 0; i < ghostN; i++) {
15
- const d = fibDir(i, ghostN);
16
- const [px, py, z] = pt(d[0] * R, d[1] * R, d[2] * R);
17
- const depth = (z / R + 1) / 2;
18
- dots.push({ x: px, y: py, z, r: 0.8 * rs, white: 0.78, a: 0.1 + 0.22 * depth });
19
- }
12
+ const dots = ghostSphereDots(pt, R, rs, o.ghostN ?? 150);
20
13
  const strandN = o.strandN ?? 52;
21
14
  const turns = o.turns ?? 3;
22
15
  for (let s = 0; s < 3; s++) {
@@ -1 +1 @@
1
- {"version":3,"file":"braid.js","sourceRoot":"","sources":["../../../src/internal/thinking-orb/braid.ts"],"names":[],"mappings":"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","sourcesContent":["// Adapted from Thinking Orbs de85557 (MIT); see THIRD_PARTY_NOTICES.md.\n// Braid: three strands plait around the sphere — the \"weaving\" state.\n// Each strand runs pole to pole on a helix, and a radial breathing term\n// makes them trade places, reading as the over/under of a plait.\n\nimport type { Dot, ModeFrame } from './types.js';\nimport { fibDir, finalizeFrame, frac, makeProj, radiusScale } from './core.js';\n\nexport const frameBraid: ModeFrame = (size, t, o) => {\n const cx = size / 2;\n const cy = size / 2;\n const R = (size / 2) * 0.76;\n const pt = makeProj(t * 0.4, 0.3, cx, cy, 1);\n const rs = radiusScale(size, o.rsPow ?? 0.6);\n\n const dots: Dot[] = [];\n const ghostN = o.ghostN ?? 150;\n for (let i = 0; i < ghostN; i++) {\n const d = fibDir(i, ghostN);\n const [px, py, z] = pt(d[0] * R, d[1] * R, d[2] * R);\n const depth = (z / R + 1) / 2;\n dots.push({ x: px, y: py, z, r: 0.8 * rs, white: 0.78, a: 0.1 + 0.22 * depth });\n }\n\n const strandN = o.strandN ?? 52;\n const turns = o.turns ?? 3;\n for (let s = 0; s < 3; s++) {\n const phase = (s / 3) * 2 * Math.PI;\n for (let i = 0; i < strandN; i++) {\n // u walks pole to pole; the frac() drift slides the whole strand along\n const u = (frac(i / strandN + t * 0.045) * 2 - 1) * 0.96;\n const surf = Math.sqrt(Math.max(0, 1 - u * u));\n const endFade = Math.min(1, (1 - Math.abs(u)) / 0.1);\n const a = u * Math.PI * turns + phase;\n // radial breathing: strands trade places — the over/under of a plait\n const weave = 1 + 0.075 * Math.sin(u * Math.PI * turns * 2 + phase * 2 + t * 0.8);\n const rr = surf * R * weave;\n const [px, py, zr] = pt(Math.cos(a) * rr, u * R * weave, Math.sin(a) * rr);\n const depth = (zr / R + 1) / 2;\n dots.push({\n x: px,\n y: py,\n z: zr,\n r: ((o.rBase ?? 1.2) + (o.rDepth ?? 1.8) * depth) * rs,\n white: 0.55 - 0.45 * depth,\n a: endFade * (0.45 + 0.55 * depth)\n });\n }\n }\n return finalizeFrame(dots, [], o.rMin);\n};\n"]}
1
+ {"version":3,"file":"braid.js","sourceRoot":"","sources":["../../../src/internal/thinking-orb/braid.ts"],"names":[],"mappings":"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","sourcesContent":["// Adapted from Thinking Orbs de85557 (MIT); see THIRD_PARTY_NOTICES.md.\n// Braid: three strands plait around the sphere — the \"weaving\" state.\n// Each strand runs pole to pole on a helix, and a radial breathing term\n// makes them trade places, reading as the over/under of a plait.\n\nimport type { ModeFrame } from './types.js';\nimport { ghostSphereDots, finalizeFrame, frac, makeProj, radiusScale } from './core.js';\n\nexport const frameBraid: ModeFrame = (size, t, o) => {\n const cx = size / 2;\n const cy = size / 2;\n const R = (size / 2) * 0.76;\n const pt = makeProj(t * 0.4, 0.3, cx, cy, 1);\n const rs = radiusScale(size, o.rsPow ?? 0.6);\n\n const dots = ghostSphereDots(pt, R, rs, o.ghostN ?? 150);\n\n const strandN = o.strandN ?? 52;\n const turns = o.turns ?? 3;\n for (let s = 0; s < 3; s++) {\n const phase = (s / 3) * 2 * Math.PI;\n for (let i = 0; i < strandN; i++) {\n // u walks pole to pole; the frac() drift slides the whole strand along\n const u = (frac(i / strandN + t * 0.045) * 2 - 1) * 0.96;\n const surf = Math.sqrt(Math.max(0, 1 - u * u));\n const endFade = Math.min(1, (1 - Math.abs(u)) / 0.1);\n const a = u * Math.PI * turns + phase;\n // radial breathing: strands trade places — the over/under of a plait\n const weave = 1 + 0.075 * Math.sin(u * Math.PI * turns * 2 + phase * 2 + t * 0.8);\n const rr = surf * R * weave;\n const [px, py, zr] = pt(Math.cos(a) * rr, u * R * weave, Math.sin(a) * rr);\n const depth = (zr / R + 1) / 2;\n dots.push({\n x: px,\n y: py,\n z: zr,\n r: ((o.rBase ?? 1.2) + (o.rDepth ?? 1.8) * depth) * rs,\n white: 0.55 - 0.45 * depth,\n a: endFade * (0.45 + 0.55 * depth)\n });\n }\n }\n return finalizeFrame(dots, [], o.rMin);\n};\n"]}
@@ -57,4 +57,5 @@ export declare function finalizeFrame(dots: Dot[], lines: Line[], rMin?: number)
57
57
  * spinners legible. Lower pow = radii shrink less with size.
58
58
  */
59
59
  export declare function radiusScale(size: number, pow: number): number;
60
+ export declare function ghostSphereDots(project: Projector, radius: number, radiusScale: number, count: number): Dot[];
60
61
  //# sourceMappingURL=core.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../../src/internal/thinking-orb/core.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,GAAG;IAClB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,oEAAoE;IACpE,KAAK,EAAE,MAAM,CAAC;IACd,CAAC,CAAC,EAAE,MAAM,CAAC;CACZ;AAED,0EAA0E;AAC1E,MAAM,WAAW,IAAI;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,iDAAiD;IACjD,KAAK,EAAE,MAAM,CAAC;IACd,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,CAAC,EAAE,MAAM,CAAC;CACX;AAED;;;;;GAKG;AACH,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,KAAK,EAAE,IAAI,EAAE,CAAC;CACf;AAED,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAEtF,wBAAgB,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED,wBAAgB,IAAI,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAEtC;AAED,kEAAkE;AAClE,wBAAgB,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAYnD;AAED,oCAAoC;AACpC,wBAAgB,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAGlD;AAED,8DAA8D;AAC9D,wBAAgB,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAMrE;AAED,4DAA4D;AAC5D,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED,oDAAoD;AACpD,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,CAYpG;AAED;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,IAAI,SAAM,GAAG,QAAQ,CAS9E;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAE7D"}
1
+ {"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../../src/internal/thinking-orb/core.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,GAAG;IAClB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,oEAAoE;IACpE,KAAK,EAAE,MAAM,CAAC;IACd,CAAC,CAAC,EAAE,MAAM,CAAC;CACZ;AAED,0EAA0E;AAC1E,MAAM,WAAW,IAAI;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,iDAAiD;IACjD,KAAK,EAAE,MAAM,CAAC;IACd,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,CAAC,EAAE,MAAM,CAAC;CACX;AAED;;;;;GAKG;AACH,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,KAAK,EAAE,IAAI,EAAE,CAAC;CACf;AAED,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAEtF,wBAAgB,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED,wBAAgB,IAAI,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAEtC;AAED,kEAAkE;AAClE,wBAAgB,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAYnD;AAED,oCAAoC;AACpC,wBAAgB,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAGlD;AAED,8DAA8D;AAC9D,wBAAgB,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAMrE;AAED,4DAA4D;AAC5D,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED,oDAAoD;AACpD,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,CAYpG;AAED;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,IAAI,SAAM,GAAG,QAAQ,CAS9E;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAE7D;AAID,wBAAgB,eAAe,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,GAAG,EAAE,CAS7G"}
@@ -83,4 +83,16 @@ export function finalizeFrame(dots, lines, rMin = 0.3) {
83
83
  export function radiusScale(size, pow) {
84
84
  return (size / 300) ** pow;
85
85
  }
86
+ // Braid and Ribbon share the faint backing sphere, not their foreground motion.
87
+ // Extract the identical loop so tuning the backdrop cannot diverge across modes.
88
+ export function ghostSphereDots(project, radius, radiusScale, count) {
89
+ const dots = [];
90
+ for (let i = 0; i < count; i++) {
91
+ const d = fibDir(i, count);
92
+ const [x, y, z] = project(d[0] * radius, d[1] * radius, d[2] * radius);
93
+ const depth = (z / radius + 1) / 2;
94
+ dots.push({ x, y, z, r: 0.8 * radiusScale, white: 0.78, a: 0.1 + 0.22 * depth });
95
+ }
96
+ return dots;
97
+ }
86
98
  //# sourceMappingURL=core.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"core.js","sourceRoot":"","sources":["../../../src/internal/thinking-orb/core.ts"],"names":[],"mappings":"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","sourcesContent":["// Adapted from Thinking Orbs de85557 (MIT); see THIRD_PARTY_NOTICES.md.\n// Shared primitives for the dotted 3D thought-orbs. Ported from inkform\n// (PlotterLab's HalftoneSphere lineage): honestly 3D — rotated,\n// depth-shaded, z-sorted. Depth is carried by dot size and ink weight\n// alone. Plain 2D canvas fills only: no ctx.filter, no SVG filters, so\n// every mode renders identically in Chrome, Safari and Firefox.\n\nexport interface Dot {\n x: number;\n y: number;\n z: number;\n r: number;\n /** Ink value: 0 = darkest ink on paper. Mirrored on dark themes. */\n white: number;\n a?: number;\n}\n\n/** A stroked edge between two projected points (the `connecting` web). */\nexport interface Line {\n x1: number;\n y1: number;\n x2: number;\n y2: number;\n /** Ink value, same convention as `Dot.white`. */\n white: number;\n a?: number;\n w: number;\n}\n\n/**\n * One rendered instant: a complete, final set of draw instructions.\n * `dots` is already z-sorted into draw order and radius-clamped; `lines`\n * are drawn first. Nothing here needs further interpretation, which is what\n * makes a frame portable to any 2D renderer.\n */\nexport interface OrbFrame {\n dots: Dot[];\n lines: Line[];\n}\n\nexport type Projector = (x: number, y: number, z: number) => [number, number, number];\n\nexport function lerp(a: number, b: number, f: number): number {\n return a + (b - a) * f;\n}\n\nexport function frac(x: number): number {\n return x - Math.floor(x);\n}\n\n/** Value noise on a 2D lattice — smooth, deterministic, cheap. */\nexport function vnoise(x: number, y: number): number {\n const xi = Math.floor(x);\n const yi = Math.floor(y);\n let fx = x - xi;\n let fy = y - yi;\n fx = fx * fx * (3 - 2 * fx);\n fy = fy * fy * (3 - 2 * fy);\n const a = hashD(xi, yi);\n const b = hashD(xi + 1, yi);\n const c = hashD(xi, yi + 1);\n const d = hashD(xi + 1, yi + 1);\n return a + (b - a) * fx + (c - a) * fy + (a - b - c + d) * fx * fy;\n}\n\n/** Deterministic hash in [0, 1). */\nexport function hashD(a: number, b: number): number {\n const h = Math.sin(a * 12.9898 + b * 78.233) * 43758.5453;\n return h - Math.floor(h);\n}\n\n/** Stable directions on a unit sphere (Fibonacci lattice). */\nexport function fibDir(i: number, n: number): [number, number, number] {\n const golden = Math.PI * (3 - Math.sqrt(5));\n const y = 1 - (2 * (i + 0.5)) / n;\n const rad = Math.sqrt(1 - y * y);\n const a = i * golden;\n return [rad * Math.cos(a), y, rad * Math.sin(a)];\n}\n\n/** Shortest signed angular distance, wrapped to (-π, π]. */\nexport function angleDelta(a: number, b: number): number {\n return Math.atan2(Math.sin(a - b), Math.cos(a - b));\n}\n\n/** Shared spin + tilt + orthographic projection. */\nexport function makeProj(yaw: number, tilt: number, cx: number, cy: number, scale: number): Projector {\n const st = Math.sin(tilt);\n const ct = Math.cos(tilt);\n const sy = Math.sin(yaw);\n const cyw = Math.cos(yaw);\n return (x, y, z) => {\n const x1 = x * cyw + z * sy;\n const z1 = -x * sy + z * cyw;\n const y1 = y * ct - z1 * st;\n const z2 = y * st + z1 * ct;\n return [cx + x1 * scale, cy - y1 * scale, z2];\n };\n}\n\n/**\n * Turn raw mode output into a finished frame: drop invisible marks, clamp\n * radii to the mode's floor, and z-sort far→near into draw order.\n *\n * This runs in the GEOMETRY step, not the painter, so a frame is a complete\n * set of draw instructions: every value is final and the array order is the\n * order to draw in. That is what lets the RN and SwiftUI ports share this\n * output verbatim — a port draws the list, it never re-derives anything —\n * and what lets the golden-vector tests compare numbers instead of pixels.\n */\nexport function finalizeFrame(dots: Dot[], lines: Line[], rMin = 0.3): OrbFrame {\n const visible: Dot[] = [];\n for (const d of dots) {\n if ((d.a ?? 1) < 0.02) continue;\n d.r = Math.max(rMin, d.r);\n visible.push(d);\n }\n visible.sort((a, b) => a.z - b.z);\n return { dots: visible, lines: lines.filter((l) => (l.a ?? 1) >= 0.02) };\n}\n\n/**\n * Dot radii were tuned for a 300pt frame; sub-linear scaling keeps small\n * spinners legible. Lower pow = radii shrink less with size.\n */\nexport function radiusScale(size: number, pow: number): number {\n return (size / 300) ** pow;\n}\n"]}
1
+ {"version":3,"file":"core.js","sourceRoot":"","sources":["../../../src/internal/thinking-orb/core.ts"],"names":[],"mappings":"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","sourcesContent":["// Adapted from Thinking Orbs de85557 (MIT); see THIRD_PARTY_NOTICES.md.\n// Shared primitives for the dotted 3D thought-orbs. Ported from inkform\n// (PlotterLab's HalftoneSphere lineage): honestly 3D — rotated,\n// depth-shaded, z-sorted. Depth is carried by dot size and ink weight\n// alone. Plain 2D canvas fills only: no ctx.filter, no SVG filters, so\n// every mode renders identically in Chrome, Safari and Firefox.\n\nexport interface Dot {\n x: number;\n y: number;\n z: number;\n r: number;\n /** Ink value: 0 = darkest ink on paper. Mirrored on dark themes. */\n white: number;\n a?: number;\n}\n\n/** A stroked edge between two projected points (the `connecting` web). */\nexport interface Line {\n x1: number;\n y1: number;\n x2: number;\n y2: number;\n /** Ink value, same convention as `Dot.white`. */\n white: number;\n a?: number;\n w: number;\n}\n\n/**\n * One rendered instant: a complete, final set of draw instructions.\n * `dots` is already z-sorted into draw order and radius-clamped; `lines`\n * are drawn first. Nothing here needs further interpretation, which is what\n * makes a frame portable to any 2D renderer.\n */\nexport interface OrbFrame {\n dots: Dot[];\n lines: Line[];\n}\n\nexport type Projector = (x: number, y: number, z: number) => [number, number, number];\n\nexport function lerp(a: number, b: number, f: number): number {\n return a + (b - a) * f;\n}\n\nexport function frac(x: number): number {\n return x - Math.floor(x);\n}\n\n/** Value noise on a 2D lattice — smooth, deterministic, cheap. */\nexport function vnoise(x: number, y: number): number {\n const xi = Math.floor(x);\n const yi = Math.floor(y);\n let fx = x - xi;\n let fy = y - yi;\n fx = fx * fx * (3 - 2 * fx);\n fy = fy * fy * (3 - 2 * fy);\n const a = hashD(xi, yi);\n const b = hashD(xi + 1, yi);\n const c = hashD(xi, yi + 1);\n const d = hashD(xi + 1, yi + 1);\n return a + (b - a) * fx + (c - a) * fy + (a - b - c + d) * fx * fy;\n}\n\n/** Deterministic hash in [0, 1). */\nexport function hashD(a: number, b: number): number {\n const h = Math.sin(a * 12.9898 + b * 78.233) * 43758.5453;\n return h - Math.floor(h);\n}\n\n/** Stable directions on a unit sphere (Fibonacci lattice). */\nexport function fibDir(i: number, n: number): [number, number, number] {\n const golden = Math.PI * (3 - Math.sqrt(5));\n const y = 1 - (2 * (i + 0.5)) / n;\n const rad = Math.sqrt(1 - y * y);\n const a = i * golden;\n return [rad * Math.cos(a), y, rad * Math.sin(a)];\n}\n\n/** Shortest signed angular distance, wrapped to (-π, π]. */\nexport function angleDelta(a: number, b: number): number {\n return Math.atan2(Math.sin(a - b), Math.cos(a - b));\n}\n\n/** Shared spin + tilt + orthographic projection. */\nexport function makeProj(yaw: number, tilt: number, cx: number, cy: number, scale: number): Projector {\n const st = Math.sin(tilt);\n const ct = Math.cos(tilt);\n const sy = Math.sin(yaw);\n const cyw = Math.cos(yaw);\n return (x, y, z) => {\n const x1 = x * cyw + z * sy;\n const z1 = -x * sy + z * cyw;\n const y1 = y * ct - z1 * st;\n const z2 = y * st + z1 * ct;\n return [cx + x1 * scale, cy - y1 * scale, z2];\n };\n}\n\n/**\n * Turn raw mode output into a finished frame: drop invisible marks, clamp\n * radii to the mode's floor, and z-sort far→near into draw order.\n *\n * This runs in the GEOMETRY step, not the painter, so a frame is a complete\n * set of draw instructions: every value is final and the array order is the\n * order to draw in. That is what lets the RN and SwiftUI ports share this\n * output verbatim — a port draws the list, it never re-derives anything —\n * and what lets the golden-vector tests compare numbers instead of pixels.\n */\nexport function finalizeFrame(dots: Dot[], lines: Line[], rMin = 0.3): OrbFrame {\n const visible: Dot[] = [];\n for (const d of dots) {\n if ((d.a ?? 1) < 0.02) continue;\n d.r = Math.max(rMin, d.r);\n visible.push(d);\n }\n visible.sort((a, b) => a.z - b.z);\n return { dots: visible, lines: lines.filter((l) => (l.a ?? 1) >= 0.02) };\n}\n\n/**\n * Dot radii were tuned for a 300pt frame; sub-linear scaling keeps small\n * spinners legible. Lower pow = radii shrink less with size.\n */\nexport function radiusScale(size: number, pow: number): number {\n return (size / 300) ** pow;\n}\n\n// Braid and Ribbon share the faint backing sphere, not their foreground motion.\n// Extract the identical loop so tuning the backdrop cannot diverge across modes.\nexport function ghostSphereDots(project: Projector, radius: number, radiusScale: number, count: number): Dot[] {\n const dots: Dot[] = [];\n for (let i = 0; i < count; i++) {\n const d = fibDir(i, count);\n const [x, y, z] = project(d[0] * radius, d[1] * radius, d[2] * radius);\n const depth = (z / radius + 1) / 2;\n dots.push({ x, y, z, r: 0.8 * radiusScale, white: 0.78, a: 0.1 + 0.22 * depth });\n }\n return dots;\n}\n"]}
@@ -0,0 +1,4 @@
1
+ import type { OrbFrame, OrbSize } from './types.js';
2
+ /** Independently authored decorative forms; no reference-site engine or presets. */
3
+ export declare function buildOrbPresentation(appearance: 'fluid' | 'matrix', size: OrbSize, time: number): OrbFrame;
4
+ //# sourceMappingURL=presentation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"presentation.d.ts","sourceRoot":"","sources":["../../../src/internal/thinking-orb/presentation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAI,EAAC,QAAQ,EAAC,OAAO,EAAC,MAAI,YAAY,CAAC;AAC9C,oFAAoF;AACpF,wBAAgB,oBAAoB,CAAC,UAAU,EAAC,OAAO,GAAC,QAAQ,EAAC,IAAI,EAAC,OAAO,EAAC,IAAI,EAAC,MAAM,GAAE,QAAQ,CAUlG"}