@hjmds/design-contracts 1.17.2 → 1.19.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 (274) hide show
  1. package/dist/action-session.d.ts +16 -0
  2. package/dist/action-session.d.ts.map +1 -1
  3. package/dist/action-session.js +18 -0
  4. package/dist/action-session.js.map +1 -1
  5. package/dist/activity-chip.d.ts +127 -0
  6. package/dist/activity-chip.d.ts.map +1 -0
  7. package/dist/activity-chip.js +65 -0
  8. package/dist/activity-chip.js.map +1 -0
  9. package/dist/base-recipes.d.ts +1 -1
  10. package/dist/base-recipes.d.ts.map +1 -1
  11. package/dist/base-recipes.js +2 -1
  12. package/dist/base-recipes.js.map +1 -1
  13. package/dist/behaviors.d.ts +9 -6
  14. package/dist/behaviors.d.ts.map +1 -1
  15. package/dist/behaviors.js +5 -3
  16. package/dist/behaviors.js.map +1 -1
  17. package/dist/bottom-navigation.d.ts +16 -0
  18. package/dist/bottom-navigation.d.ts.map +1 -1
  19. package/dist/bottom-navigation.js +18 -0
  20. package/dist/bottom-navigation.js.map +1 -1
  21. package/dist/card.d.ts +4 -0
  22. package/dist/card.d.ts.map +1 -1
  23. package/dist/card.js +4 -1
  24. package/dist/card.js.map +1 -1
  25. package/dist/carousel.d.ts +3 -0
  26. package/dist/carousel.d.ts.map +1 -1
  27. package/dist/carousel.js.map +1 -1
  28. package/dist/catalog.d.ts +80 -9
  29. package/dist/catalog.d.ts.map +1 -1
  30. package/dist/component-recipes.d.ts +74 -3
  31. package/dist/component-recipes.d.ts.map +1 -1
  32. package/dist/component-recipes.js +38 -6
  33. package/dist/component-recipes.js.map +1 -1
  34. package/dist/content-transition.d.ts +1 -1
  35. package/dist/content-transition.d.ts.map +1 -1
  36. package/dist/content-transition.js +2 -2
  37. package/dist/content-transition.js.map +1 -1
  38. package/dist/field-group.d.ts +14 -0
  39. package/dist/field-group.d.ts.map +1 -1
  40. package/dist/field-group.js +9 -0
  41. package/dist/field-group.js.map +1 -1
  42. package/dist/form.d.ts.map +1 -1
  43. package/dist/form.js +10 -3
  44. package/dist/form.js.map +1 -1
  45. package/dist/icon-button-recipe.d.ts +1 -5
  46. package/dist/icon-button-recipe.d.ts.map +1 -1
  47. package/dist/icon-button-recipe.js +2 -1
  48. package/dist/icon-button-recipe.js.map +1 -1
  49. package/dist/index.d.ts +3 -2
  50. package/dist/index.d.ts.map +1 -1
  51. package/dist/index.js +2 -0
  52. package/dist/index.js.map +1 -1
  53. package/dist/screen-patterns.d.ts +10 -0
  54. package/dist/screen-patterns.d.ts.map +1 -1
  55. package/dist/screen-patterns.js +17 -3
  56. package/dist/screen-patterns.js.map +1 -1
  57. package/dist/toast-liquid.d.ts +1 -1
  58. package/dist/toast-liquid.d.ts.map +1 -1
  59. package/dist/toast-liquid.js +3 -2
  60. package/dist/toast-liquid.js.map +1 -1
  61. package/dist/toast.d.ts +29 -2
  62. package/dist/toast.d.ts.map +1 -1
  63. package/dist/toast.js +59 -3
  64. package/dist/toast.js.map +1 -1
  65. package/dist/version.d.ts +1 -1
  66. package/dist/version.js +1 -1
  67. package/dist/version.js.map +1 -1
  68. package/docs/action-session.md +2 -0
  69. package/docs/activity-chip.md +34 -0
  70. package/docs/asset.md +7 -0
  71. package/docs/bottom-navigation.md +16 -1
  72. package/docs/brand-boundary.md +3 -3
  73. package/docs/collection-rail.md +4 -0
  74. package/docs/compound-controls.md +8 -3
  75. package/docs/consumer-policy.md +39 -120
  76. package/docs/generated/component-maturity.md +1 -1
  77. package/docs/generated/renderer-evidence.json +3 -3
  78. package/docs/generated/renderer-evidence.md +1 -1
  79. package/docs/generated/showcase-manifest.json +1 -1
  80. package/docs/gravity-letters.md +2 -0
  81. package/docs/grid-reveal.md +2 -0
  82. package/docs/layout.md +2 -2
  83. package/docs/load-more.md +5 -0
  84. package/docs/migration-native-legacy-removal.md +30 -17
  85. package/docs/optional-adapters.md +4 -0
  86. package/docs/screen-patterns.md +23 -1
  87. package/docs/toast.md +64 -2
  88. package/docs/usage/README.md +248 -243
  89. package/docs/usage/SELECTION.md +43 -0
  90. package/docs/usage/STANDARD.md +22 -10
  91. package/docs/usage/components/accordion.md +5 -3
  92. package/docs/usage/components/activity-chip.md +109 -0
  93. package/docs/usage/components/agreement.md +6 -9
  94. package/docs/usage/components/alert-dialog.md +12 -6
  95. package/docs/usage/components/asset.md +10 -4
  96. package/docs/usage/components/auth-provider-button.md +2 -2
  97. package/docs/usage/components/avatar.md +8 -6
  98. package/docs/usage/components/badge.md +4 -4
  99. package/docs/usage/components/bottom-cta.md +4 -4
  100. package/docs/usage/components/bottom-info.md +2 -2
  101. package/docs/usage/components/bottom-navigation.md +18 -6
  102. package/docs/usage/components/button.md +6 -3
  103. package/docs/usage/components/card.md +28 -7
  104. package/docs/usage/components/carousel.md +12 -4
  105. package/docs/usage/components/chat-message.md +10 -2
  106. package/docs/usage/components/chat-screen.md +5 -5
  107. package/docs/usage/components/checkbox-group.md +1 -1
  108. package/docs/usage/components/checkbox.md +2 -2
  109. package/docs/usage/components/chip.md +2 -2
  110. package/docs/usage/components/code-block.md +3 -4
  111. package/docs/usage/components/collapsible.md +6 -4
  112. package/docs/usage/components/combobox.md +2 -2
  113. package/docs/usage/components/command-palette.md +1 -1
  114. package/docs/usage/components/comment-thread-screen.md +7 -4
  115. package/docs/usage/components/container.md +1 -1
  116. package/docs/usage/components/content-transition.md +3 -2
  117. package/docs/usage/components/context-menu.md +2 -2
  118. package/docs/usage/components/counter-badge.md +3 -3
  119. package/docs/usage/components/data-table.md +1 -1
  120. package/docs/usage/components/date-picker.md +4 -4
  121. package/docs/usage/components/description-list.md +3 -3
  122. package/docs/usage/components/design-system-provider.md +2 -2
  123. package/docs/usage/components/dialog.md +14 -3
  124. package/docs/usage/components/divider.md +2 -2
  125. package/docs/usage/components/editor-screen.md +5 -3
  126. package/docs/usage/components/effect-surface.md +1 -1
  127. package/docs/usage/components/empty-state.md +6 -6
  128. package/docs/usage/components/field.md +5 -3
  129. package/docs/usage/components/file-picker.md +6 -3
  130. package/docs/usage/components/form.md +1 -1
  131. package/docs/usage/components/heading.md +3 -3
  132. package/docs/usage/components/icon-button.md +6 -3
  133. package/docs/usage/components/icon.md +1 -1
  134. package/docs/usage/components/image.md +5 -4
  135. package/docs/usage/components/keyboard-dock.md +1 -1
  136. package/docs/usage/components/layout.md +1 -1
  137. package/docs/usage/components/link.md +2 -2
  138. package/docs/usage/components/list-detail-screen.md +6 -6
  139. package/docs/usage/components/list-row.md +13 -4
  140. package/docs/usage/components/list.md +5 -4
  141. package/docs/usage/components/masonry.md +2 -1
  142. package/docs/usage/components/media-selection-screen.md +11 -5
  143. package/docs/usage/components/mentions.md +2 -2
  144. package/docs/usage/components/menu.md +3 -2
  145. package/docs/usage/components/menubar.md +2 -2
  146. package/docs/usage/components/message-composer.md +3 -3
  147. package/docs/usage/components/moderation-screen.md +3 -2
  148. package/docs/usage/components/notice.md +2 -2
  149. package/docs/usage/components/notification-inbox-screen.md +1 -1
  150. package/docs/usage/components/notification-item.md +2 -2
  151. package/docs/usage/components/number-field.md +3 -3
  152. package/docs/usage/components/otp-field.md +1 -1
  153. package/docs/usage/components/overview-screen.md +1 -1
  154. package/docs/usage/components/permission-screen.md +1 -1
  155. package/docs/usage/components/photo-source-sheet.md +1 -1
  156. package/docs/usage/components/popover.md +2 -2
  157. package/docs/usage/components/profile-screen.md +1 -1
  158. package/docs/usage/components/progress.md +2 -2
  159. package/docs/usage/components/qr-code.md +2 -2
  160. package/docs/usage/components/radio-group.md +1 -2
  161. package/docs/usage/components/radio.md +1 -2
  162. package/docs/usage/components/result.md +1 -1
  163. package/docs/usage/components/saved-items-screen.md +4 -2
  164. package/docs/usage/components/screen-layout.md +4 -3
  165. package/docs/usage/components/search-field.md +1 -1
  166. package/docs/usage/components/search-screen.md +4 -4
  167. package/docs/usage/components/section.md +3 -3
  168. package/docs/usage/components/segmented-control.md +4 -4
  169. package/docs/usage/components/select.md +2 -3
  170. package/docs/usage/components/settings-screen.md +18 -56
  171. package/docs/usage/components/sheet.md +10 -5
  172. package/docs/usage/components/sidebar.md +1 -1
  173. package/docs/usage/components/skeleton.md +1 -1
  174. package/docs/usage/components/skip-nav.md +1 -1
  175. package/docs/usage/components/slider.md +2 -2
  176. package/docs/usage/components/spinner.md +2 -2
  177. package/docs/usage/components/splitter.md +1 -1
  178. package/docs/usage/components/statistic.md +5 -4
  179. package/docs/usage/components/steps.md +2 -2
  180. package/docs/usage/components/surface.md +2 -3
  181. package/docs/usage/components/switch.md +1 -1
  182. package/docs/usage/components/tabs.md +4 -4
  183. package/docs/usage/components/tag.md +2 -2
  184. package/docs/usage/components/tags-input.md +4 -4
  185. package/docs/usage/components/text-area.md +5 -3
  186. package/docs/usage/components/text.md +85 -4
  187. package/docs/usage/components/timeline.md +2 -2
  188. package/docs/usage/components/toast.md +41 -13
  189. package/docs/usage/components/toggle-group.md +3 -3
  190. package/docs/usage/components/tooltip.md +1 -1
  191. package/docs/usage/components/top-bar.md +5 -4
  192. package/docs/usage/components/top.md +3 -3
  193. package/docs/usage/components/transfer-list.md +5 -4
  194. package/docs/usage/components/upload-item.md +3 -3
  195. package/docs/usage/components/virtual-list.md +1 -0
  196. package/docs/usage/compositions/action-feedback.md +42 -6
  197. package/docs/usage/compositions/action-recovery-optimistic.md +6 -1
  198. package/docs/usage/compositions/action-recovery-save.md +19 -23
  199. package/docs/usage/compositions/action-recovery-undo.md +6 -1
  200. package/docs/usage/compositions/activity-status.md +168 -0
  201. package/docs/usage/compositions/collection-detail.md +2 -0
  202. package/docs/usage/compositions/command-records.md +15 -5
  203. package/docs/usage/compositions/common-message.md +4 -2
  204. package/docs/usage/compositions/common-notification.md +5 -3
  205. package/docs/usage/compositions/compound-controls.md +13 -5
  206. package/docs/usage/compositions/content-transition-comparison.md +2 -2
  207. package/docs/usage/compositions/date-entry.md +10 -5
  208. package/docs/usage/compositions/date-time-selection.md +3 -3
  209. package/docs/usage/compositions/design-profile-comparison.md +7 -5
  210. package/docs/usage/compositions/disclosure.md +1 -1
  211. package/docs/usage/compositions/document-resource.md +10 -3
  212. package/docs/usage/compositions/expo-interactions.md +3 -2
  213. package/docs/usage/compositions/family-drawer.md +9 -4
  214. package/docs/usage/compositions/field-group.md +7 -1
  215. package/docs/usage/compositions/floating-action-button.md +18 -18
  216. package/docs/usage/compositions/illustrated-outcome.md +3 -2
  217. package/docs/usage/compositions/input-sheet.md +6 -2
  218. package/docs/usage/compositions/interaction-adapters.md +1 -1
  219. package/docs/usage/compositions/interaction-flow-apply.md +6 -3
  220. package/docs/usage/compositions/interaction-flow-draft.md +5 -2
  221. package/docs/usage/compositions/interaction-flow-search.md +5 -2
  222. package/docs/usage/compositions/live-list.md +7 -5
  223. package/docs/usage/compositions/navigation-bar-collection.md +8 -7
  224. package/docs/usage/compositions/optional-adapters.md +1 -1
  225. package/docs/usage/compositions/origin-dialog.md +5 -5
  226. package/docs/usage/compositions/paper-surface.md +1 -1
  227. package/docs/usage/compositions/photo-source.md +1 -1
  228. package/docs/usage/compositions/purpose-input-comment.md +5 -3
  229. package/docs/usage/compositions/purpose-input-message.md +5 -3
  230. package/docs/usage/compositions/reference-first.md +63 -42
  231. package/docs/usage/compositions/reference-review.md +60 -50
  232. package/docs/usage/compositions/reference-settings.md +60 -50
  233. package/docs/usage/compositions/selection-scope.md +48 -35
  234. package/docs/usage/compositions/stea-order-progress.md +1 -0
  235. package/docs/usage/compositions/stea-otp-verify.md +5 -3
  236. package/docs/usage/compositions/stea-pixel-empty.md +3 -3
  237. package/docs/usage/compositions/time-selection.md +6 -5
  238. package/docs/usage/compositions/upload-recovery.md +10 -1
  239. package/docs/usage/compositions/video-dialog.md +10 -3
  240. package/docs/usage/compositions/web-additions.md +5 -5
  241. package/docs/usage/compositions/web-navigation.md +1 -1
  242. package/docs/usage/screens/common-chat.md +21 -8
  243. package/docs/usage/screens/common-comments.md +13 -1
  244. package/docs/usage/screens/common-inbox.md +19 -6
  245. package/docs/usage/screens/common-login.md +19 -7
  246. package/docs/usage/screens/common-profile.md +22 -9
  247. package/docs/usage/screens/common-saved.md +16 -2
  248. package/docs/usage/screens/common-search.md +24 -4
  249. package/docs/usage/screens/common-settings.md +22 -50
  250. package/docs/usage/screens/common-shell.md +14 -2
  251. package/docs/usage/screens/dashboard.md +52 -109
  252. package/docs/usage/screens/discovery-gallery.md +57 -148
  253. package/docs/usage/screens/flow-collection.md +38 -9
  254. package/docs/usage/screens/flow-editor.md +25 -7
  255. package/docs/usage/screens/flow-media.md +23 -7
  256. package/docs/usage/screens/flow-moderation.md +15 -2
  257. package/docs/usage/screens/flow-onboarding.md +3 -3
  258. package/docs/usage/screens/flow-permission.md +17 -3
  259. package/docs/usage/screens/landing.md +37 -20
  260. package/docs/usage/screens/mockup-studio.md +22 -7
  261. package/docs/usage/screens/notification-settings.md +18 -4
  262. package/docs/usage/screens/product-bento.md +18 -9
  263. package/docs/usage/screens/reference-comparison.md +29 -10
  264. package/docs/usage/tokens/color.md +6 -3
  265. package/docs/usage/tokens/elevation-opacity.md +4 -2
  266. package/docs/usage/tokens/font-roles.md +2 -2
  267. package/docs/usage/tokens/layers.md +3 -3
  268. package/docs/usage/tokens/motion.md +2 -2
  269. package/docs/usage/tokens/radius.md +4 -2
  270. package/docs/usage/tokens/spacing.md +3 -3
  271. package/docs/usage/tokens/theme-studio.md +2 -2
  272. package/docs/usage/tokens/typography-studio.md +14 -8
  273. package/docs/usage/tokens/typography.md +15 -5
  274. package/package.json +7 -1
@@ -1 +1 @@
1
- {"version":3,"file":"bottom-navigation.js","sourceRoot":"","sources":["../src/bottom-navigation.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n type BottomNavigationDensity,\n type BottomNavigationDistribution,\n type BottomNavigationPresentation,\n bottomNavigationRecipeDefaults,\n} from \"./bottom-navigation-defaults.js\";\nimport { formatCounterBadgeCount } from \"./counter-badge.js\";\nimport {\n type SemanticIconName,\n} from \"./icon.js\";\nimport type { DesignSystemDirection } from \"./design-system-provider.js\";\n\nexport type BottomNavigationDirection = DesignSystemDirection;\nexport type BottomNavigationKeyboardBehavior = \"hide\" | \"remain\";\n\nexport type BottomNavigationConfiguration = Readonly<{\n presentation?: BottomNavigationPresentation;\n distribution?: BottomNavigationDistribution;\n density?: BottomNavigationDensity;\n direction?: BottomNavigationDirection;\n keyboardBehavior?: BottomNavigationKeyboardBehavior;\n}>;\n\nexport type ResolvedBottomNavigationConfiguration = Readonly<{\n presentation: BottomNavigationPresentation;\n distribution: BottomNavigationDistribution;\n density: BottomNavigationDensity;\n direction: BottomNavigationDirection;\n keyboardBehavior: BottomNavigationKeyboardBehavior;\n}>;\n\n/**\n * Bottom navigation only accepts numeric counters. A silent status dot is too\n * ambiguous for a persistent, top-level destination.\n */\nexport type BottomNavigationCounterBadge = Readonly<{\n count: number;\n max?: number;\n /** Product-localized copy, for example \"3 unread messages\". */\n accessibilityLabel: string;\n}>;\n\n/**\n * BottomNavigation owns icon appearance through its density and state recipe.\n * Products may extend the semantic name registry, but never override size,\n * tone, stroke weight, accessibility, or logical direction at the call site.\n */\nexport type BottomNavigationIconDescriptor<\n IconName extends string = SemanticIconName,\n> = Readonly<{\n name: IconName;\n decorative?: true;\n accessibilityLabel?: never;\n size?: never;\n tone?: never;\n weight?: never;\n directionality?: never;\n}>;\n\nexport type ResolvedBottomNavigationIconDescriptor<\n IconName extends string = SemanticIconName,\n> = Readonly<{\n name: IconName;\n decorative: true;\n}>;\n\n/**\n * Items are stable top-level destinations, never actions. The icon is always\n * decorative because the visible/item accessibility label already names it.\n */\nexport type BottomNavigationItemDescriptor<\n Key extends string = string,\n IconName extends string = SemanticIconName,\n> = Readonly<{\n id: Key;\n label: string;\n accessibilityLabel?: string;\n icon: BottomNavigationIconDescriptor<IconName>;\n badge?: BottomNavigationCounterBadge;\n disabled?: boolean;\n}>;\n\n/** The router owns selectedKey; the design-system never keeps a second copy. */\nexport type BottomNavigationDescriptor<\n Key extends string = string,\n IconName extends string = SemanticIconName,\n> = Readonly<{\n accessibilityLabel: string;\n items: readonly BottomNavigationItemDescriptor<Key, IconName>[];\n selectedKey: Key;\n}>;\n\n/**\n * The resolved badge intentionally has no accessible label. Renderers hide its\n * subtree and use only the item's resolvedAccessibilityLabel, preventing the\n * counter from being announced twice.\n */\nexport type ResolvedBottomNavigationCounterBadge = Readonly<{\n visibleLabel: string;\n hiddenFromAccessibility: true;\n}>;\n\nexport type ResolvedBottomNavigationItemDescriptor<\n Key extends string = string,\n IconName extends string = SemanticIconName,\n> = Readonly<{\n id: Key;\n label: string;\n icon: ResolvedBottomNavigationIconDescriptor<IconName>;\n disabled: boolean;\n badge: ResolvedBottomNavigationCounterBadge | null;\n resolvedAccessibilityLabel: string;\n}>;\n\nexport type ResolvedBottomNavigationDescriptor<\n Key extends string = string,\n IconName extends string = SemanticIconName,\n> = Readonly<{\n accessibilityLabel: string;\n items: readonly ResolvedBottomNavigationItemDescriptor<Key, IconName>[];\n selectedKey: Key;\n}>;\n\nexport type BottomNavigationActivation<Key extends string = string> = Readonly<{\n key: Key;\n reason: \"navigate\" | \"reselect\";\n}>;\n\n/**\n * `maxItems` follows the platform bars rather than Material's five-destination\n * guidance: iOS tab bars and Android navigation bars both render six labelled\n * destinations without collapsing, and products that ship six need the shared\n * contract to describe them instead of routing around it.\n */\nexport const bottomNavigationBehaviorDefaults = {\n direction: \"ltr\",\n keyboardBehavior: \"hide\",\n minItems: 2,\n maxItems: 6,\n} as const satisfies Readonly<{\n direction: BottomNavigationDirection;\n keyboardBehavior: BottomNavigationKeyboardBehavior;\n minItems: number;\n maxItems: number;\n}>;\n\nfunction validateTrimmedCopy(value: unknown, field: string): asserts value is string {\n if (typeof value !== \"string\" || value.trim().length === 0) {\n throw new TypeError(`${field} must not be empty`);\n }\n if (value !== value.trim()) {\n throw new TypeError(`${field} must not start or end with whitespace`);\n }\n}\n\nfunction isObject(value: unknown): value is Readonly<Record<string, unknown>> {\n return value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nconst configurationKeys = new Set([\n \"presentation\",\n \"distribution\",\n \"density\",\n \"direction\",\n \"keyboardBehavior\",\n]);\nconst descriptorKeys = new Set([\"accessibilityLabel\", \"items\", \"selectedKey\"]);\nconst itemKeys = new Set([\n \"id\",\n \"label\",\n \"accessibilityLabel\",\n \"icon\",\n \"badge\",\n \"disabled\",\n]);\nconst iconKeys = new Set([\"name\", \"decorative\"]);\nconst badgeKeys = new Set([\"count\", \"max\", \"accessibilityLabel\"]);\n\nfunction rejectUnknownKeys(\n value: Readonly<Record<string, unknown>>,\n allowed: ReadonlySet<string>,\n field: string,\n): void {\n for (const key of Object.keys(value)) {\n if (!allowed.has(key)) {\n throw new TypeError(`Unsupported BottomNavigation ${field} field: ${key}`);\n }\n }\n}\n\nfunction normalizedCopy(value: string): string {\n return value.normalize(\"NFKC\").toLocaleLowerCase();\n}\n\nfunction validateBadge(badge: BottomNavigationCounterBadge): void {\n if (!isObject(badge)) {\n throw new TypeError(\"BottomNavigation badge must be an object\");\n }\n rejectUnknownKeys(badge, badgeKeys, \"badge\");\n if (!Number.isSafeInteger(badge.count) || badge.count < 0) {\n throw new TypeError(\"BottomNavigation badge count must be a non-negative safe integer\");\n }\n if (\n badge.max !== undefined &&\n (!Number.isSafeInteger(badge.max) || badge.max < 1)\n ) {\n throw new TypeError(\"BottomNavigation badge max must be a positive safe integer\");\n }\n validateTrimmedCopy(\n badge.accessibilityLabel,\n \"BottomNavigation badge accessibilityLabel\",\n );\n}\n\nfunction validateItem<Key extends string, IconName extends string>(\n item: BottomNavigationItemDescriptor<Key, IconName>,\n): void {\n if (!isObject(item)) {\n throw new TypeError(\"BottomNavigation item must be an object\");\n }\n rejectUnknownKeys(item, itemKeys, \"item\");\n validateTrimmedCopy(item.id, \"BottomNavigation item id\");\n validateTrimmedCopy(item.label, \"BottomNavigation item label\");\n if (item.accessibilityLabel !== undefined) {\n validateTrimmedCopy(\n item.accessibilityLabel,\n \"BottomNavigation item accessibilityLabel\",\n );\n if (\n !normalizedCopy(item.accessibilityLabel).includes(\n normalizedCopy(item.label),\n )\n ) {\n throw new TypeError(\n \"BottomNavigation item accessibilityLabel must include the visible label\",\n );\n }\n }\n if (!isObject(item.icon)) {\n throw new TypeError(\"BottomNavigation item icon must be an object\");\n }\n if (item.icon.decorative !== undefined && item.icon.decorative !== true) {\n throw new TypeError(\"BottomNavigation item icon must be decorative\");\n }\n rejectUnknownKeys(item.icon, iconKeys, \"item icon\");\n validateTrimmedCopy(item.icon.name, \"BottomNavigation item icon name\");\n if (item.disabled !== undefined && typeof item.disabled !== \"boolean\") {\n throw new TypeError(\"BottomNavigation item disabled must be a boolean\");\n }\n if (item.badge !== undefined) validateBadge(item.badge);\n}\n\nconst presentations = new Set<BottomNavigationPresentation>([\"bar\", \"floating\", \"capsule\"]);\nconst distributions = new Set<BottomNavigationDistribution>([\"equal\", \"center-gap\"]);\nconst densities = new Set<BottomNavigationDensity>([\"compact\", \"regular\"]);\nconst directions = new Set<BottomNavigationDirection>([\"ltr\", \"rtl\"]);\nconst keyboardBehaviors = new Set<BottomNavigationKeyboardBehavior>([\n \"hide\",\n \"remain\",\n]);\n\nexport function validateBottomNavigationConfiguration(\n configuration: BottomNavigationConfiguration,\n itemCount: number,\n): void {\n if (!isObject(configuration)) {\n throw new TypeError(\"BottomNavigation configuration must be an object\");\n }\n rejectUnknownKeys(configuration, configurationKeys, \"configuration\");\n if (\n !Number.isSafeInteger(itemCount) ||\n itemCount < bottomNavigationBehaviorDefaults.minItems ||\n itemCount > bottomNavigationBehaviorDefaults.maxItems\n ) {\n throw new RangeError(\n `BottomNavigation configuration requires ${bottomNavigationBehaviorDefaults.minItems} to ${bottomNavigationBehaviorDefaults.maxItems} destinations`,\n );\n }\n if (\n configuration.presentation !== undefined &&\n !presentations.has(configuration.presentation)\n ) {\n throw new TypeError(\n `Unsupported BottomNavigation presentation: ${String(configuration.presentation)}`,\n );\n }\n if (\n configuration.distribution !== undefined &&\n !distributions.has(configuration.distribution)\n ) {\n throw new TypeError(\n `Unsupported BottomNavigation distribution: ${String(configuration.distribution)}`,\n );\n }\n if (configuration.density !== undefined && !densities.has(configuration.density)) {\n throw new TypeError(\n `Unsupported BottomNavigation density: ${String(configuration.density)}`,\n );\n }\n if (\n configuration.direction !== undefined &&\n !directions.has(configuration.direction)\n ) {\n throw new TypeError(\n `Unsupported BottomNavigation direction: ${String(configuration.direction)}`,\n );\n }\n if (\n configuration.keyboardBehavior !== undefined &&\n !keyboardBehaviors.has(configuration.keyboardBehavior)\n ) {\n throw new TypeError(\n `Unsupported BottomNavigation keyboardBehavior: ${String(configuration.keyboardBehavior)}`,\n );\n }\n // Capsule actions sit beside the destination surface, so reserving a central gap would duplicate their space.\n if (configuration.presentation === \"capsule\" && configuration.distribution === \"center-gap\") {\n throw new TypeError(\"BottomNavigation capsule uses an adjacent action, not center-gap\");\n }\n if (configuration.distribution === \"center-gap\" && itemCount % 2 !== 0) {\n throw new RangeError(\n \"BottomNavigation center-gap distribution requires an even destination count\",\n );\n }\n}\n\nexport function resolveBottomNavigationConfiguration(\n configuration: BottomNavigationConfiguration,\n itemCount: number,\n): ResolvedBottomNavigationConfiguration {\n validateBottomNavigationConfiguration(configuration, itemCount);\n return {\n presentation:\n configuration.presentation ?? bottomNavigationRecipeDefaults.presentation,\n distribution:\n configuration.distribution ?? bottomNavigationRecipeDefaults.distribution,\n density: configuration.density ?? bottomNavigationRecipeDefaults.density,\n direction: configuration.direction ?? bottomNavigationBehaviorDefaults.direction,\n keyboardBehavior:\n configuration.keyboardBehavior ??\n bottomNavigationBehaviorDefaults.keyboardBehavior,\n };\n}\n\nexport function validateBottomNavigationDescriptor<\n Key extends string,\n IconName extends string,\n>(descriptor: BottomNavigationDescriptor<Key, IconName>): void {\n if (!isObject(descriptor)) {\n throw new TypeError(\"BottomNavigation descriptor must be an object\");\n }\n rejectUnknownKeys(descriptor, descriptorKeys, \"descriptor\");\n validateTrimmedCopy(\n descriptor.accessibilityLabel,\n \"BottomNavigation accessibilityLabel\",\n );\n if (!Array.isArray(descriptor.items)) {\n throw new TypeError(\"BottomNavigation items must be an array\");\n }\n validateTrimmedCopy(\n descriptor.selectedKey,\n \"BottomNavigation selectedKey\",\n );\n if (\n descriptor.items.length < bottomNavigationBehaviorDefaults.minItems ||\n descriptor.items.length > bottomNavigationBehaviorDefaults.maxItems\n ) {\n throw new RangeError(\n `BottomNavigation must contain ${bottomNavigationBehaviorDefaults.minItems} to ${bottomNavigationBehaviorDefaults.maxItems} destinations`,\n );\n }\n\n const ids = new Set<Key>();\n for (const item of descriptor.items) {\n validateItem(item);\n if (ids.has(item.id)) {\n throw new TypeError(`Duplicate BottomNavigation item id: ${item.id}`);\n }\n ids.add(item.id);\n }\n\n const selected = descriptor.items.find(\n (item) => item.id === descriptor.selectedKey,\n );\n if (!selected) {\n throw new RangeError(\n `BottomNavigation selectedKey must exist: ${descriptor.selectedKey}`,\n );\n }\n if (selected.disabled) {\n throw new RangeError(\"BottomNavigation selected destination must be enabled\");\n }\n}\n\nexport function resolveBottomNavigationItem<\n Key extends string,\n IconName extends string,\n>(\n item: BottomNavigationItemDescriptor<Key, IconName>,\n): ResolvedBottomNavigationItemDescriptor<Key, IconName> {\n validateItem(item);\n const baseAccessibilityLabel = item.accessibilityLabel ?? item.label;\n const visibleBadgeLabel = item.badge\n ? formatCounterBadgeCount(item.badge.count, item.badge.max)\n : null;\n const badge = visibleBadgeLabel\n ? ({\n visibleLabel: visibleBadgeLabel,\n hiddenFromAccessibility: true,\n } as const)\n : null;\n\n return {\n id: item.id,\n label: item.label,\n icon: { name: item.icon.name, decorative: true },\n disabled: item.disabled ?? false,\n badge,\n resolvedAccessibilityLabel:\n badge && item.badge\n ? `${baseAccessibilityLabel}, ${item.badge.accessibilityLabel}`\n : baseAccessibilityLabel,\n };\n}\n\nexport function resolveBottomNavigationDescriptor<\n Key extends string,\n IconName extends string,\n>(\n descriptor: BottomNavigationDescriptor<Key, IconName>,\n): ResolvedBottomNavigationDescriptor<Key, IconName> {\n validateBottomNavigationDescriptor(descriptor);\n return {\n accessibilityLabel: descriptor.accessibilityLabel,\n items: descriptor.items.map(resolveBottomNavigationItem),\n selectedKey: descriptor.selectedKey,\n };\n}\n\n/**\n * Produces navigation intent without mutating selectedKey. A renderer forwards\n * the request to its router, which updates selectedKey only after navigation.\n */\nexport function resolveBottomNavigationActivation<\n Key extends string,\n IconName extends string,\n>(\n descriptor: BottomNavigationDescriptor<Key, IconName>,\n key: Key,\n): BottomNavigationActivation<Key> | null {\n validateBottomNavigationDescriptor(descriptor);\n const item = descriptor.items.find((candidate) => candidate.id === key);\n if (!item || item.disabled) return null;\n return {\n key,\n reason: key === descriptor.selectedKey ? \"reselect\" : \"navigate\",\n };\n}\n"]}
1
+ {"version":3,"file":"bottom-navigation.js","sourceRoot":"","sources":["../src/bottom-navigation.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n type BottomNavigationDensity,\n type BottomNavigationDistribution,\n type BottomNavigationPresentation,\n bottomNavigationRecipeDefaults,\n} from \"./bottom-navigation-defaults.js\";\nimport { formatCounterBadgeCount } from \"./counter-badge.js\";\nimport {\n type SemanticIconName,\n} from \"./icon.js\";\nimport type { DesignSystemDirection } from \"./design-system-provider.js\";\n\nexport type BottomNavigationDirection = DesignSystemDirection;\nexport type BottomNavigationKeyboardBehavior = \"hide\" | \"remain\";\n/**\n * `hidden` drops the visible destination name and keeps it as the item's\n * accessible name. Icon-only bars rely on the icon stroke/scale emphasis (and\n * any product selection mark) for non-color selected evidence, so products\n * choose it deliberately; the default keeps labels visible. Added 2026-10-10\n * for BurnTok's icon-only dock instead of letting the app hide labels with\n * deprecated styles or transparent palette overrides.\n */\nexport type BottomNavigationLabels = \"visible\" | \"hidden\";\n\nexport type BottomNavigationConfiguration = Readonly<{\n presentation?: BottomNavigationPresentation;\n distribution?: BottomNavigationDistribution;\n density?: BottomNavigationDensity;\n direction?: BottomNavigationDirection;\n keyboardBehavior?: BottomNavigationKeyboardBehavior;\n labels?: BottomNavigationLabels;\n /** Inset selected destination card, with equal widths and persistent labels. Floating only. */\n selection?: \"emphasis\" | \"tile\";\n}>;\n\nexport type ResolvedBottomNavigationConfiguration = Readonly<{\n presentation: BottomNavigationPresentation;\n distribution: BottomNavigationDistribution;\n density: BottomNavigationDensity;\n direction: BottomNavigationDirection;\n keyboardBehavior: BottomNavigationKeyboardBehavior;\n labels: BottomNavigationLabels;\n selection: \"emphasis\" | \"tile\";\n}>;\n\n/**\n * Bottom navigation only accepts numeric counters. A silent status dot is too\n * ambiguous for a persistent, top-level destination.\n */\nexport type BottomNavigationCounterBadge = Readonly<{\n count: number;\n max?: number;\n /** Product-localized copy, for example \"3 unread messages\". */\n accessibilityLabel: string;\n}>;\n\n/**\n * BottomNavigation owns icon appearance through its density and state recipe.\n * Products may extend the semantic name registry, but never override size,\n * tone, stroke weight, accessibility, or logical direction at the call site.\n */\nexport type BottomNavigationIconDescriptor<\n IconName extends string = SemanticIconName,\n> = Readonly<{\n name: IconName;\n decorative?: true;\n accessibilityLabel?: never;\n size?: never;\n tone?: never;\n weight?: never;\n directionality?: never;\n}>;\n\nexport type ResolvedBottomNavigationIconDescriptor<\n IconName extends string = SemanticIconName,\n> = Readonly<{\n name: IconName;\n decorative: true;\n}>;\n\n/**\n * Items are stable top-level destinations, never actions. The icon is always\n * decorative because the visible/item accessibility label already names it.\n */\nexport type BottomNavigationItemDescriptor<\n Key extends string = string,\n IconName extends string = SemanticIconName,\n> = Readonly<{\n id: Key;\n label: string;\n accessibilityLabel?: string;\n icon: BottomNavigationIconDescriptor<IconName>;\n badge?: BottomNavigationCounterBadge;\n disabled?: boolean;\n}>;\n\n/** The router owns selectedKey; the design-system never keeps a second copy. */\nexport type BottomNavigationDescriptor<\n Key extends string = string,\n IconName extends string = SemanticIconName,\n> = Readonly<{\n accessibilityLabel: string;\n items: readonly BottomNavigationItemDescriptor<Key, IconName>[];\n selectedKey: Key;\n}>;\n\n/**\n * The resolved badge intentionally has no accessible label. Renderers hide its\n * subtree and use only the item's resolvedAccessibilityLabel, preventing the\n * counter from being announced twice.\n */\nexport type ResolvedBottomNavigationCounterBadge = Readonly<{\n visibleLabel: string;\n hiddenFromAccessibility: true;\n}>;\n\nexport type ResolvedBottomNavigationItemDescriptor<\n Key extends string = string,\n IconName extends string = SemanticIconName,\n> = Readonly<{\n id: Key;\n label: string;\n icon: ResolvedBottomNavigationIconDescriptor<IconName>;\n disabled: boolean;\n badge: ResolvedBottomNavigationCounterBadge | null;\n resolvedAccessibilityLabel: string;\n}>;\n\nexport type ResolvedBottomNavigationDescriptor<\n Key extends string = string,\n IconName extends string = SemanticIconName,\n> = Readonly<{\n accessibilityLabel: string;\n items: readonly ResolvedBottomNavigationItemDescriptor<Key, IconName>[];\n selectedKey: Key;\n}>;\n\nexport type BottomNavigationActivation<Key extends string = string> = Readonly<{\n key: Key;\n reason: \"navigate\" | \"reselect\";\n}>;\n\n/**\n * `maxItems` follows the platform bars rather than Material's five-destination\n * guidance: iOS tab bars and Android navigation bars both render six labelled\n * destinations without collapsing, and products that ship six need the shared\n * contract to describe them instead of routing around it.\n */\nexport const bottomNavigationBehaviorDefaults = {\n direction: \"ltr\",\n keyboardBehavior: \"hide\",\n labels: \"visible\",\n selection: \"emphasis\",\n minItems: 2,\n maxItems: 6,\n} as const satisfies Readonly<{\n direction: BottomNavigationDirection;\n keyboardBehavior: BottomNavigationKeyboardBehavior;\n labels: BottomNavigationLabels;\n selection: \"emphasis\" | \"tile\";\n minItems: number;\n maxItems: number;\n}>;\n\nfunction validateTrimmedCopy(value: unknown, field: string): asserts value is string {\n if (typeof value !== \"string\" || value.trim().length === 0) {\n throw new TypeError(`${field} must not be empty`);\n }\n if (value !== value.trim()) {\n throw new TypeError(`${field} must not start or end with whitespace`);\n }\n}\n\nfunction isObject(value: unknown): value is Readonly<Record<string, unknown>> {\n return value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nconst configurationKeys = new Set([\n \"presentation\",\n \"distribution\",\n \"density\",\n \"direction\",\n \"keyboardBehavior\",\n \"labels\",\n \"selection\",\n]);\nconst descriptorKeys = new Set([\"accessibilityLabel\", \"items\", \"selectedKey\"]);\nconst itemKeys = new Set([\n \"id\",\n \"label\",\n \"accessibilityLabel\",\n \"icon\",\n \"badge\",\n \"disabled\",\n]);\nconst iconKeys = new Set([\"name\", \"decorative\"]);\nconst badgeKeys = new Set([\"count\", \"max\", \"accessibilityLabel\"]);\n\nfunction rejectUnknownKeys(\n value: Readonly<Record<string, unknown>>,\n allowed: ReadonlySet<string>,\n field: string,\n): void {\n for (const key of Object.keys(value)) {\n if (!allowed.has(key)) {\n throw new TypeError(`Unsupported BottomNavigation ${field} field: ${key}`);\n }\n }\n}\n\nfunction normalizedCopy(value: string): string {\n return value.normalize(\"NFKC\").toLocaleLowerCase();\n}\n\nfunction validateBadge(badge: BottomNavigationCounterBadge): void {\n if (!isObject(badge)) {\n throw new TypeError(\"BottomNavigation badge must be an object\");\n }\n rejectUnknownKeys(badge, badgeKeys, \"badge\");\n if (!Number.isSafeInteger(badge.count) || badge.count < 0) {\n throw new TypeError(\"BottomNavigation badge count must be a non-negative safe integer\");\n }\n if (\n badge.max !== undefined &&\n (!Number.isSafeInteger(badge.max) || badge.max < 1)\n ) {\n throw new TypeError(\"BottomNavigation badge max must be a positive safe integer\");\n }\n validateTrimmedCopy(\n badge.accessibilityLabel,\n \"BottomNavigation badge accessibilityLabel\",\n );\n}\n\nfunction validateItem<Key extends string, IconName extends string>(\n item: BottomNavigationItemDescriptor<Key, IconName>,\n): void {\n if (!isObject(item)) {\n throw new TypeError(\"BottomNavigation item must be an object\");\n }\n rejectUnknownKeys(item, itemKeys, \"item\");\n validateTrimmedCopy(item.id, \"BottomNavigation item id\");\n validateTrimmedCopy(item.label, \"BottomNavigation item label\");\n if (item.accessibilityLabel !== undefined) {\n validateTrimmedCopy(\n item.accessibilityLabel,\n \"BottomNavigation item accessibilityLabel\",\n );\n if (\n !normalizedCopy(item.accessibilityLabel).includes(\n normalizedCopy(item.label),\n )\n ) {\n throw new TypeError(\n \"BottomNavigation item accessibilityLabel must include the visible label\",\n );\n }\n }\n if (!isObject(item.icon)) {\n throw new TypeError(\"BottomNavigation item icon must be an object\");\n }\n if (item.icon.decorative !== undefined && item.icon.decorative !== true) {\n throw new TypeError(\"BottomNavigation item icon must be decorative\");\n }\n rejectUnknownKeys(item.icon, iconKeys, \"item icon\");\n validateTrimmedCopy(item.icon.name, \"BottomNavigation item icon name\");\n if (item.disabled !== undefined && typeof item.disabled !== \"boolean\") {\n throw new TypeError(\"BottomNavigation item disabled must be a boolean\");\n }\n if (item.badge !== undefined) validateBadge(item.badge);\n}\n\nconst presentations = new Set<BottomNavigationPresentation>([\"bar\", \"floating\", \"capsule\"]);\nconst distributions = new Set<BottomNavigationDistribution>([\"equal\", \"center-gap\"]);\nconst densities = new Set<BottomNavigationDensity>([\"compact\", \"regular\"]);\nconst directions = new Set<BottomNavigationDirection>([\"ltr\", \"rtl\"]);\nconst keyboardBehaviors = new Set<BottomNavigationKeyboardBehavior>([\n \"hide\",\n \"remain\",\n]);\nconst labelModes = new Set<BottomNavigationLabels>([\"visible\", \"hidden\"]);\n\nexport function validateBottomNavigationConfiguration(\n configuration: BottomNavigationConfiguration,\n itemCount: number,\n): void {\n if (!isObject(configuration)) {\n throw new TypeError(\"BottomNavigation configuration must be an object\");\n }\n rejectUnknownKeys(configuration, configurationKeys, \"configuration\");\n if (\n !Number.isSafeInteger(itemCount) ||\n itemCount < bottomNavigationBehaviorDefaults.minItems ||\n itemCount > bottomNavigationBehaviorDefaults.maxItems\n ) {\n throw new RangeError(\n `BottomNavigation configuration requires ${bottomNavigationBehaviorDefaults.minItems} to ${bottomNavigationBehaviorDefaults.maxItems} destinations`,\n );\n }\n if (\n configuration.presentation !== undefined &&\n !presentations.has(configuration.presentation)\n ) {\n throw new TypeError(\n `Unsupported BottomNavigation presentation: ${String(configuration.presentation)}`,\n );\n }\n if (\n configuration.distribution !== undefined &&\n !distributions.has(configuration.distribution)\n ) {\n throw new TypeError(\n `Unsupported BottomNavigation distribution: ${String(configuration.distribution)}`,\n );\n }\n if (configuration.density !== undefined && !densities.has(configuration.density)) {\n throw new TypeError(\n `Unsupported BottomNavigation density: ${String(configuration.density)}`,\n );\n }\n if (\n configuration.direction !== undefined &&\n !directions.has(configuration.direction)\n ) {\n throw new TypeError(\n `Unsupported BottomNavigation direction: ${String(configuration.direction)}`,\n );\n }\n if (\n configuration.keyboardBehavior !== undefined &&\n !keyboardBehaviors.has(configuration.keyboardBehavior)\n ) {\n throw new TypeError(\n `Unsupported BottomNavigation keyboardBehavior: ${String(configuration.keyboardBehavior)}`,\n );\n }\n if (configuration.labels !== undefined && !labelModes.has(configuration.labels)) {\n throw new TypeError(\n `Unsupported BottomNavigation labels: ${String(configuration.labels)}`,\n );\n }\n if (configuration.selection !== undefined && ![\"emphasis\", \"tile\"].includes(configuration.selection)) {\n throw new TypeError(\"Unsupported BottomNavigation selection\");\n }\n // Spint's selected card must not inherit capsule's hidden names or unequal widths.\n if (configuration.selection === \"tile\" &&\n (configuration.presentation !== \"floating\" || configuration.distribution === \"center-gap\" || configuration.labels === \"hidden\")) {\n throw new TypeError(\"BottomNavigation tile selection requires floating, equal distribution and visible labels\");\n }\n // Capsule actions sit beside the destination surface, so reserving a central gap would duplicate their space.\n if (configuration.presentation === \"capsule\" && configuration.distribution === \"center-gap\") {\n throw new TypeError(\"BottomNavigation capsule uses an adjacent action, not center-gap\");\n }\n if (configuration.distribution === \"center-gap\" && itemCount % 2 !== 0) {\n throw new RangeError(\n \"BottomNavigation center-gap distribution requires an even destination count\",\n );\n }\n}\n\nexport function resolveBottomNavigationConfiguration(\n configuration: BottomNavigationConfiguration,\n itemCount: number,\n): ResolvedBottomNavigationConfiguration {\n validateBottomNavigationConfiguration(configuration, itemCount);\n return {\n presentation:\n configuration.presentation ?? bottomNavigationRecipeDefaults.presentation,\n distribution:\n configuration.distribution ?? bottomNavigationRecipeDefaults.distribution,\n density: configuration.density ?? bottomNavigationRecipeDefaults.density,\n direction: configuration.direction ?? bottomNavigationBehaviorDefaults.direction,\n keyboardBehavior:\n configuration.keyboardBehavior ??\n bottomNavigationBehaviorDefaults.keyboardBehavior,\n labels: configuration.labels ?? bottomNavigationBehaviorDefaults.labels,\n selection: configuration.selection ?? bottomNavigationBehaviorDefaults.selection,\n };\n}\n\nexport function validateBottomNavigationDescriptor<\n Key extends string,\n IconName extends string,\n>(descriptor: BottomNavigationDescriptor<Key, IconName>): void {\n if (!isObject(descriptor)) {\n throw new TypeError(\"BottomNavigation descriptor must be an object\");\n }\n rejectUnknownKeys(descriptor, descriptorKeys, \"descriptor\");\n validateTrimmedCopy(\n descriptor.accessibilityLabel,\n \"BottomNavigation accessibilityLabel\",\n );\n if (!Array.isArray(descriptor.items)) {\n throw new TypeError(\"BottomNavigation items must be an array\");\n }\n validateTrimmedCopy(\n descriptor.selectedKey,\n \"BottomNavigation selectedKey\",\n );\n if (\n descriptor.items.length < bottomNavigationBehaviorDefaults.minItems ||\n descriptor.items.length > bottomNavigationBehaviorDefaults.maxItems\n ) {\n throw new RangeError(\n `BottomNavigation must contain ${bottomNavigationBehaviorDefaults.minItems} to ${bottomNavigationBehaviorDefaults.maxItems} destinations`,\n );\n }\n\n const ids = new Set<Key>();\n for (const item of descriptor.items) {\n validateItem(item);\n if (ids.has(item.id)) {\n throw new TypeError(`Duplicate BottomNavigation item id: ${item.id}`);\n }\n ids.add(item.id);\n }\n\n const selected = descriptor.items.find(\n (item) => item.id === descriptor.selectedKey,\n );\n if (!selected) {\n throw new RangeError(\n `BottomNavigation selectedKey must exist: ${descriptor.selectedKey}`,\n );\n }\n if (selected.disabled) {\n throw new RangeError(\"BottomNavigation selected destination must be enabled\");\n }\n}\n\nexport function resolveBottomNavigationItem<\n Key extends string,\n IconName extends string,\n>(\n item: BottomNavigationItemDescriptor<Key, IconName>,\n): ResolvedBottomNavigationItemDescriptor<Key, IconName> {\n validateItem(item);\n const baseAccessibilityLabel = item.accessibilityLabel ?? item.label;\n const visibleBadgeLabel = item.badge\n ? formatCounterBadgeCount(item.badge.count, item.badge.max)\n : null;\n const badge = visibleBadgeLabel\n ? ({\n visibleLabel: visibleBadgeLabel,\n hiddenFromAccessibility: true,\n } as const)\n : null;\n\n return {\n id: item.id,\n label: item.label,\n icon: { name: item.icon.name, decorative: true },\n disabled: item.disabled ?? false,\n badge,\n resolvedAccessibilityLabel:\n badge && item.badge\n ? `${baseAccessibilityLabel}, ${item.badge.accessibilityLabel}`\n : baseAccessibilityLabel,\n };\n}\n\nexport function resolveBottomNavigationDescriptor<\n Key extends string,\n IconName extends string,\n>(\n descriptor: BottomNavigationDescriptor<Key, IconName>,\n): ResolvedBottomNavigationDescriptor<Key, IconName> {\n validateBottomNavigationDescriptor(descriptor);\n return {\n accessibilityLabel: descriptor.accessibilityLabel,\n items: descriptor.items.map(resolveBottomNavigationItem),\n selectedKey: descriptor.selectedKey,\n };\n}\n\n/**\n * Produces navigation intent without mutating selectedKey. A renderer forwards\n * the request to its router, which updates selectedKey only after navigation.\n */\nexport function resolveBottomNavigationActivation<\n Key extends string,\n IconName extends string,\n>(\n descriptor: BottomNavigationDescriptor<Key, IconName>,\n key: Key,\n): BottomNavigationActivation<Key> | null {\n validateBottomNavigationDescriptor(descriptor);\n const item = descriptor.items.find((candidate) => candidate.id === key);\n if (!item || item.disabled) return null;\n return {\n key,\n reason: key === descriptor.selectedKey ? \"reselect\" : \"navigate\",\n };\n}\n"]}
package/dist/card.d.ts CHANGED
@@ -13,6 +13,10 @@ export declare const cardRecipe: {
13
13
  readonly padding: "md";
14
14
  };
15
15
  readonly selectedTone: "accent";
16
+ readonly interaction: {
17
+ readonly disabledOpacity: 0.5;
18
+ readonly pressedOpacity: 0.86;
19
+ };
16
20
  readonly body: {
17
21
  readonly padding: 16;
18
22
  readonly gap: 8;
@@ -1 +1 @@
1
- {"version":3,"file":"card.d.ts","sourceRoot":"","sources":["../src/card.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,gBAAgB,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAEzC;;;GAGG;AACH,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2EtB,CAAC"}
1
+ {"version":3,"file":"card.d.ts","sourceRoot":"","sources":["../src/card.ts"],"names":[],"mappings":"AAQA,MAAM,MAAM,gBAAgB,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAEzC;;;GAGG;AACH,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+EtB,CAAC"}
package/dist/card.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { spacing } from "./foundations.js";
2
- import { surfaceDefaults, } from "./base-recipes.js";
2
+ import { buttonRecipe, surfaceDefaults, } from "./base-recipes.js";
3
3
  /**
4
4
  * Shared Card anatomy. Renderers own their host nodes (`article` on Web,
5
5
  * `View` on Native), while these slots and defaults stay identical.
@@ -24,6 +24,9 @@ export const cardRecipe = {
24
24
  padding: "md",
25
25
  },
26
26
  selectedTone: "accent",
27
+ // BurnTok's compact 3-column picker (2026-10-10) needs the whole card to activate.
28
+ // Reuse control state opacity instead of a product Pressable with a second visual contract.
29
+ interaction: { disabledOpacity: buttonRecipe.opacity.disabled, pressedOpacity: buttonRecipe.opacity.pressed },
27
30
  body: {
28
31
  padding: spacing.md,
29
32
  gap: spacing.xs,
package/dist/card.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"card.js","sourceRoot":"","sources":["../src/card.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EACL,eAAe,GAGhB,MAAM,mBAAmB,CAAC;AAI3B;;;GAGG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,KAAK,EAAE;QACL,MAAM;QACN,OAAO;QACP,MAAM;QACN,QAAQ;QACR,SAAS;QACT,OAAO;QACP,aAAa;QACb,SAAS;QACT,SAAS;KACD;IACV,QAAQ,EAAE;QACR,IAAI,EAAE,eAAe,CAAC,IAAI;QAC1B,QAAQ,EAAE,KAAK;QACf,QAAQ,EAAE,IAAI;QACd,YAAY,EAAE,CAAC;QACf,OAAO,EAAE,IAAI;KACd;IACD,YAAY,EAAE,QAAQ;IACtB,IAAI,EAAE;QACJ,OAAO,EAAE,OAAO,CAAC,EAAE;QACnB,GAAG,EAAE,OAAO,CAAC,EAAE;KAChB;IACD,MAAM,EAAE;QACN,GAAG,EAAE,OAAO,CAAC,EAAE;KAChB;IACD,KAAK,EAAE;QACL,OAAO,EAAE,OAAO;QAChB,IAAI,EAAE,SAAS;QACf,QAAQ,EAAE,QAAQ;KACnB;IACD,WAAW,EAAE;QACX,OAAO,EAAE,MAAM;QACf,IAAI,EAAE,OAAO;QACb,QAAQ,EAAE,SAAS;KACpB;IACD,OAAO,EAAE;QACP,GAAG,EAAE,OAAO,CAAC,EAAE;QACf,iBAAiB,EAAE,OAAO,CAAC,EAAE;QAC7B,aAAa,EAAE,OAAO,CAAC,EAAE;KAC1B;CAkCF,CAAC","sourcesContent":["import { spacing } from \"./foundations.js\";\nimport {\n surfaceDefaults,\n type SurfacePadding,\n type SurfaceTone,\n} from \"./base-recipes.js\";\n\nexport type CardHeadingLevel = 2 | 3 | 4;\n\n/**\n * Shared Card anatomy. Renderers own their host nodes (`article` on Web,\n * `View` on Native), while these slots and defaults stay identical.\n */\nexport const cardRecipe = {\n slots: [\n \"root\",\n \"media\",\n \"body\",\n \"header\",\n \"leading\",\n \"title\",\n \"description\",\n \"content\",\n \"actions\",\n ] as const,\n defaults: {\n tone: surfaceDefaults.tone,\n selected: false,\n bordered: true,\n headingLevel: 3,\n padding: \"md\",\n },\n selectedTone: \"accent\",\n body: {\n padding: spacing.md,\n gap: spacing.xs,\n },\n header: {\n gap: spacing.sm,\n },\n title: {\n variant: \"title\",\n tone: \"primary\",\n emphasis: \"strong\",\n },\n description: {\n variant: \"body\",\n tone: \"muted\",\n emphasis: \"regular\",\n },\n actions: {\n gap: spacing.sm,\n paddingHorizontal: spacing.md,\n paddingBottom: spacing.md,\n },\n} as const satisfies {\n slots: readonly [\n \"root\",\n \"media\",\n \"body\",\n \"header\",\n \"leading\",\n \"title\",\n \"description\",\n \"content\",\n \"actions\",\n ];\n defaults: {\n tone: SurfaceTone;\n selected: boolean;\n bordered: boolean;\n headingLevel: CardHeadingLevel;\n padding: SurfacePadding;\n };\n selectedTone: SurfaceTone;\n body: { padding: number; gap: number };\n header: { gap: number };\n title: {\n variant: \"title\";\n tone: \"primary\";\n emphasis: \"strong\";\n };\n description: {\n variant: \"body\";\n tone: \"muted\";\n emphasis: \"regular\";\n };\n actions: { gap: number; paddingHorizontal: number; paddingBottom: number };\n};\n"]}
1
+ {"version":3,"file":"card.js","sourceRoot":"","sources":["../src/card.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EACL,YAAY,EACZ,eAAe,GAGhB,MAAM,mBAAmB,CAAC;AAI3B;;;GAGG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,KAAK,EAAE;QACL,MAAM;QACN,OAAO;QACP,MAAM;QACN,QAAQ;QACR,SAAS;QACT,OAAO;QACP,aAAa;QACb,SAAS;QACT,SAAS;KACD;IACV,QAAQ,EAAE;QACR,IAAI,EAAE,eAAe,CAAC,IAAI;QAC1B,QAAQ,EAAE,KAAK;QACf,QAAQ,EAAE,IAAI;QACd,YAAY,EAAE,CAAC;QACf,OAAO,EAAE,IAAI;KACd;IACD,YAAY,EAAE,QAAQ;IACtB,mFAAmF;IACnF,4FAA4F;IAC5F,WAAW,EAAE,EAAE,eAAe,EAAE,YAAY,CAAC,OAAO,CAAC,QAAQ,EAAE,cAAc,EAAE,YAAY,CAAC,OAAO,CAAC,OAAO,EAAE;IAC7G,IAAI,EAAE;QACJ,OAAO,EAAE,OAAO,CAAC,EAAE;QACnB,GAAG,EAAE,OAAO,CAAC,EAAE;KAChB;IACD,MAAM,EAAE;QACN,GAAG,EAAE,OAAO,CAAC,EAAE;KAChB;IACD,KAAK,EAAE;QACL,OAAO,EAAE,OAAO;QAChB,IAAI,EAAE,SAAS;QACf,QAAQ,EAAE,QAAQ;KACnB;IACD,WAAW,EAAE;QACX,OAAO,EAAE,MAAM;QACf,IAAI,EAAE,OAAO;QACb,QAAQ,EAAE,SAAS;KACpB;IACD,OAAO,EAAE;QACP,GAAG,EAAE,OAAO,CAAC,EAAE;QACf,iBAAiB,EAAE,OAAO,CAAC,EAAE;QAC7B,aAAa,EAAE,OAAO,CAAC,EAAE;KAC1B;CAmCF,CAAC","sourcesContent":["import { spacing } from \"./foundations.js\";\nimport {\n buttonRecipe,\n surfaceDefaults,\n type SurfacePadding,\n type SurfaceTone,\n} from \"./base-recipes.js\";\n\nexport type CardHeadingLevel = 2 | 3 | 4;\n\n/**\n * Shared Card anatomy. Renderers own their host nodes (`article` on Web,\n * `View` on Native), while these slots and defaults stay identical.\n */\nexport const cardRecipe = {\n slots: [\n \"root\",\n \"media\",\n \"body\",\n \"header\",\n \"leading\",\n \"title\",\n \"description\",\n \"content\",\n \"actions\",\n ] as const,\n defaults: {\n tone: surfaceDefaults.tone,\n selected: false,\n bordered: true,\n headingLevel: 3,\n padding: \"md\",\n },\n selectedTone: \"accent\",\n // BurnTok's compact 3-column picker (2026-10-10) needs the whole card to activate.\n // Reuse control state opacity instead of a product Pressable with a second visual contract.\n interaction: { disabledOpacity: buttonRecipe.opacity.disabled, pressedOpacity: buttonRecipe.opacity.pressed },\n body: {\n padding: spacing.md,\n gap: spacing.xs,\n },\n header: {\n gap: spacing.sm,\n },\n title: {\n variant: \"title\",\n tone: \"primary\",\n emphasis: \"strong\",\n },\n description: {\n variant: \"body\",\n tone: \"muted\",\n emphasis: \"regular\",\n },\n actions: {\n gap: spacing.sm,\n paddingHorizontal: spacing.md,\n paddingBottom: spacing.md,\n },\n} as const satisfies {\n slots: readonly [\n \"root\",\n \"media\",\n \"body\",\n \"header\",\n \"leading\",\n \"title\",\n \"description\",\n \"content\",\n \"actions\",\n ];\n defaults: {\n tone: SurfaceTone;\n selected: boolean;\n bordered: boolean;\n headingLevel: CardHeadingLevel;\n padding: SurfacePadding;\n };\n selectedTone: SurfaceTone;\n interaction: { disabledOpacity: number; pressedOpacity: number };\n body: { padding: number; gap: number };\n header: { gap: number };\n title: {\n variant: \"title\";\n tone: \"primary\";\n emphasis: \"strong\";\n };\n description: {\n variant: \"body\";\n tone: \"muted\";\n emphasis: \"regular\";\n };\n actions: { gap: number; paddingHorizontal: number; paddingBottom: number };\n};\n"]}
@@ -24,6 +24,9 @@ export type ControlledCarouselSelection<Id extends string = string> = Readonly<{
24
24
  defaultCurrentKey?: never;
25
25
  onCurrentKeyChange(key: Id): void;
26
26
  }>;
27
+ /** After mount, removing the current slide selects the slide at its previous
28
+ * position, clamped to the new last position, and emits onCurrentKeyChange once.
29
+ * An invalid initial default and an empty collection still fail validation. */
27
30
  export type UncontrolledCarouselSelection<Id extends string = string> = Readonly<{
28
31
  currentKey?: never;
29
32
  defaultCurrentKey?: Id;
@@ -1 +1 @@
1
- {"version":3,"file":"carousel.d.ts","sourceRoot":"","sources":["../src/carousel.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"carousel.d.ts","sourceRoot":"","sources":["../src/carousel.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"carousel.js","sourceRoot":"","sources":["../src/carousel.ts"],"names":[],"mappings":"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","sourcesContent":["import type { BehaviorContract } from \"./behaviors.js\";\nimport type { ColorReference } from \"./color-references.js\";\nimport type { SemanticIconName } from \"./icon.js\";\nimport { focusIndicatorContract } from \"./component-contracts.js\";\nimport { control, motionPreset, opacity, spacing } from \"./foundations.js\";\nimport { assertFiniteNumber } from \"./number-field.js\";\nimport { semanticColors } from \"./semantic-colors.js\";\n\n/**\n * Ant Design Carousel's default infinite loop is intentionally not reproduced;\n * autoplay remains opt-in in both libraries — automatic movement can obscure what this contract treats as\n * non-negotiable: a reliable answer to \"where am I, and where does it end\".\n * See docs/carousel.md for the accessibility rationale on every point below.\n */\nexport type CarouselSlideDescriptor<Id extends string = string> = Readonly<{\n id: Id;\n /** Accessible name for the slide, e.g. \"8/19 두산 vs LG\". The slide's visual content is product-owned. */\n label: string;\n}>;\n\nexport type CarouselAutoplayConfig = Readonly<{\n /** Minimum time a slide stays current before an automatic advance. */\n intervalMs: number;\n}>;\n\n/**\n * Renderer-facing prop shape only — mirrors SelectSelection's controlled/\n * uncontrolled duality, but the resolver below always takes a concrete,\n * already-resolved `currentKey` (see CarouselDescriptor) so validation and\n * position math never have to branch on which mode the product chose.\n */\nexport type ControlledCarouselSelection<Id extends string = string> = Readonly<{\n currentKey: Id;\n defaultCurrentKey?: never;\n onCurrentKeyChange(key: Id): void;\n}>;\n\nexport type UncontrolledCarouselSelection<Id extends string = string> = Readonly<{\n currentKey?: never;\n defaultCurrentKey?: Id;\n onCurrentKeyChange?: (key: Id) => void;\n}>;\n\nexport type CarouselSelection<Id extends string = string> =\n | ControlledCarouselSelection<Id>\n | UncontrolledCarouselSelection<Id>;\n\nexport type CarouselDescriptor<Id extends string = string> = Readonly<{\n slides: readonly CarouselSlideDescriptor<Id>[];\n currentKey: Id;\n /** Absent by default. Autoplay is opt-in — see docs/carousel.md. */\n autoplay?: CarouselAutoplayConfig;\n}>;\n\nfunction assertNonEmpty(value: string, field: string): void {\n if (value.trim().length === 0) {\n throw new TypeError(`Carousel ${field} must not be empty`);\n }\n}\n\nexport function validateCarouselSlide<Id extends string>(\n slide: CarouselSlideDescriptor<Id>,\n): void {\n assertNonEmpty(slide.id, \"slide id\");\n if (slide.id !== slide.id.trim()) {\n throw new TypeError(\"Carousel slide id must not start or end with whitespace\");\n }\n assertNonEmpty(slide.label, \"slide label\");\n}\n\nexport function validateCarouselAutoplayConfig(\n autoplay: CarouselAutoplayConfig,\n): void {\n assertFiniteNumber(autoplay.intervalMs, \"autoplay.intervalMs\");\n if (autoplay.intervalMs <= 0) {\n throw new RangeError(\"Carousel autoplay.intervalMs must be greater than zero\");\n }\n}\n\nexport function validateCarouselDescriptor<Id extends string>(\n descriptor: CarouselDescriptor<Id>,\n): void {\n if (descriptor.slides.length === 0) {\n throw new RangeError(\"Carousel must contain at least one slide\");\n }\n const ids = new Set<Id>();\n for (const slide of descriptor.slides) {\n validateCarouselSlide(slide);\n if (ids.has(slide.id)) {\n throw new TypeError(`Duplicate Carousel slide id: ${slide.id}`);\n }\n ids.add(slide.id);\n }\n if (!ids.has(descriptor.currentKey)) {\n throw new RangeError(\n `Carousel currentKey does not match any slide id: ${String(descriptor.currentKey)}`,\n );\n }\n if (descriptor.autoplay) {\n validateCarouselAutoplayConfig(descriptor.autoplay);\n }\n}\n\nexport type CarouselAccessibleNameInfo = Readonly<{\n position: number;\n total: number;\n label: string;\n}>;\n\n/**\n * Same reason Steps and Timeline do not assemble their own accessible name:\n * counter-word grammar and phrase order are product-owned copy decisions.\n */\nexport type ComposeCarouselAccessibleName = (\n info: CarouselAccessibleNameInfo,\n) => string;\n\nexport type ResolvedCarouselSlideDescriptor<Id extends string = string> =\n CarouselSlideDescriptor<Id> &\n Readonly<{\n /** 1-indexed so position and label both preserve reading order for renderers. */\n position: number;\n total: number;\n current: boolean;\n /**\n * True for every slide but the current one. A renderer must exclude an\n * inert slide's interactive content from both focus and the\n * accessibility tree — a hidden slide whose link can still receive\n * focus is worse than one that is simply unreachable until the user\n * advances to it (see docs/carousel.md).\n */\n inert: boolean;\n accessibleName: string;\n }>;\n\nexport type ResolveCarouselOptions = Readonly<{\n composeAccessibleName: ComposeCarouselAccessibleName;\n}>;\n\n/**\n * Attaches order, current/inert, and the composed accessible name used by\n * both the slide group and its indicator dot — one composer, reused for\n * every render target, the same way Steps reuses a single composer.\n */\nexport function resolveCarouselDescriptor<Id extends string>(\n descriptor: CarouselDescriptor<Id>,\n options: ResolveCarouselOptions,\n): readonly ResolvedCarouselSlideDescriptor<Id>[] {\n validateCarouselDescriptor(descriptor);\n if (typeof options.composeAccessibleName !== \"function\") {\n throw new TypeError(\"Carousel composeAccessibleName must be a function\");\n }\n\n const total = descriptor.slides.length;\n return descriptor.slides.map((slide, index) => {\n const position = index + 1;\n const current = slide.id === descriptor.currentKey;\n const accessibleName = options.composeAccessibleName({\n position,\n total,\n label: slide.label,\n });\n if (typeof accessibleName !== \"string\" || accessibleName.trim().length === 0) {\n throw new TypeError(\n \"Carousel composeAccessibleName must return a non-empty string\",\n );\n }\n return { ...slide, position, total, current, inert: !current, accessibleName };\n });\n}\n\nexport type CarouselNavigationIntent = \"next\" | \"previous\" | \"first\" | \"last\";\n\n/**\n * Clamps at the first/last slide instead of wrapping — infinite loop is out\n * of scope (see docs/carousel.md), so there is no modulo here at all, unlike\n * getCollectionNavigationTarget's `loop` parameter elsewhere in this package.\n */\nexport function getCarouselNavigationTarget<Id extends string>(\n descriptor: CarouselDescriptor<Id>,\n intent: CarouselNavigationIntent,\n): Id {\n validateCarouselDescriptor(descriptor);\n const { slides, currentKey } = descriptor;\n if (intent === \"first\") return slides[0]!.id;\n if (intent === \"last\") return slides.at(-1)!.id;\n const currentIndex = slides.findIndex((slide) => slide.id === currentKey);\n const delta = intent === \"next\" ? 1 : -1;\n const clampedIndex = Math.min(\n Math.max(currentIndex + delta, 0),\n slides.length - 1,\n );\n return slides[clampedIndex]!.id;\n}\n\nexport type CarouselAutoplayInputs = Readonly<{\n /** True whenever a platform reduce-motion preference is active. */\n reducedMotion: boolean;\n /** Renderer-combined pointer hover, focus-within, and drag signal. */\n paused: boolean;\n}>;\n\n/**\n * Autoplay is never active without an explicit config, under reduce motion,\n * or while the user is hovering, focusing, or dragging the carousel — the\n * three guards the brief requires are one function so a renderer cannot wire\n * an autoplay timer that forgets one of them.\n */\nexport function isCarouselAutoplayActive(\n autoplay: CarouselAutoplayConfig | undefined,\n inputs: CarouselAutoplayInputs,\n): boolean {\n if (!autoplay) return false;\n validateCarouselAutoplayConfig(autoplay);\n return !inputs.reducedMotion && !inputs.paused;\n}\n\nexport const carouselBehaviorDefaults = {\n autoplay: false,\n} as const satisfies Readonly<{ autoplay: boolean }>;\n\nexport const carouselBehavior = {\n controlled: [\"currentKey\", \"defaultCurrentKey\", \"onCurrentKeyChange\"],\n inputs: [\"autoplay\", \"reducedMotion\", \"dragged\"],\n defaults: carouselBehaviorDefaults,\n stateAxes: {\n interaction: [\"idle\", \"dragged\"],\n value: [\"selected\"],\n },\n web: {\n roles: [\"region\", \"group\"],\n keyboard: [\"Tab\", \"Enter\", \"Space\", \"ArrowLeft\", \"ArrowRight\"],\n focus: \"native\",\n },\n native: {\n roles: [\"adjustable\"],\n states: [\"selected\"],\n actions: [\"increment\", \"decrement\"],\n },\n scenarios: [\n \"current-position-is-announced-with-a-readable-name-not-dots-alone\",\n \"inactive-slide-content-is-excluded-from-focus-and-the-accessibility-tree\",\n \"previous-next-and-dot-controls-stay-in-tab-order-regardless-of-current-slide\",\n \"arrow-keys-move-one-slide-on-web-swipe-moves-one-slide-on-native\",\n \"boundary-slides-clamp-instead-of-wrapping-because-loop-is-out-of-scope\",\n \"autoplay-is-opt-in-and-off-by-default\",\n \"autoplay-never-runs-when-reduced-motion-is-active\",\n \"autoplay-pauses-on-hover-focus-or-drag-and-does-not-announce-automatic-transitions\",\n ],\n} as const satisfies BehaviorContract;\n\nexport type CarouselSize = \"medium\";\n\nexport const carouselRecipe = {\n slots: [\n \"root\",\n \"track\",\n \"slide\",\n \"dots\",\n \"dot\",\n \"previousControl\",\n \"nextControl\",\n ] as const,\n defaults: { size: \"medium\" },\n sizes: {\n medium: {\n gap: spacing.sm,\n controlHitTarget: control.minTouchTarget,\n controlIcon: \"sm\",\n },\n },\n dot: {\n diameter: 8,\n hitTarget: control.minTouchTarget,\n color: {\n inactive: semanticColors.border.strong,\n current: semanticColors.content.brand,\n },\n },\n /** Previous/next chrome is composed from IconButton (ghost tone) rather than owning new button visuals. */\n control: {\n icons: {\n previous: \"chevronStart\",\n next: \"chevronEnd\",\n } as const satisfies Readonly<{ previous: SemanticIconName; next: SemanticIconName }>,\n },\n states: {\n focus: focusIndicatorContract,\n draggedOpacity: opacity.dragged,\n },\n /**\n * Manual slide-to-slide movement crossfades rather than snapping under\n * Reduce Motion, reusing the existing \"context\" preset instead of a new\n * token — autoplay itself simply does not run at all (isCarouselAutoplayActive).\n */\n transition: motionPreset.context,\n} as const satisfies {\n slots: readonly string[];\n defaults: { size: CarouselSize };\n sizes: Record<\n CarouselSize,\n { gap: number; controlHitTarget: number; controlIcon: string }\n >;\n dot: {\n diameter: number;\n hitTarget: number;\n color: Record<\"inactive\" | \"current\", ColorReference>;\n };\n control: {\n icons: Readonly<{ previous: SemanticIconName; next: SemanticIconName }>;\n };\n states: {\n focus: typeof focusIndicatorContract;\n draggedOpacity: number;\n };\n transition: typeof motionPreset.context;\n};\n"]}
1
+ {"version":3,"file":"carousel.js","sourceRoot":"","sources":["../src/carousel.ts"],"names":[],"mappings":"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","sourcesContent":["import type { BehaviorContract } from \"./behaviors.js\";\nimport type { ColorReference } from \"./color-references.js\";\nimport type { SemanticIconName } from \"./icon.js\";\nimport { focusIndicatorContract } from \"./component-contracts.js\";\nimport { control, motionPreset, opacity, spacing } from \"./foundations.js\";\nimport { assertFiniteNumber } from \"./number-field.js\";\nimport { semanticColors } from \"./semantic-colors.js\";\n\n/**\n * Ant Design Carousel's default infinite loop is intentionally not reproduced;\n * autoplay remains opt-in in both libraries — automatic movement can obscure what this contract treats as\n * non-negotiable: a reliable answer to \"where am I, and where does it end\".\n * See docs/carousel.md for the accessibility rationale on every point below.\n */\nexport type CarouselSlideDescriptor<Id extends string = string> = Readonly<{\n id: Id;\n /** Accessible name for the slide, e.g. \"8/19 두산 vs LG\". The slide's visual content is product-owned. */\n label: string;\n}>;\n\nexport type CarouselAutoplayConfig = Readonly<{\n /** Minimum time a slide stays current before an automatic advance. */\n intervalMs: number;\n}>;\n\n/**\n * Renderer-facing prop shape only — mirrors SelectSelection's controlled/\n * uncontrolled duality, but the resolver below always takes a concrete,\n * already-resolved `currentKey` (see CarouselDescriptor) so validation and\n * position math never have to branch on which mode the product chose.\n */\nexport type ControlledCarouselSelection<Id extends string = string> = Readonly<{\n currentKey: Id;\n defaultCurrentKey?: never;\n onCurrentKeyChange(key: Id): void;\n}>;\n\n/** After mount, removing the current slide selects the slide at its previous\n * position, clamped to the new last position, and emits onCurrentKeyChange once.\n * An invalid initial default and an empty collection still fail validation. */\nexport type UncontrolledCarouselSelection<Id extends string = string> = Readonly<{\n currentKey?: never;\n defaultCurrentKey?: Id;\n onCurrentKeyChange?: (key: Id) => void;\n}>;\n\nexport type CarouselSelection<Id extends string = string> =\n | ControlledCarouselSelection<Id>\n | UncontrolledCarouselSelection<Id>;\n\nexport type CarouselDescriptor<Id extends string = string> = Readonly<{\n slides: readonly CarouselSlideDescriptor<Id>[];\n currentKey: Id;\n /** Absent by default. Autoplay is opt-in — see docs/carousel.md. */\n autoplay?: CarouselAutoplayConfig;\n}>;\n\nfunction assertNonEmpty(value: string, field: string): void {\n if (value.trim().length === 0) {\n throw new TypeError(`Carousel ${field} must not be empty`);\n }\n}\n\nexport function validateCarouselSlide<Id extends string>(\n slide: CarouselSlideDescriptor<Id>,\n): void {\n assertNonEmpty(slide.id, \"slide id\");\n if (slide.id !== slide.id.trim()) {\n throw new TypeError(\"Carousel slide id must not start or end with whitespace\");\n }\n assertNonEmpty(slide.label, \"slide label\");\n}\n\nexport function validateCarouselAutoplayConfig(\n autoplay: CarouselAutoplayConfig,\n): void {\n assertFiniteNumber(autoplay.intervalMs, \"autoplay.intervalMs\");\n if (autoplay.intervalMs <= 0) {\n throw new RangeError(\"Carousel autoplay.intervalMs must be greater than zero\");\n }\n}\n\nexport function validateCarouselDescriptor<Id extends string>(\n descriptor: CarouselDescriptor<Id>,\n): void {\n if (descriptor.slides.length === 0) {\n throw new RangeError(\"Carousel must contain at least one slide\");\n }\n const ids = new Set<Id>();\n for (const slide of descriptor.slides) {\n validateCarouselSlide(slide);\n if (ids.has(slide.id)) {\n throw new TypeError(`Duplicate Carousel slide id: ${slide.id}`);\n }\n ids.add(slide.id);\n }\n if (!ids.has(descriptor.currentKey)) {\n throw new RangeError(\n `Carousel currentKey does not match any slide id: ${String(descriptor.currentKey)}`,\n );\n }\n if (descriptor.autoplay) {\n validateCarouselAutoplayConfig(descriptor.autoplay);\n }\n}\n\nexport type CarouselAccessibleNameInfo = Readonly<{\n position: number;\n total: number;\n label: string;\n}>;\n\n/**\n * Same reason Steps and Timeline do not assemble their own accessible name:\n * counter-word grammar and phrase order are product-owned copy decisions.\n */\nexport type ComposeCarouselAccessibleName = (\n info: CarouselAccessibleNameInfo,\n) => string;\n\nexport type ResolvedCarouselSlideDescriptor<Id extends string = string> =\n CarouselSlideDescriptor<Id> &\n Readonly<{\n /** 1-indexed so position and label both preserve reading order for renderers. */\n position: number;\n total: number;\n current: boolean;\n /**\n * True for every slide but the current one. A renderer must exclude an\n * inert slide's interactive content from both focus and the\n * accessibility tree — a hidden slide whose link can still receive\n * focus is worse than one that is simply unreachable until the user\n * advances to it (see docs/carousel.md).\n */\n inert: boolean;\n accessibleName: string;\n }>;\n\nexport type ResolveCarouselOptions = Readonly<{\n composeAccessibleName: ComposeCarouselAccessibleName;\n}>;\n\n/**\n * Attaches order, current/inert, and the composed accessible name used by\n * both the slide group and its indicator dot — one composer, reused for\n * every render target, the same way Steps reuses a single composer.\n */\nexport function resolveCarouselDescriptor<Id extends string>(\n descriptor: CarouselDescriptor<Id>,\n options: ResolveCarouselOptions,\n): readonly ResolvedCarouselSlideDescriptor<Id>[] {\n validateCarouselDescriptor(descriptor);\n if (typeof options.composeAccessibleName !== \"function\") {\n throw new TypeError(\"Carousel composeAccessibleName must be a function\");\n }\n\n const total = descriptor.slides.length;\n return descriptor.slides.map((slide, index) => {\n const position = index + 1;\n const current = slide.id === descriptor.currentKey;\n const accessibleName = options.composeAccessibleName({\n position,\n total,\n label: slide.label,\n });\n if (typeof accessibleName !== \"string\" || accessibleName.trim().length === 0) {\n throw new TypeError(\n \"Carousel composeAccessibleName must return a non-empty string\",\n );\n }\n return { ...slide, position, total, current, inert: !current, accessibleName };\n });\n}\n\nexport type CarouselNavigationIntent = \"next\" | \"previous\" | \"first\" | \"last\";\n\n/**\n * Clamps at the first/last slide instead of wrapping — infinite loop is out\n * of scope (see docs/carousel.md), so there is no modulo here at all, unlike\n * getCollectionNavigationTarget's `loop` parameter elsewhere in this package.\n */\nexport function getCarouselNavigationTarget<Id extends string>(\n descriptor: CarouselDescriptor<Id>,\n intent: CarouselNavigationIntent,\n): Id {\n validateCarouselDescriptor(descriptor);\n const { slides, currentKey } = descriptor;\n if (intent === \"first\") return slides[0]!.id;\n if (intent === \"last\") return slides.at(-1)!.id;\n const currentIndex = slides.findIndex((slide) => slide.id === currentKey);\n const delta = intent === \"next\" ? 1 : -1;\n const clampedIndex = Math.min(\n Math.max(currentIndex + delta, 0),\n slides.length - 1,\n );\n return slides[clampedIndex]!.id;\n}\n\nexport type CarouselAutoplayInputs = Readonly<{\n /** True whenever a platform reduce-motion preference is active. */\n reducedMotion: boolean;\n /** Renderer-combined pointer hover, focus-within, and drag signal. */\n paused: boolean;\n}>;\n\n/**\n * Autoplay is never active without an explicit config, under reduce motion,\n * or while the user is hovering, focusing, or dragging the carousel — the\n * three guards the brief requires are one function so a renderer cannot wire\n * an autoplay timer that forgets one of them.\n */\nexport function isCarouselAutoplayActive(\n autoplay: CarouselAutoplayConfig | undefined,\n inputs: CarouselAutoplayInputs,\n): boolean {\n if (!autoplay) return false;\n validateCarouselAutoplayConfig(autoplay);\n return !inputs.reducedMotion && !inputs.paused;\n}\n\nexport const carouselBehaviorDefaults = {\n autoplay: false,\n} as const satisfies Readonly<{ autoplay: boolean }>;\n\nexport const carouselBehavior = {\n controlled: [\"currentKey\", \"defaultCurrentKey\", \"onCurrentKeyChange\"],\n inputs: [\"autoplay\", \"reducedMotion\", \"dragged\"],\n defaults: carouselBehaviorDefaults,\n stateAxes: {\n interaction: [\"idle\", \"dragged\"],\n value: [\"selected\"],\n },\n web: {\n roles: [\"region\", \"group\"],\n keyboard: [\"Tab\", \"Enter\", \"Space\", \"ArrowLeft\", \"ArrowRight\"],\n focus: \"native\",\n },\n native: {\n roles: [\"adjustable\"],\n states: [\"selected\"],\n actions: [\"increment\", \"decrement\"],\n },\n scenarios: [\n \"current-position-is-announced-with-a-readable-name-not-dots-alone\",\n \"inactive-slide-content-is-excluded-from-focus-and-the-accessibility-tree\",\n \"previous-next-and-dot-controls-stay-in-tab-order-regardless-of-current-slide\",\n \"arrow-keys-move-one-slide-on-web-swipe-moves-one-slide-on-native\",\n \"boundary-slides-clamp-instead-of-wrapping-because-loop-is-out-of-scope\",\n \"autoplay-is-opt-in-and-off-by-default\",\n \"autoplay-never-runs-when-reduced-motion-is-active\",\n \"autoplay-pauses-on-hover-focus-or-drag-and-does-not-announce-automatic-transitions\",\n ],\n} as const satisfies BehaviorContract;\n\nexport type CarouselSize = \"medium\";\n\nexport const carouselRecipe = {\n slots: [\n \"root\",\n \"track\",\n \"slide\",\n \"dots\",\n \"dot\",\n \"previousControl\",\n \"nextControl\",\n ] as const,\n defaults: { size: \"medium\" },\n sizes: {\n medium: {\n gap: spacing.sm,\n controlHitTarget: control.minTouchTarget,\n controlIcon: \"sm\",\n },\n },\n dot: {\n diameter: 8,\n hitTarget: control.minTouchTarget,\n color: {\n inactive: semanticColors.border.strong,\n current: semanticColors.content.brand,\n },\n },\n /** Previous/next chrome is composed from IconButton (ghost tone) rather than owning new button visuals. */\n control: {\n icons: {\n previous: \"chevronStart\",\n next: \"chevronEnd\",\n } as const satisfies Readonly<{ previous: SemanticIconName; next: SemanticIconName }>,\n },\n states: {\n focus: focusIndicatorContract,\n draggedOpacity: opacity.dragged,\n },\n /**\n * Manual slide-to-slide movement crossfades rather than snapping under\n * Reduce Motion, reusing the existing \"context\" preset instead of a new\n * token — autoplay itself simply does not run at all (isCarouselAutoplayActive).\n */\n transition: motionPreset.context,\n} as const satisfies {\n slots: readonly string[];\n defaults: { size: CarouselSize };\n sizes: Record<\n CarouselSize,\n { gap: number; controlHitTarget: number; controlIcon: string }\n >;\n dot: {\n diameter: number;\n hitTarget: number;\n color: Record<\"inactive\" | \"current\", ColorReference>;\n };\n control: {\n icons: Readonly<{ previous: SemanticIconName; next: SemanticIconName }>;\n };\n states: {\n focus: typeof focusIndicatorContract;\n draggedOpacity: number;\n };\n transition: typeof motionPreset.context;\n};\n"]}
package/dist/catalog.d.ts CHANGED
@@ -1832,6 +1832,26 @@ export declare const recipeRegistry: {
1832
1832
  readonly distribution: "equal";
1833
1833
  readonly density: "regular";
1834
1834
  };
1835
+ readonly selectionTile: {
1836
+ readonly background: Readonly<{
1837
+ source: "theme";
1838
+ key: "surfaceAccent";
1839
+ alpha?: number;
1840
+ }>;
1841
+ readonly selectedBackground: Readonly<{
1842
+ source: "theme";
1843
+ key: "primary";
1844
+ alpha?: number;
1845
+ }>;
1846
+ readonly selectedContent: Readonly<{
1847
+ source: "theme";
1848
+ key: "onPrimary";
1849
+ alpha?: number;
1850
+ }>;
1851
+ readonly padding: 4;
1852
+ readonly gap: 4;
1853
+ readonly radius: "lg";
1854
+ };
1835
1855
  readonly adaptive: {
1836
1856
  readonly web: "fixed-compact-viewport";
1837
1857
  readonly native: "navigator-tab-bar";
@@ -3005,6 +3025,10 @@ export declare const recipeRegistry: {
3005
3025
  readonly padding: "md";
3006
3026
  };
3007
3027
  readonly selectedTone: "accent";
3028
+ readonly interaction: {
3029
+ readonly disabledOpacity: 0.5;
3030
+ readonly pressedOpacity: 0.86;
3031
+ };
3008
3032
  readonly body: {
3009
3033
  readonly padding: 16;
3010
3034
  readonly gap: 8;
@@ -3072,7 +3096,7 @@ export declare const recipeRegistry: {
3072
3096
  readonly selected: {
3073
3097
  readonly background: "bg";
3074
3098
  readonly content: "contentBrand";
3075
- readonly border: "contentBrand";
3099
+ readonly border: null;
3076
3100
  };
3077
3101
  };
3078
3102
  readonly sizes: {
@@ -4340,11 +4364,7 @@ export declare const recipeRegistry: {
4340
4364
  key: "contentBrand";
4341
4365
  alpha?: number;
4342
4366
  }>;
4343
- readonly border: Readonly<{
4344
- source: "theme";
4345
- key: "contentBrand";
4346
- alpha?: number;
4347
- }>;
4367
+ readonly border: null;
4348
4368
  };
4349
4369
  readonly pressedOpacity: 0.86;
4350
4370
  readonly disabledOpacity: 0.5;
@@ -4525,6 +4545,23 @@ export declare const recipeRegistry: {
4525
4545
  readonly defaults: {
4526
4546
  readonly density: "comfortable";
4527
4547
  readonly selected: false;
4548
+ readonly tone: "default";
4549
+ };
4550
+ readonly tones: {
4551
+ readonly default: {
4552
+ readonly titleColor: Readonly<{
4553
+ source: "theme";
4554
+ key: "textBody";
4555
+ alpha?: number;
4556
+ }>;
4557
+ };
4558
+ readonly danger: {
4559
+ readonly titleColor: Readonly<{
4560
+ source: "theme";
4561
+ key: "danger";
4562
+ alpha?: number;
4563
+ }>;
4564
+ };
4528
4565
  };
4529
4566
  readonly density: {
4530
4567
  readonly compact: {
@@ -4552,6 +4589,11 @@ export declare const recipeRegistry: {
4552
4589
  readonly paddingVertical: 16;
4553
4590
  };
4554
4591
  };
4592
+ readonly loading: {
4593
+ readonly titleWidthPercent: 60;
4594
+ readonly descriptionWidthPercent: 40;
4595
+ readonly trailingWidth: 32;
4596
+ };
4555
4597
  readonly gap: 12;
4556
4598
  readonly leadingSize: 40;
4557
4599
  readonly leadingShapes: {
@@ -7773,7 +7815,7 @@ export declare const recipeRegistry: {
7773
7815
  };
7774
7816
  };
7775
7817
  readonly toastRecipe: {
7776
- readonly slots: readonly ["viewport", "root", "toneMark", "icon", "content", "title", "description", "action", "close"];
7818
+ readonly slots: readonly ["viewport", "root", "toneMark", "icon", "media", "content", "title", "description", "progress", "action", "close"];
7777
7819
  readonly defaults: {
7778
7820
  readonly tone: "neutral";
7779
7821
  readonly placement: "bottom";
@@ -7926,7 +7968,7 @@ export declare const recipeRegistry: {
7926
7968
  alpha?: number;
7927
7969
  }>;
7928
7970
  readonly borderWidth: 1;
7929
- readonly radius: "lg";
7971
+ readonly radius: "xl";
7930
7972
  readonly shadow: {
7931
7973
  readonly color: "#000000";
7932
7974
  readonly opacity: 0.12;
@@ -7947,6 +7989,9 @@ export declare const recipeRegistry: {
7947
7989
  readonly badgeDiameter: 32;
7948
7990
  readonly badgeRadius: "full";
7949
7991
  };
7992
+ readonly media: {
7993
+ readonly size: 44;
7994
+ };
7950
7995
  readonly content: {
7951
7996
  readonly gap: 4;
7952
7997
  };
@@ -7967,6 +8012,32 @@ export declare const recipeRegistry: {
7967
8012
  }>;
7968
8013
  readonly textVariant: "body";
7969
8014
  };
8015
+ readonly progress: {
8016
+ readonly gap: 12;
8017
+ readonly dotSize: 6;
8018
+ readonly currentScale: 1.4;
8019
+ readonly doneColor: Readonly<{
8020
+ source: "theme";
8021
+ key: "contentBrand";
8022
+ alpha?: number;
8023
+ }>;
8024
+ readonly upcomingColor: Readonly<{
8025
+ source: "theme";
8026
+ key: "border";
8027
+ alpha?: number;
8028
+ }>;
8029
+ readonly labelColor: Readonly<{
8030
+ source: "theme";
8031
+ key: "textMuted";
8032
+ alpha?: number;
8033
+ }>;
8034
+ readonly currentLabelColor: Readonly<{
8035
+ source: "theme";
8036
+ key: "text";
8037
+ alpha?: number;
8038
+ }>;
8039
+ readonly textVariant: "caption";
8040
+ };
7970
8041
  readonly action: {
7971
8042
  readonly color: Readonly<{
7972
8043
  source: "theme";
@@ -7979,7 +8050,7 @@ export declare const recipeRegistry: {
7979
8050
  alpha?: number;
7980
8051
  }>;
7981
8052
  readonly radius: "full";
7982
- readonly align: "end";
8053
+ readonly align: "start";
7983
8054
  readonly textVariant: "body";
7984
8055
  readonly fontWeight: "700";
7985
8056
  readonly minHeight: 44;
@@ -1 +1 @@
1
- {"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../src/catalog.ts"],"names":[],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiGjB,CAAC;AAEX,MAAM,MAAM,UAAU,GAAG,MAAM,OAAO,cAAc,CAAC"}
1
+ {"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../src/catalog.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEnD,MAAM,MAAM,iBAAiB,GACzB,YAAY,GACZ,QAAQ,GACR,QAAQ,GACR,OAAO,GACP,YAAY,GACZ,cAAc,GACd,UAAU,GACV,SAAS,GACT,UAAU,GACV,SAAS,CAAC;AAEd,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,UAAU,GAAG,KAAK,GAAG,QAAQ,CAAC;AACzE,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,GAAG,YAAY,CAAC;AAC3E,MAAM,MAAM,gBAAgB,GAAG,KAAK,GAAG,QAAQ,CAAC;AAChD,MAAM,MAAM,sBAAsB,GAAG,eAAe,GAAG,aAAa,CAAC;AACrE,MAAM,MAAM,wBAAwB,GAAG,QAAQ,CAC7C,MAAM,CAAC,gBAAgB,EAAE,sBAAsB,CAAC,CACjD,CAAC;AACF,MAAM,MAAM,qBAAqB,GAC7B,gBAAgB,GAChB,UAAU,GACV,iBAAiB,GACjB,cAAc,GACd,UAAU,CAAC;AAEf,MAAM,MAAM,gBAAgB,GAAG,QAAQ,CAAC;IACtC,KAAK,EAAE,qBAAqB,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,uEAAuE;IACvE,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC7B,CAAC,CAAC;AAEH,MAAM,MAAM,0BAA0B,GAAG,kBAAkB,CAAC;AAE5D,MAAM,MAAM,qBAAqB,GAAG,QAAQ,CAAC;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,iFAAiF;IACjF,MAAM,EAAE,eAAe,CAAC;IACxB;;;;OAIG;IACH,aAAa,CAAC,EAAE,wBAAwB,CAAC;IACzC,qFAAqF;IACrF,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,kFAAkF;IAClF,iBAAiB,CAAC,EAAE,0BAA0B,CAAC;IAC/C,kFAAkF;IAClF,OAAO,CAAC,EAAE,gBAAgB,CAAC;IAC3B;;;;;;;;OAQG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC,CAAC;AAOH,eAAO,MAAM,aAAa,GAAI,SAAS,MAAM;;;;;CAElC,CAAC;AAYZ,eAAO,MAAM,YAAY,GAAI,SAAS,MAAM,EAAE,SAAS,SAAS,MAAM,EAAE;;;;;;CAE7D,CAAC;AAOZ;;;;GAIG;AACH,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,qBAAqB,EAC5B,OAAO,EAAE,gBAAgB,GACxB,sBAAsB,CAKxB;AAED;;;;GAIG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAsJwB,CAAC;AAEtD,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC;AAEtE,wBAAgB,yBAAyB,CACvC,OAAO,GAAE,SAAS,qBAAqB,EAAqB,GAC3D,QAAQ,CAAC,MAAM,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC,CAcjD;AA6FD,mFAAmF;AACnF,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiGjB,CAAC;AAEX,MAAM,MAAM,UAAU,GAAG,MAAM,OAAO,cAAc,CAAC"}
@@ -732,6 +732,23 @@ export declare const listRowRecipe: {
732
732
  readonly defaults: {
733
733
  readonly density: "comfortable";
734
734
  readonly selected: false;
735
+ readonly tone: "default";
736
+ };
737
+ readonly tones: {
738
+ readonly default: {
739
+ readonly titleColor: Readonly<{
740
+ source: "theme";
741
+ key: "textBody";
742
+ alpha?: number;
743
+ }>;
744
+ };
745
+ readonly danger: {
746
+ readonly titleColor: Readonly<{
747
+ source: "theme";
748
+ key: "danger";
749
+ alpha?: number;
750
+ }>;
751
+ };
735
752
  };
736
753
  readonly density: {
737
754
  readonly compact: {
@@ -759,6 +776,11 @@ export declare const listRowRecipe: {
759
776
  readonly paddingVertical: 16;
760
777
  };
761
778
  };
779
+ readonly loading: {
780
+ readonly titleWidthPercent: 60;
781
+ readonly descriptionWidthPercent: 40;
782
+ readonly trailingWidth: 32;
783
+ };
762
784
  readonly gap: 12;
763
785
  readonly leadingSize: 40;
764
786
  /**
@@ -2182,6 +2204,26 @@ export declare const bottomNavigationRecipe: {
2182
2204
  readonly distribution: "equal";
2183
2205
  readonly density: "regular";
2184
2206
  };
2207
+ readonly selectionTile: {
2208
+ readonly background: Readonly<{
2209
+ source: "theme";
2210
+ key: "surfaceAccent";
2211
+ alpha?: number;
2212
+ }>;
2213
+ readonly selectedBackground: Readonly<{
2214
+ source: "theme";
2215
+ key: "primary";
2216
+ alpha?: number;
2217
+ }>;
2218
+ readonly selectedContent: Readonly<{
2219
+ source: "theme";
2220
+ key: "onPrimary";
2221
+ alpha?: number;
2222
+ }>;
2223
+ readonly padding: 4;
2224
+ readonly gap: 4;
2225
+ readonly radius: "lg";
2226
+ };
2185
2227
  readonly adaptive: {
2186
2228
  readonly web: "fixed-compact-viewport";
2187
2229
  readonly native: "navigator-tab-bar";
@@ -3332,7 +3374,7 @@ export type ToastPlacement = "top" | "top-start" | "top-end" | "bottom" | "botto
3332
3374
  export type ToastTone = "neutral" | "info" | "success" | "warning" | "danger";
3333
3375
  export type ToastToneMark = "notifications" | "info" | "success" | "warning" | "alert";
3334
3376
  export declare const toastRecipe: {
3335
- readonly slots: readonly ["viewport", "root", "toneMark", "icon", "content", "title", "description", "action", "close"];
3377
+ readonly slots: readonly ["viewport", "root", "toneMark", "icon", "media", "content", "title", "description", "progress", "action", "close"];
3336
3378
  readonly defaults: {
3337
3379
  readonly tone: "neutral";
3338
3380
  readonly placement: "bottom";
@@ -3485,7 +3527,7 @@ export declare const toastRecipe: {
3485
3527
  alpha?: number;
3486
3528
  }>;
3487
3529
  readonly borderWidth: 1;
3488
- readonly radius: "lg";
3530
+ readonly radius: "xl";
3489
3531
  readonly shadow: {
3490
3532
  readonly color: "#000000";
3491
3533
  readonly opacity: 0.12;
@@ -3506,6 +3548,9 @@ export declare const toastRecipe: {
3506
3548
  readonly badgeDiameter: 32;
3507
3549
  readonly badgeRadius: "full";
3508
3550
  };
3551
+ readonly media: {
3552
+ readonly size: 44;
3553
+ };
3509
3554
  readonly content: {
3510
3555
  readonly gap: 4;
3511
3556
  };
@@ -3526,6 +3571,32 @@ export declare const toastRecipe: {
3526
3571
  }>;
3527
3572
  readonly textVariant: "body";
3528
3573
  };
3574
+ readonly progress: {
3575
+ readonly gap: 12;
3576
+ readonly dotSize: 6;
3577
+ readonly currentScale: 1.4;
3578
+ readonly doneColor: Readonly<{
3579
+ source: "theme";
3580
+ key: "contentBrand";
3581
+ alpha?: number;
3582
+ }>;
3583
+ readonly upcomingColor: Readonly<{
3584
+ source: "theme";
3585
+ key: "border";
3586
+ alpha?: number;
3587
+ }>;
3588
+ readonly labelColor: Readonly<{
3589
+ source: "theme";
3590
+ key: "textMuted";
3591
+ alpha?: number;
3592
+ }>;
3593
+ readonly currentLabelColor: Readonly<{
3594
+ source: "theme";
3595
+ key: "text";
3596
+ alpha?: number;
3597
+ }>;
3598
+ readonly textVariant: "caption";
3599
+ };
3529
3600
  readonly action: {
3530
3601
  readonly color: Readonly<{
3531
3602
  source: "theme";
@@ -3538,7 +3609,7 @@ export declare const toastRecipe: {
3538
3609
  alpha?: number;
3539
3610
  }>;
3540
3611
  readonly radius: "full";
3541
- readonly align: "end";
3612
+ readonly align: "start";
3542
3613
  readonly textVariant: "body";
3543
3614
  readonly fontWeight: "700";
3544
3615
  readonly minHeight: 44;