themelia-react-ui 2.0.4 → 2.0.5

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 (588) hide show
  1. package/CHANGELOG.md +135 -0
  2. package/README.md +113 -18
  3. package/dist/{accordion-96o0pN62.js → accordion-B9MHG0cT.js} +11 -11
  4. package/dist/accordion-B9MHG0cT.js.map +1 -0
  5. package/dist/{action-menu-CHgs8vmj.js → action-menu-Dr8K-ghE.js} +48 -45
  6. package/dist/action-menu-Dr8K-ghE.js.map +1 -0
  7. package/dist/{affordance-geometry.generated-B8yGOr8-.js → affordance-geometry.generated-P-aVJisu.js} +36 -36
  8. package/dist/affordance-geometry.generated-P-aVJisu.js.map +1 -0
  9. package/dist/{ai-artifact-BZUGwBq6.js → ai-artifact-C58tQcBy.js} +210 -174
  10. package/dist/ai-artifact-C58tQcBy.js.map +1 -0
  11. package/dist/app-shell-B_IuNWOo.js +321 -0
  12. package/dist/app-shell-B_IuNWOo.js.map +1 -0
  13. package/dist/{attachment-DkoqHPPl.js → attachment-Dg_69lPS.js} +9 -9
  14. package/dist/{attachment-DkoqHPPl.js.map → attachment-Dg_69lPS.js.map} +1 -1
  15. package/dist/{auth-D2FVZ1MH.js → auth-DTkkshS8.js} +43 -46
  16. package/dist/auth-DTkkshS8.js.map +1 -0
  17. package/dist/{avatar-DWO_HHhB.js → avatar-CeZaFmNH.js} +8 -8
  18. package/dist/avatar-CeZaFmNH.js.map +1 -0
  19. package/dist/{badge-DErMA7ul.js → badge-xIiV_E7f.js} +5 -5
  20. package/dist/{badge-DErMA7ul.js.map → badge-xIiV_E7f.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/batch-action-bar.js +1 -1
  27. package/dist/base/buttons.js +1 -1
  28. package/dist/base/cards.js +2 -2
  29. package/dist/base/carousel.js +3 -3
  30. package/dist/base/cascader.js +2 -372
  31. package/dist/base/chart.js +1 -1
  32. package/dist/base/choice-inputs.js +2 -2
  33. package/dist/base/code-block.js +1 -1
  34. package/dist/base/combobox.js +2 -2
  35. package/dist/base/command.js +1 -1
  36. package/dist/base/copyable.js +1 -1
  37. package/dist/base/date-pickers.js +2 -2
  38. package/dist/base/display.js +6 -6
  39. package/dist/base/feedback.js +3 -3
  40. package/dist/base/forms-numeric.js +1 -1
  41. package/dist/base/forms.js +2 -2
  42. package/dist/base/inline-edit.js +10 -10
  43. package/dist/base/item.js +1 -1
  44. package/dist/base/media-gallery.js +1 -1
  45. package/dist/base/metadata-list.js +1 -1
  46. package/dist/base/navigation.js +7 -7
  47. package/dist/base/popover-menu.js +1 -1
  48. package/dist/base/popover.js +1 -1
  49. package/dist/base/qr-code.js +1 -1
  50. package/dist/base/repeaters.js +12 -12
  51. package/dist/base/repeaters.js.map +1 -1
  52. package/dist/base/sheet.js +1 -1
  53. package/dist/base/sidebar.js +2 -2
  54. package/dist/base/signature-pad.js +7 -7
  55. package/dist/base/signature-pad.js.map +1 -1
  56. package/dist/base/skeleton.js +1 -1
  57. package/dist/base/spinner.js +4 -4
  58. package/dist/base/structure.js +1 -1
  59. package/dist/base/table.js +1 -1
  60. package/dist/base/text-inputs.js +2 -2
  61. package/dist/base/toaster.js +36 -36
  62. package/dist/base/toaster.js.map +1 -1
  63. package/dist/base/tree.js +1 -1
  64. package/dist/base/upload-queue.js +1 -1
  65. package/dist/base/upload.js +3 -3
  66. package/dist/base/value-inputs.js +1 -1
  67. package/dist/{batch-action-bar-CdfIkCsV.js → batch-action-bar-Cb8cuvyy.js} +6 -6
  68. package/dist/batch-action-bar-Cb8cuvyy.js.map +1 -0
  69. package/dist/blocks/admin.js +21 -21
  70. package/dist/blocks/admin.js.map +1 -1
  71. package/dist/blocks/ai.js +230 -216
  72. package/dist/blocks/ai.js.map +1 -1
  73. package/dist/blocks/analytics/usage-card.js +1 -1
  74. package/dist/blocks/analytics.js +325 -306
  75. package/dist/blocks/analytics.js.map +1 -1
  76. package/dist/blocks/collaboration.js +1 -1
  77. package/dist/blocks/commerce/receipt.js +1 -1
  78. package/dist/blocks/commerce.js +1259 -1184
  79. package/dist/blocks/commerce.js.map +1 -1
  80. package/dist/blocks/data-display.js +2 -2
  81. package/dist/blocks/onboarding.js +6 -6
  82. package/dist/blocks/onboarding.js.map +1 -1
  83. package/dist/blocks/planning.js +11 -11
  84. package/dist/blocks/timelines.js +1 -1
  85. package/dist/{breadcrumbs-B-WFKecD.js → breadcrumbs-J-K2kl4c.js} +6 -6
  86. package/dist/{breadcrumbs-B-WFKecD.js.map → breadcrumbs-J-K2kl4c.js.map} +1 -1
  87. package/dist/{button-DkmK-z8E.js → button-S2Cubiiz.js} +3 -3
  88. package/dist/button-S2Cubiiz.js.map +1 -0
  89. package/dist/{buttons-BbfzgczK.js → buttons-BedGfygC.js} +16 -16
  90. package/dist/buttons-BedGfygC.js.map +1 -0
  91. package/dist/cards-rNX1M4Xn.js +69 -0
  92. package/dist/cards-rNX1M4Xn.js.map +1 -0
  93. package/dist/cascader-B1MiqkBq.js +439 -0
  94. package/dist/cascader-B1MiqkBq.js.map +1 -0
  95. package/dist/chart-Darg_0Kv.js +162 -0
  96. package/dist/chart-Darg_0Kv.js.map +1 -0
  97. package/dist/{checkbox-CzYUTPeJ.js → checkbox-fflqmODR.js} +2 -2
  98. package/dist/{checkbox-CzYUTPeJ.js.map → checkbox-fflqmODR.js.map} +1 -1
  99. package/dist/{choice-inputs-JLtij2y4.js → choice-inputs-zUgBZfE4.js} +258 -257
  100. package/dist/choice-inputs-zUgBZfE4.js.map +1 -0
  101. package/dist/{code-block-CGNaUtAE.js → code-block-BzmM9Eig.js} +8 -8
  102. package/dist/code-block-BzmM9Eig.js.map +1 -0
  103. package/dist/{collapsible-Do4G0zcC.js → collapsible-BkAI_XD4.js} +5 -5
  104. package/dist/{collapsible-Do4G0zcC.js.map → collapsible-BkAI_XD4.js.map} +1 -1
  105. package/dist/{collection-content-C0e8SsTm.js → collection-content-gDh1v6O4.js} +3 -3
  106. package/dist/{collection-content-C0e8SsTm.js.map → collection-content-gDh1v6O4.js.map} +1 -1
  107. package/dist/combobox-BEx0vJgF.js +362 -0
  108. package/dist/combobox-BEx0vJgF.js.map +1 -0
  109. package/dist/{combobox-CBJDs6w_.js → combobox-BwzoXFSG.js} +254 -247
  110. package/dist/combobox-BwzoXFSG.js.map +1 -0
  111. package/dist/{command-D8NrBj-b.js → command-CrlPIL6m.js} +11 -11
  112. package/dist/command-CrlPIL6m.js.map +1 -0
  113. package/dist/{comments-Di4w0H_S.js → comments-Dmpp0YIc.js} +29 -29
  114. package/dist/{comments-Di4w0H_S.js.map → comments-Dmpp0YIc.js.map} +1 -1
  115. package/dist/components/base/action-menu/action-menu.d.ts +7 -1
  116. package/dist/components/base/buttons/button-group.recipes.d.ts +2 -2
  117. package/dist/components/base/cards/card.recipes.d.ts +6 -4
  118. package/dist/components/base/cards/partials/card-primitives.d.ts +9 -2
  119. package/dist/components/base/cards/partials/smart-card-header-row.d.ts +3 -1
  120. package/dist/components/base/cards/smart-card.types.d.ts +3 -4
  121. package/dist/components/base/cascader/cascader-panel.d.ts +76 -0
  122. package/dist/components/base/chart/chart.d.ts +6 -1
  123. package/dist/components/base/choice-inputs/choice-types.d.ts +1 -1
  124. package/dist/components/base/combobox/index.d.ts +4 -2
  125. package/dist/components/base/feedback/alert.d.ts +1 -1
  126. package/dist/components/base/forms/form-sizing.d.ts +7 -7
  127. package/dist/components/base/forms/workflow.d.ts +7 -1
  128. package/dist/components/base/forms-numeric/coordinates-input.d.ts +4 -0
  129. package/dist/components/base/metadata-list/metadata-list.d.ts +1 -1
  130. package/dist/components/base/navigation/dropdown-menu.d.ts +1 -1
  131. package/dist/components/base/navigation/page-header/page-header-commands.d.ts +14 -7
  132. package/dist/components/base/navigation/page-header/page-header.d.ts +10 -3
  133. package/dist/components/base/popover/popover.d.ts +3 -3
  134. package/dist/components/base/popover/popover.recipes.d.ts +10 -6
  135. package/dist/components/base/sheet/sheet.d.ts +2 -0
  136. package/dist/components/base/sidebar/index.d.ts +1 -1
  137. package/dist/components/base/sidebar/sidebar.d.ts +27 -5
  138. package/dist/components/base/toaster/index.d.ts +1 -0
  139. package/dist/components/blocks/ai/ai-file-tree/types.d.ts +1 -1
  140. package/dist/components/blocks/ai/ai-tool-call/types.d.ts +3 -1
  141. package/dist/components/blocks/ai/ai.strings.d.ts +2 -0
  142. package/dist/components/blocks/analytics/metric-comparison/metric-comparison.d.ts +2 -0
  143. package/dist/components/blocks/analytics/usage-card/usage-card.strings.d.ts +2 -0
  144. package/dist/components/blocks/commerce/cart-summary/cart-summary.d.ts +1 -1
  145. package/dist/components/blocks/commerce/cart-summary/types.d.ts +3 -1
  146. package/dist/components/blocks/commerce/discount-stack/discount-stack.d.ts +1 -1
  147. package/dist/components/blocks/commerce/discount-stack/types.d.ts +3 -1
  148. package/dist/components/blocks/commerce/fulfillment-group/fulfillment-group.d.ts +1 -1
  149. package/dist/components/blocks/commerce/fulfillment-group/types.d.ts +11 -2
  150. package/dist/components/blocks/commerce/index.d.ts +7 -6
  151. package/dist/components/blocks/commerce/inventory-section/inventory-section.d.ts +1 -1
  152. package/dist/components/blocks/commerce/inventory-section/types.d.ts +7 -2
  153. package/dist/components/blocks/commerce/invoice-header/index.d.ts +2 -1
  154. package/dist/components/blocks/commerce/invoice-header/invoice-header.d.ts +1 -1
  155. package/dist/components/blocks/commerce/invoice-header/types.d.ts +20 -6
  156. package/dist/components/blocks/commerce/invoice-line-items/invoice-line-items.d.ts +1 -1
  157. package/dist/components/blocks/commerce/invoice-line-items/types.d.ts +24 -7
  158. package/dist/components/blocks/commerce/invoice-mini/index.d.ts +2 -1
  159. package/dist/components/blocks/commerce/invoice-mini/types.d.ts +7 -1
  160. package/dist/components/blocks/commerce/order-customer/order-customer.d.ts +1 -1
  161. package/dist/components/blocks/commerce/order-customer/types.d.ts +9 -1
  162. package/dist/components/blocks/commerce/refund-status/refund-status.d.ts +1 -1
  163. package/dist/components/blocks/commerce/refund-status/types.d.ts +3 -1
  164. package/dist/components/blocks/commerce/shipment-tracking/shipment-tracking.d.ts +1 -1
  165. package/dist/components/blocks/commerce/shipment-tracking/types.d.ts +3 -1
  166. package/dist/components/blocks/commerce/tax-breakdown/tax-breakdown.d.ts +1 -1
  167. package/dist/components/blocks/commerce/tax-breakdown/types.d.ts +3 -1
  168. package/dist/components/features/activities/activities.types.d.ts +8 -2
  169. package/dist/components/features/activities/partials/activity-marker.d.ts +7 -3
  170. package/dist/components/features/activities/partials/activity-row.d.ts +24 -0
  171. package/dist/components/features/event-calendar/colors.d.ts +2 -2
  172. package/dist/components/features/event-calendar/event-calendar.types.d.ts +4 -0
  173. package/dist/components/features/filters/facets/select-facet.d.ts +2 -1
  174. package/dist/components/features/filters/filters.strings.d.ts +4 -0
  175. package/dist/components/features/filters/filters.types.d.ts +3 -0
  176. package/dist/components/features/filters/partials/filter-editor-header.d.ts +16 -0
  177. package/dist/components/features/filters/partials/filter-popover-content.d.ts +1 -1
  178. package/dist/components/features/filters/partials/nested-filter-options.d.ts +21 -0
  179. package/dist/components/features/filters/partials/regular-filter-content.d.ts +2 -1
  180. package/dist/components/features/filters/utils/filter-utils.d.ts +21 -3
  181. package/dist/components/features/global-search/global-search.types.d.ts +2 -0
  182. package/dist/components/features/global-search/partials/global-search-input.d.ts +10 -0
  183. package/dist/components/features/global-search/partials/global-search-result-row.d.ts +7 -1
  184. package/dist/components/features/media-library/media-library.strings.d.ts +2 -0
  185. package/dist/components/features/media-library/media-library.types.d.ts +14 -4
  186. package/dist/components/features/media-library/partials/media-library-partials.d.ts +1 -1
  187. package/dist/components/features/products/components/product-options-matrix.d.ts +1 -1
  188. package/dist/components/features/products/components/product-variant-editor.d.ts +1 -1
  189. package/dist/components/features/products/components/product-variants-manager.d.ts +1 -1
  190. package/dist/components/features/products/products.strings.d.ts +9 -1
  191. package/dist/components/features/products/products.types.d.ts +43 -6
  192. package/dist/components/features/resource/resource.d.ts +5 -1
  193. package/dist/components/features/resource/resource.types.d.ts +12 -1
  194. package/dist/components/features/rich-text-editor/partials/image-uploads.d.ts +1 -1
  195. package/dist/components/features/rich-text-editor/rich-text-editor.recipes.d.ts +12 -2
  196. package/dist/components/features/table/partials/resource-cell.d.ts +22 -5
  197. package/dist/components/features/table/table.types.d.ts +1 -1
  198. package/dist/components/layout/app-shell/app-shell.types.d.ts +35 -6
  199. package/dist/components/layout/app-shell/index.d.ts +1 -1
  200. package/dist/components/layout/app-shell/shell-regions.d.ts +27 -0
  201. package/dist/components/layout/app-shell/sidebar-inset-layout.d.ts +1 -1
  202. package/dist/components/layout/app-shell/stacked-layout.d.ts +1 -1
  203. package/dist/components/layout/app-shell/topbar-sidebar-layout.d.ts +1 -1
  204. package/dist/components/layout/containers/two-column-layout.d.ts +2 -0
  205. package/dist/components/layout/header/header.recipes.d.ts +6 -0
  206. package/dist/components/layout/header/header.types.d.ts +6 -6
  207. package/dist/components/layout/navigation/section-nav/section-nav.d.ts +5 -0
  208. package/dist/components/layout/page/index.d.ts +2 -1
  209. package/dist/components/layout/page/page.d.ts +1 -0
  210. package/dist/components/layout/page/page.strings.d.ts +11 -0
  211. package/dist/components/layout/page/page.types.d.ts +69 -17
  212. package/dist/components/layout/page/partials/page-header.d.ts +1 -1
  213. package/dist/components/layout/settings/settings.d.ts +9 -2
  214. package/dist/components/layout/sidebar/app-sidebar.d.ts +1 -1
  215. package/dist/components/layout/sidebar/components/sidebar-grouped-navigation.d.ts +1 -1
  216. package/dist/components/layout/sidebar/components/sidebar-navigation.d.ts +1 -1
  217. package/dist/components/layout/sidebar/index.d.ts +2 -1
  218. package/dist/components/layout/sidebar/sidebar-navigation-rail.d.ts +36 -0
  219. package/dist/components/layout/sidebar/sidebar.context.d.ts +5 -7
  220. package/dist/components/layout/sidebar/sidebar.types.d.ts +48 -10
  221. package/dist/components/layout/sidebar/sidebar.utils.d.ts +9 -1
  222. package/dist/components/layout/workspace/workspace.types.d.ts +8 -1
  223. package/dist/components/ui/alert-dialog.d.ts +2 -2
  224. package/dist/components/ui/combobox.d.ts +1 -1
  225. package/dist/components/ui/dialog.d.ts +2 -2
  226. package/dist/components/ui/overlay-layer.d.ts +18 -0
  227. package/dist/components/ui/sheet.d.ts +5 -1
  228. package/dist/components/ui/sidebar-state.d.ts +82 -0
  229. package/dist/components/ui/sidebar.d.ts +5 -17
  230. package/dist/{containers-CRmHf7GP.js → containers-CIxwbZt5.js} +26 -18
  231. package/dist/containers-CIxwbZt5.js.map +1 -0
  232. package/dist/{control-group-recipes-DBXmfh2E.js → control-group-recipes-fMuFo0H7.js} +6 -6
  233. package/dist/control-group-recipes-fMuFo0H7.js.map +1 -0
  234. package/dist/{copyable-CnGCZdX4.js → copyable-DIznBqiT.js} +7 -7
  235. package/dist/{copyable-CnGCZdX4.js.map → copyable-DIznBqiT.js.map} +1 -1
  236. package/dist/{data-display-D4oujtx0.js → data-display-BdgCAw8T.js} +268 -277
  237. package/dist/data-display-BdgCAw8T.js.map +1 -0
  238. package/dist/{date-Q7jnXxpk.js → date-Cq8ioE4o.js} +5 -5
  239. package/dist/{date-Q7jnXxpk.js.map → date-Cq8ioE4o.js.map} +1 -1
  240. package/dist/{date-picker-zOt1oNss.js → date-picker-RlIzKom_.js} +446 -437
  241. package/dist/date-picker-RlIzKom_.js.map +1 -0
  242. package/dist/{date-pickers-cj8IXbDC.js → date-pickers-DY-CpXS1.js} +12 -12
  243. package/dist/{date-pickers-cj8IXbDC.js.map → date-pickers-DY-CpXS1.js.map} +1 -1
  244. package/dist/{display-BB4BL_-K.js → display-KsZLw9Ov.js} +9 -9
  245. package/dist/{display-BB4BL_-K.js.map → display-KsZLw9Ov.js.map} +1 -1
  246. package/dist/dropdown-menu-CLs8Lihj.js +194 -0
  247. package/dist/dropdown-menu-CLs8Lihj.js.map +1 -0
  248. package/dist/features/activities.js +302 -253
  249. package/dist/features/activities.js.map +1 -1
  250. package/dist/features/ai-chat.js +15 -14
  251. package/dist/features/ai-chat.js.map +1 -1
  252. package/dist/features/appointment-calendar.js +22 -22
  253. package/dist/features/appointment-calendar.js.map +1 -1
  254. package/dist/features/async-preview.js +11 -10
  255. package/dist/features/async-preview.js.map +1 -1
  256. package/dist/features/combobox.js +1 -1
  257. package/dist/features/comments.js +1 -1
  258. package/dist/features/data-view.js +13 -13
  259. package/dist/features/data-view.js.map +1 -1
  260. package/dist/features/email-composer.js +237 -238
  261. package/dist/features/email-composer.js.map +1 -1
  262. package/dist/features/event-calendar.js +140 -146
  263. package/dist/features/event-calendar.js.map +1 -1
  264. package/dist/features/filters.js +1 -1
  265. package/dist/features/global-search.js +167 -138
  266. package/dist/features/global-search.js.map +1 -1
  267. package/dist/features/kanban.js +6 -7
  268. package/dist/features/kanban.js.map +1 -1
  269. package/dist/features/map.js +269 -260
  270. package/dist/features/map.js.map +1 -1
  271. package/dist/features/media-library.js +375 -326
  272. package/dist/features/media-library.js.map +1 -1
  273. package/dist/features/mentions.js +1 -1
  274. package/dist/features/overlays.js +1 -1
  275. package/dist/features/products.js +1266 -1193
  276. package/dist/features/products.js.map +1 -1
  277. package/dist/features/questionnaire.js +13 -13
  278. package/dist/features/questionnaire.js.map +1 -1
  279. package/dist/features/resource-assignment.js +8 -8
  280. package/dist/features/resource.js +69 -66
  281. package/dist/features/resource.js.map +1 -1
  282. package/dist/features/rich-text-editor.js +2 -2
  283. package/dist/features/schema-form.js +13 -13
  284. package/dist/features/suggestions.js +3 -3
  285. package/dist/features/sync.js +3 -3
  286. package/dist/features/table.js +1 -1
  287. package/dist/features/theme-tweaker.js +94 -95
  288. package/dist/features/theme-tweaker.js.map +1 -1
  289. package/dist/{feedback-DZNL5Lg1.js → feedback-Dm4izqFn.js} +80 -79
  290. package/dist/feedback-Dm4izqFn.js.map +1 -0
  291. package/dist/{field-affordance-recipes-DjwGx8eM.js → field-affordance-recipes-DWcNcOjh.js} +4 -4
  292. package/dist/field-affordance-recipes-DWcNcOjh.js.map +1 -0
  293. package/dist/{filters-BcT-uoFy.js → filters-DzgSJpMK.js} +693 -645
  294. package/dist/filters-DzgSJpMK.js.map +1 -0
  295. package/dist/{form-field-CsgRmdit.js → form-field-BriWAXyg.js} +6 -6
  296. package/dist/{form-field-CsgRmdit.js.map → form-field-BriWAXyg.js.map} +1 -1
  297. package/dist/{form-sizing-NXgjkmBG.js → form-sizing-Bs2qFUeE.js} +4 -4
  298. package/dist/form-sizing-Bs2qFUeE.js.map +1 -0
  299. package/dist/{forms-BV5m5aQF.js → forms-C0RGnJTe.js} +17 -13
  300. package/dist/forms-C0RGnJTe.js.map +1 -0
  301. package/dist/{forms-numeric-Cd33AKbD.js → forms-numeric-DIhghX1Q.js} +86 -82
  302. package/dist/forms-numeric-DIhghX1Q.js.map +1 -0
  303. package/dist/{header-BA697l4a.js → header-DMMxG__r.js} +67 -63
  304. package/dist/header-DMMxG__r.js.map +1 -0
  305. package/dist/header.recipes-BigdJjw1.js +6 -0
  306. package/dist/header.recipes-BigdJjw1.js.map +1 -0
  307. package/dist/{hooks-BQ-L7Uu2.js → hooks-DB6CJ4MR.js} +26 -14
  308. package/dist/hooks-DB6CJ4MR.js.map +1 -0
  309. package/dist/{icon-badge-COWbCCWu.js → icon-badge-DZF-YjQp.js} +4 -4
  310. package/dist/{icon-badge-COWbCCWu.js.map → icon-badge-DZF-YjQp.js.map} +1 -1
  311. package/dist/index.js +4 -5
  312. package/dist/{input-Cdw4k0fb.js → input-CvyDQlY7.js} +8 -8
  313. package/dist/{input-Cdw4k0fb.js.map → input-CvyDQlY7.js.map} +1 -1
  314. package/dist/input-DMBwAZmr.js +21 -0
  315. package/dist/input-DMBwAZmr.js.map +1 -0
  316. package/dist/{item-BvZ2DR_x.js → item-DjCcM18E.js} +16 -16
  317. package/dist/item-DjCcM18E.js.map +1 -0
  318. package/dist/layout/app-shell.js +1 -1
  319. package/dist/layout/auth.js +1 -1
  320. package/dist/layout/containers.js +1 -1
  321. package/dist/layout/header.js +1 -1
  322. package/dist/layout/hooks.js +1 -1
  323. package/dist/layout/navigation.js +1 -1
  324. package/dist/layout/page.js +2 -2
  325. package/dist/layout/settings.js +1 -1
  326. package/dist/layout/sidebar.js +3 -3
  327. package/dist/layout/workspace.js +1 -1
  328. package/dist/layout.js +11 -11
  329. package/dist/lib/affordance-geometry.generated.d.ts +35 -35
  330. package/dist/lib/control-group-recipes.d.ts +5 -5
  331. package/dist/lib/field-affordance-recipes.d.ts +2 -2
  332. package/dist/lib/motion-recipes.d.ts +3 -0
  333. package/dist/lib/navigation-row-recipes.d.ts +7 -7
  334. package/dist/lib/overlay-anatomy-recipes.d.ts +3 -3
  335. package/dist/lib/portal-recipes.d.ts +3 -0
  336. package/dist/lib/token-merge.generated.d.ts +13 -10
  337. package/dist/lib/utils.js +1 -1
  338. package/dist/map-demo-tile.svg +1 -1
  339. package/dist/{media-gallery-CSl5W1Fy.js → media-gallery-C-vChPmE.js} +6 -6
  340. package/dist/{media-gallery-CSl5W1Fy.js.map → media-gallery-C-vChPmE.js.map} +1 -1
  341. package/dist/{mentions-RKOQaaIB.js → mentions-0_4nWuI-.js} +10 -10
  342. package/dist/{mentions-RKOQaaIB.js.map → mentions-0_4nWuI-.js.map} +1 -1
  343. package/dist/{message-INU2xsxu.js → message-g8p7eVtN.js} +7 -7
  344. package/dist/message-g8p7eVtN.js.map +1 -0
  345. package/dist/{metadata-list-qVV7AVxa.js → metadata-list-C3MkU-Om.js} +64 -64
  346. package/dist/metadata-list-C3MkU-Om.js.map +1 -0
  347. package/dist/{motion-recipes-ChBg4HBq.js → motion-recipes-DitYv6P2.js} +10 -2
  348. package/dist/motion-recipes-DitYv6P2.js.map +1 -0
  349. package/dist/navigation-C90-oQFq.js +255 -0
  350. package/dist/navigation-C90-oQFq.js.map +1 -0
  351. package/dist/{navigation-BQNcg1jT.js → navigation-DaRjthVk.js} +101 -82
  352. package/dist/navigation-DaRjthVk.js.map +1 -0
  353. package/dist/{navigation-row-recipes-WZEs-hYo.js → navigation-row-recipes-BGVLvU_O.js} +9 -9
  354. package/dist/navigation-row-recipes-BGVLvU_O.js.map +1 -0
  355. package/dist/{number-E_OiIfJz.js → number-CRU3kGuk.js} +5 -5
  356. package/dist/{number-E_OiIfJz.js.map → number-CRU3kGuk.js.map} +1 -1
  357. package/dist/overflow-tab-bar-IVFVQFV6.js +172 -0
  358. package/dist/overflow-tab-bar-IVFVQFV6.js.map +1 -0
  359. package/dist/overlays-BSgCtM2v.js +1013 -0
  360. package/dist/overlays-BSgCtM2v.js.map +1 -0
  361. package/dist/page-DUUKDAjo.js +331 -0
  362. package/dist/page-DUUKDAjo.js.map +1 -0
  363. package/dist/page-header-commands-7P3sfE9u.js +193 -0
  364. package/dist/page-header-commands-7P3sfE9u.js.map +1 -0
  365. package/dist/{pagination-Ch8X_47u.js → pagination-CgCjElfu.js} +7 -7
  366. package/dist/{pagination-Ch8X_47u.js.map → pagination-CgCjElfu.js.map} +1 -1
  367. package/dist/popover-B85RenIl.js +201 -0
  368. package/dist/popover-B85RenIl.js.map +1 -0
  369. package/dist/{popover-menu-BYaCdFhf.js → popover-menu-DlnQ2zlR.js} +7 -7
  370. package/dist/{popover-menu-BYaCdFhf.js.map → popover-menu-DlnQ2zlR.js.map} +1 -1
  371. package/dist/{popover.recipes-D3j8R8Yp.js → popover.recipes-DdiEp0rd.js} +18 -11
  372. package/dist/popover.recipes-DdiEp0rd.js.map +1 -0
  373. package/dist/portal-recipes-BpsV_iRw.js +9 -0
  374. package/dist/portal-recipes-BpsV_iRw.js.map +1 -0
  375. package/dist/{primitives-Du64iDbb.js → primitives-ByWgGUgt.js} +5 -5
  376. package/dist/{primitives-Du64iDbb.js.map → primitives-ByWgGUgt.js.map} +1 -1
  377. package/dist/primitives.js +4 -4
  378. package/dist/{progress-BvF2oCdV.js → progress-BJhQP9WX.js} +9 -9
  379. package/dist/{progress-BvF2oCdV.js.map → progress-BJhQP9WX.js.map} +1 -1
  380. package/dist/{receipt-D789Jwyy.js → receipt-tOc7B3hw.js} +7 -7
  381. package/dist/receipt-tOc7B3hw.js.map +1 -0
  382. package/dist/{rich-text-CLJEf76s.js → rich-text-Dth5E882.js} +3 -3
  383. package/dist/{rich-text-CLJEf76s.js.map → rich-text-Dth5E882.js.map} +1 -1
  384. package/dist/{rich-text-editor-Cm1dpUpQ.js → rich-text-editor-C1fOjBTd.js} +429 -430
  385. package/dist/rich-text-editor-C1fOjBTd.js.map +1 -0
  386. package/dist/{rich-text-editor-toolbar-L__e4x47.js → rich-text-editor-toolbar-laT3tpBT.js} +32 -28
  387. package/dist/rich-text-editor-toolbar-laT3tpBT.js.map +1 -0
  388. package/dist/{scroll-area-La5RXsEk.js → scroll-area-B0dB2cBi.js} +2 -2
  389. package/dist/{scroll-area-La5RXsEk.js.map → scroll-area-B0dB2cBi.js.map} +1 -1
  390. package/dist/{separator-DAEV0w65.js → separator-Bb17I4pu.js} +2 -2
  391. package/dist/{separator-DAEV0w65.js.map → separator-Bb17I4pu.js.map} +1 -1
  392. package/dist/{separator-GNfPG-90.js → separator-Ct_WSWTJ.js} +3 -3
  393. package/dist/{separator-GNfPG-90.js.map → separator-Ct_WSWTJ.js.map} +1 -1
  394. package/dist/services/actions.js +1 -1
  395. package/dist/{settings-BA2iboic.js → settings-Bar5wiSo.js} +31 -38
  396. package/dist/settings-Bar5wiSo.js.map +1 -0
  397. package/dist/sheet-BGPERY55.js +250 -0
  398. package/dist/sheet-BGPERY55.js.map +1 -0
  399. package/dist/sidebar-D-JYMMbY.js +686 -0
  400. package/dist/sidebar-D-JYMMbY.js.map +1 -0
  401. package/dist/sidebar-f9gRWXIR.js +1001 -0
  402. package/dist/sidebar-f9gRWXIR.js.map +1 -0
  403. package/dist/skeleton-BapcJd9C.js +265 -0
  404. package/dist/skeleton-BapcJd9C.js.map +1 -0
  405. package/dist/smart-card-CW0hjetE.js +617 -0
  406. package/dist/smart-card-CW0hjetE.js.map +1 -0
  407. package/dist/{structure-C0V0_Fyf.js → structure-DuxKl954.js} +2 -2
  408. package/dist/{structure-C0V0_Fyf.js.map → structure-DuxKl954.js.map} +1 -1
  409. package/dist/style.css +1 -1
  410. package/dist/{table-CpvnzJn9.js → table-B4TE7iOV.js} +3 -3
  411. package/dist/{table-CpvnzJn9.js.map → table-B4TE7iOV.js.map} +1 -1
  412. package/dist/{table-DH7rozUv.js → table-CFOWY9pQ.js} +394 -388
  413. package/dist/table-CFOWY9pQ.js.map +1 -0
  414. package/dist/{tabs-eqVsJZWO.js → tabs-e7ko9S2o.js} +11 -11
  415. package/dist/tabs-e7ko9S2o.js.map +1 -0
  416. package/dist/{text-inputs-DXItiR0O.js → text-inputs-B1culiSK.js} +17 -17
  417. package/dist/text-inputs-B1culiSK.js.map +1 -0
  418. package/dist/theme.css +40 -37
  419. package/dist/{timelines-DmtztAY_.js → timelines-D3Sl9ueq.js} +13 -12
  420. package/dist/timelines-D3Sl9ueq.js.map +1 -0
  421. package/dist/tooltip-8wz5S_Zr.js +113 -0
  422. package/dist/tooltip-8wz5S_Zr.js.map +1 -0
  423. package/dist/{tree-CV11PURP.js → tree-CzUJHnFs.js} +8 -8
  424. package/dist/{tree-CV11PURP.js.map → tree-CzUJHnFs.js.map} +1 -1
  425. package/dist/typography/rich-text.js +1 -1
  426. package/dist/{typography-CSyJrh28.js → typography-BQnine1k.js} +12 -12
  427. package/dist/{typography-CSyJrh28.js.map → typography-BQnine1k.js.map} +1 -1
  428. package/dist/typography.js +1 -1
  429. package/dist/ui-provider-C-74NVLc.js +178 -0
  430. package/dist/ui-provider-C-74NVLc.js.map +1 -0
  431. package/dist/ui-provider.js +2 -3
  432. package/dist/{upload-C9SA0X-8.js → upload-BOW6U2tI.js} +25 -24
  433. package/dist/upload-BOW6U2tI.js.map +1 -0
  434. package/dist/{upload-queue-DhQJiSRc.js → upload-queue-qUXn1ykN.js} +16 -14
  435. package/dist/upload-queue-qUXn1ykN.js.map +1 -0
  436. package/dist/{usage-card-DVTRDmGz.js → usage-card-BeSLY0i0.js} +24 -17
  437. package/dist/usage-card-BeSLY0i0.js.map +1 -0
  438. package/dist/{utils-CF3c95Io.js → utils-B6kKb8jB.js} +237 -141
  439. package/dist/utils-B6kKb8jB.js.map +1 -0
  440. package/dist/value-inputs-skdVB2zh.js +980 -0
  441. package/dist/value-inputs-skdVB2zh.js.map +1 -0
  442. package/dist/{value-typography-ClupF0Gz.js → value-typography-uAmWUAL1.js} +2 -2
  443. package/dist/{value-typography-ClupF0Gz.js.map → value-typography-uAmWUAL1.js.map} +1 -1
  444. package/dist/{workspace-9EFVXUyk.js → workspace-DHeHv0qw.js} +50 -49
  445. package/dist/workspace-DHeHv0qw.js.map +1 -0
  446. package/docs/consumer-skill/SKILL.md +4 -3
  447. package/docs/consumer-skill/agents/themelia-ui-designer.md +96 -0
  448. package/docs/consumer-skill/examples/app-layout.tsx +52 -1
  449. package/docs/consumer-skill/examples/commerce-lines.tsx +271 -0
  450. package/docs/consumer-skill/examples/custom-composition.tsx +21 -0
  451. package/docs/consumer-skill/examples/detail.tsx +5 -4
  452. package/docs/consumer-skill/examples/editable-sections.tsx +38 -0
  453. package/docs/consumer-skill/examples/index-table.tsx +4 -4
  454. package/docs/consumer-skill/examples/manifest.json +38 -1
  455. package/docs/consumer-skill/examples/product-media.tsx +41 -0
  456. package/docs/consumer-skill/examples/product-parts.tsx +81 -0
  457. package/docs/consumer-skill/examples/rhf-edit-page.tsx +1 -1
  458. package/docs/consumer-skill/examples/rhf-overlay-form.tsx +24 -11
  459. package/docs/consumer-skill/examples/token-domain-structure.tsx +68 -0
  460. package/docs/consumer-skill/references/agents-md.md +19 -17
  461. package/docs/consumer-skill/references/analytics.md +18 -1
  462. package/docs/consumer-skill/references/commerce-composition.md +97 -0
  463. package/docs/consumer-skill/references/component-contracts.json +7131 -1754
  464. package/docs/consumer-skill/references/composition-mapping.md +17 -3
  465. package/docs/consumer-skill/references/composition.md +159 -31
  466. package/docs/consumer-skill/references/critique-rubric.md +98 -0
  467. package/docs/consumer-skill/references/custom-composition.md +261 -0
  468. package/docs/consumer-skill/references/data-reading.md +79 -0
  469. package/docs/consumer-skill/references/design-contract.md +11 -9
  470. package/docs/consumer-skill/references/discovery.md +27 -3
  471. package/docs/consumer-skill/references/domain-structures.md +124 -0
  472. package/docs/consumer-skill/references/installation.md +15 -4
  473. package/docs/consumer-skill/references/integration.md +35 -0
  474. package/docs/consumer-skill/references/product-composition.md +94 -0
  475. package/docs/consumer-skill/references/public-api.json +2881 -420
  476. package/docs/consumer-skill/references/review.md +39 -2
  477. package/docs/consumer-skill/references/rhf-workflows.md +7 -0
  478. package/docs/consumer-skill/references/screen-archetypes.md +19 -7
  479. package/docs/consumer-skill/references/screen-decisions.md +126 -0
  480. package/docs/consumer-skill/references/theming.md +17 -18
  481. package/docs/consumer-skill/references/tokens.json +9 -9
  482. package/docs/consumer-skill/references/view-craft.md +153 -0
  483. package/docs/consumer-skill/references/view-spec.md +73 -0
  484. package/docs/consumer-skill/references/workflows.md +7 -1
  485. package/docs/consumer-skill/scripts/composition-policy.mjs +39 -3
  486. package/docs/consumer-skill/scripts/composition-schema.mjs +1 -1
  487. package/docs/consumer-skill/scripts/composition.mjs +61 -5
  488. package/docs/consumer-skill/scripts/discovery.mjs +54 -0
  489. package/docs/consumer-skill/scripts/inspect-component.mjs +1 -1
  490. package/docs/consumer-skill/scripts/inspection.mjs +73 -18
  491. package/docs/consumer-skill/scripts/setup-skills.mjs +41 -6
  492. package/docs/consumer-skill/scripts/surface-policy.mjs +5 -5
  493. package/docs/consumer-skills/themelia-components/SKILL.md +14 -13
  494. package/docs/consumer-skills/themelia-composition/SKILL.md +16 -17
  495. package/docs/consumer-skills/themelia-design/SKILL.md +55 -0
  496. package/docs/consumer-skills/themelia-foundation/SKILL.md +2 -1
  497. package/docs/consumer-skills/themelia-tokenization/SKILL.md +24 -17
  498. package/package.json +1 -1
  499. package/dist/accordion-96o0pN62.js.map +0 -1
  500. package/dist/action-menu-CHgs8vmj.js.map +0 -1
  501. package/dist/affordance-geometry.generated-B8yGOr8-.js.map +0 -1
  502. package/dist/ai-artifact-BZUGwBq6.js.map +0 -1
  503. package/dist/app-shell-D63ATkIK.js +0 -237
  504. package/dist/app-shell-D63ATkIK.js.map +0 -1
  505. package/dist/auth-D2FVZ1MH.js.map +0 -1
  506. package/dist/avatar-DWO_HHhB.js.map +0 -1
  507. package/dist/base/cascader.js.map +0 -1
  508. package/dist/batch-action-bar-CdfIkCsV.js.map +0 -1
  509. package/dist/button-DkmK-z8E.js.map +0 -1
  510. package/dist/buttons-BbfzgczK.js.map +0 -1
  511. package/dist/cards-4JTWqvVe.js +0 -68
  512. package/dist/cards-4JTWqvVe.js.map +0 -1
  513. package/dist/chart-C19flDQb.js +0 -155
  514. package/dist/chart-C19flDQb.js.map +0 -1
  515. package/dist/choice-inputs-JLtij2y4.js.map +0 -1
  516. package/dist/code-block-CGNaUtAE.js.map +0 -1
  517. package/dist/combobox-CBJDs6w_.js.map +0 -1
  518. package/dist/combobox-hbhSS18O.js +0 -355
  519. package/dist/combobox-hbhSS18O.js.map +0 -1
  520. package/dist/command-D8NrBj-b.js.map +0 -1
  521. package/dist/containers-CRmHf7GP.js.map +0 -1
  522. package/dist/control-group-recipes-DBXmfh2E.js.map +0 -1
  523. package/dist/data-display-D4oujtx0.js.map +0 -1
  524. package/dist/date-picker-zOt1oNss.js.map +0 -1
  525. package/dist/dropdown-menu-CjY8Vt7W.js +0 -193
  526. package/dist/dropdown-menu-CjY8Vt7W.js.map +0 -1
  527. package/dist/feedback-DZNL5Lg1.js.map +0 -1
  528. package/dist/field-affordance-recipes-DjwGx8eM.js.map +0 -1
  529. package/dist/filters-BcT-uoFy.js.map +0 -1
  530. package/dist/form-sizing-NXgjkmBG.js.map +0 -1
  531. package/dist/forms-BV5m5aQF.js.map +0 -1
  532. package/dist/forms-numeric-Cd33AKbD.js.map +0 -1
  533. package/dist/header-BA697l4a.js.map +0 -1
  534. package/dist/hooks-BQ-L7Uu2.js.map +0 -1
  535. package/dist/input-DOPL5_QE.js +0 -21
  536. package/dist/input-DOPL5_QE.js.map +0 -1
  537. package/dist/item-BvZ2DR_x.js.map +0 -1
  538. package/dist/message-INU2xsxu.js.map +0 -1
  539. package/dist/metadata-list-qVV7AVxa.js.map +0 -1
  540. package/dist/motion-recipes-ChBg4HBq.js.map +0 -1
  541. package/dist/navigation-BQNcg1jT.js.map +0 -1
  542. package/dist/navigation-DLF3E1IC.js +0 -145
  543. package/dist/navigation-DLF3E1IC.js.map +0 -1
  544. package/dist/navigation-row-recipes-WZEs-hYo.js.map +0 -1
  545. package/dist/overflow-tab-bar-CrbqMteP.js +0 -284
  546. package/dist/overflow-tab-bar-CrbqMteP.js.map +0 -1
  547. package/dist/overlays-BlKynmde.js +0 -1004
  548. package/dist/overlays-BlKynmde.js.map +0 -1
  549. package/dist/page-CIwNUtGr.js +0 -227
  550. package/dist/page-CIwNUtGr.js.map +0 -1
  551. package/dist/page-header-commands-DFMlNYzN.js +0 -128
  552. package/dist/page-header-commands-DFMlNYzN.js.map +0 -1
  553. package/dist/popover-uwzX2vo7.js +0 -198
  554. package/dist/popover-uwzX2vo7.js.map +0 -1
  555. package/dist/popover.recipes-D3j8R8Yp.js.map +0 -1
  556. package/dist/receipt-D789Jwyy.js.map +0 -1
  557. package/dist/rich-text-editor-Cm1dpUpQ.js.map +0 -1
  558. package/dist/rich-text-editor-toolbar-L__e4x47.js.map +0 -1
  559. package/dist/settings-BA2iboic.js.map +0 -1
  560. package/dist/sheet-DoAxTb2J.js +0 -213
  561. package/dist/sheet-DoAxTb2J.js.map +0 -1
  562. package/dist/sidebar-ByqKR_W5.js +0 -512
  563. package/dist/sidebar-ByqKR_W5.js.map +0 -1
  564. package/dist/sidebar-D2iSnGJ7.js +0 -619
  565. package/dist/sidebar-D2iSnGJ7.js.map +0 -1
  566. package/dist/skeleton-CUj8O5Bd.js +0 -264
  567. package/dist/skeleton-CUj8O5Bd.js.map +0 -1
  568. package/dist/smart-card-CqkzQsK-.js +0 -614
  569. package/dist/smart-card-CqkzQsK-.js.map +0 -1
  570. package/dist/table-DH7rozUv.js.map +0 -1
  571. package/dist/tabs-eqVsJZWO.js.map +0 -1
  572. package/dist/text-inputs-DXItiR0O.js.map +0 -1
  573. package/dist/theme-scope-BJ6eE2xt.js +0 -50
  574. package/dist/theme-scope-BJ6eE2xt.js.map +0 -1
  575. package/dist/timelines-DmtztAY_.js.map +0 -1
  576. package/dist/tooltip-B4hjKtoV.js +0 -111
  577. package/dist/tooltip-B4hjKtoV.js.map +0 -1
  578. package/dist/ui-provider-CQCuCBcy.js +0 -136
  579. package/dist/ui-provider-CQCuCBcy.js.map +0 -1
  580. package/dist/upload-C9SA0X-8.js.map +0 -1
  581. package/dist/upload-queue-DhQJiSRc.js.map +0 -1
  582. package/dist/usage-card-DVTRDmGz.js.map +0 -1
  583. package/dist/use-mobile-vaLKwgyf.js +0 -15
  584. package/dist/use-mobile-vaLKwgyf.js.map +0 -1
  585. package/dist/utils-CF3c95Io.js.map +0 -1
  586. package/dist/value-inputs-C0o70p-U.js +0 -980
  587. package/dist/value-inputs-C0o70p-U.js.map +0 -1
  588. package/dist/workspace-9EFVXUyk.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"async-preview.js","names":["_Fragment","Stack","LoadingState","ErrorState","popoverWidthRecipes","Value","Name","SecondaryValue","EmptyValue","Badge","PopoverTrigger","Popover","PopoverContent","EmptyState","React","Fragment$1","defaultAsyncPreviewStrings","asyncPreviewCache","readCache","cacheKey","cached","staleTime","normalizeLoading","loading","hasStaticDataSource","options","useAsyncPreview","openProp","hasStaticData","staticData","onShow","isControlled","uncontrolledOpen","setUncontrolledOpen","useState","defaultOpen","open","data","setData","status","setStatus","error","setError","setLoadingState","meta","setMetaState","setCached","resolvedData","resolvedStatus","abortRef","useRef","requestIdRef","prefetchedRef","metaRef","openRunKeyRef","activeRunKeyRef","stateRef","setOpen","useCallback","nextOpen","currentState","onOpenChange","run","requestKey","type","activeController","reason","cachedEntry","cachePolicy","controller","requestId","hadCache","loadingState","onBeforeShow","onRefresh","applyIfCurrent","fn","result","nextLoading","next","nextMeta","nextStatus","nextData","settledState","onData","onSettled","err","onError","context","refresh","prefetch","close","state","useMemo","useEffect","openRunKey","clearAsyncPreviewCache","AsyncPreviewContext","createContext","useAsyncPreviewContext","ctx","useContext","AsyncPreviewRoot","stringsProp","strings","useStrings","preview","AsyncPreviewTrigger","maybePrefetch","prefetchOn","triggerProps","render","renderedTrigger","Button","AsyncPreviewContent","props","contentProps","sizeClassName","size","inset","padding","cn","className","children","AsyncPreviewState","AsyncPreviewBody","AsyncPreviewLoading","label","phase","progress","AsyncPreviewError","AsyncPreviewEmpty","createAsyncPreview","AsyncPreview","isEmpty","value","renderBadge","badge","PreviewTriggerCellInner","Icon","primaryIsEmpty","name","contentClassName","leading","emptyLabel","forceNameCase","secondary","trailing","PreviewTriggerCell","rootProps","cellProps","hasPreview","disabledReason","ChevronDown"],"sources":["../../src/components/features/async-preview/async-preview.strings.ts","../../src/components/features/async-preview/hooks/use-async-preview.ts","../../src/components/features/async-preview/async-preview.tsx","../../src/components/features/async-preview/preview-trigger-cell.tsx"],"sourcesContent":["/**\n * Strings for AsyncPreview. Consumers override with `strings={{ ... }}` on\n * `<AsyncPreview.Root />`; all user-facing copy is deep-merged via\n * `useStrings`.\n */\nexport interface AsyncPreviewStrings {\n\tloading: string;\n\terrorTitle: string;\n\terrorDescription: string;\n\tretry: string;\n\temptyTitle: string;\n\temptyDescription: string;\n}\n\nexport const defaultAsyncPreviewStrings: AsyncPreviewStrings = {\n\tloading: 'Loading preview...',\n\terrorTitle: 'Could not load preview',\n\terrorDescription: 'Try again or open the full record.',\n\tretry: 'Retry',\n\temptyTitle: 'No preview data',\n\temptyDescription: 'There is nothing to show for this record yet.',\n};\n","import { useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nimport type {\n\t\tAsyncPreviewLoadingState,\n\t\tAsyncPreviewReason,\n\t\tAsyncPreviewRootProps,\n\t\tAsyncPreviewState,\n\t\tAsyncPreviewStatus,\n} from '../async-preview.types';\n\ninterface CacheEntry {\n\t\t/** Formatted time for the entry. */\n\t\ttimestamp: number;\n\t\t/** Records to render. */\n\t\tdata: unknown | null;\n\t\tstatus: 'success' | 'empty';\n\t\tmeta: Record<string, unknown>;\n}\n\nconst asyncPreviewCache = new Map<string, CacheEntry>();\n\nfunction readCache(cacheKey: string | undefined, staleTime: number): CacheEntry | undefined {\n\t\tif (!cacheKey) return undefined;\n\t\tconst cached = asyncPreviewCache.get(cacheKey);\n\t\tif (!cached) return undefined;\n\t\tif (Date.now() - cached.timestamp > staleTime) {\n\t\t\t\tasyncPreviewCache.delete(cacheKey);\n\t\t\t\treturn undefined;\n\t\t}\n\t\treturn cached;\n}\n\nfunction normalizeLoading(\n\t\tloading: AsyncPreviewLoadingState,\n): false | Exclude<AsyncPreviewLoadingState, false> {\n\t\treturn loading === false ? false : loading;\n}\n\nfunction hasStaticDataSource<\n\t\tTData,\n\t\tTContext,\n\t\tTType extends string,\n>(options: UseAsyncPreviewOptions<TData, TContext, TType>) {\n\t\treturn Object.prototype.hasOwnProperty.call(options, 'data');\n}\n\nexport interface UseAsyncPreviewOptions<\n\t\tTData,\n\t\tTContext = unknown,\n\t\tTType extends string = string,\n> extends Omit<AsyncPreviewRootProps<TData, TContext, TType>, 'children' | 'strings'> {}\n\nexport type UseAsyncPreviewReturn<\n\t\tTData,\n\t\tTContext = unknown,\n\t\tTType extends string = string,\n> = AsyncPreviewState<TData, TContext, TType> & {\n\t\tsetOpen: (open: boolean) => void;\n};\n\nexport function useAsyncPreview<\n\t\tTData,\n\t\tTContext = unknown,\n\t\tTType extends string = string,\n>(options: UseAsyncPreviewOptions<TData, TContext, TType>): UseAsyncPreviewReturn<TData, TContext, TType> {\n\t\tconst {\n\t\t\t\ttype,\n\t\t\t\tcontext,\n\t\t\t\tcacheKey,\n\t\t\t\tcachePolicy = 'cache-first',\n\t\t\t\tstaleTime = 300_000,\n\t\t\t\topen: openProp,\n\t\t\t\tdefaultOpen = false,\n\t\t\t\tonOpenChange,\n\t\t\t\tonBeforeShow,\n\t\t\t\tonData,\n\t\t\t\tonError,\n\t\t\t\tonSettled,\n\t\t\t\tonRefresh,\n\t\t} = options;\n\t\tconst hasStaticData = hasStaticDataSource(options);\n\t\tconst staticData = hasStaticData ? options.data ?? null : null;\n\t\tconst onShow = hasStaticData ? undefined : options.onShow;\n\n\t\tconst isControlled = openProp !== undefined;\n\t\tconst [uncontrolledOpen, setUncontrolledOpen] = useState(defaultOpen);\n\t\tconst open = openProp ?? uncontrolledOpen;\n\n\t\tconst [data, setData] = useState<TData | null>(() => {\n\t\t\t\tif (hasStaticData) return staticData as TData | null;\n\t\t\t\tconst cached = readCache(cacheKey, staleTime);\n\t\t\t\treturn cached?.status === 'success' ? cached.data as TData : null;\n\t\t});\n\t\tconst [status, setStatus] = useState<AsyncPreviewStatus>(() => {\n\t\t\t\tif (hasStaticData) return staticData === null ? 'empty' : 'success';\n\t\t\t\tconst cached = readCache(cacheKey, staleTime);\n\t\t\t\treturn cached?.status ?? 'idle';\n\t\t});\n\t\tconst [error, setError] = useState<unknown>(null);\n\t\tconst [loading, setLoadingState] = useState<false | Exclude<AsyncPreviewLoadingState, false>>(false);\n\t\tconst [meta, setMetaState] = useState<Record<string, unknown>>(() => {\n\t\t\t\tconst cached = readCache(cacheKey, staleTime);\n\t\t\t\treturn cached?.meta ?? {};\n\t\t});\n\t\tconst [cached, setCached] = useState(() => readCache(cacheKey, staleTime) !== undefined);\n\t\tconst resolvedData = hasStaticData ? staticData as TData | null : data;\n\t\tconst resolvedStatus = hasStaticData\n\t\t\t\t? staticData === null ? 'empty' : 'success'\n\t\t\t\t: status;\n\n\t\tconst abortRef = useRef<AbortController | null>(null);\n\t\tconst requestIdRef = useRef(0);\n\t\tconst prefetchedRef = useRef(false);\n\t\tconst metaRef = useRef(meta);\n\t\tconst openRunKeyRef = useRef<string | null>(null);\n\t\tconst activeRunKeyRef = useRef<string | null>(null);\n\n\t\tconst stateRef = useRef<AsyncPreviewState<TData, TContext, TType> | null>(null);\n\n\t\tconst setOpen = useCallback(\n\t\t\t\t(nextOpen: boolean) => {\n\t\t\t\t\t\tif (!isControlled) setUncontrolledOpen(nextOpen);\n\t\t\t\t\t\tconst currentState = stateRef.current;\n\t\t\t\t\t\tif (currentState) {\n\t\t\t\t\t\t\t\tonOpenChange?.(nextOpen, { ...currentState, open: nextOpen });\n\t\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t[isControlled, onOpenChange],\n\t\t);\n\n\t\tconst run = useCallback(\n\t\t\t\tasync (reason: AsyncPreviewReason) => {\n\t\t\t\t\t\tif (hasStaticData || !onShow) return;\n\n\t\t\t\t\t\tconst requestKey = cacheKey ?? type;\n\t\t\t\t\t\tconst activeController = abortRef.current;\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\treason === 'open' &&\n\t\t\t\t\t\t\t\tactiveRunKeyRef.current === requestKey &&\n\t\t\t\t\t\t\t\tactiveController &&\n\t\t\t\t\t\t\t\t!activeController.signal.aborted\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// A cache hit still supersedes work for the previous preview.\n\t\t\t\t\t\tabortRef.current?.abort();\n\t\t\t\t\t\tabortRef.current = null;\n\t\t\t\t\t\tactiveRunKeyRef.current = null;\n\n\t\t\t\t\t\tconst cachedEntry = readCache(cacheKey, staleTime);\n\t\t\t\t\t\tconst canUseCache =\n\t\t\t\t\t\t\t\treason === 'open' &&\n\t\t\t\t\t\t\t\tcachedEntry !== undefined &&\n\t\t\t\t\t\t\t\tcachePolicy === 'cache-first';\n\n\t\t\t\t\t\tif (canUseCache) {\n\t\t\t\t\t\t\t\tsetCached(true);\n\t\t\t\t\t\t\t\tsetError(null);\n\t\t\t\t\t\t\t\tmetaRef.current = cachedEntry.meta;\n\t\t\t\t\t\t\t\tsetMetaState(cachedEntry.meta);\n\t\t\t\t\t\t\t\tsetData(cachedEntry.status === 'success' ? cachedEntry.data as TData : null);\n\t\t\t\t\t\t\t\tsetStatus(cachedEntry.status);\n\t\t\t\t\t\t\t\tsetLoadingState(false);\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst controller = new AbortController();\n\t\t\t\t\t\tabortRef.current = controller;\n\t\t\t\t\t\tactiveRunKeyRef.current = requestKey;\n\t\t\t\t\t\tconst requestId = requestIdRef.current + 1;\n\t\t\t\t\t\trequestIdRef.current = requestId;\n\t\t\t\t\t\tconst hadCache = cachedEntry !== undefined;\n\n\t\t\t\t\t\tsetCached(false);\n\t\t\t\t\t\tsetError(null);\n\t\t\t\t\t\tsetStatus('loading');\n\t\t\t\t\t\tsetLoadingState({ label: undefined });\n\n\t\t\t\t\t\tconst loadingState = stateRef.current\n\t\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\t\t\t\t...stateRef.current,\n\t\t\t\t\t\t\t\t\t\t\t\terror: null,\n\t\t\t\t\t\t\t\t\t\t\t\tloading: { label: undefined },\n\t\t\t\t\t\t\t\t\t\t\t\tstatus: 'loading' as const,\n\t\t\t\t\t\t\t\t\t\t\t\tcached: false,\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t: null;\n\n\t\t\t\t\t\tif (loadingState) onBeforeShow?.(loadingState);\n\t\t\t\t\t\tif (reason === 'refresh') {\n\t\t\t\t\t\t\t\tif (loadingState) onRefresh?.(loadingState);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst applyIfCurrent = (fn: () => void) => {\n\t\t\t\t\t\t\t\tif (requestIdRef.current !== requestId || controller.signal.aborted) return;\n\t\t\t\t\t\t\t\tfn();\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tconst result = await onShow({\n\t\t\t\t\t\t\t\t\t\ttype,\n\t\t\t\t\t\t\t\t\t\tcontext,\n\t\t\t\t\t\t\t\t\t\tsignal: controller.signal,\n\t\t\t\t\t\t\t\t\t\treason,\n\t\t\t\t\t\t\t\t\t\tcached: hadCache,\n\t\t\t\t\t\t\t\t\t\tsetLoading: (nextLoading) =>\n\t\t\t\t\t\t\t\t\t\t\t\tapplyIfCurrent(() => setLoadingState(normalizeLoading(nextLoading))),\n\t\t\t\t\t\t\t\t\t\tsetMeta: (nextMeta) =>\n\t\t\t\t\t\t\t\t\t\t\t\tapplyIfCurrent(() => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tconst next = { ...metaRef.current, ...nextMeta };\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tmetaRef.current = next;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsetMetaState(next);\n\t\t\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\tapplyIfCurrent(() => {\n\t\t\t\t\t\t\t\t\t\tconst nextStatus: Extract<AsyncPreviewStatus, 'empty' | 'success'> =\n\t\t\t\t\t\t\t\t\t\t\t\tresult === null || result === undefined ? 'empty' : 'success';\n\t\t\t\t\t\t\t\t\t\tconst nextData = nextStatus === 'success' ? result as TData : null;\n\t\t\t\t\t\t\t\t\t\tsetData(nextData);\n\t\t\t\t\t\t\t\t\t\tsetStatus(nextStatus);\n\t\t\t\t\t\t\t\t\t\tsetLoadingState(false);\n\t\t\t\t\t\t\t\t\t\tsetError(null);\n\t\t\t\t\t\t\t\t\t\tsetCached(false);\n\n\t\t\t\t\t\t\t\t\t\tif (cacheKey) {\n\t\t\t\t\t\t\t\t\t\t\t\tasyncPreviewCache.set(cacheKey, {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttimestamp: Date.now(),\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdata: nextData,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tstatus: nextStatus,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tmeta: metaRef.current,\n\t\t\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tconst settledState = stateRef.current\n\t\t\t\t\t\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t...stateRef.current,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdata: nextData,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\terror: null,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tloading: false as const,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstatus: nextStatus,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tmeta: metaRef.current,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcached: false,\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t: null;\n\n\t\t\t\t\t\t\t\t\t\tif (nextData !== null && settledState) {\n\t\t\t\t\t\t\t\t\t\t\t\tonData?.(nextData, settledState);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tif (settledState) onSettled?.(settledState);\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\t\t\tif (controller.signal.aborted) return;\n\t\t\t\t\t\t\t\tapplyIfCurrent(() => {\n\t\t\t\t\t\t\t\t\t\tsetError(err);\n\t\t\t\t\t\t\t\t\t\tsetStatus('error');\n\t\t\t\t\t\t\t\t\t\tsetLoadingState(false);\n\t\t\t\t\t\t\t\t\t\tconst settledState = stateRef.current\n\t\t\t\t\t\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t...stateRef.current,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\terror: err,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tloading: false as const,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstatus: 'error' as const,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcached: false,\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t: null;\n\t\t\t\t\t\t\t\t\t\tif (settledState) onError?.(err, settledState);\n\t\t\t\t\t\t\t\t\t\tif (settledState) onSettled?.(settledState);\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\t\tif (requestIdRef.current === requestId) {\n\t\t\t\t\t\t\t\t\t\tif (abortRef.current === controller) abortRef.current = null;\n\t\t\t\t\t\t\t\t\t\tif (activeRunKeyRef.current === requestKey) activeRunKeyRef.current = null;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t[\n\t\t\t\t\t\tcacheKey,\n\t\t\t\t\t\tcachePolicy,\n\t\t\t\t\t\tcontext,\n\t\t\t\t\t\thasStaticData,\n\t\t\t\t\t\tonBeforeShow,\n\t\t\t\t\t\tonData,\n\t\t\t\t\t\tonError,\n\t\t\t\t\t\tonRefresh,\n\t\t\t\t\t\tonSettled,\n\t\t\t\t\t\tonShow,\n\t\t\t\t\t\tstaleTime,\n\t\t\t\t\t\ttype,\n\t\t\t\t],\n\t\t);\n\n\t\tconst refresh = useCallback(() => {\n\t\t\t\tvoid run('refresh');\n\t\t}, [run]);\n\n\t\tconst prefetch = useCallback(() => {\n\t\t\t\tif (hasStaticData) return;\n\t\t\t\tif (prefetchedRef.current) return;\n\t\t\t\tprefetchedRef.current = true;\n\t\t\t\tvoid run('prefetch');\n\t\t}, [hasStaticData, run]);\n\n\t\tconst close = useCallback(() => {\n\t\t\t\tsetOpen(false);\n\t\t}, [setOpen]);\n\n\t\tconst state = useMemo<AsyncPreviewState<TData, TContext, TType>>(\n\t\t\t\t() => ({\n\t\t\t\t\t\ttype,\n\t\t\t\t\t\tcontext,\n\t\t\t\t\t\tdata: resolvedData,\n\t\t\t\t\t\terror,\n\t\t\t\t\t\tloading,\n\t\t\t\t\t\tstatus: resolvedStatus,\n\t\t\t\t\t\tmeta,\n\t\t\t\t\t\topen,\n\t\t\t\t\t\tcached,\n\t\t\t\t\t\trefresh,\n\t\t\t\t\t\tprefetch,\n\t\t\t\t\t\tclose,\n\t\t\t\t}),\n\t\t\t\t[cached, close, context, error, loading, meta, open, prefetch, refresh, resolvedData, resolvedStatus, type],\n\t\t);\n\t\tstateRef.current = state;\n\t\tmetaRef.current = meta;\n\n\t\tuseEffect(() => {\n\t\t\t\tif (!hasStaticData) return;\n\t\t\t\tabortRef.current?.abort();\n\t\t\t\tabortRef.current = null;\n\t\t\t\tactiveRunKeyRef.current = null;\n\t\t\t\topenRunKeyRef.current = null;\n\t\t\t\tsetError(null);\n\t\t\t\tsetLoadingState(false);\n\t\t\t\tsetCached(false);\n\t\t}, [hasStaticData, staticData]);\n\n\t\tuseEffect(() => {\n\t\t\t\tif (!open) {\n\t\t\t\t\t\topenRunKeyRef.current = null;\n\t\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (hasStaticData) return;\n\n\t\t\t\tconst openRunKey = cacheKey ?? type;\n\t\t\t\tif (openRunKeyRef.current === openRunKey) return;\n\t\t\t\topenRunKeyRef.current = openRunKey;\n\t\t\t\tvoid run('open');\n\t\t}, [cacheKey, hasStaticData, open, run, type]);\n\n\t\tuseEffect(() => {\n\t\t\t\tprefetchedRef.current = false;\n\t\t}, [cacheKey, hasStaticData, type]);\n\n\t\tuseEffect(\n\t\t\t\t() => () => {\n\t\t\t\t\t\tabortRef.current?.abort();\n\t\t\t\t},\n\t\t\t\t[],\n\t\t);\n\n\t\treturn { ...state, setOpen };\n}\n\nexport function clearAsyncPreviewCache(cacheKey?: string) {\n\t\tif (cacheKey) {\n\t\t\t\tasyncPreviewCache.delete(cacheKey);\n\t\t\t\treturn;\n\t\t}\n\t\tasyncPreviewCache.clear();\n}\n","/**\n * AsyncPreview — generic lazy preview popover for table cells, inline values,\n * buttons, badges, or any other trigger.\n *\n * The library owns popover chrome, async state, abort/race protection, cache,\n * loading/error/empty defaults, and composition primitives. Consumers own the\n * fetcher, routing callbacks, telemetry, and domain rendering.\n */\nimport {\n\t\tcreateContext,\n\t\tuseContext,\n} from 'react';\n\nimport { Button } from '../../base/buttons';\nimport { ErrorState, LoadingState } from '../../base/feedback';\nimport { EmptyState } from '../../blocks/data-display';\nimport {\n\t\tPopover,\n\t\tPopoverContent,\n\t\tPopoverTrigger,\n} from '../../base/popover';\nimport { useStrings } from '../../../lib/strings';\nimport { cn } from '../../../lib/utils';\n\nimport {\n\t\tdefaultAsyncPreviewStrings,\n\t\ttype AsyncPreviewStrings,\n} from './async-preview.strings';\nimport type {\n\t\tAsyncPreviewBodyProps,\n\t\tAsyncPreviewContentProps,\n\t\tAsyncPreviewEmptyProps,\n\t\tAsyncPreviewErrorProps,\n\t\tAsyncPreviewLoadingProps,\n\t\tAsyncPreviewRootProps,\n\t\tAsyncPreviewState as AsyncPreviewStateValue,\n\t\tAsyncPreviewStateProps,\n\t\tAsyncPreviewTriggerProps,\n} from './async-preview.types';\nimport { useAsyncPreview } from './hooks/use-async-preview';\nimport { popoverWidthRecipes } from '../../base/popover/popover.recipes';\n\ninterface AsyncPreviewContextValue<TData, TContext, TType extends string> {\n\t\tstate: AsyncPreviewStateValue<TData, TContext, TType>;\n\t\tsetOpen: (open: boolean) => void;\n\t\t/** Overrides this surface's own copy. */\n\t\tstrings: AsyncPreviewStrings;\n\t\tprefetchOn: false | 'hover' | 'focus';\n}\n\nconst AsyncPreviewContext =\n\t\tcreateContext<AsyncPreviewContextValue<unknown, unknown, string> | null>(null);\n\nfunction useAsyncPreviewContext<\n\t\tTData = unknown,\n\t\tTContext = unknown,\n\t\tTType extends string = string,\n>(): AsyncPreviewContextValue<TData, TContext, TType> {\n\t\tconst ctx = useContext(AsyncPreviewContext);\n\t\tif (!ctx) {\n\t\t\t\tthrow new Error('AsyncPreview compound parts must be rendered inside <AsyncPreview.Root>.');\n\t\t}\n\t\treturn ctx as AsyncPreviewContextValue<TData, TContext, TType>;\n}\n\nfunction AsyncPreviewRoot<\n\t\tTData,\n\t\tTContext = unknown,\n\t\tTType extends string = string,\n>({\n\t\tchildren,\n\t\tstrings: stringsProp,\n\t\tprefetchOn = false,\n\t\t...options\n}: AsyncPreviewRootProps<TData, TContext, TType>) {\n\t\tconst strings = useStrings(defaultAsyncPreviewStrings, stringsProp);\n\t\tconst preview = useAsyncPreview<TData, TContext, TType>(options);\n\t\tconst state: AsyncPreviewStateValue<TData, TContext, TType> = {\n\t\t\t\ttype: preview.type,\n\t\t\t\tcontext: preview.context,\n\t\t\t\tdata: preview.data,\n\t\t\t\terror: preview.error,\n\t\t\t\tloading: preview.loading,\n\t\t\t\tstatus: preview.status,\n\t\t\t\tmeta: preview.meta,\n\t\t\t\topen: preview.open,\n\t\t\t\tcached: preview.cached,\n\t\t\t\trefresh: preview.refresh,\n\t\t\t\tprefetch: preview.prefetch,\n\t\t\t\tclose: () => preview.setOpen(false),\n\t\t};\n\n\t\treturn (\n\t\t\t\t<AsyncPreviewContext.Provider\n\t\t\t\t\t\tvalue={{\n\t\t\t\t\t\t\t\tstate: state as AsyncPreviewStateValue<unknown, unknown, string>,\n\t\t\t\t\t\t\t\tsetOpen: preview.setOpen,\n\t\t\t\t\t\t\t\tstrings,\n\t\t\t\t\t\t\t\tprefetchOn,\n\t\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t\t<span className=\"async-preview--component contents\">\n\t\t\t\t\t\t\t\t<Popover open={state.open} onOpenChange={preview.setOpen}>\n\t\t\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t\t</Popover>\n\t\t\t\t\t\t</span>\n\t\t\t\t</AsyncPreviewContext.Provider>\n\t\t);\n}\n\nfunction AsyncPreviewTrigger<\n\t\tTData = unknown,\n\t\tTContext = unknown,\n\t\tTType extends string = string,\n>({ render, children }: AsyncPreviewTriggerProps<TData, TContext, TType>) {\n\t\tconst { state, prefetchOn } = useAsyncPreviewContext<TData, TContext, TType>();\n\t\tconst maybePrefetch = () => {\n\t\t\t\tif (prefetchOn) state.prefetch();\n\t\t};\n\t\tconst triggerProps = {\n\t\t\t\t'aria-busy': state.status === 'loading' ? true as const : undefined,\n\t\t\t\t'data-state': state.open ? 'open' as const : 'closed' as const,\n\t\t\t\t'data-loading': state.status === 'loading' ? true as const : undefined,\n\t\t\t\tonPointerEnter: prefetchOn === 'hover' ? maybePrefetch : undefined,\n\t\t\t\tonFocus: prefetchOn === 'focus' ? maybePrefetch : undefined,\n\t\t};\n\n\t\tif (render) {\n\t\t\t\tconst renderedTrigger = typeof render === 'function'\n\t\t\t\t\t\t? render({ state, triggerProps })\n\t\t\t\t\t\t: render;\n\t\t\t\treturn (\n\t\t\t\t\t\t<PopoverTrigger\n\t\t\t\t\t\t\t\trender={renderedTrigger}\n\t\t\t\t\t\t\t\t{...triggerProps}\n\t\t\t\t\t\t/>\n\t\t\t\t);\n\t\t}\n\n\t\treturn (\n\t\t\t\t<PopoverTrigger\n\t\t\t\t\t\trender={\n\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\t\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\t\t\t\t\t\t{...triggerProps}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t}\n\t\t\t\t/>\n\t\t);\n}\n\nfunction AsyncPreviewContent({\n\t\tclassName,\n\t\tchildren,\n\t\talign = 'start',\n\t\tsideOffset = 8,\n\t\tfinalFocus = true,\n\t\t...props\n}: AsyncPreviewContentProps) {\n\t\tconst { state } = useAsyncPreviewContext();\n\t\tconst { size = 'md', padding = 'none', ...contentProps } = props;\n\t\tconst sizeClassName = {\n\t\t\t\tsm: popoverWidthRecipes.md,\n\t\t\t\tmd: popoverWidthRecipes.lg,\n\t\t\t\tlg: popoverWidthRecipes.xl,\n\t\t}[size];\n\t\tconst inset = ({\n\t\t\t\tnone: 'flush',\n\t\t\t\tsm: 'compact',\n\t\t\t\tmd: 'default',\n\t\t\t\tlg: 'flush',\n\t\t} as const)[padding];\n\t\tconst paddingClassName = padding === 'none'\n\t\t\t\t? 'gap-0'\n\t\t\t\t: undefined;\n\n\t\treturn (\n\t\t\t\t<PopoverContent\n\t\t\t\t\t\talign={align}\n\t\t\t\t\t\tsideOffset={sideOffset}\n\t\t\t\t\t\tfinalFocus={finalFocus}\n\t\t\t\t\t\tinset={inset}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t'async-preview--content overflow-hidden',\n\t\t\t\t\t\t\t\tsizeClassName,\n\t\t\t\t\t\t\t\tpaddingClassName,\n\t\t\t\t\t\t\t\tclassName,\n\t\t\t\t\t\t)}\n\t\t\t\t\t\tdata-status={state.status}\n\t\t\t\t\t\tdata-preview-type={state.type}\n\t\t\t\t\t\t{...contentProps}\n\t\t\t\t>\n\t\t\t\t\t\t{padding === 'lg' ? <div className=\"p-surface-lg\">{children}</div> : children}\n\t\t\t\t</PopoverContent>\n\t\t);\n}\n\nfunction AsyncPreviewState<\n\t\tTData = unknown,\n\t\tTContext = unknown,\n\t\tTType extends string = string,\n>({ children }: AsyncPreviewStateProps<TData, TContext, TType>) {\n\t\tconst { state } = useAsyncPreviewContext<TData, TContext, TType>();\n\t\treturn <>{children(state)}</>;\n}\n\nfunction AsyncPreviewBody<\n\t\tTData = unknown,\n\t\tTContext = unknown,\n\t\tTType extends string = string,\n>({ children }: AsyncPreviewBodyProps<TData, TContext, TType>) {\n\t\tconst { state } = useAsyncPreviewContext<TData, TContext, TType>();\n\t\tif (state.status !== 'success' || state.data === null) return null;\n\t\treturn <>{children({ ...state, data: state.data })}</>;\n}\n\nfunction AsyncPreviewLoading<\n\t\tTData = unknown,\n\t\tTContext = unknown,\n\t\tTType extends string = string,\n>({ children, className }: AsyncPreviewLoadingProps<TData, TContext, TType>) {\n\t\tconst { state, strings } = useAsyncPreviewContext<TData, TContext, TType>();\n\t\tif (state.status !== 'loading') return null;\n\t\tif (children) return <>{children(state)}</>;\n\t\tconst label =\n\t\t\t\ttypeof state.loading === 'object' && state.loading !== null\n\t\t\t\t\t\t? state.loading.label\n\t\t\t\t\t\t: undefined;\n\t\tconst phase =\n\t\t\t\ttypeof state.loading === 'object' && state.loading !== null\n\t\t\t\t\t\t? state.loading.phase\n\t\t\t\t\t\t: undefined;\n\t\tconst progress =\n\t\t\t\ttypeof state.loading === 'object' &&\n\t\t\t\tstate.loading !== null &&\n\t\t\t\ttypeof state.loading.progress === 'number'\n\t\t\t\t\t\t? Math.min(100, Math.max(0, state.loading.progress))\n\t\t\t\t\t\t: undefined;\n\n\t\treturn (\n\t\t\t\t<LoadingState\n\t\t\t\t\t\tclassName={cn('async-preview--loading p-surface', className)}\n\t\t\t\t\t\tvariant=\"panel\"\n\t\t\t\t\t\tlabel={label ?? strings.loading}\n\t\t\t\t\t\tdescription={phase}\n\t\t\t\t\t\tprogress={progress}\n\t\t\t\t\t\tskeleton\n\t\t\t\t\t\tlines={3}\n\t\t\t\t/>\n\t\t);\n}\n\nfunction AsyncPreviewError<\n\t\tTData = unknown,\n\t\tTContext = unknown,\n\t\tTType extends string = string,\n>({ children, className }: AsyncPreviewErrorProps<TData, TContext, TType>) {\n\t\tconst { state, strings } = useAsyncPreviewContext<TData, TContext, TType>();\n\t\tif (state.status !== 'error') return null;\n\t\tif (children) return <>{children(state)}</>;\n\t\treturn (\n\t\t\t\t<ErrorState\n\t\t\t\t\t\tclassName={cn('async-preview--error p-surface', className)}\n\t\t\t\t\t\ttitle={strings.errorTitle}\n\t\t\t\t\t\tdescription={strings.errorDescription}\n\t\t\t\t\t\tonRetry={state.refresh}\n\t\t\t\t\t\tretryLabel={strings.retry}\n\t\t\t\t\t\tvariant=\"inline\"\n\t\t\t\t/>\n\t\t);\n}\n\nfunction AsyncPreviewEmpty<\n\t\tTData = unknown,\n\t\tTContext = unknown,\n\t\tTType extends string = string,\n>({ children, className }: AsyncPreviewEmptyProps<TData, TContext, TType>) {\n\t\tconst { state, strings } = useAsyncPreviewContext<TData, TContext, TType>();\n\t\tif (state.status !== 'empty') return null;\n\t\tif (children) return <>{children(state)}</>;\n\t\treturn (\n\t\t\t\t<EmptyState\n\t\t\t\t\t\tclassName={cn('async-preview--empty', className)}\n\t\t\t\t\t\tpadding=\"md\"\n\t\t\t\t\t\ttitle={strings.emptyTitle}\n\t\t\t\t\t\tdescription={strings.emptyDescription}\n\t\t\t\t/>\n\t\t);\n}\n\nfunction createAsyncPreview<\n\t\tTData,\n\t\tTContext = unknown,\n\t\tTType extends string = string,\n>() {\n\t\treturn {\n\t\t\t\tRoot: AsyncPreviewRoot<TData, TContext, TType>,\n\t\t\t\tTrigger: AsyncPreviewTrigger<TData, TContext, TType>,\n\t\t\t\tContent: AsyncPreviewContent,\n\t\t\t\tState: AsyncPreviewState<TData, TContext, TType>,\n\t\t\t\tBody: AsyncPreviewBody<TData, TContext, TType>,\n\t\t\t\tLoading: AsyncPreviewLoading<TData, TContext, TType>,\n\t\t\t\tError: AsyncPreviewError<TData, TContext, TType>,\n\t\t\t\tEmpty: AsyncPreviewEmpty<TData, TContext, TType>,\n\t\t};\n}\n\nconst AsyncPreview = {\n\t\tRoot: AsyncPreviewRoot,\n\t\tTrigger: AsyncPreviewTrigger,\n\t\tContent: AsyncPreviewContent,\n\t\tState: AsyncPreviewState,\n\t\tBody: AsyncPreviewBody,\n\t\tLoading: AsyncPreviewLoading,\n\t\tError: AsyncPreviewError,\n\t\tEmpty: AsyncPreviewEmpty,\n};\n\nAsyncPreviewRoot.displayName = 'AsyncPreviewRoot';\nAsyncPreviewTrigger.displayName = 'AsyncPreviewTrigger';\nAsyncPreviewContent.displayName = 'AsyncPreviewContent';\nAsyncPreviewState.displayName = 'AsyncPreviewState';\nAsyncPreviewBody.displayName = 'AsyncPreviewBody';\nAsyncPreviewLoading.displayName = 'AsyncPreviewLoading';\nAsyncPreviewError.displayName = 'AsyncPreviewError';\nAsyncPreviewEmpty.displayName = 'AsyncPreviewEmpty';\n\nexport {\n\t\tAsyncPreview,\n\t\tAsyncPreviewRoot,\n\t\tAsyncPreviewTrigger,\n\t\tAsyncPreviewContent,\n\t\tAsyncPreviewState,\n\t\tAsyncPreviewBody,\n\t\tAsyncPreviewLoading,\n\t\tAsyncPreviewError,\n\t\tAsyncPreviewEmpty,\n\t\tcreateAsyncPreview,\n\t\tuseAsyncPreviewContext,\n};\n","/**\n * PreviewTriggerCell — table-cell trigger chrome for AsyncPreview.\n *\n * It renders a button only when preview interaction exists. Empty, disabled,\n * or explicitly non-previewable values keep the same table rhythm without a\n * caret, pointer cursor, popup ARIA, or trigger padding that implies action.\n */\nimport { ChevronDown, type LucideIcon } from 'lucide-react';\nimport React, { type ReactNode } from 'react';\n\nimport { Badge, type BadgeProps } from '../../base/badge';\nimport { Button } from '../../base/buttons';\nimport { Stack } from '../../base/structure';\nimport {\n\tEmptyValue,\n\tName,\n\tSecondaryValue,\n\tValue,\n} from '../../primitives';\nimport { cn } from '../../../lib/utils';\n\ntype PreviewTriggerCellRootProps = Omit<\n\tReact.ButtonHTMLAttributes<HTMLButtonElement>,\n\t'children' | 'disabled' | 'name' | 'value'\n>;\n\nexport interface PreviewTriggerCellProps extends PreviewTriggerCellRootProps {\n\t/** Primary text of the cell. */\n\tvalue?: ReactNode | null;\n\t/** Display name. */\n\tname?: string | null;\n\t/** Supporting text under the value. */\n\tsecondary?: ReactNode | null;\n\t/** Content before the value. */\n\tleading?: ReactNode;\n\t/** Content after the value. */\n\ttrailing?: ReactNode;\n\t/** Chip rendered beside the label. */\n\tbadge?: ReactNode | { label: ReactNode; tone?: BadgeProps['tone']; size?: BadgeProps['size'] };\n\t/** Leading glyph. */\n\ticon?: LucideIcon;\n\t/** Copy shown when the value is empty. */\n\temptyLabel?: ReactNode;\n\t/** Whether this row has a preview to open. */\n\thasPreview?: boolean;\n\t/** Explains why the preview is unavailable, shown as a tooltip. */\n\tdisabledReason?: ReactNode;\n\t/** Applies name casing to the value regardless of how it arrives. */\n\tforceNameCase?: boolean;\n\t/** Merged onto the outermost node. */\n\tclassName?: string;\n\t/** Merged onto the content. */\n\tcontentClassName?: string;\n}\n\nfunction isEmpty(value: ReactNode | null | undefined) {\n\treturn value === null || value === undefined || value === '';\n}\n\nfunction renderBadge(badge: PreviewTriggerCellProps['badge']) {\n\tif (!badge) return null;\n\tif (typeof badge === 'object' && !Array.isArray(badge) && 'label' in badge) {\n\t\treturn (\n\t\t\t<Badge inline tone={badge.tone ?? 'secondary'} size={badge.size}>\n\t\t\t\t{badge.label}\n\t\t\t</Badge>\n\t\t);\n\t}\n\treturn badge;\n}\n\nfunction PreviewTriggerCellInner({\n\tvalue,\n\tname,\n\tsecondary,\n\tleading,\n\ttrailing,\n\tbadge,\n\ticon: Icon,\n\temptyLabel = '--',\n\tforceNameCase,\n\tcontentClassName,\n}: PreviewTriggerCellProps) {\n\tconst primaryIsEmpty = isEmpty(name) && isEmpty(value);\n\treturn (\n\t\t<Stack render={<span />} direction=\"horizontal\" gap=\"sm\" wrap={false} className={cn('preview-trigger-cell--inner', contentClassName)}>\n\t\t\t{!!leading && <span className=\"preview-trigger-cell--leading inline-flex shrink-0 items-center\">{leading}</span>}\n\t\t\t{!!Icon && (\n\t\t\t\t<span className=\"preview-trigger-cell--icon inline-flex shrink-0 items-center text-muted-foreground\">\n\t\t\t\t\t<Icon className=\"size-icon-sm\" aria-hidden />\n\t\t\t\t</span>\n\t\t\t)}\n\t\t\t<span className=\"preview-trigger-cell--content flex min-w-0 flex-1 flex-col items-start\">\n\t\t\t\t<Stack render={<span />} direction=\"horizontal\" gap=\"sm\" wrap={false} className=\"max-w-full\">\n\t\t\t\t\t{primaryIsEmpty ? (\n\t\t\t\t\t\t<EmptyValue className=\"truncate\">\n\t\t\t\t\t\t\t{emptyLabel}\n\t\t\t\t\t\t</EmptyValue>\n\t\t\t\t\t) : name ? (\n\t\t\t\t\t\t<Name\n\t\t\t\t\t\t\tvalue={name}\n\t\t\t\t\t\t\tforce={forceNameCase}\n\t\t\t\t\t\t\tweight=\"medium\"\n\t\t\t\t\t\t\tclassName=\"truncate\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<Value type=\"inherit\" weight=\"medium\" className=\"truncate\">\n\t\t\t\t\t\t\t{value}\n\t\t\t\t\t\t</Value>\n\t\t\t\t\t)}\n\t\t\t\t\t{renderBadge(badge)}\n\t\t\t\t</Stack>\n\t\t\t\t{!isEmpty(secondary) && (\n\t\t\t\t\t<SecondaryValue size=\"xs\" className=\"max-w-full truncate\">\n\t\t\t\t\t\t{secondary}\n\t\t\t\t\t</SecondaryValue>\n\t\t\t\t)}\n\t\t\t</span>\n\t\t\t{!!trailing && <span className=\"preview-trigger-cell--trailing inline-flex shrink-0 items-center\">{trailing}</span>}\n\t\t</Stack>\n\t);\n}\n\nexport const PreviewTriggerCell = React.forwardRef<HTMLButtonElement, PreviewTriggerCellProps>(function PreviewTriggerCell({\n\tvalue,\n\tname,\n\tsecondary,\n\tleading,\n\ttrailing,\n\tbadge,\n\ticon,\n\temptyLabel,\n\thasPreview,\n\tdisabledReason,\n\tforceNameCase,\n\tclassName,\n\tcontentClassName,\n\ttype,\n\t...rootProps\n}, ref) {\n\tconst cellProps = {\n\t\tvalue,\n\t\tname,\n\t\tsecondary,\n\t\tleading,\n\t\ttrailing,\n\t\tbadge,\n\t\ticon,\n\t\temptyLabel,\n\t\tforceNameCase,\n\t\tcontentClassName,\n\t};\n\tconst previewable =\n\t\thasPreview ?? (!isEmpty(name) || !isEmpty(value));\n\tconst interactive = previewable && !disabledReason;\n\n\tif (!interactive) {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'preview-trigger-cell--component flex h-auto min-h-action-sm max-w-full items-center justify-start rounded-inner px-control-sm py-space-xs text-left',\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\taria-disabled={disabledReason ? true : undefined}\n\t\t\t\ttitle={typeof disabledReason === 'string' ? disabledReason : undefined}\n\t\t\t>\n\t\t\t\t<PreviewTriggerCellInner {...cellProps} />\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<Button\n\t\t\t{...rootProps}\n\t\t\tref={ref}\n\t\t\ttype={type ?? 'button'}\n\t\t\ttone=\"secondary\"\n\t\t\tbuttonStyle=\"ghost\"\n\t\t\tsize=\"sm\"\n\t\t\tclassName={cn(\n\t\t\t\t'preview-trigger-cell--component h-auto min-h-action-sm max-w-full justify-start px-control-sm py-space-xs text-left',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t<PreviewTriggerCellInner {...cellProps} />\n\t\t\t<ChevronDown className=\"preview-trigger-cell--caret size-icon-sm shrink-0 text-muted-foreground\" aria-hidden />\n\t\t</Button>\n\t);\n});\n\nPreviewTriggerCell.displayName = 'PreviewTriggerCell';\n"],"mappings":"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"}
1
+ {"version":3,"file":"async-preview.js","names":["_Fragment","Stack","LoadingState","ErrorState","popoverWidthRecipes","Value","Name","SecondaryValue","EmptyValue","Badge","PopoverTrigger","Popover","PopoverContent","EmptyState","React","Fragment$1","defaultAsyncPreviewStrings","asyncPreviewCache","readCache","cacheKey","cached","staleTime","normalizeLoading","loading","hasStaticDataSource","options","useAsyncPreview","openProp","hasStaticData","staticData","onShow","isControlled","uncontrolledOpen","setUncontrolledOpen","useState","defaultOpen","open","data","setData","status","setStatus","error","setError","setLoadingState","meta","setMetaState","setCached","resolvedData","resolvedStatus","abortRef","useRef","requestIdRef","prefetchedRef","metaRef","openRunKeyRef","activeRunKeyRef","stateRef","setOpen","useCallback","nextOpen","currentState","onOpenChange","run","requestKey","type","activeController","reason","cachedEntry","cachePolicy","controller","requestId","hadCache","loadingState","onBeforeShow","onRefresh","applyIfCurrent","fn","result","nextLoading","next","nextMeta","nextStatus","nextData","settledState","onData","onSettled","err","onError","context","refresh","prefetch","close","state","useMemo","useEffect","openRunKey","clearAsyncPreviewCache","AsyncPreviewContext","createContext","useAsyncPreviewContext","ctx","useContext","AsyncPreviewRoot","stringsProp","strings","useStrings","preview","AsyncPreviewTrigger","maybePrefetch","prefetchOn","triggerProps","render","renderedTrigger","Button","AsyncPreviewContent","props","contentProps","sizeClassName","size","inset","padding","cn","className","children","AsyncPreviewState","AsyncPreviewBody","AsyncPreviewLoading","label","phase","progress","AsyncPreviewError","AsyncPreviewEmpty","createAsyncPreview","AsyncPreview","isEmpty","value","renderBadge","badge","PreviewTriggerCellInner","Icon","primaryIsEmpty","name","contentClassName","leading","emptyLabel","forceNameCase","secondary","trailing","PreviewTriggerCell","rootProps","cellProps","hasPreview","disabledReason","ChevronDown"],"sources":["../../src/components/features/async-preview/async-preview.strings.ts","../../src/components/features/async-preview/hooks/use-async-preview.ts","../../src/components/features/async-preview/async-preview.tsx","../../src/components/features/async-preview/preview-trigger-cell.tsx"],"sourcesContent":["/**\n * Strings for AsyncPreview. Consumers override with `strings={{ ... }}` on\n * `<AsyncPreview.Root />`; all user-facing copy is deep-merged via\n * `useStrings`.\n */\nexport interface AsyncPreviewStrings {\n\tloading: string;\n\terrorTitle: string;\n\terrorDescription: string;\n\tretry: string;\n\temptyTitle: string;\n\temptyDescription: string;\n}\n\nexport const defaultAsyncPreviewStrings: AsyncPreviewStrings = {\n\tloading: 'Loading preview...',\n\terrorTitle: 'Could not load preview',\n\terrorDescription: 'Try again or open the full record.',\n\tretry: 'Retry',\n\temptyTitle: 'No preview data',\n\temptyDescription: 'There is nothing to show for this record yet.',\n};\n","import { useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nimport type {\n\t\tAsyncPreviewLoadingState,\n\t\tAsyncPreviewReason,\n\t\tAsyncPreviewRootProps,\n\t\tAsyncPreviewState,\n\t\tAsyncPreviewStatus,\n} from '../async-preview.types';\n\ninterface CacheEntry {\n\t\t/** Formatted time for the entry. */\n\t\ttimestamp: number;\n\t\t/** Records to render. */\n\t\tdata: unknown | null;\n\t\tstatus: 'success' | 'empty';\n\t\tmeta: Record<string, unknown>;\n}\n\nconst asyncPreviewCache = new Map<string, CacheEntry>();\n\nfunction readCache(cacheKey: string | undefined, staleTime: number): CacheEntry | undefined {\n\t\tif (!cacheKey) return undefined;\n\t\tconst cached = asyncPreviewCache.get(cacheKey);\n\t\tif (!cached) return undefined;\n\t\tif (Date.now() - cached.timestamp > staleTime) {\n\t\t\t\tasyncPreviewCache.delete(cacheKey);\n\t\t\t\treturn undefined;\n\t\t}\n\t\treturn cached;\n}\n\nfunction normalizeLoading(\n\t\tloading: AsyncPreviewLoadingState,\n): false | Exclude<AsyncPreviewLoadingState, false> {\n\t\treturn loading === false ? false : loading;\n}\n\nfunction hasStaticDataSource<\n\t\tTData,\n\t\tTContext,\n\t\tTType extends string,\n>(options: UseAsyncPreviewOptions<TData, TContext, TType>) {\n\t\treturn Object.prototype.hasOwnProperty.call(options, 'data');\n}\n\nexport interface UseAsyncPreviewOptions<\n\t\tTData,\n\t\tTContext = unknown,\n\t\tTType extends string = string,\n> extends Omit<AsyncPreviewRootProps<TData, TContext, TType>, 'children' | 'strings'> {}\n\nexport type UseAsyncPreviewReturn<\n\t\tTData,\n\t\tTContext = unknown,\n\t\tTType extends string = string,\n> = AsyncPreviewState<TData, TContext, TType> & {\n\t\tsetOpen: (open: boolean) => void;\n};\n\nexport function useAsyncPreview<\n\t\tTData,\n\t\tTContext = unknown,\n\t\tTType extends string = string,\n>(options: UseAsyncPreviewOptions<TData, TContext, TType>): UseAsyncPreviewReturn<TData, TContext, TType> {\n\t\tconst {\n\t\t\t\ttype,\n\t\t\t\tcontext,\n\t\t\t\tcacheKey,\n\t\t\t\tcachePolicy = 'cache-first',\n\t\t\t\tstaleTime = 300_000,\n\t\t\t\topen: openProp,\n\t\t\t\tdefaultOpen = false,\n\t\t\t\tonOpenChange,\n\t\t\t\tonBeforeShow,\n\t\t\t\tonData,\n\t\t\t\tonError,\n\t\t\t\tonSettled,\n\t\t\t\tonRefresh,\n\t\t} = options;\n\t\tconst hasStaticData = hasStaticDataSource(options);\n\t\tconst staticData = hasStaticData ? options.data ?? null : null;\n\t\tconst onShow = hasStaticData ? undefined : options.onShow;\n\n\t\tconst isControlled = openProp !== undefined;\n\t\tconst [uncontrolledOpen, setUncontrolledOpen] = useState(defaultOpen);\n\t\tconst open = openProp ?? uncontrolledOpen;\n\n\t\tconst [data, setData] = useState<TData | null>(() => {\n\t\t\t\tif (hasStaticData) return staticData as TData | null;\n\t\t\t\tconst cached = readCache(cacheKey, staleTime);\n\t\t\t\treturn cached?.status === 'success' ? cached.data as TData : null;\n\t\t});\n\t\tconst [status, setStatus] = useState<AsyncPreviewStatus>(() => {\n\t\t\t\tif (hasStaticData) return staticData === null ? 'empty' : 'success';\n\t\t\t\tconst cached = readCache(cacheKey, staleTime);\n\t\t\t\treturn cached?.status ?? 'idle';\n\t\t});\n\t\tconst [error, setError] = useState<unknown>(null);\n\t\tconst [loading, setLoadingState] = useState<false | Exclude<AsyncPreviewLoadingState, false>>(false);\n\t\tconst [meta, setMetaState] = useState<Record<string, unknown>>(() => {\n\t\t\t\tconst cached = readCache(cacheKey, staleTime);\n\t\t\t\treturn cached?.meta ?? {};\n\t\t});\n\t\tconst [cached, setCached] = useState(() => readCache(cacheKey, staleTime) !== undefined);\n\t\tconst resolvedData = hasStaticData ? staticData as TData | null : data;\n\t\tconst resolvedStatus = hasStaticData\n\t\t\t\t? staticData === null ? 'empty' : 'success'\n\t\t\t\t: status;\n\n\t\tconst abortRef = useRef<AbortController | null>(null);\n\t\tconst requestIdRef = useRef(0);\n\t\tconst prefetchedRef = useRef(false);\n\t\tconst metaRef = useRef(meta);\n\t\tconst openRunKeyRef = useRef<string | null>(null);\n\t\tconst activeRunKeyRef = useRef<string | null>(null);\n\n\t\tconst stateRef = useRef<AsyncPreviewState<TData, TContext, TType> | null>(null);\n\n\t\tconst setOpen = useCallback(\n\t\t\t\t(nextOpen: boolean) => {\n\t\t\t\t\t\tif (!isControlled) setUncontrolledOpen(nextOpen);\n\t\t\t\t\t\tconst currentState = stateRef.current;\n\t\t\t\t\t\tif (currentState) {\n\t\t\t\t\t\t\t\tonOpenChange?.(nextOpen, { ...currentState, open: nextOpen });\n\t\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t[isControlled, onOpenChange],\n\t\t);\n\n\t\tconst run = useCallback(\n\t\t\t\tasync (reason: AsyncPreviewReason) => {\n\t\t\t\t\t\tif (hasStaticData || !onShow) return;\n\n\t\t\t\t\t\tconst requestKey = cacheKey ?? type;\n\t\t\t\t\t\tconst activeController = abortRef.current;\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\treason === 'open' &&\n\t\t\t\t\t\t\t\tactiveRunKeyRef.current === requestKey &&\n\t\t\t\t\t\t\t\tactiveController &&\n\t\t\t\t\t\t\t\t!activeController.signal.aborted\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// A cache hit still supersedes work for the previous preview.\n\t\t\t\t\t\tabortRef.current?.abort();\n\t\t\t\t\t\tabortRef.current = null;\n\t\t\t\t\t\tactiveRunKeyRef.current = null;\n\n\t\t\t\t\t\tconst cachedEntry = readCache(cacheKey, staleTime);\n\t\t\t\t\t\tconst canUseCache =\n\t\t\t\t\t\t\t\treason === 'open' &&\n\t\t\t\t\t\t\t\tcachedEntry !== undefined &&\n\t\t\t\t\t\t\t\tcachePolicy === 'cache-first';\n\n\t\t\t\t\t\tif (canUseCache) {\n\t\t\t\t\t\t\t\tsetCached(true);\n\t\t\t\t\t\t\t\tsetError(null);\n\t\t\t\t\t\t\t\tmetaRef.current = cachedEntry.meta;\n\t\t\t\t\t\t\t\tsetMetaState(cachedEntry.meta);\n\t\t\t\t\t\t\t\tsetData(cachedEntry.status === 'success' ? cachedEntry.data as TData : null);\n\t\t\t\t\t\t\t\tsetStatus(cachedEntry.status);\n\t\t\t\t\t\t\t\tsetLoadingState(false);\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst controller = new AbortController();\n\t\t\t\t\t\tabortRef.current = controller;\n\t\t\t\t\t\tactiveRunKeyRef.current = requestKey;\n\t\t\t\t\t\tconst requestId = requestIdRef.current + 1;\n\t\t\t\t\t\trequestIdRef.current = requestId;\n\t\t\t\t\t\tconst hadCache = cachedEntry !== undefined;\n\n\t\t\t\t\t\tsetCached(false);\n\t\t\t\t\t\tsetError(null);\n\t\t\t\t\t\tsetStatus('loading');\n\t\t\t\t\t\tsetLoadingState({ label: undefined });\n\n\t\t\t\t\t\tconst loadingState = stateRef.current\n\t\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\t\t\t\t...stateRef.current,\n\t\t\t\t\t\t\t\t\t\t\t\terror: null,\n\t\t\t\t\t\t\t\t\t\t\t\tloading: { label: undefined },\n\t\t\t\t\t\t\t\t\t\t\t\tstatus: 'loading' as const,\n\t\t\t\t\t\t\t\t\t\t\t\tcached: false,\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t: null;\n\n\t\t\t\t\t\tif (loadingState) onBeforeShow?.(loadingState);\n\t\t\t\t\t\tif (reason === 'refresh') {\n\t\t\t\t\t\t\t\tif (loadingState) onRefresh?.(loadingState);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst applyIfCurrent = (fn: () => void) => {\n\t\t\t\t\t\t\t\tif (requestIdRef.current !== requestId || controller.signal.aborted) return;\n\t\t\t\t\t\t\t\tfn();\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tconst result = await onShow({\n\t\t\t\t\t\t\t\t\t\ttype,\n\t\t\t\t\t\t\t\t\t\tcontext,\n\t\t\t\t\t\t\t\t\t\tsignal: controller.signal,\n\t\t\t\t\t\t\t\t\t\treason,\n\t\t\t\t\t\t\t\t\t\tcached: hadCache,\n\t\t\t\t\t\t\t\t\t\tsetLoading: (nextLoading) =>\n\t\t\t\t\t\t\t\t\t\t\t\tapplyIfCurrent(() => setLoadingState(normalizeLoading(nextLoading))),\n\t\t\t\t\t\t\t\t\t\tsetMeta: (nextMeta) =>\n\t\t\t\t\t\t\t\t\t\t\t\tapplyIfCurrent(() => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tconst next = { ...metaRef.current, ...nextMeta };\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tmetaRef.current = next;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsetMetaState(next);\n\t\t\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\tapplyIfCurrent(() => {\n\t\t\t\t\t\t\t\t\t\tconst nextStatus: Extract<AsyncPreviewStatus, 'empty' | 'success'> =\n\t\t\t\t\t\t\t\t\t\t\t\tresult === null || result === undefined ? 'empty' : 'success';\n\t\t\t\t\t\t\t\t\t\tconst nextData = nextStatus === 'success' ? result as TData : null;\n\t\t\t\t\t\t\t\t\t\tsetData(nextData);\n\t\t\t\t\t\t\t\t\t\tsetStatus(nextStatus);\n\t\t\t\t\t\t\t\t\t\tsetLoadingState(false);\n\t\t\t\t\t\t\t\t\t\tsetError(null);\n\t\t\t\t\t\t\t\t\t\tsetCached(false);\n\n\t\t\t\t\t\t\t\t\t\tif (cacheKey) {\n\t\t\t\t\t\t\t\t\t\t\t\tasyncPreviewCache.set(cacheKey, {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttimestamp: Date.now(),\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdata: nextData,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tstatus: nextStatus,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tmeta: metaRef.current,\n\t\t\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tconst settledState = stateRef.current\n\t\t\t\t\t\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t...stateRef.current,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdata: nextData,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\terror: null,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tloading: false as const,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstatus: nextStatus,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tmeta: metaRef.current,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcached: false,\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t: null;\n\n\t\t\t\t\t\t\t\t\t\tif (nextData !== null && settledState) {\n\t\t\t\t\t\t\t\t\t\t\t\tonData?.(nextData, settledState);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tif (settledState) onSettled?.(settledState);\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\t\t\tif (controller.signal.aborted) return;\n\t\t\t\t\t\t\t\tapplyIfCurrent(() => {\n\t\t\t\t\t\t\t\t\t\tsetError(err);\n\t\t\t\t\t\t\t\t\t\tsetStatus('error');\n\t\t\t\t\t\t\t\t\t\tsetLoadingState(false);\n\t\t\t\t\t\t\t\t\t\tconst settledState = stateRef.current\n\t\t\t\t\t\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t...stateRef.current,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\terror: err,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tloading: false as const,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstatus: 'error' as const,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcached: false,\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t: null;\n\t\t\t\t\t\t\t\t\t\tif (settledState) onError?.(err, settledState);\n\t\t\t\t\t\t\t\t\t\tif (settledState) onSettled?.(settledState);\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\t\tif (requestIdRef.current === requestId) {\n\t\t\t\t\t\t\t\t\t\tif (abortRef.current === controller) abortRef.current = null;\n\t\t\t\t\t\t\t\t\t\tif (activeRunKeyRef.current === requestKey) activeRunKeyRef.current = null;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t[\n\t\t\t\t\t\tcacheKey,\n\t\t\t\t\t\tcachePolicy,\n\t\t\t\t\t\tcontext,\n\t\t\t\t\t\thasStaticData,\n\t\t\t\t\t\tonBeforeShow,\n\t\t\t\t\t\tonData,\n\t\t\t\t\t\tonError,\n\t\t\t\t\t\tonRefresh,\n\t\t\t\t\t\tonSettled,\n\t\t\t\t\t\tonShow,\n\t\t\t\t\t\tstaleTime,\n\t\t\t\t\t\ttype,\n\t\t\t\t],\n\t\t);\n\n\t\tconst refresh = useCallback(() => {\n\t\t\t\tvoid run('refresh');\n\t\t}, [run]);\n\n\t\tconst prefetch = useCallback(() => {\n\t\t\t\tif (hasStaticData) return;\n\t\t\t\tif (prefetchedRef.current) return;\n\t\t\t\tprefetchedRef.current = true;\n\t\t\t\tvoid run('prefetch');\n\t\t}, [hasStaticData, run]);\n\n\t\tconst close = useCallback(() => {\n\t\t\t\tsetOpen(false);\n\t\t}, [setOpen]);\n\n\t\tconst state = useMemo<AsyncPreviewState<TData, TContext, TType>>(\n\t\t\t\t() => ({\n\t\t\t\t\t\ttype,\n\t\t\t\t\t\tcontext,\n\t\t\t\t\t\tdata: resolvedData,\n\t\t\t\t\t\terror,\n\t\t\t\t\t\tloading,\n\t\t\t\t\t\tstatus: resolvedStatus,\n\t\t\t\t\t\tmeta,\n\t\t\t\t\t\topen,\n\t\t\t\t\t\tcached,\n\t\t\t\t\t\trefresh,\n\t\t\t\t\t\tprefetch,\n\t\t\t\t\t\tclose,\n\t\t\t\t}),\n\t\t\t\t[cached, close, context, error, loading, meta, open, prefetch, refresh, resolvedData, resolvedStatus, type],\n\t\t);\n\t\tstateRef.current = state;\n\t\tmetaRef.current = meta;\n\n\t\tuseEffect(() => {\n\t\t\t\tif (!hasStaticData) return;\n\t\t\t\tabortRef.current?.abort();\n\t\t\t\tabortRef.current = null;\n\t\t\t\tactiveRunKeyRef.current = null;\n\t\t\t\topenRunKeyRef.current = null;\n\t\t\t\tsetError(null);\n\t\t\t\tsetLoadingState(false);\n\t\t\t\tsetCached(false);\n\t\t}, [hasStaticData, staticData]);\n\n\t\tuseEffect(() => {\n\t\t\t\tif (!open) {\n\t\t\t\t\t\topenRunKeyRef.current = null;\n\t\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (hasStaticData) return;\n\n\t\t\t\tconst openRunKey = cacheKey ?? type;\n\t\t\t\tif (openRunKeyRef.current === openRunKey) return;\n\t\t\t\topenRunKeyRef.current = openRunKey;\n\t\t\t\tvoid run('open');\n\t\t}, [cacheKey, hasStaticData, open, run, type]);\n\n\t\tuseEffect(() => {\n\t\t\t\tprefetchedRef.current = false;\n\t\t}, [cacheKey, hasStaticData, type]);\n\n\t\tuseEffect(\n\t\t\t\t() => () => {\n\t\t\t\t\t\tabortRef.current?.abort();\n\t\t\t\t},\n\t\t\t\t[],\n\t\t);\n\n\t\treturn { ...state, setOpen };\n}\n\nexport function clearAsyncPreviewCache(cacheKey?: string) {\n\t\tif (cacheKey) {\n\t\t\t\tasyncPreviewCache.delete(cacheKey);\n\t\t\t\treturn;\n\t\t}\n\t\tasyncPreviewCache.clear();\n}\n","/**\n * AsyncPreview — generic lazy preview popover for table cells, inline values,\n * buttons, badges, or any other trigger.\n *\n * The library owns popover chrome, async state, abort/race protection, cache,\n * loading/error/empty defaults, and composition primitives. Consumers own the\n * fetcher, routing callbacks, telemetry, and domain rendering.\n */\nimport {\n\t\tcreateContext,\n\t\tuseContext,\n} from 'react';\n\nimport { Button } from '../../base/buttons';\nimport { ErrorState, LoadingState } from '../../base/feedback';\nimport { EmptyState } from '../../blocks/data-display';\nimport {\n\t\tPopover,\n\t\tPopoverContent,\n\t\tPopoverTrigger,\n} from '../../base/popover';\nimport { useStrings } from '../../../lib/strings';\nimport { cn } from '../../../lib/utils';\n\nimport {\n\t\tdefaultAsyncPreviewStrings,\n\t\ttype AsyncPreviewStrings,\n} from './async-preview.strings';\nimport type {\n\t\tAsyncPreviewBodyProps,\n\t\tAsyncPreviewContentProps,\n\t\tAsyncPreviewEmptyProps,\n\t\tAsyncPreviewErrorProps,\n\t\tAsyncPreviewLoadingProps,\n\t\tAsyncPreviewRootProps,\n\t\tAsyncPreviewState as AsyncPreviewStateValue,\n\t\tAsyncPreviewStateProps,\n\t\tAsyncPreviewTriggerProps,\n} from './async-preview.types';\nimport { useAsyncPreview } from './hooks/use-async-preview';\nimport { popoverWidthRecipes } from '../../base/popover/popover.recipes';\n\ninterface AsyncPreviewContextValue<TData, TContext, TType extends string> {\n\t\tstate: AsyncPreviewStateValue<TData, TContext, TType>;\n\t\tsetOpen: (open: boolean) => void;\n\t\t/** Overrides this surface's own copy. */\n\t\tstrings: AsyncPreviewStrings;\n\t\tprefetchOn: false | 'hover' | 'focus';\n}\n\nconst AsyncPreviewContext =\n\t\tcreateContext<AsyncPreviewContextValue<unknown, unknown, string> | null>(null);\n\nfunction useAsyncPreviewContext<\n\t\tTData = unknown,\n\t\tTContext = unknown,\n\t\tTType extends string = string,\n>(): AsyncPreviewContextValue<TData, TContext, TType> {\n\t\tconst ctx = useContext(AsyncPreviewContext);\n\t\tif (!ctx) {\n\t\t\t\tthrow new Error('AsyncPreview compound parts must be rendered inside <AsyncPreview.Root>.');\n\t\t}\n\t\treturn ctx as AsyncPreviewContextValue<TData, TContext, TType>;\n}\n\nfunction AsyncPreviewRoot<\n\t\tTData,\n\t\tTContext = unknown,\n\t\tTType extends string = string,\n>({\n\t\tchildren,\n\t\tstrings: stringsProp,\n\t\tprefetchOn = false,\n\t\t...options\n}: AsyncPreviewRootProps<TData, TContext, TType>) {\n\t\tconst strings = useStrings(defaultAsyncPreviewStrings, stringsProp);\n\t\tconst preview = useAsyncPreview<TData, TContext, TType>(options);\n\t\tconst state: AsyncPreviewStateValue<TData, TContext, TType> = {\n\t\t\t\ttype: preview.type,\n\t\t\t\tcontext: preview.context,\n\t\t\t\tdata: preview.data,\n\t\t\t\terror: preview.error,\n\t\t\t\tloading: preview.loading,\n\t\t\t\tstatus: preview.status,\n\t\t\t\tmeta: preview.meta,\n\t\t\t\topen: preview.open,\n\t\t\t\tcached: preview.cached,\n\t\t\t\trefresh: preview.refresh,\n\t\t\t\tprefetch: preview.prefetch,\n\t\t\t\tclose: () => preview.setOpen(false),\n\t\t};\n\n\t\treturn (\n\t\t\t\t<AsyncPreviewContext.Provider\n\t\t\t\t\t\tvalue={{\n\t\t\t\t\t\t\t\tstate: state as AsyncPreviewStateValue<unknown, unknown, string>,\n\t\t\t\t\t\t\t\tsetOpen: preview.setOpen,\n\t\t\t\t\t\t\t\tstrings,\n\t\t\t\t\t\t\t\tprefetchOn,\n\t\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t\t<span className=\"async-preview--component contents\">\n\t\t\t\t\t\t\t\t<Popover open={state.open} onOpenChange={preview.setOpen}>\n\t\t\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t\t</Popover>\n\t\t\t\t\t\t</span>\n\t\t\t\t</AsyncPreviewContext.Provider>\n\t\t);\n}\n\nfunction AsyncPreviewTrigger<\n\t\tTData = unknown,\n\t\tTContext = unknown,\n\t\tTType extends string = string,\n>({ render, children }: AsyncPreviewTriggerProps<TData, TContext, TType>) {\n\t\tconst { state, prefetchOn } = useAsyncPreviewContext<TData, TContext, TType>();\n\t\tconst maybePrefetch = () => {\n\t\t\t\tif (prefetchOn) state.prefetch();\n\t\t};\n\t\tconst triggerProps = {\n\t\t\t\t'aria-busy': state.status === 'loading' ? true as const : undefined,\n\t\t\t\t'data-state': state.open ? 'open' as const : 'closed' as const,\n\t\t\t\t'data-loading': state.status === 'loading' ? true as const : undefined,\n\t\t\t\tonPointerEnter: prefetchOn === 'hover' ? maybePrefetch : undefined,\n\t\t\t\tonFocus: prefetchOn === 'focus' ? maybePrefetch : undefined,\n\t\t};\n\n\t\tif (render) {\n\t\t\t\tconst renderedTrigger = typeof render === 'function'\n\t\t\t\t\t\t? render({ state, triggerProps })\n\t\t\t\t\t\t: render;\n\t\t\t\treturn (\n\t\t\t\t\t\t<PopoverTrigger\n\t\t\t\t\t\t\t\trender={renderedTrigger}\n\t\t\t\t\t\t\t\t{...triggerProps}\n\t\t\t\t\t\t/>\n\t\t\t\t);\n\t\t}\n\n\t\treturn (\n\t\t\t\t<PopoverTrigger\n\t\t\t\t\t\trender={\n\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\t\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\t\t\t\t\t\t{...triggerProps}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t}\n\t\t\t\t/>\n\t\t);\n}\n\nfunction AsyncPreviewContent({\n\t\tclassName,\n\t\tchildren,\n\t\talign = 'start',\n\t\tsideOffset = 8,\n\t\tfinalFocus = true,\n\t\t...props\n}: AsyncPreviewContentProps) {\n\t\tconst { state } = useAsyncPreviewContext();\n\t\tconst { size = 'md', padding = 'none', ...contentProps } = props;\n\t\tconst sizeClassName = {\n\t\t\t\tsm: popoverWidthRecipes.md,\n\t\t\t\tmd: popoverWidthRecipes.lg,\n\t\t\t\tlg: popoverWidthRecipes.xl,\n\t\t}[size];\n\t\tconst inset = ({\n\t\t\t\tnone: 'flush',\n\t\t\t\tsm: 'compact',\n\t\t\t\tmd: 'default',\n\t\t\t\tlg: 'flush',\n\t\t} as const)[padding];\n\t\tconst paddingClassName = padding === 'none'\n\t\t\t\t? 'gap-0'\n\t\t\t\t: undefined;\n\n\t\treturn (\n\t\t\t\t<PopoverContent\n\t\t\t\t\t\ttype=\"display\"\n\t\t\t\t\t\talign={align}\n\t\t\t\t\t\tsideOffset={sideOffset}\n\t\t\t\t\t\tfinalFocus={finalFocus}\n\t\t\t\t\t\tinset={inset}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t'async-preview--content overflow-hidden',\n\t\t\t\t\t\t\t\tsizeClassName,\n\t\t\t\t\t\t\t\tpaddingClassName,\n\t\t\t\t\t\t\t\tclassName,\n\t\t\t\t\t\t)}\n\t\t\t\t\t\tdata-status={state.status}\n\t\t\t\t\t\tdata-preview-type={state.type}\n\t\t\t\t\t\t{...contentProps}\n\t\t\t\t>\n\t\t\t\t\t\t{padding === 'lg' ? <div className=\"p-surface-lg\">{children}</div> : children}\n\t\t\t\t</PopoverContent>\n\t\t);\n}\n\nfunction AsyncPreviewState<\n\t\tTData = unknown,\n\t\tTContext = unknown,\n\t\tTType extends string = string,\n>({ children }: AsyncPreviewStateProps<TData, TContext, TType>) {\n\t\tconst { state } = useAsyncPreviewContext<TData, TContext, TType>();\n\t\treturn <>{children(state)}</>;\n}\n\nfunction AsyncPreviewBody<\n\t\tTData = unknown,\n\t\tTContext = unknown,\n\t\tTType extends string = string,\n>({ children }: AsyncPreviewBodyProps<TData, TContext, TType>) {\n\t\tconst { state } = useAsyncPreviewContext<TData, TContext, TType>();\n\t\tif (state.status !== 'success' || state.data === null) return null;\n\t\treturn <>{children({ ...state, data: state.data })}</>;\n}\n\nfunction AsyncPreviewLoading<\n\t\tTData = unknown,\n\t\tTContext = unknown,\n\t\tTType extends string = string,\n>({ children, className }: AsyncPreviewLoadingProps<TData, TContext, TType>) {\n\t\tconst { state, strings } = useAsyncPreviewContext<TData, TContext, TType>();\n\t\tif (state.status !== 'loading') return null;\n\t\tif (children) return <>{children(state)}</>;\n\t\tconst label =\n\t\t\t\ttypeof state.loading === 'object' && state.loading !== null\n\t\t\t\t\t\t? state.loading.label\n\t\t\t\t\t\t: undefined;\n\t\tconst phase =\n\t\t\t\ttypeof state.loading === 'object' && state.loading !== null\n\t\t\t\t\t\t? state.loading.phase\n\t\t\t\t\t\t: undefined;\n\t\tconst progress =\n\t\t\t\ttypeof state.loading === 'object' &&\n\t\t\t\tstate.loading !== null &&\n\t\t\t\ttypeof state.loading.progress === 'number'\n\t\t\t\t\t\t? Math.min(100, Math.max(0, state.loading.progress))\n\t\t\t\t\t\t: undefined;\n\n\t\treturn (\n\t\t\t\t<LoadingState\n\t\t\t\t\t\tclassName={cn('async-preview--loading p-surface', className)}\n\t\t\t\t\t\tvariant=\"panel\"\n\t\t\t\t\t\tlabel={label ?? strings.loading}\n\t\t\t\t\t\tdescription={phase}\n\t\t\t\t\t\tprogress={progress}\n\t\t\t\t\t\tskeleton\n\t\t\t\t\t\tlines={3}\n\t\t\t\t/>\n\t\t);\n}\n\nfunction AsyncPreviewError<\n\t\tTData = unknown,\n\t\tTContext = unknown,\n\t\tTType extends string = string,\n>({ children, className }: AsyncPreviewErrorProps<TData, TContext, TType>) {\n\t\tconst { state, strings } = useAsyncPreviewContext<TData, TContext, TType>();\n\t\tif (state.status !== 'error') return null;\n\t\tif (children) return <>{children(state)}</>;\n\t\treturn (\n\t\t\t\t<ErrorState\n\t\t\t\t\t\tclassName={cn('async-preview--error p-surface', className)}\n\t\t\t\t\t\ttitle={strings.errorTitle}\n\t\t\t\t\t\tdescription={strings.errorDescription}\n\t\t\t\t\t\tonRetry={state.refresh}\n\t\t\t\t\t\tretryLabel={strings.retry}\n\t\t\t\t\t\tvariant=\"inline\"\n\t\t\t\t/>\n\t\t);\n}\n\nfunction AsyncPreviewEmpty<\n\t\tTData = unknown,\n\t\tTContext = unknown,\n\t\tTType extends string = string,\n>({ children, className }: AsyncPreviewEmptyProps<TData, TContext, TType>) {\n\t\tconst { state, strings } = useAsyncPreviewContext<TData, TContext, TType>();\n\t\tif (state.status !== 'empty') return null;\n\t\tif (children) return <>{children(state)}</>;\n\t\treturn (\n\t\t\t\t<EmptyState\n\t\t\t\t\t\tclassName={cn('async-preview--empty', className)}\n\t\t\t\t\t\tpadding=\"md\"\n\t\t\t\t\t\ttitle={strings.emptyTitle}\n\t\t\t\t\t\tdescription={strings.emptyDescription}\n\t\t\t\t/>\n\t\t);\n}\n\nfunction createAsyncPreview<\n\t\tTData,\n\t\tTContext = unknown,\n\t\tTType extends string = string,\n>() {\n\t\treturn {\n\t\t\t\tRoot: AsyncPreviewRoot<TData, TContext, TType>,\n\t\t\t\tTrigger: AsyncPreviewTrigger<TData, TContext, TType>,\n\t\t\t\tContent: AsyncPreviewContent,\n\t\t\t\tState: AsyncPreviewState<TData, TContext, TType>,\n\t\t\t\tBody: AsyncPreviewBody<TData, TContext, TType>,\n\t\t\t\tLoading: AsyncPreviewLoading<TData, TContext, TType>,\n\t\t\t\tError: AsyncPreviewError<TData, TContext, TType>,\n\t\t\t\tEmpty: AsyncPreviewEmpty<TData, TContext, TType>,\n\t\t};\n}\n\nconst AsyncPreview = {\n\t\tRoot: AsyncPreviewRoot,\n\t\tTrigger: AsyncPreviewTrigger,\n\t\tContent: AsyncPreviewContent,\n\t\tState: AsyncPreviewState,\n\t\tBody: AsyncPreviewBody,\n\t\tLoading: AsyncPreviewLoading,\n\t\tError: AsyncPreviewError,\n\t\tEmpty: AsyncPreviewEmpty,\n};\n\nAsyncPreviewRoot.displayName = 'AsyncPreviewRoot';\nAsyncPreviewTrigger.displayName = 'AsyncPreviewTrigger';\nAsyncPreviewContent.displayName = 'AsyncPreviewContent';\nAsyncPreviewState.displayName = 'AsyncPreviewState';\nAsyncPreviewBody.displayName = 'AsyncPreviewBody';\nAsyncPreviewLoading.displayName = 'AsyncPreviewLoading';\nAsyncPreviewError.displayName = 'AsyncPreviewError';\nAsyncPreviewEmpty.displayName = 'AsyncPreviewEmpty';\n\nexport {\n\t\tAsyncPreview,\n\t\tAsyncPreviewRoot,\n\t\tAsyncPreviewTrigger,\n\t\tAsyncPreviewContent,\n\t\tAsyncPreviewState,\n\t\tAsyncPreviewBody,\n\t\tAsyncPreviewLoading,\n\t\tAsyncPreviewError,\n\t\tAsyncPreviewEmpty,\n\t\tcreateAsyncPreview,\n\t\tuseAsyncPreviewContext,\n};\n","/**\n * PreviewTriggerCell — table-cell trigger chrome for AsyncPreview.\n *\n * It renders a button only when preview interaction exists. Empty, disabled,\n * or explicitly non-previewable values keep the same table rhythm without a\n * caret, pointer cursor, popup ARIA, or trigger padding that implies action.\n */\nimport { ChevronDown, type LucideIcon } from 'lucide-react';\nimport React, { type ReactNode } from 'react';\n\nimport { Badge, type BadgeProps } from '../../base/badge';\nimport { Button } from '../../base/buttons';\nimport { Stack } from '../../base/structure';\nimport {\n\tEmptyValue,\n\tName,\n\tSecondaryValue,\n\tValue,\n} from '../../primitives';\nimport { cn } from '../../../lib/utils';\n\ntype PreviewTriggerCellRootProps = Omit<\n\tReact.ButtonHTMLAttributes<HTMLButtonElement>,\n\t'children' | 'disabled' | 'name' | 'value'\n>;\n\nexport interface PreviewTriggerCellProps extends PreviewTriggerCellRootProps {\n\t/** Primary text of the cell. */\n\tvalue?: ReactNode | null;\n\t/** Display name. */\n\tname?: string | null;\n\t/** Supporting text under the value. */\n\tsecondary?: ReactNode | null;\n\t/** Content before the value. */\n\tleading?: ReactNode;\n\t/** Content after the value. */\n\ttrailing?: ReactNode;\n\t/** Chip rendered beside the label. */\n\tbadge?: ReactNode | { label: ReactNode; tone?: BadgeProps['tone']; size?: BadgeProps['size'] };\n\t/** Leading glyph. */\n\ticon?: LucideIcon;\n\t/** Copy shown when the value is empty. */\n\temptyLabel?: ReactNode;\n\t/** Whether this row has a preview to open. */\n\thasPreview?: boolean;\n\t/** Explains why the preview is unavailable, shown as a tooltip. */\n\tdisabledReason?: ReactNode;\n\t/** Applies name casing to the value regardless of how it arrives. */\n\tforceNameCase?: boolean;\n\t/** Merged onto the outermost node. */\n\tclassName?: string;\n\t/** Merged onto the content. */\n\tcontentClassName?: string;\n}\n\nfunction isEmpty(value: ReactNode | null | undefined) {\n\treturn value === null || value === undefined || value === '';\n}\n\nfunction renderBadge(badge: PreviewTriggerCellProps['badge']) {\n\tif (!badge) return null;\n\tif (typeof badge === 'object' && !Array.isArray(badge) && 'label' in badge) {\n\t\treturn (\n\t\t\t<Badge inline tone={badge.tone ?? 'secondary'} size={badge.size}>\n\t\t\t\t{badge.label}\n\t\t\t</Badge>\n\t\t);\n\t}\n\treturn badge;\n}\n\nfunction PreviewTriggerCellInner({\n\tvalue,\n\tname,\n\tsecondary,\n\tleading,\n\ttrailing,\n\tbadge,\n\ticon: Icon,\n\temptyLabel = '--',\n\tforceNameCase,\n\tcontentClassName,\n}: PreviewTriggerCellProps) {\n\tconst primaryIsEmpty = isEmpty(name) && isEmpty(value);\n\treturn (\n\t\t<Stack render={<span />} direction=\"horizontal\" gap=\"sm\" wrap={false} className={cn('preview-trigger-cell--inner', contentClassName)}>\n\t\t\t{!!leading && <span className=\"preview-trigger-cell--leading inline-flex shrink-0 items-center\">{leading}</span>}\n\t\t\t{!!Icon && (\n\t\t\t\t<span className=\"preview-trigger-cell--icon inline-flex shrink-0 items-center text-muted-foreground\">\n\t\t\t\t\t<Icon className=\"size-icon-sm\" aria-hidden />\n\t\t\t\t</span>\n\t\t\t)}\n\t\t\t<span className=\"preview-trigger-cell--content flex min-w-0 flex-1 flex-col items-start\">\n\t\t\t\t<Stack render={<span />} direction=\"horizontal\" gap=\"sm\" wrap={false} className=\"max-w-full\">\n\t\t\t\t\t{primaryIsEmpty ? (\n\t\t\t\t\t\t<EmptyValue className=\"truncate\">\n\t\t\t\t\t\t\t{emptyLabel}\n\t\t\t\t\t\t</EmptyValue>\n\t\t\t\t\t) : name ? (\n\t\t\t\t\t\t<Name\n\t\t\t\t\t\t\tvalue={name}\n\t\t\t\t\t\t\tforce={forceNameCase}\n\t\t\t\t\t\t\tweight=\"medium\"\n\t\t\t\t\t\t\tclassName=\"truncate\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<Value type=\"inherit\" weight=\"medium\" className=\"truncate\">\n\t\t\t\t\t\t\t{value}\n\t\t\t\t\t\t</Value>\n\t\t\t\t\t)}\n\t\t\t\t\t{renderBadge(badge)}\n\t\t\t\t</Stack>\n\t\t\t\t{!isEmpty(secondary) && (\n\t\t\t\t\t<SecondaryValue size=\"xs\" className=\"max-w-full truncate\">\n\t\t\t\t\t\t{secondary}\n\t\t\t\t\t</SecondaryValue>\n\t\t\t\t)}\n\t\t\t</span>\n\t\t\t{!!trailing && <span className=\"preview-trigger-cell--trailing inline-flex shrink-0 items-center\">{trailing}</span>}\n\t\t</Stack>\n\t);\n}\n\nexport const PreviewTriggerCell = React.forwardRef<HTMLButtonElement, PreviewTriggerCellProps>(function PreviewTriggerCell({\n\tvalue,\n\tname,\n\tsecondary,\n\tleading,\n\ttrailing,\n\tbadge,\n\ticon,\n\temptyLabel,\n\thasPreview,\n\tdisabledReason,\n\tforceNameCase,\n\tclassName,\n\tcontentClassName,\n\ttype,\n\t...rootProps\n}, ref) {\n\tconst cellProps = {\n\t\tvalue,\n\t\tname,\n\t\tsecondary,\n\t\tleading,\n\t\ttrailing,\n\t\tbadge,\n\t\ticon,\n\t\temptyLabel,\n\t\tforceNameCase,\n\t\tcontentClassName,\n\t};\n\tconst previewable =\n\t\thasPreview ?? (!isEmpty(name) || !isEmpty(value));\n\tconst interactive = previewable && !disabledReason;\n\n\tif (!interactive) {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'preview-trigger-cell--component flex h-auto min-h-action-sm max-w-full items-center justify-start rounded-radius px-control-sm py-space-xs text-left',\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\taria-disabled={disabledReason ? true : undefined}\n\t\t\t\ttitle={typeof disabledReason === 'string' ? disabledReason : undefined}\n\t\t\t>\n\t\t\t\t<PreviewTriggerCellInner {...cellProps} />\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<Button\n\t\t\t{...rootProps}\n\t\t\tref={ref}\n\t\t\ttype={type ?? 'button'}\n\t\t\ttone=\"secondary\"\n\t\t\tbuttonStyle=\"ghost\"\n\t\t\tsize=\"sm\"\n\t\t\tclassName={cn(\n\t\t\t\t'preview-trigger-cell--component h-auto min-h-action-sm max-w-full justify-start px-control-sm py-space-xs text-left',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t<PreviewTriggerCellInner {...cellProps} />\n\t\t\t<ChevronDown className=\"preview-trigger-cell--caret size-icon-sm shrink-0 text-muted-foreground\" aria-hidden />\n\t\t</Button>\n\t);\n});\n\nPreviewTriggerCell.displayName = 'PreviewTriggerCell';\n"],"mappings":"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"}
@@ -1,3 +1,3 @@
1
1
  "use client";
2
- import { a as e, i as t, n, o as r, r as i, t as a } from "../combobox-CBJDs6w_.js";
2
+ import { a as e, i as t, n, o as r, r as i, t as a } from "../combobox-BwzoXFSG.js";
3
3
  export { a as AsyncResourceCombobox, i as Combobox, t as MultiCombobox, n as defaultAsyncResourceComboboxStrings, r as defaultComboboxStrings, e as useComboboxCore };
@@ -1,3 +1,3 @@
1
1
  "use client";
2
- import { a as e, c as t, d as n, f as r, i, l as a, n as o, o as s, p as c, r as l, s as u, t as d, u as f } from "../comments-Di4w0H_S.js";
2
+ import { a as e, c as t, d as n, f as r, i, l as a, n as o, o as s, p as c, r as l, s as u, t as d, u as f } from "../comments-Dmpp0YIc.js";
3
3
  export { a as CommentAttachmentChip, s as CommentComposer, i as CommentContent, e as CommentEmpty, l as CommentItem, o as CommentTimeline, d as Comments, c as defaultCommentsStrings, u as makeReplyEyebrow, t as useAttachmentUpload, f as useComments, n as useResolvedAccessors, r as useResolvedStrings };
@@ -1,15 +1,15 @@
1
1
  "use client";
2
2
  import { useStrings as e } from "../lib/strings.js";
3
- import { t } from "../utils-CF3c95Io.js";
4
- import { n } from "../buttons-BbfzgczK.js";
5
- import { c as r } from "../typography-CSyJrh28.js";
6
- import { r as i, t as a } from "../structure-C0V0_Fyf.js";
7
- import { g as o } from "../primitives-Du64iDbb.js";
8
- import { t as s } from "../number-E_OiIfJz.js";
9
- import { i as c, r as l, t as u } from "../tabs-eqVsJZWO.js";
10
- import { t as d } from "../popover-menu-BYaCdFhf.js";
11
- import { f } from "../table-DH7rozUv.js";
12
- import { N as p, O as m, P as h, T as g, l as _, w as v } from "../filters-BcT-uoFy.js";
3
+ import { t } from "../utils-B6kKb8jB.js";
4
+ import { n } from "../buttons-BedGfygC.js";
5
+ import { c as r } from "../typography-BQnine1k.js";
6
+ import { r as i, t as a } from "../structure-DuxKl954.js";
7
+ import { g as o } from "../primitives-ByWgGUgt.js";
8
+ import { t as s } from "../number-CRU3kGuk.js";
9
+ import { i as c, r as l, t as u } from "../tabs-e7ko9S2o.js";
10
+ import { t as d } from "../popover-menu-DlnQ2zlR.js";
11
+ import { f } from "../table-CFOWY9pQ.js";
12
+ import { N as p, O as m, P as h, T as g, l as _, w as v } from "../filters-DzgSJpMK.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";
@@ -278,7 +278,7 @@ function G({ leading: e, search: n, filters: r, views: i, actions: o, className:
278
278
  return /* @__PURE__ */ C("div", {
279
279
  "data-component": "data-view-toolbar",
280
280
  "data-slot": "data-view-toolbar",
281
- className: t("data-view-toolbar--component box-border rounded-radius border border-border bg-card text-card-foreground p-surface shadow-sm", s),
281
+ className: t("data-view-toolbar--component box-border rounded-surface border border-border bg-card text-card-foreground p-surface shadow-sm", s),
282
282
  children: /* @__PURE__ */ w("div", {
283
283
  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",
284
284
  children: [/* @__PURE__ */ w(a, {
@@ -310,7 +310,7 @@ function K({ toolbar: e, children: n, footer: r, className: a, toolbarClassName:
310
310
  return /* @__PURE__ */ w("section", {
311
311
  "data-component": "data-view-table-frame",
312
312
  "data-slot": "data-view-table-frame",
313
- className: t("data-view-table-frame--component box-border @container/data-view overflow-hidden rounded-radius border border-border bg-card text-card-foreground shadow-xs", a),
313
+ className: t("data-view-table-frame--component box-border @container/data-view overflow-hidden rounded-surface border border-border bg-card text-card-foreground shadow-xs", a),
314
314
  children: [
315
315
  !!e && /* @__PURE__ */ C("div", {
316
316
  "data-slot": "data-view-table-frame-toolbar",
@@ -349,7 +349,7 @@ function q({ data: e, columns: n, filtering: r, table: i, slots: o, className: s
349
349
  data: c,
350
350
  surface: "flat",
351
351
  headerTransparent: !1,
352
- topbarClassName: t("data-view--topbar data-view-table--topbar py-surface @2xl/data-table:items-start", i?.topbarClassName),
352
+ topbarClassName: t("data-view--topbar data-view-table--topbar", i?.topbarClassName),
353
353
  toolbarLabelVisibility: i?.toolbarLabelVisibility ?? "hidden",
354
354
  topbarContent: m ? /* @__PURE__ */ w(a, {
355
355
  gap: "lg",
@@ -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\" type=\"inherit\" 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 box-border rounded-radius border border-border bg-card text-card-foreground 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 box-border @container/data-view overflow-hidden rounded-radius border border-border bg-card text-card-foreground shadow-xs',\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/60 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/60 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 p-space-xs', className)}\n\t\t\tvalue={value}\n onValueChange={next => { if (typeof next === 'string') onValueChange(next); }}\n\t\t>\n <TabsList variant=\"chips\" role=\"group\" aria-orientation={undefined} activateOnFocus>\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=\"saved-view-tabs--tab gap-space-xs\"\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
+ {"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\" type=\"inherit\" 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 box-border rounded-surface border border-border bg-card text-card-foreground 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 box-border @container/data-view overflow-hidden rounded-surface border border-border bg-card text-card-foreground shadow-xs',\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/60 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/60 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',\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 p-space-xs', className)}\n\t\t\tvalue={value}\n onValueChange={next => { if (typeof next === 'string') onValueChange(next); }}\n\t\t>\n <TabsList variant=\"chips\" role=\"group\" aria-orientation={undefined} activateOnFocus>\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=\"saved-view-tabs--tab gap-space-xs\"\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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"}