themelia-react-ui 1.0.1 → 1.0.2

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 (488) hide show
  1. package/CHANGELOG.md +137 -0
  2. package/README.md +59 -13
  3. package/dist/{accordion-B-5Focs8.js → accordion-BRTcsp8J.js} +8 -8
  4. package/dist/accordion-BRTcsp8J.js.map +1 -0
  5. package/dist/{action-menu-Cx3SdfbN.js → action-menu-Drxw_vJk.js} +36 -36
  6. package/dist/action-menu-Drxw_vJk.js.map +1 -0
  7. package/dist/affordance-geometry.generated-CL84ZN9A.js +63 -0
  8. package/dist/affordance-geometry.generated-CL84ZN9A.js.map +1 -0
  9. package/dist/{ai-artifact-B5tPpXnS.js → ai-artifact-DLVdK0Py.js} +151 -155
  10. package/dist/ai-artifact-DLVdK0Py.js.map +1 -0
  11. package/dist/{app-shell-at8Kt4l_.js → app-shell-C_fKpljx.js} +11 -10
  12. package/dist/app-shell-C_fKpljx.js.map +1 -0
  13. package/dist/{attachment-BO2R47wn.js → attachment-DbjUWsP0.js} +12 -12
  14. package/dist/{attachment-BO2R47wn.js.map → attachment-DbjUWsP0.js.map} +1 -1
  15. package/dist/auth-CAQcasMV.js +723 -0
  16. package/dist/auth-CAQcasMV.js.map +1 -0
  17. package/dist/{avatar-Bpzty83c.js → avatar-Bu2HhitA.js} +6 -6
  18. package/dist/{avatar-Bpzty83c.js.map → avatar-Bu2HhitA.js.map} +1 -1
  19. package/dist/{badge-BZXZT9wd.js → badge-CzId1Wlm.js} +4 -4
  20. package/dist/{badge-BZXZT9wd.js.map → badge-CzId1Wlm.js.map} +1 -1
  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 +25 -27
  29. package/dist/base/carousel.js.map +1 -1
  30. package/dist/base/cascader.js +150 -148
  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 +40 -43
  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 +1 -1
  51. package/dist/base/repeaters.js +33 -33
  52. package/dist/base/repeaters.js.map +1 -1
  53. package/dist/base/sheet.js +1 -1
  54. package/dist/base/sidebar.js +1 -1
  55. package/dist/base/signature-pad.js +83 -81
  56. package/dist/base/signature-pad.js.map +1 -1
  57. package/dist/base/skeleton.js +1 -1
  58. package/dist/base/spinner.js +1 -1
  59. package/dist/base/structure.js +1 -1
  60. package/dist/base/table.js +1 -1
  61. package/dist/base/text-inputs.js +2 -2
  62. package/dist/base/toaster.js +6 -6
  63. package/dist/base/toaster.js.map +1 -1
  64. package/dist/base/tree.js +1 -1
  65. package/dist/base/upload-queue.js +1 -1
  66. package/dist/base/upload.js +3 -3
  67. package/dist/base/value-inputs.js +1 -1
  68. package/dist/blocks/admin.js +134 -134
  69. package/dist/blocks/admin.js.map +1 -1
  70. package/dist/blocks/ai.js +120 -117
  71. package/dist/blocks/ai.js.map +1 -1
  72. package/dist/blocks/analytics/usage-card.js +1 -1
  73. package/dist/blocks/analytics.js +510 -472
  74. package/dist/blocks/analytics.js.map +1 -1
  75. package/dist/blocks/collaboration.js +2 -2
  76. package/dist/blocks/commerce/receipt.js +1 -1
  77. package/dist/blocks/commerce.js +395 -383
  78. package/dist/blocks/commerce.js.map +1 -1
  79. package/dist/blocks/data-display.js +1 -1
  80. package/dist/blocks/onboarding.js +6 -6
  81. package/dist/blocks/onboarding.js.map +1 -1
  82. package/dist/blocks/planning.js +36 -36
  83. package/dist/blocks/planning.js.map +1 -1
  84. package/dist/blocks/timelines.js +1 -1
  85. package/dist/{breadcrumbs-DdQ_I5ra.js → breadcrumbs-BuYz5SDU.js} +9 -8
  86. package/dist/breadcrumbs-BuYz5SDU.js.map +1 -0
  87. package/dist/button-BZDasD04.js +651 -0
  88. package/dist/button-BZDasD04.js.map +1 -0
  89. package/dist/{button-BS6l5JUw.js → button-BZyfTvwm.js} +3 -3
  90. package/dist/button-BZyfTvwm.js.map +1 -0
  91. package/dist/buttons-D_6KJvEE.js +99 -0
  92. package/dist/buttons-D_6KJvEE.js.map +1 -0
  93. package/dist/{cards-Cum56XOF.js → cards-qGSErLw_.js} +12 -12
  94. package/dist/{cards-Cum56XOF.js.map → cards-qGSErLw_.js.map} +1 -1
  95. package/dist/chart-Bsc5BICK.js +150 -0
  96. package/dist/chart-Bsc5BICK.js.map +1 -0
  97. package/dist/{checkbox-BavDRjF7.js → checkbox-BQNDjUCh.js} +3 -3
  98. package/dist/checkbox-BQNDjUCh.js.map +1 -0
  99. package/dist/choice-inputs-Mk3iWbhr.js +725 -0
  100. package/dist/choice-inputs-Mk3iWbhr.js.map +1 -0
  101. package/dist/{code-block-xHKbAJDj.js → code-block-DzHKRybS.js} +23 -23
  102. package/dist/code-block-DzHKRybS.js.map +1 -0
  103. package/dist/{collapsible-DsnktFNv.js → collapsible-ClvC7Bj3.js} +3 -3
  104. package/dist/{collapsible-DsnktFNv.js.map → collapsible-ClvC7Bj3.js.map} +1 -1
  105. package/dist/{collection-content-C4fthJV_.js → collection-content-D6S8cv_n.js} +3 -3
  106. package/dist/{collection-content-C4fthJV_.js.map → collection-content-D6S8cv_n.js.map} +1 -1
  107. package/dist/{combobox-DEbdr-3u.js → combobox-BFnbJJp3.js} +18 -18
  108. package/dist/combobox-BFnbJJp3.js.map +1 -0
  109. package/dist/{combobox-xv3yJbzl.js → combobox-hozNwUcc.js} +313 -316
  110. package/dist/combobox-hozNwUcc.js.map +1 -0
  111. package/dist/{command-C0xe7u9B.js → command-BnmSchli.js} +9 -9
  112. package/dist/command-BnmSchli.js.map +1 -0
  113. package/dist/comments-u5L0OGip.js +1156 -0
  114. package/dist/comments-u5L0OGip.js.map +1 -0
  115. package/dist/components/base/buttons/button-group.recipes.d.ts +1 -1
  116. package/dist/components/base/buttons/button.recipes.d.ts +10 -19
  117. package/dist/components/base/buttons/use-pending-button-focus.d.ts +3 -0
  118. package/dist/components/base/cards/card.recipes.d.ts +13 -5
  119. package/dist/components/base/cards/partials/card-primitives.d.ts +9 -4
  120. package/dist/components/base/cards/smart-card.types.d.ts +1 -1
  121. package/dist/components/base/date-pickers/date-picker.recipes.d.ts +5 -18
  122. package/dist/components/base/date-pickers/datepicker.types.d.ts +3 -0
  123. package/dist/components/base/forms/form-field.d.ts +1 -0
  124. package/dist/components/base/forms/form-sizing.d.ts +3 -3
  125. package/dist/components/base/navigation/tabs.d.ts +3 -5
  126. package/dist/components/base/popover/popover.recipes.d.ts +3 -3
  127. package/dist/components/base/table/index.d.ts +1 -1
  128. package/dist/components/base/text-inputs/clear-native-field.d.ts +2 -0
  129. package/dist/components/base/text-inputs/input-trailing-action.d.ts +3 -0
  130. package/dist/components/blocks/analytics/types.d.ts +1 -1
  131. package/dist/components/blocks/collaboration/message/message.recipes.d.ts +12 -0
  132. package/dist/components/blocks/data-display/empty-state/partials/illustrations/document-stack.d.ts +1 -4
  133. package/dist/components/blocks/data-display/empty-state/partials/illustrations/inbox-clean.d.ts +1 -4
  134. package/dist/components/blocks/data-display/empty-state/partials/illustrations/index.d.ts +3 -3
  135. package/dist/components/blocks/data-display/empty-state/partials/illustrations/stacked-cards.d.ts +1 -6
  136. package/dist/components/features/combobox/components/error-message.d.ts +1 -1
  137. package/dist/components/features/comments/hooks/use-attachment-upload.d.ts +5 -0
  138. package/dist/components/features/filters/facets/search-facet.d.ts +0 -12
  139. package/dist/components/features/filters/facets/tags-facet.d.ts +1 -1
  140. package/dist/components/features/media-library/media-library.d.ts +1 -1
  141. package/dist/components/features/media-library/media-library.types.d.ts +9 -1
  142. package/dist/components/features/media-library/partials/media-library-partials.d.ts +1 -1
  143. package/dist/components/features/overlays/hooks/use-pending-overlay-focus.d.ts +2 -0
  144. package/dist/components/features/overlays/overlays.types.d.ts +5 -4
  145. package/dist/components/features/rich-text-editor/rich-text-editor.recipes.d.ts +2 -1
  146. package/dist/components/features/table/data-table.d.ts +1 -1
  147. package/dist/components/features/table/table.types.d.ts +1 -1
  148. package/dist/components/features/theme-tweaker/theme-provider-settings.d.ts +3 -1
  149. package/dist/components/layout/auth/auth.types.d.ts +1 -0
  150. package/dist/components/layout/page/page.d.ts +0 -1
  151. package/dist/components/layout/page/page.types.d.ts +9 -3
  152. package/dist/components/layout/sidebar/sidebar.context.d.ts +1 -1
  153. package/dist/components/layout/sidebar/sidebar.types.d.ts +4 -0
  154. package/dist/components/layout/workspace/workspace.types.d.ts +3 -0
  155. package/dist/components/typography/heading.d.ts +5 -2
  156. package/dist/components/typography/index.d.ts +1 -1
  157. package/dist/components/typography/text.styles.d.ts +10 -0
  158. package/dist/components/ui/popover.d.ts +1 -1
  159. package/dist/components/ui/sidebar.d.ts +1 -1
  160. package/dist/components/ui/table.d.ts +2 -1
  161. package/dist/container.recipes-D9t8MHR3.js +27 -0
  162. package/dist/container.recipes-D9t8MHR3.js.map +1 -0
  163. package/dist/{containers-6s-ucRQQ.js → containers-DqB-bSYE.js} +33 -56
  164. package/dist/containers-DqB-bSYE.js.map +1 -0
  165. package/dist/control-group-recipes-DBXmfh2E.js +21 -0
  166. package/dist/control-group-recipes-DBXmfh2E.js.map +1 -0
  167. package/dist/{copyable-B7SBXJMr.js → copyable-BTSByfmq.js} +6 -6
  168. package/dist/{copyable-B7SBXJMr.js.map → copyable-BTSByfmq.js.map} +1 -1
  169. package/dist/{data-display-cWIRdeaf.js → data-display-Bihs9Ven.js} +545 -332
  170. package/dist/data-display-Bihs9Ven.js.map +1 -0
  171. package/dist/{date-BFNMnrS5.js → date-DOKhJPu7.js} +4 -4
  172. package/dist/{date-BFNMnrS5.js.map → date-DOKhJPu7.js.map} +1 -1
  173. package/dist/{date-picker-CA6ogMQB.js → date-picker-DzP5HQq7.js} +492 -472
  174. package/dist/date-picker-DzP5HQq7.js.map +1 -0
  175. package/dist/date-pickers-BpgGz7S-.js +196 -0
  176. package/dist/date-pickers-BpgGz7S-.js.map +1 -0
  177. package/dist/{display-CFM5myut.js → display-CS6Hbk18.js} +8 -8
  178. package/dist/{display-CFM5myut.js.map → display-CS6Hbk18.js.map} +1 -1
  179. package/dist/{dropdown-menu-BlnyHr-9.js → dropdown-menu-D-boNgGO.js} +7 -7
  180. package/dist/{dropdown-menu-BlnyHr-9.js.map → dropdown-menu-D-boNgGO.js.map} +1 -1
  181. package/dist/features/activities.js +152 -141
  182. package/dist/features/activities.js.map +1 -1
  183. package/dist/features/ai-chat.js +182 -179
  184. package/dist/features/ai-chat.js.map +1 -1
  185. package/dist/features/async-preview.js +9 -9
  186. package/dist/features/async-preview.js.map +1 -1
  187. package/dist/features/combobox.js +1 -1
  188. package/dist/features/comments.js +1 -1
  189. package/dist/features/data-view.js +25 -23
  190. package/dist/features/data-view.js.map +1 -1
  191. package/dist/features/email-composer/engine.js +1 -1
  192. package/dist/features/email-composer.js +103 -104
  193. package/dist/features/email-composer.js.map +1 -1
  194. package/dist/features/event-calendar.js +375 -373
  195. package/dist/features/event-calendar.js.map +1 -1
  196. package/dist/features/filters.js +1 -1
  197. package/dist/features/global-search.js +222 -224
  198. package/dist/features/global-search.js.map +1 -1
  199. package/dist/features/kanban.js +29 -29
  200. package/dist/features/kanban.js.map +1 -1
  201. package/dist/features/map.js +59 -58
  202. package/dist/features/map.js.map +1 -1
  203. package/dist/features/media-library.js +856 -855
  204. package/dist/features/media-library.js.map +1 -1
  205. package/dist/features/mentions.js +1 -1
  206. package/dist/features/overlays.js +1 -1
  207. package/dist/features/products.js +1209 -1209
  208. package/dist/features/products.js.map +1 -1
  209. package/dist/features/questionnaire.js +52 -52
  210. package/dist/features/questionnaire.js.map +1 -1
  211. package/dist/features/resource-assignment.js +29 -31
  212. package/dist/features/resource-assignment.js.map +1 -1
  213. package/dist/features/resource.js +13 -13
  214. package/dist/features/resource.js.map +1 -1
  215. package/dist/features/rich-text-editor.js +2 -2
  216. package/dist/features/schema-form.js +82 -82
  217. package/dist/features/schema-form.js.map +1 -1
  218. package/dist/features/suggestions.js +3 -3
  219. package/dist/features/sync.js +4 -4
  220. package/dist/features/sync.js.map +1 -1
  221. package/dist/features/table.js +1 -1
  222. package/dist/features/theme-tweaker.js +456 -450
  223. package/dist/features/theme-tweaker.js.map +1 -1
  224. package/dist/{feedback-DWUkgEjR.js → feedback-CJkUAapr.js} +29 -29
  225. package/dist/feedback-CJkUAapr.js.map +1 -0
  226. package/dist/field-affordance-recipes-uKY4MsZ_.js +25 -0
  227. package/dist/field-affordance-recipes-uKY4MsZ_.js.map +1 -0
  228. package/dist/{field-state-recipes-CBTRt9Bt.js → field-state-recipes-DQQpiLWC.js} +3 -3
  229. package/dist/field-state-recipes-DQQpiLWC.js.map +1 -0
  230. package/dist/{filters-BhsUtsxW.js → filters-D6FF8L6s.js} +715 -720
  231. package/dist/filters-D6FF8L6s.js.map +1 -0
  232. package/dist/{form-field-Bn7ZH1rA.js → form-field-CZwrkP7m.js} +17 -9
  233. package/dist/form-field-CZwrkP7m.js.map +1 -0
  234. package/dist/{form-sizing-BWs70_a2.js → form-sizing-QP8aIRaW.js} +8 -5
  235. package/dist/form-sizing-QP8aIRaW.js.map +1 -0
  236. package/dist/{forms-B7pzS25o.js → forms-B5NCbkSC.js} +35 -35
  237. package/dist/{forms-B7pzS25o.js.map → forms-B5NCbkSC.js.map} +1 -1
  238. package/dist/forms-numeric-Crrm80Lm.js +867 -0
  239. package/dist/forms-numeric-Crrm80Lm.js.map +1 -0
  240. package/dist/{header-C59QZyxV.js → header-kxruN3RM.js} +53 -49
  241. package/dist/header-kxruN3RM.js.map +1 -0
  242. package/dist/{hooks-CM1Vp9Pe.js → hooks-BrlnCwQd.js} +2 -2
  243. package/dist/{hooks-CM1Vp9Pe.js.map → hooks-BrlnCwQd.js.map} +1 -1
  244. package/dist/{http-CLTVJc5I.js → http-CdEIHyQf.js} +2 -2
  245. package/dist/http-CdEIHyQf.js.map +1 -0
  246. package/dist/{icon-badge-Dv0RYQwj.js → icon-badge-Btc6pQrp.js} +4 -4
  247. package/dist/{icon-badge-Dv0RYQwj.js.map → icon-badge-Btc6pQrp.js.map} +1 -1
  248. package/dist/index.js +2 -2
  249. package/dist/input-SX9V0AL3.js +255 -0
  250. package/dist/input-SX9V0AL3.js.map +1 -0
  251. package/dist/input-vxcaNCYC.js +20 -0
  252. package/dist/input-vxcaNCYC.js.map +1 -0
  253. package/dist/{item-pJ0GsOiJ.js → item-DE4YnuJx.js} +18 -17
  254. package/dist/item-DE4YnuJx.js.map +1 -0
  255. package/dist/layout/app-shell.js +1 -1
  256. package/dist/layout/auth.js +1 -1
  257. package/dist/layout/containers.js +1 -1
  258. package/dist/layout/header.js +1 -1
  259. package/dist/layout/hooks.js +1 -1
  260. package/dist/layout/navigation.js +1 -1
  261. package/dist/layout/page.js +1 -1
  262. package/dist/layout/settings.js +1 -1
  263. package/dist/layout/sidebar.js +2 -2
  264. package/dist/layout/workspace.js +1 -1
  265. package/dist/layout.js +10 -10
  266. package/dist/lib/affordance-geometry.generated.d.ts +40 -9
  267. package/dist/lib/control-group-recipes.d.ts +22 -0
  268. package/dist/lib/field-affordance-recipes.d.ts +35 -2
  269. package/dist/lib/field-state-recipes.d.ts +2 -2
  270. package/dist/lib/navigation-row-recipes.d.ts +3 -2
  271. package/dist/lib/overlay-anatomy-recipes.d.ts +1 -1
  272. package/dist/lib/surface-recipes.d.ts +5 -2
  273. package/dist/lib/token-merge.generated.d.ts +144 -2
  274. package/dist/lib/ui-provider/types.d.ts +4 -2
  275. package/dist/lib/use-prefers-reduced-motion.d.ts +2 -0
  276. package/dist/lib/utils.js +1 -1
  277. package/dist/{media-gallery-DhDRgnVZ.js → media-gallery-DLp3HAz0.js} +75 -74
  278. package/dist/media-gallery-DLp3HAz0.js.map +1 -0
  279. package/dist/{mentions-B8Ko-fhS.js → mentions-Cl0Kt_Pd.js} +52 -50
  280. package/dist/{mentions-B8Ko-fhS.js.map → mentions-Cl0Kt_Pd.js.map} +1 -1
  281. package/dist/message-SZUNB1eX.js +127 -0
  282. package/dist/message-SZUNB1eX.js.map +1 -0
  283. package/dist/{navigation-DBEu4POU.js → navigation-DnQSNMT0.js} +64 -55
  284. package/dist/navigation-DnQSNMT0.js.map +1 -0
  285. package/dist/{navigation-BUIn2Qxx.js → navigation-DyytsLRB.js} +37 -37
  286. package/dist/navigation-DyytsLRB.js.map +1 -0
  287. package/dist/{navigation-row-recipes-GVh11KiT.js → navigation-row-recipes-DQEXQcqY.js} +3 -3
  288. package/dist/navigation-row-recipes-DQEXQcqY.js.map +1 -0
  289. package/dist/{number-BNT_BIzJ.js → number-DasMFWEG.js} +4 -4
  290. package/dist/{number-BNT_BIzJ.js.map → number-DasMFWEG.js.map} +1 -1
  291. package/dist/overlays-DUbs1KEi.js +1011 -0
  292. package/dist/overlays-DUbs1KEi.js.map +1 -0
  293. package/dist/{page-BV6ioQg3.js → page-hGmT4nWK.js} +75 -64
  294. package/dist/page-hGmT4nWK.js.map +1 -0
  295. package/dist/{page-header-DQRa0jug.js → page-header-D8nERkn5.js} +9 -9
  296. package/dist/page-header-D8nERkn5.js.map +1 -0
  297. package/dist/{pagination-C29vvt3I.js → pagination-NLGqRirf.js} +20 -20
  298. package/dist/pagination-NLGqRirf.js.map +1 -0
  299. package/dist/{popover-CoLDEg19.js → popover-CghIYdQf.js} +23 -22
  300. package/dist/popover-CghIYdQf.js.map +1 -0
  301. package/dist/{popover-menu-GLIQTJTx.js → popover-menu-B4PoWhRl.js} +6 -6
  302. package/dist/{popover-menu-GLIQTJTx.js.map → popover-menu-B4PoWhRl.js.map} +1 -1
  303. package/dist/{popover.recipes-zgBhMlUu.js → popover.recipes-QlD4JenO.js} +5 -5
  304. package/dist/popover.recipes-QlD4JenO.js.map +1 -0
  305. package/dist/{primitives-DKPOGVpj.js → primitives-C7ff0QaI.js} +120 -113
  306. package/dist/primitives-C7ff0QaI.js.map +1 -0
  307. package/dist/primitives.js +3 -3
  308. package/dist/{progress-BOe8l_FZ.js → progress-BroqrAyV.js} +10 -9
  309. package/dist/progress-BroqrAyV.js.map +1 -0
  310. package/dist/{receipt-BM8xsGFy.js → receipt-BuJynLgf.js} +8 -8
  311. package/dist/{receipt-BM8xsGFy.js.map → receipt-BuJynLgf.js.map} +1 -1
  312. package/dist/{rich-text-B7sBAdDG.js → rich-text-DlxDOtf4.js} +4 -4
  313. package/dist/{rich-text-B7sBAdDG.js.map → rich-text-DlxDOtf4.js.map} +1 -1
  314. package/dist/rich-text-editor-BKyG7rWz.js +574 -0
  315. package/dist/rich-text-editor-BKyG7rWz.js.map +1 -0
  316. package/dist/{rich-text-editor.recipes-DxvOE0Lp.js → rich-text-editor.recipes-B72Nfuze.js} +35 -26
  317. package/dist/rich-text-editor.recipes-B72Nfuze.js.map +1 -0
  318. package/dist/{scroll-area-BheMQ270.js → scroll-area-D-pIhEKl.js} +3 -3
  319. package/dist/scroll-area-D-pIhEKl.js.map +1 -0
  320. package/dist/{separator-Gk_WXH-l.js → separator-BNIgG3au.js} +3 -3
  321. package/dist/{separator-Gk_WXH-l.js.map → separator-BNIgG3au.js.map} +1 -1
  322. package/dist/{separator-DO0EbCEm.js → separator-BhtFyo4x.js} +2 -2
  323. package/dist/{separator-DO0EbCEm.js.map → separator-BhtFyo4x.js.map} +1 -1
  324. package/dist/services/actions.js +1 -1
  325. package/dist/{settings-BnCyyPOJ.js → settings-DOTOzeZ2.js} +10 -9
  326. package/dist/{settings-BnCyyPOJ.js.map → settings-DOTOzeZ2.js.map} +1 -1
  327. package/dist/{sheet-B-q914Ad.js → sheet-BFhrNehm.js} +11 -11
  328. package/dist/sheet-BFhrNehm.js.map +1 -0
  329. package/dist/{sidebar-DPR7fmqN.js → sidebar-CyR4XKwR.js} +219 -200
  330. package/dist/sidebar-CyR4XKwR.js.map +1 -0
  331. package/dist/{sidebar-C_2p3Tfj.js → sidebar-SvGJ0Zwi.js} +63 -58
  332. package/dist/sidebar-SvGJ0Zwi.js.map +1 -0
  333. package/dist/{skeleton-CmT1ppqb.js → skeleton-3F0uhYn3.js} +4 -4
  334. package/dist/{skeleton-CmT1ppqb.js.map → skeleton-3F0uhYn3.js.map} +1 -1
  335. package/dist/{smart-card-CYLn46e6.js → smart-card-DjGVV2xr.js} +171 -165
  336. package/dist/smart-card-DjGVV2xr.js.map +1 -0
  337. package/dist/{spinner-BY9HbUEh.js → spinner-Cpf7oRkF.js} +5 -5
  338. package/dist/{spinner-BY9HbUEh.js.map → spinner-Cpf7oRkF.js.map} +1 -1
  339. package/dist/{structure-MvKVq-oL.js → structure-CRdqVawd.js} +2 -2
  340. package/dist/{structure-MvKVq-oL.js.map → structure-CRdqVawd.js.map} +1 -1
  341. package/dist/style.css +1 -1
  342. package/dist/{surface-recipes-CQfRr-VL.js → surface-recipes-Dd__PD-w.js} +4 -3
  343. package/dist/surface-recipes-Dd__PD-w.js.map +1 -0
  344. package/dist/{table-DnlAJ-xR.js → table-CLtJTxoR.js} +17 -16
  345. package/dist/table-CLtJTxoR.js.map +1 -0
  346. package/dist/table-CcRDZiLP.js +1444 -0
  347. package/dist/table-CcRDZiLP.js.map +1 -0
  348. package/dist/tabs-BNgu7g0u.js +188 -0
  349. package/dist/tabs-BNgu7g0u.js.map +1 -0
  350. package/dist/text-inputs-DsR56TR-.js +330 -0
  351. package/dist/text-inputs-DsR56TR-.js.map +1 -0
  352. package/dist/{text.styles-BwB7vAF2.js → text.styles-Q4sGAIgA.js} +18 -10
  353. package/dist/text.styles-Q4sGAIgA.js.map +1 -0
  354. package/dist/theme.css +77 -115
  355. package/dist/{timelines-B9ICkQcV.js → timelines-D1pkt3se.js} +84 -78
  356. package/dist/timelines-D1pkt3se.js.map +1 -0
  357. package/dist/{tree-BdWSaoFT.js → tree-BtmYyMZV.js} +8 -8
  358. package/dist/{tree-BdWSaoFT.js.map → tree-BtmYyMZV.js.map} +1 -1
  359. package/dist/typography/rich-text.js +1 -1
  360. package/dist/typography-BxQgiZyw.js +96 -0
  361. package/dist/typography-BxQgiZyw.js.map +1 -0
  362. package/dist/typography.js +1 -1
  363. package/dist/{ui-provider-CftIB6TY.js → ui-provider-DRPn3qNl.js} +3 -2
  364. package/dist/ui-provider-DRPn3qNl.js.map +1 -0
  365. package/dist/ui-provider.js +1 -1
  366. package/dist/{upload-D8Za5x_c.js → upload-CDbYw1WN.js} +326 -323
  367. package/dist/upload-CDbYw1WN.js.map +1 -0
  368. package/dist/{upload-queue-hIIYBLS7.js → upload-queue-CNd_hH_a.js} +25 -25
  369. package/dist/upload-queue-CNd_hH_a.js.map +1 -0
  370. package/dist/{usage-card-DnmnJ58D.js → usage-card-VyJLUwRr.js} +53 -54
  371. package/dist/usage-card-VyJLUwRr.js.map +1 -0
  372. package/dist/utils-BvH9PSmq.js +4275 -0
  373. package/dist/utils-BvH9PSmq.js.map +1 -0
  374. package/dist/value-inputs-D0KCrfVC.js +840 -0
  375. package/dist/value-inputs-D0KCrfVC.js.map +1 -0
  376. package/dist/{workspace-C1PZmk8L.js → workspace-CcR8r-Nt.js} +115 -122
  377. package/dist/workspace-CcR8r-Nt.js.map +1 -0
  378. package/docs/consumer-skill/SKILL.md +110 -119
  379. package/docs/consumer-skill/examples/analytics.tsx +34 -0
  380. package/docs/consumer-skill/examples/app-layout.tsx +42 -12
  381. package/docs/consumer-skill/examples/detail.tsx +20 -4
  382. package/docs/consumer-skill/examples/manifest.json +13 -1
  383. package/docs/consumer-skill/examples/website.tsx +56 -0
  384. package/docs/consumer-skill/references/analytics.md +70 -0
  385. package/docs/consumer-skill/references/composition.md +116 -2
  386. package/docs/consumer-skill/references/design-contract.md +33 -7
  387. package/docs/consumer-skill/references/discovery.md +76 -5
  388. package/docs/consumer-skill/references/integration.md +14 -0
  389. package/docs/consumer-skill/references/public-api.json +2023 -218
  390. package/docs/consumer-skill/references/review.md +55 -3
  391. package/docs/consumer-skill/references/theming.md +52 -7
  392. package/docs/consumer-skill/references/tokens.json +177 -9
  393. package/docs/consumer-skill/references/workflows.md +32 -0
  394. package/docs/consumer-skill/scripts/check-composition.mjs +1 -1
  395. package/docs/consumer-skill/scripts/composition-policy.mjs +179 -17
  396. package/docs/consumer-skill/scripts/discovery.mjs +61 -9
  397. package/docs/consumer-skill/scripts/surface-policy.mjs +44 -0
  398. package/package.json +7 -4
  399. package/dist/accordion-B-5Focs8.js.map +0 -1
  400. package/dist/action-menu-Cx3SdfbN.js.map +0 -1
  401. package/dist/affordance-geometry.generated-D8Jcfb0G.js +0 -32
  402. package/dist/affordance-geometry.generated-D8Jcfb0G.js.map +0 -1
  403. package/dist/ai-artifact-B5tPpXnS.js.map +0 -1
  404. package/dist/app-shell-at8Kt4l_.js.map +0 -1
  405. package/dist/auth-OFwWSAap.js +0 -704
  406. package/dist/auth-OFwWSAap.js.map +0 -1
  407. package/dist/breadcrumbs-DdQ_I5ra.js.map +0 -1
  408. package/dist/button-BS6l5JUw.js.map +0 -1
  409. package/dist/buttons-Co6GavvM.js +0 -674
  410. package/dist/buttons-Co6GavvM.js.map +0 -1
  411. package/dist/chart-DVfcwQu6.js +0 -149
  412. package/dist/chart-DVfcwQu6.js.map +0 -1
  413. package/dist/checkbox-BavDRjF7.js.map +0 -1
  414. package/dist/choice-inputs-CC7XqPQO.js +0 -619
  415. package/dist/choice-inputs-CC7XqPQO.js.map +0 -1
  416. package/dist/code-block-xHKbAJDj.js.map +0 -1
  417. package/dist/combobox-DEbdr-3u.js.map +0 -1
  418. package/dist/combobox-xv3yJbzl.js.map +0 -1
  419. package/dist/command-C0xe7u9B.js.map +0 -1
  420. package/dist/comments-DviPLnwy.js +0 -1132
  421. package/dist/comments-DviPLnwy.js.map +0 -1
  422. package/dist/containers-6s-ucRQQ.js.map +0 -1
  423. package/dist/data-display-cWIRdeaf.js.map +0 -1
  424. package/dist/date-picker-CA6ogMQB.js.map +0 -1
  425. package/dist/date-pickers-BPIKLdsD.js +0 -224
  426. package/dist/date-pickers-BPIKLdsD.js.map +0 -1
  427. package/dist/feedback-DWUkgEjR.js.map +0 -1
  428. package/dist/field-affordance-recipes-IjzPrCTw.js +0 -17
  429. package/dist/field-affordance-recipes-IjzPrCTw.js.map +0 -1
  430. package/dist/field-state-recipes-CBTRt9Bt.js.map +0 -1
  431. package/dist/filters-BhsUtsxW.js.map +0 -1
  432. package/dist/form-field-Bn7ZH1rA.js.map +0 -1
  433. package/dist/form-sizing-BWs70_a2.js.map +0 -1
  434. package/dist/forms-numeric-BUBxELBv.js +0 -867
  435. package/dist/forms-numeric-BUBxELBv.js.map +0 -1
  436. package/dist/header-C59QZyxV.js.map +0 -1
  437. package/dist/http-CLTVJc5I.js.map +0 -1
  438. package/dist/input-WwYQZJzG.js +0 -202
  439. package/dist/input-WwYQZJzG.js.map +0 -1
  440. package/dist/input-ci9fIgFH.js +0 -20
  441. package/dist/input-ci9fIgFH.js.map +0 -1
  442. package/dist/item-pJ0GsOiJ.js.map +0 -1
  443. package/dist/media-gallery-DhDRgnVZ.js.map +0 -1
  444. package/dist/message-COsdEvXT.js +0 -108
  445. package/dist/message-COsdEvXT.js.map +0 -1
  446. package/dist/navigation-BUIn2Qxx.js.map +0 -1
  447. package/dist/navigation-DBEu4POU.js.map +0 -1
  448. package/dist/navigation-row-recipes-GVh11KiT.js.map +0 -1
  449. package/dist/overlays-B11wZka6.js +0 -982
  450. package/dist/overlays-B11wZka6.js.map +0 -1
  451. package/dist/page-BV6ioQg3.js.map +0 -1
  452. package/dist/page-header-DQRa0jug.js.map +0 -1
  453. package/dist/pagination-C29vvt3I.js.map +0 -1
  454. package/dist/popover-CoLDEg19.js.map +0 -1
  455. package/dist/popover.recipes-zgBhMlUu.js.map +0 -1
  456. package/dist/primitives-DKPOGVpj.js.map +0 -1
  457. package/dist/progress-BOe8l_FZ.js.map +0 -1
  458. package/dist/rich-text-editor-CoVrTiSv.js +0 -575
  459. package/dist/rich-text-editor-CoVrTiSv.js.map +0 -1
  460. package/dist/rich-text-editor.recipes-DxvOE0Lp.js.map +0 -1
  461. package/dist/scroll-area-BheMQ270.js.map +0 -1
  462. package/dist/select-B2mb-qN2.js +0 -108
  463. package/dist/select-B2mb-qN2.js.map +0 -1
  464. package/dist/sheet-B-q914Ad.js.map +0 -1
  465. package/dist/sidebar-C_2p3Tfj.js.map +0 -1
  466. package/dist/sidebar-DPR7fmqN.js.map +0 -1
  467. package/dist/smart-card-CYLn46e6.js.map +0 -1
  468. package/dist/surface-recipes-CQfRr-VL.js.map +0 -1
  469. package/dist/table-BS39xnlq.js +0 -1424
  470. package/dist/table-BS39xnlq.js.map +0 -1
  471. package/dist/table-DnlAJ-xR.js.map +0 -1
  472. package/dist/tabs-B5cNMWiP.js +0 -187
  473. package/dist/tabs-B5cNMWiP.js.map +0 -1
  474. package/dist/text-inputs-Dh9XGyiS.js +0 -331
  475. package/dist/text-inputs-Dh9XGyiS.js.map +0 -1
  476. package/dist/text.styles-BwB7vAF2.js.map +0 -1
  477. package/dist/timelines-B9ICkQcV.js.map +0 -1
  478. package/dist/typography-Cv8MT-82.js +0 -96
  479. package/dist/typography-Cv8MT-82.js.map +0 -1
  480. package/dist/ui-provider-CftIB6TY.js.map +0 -1
  481. package/dist/upload-D8Za5x_c.js.map +0 -1
  482. package/dist/upload-queue-hIIYBLS7.js.map +0 -1
  483. package/dist/usage-card-DnmnJ58D.js.map +0 -1
  484. package/dist/utils-C2EKeIw3.js +0 -72
  485. package/dist/utils-C2EKeIw3.js.map +0 -1
  486. package/dist/value-inputs-DX2dbxjj.js +0 -824
  487. package/dist/value-inputs-DX2dbxjj.js.map +0 -1
  488. package/dist/workspace-C1PZmk8L.js.map +0 -1
@@ -1,15 +1,15 @@
1
1
  "use client";
2
2
  import { useStrings as e } from "../lib/strings.js";
3
- import { t } from "../utils-C2EKeIw3.js";
4
- import { n } from "../buttons-Co6GavvM.js";
5
- import { a as r } from "../typography-Cv8MT-82.js";
6
- import { r as i, t as a } from "../structure-MvKVq-oL.js";
7
- import { g as o } from "../primitives-DKPOGVpj.js";
8
- import { t as s } from "../number-BNT_BIzJ.js";
9
- import { i as c, r as l, t as u } from "../tabs-B5cNMWiP.js";
10
- import { t as d } from "../popover-menu-GLIQTJTx.js";
11
- import { f } from "../table-BS39xnlq.js";
12
- import { N as p, O as m, P as h, T as g, l as _, w as v } from "../filters-BhsUtsxW.js";
3
+ import { t } from "../utils-BvH9PSmq.js";
4
+ import { a as n } from "../typography-BxQgiZyw.js";
5
+ import { t as r } from "../button-BZDasD04.js";
6
+ import { r as i, t as a } from "../structure-CRdqVawd.js";
7
+ import { g as o } from "../primitives-C7ff0QaI.js";
8
+ import { t as s } from "../number-DasMFWEG.js";
9
+ import { i as c, r as l, t as u } from "../tabs-BNgu7g0u.js";
10
+ import { t as d } from "../popover-menu-B4PoWhRl.js";
11
+ import { f } from "../table-CcRDZiLP.js";
12
+ import { N as p, O as m, P as h, T as g, l as _, w as v } from "../filters-D6FF8L6s.js";
13
13
  import { useEffect as y, useMemo as b, useRef as x } from "react";
14
14
  import { Fragment as S, jsx as C, jsxs as w } from "react/jsx-runtime";
15
15
  import { Check as T, ChevronsUpDown as E } from "lucide-react";
@@ -211,7 +211,7 @@ function U({ tabs: e, label: t = A }) {
211
211
  "aria-hidden": "true"
212
212
  })
213
213
  }),
214
- /* @__PURE__ */ C(r, {
214
+ /* @__PURE__ */ C(n, {
215
215
  tag: "span",
216
216
  weight: e.selected ? "medium" : "regular",
217
217
  className: "min-w-0 flex-1 truncate",
@@ -223,14 +223,14 @@ function U({ tabs: e, label: t = A }) {
223
223
  children: e.description
224
224
  })
225
225
  ] }),
226
- trigger: /* @__PURE__ */ w(n, {
226
+ trigger: /* @__PURE__ */ w(r, {
227
227
  type: "button",
228
228
  tone: "secondary",
229
229
  buttonStyle: "ghost",
230
230
  size: "sm",
231
231
  className: "h-action-sm px-control-sm",
232
232
  "aria-label": t,
233
- children: [/* @__PURE__ */ C(r, {
233
+ children: [/* @__PURE__ */ C(n, {
234
234
  tag: "span",
235
235
  size: "inherit",
236
236
  className: "truncate text-current",
@@ -420,7 +420,7 @@ function Y({ page: i, pageCount: a, total: c, onPageChange: l, disabled: u = !1,
420
420
  children: [/* @__PURE__ */ C("div", {
421
421
  "data-slot": "data-view-pagination-summary",
422
422
  className: "data-view-pagination--summary min-w-0",
423
- children: c != null && /* @__PURE__ */ C(r, {
423
+ children: c != null && /* @__PURE__ */ C(n, {
424
424
  size: "xs",
425
425
  type: "secondary",
426
426
  children: c
@@ -450,7 +450,8 @@ function Y({ page: i, pageCount: a, total: c, onPageChange: l, disabled: u = !1,
450
450
  })] }) : null
451
451
  ]
452
452
  }),
453
- /* @__PURE__ */ C(n, {
453
+ /* @__PURE__ */ C(r, {
454
+ size: "sm",
454
455
  type: "button",
455
456
  tone: "secondary",
456
457
  buttonStyle: "outline",
@@ -458,7 +459,8 @@ function Y({ page: i, pageCount: a, total: c, onPageChange: l, disabled: u = !1,
458
459
  onClick: () => l?.(i - 1),
459
460
  children: p.previous
460
461
  }),
461
- /* @__PURE__ */ C(n, {
462
+ /* @__PURE__ */ C(r, {
463
+ size: "sm",
462
464
  type: "button",
463
465
  tone: "secondary",
464
466
  buttonStyle: "outline",
@@ -470,12 +472,12 @@ function Y({ page: i, pageCount: a, total: c, onPageChange: l, disabled: u = !1,
470
472
  })]
471
473
  });
472
474
  }
473
- function X({ views: e, value: n, onValueChange: i, className: a }) {
475
+ function X({ views: e, value: r, onValueChange: i, className: a }) {
474
476
  return /* @__PURE__ */ C(u, {
475
477
  "data-component": "saved-view-tabs",
476
478
  "data-slot": "saved-view-tabs",
477
479
  className: t("saved-view-tabs--component rounded-radius bg-muted/60 p-space-xs", a),
478
- value: n,
480
+ value: r,
479
481
  onValueChange: (e) => {
480
482
  typeof e == "string" && i(e);
481
483
  },
@@ -485,7 +487,7 @@ function X({ views: e, value: n, onValueChange: i, className: a }) {
485
487
  activateOnFocus: !0,
486
488
  className: "h-auto! flex-wrap justify-start gap-space-xs bg-transparent p-0",
487
489
  children: e.map((e) => {
488
- let i = e.id === n;
490
+ let i = e.id === r;
489
491
  return /* @__PURE__ */ w(c, {
490
492
  "data-slot": "saved-view-tab",
491
493
  type: "button",
@@ -495,17 +497,17 @@ function X({ views: e, value: n, onValueChange: i, className: a }) {
495
497
  "aria-controls": void 0,
496
498
  "aria-pressed": i,
497
499
  disabled: e.disabled,
498
- className: t("saved-view-tabs--tab h-action-sm flex-none rounded-radius-md px-control-sm py-0 after:hidden data-active:bg-secondary data-active:text-secondary-foreground data-active:hover:bg-secondary data-active:hover:text-secondary-foreground", i && "shadow-sm"),
499
- children: [/* @__PURE__ */ C(r, {
500
+ className: t("saved-view-tabs--tab h-action-sm flex-none gap-space-xs rounded-inner px-control-sm py-0 after:hidden data-active:bg-secondary data-active:text-secondary-foreground data-active:hover:bg-secondary data-active:hover:text-secondary-foreground", i && "shadow-sm"),
501
+ children: [/* @__PURE__ */ C(n, {
500
502
  tag: "span",
501
503
  size: "inherit",
502
504
  className: "truncate text-current",
503
505
  children: e.label
504
- }), e.count !== void 0 && e.count !== null && /* @__PURE__ */ C(r, {
506
+ }), e.count !== void 0 && e.count !== null && /* @__PURE__ */ C(n, {
505
507
  tag: "span",
506
508
  size: "xs",
507
509
  type: "secondary",
508
- className: "saved-view-tabs--count ml-1",
510
+ className: "saved-view-tabs--count",
509
511
  children: e.count
510
512
  })]
511
513
  }, e.id);
@@ -1 +1 @@
1
- {"version":3,"file":"data-view.js","names":["_Fragment","NumberValue","Text","Grid","Stack","SecondaryValue","Number$1","TabsTrigger","TabsList","Tabs","PopoverMenu","FilterOperatorEnum","getDefaultOperatorForType","FilterType","useFilters","FilterLayout","FilterProvider","Fragment$1","defaultDataViewPaginationStrings","defaultDataViewFilterTabsLabel","getPathValue","path","current","part","row","stringifyFilterValue","value","collectSearchText","depth","entry","normalizeCandidateValues","stringified","toComparableNumber","next","toComparableDate","dateFormat","formattedDate","parse","isValid","nativeDate","matchesComparableOperator","toComparable","filterConfig","candidateNumbers","candidateValues","filterNumbers","filterValues","operator","candidate","fallbackFilterConfig","key","rowMatchesFilter","filter","haystack","resolvedFilterConfig","getFilterValue","applyDataViewFilters","activeFilters","data","filtersByKey","filters","useDataView","onErrorRef","useRef","filtering","lastReportedResultRef","filterRows","hasFiltering","result","useMemo","error","useEffect","useFilterTabState","nonSearchFilters","searchFilters","activeTab","tab","tabs","active","preset","sortedPreset","sortedActive","index","applyTab","presetFilters","DataViewFilterTabSelect","item","Check","Button","label","ChevronsUpDown","DataViewShell","emptyState","cn","className","header","toolbar","contentClassName","emptySlot","children","footer","DataViewToolbar","leading","search","views","actions","DataViewTableFrame","toolbarClassName","footerClassName","DataViewRoot","resolvedFilterTabs","filterTabsDisplay","layoutTabs","showAuxiliaryToolbar","slots","hasIntegratedTopbar","tableNode","DataTable","table","rows","DataView","DataViewPagination","stringsProp","strings","useStrings","hasPrevious","page","hasNext","pageCount","pageLabel","canChangePage","onPageChange","disabled","total","SavedViewTabs","onValueChange","view"],"sources":["../../src/components/features/data-view/data-view.strings.ts","../../src/components/features/data-view/data-view-filtering.ts","../../src/components/features/data-view/hooks/use-data-view.ts","../../src/components/features/data-view/data-view.tsx"],"sourcesContent":["export interface DataViewPaginationStrings {\n\t/** Current page, 1-based. */\n\tpage: string;\n\tprevious: string;\n\tnext: string;\n}\n\nexport const defaultDataViewPaginationStrings: DataViewPaginationStrings = {\n\tpage: 'Page',\n\tprevious: 'Previous',\n\tnext: 'Next',\n};\n\n/** Default for the directly overrideable `filterTabsLabel` control label. */\nexport const defaultDataViewFilterTabsLabel = 'View';\n","import { isValid, parse } from 'date-fns';\n\nimport {\n\tFilterOperatorEnum,\n\tFilterType,\n\ttype ActiveFilter,\n\ttype FilterConfig,\n} from '../filters';\n\nimport type { DataViewFilterValueGetter } from './data-view.types';\n\nfunction getPathValue(row: unknown, path: string): unknown {\n\tif (!path.includes('.')) {\n\t\treturn row && typeof row === 'object'\n\t\t\t? (row as Record<string, unknown>)[path]\n\t\t\t: undefined;\n\t}\n\n\treturn path.split('.').reduce<unknown>((current, part) => {\n\t\tif (!current || typeof current !== 'object') return undefined;\n\t\treturn (current as Record<string, unknown>)[part];\n\t}, row);\n}\n\nfunction stringifyFilterValue(value: unknown): string {\n\tif (value === null || value === undefined) return '';\n\tif (value instanceof Date) return value.toISOString();\n\tif (typeof value === 'string') return value;\n\tif (typeof value === 'number' || typeof value === 'boolean') return String(value);\n\treturn '';\n}\n\nfunction collectSearchText(value: unknown, depth = 0): string {\n\tif (value === null || value === undefined || depth > 2) return '';\n\tif (value instanceof Date) return value.toISOString();\n\tif (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n\t\treturn String(value);\n\t}\n\tif (Array.isArray(value)) {\n\t\treturn value.map((entry) => collectSearchText(entry, depth + 1)).join(' ');\n\t}\n\tif (typeof value === 'object') {\n\t\treturn Object.values(value as Record<string, unknown>)\n\t\t\t.map((entry) => collectSearchText(entry, depth + 1))\n\t\t\t.join(' ');\n\t}\n\treturn '';\n}\n\nfunction normalizeCandidateValues(value: unknown): string[] {\n\tif (Array.isArray(value)) {\n\t\treturn value.map(stringifyFilterValue).filter(Boolean).map((entry) => entry.toLowerCase());\n\t}\n\n\tconst stringified = stringifyFilterValue(value);\n\treturn stringified ? [stringified.toLowerCase()] : [];\n}\n\nfunction toComparableNumber(value: string): number | undefined {\n\tconst next = Number(value);\n\treturn Number.isFinite(next) ? next : undefined;\n}\n\nfunction toComparableDate(value: string, dateFormat?: string): number | undefined {\n\tif (dateFormat) {\n\t\tconst formattedDate = parse(value, dateFormat, new Date(0));\n\t\tif (isValid(formattedDate)) return formattedDate.getTime();\n\t}\n\n\tconst nativeDate = new Date(value);\n\treturn isValid(nativeDate) ? nativeDate.getTime() : undefined;\n}\n\nfunction matchesComparableOperator(\n\tcandidateValues: string[],\n\tfilterValues: string[],\n\toperator: ActiveFilter['operator'],\n\tfilterConfig?: FilterConfig,\n) {\n\tconst toComparable = filterConfig?.type === FilterType.DATE\n\t\t? (value: string) => toComparableDate(value, filterConfig.dateFormat?.param ?? 'yyyy-MM-dd')\n\t\t: toComparableNumber;\n\tconst candidateNumbers = candidateValues\n\t\t.map(toComparable)\n\t\t.filter((value): value is number => value !== undefined);\n\tconst filterNumbers = filterValues\n\t\t.map(toComparable)\n\t\t.filter((value): value is number => value !== undefined);\n\n\tif (candidateNumbers.length === 0 || filterNumbers.length === 0) return false;\n\n\tswitch (operator) {\n\t\tcase FilterOperatorEnum.GT:\n\t\tcase FilterOperatorEnum.AFTER:\n\t\t\treturn candidateNumbers.some((candidate) => candidate > filterNumbers[0]);\n\t\tcase FilterOperatorEnum.GTE:\n\t\t\treturn candidateNumbers.some((candidate) => candidate >= filterNumbers[0]);\n\t\tcase FilterOperatorEnum.LT:\n\t\tcase FilterOperatorEnum.BEFORE:\n\t\t\treturn candidateNumbers.some((candidate) => candidate < filterNumbers[0]);\n\t\tcase FilterOperatorEnum.LTE:\n\t\t\treturn candidateNumbers.some((candidate) => candidate <= filterNumbers[0]);\n\t\tcase FilterOperatorEnum.BETWEEN:\n\t\t\tif (filterNumbers.length < 2) return false;\n\t\t\treturn candidateNumbers.some((candidate) => candidate >= filterNumbers[0] && candidate <= filterNumbers[1]);\n\t\tdefault:\n\t\t\treturn false;\n\t}\n}\n\nfunction fallbackFilterConfig(key: string): FilterConfig {\n\treturn {\n\t\tkey,\n\t\tlabel: key,\n\t\ttype: FilterType.SEARCH,\n\t\ticon: null,\n\t\tdisplayConfig: {},\n\t};\n}\n\nfunction rowMatchesFilter<TData extends object>(\n\trow: TData,\n\tfilter: ActiveFilter,\n\tfilterConfig: FilterConfig | undefined,\n\tgetFilterValue?: DataViewFilterValueGetter<TData>,\n) {\n\tconst filterValues = filter.value.map((value) => value.trim().toLowerCase()).filter(Boolean);\n\tif (filterValues.length === 0) return true;\n\n\tif (filterConfig?.type === FilterType.SEARCH) {\n\t\tconst haystack = collectSearchText(row).toLowerCase();\n\t\tif (\n\t\t\tfilter.operator === FilterOperatorEnum.NOT ||\n\t\t\tfilter.operator === FilterOperatorEnum.NOT_IN\n\t\t) {\n\t\t\treturn filterValues.every((value) => !haystack.includes(value));\n\t\t}\n\t\treturn filterValues.every((value) => haystack.includes(value));\n\t}\n\n\tconst resolvedFilterConfig = filterConfig ?? fallbackFilterConfig(filter.key);\n\tconst rawValue = getFilterValue?.(row, resolvedFilterConfig) ?? getPathValue(row, filter.key);\n\tconst candidateValues = normalizeCandidateValues(rawValue);\n\tif (candidateValues.length === 0) return false;\n\n\tswitch (filter.operator) {\n\t\tcase FilterOperatorEnum.CONTAINS:\n\t\t\treturn filterValues.every((value) =>\n\t\t\t\tcandidateValues.some((candidate) => candidate.includes(value)),\n\t\t\t);\n\t\tcase FilterOperatorEnum.HAS:\n\t\t\treturn filterValues.every((value) => candidateValues.includes(value));\n\t\tcase FilterOperatorEnum.NOT_IN:\n\t\t\treturn filterValues.every((value) =>\n\t\t\t\tcandidateValues.every((candidate) => candidate !== value),\n\t\t\t);\n\t\tcase FilterOperatorEnum.NOT:\n\t\t\tif (\n\t\t\t\tfilterConfig?.type === FilterType.SELECT ||\n\t\t\t\tfilterConfig?.type === FilterType.MULTI_SELECT ||\n\t\t\t\tfilterConfig?.type === FilterType.ASYNC_SELECT\n\t\t\t) {\n\t\t\t\treturn filterValues.every((value) =>\n\t\t\t\t\tcandidateValues.every((candidate) => candidate !== value),\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn filterValues.every((value) =>\n\t\t\t\tcandidateValues.every((candidate) => !candidate.includes(value)),\n\t\t\t);\n\t\tcase FilterOperatorEnum.IN:\n\t\tcase FilterOperatorEnum.EQUALS:\n\t\tcase FilterOperatorEnum.HAS_ANY:\n\t\t\treturn filterValues.some((value) => candidateValues.includes(value));\n\t\tcase FilterOperatorEnum.HAS_ALL:\n\t\t\treturn filterValues.every((value) => candidateValues.includes(value));\n\t\tcase FilterOperatorEnum.GT:\n\t\tcase FilterOperatorEnum.GTE:\n\t\tcase FilterOperatorEnum.LT:\n\t\tcase FilterOperatorEnum.LTE:\n\t\tcase FilterOperatorEnum.BEFORE:\n\t\tcase FilterOperatorEnum.AFTER:\n\t\tcase FilterOperatorEnum.BETWEEN:\n\t\t\treturn matchesComparableOperator(\n\t\t\t\tcandidateValues,\n\t\t\t\tfilterValues,\n\t\t\t\tfilter.operator,\n\t\t\t\tfilterConfig,\n\t\t\t);\n\t\tdefault:\n\t\t\treturn filterValues.some((value) => candidateValues.includes(value));\n\t}\n}\n\nexport function applyDataViewFilters<TData extends object>(\n\tdata: readonly TData[],\n\tactiveFilters: readonly ActiveFilter[],\n\tfilters: readonly FilterConfig[],\n\tgetFilterValue?: DataViewFilterValueGetter<TData>,\n): readonly TData[] {\n\tif (activeFilters.length === 0) return data;\n\n\tconst filtersByKey = new Map(filters.map((filter) => [filter.key, filter]));\n\treturn data.filter((row) =>\n\t\tactiveFilters.every((filter) =>\n\t\t\trowMatchesFilter(row, filter, filtersByKey.get(filter.key), getFilterValue),\n\t\t),\n\t);\n}\n","import { useEffect, useMemo, useRef } from 'react';\n\nimport { applyDataViewFilters } from '../data-view-filtering';\nimport type {\n\tUseDataViewOptions,\n\tUseDataViewResult,\n} from '../data-view.types';\n\nexport function useDataView<TData extends object>({\n\tdata,\n\tfiltering,\n}: UseDataViewOptions<TData>): UseDataViewResult<TData> {\n\tconst onErrorRef = useRef(filtering?.onError);\n\tonErrorRef.current = filtering?.onError;\n\tconst lastReportedResultRef = useRef<UseDataViewResult<TData> | null>(null);\n\tconst activeFilters = filtering?.activeFilters;\n\tconst filterRows = filtering?.filterRows;\n\tconst filters = filtering?.filters;\n\tconst getFilterValue = filtering?.getFilterValue;\n\tconst hasFiltering = filtering !== undefined;\n\n\tconst result = useMemo<UseDataViewResult<TData>>(() => {\n\t\tif (!hasFiltering || !activeFilters || !filters) {\n\t\t\treturn { rows: data, error: null, failed: false };\n\t\t}\n\n\t\ttry {\n\t\t\treturn {\n\t\t\t\trows: filterRows\n\t\t\t\t\t? filterRows({\n\t\t\t\t\t\tdata,\n\t\t\t\t\t\tactiveFilters,\n\t\t\t\t\t\tfilters,\n\t\t\t\t\t})\n\t\t\t\t\t: applyDataViewFilters(\n\t\t\t\t\t\tdata,\n\t\t\t\t\t\tactiveFilters,\n\t\t\t\t\t\tfilters,\n\t\t\t\t\t\tgetFilterValue,\n\t\t\t\t\t),\n\t\t\t\terror: null,\n\t\t\t\tfailed: false,\n\t\t\t};\n\t\t} catch (error) {\n\t\t\treturn { rows: data, error, failed: true };\n\t\t}\n\t}, [\n\t\tactiveFilters,\n\t\tdata,\n\t\tfilterRows,\n\t\tfilters,\n\t\tgetFilterValue,\n\t\thasFiltering,\n\t]);\n\n\tuseEffect(() => {\n\t\tif (!result.failed) {\n\t\t\tlastReportedResultRef.current = null;\n\t\t\treturn;\n\t\t}\n\t\tif (lastReportedResultRef.current === result) return;\n\t\tlastReportedResultRef.current = result;\n\t\tonErrorRef.current?.(result.error, { phase: 'apply' });\n\t}, [result]);\n\n\treturn result;\n}\n","import { Tabs, TabsList, TabsTrigger } from '../../base/navigation/tabs';\n/** DataView feature chrome — controlled shells for tables, filters, and saved views. */\nimport { useMemo } from 'react';\nimport { Check, ChevronsUpDown } from 'lucide-react';\n\nimport { Button } from '../../base/buttons';\nimport { PopoverMenu } from '../../base/popover-menu';\nimport { Grid, Stack } from '../../base/structure';\nimport { DataTable } from '../table';\nimport { Number as NumberValue, SecondaryValue } from '../../primitives';\nimport {\n\tFilterLayout,\n\tFilterOperatorEnum,\n\tFilterProvider,\n\tFilterType,\n\ttype ActiveFilter,\n\ttype FilterTab,\n\tgetDefaultOperatorForType,\n\tuseFilters,\n} from '../filters';\nimport { Text } from '../../typography';\nimport { useStrings } from '../../../lib/strings';\nimport { cn } from '../../../lib/utils';\n\nimport { defaultDataViewFilterTabsLabel, defaultDataViewPaginationStrings } from './data-view.strings';\nimport { useDataView } from './hooks';\nimport type {\n\tDataViewFilteringConfig,\n\tDataViewPaginationProps,\n\tDataViewProps,\n\tDataViewShellProps,\n\tDataViewSlots,\n\tDataViewTableOptions,\n\tDataViewTableFrameProps,\n\tDataViewToolbarProps,\n\tSavedViewTabsProps,\n} from './data-view.types';\n\nfunction useFilterTabState(tabs: readonly FilterTab[]) {\n\tconst { activeFilters, filters, replaceFilters } = useFilters();\n\tconst nonSearchFilters = useMemo(\n\t\t() =>\n\t\t\tactiveFilters.filter((filter) => {\n\t\t\t\tconst config = filters.find((candidate) => candidate.key === filter.key);\n\t\t\t\treturn config?.type !== FilterType.SEARCH;\n\t\t\t}),\n\t\t[activeFilters, filters],\n\t);\n\tconst searchFilters = useMemo(\n\t\t() =>\n\t\t\tactiveFilters.filter((filter) => {\n\t\t\t\tconst config = filters.find((candidate) => candidate.key === filter.key);\n\t\t\t\treturn config?.type === FilterType.SEARCH;\n\t\t\t}),\n\t\t[activeFilters, filters],\n\t);\n\tconst activeTab = useMemo(() => {\n\t\tfor (const tab of tabs) {\n\t\t\tif (tab.presets.length === 0) {\n\t\t\t\tif (nonSearchFilters.length === 0) return tab;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (tab.presets.length !== nonSearchFilters.length) continue;\n\n\t\t\tconst allMatch = tab.presets.every((preset) => {\n\t\t\t\tconst active = nonSearchFilters.find((filter) => filter.key === preset.key);\n\t\t\t\tif (!active) return false;\n\n\t\t\t\tconst sortedPreset = [...preset.value].sort();\n\t\t\t\tconst sortedActive = [...active.value].sort();\n\t\t\t\tif (sortedPreset.length !== sortedActive.length) return false;\n\t\t\t\tif (sortedPreset.some((value, index) => value !== sortedActive[index])) return false;\n\n\t\t\t\treturn !preset.operator || active.operator === preset.operator;\n\t\t\t});\n\n\t\t\tif (allMatch) return tab;\n\t\t}\n\n\t\treturn undefined;\n\t}, [nonSearchFilters, tabs]);\n\n\tfunction applyTab(tab: FilterTab) {\n\t\tif (tab.presets.length === 0) {\n\t\t\treplaceFilters([...searchFilters]);\n\t\t\treturn;\n\t\t}\n\n\t\tconst presetFilters: ActiveFilter[] = tab.presets.map((preset) => {\n\t\t\tconst filterConfig = filters.find((filter) => filter.key === preset.key);\n\t\t\tconst operator =\n\t\t\t\tpreset.operator ??\n\t\t\t\tfilterConfig?.operator ??\n\t\t\t\t(filterConfig ? getDefaultOperatorForType(filterConfig.type) : FilterOperatorEnum.EQUALS);\n\n\t\t\treturn {\n\t\t\t\tid: preset.key,\n\t\t\t\tkey: preset.key,\n\t\t\t\tvalue: preset.value,\n\t\t\t\toperator,\n\t\t\t};\n\t\t});\n\n\t\treplaceFilters([...searchFilters, ...presetFilters]);\n\t}\n\n\treturn { activeTab, applyTab };\n}\n\nfunction DataViewFilterTabSelect({\n\ttabs,\n\tlabel = defaultDataViewFilterTabsLabel,\n}: {\n\t/** Tabs to offer, in display order. */\n\ttabs: readonly FilterTab[];\n\t/** Display label. */\n\tlabel?: string;\n}) {\n\tconst { activeTab, applyTab } = useFilterTabState(tabs);\n\tif (tabs.length === 0) return null;\n\n\treturn (\n\t\t<PopoverMenu\n\t\t\tsearch={false}\n\t\t\tcontentClassName=\"w-48\"\n\t\t\titems={tabs.map((tab) => ({\n\t\t\t\tvalue: tab.id,\n\t\t\t\tlabel: tab.label,\n\t\t\t\tdescription: tab.count === undefined ? undefined : String(tab.count),\n\t\t\t\tselected: tab.id === activeTab?.id,\n\t\t\t\tdata: tab,\n\t\t\t}))}\n\t\t\tonSelect={(item) => {\n\t\t\t\tif (item.data) applyTab(item.data);\n\t\t\t}}\n\t\t\trenderItem={(item) => (\n\t\t\t\t<>\n\t\t\t\t\t<span className=\"flex size-icon-sm shrink-0 items-center justify-center\">\n\t\t\t\t\t\t{!!item.selected && <Check className=\"size-icon-sm\" aria-hidden=\"true\" />}\n\t\t\t\t\t</span>\n\t\t\t\t\t<Text tag=\"span\" weight={item.selected ? 'medium' : 'regular'} className=\"min-w-0 flex-1 truncate\">\n\t\t\t\t\t\t{item.label}\n\t\t\t\t\t</Text>\n\t\t\t\t\t{!!item.description && (\n\t\t\t\t\t\t<SecondaryValue size=\"xs\" className=\"tabular-nums\">\n\t\t\t\t\t\t\t{item.description}\n\t\t\t\t\t\t</SecondaryValue>\n\t\t\t\t\t)}\n\t\t\t\t</>\n\t\t\t)}\n\t\t\ttrigger={\n\t\t\t\t<Button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\tclassName=\"h-action-sm px-control-sm\"\n\t\t\t\t\taria-label={label}\n\t\t\t\t>\n\t\t\t\t\t<Text tag=\"span\" size=\"inherit\" className=\"truncate text-current\">\n\t\t\t\t\t\t{activeTab?.label ?? label}\n\t\t\t\t\t</Text>\n\t\t\t\t\t<ChevronsUpDown className=\"size-icon-sm\" aria-hidden=\"true\" />\n\t\t\t\t</Button>\n\t\t\t}\n\t\t/>\n\t);\n}\n\nexport function DataViewShell({\n\tchildren,\n\theader,\n\ttoolbar,\n\tfooter,\n\temptySlot,\n\tempty: emptyState = false,\n\tclassName,\n\tcontentClassName,\n}: DataViewShellProps) {\n\treturn (\n\t\t<Stack\n\t\t\trender={<section />}\n\t\t\tgap=\"lg\"\n\t\t\tdata-component=\"data-view-shell\"\n\t\t\tdata-slot=\"data-view-shell\"\n\t\t\tclassName={cn('data-view-shell--component @container/data-view', className)}\n\t\t>\n\t\t\t{!!header && (\n\t\t\t\t<div data-slot=\"data-view-header\" className=\"data-view-shell--header\">\n\t\t\t\t\t{header}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t{!!toolbar && (\n\t\t\t\t<div data-slot=\"data-view-toolbar-slot\" className=\"data-view-shell--toolbar\">\n\t\t\t\t\t{toolbar}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t<div data-slot=\"data-view-content\" className={cn('data-view-shell--content min-w-0', contentClassName)}>\n\t\t\t\t{emptyState ? emptySlot : children}\n\t\t\t</div>\n\t\t\t{!!footer && (\n\t\t\t\t<div data-slot=\"data-view-footer\" className=\"data-view-shell--footer\">\n\t\t\t\t\t{footer}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</Stack>\n\t);\n}\n\nexport function DataViewToolbar({ leading, search, filters, views, actions, className }: DataViewToolbarProps) {\n\treturn (\n\t\t<div\n\t\t\tdata-component=\"data-view-toolbar\"\n\t\t\tdata-slot=\"data-view-toolbar\"\n\t\t\tclassName={cn(\n\t\t\t\t'data-view-toolbar--component rounded-radius border border-border/70 bg-card p-surface shadow-sm',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t<div className=\"flex min-w-0 flex-col gap-space-lg @2xl/data-view:flex-row @2xl/data-view:items-center @2xl/data-view:justify-between @2xl/data-view:flex-nowrap\">\n\t\t\t\t<Stack\n\t\t\t\t\tdirection=\"horizontal\"\n\t\t\t\t\twrap\n\t\t\t\t\talign=\"center\"\n\t\t\t\t\tgap=\"md\"\n\t\t\t\t\tdata-slot=\"data-view-toolbar-leading\"\n\t\t\t\t\tclassName=\"data-view-toolbar--leading min-w-0 flex-1\"\n\t\t\t\t>\n\t\t\t\t\t{leading}\n\t\t\t\t\t{search}\n\t\t\t\t\t{filters}\n\t\t\t\t\t{views}\n\t\t\t\t</Stack>\n\t\t\t\t{!!actions && (\n\t\t\t\t\t<Stack\n\t\t\t\t\t\tdirection=\"horizontal\"\n\t\t\t\t\t\twrap\n\t\t\t\t\t\talign=\"center\"\n\t\t\t\t\t\tgap=\"md\"\n\t\t\t\t\t\tdata-slot=\"data-view-toolbar-actions\"\n\t\t\t\t\t\tclassName=\"data-view-toolbar--actions shrink-0\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{actions}\n\t\t\t\t\t</Stack>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n\nexport function DataViewTableFrame({\n\ttoolbar,\n\tchildren,\n\tfooter,\n\tclassName,\n\ttoolbarClassName,\n\tcontentClassName,\n\tfooterClassName,\n}: DataViewTableFrameProps) {\n\treturn (\n\t\t<section\n\t\t\tdata-component=\"data-view-table-frame\"\n\t\t\tdata-slot=\"data-view-table-frame\"\n\t\t\tclassName={cn(\n\t\t\t\t'data-view-table-frame--component @container/data-view overflow-hidden rounded-radius border border-border bg-card shadow-[0_1px_3px_0_color-mix(in_oklch,var(--foreground)_4%,transparent)]',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t{!!toolbar && (\n\t\t\t\t<div\n\t\t\t\t\tdata-slot=\"data-view-table-frame-toolbar\"\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t'data-view-table-frame--toolbar border-b border-border/70 px-surface py-surface',\n\t\t\t\t\t\ttoolbarClassName,\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t<Grid columns={1} gap=\"lg\">\n\t\t\t\t\t\t{toolbar}\n\t\t\t\t\t</Grid>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t<div\n\t\t\t\tdata-slot=\"data-view-table-frame-content\"\n\t\t\t\tclassName={cn('data-view-table-frame--content min-w-0', contentClassName)}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</div>\n\t\t\t{!!footer && (\n\t\t\t\t<div\n\t\t\t\t\tdata-slot=\"data-view-table-frame-footer\"\n\t\t\t\t\tclassName={cn('data-view-table-frame--footer border-t border-border/70 px-surface py-row-y', footerClassName)}\n\t\t\t\t>\n\t\t\t\t\t{footer}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</section>\n\t);\n}\n\ninterface DataViewRootProps<TData extends object, TValue> {\n\t/** Records to render. */\n\tdata: readonly TData[];\n\t/** Column definitions, in display order. */\n\tcolumns: DataViewProps<TData, TValue>['columns'];\n\tfiltering?: DataViewFilteringConfig<TData>;\n\ttable?: DataViewTableOptions<TData, TValue>;\n\t/** Replaces individual regions of the shell. */\n\tslots?: DataViewSlots;\n\t/** Merged onto the outermost node. */\n\tclassName?: string;\n}\n\nfunction DataViewRoot<TData extends object, TValue = unknown>({\n\tdata,\n\tcolumns,\n\tfiltering,\n\ttable,\n\tslots,\n\tclassName,\n}: DataViewRootProps<TData, TValue>) {\n\tconst { rows } = useDataView({ data, filtering });\n\tconst resolvedFilterTabs = filtering?.tabs ?? filtering?.layout?.tabs ?? [];\n\tconst filterTabsDisplay = filtering?.tabsDisplay ?? 'tabs';\n\tconst layoutTabs = filterTabsDisplay === 'tabs' ? resolvedFilterTabs : filtering?.layout?.tabs;\n\tconst showAuxiliaryToolbar =\n\t\t!!slots?.toolbarStart ||\n\t\t!!slots?.toolbarAfterFilters ||\n\t\t(filterTabsDisplay === 'select' && resolvedFilterTabs.length > 0);\n\tconst hasIntegratedTopbar = !!filtering || !!slots?.topbarContent || showAuxiliaryToolbar;\n\tconst tableNode = (\n\t\t<DataViewTableFrame\n\t\t\tclassName={cn('data-view--component', className)}\n\t\t\tcontentClassName=\"data-view--content data-view-table--content\"\n\t\t\tfooterClassName=\"data-view--footer data-view-table--footer\"\n\t\t\tfooter={slots?.footer}\n\t\t>\n\t\t\t<DataTable<TData, TValue>\n\t\t\t\t{...table}\n\t\t\t\tcolumns={columns}\n\t\t\t\tdata={rows as TData[]}\n\t\t\t\tsurface=\"flat\"\n\t\t\t\theaderTransparent={false}\n\t\t\t\ttopbarClassName={cn(\n\t\t\t\t\t'data-view--topbar data-view-table--topbar py-surface @2xl/data-table:items-start',\n\t\t\t\t\ttable?.topbarClassName,\n\t\t\t\t)}\n\t\t\t\ttoolbarLabelVisibility={table?.toolbarLabelVisibility ?? 'hidden'}\n\t\t\t\ttopbarContent={\n\t\t\t\t\thasIntegratedTopbar ? (\n\t\t\t\t\t\t<Stack\n\t\t\t\t\t\t\tgap=\"lg\"\n\t\t\t\t\t\t\tdata-slot=\"data-view-topbar-content\"\n\t\t\t\t\t\t\tclassName=\"data-view--topbar-content data-view-table--topbar-content\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{slots?.topbarContent}\n\t\t\t\t\t\t\t{showAuxiliaryToolbar && (\n\t\t\t\t\t\t\t\t<Stack\n\t\t\t\t\t\t\t\t\tdata-slot=\"data-view-toolbar-row\"\n\t\t\t\t\t\t\t\t\tdirection=\"horizontal\"\n\t\t\t\t\t\t\t\t\tgap=\"md\"\n\t\t\t\t\t\t\t\t\tclassName=\"data-view--toolbar-row data-view-table--toolbar-row\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{slots?.toolbarStart}\n\t\t\t\t\t\t\t\t\t{filtering && filterTabsDisplay === 'select' && resolvedFilterTabs.length > 0 && (\n\t\t\t\t\t\t\t\t\t\t<DataViewFilterTabSelect tabs={resolvedFilterTabs} label={filtering.tabsLabel} />\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t{slots?.toolbarAfterFilters}\n\t\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{filtering && (\n\t\t\t\t\t\t\t\t<div data-slot=\"data-view-filters\" className=\"data-view--filters data-view-table--filters min-w-0\">\n\t\t\t\t\t\t\t\t\t<FilterLayout\n\t\t\t\t\t\t\t\t\t\t{...filtering.layout}\n\t\t\t\t\t\t\t\t\t\tvariant={filtering.layout?.variant ?? 'compact'}\n\t\t\t\t\t\t\t\t\t\tshowClearFilters={filtering.layout?.showClearFilters ?? filtering.activeFilters.length > 0}\n\t\t\t\t\t\t\t\t\t\ttabs={layoutTabs}\n\t\t\t\t\t\t\t\t\t\tclassName={cn('min-w-0', filtering.layout?.className)}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t) : undefined\n\t\t\t\t}\n\t\t\t\ttopbarEnd={\n\t\t\t\t\t!!(slots?.toolbarEnd || slots?.topbarEnd) && (\n\t\t\t\t\t\t<div data-slot=\"data-view-topbar-end\" className=\"data-view--topbar-end\">\n\t\t\t\t\t\t\t{slots?.toolbarEnd}\n\t\t\t\t\t\t\t{slots?.topbarEnd}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t/>\n\t\t</DataViewTableFrame>\n\t);\n\n\tif (!filtering) return tableNode;\n\n\treturn (\n\t\t<FilterProvider\n\t\t\tfilters={filtering.filters}\n\t\t\tactiveFilters={filtering.activeFilters}\n\t\t\tonFilterChange={filtering.onFilterChange}\n\t\t\tnavigating={filtering.isFiltering ?? false}\n\t\t\tstrings={filtering.strings}\n\t\t\tonError={filtering.onError}\n\t\t>\n\t\t\t{tableNode}\n\t\t</FilterProvider>\n\t);\n}\n\nexport function DataView<TData extends object, TValue = unknown>({\n\tdata,\n\tcolumns,\n\tfiltering,\n\ttable,\n\tslots,\n\tclassName,\n}: DataViewProps<TData, TValue>) {\n\treturn (\n\t\t<DataViewRoot\n\t\t\tdata={data}\n\t\t\tcolumns={columns}\n\t\t\tfiltering={filtering}\n\t\t\ttable={table}\n\t\t\tslots={slots}\n\t\t\tclassName={className}\n\t\t/>\n\t);\n}\n\nexport function DataViewPagination({\n\tpage,\n\tpageCount,\n\ttotal,\n\tonPageChange,\n\tdisabled = false,\n\tclassName,\n\tstrings: stringsProp,\n}: DataViewPaginationProps) {\n\tconst strings = useStrings(defaultDataViewPaginationStrings, stringsProp);\n\tconst hasPrevious = page > 1;\n\tconst hasNext = pageCount === undefined ? true : page < pageCount;\n\tconst pageLabel = pageCount ? `${strings.page} ${page} / ${pageCount}` : `${strings.page} ${page}`;\n\tconst canChangePage = Boolean(onPageChange) && !disabled;\n\n\treturn (\n\t\t<nav\n\t\t\tdata-component=\"data-view-pagination\"\n\t\t\tdata-slot=\"data-view-pagination\"\n\t\t\tclassName={cn('data-view-pagination--component flex min-w-0 flex-col gap-space-md @md/data-view:flex-row @md/data-view:justify-between', className)}\n\t\t\taria-label={strings.page}\n\t\t>\n\t\t\t<div data-slot=\"data-view-pagination-summary\" className=\"data-view-pagination--summary min-w-0\">\n\t\t\t\t{total !== undefined && total !== null && (\n\t\t\t\t\t<Text size=\"xs\" type=\"secondary\">\n\t\t\t\t\t\t{total}\n\t\t\t\t\t</Text>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t\t<div\n\t\t\t\tdata-slot=\"data-view-pagination-controls\"\n\t\t\t\tclassName=\"data-view-pagination--controls flex shrink-0 items-center gap-space-md\"\n\t\t\t>\n\t\t\t\t<SecondaryValue size=\"xs\" className=\"tabular-nums\" aria-label={pageLabel}>\n\t\t\t\t\t{strings.page} <NumberValue value={page} size=\"xs\" align=\"left\" type=\"secondary\" />\n\t\t\t\t\t{pageCount ? (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t{' / '}\n\t\t\t\t\t\t\t<NumberValue value={pageCount} size=\"xs\" align=\"left\" type=\"secondary\" />\n\t\t\t\t\t\t</>\n\t\t\t\t\t) : null}\n\t\t\t\t</SecondaryValue>\n\t\t\t\t<Button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\tbuttonStyle=\"outline\"\n\t\t\t\t\tdisabled={!canChangePage || !hasPrevious}\n\t\t\t\t\tonClick={() => onPageChange?.(page - 1)}\n\t\t\t\t>\n\t\t\t\t\t{strings.previous}\n\t\t\t\t</Button>\n\t\t\t\t<Button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\tbuttonStyle=\"outline\"\n\t\t\t\t\tdisabled={!canChangePage || !hasNext}\n\t\t\t\t\tonClick={() => onPageChange?.(page + 1)}\n\t\t\t\t>\n\t\t\t\t\t{strings.next}\n\t\t\t\t</Button>\n\t\t\t</div>\n\t\t</nav>\n\t);\n}\n\nexport function SavedViewTabs({ views, value, onValueChange, className }: SavedViewTabsProps) {\n\treturn (\n\t\t<Tabs\n\t\t\tdata-component=\"saved-view-tabs\"\n\t\t\tdata-slot=\"saved-view-tabs\"\n\t\t\tclassName={cn('saved-view-tabs--component rounded-radius bg-muted/60 p-space-xs', className)}\n\t\t\tvalue={value}\n onValueChange={next => { if (typeof next === 'string') onValueChange(next); }}\n\t\t>\n <TabsList role=\"group\" aria-orientation={undefined} activateOnFocus className=\"h-auto! flex-wrap justify-start gap-space-xs bg-transparent p-0\">\n\t\t\t{views.map((view) => {\n\t\t\t\tconst active = view.id === value;\n\t\t\t\treturn (\n\t\t\t\t\t<TabsTrigger\n\t\t\t\t\t\tkey={view.id}\n\t\t\t\t\t\tdata-slot=\"saved-view-tab\"\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\trole=\"button\"\n value={view.id}\n aria-selected={undefined}\n aria-controls={undefined}\n aria-pressed={active}\n\t\t\t\t\t\tdisabled={view.disabled}\n\t\t\t\t\t\tclassName={cn('saved-view-tabs--tab h-action-sm flex-none rounded-radius-md px-control-sm py-0 after:hidden data-active:bg-secondary data-active:text-secondary-foreground data-active:hover:bg-secondary data-active:hover:text-secondary-foreground', active && 'shadow-sm')}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Text tag=\"span\" size=\"inherit\" className=\"truncate text-current\">\n\t\t\t\t\t\t\t{view.label}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t{view.count !== undefined && view.count !== null && (\n\t\t\t\t\t\t\t<Text tag=\"span\" size=\"xs\" type=\"secondary\" className=\"saved-view-tabs--count ml-1\">\n\t\t\t\t\t\t\t\t{view.count}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</TabsTrigger>\n\t\t\t\t);\n\t\t\t})}\n </TabsList>\n\t\t</Tabs>\n\t);\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"data-view.js","names":["_Fragment","NumberValue","Text","Button","Grid","Stack","SecondaryValue","Number$1","TabsTrigger","TabsList","Tabs","PopoverMenu","FilterOperatorEnum","getDefaultOperatorForType","FilterType","useFilters","FilterLayout","FilterProvider","Fragment$1","defaultDataViewPaginationStrings","defaultDataViewFilterTabsLabel","getPathValue","path","current","part","row","stringifyFilterValue","value","collectSearchText","depth","entry","normalizeCandidateValues","stringified","toComparableNumber","next","toComparableDate","dateFormat","formattedDate","parse","isValid","nativeDate","matchesComparableOperator","toComparable","filterConfig","candidateNumbers","candidateValues","filterNumbers","filterValues","operator","candidate","fallbackFilterConfig","key","rowMatchesFilter","filter","haystack","resolvedFilterConfig","getFilterValue","applyDataViewFilters","activeFilters","data","filtersByKey","filters","useDataView","onErrorRef","useRef","filtering","lastReportedResultRef","filterRows","hasFiltering","result","useMemo","error","useEffect","useFilterTabState","nonSearchFilters","searchFilters","activeTab","tab","tabs","active","preset","sortedPreset","sortedActive","index","applyTab","presetFilters","DataViewFilterTabSelect","item","Check","label","ChevronsUpDown","DataViewShell","emptyState","cn","className","header","toolbar","contentClassName","emptySlot","children","footer","DataViewToolbar","leading","search","views","actions","DataViewTableFrame","toolbarClassName","footerClassName","DataViewRoot","resolvedFilterTabs","filterTabsDisplay","layoutTabs","showAuxiliaryToolbar","slots","hasIntegratedTopbar","tableNode","DataTable","table","rows","DataView","DataViewPagination","stringsProp","strings","useStrings","hasPrevious","page","hasNext","pageCount","pageLabel","canChangePage","onPageChange","disabled","total","SavedViewTabs","onValueChange","view"],"sources":["../../src/components/features/data-view/data-view.strings.ts","../../src/components/features/data-view/data-view-filtering.ts","../../src/components/features/data-view/hooks/use-data-view.ts","../../src/components/features/data-view/data-view.tsx"],"sourcesContent":["export interface DataViewPaginationStrings {\n\t/** Current page, 1-based. */\n\tpage: string;\n\tprevious: string;\n\tnext: string;\n}\n\nexport const defaultDataViewPaginationStrings: DataViewPaginationStrings = {\n\tpage: 'Page',\n\tprevious: 'Previous',\n\tnext: 'Next',\n};\n\n/** Default for the directly overrideable `filterTabsLabel` control label. */\nexport const defaultDataViewFilterTabsLabel = 'View';\n","import { isValid, parse } from 'date-fns';\n\nimport {\n\tFilterOperatorEnum,\n\tFilterType,\n\ttype ActiveFilter,\n\ttype FilterConfig,\n} from '../filters';\n\nimport type { DataViewFilterValueGetter } from './data-view.types';\n\nfunction getPathValue(row: unknown, path: string): unknown {\n\tif (!path.includes('.')) {\n\t\treturn row && typeof row === 'object'\n\t\t\t? (row as Record<string, unknown>)[path]\n\t\t\t: undefined;\n\t}\n\n\treturn path.split('.').reduce<unknown>((current, part) => {\n\t\tif (!current || typeof current !== 'object') return undefined;\n\t\treturn (current as Record<string, unknown>)[part];\n\t}, row);\n}\n\nfunction stringifyFilterValue(value: unknown): string {\n\tif (value === null || value === undefined) return '';\n\tif (value instanceof Date) return value.toISOString();\n\tif (typeof value === 'string') return value;\n\tif (typeof value === 'number' || typeof value === 'boolean') return String(value);\n\treturn '';\n}\n\nfunction collectSearchText(value: unknown, depth = 0): string {\n\tif (value === null || value === undefined || depth > 2) return '';\n\tif (value instanceof Date) return value.toISOString();\n\tif (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n\t\treturn String(value);\n\t}\n\tif (Array.isArray(value)) {\n\t\treturn value.map((entry) => collectSearchText(entry, depth + 1)).join(' ');\n\t}\n\tif (typeof value === 'object') {\n\t\treturn Object.values(value as Record<string, unknown>)\n\t\t\t.map((entry) => collectSearchText(entry, depth + 1))\n\t\t\t.join(' ');\n\t}\n\treturn '';\n}\n\nfunction normalizeCandidateValues(value: unknown): string[] {\n\tif (Array.isArray(value)) {\n\t\treturn value.map(stringifyFilterValue).filter(Boolean).map((entry) => entry.toLowerCase());\n\t}\n\n\tconst stringified = stringifyFilterValue(value);\n\treturn stringified ? [stringified.toLowerCase()] : [];\n}\n\nfunction toComparableNumber(value: string): number | undefined {\n\tconst next = Number(value);\n\treturn Number.isFinite(next) ? next : undefined;\n}\n\nfunction toComparableDate(value: string, dateFormat?: string): number | undefined {\n\tif (dateFormat) {\n\t\tconst formattedDate = parse(value, dateFormat, new Date(0));\n\t\tif (isValid(formattedDate)) return formattedDate.getTime();\n\t}\n\n\tconst nativeDate = new Date(value);\n\treturn isValid(nativeDate) ? nativeDate.getTime() : undefined;\n}\n\nfunction matchesComparableOperator(\n\tcandidateValues: string[],\n\tfilterValues: string[],\n\toperator: ActiveFilter['operator'],\n\tfilterConfig?: FilterConfig,\n) {\n\tconst toComparable = filterConfig?.type === FilterType.DATE\n\t\t? (value: string) => toComparableDate(value, filterConfig.dateFormat?.param ?? 'yyyy-MM-dd')\n\t\t: toComparableNumber;\n\tconst candidateNumbers = candidateValues\n\t\t.map(toComparable)\n\t\t.filter((value): value is number => value !== undefined);\n\tconst filterNumbers = filterValues\n\t\t.map(toComparable)\n\t\t.filter((value): value is number => value !== undefined);\n\n\tif (candidateNumbers.length === 0 || filterNumbers.length === 0) return false;\n\n\tswitch (operator) {\n\t\tcase FilterOperatorEnum.GT:\n\t\tcase FilterOperatorEnum.AFTER:\n\t\t\treturn candidateNumbers.some((candidate) => candidate > filterNumbers[0]);\n\t\tcase FilterOperatorEnum.GTE:\n\t\t\treturn candidateNumbers.some((candidate) => candidate >= filterNumbers[0]);\n\t\tcase FilterOperatorEnum.LT:\n\t\tcase FilterOperatorEnum.BEFORE:\n\t\t\treturn candidateNumbers.some((candidate) => candidate < filterNumbers[0]);\n\t\tcase FilterOperatorEnum.LTE:\n\t\t\treturn candidateNumbers.some((candidate) => candidate <= filterNumbers[0]);\n\t\tcase FilterOperatorEnum.BETWEEN:\n\t\t\tif (filterNumbers.length < 2) return false;\n\t\t\treturn candidateNumbers.some((candidate) => candidate >= filterNumbers[0] && candidate <= filterNumbers[1]);\n\t\tdefault:\n\t\t\treturn false;\n\t}\n}\n\nfunction fallbackFilterConfig(key: string): FilterConfig {\n\treturn {\n\t\tkey,\n\t\tlabel: key,\n\t\ttype: FilterType.SEARCH,\n\t\ticon: null,\n\t\tdisplayConfig: {},\n\t};\n}\n\nfunction rowMatchesFilter<TData extends object>(\n\trow: TData,\n\tfilter: ActiveFilter,\n\tfilterConfig: FilterConfig | undefined,\n\tgetFilterValue?: DataViewFilterValueGetter<TData>,\n) {\n\tconst filterValues = filter.value.map((value) => value.trim().toLowerCase()).filter(Boolean);\n\tif (filterValues.length === 0) return true;\n\n\tif (filterConfig?.type === FilterType.SEARCH) {\n\t\tconst haystack = collectSearchText(row).toLowerCase();\n\t\tif (\n\t\t\tfilter.operator === FilterOperatorEnum.NOT ||\n\t\t\tfilter.operator === FilterOperatorEnum.NOT_IN\n\t\t) {\n\t\t\treturn filterValues.every((value) => !haystack.includes(value));\n\t\t}\n\t\treturn filterValues.every((value) => haystack.includes(value));\n\t}\n\n\tconst resolvedFilterConfig = filterConfig ?? fallbackFilterConfig(filter.key);\n\tconst rawValue = getFilterValue?.(row, resolvedFilterConfig) ?? getPathValue(row, filter.key);\n\tconst candidateValues = normalizeCandidateValues(rawValue);\n\tif (candidateValues.length === 0) return false;\n\n\tswitch (filter.operator) {\n\t\tcase FilterOperatorEnum.CONTAINS:\n\t\t\treturn filterValues.every((value) =>\n\t\t\t\tcandidateValues.some((candidate) => candidate.includes(value)),\n\t\t\t);\n\t\tcase FilterOperatorEnum.HAS:\n\t\t\treturn filterValues.every((value) => candidateValues.includes(value));\n\t\tcase FilterOperatorEnum.NOT_IN:\n\t\t\treturn filterValues.every((value) =>\n\t\t\t\tcandidateValues.every((candidate) => candidate !== value),\n\t\t\t);\n\t\tcase FilterOperatorEnum.NOT:\n\t\t\tif (\n\t\t\t\tfilterConfig?.type === FilterType.SELECT ||\n\t\t\t\tfilterConfig?.type === FilterType.MULTI_SELECT ||\n\t\t\t\tfilterConfig?.type === FilterType.ASYNC_SELECT\n\t\t\t) {\n\t\t\t\treturn filterValues.every((value) =>\n\t\t\t\t\tcandidateValues.every((candidate) => candidate !== value),\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn filterValues.every((value) =>\n\t\t\t\tcandidateValues.every((candidate) => !candidate.includes(value)),\n\t\t\t);\n\t\tcase FilterOperatorEnum.IN:\n\t\tcase FilterOperatorEnum.EQUALS:\n\t\tcase FilterOperatorEnum.HAS_ANY:\n\t\t\treturn filterValues.some((value) => candidateValues.includes(value));\n\t\tcase FilterOperatorEnum.HAS_ALL:\n\t\t\treturn filterValues.every((value) => candidateValues.includes(value));\n\t\tcase FilterOperatorEnum.GT:\n\t\tcase FilterOperatorEnum.GTE:\n\t\tcase FilterOperatorEnum.LT:\n\t\tcase FilterOperatorEnum.LTE:\n\t\tcase FilterOperatorEnum.BEFORE:\n\t\tcase FilterOperatorEnum.AFTER:\n\t\tcase FilterOperatorEnum.BETWEEN:\n\t\t\treturn matchesComparableOperator(\n\t\t\t\tcandidateValues,\n\t\t\t\tfilterValues,\n\t\t\t\tfilter.operator,\n\t\t\t\tfilterConfig,\n\t\t\t);\n\t\tdefault:\n\t\t\treturn filterValues.some((value) => candidateValues.includes(value));\n\t}\n}\n\nexport function applyDataViewFilters<TData extends object>(\n\tdata: readonly TData[],\n\tactiveFilters: readonly ActiveFilter[],\n\tfilters: readonly FilterConfig[],\n\tgetFilterValue?: DataViewFilterValueGetter<TData>,\n): readonly TData[] {\n\tif (activeFilters.length === 0) return data;\n\n\tconst filtersByKey = new Map(filters.map((filter) => [filter.key, filter]));\n\treturn data.filter((row) =>\n\t\tactiveFilters.every((filter) =>\n\t\t\trowMatchesFilter(row, filter, filtersByKey.get(filter.key), getFilterValue),\n\t\t),\n\t);\n}\n","import { useEffect, useMemo, useRef } from 'react';\n\nimport { applyDataViewFilters } from '../data-view-filtering';\nimport type {\n\tUseDataViewOptions,\n\tUseDataViewResult,\n} from '../data-view.types';\n\nexport function useDataView<TData extends object>({\n\tdata,\n\tfiltering,\n}: UseDataViewOptions<TData>): UseDataViewResult<TData> {\n\tconst onErrorRef = useRef(filtering?.onError);\n\tonErrorRef.current = filtering?.onError;\n\tconst lastReportedResultRef = useRef<UseDataViewResult<TData> | null>(null);\n\tconst activeFilters = filtering?.activeFilters;\n\tconst filterRows = filtering?.filterRows;\n\tconst filters = filtering?.filters;\n\tconst getFilterValue = filtering?.getFilterValue;\n\tconst hasFiltering = filtering !== undefined;\n\n\tconst result = useMemo<UseDataViewResult<TData>>(() => {\n\t\tif (!hasFiltering || !activeFilters || !filters) {\n\t\t\treturn { rows: data, error: null, failed: false };\n\t\t}\n\n\t\ttry {\n\t\t\treturn {\n\t\t\t\trows: filterRows\n\t\t\t\t\t? filterRows({\n\t\t\t\t\t\tdata,\n\t\t\t\t\t\tactiveFilters,\n\t\t\t\t\t\tfilters,\n\t\t\t\t\t})\n\t\t\t\t\t: applyDataViewFilters(\n\t\t\t\t\t\tdata,\n\t\t\t\t\t\tactiveFilters,\n\t\t\t\t\t\tfilters,\n\t\t\t\t\t\tgetFilterValue,\n\t\t\t\t\t),\n\t\t\t\terror: null,\n\t\t\t\tfailed: false,\n\t\t\t};\n\t\t} catch (error) {\n\t\t\treturn { rows: data, error, failed: true };\n\t\t}\n\t}, [\n\t\tactiveFilters,\n\t\tdata,\n\t\tfilterRows,\n\t\tfilters,\n\t\tgetFilterValue,\n\t\thasFiltering,\n\t]);\n\n\tuseEffect(() => {\n\t\tif (!result.failed) {\n\t\t\tlastReportedResultRef.current = null;\n\t\t\treturn;\n\t\t}\n\t\tif (lastReportedResultRef.current === result) return;\n\t\tlastReportedResultRef.current = result;\n\t\tonErrorRef.current?.(result.error, { phase: 'apply' });\n\t}, [result]);\n\n\treturn result;\n}\n","import { Tabs, TabsList, TabsTrigger } from '../../base/navigation/tabs';\n/** DataView feature chrome — controlled shells for tables, filters, and saved views. */\nimport { useMemo } from 'react';\nimport { Check, ChevronsUpDown } from 'lucide-react';\n\nimport { Button } from '../../base/buttons';\nimport { PopoverMenu } from '../../base/popover-menu';\nimport { Grid, Stack } from '../../base/structure';\nimport { DataTable } from '../table';\nimport { Number as NumberValue, SecondaryValue } from '../../primitives';\nimport {\n\tFilterLayout,\n\tFilterOperatorEnum,\n\tFilterProvider,\n\tFilterType,\n\ttype ActiveFilter,\n\ttype FilterTab,\n\tgetDefaultOperatorForType,\n\tuseFilters,\n} from '../filters';\nimport { Text } from '../../typography';\nimport { useStrings } from '../../../lib/strings';\nimport { cn } from '../../../lib/utils';\n\nimport { defaultDataViewFilterTabsLabel, defaultDataViewPaginationStrings } from './data-view.strings';\nimport { useDataView } from './hooks';\nimport type {\n\tDataViewFilteringConfig,\n\tDataViewPaginationProps,\n\tDataViewProps,\n\tDataViewShellProps,\n\tDataViewSlots,\n\tDataViewTableOptions,\n\tDataViewTableFrameProps,\n\tDataViewToolbarProps,\n\tSavedViewTabsProps,\n} from './data-view.types';\n\nfunction useFilterTabState(tabs: readonly FilterTab[]) {\n\tconst { activeFilters, filters, replaceFilters } = useFilters();\n\tconst nonSearchFilters = useMemo(\n\t\t() =>\n\t\t\tactiveFilters.filter((filter) => {\n\t\t\t\tconst config = filters.find((candidate) => candidate.key === filter.key);\n\t\t\t\treturn config?.type !== FilterType.SEARCH;\n\t\t\t}),\n\t\t[activeFilters, filters],\n\t);\n\tconst searchFilters = useMemo(\n\t\t() =>\n\t\t\tactiveFilters.filter((filter) => {\n\t\t\t\tconst config = filters.find((candidate) => candidate.key === filter.key);\n\t\t\t\treturn config?.type === FilterType.SEARCH;\n\t\t\t}),\n\t\t[activeFilters, filters],\n\t);\n\tconst activeTab = useMemo(() => {\n\t\tfor (const tab of tabs) {\n\t\t\tif (tab.presets.length === 0) {\n\t\t\t\tif (nonSearchFilters.length === 0) return tab;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (tab.presets.length !== nonSearchFilters.length) continue;\n\n\t\t\tconst allMatch = tab.presets.every((preset) => {\n\t\t\t\tconst active = nonSearchFilters.find((filter) => filter.key === preset.key);\n\t\t\t\tif (!active) return false;\n\n\t\t\t\tconst sortedPreset = [...preset.value].sort();\n\t\t\t\tconst sortedActive = [...active.value].sort();\n\t\t\t\tif (sortedPreset.length !== sortedActive.length) return false;\n\t\t\t\tif (sortedPreset.some((value, index) => value !== sortedActive[index])) return false;\n\n\t\t\t\treturn !preset.operator || active.operator === preset.operator;\n\t\t\t});\n\n\t\t\tif (allMatch) return tab;\n\t\t}\n\n\t\treturn undefined;\n\t}, [nonSearchFilters, tabs]);\n\n\tfunction applyTab(tab: FilterTab) {\n\t\tif (tab.presets.length === 0) {\n\t\t\treplaceFilters([...searchFilters]);\n\t\t\treturn;\n\t\t}\n\n\t\tconst presetFilters: ActiveFilter[] = tab.presets.map((preset) => {\n\t\t\tconst filterConfig = filters.find((filter) => filter.key === preset.key);\n\t\t\tconst operator =\n\t\t\t\tpreset.operator ??\n\t\t\t\tfilterConfig?.operator ??\n\t\t\t\t(filterConfig ? getDefaultOperatorForType(filterConfig.type) : FilterOperatorEnum.EQUALS);\n\n\t\t\treturn {\n\t\t\t\tid: preset.key,\n\t\t\t\tkey: preset.key,\n\t\t\t\tvalue: preset.value,\n\t\t\t\toperator,\n\t\t\t};\n\t\t});\n\n\t\treplaceFilters([...searchFilters, ...presetFilters]);\n\t}\n\n\treturn { activeTab, applyTab };\n}\n\nfunction DataViewFilterTabSelect({\n\ttabs,\n\tlabel = defaultDataViewFilterTabsLabel,\n}: {\n\t/** Tabs to offer, in display order. */\n\ttabs: readonly FilterTab[];\n\t/** Display label. */\n\tlabel?: string;\n}) {\n\tconst { activeTab, applyTab } = useFilterTabState(tabs);\n\tif (tabs.length === 0) return null;\n\n\treturn (\n\t\t<PopoverMenu\n\t\t\tsearch={false}\n\t\t\tcontentClassName=\"w-48\"\n\t\t\titems={tabs.map((tab) => ({\n\t\t\t\tvalue: tab.id,\n\t\t\t\tlabel: tab.label,\n\t\t\t\tdescription: tab.count === undefined ? undefined : String(tab.count),\n\t\t\t\tselected: tab.id === activeTab?.id,\n\t\t\t\tdata: tab,\n\t\t\t}))}\n\t\t\tonSelect={(item) => {\n\t\t\t\tif (item.data) applyTab(item.data);\n\t\t\t}}\n\t\t\trenderItem={(item) => (\n\t\t\t\t<>\n\t\t\t\t\t<span className=\"flex size-icon-sm shrink-0 items-center justify-center\">\n\t\t\t\t\t\t{!!item.selected && <Check className=\"size-icon-sm\" aria-hidden=\"true\" />}\n\t\t\t\t\t</span>\n\t\t\t\t\t<Text tag=\"span\" weight={item.selected ? 'medium' : 'regular'} className=\"min-w-0 flex-1 truncate\">\n\t\t\t\t\t\t{item.label}\n\t\t\t\t\t</Text>\n\t\t\t\t\t{!!item.description && (\n\t\t\t\t\t\t<SecondaryValue size=\"xs\" className=\"tabular-nums\">\n\t\t\t\t\t\t\t{item.description}\n\t\t\t\t\t\t</SecondaryValue>\n\t\t\t\t\t)}\n\t\t\t\t</>\n\t\t\t)}\n\t\t\ttrigger={\n\t\t\t\t<Button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\tclassName=\"h-action-sm px-control-sm\"\n\t\t\t\t\taria-label={label}\n\t\t\t\t>\n\t\t\t\t\t<Text tag=\"span\" size=\"inherit\" className=\"truncate text-current\">\n\t\t\t\t\t\t{activeTab?.label ?? label}\n\t\t\t\t\t</Text>\n\t\t\t\t\t<ChevronsUpDown className=\"size-icon-sm\" aria-hidden=\"true\" />\n\t\t\t\t</Button>\n\t\t\t}\n\t\t/>\n\t);\n}\n\nexport function DataViewShell({\n\tchildren,\n\theader,\n\ttoolbar,\n\tfooter,\n\temptySlot,\n\tempty: emptyState = false,\n\tclassName,\n\tcontentClassName,\n}: DataViewShellProps) {\n\treturn (\n\t\t<Stack\n\t\t\trender={<section />}\n\t\t\tgap=\"lg\"\n\t\t\tdata-component=\"data-view-shell\"\n\t\t\tdata-slot=\"data-view-shell\"\n\t\t\tclassName={cn('data-view-shell--component @container/data-view', className)}\n\t\t>\n\t\t\t{!!header && (\n\t\t\t\t<div data-slot=\"data-view-header\" className=\"data-view-shell--header\">\n\t\t\t\t\t{header}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t{!!toolbar && (\n\t\t\t\t<div data-slot=\"data-view-toolbar-slot\" className=\"data-view-shell--toolbar\">\n\t\t\t\t\t{toolbar}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t<div data-slot=\"data-view-content\" className={cn('data-view-shell--content min-w-0', contentClassName)}>\n\t\t\t\t{emptyState ? emptySlot : children}\n\t\t\t</div>\n\t\t\t{!!footer && (\n\t\t\t\t<div data-slot=\"data-view-footer\" className=\"data-view-shell--footer\">\n\t\t\t\t\t{footer}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</Stack>\n\t);\n}\n\nexport function DataViewToolbar({ leading, search, filters, views, actions, className }: DataViewToolbarProps) {\n\treturn (\n\t\t<div\n\t\t\tdata-component=\"data-view-toolbar\"\n\t\t\tdata-slot=\"data-view-toolbar\"\n\t\t\tclassName={cn(\n\t\t\t\t'data-view-toolbar--component rounded-radius border border-border/70 bg-card p-surface shadow-sm',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t<div className=\"flex min-w-0 flex-col gap-space-lg @2xl/data-view:flex-row @2xl/data-view:items-center @2xl/data-view:justify-between @2xl/data-view:flex-nowrap\">\n\t\t\t\t<Stack\n\t\t\t\t\tdirection=\"horizontal\"\n\t\t\t\t\twrap\n\t\t\t\t\talign=\"center\"\n\t\t\t\t\tgap=\"md\"\n\t\t\t\t\tdata-slot=\"data-view-toolbar-leading\"\n\t\t\t\t\tclassName=\"data-view-toolbar--leading min-w-0 flex-1\"\n\t\t\t\t>\n\t\t\t\t\t{leading}\n\t\t\t\t\t{search}\n\t\t\t\t\t{filters}\n\t\t\t\t\t{views}\n\t\t\t\t</Stack>\n\t\t\t\t{!!actions && (\n\t\t\t\t\t<Stack\n\t\t\t\t\t\tdirection=\"horizontal\"\n\t\t\t\t\t\twrap\n\t\t\t\t\t\talign=\"center\"\n\t\t\t\t\t\tgap=\"md\"\n\t\t\t\t\t\tdata-slot=\"data-view-toolbar-actions\"\n\t\t\t\t\t\tclassName=\"data-view-toolbar--actions shrink-0\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{actions}\n\t\t\t\t\t</Stack>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n\nexport function DataViewTableFrame({\n\ttoolbar,\n\tchildren,\n\tfooter,\n\tclassName,\n\ttoolbarClassName,\n\tcontentClassName,\n\tfooterClassName,\n}: DataViewTableFrameProps) {\n\treturn (\n\t\t<section\n\t\t\tdata-component=\"data-view-table-frame\"\n\t\t\tdata-slot=\"data-view-table-frame\"\n\t\t\tclassName={cn(\n\t\t\t\t'data-view-table-frame--component @container/data-view overflow-hidden rounded-radius border border-border bg-card shadow-[0_1px_3px_0_color-mix(in_oklch,var(--foreground)_4%,transparent)]',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t{!!toolbar && (\n\t\t\t\t<div\n\t\t\t\t\tdata-slot=\"data-view-table-frame-toolbar\"\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t'data-view-table-frame--toolbar border-b border-border/70 px-surface py-surface',\n\t\t\t\t\t\ttoolbarClassName,\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t<Grid columns={1} gap=\"lg\">\n\t\t\t\t\t\t{toolbar}\n\t\t\t\t\t</Grid>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t<div\n\t\t\t\tdata-slot=\"data-view-table-frame-content\"\n\t\t\t\tclassName={cn('data-view-table-frame--content min-w-0', contentClassName)}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</div>\n\t\t\t{!!footer && (\n\t\t\t\t<div\n\t\t\t\t\tdata-slot=\"data-view-table-frame-footer\"\n\t\t\t\t\tclassName={cn('data-view-table-frame--footer border-t border-border/70 px-surface py-row-y', footerClassName)}\n\t\t\t\t>\n\t\t\t\t\t{footer}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</section>\n\t);\n}\n\ninterface DataViewRootProps<TData extends object, TValue> {\n\t/** Records to render. */\n\tdata: readonly TData[];\n\t/** Column definitions, in display order. */\n\tcolumns: DataViewProps<TData, TValue>['columns'];\n\tfiltering?: DataViewFilteringConfig<TData>;\n\ttable?: DataViewTableOptions<TData, TValue>;\n\t/** Replaces individual regions of the shell. */\n\tslots?: DataViewSlots;\n\t/** Merged onto the outermost node. */\n\tclassName?: string;\n}\n\nfunction DataViewRoot<TData extends object, TValue = unknown>({\n\tdata,\n\tcolumns,\n\tfiltering,\n\ttable,\n\tslots,\n\tclassName,\n}: DataViewRootProps<TData, TValue>) {\n\tconst { rows } = useDataView({ data, filtering });\n\tconst resolvedFilterTabs = filtering?.tabs ?? filtering?.layout?.tabs ?? [];\n\tconst filterTabsDisplay = filtering?.tabsDisplay ?? 'tabs';\n\tconst layoutTabs = filterTabsDisplay === 'tabs' ? resolvedFilterTabs : filtering?.layout?.tabs;\n\tconst showAuxiliaryToolbar =\n\t\t!!slots?.toolbarStart ||\n\t\t!!slots?.toolbarAfterFilters ||\n\t\t(filterTabsDisplay === 'select' && resolvedFilterTabs.length > 0);\n\tconst hasIntegratedTopbar = !!filtering || !!slots?.topbarContent || showAuxiliaryToolbar;\n\tconst tableNode = (\n\t\t<DataViewTableFrame\n\t\t\tclassName={cn('data-view--component', className)}\n\t\t\tcontentClassName=\"data-view--content data-view-table--content\"\n\t\t\tfooterClassName=\"data-view--footer data-view-table--footer\"\n\t\t\tfooter={slots?.footer}\n\t\t>\n\t\t\t<DataTable<TData, TValue>\n\t\t\t\t{...table}\n\t\t\t\tcolumns={columns}\n\t\t\t\tdata={rows as TData[]}\n\t\t\t\tsurface=\"flat\"\n\t\t\t\theaderTransparent={false}\n\t\t\t\ttopbarClassName={cn(\n\t\t\t\t\t'data-view--topbar data-view-table--topbar py-surface @2xl/data-table:items-start',\n\t\t\t\t\ttable?.topbarClassName,\n\t\t\t\t)}\n\t\t\t\ttoolbarLabelVisibility={table?.toolbarLabelVisibility ?? 'hidden'}\n\t\t\t\ttopbarContent={\n\t\t\t\t\thasIntegratedTopbar ? (\n\t\t\t\t\t\t<Stack\n\t\t\t\t\t\t\tgap=\"lg\"\n\t\t\t\t\t\t\tdata-slot=\"data-view-topbar-content\"\n\t\t\t\t\t\t\tclassName=\"data-view--topbar-content data-view-table--topbar-content\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{slots?.topbarContent}\n\t\t\t\t\t\t\t{showAuxiliaryToolbar && (\n\t\t\t\t\t\t\t\t<Stack\n\t\t\t\t\t\t\t\t\tdata-slot=\"data-view-toolbar-row\"\n\t\t\t\t\t\t\t\t\tdirection=\"horizontal\"\n\t\t\t\t\t\t\t\t\tgap=\"md\"\n\t\t\t\t\t\t\t\t\tclassName=\"data-view--toolbar-row data-view-table--toolbar-row\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{slots?.toolbarStart}\n\t\t\t\t\t\t\t\t\t{filtering && filterTabsDisplay === 'select' && resolvedFilterTabs.length > 0 && (\n\t\t\t\t\t\t\t\t\t\t<DataViewFilterTabSelect tabs={resolvedFilterTabs} label={filtering.tabsLabel} />\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t{slots?.toolbarAfterFilters}\n\t\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{filtering && (\n\t\t\t\t\t\t\t\t<div data-slot=\"data-view-filters\" className=\"data-view--filters data-view-table--filters min-w-0\">\n\t\t\t\t\t\t\t\t\t<FilterLayout\n\t\t\t\t\t\t\t\t\t\t{...filtering.layout}\n\t\t\t\t\t\t\t\t\t\tvariant={filtering.layout?.variant ?? 'compact'}\n\t\t\t\t\t\t\t\t\t\tshowClearFilters={filtering.layout?.showClearFilters ?? filtering.activeFilters.length > 0}\n\t\t\t\t\t\t\t\t\t\ttabs={layoutTabs}\n\t\t\t\t\t\t\t\t\t\tclassName={cn('min-w-0', filtering.layout?.className)}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t) : undefined\n\t\t\t\t}\n\t\t\t\ttopbarEnd={\n\t\t\t\t\t!!(slots?.toolbarEnd || slots?.topbarEnd) && (\n\t\t\t\t\t\t<div data-slot=\"data-view-topbar-end\" className=\"data-view--topbar-end\">\n\t\t\t\t\t\t\t{slots?.toolbarEnd}\n\t\t\t\t\t\t\t{slots?.topbarEnd}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t/>\n\t\t</DataViewTableFrame>\n\t);\n\n\tif (!filtering) return tableNode;\n\n\treturn (\n\t\t<FilterProvider\n\t\t\tfilters={filtering.filters}\n\t\t\tactiveFilters={filtering.activeFilters}\n\t\t\tonFilterChange={filtering.onFilterChange}\n\t\t\tnavigating={filtering.isFiltering ?? false}\n\t\t\tstrings={filtering.strings}\n\t\t\tonError={filtering.onError}\n\t\t>\n\t\t\t{tableNode}\n\t\t</FilterProvider>\n\t);\n}\n\nexport function DataView<TData extends object, TValue = unknown>({\n\tdata,\n\tcolumns,\n\tfiltering,\n\ttable,\n\tslots,\n\tclassName,\n}: DataViewProps<TData, TValue>) {\n\treturn (\n\t\t<DataViewRoot\n\t\t\tdata={data}\n\t\t\tcolumns={columns}\n\t\t\tfiltering={filtering}\n\t\t\ttable={table}\n\t\t\tslots={slots}\n\t\t\tclassName={className}\n\t\t/>\n\t);\n}\n\nexport function DataViewPagination({\n\tpage,\n\tpageCount,\n\ttotal,\n\tonPageChange,\n\tdisabled = false,\n\tclassName,\n\tstrings: stringsProp,\n}: DataViewPaginationProps) {\n\tconst strings = useStrings(defaultDataViewPaginationStrings, stringsProp);\n\tconst hasPrevious = page > 1;\n\tconst hasNext = pageCount === undefined ? true : page < pageCount;\n\tconst pageLabel = pageCount ? `${strings.page} ${page} / ${pageCount}` : `${strings.page} ${page}`;\n\tconst canChangePage = Boolean(onPageChange) && !disabled;\n\n\treturn (\n\t\t<nav\n\t\t\tdata-component=\"data-view-pagination\"\n\t\t\tdata-slot=\"data-view-pagination\"\n\t\t\tclassName={cn('data-view-pagination--component flex min-w-0 flex-col gap-space-md @md/data-view:flex-row @md/data-view:justify-between', className)}\n\t\t\taria-label={strings.page}\n\t\t>\n\t\t\t<div data-slot=\"data-view-pagination-summary\" className=\"data-view-pagination--summary min-w-0\">\n\t\t\t\t{total !== undefined && total !== null && (\n\t\t\t\t\t<Text size=\"xs\" type=\"secondary\">\n\t\t\t\t\t\t{total}\n\t\t\t\t\t</Text>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t\t<div\n\t\t\t\tdata-slot=\"data-view-pagination-controls\"\n\t\t\t\tclassName=\"data-view-pagination--controls flex shrink-0 items-center gap-space-md\"\n\t\t\t>\n\t\t\t\t<SecondaryValue size=\"xs\" className=\"tabular-nums\" aria-label={pageLabel}>\n\t\t\t\t\t{strings.page} <NumberValue value={page} size=\"xs\" align=\"left\" type=\"secondary\" />\n\t\t\t\t\t{pageCount ? (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t{' / '}\n\t\t\t\t\t\t\t<NumberValue value={pageCount} size=\"xs\" align=\"left\" type=\"secondary\" />\n\t\t\t\t\t\t</>\n\t\t\t\t\t) : null}\n\t\t\t\t</SecondaryValue>\n\t\t\t\t<Button\n\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\tbuttonStyle=\"outline\"\n\t\t\t\t\tdisabled={!canChangePage || !hasPrevious}\n\t\t\t\t\tonClick={() => onPageChange?.(page - 1)}\n\t\t\t\t>\n\t\t\t\t\t{strings.previous}\n\t\t\t\t</Button>\n\t\t\t\t<Button\n\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\tbuttonStyle=\"outline\"\n\t\t\t\t\tdisabled={!canChangePage || !hasNext}\n\t\t\t\t\tonClick={() => onPageChange?.(page + 1)}\n\t\t\t\t>\n\t\t\t\t\t{strings.next}\n\t\t\t\t</Button>\n\t\t\t</div>\n\t\t</nav>\n\t);\n}\n\nexport function SavedViewTabs({ views, value, onValueChange, className }: SavedViewTabsProps) {\n\treturn (\n\t\t<Tabs\n\t\t\tdata-component=\"saved-view-tabs\"\n\t\t\tdata-slot=\"saved-view-tabs\"\n\t\t\tclassName={cn('saved-view-tabs--component rounded-radius bg-muted/60 p-space-xs', className)}\n\t\t\tvalue={value}\n onValueChange={next => { if (typeof next === 'string') onValueChange(next); }}\n\t\t>\n <TabsList role=\"group\" aria-orientation={undefined} activateOnFocus className=\"h-auto! flex-wrap justify-start gap-space-xs bg-transparent p-0\">\n\t\t\t{views.map((view) => {\n\t\t\t\tconst active = view.id === value;\n\t\t\t\treturn (\n\t\t\t\t\t<TabsTrigger\n\t\t\t\t\t\tkey={view.id}\n\t\t\t\t\t\tdata-slot=\"saved-view-tab\"\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\trole=\"button\"\n value={view.id}\n aria-selected={undefined}\n aria-controls={undefined}\n aria-pressed={active}\n\t\t\t\t\t\tdisabled={view.disabled}\n\t\t\t\t\t\tclassName={cn('saved-view-tabs--tab h-action-sm flex-none gap-space-xs rounded-inner px-control-sm py-0 after:hidden data-active:bg-secondary data-active:text-secondary-foreground data-active:hover:bg-secondary data-active:hover:text-secondary-foreground', active && 'shadow-sm')}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Text tag=\"span\" size=\"inherit\" className=\"truncate text-current\">\n\t\t\t\t\t\t\t{view.label}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t{view.count !== undefined && view.count !== null && (\n\t\t\t\t\t\t\t<Text tag=\"span\" size=\"xs\" type=\"secondary\" className=\"saved-view-tabs--count\">\n\t\t\t\t\t\t\t\t{view.count}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</TabsTrigger>\n\t\t\t\t);\n\t\t\t})}\n </TabsList>\n\t\t</Tabs>\n\t);\n}\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import { a as e, c as t, i as n, o as r, r as i, s as a, t as o, u as s } from "../../http-CLTVJc5I.js";
1
+ import { a as e, c as t, i as n, o as r, r as i, s as a, t as o, u as s } from "../../http-CdEIHyQf.js";
2
2
  export { t as bodyHtml, o as createHttpSender, s as defaultEmailComposerStrings, i as parseRecipient, n as recipientLabel, e as renderEmail, r as resolveValues, a as validate };