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.
- package/CHANGELOG.md +135 -0
- package/README.md +113 -18
- package/dist/{accordion-96o0pN62.js → accordion-B9MHG0cT.js} +11 -11
- package/dist/accordion-B9MHG0cT.js.map +1 -0
- package/dist/{action-menu-CHgs8vmj.js → action-menu-Dr8K-ghE.js} +48 -45
- package/dist/action-menu-Dr8K-ghE.js.map +1 -0
- package/dist/{affordance-geometry.generated-B8yGOr8-.js → affordance-geometry.generated-P-aVJisu.js} +36 -36
- package/dist/affordance-geometry.generated-P-aVJisu.js.map +1 -0
- package/dist/{ai-artifact-BZUGwBq6.js → ai-artifact-C58tQcBy.js} +210 -174
- package/dist/ai-artifact-C58tQcBy.js.map +1 -0
- package/dist/app-shell-B_IuNWOo.js +321 -0
- package/dist/app-shell-B_IuNWOo.js.map +1 -0
- package/dist/{attachment-DkoqHPPl.js → attachment-Dg_69lPS.js} +9 -9
- package/dist/{attachment-DkoqHPPl.js.map → attachment-Dg_69lPS.js.map} +1 -1
- package/dist/{auth-D2FVZ1MH.js → auth-DTkkshS8.js} +43 -46
- package/dist/auth-DTkkshS8.js.map +1 -0
- package/dist/{avatar-DWO_HHhB.js → avatar-CeZaFmNH.js} +8 -8
- package/dist/avatar-CeZaFmNH.js.map +1 -0
- package/dist/{badge-DErMA7ul.js → badge-xIiV_E7f.js} +5 -5
- package/dist/{badge-DErMA7ul.js.map → badge-xIiV_E7f.js.map} +1 -1
- package/dist/base/accordion.js +1 -1
- package/dist/base/action-menu.js +1 -1
- package/dist/base/attachment.js +1 -1
- package/dist/base/avatar.js +1 -1
- package/dist/base/badge.js +1 -1
- package/dist/base/batch-action-bar.js +1 -1
- package/dist/base/buttons.js +1 -1
- package/dist/base/cards.js +2 -2
- package/dist/base/carousel.js +3 -3
- package/dist/base/cascader.js +2 -372
- package/dist/base/chart.js +1 -1
- package/dist/base/choice-inputs.js +2 -2
- package/dist/base/code-block.js +1 -1
- package/dist/base/combobox.js +2 -2
- package/dist/base/command.js +1 -1
- package/dist/base/copyable.js +1 -1
- package/dist/base/date-pickers.js +2 -2
- package/dist/base/display.js +6 -6
- package/dist/base/feedback.js +3 -3
- package/dist/base/forms-numeric.js +1 -1
- package/dist/base/forms.js +2 -2
- package/dist/base/inline-edit.js +10 -10
- package/dist/base/item.js +1 -1
- package/dist/base/media-gallery.js +1 -1
- package/dist/base/metadata-list.js +1 -1
- package/dist/base/navigation.js +7 -7
- package/dist/base/popover-menu.js +1 -1
- package/dist/base/popover.js +1 -1
- package/dist/base/qr-code.js +1 -1
- package/dist/base/repeaters.js +12 -12
- package/dist/base/repeaters.js.map +1 -1
- package/dist/base/sheet.js +1 -1
- package/dist/base/sidebar.js +2 -2
- package/dist/base/signature-pad.js +7 -7
- package/dist/base/signature-pad.js.map +1 -1
- package/dist/base/skeleton.js +1 -1
- package/dist/base/spinner.js +4 -4
- package/dist/base/structure.js +1 -1
- package/dist/base/table.js +1 -1
- package/dist/base/text-inputs.js +2 -2
- package/dist/base/toaster.js +36 -36
- package/dist/base/toaster.js.map +1 -1
- package/dist/base/tree.js +1 -1
- package/dist/base/upload-queue.js +1 -1
- package/dist/base/upload.js +3 -3
- package/dist/base/value-inputs.js +1 -1
- package/dist/{batch-action-bar-CdfIkCsV.js → batch-action-bar-Cb8cuvyy.js} +6 -6
- package/dist/batch-action-bar-Cb8cuvyy.js.map +1 -0
- package/dist/blocks/admin.js +21 -21
- package/dist/blocks/admin.js.map +1 -1
- package/dist/blocks/ai.js +230 -216
- package/dist/blocks/ai.js.map +1 -1
- package/dist/blocks/analytics/usage-card.js +1 -1
- package/dist/blocks/analytics.js +325 -306
- package/dist/blocks/analytics.js.map +1 -1
- package/dist/blocks/collaboration.js +1 -1
- package/dist/blocks/commerce/receipt.js +1 -1
- package/dist/blocks/commerce.js +1259 -1184
- package/dist/blocks/commerce.js.map +1 -1
- package/dist/blocks/data-display.js +2 -2
- package/dist/blocks/onboarding.js +6 -6
- package/dist/blocks/onboarding.js.map +1 -1
- package/dist/blocks/planning.js +11 -11
- package/dist/blocks/timelines.js +1 -1
- package/dist/{breadcrumbs-B-WFKecD.js → breadcrumbs-J-K2kl4c.js} +6 -6
- package/dist/{breadcrumbs-B-WFKecD.js.map → breadcrumbs-J-K2kl4c.js.map} +1 -1
- package/dist/{button-DkmK-z8E.js → button-S2Cubiiz.js} +3 -3
- package/dist/button-S2Cubiiz.js.map +1 -0
- package/dist/{buttons-BbfzgczK.js → buttons-BedGfygC.js} +16 -16
- package/dist/buttons-BedGfygC.js.map +1 -0
- package/dist/cards-rNX1M4Xn.js +69 -0
- package/dist/cards-rNX1M4Xn.js.map +1 -0
- package/dist/cascader-B1MiqkBq.js +439 -0
- package/dist/cascader-B1MiqkBq.js.map +1 -0
- package/dist/chart-Darg_0Kv.js +162 -0
- package/dist/chart-Darg_0Kv.js.map +1 -0
- package/dist/{checkbox-CzYUTPeJ.js → checkbox-fflqmODR.js} +2 -2
- package/dist/{checkbox-CzYUTPeJ.js.map → checkbox-fflqmODR.js.map} +1 -1
- package/dist/{choice-inputs-JLtij2y4.js → choice-inputs-zUgBZfE4.js} +258 -257
- package/dist/choice-inputs-zUgBZfE4.js.map +1 -0
- package/dist/{code-block-CGNaUtAE.js → code-block-BzmM9Eig.js} +8 -8
- package/dist/code-block-BzmM9Eig.js.map +1 -0
- package/dist/{collapsible-Do4G0zcC.js → collapsible-BkAI_XD4.js} +5 -5
- package/dist/{collapsible-Do4G0zcC.js.map → collapsible-BkAI_XD4.js.map} +1 -1
- package/dist/{collection-content-C0e8SsTm.js → collection-content-gDh1v6O4.js} +3 -3
- package/dist/{collection-content-C0e8SsTm.js.map → collection-content-gDh1v6O4.js.map} +1 -1
- package/dist/combobox-BEx0vJgF.js +362 -0
- package/dist/combobox-BEx0vJgF.js.map +1 -0
- package/dist/{combobox-CBJDs6w_.js → combobox-BwzoXFSG.js} +254 -247
- package/dist/combobox-BwzoXFSG.js.map +1 -0
- package/dist/{command-D8NrBj-b.js → command-CrlPIL6m.js} +11 -11
- package/dist/command-CrlPIL6m.js.map +1 -0
- package/dist/{comments-Di4w0H_S.js → comments-Dmpp0YIc.js} +29 -29
- package/dist/{comments-Di4w0H_S.js.map → comments-Dmpp0YIc.js.map} +1 -1
- package/dist/components/base/action-menu/action-menu.d.ts +7 -1
- package/dist/components/base/buttons/button-group.recipes.d.ts +2 -2
- package/dist/components/base/cards/card.recipes.d.ts +6 -4
- package/dist/components/base/cards/partials/card-primitives.d.ts +9 -2
- package/dist/components/base/cards/partials/smart-card-header-row.d.ts +3 -1
- package/dist/components/base/cards/smart-card.types.d.ts +3 -4
- package/dist/components/base/cascader/cascader-panel.d.ts +76 -0
- package/dist/components/base/chart/chart.d.ts +6 -1
- package/dist/components/base/choice-inputs/choice-types.d.ts +1 -1
- package/dist/components/base/combobox/index.d.ts +4 -2
- package/dist/components/base/feedback/alert.d.ts +1 -1
- package/dist/components/base/forms/form-sizing.d.ts +7 -7
- package/dist/components/base/forms/workflow.d.ts +7 -1
- package/dist/components/base/forms-numeric/coordinates-input.d.ts +4 -0
- package/dist/components/base/metadata-list/metadata-list.d.ts +1 -1
- package/dist/components/base/navigation/dropdown-menu.d.ts +1 -1
- package/dist/components/base/navigation/page-header/page-header-commands.d.ts +14 -7
- package/dist/components/base/navigation/page-header/page-header.d.ts +10 -3
- package/dist/components/base/popover/popover.d.ts +3 -3
- package/dist/components/base/popover/popover.recipes.d.ts +10 -6
- package/dist/components/base/sheet/sheet.d.ts +2 -0
- package/dist/components/base/sidebar/index.d.ts +1 -1
- package/dist/components/base/sidebar/sidebar.d.ts +27 -5
- package/dist/components/base/toaster/index.d.ts +1 -0
- package/dist/components/blocks/ai/ai-file-tree/types.d.ts +1 -1
- package/dist/components/blocks/ai/ai-tool-call/types.d.ts +3 -1
- package/dist/components/blocks/ai/ai.strings.d.ts +2 -0
- package/dist/components/blocks/analytics/metric-comparison/metric-comparison.d.ts +2 -0
- package/dist/components/blocks/analytics/usage-card/usage-card.strings.d.ts +2 -0
- package/dist/components/blocks/commerce/cart-summary/cart-summary.d.ts +1 -1
- package/dist/components/blocks/commerce/cart-summary/types.d.ts +3 -1
- package/dist/components/blocks/commerce/discount-stack/discount-stack.d.ts +1 -1
- package/dist/components/blocks/commerce/discount-stack/types.d.ts +3 -1
- package/dist/components/blocks/commerce/fulfillment-group/fulfillment-group.d.ts +1 -1
- package/dist/components/blocks/commerce/fulfillment-group/types.d.ts +11 -2
- package/dist/components/blocks/commerce/index.d.ts +7 -6
- package/dist/components/blocks/commerce/inventory-section/inventory-section.d.ts +1 -1
- package/dist/components/blocks/commerce/inventory-section/types.d.ts +7 -2
- package/dist/components/blocks/commerce/invoice-header/index.d.ts +2 -1
- package/dist/components/blocks/commerce/invoice-header/invoice-header.d.ts +1 -1
- package/dist/components/blocks/commerce/invoice-header/types.d.ts +20 -6
- package/dist/components/blocks/commerce/invoice-line-items/invoice-line-items.d.ts +1 -1
- package/dist/components/blocks/commerce/invoice-line-items/types.d.ts +24 -7
- package/dist/components/blocks/commerce/invoice-mini/index.d.ts +2 -1
- package/dist/components/blocks/commerce/invoice-mini/types.d.ts +7 -1
- package/dist/components/blocks/commerce/order-customer/order-customer.d.ts +1 -1
- package/dist/components/blocks/commerce/order-customer/types.d.ts +9 -1
- package/dist/components/blocks/commerce/refund-status/refund-status.d.ts +1 -1
- package/dist/components/blocks/commerce/refund-status/types.d.ts +3 -1
- package/dist/components/blocks/commerce/shipment-tracking/shipment-tracking.d.ts +1 -1
- package/dist/components/blocks/commerce/shipment-tracking/types.d.ts +3 -1
- package/dist/components/blocks/commerce/tax-breakdown/tax-breakdown.d.ts +1 -1
- package/dist/components/blocks/commerce/tax-breakdown/types.d.ts +3 -1
- package/dist/components/features/activities/activities.types.d.ts +8 -2
- package/dist/components/features/activities/partials/activity-marker.d.ts +7 -3
- package/dist/components/features/activities/partials/activity-row.d.ts +24 -0
- package/dist/components/features/event-calendar/colors.d.ts +2 -2
- package/dist/components/features/event-calendar/event-calendar.types.d.ts +4 -0
- package/dist/components/features/filters/facets/select-facet.d.ts +2 -1
- package/dist/components/features/filters/filters.strings.d.ts +4 -0
- package/dist/components/features/filters/filters.types.d.ts +3 -0
- package/dist/components/features/filters/partials/filter-editor-header.d.ts +16 -0
- package/dist/components/features/filters/partials/filter-popover-content.d.ts +1 -1
- package/dist/components/features/filters/partials/nested-filter-options.d.ts +21 -0
- package/dist/components/features/filters/partials/regular-filter-content.d.ts +2 -1
- package/dist/components/features/filters/utils/filter-utils.d.ts +21 -3
- package/dist/components/features/global-search/global-search.types.d.ts +2 -0
- package/dist/components/features/global-search/partials/global-search-input.d.ts +10 -0
- package/dist/components/features/global-search/partials/global-search-result-row.d.ts +7 -1
- package/dist/components/features/media-library/media-library.strings.d.ts +2 -0
- package/dist/components/features/media-library/media-library.types.d.ts +14 -4
- package/dist/components/features/media-library/partials/media-library-partials.d.ts +1 -1
- package/dist/components/features/products/components/product-options-matrix.d.ts +1 -1
- package/dist/components/features/products/components/product-variant-editor.d.ts +1 -1
- package/dist/components/features/products/components/product-variants-manager.d.ts +1 -1
- package/dist/components/features/products/products.strings.d.ts +9 -1
- package/dist/components/features/products/products.types.d.ts +43 -6
- package/dist/components/features/resource/resource.d.ts +5 -1
- package/dist/components/features/resource/resource.types.d.ts +12 -1
- package/dist/components/features/rich-text-editor/partials/image-uploads.d.ts +1 -1
- package/dist/components/features/rich-text-editor/rich-text-editor.recipes.d.ts +12 -2
- package/dist/components/features/table/partials/resource-cell.d.ts +22 -5
- package/dist/components/features/table/table.types.d.ts +1 -1
- package/dist/components/layout/app-shell/app-shell.types.d.ts +35 -6
- package/dist/components/layout/app-shell/index.d.ts +1 -1
- package/dist/components/layout/app-shell/shell-regions.d.ts +27 -0
- package/dist/components/layout/app-shell/sidebar-inset-layout.d.ts +1 -1
- package/dist/components/layout/app-shell/stacked-layout.d.ts +1 -1
- package/dist/components/layout/app-shell/topbar-sidebar-layout.d.ts +1 -1
- package/dist/components/layout/containers/two-column-layout.d.ts +2 -0
- package/dist/components/layout/header/header.recipes.d.ts +6 -0
- package/dist/components/layout/header/header.types.d.ts +6 -6
- package/dist/components/layout/navigation/section-nav/section-nav.d.ts +5 -0
- package/dist/components/layout/page/index.d.ts +2 -1
- package/dist/components/layout/page/page.d.ts +1 -0
- package/dist/components/layout/page/page.strings.d.ts +11 -0
- package/dist/components/layout/page/page.types.d.ts +69 -17
- package/dist/components/layout/page/partials/page-header.d.ts +1 -1
- package/dist/components/layout/settings/settings.d.ts +9 -2
- package/dist/components/layout/sidebar/app-sidebar.d.ts +1 -1
- package/dist/components/layout/sidebar/components/sidebar-grouped-navigation.d.ts +1 -1
- package/dist/components/layout/sidebar/components/sidebar-navigation.d.ts +1 -1
- package/dist/components/layout/sidebar/index.d.ts +2 -1
- package/dist/components/layout/sidebar/sidebar-navigation-rail.d.ts +36 -0
- package/dist/components/layout/sidebar/sidebar.context.d.ts +5 -7
- package/dist/components/layout/sidebar/sidebar.types.d.ts +48 -10
- package/dist/components/layout/sidebar/sidebar.utils.d.ts +9 -1
- package/dist/components/layout/workspace/workspace.types.d.ts +8 -1
- package/dist/components/ui/alert-dialog.d.ts +2 -2
- package/dist/components/ui/combobox.d.ts +1 -1
- package/dist/components/ui/dialog.d.ts +2 -2
- package/dist/components/ui/overlay-layer.d.ts +18 -0
- package/dist/components/ui/sheet.d.ts +5 -1
- package/dist/components/ui/sidebar-state.d.ts +82 -0
- package/dist/components/ui/sidebar.d.ts +5 -17
- package/dist/{containers-CRmHf7GP.js → containers-CIxwbZt5.js} +26 -18
- package/dist/containers-CIxwbZt5.js.map +1 -0
- package/dist/{control-group-recipes-DBXmfh2E.js → control-group-recipes-fMuFo0H7.js} +6 -6
- package/dist/control-group-recipes-fMuFo0H7.js.map +1 -0
- package/dist/{copyable-CnGCZdX4.js → copyable-DIznBqiT.js} +7 -7
- package/dist/{copyable-CnGCZdX4.js.map → copyable-DIznBqiT.js.map} +1 -1
- package/dist/{data-display-D4oujtx0.js → data-display-BdgCAw8T.js} +268 -277
- package/dist/data-display-BdgCAw8T.js.map +1 -0
- package/dist/{date-Q7jnXxpk.js → date-Cq8ioE4o.js} +5 -5
- package/dist/{date-Q7jnXxpk.js.map → date-Cq8ioE4o.js.map} +1 -1
- package/dist/{date-picker-zOt1oNss.js → date-picker-RlIzKom_.js} +446 -437
- package/dist/date-picker-RlIzKom_.js.map +1 -0
- package/dist/{date-pickers-cj8IXbDC.js → date-pickers-DY-CpXS1.js} +12 -12
- package/dist/{date-pickers-cj8IXbDC.js.map → date-pickers-DY-CpXS1.js.map} +1 -1
- package/dist/{display-BB4BL_-K.js → display-KsZLw9Ov.js} +9 -9
- package/dist/{display-BB4BL_-K.js.map → display-KsZLw9Ov.js.map} +1 -1
- package/dist/dropdown-menu-CLs8Lihj.js +194 -0
- package/dist/dropdown-menu-CLs8Lihj.js.map +1 -0
- package/dist/features/activities.js +302 -253
- package/dist/features/activities.js.map +1 -1
- package/dist/features/ai-chat.js +15 -14
- package/dist/features/ai-chat.js.map +1 -1
- package/dist/features/appointment-calendar.js +22 -22
- package/dist/features/appointment-calendar.js.map +1 -1
- package/dist/features/async-preview.js +11 -10
- package/dist/features/async-preview.js.map +1 -1
- package/dist/features/combobox.js +1 -1
- package/dist/features/comments.js +1 -1
- package/dist/features/data-view.js +13 -13
- package/dist/features/data-view.js.map +1 -1
- package/dist/features/email-composer.js +237 -238
- package/dist/features/email-composer.js.map +1 -1
- package/dist/features/event-calendar.js +140 -146
- package/dist/features/event-calendar.js.map +1 -1
- package/dist/features/filters.js +1 -1
- package/dist/features/global-search.js +167 -138
- package/dist/features/global-search.js.map +1 -1
- package/dist/features/kanban.js +6 -7
- package/dist/features/kanban.js.map +1 -1
- package/dist/features/map.js +269 -260
- package/dist/features/map.js.map +1 -1
- package/dist/features/media-library.js +375 -326
- package/dist/features/media-library.js.map +1 -1
- package/dist/features/mentions.js +1 -1
- package/dist/features/overlays.js +1 -1
- package/dist/features/products.js +1266 -1193
- package/dist/features/products.js.map +1 -1
- package/dist/features/questionnaire.js +13 -13
- package/dist/features/questionnaire.js.map +1 -1
- package/dist/features/resource-assignment.js +8 -8
- package/dist/features/resource.js +69 -66
- package/dist/features/resource.js.map +1 -1
- package/dist/features/rich-text-editor.js +2 -2
- package/dist/features/schema-form.js +13 -13
- package/dist/features/suggestions.js +3 -3
- package/dist/features/sync.js +3 -3
- package/dist/features/table.js +1 -1
- package/dist/features/theme-tweaker.js +94 -95
- package/dist/features/theme-tweaker.js.map +1 -1
- package/dist/{feedback-DZNL5Lg1.js → feedback-Dm4izqFn.js} +80 -79
- package/dist/feedback-Dm4izqFn.js.map +1 -0
- package/dist/{field-affordance-recipes-DjwGx8eM.js → field-affordance-recipes-DWcNcOjh.js} +4 -4
- package/dist/field-affordance-recipes-DWcNcOjh.js.map +1 -0
- package/dist/{filters-BcT-uoFy.js → filters-DzgSJpMK.js} +693 -645
- package/dist/filters-DzgSJpMK.js.map +1 -0
- package/dist/{form-field-CsgRmdit.js → form-field-BriWAXyg.js} +6 -6
- package/dist/{form-field-CsgRmdit.js.map → form-field-BriWAXyg.js.map} +1 -1
- package/dist/{form-sizing-NXgjkmBG.js → form-sizing-Bs2qFUeE.js} +4 -4
- package/dist/form-sizing-Bs2qFUeE.js.map +1 -0
- package/dist/{forms-BV5m5aQF.js → forms-C0RGnJTe.js} +17 -13
- package/dist/forms-C0RGnJTe.js.map +1 -0
- package/dist/{forms-numeric-Cd33AKbD.js → forms-numeric-DIhghX1Q.js} +86 -82
- package/dist/forms-numeric-DIhghX1Q.js.map +1 -0
- package/dist/{header-BA697l4a.js → header-DMMxG__r.js} +67 -63
- package/dist/header-DMMxG__r.js.map +1 -0
- package/dist/header.recipes-BigdJjw1.js +6 -0
- package/dist/header.recipes-BigdJjw1.js.map +1 -0
- package/dist/{hooks-BQ-L7Uu2.js → hooks-DB6CJ4MR.js} +26 -14
- package/dist/hooks-DB6CJ4MR.js.map +1 -0
- package/dist/{icon-badge-COWbCCWu.js → icon-badge-DZF-YjQp.js} +4 -4
- package/dist/{icon-badge-COWbCCWu.js.map → icon-badge-DZF-YjQp.js.map} +1 -1
- package/dist/index.js +4 -5
- package/dist/{input-Cdw4k0fb.js → input-CvyDQlY7.js} +8 -8
- package/dist/{input-Cdw4k0fb.js.map → input-CvyDQlY7.js.map} +1 -1
- package/dist/input-DMBwAZmr.js +21 -0
- package/dist/input-DMBwAZmr.js.map +1 -0
- package/dist/{item-BvZ2DR_x.js → item-DjCcM18E.js} +16 -16
- package/dist/item-DjCcM18E.js.map +1 -0
- package/dist/layout/app-shell.js +1 -1
- package/dist/layout/auth.js +1 -1
- package/dist/layout/containers.js +1 -1
- package/dist/layout/header.js +1 -1
- package/dist/layout/hooks.js +1 -1
- package/dist/layout/navigation.js +1 -1
- package/dist/layout/page.js +2 -2
- package/dist/layout/settings.js +1 -1
- package/dist/layout/sidebar.js +3 -3
- package/dist/layout/workspace.js +1 -1
- package/dist/layout.js +11 -11
- package/dist/lib/affordance-geometry.generated.d.ts +35 -35
- package/dist/lib/control-group-recipes.d.ts +5 -5
- package/dist/lib/field-affordance-recipes.d.ts +2 -2
- package/dist/lib/motion-recipes.d.ts +3 -0
- package/dist/lib/navigation-row-recipes.d.ts +7 -7
- package/dist/lib/overlay-anatomy-recipes.d.ts +3 -3
- package/dist/lib/portal-recipes.d.ts +3 -0
- package/dist/lib/token-merge.generated.d.ts +13 -10
- package/dist/lib/utils.js +1 -1
- package/dist/map-demo-tile.svg +1 -1
- package/dist/{media-gallery-CSl5W1Fy.js → media-gallery-C-vChPmE.js} +6 -6
- package/dist/{media-gallery-CSl5W1Fy.js.map → media-gallery-C-vChPmE.js.map} +1 -1
- package/dist/{mentions-RKOQaaIB.js → mentions-0_4nWuI-.js} +10 -10
- package/dist/{mentions-RKOQaaIB.js.map → mentions-0_4nWuI-.js.map} +1 -1
- package/dist/{message-INU2xsxu.js → message-g8p7eVtN.js} +7 -7
- package/dist/message-g8p7eVtN.js.map +1 -0
- package/dist/{metadata-list-qVV7AVxa.js → metadata-list-C3MkU-Om.js} +64 -64
- package/dist/metadata-list-C3MkU-Om.js.map +1 -0
- package/dist/{motion-recipes-ChBg4HBq.js → motion-recipes-DitYv6P2.js} +10 -2
- package/dist/motion-recipes-DitYv6P2.js.map +1 -0
- package/dist/navigation-C90-oQFq.js +255 -0
- package/dist/navigation-C90-oQFq.js.map +1 -0
- package/dist/{navigation-BQNcg1jT.js → navigation-DaRjthVk.js} +101 -82
- package/dist/navigation-DaRjthVk.js.map +1 -0
- package/dist/{navigation-row-recipes-WZEs-hYo.js → navigation-row-recipes-BGVLvU_O.js} +9 -9
- package/dist/navigation-row-recipes-BGVLvU_O.js.map +1 -0
- package/dist/{number-E_OiIfJz.js → number-CRU3kGuk.js} +5 -5
- package/dist/{number-E_OiIfJz.js.map → number-CRU3kGuk.js.map} +1 -1
- package/dist/overflow-tab-bar-IVFVQFV6.js +172 -0
- package/dist/overflow-tab-bar-IVFVQFV6.js.map +1 -0
- package/dist/overlays-BSgCtM2v.js +1013 -0
- package/dist/overlays-BSgCtM2v.js.map +1 -0
- package/dist/page-DUUKDAjo.js +331 -0
- package/dist/page-DUUKDAjo.js.map +1 -0
- package/dist/page-header-commands-7P3sfE9u.js +193 -0
- package/dist/page-header-commands-7P3sfE9u.js.map +1 -0
- package/dist/{pagination-Ch8X_47u.js → pagination-CgCjElfu.js} +7 -7
- package/dist/{pagination-Ch8X_47u.js.map → pagination-CgCjElfu.js.map} +1 -1
- package/dist/popover-B85RenIl.js +201 -0
- package/dist/popover-B85RenIl.js.map +1 -0
- package/dist/{popover-menu-BYaCdFhf.js → popover-menu-DlnQ2zlR.js} +7 -7
- package/dist/{popover-menu-BYaCdFhf.js.map → popover-menu-DlnQ2zlR.js.map} +1 -1
- package/dist/{popover.recipes-D3j8R8Yp.js → popover.recipes-DdiEp0rd.js} +18 -11
- package/dist/popover.recipes-DdiEp0rd.js.map +1 -0
- package/dist/portal-recipes-BpsV_iRw.js +9 -0
- package/dist/portal-recipes-BpsV_iRw.js.map +1 -0
- package/dist/{primitives-Du64iDbb.js → primitives-ByWgGUgt.js} +5 -5
- package/dist/{primitives-Du64iDbb.js.map → primitives-ByWgGUgt.js.map} +1 -1
- package/dist/primitives.js +4 -4
- package/dist/{progress-BvF2oCdV.js → progress-BJhQP9WX.js} +9 -9
- package/dist/{progress-BvF2oCdV.js.map → progress-BJhQP9WX.js.map} +1 -1
- package/dist/{receipt-D789Jwyy.js → receipt-tOc7B3hw.js} +7 -7
- package/dist/receipt-tOc7B3hw.js.map +1 -0
- package/dist/{rich-text-CLJEf76s.js → rich-text-Dth5E882.js} +3 -3
- package/dist/{rich-text-CLJEf76s.js.map → rich-text-Dth5E882.js.map} +1 -1
- package/dist/{rich-text-editor-Cm1dpUpQ.js → rich-text-editor-C1fOjBTd.js} +429 -430
- package/dist/rich-text-editor-C1fOjBTd.js.map +1 -0
- package/dist/{rich-text-editor-toolbar-L__e4x47.js → rich-text-editor-toolbar-laT3tpBT.js} +32 -28
- package/dist/rich-text-editor-toolbar-laT3tpBT.js.map +1 -0
- package/dist/{scroll-area-La5RXsEk.js → scroll-area-B0dB2cBi.js} +2 -2
- package/dist/{scroll-area-La5RXsEk.js.map → scroll-area-B0dB2cBi.js.map} +1 -1
- package/dist/{separator-DAEV0w65.js → separator-Bb17I4pu.js} +2 -2
- package/dist/{separator-DAEV0w65.js.map → separator-Bb17I4pu.js.map} +1 -1
- package/dist/{separator-GNfPG-90.js → separator-Ct_WSWTJ.js} +3 -3
- package/dist/{separator-GNfPG-90.js.map → separator-Ct_WSWTJ.js.map} +1 -1
- package/dist/services/actions.js +1 -1
- package/dist/{settings-BA2iboic.js → settings-Bar5wiSo.js} +31 -38
- package/dist/settings-Bar5wiSo.js.map +1 -0
- package/dist/sheet-BGPERY55.js +250 -0
- package/dist/sheet-BGPERY55.js.map +1 -0
- package/dist/sidebar-D-JYMMbY.js +686 -0
- package/dist/sidebar-D-JYMMbY.js.map +1 -0
- package/dist/sidebar-f9gRWXIR.js +1001 -0
- package/dist/sidebar-f9gRWXIR.js.map +1 -0
- package/dist/skeleton-BapcJd9C.js +265 -0
- package/dist/skeleton-BapcJd9C.js.map +1 -0
- package/dist/smart-card-CW0hjetE.js +617 -0
- package/dist/smart-card-CW0hjetE.js.map +1 -0
- package/dist/{structure-C0V0_Fyf.js → structure-DuxKl954.js} +2 -2
- package/dist/{structure-C0V0_Fyf.js.map → structure-DuxKl954.js.map} +1 -1
- package/dist/style.css +1 -1
- package/dist/{table-CpvnzJn9.js → table-B4TE7iOV.js} +3 -3
- package/dist/{table-CpvnzJn9.js.map → table-B4TE7iOV.js.map} +1 -1
- package/dist/{table-DH7rozUv.js → table-CFOWY9pQ.js} +394 -388
- package/dist/table-CFOWY9pQ.js.map +1 -0
- package/dist/{tabs-eqVsJZWO.js → tabs-e7ko9S2o.js} +11 -11
- package/dist/tabs-e7ko9S2o.js.map +1 -0
- package/dist/{text-inputs-DXItiR0O.js → text-inputs-B1culiSK.js} +17 -17
- package/dist/text-inputs-B1culiSK.js.map +1 -0
- package/dist/theme.css +40 -37
- package/dist/{timelines-DmtztAY_.js → timelines-D3Sl9ueq.js} +13 -12
- package/dist/timelines-D3Sl9ueq.js.map +1 -0
- package/dist/tooltip-8wz5S_Zr.js +113 -0
- package/dist/tooltip-8wz5S_Zr.js.map +1 -0
- package/dist/{tree-CV11PURP.js → tree-CzUJHnFs.js} +8 -8
- package/dist/{tree-CV11PURP.js.map → tree-CzUJHnFs.js.map} +1 -1
- package/dist/typography/rich-text.js +1 -1
- package/dist/{typography-CSyJrh28.js → typography-BQnine1k.js} +12 -12
- package/dist/{typography-CSyJrh28.js.map → typography-BQnine1k.js.map} +1 -1
- package/dist/typography.js +1 -1
- package/dist/ui-provider-C-74NVLc.js +178 -0
- package/dist/ui-provider-C-74NVLc.js.map +1 -0
- package/dist/ui-provider.js +2 -3
- package/dist/{upload-C9SA0X-8.js → upload-BOW6U2tI.js} +25 -24
- package/dist/upload-BOW6U2tI.js.map +1 -0
- package/dist/{upload-queue-DhQJiSRc.js → upload-queue-qUXn1ykN.js} +16 -14
- package/dist/upload-queue-qUXn1ykN.js.map +1 -0
- package/dist/{usage-card-DVTRDmGz.js → usage-card-BeSLY0i0.js} +24 -17
- package/dist/usage-card-BeSLY0i0.js.map +1 -0
- package/dist/{utils-CF3c95Io.js → utils-B6kKb8jB.js} +237 -141
- package/dist/utils-B6kKb8jB.js.map +1 -0
- package/dist/value-inputs-skdVB2zh.js +980 -0
- package/dist/value-inputs-skdVB2zh.js.map +1 -0
- package/dist/{value-typography-ClupF0Gz.js → value-typography-uAmWUAL1.js} +2 -2
- package/dist/{value-typography-ClupF0Gz.js.map → value-typography-uAmWUAL1.js.map} +1 -1
- package/dist/{workspace-9EFVXUyk.js → workspace-DHeHv0qw.js} +50 -49
- package/dist/workspace-DHeHv0qw.js.map +1 -0
- package/docs/consumer-skill/SKILL.md +4 -3
- package/docs/consumer-skill/agents/themelia-ui-designer.md +96 -0
- package/docs/consumer-skill/examples/app-layout.tsx +52 -1
- package/docs/consumer-skill/examples/commerce-lines.tsx +271 -0
- package/docs/consumer-skill/examples/custom-composition.tsx +21 -0
- package/docs/consumer-skill/examples/detail.tsx +5 -4
- package/docs/consumer-skill/examples/editable-sections.tsx +38 -0
- package/docs/consumer-skill/examples/index-table.tsx +4 -4
- package/docs/consumer-skill/examples/manifest.json +38 -1
- package/docs/consumer-skill/examples/product-media.tsx +41 -0
- package/docs/consumer-skill/examples/product-parts.tsx +81 -0
- package/docs/consumer-skill/examples/rhf-edit-page.tsx +1 -1
- package/docs/consumer-skill/examples/rhf-overlay-form.tsx +24 -11
- package/docs/consumer-skill/examples/token-domain-structure.tsx +68 -0
- package/docs/consumer-skill/references/agents-md.md +19 -17
- package/docs/consumer-skill/references/analytics.md +18 -1
- package/docs/consumer-skill/references/commerce-composition.md +97 -0
- package/docs/consumer-skill/references/component-contracts.json +7131 -1754
- package/docs/consumer-skill/references/composition-mapping.md +17 -3
- package/docs/consumer-skill/references/composition.md +159 -31
- package/docs/consumer-skill/references/critique-rubric.md +98 -0
- package/docs/consumer-skill/references/custom-composition.md +261 -0
- package/docs/consumer-skill/references/data-reading.md +79 -0
- package/docs/consumer-skill/references/design-contract.md +11 -9
- package/docs/consumer-skill/references/discovery.md +27 -3
- package/docs/consumer-skill/references/domain-structures.md +124 -0
- package/docs/consumer-skill/references/installation.md +15 -4
- package/docs/consumer-skill/references/integration.md +35 -0
- package/docs/consumer-skill/references/product-composition.md +94 -0
- package/docs/consumer-skill/references/public-api.json +2881 -420
- package/docs/consumer-skill/references/review.md +39 -2
- package/docs/consumer-skill/references/rhf-workflows.md +7 -0
- package/docs/consumer-skill/references/screen-archetypes.md +19 -7
- package/docs/consumer-skill/references/screen-decisions.md +126 -0
- package/docs/consumer-skill/references/theming.md +17 -18
- package/docs/consumer-skill/references/tokens.json +9 -9
- package/docs/consumer-skill/references/view-craft.md +153 -0
- package/docs/consumer-skill/references/view-spec.md +73 -0
- package/docs/consumer-skill/references/workflows.md +7 -1
- package/docs/consumer-skill/scripts/composition-policy.mjs +39 -3
- package/docs/consumer-skill/scripts/composition-schema.mjs +1 -1
- package/docs/consumer-skill/scripts/composition.mjs +61 -5
- package/docs/consumer-skill/scripts/discovery.mjs +54 -0
- package/docs/consumer-skill/scripts/inspect-component.mjs +1 -1
- package/docs/consumer-skill/scripts/inspection.mjs +73 -18
- package/docs/consumer-skill/scripts/setup-skills.mjs +41 -6
- package/docs/consumer-skill/scripts/surface-policy.mjs +5 -5
- package/docs/consumer-skills/themelia-components/SKILL.md +14 -13
- package/docs/consumer-skills/themelia-composition/SKILL.md +16 -17
- package/docs/consumer-skills/themelia-design/SKILL.md +55 -0
- package/docs/consumer-skills/themelia-foundation/SKILL.md +2 -1
- package/docs/consumer-skills/themelia-tokenization/SKILL.md +24 -17
- package/package.json +1 -1
- package/dist/accordion-96o0pN62.js.map +0 -1
- package/dist/action-menu-CHgs8vmj.js.map +0 -1
- package/dist/affordance-geometry.generated-B8yGOr8-.js.map +0 -1
- package/dist/ai-artifact-BZUGwBq6.js.map +0 -1
- package/dist/app-shell-D63ATkIK.js +0 -237
- package/dist/app-shell-D63ATkIK.js.map +0 -1
- package/dist/auth-D2FVZ1MH.js.map +0 -1
- package/dist/avatar-DWO_HHhB.js.map +0 -1
- package/dist/base/cascader.js.map +0 -1
- package/dist/batch-action-bar-CdfIkCsV.js.map +0 -1
- package/dist/button-DkmK-z8E.js.map +0 -1
- package/dist/buttons-BbfzgczK.js.map +0 -1
- package/dist/cards-4JTWqvVe.js +0 -68
- package/dist/cards-4JTWqvVe.js.map +0 -1
- package/dist/chart-C19flDQb.js +0 -155
- package/dist/chart-C19flDQb.js.map +0 -1
- package/dist/choice-inputs-JLtij2y4.js.map +0 -1
- package/dist/code-block-CGNaUtAE.js.map +0 -1
- package/dist/combobox-CBJDs6w_.js.map +0 -1
- package/dist/combobox-hbhSS18O.js +0 -355
- package/dist/combobox-hbhSS18O.js.map +0 -1
- package/dist/command-D8NrBj-b.js.map +0 -1
- package/dist/containers-CRmHf7GP.js.map +0 -1
- package/dist/control-group-recipes-DBXmfh2E.js.map +0 -1
- package/dist/data-display-D4oujtx0.js.map +0 -1
- package/dist/date-picker-zOt1oNss.js.map +0 -1
- package/dist/dropdown-menu-CjY8Vt7W.js +0 -193
- package/dist/dropdown-menu-CjY8Vt7W.js.map +0 -1
- package/dist/feedback-DZNL5Lg1.js.map +0 -1
- package/dist/field-affordance-recipes-DjwGx8eM.js.map +0 -1
- package/dist/filters-BcT-uoFy.js.map +0 -1
- package/dist/form-sizing-NXgjkmBG.js.map +0 -1
- package/dist/forms-BV5m5aQF.js.map +0 -1
- package/dist/forms-numeric-Cd33AKbD.js.map +0 -1
- package/dist/header-BA697l4a.js.map +0 -1
- package/dist/hooks-BQ-L7Uu2.js.map +0 -1
- package/dist/input-DOPL5_QE.js +0 -21
- package/dist/input-DOPL5_QE.js.map +0 -1
- package/dist/item-BvZ2DR_x.js.map +0 -1
- package/dist/message-INU2xsxu.js.map +0 -1
- package/dist/metadata-list-qVV7AVxa.js.map +0 -1
- package/dist/motion-recipes-ChBg4HBq.js.map +0 -1
- package/dist/navigation-BQNcg1jT.js.map +0 -1
- package/dist/navigation-DLF3E1IC.js +0 -145
- package/dist/navigation-DLF3E1IC.js.map +0 -1
- package/dist/navigation-row-recipes-WZEs-hYo.js.map +0 -1
- package/dist/overflow-tab-bar-CrbqMteP.js +0 -284
- package/dist/overflow-tab-bar-CrbqMteP.js.map +0 -1
- package/dist/overlays-BlKynmde.js +0 -1004
- package/dist/overlays-BlKynmde.js.map +0 -1
- package/dist/page-CIwNUtGr.js +0 -227
- package/dist/page-CIwNUtGr.js.map +0 -1
- package/dist/page-header-commands-DFMlNYzN.js +0 -128
- package/dist/page-header-commands-DFMlNYzN.js.map +0 -1
- package/dist/popover-uwzX2vo7.js +0 -198
- package/dist/popover-uwzX2vo7.js.map +0 -1
- package/dist/popover.recipes-D3j8R8Yp.js.map +0 -1
- package/dist/receipt-D789Jwyy.js.map +0 -1
- package/dist/rich-text-editor-Cm1dpUpQ.js.map +0 -1
- package/dist/rich-text-editor-toolbar-L__e4x47.js.map +0 -1
- package/dist/settings-BA2iboic.js.map +0 -1
- package/dist/sheet-DoAxTb2J.js +0 -213
- package/dist/sheet-DoAxTb2J.js.map +0 -1
- package/dist/sidebar-ByqKR_W5.js +0 -512
- package/dist/sidebar-ByqKR_W5.js.map +0 -1
- package/dist/sidebar-D2iSnGJ7.js +0 -619
- package/dist/sidebar-D2iSnGJ7.js.map +0 -1
- package/dist/skeleton-CUj8O5Bd.js +0 -264
- package/dist/skeleton-CUj8O5Bd.js.map +0 -1
- package/dist/smart-card-CqkzQsK-.js +0 -614
- package/dist/smart-card-CqkzQsK-.js.map +0 -1
- package/dist/table-DH7rozUv.js.map +0 -1
- package/dist/tabs-eqVsJZWO.js.map +0 -1
- package/dist/text-inputs-DXItiR0O.js.map +0 -1
- package/dist/theme-scope-BJ6eE2xt.js +0 -50
- package/dist/theme-scope-BJ6eE2xt.js.map +0 -1
- package/dist/timelines-DmtztAY_.js.map +0 -1
- package/dist/tooltip-B4hjKtoV.js +0 -111
- package/dist/tooltip-B4hjKtoV.js.map +0 -1
- package/dist/ui-provider-CQCuCBcy.js +0 -136
- package/dist/ui-provider-CQCuCBcy.js.map +0 -1
- package/dist/upload-C9SA0X-8.js.map +0 -1
- package/dist/upload-queue-DhQJiSRc.js.map +0 -1
- package/dist/usage-card-DVTRDmGz.js.map +0 -1
- package/dist/use-mobile-vaLKwgyf.js +0 -15
- package/dist/use-mobile-vaLKwgyf.js.map +0 -1
- package/dist/utils-CF3c95Io.js.map +0 -1
- package/dist/value-inputs-C0o70p-U.js +0 -980
- package/dist/value-inputs-C0o70p-U.js.map +0 -1
- 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-
|
|
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-
|
|
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-
|
|
4
|
-
import { n } from "../buttons-
|
|
5
|
-
import { c as r } from "../typography-
|
|
6
|
-
import { r as i, t as a } from "../structure-
|
|
7
|
-
import { g as o } from "../primitives-
|
|
8
|
-
import { t as s } from "../number-
|
|
9
|
-
import { i as c, r as l, t as u } from "../tabs-
|
|
10
|
-
import { t as d } from "../popover-menu-
|
|
11
|
-
import { f } from "../table-
|
|
12
|
-
import { N as p, O as m, P as h, T as g, l as _, w as v } from "../filters-
|
|
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-
|
|
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-
|
|
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
|
|
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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"}
|