themelia-react-ui 1.0.1 → 2.0.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 (640) hide show
  1. package/CHANGELOG.md +417 -0
  2. package/README.md +67 -16
  3. package/dist/{accordion-B-5Focs8.js → accordion-CQXVcd7Q.js} +15 -15
  4. package/dist/accordion-CQXVcd7Q.js.map +1 -0
  5. package/dist/action-menu-BTpyPWJ2.js +264 -0
  6. package/dist/action-menu-BTpyPWJ2.js.map +1 -0
  7. package/dist/affordance-geometry.generated-CCIXb2A1.js +68 -0
  8. package/dist/affordance-geometry.generated-CCIXb2A1.js.map +1 -0
  9. package/dist/{ai-artifact-B5tPpXnS.js → ai-artifact-2PQ2fItc.js} +206 -215
  10. package/dist/ai-artifact-2PQ2fItc.js.map +1 -0
  11. package/dist/{app-shell-at8Kt4l_.js → app-shell-BE_j8-AT.js} +11 -10
  12. package/dist/app-shell-BE_j8-AT.js.map +1 -0
  13. package/dist/{attachment-BO2R47wn.js → attachment-q69dlt5Y.js} +14 -14
  14. package/dist/attachment-q69dlt5Y.js.map +1 -0
  15. package/dist/auth-M3vGMgDR.js +723 -0
  16. package/dist/auth-M3vGMgDR.js.map +1 -0
  17. package/dist/{avatar-Bpzty83c.js → avatar-djdaaQ_s.js} +15 -13
  18. package/dist/avatar-djdaaQ_s.js.map +1 -0
  19. package/dist/{badge-BZXZT9wd.js → badge-0tATj-tW.js} +9 -9
  20. package/dist/badge-0tATj-tW.js.map +1 -0
  21. package/dist/base/accordion.js +1 -1
  22. package/dist/base/action-menu.js +1 -1
  23. package/dist/base/attachment.js +1 -1
  24. package/dist/base/avatar.js +1 -1
  25. package/dist/base/badge.js +1 -1
  26. package/dist/base/buttons.js +3 -2
  27. package/dist/base/cards.js +3 -3
  28. package/dist/base/carousel.js +33 -35
  29. package/dist/base/carousel.js.map +1 -1
  30. package/dist/base/cascader.js +246 -222
  31. package/dist/base/cascader.js.map +1 -1
  32. package/dist/base/chart.js +1 -1
  33. package/dist/base/choice-inputs.js +2 -2
  34. package/dist/base/code-block.js +1 -1
  35. package/dist/base/combobox.js +1 -1
  36. package/dist/base/command.js +1 -1
  37. package/dist/base/copyable.js +1 -1
  38. package/dist/base/date-pickers.js +3 -3
  39. package/dist/base/display.js +7 -7
  40. package/dist/base/feedback.js +4 -4
  41. package/dist/base/forms-numeric.js +1 -1
  42. package/dist/base/forms.js +2 -2
  43. package/dist/base/inline-edit.js +94 -92
  44. package/dist/base/inline-edit.js.map +1 -1
  45. package/dist/base/item.js +1 -1
  46. package/dist/base/media-gallery.js +1 -1
  47. package/dist/base/navigation.js +6 -6
  48. package/dist/base/popover-menu.js +1 -1
  49. package/dist/base/popover.js +1 -1
  50. package/dist/base/qr-code.js +7 -4
  51. package/dist/base/qr-code.js.map +1 -1
  52. package/dist/base/repeaters.js +53 -53
  53. package/dist/base/repeaters.js.map +1 -1
  54. package/dist/base/sheet.js +1 -1
  55. package/dist/base/sidebar.js +1 -1
  56. package/dist/base/signature-pad.js +84 -82
  57. package/dist/base/signature-pad.js.map +1 -1
  58. package/dist/base/skeleton.js +1 -1
  59. package/dist/base/spinner.js +1 -1
  60. package/dist/base/structure.js +1 -1
  61. package/dist/base/table.js +1 -1
  62. package/dist/base/text-inputs.js +2 -2
  63. package/dist/base/toaster.js +7 -7
  64. package/dist/base/toaster.js.map +1 -1
  65. package/dist/base/tree.js +1 -1
  66. package/dist/base/upload-queue.js +1 -1
  67. package/dist/base/upload.js +3 -3
  68. package/dist/base/value-inputs.js +1 -1
  69. package/dist/blocks/admin.js +228 -219
  70. package/dist/blocks/admin.js.map +1 -1
  71. package/dist/blocks/ai.js +182 -212
  72. package/dist/blocks/ai.js.map +1 -1
  73. package/dist/blocks/analytics/usage-card.js +1 -1
  74. package/dist/blocks/analytics.js +665 -620
  75. package/dist/blocks/analytics.js.map +1 -1
  76. package/dist/blocks/collaboration.js +2 -2
  77. package/dist/blocks/commerce/receipt.js +1 -1
  78. package/dist/blocks/commerce.js +1439 -1553
  79. package/dist/blocks/commerce.js.map +1 -1
  80. package/dist/blocks/data-display.js +1 -1
  81. package/dist/blocks/onboarding.js +6 -6
  82. package/dist/blocks/onboarding.js.map +1 -1
  83. package/dist/blocks/planning.js +88 -97
  84. package/dist/blocks/planning.js.map +1 -1
  85. package/dist/blocks/timelines.js +1 -1
  86. package/dist/{breadcrumbs-DdQ_I5ra.js → breadcrumbs-BG_FfMK4.js} +10 -9
  87. package/dist/breadcrumbs-BG_FfMK4.js.map +1 -0
  88. package/dist/button-BS3KDg00.js +674 -0
  89. package/dist/button-BS3KDg00.js.map +1 -0
  90. package/dist/{button-BS6l5JUw.js → button-R9CCoH7A.js} +3 -3
  91. package/dist/button-R9CCoH7A.js.map +1 -0
  92. package/dist/buttons-DS0ZIwJ_.js +99 -0
  93. package/dist/buttons-DS0ZIwJ_.js.map +1 -0
  94. package/dist/{cards-Cum56XOF.js → cards-QoJ4syG9.js} +12 -12
  95. package/dist/{cards-Cum56XOF.js.map → cards-QoJ4syG9.js.map} +1 -1
  96. package/dist/chart-DwYRKKc-.js +152 -0
  97. package/dist/chart-DwYRKKc-.js.map +1 -0
  98. package/dist/checkbox-B7ygNTYp.js +35 -0
  99. package/dist/checkbox-B7ygNTYp.js.map +1 -0
  100. package/dist/choice-inputs-DrJ17tpL.js +752 -0
  101. package/dist/choice-inputs-DrJ17tpL.js.map +1 -0
  102. package/dist/{code-block-xHKbAJDj.js → code-block-CD0B7M93.js} +27 -27
  103. package/dist/code-block-CD0B7M93.js.map +1 -0
  104. package/dist/{collapsible-DsnktFNv.js → collapsible-oMUGM4tr.js} +3 -3
  105. package/dist/{collapsible-DsnktFNv.js.map → collapsible-oMUGM4tr.js.map} +1 -1
  106. package/dist/{collection-content-C4fthJV_.js → collection-content-Ys-OZOkY.js} +3 -3
  107. package/dist/{collection-content-C4fthJV_.js.map → collection-content-Ys-OZOkY.js.map} +1 -1
  108. package/dist/combobox-6dvVny2q.js +272 -0
  109. package/dist/combobox-6dvVny2q.js.map +1 -0
  110. package/dist/combobox-CB7039j7.js +865 -0
  111. package/dist/combobox-CB7039j7.js.map +1 -0
  112. package/dist/{command-C0xe7u9B.js → command-kPMPjIxJ.js} +35 -31
  113. package/dist/command-kPMPjIxJ.js.map +1 -0
  114. package/dist/{comments-DviPLnwy.js → comments-You0Bzbr.js} +434 -409
  115. package/dist/comments-You0Bzbr.js.map +1 -0
  116. package/dist/components/base/accordion/accordion-variants.d.ts +3 -3
  117. package/dist/components/base/action-menu/action-menu.d.ts +7 -2
  118. package/dist/components/base/avatar/stacked-avatars.d.ts +5 -4
  119. package/dist/components/base/badge/badge.d.ts +1 -1
  120. package/dist/components/base/badge/badge.recipes.d.ts +4 -4
  121. package/dist/components/base/buttons/base-button.d.ts +7 -0
  122. package/dist/components/base/buttons/button-group.recipes.d.ts +2 -2
  123. package/dist/components/base/buttons/button.recipes.d.ts +10 -19
  124. package/dist/components/base/buttons/button.variants.d.ts +1 -0
  125. package/dist/components/base/buttons/loader-button.d.ts +3 -1
  126. package/dist/components/base/buttons/text-button.d.ts +2 -2
  127. package/dist/components/base/buttons/use-pending-button-focus.d.ts +3 -0
  128. package/dist/components/base/cards/card.recipes.d.ts +13 -5
  129. package/dist/components/base/cards/partials/card-primitives.d.ts +9 -4
  130. package/dist/components/base/cards/smart-card.types.d.ts +1 -1
  131. package/dist/components/base/carousel/carousel.d.ts +3 -1
  132. package/dist/components/base/chart/chart.d.ts +7 -7
  133. package/dist/components/base/choice-inputs/checkbox.d.ts +6 -7
  134. package/dist/components/base/choice-inputs/choice-types.d.ts +10 -1
  135. package/dist/components/base/choice-inputs/pill-radio-group.d.ts +9 -0
  136. package/dist/components/base/choice-inputs/select-popup.d.ts +9 -1
  137. package/dist/components/base/choice-inputs/switch-card.d.ts +1 -1
  138. package/dist/components/base/date-pickers/date-picker-field.d.ts +23 -0
  139. package/dist/components/base/date-pickers/date-picker.recipes.d.ts +5 -18
  140. package/dist/components/base/date-pickers/datepicker.types.d.ts +16 -3
  141. package/dist/components/base/display/alert-dialog.d.ts +8 -2
  142. package/dist/components/base/display/content-block.d.ts +4 -2
  143. package/dist/components/base/display/date-block.d.ts +1 -1
  144. package/dist/components/base/display/dialog.d.ts +12 -5
  145. package/dist/components/base/display/surface-title.d.ts +6 -1
  146. package/dist/components/base/feedback/alert.d.ts +1 -1
  147. package/dist/components/base/feedback/state-display.d.ts +5 -4
  148. package/dist/components/base/forms/form-field.d.ts +1 -0
  149. package/dist/components/base/forms/form-sizing.d.ts +35 -3
  150. package/dist/components/base/forms/workflow.d.ts +2 -0
  151. package/dist/components/base/forms-numeric/coordinates-input.d.ts +3 -0
  152. package/dist/components/base/forms-numeric/rounding-mode-select.d.ts +4 -1
  153. package/dist/components/base/navigation/dropdown-menu.d.ts +2 -2
  154. package/dist/components/base/navigation/language-switcher.d.ts +4 -1
  155. package/dist/components/base/navigation/overflow-tab-bar.d.ts +7 -0
  156. package/dist/components/base/navigation/page-header/page-header.d.ts +4 -1
  157. package/dist/components/base/navigation/tabs.d.ts +3 -5
  158. package/dist/components/base/popover/popover.recipes.d.ts +3 -3
  159. package/dist/components/base/qr-code/qr-code.d.ts +2 -0
  160. package/dist/components/base/sheet/index.d.ts +29 -1
  161. package/dist/components/base/sheet/sheet.d.ts +14 -5
  162. package/dist/components/base/spinner/spinner.d.ts +3 -2
  163. package/dist/components/base/structure/structure.types.d.ts +1 -1
  164. package/dist/components/base/table/index.d.ts +1 -1
  165. package/dist/components/base/text-inputs/clear-native-field.d.ts +2 -0
  166. package/dist/components/base/text-inputs/input-group.d.ts +2 -2
  167. package/dist/components/base/text-inputs/input-trailing-action.d.ts +3 -0
  168. package/dist/components/base/upload/upload.recipes.d.ts +11 -0
  169. package/dist/components/base/value-inputs/date-time-input.d.ts +4 -2
  170. package/dist/components/base/value-inputs/tags-input.d.ts +2 -0
  171. package/dist/components/blocks/admin/api-key-list/api-key-list.types.d.ts +1 -1
  172. package/dist/components/blocks/analytics/format-metric-value.d.ts +11 -1
  173. package/dist/components/blocks/analytics/index.d.ts +1 -1
  174. package/dist/components/blocks/analytics/types.d.ts +1 -1
  175. package/dist/components/blocks/analytics/use-metric-format-options.d.ts +3 -0
  176. package/dist/components/blocks/collaboration/message/message.recipes.d.ts +12 -0
  177. package/dist/components/blocks/commerce/address-card/address-card.d.ts +1 -1
  178. package/dist/components/blocks/commerce/address-card/types.d.ts +3 -1
  179. package/dist/components/blocks/commerce/booking-calendar-event-card/booking-calendar-event-card.d.ts +4 -0
  180. package/dist/components/blocks/commerce/booking-calendar-event-card/booking-calendar-event-card.types.d.ts +2 -2
  181. package/dist/components/blocks/commerce/discount-stack/types.d.ts +1 -1
  182. package/dist/components/blocks/commerce/inventory-section/types.d.ts +4 -1
  183. package/dist/components/blocks/commerce/loyalty-points/types.d.ts +1 -1
  184. package/dist/components/blocks/commerce/order-status/types.d.ts +4 -0
  185. package/dist/components/blocks/commerce/payment-method/payment-method.d.ts +1 -1
  186. package/dist/components/blocks/commerce/payment-method/types.d.ts +3 -1
  187. package/dist/components/blocks/commerce/seo-listing/seo-listing-card.d.ts +1 -1
  188. package/dist/components/blocks/commerce/seo-listing/types.d.ts +3 -1
  189. package/dist/components/blocks/commerce/vendor-profile/types.d.ts +4 -1
  190. package/dist/components/blocks/data-display/dense-info-card/dense-info.strings.d.ts +4 -1
  191. package/dist/components/blocks/data-display/empty-state/partials/illustrations/document-stack.d.ts +1 -4
  192. package/dist/components/blocks/data-display/empty-state/partials/illustrations/inbox-clean.d.ts +1 -4
  193. package/dist/components/blocks/data-display/empty-state/partials/illustrations/index.d.ts +3 -3
  194. package/dist/components/blocks/data-display/empty-state/partials/illustrations/stacked-cards.d.ts +1 -6
  195. package/dist/components/blocks/data-display/inline-stat/inline-stat.d.ts +4 -1
  196. package/dist/components/features/combobox/components/error-message.d.ts +1 -1
  197. package/dist/components/features/comments/hooks/use-attachment-upload.d.ts +5 -0
  198. package/dist/components/features/filters/facets/search-facet.d.ts +0 -12
  199. package/dist/components/features/filters/facets/tags-facet.d.ts +1 -1
  200. package/dist/components/features/global-search/partials/global-search-idle-state.d.ts +1 -1
  201. package/dist/components/features/media-library/media-library.d.ts +1 -1
  202. package/dist/components/features/media-library/media-library.types.d.ts +9 -1
  203. package/dist/components/features/media-library/partials/media-library-partials.d.ts +1 -1
  204. package/dist/components/features/overlays/alert-dialog.d.ts +1 -1
  205. package/dist/components/features/overlays/drawer.d.ts +1 -1
  206. package/dist/components/features/overlays/hooks/use-overlay-actions.d.ts +2 -2
  207. package/dist/components/features/overlays/hooks/use-overlay-visibility.d.ts +11 -4
  208. package/dist/components/features/overlays/hooks/use-pending-overlay-focus.d.ts +2 -0
  209. package/dist/components/features/overlays/overlay-tone-icon.d.ts +37 -0
  210. package/dist/components/features/overlays/overlays.types.d.ts +46 -22
  211. package/dist/components/features/products/components/product-variants-manager.d.ts +1 -1
  212. package/dist/components/features/products/partials/index.d.ts +1 -1
  213. package/dist/components/features/products/partials/product-metric-tile.d.ts +6 -0
  214. package/dist/components/features/products/partials/product-tone.d.ts +11 -1
  215. package/dist/components/features/products/products.types.d.ts +2 -1
  216. package/dist/components/features/rich-text-editor/rich-text-editor.recipes.d.ts +2 -1
  217. package/dist/components/features/table/data-table.d.ts +1 -1
  218. package/dist/components/features/table/partials/cell-renderers.d.ts +1 -1
  219. package/dist/components/features/table/table.types.d.ts +1 -1
  220. package/dist/components/features/theme-tweaker/theme-provider-settings.d.ts +3 -1
  221. package/dist/components/layout/auth/auth.types.d.ts +1 -0
  222. package/dist/components/layout/page/index.d.ts +1 -1
  223. package/dist/components/layout/page/page.d.ts +0 -1
  224. package/dist/components/layout/page/page.types.d.ts +62 -6
  225. package/dist/components/layout/page/partials/page-header-commands.d.ts +13 -0
  226. package/dist/components/layout/page/partials/page-header.d.ts +1 -1
  227. package/dist/components/layout/sidebar/sidebar.context.d.ts +1 -1
  228. package/dist/components/layout/sidebar/sidebar.types.d.ts +4 -0
  229. package/dist/components/layout/workspace/workspace.types.d.ts +3 -0
  230. package/dist/components/primitives/date.d.ts +16 -3
  231. package/dist/components/primitives/dimensions.d.ts +6 -0
  232. package/dist/components/primitives/duration.d.ts +6 -0
  233. package/dist/components/primitives/file-size.d.ts +6 -0
  234. package/dist/components/primitives/index.d.ts +1 -1
  235. package/dist/components/primitives/initials.d.ts +11 -2
  236. package/dist/components/primitives/link.d.ts +7 -0
  237. package/dist/components/primitives/money.d.ts +29 -7
  238. package/dist/components/primitives/number.d.ts +17 -0
  239. package/dist/components/primitives/value-typography.d.ts +54 -0
  240. package/dist/components/primitives/value.d.ts +31 -6
  241. package/dist/components/typography/heading.d.ts +13 -2
  242. package/dist/components/typography/index.d.ts +1 -1
  243. package/dist/components/typography/label.d.ts +3 -0
  244. package/dist/components/typography/running-text.d.ts +12 -0
  245. package/dist/components/typography/text-link.d.ts +23 -1
  246. package/dist/components/typography/text.d.ts +12 -0
  247. package/dist/components/typography/text.styles.d.ts +37 -5
  248. package/dist/components/ui/button.d.ts +1 -1
  249. package/dist/components/ui/checkbox.d.ts +5 -0
  250. package/dist/components/ui/overlay.recipes.d.ts +15 -2
  251. package/dist/components/ui/popover.d.ts +1 -1
  252. package/dist/components/ui/select.d.ts +3 -1
  253. package/dist/components/ui/sidebar.d.ts +1 -1
  254. package/dist/components/ui/switch.d.ts +5 -0
  255. package/dist/components/ui/table.d.ts +2 -1
  256. package/dist/container.recipes-D9t8MHR3.js +27 -0
  257. package/dist/container.recipes-D9t8MHR3.js.map +1 -0
  258. package/dist/{containers-6s-ucRQQ.js → containers-D_L4mTVb.js} +34 -57
  259. package/dist/containers-D_L4mTVb.js.map +1 -0
  260. package/dist/control-group-recipes-DBXmfh2E.js +21 -0
  261. package/dist/control-group-recipes-DBXmfh2E.js.map +1 -0
  262. package/dist/{copyable-B7SBXJMr.js → copyable-DDjTeW_j.js} +6 -6
  263. package/dist/{copyable-B7SBXJMr.js.map → copyable-DDjTeW_j.js.map} +1 -1
  264. package/dist/data-display-3xWQUnMA.js +1335 -0
  265. package/dist/data-display-3xWQUnMA.js.map +1 -0
  266. package/dist/date-picker-DrDFj8Lo.js +1527 -0
  267. package/dist/date-picker-DrDFj8Lo.js.map +1 -0
  268. package/dist/date-pickers-CnFCb0n2.js +174 -0
  269. package/dist/date-pickers-CnFCb0n2.js.map +1 -0
  270. package/dist/date-uf3z37Nm.js +144 -0
  271. package/dist/date-uf3z37Nm.js.map +1 -0
  272. package/dist/{display-CFM5myut.js → display-DrdvPwF0.js} +25 -25
  273. package/dist/display-DrdvPwF0.js.map +1 -0
  274. package/dist/{dropdown-menu-BlnyHr-9.js → dropdown-menu-CURh59jb.js} +22 -15
  275. package/dist/dropdown-menu-CURh59jb.js.map +1 -0
  276. package/dist/features/activities.js +177 -163
  277. package/dist/features/activities.js.map +1 -1
  278. package/dist/features/ai-chat.js +187 -183
  279. package/dist/features/ai-chat.js.map +1 -1
  280. package/dist/features/async-preview.js +9 -9
  281. package/dist/features/async-preview.js.map +1 -1
  282. package/dist/features/combobox.js +1 -1
  283. package/dist/features/comments.js +1 -1
  284. package/dist/features/data-view.js +25 -23
  285. package/dist/features/data-view.js.map +1 -1
  286. package/dist/features/email-composer/engine.js +1 -1
  287. package/dist/features/email-composer.js +353 -355
  288. package/dist/features/email-composer.js.map +1 -1
  289. package/dist/features/event-calendar.js +346 -354
  290. package/dist/features/event-calendar.js.map +1 -1
  291. package/dist/features/filters.js +1 -1
  292. package/dist/features/global-search.js +225 -227
  293. package/dist/features/global-search.js.map +1 -1
  294. package/dist/features/kanban.js +29 -29
  295. package/dist/features/kanban.js.map +1 -1
  296. package/dist/features/map.js +59 -58
  297. package/dist/features/map.js.map +1 -1
  298. package/dist/features/media-library.js +898 -900
  299. package/dist/features/media-library.js.map +1 -1
  300. package/dist/features/mentions.js +1 -1
  301. package/dist/features/overlays.js +1 -1
  302. package/dist/features/products.js +1412 -1444
  303. package/dist/features/products.js.map +1 -1
  304. package/dist/features/questionnaire.js +51 -49
  305. package/dist/features/questionnaire.js.map +1 -1
  306. package/dist/features/resource-assignment.js +103 -97
  307. package/dist/features/resource-assignment.js.map +1 -1
  308. package/dist/features/resource.js +13 -13
  309. package/dist/features/resource.js.map +1 -1
  310. package/dist/features/rich-text-editor.js +2 -2
  311. package/dist/features/schema-form.js +187 -183
  312. package/dist/features/schema-form.js.map +1 -1
  313. package/dist/features/suggestions.js +3 -3
  314. package/dist/features/sync.js +7 -7
  315. package/dist/features/sync.js.map +1 -1
  316. package/dist/features/table.js +1 -1
  317. package/dist/features/theme-tweaker.js +508 -503
  318. package/dist/features/theme-tweaker.js.map +1 -1
  319. package/dist/{feedback-DWUkgEjR.js → feedback-C7nR0UtT.js} +30 -31
  320. package/dist/feedback-C7nR0UtT.js.map +1 -0
  321. package/dist/field-affordance-recipes-CkOCdE2y.js +46 -0
  322. package/dist/field-affordance-recipes-CkOCdE2y.js.map +1 -0
  323. package/dist/{field-state-recipes-CBTRt9Bt.js → field-state-recipes-C-MFBX_8.js} +5 -5
  324. package/dist/field-state-recipes-C-MFBX_8.js.map +1 -0
  325. package/dist/{filters-BhsUtsxW.js → filters-Da-gNPsE.js} +760 -765
  326. package/dist/filters-Da-gNPsE.js.map +1 -0
  327. package/dist/{form-field-Bn7ZH1rA.js → form-field-VZRULhUK.js} +20 -12
  328. package/dist/form-field-VZRULhUK.js.map +1 -0
  329. package/dist/form-sizing-uWP4lzVh.js +126 -0
  330. package/dist/form-sizing-uWP4lzVh.js.map +1 -0
  331. package/dist/{forms-B7pzS25o.js → forms-DDeEnXSY.js} +38 -38
  332. package/dist/forms-DDeEnXSY.js.map +1 -0
  333. package/dist/forms-numeric-D3CO60IF.js +905 -0
  334. package/dist/forms-numeric-D3CO60IF.js.map +1 -0
  335. package/dist/{header-C59QZyxV.js → header-2ycNqGOR.js} +42 -37
  336. package/dist/header-2ycNqGOR.js.map +1 -0
  337. package/dist/{hooks-CM1Vp9Pe.js → hooks-DQ5SPwZw.js} +2 -2
  338. package/dist/{hooks-CM1Vp9Pe.js.map → hooks-DQ5SPwZw.js.map} +1 -1
  339. package/dist/{http-CLTVJc5I.js → http-CdEIHyQf.js} +2 -2
  340. package/dist/http-CdEIHyQf.js.map +1 -0
  341. package/dist/{icon-badge-Dv0RYQwj.js → icon-badge-DKlaKXoo.js} +4 -4
  342. package/dist/{icon-badge-Dv0RYQwj.js.map → icon-badge-DKlaKXoo.js.map} +1 -1
  343. package/dist/index.js +2 -2
  344. package/dist/input-BoLm9Hks.js +20 -0
  345. package/dist/input-BoLm9Hks.js.map +1 -0
  346. package/dist/input-DhQdBnV3.js +255 -0
  347. package/dist/input-DhQdBnV3.js.map +1 -0
  348. package/dist/item-xzh8Df65.js +264 -0
  349. package/dist/item-xzh8Df65.js.map +1 -0
  350. package/dist/layout/app-shell.js +1 -1
  351. package/dist/layout/auth.js +1 -1
  352. package/dist/layout/containers.js +1 -1
  353. package/dist/layout/header.js +1 -1
  354. package/dist/layout/hooks.js +1 -1
  355. package/dist/layout/navigation.js +1 -1
  356. package/dist/layout/page.js +1 -1
  357. package/dist/layout/settings.js +1 -1
  358. package/dist/layout/sidebar.js +2 -2
  359. package/dist/layout/workspace.js +1 -1
  360. package/dist/layout.js +10 -10
  361. package/dist/lib/affordance-geometry.generated.d.ts +46 -10
  362. package/dist/lib/control-group-recipes.d.ts +22 -0
  363. package/dist/lib/field-affordance-recipes.d.ts +70 -2
  364. package/dist/lib/field-state-recipes.d.ts +6 -4
  365. package/dist/lib/format.d.ts +9 -0
  366. package/dist/lib/money-format.d.ts +30 -0
  367. package/dist/lib/navigation-row-recipes.d.ts +3 -2
  368. package/dist/lib/overlay-anatomy-recipes.d.ts +2 -2
  369. package/dist/lib/surface-recipes.d.ts +13 -8
  370. package/dist/lib/token-merge.generated.d.ts +144 -2
  371. package/dist/lib/track-recipes.d.ts +1 -1
  372. package/dist/lib/ui-provider/provider.d.ts +7 -2
  373. package/dist/lib/ui-provider/store.d.ts +6 -2
  374. package/dist/lib/ui-provider/types.d.ts +9 -4
  375. package/dist/lib/use-prefers-reduced-motion.d.ts +2 -0
  376. package/dist/lib/utils.js +1 -1
  377. package/dist/media-gallery-DQUQ0m3O.js +201 -0
  378. package/dist/media-gallery-DQUQ0m3O.js.map +1 -0
  379. package/dist/{mentions-B8Ko-fhS.js → mentions-DwnO1hh4.js} +40 -39
  380. package/dist/{mentions-B8Ko-fhS.js.map → mentions-DwnO1hh4.js.map} +1 -1
  381. package/dist/message-YfFmbXNP.js +127 -0
  382. package/dist/message-YfFmbXNP.js.map +1 -0
  383. package/dist/{navigation-BUIn2Qxx.js → navigation-Cbp5V8gG.js} +27 -28
  384. package/dist/navigation-Cbp5V8gG.js.map +1 -0
  385. package/dist/navigation-Cs1npsPm.js +300 -0
  386. package/dist/navigation-Cs1npsPm.js.map +1 -0
  387. package/dist/{navigation-row-recipes-GVh11KiT.js → navigation-row-recipes-DlU-4QYO.js} +3 -3
  388. package/dist/navigation-row-recipes-DlU-4QYO.js.map +1 -0
  389. package/dist/number-CKRBYmZK.js +352 -0
  390. package/dist/number-CKRBYmZK.js.map +1 -0
  391. package/dist/overlay.recipes-CNO2S9V6.js +34 -0
  392. package/dist/overlay.recipes-CNO2S9V6.js.map +1 -0
  393. package/dist/overlays-DhZO7N-I.js +994 -0
  394. package/dist/overlays-DhZO7N-I.js.map +1 -0
  395. package/dist/page-C6R_8jFt.js +325 -0
  396. package/dist/page-C6R_8jFt.js.map +1 -0
  397. package/dist/{page-header-DQRa0jug.js → page-header-hUTzcRZX.js} +12 -12
  398. package/dist/page-header-hUTzcRZX.js.map +1 -0
  399. package/dist/{pagination-C29vvt3I.js → pagination-Cm0jqa3I.js} +21 -21
  400. package/dist/pagination-Cm0jqa3I.js.map +1 -0
  401. package/dist/{popover-CoLDEg19.js → popover-Dcv_9jxr.js} +23 -22
  402. package/dist/popover-Dcv_9jxr.js.map +1 -0
  403. package/dist/{popover-menu-GLIQTJTx.js → popover-menu-DnRFKnHP.js} +6 -6
  404. package/dist/{popover-menu-GLIQTJTx.js.map → popover-menu-DnRFKnHP.js.map} +1 -1
  405. package/dist/{popover.recipes-zgBhMlUu.js → popover.recipes-wmbvL8Ah.js} +5 -5
  406. package/dist/popover.recipes-wmbvL8Ah.js.map +1 -0
  407. package/dist/primitives-BHrwQXFC.js +379 -0
  408. package/dist/primitives-BHrwQXFC.js.map +1 -0
  409. package/dist/primitives.js +5 -5
  410. package/dist/{progress-BOe8l_FZ.js → progress-Br9WTFya.js} +12 -11
  411. package/dist/progress-Br9WTFya.js.map +1 -0
  412. package/dist/{receipt-BM8xsGFy.js → receipt-CV89q1fs.js} +8 -8
  413. package/dist/{receipt-BM8xsGFy.js.map → receipt-CV89q1fs.js.map} +1 -1
  414. package/dist/rich-text-editor-CF8QYt5p.js +574 -0
  415. package/dist/rich-text-editor-CF8QYt5p.js.map +1 -0
  416. package/dist/{rich-text-editor.recipes-DxvOE0Lp.js → rich-text-editor.recipes-CnrbmTS1.js} +35 -26
  417. package/dist/rich-text-editor.recipes-CnrbmTS1.js.map +1 -0
  418. package/dist/{rich-text-B7sBAdDG.js → rich-text-j-FGAeZW.js} +4 -4
  419. package/dist/{rich-text-B7sBAdDG.js.map → rich-text-j-FGAeZW.js.map} +1 -1
  420. package/dist/{scroll-area-BheMQ270.js → scroll-area-DRdr16Pt.js} +3 -3
  421. package/dist/scroll-area-DRdr16Pt.js.map +1 -0
  422. package/dist/{separator-DO0EbCEm.js → separator-BMEvwnSX.js} +2 -2
  423. package/dist/{separator-DO0EbCEm.js.map → separator-BMEvwnSX.js.map} +1 -1
  424. package/dist/{separator-Gk_WXH-l.js → separator-Do5GWDYi.js} +4 -4
  425. package/dist/separator-Do5GWDYi.js.map +1 -0
  426. package/dist/services/actions/action-adapters.d.ts +4 -0
  427. package/dist/services/actions.js +8 -3
  428. package/dist/services/actions.js.map +1 -1
  429. package/dist/{settings-BnCyyPOJ.js → settings-DHk0L2MF.js} +20 -19
  430. package/dist/settings-DHk0L2MF.js.map +1 -0
  431. package/dist/sheet-DRFNY1_D.js +207 -0
  432. package/dist/sheet-DRFNY1_D.js.map +1 -0
  433. package/dist/sidebar-Cb8WzOvE.js +511 -0
  434. package/dist/sidebar-Cb8WzOvE.js.map +1 -0
  435. package/dist/{sidebar-DPR7fmqN.js → sidebar-Crc9M9JV.js} +220 -201
  436. package/dist/sidebar-Crc9M9JV.js.map +1 -0
  437. package/dist/{skeleton-CmT1ppqb.js → skeleton-DVMXr15h.js} +5 -5
  438. package/dist/{skeleton-CmT1ppqb.js.map → skeleton-DVMXr15h.js.map} +1 -1
  439. package/dist/smart-card-Bek-TwUp.js +599 -0
  440. package/dist/smart-card-Bek-TwUp.js.map +1 -0
  441. package/dist/{spinner-BY9HbUEh.js → spinner-CmTAbEp0.js} +8 -6
  442. package/dist/spinner-CmTAbEp0.js.map +1 -0
  443. package/dist/{structure-MvKVq-oL.js → structure-hzCW-XsV.js} +3 -3
  444. package/dist/{structure-MvKVq-oL.js.map → structure-hzCW-XsV.js.map} +1 -1
  445. package/dist/{structure.recipes-Bqhf9oIh.js → structure.recipes-EPz60cU8.js} +37 -19
  446. package/dist/structure.recipes-EPz60cU8.js.map +1 -0
  447. package/dist/style.css +1 -1
  448. package/dist/surface-recipes-DOdoBXGm.js +28 -0
  449. package/dist/surface-recipes-DOdoBXGm.js.map +1 -0
  450. package/dist/table-D6zKeYQX.js +162 -0
  451. package/dist/table-D6zKeYQX.js.map +1 -0
  452. package/dist/table-Dn4XSrSB.js +1444 -0
  453. package/dist/table-Dn4XSrSB.js.map +1 -0
  454. package/dist/tabs-Dk8E_knt.js +189 -0
  455. package/dist/tabs-Dk8E_knt.js.map +1 -0
  456. package/dist/text-inputs-BFpku0Qd.js +331 -0
  457. package/dist/text-inputs-BFpku0Qd.js.map +1 -0
  458. package/dist/{text.styles-BwB7vAF2.js → text.styles-g4He6UIW.js} +26 -15
  459. package/dist/text.styles-g4He6UIW.js.map +1 -0
  460. package/dist/theme.css +90 -124
  461. package/dist/themes/green.css +24 -0
  462. package/dist/{timelines-B9ICkQcV.js → timelines-CxuAFIc2.js} +97 -104
  463. package/dist/timelines-CxuAFIc2.js.map +1 -0
  464. package/dist/track-recipes-CDcKmndW.js +10 -0
  465. package/dist/track-recipes-CDcKmndW.js.map +1 -0
  466. package/dist/{tree-BdWSaoFT.js → tree-BotPlyiD.js} +13 -13
  467. package/dist/{tree-BdWSaoFT.js.map → tree-BotPlyiD.js.map} +1 -1
  468. package/dist/typography/rich-text.js +1 -1
  469. package/dist/typography-CAr3dQhX.js +116 -0
  470. package/dist/typography-CAr3dQhX.js.map +1 -0
  471. package/dist/typography.js +2 -2
  472. package/dist/{ui-provider-CftIB6TY.js → ui-provider-D2_TeLqw.js} +22 -22
  473. package/dist/ui-provider-D2_TeLqw.js.map +1 -0
  474. package/dist/ui-provider.js +1 -1
  475. package/dist/{upload-D8Za5x_c.js → upload-B0WHW7ak.js} +278 -274
  476. package/dist/upload-B0WHW7ak.js.map +1 -0
  477. package/dist/{upload-queue-hIIYBLS7.js → upload-queue-BHZ_wBfd.js} +72 -75
  478. package/dist/upload-queue-BHZ_wBfd.js.map +1 -0
  479. package/dist/{usage-card-DnmnJ58D.js → usage-card-U0YBLTNT.js} +31 -33
  480. package/dist/usage-card-U0YBLTNT.js.map +1 -0
  481. package/dist/utils-Cospvlj1.js +4445 -0
  482. package/dist/utils-Cospvlj1.js.map +1 -0
  483. package/dist/value-inputs-CjfzGMsN.js +854 -0
  484. package/dist/value-inputs-CjfzGMsN.js.map +1 -0
  485. package/dist/value-typography-Deb3yQZg.js +116 -0
  486. package/dist/value-typography-Deb3yQZg.js.map +1 -0
  487. package/dist/{workspace-C1PZmk8L.js → workspace-YoFjXi6i.js} +97 -105
  488. package/dist/workspace-YoFjXi6i.js.map +1 -0
  489. package/docs/consumer-skill/SKILL.md +123 -119
  490. package/docs/consumer-skill/examples/analytics.tsx +34 -0
  491. package/docs/consumer-skill/examples/app-layout.tsx +42 -14
  492. package/docs/consumer-skill/examples/detail.tsx +20 -5
  493. package/docs/consumer-skill/examples/edit.tsx +1 -1
  494. package/docs/consumer-skill/examples/layout-blocks.tsx +20 -0
  495. package/docs/consumer-skill/examples/manifest.json +37 -3
  496. package/docs/consumer-skill/examples/scoped-directory.tsx +2 -2
  497. package/docs/consumer-skill/examples/website.tsx +56 -0
  498. package/docs/consumer-skill/references/analytics.md +70 -0
  499. package/docs/consumer-skill/references/composition.md +195 -9
  500. package/docs/consumer-skill/references/design-contract.md +33 -7
  501. package/docs/consumer-skill/references/discovery.md +80 -5
  502. package/docs/consumer-skill/references/installation.md +22 -0
  503. package/docs/consumer-skill/references/integration.md +46 -1
  504. package/docs/consumer-skill/references/public-api.json +2083 -237
  505. package/docs/consumer-skill/references/review.md +74 -6
  506. package/docs/consumer-skill/references/theming.md +59 -8
  507. package/docs/consumer-skill/references/tokens.json +180 -9
  508. package/docs/consumer-skill/references/workflows.md +34 -0
  509. package/docs/consumer-skill/scripts/check-composition.mjs +1 -1
  510. package/docs/consumer-skill/scripts/composition-policy.mjs +271 -18
  511. package/docs/consumer-skill/scripts/discovery.mjs +69 -9
  512. package/docs/consumer-skill/scripts/pin-button-defaults.mjs +95 -0
  513. package/docs/consumer-skill/scripts/surface-policy.mjs +44 -0
  514. package/package.json +11 -6
  515. package/dist/accordion-B-5Focs8.js.map +0 -1
  516. package/dist/action-menu-Cx3SdfbN.js +0 -265
  517. package/dist/action-menu-Cx3SdfbN.js.map +0 -1
  518. package/dist/affordance-geometry.generated-D8Jcfb0G.js +0 -32
  519. package/dist/affordance-geometry.generated-D8Jcfb0G.js.map +0 -1
  520. package/dist/ai-artifact-B5tPpXnS.js.map +0 -1
  521. package/dist/app-shell-at8Kt4l_.js.map +0 -1
  522. package/dist/attachment-BO2R47wn.js.map +0 -1
  523. package/dist/auth-OFwWSAap.js +0 -704
  524. package/dist/auth-OFwWSAap.js.map +0 -1
  525. package/dist/avatar-Bpzty83c.js.map +0 -1
  526. package/dist/badge-BZXZT9wd.js.map +0 -1
  527. package/dist/breadcrumbs-DdQ_I5ra.js.map +0 -1
  528. package/dist/button-BS6l5JUw.js.map +0 -1
  529. package/dist/buttons-Co6GavvM.js +0 -674
  530. package/dist/buttons-Co6GavvM.js.map +0 -1
  531. package/dist/chart-DVfcwQu6.js +0 -149
  532. package/dist/chart-DVfcwQu6.js.map +0 -1
  533. package/dist/checkbox-BavDRjF7.js +0 -34
  534. package/dist/checkbox-BavDRjF7.js.map +0 -1
  535. package/dist/choice-inputs-CC7XqPQO.js +0 -619
  536. package/dist/choice-inputs-CC7XqPQO.js.map +0 -1
  537. package/dist/code-block-xHKbAJDj.js.map +0 -1
  538. package/dist/combobox-DEbdr-3u.js +0 -273
  539. package/dist/combobox-DEbdr-3u.js.map +0 -1
  540. package/dist/combobox-xv3yJbzl.js +0 -850
  541. package/dist/combobox-xv3yJbzl.js.map +0 -1
  542. package/dist/command-C0xe7u9B.js.map +0 -1
  543. package/dist/comments-DviPLnwy.js.map +0 -1
  544. package/dist/containers-6s-ucRQQ.js.map +0 -1
  545. package/dist/data-display-cWIRdeaf.js +0 -1129
  546. package/dist/data-display-cWIRdeaf.js.map +0 -1
  547. package/dist/date-BFNMnrS5.js +0 -140
  548. package/dist/date-BFNMnrS5.js.map +0 -1
  549. package/dist/date-picker-CA6ogMQB.js +0 -1521
  550. package/dist/date-picker-CA6ogMQB.js.map +0 -1
  551. package/dist/date-pickers-BPIKLdsD.js +0 -224
  552. package/dist/date-pickers-BPIKLdsD.js.map +0 -1
  553. package/dist/display-CFM5myut.js.map +0 -1
  554. package/dist/dropdown-menu-BlnyHr-9.js.map +0 -1
  555. package/dist/feedback-DWUkgEjR.js.map +0 -1
  556. package/dist/field-affordance-recipes-IjzPrCTw.js +0 -17
  557. package/dist/field-affordance-recipes-IjzPrCTw.js.map +0 -1
  558. package/dist/field-state-recipes-CBTRt9Bt.js.map +0 -1
  559. package/dist/filters-BhsUtsxW.js.map +0 -1
  560. package/dist/form-field-Bn7ZH1rA.js.map +0 -1
  561. package/dist/form-sizing-BWs70_a2.js +0 -100
  562. package/dist/form-sizing-BWs70_a2.js.map +0 -1
  563. package/dist/format-iamDSqs2.js +0 -110
  564. package/dist/format-iamDSqs2.js.map +0 -1
  565. package/dist/forms-B7pzS25o.js.map +0 -1
  566. package/dist/forms-numeric-BUBxELBv.js +0 -867
  567. package/dist/forms-numeric-BUBxELBv.js.map +0 -1
  568. package/dist/header-C59QZyxV.js.map +0 -1
  569. package/dist/http-CLTVJc5I.js.map +0 -1
  570. package/dist/input-WwYQZJzG.js +0 -202
  571. package/dist/input-WwYQZJzG.js.map +0 -1
  572. package/dist/input-ci9fIgFH.js +0 -20
  573. package/dist/input-ci9fIgFH.js.map +0 -1
  574. package/dist/item-pJ0GsOiJ.js +0 -257
  575. package/dist/item-pJ0GsOiJ.js.map +0 -1
  576. package/dist/media-gallery-DhDRgnVZ.js +0 -200
  577. package/dist/media-gallery-DhDRgnVZ.js.map +0 -1
  578. package/dist/message-COsdEvXT.js +0 -108
  579. package/dist/message-COsdEvXT.js.map +0 -1
  580. package/dist/navigation-BUIn2Qxx.js.map +0 -1
  581. package/dist/navigation-DBEu4POU.js +0 -267
  582. package/dist/navigation-DBEu4POU.js.map +0 -1
  583. package/dist/navigation-row-recipes-GVh11KiT.js.map +0 -1
  584. package/dist/number-BNT_BIzJ.js +0 -269
  585. package/dist/number-BNT_BIzJ.js.map +0 -1
  586. package/dist/overlay.recipes-BxW5FIfK.js +0 -6
  587. package/dist/overlay.recipes-BxW5FIfK.js.map +0 -1
  588. package/dist/overlays-B11wZka6.js +0 -982
  589. package/dist/overlays-B11wZka6.js.map +0 -1
  590. package/dist/page-BV6ioQg3.js +0 -202
  591. package/dist/page-BV6ioQg3.js.map +0 -1
  592. package/dist/page-header-DQRa0jug.js.map +0 -1
  593. package/dist/pagination-C29vvt3I.js.map +0 -1
  594. package/dist/popover-CoLDEg19.js.map +0 -1
  595. package/dist/popover.recipes-zgBhMlUu.js.map +0 -1
  596. package/dist/primitives-DKPOGVpj.js +0 -330
  597. package/dist/primitives-DKPOGVpj.js.map +0 -1
  598. package/dist/progress-BOe8l_FZ.js.map +0 -1
  599. package/dist/rich-text-editor-CoVrTiSv.js +0 -575
  600. package/dist/rich-text-editor-CoVrTiSv.js.map +0 -1
  601. package/dist/rich-text-editor.recipes-DxvOE0Lp.js.map +0 -1
  602. package/dist/scroll-area-BheMQ270.js.map +0 -1
  603. package/dist/select-B2mb-qN2.js +0 -108
  604. package/dist/select-B2mb-qN2.js.map +0 -1
  605. package/dist/separator-Gk_WXH-l.js.map +0 -1
  606. package/dist/settings-BnCyyPOJ.js.map +0 -1
  607. package/dist/sheet-B-q914Ad.js +0 -205
  608. package/dist/sheet-B-q914Ad.js.map +0 -1
  609. package/dist/sidebar-C_2p3Tfj.js +0 -501
  610. package/dist/sidebar-C_2p3Tfj.js.map +0 -1
  611. package/dist/sidebar-DPR7fmqN.js.map +0 -1
  612. package/dist/smart-card-CYLn46e6.js +0 -578
  613. package/dist/smart-card-CYLn46e6.js.map +0 -1
  614. package/dist/spinner-BY9HbUEh.js.map +0 -1
  615. package/dist/structure.recipes-Bqhf9oIh.js.map +0 -1
  616. package/dist/surface-recipes-CQfRr-VL.js +0 -27
  617. package/dist/surface-recipes-CQfRr-VL.js.map +0 -1
  618. package/dist/table-BS39xnlq.js +0 -1424
  619. package/dist/table-BS39xnlq.js.map +0 -1
  620. package/dist/table-DnlAJ-xR.js +0 -146
  621. package/dist/table-DnlAJ-xR.js.map +0 -1
  622. package/dist/tabs-B5cNMWiP.js +0 -187
  623. package/dist/tabs-B5cNMWiP.js.map +0 -1
  624. package/dist/text-inputs-Dh9XGyiS.js +0 -331
  625. package/dist/text-inputs-Dh9XGyiS.js.map +0 -1
  626. package/dist/text.styles-BwB7vAF2.js.map +0 -1
  627. package/dist/timelines-B9ICkQcV.js.map +0 -1
  628. package/dist/track-recipes-LLPNVwFg.js +0 -10
  629. package/dist/track-recipes-LLPNVwFg.js.map +0 -1
  630. package/dist/typography-Cv8MT-82.js +0 -96
  631. package/dist/typography-Cv8MT-82.js.map +0 -1
  632. package/dist/ui-provider-CftIB6TY.js.map +0 -1
  633. package/dist/upload-D8Za5x_c.js.map +0 -1
  634. package/dist/upload-queue-hIIYBLS7.js.map +0 -1
  635. package/dist/usage-card-DnmnJ58D.js.map +0 -1
  636. package/dist/utils-C2EKeIw3.js +0 -72
  637. package/dist/utils-C2EKeIw3.js.map +0 -1
  638. package/dist/value-inputs-DX2dbxjj.js +0 -824
  639. package/dist/value-inputs-DX2dbxjj.js.map +0 -1
  640. package/dist/workspace-C1PZmk8L.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upload-queue-BHZ_wBfd.js","names":["_Fragment","resolveComponentScale","useDensityConfig","cn","Text","Button","Stack","SecondaryValue","FileSize","Badge","useFileDropTarget","AttachmentFileIcon","AttachmentTitle","AttachmentDescription","AttachmentActions","AttachmentMedia","AttachmentContent","AttachmentProgress","Attachment","Fragment$1","FilePickerInput","forwardRef","props","handleClick","event","onClick","handleChange","files","onFiles","className","uploadDropTargetRecipes","defaultDropzoneStrings","SIZE_CHROME","assignInputRef","forwardedRef","node","DropzoneImpl","sizeProp","stringsProp","strings","useStrings","generatedId","useId","inputId","inputProps","onDrop","chrome","defaultScale","dropTargetProps","disabled","invalid","isDragging","icon","UploadCloud","children","Dropzone","defaultUploadProgressListStrings","STATUS_TONE","Clock","Check","AlertCircle","X","UploadProgressList","statusLabel","items","tone","item","Icon","pct","showProgress","onPreview","Eye","onDownload","Download","onCancel","onRetry","RefreshCw","onRemove","defaultUploadTrayStrings","countStatus","completed","failed","uploading","queued","UploadTray","handleDrop","useCallback","onAddFiles","hasItems","dropzone","onClearAll","listStrings"],"sources":["../src/components/base/upload/file-picker-input.tsx","../src/components/base/upload/upload.recipes.ts","../src/components/base/upload/dropzone.tsx","../src/components/base/upload-queue/upload-progress-list.tsx","../src/components/base/upload-queue/upload-tray.tsx"],"sourcesContent":["import {\n\tforwardRef,\n\ttype ChangeEvent,\n\ttype InputHTMLAttributes,\n\ttype MouseEvent,\n} from 'react';\n\nimport { cn } from '../../../lib/utils';\n\ntype DataAttributes = {\n\t[key: `data-${string}`]: string | number | boolean | undefined;\n};\n\nexport type FilePickerNativeInputProps = Omit<\n\tInputHTMLAttributes<HTMLInputElement>,\n\t'type' | 'value' | 'defaultValue' | 'onChange' | 'children'\n> & DataAttributes;\n\nexport type FilePickerInputProps = FilePickerNativeInputProps & {\n\t/** Return `false` when the native FileList must be cleared (for example, after rejection). */\n\tonFiles: (files: File[]) => boolean | void;\n};\n\n/** Shared native-input plumbing for FileUpload and Dropzone. Not a public export. */\nexport const FilePickerInput = forwardRef<HTMLInputElement, FilePickerInputProps>(\n\tfunction FilePickerInput(\n\t\t{ className, onFiles, onClick, ...props },\n\t\tref,\n\t) {\n\t\tconst handleClick = (event: MouseEvent<HTMLInputElement>) => {\n\t\t\tevent.stopPropagation();\n\t\t\tonClick?.(event);\n\t\t\tif (!event.defaultPrevented) {\n\t\t\t\t// Clearing before the picker opens makes choosing the same file again\n\t\t\t\t// observable without retaining an opaque native FileList as state.\n\t\t\t\tevent.currentTarget.value = '';\n\t\t\t}\n\t\t};\n\n\t\tconst handleChange = (event: ChangeEvent<HTMLInputElement>) => {\n\t\t\tconst files = event.currentTarget.files;\n\t\t\tif (files?.length && onFiles(Array.from(files)) === false) {\n\t\t\t\tevent.currentTarget.value = '';\n\t\t\t}\n\t\t};\n\n\t\treturn (\n\t\t\t<input\n\t\t\t\t{...props}\n\t\t\t\tref={ref}\n\t\t\t\ttype=\"file\"\n\t\t\t\tdata-slot=\"file-picker-input\"\n\t\t\t\tclassName={cn('file-picker-input--component sr-only', className)}\n\t\t\t\tonClick={handleClick}\n\t\t\t\tonChange={handleChange}\n\t\t\t/>\n\t\t);\n\t},\n);\n\nFilePickerInput.displayName = 'FilePickerInput';\n","/**\n * Private drop-target states shared by Dropzone, AvatarUpload and ImageUpload.\n * An empty target draws the dashed `--input` control boundary (3:1 on every\n * surface), so all three upload targets read as the same kind of control.\n * Hover, drag and invalid states replace only the boundary colour and fill.\n */\nexport const uploadDropTargetRecipes = {\n\tidle: 'border-input',\n\tinvalid: 'border-destructive',\n\tdragging: 'border-primary bg-primary/10',\n} as const;\n","/**\n * Dropzone — accessible drag-and-drop chrome with a native file-input fallback.\n * It owns no validation or file state; consumers receive local `File` values.\n */\nimport { forwardRef, useId, type ForwardedRef, type ReactNode } from 'react';\nimport { UploadCloud } from 'lucide-react';\n\nimport { Text } from '../../typography';\nimport { useStrings, type StringsProp } from '../../../lib/strings';\nimport { useDensityConfig, type ComponentScale } from '../../../lib/ui-provider';\nimport { resolveComponentScale } from '../../../lib/ui-provider/scale';\nimport { cn } from '../../../lib/utils';\n\nimport {\n\tFilePickerInput,\n\ttype FilePickerNativeInputProps,\n} from './file-picker-input';\nimport { useFileDropTarget } from './use-file-drop-target';\nimport { uploadDropTargetRecipes } from './upload.recipes';\n\nexport type DropzoneSize = ComponentScale;\n\nexport interface DropzoneStrings {\n\tinstruction: string;\n\thelper: string;\n\tdragOver: string;\n}\n\nexport const defaultDropzoneStrings: DropzoneStrings = {\n\tinstruction: 'Drag files here or click to browse',\n\thelper: '',\n\tdragOver: 'Release to select',\n};\n\nexport type DropzoneInputProps = Omit<\n\tFilePickerNativeInputProps,\n\t'accept' | 'disabled' | 'multiple'\n>;\n\nexport interface DropzoneProps {\n\tonDrop: (files: File[]) => void;\n\t/** Accepted MIME types or extensions. */\n\taccept?: string;\n\t/** Allows more than one file to be dropped. */\n\tmultiple?: boolean;\n\t/** Disables the control and blocks drops. */\n\tdisabled?: boolean;\n\t/** Applies the invalid styling. */\n\tinvalid?: boolean;\n\t/** Height preset for the drop target. */\n\tsize?: DropzoneSize;\n\t/** Glyph shown inside the drop target. */\n\ticon?: ReactNode;\n\tclassName?: string;\n\t/** Native form, ARIA, data, and event attributes forwarded to the file input. */\n\tinputProps?: DropzoneInputProps;\n\t/** Optional action rendered outside the input label, so nested controls remain valid. */\n\tchildren?: ReactNode;\n\t/** Overrides the prompt and constraint copy. */\n\tstrings?: StringsProp<DropzoneStrings>;\n}\n\nconst SIZE_CHROME: Record<\n\tDropzoneSize,\n\t{ padding: string; minHeight: string; iconSize: string }\n> = {\n\tsm: {\n\t\tpadding: 'p-surface-xs',\n\t\tminHeight: 'min-h-24',\n\t\ticonSize: 'size-icon',\n\t},\n\tmd: {\n\t\tpadding: 'p-surface',\n\t\tminHeight: 'min-h-32',\n\t\ticonSize: 'size-icon-lg',\n\t},\n\tlg: {\n\t\tpadding: 'p-surface-lg',\n\t\tminHeight: 'min-h-40',\n\t\ticonSize: 'size-icon-lg',\n\t},\n};\n\nfunction assignInputRef(\n\tnode: HTMLInputElement | null,\n\tforwardedRef: ForwardedRef<HTMLInputElement>,\n) {\n\tif (typeof forwardedRef === 'function') forwardedRef(node);\n\telse if (forwardedRef) forwardedRef.current = node;\n}\n\nfunction DropzoneImpl(\n\t{\n\t\tonDrop,\n\t\taccept,\n\t\tmultiple = false,\n\t\tdisabled = false,\n\t\tinvalid = false,\n\t\tsize: sizeProp,\n\t\ticon,\n\t\tclassName,\n\t\tinputProps,\n\t\tchildren,\n\t\tstrings: stringsProp,\n\t}: DropzoneProps,\n\tforwardedRef: ForwardedRef<HTMLInputElement>,\n) {\n\tconst { defaultScale } = useDensityConfig();\n\tconst strings = useStrings(defaultDropzoneStrings, stringsProp);\n\tconst generatedId = useId();\n\tconst inputId = inputProps?.id ?? `dropzone-${generatedId}`;\n\tconst { isDragging, dropTargetProps } = useFileDropTarget({\n\t\tdisabled,\n\t\tonFiles: onDrop,\n\t});\n\tconst resolvedSize = resolveComponentScale(sizeProp, defaultScale);\n\tconst chrome = SIZE_CHROME[resolvedSize];\n\n\treturn (\n\t\t<div\n\t\t\t{...dropTargetProps}\n\t\t\tdata-disabled={disabled || undefined}\n\t\t\tdata-invalid={invalid || undefined}\n\t\t\tdata-dragging={isDragging || undefined}\n\t\t\tclassName={cn(\n\t\t\t\t'dropzone--component relative flex flex-col items-center justify-center gap-space-md rounded-radius border border-dashed text-center transition-colors duration-150',\n\t\t\t\t'has-[[data-slot=file-picker-input]:focus-visible]:ring-2 has-[[data-slot=file-picker-input]:focus-visible]:ring-ring has-[[data-slot=file-picker-input]:focus-visible]:ring-offset-2',\n\t\t\t\tchrome.minHeight,\n\t\t\t\tchrome.padding,\n\t\t\t\tinvalid ? uploadDropTargetRecipes.invalid : uploadDropTargetRecipes.idle,\n\t\t\t\tinvalid\n\t\t\t\t\t? !disabled && 'hover:bg-destructive/5'\n\t\t\t\t\t: !disabled && 'hover:border-primary hover:bg-primary/5',\n\t\t\t\tdisabled && 'cursor-not-allowed opacity-50',\n\t\t\t\t!disabled && isDragging && (\n\t\t\t\t\tinvalid\n\t\t\t\t\t\t? 'border-destructive bg-destructive/5'\n\t\t\t\t\t\t: uploadDropTargetRecipes.dragging\n\t\t\t\t),\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t<FilePickerInput\n\t\t\t\t{...inputProps}\n\t\t\t\tref={(node) => assignInputRef(node, forwardedRef)}\n\t\t\t\tid={inputId}\n\t\t\t\taccept={accept}\n\t\t\t\tmultiple={multiple}\n\t\t\t\tdisabled={disabled}\n\t\t\t\taria-invalid={invalid || undefined}\n\t\t\t\tclassName={cn('dropzone--input', inputProps?.className)}\n\t\t\t\tonFiles={onDrop}\n\t\t\t/>\n\n\t\t\t<label\n\t\t\t\thtmlFor={disabled ? undefined : inputId}\n\t\t\t\taria-disabled={disabled || undefined}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'dropzone--trigger flex w-full flex-1 cursor-pointer flex-col items-center justify-center gap-space-md',\n\t\t\t\t\tdisabled && 'cursor-not-allowed',\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t{/* The glyph names the affordance; it needs no tinted tile around it. */}\n\t\t\t\t<span\n\t\t\t\t\tclassName=\"dropzone--icon inline-flex items-center justify-center text-muted-foreground\"\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t>\n\t\t\t\t\t{icon ?? <UploadCloud className={chrome.iconSize} />}\n\t\t\t\t</span>\n\n\t\t\t\t<span className=\"dropzone--copy grid gap-normal text-center [&_p]:text-center\">\n\t\t\t\t\t<Text\n\t\t\t\t\t\ttag=\"span\"\n\t\t\t\t\t\t\t\t\t\t\t\tweight=\"medium\"\n\t\t\t\t\t\tclassName=\"dropzone--instruction\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{isDragging ? strings.dragOver : strings.instruction}\n\t\t\t\t\t</Text>\n\t\t\t\t\t{!!strings.helper && (\n\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\ttag=\"span\"\n\t\t\t\t\t\t\tsize=\"xs\"\n\t\t\t\t\t\t\ttype=\"secondary\"\n\t\t\t\t\t\t\tclassName=\"dropzone--helper\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{strings.helper}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t)}\n\t\t\t\t</span>\n\t\t\t</label>\n\n\t\t\t{!!children && <div className=\"dropzone--action\">{children}</div>}\n\t\t</div>\n\t);\n}\n\nconst Dropzone = forwardRef<HTMLInputElement, DropzoneProps>(DropzoneImpl);\nDropzone.displayName = 'Dropzone';\n\nexport { Dropzone };\n","/**\n * UploadProgressList — render-only list of in-flight uploads. Each row shows\n * a status icon (queued / uploading / done / error / cancelled), filename,\n * size, a progress bar driven by `progress` (0–100), and an action button\n * that maps to the row's status (cancel while uploading, retry on error,\n * remove when done). Pair with FileUpload / MediaGallery / Dropzone — those\n * components emit raw `File` instances; this one displays the upload UI\n * once the consumer has wired them to its API.\n *\n * Strings overridable for i18n.\n */\nimport { AlertCircle, Check, Clock, RefreshCw, UploadCloud, X, Eye, Download } from 'lucide-react';\nimport { Button } from '../buttons';\nimport { Stack } from '../structure';\nimport { SecondaryValue } from '../../primitives';\nimport { Attachment, AttachmentMedia, AttachmentContent, AttachmentTitle, AttachmentDescription, AttachmentActions, AttachmentProgress, AttachmentFileIcon, type AttachmentKind } from '../attachment';\nimport { FileSize } from '../../primitives';\nimport { Text } from '../../typography';\nimport { useStrings, type StringsProp } from '../../../lib/strings';\nimport { cn } from '../../../lib/utils';\n\nexport type UploadStatus = 'queued' | 'uploading' | 'done' | 'error' | 'cancelled';\n\nexport interface UploadItem {\n\t/** Stable identity for this entry. */\n\tid: string;\n\t/** Displayed file name. */\n\tname: string;\n\t/** Pre-formatted size string (e.g. \"2.4 MB\"). */\n\tsize?: string;\n\t/** Numeric file size used when the formatted size is absent. */\n\tbytes?: number;\n\tkind?: AttachmentKind;\n\t/** Upload progress 0–100. Omit for an indeterminate transfer. Ignored when status is `done`/`error`/`cancelled`. */\n\tprogress?: number;\n\tstatus: UploadStatus;\n\t/** Error message rendered under the row when status is `error`. */\n\terror?: string;\n\t/**\n\t * Optional thumbnail URL, shown in place of the status icon.\n\t * The status remains visible beside the file name.\n\t */\n\tpreview?: string;\n}\n\nexport interface UploadProgressListStrings {\n\tqueued: string;\n\tuploading: string;\n\tdone: string;\n\terror: string;\n\tcancelled: string;\n\tcancel: string;\n\tretry: string;\n\tremove: string;\n\tpreview?: string;\n\tdownload?: string;\n}\n\nexport const defaultUploadProgressListStrings: UploadProgressListStrings = {\n\tqueued: 'Queued',\n\tuploading: 'Uploading',\n\tdone: 'Uploaded',\n\terror: 'Failed',\n\tcancelled: 'Cancelled',\n\tcancel: 'Cancel',\n\tretry: 'Retry',\n\tremove: 'Remove',\n\tpreview: 'Preview',\n\tdownload: 'Download',\n};\n\nexport interface UploadProgressListProps {\n\t/** Entries to render, in order. */\n\titems: UploadItem[];\n\t/** File preview action; consumers own the effect. */\n\tonPreview?: (id: string) => void;\n\t/** Download action for completed files. Receives the stable item identity. */\n\tonDownload?: (id: string) => void;\n\tonCancel?: (id: string) => void;\n\tonRetry?: (id: string) => void;\n\tonRemove?: (id: string) => void;\n\tclassName?: string;\n\t/** Overrides this surface's own copy. */\n\tstrings?: StringsProp<UploadProgressListStrings>;\n}\n\n// Colour is reserved for the state that needs attention. A finished upload shows\n// its neutral file-type icon, like a selected FileUpload row.\nconst STATUS_TONE: Record<UploadStatus, { icon: typeof Check; fg: string }> = {\n\tqueued: { icon: Clock, fg: 'text-muted-foreground' },\n\tuploading: { icon: UploadCloud, fg: 'text-primary-accent' },\n\tdone: { icon: Check, fg: 'text-muted-foreground' },\n\terror: { icon: AlertCircle, fg: 'text-destructive' },\n\tcancelled: { icon: X, fg: 'text-muted-foreground' },\n};\n\nexport function UploadProgressList({\n\titems,\n\tonPreview,\n\tonDownload,\n\tonCancel,\n\tonRetry,\n\tonRemove,\n\tclassName,\n\tstrings: stringsProp,\n}: UploadProgressListProps) {\n\tconst strings = useStrings(defaultUploadProgressListStrings, stringsProp);\n\tconst statusLabel: Record<UploadStatus, string> = {\n\t\tqueued: strings.queued,\n\t\tuploading: strings.uploading,\n\t\tdone: strings.done,\n\t\terror: strings.error,\n\t\tcancelled: strings.cancelled,\n\t};\n\n\tif (items.length === 0) return null;\n\n\treturn (\n\t\t<Stack render={<ul />} gap=\"sm\" className={cn('upload-progress-list--component m-0 p-0 list-none', className)}>\n\t\t\t{items.map((item) => {\n\t\t\t\tconst tone = STATUS_TONE[item.status];\n\t\t\t\tconst Icon = tone.icon;\n\t\t\t\tconst pct = item.progress === undefined ? null : Number.isFinite(item.progress) ? Math.max(0, Math.min(100, item.progress ?? 0)) : 0;\n\t\t\t\tconst showProgress = item.status === 'uploading' || item.status === 'queued';\n\t\t\t\treturn (\n\t\t\t\t\t<Attachment key={item.id} render={<li />} variant=\"outline\" className=\"upload-progress-list--item flex-nowrap bg-card text-card-foreground\">\n\t\t\t\t\t\t<AttachmentMedia variant={item.preview ? 'image' : 'icon'} className={cn('upload-progress-list--media self-center group-has-data-[slot=item-description]/item:self-center', tone.fg)}>\n\t\t\t\t\t\t\t{item.preview ? <img src={item.preview} alt=\"\" /> : item.status === 'done' ? <AttachmentFileIcon name={item.name} kind={item.kind} /> : <Icon aria-hidden=\"true\" className={cn('size-icon', item.status === 'uploading' && 'animate-pulse motion-reduce:animate-none')} />}\n\t\t\t\t\t\t</AttachmentMedia>\n\t\t\t\t\t\t{/* Same anatomy as Attachment: name, size line, status line, one gap. */}\n\t\t\t\t\t\t<AttachmentContent className=\"min-w-0 gap-space-xs\">\n\t\t\t\t\t\t\t<AttachmentTitle className=\"min-w-0 max-w-full\" title={item.name}><Text tag=\"span\" weight=\"medium\" className=\"truncate\">{item.name}</Text></AttachmentTitle>\n\t\t\t\t\t\t\t{(item.size !== undefined || item.bytes !== undefined) && (\n\t\t\t\t\t\t\t\t<AttachmentDescription clamp={1}>\n\t\t\t\t\t\t\t\t\t<SecondaryValue size=\"xs\" className=\"tabular-nums\">{item.size ?? <FileSize value={item.bytes} size=\"xs\" type=\"secondary\" />}</SecondaryValue>\n\t\t\t\t\t\t\t\t</AttachmentDescription>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t<AttachmentDescription clamp=\"none\"><Text tag=\"span\" size=\"xs\" type={item.status === 'error' ? 'error' : 'secondary'} role={item.status === 'error' ? 'alert' : undefined}>{`${statusLabel[item.status]}${item.status === 'error' && item.error ? ` — ${item.error}` : ''}`}</Text></AttachmentDescription>\n\t\t\t\t\t\t\t{showProgress && <AttachmentProgress value={item.status === 'queued' && pct === null ? 0 : pct} aria-label={item.name} size=\"sm\" tone={item.status === 'queued' ? 'neutral' : 'primary'} className=\"upload-progress-list--progress\" />}\n\t\t\t\t\t\t</AttachmentContent>\n\t\t\t\t\t\t<AttachmentActions className=\"shrink-0\">\n {!!onPreview && <Button type=\"button\" tone=\"secondary\" buttonStyle=\"ghost\" size=\"sm\" iconOnly aria-label={`${strings.preview ?? 'Preview'} ${item.name}`} onClick={() => onPreview(item.id)}><Eye aria-hidden=\"true\" className=\"size-icon-md\" /></Button>}\n {!!onDownload && item.status === 'done' && <Button type=\"button\" tone=\"secondary\" buttonStyle=\"ghost\" size=\"sm\" iconOnly aria-label={`${strings.download ?? 'Download'} ${item.name}`} onClick={() => onDownload(item.id)}><Download aria-hidden=\"true\" className=\"size-icon-md\" /></Button>}\n\n\t\t\t\t\t\t\t\t{(item.status === 'uploading' || item.status === 'queued') && !!onCancel && (\n\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\t\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t\t\t\ticonOnly\n\t\t\t\t\t\t\t\t\t\taria-label={`${strings.cancel} ${item.name}`}\n\t\t\t\t\t\t\t\t\t\tonClick={() => onCancel(item.id)}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<X className=\"size-icon-md\" />\n\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t{item.status === 'error' && !!onRetry && (\n\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\t\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t\t\t\ticonOnly\n\t\t\t\t\t\t\t\t\t\taria-label={`${strings.retry} ${item.name}`}\n\t\t\t\t\t\t\t\t\t\tonClick={() => onRetry(item.id)}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<RefreshCw className=\"size-icon-md\" />\n\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t{(item.status === 'done' || item.status === 'error' || item.status === 'cancelled' || (item.status === 'queued' && !onCancel)) && !!onRemove && (\n\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\t\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t\t\t\ticonOnly\n\t\t\t\t\t\t\t\t\t\taria-label={`${strings.remove} ${item.name}`}\n\t\t\t\t\t\t\t\t\t\tonClick={() => onRemove(item.id)}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<X className=\"size-icon-md\" />\n\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</AttachmentActions>\n\t\t\t\t\t</Attachment>\n\t\t\t\t);\n\t\t\t})}\n\t\t</Stack>\n\t);\n}\n\nUploadProgressList.displayName = 'UploadProgressList';\n","/**\n * UploadTray — the canonical \"drag-and-drop area + per-file progress\n * rows + summary toolbar\" surface. Composes:\n *\n * - `Dropzone` — drag/drop chrome + click-to-browse\n * - `UploadProgressList` — per-file row with status icon + progress\n * bar + cancel/retry/remove actions\n * - `Badge` — status counters in the toolbar\n * - `Button` — \"Clear all\" action\n *\n * Framework-agnostic. Every action is callback-driven — the library\n * doesn't perform the upload; it surfaces the UX. The consumer wires\n * the actual transfer (XHR, fetch, S3 multipart, …) and feeds back\n * `progress` / `status` updates by mutating the `items` array.\n *\n * Pair with `useFiles` (the existing client-side validation hook) at\n * the call site if you want pre-flight size/type rejection.\n */\nimport { forwardRef, useCallback } from 'react';\n\nimport { Badge } from '../badge';\nimport { Button } from '../buttons';\nimport { Stack } from '../structure';\nimport { Text } from '../../typography';\nimport { useStrings, type StringsProp } from '../../../lib/strings';\nimport { cn } from '../../../lib/utils';\n\nimport { Dropzone, type DropzoneProps } from '../upload/dropzone';\nimport { UploadProgressList, type UploadItem, type UploadProgressListStrings } from './upload-progress-list';\n\nexport interface UploadTrayStrings {\n\theading: string;\n\tcompletedLabel: string;\n\tfailedLabel: string;\n\tuploadingLabel: string;\n\tqueuedLabel: string;\n\tclearAll: string;\n}\n\nexport const defaultUploadTrayStrings: UploadTrayStrings = {\n\theading: 'Upload progress',\n\tcompletedLabel: 'Completed',\n\tfailedLabel: 'Failed',\n\tuploadingLabel: 'Uploading',\n\tqueuedLabel: 'Queued',\n\tclearAll: 'Clear all',\n};\n\nexport interface UploadTrayProps {\n\t/** Files currently in the tray (queued / uploading / done / error / cancelled). */\n\titems: UploadItem[];\n\t/**\n\t * Fires when the user drops or browses files. The library does NOT\n\t * write to the items array — the consumer turns these into queued\n\t * `UploadItem`s, kicks off the actual transfer, and updates progress.\n\t */\n\tonAddFiles: (files: File[]) => void;\n\t/** Preview callback forwarded with the item identity. */\n\tonPreview?: (id: string) => void;\n\t/** Download callback for completed files, forwarded with the item identity. */\n\tonDownload?: (id: string) => void;\n\t/** Per-row cancel handler (passed through to UploadProgressList). */\n\tonCancel?: (id: string) => void;\n\t/** Per-row retry handler. */\n\tonRetry?: (id: string) => void;\n\t/** Per-row remove handler. */\n\tonRemove?: (id: string) => void;\n\t/**\n\t * Clears the entire tray. When omitted, the \"Clear all\" button is\n\t * hidden — useful for surfaces where in-flight uploads can't be\n\t * cancelled in bulk.\n\t */\n\tonClearAll?: () => void;\n\t/** Forwarded to the inner `<Dropzone>`. Only the meaningful subset. */\n\tdropzone?: Pick<DropzoneProps, 'accept' | 'multiple' | 'size' | 'disabled' | 'invalid' | 'strings'>;\n\tclassName?: string;\n\t/** Overrides this surface's own copy. */\n\tstrings?: StringsProp<UploadTrayStrings>;\n\t/** Strings forwarded to the inner `<UploadProgressList>`. */\n\tlistStrings?: StringsProp<UploadProgressListStrings>;\n}\n\nfunction countStatus(items: UploadItem[]) {\n\tlet completed = 0;\n\tlet failed = 0;\n\tlet uploading = 0;\n\tlet queued = 0;\n\tfor (const item of items) {\n\t\tif (item.status === 'done') completed += 1;\n\t\telse if (item.status === 'error') failed += 1;\n\t\telse if (item.status === 'uploading') uploading += 1;\n\t\telse if (item.status === 'queued') queued += 1;\n\t}\n\treturn { completed, failed, uploading, queued };\n}\n\nexport const UploadTray = forwardRef<HTMLDivElement, UploadTrayProps>(function UploadTray(\n\t{\n\t\titems,\n\t\tonAddFiles,\n\t\tonPreview,\n\t\tonDownload,\n\t\tonCancel,\n\t\tonRetry,\n\t\tonRemove,\n\t\tonClearAll,\n\t\tdropzone,\n\t\tclassName,\n\t\tstrings: stringsProp,\n\t\tlistStrings,\n\t},\n\tref,\n) {\n\tconst strings = useStrings(defaultUploadTrayStrings, stringsProp);\n\tconst { completed, failed, uploading, queued } = countStatus(items);\n\n\tconst handleDrop = useCallback(\n\t\t(files: File[]) => {\n\t\t\tif (files.length > 0) onAddFiles(files);\n\t\t},\n\t\t[onAddFiles],\n\t);\n\n\tconst hasItems = items.length > 0;\n\n\treturn (\n\t\t<Stack ref={ref} gap=\"md\" className={cn('upload-tray--component', className)}>\n\t\t\t<Dropzone\n\t\t\t\tonDrop={handleDrop}\n\t\t\t\taccept={dropzone?.accept}\n\t\t\t\tmultiple={dropzone?.multiple}\n\t\t\t\tsize={dropzone?.size}\n\t\t\t\tdisabled={dropzone?.disabled}\n\t\t\t\tinvalid={dropzone?.invalid}\n\t\t\t\tstrings={dropzone?.strings}\n\t\t\t/>\n\n\t\t\t{!!hasItems && (\n\t\t\t\t<>\n\t\t\t\t\t<Stack direction=\"horizontal\" wrap align=\"center\" justify=\"between\" gap=\"md\">\n\t\t\t\t\t\t<Stack direction=\"horizontal\" wrap align=\"center\" gap=\"md\">\n\t\t\t\t\t\t\t<Text tag=\"span\" weight=\"semibold\">\n\t\t\t\t\t\t\t\t{strings.heading}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t{completed > 0 && (\n\t\t\t\t\t\t\t\t<Badge tone=\"success\">\n\t\t\t\t\t\t\t\t\t{strings.completedLabel}: {completed}\n\t\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{failed > 0 && (\n\t\t\t\t\t\t\t\t<Badge tone=\"destructive\">\n\t\t\t\t\t\t\t\t\t{strings.failedLabel}: {failed}\n\t\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{uploading > 0 && (\n\t\t\t\t\t\t\t\t<Badge tone=\"info\">\n\t\t\t\t\t\t\t\t\t{strings.uploadingLabel}: {uploading}\n\t\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{queued > 0 && (\n\t\t\t\t\t\t\t\t<Badge tone=\"secondary\">\n\t\t\t\t\t\t\t\t\t{strings.queuedLabel}: {queued}\n\t\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t{!!onClearAll && (\n\t\t\t\t\t\t\t<Button type=\"button\" tone=\"secondary\" buttonStyle=\"ghost\" onClick={onClearAll}>\n\t\t\t\t\t\t\t\t{strings.clearAll}\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</Stack>\n\n\t\t\t\t\t<UploadProgressList\n\t\t\t\t\t\titems={items}\n\t\t\t\t\t\tonPreview={onPreview}\n\t\t\t\t\t\tonDownload={onDownload}\n\t\t\t\t\t\tonCancel={onCancel}\n\t\t\t\t\t\tonRetry={onRetry}\n\t\t\t\t\t\tonRemove={onRemove}\n\t\t\t\t\t\tstrings={listStrings}\n\t\t\t\t\t/>\n\t\t\t\t</>\n\t\t\t)}\n\t\t</Stack>\n\t);\n});\n\nUploadTray.displayName = 'UploadTray';\n"],"mappings":"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"}
@@ -1,14 +1,14 @@
1
1
  "use client";
2
- import { c as e } from "./ui-provider-CftIB6TY.js";
2
+ import { c as e } from "./ui-provider-D2_TeLqw.js";
3
3
  import { useStrings as t } from "./lib/strings.js";
4
- import { t as n } from "./utils-C2EKeIw3.js";
5
- import { n as r } from "./buttons-Co6GavvM.js";
6
- import { a as i, r as a } from "./typography-Cv8MT-82.js";
7
- import { r as o, t as s } from "./structure-MvKVq-oL.js";
8
- import { t as c } from "./smart-card-CYLn46e6.js";
9
- import { i as l, t as u } from "./progress-BOe8l_FZ.js";
10
- import { n as d, t as f } from "./number-BNT_BIzJ.js";
11
- import { i as p, n as m, r as h, t as g } from "./tabs-B5cNMWiP.js";
4
+ import { t as n } from "./utils-Cospvlj1.js";
5
+ import { a as r, s as i } from "./typography-CAr3dQhX.js";
6
+ import { t as a } from "./button-BS3KDg00.js";
7
+ import { r as o, t as s } from "./structure-hzCW-XsV.js";
8
+ import { t as c } from "./smart-card-Bek-TwUp.js";
9
+ import { i as l, t as u } from "./progress-Br9WTFya.js";
10
+ import { n as d, t as f } from "./number-CKRBYmZK.js";
11
+ import { i as p, n as m, r as h, t as g } from "./tabs-Dk8E_knt.js";
12
12
  import { Fragment as _, jsx as v, jsxs as y } from "react/jsx-runtime";
13
13
  //#region src/components/blocks/analytics/usage-card/usage-card.data.ts
14
14
  function b(e) {
@@ -163,7 +163,7 @@ function O({ quota: t, label: r, strings: i, categories: a }) {
163
163
  });
164
164
  }
165
165
  function k({ days: e, unit: t, strings: n }) {
166
- let r = C(e);
166
+ let a = C(e);
167
167
  return /* @__PURE__ */ y(s, {
168
168
  gap: "sm",
169
169
  className: "usage-card--daily",
@@ -173,7 +173,7 @@ function k({ days: e, unit: t, strings: n }) {
173
173
  justify: "between",
174
174
  align: "baseline",
175
175
  gap: "sm",
176
- children: [/* @__PURE__ */ v(a, { children: n.daily }), /* @__PURE__ */ y(s, {
176
+ children: [/* @__PURE__ */ v(r, { children: n.daily }), /* @__PURE__ */ y(s, {
177
177
  direction: "horizontal",
178
178
  gap: "xs",
179
179
  align: "baseline",
@@ -185,7 +185,7 @@ function k({ days: e, unit: t, strings: n }) {
185
185
  children: n.average
186
186
  }),
187
187
  /* @__PURE__ */ v(f, {
188
- value: r.average,
188
+ value: a.average,
189
189
  emptyLabel: n.unavailable,
190
190
  options: { maximumFractionDigits: 0 },
191
191
  weight: "medium"
@@ -204,11 +204,11 @@ function k({ days: e, unit: t, strings: n }) {
204
204
  preserveAspectRatio: "none",
205
205
  "aria-hidden": "true",
206
206
  className: "usage-card--daily-chart h-control-lg w-full overflow-visible",
207
- children: r.values.map((e, t) => e === null ? null : /* @__PURE__ */ v("rect", {
207
+ children: a.values.map((e, t) => e === null ? null : /* @__PURE__ */ v("rect", {
208
208
  x: t * 10 + 1,
209
- y: 40 - e / r.maximum * 40,
209
+ y: 40 - e / a.maximum * 40,
210
210
  width: 8,
211
- height: e / r.maximum * 40,
211
+ height: e / a.maximum * 40,
212
212
  className: "fill-chart-1"
213
213
  }, t))
214
214
  }), /* @__PURE__ */ y(s, {
@@ -244,7 +244,7 @@ function k({ days: e, unit: t, strings: n }) {
244
244
  });
245
245
  }
246
246
  function A({ data: e, strings: t }) {
247
- let r = S(e.used, e.limit), c = e.categories?.reduce((e, t) => e + (b(t.value) ?? 0), 0) ?? 0, l = r.used !== null && x(c, r.used, e.categories?.length);
247
+ let a = S(e.used, e.limit), c = e.categories?.reduce((e, t) => e + (b(t.value) ?? 0), 0) ?? 0, l = a.used !== null && x(c, a.used, e.categories?.length);
248
248
  return /* @__PURE__ */ y(s, {
249
249
  gap: "lg",
250
250
  children: [
@@ -261,8 +261,8 @@ function A({ data: e, strings: t }) {
261
261
  quota: e,
262
262
  strings: t,
263
263
  prominent: !0
264
- }), r.percent !== null && /* @__PURE__ */ v(d, {
265
- value: r.percent,
264
+ }), a.percent !== null && /* @__PURE__ */ v(d, {
265
+ value: a.percent,
266
266
  scaled: !0,
267
267
  size: "lg",
268
268
  weight: "medium",
@@ -280,9 +280,9 @@ function A({ data: e, strings: t }) {
280
280
  render: /* @__PURE__ */ v("ul", { "aria-label": t.breakdown }),
281
281
  columns: 3,
282
282
  gap: "sm",
283
- className: "usage-card--categories grid-cols-[minmax(0,1fr)_auto_minmax(5ch,max-content)]",
284
- children: e.categories.map((e, a) => {
285
- let o = b(e.value), c = r.used === null || o === null || l ? null : r.used === 0 ? 0 : o / r.used;
283
+ className: "m-0 list-none p-0 font-sans usage-card--categories grid-cols-[minmax(0,1fr)_auto_minmax(5ch,max-content)]",
284
+ children: e.categories.map((e, r) => {
285
+ let o = b(e.value), c = a.used === null || o === null || l ? null : a.used === 0 ? 0 : o / a.used;
286
286
  return /* @__PURE__ */ y("li", {
287
287
  className: "usage-card--category col-span-full grid grid-cols-subgrid items-baseline",
288
288
  children: [
@@ -294,7 +294,7 @@ function A({ data: e, strings: t }) {
294
294
  className: "min-w-0",
295
295
  children: [/* @__PURE__ */ v("span", {
296
296
  "aria-hidden": "true",
297
- className: n("size-icon-sm shrink-0 rounded-full", E(e, a))
297
+ className: n("size-icon-sm shrink-0 rounded-full", E(e, r))
298
298
  }), /* @__PURE__ */ v(i, {
299
299
  tag: "span",
300
300
  className: "break-words",
@@ -332,7 +332,7 @@ function A({ data: e, strings: t }) {
332
332
  }),
333
333
  !!e.resources?.length && /* @__PURE__ */ y(s, {
334
334
  gap: "sm",
335
- children: [/* @__PURE__ */ v(a, { children: t.resources }), /* @__PURE__ */ v(o, {
335
+ children: [/* @__PURE__ */ v(r, { children: t.resources }), /* @__PURE__ */ v(o, {
336
336
  columns: 1,
337
337
  gap: "md",
338
338
  className: "usage-card--resources @sm/card:grid-cols-3",
@@ -363,18 +363,18 @@ function A({ data: e, strings: t }) {
363
363
  ]
364
364
  });
365
365
  }
366
- function j({ data: e, status: a = "ready", periods: o, period: l, onPeriodChange: u, onRetry: d, loadingSlot: _, errorSlot: b, emptySlot: x, footerAction: C, strings: T, ...E }) {
367
- let D = t(w, T), O = a === "ready" && !!e, k = O ? S(e.used, e.limit) : null, j = l ?? o?.[0]?.value ?? "", M = !!o?.length, N;
368
- N = a === "loading" ? /* @__PURE__ */ v("div", {
366
+ function j({ data: e, status: r = "ready", periods: o, period: l, onPeriodChange: u, onRetry: d, loadingSlot: _, errorSlot: b, emptySlot: x, footerAction: C, strings: T, ...E }) {
367
+ let D = t(w, T), O = r === "ready" && !!e, k = O ? S(e.used, e.limit) : null, j = l ?? o?.[0]?.value ?? "", M = !!o?.length, N;
368
+ N = r === "loading" ? /* @__PURE__ */ v("div", {
369
369
  role: "status",
370
370
  children: _ ?? /* @__PURE__ */ v(i, {
371
371
  type: "secondary",
372
372
  children: D.loading
373
373
  })
374
- }) : a === "error" ? /* @__PURE__ */ y(s, {
374
+ }) : r === "error" ? /* @__PURE__ */ y(s, {
375
375
  role: "alert",
376
376
  gap: "sm",
377
- children: [b ?? /* @__PURE__ */ v(i, { children: D.error }), d && /* @__PURE__ */ v(r, {
377
+ children: [b ?? /* @__PURE__ */ v(i, { children: D.error }), d && /* @__PURE__ */ v(a, {
378
378
  tone: "secondary",
379
379
  onClick: d,
380
380
  children: D.retry
@@ -418,16 +418,15 @@ function j({ data: e, status: a = "ready", periods: o, period: l, onPeriodChange
418
418
  className: n("usage-card--component min-w-0", E.className),
419
419
  "data-component": "usage-card",
420
420
  "data-slot": "usage-card",
421
- "aria-busy": a === "loading" || void 0,
422
- headerClassName: M ? "@sm/card:flex-col @lg/card:flex-row" : void 0,
421
+ "aria-busy": r === "loading" || void 0,
423
422
  headerAction: M ? /* @__PURE__ */ y(s, {
424
423
  direction: "horizontal",
425
424
  gap: "sm",
426
425
  align: "center",
427
426
  className: "usage-card--header-actions max-w-full",
428
427
  children: [/* @__PURE__ */ v(h, {
428
+ scrollable: !0,
429
429
  "aria-label": D.periods,
430
- className: "max-w-full flex-wrap",
431
430
  children: o.map((e) => /* @__PURE__ */ v(p, {
432
431
  value: e.value,
433
432
  disabled: e.disabled || !u,
@@ -436,7 +435,6 @@ function j({ data: e, status: a = "ready", periods: o, period: l, onPeriodChange
436
435
  }), E.headerAction]
437
436
  }) : E.headerAction,
438
437
  footerSlot: P,
439
- footerDivider: !!P,
440
438
  children: M ? /* @__PURE__ */ v(m, {
441
439
  value: j,
442
440
  children: N
@@ -455,4 +453,4 @@ j.displayName = "UsageCard";
455
453
  //#endregion
456
454
  export { w as n, j as t };
457
455
 
458
- //# sourceMappingURL=usage-card-DnmnJ58D.js.map
456
+ //# sourceMappingURL=usage-card-U0YBLTNT.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usage-card-U0YBLTNT.js","names":["NumberValue","_Fragment","useFormattingConfig","cn","DisplayLabel","Text","Button","Grid","Stack","Card","ProgressTrack","Progress","Percent","Number$1","TabsTrigger","TabsContent","TabsList","Tabs","validUsage","value","usageExceeds","actual","expected","tolerance","terms","quotaSummary","used","usedValue","limit","limitValue","kind","ratio","dailySummary","values","days","day","complete","maximum","max","sum","defaultUsageCardStrings","chartColors","categoryColor","category","index","QuotaValue","summary","quota","strings","prominent","Fragment","QuotaProgress","formatting","categories","total","segmented","denominator","unclassified","format","label","DailyUsage","unit","UsageBody","data","categoryTotal","inconsistent","percent","resource","UsageCard","stringsProp","cardProps","useStrings","ready","status","selectedPeriod","period","periods","hasPeriods","body","loadingSlot","errorSlot","onRetry","emptySlot","footer","footerAction","card","item","onPeriodChange"],"sources":["../src/components/blocks/analytics/usage-card/usage-card.data.ts","../src/components/blocks/analytics/usage-card/usage-card.strings.ts","../src/components/blocks/analytics/usage-card/usage-card.tsx"],"sourcesContent":["import type { UsageCardDay } from './types';\n\nexport function validUsage(value: number | null | undefined): number | null {\n\treturn typeof value === 'number' && Number.isFinite(value) && value >= 0 ? value : null;\n}\n\n/** Account only for rounding accumulated by positive finite category additions. */\nexport function usageExceeds(actual: number, expected: number, terms = 1): boolean {\n\tif (validUsage(actual) === null || validUsage(expected) === null) return true;\n\tconst magnitude = Math.max(actual, expected);\n\tconst tolerance = magnitude * Number.EPSILON * Math.max(1, terms);\n\treturn actual - expected > tolerance;\n}\n\n/** Retain actual numbers; cap only geometry. Zero quota has no finite percentage. */\nexport function quotaSummary(usedValue: number | null, limitValue: number | null | undefined) {\n\tconst used = validUsage(usedValue);\n\tconst limit = validUsage(limitValue);\n\tconst kind = used === null ? 'unavailable' : limitValue === null ? 'unlimited' : limit === null ? 'unavailable' : 'limited';\n\tconst ratio = used !== null && limit !== null && limit > 0 ? used / limit * 100 : used === 0 && limit === 0 ? 0 : null;\n\tconst percent = ratio !== null && Number.isFinite(ratio) ? ratio : null;\n\treturn {\n\t\tkind, used, limit, percent,\n\t\tprogress: kind === 'limited' ? limit === 0 ? used === 0 ? 0 : 100 : Math.min(100, ratio ?? 0) : null,\n\t\tremaining: kind === 'limited' ? Math.max(0, (limit ?? 0) - (used ?? 0)) : null,\n\t\texcess: kind === 'limited' ? Math.max(0, (used ?? 0) - (limit ?? 0)) : null,\n\t} as const;\n}\n\nexport function dailySummary(days: readonly UsageCardDay[]) {\n\tconst values = days.map(day => validUsage(day.value));\n\tconst complete = values.length > 0 && values.every(value => value !== null);\n\tconst maximum = values.reduce<number>((max, value) => Math.max(max, value ?? 0), 0);\n\treturn {\n\t\tvalues,\n\t\t// Dividing before summing avoids overflow for finite, very large values.\n\t\taverage: complete ? values.reduce<number>((sum, value) => sum + (value ?? 0) / values.length, 0) : null,\n\t\tmaximum: maximum > 0 ? maximum : 1,\n\t};\n}\n","export interface UsageCardStrings {\n\ttitle: string;\n\tusage: string;\n\tused: string;\n\tof: string;\n\tunlimited: string;\n\tunavailable: string;\n\tremaining: string;\n\toverLimit: string;\n\tbreakdown: string;\n\tinconsistentBreakdown: string;\n\tdaily: string;\n\taverage: string;\n\tperDay: string;\n\tresources: string;\n\tperiods: string;\n\tloading: string;\n\terror: string;\n\tempty: string;\n\tretry: string;\n}\nexport const defaultUsageCardStrings: UsageCardStrings = {\n\ttitle: 'Usage', usage: 'Usage', used: 'used', of: 'of', unlimited: 'Unlimited',\n\tunavailable: 'Unavailable', remaining: 'remaining', overLimit: 'over limit',\n\tbreakdown: 'Usage breakdown', inconsistentBreakdown: 'Category totals exceed reported usage.',\n\tdaily: 'Daily usage', average: 'Average', perDay: 'per day', resources: 'Resources',\n\tperiods: 'Usage period', loading: 'Loading usage', error: 'Unable to load usage',\n\tempty: 'No usage data', retry: 'Retry',\n};\n","import type { ReactNode } from 'react';\n\nimport { Button } from '../../../base/buttons';\nimport { Card } from '../../../base/cards';\nimport { Progress, ProgressTrack } from '../../../base/feedback';\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from '../../../base/navigation';\nimport { Grid, Stack } from '../../../base/structure';\nimport { Number as NumberValue, Percent } from '../../../primitives';\nimport { DisplayLabel, Text } from '../../../typography';\nimport { useStrings } from '../../../../lib/strings';\nimport { useFormattingConfig } from '../../../../lib/ui-provider';\nimport { cn } from '../../../../lib/utils';\n\nimport { dailySummary, quotaSummary, usageExceeds, validUsage } from './usage-card.data';\nimport { defaultUsageCardStrings, type UsageCardStrings } from './usage-card.strings';\nimport type { UsageCardCategory, UsageCardData, UsageCardDay, UsageCardProps, UsageCardQuota } from './types';\n\nconst chartColors = ['bg-chart-1', 'bg-chart-2', 'bg-chart-3', 'bg-chart-4', 'bg-chart-5'] as const;\nfunction categoryColor(category: UsageCardCategory, index: number) {\n\treturn chartColors[(category.color === undefined ? index : category.color - 1) % chartColors.length];\n}\n\nfunction QuotaValue({ quota, strings, prominent = false }: { quota: UsageCardQuota; strings: UsageCardStrings; prominent?: boolean }) {\n\tconst summary = quotaSummary(quota.used, quota.limit);\n\treturn <Stack gap=\"dense\" className=\"usage-card--quota\">\n\t\t<Stack direction=\"horizontal\" gap=\"xs\" align=\"baseline\">\n\t\t\t<NumberValue value={summary.used} emptyLabel={strings.unavailable} size={prominent ? 'xl' : undefined} weight={prominent ? 'semibold' : 'medium'} align=\"left\" />\n\t\t\t{!prominent && summary.kind === 'limited' && <>\n\t\t\t\t<Text tag=\"span\" type=\"secondary\">{strings.of}</Text>\n\t\t\t\t<NumberValue value={summary.limit} type=\"secondary\" align=\"left\" />\n\t\t\t</>}\n\t\t\t{quota.unit && <Text tag=\"span\" type=\"secondary\">{quota.unit}</Text>}\n\t\t\t{prominent && summary.used !== null && <Text tag=\"span\" size=\"xs\" type=\"secondary\">{strings.used}</Text>}\n\t\t</Stack>\n\t\t{prominent && summary.kind === 'limited' && <Stack direction=\"horizontal\" gap=\"xs\" align=\"baseline\">\n\t\t\t<Text tag=\"span\" size=\"xs\" type=\"secondary\">{strings.of}</Text>\n\t\t\t<NumberValue value={summary.limit} size=\"xs\" type=\"secondary\" align=\"left\" />\n\t\t</Stack>}\n\t\t{summary.kind === 'unlimited' && <Text tag=\"span\" size=\"xs\" type=\"secondary\">{strings.unlimited}</Text>}\n\t\t{summary.kind === 'unavailable' && summary.used !== null && <Text tag=\"span\" size=\"xs\" type=\"secondary\">{strings.unavailable}</Text>}\n\t</Stack>;\n}\n\nfunction QuotaProgress({ quota, label, strings, categories }: { quota: UsageCardQuota; label: string; strings: UsageCardStrings; categories?: readonly UsageCardCategory[] }) {\n\tconst summary = quotaSummary(quota.used, quota.limit);\n\tconst formatting = useFormattingConfig();\n\tif (summary.kind !== 'limited') return null;\n\tconst sum = categories?.reduce((total, category) => total + (validUsage(category.value) ?? 0), 0) ?? 0;\n\tconst segmented = !!categories?.length && categories.every(category => validUsage(category.value) !== null) && !usageExceeds(sum, summary.used ?? 0, categories.length);\n\tconst maximum = Math.max(summary.limit ?? 0, summary.used ?? 0);\n\tconst denominator = maximum > 0 ? maximum : 1;\n\tconst unclassified = usageExceeds(summary.used ?? 0, sum, categories?.length) ? (summary.used ?? 0) - sum : 0;\n\tconst format = new Intl.NumberFormat(formatting.locale);\n\treturn <Progress\n\t\tvalue={summary.progress ?? 0}\n\t\taria-label={label}\n\t\tgetAriaValueText={() => `${format.format(summary.used ?? 0)} ${strings.of} ${format.format(summary.limit ?? 0)} ${quota.unit ?? ''} ${strings.used}`}\n\t\ttone={summary.excess ? 'destructive' : 'primary'}\n\t\ttrackSlot={segmented ? <ProgressTrack>\n\t\t\t{categories?.map((category, index) => <span key={category.id} aria-hidden=\"true\" className={cn('h-full shrink-0', categoryColor(category, index))} style={{ width: `${(category.value ?? 0) / denominator * 100}%` }} />)}\n\t\t\t{unclassified > 0 && <span aria-hidden=\"true\" className=\"h-full shrink-0 bg-primary\" style={{ width: `${unclassified / denominator * 100}%` }} />}\n\t\t</ProgressTrack> : undefined}\n\t/>;\n}\n\nfunction DailyUsage({ days, unit, strings }: { days: readonly UsageCardDay[]; unit?: string; strings: UsageCardStrings }) {\n\tconst summary = dailySummary(days);\n\treturn <Stack gap=\"sm\" className=\"usage-card--daily\">\n\t\t<Stack direction=\"horizontal\" justify=\"between\" align=\"baseline\" gap=\"sm\">\n\t\t\t<DisplayLabel>{strings.daily}</DisplayLabel>\n\t\t\t<Stack direction=\"horizontal\" gap=\"xs\" align=\"baseline\">\n\t\t\t\t<Text tag=\"span\" size=\"xs\" type=\"secondary\">{strings.average}</Text>\n\t\t\t\t<NumberValue value={summary.average} emptyLabel={strings.unavailable} options={{ maximumFractionDigits: 0 }} weight=\"medium\" />\n\t\t\t\t<Text tag=\"span\" size=\"xs\" type=\"secondary\">{strings.perDay}</Text>\n\t\t\t</Stack>\n\t\t</Stack>\n\t\t{days.length > 0 && <>\n\t\t\t<svg viewBox={`0 0 ${days.length * 10} 40`} preserveAspectRatio=\"none\" aria-hidden=\"true\" className=\"usage-card--daily-chart h-control-lg w-full overflow-visible\">\n\t\t\t\t{summary.values.map((value, index) => value === null ? null : <rect key={index} x={index * 10 + 1} y={40 - value / summary.maximum * 40} width={8} height={value / summary.maximum * 40} className=\"fill-chart-1\" />)}\n\t\t\t</svg>\n\t\t\t<Stack direction=\"horizontal\" justify=\"between\" gap=\"sm\" aria-hidden=\"true\">\n\t\t\t\t<Text size=\"xs\" type=\"secondary\">{days[0]?.label}</Text>\n\t\t\t\t{days.length > 1 && <Text size=\"xs\" type=\"secondary\">{days[days.length - 1]?.label}</Text>}\n\t\t\t</Stack>\n\t\t</>}\n\t\t<ol className=\"sr-only\" aria-label={strings.daily}>\n\t\t\t{days.map((day, index) => <li key={index}>{day.label}: <NumberValue value={validUsage(day.value)} emptyLabel={strings.unavailable} /> {unit}</li>)}\n\t\t</ol>\n\t</Stack>;\n}\n\nfunction UsageBody({ data, strings }: { data: UsageCardData; strings: UsageCardStrings }) {\n\tconst summary = quotaSummary(data.used, data.limit);\n\tconst categoryTotal = data.categories?.reduce((total, category) => total + (validUsage(category.value) ?? 0), 0) ?? 0;\n\tconst inconsistent = summary.used !== null && usageExceeds(categoryTotal, summary.used, data.categories?.length);\n\treturn <Stack gap=\"lg\">\n\t\t<Stack gap=\"md\" className=\"usage-card--summary\">\n\t\t\t<Stack direction=\"horizontal\" justify=\"between\" align=\"start\" gap=\"sm\">\n\t\t\t\t<QuotaValue quota={data} strings={strings} prominent />\n\t\t\t\t{summary.percent !== null && <Percent value={summary.percent} scaled size=\"lg\" weight=\"medium\" type=\"secondary\" options={{ maximumFractionDigits: 0 }} />}\n\t\t\t</Stack>\n\t\t\t<QuotaProgress quota={data} label={strings.usage} strings={strings} categories={data.categories} />\n\t\t\t{!!data.categories?.length && <Grid render={<ul aria-label={strings.breakdown} />} columns={3} gap=\"sm\" className=\"m-0 list-none p-0 font-sans usage-card--categories grid-cols-[minmax(0,1fr)_auto_minmax(5ch,max-content)]\">\n\t\t\t\t{data.categories.map((category, index) => {\n\t\t\t\t\tconst value = validUsage(category.value);\n\t\t\t\t\tconst percent = summary.used === null || value === null || inconsistent ? null : summary.used === 0 ? 0 : value / summary.used;\n\t\t\t\t\treturn <li key={category.id} className=\"usage-card--category col-span-full grid grid-cols-subgrid items-baseline\">\n\t\t\t\t\t\t<Stack direction=\"horizontal\" gap=\"sm\" align=\"center\" wrap={false} className=\"min-w-0\">\n\t\t\t\t\t\t\t<span aria-hidden=\"true\" className={cn('size-icon-sm shrink-0 rounded-full', categoryColor(category, index))} />\n\t\t\t\t\t\t\t<Text tag=\"span\" className=\"break-words\">{category.label}</Text>\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t<NumberValue value={value} emptyLabel={strings.unavailable} weight=\"medium\" className=\"usage-card--category-value\" />\n\t\t\t\t\t\t<Percent value={percent} emptyLabel={strings.unavailable} type=\"secondary\" options={{ maximumFractionDigits: 0 }} className=\"usage-card--category-share\" />\n\t\t\t\t\t</li>;\n\t\t\t\t})}\n\t\t\t</Grid>}\n\t\t\t{inconsistent && <Text size=\"xs\" type=\"secondary\">{strings.inconsistentBreakdown}</Text>}\n\t\t</Stack>\n\t\t{data.daily && <DailyUsage days={data.daily} unit={data.unit} strings={strings} />}\n\t\t{!!data.resources?.length && <Stack gap=\"sm\">\n\t\t\t<DisplayLabel>{strings.resources}</DisplayLabel>\n\t\t\t<Grid columns={1} gap=\"md\" className=\"usage-card--resources @sm/card:grid-cols-3\">\n\t\t\t\t{data.resources.map(resource => <Stack key={resource.id} gap=\"sm\" className=\"usage-card--resource min-w-0\" role=\"group\" aria-label={resource.label}>\n\t\t\t\t\t<Text tag=\"span\" weight=\"medium\">{resource.label}</Text>\n\t\t\t\t\t<QuotaValue quota={resource} strings={strings} />\n\t\t\t\t\t<QuotaProgress quota={resource} label={resource.label} strings={strings} />\n\t\t\t\t</Stack>)}\n\t\t\t</Grid>\n\t\t</Stack>}\n\t</Stack>;\n}\n\n/** App-owned usage data and period callbacks in the canonical Card composition. */\nexport function UsageCard({ data, status = 'ready', periods, period, onPeriodChange, onRetry, loadingSlot, errorSlot, emptySlot, footerAction, strings: stringsProp, ...cardProps }: UsageCardProps) {\n\tconst strings = useStrings(defaultUsageCardStrings, stringsProp);\n\tconst ready = status === 'ready' && !!data;\n\tconst summary = ready ? quotaSummary(data.used, data.limit) : null;\n\tconst selectedPeriod = period ?? periods?.[0]?.value ?? '';\n\tconst hasPeriods = !!periods?.length;\n\tlet body: ReactNode;\n\tif (status === 'loading') body = <div role=\"status\">{loadingSlot ?? <Text type=\"secondary\">{strings.loading}</Text>}</div>;\n\telse if (status === 'error') body = <Stack role=\"alert\" gap=\"sm\">{errorSlot ?? <Text>{strings.error}</Text>}{onRetry && <Button tone=\"secondary\" onClick={onRetry}>{strings.retry}</Button>}</Stack>;\n\telse if (!ready) body = <div>{emptySlot ?? <Text type=\"secondary\">{strings.empty}</Text>}</div>;\n\telse body = <UsageBody data={data} strings={strings} />;\n\tconst footer = (summary?.kind === 'limited' || footerAction) && <Stack direction=\"horizontal\" justify=\"between\" align=\"center\" gap=\"md\">\n\t\t{summary?.kind === 'limited' && <Stack direction=\"horizontal\" gap=\"xs\" align=\"baseline\">\n\t\t\t<NumberValue value={summary.excess ? summary.excess : summary.remaining} weight=\"medium\" />\n\t\t\t{data?.unit && <Text tag=\"span\" type=\"secondary\">{data.unit}</Text>}\n\t\t\t<Text tag=\"span\" type=\"secondary\">{summary.excess ? strings.overLimit : strings.remaining}</Text>\n\t\t</Stack>}\n\t\t{footerAction}\n\t</Stack>;\n\tconst card = <Card\n\t\t{...cardProps}\n\t\ttitle={cardProps.title ?? strings.title}\n\t\tclassName={cn('usage-card--component min-w-0', cardProps.className)}\n\t\tdata-component=\"usage-card\"\n\t\tdata-slot=\"usage-card\"\n\t\taria-busy={status === 'loading' || undefined}\n\t\theaderAction={hasPeriods ? <Stack direction=\"horizontal\" gap=\"sm\" align=\"center\" className=\"usage-card--header-actions max-w-full\">\n\t\t\t<TabsList scrollable aria-label={strings.periods}>\n\t\t\t\t{periods.map(item => <TabsTrigger key={item.value} value={item.value} disabled={item.disabled || !onPeriodChange}>{item.label}</TabsTrigger>)}\n\t\t\t</TabsList>\n\t\t\t{cardProps.headerAction}\n\t\t</Stack> : cardProps.headerAction}\n\t\tfooterSlot={footer}\n\t>\n\t\t{hasPeriods ? <TabsContent value={selectedPeriod}>{body}</TabsContent> : body}\n\t</Card>;\n\treturn hasPeriods ? <Tabs value={selectedPeriod} onValueChange={value => { if (typeof value === 'string') onPeriodChange?.(value); }} className=\"min-w-0\">{card}</Tabs> : card;\n}\n\nUsageCard.displayName = 'UsageCard';\n"],"mappings":";;;;;;;;;;;;;AAEA,SAAgBkB,EAAW,GAAiD;CAC3E,OAAO,OAAOC,KAAU,YAAY,OAAO,SAASA,CAAK,KAAKA,KAAS,IAAIA,IAAQ;AACpF;AAGA,SAAgBC,EAAa,GAAgB,GAAkB,IAAQ,GAAY;CAClF,IAAIF,EAAWG,CAAM,MAAM,QAAQH,EAAWI,CAAQ,MAAM,MAAM,OAAO;CAEzE,IAAMC,IADY,KAAK,IAAIF,GAAQC,CACjB,eAA6B,KAAK,IAAI,GAAGE,CAAK;CAChE,OAAOH,IAASC,IAAWC;AAC5B;AAGA,SAAgBE,EAAa,GAA0B,GAAuC;CAC7F,IAAMC,IAAOR,EAAWS,CAAS,GAC3BC,IAAQV,EAAWW,CAAU,GAC7BC,IAAOJ,MAAS,OAAO,gBAAgBG,MAAe,OAAO,cAAcD,MAAU,OAAO,gBAAgB,WAC5GG,IAAQL,MAAS,QAAQE,MAAU,QAAQA,IAAQ,IAAIF,IAAOE,IAAQ,MAAMF,MAAS,KAAKE,MAAU,IAAI,IAAI;CAElH,OAAO;EACN;EAAM;EAAM;EAAO,SAFJG,MAAU,QAAQ,OAAO,SAASA,CAAK,IAAIA,IAAQ;EAGlE,UAAUD,MAAS,YAAYF,MAAU,IAAIF,MAAS,IAAI,IAAI,MAAM,KAAK,IAAI,KAAKK,KAAS,CAAC,IAAI;EAChG,WAAWD,MAAS,YAAY,KAAK,IAAI,IAAIF,KAAS,MAAMF,KAAQ,EAAE,IAAI;EAC1E,QAAQI,MAAS,YAAY,KAAK,IAAI,IAAIJ,KAAQ,MAAME,KAAS,EAAE,IAAI;CACxE;AACD;AAEA,SAAgBI,EAAa,GAA+B;CAC3D,IAAMC,IAASC,EAAK,KAAI,MAAOhB,EAAWiB,EAAI,KAAK,CAAC,GAC9CC,IAAWH,EAAO,SAAS,KAAKA,EAAO,OAAM,MAASd,MAAU,IAAI,GACpEkB,IAAUJ,EAAO,QAAgB,GAAK,MAAU,KAAK,IAAIK,GAAKnB,KAAS,CAAC,GAAG,CAAC;CAClF,OAAO;EACN;EAEA,SAASiB,IAAWH,EAAO,QAAgB,GAAK,MAAUM,KAAOpB,KAAS,KAAKc,EAAO,QAAQ,CAAC,IAAI;EACnG,SAASI,IAAU,IAAIA,IAAU;CAClC;AACD;;;AClBA,IAAaG,IAA4C;CACxD,OAAO;CAAS,OAAO;CAAS,MAAM;CAAQ,IAAI;CAAM,WAAW;CACnE,aAAa;CAAe,WAAW;CAAa,WAAW;CAC/D,WAAW;CAAmB,uBAAuB;CACrD,OAAO;CAAe,SAAS;CAAW,QAAQ;CAAW,WAAW;CACxE,SAAS;CAAgB,SAAS;CAAiB,OAAO;CAC1D,OAAO;CAAiB,OAAO;AAChC,GCXMC,IAAc;CAAC;CAAc;CAAc;CAAc;CAAc;AAAY;AACzF,SAASC,EAAc,GAA6B,GAAe;CAClE,OAAOD,GAAaE,EAAS,UAAU,KAAA,IAAYC,IAAQD,EAAS,QAAQ,KAAKF,EAAY;AAC9F;AAEA,SAASI,EAAW,EAAE,UAAO,YAAS,eAAY,MAAoF;CACrI,IAAMC,IAAUrB,EAAasB,EAAM,MAAMA,EAAM,KAAK;CACpD,OAAO,kBAACvC,GAAD;EAAO,KAAI;EAAQ,WAAU;EAA7B,UAAA;GACN,kBAACA,GAAD;IAAO,WAAU;IAAa,KAAI;IAAK,OAAM;IAA7C,UAAA;KACC,kBAACR,GAAD;MAAa,OAAO8C,EAAQ;MAAM,YAAYE,EAAQ;MAAa,MAAMC,IAAY,OAAO,KAAA;MAAW,QAAQA,IAAY,aAAa;MAAU,OAAM;KAAQ,CAAA;KAC/J,CAACA,KAAaH,EAAQ,SAAS,aAAa,kBAAA7C,GAAA,EAAA,UAAA,CAC5C,kBAACI,GAAD;MAAM,KAAI;MAAO,MAAK;MAAa,UAAA2C,EAAQ;KAAS,CAAA,GACpD,kBAAChD,GAAD;MAAa,OAAO8C,EAAQ;MAAO,MAAK;MAAY,OAAM;KAAQ,CAAA,CACjE,EAAA,CAAA;KACDC,EAAM,QAAQ,kBAAC1C,GAAD;MAAM,KAAI;MAAO,MAAK;MAAa,UAAA0C,EAAM;KAAW,CAAA;KAClEE,KAAaH,EAAQ,SAAS,QAAQ,kBAACzC,GAAD;MAAM,KAAI;MAAO,MAAK;MAAK,MAAK;MAAa,UAAA2C,EAAQ;KAAW,CAAA;IACjG;;GACNC,KAAaH,EAAQ,SAAS,aAAa,kBAACtC,GAAD;IAAO,WAAU;IAAa,KAAI;IAAK,OAAM;IAA7C,UAAA,CAC3C,kBAACH,GAAD;KAAM,KAAI;KAAO,MAAK;KAAK,MAAK;KAAa,UAAA2C,EAAQ;IAAS,CAAA,GAC9D,kBAAChD,GAAD;KAAa,OAAO8C,EAAQ;KAAO,MAAK;KAAK,MAAK;KAAY,OAAM;IAAQ,CAAA,CACtE;;GACNA,EAAQ,SAAS,eAAe,kBAACzC,GAAD;IAAM,KAAI;IAAO,MAAK;IAAK,MAAK;IAAa,UAAA2C,EAAQ;GAAgB,CAAA;GACrGF,EAAQ,SAAS,iBAAiBA,EAAQ,SAAS,QAAQ,kBAACzC,GAAD;IAAM,KAAI;IAAO,MAAK;IAAK,MAAK;IAAa,UAAA2C,EAAQ;GAAkB,CAAA;EAC7H;;AACR;AAEA,SAASG,EAAc,EAAE,UAAO,UAAO,YAAS,iBAA8H;CAC7K,IAAML,IAAUrB,EAAasB,EAAM,MAAMA,EAAM,KAAK,GAC9CK,IAAalD,EAAoB;CACvC,IAAI4C,EAAQ,SAAS,WAAW,OAAO;CACvC,IAAMP,IAAMc,GAAY,QAAQ,GAAO,MAAaC,KAASpC,EAAWyB,EAAS,KAAK,KAAK,IAAI,CAAC,KAAK,GAC/FY,IAAY,CAAC,CAACF,GAAY,UAAUA,EAAW,OAAM,MAAYnC,EAAWyB,EAAS,KAAK,MAAM,IAAI,KAAK,CAACvB,EAAamB,GAAKO,EAAQ,QAAQ,GAAGO,EAAW,MAAM,GAChKhB,IAAU,KAAK,IAAIS,EAAQ,SAAS,GAAGA,EAAQ,QAAQ,CAAC,GACxDU,IAAcnB,IAAU,IAAIA,IAAU,GACtCoB,IAAerC,EAAa0B,EAAQ,QAAQ,GAAGP,GAAKc,GAAY,MAAM,KAAKP,EAAQ,QAAQ,KAAKP,IAAM,GACtGmB,IAAS,IAAI,KAAK,aAAaN,EAAW,MAAM;CACtD,OAAO,kBAACzC,GAAD;EACN,OAAOmC,EAAQ,YAAY;EAC3B,cAAYa;EACZ,wBAAwB,GAAGD,EAAO,OAAOZ,EAAQ,QAAQ,CAAC,EAAE,GAAGE,EAAQ,GAAG,GAAGU,EAAO,OAAOZ,EAAQ,SAAS,CAAC,EAAE,GAAGC,EAAM,QAAQ,GAAG,GAAGC,EAAQ;EAC9I,MAAMF,EAAQ,SAAS,gBAAgB;EACvC,WAAWS,IAAY,kBAAC7C,GAAD,EAAA,UAAA,CACrB2C,GAAY,KAAK,GAAU,MAAU,kBAAC,QAAD;GAAwB,eAAY;GAAO,WAAWlD,EAAG,mBAAmBuC,EAAcC,GAAUC,CAAK,CAAC;GAAG,OAAO,EAAE,OAAO,IAAID,EAAS,SAAS,KAAKa,IAAc,IAAI,GAAG;EAAI,GAAtKb,EAAS,EAA6J,CAAC,GACvNc,IAAe,KAAK,kBAAC,QAAD;GAAM,eAAY;GAAO,WAAU;GAA6B,OAAO,EAAE,OAAO,GAAGA,IAAeD,IAAc,IAAI,GAAG;EAAI,CAAA,CAClI,EAAA,CAAA,IAAI,KAAA;CACnB,CAAA;AACF;AAEA,SAASI,EAAW,EAAE,SAAM,SAAM,cAAwF;CACzH,IAAMd,IAAUd,EAAaE,CAAI;CACjC,OAAO,kBAAC1B,GAAD;EAAO,KAAI;EAAK,WAAU;EAA1B,UAAA;GACN,kBAACA,GAAD;IAAO,WAAU;IAAa,SAAQ;IAAU,OAAM;IAAW,KAAI;IAArE,UAAA,CACC,kBAACJ,GAAD,EAAA,UAAe4C,EAAQ,MAAoB,CAAA,GAC3C,kBAACxC,GAAD;KAAO,WAAU;KAAa,KAAI;KAAK,OAAM;KAA7C,UAAA;MACC,kBAACH,GAAD;OAAM,KAAI;OAAO,MAAK;OAAK,MAAK;OAAa,UAAA2C,EAAQ;MAAc,CAAA;MACnE,kBAAChD,GAAD;OAAa,OAAO8C,EAAQ;OAAS,YAAYE,EAAQ;OAAa,SAAS,EAAE,uBAAuB,EAAE;OAAG,QAAO;MAAU,CAAA;MAC9H,kBAAC3C,GAAD;OAAM,KAAI;OAAO,MAAK;OAAK,MAAK;OAAa,UAAA2C,EAAQ;MAAa,CAAA;KAC5D;IACD,CAAA,CAAA;;GACNd,EAAK,SAAS,KAAK,kBAAAjC,GAAA,EAAA,UAAA,CACnB,kBAAC,OAAD;IAAK,SAAS,OAAOiC,EAAK,SAAS,GAAG;IAAM,qBAAoB;IAAO,eAAY;IAAO,WAAU;IAClG,UAAAY,EAAQ,OAAO,KAAK,GAAO,MAAU3B,MAAU,OAAO,OAAO,kBAAC,QAAD;KAAkB,GAAGyB,IAAQ,KAAK;KAAG,GAAG,KAAKzB,IAAQ2B,EAAQ,UAAU;KAAI,OAAO;KAAG,QAAQ3B,IAAQ2B,EAAQ,UAAU;KAAI,WAAU;IAAgB,GAA1IF,CAA0I,CAAC;GAChN,CAAA,GACL,kBAACpC,GAAD;IAAO,WAAU;IAAa,SAAQ;IAAU,KAAI;IAAK,eAAY;IAArE,UAAA,CACC,kBAACH,GAAD;KAAM,MAAK;KAAK,MAAK;KAAa,UAAA6B,EAAK,EAAE,EAAE;IAAY,CAAA,GACtDA,EAAK,SAAS,KAAK,kBAAC7B,GAAD;KAAM,MAAK;KAAK,MAAK;KAAa,UAAA6B,EAAKA,EAAK,SAAS,EAAE,EAAE;IAAY,CAAA,CACnF;GACN,CAAA,CAAA,EAAA,CAAA;GACF,kBAAC,MAAD;IAAI,WAAU;IAAU,cAAYc,EAAQ;IAC1C,UAAAd,EAAK,KAAK,GAAK,MAAU,kBAAC,MAAD,EAAA,UAAA;KAAiBC,EAAI;KAAM;KAAE,kBAACnC,GAAD;MAAa,OAAOkB,EAAWiB,EAAI,KAAK;MAAG,YAAYa,EAAQ;KAAc,CAAA;KAAC;KAAEa;IAAS,EAAA,GAA7GjB,CAA6G,CAAC;GAC9I,CAAA;EACE;;AACR;AAEA,SAASkB,EAAU,EAAE,SAAM,cAA+D;CACzF,IAAMhB,IAAUrB,EAAasC,EAAK,MAAMA,EAAK,KAAK,GAC5CC,IAAgBD,EAAK,YAAY,QAAQ,GAAO,MAAaT,KAASpC,EAAWyB,EAAS,KAAK,KAAK,IAAI,CAAC,KAAK,GAC9GsB,IAAenB,EAAQ,SAAS,QAAQ1B,EAAa4C,GAAelB,EAAQ,MAAMiB,EAAK,YAAY,MAAM;CAC/G,OAAO,kBAACvD,GAAD;EAAO,KAAI;EAAX,UAAA;GACN,kBAACA,GAAD;IAAO,KAAI;IAAK,WAAU;IAA1B,UAAA;KACC,kBAACA,GAAD;MAAO,WAAU;MAAa,SAAQ;MAAU,OAAM;MAAQ,KAAI;MAAlE,UAAA,CACC,kBAACqC,GAAD;OAAY,OAAOkB;OAAe;OAAS,WAAA;MAAW,CAAA,GACrDjB,EAAQ,YAAY,QAAQ,kBAAClC,GAAD;OAAS,OAAOkC,EAAQ;OAAS,QAAA;OAAO,MAAK;OAAK,QAAO;OAAS,MAAK;OAAY,SAAS,EAAE,uBAAuB,EAAE;MAAI,CAAA,CAClJ;;KACP,kBAACK,GAAD;MAAe,OAAOY;MAAM,OAAOf,EAAQ;MAAgB;MAAS,YAAYe,EAAK;KAAa,CAAA;KACjG,CAAC,CAACA,EAAK,YAAY,UAAU,kBAACxD,GAAD;MAAM,QAAQ,kBAAC,MAAD,EAAI,cAAYyC,EAAQ,UAAY,CAAA;MAAG,SAAS;MAAG,KAAI;MAAK,WAAU;MAChH,UAAAe,EAAK,WAAW,KAAK,GAAU,MAAU;OACzC,IAAM5C,IAAQD,EAAWyB,EAAS,KAAK,GACjCuB,IAAUpB,EAAQ,SAAS,QAAQ3B,MAAU,QAAQ8C,IAAe,OAAOnB,EAAQ,SAAS,IAAI,IAAI3B,IAAQ2B,EAAQ;OAC1H,OAAO,kBAAC,MAAD;QAAsB,WAAU;QAAhC,UAAA;SACN,kBAACtC,GAAD;UAAO,WAAU;UAAa,KAAI;UAAK,OAAM;UAAS,MAAM;UAAO,WAAU;UAA7E,UAAA,CACC,kBAAC,QAAD;WAAM,eAAY;WAAO,WAAWL,EAAG,sCAAsCuC,EAAcC,GAAUC,CAAK,CAAC;UAAI,CAAA,GAC/G,kBAACvC,GAAD;WAAM,KAAI;WAAO,WAAU;WAAe,UAAAsC,EAAS;UAAY,CAAA,CACzD;;SACP,kBAAC3C,GAAD;UAAoB;UAAO,YAAYgD,EAAQ;UAAa,QAAO;UAAS,WAAU;SAA8B,CAAA;SACpH,kBAACpC,GAAD;UAAS,OAAOsD;UAAS,YAAYlB,EAAQ;UAAa,MAAK;UAAY,SAAS,EAAE,uBAAuB,EAAE;UAAG,WAAU;SAA8B,CAAA;QACvJ;OAPY,GAAAL,EAAS,EAOrB;MACL,CAAC;KACI,CAAA;KACLsB,KAAgB,kBAAC5D,GAAD;MAAM,MAAK;MAAK,MAAK;MAAa,UAAA2C,EAAQ;KAA4B,CAAA;IACjF;;GACNe,EAAK,SAAS,kBAACH,GAAD;IAAY,MAAMG,EAAK;IAAO,MAAMA,EAAK;IAAe;GAAU,CAAA;GAChF,CAAC,CAACA,EAAK,WAAW,UAAU,kBAACvD,GAAD;IAAO,KAAI;IAAX,UAAA,CAC5B,kBAACJ,GAAD,EAAA,UAAe4C,EAAQ,UAAwB,CAAA,GAC/C,kBAACzC,GAAD;KAAM,SAAS;KAAG,KAAI;KAAK,WAAU;KACnC,UAAAwD,EAAK,UAAU,KAAI,MAAY,kBAACvD,GAAD;MAAyB,KAAI;MAAK,WAAU;MAA+B,MAAK;MAAQ,cAAY2D,EAAS;MAA7G,UAAA;OAC/B,kBAAC9D,GAAD;QAAM,KAAI;QAAO,QAAO;QAAU,UAAA8D,EAAS;OAAY,CAAA;OACvD,kBAACtB,GAAD;QAAY,OAAOsB;QAAmB;OAAU,CAAA;OAChD,kBAAChB,GAAD;QAAe,OAAOgB;QAAU,OAAOA,EAAS;QAAgB;OAAU,CAAA;MACpE;KAJqC,GAAAA,EAAS,EAI9C,CAAC;IACH,CAAA,CACA;;EACD;;AACR;AAGA,SAAgBC,EAAU,EAAE,SAAM,YAAS,SAAS,YAAS,WAAQ,mBAAgB,YAAS,gBAAa,cAAW,cAAW,iBAAc,SAASC,GAAa,GAAGC,KAA6B;CACpM,IAAMtB,IAAUuB,EAAW/B,GAAyB6B,CAAW,GACzDG,IAAQC,MAAW,WAAW,CAAC,CAACV,GAChCjB,IAAU0B,IAAQ/C,EAAasC,EAAK,MAAMA,EAAK,KAAK,IAAI,MACxDW,IAAiBC,KAAUC,IAAU,EAAE,EAAE,SAAS,IAClDC,IAAa,CAAC,CAACD,GAAS,QAC1BE;CACJ,AAEiBA,IAFbL,MAAW,YAAkB,kBAAC,OAAD;EAAK,MAAK;EAAU,UAAAM,KAAe,kBAAC1E,GAAD;GAAM,MAAK;GAAa,UAAA2C,EAAQ;EAAc,CAAA;CAAO,CAAA,IAChHyB,MAAW,UAAgB,kBAACjE,GAAD;EAAO,MAAK;EAAQ,KAAI;EAAxB,UAAA,CAA8BwE,KAAa,kBAAC3E,GAAD,EAAA,UAAO2C,EAAQ,MAAY,CAAA,GAAGiC,KAAW,kBAAC3E,GAAD;GAAQ,MAAK;GAAY,SAAS2E;GAAU,UAAAjC,EAAQ;EAAc,CAAA,CAAS;MACzLwB,IACE,kBAACV,GAAD;EAAiB;EAAe;CAAU,CAAA,IAD9B,kBAAC,OAAD,EAAA,UAAMoB,KAAa,kBAAC7E,GAAD;EAAM,MAAK;EAAa,UAAA2C,EAAQ;CAAY,CAAA,EAAO,CAAA;CAE9F,IAAMmC,KAAUrC,GAAS,SAAS,aAAasC,MAAiB,kBAAC5E,GAAD;EAAO,WAAU;EAAa,SAAQ;EAAU,OAAM;EAAS,KAAI;EAAnE,UAAA,CAC9DsC,GAAS,SAAS,aAAa,kBAACtC,GAAD;GAAO,WAAU;GAAa,KAAI;GAAK,OAAM;GAA7C,UAAA;IAC/B,kBAACR,GAAD;KAAa,OAAO8C,EAAQ,SAASA,EAAQ,SAASA,EAAQ;KAAW,QAAO;IAAU,CAAA;IACzFiB,GAAM,QAAQ,kBAAC1D,GAAD;KAAM,KAAI;KAAO,MAAK;KAAa,UAAA0D,EAAK;IAAW,CAAA;IAClE,kBAAC1D,GAAD;KAAM,KAAI;KAAO,MAAK;KAAa,UAAAyC,EAAQ,SAASE,EAAQ,YAAYA,EAAQ;IAAgB,CAAA;GAC1F;EACN,CAAA,GAAAoC,CACK;KACDC,IAAO,kBAAC5E,GAAD;EACZ,GAAI6D;EACJ,OAAOA,EAAU,SAAStB,EAAQ;EAClC,WAAW7C,EAAG,iCAAiCmE,EAAU,SAAS;EAClE,kBAAe;EACf,aAAU;EACV,aAAWG,MAAW,aAAa,KAAA;EACnC,cAAcI,IAAa,kBAACrE,GAAD;GAAO,WAAU;GAAa,KAAI;GAAK,OAAM;GAAS,WAAU;GAAhE,UAAA,CAC1B,kBAACQ,GAAD;IAAU,YAAA;IAAW,cAAYgC,EAAQ;IACvC,UAAA4B,EAAQ,KAAI,MAAQ,kBAAC9D,GAAD;KAA8B,OAAOwE,EAAK;KAAO,UAAUA,EAAK,YAAY,CAACC;KAAiB,UAAAD,EAAK;IAAmB,GAApGA,EAAK,KAA+F,CAAC;GACnI,CAAA,GACThB,EAAU,YACL;EAAI,CAAA,IAAAA,EAAU;EACrB,YAAYa;EAEX,UAAAN,IAAa,kBAAC9D,GAAD;GAAa,OAAO2D;GAAiB,UAAAI;EAAkB,CAAA,IAAIA;CACpE,CAAA;CACN,OAAOD,IAAa,kBAAC5D,GAAD;EAAM,OAAOyD;EAAgB,gBAAe,MAAS;GAAE,AAAI,OAAOvD,KAAU,YAAUoE,IAAiBpE,CAAK;EAAG;EAAG,WAAU;EAAW,UAAAkE;CAAW,CAAA,IAAIA;AAC3K;AAEA,EAAU,cAAc"}