themelia-react-ui 2.0.6 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +250 -0
- package/MIGRATION.md +746 -7
- package/README.md +27 -23
- package/dist/{accordion-0tQUZ20r.js → accordion-DNVqwEIC.js} +36 -36
- package/dist/accordion-DNVqwEIC.js.map +1 -0
- package/dist/action-menu-D5343RwT.js +286 -0
- package/dist/action-menu-D5343RwT.js.map +1 -0
- package/dist/ai-artifact-otrz9ZwS.js +1214 -0
- package/dist/ai-artifact-otrz9ZwS.js.map +1 -0
- package/dist/anchored-positioning-1U_eBFNx.js +9 -0
- package/dist/anchored-positioning-1U_eBFNx.js.map +1 -0
- package/dist/app-shell-CPN30Nb1.js +372 -0
- package/dist/app-shell-CPN30Nb1.js.map +1 -0
- package/dist/{attachment-BCpA4e7i.js → attachment-D2-fpfmv.js} +15 -15
- package/dist/{attachment-BCpA4e7i.js.map → attachment-D2-fpfmv.js.map} +1 -1
- package/dist/{auth-B0girIk_.js → auth-g_oUTDDC.js} +234 -241
- package/dist/auth-g_oUTDDC.js.map +1 -0
- package/dist/{avatar-B9Jnp-T-.js → avatar-Ca3Ihrq4.js} +4 -4
- package/dist/{avatar-B9Jnp-T-.js.map → avatar-Ca3Ihrq4.js.map} +1 -1
- package/dist/{badge-wWauMgAt.js → badge-oGiXblW7.js} +8 -9
- package/dist/badge-oGiXblW7.js.map +1 -0
- 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 +2 -2
- package/dist/base/cards.js +3 -3
- package/dist/base/carousel.js +11 -11
- package/dist/base/carousel.js.map +1 -1
- package/dist/base/cascader.js +1 -1
- 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 +1 -1
- 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 +7 -7
- package/dist/base/feedback.js +4 -4
- package/dist/base/forms-numeric.js +2 -2
- package/dist/base/forms.js +2 -2
- package/dist/base/inline-edit.js +13 -13
- package/dist/base/inline-edit.js.map +1 -1
- package/dist/base/item.js +1 -1
- package/dist/base/media-gallery.js +203 -2
- package/dist/base/media-gallery.js.map +1 -0
- 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 +32 -22
- package/dist/base/qr-code.js.map +1 -1
- package/dist/base/repeaters.js +91 -88
- package/dist/base/repeaters.js.map +1 -1
- package/dist/base/sidebar.js +2 -2
- package/dist/base/signature-pad.js +14 -14
- package/dist/base/signature-pad.js.map +1 -1
- package/dist/base/skeleton.js +1 -1
- package/dist/base/spinner.js +6 -12
- package/dist/base/spinner.js.map +1 -1
- package/dist/base/structure.js +1 -1
- package/dist/base/table.js +1 -1
- package/dist/base/text-inputs.js +3 -3
- package/dist/base/toaster.js +2 -2
- package/dist/base/tree.js +2 -2
- package/dist/base/upload-queue.js +303 -2
- package/dist/base/upload-queue.js.map +1 -0
- package/dist/base/upload.js +3 -4
- package/dist/base/value-inputs.js +1 -1
- package/dist/{batch-action-bar-BoqWIIpV.js → batch-action-bar-D6MZQNnC.js} +10 -10
- package/dist/{batch-action-bar-BoqWIIpV.js.map → batch-action-bar-D6MZQNnC.js.map} +1 -1
- package/dist/blocks/admin.js +242 -228
- package/dist/blocks/admin.js.map +1 -1
- package/dist/blocks/ai.js +395 -357
- package/dist/blocks/ai.js.map +1 -1
- package/dist/blocks/analytics/charts.js +1022 -0
- package/dist/blocks/analytics/charts.js.map +1 -0
- package/dist/blocks/analytics/usage-card.js +1 -1
- package/dist/blocks/analytics.js +171 -1365
- 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 +1487 -1358
- package/dist/blocks/commerce.js.map +1 -1
- package/dist/blocks/data-display.js +2 -3
- package/dist/blocks/onboarding.js +91 -82
- package/dist/blocks/onboarding.js.map +1 -1
- package/dist/blocks/planning.js +25 -25
- package/dist/blocks/planning.js.map +1 -1
- package/dist/blocks/timelines.js +2 -2
- package/dist/{breadcrumbs-Bp9Ke7kd.js → breadcrumbs-CQ9JSlez.js} +52 -45
- package/dist/breadcrumbs-CQ9JSlez.js.map +1 -0
- package/dist/{button-ChBovTx0.js → button-rd6FiHfQ.js} +12 -8
- package/dist/button-rd6FiHfQ.js.map +1 -0
- package/dist/{buttons-DeW0bQeK.js → buttons-pZVgPTZn.js} +230 -246
- package/dist/buttons-pZVgPTZn.js.map +1 -0
- package/dist/{cards-CNXnmvV5.js → cards-CgWyqvgZ.js} +25 -22
- package/dist/{cards-CNXnmvV5.js.map → cards-CgWyqvgZ.js.map} +1 -1
- package/dist/cascader-Cf05pwaq.js +444 -0
- package/dist/cascader-Cf05pwaq.js.map +1 -0
- package/dist/{chart-I7ROnsl8.js → chart-CygRCyIZ.js} +5 -5
- package/dist/{chart-I7ROnsl8.js.map → chart-CygRCyIZ.js.map} +1 -1
- package/dist/{checkbox-MoyHIAPs.js → checkbox-Dy5_XBMZ.js} +4 -4
- package/dist/{checkbox-MoyHIAPs.js.map → checkbox-Dy5_XBMZ.js.map} +1 -1
- package/dist/{choice-inputs-DHGtx0QV.js → choice-inputs-oJEsrb5Y.js} +113 -114
- package/dist/choice-inputs-oJEsrb5Y.js.map +1 -0
- package/dist/{code-block-BSJyq9e-.js → code-block-BrLD7mCi.js} +44 -60
- package/dist/code-block-BrLD7mCi.js.map +1 -0
- package/dist/collapsible-CRCCg_bO.js +80 -0
- package/dist/collapsible-CRCCg_bO.js.map +1 -0
- package/dist/{collection-content-CSnwtOTH.js → collection-content-D7SoDlYd.js} +3 -3
- package/dist/{collection-content-CSnwtOTH.js.map → collection-content-D7SoDlYd.js.map} +1 -1
- package/dist/combobox-Dl6f6kHz.js +362 -0
- package/dist/combobox-Dl6f6kHz.js.map +1 -0
- package/dist/combobox-DrDXtSSt.js +929 -0
- package/dist/combobox-DrDXtSSt.js.map +1 -0
- package/dist/command-CjZ2VzKC.js +432 -0
- package/dist/command-CjZ2VzKC.js.map +1 -0
- package/dist/comments-C2MZyRmh.js +1214 -0
- package/dist/comments-C2MZyRmh.js.map +1 -0
- package/dist/components/base/accordion/accordion.d.ts +11 -3
- package/dist/components/base/action-menu/action-menu.d.ts +11 -3
- package/dist/components/base/buttons/button.d.ts +2 -2
- package/dist/components/base/buttons/index.d.ts +1 -1
- package/dist/components/base/buttons/loader-button.d.ts +6 -15
- package/dist/components/base/cards/index.d.ts +1 -1
- package/dist/components/base/cards/partials/card-body-context.d.ts +6 -0
- package/dist/components/base/cards/smart-card.d.ts +0 -2
- package/dist/components/base/cards/smart-card.types.d.ts +12 -10
- package/dist/components/base/cascader/cascader.d.ts +8 -2
- package/dist/components/base/cascader/cascader.types.d.ts +24 -2
- package/dist/components/base/cascader/index.d.ts +1 -1
- package/dist/components/base/choice-inputs/switch.d.ts +1 -1
- package/dist/components/base/code-block/use-code-copy.d.ts +2 -6
- package/dist/components/base/command/command.d.ts +1 -1
- package/dist/components/base/date-pickers/datepicker.types.d.ts +1 -3
- package/dist/components/base/display/dialog.d.ts +3 -9
- package/dist/components/base/display/index.d.ts +2 -3
- package/dist/components/base/display/separator.d.ts +1 -1
- package/dist/components/base/feedback/alert.d.ts +2 -1
- package/dist/components/base/feedback/empty.d.ts +10 -2
- package/dist/components/base/forms/workflow.d.ts +2 -2
- package/dist/components/base/forms-numeric/dimensions-input.d.ts +9 -17
- package/dist/components/base/forms-numeric/index.d.ts +3 -3
- package/dist/components/base/item/item.types.d.ts +6 -2
- package/dist/components/base/metadata-list/index.d.ts +1 -3
- package/dist/components/base/metadata-list/metadata-list.d.ts +4 -1
- package/dist/components/base/navigation/index.d.ts +2 -2
- package/dist/components/base/navigation/language-switcher.d.ts +7 -6
- package/dist/components/base/navigation/navigation-tabs.d.ts +8 -1
- package/dist/components/base/navigation/page-header/index.d.ts +1 -1
- package/dist/components/base/navigation/page-header/page-header.d.ts +13 -17
- package/dist/components/base/navigation/pagination.d.ts +5 -5
- package/dist/components/base/popover/popover.recipes.d.ts +0 -1
- package/dist/components/base/qr-code/qr-code.d.ts +4 -0
- package/dist/components/base/repeaters/index.d.ts +1 -1
- package/dist/components/base/repeaters/key-value-editor.d.ts +4 -0
- package/dist/components/base/sheet/sheet.d.ts +6 -15
- package/dist/components/base/sidebar/index.d.ts +1 -6
- package/dist/components/base/sidebar/sidebar.d.ts +38 -10
- package/dist/components/base/skeleton/skeleton.d.ts +1 -1
- package/dist/components/base/structure/structure.types.d.ts +11 -2
- package/dist/components/base/text-inputs/index.d.ts +1 -1
- package/dist/components/base/tree/index.d.ts +1 -0
- package/dist/components/base/tree/tree.d.ts +2 -2
- package/dist/components/base/tree/tree.types.d.ts +7 -1
- package/dist/components/base/upload/file-upload.validation.d.ts +37 -1
- package/dist/components/base/upload/image-upload.d.ts +2 -0
- package/dist/components/base/upload/index.d.ts +3 -9
- package/dist/components/base/value-inputs/date-time-input.d.ts +4 -0
- package/dist/components/base/value-inputs/slider.d.ts +5 -2
- package/dist/components/blocks/admin/action-surfaces/index.d.ts +17 -4
- package/dist/components/blocks/admin/api-key-list/api-key-list.types.d.ts +9 -3
- package/dist/components/blocks/admin/index.d.ts +1 -1
- package/dist/components/blocks/ai/ai-artifact/ai-artifact.d.ts +1 -1
- package/dist/components/blocks/ai/ai-artifact/types.d.ts +9 -4
- package/dist/components/blocks/ai/ai-chain-of-thought/ai-chain-of-thought.d.ts +1 -1
- package/dist/components/blocks/ai/ai-chain-of-thought/types.d.ts +11 -1
- package/dist/components/blocks/ai/ai-citation/ai-citation.d.ts +1 -1
- package/dist/components/blocks/ai/ai-citation/types.d.ts +6 -0
- package/dist/components/blocks/ai/ai-confirmation/ai-confirmation.d.ts +1 -1
- package/dist/components/blocks/ai/ai-confirmation/types.d.ts +21 -5
- package/dist/components/blocks/ai/ai-feedback/types.d.ts +7 -2
- package/dist/components/blocks/ai/ai-inline-citation/types.d.ts +9 -3
- package/dist/components/blocks/ai/ai-package-info/ai-package-info.d.ts +1 -1
- package/dist/components/blocks/ai/ai-package-info/types.d.ts +6 -0
- package/dist/components/blocks/ai/ai-sources/ai-sources.d.ts +1 -1
- package/dist/components/blocks/ai/ai-sources/types.d.ts +8 -2
- package/dist/components/blocks/ai/ai-task/ai-task.d.ts +1 -1
- package/dist/components/blocks/ai/ai-task/types.d.ts +10 -1
- package/dist/components/blocks/ai/ai-tool-call/ai-tool-call.d.ts +1 -1
- package/dist/components/blocks/ai/ai-tool-call/types.d.ts +6 -0
- package/dist/components/blocks/ai/ai.strings.d.ts +2 -0
- package/dist/components/blocks/analytics/activity-heatmap/types.d.ts +1 -1
- package/dist/components/blocks/analytics/analytics.strings.d.ts +2 -0
- package/dist/components/blocks/analytics/atoms/metric-trend-chip.d.ts +11 -1
- package/dist/components/blocks/analytics/chart-card/chart-card.d.ts +7 -5
- package/dist/components/blocks/analytics/charts/index.d.ts +27 -0
- package/dist/components/blocks/analytics/index.d.ts +17 -24
- package/dist/components/blocks/analytics/metric/metric.d.ts +5 -5
- package/dist/components/blocks/analytics/metric-grid/metric-grid.d.ts +2 -2
- package/dist/components/blocks/analytics/types.d.ts +12 -3
- package/dist/components/blocks/analytics/usage-card/usage-card.strings.d.ts +2 -0
- package/dist/components/blocks/commerce/address-card/address-card.d.ts +1 -1
- package/dist/components/blocks/commerce/address-card/types.d.ts +5 -16
- package/dist/components/blocks/commerce/booking-calendar-event-card/booking-calendar-event-card.d.ts +2 -2
- package/dist/components/blocks/commerce/booking-calendar-event-card/booking-calendar-event-card.types.d.ts +6 -4
- package/dist/components/blocks/commerce/cart-summary/cart-summary.d.ts +0 -2
- package/dist/components/blocks/commerce/cart-summary/index.d.ts +2 -2
- package/dist/components/blocks/commerce/cart-summary/types.d.ts +9 -11
- package/dist/components/blocks/commerce/coupon-input/coupon-input.d.ts +1 -1
- package/dist/components/blocks/commerce/coupon-input/types.d.ts +7 -3
- package/dist/components/blocks/commerce/discount-stack/discount-stack.d.ts +0 -2
- package/dist/components/blocks/commerce/discount-stack/index.d.ts +2 -2
- package/dist/components/blocks/commerce/discount-stack/types.d.ts +4 -6
- package/dist/components/blocks/commerce/fulfillment-group/fulfillment-group.d.ts +1 -1
- package/dist/components/blocks/commerce/fulfillment-group/types.d.ts +2 -0
- package/dist/components/blocks/commerce/giftcard-card/partials/giftcard-balance.d.ts +18 -0
- package/dist/components/blocks/commerce/giftcard-card/partials/giftcard-compact.d.ts +1 -1
- package/dist/components/blocks/commerce/giftcard-card/partials/giftcard-copy-button.d.ts +0 -1
- package/dist/components/blocks/commerce/giftcard-card/partials/giftcard-dark.d.ts +1 -1
- package/dist/components/blocks/commerce/giftcard-card/partials/giftcard-full.d.ts +1 -1
- package/dist/components/blocks/commerce/giftcard-card/partials/giftcard-illustrated.d.ts +1 -1
- package/dist/components/blocks/commerce/giftcard-card/partials/giftcard-minimal.d.ts +1 -1
- package/dist/components/blocks/commerce/giftcard-card/types.d.ts +16 -5
- package/dist/components/blocks/commerce/index.d.ts +8 -8
- package/dist/components/blocks/commerce/inventory-level/inventory-level.strings.d.ts +2 -0
- package/dist/components/blocks/commerce/inventory-level/types.d.ts +1 -1
- package/dist/components/blocks/commerce/inventory-section/types.d.ts +0 -5
- package/dist/components/blocks/commerce/invoice-line-items/types.d.ts +6 -3
- package/dist/components/blocks/commerce/loyalty-points/loyalty-points.d.ts +1 -1
- package/dist/components/blocks/commerce/loyalty-points/types.d.ts +11 -5
- package/dist/components/blocks/commerce/order-status/order-status.d.ts +1 -1
- package/dist/components/blocks/commerce/order-status/types.d.ts +8 -8
- package/dist/components/blocks/commerce/order-timeline/order-timeline.d.ts +1 -1
- package/dist/components/blocks/commerce/order-timeline/types.d.ts +3 -1
- package/dist/components/blocks/commerce/payment-method/index.d.ts +2 -2
- package/dist/components/blocks/commerce/payment-method/payment-method.d.ts +0 -8
- package/dist/components/blocks/commerce/payment-method/types.d.ts +0 -2
- package/dist/components/blocks/commerce/receipt/index.d.ts +1 -1
- package/dist/components/blocks/commerce/receipt/receipt-items.d.ts +1 -1
- package/dist/components/blocks/commerce/receipt/types.d.ts +10 -0
- package/dist/components/blocks/commerce/refund-status/index.d.ts +2 -2
- package/dist/components/blocks/commerce/refund-status/refund-status.d.ts +0 -2
- package/dist/components/blocks/commerce/refund-status/types.d.ts +0 -2
- package/dist/components/blocks/commerce/seo-listing/types.d.ts +7 -0
- package/dist/components/blocks/commerce/shared/code-entry.d.ts +39 -0
- package/dist/components/blocks/commerce/shared/order-status.d.ts +1 -1
- package/dist/components/blocks/commerce/subscription-summary/subscription-summary.d.ts +1 -1
- package/dist/components/blocks/commerce/subscription-summary/types.d.ts +10 -1
- package/dist/components/blocks/commerce/upcoming-booking/index.d.ts +2 -1
- package/dist/components/blocks/commerce/upcoming-booking/types.d.ts +8 -0
- package/dist/components/blocks/commerce/upcoming-booking/upcoming-booking.d.ts +2 -2
- package/dist/components/blocks/commerce/vendor-profile/types.d.ts +4 -5
- package/dist/components/blocks/commerce/voucher-entry/types.d.ts +6 -3
- package/dist/components/blocks/commerce/voucher-entry/voucher-entry.d.ts +1 -1
- package/dist/components/blocks/content-block-hooks.d.ts +22 -0
- package/dist/components/blocks/data-display/dense-info-card/dense-info.strings.d.ts +5 -1
- package/dist/components/blocks/data-display/dense-info-card/helpers.d.ts +3 -1
- package/dist/components/blocks/data-display/dense-info-card/index.d.ts +1 -1
- package/dist/components/blocks/data-display/dense-info-card/partials/dense-info-classification.d.ts +1 -1
- package/dist/components/blocks/data-display/dense-info-card/partials/dense-info-dashboard.d.ts +1 -1
- package/dist/components/blocks/data-display/dense-info-card/partials/dense-info-financial.d.ts +1 -1
- package/dist/components/blocks/data-display/dense-info-card/partials/dense-info-project.d.ts +1 -1
- package/dist/components/blocks/data-display/dense-info-card/partials/dense-info-score.d.ts +1 -1
- package/dist/components/blocks/data-display/dense-info-card/types.d.ts +12 -5
- package/dist/components/blocks/data-display/empty-state/empty-state.types.d.ts +6 -0
- package/dist/components/blocks/data-display/index.d.ts +0 -1
- package/dist/components/blocks/data-display/relationship-card-frame.d.ts +1 -1
- package/dist/components/blocks/onboarding/checklist/checklist.types.d.ts +5 -3
- package/dist/components/blocks/planning/task-card.types.d.ts +7 -3
- package/dist/components/blocks/timelines/changelog/types.d.ts +2 -2
- package/dist/components/blocks/timelines/index.d.ts +2 -2
- package/dist/components/blocks/timelines/milestones/types.d.ts +2 -2
- package/dist/components/blocks/timelines/shared/timeline.d.ts +6 -0
- package/dist/components/blocks/timelines/steps-card/index.d.ts +2 -1
- package/dist/components/blocks/timelines/steps-card/steps-card.d.ts +2 -2
- package/dist/components/blocks/timelines/steps-card/types.d.ts +13 -1
- package/dist/components/features/activities/activities.strings.d.ts +5 -3
- package/dist/components/features/activities/activities.types.d.ts +28 -11
- package/dist/components/features/activities/hooks/use-activity-feed.d.ts +6 -0
- package/dist/components/features/activities/index.d.ts +1 -1
- package/dist/components/features/activities/partials/activity-headline.d.ts +5 -0
- package/dist/components/features/activities/partials/activity-row.d.ts +12 -13
- package/dist/components/features/activities/partials/row-layers.d.ts +7 -0
- package/dist/components/features/activities/relative-time.d.ts +18 -0
- package/dist/components/features/ai-chat/ai-chat.d.ts +6 -2
- package/dist/components/features/ai-chat/ai-chat.strings.d.ts +41 -2
- package/dist/components/features/ai-chat/ai-chat.types.d.ts +6 -0
- package/dist/components/features/ai-chat/partials/ai-chat-attachments-strip.d.ts +5 -1
- package/dist/components/features/ai-chat/partials/ai-chat-prompt-input.d.ts +2 -2
- package/dist/components/features/ai-chat/partials/ai-chat-queue.d.ts +3 -1
- package/dist/components/features/ai-chat/partials/ai-chat-suggestions-row.d.ts +6 -1
- package/dist/components/features/appointment-calendar/appointment-calendar.d.ts +1 -1
- package/dist/components/features/appointment-calendar/appointment-calendar.types.d.ts +19 -5
- package/dist/components/features/appointment-calendar/index.d.ts +1 -1
- package/dist/components/features/appointment-calendar/partials/appointment-agenda.d.ts +18 -10
- package/dist/components/features/async-preview/async-preview.d.ts +2 -2
- package/dist/components/features/async-preview/async-preview.types.d.ts +30 -1
- package/dist/components/features/async-preview/preview-trigger-cell.d.ts +7 -2
- package/dist/components/features/combobox/async-resource-combobox.d.ts +2 -2
- package/dist/components/features/combobox/combobox.d.ts +12 -3
- package/dist/components/features/combobox/components/error-message.d.ts +3 -1
- package/dist/components/features/combobox/hooks/use-combobox-core.d.ts +2 -2
- package/dist/components/features/combobox/index.d.ts +1 -1
- package/dist/components/features/combobox/types.d.ts +47 -45
- package/dist/components/features/comments/comments.strings.d.ts +6 -5
- package/dist/components/features/comments/comments.types.d.ts +40 -26
- package/dist/components/features/comments/hooks/use-attachment-upload.d.ts +5 -1
- package/dist/components/features/comments/hooks/use-comments.d.ts +8 -1
- package/dist/components/features/data-view/data-view.strings.d.ts +9 -2
- package/dist/components/features/data-view/data-view.types.d.ts +15 -2
- package/dist/components/features/email-composer/email-html.d.ts +5 -0
- package/dist/components/features/email-composer/http.d.ts +2 -0
- package/dist/components/features/email-composer/strings.d.ts +17 -2
- package/dist/components/features/email-composer/types.d.ts +17 -2
- package/dist/components/features/email-composer/use-composer.d.ts +2 -78
- package/dist/components/features/event-calendar/event-calendar-day-cell.d.ts +1 -1
- package/dist/components/features/event-calendar/event-calendar-event-badge.d.ts +1 -1
- package/dist/components/features/event-calendar/event-calendar-header.d.ts +1 -1
- package/dist/components/features/event-calendar/event-calendar-legend.d.ts +2 -2
- package/dist/components/features/event-calendar/event-calendar.d.ts +1 -1
- package/dist/components/features/event-calendar/event-calendar.types.d.ts +126 -21
- package/dist/components/features/filters/facets/range-facet.d.ts +13 -8
- package/dist/components/features/filters/filter-context.d.ts +9 -0
- package/dist/components/features/filters/filters.strings.d.ts +36 -3
- package/dist/components/features/filters/filters.types.d.ts +72 -5
- package/dist/components/features/filters/hooks/use-filter-draft.d.ts +1 -0
- package/dist/components/features/filters/index.d.ts +2 -2
- package/dist/components/features/filters/operator-options.d.ts +25 -2
- package/dist/components/features/filters/partials/active-filter-item.d.ts +0 -13
- package/dist/components/features/filters/partials/async-options-status.d.ts +32 -0
- package/dist/components/features/filters/partials/filter-draft-footer.d.ts +11 -0
- package/dist/components/features/filters/partials/filter-operator-select.d.ts +4 -2
- package/dist/components/features/filters/partials/filter-pill.d.ts +5 -1
- package/dist/components/features/filters/partials/filter-tabs.d.ts +2 -1
- package/dist/components/features/filters/partials/regular-filter-content.d.ts +1 -1
- package/dist/components/features/filters/utils/filter-utils.d.ts +29 -4
- package/dist/components/features/global-search/global-search-dialog.d.ts +7 -1
- package/dist/components/features/global-search/global-search.d.ts +7 -1
- package/dist/components/features/global-search/global-search.strings.d.ts +19 -3
- package/dist/components/features/global-search/global-search.types.d.ts +30 -6
- package/dist/components/features/global-search/index.d.ts +1 -1
- package/dist/components/features/global-search/partials/global-search-idle-state.d.ts +6 -1
- package/dist/components/features/global-search/partials/global-search-input.d.ts +2 -0
- package/dist/components/features/kanban/index.d.ts +2 -2
- package/dist/components/features/kanban/kanban-context.d.ts +4 -0
- package/dist/components/features/kanban/kanban-keyboard.d.ts +7 -2
- package/dist/components/features/kanban/kanban.d.ts +10 -1
- package/dist/components/features/kanban/kanban.strings.d.ts +11 -2
- package/dist/components/features/kanban/kanban.types.d.ts +26 -0
- package/dist/components/features/map/map.d.ts +4 -0
- package/dist/components/features/map/place-autocomplete.d.ts +10 -1
- package/dist/components/features/media-library/hooks/use-media-library.d.ts +3 -1
- package/dist/components/features/media-library/media-library.d.ts +1 -1
- package/dist/components/features/media-library/media-library.strings.d.ts +33 -3
- package/dist/components/features/media-library/media-library.types.d.ts +47 -2
- package/dist/components/features/media-library/partials/media-library-partials.d.ts +1 -1
- package/dist/components/features/mentions/hooks/use-mentions-search.d.ts +7 -0
- package/dist/components/features/mentions/index.d.ts +1 -1
- package/dist/components/features/mentions/mentions.strings.d.ts +10 -2
- package/dist/components/features/mentions/partials/mention-chip.d.ts +1 -0
- package/dist/components/features/mentions/partials/mention-inline-suggestions.d.ts +8 -1
- package/dist/components/features/mentions/partials/mention-picker.d.ts +8 -1
- package/dist/components/features/mentions/partials/mention-search-error.d.ts +6 -0
- package/dist/components/features/mentions/utils/index.d.ts +0 -1
- package/dist/components/features/overlays/alert-dialog.d.ts +1 -1
- package/dist/components/features/overlays/dialog.d.ts +1 -1
- package/dist/components/features/overlays/drawer.d.ts +1 -1
- package/dist/components/features/overlays/index.d.ts +2 -2
- package/dist/components/features/overlays/overlays.strings.d.ts +2 -1
- package/dist/components/features/overlays/overlays.types.d.ts +27 -10
- package/dist/components/features/products/components/index.d.ts +0 -10
- package/dist/components/features/products/components/product-contract-overview.d.ts +1 -1
- package/dist/components/features/products/components/product-details-card.d.ts +1 -1
- package/dist/components/features/products/components/product-operations-card.d.ts +1 -1
- package/dist/components/features/products/components/product-option-action-menu.d.ts +1 -1
- package/dist/components/features/products/components/product-options-summary.d.ts +1 -1
- package/dist/components/features/products/components/product-policies-card.d.ts +1 -1
- package/dist/components/features/products/components/product-quote-preview-card.d.ts +1 -1
- package/dist/components/features/products/components/product-readiness-card.d.ts +1 -1
- package/dist/components/features/products/components/product-structure-card.d.ts +1 -1
- package/dist/components/features/products/components/product-variant-action-menu.d.ts +1 -1
- package/dist/components/features/products/components/product-variants-manager.d.ts +1 -1
- package/dist/components/features/products/components/product-variants-table.d.ts +1 -1
- package/dist/components/features/products/partials/product-surface.d.ts +15 -0
- package/dist/components/features/products/products.strings.d.ts +8 -0
- package/dist/components/features/products/products.types.d.ts +25 -7
- package/dist/components/features/questionnaire/questionnaire.types.d.ts +6 -4
- package/dist/components/features/resource/index.d.ts +2 -3
- package/dist/components/features/resource/resource.d.ts +2 -10
- package/dist/components/features/resource/resource.types.d.ts +7 -149
- package/dist/components/features/resource-assignment/partials/assignment-surface.d.ts +15 -0
- package/dist/components/features/resource-assignment/resource-assignment.strings.d.ts +6 -1
- package/dist/components/features/resource-assignment/resource-assignment.types.d.ts +6 -0
- package/dist/components/features/rich-text-editor/partials/caret-helpers.d.ts +5 -7
- package/dist/components/features/rich-text-editor/partials/html-helpers.d.ts +2 -3
- package/dist/components/features/rich-text-editor/partials/image-uploads.d.ts +6 -2
- package/dist/components/features/rich-text-editor/partials/index.d.ts +2 -3
- package/dist/components/features/rich-text-editor/partials/rich-text-editor-tiptap.d.ts +0 -1
- package/dist/components/features/rich-text-editor/partials/rich-text-editor-toolbar.d.ts +2 -3
- package/dist/components/features/rich-text-editor/rich-text-editor.types.d.ts +13 -1
- package/dist/components/features/schema-form/hooks/use-schema-form.d.ts +5 -0
- package/dist/components/features/schema-form/schema-form.d.ts +1 -1
- package/dist/components/features/schema-form/schema-form.types.d.ts +13 -5
- package/dist/components/features/suggestions/suggestions.strings.d.ts +14 -0
- package/dist/components/features/suggestions/suggestions.types.d.ts +12 -4
- package/dist/components/features/table/data-table.d.ts +1 -1
- package/dist/components/features/table/filter-bar.d.ts +1 -1
- package/dist/components/features/table/pagination.d.ts +1 -1
- package/dist/components/features/table/partials/cell-value.d.ts +1 -1
- package/dist/components/features/table/table-body.d.ts +1 -1
- package/dist/components/features/table/table-header.d.ts +1 -1
- package/dist/components/features/table/table-helpers.d.ts +31 -9
- package/dist/components/features/table/table-region.recipes.d.ts +11 -0
- package/dist/components/features/table/table-toolbar.d.ts +1 -1
- package/dist/components/features/table/table.strings.d.ts +1 -0
- package/dist/components/features/table/table.types.d.ts +74 -48
- package/dist/components/features/theme-tweaker/theme-provider-settings.d.ts +4 -0
- package/dist/components/features/theme-tweaker/theme-tweaker.strings.d.ts +10 -7
- package/dist/components/features/theme-tweaker/theme-tweaker.utils.d.ts +17 -0
- package/dist/components/layout/app-shell/app-shell.types.d.ts +46 -49
- package/dist/components/layout/app-shell/index.d.ts +2 -2
- package/dist/components/layout/app-shell/shell-regions.d.ts +9 -0
- package/dist/components/layout/app-shell/shell-skip-link.d.ts +9 -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/auth/auth-shell.d.ts +1 -1
- package/dist/components/layout/auth/auth.types.d.ts +0 -5
- package/dist/components/layout/containers/inline-gutter-context.d.ts +7 -0
- package/dist/components/layout/containers/main-landmark-context.d.ts +6 -0
- package/dist/components/layout/header/header.types.d.ts +16 -6
- package/dist/components/layout/header/partials/header-global-search-trigger.d.ts +1 -1
- package/dist/components/layout/header/partials/header-notifications.d.ts +1 -1
- package/dist/components/layout/header/partials/header-search.d.ts +1 -1
- package/dist/components/layout/hooks/use-command-shortcut.d.ts +10 -1
- package/dist/components/layout/layout.types.d.ts +2 -2
- package/dist/components/layout/navigation/breadcrumb-progress/breadcrumb-progress.d.ts +1 -1
- package/dist/components/layout/navigation/breadcrumb-progress/types.d.ts +9 -0
- package/dist/components/layout/navigation/section-nav/section-nav.d.ts +8 -1
- package/dist/components/layout/page/index.d.ts +2 -3
- package/dist/components/layout/page/page.strings.d.ts +12 -0
- package/dist/components/layout/page/page.types.d.ts +7 -110
- package/dist/components/layout/page/partials/page-header.d.ts +1 -1
- package/dist/components/layout/settings/index.d.ts +1 -1
- package/dist/components/layout/settings/settings.d.ts +3 -5
- 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-footer.d.ts +1 -1
- package/dist/components/layout/sidebar/components/sidebar-navigation.d.ts +1 -1
- package/dist/components/layout/sidebar/index.d.ts +1 -1
- package/dist/components/layout/sidebar/sidebar-navigation-rail.d.ts +15 -7
- package/dist/components/layout/sidebar/sidebar.types.d.ts +10 -12
- package/dist/components/layout/sidebar/sidebar.utils.d.ts +4 -0
- package/dist/components/layout/workspace/workspace.strings.d.ts +2 -2
- package/dist/components/layout/workspace/workspace.types.d.ts +13 -7
- package/dist/components/primitives/date.d.ts +22 -3
- package/dist/components/primitives/file-size.d.ts +8 -2
- package/dist/components/primitives/index.d.ts +1 -1
- package/dist/components/primitives/initials.d.ts +3 -1
- package/dist/components/primitives/link.d.ts +8 -1
- package/dist/components/primitives/money.d.ts +1 -1
- package/dist/components/primitives/number.d.ts +2 -1
- package/dist/components/typography/heading.d.ts +9 -3
- package/dist/components/typography/index.d.ts +1 -1
- package/dist/components/typography/text-link.d.ts +10 -3
- package/dist/components/ui/badge.d.ts +2 -4
- package/dist/components/ui/breadcrumb.d.ts +2 -3
- package/dist/components/ui/button.d.ts +8 -2
- package/dist/components/ui/collapsible.d.ts +1 -4
- package/dist/components/ui/command.d.ts +20 -18
- package/dist/components/ui/dialog.d.ts +3 -9
- package/dist/components/ui/empty.d.ts +2 -2
- package/dist/components/ui/input-group.d.ts +3 -3
- package/dist/components/ui/item.d.ts +3 -3
- package/dist/components/ui/popover.d.ts +3 -7
- package/dist/components/ui/sheet.d.ts +4 -12
- package/dist/components/ui/sidebar-state.d.ts +6 -1
- package/dist/components/ui/sidebar.d.ts +7 -4
- package/dist/components/ui/tabs.d.ts +2 -2
- package/dist/components/ui/toggle-group.d.ts +3 -3
- package/dist/components/ui/toggle.d.ts +2 -2
- package/dist/components/ui/tooltip.d.ts +1 -3
- package/dist/{containers-CSdc32h9.js → containers-BdfLTP4w.js} +37 -32
- package/dist/containers-BdfLTP4w.js.map +1 -0
- package/dist/content-block-hooks-Z3iKjqd1.js +17 -0
- package/dist/content-block-hooks-Z3iKjqd1.js.map +1 -0
- package/dist/{copyable-3fdHfMR3.js → copyable-Bmr14W0d.js} +6 -6
- package/dist/{copyable-3fdHfMR3.js.map → copyable-Bmr14W0d.js.map} +1 -1
- package/dist/{data-display-Cmj-xZYl.js → data-display-CWe9SOYh.js} +264 -251
- package/dist/data-display-CWe9SOYh.js.map +1 -0
- package/dist/date-3qsCE1ID.js +209 -0
- package/dist/date-3qsCE1ID.js.map +1 -0
- package/dist/{date-picker-CyQlFYsP.js → date-picker-D1keJQIG.js} +129 -129
- package/dist/date-picker-D1keJQIG.js.map +1 -0
- package/dist/date-pickers-D8aJoeHc.js +185 -0
- package/dist/date-pickers-D8aJoeHc.js.map +1 -0
- package/dist/disclosure-panel-B0HFNZ9x.js.map +1 -1
- package/dist/{display-CT_N2a3w.js → display-VlmP1I0i.js} +23 -46
- package/dist/display-VlmP1I0i.js.map +1 -0
- package/dist/{dropdown-menu-C08iIugv.js → dropdown-menu-B8hjvbkS.js} +9 -9
- package/dist/{dropdown-menu-C08iIugv.js.map → dropdown-menu-B8hjvbkS.js.map} +1 -1
- package/dist/dropzone-CHBNK3de.js +116 -0
- package/dist/dropzone-CHBNK3de.js.map +1 -0
- package/dist/features/activities.js +682 -628
- package/dist/features/activities.js.map +1 -1
- package/dist/features/ai-chat.js +258 -226
- package/dist/features/ai-chat.js.map +1 -1
- package/dist/features/appointment-calendar.js +436 -340
- package/dist/features/appointment-calendar.js.map +1 -1
- package/dist/features/async-preview.js +351 -265
- package/dist/features/async-preview.js.map +1 -1
- package/dist/features/combobox.js +2 -2
- package/dist/features/comments.js +1 -1
- package/dist/features/data-view.js +212 -151
- package/dist/features/data-view.js.map +1 -1
- package/dist/features/email-composer/engine.js +1 -1
- package/dist/features/email-composer.js +344 -315
- package/dist/features/email-composer.js.map +1 -1
- package/dist/features/event-calendar.js +504 -355
- package/dist/features/event-calendar.js.map +1 -1
- package/dist/features/filters.js +2 -2
- package/dist/features/global-search.js +250 -206
- package/dist/features/global-search.js.map +1 -1
- package/dist/features/kanban.js +269 -189
- package/dist/features/kanban.js.map +1 -1
- package/dist/features/map.js +385 -371
- package/dist/features/map.js.map +1 -1
- package/dist/features/media-library.js +1571 -1199
- package/dist/features/media-library.js.map +1 -1
- package/dist/features/mentions.js +2 -2
- package/dist/features/overlays.js +2 -2
- package/dist/features/products.js +1780 -1691
- package/dist/features/products.js.map +1 -1
- package/dist/features/questionnaire.js +165 -152
- package/dist/features/questionnaire.js.map +1 -1
- package/dist/features/resource-assignment.js +223 -191
- package/dist/features/resource-assignment.js.map +1 -1
- package/dist/features/resource.js +55 -220
- package/dist/features/resource.js.map +1 -1
- package/dist/features/rich-text-editor.js +3 -3
- package/dist/features/schema-form.js +280 -228
- package/dist/features/schema-form.js.map +1 -1
- package/dist/features/suggestions.js +48 -39
- package/dist/features/suggestions.js.map +1 -1
- package/dist/features/table.js +2 -2
- package/dist/features/theme-tweaker.js +723 -633
- package/dist/features/theme-tweaker.js.map +1 -1
- package/dist/feedback-DmqmXKLn.js +254 -0
- package/dist/feedback-DmqmXKLn.js.map +1 -0
- package/dist/{field-affordance-recipes-D6H7tVJi.js → field-affordance-recipes-DfbMadot.js} +13 -9
- package/dist/field-affordance-recipes-DfbMadot.js.map +1 -0
- package/dist/{field-state-recipes-7sza8QbC.js → field-state-recipes-EtCxpEy3.js} +6 -2
- package/dist/field-state-recipes-EtCxpEy3.js.map +1 -0
- package/dist/filters-BviMRMLS.js +2692 -0
- package/dist/filters-BviMRMLS.js.map +1 -0
- package/dist/{focus-recipes-B653VaLq.js → focus-recipes-DSkiUvUp.js} +3 -3
- package/dist/focus-recipes-DSkiUvUp.js.map +1 -0
- package/dist/{form-field-CAPdwdnZ.js → form-field-BdfCwSoQ.js} +5 -5
- package/dist/{form-field-CAPdwdnZ.js.map → form-field-BdfCwSoQ.js.map} +1 -1
- package/dist/{form-sizing-CgcrUbLU.js → form-sizing-DE_dZw32.js} +3 -3
- package/dist/{form-sizing-CgcrUbLU.js.map → form-sizing-DE_dZw32.js.map} +1 -1
- package/dist/{forms-B3W8CH7-.js → forms-B8DzJnBN.js} +35 -35
- package/dist/forms-B8DzJnBN.js.map +1 -0
- package/dist/forms-numeric-DOBswjKj.js +992 -0
- package/dist/forms-numeric-DOBswjKj.js.map +1 -0
- package/dist/{header-ZIIsRKxP.js → header-Cq3G0ZRP.js} +100 -95
- package/dist/header-Cq3G0ZRP.js.map +1 -0
- package/dist/{hooks-BitHSh-Y.js → hooks-DHfeSMAO.js} +34 -14
- package/dist/hooks-DHfeSMAO.js.map +1 -0
- package/dist/{http-D_6rOnzU.js → http-Cu-GPpss.js} +61 -35
- package/dist/http-Cu-GPpss.js.map +1 -0
- package/dist/{icon-badge-npxF1SLX.js → icon-badge-B0Kq7wom.js} +3 -3
- package/dist/{icon-badge-npxF1SLX.js.map → icon-badge-B0Kq7wom.js.map} +1 -1
- package/dist/index.js +6 -6
- package/dist/inline-gutter-context-CSqmrMFZ.js +11 -0
- package/dist/inline-gutter-context-CSqmrMFZ.js.map +1 -0
- package/dist/{input-DIREVYHs.js → input-2YrgTUrz.js} +3 -3
- package/dist/{input-DIREVYHs.js.map → input-2YrgTUrz.js.map} +1 -1
- package/dist/{input-7KAc7XQL.js → input-DfJyrjoR.js} +6 -6
- package/dist/{input-7KAc7XQL.js.map → input-DfJyrjoR.js.map} +1 -1
- package/dist/{interaction-recipes-4wZ2tvfb.js → interaction-recipes-DmuS1ase.js} +2 -2
- package/dist/{interaction-recipes-4wZ2tvfb.js.map → interaction-recipes-DmuS1ase.js.map} +1 -1
- package/dist/item-GJ9mvCcg.js +279 -0
- package/dist/item-GJ9mvCcg.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 +2 -2
- package/dist/layout/sidebar.js +3 -3
- package/dist/layout/workspace.js +1 -1
- package/dist/layout.js +12 -12
- package/dist/{layout.types-E_GAApzO.js → layout.types-DbtnyAtd.js} +11 -8
- package/dist/layout.types-DbtnyAtd.js.map +1 -0
- package/dist/lib/anchored-positioning.d.ts +11 -0
- package/dist/lib/field-affordance-recipes.d.ts +10 -0
- package/dist/lib/field-state-recipes.d.ts +6 -0
- package/dist/lib/focus-recipes.d.ts +7 -0
- package/dist/lib/format.d.ts +25 -0
- package/dist/lib/money-format.d.ts +6 -0
- package/dist/lib/motion-recipes.d.ts +6 -0
- package/dist/lib/surface-recipes.d.ts +32 -2
- package/dist/lib/theme-scope.d.ts +17 -1
- package/dist/lib/token-merge.generated.d.ts +13 -19
- package/dist/lib/ui-provider/index.d.ts +1 -1
- package/dist/lib/ui-provider/types.d.ts +5 -0
- package/dist/lib/use-controllable-state.d.ts +16 -0
- package/dist/lib/use-copy-feedback.d.ts +15 -0
- package/dist/lib/utils.js +1 -1
- package/dist/lib/variant-props.d.ts +9 -0
- package/dist/main-landmark-context-BAsyqp2I.js +11 -0
- package/dist/main-landmark-context-BAsyqp2I.js.map +1 -0
- package/dist/mentions-zz0ewNIq.js +670 -0
- package/dist/mentions-zz0ewNIq.js.map +1 -0
- package/dist/{message-BJHnn43M.js → message-BiiVrRrm.js} +10 -7
- package/dist/{message-BJHnn43M.js.map → message-BiiVrRrm.js.map} +1 -1
- package/dist/{metadata-list-XkqZ_UXH.js → metadata-list-G85roWjS.js} +13 -12
- package/dist/metadata-list-G85roWjS.js.map +1 -0
- package/dist/{motion-recipes-DitYv6P2.js → motion-recipes-CUc_aHuG.js} +7 -4
- package/dist/motion-recipes-CUc_aHuG.js.map +1 -0
- package/dist/navigation-C0Be5C3i.js +304 -0
- package/dist/navigation-C0Be5C3i.js.map +1 -0
- package/dist/{navigation-Bt-v7rWP.js → navigation-CmqaQR_G.js} +99 -103
- package/dist/navigation-CmqaQR_G.js.map +1 -0
- package/dist/number-NFWKIoiK.js +340 -0
- package/dist/number-NFWKIoiK.js.map +1 -0
- package/dist/{overflow-tab-bar-BQCA2Zn2.js → overflow-tab-bar-DV7HE_3t.js} +8 -8
- package/dist/{overflow-tab-bar-BQCA2Zn2.js.map → overflow-tab-bar-DV7HE_3t.js.map} +1 -1
- package/dist/overlays-D-gAIfPF.js +1018 -0
- package/dist/overlays-D-gAIfPF.js.map +1 -0
- package/dist/page-D4pQhgSq.js +216 -0
- package/dist/page-D4pQhgSq.js.map +1 -0
- package/dist/{page-header-commands-DIKspJfx.js → page-header-commands-elelNOfd.js} +29 -29
- package/dist/{page-header-commands-DIKspJfx.js.map → page-header-commands-elelNOfd.js.map} +1 -1
- package/dist/{pagination-Br8TdV9A.js → pagination-BuSWw1US.js} +22 -23
- package/dist/pagination-BuSWw1US.js.map +1 -0
- package/dist/{popover-k8TdUcAt.js → popover-BpMxbqEK.js} +73 -69
- package/dist/popover-BpMxbqEK.js.map +1 -0
- package/dist/{popover-menu-yn-o0kyA.js → popover-menu-CO-_iiuz.js} +7 -7
- package/dist/{popover-menu-yn-o0kyA.js.map → popover-menu-CO-_iiuz.js.map} +1 -1
- package/dist/{popover.recipes-DJ0AkUan.js → popover.recipes-BqkdvlZn.js} +3 -4
- package/dist/{popover.recipes-DJ0AkUan.js.map → popover.recipes-BqkdvlZn.js.map} +1 -1
- package/dist/{portal-recipes-DyUXqUtD.js → portal-recipes-BPeS4rGB.js} +2 -2
- package/dist/{portal-recipes-DyUXqUtD.js.map → portal-recipes-BPeS4rGB.js.map} +1 -1
- package/dist/primitives-BlC1lXBr.js +447 -0
- package/dist/primitives-BlC1lXBr.js.map +1 -0
- package/dist/primitives.js +4 -4
- package/dist/{progress-DZFXXzPs.js → progress-RARK8AjB.js} +5 -5
- package/dist/{progress-DZFXXzPs.js.map → progress-RARK8AjB.js.map} +1 -1
- package/dist/receipt-CUf2Vegp.js +114 -0
- package/dist/receipt-CUf2Vegp.js.map +1 -0
- package/dist/{rich-text-BnTzZjIo.js → rich-text-Cypm9__d.js} +7 -8
- package/dist/{rich-text-BnTzZjIo.js.map → rich-text-Cypm9__d.js.map} +1 -1
- package/dist/rich-text-editor-Z6cQepsA.js +919 -0
- package/dist/rich-text-editor-Z6cQepsA.js.map +1 -0
- package/dist/rich-text-editor-toolbar-DYbRJARB.js +100 -0
- package/dist/rich-text-editor-toolbar-DYbRJARB.js.map +1 -0
- package/dist/rich-text-tree-DdKHIJx4.js +154 -0
- package/dist/rich-text-tree-DdKHIJx4.js.map +1 -0
- package/dist/safe-image-src-C6kQSMBZ.js +17 -0
- package/dist/safe-image-src-C6kQSMBZ.js.map +1 -0
- package/dist/{scroll-area-Bj6CRUif.js → scroll-area-B9HKbji0.js} +3 -3
- package/dist/{scroll-area-Bj6CRUif.js.map → scroll-area-B9HKbji0.js.map} +1 -1
- package/dist/{separator-DM6gs2vu.js → separator-DaDe26sf.js} +3 -3
- package/dist/separator-DaDe26sf.js.map +1 -0
- package/dist/{separator-B9ewiCGO.js → separator-KGsNXt2J.js} +2 -2
- package/dist/{separator-B9ewiCGO.js.map → separator-KGsNXt2J.js.map} +1 -1
- package/dist/services/actions/action-adapters.d.ts +5 -2
- package/dist/services/actions/index.d.ts +1 -1
- package/dist/services/actions.js +2 -2
- package/dist/services/actions.js.map +1 -1
- package/dist/settings-D5j_RJvT.js +160 -0
- package/dist/settings-D5j_RJvT.js.map +1 -0
- package/dist/sheet-B6j_BE9O.js +241 -0
- package/dist/sheet-B6j_BE9O.js.map +1 -0
- package/dist/{sidebar-CmD6a-HK.js → sidebar-C-iQ_TJP.js} +377 -351
- package/dist/sidebar-C-iQ_TJP.js.map +1 -0
- package/dist/sidebar-D5VO2W8S.js +715 -0
- package/dist/sidebar-D5VO2W8S.js.map +1 -0
- package/dist/{skeleton-DDgdhmu9.js → skeleton-Cab_KgVo.js} +12 -12
- package/dist/skeleton-Cab_KgVo.js.map +1 -0
- package/dist/{smart-card-B6vLxqa_.js → smart-card-C59z6KFO.js} +217 -210
- package/dist/smart-card-C59z6KFO.js.map +1 -0
- package/dist/{structure-DZJ2wbAU.js → structure-DElaQwwN.js} +2 -2
- package/dist/{structure-DZJ2wbAU.js.map → structure-DElaQwwN.js.map} +1 -1
- package/dist/style.css +1 -1
- package/dist/{surface-recipes-C8mNycaY.js → surface-recipes-DV6rrOFq.js} +10 -2
- package/dist/surface-recipes-DV6rrOFq.js.map +1 -0
- package/dist/{table-CXSPHH25.js → table-CSRUgpdK.js} +62 -61
- package/dist/table-CSRUgpdK.js.map +1 -0
- package/dist/table-DdXDBsR_.js +1657 -0
- package/dist/table-DdXDBsR_.js.map +1 -0
- package/dist/{tabs-C4Kr_hCr.js → tabs-WnHfV2pM.js} +27 -27
- package/dist/tabs-WnHfV2pM.js.map +1 -0
- package/dist/{text-inputs-jdkS3ReG.js → text-inputs-ljyBYaCd.js} +112 -112
- package/dist/text-inputs-ljyBYaCd.js.map +1 -0
- package/dist/theme.css +21 -5
- package/dist/timelines-mOmS9Eh3.js +479 -0
- package/dist/timelines-mOmS9Eh3.js.map +1 -0
- package/dist/tooltip-yjX-Uv-p.js +112 -0
- package/dist/tooltip-yjX-Uv-p.js.map +1 -0
- package/dist/{tree-CeYVzdFE.js → tree-YpkxUG2Z.js} +80 -72
- package/dist/tree-YpkxUG2Z.js.map +1 -0
- package/dist/typography/rich-text.js +1 -1
- package/dist/{typography-C7-YMW1S.js → typography-C0dELqYV.js} +46 -40
- package/dist/typography-C0dELqYV.js.map +1 -0
- package/dist/typography.js +1 -1
- package/dist/{ui-provider-C-74NVLc.js → ui-provider-Bu1S-o96.js} +4 -3
- package/dist/ui-provider-Bu1S-o96.js.map +1 -0
- package/dist/ui-provider.js +2 -2
- package/dist/{upload-Hdm5gObf.js → upload-DMuMYJFT.js} +276 -268
- package/dist/upload-DMuMYJFT.js.map +1 -0
- package/dist/{usage-card-9s8hLDfn.js → usage-card-DDPki5P1.js} +57 -54
- package/dist/usage-card-DDPki5P1.js.map +1 -0
- package/dist/use-controllable-state-BlP8SyBI.js +13 -0
- package/dist/use-controllable-state-BlP8SyBI.js.map +1 -0
- package/dist/use-copy-feedback-CzcaqlLf.js +28 -0
- package/dist/use-copy-feedback-CzcaqlLf.js.map +1 -0
- package/dist/use-metric-format-options-Dk4rC1NO.js +251 -0
- package/dist/use-metric-format-options-Dk4rC1NO.js.map +1 -0
- package/dist/{utils-DhuoqFy4.js → utils-BVbAG2J6.js} +98 -76
- package/dist/utils-BVbAG2J6.js.map +1 -0
- package/dist/value-inputs-h5MwjGCo.js +982 -0
- package/dist/value-inputs-h5MwjGCo.js.map +1 -0
- package/dist/value-typography-D15uwfj-.js +154 -0
- package/dist/value-typography-D15uwfj-.js.map +1 -0
- package/dist/workspace-DIryPqBt.js +400 -0
- package/dist/workspace-DIryPqBt.js.map +1 -0
- package/docs/consumer-skill/SKILL.md +7 -0
- package/docs/consumer-skill/agents/themelia-ui-designer.md +11 -2
- package/docs/consumer-skill/examples/analytics.tsx +1 -1
- package/docs/consumer-skill/examples/app-layout.tsx +3 -3
- package/docs/consumer-skill/examples/commerce-lines.tsx +7 -5
- package/docs/consumer-skill/examples/detail.tsx +3 -2
- package/docs/consumer-skill/examples/email-composer.tsx +1 -1
- package/docs/consumer-skill/examples/index-table.tsx +2 -2
- package/docs/consumer-skill/examples/scoped-directory.tsx +7 -6
- package/docs/consumer-skill/references/agents-md.md +20 -16
- package/docs/consumer-skill/references/analytics.md +20 -6
- package/docs/consumer-skill/references/building-views.md +213 -0
- package/docs/consumer-skill/references/catalogue.md +617 -0
- package/docs/consumer-skill/references/component-contracts.json +10202 -18084
- package/docs/consumer-skill/references/composition.md +21 -17
- package/docs/consumer-skill/references/discovery.md +8 -5
- package/docs/consumer-skill/references/installation.md +10 -4
- package/docs/consumer-skill/references/integration.md +5 -5
- package/docs/consumer-skill/references/product-composition.md +2 -2
- package/docs/consumer-skill/references/public-api.json +580 -633
- package/docs/consumer-skill/references/review.md +6 -4
- package/docs/consumer-skill/references/screen-archetypes.md +2 -2
- package/docs/consumer-skill/references/theming.md +1 -1
- package/docs/consumer-skill/references/tokens.json +4 -4
- package/docs/consumer-skill/references/workflows.md +7 -7
- package/docs/consumer-skill/scripts/composition-policy.mjs +40 -20
- package/docs/consumer-skill/scripts/composition.mjs +4 -1
- package/docs/consumer-skill/scripts/discovery.mjs +3 -1
- package/docs/consumer-skill/scripts/setup-skills.mjs +31 -4
- package/docs/consumer-skills/themelia-components/SKILL.md +8 -4
- package/docs/consumer-skills/themelia-composition/SKILL.md +7 -3
- package/docs/consumer-skills/themelia-design/SKILL.md +7 -1
- package/docs/consumer-skills/themelia-tokenization/SKILL.md +1 -1
- package/package.json +9 -12
- package/templates/README.md +3 -2
- package/templates/admin-shell-template.tsx +49 -9
- package/templates/analytics-operations-template.tsx +20 -24
- package/templates/customers-template.tsx +12 -9
- package/templates/index.ts +2 -8
- package/templates/orders-template.tsx +28 -24
- package/templates/products-template.tsx +14 -4
- package/templates/user-permissions-template.tsx +11 -14
- package/dist/accordion-0tQUZ20r.js.map +0 -1
- package/dist/action-menu-C0gjzLyE.js +0 -284
- package/dist/action-menu-C0gjzLyE.js.map +0 -1
- package/dist/ai-artifact-CGGpQryR.js +0 -1200
- package/dist/ai-artifact-CGGpQryR.js.map +0 -1
- package/dist/anchored-positioning-DPnKTvNs.js +0 -6
- package/dist/anchored-positioning-DPnKTvNs.js.map +0 -1
- package/dist/app-shell-EHuuRDGy.js +0 -321
- package/dist/app-shell-EHuuRDGy.js.map +0 -1
- package/dist/auth-B0girIk_.js.map +0 -1
- package/dist/badge-wWauMgAt.js.map +0 -1
- package/dist/base/sheet.js +0 -3
- package/dist/breadcrumbs-Bp9Ke7kd.js.map +0 -1
- package/dist/button-ChBovTx0.js.map +0 -1
- package/dist/buttons-DeW0bQeK.js.map +0 -1
- package/dist/cascader-CrAl9zD5.js +0 -439
- package/dist/cascader-CrAl9zD5.js.map +0 -1
- package/dist/choice-inputs-DHGtx0QV.js.map +0 -1
- package/dist/code-block-BSJyq9e-.js.map +0 -1
- package/dist/collapsible-BzJ91LUG.js +0 -81
- package/dist/collapsible-BzJ91LUG.js.map +0 -1
- package/dist/combobox-Bcvu5J8O.js +0 -363
- package/dist/combobox-Bcvu5J8O.js.map +0 -1
- package/dist/combobox-C2JiSQPc.js +0 -915
- package/dist/combobox-C2JiSQPc.js.map +0 -1
- package/dist/command-9e52NPgK.js +0 -425
- package/dist/command-9e52NPgK.js.map +0 -1
- package/dist/comments-BsgErEqd.js +0 -1174
- package/dist/comments-BsgErEqd.js.map +0 -1
- package/dist/components/base/buttons/tooltip-button.d.ts +0 -7
- package/dist/components/base/display/content-block.d.ts +0 -75
- package/dist/components/base/display/content-block.strings.d.ts +0 -5
- package/dist/components/base/sheet/index.d.ts +0 -29
- package/dist/components/blocks/ai/use-copy-feedback.d.ts +0 -6
- package/dist/components/blocks/data-display/metadata/index.d.ts +0 -30
- package/dist/components/features/mentions/utils/split-html-by-mentions.d.ts +0 -10
- package/dist/components/features/resource/resource.strings.d.ts +0 -12
- package/dist/components/features/rich-text-editor/partials/rich-text-editor-fallback.d.ts +0 -8
- package/dist/components/features/sync/index.d.ts +0 -26
- package/dist/components/features/sync/sync-range-dialog-form.d.ts +0 -5
- package/dist/components/features/sync/sync.strings.d.ts +0 -18
- package/dist/components/features/sync/sync.types.d.ts +0 -44
- package/dist/components/layout/page/partials/page-actions.d.ts +0 -3
- package/dist/components/ui/slot.d.ts +0 -6
- package/dist/containers-CSdc32h9.js.map +0 -1
- package/dist/data-display-Cmj-xZYl.js.map +0 -1
- package/dist/date-Br0FicVv.js +0 -144
- package/dist/date-Br0FicVv.js.map +0 -1
- package/dist/date-picker-CyQlFYsP.js.map +0 -1
- package/dist/date-pickers-tj2MXmXd.js +0 -185
- package/dist/date-pickers-tj2MXmXd.js.map +0 -1
- package/dist/display-CT_N2a3w.js.map +0 -1
- package/dist/features/sync.js +0 -142
- package/dist/features/sync.js.map +0 -1
- package/dist/feedback-Dzo1xtAU.js +0 -246
- package/dist/feedback-Dzo1xtAU.js.map +0 -1
- package/dist/field-affordance-recipes-D6H7tVJi.js.map +0 -1
- package/dist/field-state-recipes-7sza8QbC.js.map +0 -1
- package/dist/filters-Dl80yYtN.js +0 -2415
- package/dist/filters-Dl80yYtN.js.map +0 -1
- package/dist/focus-recipes-B653VaLq.js.map +0 -1
- package/dist/forms-B3W8CH7-.js.map +0 -1
- package/dist/forms-numeric-CwjQJe-O.js +0 -991
- package/dist/forms-numeric-CwjQJe-O.js.map +0 -1
- package/dist/header-ZIIsRKxP.js.map +0 -1
- package/dist/hooks-BitHSh-Y.js.map +0 -1
- package/dist/http-D_6rOnzU.js.map +0 -1
- package/dist/item-FfWnaYST.js +0 -278
- package/dist/item-FfWnaYST.js.map +0 -1
- package/dist/layout.types-E_GAApzO.js.map +0 -1
- package/dist/media-gallery-C81DAnKI.js +0 -203
- package/dist/media-gallery-C81DAnKI.js.map +0 -1
- package/dist/mentions-qOnedSt4.js +0 -639
- package/dist/mentions-qOnedSt4.js.map +0 -1
- package/dist/metadata-list-XkqZ_UXH.js.map +0 -1
- package/dist/motion-recipes-DitYv6P2.js.map +0 -1
- package/dist/navigation-BgtPJAhi.js +0 -288
- package/dist/navigation-BgtPJAhi.js.map +0 -1
- package/dist/navigation-Bt-v7rWP.js.map +0 -1
- package/dist/number-CYqBcrSj.js +0 -346
- package/dist/number-CYqBcrSj.js.map +0 -1
- package/dist/overlays-CC8zI3Du.js +0 -1017
- package/dist/overlays-CC8zI3Du.js.map +0 -1
- package/dist/page-BoQ1VaFJ.js +0 -331
- package/dist/page-BoQ1VaFJ.js.map +0 -1
- package/dist/pagination-Br8TdV9A.js.map +0 -1
- package/dist/popover-k8TdUcAt.js.map +0 -1
- package/dist/primitives-BkkQjYl7.js +0 -385
- package/dist/primitives-BkkQjYl7.js.map +0 -1
- package/dist/receipt-C7LhOg7Q.js +0 -116
- package/dist/receipt-C7LhOg7Q.js.map +0 -1
- package/dist/rich-text-editor-CAurDwT5.js +0 -1273
- package/dist/rich-text-editor-CAurDwT5.js.map +0 -1
- package/dist/rich-text-editor-toolbar-DbXig7Jk.js +0 -99
- package/dist/rich-text-editor-toolbar-DbXig7Jk.js.map +0 -1
- package/dist/rich-text-tree-BqyQ_7-R.js +0 -66
- package/dist/rich-text-tree-BqyQ_7-R.js.map +0 -1
- package/dist/sanitize-html-BWkH4dLM.js +0 -105
- package/dist/sanitize-html-BWkH4dLM.js.map +0 -1
- package/dist/separator-DM6gs2vu.js.map +0 -1
- package/dist/settings-DZPHgpx4.js +0 -155
- package/dist/settings-DZPHgpx4.js.map +0 -1
- package/dist/sheet-C4DHsgLk.js +0 -250
- package/dist/sheet-C4DHsgLk.js.map +0 -1
- package/dist/sidebar-C8BnDwTH.js +0 -709
- package/dist/sidebar-C8BnDwTH.js.map +0 -1
- package/dist/sidebar-CmD6a-HK.js.map +0 -1
- package/dist/skeleton-DDgdhmu9.js.map +0 -1
- package/dist/slot-CLF9kLrS.js +0 -16
- package/dist/slot-CLF9kLrS.js.map +0 -1
- package/dist/smart-card-B6vLxqa_.js.map +0 -1
- package/dist/surface-recipes-C8mNycaY.js.map +0 -1
- package/dist/table-CBonSdTp.js +0 -1584
- package/dist/table-CBonSdTp.js.map +0 -1
- package/dist/table-CXSPHH25.js.map +0 -1
- package/dist/tabs-C4Kr_hCr.js.map +0 -1
- package/dist/text-inputs-jdkS3ReG.js.map +0 -1
- package/dist/timelines-CoPwdJP0.js +0 -458
- package/dist/timelines-CoPwdJP0.js.map +0 -1
- package/dist/tooltip-31NwIpTo.js +0 -113
- package/dist/tooltip-31NwIpTo.js.map +0 -1
- package/dist/tree-CeYVzdFE.js.map +0 -1
- package/dist/typography-C7-YMW1S.js.map +0 -1
- package/dist/ui-provider-C-74NVLc.js.map +0 -1
- package/dist/upload-Hdm5gObf.js.map +0 -1
- package/dist/upload-queue-D0sYPuqo.js +0 -409
- package/dist/upload-queue-D0sYPuqo.js.map +0 -1
- package/dist/usage-card-9s8hLDfn.js.map +0 -1
- package/dist/utils-DhuoqFy4.js.map +0 -1
- package/dist/value-inputs-D3aPgq9H.js +0 -980
- package/dist/value-inputs-D3aPgq9H.js.map +0 -1
- package/dist/value-typography-uSzzG9Gf.js +0 -122
- package/dist/value-typography-uSzzG9Gf.js.map +0 -1
- package/dist/workspace-CC8Vchiu.js +0 -411
- package/dist/workspace-CC8Vchiu.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table-DdXDBsR_.js","names":["NumberValue","_Fragment","_Fragment","Link","NumberValue","DateValue","Link","DateValue","resolveComponentScale","useDensityConfig","cn","Text","DisplayLabel","TextLink","focusRecipes","Button","Stack","surfaceRecipes","regionRecipes","popoverWidthRecipes","ActionMenu","ActionButtons","Skeleton","interactionRecipes","Value","Phone","Name","SecondaryValue","MutedValue","FileSize","Url","MonoValue","Email","EmptyValue","Link$1","Initials","formatInitials","Percent","Money","Number$1","Time","RelativeTime","DateTime","parseDateInput","DatePrimitive","AvatarFallback","Avatar","AvatarImage","Badge","BatchActionBar","Separator","Input","Checkbox","segmentedControlRecipes","controlGroupHeightClasses","PaginationNext","defaultPaginationStrings","PaginationLink","PaginationEllipsis","PaginationPrevious","PaginationItem","PaginationRoot","PaginationContent","TableRow","TableCell","TableBody","TableHead","TableHeader","Table","EmptyState","React","Fragment$1","SCROLL_AMOUNT_DEFAULT","getDataTableScrollContainer","tableArea","useDataTableScrollState","options","canScrollLeft","setCanScrollLeft","useState","canScrollRight","setCanScrollRight","rafRef","useRef","measure","useCallback","el","tableAreaRef","scrollLeft","clientWidth","scrollWidth","detach","timerId","handleScroll","ro","deps","scrollBy","delta","stepPx","EDITABLE_VALUES","FOCUSABLE_SELECTOR","getOwnedTableRegions","regions","region","index","trigger","id","controlled","useFullscreenTableModality","onExitRef","onExit","useEffect","active","opener","previousBodyOverflow","tabDirection","mounted","containsFocus","current","owner","getFocusables","node","isChildDialog","dialog","handleKeyDown","regionRef","event","focusables","first","last","inside","handleFocusIn","handlePointerDown","guardedRegion","tableRegionInsetClassName","fallbackSentenceCase","formatted","value","defaultDataTableStrings","currentLabel","columnId","selected","total","columnLabel","direction","priority","mergeNested","defaults","overrides","mergeDataTableStrings","generatePageNumbers","lastPage","i","pages","currentPage","start","end","buildPageUrl","params","queryKey","page","basePath","isModifiedClick","Pagination","paginationLabels","labels","primitiveStrings","pageQueryKey","firstItem","pagination","lastItem","navigateToPage","url","onPageChange","hasPrevious","hasNext","className","isEllipsis","itemKey","pageUrl","DataTableActions","providedStrings","props","strings","resolvedMenuLabel","menuLabel","resolvedActions","useMemo","base","actions","row","visibleActions","evalFlag","flag","visible","action","hasVisibleActions","isNarrow","setIsNarrow","nonDestructive","destructive","sortedActions","displayMode","handleResize","responsiveBreakpoint","mode","actionDefinitions","idx","getGeneratedColumnOptions","table","applyTableStateChange","update","setInternalState","externalHandler","resolve","currentState","nextState","reported","previousState","handleRowSelectionChange","updatedSelection","handleSortingChange","updatedSorting","handleColumnVisibilityChange","updatedVisibility","getRowClassName","isSelected","rowClassName","SELECTION_COLUMN_ID","pinnedCellBase","pinnedCellEdge","getPinnedColumnRole","stickyFirstColumn","hasSelection","columnIds","getPinnedCellClassName","role","afterSelection","getCellClassName","baseClassName","cellClassName","isFirstColumn","getSelectedRowsData","visibleRowPositions","getVisibleRowPosition","visibleRows","positions","visibleRow","position","createRowSelectionCheckbox","checked","createHeaderSelectionCheckbox","SelectionHeader","SelectionCell","addSelectionColumn","columns","rowControlSelector","DataTableBody","tableRows","resolvedEmptyStateMessage","loading","rowCount","loadingRows","column","pinned","columnIndex","isRowSelected","rowCells","rowColumnIds","cell","computedRowClassName","rowIndex","zebraClass","striped","cursorClass","onRowClick","rowClasses","target","control","cellIndex","flexRender","PackageOpen","emptyStateAction","DataTableHeader","headerGroups","sortDescriptionId","sorting","stickyCellClassName","stickyHeader","headerTransparent","getColumnGroup","columnGroups","group","headers","currentGroup","groupSpan","groupCells","groupName","header","headerGroup","entry","cellClasses","enableResizing","headerStyle","headerSortDescriptionId","resizeHandler","resizeLeaves","leaf","minSize","sum","maxSize","startResize","previous","isResizing","rawHeader","canSort","sortDir","headerNode","SortIcon","ArrowUp","ArrowDown","ChevronsUpDown","rtl","size","ratio","min","max","next","ColumnVisibilityToggle","showVisualLabel","labelVisibility","columnName","Settings2","buttonClass","FullscreenToggle","label","fullscreen","exitLabel","enterLabel","Icon","Minimize2","Maximize2","onFullscreenChange","SCROLL_AMOUNT","btnBase","ToolbarIconButton","getScrollContainer","DataTableToolbar","defaultScale","cleanupRef","checkOverflow","handleScrollLeft","handleScrollRight","hideableColumns","enableColumnVisibility","hasScrollArrows","hasColumns","hasFullscreen","showFullscreenToggle","ChevronLeft","ChevronRight","DataTableSizeContext","createContext","useDataTableSize","useContext","densityByDataTableSize","dataTableTextSize","SELECTION_COLUMN_WIDTH","readStoredColumnVisibility","stored","storageKey","parsed","useUpdaterResolver","committedRef","state","pendingRef","useLayoutEffect","updater","toCssSize","withTextFilter","filterColumn","GeneratedActionsHeader","GeneratedActionsCell","useResolvedColumns","tuple","retained","setRetained","dependencies","dependency","DataTable","controlledFullscreen","controlledRowSelection","controlledSorting","controlledColumnVisibility","stringsOverride","totalRowCountProp","resolvedSize","tableRowClasses","resolvedPageQueryKey","resolvedMaxBodyHeight","maxBodyHeight","resolvedColumns","formattedStorageKey","internalSorting","setInternalSorting","initialState","columnFilters","setColumnFilters","explicitColumnVisibility","internalColumnVisibility","setInternalColumnVisibility","columnVisibilityPrecedence","internalRowSelection","setInternalRowSelection","internalFullscreen","setInternalFullscreen","defaultFullscreen","columnVisibility","rowSelection","lastTableFocusRef","selectionReturnFocusRef","rememberTableFocus","resolveColumnFilters","resolveSorting","resolveColumnVisibility","resolveRowSelection","handleColumnFiltersChange","nextFilters","onColumnFiltersChange","handleSortingChangeCallback","nextSorting","onSortingChange","handleVisibilityChangeCallback","nextVisibility","persisted","onColumnVisibilityChange","handleRowSelectionChangeCallback","nextRowSelection","onRowSelectionChange","fullscreenRegionRef","handleFullscreenChange","nextFullscreen","getRowActionsMenuLabel","rowActionsMenuLabel","hasRowActions","rowActions","columnsWithActions","searchableColumns","baseColumns","enableRowSelection","actionCol","useReactTable","rowActionsDisplayMode","rowActionsBreakpoint","enableSorting","getCoreRowModel","getFilteredRowModel","getSortedRowModel","filterTarget","searchPlaceholder","shouldShow","selectedRows","selectedRowCount","clearSelection","totalRowCount","data","selectionToolbarContext","selectionToolbarNode","selectionToolbar","bulkActionNode","bulkActions","bar","selectionToolbarPlacement","selectionToolbarClassName","count","pinsSelectionPair","measuredSelectionWidth","setMeasuredSelectionWidth","width","observer","tableAreaStyle","shouldUseScrollableTableContainer","fillAvailableHeight","Provider","surface","wrapperClassName","topbarContent","topbarEnd","stickyToolbar","topbarClassName","toolbarLabelVisibility","innerClassName","tableContainerClassName","headerClassName","footerContent","DataTableFilterBar","customContent","isMissingPrimitive","isMissingDisplay","isDescriptor","isValidElement","isTuple","normalizeTuple","rawValue","kind","normalizeCellValue","descriptor","stringValue","renderPrimitiveCellValue","isPrimary","display","resolvedEmptyLabel","emptyLabel","resolvedClassName","weight","primaryWeight","href","CellValue","isMissing","missing","children","fallback","CellStack","visibleValues","values","itemClassName","primaryClassName","secondaryClassName","TableLink","renderResourceBadge","badge","renderResourceMetadata","metadata","item","ResourceCell","IconComponent","title","titleText","initials","content","contentClassName","titleClassName","badges","subtitle","subtitleClassName","hasFallback","hasMedia","imageUrl","square","mediaShape","mediaClassName","linkClassName","renderLink","StatusCell","map","StatusClusterCell","visibleItems","items","badgeClassName","DateCell","Calendar","date","showIcon","DateMetaCell","secondaryNode","secondary","CurrencyCell","currency","AvatarCell","Mail","name"],"sources":["../src/components/features/table/hooks.ts","../src/components/features/table/table-region.recipes.ts","../src/components/features/table/table.strings.ts","../src/components/features/table/pagination.tsx","../src/components/features/table/table-actions.tsx","../src/components/features/table/table-helpers.tsx","../src/components/features/table/table-body.tsx","../src/components/features/table/table-header.tsx","../src/components/features/table/column-visibility-toggle.tsx","../src/components/features/table/partials/fullscreen-toggle.tsx","../src/components/features/table/table-toolbar.tsx","../src/components/features/table/data-table.tsx","../src/components/features/table/filter-bar.tsx","../src/components/features/table/partials/cell-value.tsx","../src/components/features/table/partials/table-link.tsx","../src/components/features/table/partials/resource-cell.tsx","../src/components/features/table/partials/cell-renderers.tsx"],"sourcesContent":["/**\n * Reusable hooks for DataTable consumers building custom toolbars or chrome.\n *\n * The default `DataTableToolbar` already wires these internally; expose them\n * for consumers that need horizontal-scroll arrows in a\n * custom layout (e.g. inside a hero banner above the table).\n */\nimport { useCallback, useEffect, useRef, useState, type RefObject } from 'react';\n\nconst SCROLL_AMOUNT_DEFAULT = 300;\n\n/**\n * Locate the actual horizontally-scrollable element inside a `tableArea`\n * wrapper. The shadcn-style Table primitive renders a\n * `<div data-slot=\"table-container\" class=\"overflow-x-auto\">` we target.\n */\nexport function getDataTableScrollContainer(\n\ttableArea: HTMLDivElement | null,\n): HTMLDivElement | null {\n\tif (!tableArea) return null;\n\treturn tableArea.querySelector<HTMLDivElement>('[data-slot=\"table-container\"]');\n}\n\nexport interface UseDataTableScrollStateReturn {\n\tcanScrollLeft: boolean;\n\tcanScrollRight: boolean;\n\tscrollBy: (delta: number) => void;\n\tscrollLeft: () => void;\n\tscrollRight: () => void;\n}\n\n/**\n * Track horizontal-overflow state for a DataTable wrapper. Returns booleans\n * for whether each scroll direction is available, plus helpers to nudge the\n * scroll container by a fixed amount.\n *\n * Pass the same `RefObject<HTMLDivElement>` you pass to `<DataTable>` as\n * `tableAreaRef`.\n */\nexport function useDataTableScrollState(\n\ttableAreaRef: RefObject<HTMLDivElement | null>,\n\toptions: { stepPx?: number; deps?: ReadonlyArray<unknown> } = {},\n): UseDataTableScrollStateReturn {\n\tconst { stepPx = SCROLL_AMOUNT_DEFAULT, deps = [] } = options;\n\tconst [canScrollLeft, setCanScrollLeft] = useState(false);\n\tconst [canScrollRight, setCanScrollRight] = useState(false);\n\tconst rafRef = useRef(0);\n\n\tconst measure = useCallback(() => {\n\t\tconst el = getDataTableScrollContainer(tableAreaRef.current);\n\t\tif (!el) {\n\t\t\tsetCanScrollLeft(false);\n\t\t\tsetCanScrollRight(false);\n\t\t\treturn;\n\t\t}\n\t\tconst { scrollLeft, scrollWidth, clientWidth } = el;\n\t\tsetCanScrollLeft(scrollLeft > 1);\n\t\tsetCanScrollRight(scrollLeft + clientWidth < scrollWidth - 1);\n\t}, [tableAreaRef]);\n\n\tuseEffect(() => {\n\t\tlet detach: (() => void) | undefined;\n\t\tconst timerId = window.setTimeout(() => {\n\t\t\tmeasure();\n\t\t\tconst el = getDataTableScrollContainer(tableAreaRef.current);\n\t\t\tif (!el) return;\n\n\t\t\tconst handleScroll = () => {\n\t\t\t\tcancelAnimationFrame(rafRef.current);\n\t\t\t\trafRef.current = requestAnimationFrame(measure);\n\t\t\t};\n\n\t\t\tel.addEventListener('scroll', handleScroll, { passive: true });\n\t\t\tconst ro = new ResizeObserver(measure);\n\t\t\tro.observe(el);\n\t\t\tif (el.firstElementChild) ro.observe(el.firstElementChild);\n\n\t\t\tdetach = () => {\n\t\t\t\tel.removeEventListener('scroll', handleScroll);\n\t\t\t\tcancelAnimationFrame(rafRef.current);\n\t\t\t\tro.disconnect();\n\t\t\t};\n\t\t}, 0);\n\n\t\treturn () => {\n\t\t\twindow.clearTimeout(timerId);\n\t\t\tdetach?.();\n\t\t};\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, [tableAreaRef, measure, ...deps]);\n\n\tconst scrollBy = useCallback(\n\t\t(delta: number) => {\n\t\t\tgetDataTableScrollContainer(tableAreaRef.current)?.scrollBy({\n\t\t\t\tleft: delta,\n\t\t\t\tbehavior: 'smooth',\n\t\t\t});\n\t\t},\n\t\t[tableAreaRef],\n\t);\n\n\tconst scrollLeft = useCallback(() => scrollBy(-stepPx), [scrollBy, stepPx]);\n\tconst scrollRight = useCallback(() => scrollBy(stepPx), [scrollBy, stepPx]);\n\n\treturn { canScrollLeft, canScrollRight, scrollBy, scrollLeft, scrollRight };\n}\n\nconst EDITABLE_VALUES = new Set(['', 'true', 'plaintext-only']);\nconst FOCUSABLE_SELECTOR = [\n\t'a[href]',\n\t'button:not([disabled])',\n\t'input:not([disabled])',\n\t'select:not([disabled])',\n\t'textarea:not([disabled])',\n\t'summary',\n\t'[contenteditable]',\n\t'[tabindex]:not([tabindex=\"-1\"])',\n].join(',');\n\n/** Follow the public control relationship rather than depending on portal markup. */\nfunction getOwnedTableRegions(region: HTMLElement): HTMLElement[] {\n\tconst regions = [region];\n\tfor (let index = 0; index < regions.length; index++) {\n\t\tfor (const trigger of regions[index].querySelectorAll('[aria-controls]:not([aria-expanded=\"false\"])')) {\n\t\t\tfor (const id of (trigger.getAttribute('aria-controls') ?? '').split(/\\s+/)) {\n\t\t\t\tconst controlled = region.ownerDocument.getElementById(id);\n\t\t\t\tif (controlled && !regions.includes(controlled)) regions.push(controlled);\n\t\t\t}\n\t\t}\n\t}\n\treturn regions;\n}\n\n/**\n * Modal behaviour for the full-screen table.\n *\n * Full-screen mode paints `fixed inset-0` over the entire viewport — the app's\n * own header and navigation included — which makes it modal in every way that\n * matters to a user. It shipped with none of the contract that implies: Escape\n * did nothing, Tab walked out into the page underneath that nobody can see, and\n * assistive technology was never told the rest of the document was unavailable.\n *\n * `aria-modal` on the region covers the announcement. This covers the rest:\n * Escape leaves, Tab cycles inside, and focus returns to the control that\n * opened it so keyboard users are not dropped at the top of the document.\n */\nexport function useFullscreenTableModality(\n\tactive: boolean,\n\tregionRef: RefObject<HTMLElement | null>,\n\tonExit: () => void,\n): void {\n\tconst onExitRef = useRef(onExit);\n\tonExitRef.current = onExit;\n\n\tuseEffect(() => {\n\t\tif (!active || typeof document === 'undefined') return;\n\n\t\tconst opener = document.activeElement as HTMLElement | null;\n\t\tconst previousBodyOverflow = document.body.style.overflow;\n\t\tdocument.body.style.overflow = 'hidden';\n\t\tlet tabDirection: 'forward' | 'backward' | undefined;\n\t\tlet mounted = true;\n\t\tconst containsFocus = (region: HTMLElement, current: Element | null) =>\n\t\t\tcurrent instanceof Node && getOwnedTableRegions(region).some(owner => owner.contains(current));\n\t\tconst getFocusables = (region: HTMLElement) => Array.from(\n\t\t\tregion.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTOR),\n\t\t).filter(node => (node.tabIndex >= 0\n\t\t\t// An editable root is naturally tabbable despite reporting tabIndex -1.\n\t\t\t// Nested editors and an explicit negative tabIndex keep native opt-out.\n\t\t\t|| (EDITABLE_VALUES.has(node.getAttribute('contenteditable')?.toLowerCase() ?? 'false') && !node.hasAttribute('tabindex') && !node.parentElement?.isContentEditable))\n\t\t\t&& !node.matches(':disabled') && !node.closest('[inert], [hidden]')\n\t\t\t&& !['hidden', 'collapse'].includes(getComputedStyle(node).visibility)\n\t\t\t&& (node.offsetParent !== null || node === document.activeElement));\n\t\tconst isChildDialog = (current: Element | null, region: HTMLElement) => {\n\t\t\t// Base UI traps focus through the semantic dialog role; aria-modal is\n\t\t\t// not required, and a scoped portal may stay inside the table's DOM.\n\t\t\tconst dialog = current?.closest('[role=\"dialog\"], [role=\"alertdialog\"], [aria-modal=\"true\"]');\n\t\t\treturn !!dialog && dialog !== region;\n\t\t};\n\n\t\tconst handleKeyDown = (event: KeyboardEvent) => {\n\t\t\tconst region = regionRef.current;\n\t\t\tif (!region || event.defaultPrevented || event.isComposing) return;\n\t\t\tif (isChildDialog(document.activeElement, region)) return;\n\t\t\ttabDirection = event.key === 'Tab' ? event.shiftKey ? 'backward' : 'forward' : undefined;\n\n\t\t\tif (event.key === 'Escape') {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tevent.stopPropagation();\n\t\t\t\tonExitRef.current();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (event.key !== 'Tab') return;\n\n\t\t\tconst current = document.activeElement;\n\t\t\t// Child popups retain their own Tab/Shift+Tab routing and dismissal.\n\t\t\tif (current && !region.contains(current) && containsFocus(region, current)) return;\n\t\t\tconst focusables = getFocusables(region);\n\t\t\tif (focusables.length === 0) return;\n\n\t\t\tconst first = focusables[0];\n\t\t\tconst last = focusables[focusables.length - 1];\n\t\t\tconst inside = current instanceof Node && region.contains(current);\n\n\t\t\tif (event.shiftKey && (!inside || current === first)) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tlast.focus();\n\t\t\t} else if (!event.shiftKey && (!inside || current === last)) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tfirst.focus();\n\t\t\t}\n\t\t};\n\t\tconst handleFocusIn = () => {\n\t\t\tif (!tabDirection) return;\n\t\t\t// A portal's focus guard may route through a temporary outside node.\n\t\t\t// Check after that synchronous routing and recover only a real escape.\n\t\t\tqueueMicrotask(() => {\n\t\t\t\tconst region = regionRef.current;\n\t\t\t\tif (!mounted || !region || !tabDirection || containsFocus(region, document.activeElement) || isChildDialog(document.activeElement, region)) return;\n\t\t\t\tconst focusables = getFocusables(region);\n\t\t\t\t(tabDirection === 'backward' ? focusables.at(-1) : focusables[0])?.focus();\n\t\t\t});\n\t\t};\n\t\tconst handlePointerDown = () => { tabDirection = undefined; };\n\n\t\t// Captured now: by cleanup the ref may already point elsewhere, and the\n\t\t// node this effect actually guarded is the one whose focus we care about.\n\t\tconst guardedRegion = regionRef.current;\n\n\t\t// Bubble at the window, after child React and Base UI document handlers.\n\t\t// Their preventDefault/stopPropagation owns the first Escape.\n\t\twindow.addEventListener('keydown', handleKeyDown);\n\t\twindow.addEventListener('focusin', handleFocusIn);\n\t\twindow.addEventListener('pointerdown', handlePointerDown, true);\n\t\treturn () => {\n\t\t\tmounted = false;\n\t\t\twindow.removeEventListener('keydown', handleKeyDown);\n\t\t\twindow.removeEventListener('focusin', handleFocusIn);\n\t\t\twindow.removeEventListener('pointerdown', handlePointerDown, true);\n\t\t\tdocument.body.style.overflow = previousBodyOverflow;\n\t\t\t// Only reclaim focus if it is still inside the region we are closing;\n\t\t\t// a consumer that moved focus elsewhere on exit keeps it.\n\t\t\tconst current = document.activeElement;\n\t\t\tconst stillInside = guardedRegion && containsFocus(guardedRegion, current);\n\t\t\tif ((stillInside || current === document.body) && opener?.isConnected) opener.focus();\n\t\t};\n\t}, [active, regionRef]);\n}\n","/**\n * Inline inset for every region that sits above or below a table inside the\n * same frame: topbar, toolbar, filter bar, selection bar, footer, pagination.\n *\n * It is the edge of the table's outer cells, as `base/table/table.css` draws\n * it: the surface inset (`--surface-x` × `--space-scale`, 24px by default),\n * and flush inside a padded Card body, where the card already owns the inset.\n * Sharing the rule keeps a region's text on the first column's edge under any\n * scoped spacing, and in a flat table composed into a Card.\n */\nexport const tableRegionInsetClassName =\n\t'px-surface [.card--content:not([data-padding=none])_&:not(.card--content[data-padding=none]_*)]:px-0';\n","import { type DataTableStrings, type DataTableStringsOverride } from './table.types';\n\n// A column id becomes a sentence-case label: separators and camelCase humps\n// turn into spaces and only the first letter is capitalised.\nconst fallbackSentenceCase = (value: string): string => {\n\tconst formatted = value\n\t\t.replace(/([a-z0-9])([A-Z])/g, '$1 $2')\n\t\t.replace(/[_.-]+/g, ' ')\n\t\t.replace(/\\s+/g, ' ')\n\t\t.trim()\n\t\t.toLowerCase();\n\n\tif (!formatted) {\n\t\treturn 'Column';\n\t}\n\n\treturn formatted.charAt(0).toUpperCase() + formatted.slice(1);\n};\n\nconst formatColumnLabel = (columnId: string, currentLabel?: string | null): string => {\n\tif (currentLabel && currentLabel.trim().length > 0) {\n\t\treturn currentLabel;\n\t}\n\n\treturn fallbackSentenceCase(columnId);\n};\n\nexport const defaultDataTableStrings = {\n\tloading: { label: 'Loading records' },\n\temptyState: {\n\t\tmessage: 'No results found.',\n\t\tariaLabel: 'Empty state',\n\t},\n\tactions: {\n\t\ttriggerLabel: 'Actions',\n\t\tsrLabel: 'Row actions menu',\n\t\tmenuLabel: 'More actions',\n\t},\n\tfilter: {\n\t\tsearchPlaceholder: 'Filter...',\n\t\tcolumnsButton: 'Columns',\n\t},\n\tcolumnVisibility: {\n\t\ttitle: 'Toggle columns',\n\t\ttriggerLabel: 'Columns',\n\t\tformatLabel: formatColumnLabel,\n\t},\n\ttoolbar: {\n\t\tscrollLeft: 'Scroll left',\n\t\tscrollRight: 'Scroll right',\n\t\tcolumns: 'Toggle columns',\n\t\tenterFullscreen: 'Enter full screen',\n\t\texitFullscreen: 'Exit full screen',\n\t},\n\tpagination: {\n\t\tshowing: 'Showing',\n\t\tto: 'to',\n\t\tof: 'of',\n\t\tentries: 'results',\n\t\tprevious: 'Previous',\n\t\tnext: 'Next',\n\t\tpreviousLabel: 'Go to previous page',\n\t\tnextLabel: 'Go to next page',\n\t\tmorePages: 'More pages',\n\t\tpage: 'Page',\n\t\trowsPerPage: 'Rows per page',\n\t\tariaLabel: 'Pagination navigation',\n\t},\n\tselection: {\n\t\tsummary: (selected, total) => `${selected} of ${total} row${total === 1 ? '' : 's'} selected.`,\n\t\trow: (index) => `Select row ${index + 1}`,\n\t\tselectAll: 'Select all rows',\n\t\tcolumnLabel: 'Selection',\n\t\tclear: 'Clear selection',\n\t\tlabel: 'Batch actions',\n\t},\n\taccessibility: {\n\t\tscrollRegion: 'Table scroll area',\n\t\tfullscreenRegion: 'Table, full screen',\n\t\tsortColumn: (columnLabel: string) => `Sort ${columnLabel}`,\n\t\tsortPriority: (direction: 'asc' | 'desc', priority: number, total: number) => `${direction === 'asc' ? 'Ascending' : 'Descending'}, sort priority ${priority} of ${total}.`,\n\t\tresizeColumn: (columnLabel: string) => `Resize ${columnLabel}`,\n\t},\n} satisfies DataTableStrings;\n\nconst mergeNested = <T extends object>(defaults: T, overrides?: Partial<T>): T => ({\n\t...defaults,\n\t...overrides,\n});\n\nexport const mergeDataTableStrings = (overrides?: DataTableStringsOverride): DataTableStrings => {\n\tif (!overrides) {\n\t\treturn defaultDataTableStrings;\n\t}\n\n\treturn {\n\t\tloading: mergeNested(defaultDataTableStrings.loading, overrides.loading),\n\t\temptyState: mergeNested(defaultDataTableStrings.emptyState, overrides.emptyState),\n\t\tactions: {\n\t\t\t...mergeNested(defaultDataTableStrings.actions, overrides.actions),\n\t\t\t// A localized column header without a trigger name keeps naming the trigger.\n\t\t\t...(overrides.actions?.triggerLabel !== undefined && overrides.actions.menuLabel === undefined\n\t\t\t\t? { menuLabel: overrides.actions.triggerLabel }\n\t\t\t\t: {}),\n\t\t},\n\t\tfilter: mergeNested(defaultDataTableStrings.filter, overrides.filter),\n\t\tcolumnVisibility: mergeNested(defaultDataTableStrings.columnVisibility, overrides.columnVisibility),\n\t\ttoolbar: mergeNested(defaultDataTableStrings.toolbar, overrides.toolbar),\n\t\tpagination: mergeNested(defaultDataTableStrings.pagination, overrides.pagination),\n\t\tselection: mergeNested(defaultDataTableStrings.selection, overrides.selection),\n\t\taccessibility: mergeNested(defaultDataTableStrings.accessibility, overrides.accessibility),\n\t};\n};\n","import { useCallback, type MouseEvent } from 'react';\nimport {\n\tPaginationRoot,\n\tPaginationContent,\n\tPaginationEllipsis,\n\tPaginationItem,\n\tPaginationLink,\n\tPaginationNext,\n\tPaginationPrevious,\n\tdefaultPaginationStrings,\n} from '../../base/navigation/pagination';\nimport { Number as NumberValue, SecondaryValue } from '../../primitives';\nimport { tableRegionInsetClassName } from './table-region.recipes';\nimport { defaultDataTableStrings } from './table.strings';\nimport { type ServerPaginationProps } from './table.types';\n\nimport { cn } from '../../../lib/utils';\n/**\n * Generate a window of page numbers with ellipsis gaps.\n *\n * Always shows first page, last page, and up to 1 sibling\n * on each side of the current page.\n */\nfunction generatePageNumbers(\n\tcurrentPage: number,\n\tlastPage: number,\n): (number | 'ellipsis')[] {\n\tif (lastPage <= 7) {\n\t\treturn Array.from({ length: lastPage }, (_, i) => i + 1);\n\t}\n\n\tconst pages: (number | 'ellipsis')[] = [1];\n\n\tif (currentPage > 3) {\n\t\tpages.push('ellipsis');\n\t}\n\n\tconst start = Math.max(2, currentPage - 1);\n\tconst end = Math.min(lastPage - 1, currentPage + 1);\n\n\tfor (let i = start; i <= end; i++) {\n\t\tpages.push(i);\n\t}\n\n\tif (currentPage < lastPage - 2) {\n\t\tpages.push('ellipsis');\n\t}\n\n\tpages.push(lastPage);\n\n\treturn pages;\n}\n\nfunction buildPageUrl(basePath: string, page: number, queryKey: string): string {\n\t// Build a URL without inheriting the current location's query string —\n\t// the library is framework-agnostic and must not read browser globals\n\t// to decide what to put in href. Consumers that need their own params\n\t// merged should compute and pass the URL via the pagination object.\n\tconst params = new URLSearchParams();\n\tparams.set(queryKey, String(page));\n\t// A path that already carries a query keeps it: the page joins with `&`.\n\treturn `${basePath}${basePath.includes('?') ? '&' : '?'}${params.toString()}`;\n}\n\n/** A click the browser should handle itself: new tab, new window or download. */\nfunction isModifiedClick(event: MouseEvent): boolean {\n\treturn event.button !== 0 || event.metaKey || event.ctrlKey || event.shiftKey || event.altKey;\n}\n\nexport function Pagination({\n\tpagination,\n\tonPageChange,\n\tlabels = {},\n\tpageQueryKey,\n\tclassName,\n}: ServerPaginationProps) {\n\tconst paginationLabels = {\n\t\t...defaultDataTableStrings.pagination,\n\t\t...labels,\n\t};\n\tconst primitiveStrings = {\n\t\tnavigationLabel: paginationLabels.ariaLabel,\n\t\tprevious: paginationLabels.previous,\n\t\tnext: paginationLabels.next,\n\t\tpreviousLabel: paginationLabels.previousLabel ?? defaultPaginationStrings.previousLabel,\n\t\tnextLabel: paginationLabels.nextLabel ?? defaultPaginationStrings.nextLabel,\n\t\tmorePages: paginationLabels.morePages ?? defaultPaginationStrings.morePages,\n\t};\n\tconst queryKey = pageQueryKey ?? 'page';\n\n\t// A page past the end (the last page's rows were just deleted) still\n\t// reports a range inside the total, and an empty result reads 0–0 of 0.\n\tconst firstItem = Math.min(\n\t\t(pagination.current_page - 1) * pagination.per_page + 1,\n\t\tpagination.total,\n\t);\n\tconst lastItem = Math.min(\n\t\tpagination.current_page * pagination.per_page,\n\t\tpagination.total,\n\t);\n\n\tconst navigateToPage = useCallback(\n\t\t(event: MouseEvent, page: number, url: string | null) => {\n\t\t\t// Each link carries its real `href`, so a modified click (new tab,\n\t\t\t// new window) and a no-JS visit reach the page through the browser.\n\t\t\tif (url && isModifiedClick(event)) return;\n\t\t\t// The library never navigates on its own. Consumers wire their\n\t\t\t// router (Inertia, Tanstack Router, RR7, Next, …) through\n\t\t\t// `onPageChange`; without it a plain click stays a no-op.\n\t\t\tevent.preventDefault();\n\t\t\tif (!url) return;\n\t\t\tonPageChange?.(page, url, pagination.path || '');\n\t\t},\n\t\t[onPageChange, pagination.path],\n\t);\n\n\tconst hasPrevious = pagination.prev_page_url !== null;\n\tconst hasNext = pagination.next_page_url !== null;\n\tconst pages = generatePageNumbers(pagination.current_page, pagination.last_page);\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t'pagination--component',\n\t\t\t\t'flex flex-col items-start gap-space-md py-row-y-lg sm:flex-row sm:items-center sm:justify-between sm:gap-0',\n\t\t\t\ttableRegionInsetClassName,\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t<SecondaryValue size=\"xs\" className=\"tabular-nums tracking-tight\">\n\t\t\t\t<NumberValue value={firstItem} size=\"xs\" weight=\"medium\" align=\"left\" />\n\t\t\t\t–\n\t\t\t\t<NumberValue value={lastItem} size=\"xs\" weight=\"medium\" align=\"left\" />{' '}\n\t\t\t\t{paginationLabels.of}{' '}\n\t\t\t\t<NumberValue value={pagination.total} size=\"xs\" weight=\"medium\" align=\"left\" />{' '}\n\t\t\t\t{paginationLabels.entries}\n\t\t\t</SecondaryValue>\n\n\t\t\t<PaginationRoot strings={primitiveStrings} className=\"mx-0 w-full justify-start sm:w-auto sm:justify-center\">\n\t\t\t\t<PaginationContent className=\"gap-0 sm:gap-space-2xs\">\n\t\t\t\t\t<PaginationItem>\n\t\t\t\t\t\t<PaginationPrevious\n\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\ttext={paginationLabels.previous}\n\t\t\t\t\t\t\thref={pagination.prev_page_url ?? '#'}\n\t\t\t\t\t\t\tonClick={(event: MouseEvent) => {\n\t\t\t\t\t\t\t\tnavigateToPage(\n\t\t\t\t\t\t\t\t\tevent,\n\t\t\t\t\t\t\t\t\tpagination.current_page - 1,\n\t\t\t\t\t\t\t\t\tpagination.prev_page_url,\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\taria-disabled={!hasPrevious}\n\t\t\t\t\t\t\tclassName=\"h-action-sm text-pxs\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</PaginationItem>\n\n\t\t\t\t\t{pages.map((page, index) => {\n\t\t\t\t\t\tconst isEllipsis = page === 'ellipsis';\n\t\t\t\t\t\tconst itemKey = isEllipsis\n\t\t\t\t\t\t\t? `ellipsis-${pagination.current_page}-${index}`\n\t\t\t\t\t\t\t: `page-${page}`;\n\t\t\t\t\t\tconst pageUrl = isEllipsis ? null : buildPageUrl(pagination.path, page, queryKey);\n\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t<PaginationItem key={itemKey}>\n\t\t\t\t\t\t\t{isEllipsis ? (\n\t\t\t\t\t\t\t\t<PaginationEllipsis size=\"sm\" />\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<PaginationLink\n\t\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t\t\thref={pageUrl ?? '#'}\n\t\t\t\t\t\t\t\t\tactive={page === pagination.current_page}\n\t\t\t\t\t\t\t\t\tonClick={(event: MouseEvent) => navigateToPage(event, page, pageUrl)}\n\t\t\t\t\t\t\t\t\tclassName=\"size-action-sm text-pxs\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{page}\n\t\t\t\t\t\t\t\t</PaginationLink>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</PaginationItem>\n\t\t\t\t\t\t);\n\t\t\t\t\t})}\n\n\t\t\t\t\t<PaginationItem>\n\t\t\t\t\t\t<PaginationNext\n\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\ttext={paginationLabels.next}\n\t\t\t\t\t\t\thref={pagination.next_page_url ?? '#'}\n\t\t\t\t\t\t\tonClick={(event: MouseEvent) => {\n\t\t\t\t\t\t\t\tnavigateToPage(\n\t\t\t\t\t\t\t\t\tevent,\n\t\t\t\t\t\t\t\t\tpagination.current_page + 1,\n\t\t\t\t\t\t\t\t\tpagination.next_page_url,\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\taria-disabled={!hasNext}\n\t\t\t\t\t\t\tclassName=\"h-action-sm text-pxs\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</PaginationItem>\n\t\t\t\t</PaginationContent>\n\t\t\t</PaginationRoot>\n\t\t</div>\n\t);\n}\n\nPagination.displayName = 'Pagination';\n","import { useEffect, useMemo, useState } from 'react';\nimport {\n\tActionButtons,\n\tActionMenu,\n\ttype ActionMenuAction,\n} from '../../base/action-menu';\nimport { cn } from '../../../lib/utils';\nimport { defaultDataTableStrings } from './table.strings';\nimport { type DataTableActionsProps, type TableAction } from './table.types';\n\nexport function DataTableActions<TData>(props: DataTableActionsProps<TData>) {\n\tconst {\n\t\trow,\n\t\tactions,\n\t\tmenuLabel,\n\t\tdisplayMode = 'menu', // preserve existing behavior\n\t\tresponsiveBreakpoint = 1040,\n\t\tstrings: providedStrings\n\t} = props;\n\n\tconst strings = providedStrings ?? defaultDataTableStrings;\n\t// Copy without `menuLabel` (written before 2.0.1) keeps naming the trigger with `triggerLabel`.\n\tconst resolvedMenuLabel = menuLabel ?? strings.actions.menuLabel ?? strings.actions.triggerLabel;\n\n\t// Resolve actions array\n\tconst resolvedActions = useMemo<TableAction<TData>[]>(() => {\n\t\tconst base = typeof actions === 'function' ? actions(row) : actions;\n\t\treturn Array.isArray(base) ? base : [];\n\t}, [actions, row]);\n\n\t// Filter visibility and compute disabled by predicate/boolean\n\tconst visibleActions = useMemo(() => {\n\t\tconst evalFlag = (flag: boolean | ((r: TData) => boolean) | undefined): boolean | undefined => {\n\t\t\tif (typeof flag === 'function') return flag(row);\n\t\t\treturn flag;\n\t\t};\n\t\treturn resolvedActions.flatMap((action) => {\n\t\t\tconst visible = evalFlag(action.visible) ?? true;\n\t\t\tif (!visible) return [];\n\t\t\treturn [{\n\t\t\t\t...action,\n\t\t\t\tvisible,\n\t\t\t\tdisabled: evalFlag(action.disabled) ?? false,\n\t\t\t}];\n\t\t});\n\t}, [resolvedActions, row]);\n\n\t// No actions to render\n\tconst hasVisibleActions = visibleActions.length > 0;\n\n\t// Responsive auto mode: inline over breakpoint, menu under\n\tconst [isNarrow, setIsNarrow] = useState(false);\n\n\t// Keep destructive actions at the end in both inline and menu modes.\n\tconst nonDestructive = visibleActions.filter((action) => action.tone !== 'destructive');\n\tconst destructive = visibleActions.filter((action) => action.tone === 'destructive');\n\n\t// 2. Combine them (non-destructive first, destructive last)\n\tconst sortedActions = [...nonDestructive, ...destructive];\n\n\tuseEffect(() => {\n\t\tif (displayMode !== 'auto' || !hasVisibleActions) {\n\t\t\tsetIsNarrow(false);\n\t\t\treturn;\n\t\t}\n\n\t\tconst handleResize = () => {\n\t\t\ttry {\n\t\t\t\tsetIsNarrow(window.innerWidth <= responsiveBreakpoint);\n\t\t\t} catch {\n\t\t\t\tsetIsNarrow(false);\n\t\t\t}\n\t\t};\n\n\t\thandleResize();\n\t\twindow.addEventListener('resize', handleResize);\n\t\treturn () => window.removeEventListener('resize', handleResize);\n\t}, [displayMode, hasVisibleActions, responsiveBreakpoint]);\n\n\tif (!hasVisibleActions) return null;\n\n\tconst mode: 'menu' | 'inline' = displayMode === 'auto' ? (isNarrow ? 'menu' : 'inline') : displayMode;\n\n\tconst actionDefinitions = sortedActions.map<ActionMenuAction>((action, idx) => ({\n\t\tid: action.id || `${action.label}-${idx}`,\n\t\tlabel: action.label,\n\t\ticon: action.icon,\n\t\tdisabled: !!action.disabled,\n\t\ttone: action.tone,\n\t\tbuttonStyle: action.buttonStyle,\n\t\tonClick: () => action.onClick?.(row),\n\t}));\n\n\t if (mode === 'inline') {\n\t return (\n\t <ActionButtons\n\t\t\t\t\tactions={actionDefinitions}\n\t\t\t\t\tclassName={cn('table-actions--component')}\n\t\t\t\t/>\n\t\t);\n\t}\n\n\n\t// Menu mode (default): the shared ghost overflow square at the provider scale.\n\treturn (\n\t\t<ActionMenu\n\t\t\tactions={actionDefinitions}\n\t\t\tsrText={resolvedMenuLabel || strings.actions.srLabel}\n\t\t\tcloseOnSelect={true}\n\t\t\talign=\"end\"\n\t\t/>\n\t);\n}\n\nDataTableActions.displayName = 'DataTableActions';\n","import type {\n\tSortingState,\n\tRowSelectionState,\n\tVisibilityState,\n\tTable,\n\tRow,\n\tUpdater,\n\tColumnDef,\n} from '@tanstack/react-table';\nimport React from 'react';\nimport { Checkbox } from '../../base/choice-inputs';\nimport { defaultDataTableStrings } from './table.strings';\nimport type { DataTableStrings } from './table.types';\n\nexport interface GeneratedColumnOptions<TData> {\n\tstrings: DataTableStrings;\n\trenderActions?: (row: TData) => React.ReactNode;\n}\n\nexport function getGeneratedColumnOptions<TData>(table: Table<TData>) {\n\treturn (table.options.meta as { themeliaDataTable?: GeneratedColumnOptions<TData> } | undefined)?.themeliaDataTable;\n}\n\n/**\n * Applies a TanStack updater to consumer-owned state and reports the result.\n *\n * With `currentState` the next value is resolved before any state call, so\n * nothing runs inside a React updater. Without it the value only exists inside\n * the updater; the handler is then reported once, even when StrictMode replays\n * the updater.\n */\nfunction applyTableStateChange<TState>(\n\tupdate: Updater<TState>,\n\tsetInternalState: React.Dispatch<React.SetStateAction<TState>>,\n\texternalHandler: ((state: TState) => void) | undefined,\n\tcurrentState: TState | undefined,\n) {\n\tif (typeof update !== 'function') {\n\t\tsetInternalState(update);\n\t\texternalHandler?.(update);\n\t\treturn;\n\t}\n\n\tconst resolve = update as (previous: TState) => TState;\n\tif (currentState !== undefined) {\n\t\tconst nextState = resolve(currentState);\n\t\tsetInternalState(nextState);\n\t\texternalHandler?.(nextState);\n\t\treturn;\n\t}\n\n\tlet reported = false;\n\tsetInternalState((previousState) => {\n\t\tconst nextState = resolve(previousState);\n\t\tif (!reported) {\n\t\t\treported = true;\n\t\t\texternalHandler?.(nextState);\n\t\t}\n\t\treturn nextState;\n\t});\n}\n\n/**\n * Helper function for handling row selection changes with OnChangeFn compatibility.\n * Pass the current selection as `currentState` to resolve updater functions\n * outside React's state updater.\n */\nexport const handleRowSelectionChange = (\n\tupdatedSelection: Updater<RowSelectionState>,\n\tsetInternalState: React.Dispatch<React.SetStateAction<RowSelectionState>>,\n\texternalHandler?: (state: RowSelectionState) => void,\n\tcurrentState?: RowSelectionState,\n) => applyTableStateChange(updatedSelection, setInternalState, externalHandler, currentState);\n\n/**\n * Helper function for handling sorting changes with OnChangeFn compatibility.\n * Pass the current sorting as `currentState` to resolve updater functions\n * outside React's state updater.\n */\nexport const handleSortingChange = (\n\tupdatedSorting: Updater<SortingState>,\n\tsetInternalState: React.Dispatch<React.SetStateAction<SortingState>>,\n\texternalHandler?: (state: SortingState) => void,\n\tcurrentState?: SortingState,\n) => applyTableStateChange(updatedSorting, setInternalState, externalHandler, currentState);\n\n/**\n * Helper function for handling column visibility changes. Pass the current\n * visibility as `currentState` to resolve updater functions outside React's\n * state updater.\n */\nexport const handleColumnVisibilityChange = (\n\tupdatedVisibility: Updater<VisibilityState>,\n\tsetInternalState: React.Dispatch<React.SetStateAction<VisibilityState>>,\n\texternalHandler?: (state: VisibilityState) => void,\n\tcurrentState?: VisibilityState,\n) => applyTableStateChange(updatedVisibility, setInternalState, externalHandler, currentState);\n\n/**\n * Get row class name based on selection state and custom function\n */\nexport const getRowClassName = <TData,>(\n\trow: Row<TData>,\n\tindex: number,\n\trowClassName?: string | ((row: Row<TData>, index: number) => string),\n\tisSelected?: boolean,\n): string => {\n\tlet className = '';\n\n\t// A selected row holds the shared table selection fill (bg-muted).\n\tif (isSelected) {\n\t\tclassName += 'bg-muted ';\n\t}\n\n\t// Add custom class name\n\tif (typeof rowClassName === 'function') {\n\t\tclassName += rowClassName(row, index) + ' ';\n\t} else if (rowClassName) {\n\t\tclassName += rowClassName + ' ';\n\t}\n\n\treturn className.trim();\n};\n\n/** Which pinned role a column plays when `stickyFirstColumn` is on. */\nexport type PinnedColumnRole = 'selection' | 'first';\n\nconst SELECTION_COLUMN_ID = 'selection';\nconst pinnedCellBase = 'sticky z-10 bg-card';\nconst pinnedCellEdge = 'shadow-[1px_0_0_0_var(--border)] rtl:shadow-[-1px_0_0_0_var(--border)]';\n\n/**\n * The pinned role of the column at `index`, given the visible leaf column ids\n * in order. The checkbox column and the first data column pin as a pair, so a\n * selectable table keeps its identifying column in view.\n */\nexport function getPinnedColumnRole(\n\tcolumnIds: readonly string[],\n\tindex: number,\n\tstickyFirstColumn?: boolean,\n): PinnedColumnRole | undefined {\n\tif (!stickyFirstColumn) return undefined;\n\tconst hasSelection = columnIds[0] === SELECTION_COLUMN_ID;\n\tif (index === 0) return hasSelection ? 'selection' : 'first';\n\tif (index === 1 && hasSelection) return 'first';\n\treturn undefined;\n}\n\n/**\n * Classes for a pinned cell. The data column sits after the checkbox column\n * by `--data-table-selection-width`, which DataTable sets on the table area;\n * only the last pinned column draws the trailing edge.\n */\nexport function getPinnedCellClassName(role: PinnedColumnRole | undefined, afterSelection: boolean): string {\n\tif (!role) return '';\n\tif (role === 'selection') return `${pinnedCellBase} start-0`;\n\treturn `${pinnedCellBase} ${pinnedCellEdge} ${afterSelection ? 'start-(--data-table-selection-width)' : 'start-0'}`;\n}\n\n/**\n * Get cell class name including sticky column handling\n */\nexport const getCellClassName = <TData,>(\n\tcolumnId: string,\n\trow: Row<TData> | null,\n\tcellClassName?: string | ((column: string, row: Row<TData> | null) => string),\n\tstickyFirstColumn?: boolean,\n\tisFirstColumn?: boolean,\n): string => {\n\tlet baseClassName = '';\n\n\t// Add base class name\n\tif (typeof cellClassName === 'string') {\n\t\tbaseClassName = cellClassName;\n\t} else if (cellClassName) {\n\t\tbaseClassName = cellClassName(columnId, row);\n\t}\n\n\t// Add sticky class if it's the first column and sticky first column is enabled\n\tif (stickyFirstColumn && isFirstColumn) {\n\t\treturn `${baseClassName} sticky start-0 z-10 bg-card shadow-[1px_0_0_0_var(--border)] rtl:shadow-[-1px_0_0_0_var(--border)]`;\n\t}\n\n\treturn baseClassName;\n};\n\n/**\n * Get selected rows data from the table\n */\nexport const getSelectedRowsData = <T extends object>(table: Table<T>): T[] => {\n\treturn table.getSelectedRowModel().rows.map((row) => row.original);\n};\n\n// One position lookup per row model: TanStack memoizes the rows array, so the\n// map is rebuilt only when sorting, filtering or data change.\nconst visibleRowPositions = new WeakMap<object, Map<string, number>>();\n\nfunction getVisibleRowPosition<TData>(table: Table<TData> | undefined, row: Row<TData>): number {\n\tif (!table) return row.index;\n\tconst visibleRows = table.getRowModel().rows;\n\tlet positions = visibleRowPositions.get(visibleRows);\n\tif (!positions) {\n\t\tpositions = new Map(visibleRows.map((visibleRow, position) => [visibleRow.id, position]));\n\t\tvisibleRowPositions.set(visibleRows, positions);\n\t}\n\treturn positions.get(row.id) ?? row.index;\n}\n\n/**\n * Create row selection component for a row. With `table`, the checkbox is\n * named by the row's position on screen rather than its index in `data`.\n */\nexport const createRowSelectionCheckbox = <TData,>(\n\trow: Row<TData>,\n\tstrings: DataTableStrings = defaultDataTableStrings,\n\ttable?: Table<TData>,\n) => (\n\t\t// A flex box centres the checkbox on the row's text line; as an inline box it\n\t\t// sat on the baseline, a few pixels above the cell text.\n\t\t// The cell owns the outer edge, so the checkbox starts where the regions\n\t\t// around the table start; the wrapper adds only the gap to the next column.\n\t\t<div className=\"flex items-center pe-space-sm\">\n\t\t\t<Checkbox\n\t\t\t\tclassName=\"size-icon cursor-pointer disabled:cursor-not-allowed disabled:opacity-50\"\n\t\t\tchecked={row.getIsSelected()}\n\t\t\tdisabled={!row.getCanSelect()}\n\t\t\tonCheckedChange={(checked) => row.toggleSelected(checked === true)}\n\t\t\tonClick={(e) => e.stopPropagation()}\n\t\t\taria-label={strings.selection.row(getVisibleRowPosition(table, row), row.original)}\n\t\t/>\n\t</div>\n);\n\n/**\n * Create header selection checkbox. A table that allows one selected row has\n * nothing to select all of, so its header only names the column.\n */\nexport const createHeaderSelectionCheckbox = <TData,>(\n\ttable: Table<TData>,\n\tstrings: DataTableStrings = defaultDataTableStrings,\n) => table.options.enableMultiRowSelection === false ? (\n\t\t<span className=\"sr-only\">\n\t\t\t{strings.selection.columnLabel ?? defaultDataTableStrings.selection.columnLabel}\n\t\t</span>\n\t) : (\n\t\t// A flex box centres the checkbox on the row's text line; as an inline box it\n\t\t// sat on the baseline, a few pixels above the cell text.\n\t\t<div className=\"flex items-center pe-space-sm\">\n\t\t\t<Checkbox\n\t\t\t\tclassName=\"size-icon cursor-pointer\"\n\t\t\tchecked={table.getIsAllPageRowsSelected()}\n\t\t\tindeterminate={table.getIsSomePageRowsSelected() && !table.getIsAllPageRowsSelected()}\n\t\t\tonCheckedChange={(checked) => table.toggleAllPageRowsSelected(checked === true)}\n\t\t\taria-label={strings.selection.selectAll}\n\t\t/>\n\t</div>\n);\n\nfunction SelectionHeader<TData>({ table }: { table: Table<TData> }) {\n\treturn createHeaderSelectionCheckbox(table, getGeneratedColumnOptions(table)?.strings);\n}\n\nfunction SelectionCell<TData>({ table, row }: { table: Table<TData>; row: Row<TData> }) {\n\treturn createRowSelectionCheckbox(row, getGeneratedColumnOptions(table)?.strings, table);\n}\n\n/** Prepends the checkbox selection column. Explicit strings override table defaults. */\nexport const addSelectionColumn = <TData, TValue = unknown>(\n\tcolumns: ColumnDef<TData, TValue>[],\n\tstrings?: DataTableStrings,\n) => {\n\tconst selectionColumn = {\n\t\tid: 'selection',\n\t\theader: strings ? ({ table }: { table: Table<TData> }) => createHeaderSelectionCheckbox(table, strings) : SelectionHeader<TData>,\n\t\tcell: strings ? ({ table, row }: { table: Table<TData>; row: Row<TData> }) => createRowSelectionCheckbox(row, strings, table) : SelectionCell<TData>,\n\t\tenableSorting: false,\n\t\tenableResizing: false,\n\t\t// A utility column, not data: column visibility never lists it.\n\t\tenableHiding: false,\n\t\tsize: 40,\n\t} as ColumnDef<TData, TValue>;\n\n\treturn [selectionColumn, ...columns];\n};\n","/**\n * DataTableBody — body rows, selection highlighting, hover, empty state,\n * and (optional) loading skeleton. Stronger hover + selection contrast than\n * the original implementation so rows feel interactive at a glance.\n */\nimport { flexRender } from '@tanstack/react-table';\nimport { PackageOpen } from 'lucide-react';\nimport { TableBody, TableCell, TableRow } from '../../base/table';\nimport { Skeleton } from '../../base/skeleton';\nimport { EmptyState } from '../../blocks/data-display';\nimport { cn } from '../../../lib/utils';\nimport {\n\tgetCellClassName,\n\tgetPinnedCellClassName,\n\tgetPinnedColumnRole,\n\tgetRowClassName,\n} from './table-helpers';\nimport { defaultDataTableStrings } from './table.strings';\nimport { type DataTableBodyProps } from './table.types';\nimport { interactionRecipes } from '../../../lib/interaction-recipes';\nimport { focusRecipes } from '../../../lib/focus-recipes';\n\nconst rowControlSelector = [\n\t'button, a[href], input, select, textarea, summary, label, [tabindex]',\n\t'[role=\"button\"], [role=\"link\"], [role=\"checkbox\"], [role=\"switch\"], [role=\"radio\"]',\n\t'[role=\"menuitem\"], [role=\"menuitemcheckbox\"], [role=\"menuitemradio\"], [role=\"tab\"]',\n\t'[role=\"combobox\"], [role=\"textbox\"], [role=\"slider\"], [role=\"spinbutton\"]',\n\t'[contenteditable]:not([contenteditable=\"false\"])',\n].join(',');\n\nexport function DataTableBody<TData>({\n\tloading = false,\n\tloadingRows = 6,\n\ttable,\n\tonRowClick,\n\temptyStateAction,\n\tcellClassName = '',\n\trowClassName = '',\n\tstickyFirstColumn = false,\n\tstriped = false,\n\tstrings,\n}: DataTableBodyProps<TData>) {\n\tconst tableRows = table.getRowModel().rows;\n\tconst resolvedEmptyStateMessage =\n\t\tstrings?.emptyState.message ?? defaultDataTableStrings.emptyState.message;\n\n\tif (loading) {\n\t\tconst rowCount = Number.isFinite(loadingRows) ? Math.max(1, Math.min(20, Math.floor(loadingRows))) : 6;\n\t\tconst columns = table.getVisibleLeafColumns();\n\t\tconst columnIds = columns.map((column) => column.id);\n\t\treturn (\n\t\t\t<TableBody className=\"table-body--component\" data-loading=\"true\">\n\t\t\t\t{Array.from({ length: rowCount }, (_, index) => (\n\t\t\t\t\t<TableRow key={index} aria-hidden=\"true\" className=\"hover:bg-transparent\">\n\t\t\t\t\t\t{columns.map((column, columnIndex) => {\n\t\t\t\t\t\t\tconst pinned = getPinnedColumnRole(columnIds, columnIndex, stickyFirstColumn);\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<TableCell\n\t\t\t\t\t\t\t\t\tkey={column.id}\n\t\t\t\t\t\t\t\t\tdata-pinned={pinned}\n\t\t\t\t\t\t\t\t\tclassName={cn(getCellClassName(column.id, null, cellClassName), getPinnedCellClassName(pinned, columnIndex > 0))}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<Skeleton className=\"h-4 w-full\" />\n\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t})}\n\t\t\t\t\t</TableRow>\n\t\t\t\t))}\n\t\t\t</TableBody>\n\t\t);\n\t}\n\n\tif (!tableRows.length) {\n\t\t// Column headers may keep the table wider than its viewport. Feedback uses\n\t\t// DataTable's existing query container, with EmptyState owning the inset.\n\t\treturn (\n\t\t\t<TableBody className=\"table-body--component\">\n\t\t\t\t<TableRow className=\"hover:bg-transparent\">\n\t\t\t\t\t<TableCell\n\t\t\t\t\t\tclassName=\"p-0 text-center whitespace-normal\"\n\t\t\t\t\t\tcolSpan={Math.max(1, table.getVisibleLeafColumns().length)}\n\t\t\t\t\t>\n\t\t\t\t\t\t<EmptyState\n\t\t\t\t\t\t\tstrings={{ ariaLabel: strings?.emptyState.ariaLabel ?? defaultDataTableStrings.emptyState.ariaLabel }}\n\t\t\t\t\t\t\ttitle={resolvedEmptyStateMessage}\n\t\t\t\t\t\t\tdescription={false}\n\t\t\t\t\t\t\tmedia={<PackageOpen className=\"size-icon\" />}\n\t\t\t\t\t\t\tmediaVariant=\"icon-soft\"\n\t\t\t\t\t\t\tactions={emptyStateAction}\n\t\t\t\t\t\t\tclassName=\"data-table--empty-state w-[100cqw] max-w-full\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</TableCell>\n\t\t\t\t</TableRow>\n\t\t\t</TableBody>\n\t\t);\n\t}\n\n\treturn (\n\t\t<TableBody>\n\t\t\t{tableRows.map((row, rowIndex) => {\n\t\t\t\tconst isRowSelected = row.getIsSelected();\n\t\t\t\tconst rowCells = row.getVisibleCells();\n\t\t\t\tconst rowColumnIds = rowCells.map((cell) => cell.column.id);\n\t\t\t\tconst computedRowClassName = getRowClassName(\n\t\t\t\t\trow,\n\t\t\t\t\trowIndex,\n\t\t\t\t\trowClassName,\n\t\t\t\t\tisRowSelected,\n\t\t\t\t);\n\t\t\t\tconst zebraClass = striped && rowIndex % 2 !== 0 ? interactionRecipes.tableStripe : '';\n\t\t\t\tconst cursorClass = onRowClick ? 'cursor-pointer' : '';\n\t\t\t\tconst rowClasses = cn(\n\t\t\t\t\tcomputedRowClassName,\n\t\t\t\t\tzebraClass,\n\t\t\t\t\t'transition-colors duration-150',\n\t\t\t\t\t`${interactionRecipes.tableRowHover} ${interactionRecipes.tableRowSelected}`,\n\t\t\t\t\tcursorClass,\n\t\t\t\t\tonRowClick && `focus-visible:outline-none ${focusRecipes.inset}`,\n\t\t\t\t\t'border-b border-border/60 last:border-b-0',\n\t\t\t\t);\n\t\t\t\tconst rowState = isRowSelected ? 'selected' : null;\n\n\t\t\t\treturn (\n\t\t\t\t\t<TableRow\n\t\t\t\t\t\tkey={row.id}\n\t\t\t\t\t\tdata-state={rowState}\n\t\t\t\t\t\tclassName={rowClasses}\n\t\t\t\t\t\ttabIndex={onRowClick ? 0 : undefined}\n\t\t\t\t\t\tonClick={onRowClick ? event => {\n\t\t\t\t\t\t\tif (event.defaultPrevented) return;\n\t\t\t\t\t\t\tconst target = event.target;\n\t\t\t\t\t\t\tconst control = target instanceof Element ? target.closest(rowControlSelector) : null;\n\t\t\t\t\t\t\tif (control && control !== event.currentTarget) return;\n\t\t\t\t\t\t\t// Portaled cell actions bubble through React but are not row targets.\n\t\t\t\t\t\t\tif (target instanceof Node && event.currentTarget.contains(target)) onRowClick(row.original);\n\t\t\t\t\t\t} : undefined}\n\t\t\t\t\t\tonKeyDown={onRowClick ? event => {\n\t\t\t\t\t\t\tif (event.defaultPrevented || event.target !== event.currentTarget || (event.key !== 'Enter' && event.key !== ' ')) return;\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tif (!event.repeat) onRowClick(row.original);\n\t\t\t\t\t\t} : undefined}\n\t\t\t\t\t>\n\t\t\t\t\t\t{rowCells.map((cell, cellIndex) => {\n\t\t\t\t\t\t\tconst pinned = getPinnedColumnRole(rowColumnIds, cellIndex, stickyFirstColumn);\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<TableCell\n\t\t\t\t\t\t\t\tkey={cell.id}\n\t\t\t\t\t\t\t\tdata-pinned={pinned}\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\tgetCellClassName(cell.column.id, row, cellClassName),\n\t\t\t\t\t\t\t\t\tgetPinnedCellClassName(pinned, cellIndex > 0),\n\t\t\t\t\t\t\t\t\t// End-aligned columns are figures (money, counts): tabular\n\t\t\t\t\t\t\t\t\t// digits keep them lined up down the column.\n\t\t\t\t\t\t\t\t\tcell.column.columnDef.meta?.align === 'end' && 'text-right tabular-nums',\n\t\t\t\t\t\t\t\t\tcell.column.columnDef.meta?.align === 'center' && 'text-center',\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{flexRender(\n\t\t\t\t\t\t\t\t\tcell.column.columnDef.cell,\n\t\t\t\t\t\t\t\t\tcell.getContext(),\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t})}\n\t\t\t\t\t</TableRow>\n\t\t\t\t);\n\t\t\t})}\n\t\t</TableBody>\n\t);\n}\n\nDataTableBody.displayName = 'DataTableBody';\n","/**\n * DataTableHeader — column-group row, primary header row, sort indicators,\n * and (optionally) resize handles. Sortable columns render as a button with\n * an inline up / down / both arrow icon driven by TanStack `column.getIsSorted()`.\n */\nimport { flexRender } from '@tanstack/react-table';\nimport { ArrowDown, ArrowUp, ChevronsUpDown } from 'lucide-react';\nimport React from 'react';\nimport { Button } from '../../base/buttons';\nimport { TableHead, TableHeader, TableRow } from '../../base/table';\nimport { DisplayLabel } from '../../typography';\nimport { cn } from '../../../lib/utils';\nimport { getCellClassName, getPinnedCellClassName, getPinnedColumnRole } from './table-helpers';\nimport { type DataTableHeaderProps } from './table.types';\nimport { focusRecipes } from '../../../lib/focus-recipes';\nimport { interactionRecipes } from '../../../lib/interaction-recipes';\nimport { defaultDataTableStrings } from './table.strings';\n\nexport function DataTableHeader<TData>(\n\t{\n\t\ttable,\n\t\tenableResizing = false,\n\t\tstickyHeader = false,\n\t\tclassName,\n\t\tcellClassName = '',\n\t\tstickyFirstColumn = false,\n\t\tcolumnGroups,\n\t\theaderTransparent = false,\n\t\tstrings,\n\t}: DataTableHeaderProps<TData>) {\n\n\tconst headerGroups = table.getHeaderGroups();\n\tconst sortDescriptionId = React.useId();\n\tconst sorting = table.getState().sorting;\n\tconst stickyCellClassName = stickyHeader\n\t\t? cn(\n\t\t\t// Opaque so scrolled rows never show through the sticky header.\n\t\t\t'shadow-[0_1px_0_0_var(--border)]',\n\t\t\theaderTransparent ? 'bg-background' : 'bg-muted',\n\t\t)\n\t\t: '';\n\n\tconst getColumnGroup = (columnId: string) => {\n\t\tif (!columnGroups) return null;\n\t\treturn columnGroups.find(group => group.columns.includes(columnId));\n\t};\n\n\tconst renderGroupHeaderRow = () => {\n\t\tif (!columnGroups || columnGroups.length === 0 || headerGroups.length === 0) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst headers = headerGroups[0].headers;\n\t\tlet currentGroup: string | null = null;\n\t\tlet groupSpan = 0;\n\t\tconst groupCells: React.ReactNode[] = [];\n\n\t\theaders.forEach((header, index) => {\n\t\t\tconst group = getColumnGroup(header.id);\n\t\t\tconst groupName = group?.header || '';\n\n\t\t\tif (groupName !== currentGroup) {\n\t\t\t\tif (currentGroup !== null && groupSpan > 0) {\n\t\t\t\t\tgroupCells.push(\n\t\t\t\t\t\t<TableHead\n\t\t\t\t\t\t\tkey={`group-${currentGroup}-${groupCells.length}`}\n\t\t\t\t\t\t\tcolSpan={groupSpan}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t'border-r border-border/60 bg-muted/50 text-center text-muted-foreground last:border-r-0',\n\t\t\t\t\t\t\t\tstickyCellClassName,\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<DisplayLabel>{currentGroup || ''}</DisplayLabel>\n\t\t\t\t\t\t</TableHead>\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tcurrentGroup = groupName;\n\t\t\t\tgroupSpan = 1;\n\t\t\t} else {\n\t\t\t\tgroupSpan++;\n\t\t\t}\n\n\t\t\tif (index === headers.length - 1 && groupSpan > 0) {\n\t\t\t\tgroupCells.push(\n\t\t\t\t\t<TableHead\n\t\t\t\t\t\tkey={`group-${currentGroup}-${groupCells.length}`}\n\t\t\t\t\t\t\tcolSpan={groupSpan}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t'whitespace-nowrap border-r border-border/60 bg-muted/50 text-center text-muted-foreground last:border-r-0',\n\t\t\t\t\t\t\t\tstickyCellClassName,\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<DisplayLabel>{currentGroup || ''}</DisplayLabel>\n\t\t\t\t\t\t</TableHead>\n\t\t\t\t\t);\n\t\t\t}\n\t\t});\n\n\t\treturn (\n\t\t\t<TableRow className={cn('table-header--component', 'border-b border-border')}>\n\t\t\t\t{groupCells}\n\t\t\t</TableRow>\n\t\t);\n\t};\n\n\treturn (\n\t\t<TableHeader\n\t\t\tclassName={cn(stickyHeader && 'sticky top-0 z-20', className)}\n\t\t>\n\t\t\t{renderGroupHeaderRow()}\n\t\t\t{headerGroups.map((headerGroup) => (\n\t\t\t\t<TableRow\n\t\t\t\t\tkey={headerGroup.id}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t'border-b border-border/60',\n\t\t\t\t\t\theaderTransparent\n\t\t\t\t\t\t\t? 'bg-transparent hover:bg-transparent'\n\t\t\t\t\t\t\t: `${interactionRecipes.tableHead} ${interactionRecipes.tableRowHover}`,\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{headerGroup.headers.map((header, index, headers) => {\n\t\t\t\t\t\tconst pinned = getPinnedColumnRole(headers.map((entry) => entry.column.id), index, stickyFirstColumn);\n\t\t\t\t\t\tconst cellClasses = cn(\n\t\t\t\t\t\t\tgetCellClassName(header.id, null, cellClassName),\n\t\t\t\t\t\t\tgetPinnedCellClassName(pinned, index > 0),\n\t\t\t\t\t\t\t'text-muted-foreground font-medium whitespace-nowrap',\n\t\t\t\t\t\t\theader.column.columnDef.meta?.align === 'end' && 'text-right',\n\t\t\t\t\t\t\theader.column.columnDef.meta?.align === 'center' && 'text-center',\n\t\t\t\t\t\t\tstickyCellClassName,\n\t\t\t\t\t\t\tstickyHeader && pinned && 'z-30',\n\t\t\t\t\t\t\t!stickyHeader && 'bg-transparent',\n\t\t\t\t\t\t\tenableResizing && !pinned && 'relative',\n\t\t\t\t\t\t);\n\t\t\t\t\t\t// An explicit column `size` is a width hint even without resizing;\n\t\t\t\t\t\t// TanStack's implicit 150px default is not.\n\t\t\t\t\t\tconst headerStyle = enableResizing || header.column.columnDef.size !== undefined\n\t\t\t\t\t\t\t? { width: header.getSize() }\n\t\t\t\t\t\t\t: undefined;\n\t\t\t\t\t\tconst headerSortDescriptionId = `${sortDescriptionId}-${encodeURIComponent(header.id)}`;\n\t\t\t\t\t\tconst resizeHandler = header.getResizeHandler();\n\t\t\t\t\t\t// Group widths are the sum of visible leaves, not the group's own\n\t\t\t\t\t\t// unused column sizing entry. Keep announcement and keyboard edits\n\t\t\t\t\t\t// on the same geometry that TanStack's pointer handler changes.\n\t\t\t\t\t\tconst resizeLeaves = header.getLeafHeaders().filter(leaf => leaf.subHeaders.length === 0);\n\t\t\t\t\t\tconst minSize = resizeLeaves.reduce((sum, leaf) => sum + (leaf.column.columnDef.minSize ?? 20), 0);\n\t\t\t\t\t\tconst maxSize = Math.min(Number.MAX_SAFE_INTEGER, resizeLeaves.reduce((sum, leaf) => sum + (leaf.column.columnDef.maxSize ?? Number.MAX_SAFE_INTEGER), 0));\n\t\t\t\t\t\tconst startResize = (event: React.MouseEvent<HTMLDivElement> | React.TouchEvent<HTMLDivElement>) => {\n\t\t\t\t\t\t\t// Resolve the actual boundary at gesture time, including inherited\n\t\t\t\t\t\t\t// and dynamically changed direction. No app-owned dir prop required.\n\t\t\t\t\t\t\ttable.setOptions(previous => ({...previous, columnResizeDirection: getComputedStyle(event.currentTarget).direction === 'rtl' ? 'rtl' : 'ltr'}));\n\t\t\t\t\t\t\tresizeHandler(event);\n\t\t\t\t\t\t};\n\t\t\t\t\t\tconst isResizing = header.column.getIsResizing();\n\t\t\t\t\t\tconst columnLabel = (() => {\n\t\t\t\t\t\t\tconst rawHeader = header.column.columnDef.header;\n\t\t\t\t\t\t\tif (typeof rawHeader === 'string') {\n\t\t\t\t\t\t\t\treturn rawHeader;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tconst metaLabel = header.column.columnDef.meta?.label;\n\t\t\t\t\t\t\tif (metaLabel) return metaLabel;\n\t\t\t\t\t\t\treturn typeof header.id === 'string' ? header.id : 'column';\n\t\t\t\t\t\t})();\n\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<TableHead\n\t\t\t\t\t\t\t\tkey={header.id}\n\t\t\t\t\t\t\t\tcolSpan={header.colSpan}\n\t\t\t\t\t\t\t\tdata-pinned={pinned}\n\t\t\t\t\t\t\t\tclassName={cellClasses}\n\t\t\t\t\t\t\t\tstyle={headerStyle}\n\t\t\t\t\t\t\t\taria-sort={!header.isPlaceholder && header.subHeaders.length === 0 && header.column.getIsSorted() && header.column.getSortIndex() === 0\n\t\t\t\t\t\t\t\t\t? header.column.getIsSorted() === 'asc' ? 'ascending' : 'descending'\n\t\t\t\t\t\t\t\t\t: undefined}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{header.isPlaceholder ? null : (\n\t\t\t\t\t\t\t\t\t<div className={cn(enableResizing && header.column.getCanResize() && 'pe-action-sm')}>\n\t\t\t\t\t\t\t\t\t\t{(() => {\n\t\t\t\t\t\t\t\t\t\t\tconst canSort = header.column.getCanSort();\n\t\t\t\t\t\t\t\t\t\t\tconst sortDir = header.column.getIsSorted();\n\t\t\t\t\t\t\t\t\t\t\tconst headerNode = flexRender(\n\t\t\t\t\t\t\t\t\t\t\t\theader.column.columnDef.header,\n\t\t\t\t\t\t\t\t\t\t\t\theader.getContext(),\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\tconst SortIcon =\n\t\t\t\t\t\t\t\t\t\t\t\tsortDir === 'asc'\n\t\t\t\t\t\t\t\t\t\t\t\t\t? ArrowUp\n\t\t\t\t\t\t\t\t\t\t\t\t\t: sortDir === 'desc'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? ArrowDown\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: ChevronsUpDown;\n\t\t\t\t\t\t\t\t\t\t\tif (!canSort) {\n\t\t\t\t\t\t\t\t\t\t\t\treturn <div className={cn('flex items-center', header.column.columnDef.meta?.align === 'end' && 'justify-end', header.column.columnDef.meta?.align === 'center' && 'justify-center')}>{headerNode}</div>;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={header.column.getToggleSortingHandler()}\n\t\t\t\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t'group -ml-space-sm inline-flex select-none items-center gap-space-sm rounded-radius px-space-sm',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t// Sortable labels keep the header row's one muted colour; the\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t// sorted column is marked by its full-strength glyph instead.\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t'text-muted-foreground hover:text-foreground transition-colors',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t`focus-visible:outline-none ${focusRecipes.edge}`,\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\taria-label={(strings?.accessibility.sortColumn ?? defaultDataTableStrings.accessibility.sortColumn)(columnLabel)}\n\t\t\t\t\t\t\t\t\t\t\t\t\taria-describedby={sortDir && sorting.length > 1 ? headerSortDescriptionId : undefined}\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{headerNode}\n\t\t\t\t\t\t\t\t\t\t\t\t\t{sortDir && sorting.length > 1 && <span id={headerSortDescriptionId} className=\"sr-only\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{(strings?.accessibility.sortPriority ?? defaultDataTableStrings.accessibility.sortPriority)(sortDir, header.column.getSortIndex() + 1, sorting.length)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t</span>}\n\t\t\t\t\t\t\t\t\t\t\t\t\t<SortIcon\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'size-icon-sm shrink-0 transition-opacity',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsortDir\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'text-foreground opacity-100'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: 'opacity-30 group-hover:opacity-70',\n\t\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\t\taria-hidden=\"true\"\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</Button>\n\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\t{!!enableResizing && header.column.getCanResize() && (\n\t\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\t\trole=\"separator\" tabIndex={0}\n\t\t\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t\t\t'absolute inset-y-0 end-0 w-action-sm cursor-col-resize select-none touch-none bg-transparent after:absolute after:inset-y-0 after:end-0 after:w-px after:bg-muted-foreground opacity-0 hover:opacity-100 focus-visible:opacity-100 focus-visible:outline-none focus-visible:after:w-1 focus-visible:after:bg-ring',\n\t\t\t\t\t\t\t\t\t\t\t\t\tisResizing &&\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t'after:bg-primary-accent!',\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\taria-label={(strings?.accessibility.resizeColumn ?? defaultDataTableStrings.accessibility.resizeColumn)(columnLabel)}\n\t\t\t\t\t\t\t\t\t\t\t\taria-orientation=\"vertical\"\n\t\t\t\t\t\t\t\t\t\t\t\taria-valuenow={header.getSize()}\n\t\t\t\t\t\t\t\t\t\t\t\taria-valuemin={minSize}\n\t\t\t\t\t\t\t\t\t\t\t\taria-valuemax={maxSize}\n\t\t\t\t\t\t\t\t\t\t\t\tonKeyDown={(event) => {\n\t\t\t\t\t\t\t\t\t\t\t\t const rtl = getComputedStyle(event.currentTarget).direction === 'rtl';\n\t\t\t\t\t\t\t\t\t\t\t\t const delta = (event.key === 'ArrowRight' ? 10 : event.key === 'ArrowLeft' ? -10 : 0) * (rtl ? -1 : 1);\n\t\t\t\t\t\t\t\t\t\t\t\t if (!delta && event.key !== 'Home' && event.key !== 'End') return;\n\t\t\t\t\t\t\t\t\t\t\t\t if (event.key === 'End' && maxSize === Number.MAX_SAFE_INTEGER) return;\n\t\t\t\t\t\t\t\t\t\t\t\t event.preventDefault(); event.stopPropagation();\n\t\t\t\t\t\t\t\t\t\t\t\t const size = header.getSize();\n\t\t\t\t\t\t\t\t\t\t\t\t const ratio = Math.max(minSize, Math.min(maxSize, size + delta)) / Math.max(1, size);\n\t\t\t\t\t\t\t\t\t\t\t\t table.setColumnSizing(previous => ({...previous, ...Object.fromEntries(resizeLeaves.map(leaf => {\n\t\t\t\t\t\t\t\t\t\t\t\t const min = leaf.column.columnDef.minSize ?? 20, max = leaf.column.columnDef.maxSize ?? Number.MAX_SAFE_INTEGER;\n\t\t\t\t\t\t\t\t\t\t\t\t const next = event.key === 'Home' ? min : event.key === 'End' ? max : Math.max(min, Math.min(max, leaf.column.getSize() * ratio));\n\t\t\t\t\t\t\t\t\t\t\t\t return [leaf.column.id, Math.round(next * 100) / 100];\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}}\n\t\t\t\t\t\t\t\t\t\t\t\tonMouseDown={startResize}\n\t\t\t\t\t\t\t\t\t\t\t\tonTouchStart={startResize}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</TableHead>\n\t\t\t\t\t\t);\n\t\t\t\t\t})}\n\t\t\t\t</TableRow>\n\t\t\t))}\n\t\t</TableHeader>\n\t);\n}\n\nDataTableHeader.displayName = 'DataTableHeader';\n","import { Settings2 } from 'lucide-react';\nimport {\n\tActionMenu,\n\ttype ActionMenuAction,\n} from '../../base/action-menu';\nimport { cn } from '../../../lib/utils';\n\nimport { defaultDataTableStrings } from './table.strings';\nimport { type ColumnVisibilityToggleProps } from './table.types';\nimport { popoverWidthRecipes } from '../../base/popover/popover.recipes';\n\nexport function ColumnVisibilityToggle<TData>({\n\ttable,\n\tclassName,\n\talign = 'end',\n\tlabelVisibility = 'hidden',\n\tstrings = defaultDataTableStrings,\n}: ColumnVisibilityToggleProps<TData>) {\n\tconst columns = table.getAllColumns()\n\t\t.filter((column) => column.getCanHide());\n\n\tif (columns.length === 0) return null;\n\tconst showVisualLabel = labelVisibility !== 'hidden';\n\tconst actions: ActionMenuAction[] = columns.map((column) => {\n\t\tconst header = column.columnDef.header;\n\t\tconst columnName = strings.columnVisibility.formatLabel(\n\t\t\tcolumn.id,\n\t\t\ttypeof header === 'string' ? header : column.columnDef.meta?.label,\n\t\t);\n\n\t\treturn {\n\t\t\tid: column.id,\n\t\t\ttype: 'checkbox',\n\t\t\tlabel: columnName,\n\t\t\tgroup: strings.columnVisibility.title,\n\t\t\tchecked: column.getIsVisible(),\n\t\t\tonCheckedChange: (checked) => column.toggleVisibility(!!checked),\n\t\t};\n\t});\n\n\treturn (\n\t\t<ActionMenu\n\t\t\tactions={actions}\n\t\t\ticon={Settings2}\n\t\t\tlabel={strings.columnVisibility.triggerLabel}\n\t\t\tsrText={strings.columnVisibility.triggerLabel}\n\t\t\talign={align}\n\t\t\twidth={popoverWidthRecipes.xs}\n\t\t\tlabelVisibility={showVisualLabel ? 'responsive' : 'hidden'}\n\t\t\tbuttonProps={{\n\t\t\t\t'aria-label': strings.columnVisibility.triggerLabel,\n\t\t\t\ttone: 'secondary',\n\t\t\t\tbuttonStyle: 'outline',\n\t\t\t\tsize: 'sm',\n\t\t\t\ticonOnly: !showVisualLabel,\n\t\t\t\tclassName: cn(\n\t\t\t\t\t'column-visibility-toggle--component',\n\t\t\t\t\tshowVisualLabel\n\t\t\t\t\t\t? 'h-action-sm gap-space-sm px-control-sm'\n\t\t\t\t\t\t: 'size-action-sm gap-0 px-0',\n\t\t\t\t\tclassName,\n\t\t\t\t),\n\t\t\t}}\n\t\t\tpreserveOrder\n\t\t/>\n\t);\n}\n\nColumnVisibilityToggle.displayName = 'ColumnVisibilityToggle';\n","/**\n * Stateless full-screen toggle for custom DataTable toolbars.\n */\nimport { Maximize2, Minimize2 } from 'lucide-react';\nimport { Button } from '../../../base/buttons';\nimport { cn } from '../../../../lib/utils';\n\nconst buttonClass =\n\t'text-muted-foreground hover:text-foreground disabled:pointer-events-none disabled:opacity-50';\n\nexport interface FullscreenToggleProps {\n\t/** Whether the table currently covers the viewport. */\n\tfullscreen: boolean;\n\t/** Fired with the next full-screen state. */\n\tonFullscreenChange: (fullscreen: boolean) => void;\n\t/** Accessible copy for entering full screen. */\n\tenterLabel?: string;\n\t/** Accessible copy for leaving full screen. */\n\texitLabel?: string;\n\t/** Merged onto the outermost node. */\n\tclassName?: string;\n}\n\nexport function FullscreenToggle({\n\tfullscreen,\n\tonFullscreenChange,\n\tenterLabel = 'Enter full screen',\n\texitLabel = 'Exit full screen',\n\tclassName,\n}: FullscreenToggleProps) {\n\tconst label = fullscreen ? exitLabel : enterLabel;\n\tconst Icon = fullscreen ? Minimize2 : Maximize2;\n\n\treturn (\n\t\t<Button\n\t\t\ttype=\"button\"\n\t\t\ttone=\"secondary\"\n\t\t\tbuttonStyle=\"ghost\"\n\t\t\tsize=\"sm\"\n\t\t\ticonOnly\n\t\t\taria-label={label}\n\t\t\taria-pressed={fullscreen}\n\t\t\tonClick={() => onFullscreenChange(!fullscreen)}\n\t\t\tclassName={cn('fullscreen-toggle--component', buttonClass, className)}\n\t\t>\n\t\t\t<Icon className=\"size-icon-sm\" />\n\t\t</Button>\n\t);\n}\n\nFullscreenToggle.displayName = 'FullscreenToggle';\n","import { ChevronLeft, ChevronRight } from 'lucide-react';\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { Button } from '../../base/buttons';\nimport { cn } from '../../../lib/utils';\nimport { controlGroupHeightClasses, segmentedControlRecipes } from '../../../lib/control-group-recipes';\nimport { focusRecipes } from '../../../lib/focus-recipes';\nimport { useDensityConfig } from '../../../lib/ui-provider';\nimport { resolveComponentScale } from '../../../lib/ui-provider/scale';\nimport { defaultDataTableStrings } from './table.strings';\nimport { type DataTableToolbarProps } from './table.types';\nimport { ColumnVisibilityToggle } from './column-visibility-toggle';\nimport { FullscreenToggle } from './partials/fullscreen-toggle';\n\nconst SCROLL_AMOUNT = 300;\n\nconst btnBase = 'text-muted-foreground transition-colors duration-150 hover:text-foreground disabled:pointer-events-none disabled:opacity-50';\n\ninterface ToolbarIconButtonProps {\n\t/** Display label. */\n\tlabel: string;\n\tonClick: () => void;\n\t/** Renders the entry as unselectable. */\n\tdisabled?: boolean;\n\t/** Merged onto the outermost node. */\n\tclassName?: string;\n\tchildren: React.ReactNode;\n}\n\nfunction ToolbarIconButton({ label, onClick, disabled, className, children }: ToolbarIconButtonProps) {\n\treturn (\n\t\t<Button\n\t\t\ttype=\"button\"\n\t\t\ttone=\"secondary\"\n\t\t\tbuttonStyle=\"ghost\"\n\t\t\tsize=\"sm\" iconOnly\n\t\t\taria-label={label}\n\t\t\t\tclassName={cn('table-toolbar--component', btnBase, segmentedControlRecipes.joinedItem, className)}\n\t\t\tonClick={onClick}\n\t\t\tdisabled={disabled}\n\t\t>\n\t\t\t{children}\n\t\t</Button>\n\t);\n}\n\n/**\n * Finds the actual horizontally-scrollable element inside the table area.\n * The Table primitive renders: <div data-slot=\"table-container\" class=\"overflow-x-auto\">\n */\nfunction getScrollContainer(tableArea: HTMLDivElement | null): HTMLDivElement | null {\n\tif (!tableArea) return null;\n\treturn tableArea.querySelector<HTMLDivElement>('[data-slot=\"table-container\"]');\n}\n\nexport function DataTableToolbar<TData>({\n\ttable,\n\ttableAreaRef,\n\tfullscreen,\n\tonFullscreenChange,\n\tshowFullscreenToggle = false,\n\tenableColumnVisibility = false,\n\tlabelVisibility = 'hidden',\n\tstrings = defaultDataTableStrings,\n\tclassName,\n}: DataTableToolbarProps<TData>) {\n\tconst { defaultScale } = useDensityConfig();\n\tconst size = resolveComponentScale(undefined, defaultScale);\n\tconst [canScrollLeft, setCanScrollLeft] = useState(false);\n\tconst [canScrollRight, setCanScrollRight] = useState(false);\n\tconst rafRef = useRef(0);\n\tconst cleanupRef = useRef<(() => void) | null>(null);\n\n\t// --- Scroll overflow detection ---\n\tconst checkOverflow = useCallback(() => {\n\t\tconst el = getScrollContainer(tableAreaRef.current);\n\t\tif (!el) {\n\t\t\tsetCanScrollLeft(false);\n\t\t\tsetCanScrollRight(false);\n\t\t\treturn;\n\t\t}\n\t\tconst { scrollLeft, scrollWidth, clientWidth } = el;\n\t\tsetCanScrollLeft(scrollLeft > 1);\n\t\tsetCanScrollRight(scrollLeft + clientWidth < scrollWidth - 1);\n\t}, [tableAreaRef]);\n\n\tuseEffect(() => {\n\t\t// Defer slightly to ensure the Table primitive has rendered its container\n\t\tconst timerId = window.setTimeout(() => {\n\t\t\tconst el = getScrollContainer(tableAreaRef.current);\n\t\t\tif (!el) return;\n\n\t\t\t// Initial check\n\t\t\tcheckOverflow();\n\n\t\t\tif (typeof ResizeObserver === 'undefined') return;\n\n\t\t\tconst handleScroll = () => {\n\t\t\t\tcancelAnimationFrame(rafRef.current);\n\t\t\t\trafRef.current = requestAnimationFrame(checkOverflow);\n\t\t\t};\n\n\t\t\tel.addEventListener('scroll', handleScroll, { passive: true });\n\n\t\t\t// ResizeObserver to detect when table width changes\n\t\t\tconst ro = new ResizeObserver(checkOverflow);\n\t\t\tro.observe(el);\n\t\t\tif (el.firstElementChild) {\n\t\t\t\tro.observe(el.firstElementChild);\n\t\t\t}\n\n\t\t\t// Store cleanup references\n\t\t\tcleanupRef.current = () => {\n\t\t\t\tel.removeEventListener('scroll', handleScroll);\n\t\t\t\tcancelAnimationFrame(rafRef.current);\n\t\t\t\tro.disconnect();\n\t\t\t};\n\t\t}, 0);\n\n\t\treturn () => {\n\t\t\twindow.clearTimeout(timerId);\n\t\t\tcleanupRef.current?.();\n\t\t};\n\t\t// Re-run when full-screen mode changes because the viewport-sized layout\n\t\t// can alter horizontal overflow.\n\t}, [tableAreaRef, checkOverflow, fullscreen]);\n\n\t// --- Scroll handlers ---\n\tconst handleScrollLeft = useCallback(() => {\n\t\tgetScrollContainer(tableAreaRef.current)?.scrollBy({ left: -SCROLL_AMOUNT, behavior: 'smooth' });\n\t}, [tableAreaRef]);\n\n\tconst handleScrollRight = useCallback(() => {\n\t\tgetScrollContainer(tableAreaRef.current)?.scrollBy({ left: SCROLL_AMOUNT, behavior: 'smooth' });\n\t}, [tableAreaRef]);\n\n\t// --- Column visibility ---\n\tconst hideableColumns = enableColumnVisibility\n\t\t? table.getAllColumns().filter((column) => column.getCanHide())\n\t\t: [];\n\n\tconst hasScrollArrows = canScrollLeft || canScrollRight;\n\tconst hasColumns = hideableColumns.length > 0;\n\tconst hasFullscreen = showFullscreenToggle;\n\tif (!hasScrollArrows && !hasColumns && !hasFullscreen) return null;\n\n\treturn (\n\t\t<div className={cn(segmentedControlRecipes.joinedFrame, controlGroupHeightClasses[size], 'bg-card text-card-foreground', className)}>\n\t\t\t{/* Scroll arrows - only rendered when overflow exists */}\n\t\t\t{!!hasScrollArrows && (\n\t\t\t\t<>\n\t\t\t\t\t<ToolbarIconButton\n\t\t\t\t\t\tlabel={strings.toolbar.scrollLeft}\n\t\t\t\t\t\tonClick={handleScrollLeft}\n\t\t\t\t\t\tdisabled={!canScrollLeft}\n\t\t\t\t\t\tclassName={segmentedControlRecipes.firstItem}\n\t\t\t\t\t>\n\t\t\t\t\t\t<ChevronLeft className=\"size-icon-sm\" />\n\t\t\t\t\t</ToolbarIconButton>\n\t\t\t\t\t<ToolbarIconButton\n\t\t\t\t\t\tlabel={strings.toolbar.scrollRight}\n\t\t\t\t\t\tonClick={handleScrollRight}\n\t\t\t\t\t\tdisabled={!canScrollRight}\n\t\t\t\t\t>\n\t\t\t\t\t\t<ChevronRight className=\"size-icon-sm\" />\n\t\t\t\t\t</ToolbarIconButton>\n\t\t\t\t\t{(hasColumns || hasFullscreen) && <div className=\"h-4 w-px self-center bg-border\" />}\n\t\t\t\t</>\n\t\t\t)}\n\n\t\t\t{/* Column visibility dropdown */}\n\t\t\t{!!hasColumns && (\n\t\t\t\t<>\n\t\t\t\t\t<ColumnVisibilityToggle\n\t\t\t\t\t\ttable={table}\n\t\t\t\t\t\tstrings={strings}\n\t\t\t\t\t\tlabelVisibility={labelVisibility}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t// A borderless segment in the joined group draws its focus edge inset.\n\t\t\t\t\t\t\tsegmentedControlRecipes.joinedItem, 'border-0 shadow-none', focusRecipes.inset,\n\t\t\t\t\t\t\t!hasScrollArrows && segmentedControlRecipes.firstItem,\n\t\t\t\t\t\t\t!hasFullscreen && segmentedControlRecipes.lastItem,\n\t\t\t\t\t\t)}\n\t\t\t\t\t/>\n\t\t\t\t\t{hasFullscreen && <div className=\"h-4 w-px self-center bg-border\" />}\n\t\t\t\t</>\n\t\t\t)}\n\n\t\t\t{hasFullscreen && (\n\t\t\t\t<FullscreenToggle\n\t\t\t\t\tfullscreen={fullscreen}\n\t\t\t\t\tonFullscreenChange={onFullscreenChange}\n\t\t\t\t\tenterLabel={strings.toolbar.enterFullscreen}\n\t\t\t\t\texitLabel={strings.toolbar.exitFullscreen}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\tsegmentedControlRecipes.joinedItem, segmentedControlRecipes.lastItem,\n\t\t\t\t\t\t!hasScrollArrows && !hasColumns &&\n\t\t\t\t\t\t\tsegmentedControlRecipes.firstItem,\n\t\t\t\t\t)}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n\nDataTableToolbar.displayName = 'DataTableToolbar';\n","/**\n * DataTable — TanStack-powered data table with sorting, row selection, column\n * visibility, server-side pagination, full-screen mode, sticky header / first column,\n * and pluggable row actions (menu / inline / responsive).\n *\n * Strings are overridable through the `strings` prop and a default set in\n * `./table.strings`. Column visibility persists to localStorage when a\n * `storageKey` is provided; full-screen state remains an explicit UI contract.\n *\n * Use the cell renderers exported from `./partials/cell-renderers`\n * (`StatusCell`, `DateCell`, `CurrencyCell`, `AvatarCell`) for visually\n * consistent cells across pages.\n */\nimport {\n\tgetCoreRowModel,\n\tgetFilteredRowModel,\n\tgetSortedRowModel,\n\tuseReactTable,\n\ttype SortingState,\n\ttype VisibilityState,\n\ttype Updater,\n\ttype ColumnDef,\n\ttype ColumnFiltersState,\n\ttype RowSelectionState,\n\ttype Table as TanStackTable,\n} from '@tanstack/react-table';\nimport {\n\tcreateContext,\n\tuseContext,\n\tuseState,\n\tuseMemo,\n\tuseCallback,\n\tuseLayoutEffect,\n\tuseRef,\n\ttype CSSProperties,\n\ttype DependencyList,\n\ttype FocusEvent,\n\ttype RefObject,\n} from 'react';\nimport { Table, type TableProps } from '../../base/table';\nimport { BatchActionBar } from '../../base/batch-action-bar';\nimport { Input } from '../../base/text-inputs';\nimport { Separator } from '../../base/display/separator';\nimport { useDensityConfig } from '../../../lib/ui-provider';\nimport { resolveComponentScale } from '../../../lib/ui-provider/scale';\nimport { useFullscreenTableModality } from './hooks';\nimport { cn } from '../../../lib/utils';\nimport { focusRecipes } from '../../../lib/focus-recipes';\nimport { regionRecipes, surfaceRecipes } from '../../../lib/surface-recipes';\n\n/**\n * Context exposing the current `<DataTable size>` to descendant cell renderers\n * so consumer-built cells can stay typographically aligned with the table\n * (instead of hardcoding `<Text>` and breaking the unification the\n * `size` prop is supposed to give).\n *\n * Use it from custom cells:\n * const textSize = useDataTableSize();\n * return <Text className=\"data-table--component\" size={textSize}>{value}</Text>;\n *\n * The built-in renderers in `partials/cell-renderers` consume this hook.\n */\nconst DataTableSizeContext = createContext<'xs' | 'sm'>('sm');\n\nexport function useDataTableSize(): 'xs' | 'sm' {\n\treturn useContext(DataTableSizeContext);\n}\nimport { Pagination } from './pagination';\nimport { DataTableActions } from './table-actions';\nimport { DataTableBody } from './table-body';\nimport { DataTableHeader } from './table-header';\nimport { DataTableToolbar } from './table-toolbar';\nimport { tableRegionInsetClassName } from './table-region.recipes';\nimport { addSelectionColumn, getGeneratedColumnOptions, type GeneratedColumnOptions } from './table-helpers';\nimport { defaultDataTableStrings, mergeDataTableStrings } from './table.strings';\nimport {\n\ttype DataTableProps,\n\ttype DataTableSelectionToolbarContext,\n} from './table.types';\n\n// The base table owns head and cell geometry from the shared row recipe; the\n// DataTable `size` only chooses its row density. Header and body text stay on\n// the default admin body scale at every size.\nconst densityByDataTableSize: Record<NonNullable<DataTableProps<object, unknown>['size']>, NonNullable<TableProps['density']>> = {\n\tsm: 'compact',\n\tmd: 'default',\n\tlg: 'comfortable',\n};\n\n// Density alone does not make primary content `xs`: every size keeps the\n// default text role, which `useDataTableSize()` reports to custom cells.\nconst dataTableTextSize = 'sm' satisfies ReturnType<typeof useDataTableSize>;\n\n/** Declared size of the checkbox column, used until its cell is measured. */\nconst SELECTION_COLUMN_WIDTH = 40;\n\nfunction readStoredColumnVisibility(storageKey: string): VisibilityState | null {\n\ttry {\n\t\tconst stored = window.localStorage.getItem(storageKey);\n\t\tif (!stored) return null;\n\t\tconst parsed: unknown = JSON.parse(stored);\n\t\treturn parsed && typeof parsed === 'object' && !Array.isArray(parsed)\n\t\t\t? (parsed as VisibilityState)\n\t\t\t: null;\n\t} catch {\n\t\t// Unreadable or blocked storage falls back to the explicit default.\n\t\treturn null;\n\t}\n}\n\n/**\n * Resolves TanStack updaters for one state slice. The table may report several\n * changes inside one event handler (two rows toggled, two columns filtered),\n * all before React renders again; each must build on the previous proposal,\n * not on the value the last render closed over. A proposal lasts for the\n * current task only, so a controlled parent that refuses a change is asked\n * again from its committed value.\n */\nfunction useUpdaterResolver<TState>(state: TState) {\n\t// Written during render, like the table options themselves, so a cell that\n\t// reports a change from its own effect in the same commit reads this state.\n\tconst committedRef = useRef(state);\n\tcommittedRef.current = state;\n\tconst pendingRef = useRef<{ value: TState } | null>(null);\n\tuseLayoutEffect(() => {\n\t\tpendingRef.current = null;\n\t});\n\treturn useCallback((updater: Updater<TState>): TState => {\n\t\tconst base = pendingRef.current ? pendingRef.current.value : committedRef.current;\n\t\tconst next = typeof updater === 'function'\n\t\t\t? (updater as (previous: TState) => TState)(base)\n\t\t\t: updater;\n\t\tif (!pendingRef.current) {\n\t\t\tqueueMicrotask(() => {\n\t\t\t\tpendingRef.current = null;\n\t\t\t});\n\t\t}\n\t\tpendingRef.current = { value: next };\n\t\treturn next;\n\t}, []);\n}\n\nconst toCssSize = (value: number | string | undefined): string | undefined => {\n\tif (value === undefined) return undefined;\n\treturn typeof value === 'number' ? `${value}px` : value;\n};\n\n// The toolbar supplies a text query. Give only its default target a text\n// recipe: TanStack's automatic numeric filter expects a range tuple instead.\nfunction withTextFilter<TData extends object, TValue>(\n\tcolumns: ColumnDef<TData, TValue>[],\n\tfilterColumn: string,\n): ColumnDef<TData, TValue>[] {\n\treturn columns.map((column) => {\n\t\tif ('columns' in column && column.columns) {\n\t\t\treturn { ...column, columns: withTextFilter(column.columns, filterColumn) };\n\t\t}\n\t\tconst columnId = column.id\n\t\t\t?? ('accessorKey' in column && typeof column.accessorKey === 'string'\n\t\t\t\t? column.accessorKey.replace(/\\./g, '_') : undefined)\n\t\t\t?? (typeof column.header === 'string' ? column.header : undefined);\n\t\treturn columnId === filterColumn && column.filterFn === undefined\n\t\t\t? { ...column, filterFn: 'includesString' }\n\t\t\t: column;\n\t});\n}\n\nfunction GeneratedActionsHeader<TData>({ table }: { table: TanStackTable<TData> }) {\n\treturn getGeneratedColumnOptions(table)?.strings.actions.triggerLabel ?? defaultDataTableStrings.actions.triggerLabel;\n}\n\nfunction GeneratedActionsCell<TData>({ table, row }: { table: TanStackTable<TData>; row: { original: TData } }) {\n\treturn getGeneratedColumnOptions(table)?.renderActions?.(row.original) ?? null;\n}\n\nfunction useResolvedColumns<TData extends object, TValue>(columns: DataTableProps<TData, TValue>['columns']) {\n\ttype ColumnTuple = [ColumnDef<TData, TValue>[], DependencyList];\n\tconst tuple = columns.length === 2 && Array.isArray(columns[0]) && Array.isArray(columns[1])\n\t\t? columns as ColumnTuple\n\t\t: undefined;\n\tconst [retained, setRetained] = useState(tuple);\n\tif (!tuple) {\n\t\tif (retained) setRetained(undefined);\n\t\treturn columns as ColumnDef<TData, TValue>[];\n\t}\n\tconst dependencies = tuple[1];\n\tif (retained && dependencies.length === retained[1].length &&\n\t\tdependencies.every((dependency, index) => Object.is(dependency, retained[1][index]))) {\n\t\treturn retained[0];\n\t}\n\tsetRetained(tuple);\n\treturn tuple[0];\n}\n\nexport function DataTable<TData extends object, TValue = unknown>({\n\tsize,\n\tsurface = 'card',\n\theaderTransparent = true,\n\tcolumns,\n\tdata,\n\tloading = false,\n\tloadingRows,\n\tcolumnGroups,\n\trowActions,\n\trowActionsMenuLabel,\n\trowActionsDisplayMode,\n\trowActionsBreakpoint,\n\tenableSorting = false,\n\tenableResizing = false,\n\tfilterColumn,\n\tmanualSorting = false,\n\tenableColumnVisibility = false,\n\tfullscreen: controlledFullscreen,\n\tdefaultFullscreen = false,\n\tonFullscreenChange,\n\tshowFullscreenToggle = false,\n\tenableRowSelection = false,\n\tenableMultiRowSelection = true,\n\tpagination,\n\tpageQueryKey,\n\tonPageChange,\n\tonSortingChange,\n\tonColumnFiltersChange,\n\tonRowClick,\n\tonRowSelectionChange,\n\tstickyHeader = false,\n\tstickyToolbar = false,\n\tstickyFirstColumn = false,\n\tmaxBodyHeight,\n\tfillAvailableHeight = false,\n\temptyStateAction,\n\tclassName = '',\n\trowClassName = '',\n\tcellClassName = '',\n\theaderClassName = '',\n\twrapperClassName = '',\n\tinnerClassName = '',\n\ttableContainerClassName = '',\n\tgetRowId,\n\trowSelection: controlledRowSelection,\n\tsorting: controlledSorting,\n\tcolumnVisibility: controlledColumnVisibility,\n\tinitialState,\n\tonColumnVisibilityChange,\n\tstrings: stringsOverride,\n\ttopbarContent,\n\ttopbarEnd,\n\ttopbarClassName,\n\ttoolbarLabelVisibility = 'hidden',\n\tfooterContent,\n\tselectionToolbar,\n\tbulkActions,\n\tselectionToolbarClassName,\n\tselectionToolbarPlacement = 'floating',\n\ttotalRowCount: totalRowCountProp,\n\tstorageKey,\n\tcolumnVisibilityPrecedence = 'defaults',\n}: DataTableProps<TData, TValue>) {\n\tconst { defaultScale } = useDensityConfig();\n\tconst resolvedSize = resolveComponentScale(size, defaultScale);\n\n\tconst strings = useMemo(\n\t\t() => mergeDataTableStrings(stringsOverride),\n\t\t[stringsOverride],\n\t);\n\n\tconst tableRowClasses = cn('bg-card text-card-foreground', rowClassName);\n\tconst resolvedPageQueryKey = pageQueryKey ?? 'page';\n\tconst resolvedMaxBodyHeight = toCssSize(maxBodyHeight);\n\n\tconst resolvedColumns = useResolvedColumns(columns);\n\n\t// --- Format storage key internally ---\n\tconst formattedStorageKey = useMemo(() => {\n\t\treturn storageKey ? `dt.${storageKey}.columns` : null;\n\t}, [storageKey]);\n\n\t// --- State for sorting, visibility, selection, and full screen ---\n\tconst [internalSorting, setInternalSorting] = useState<SortingState>(\n\t\tinitialState?.sorting ?? [],\n\t);\n\tconst [columnFilters, setColumnFilters] = useState<ColumnFiltersState>(\n\t\tinitialState?.columnFilters ?? [],\n\t);\n\t// The first render uses the explicit defaults only, so server markup and\n\t// the hydrating client agree. Stored visibility is applied after mount.\n\tconst [explicitColumnVisibility] = useState<VisibilityState>(\n\t\t() => initialState?.columnVisibility ?? {},\n\t);\n\tconst [internalColumnVisibility, setInternalColumnVisibility] = useState<VisibilityState>(\n\t\texplicitColumnVisibility,\n\t);\n\tuseLayoutEffect(() => {\n\t\tif (!formattedStorageKey) return;\n\t\tconst stored = readStoredColumnVisibility(formattedStorageKey);\n\t\tif (!stored) return;\n\t\t// Explicit defaults win over persisted values unless the table opted\n\t\t// into the user's stored choice winning.\n\t\tsetInternalColumnVisibility(columnVisibilityPrecedence === 'stored'\n\t\t\t? { ...explicitColumnVisibility, ...stored }\n\t\t\t: { ...stored, ...explicitColumnVisibility });\n\t}, [formattedStorageKey, explicitColumnVisibility, columnVisibilityPrecedence]);\n\tconst [internalRowSelection, setInternalRowSelection] = useState<RowSelectionState>(\n\t\tinitialState?.rowSelection || {},\n\t);\n\tconst [internalFullscreen, setInternalFullscreen] = useState(defaultFullscreen);\n\tconst sorting = controlledSorting ?? internalSorting;\n\tconst columnVisibility = controlledColumnVisibility ?? internalColumnVisibility;\n\tconst rowSelection = controlledRowSelection ?? internalRowSelection;\n\tconst fullscreen = controlledFullscreen ?? internalFullscreen;\n\n\t// --- Refs ---\n\tconst tableAreaRef = useRef<HTMLDivElement>(null);\n\t// When the selection bar goes away with focus in it, focus returns to the\n\t// control the user last used in the table, or to select-all once that row is\n\t// gone, so it never falls to the document body.\n\tconst lastTableFocusRef = useRef<HTMLElement | null>(null);\n\tconst selectionReturnFocusRef = useMemo<RefObject<HTMLElement | null>>(() => ({\n\t\tget current() {\n\t\t\tconst last = lastTableFocusRef.current;\n\t\t\tif (last?.isConnected) return last;\n\t\t\treturn tableAreaRef.current?.querySelector<HTMLElement>('thead [role=\"checkbox\"]') ?? null;\n\t\t},\n\t}), []);\n\tconst rememberTableFocus = useCallback((event: FocusEvent<HTMLDivElement>) => {\n\t\tif (event.target instanceof HTMLElement) lastTableFocusRef.current = event.target;\n\t}, []);\n\n\t// --- Callbacks ---\n\tconst resolveColumnFilters = useUpdaterResolver(columnFilters);\n\tconst resolveSorting = useUpdaterResolver(sorting);\n\tconst resolveColumnVisibility = useUpdaterResolver(columnVisibility);\n\tconst resolveRowSelection = useUpdaterResolver(rowSelection);\n\n\tconst handleColumnFiltersChange = useCallback(\n\t\t(updater: Updater<ColumnFiltersState>) => {\n\t\t\tconst nextFilters = resolveColumnFilters(updater);\n\t\t\tsetColumnFilters(nextFilters);\n\t\t\tonColumnFiltersChange?.(nextFilters);\n\t\t},\n\t\t[onColumnFiltersChange, resolveColumnFilters],\n\t);\n\n\tconst handleSortingChangeCallback = useCallback(\n\t\t(updater: Updater<SortingState>) => {\n\t\t\tconst nextSorting = resolveSorting(updater);\n\n\t\t\tif (controlledSorting === undefined) {\n\t\t\t\tsetInternalSorting(nextSorting);\n\t\t\t}\n\n\t\t\tonSortingChange?.(nextSorting);\n\t\t},\n\t\t[controlledSorting, onSortingChange, resolveSorting],\n\t);\n\n\tconst handleVisibilityChangeCallback = useCallback(\n\t\t(updater: Updater<VisibilityState>) => {\n\t\t\tconst nextVisibility = resolveColumnVisibility(updater);\n\n\t\t\tif (controlledColumnVisibility === undefined) {\n\t\t\t\tsetInternalColumnVisibility(nextVisibility);\n\t\t\t}\n\n\t\t\t// Persist to localStorage if enabled.\n\t\t\tif (formattedStorageKey && typeof window !== 'undefined') {\n\t\t\t\ttry {\n\t\t\t\t\t// With stored precedence only the user's departures from the\n\t\t\t\t\t// defaults are kept, so untouched columns follow later defaults.\n\t\t\t\t\tconst persisted = columnVisibilityPrecedence === 'stored'\n\t\t\t\t\t\t? Object.fromEntries(Object.entries(nextVisibility).filter(\n\t\t\t\t\t\t\t([columnId, visible]) => visible !== (explicitColumnVisibility[columnId] ?? true),\n\t\t\t\t\t\t))\n\t\t\t\t\t\t: nextVisibility;\n\t\t\t\t\twindow.localStorage.setItem(\n\t\t\t\t\t\tformattedStorageKey,\n\t\t\t\t\t\tJSON.stringify(persisted),\n\t\t\t\t\t);\n\t\t\t\t} catch {\n\t\t\t\t\t// Silent fail - quota exceeded or other localStorage errors\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tonColumnVisibilityChange?.(nextVisibility);\n\t\t},\n\t\t[\n\t\t\tcolumnVisibilityPrecedence,\n\t\t\texplicitColumnVisibility,\n\t\t\tcontrolledColumnVisibility,\n\t\t\tformattedStorageKey,\n\t\t\tonColumnVisibilityChange,\n\t\t\tresolveColumnVisibility,\n\t\t],\n\t);\n\n\tconst handleRowSelectionChangeCallback = useCallback(\n\t\t(updater: Updater<RowSelectionState>) => {\n\t\t\tconst nextRowSelection = resolveRowSelection(updater);\n\n\t\t\tif (controlledRowSelection === undefined) {\n\t\t\t\tsetInternalRowSelection(nextRowSelection);\n\t\t\t}\n\n\t\t\tonRowSelectionChange?.(nextRowSelection);\n\t\t},\n\t\t[controlledRowSelection, onRowSelectionChange, resolveRowSelection],\n\t);\n\n\tconst fullscreenRegionRef = useRef<HTMLDivElement | null>(null);\n\n\tconst handleFullscreenChange = useCallback(\n\t\t(nextFullscreen: boolean) => {\n\t\t\tif (controlledFullscreen === undefined) {\n\t\t\t\tsetInternalFullscreen(nextFullscreen);\n\t\t\t}\n\t\t\tonFullscreenChange?.(nextFullscreen);\n\t\t},\n\t\t[controlledFullscreen, onFullscreenChange],\n\t);\n\n\tconst exitFullscreen = useCallback(\n\t\t() => handleFullscreenChange(false),\n\t\t[handleFullscreenChange],\n\t);\n\tuseFullscreenTableModality(fullscreen, fullscreenRegionRef, exitFullscreen);\n\n\tconst getRowActionsMenuLabel = useCallback(\n\t\t(row: TData) => {\n\t\t\treturn rowActionsMenuLabel?.(row) ?? strings.actions.menuLabel;\n\t\t},\n\t\t[rowActionsMenuLabel, strings.actions.menuLabel],\n\t);\n\n\tconst hasRowActions = Boolean(rowActions);\n\tconst columnsWithActions = useMemo<ColumnDef<TData, TValue>[]>(() => {\n\t\tconst searchableColumns = filterColumn\n\t\t\t? withTextFilter(resolvedColumns, filterColumn)\n\t\t\t: resolvedColumns;\n\t\tconst baseColumns = enableRowSelection\n\t\t\t? addSelectionColumn<TData, TValue>(searchableColumns)\n\t\t\t: searchableColumns;\n\n\t\t// if no actions, leave cols untouched\n\t\tif (!hasRowActions) {\n\t\t\treturn baseColumns;\n\t\t}\n\n\t\t// otherwise append a fixed Actions column:\n\t\tconst actionCol: ColumnDef<TData, TValue> = {\n\t\t\tid: 'actions',\n\t\t\theader: GeneratedActionsHeader<TData>,\n\t\t\tcell: GeneratedActionsCell<TData>,\n\t\t\tenableSorting: false,\n\t\t\tenableHiding: false,\n\t\t\tsize: 40,\n\t\t};\n\n\t\treturn [...baseColumns, actionCol];\n\t}, [\n\t\tresolvedColumns,\n\t\tfilterColumn,\n\t\tenableRowSelection,\n\t\thasRowActions,\n\t]);\n\n\tconst generatedColumns: GeneratedColumnOptions<TData> = {\n\t\tstrings,\n\t\trenderActions: rowActions ? row => (\n\t\t\t<DataTableActions\n\t\t\t\trow={row}\n\t\t\t\tactions={rowActions}\n\t\t\t\tmenuLabel={getRowActionsMenuLabel(row)}\n\t\t\t\tdisplayMode={rowActionsDisplayMode}\n\t\t\t\tresponsiveBreakpoint={rowActionsBreakpoint}\n\t\t\t\tstrings={strings}\n\t\t\t/>\n\t\t) : undefined,\n\t};\n\n\t// --- Configure table ---\n\tconst table = useReactTable({\n\t\tdata,\n\t\tcolumns: columnsWithActions,\n\t\tmeta: { themeliaDataTable: generatedColumns },\n\t\tstate: { sorting, columnVisibility, rowSelection, columnFilters },\n\t\tenableSorting,\n\t\tenableColumnResizing: enableResizing,\n\t\tcolumnResizeMode: 'onChange',\n\t\t// Leave `size` unset unless a column declares one, so the header can tell\n\t\t// an explicit width from TanStack's implicit 150px; getSize() still falls back.\n\t\tdefaultColumn: { size: undefined },\n\t\t// The search input filters the loaded rows; without `filterColumn` the\n\t\t// table filters nothing itself.\n\t\tenableColumnFilters: Boolean(filterColumn),\n\t\tmanualFiltering: !filterColumn,\n\t\tmanualSorting,\n\t\t// Pagination is consumer-owned through the `pagination` prop. Disabling\n\t\t// TanStack's unused auto-reset also avoids its render-time microtask from\n\t\t// attempting a state update before a concurrently rendered table mounts.\n\t\tautoResetPageIndex: false,\n\t\tenableRowSelection,\n\t\tenableMultiRowSelection,\n\t\tonSortingChange: enableSorting ? handleSortingChangeCallback : undefined,\n\t\tonRowSelectionChange:\n\t\t\tenableRowSelection ? handleRowSelectionChangeCallback : undefined,\n\t\tonColumnVisibilityChange: handleVisibilityChangeCallback,\n\t\tonColumnFiltersChange: handleColumnFiltersChange,\n\t\tgetCoreRowModel: getCoreRowModel(),\n\t\tgetFilteredRowModel: getFilteredRowModel(),\n\t\tgetSortedRowModel: getSortedRowModel(),\n\t\tgetRowId,\n\t});\n\t// Resolve safely: a missing or explicitly nonfilterable column must not\n\t// produce a control that accepts text without changing the visible rows.\n\tconst filterTarget = filterColumn\n\t\t? table.getAllLeafColumns().find((column) => column.id === filterColumn && column.getCanFilter())\n\t\t: undefined;\n\tconst searchPlaceholder = strings.filter.searchPlaceholder;\n\n\t// --- Determine server pagination ---\n\tconst shouldShow = pagination && pagination.last_page > 1;\n\tconst selectedRows = table.getSelectedRowModel().rows.map((row) => row.original);\n\tconst selectedRowCount = Object.values(rowSelection).filter(Boolean).length;\n\tconst clearSelection = useCallback(() => {\n\t\ttable.resetRowSelection();\n\t}, [table]);\n\t// The whole result, not the loaded page: server pagination knows the total.\n\tconst totalRowCount = totalRowCountProp ?? pagination?.total ?? data.length;\n\tconst selectionToolbarContext: DataTableSelectionToolbarContext<TData> = {\n\t\ttable,\n\t\tselectedRows,\n\t\tselectedRowCount,\n\t\ttotalRowCount,\n\t\trowSelection,\n\t\tclearSelection,\n\t};\n\tconst selectionToolbarNode = (() => {\n\t\tif (!enableRowSelection) return null;\n\t\tif (selectionToolbar === null || selectionToolbar === false) return null;\n\t\tif (selectionToolbar !== undefined) {\n\t\t\tif (selectedRowCount === 0) return null;\n\t\t\treturn typeof selectionToolbar === 'function'\n\t\t\t\t? selectionToolbar(selectionToolbarContext)\n\t\t\t\t: selectionToolbar;\n\t\t}\n\t\tconst bulkActionNode = selectedRowCount === 0\n\t\t\t? null\n\t\t\t: typeof bulkActions === 'function'\n\t\t\t\t? bulkActions(selectionToolbarContext)\n\t\t\t\t: bulkActions;\n\t\t/*\n\t\t * The shared selection bar. Floating by default, so the selection stays\n\t\t * reachable after scrolling far from the topbar; fixed positioning escapes\n\t\t * this root's overflow clipping, and container queries do not trap it.\n\t\t * Mounted while selection is enabled (it renders nothing at zero), so it\n\t\t * is still there to return focus when the selection drops.\n\t\t */\n\t\tconst bar = (\n\t\t\t<BatchActionBar\n\t\t\t\tselectedCount={selectedRowCount}\n\t\t\t\ttotalCount={totalRowCount}\n\t\t\t\tonClear={clearSelection}\n\t\t\t\tplacement={selectionToolbarPlacement}\n\t\t\t\treturnFocusRef={selectionReturnFocusRef}\n\t\t\t\tclassName={cn('data-table-selection-toolbar--component', selectionToolbarClassName)}\n\t\t\t\tstrings={{\n\t\t\t\t\tsummary: (count, total) => strings.selection.summary(count, total ?? totalRowCount),\n\t\t\t\t\tclear: strings.selection.clear,\n\t\t\t\t\tlabel: strings.selection.label,\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{bulkActionNode}\n\t\t\t</BatchActionBar>\n\t\t);\n\t\t// Inline, the table's own region owns the inset around the bar; it\n\t\t// collapses while the bar renders nothing.\n\t\treturn selectionToolbarPlacement === 'inline' ? (\n\t\t\t<div data-slot=\"data-table-selection-toolbar\" className={cn('data-table--selection-toolbar py-row-y empty:hidden', tableRegionInsetClassName)}>\n\t\t\t\t{bar}\n\t\t\t</div>\n\t\t) : bar;\n\t})();\n\t// With `stickyFirstColumn` and row selection, the first data column pins\n\t// just after the checkbox column. Its offset is the checkbox column's real\n\t// width: the declared 40px until the header cell can be measured.\n\tconst pinsSelectionPair = stickyFirstColumn && enableRowSelection;\n\tconst [measuredSelectionWidth, setMeasuredSelectionWidth] = useState<number | null>(null);\n\tuseLayoutEffect(() => {\n\t\tif (!pinsSelectionPair) return;\n\t\tconst cell = tableAreaRef.current?.querySelector<HTMLElement>('th[data-pinned=\"selection\"]');\n\t\tif (!cell) return;\n\t\tconst measure = () => {\n\t\t\tconst { width } = cell.getBoundingClientRect();\n\t\t\tif (width > 0) setMeasuredSelectionWidth(width);\n\t\t};\n\t\tmeasure();\n\t\tif (typeof ResizeObserver === 'undefined') return;\n\t\tconst observer = new ResizeObserver(measure);\n\t\tobserver.observe(cell);\n\t\treturn () => observer.disconnect();\n\t}, [pinsSelectionPair]);\n\tconst tableAreaStyle = useMemo<CSSProperties | undefined>(() => {\n\t\tif (!resolvedMaxBodyHeight && !pinsSelectionPair) return undefined;\n\t\treturn {\n\t\t\t...(resolvedMaxBodyHeight ? { '--data-table-body-max-height': resolvedMaxBodyHeight } : {}),\n\t\t\t...(pinsSelectionPair ? { '--data-table-selection-width': `${measuredSelectionWidth ?? SELECTION_COLUMN_WIDTH}px` } : {}),\n\t\t} as CSSProperties;\n\t}, [resolvedMaxBodyHeight, pinsSelectionPair, measuredSelectionWidth]);\n\tconst shouldUseScrollableTableContainer =\n\t\tfullscreen || fillAvailableHeight || resolvedMaxBodyHeight !== undefined;\n\n\tconst Provider = DataTableSizeContext.Provider;\n\n\treturn (\n\t\t<Provider value={dataTableTextSize}>\n\t\t{/*\n\t\t * Full screen paints over the whole viewport, navigation included, so it\n\t\t * is modal whether or not it was designed as one. `role`/`aria-modal` say\n\t\t * so, and `useFullscreenTableModality` supplies the behaviour that claim\n\t\t * obliges: Escape leaves, Tab stays inside, focus returns to the toggle.\n\t\t * It is the one documented exception to features/overlays owning modals\n\t\t * (the `modal-owner` contract rule exempts this file only): maximising in\n\t\t * place keeps the table's DOM, scroll position and focus.\n\t\t */}\n\t\t<div\n\t\t\tref={fullscreenRegionRef}\n\t\t\trole={fullscreen ? 'dialog' : undefined}\n\t\t\taria-modal={fullscreen ? true : undefined}\n\t\t\taria-label={fullscreen ? strings.accessibility.fullscreenRegion : undefined}\n\t\t\tclassName={cn(\n\t\t\t'data-table--component @container/data-table box-border',\n\t\t\tfullscreen\n\t\t\t\t? 'fixed inset-0 z-50 bg-background text-foreground flex flex-col overflow-hidden p-surface'\n\t\t\t\t: cn(\n\t\t\t\t\t'w-full min-w-0 max-w-full',\n\t\t\t\t\tfillAvailableHeight && 'flex h-full min-h-0 flex-col',\n\t\t\t\t\tsurface === 'card' && ['overflow-hidden', surfaceRecipes.frame],\n\t\t\t\t\tsurface === 'glass' &&\n\t\t\t\t\t\t'rounded-surface overflow-hidden border border-border/60',\n\t\t\t\t\t// `flat` renders no chrome — consumer wraps.\n\t\t\t\t\twrapperClassName,\n\t\t\t\t),\n\t\t)}>\n\t\t\t{!!(filterTarget || topbarContent || topbarEnd || enableColumnVisibility || showFullscreenToggle) && (\n\t\t\t\t<div className={cn('relative', stickyToolbar && 'sticky top-0 z-20 bg-card text-card-foreground')}>\n\n\t\t\t\t\t<div className={cn(\n\t 'data-table-topbar grid gap-space-lg py-surface-sm @2xl/data-table:grid-cols-[minmax(0,1fr)_auto] @2xl/data-table:items-start',\n\t\t\t\t\t\ttableRegionInsetClassName,\n\t\t\t\t\t\tfullscreen ? 'mb-space-lg shrink-0' : 'mb-0',\n\t\t\t\t\t\ttopbarClassName,\n\t\t\t\t\t)}>\n\t\t\t\t\t\t<div className=\"data-table-topbar-left flex min-w-0 flex-col gap-space-md\">\n\t\t\t\t\t\t\t{topbarContent}\n\t\t\t\t\t\t\t{filterTarget && (\n\t\t\t\t\t\t\t\t<div className=\"min-w-0 max-w-sm\">\n\t\t\t\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\t\t\t\taria-label={searchPlaceholder}\n\t\t\t\t\t\t\t\t\t\tplaceholder={searchPlaceholder}\n\t\t\t\t\t\t\t\t\t\tvalue={(filterTarget.getFilterValue() as string) ?? ''}\n\t\t\t\t\t\t\t\t\t\tonChange={(event) => filterTarget.setFilterValue(event.target.value)}\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</div>\n\t\t\t\t\t\t<div className=\"data-table-topbar-right flex flex-wrap items-center justify-end gap-space-md\">\n\t\t\t\t\t\t\t{topbarEnd}\n\t\t\t\t\t\t\t<DataTableToolbar\n\t\t\t\t\t\t\t\ttable={table}\n\t\t\t\t\t\t\t\ttableAreaRef={tableAreaRef}\n\t\t\t\t\t\t\t\tfullscreen={fullscreen}\n\t\t\t\t\t\t\t\tonFullscreenChange={handleFullscreenChange}\n\t\t\t\t\t\t\t\tshowFullscreenToggle={showFullscreenToggle}\n\t\t\t\t\t\t\t\tenableColumnVisibility={enableColumnVisibility}\n\t\t\t\t\t\t\t\tlabelVisibility={toolbarLabelVisibility}\n\t\t\t\t\t\t\t\tstrings={strings}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t</div>\n\t\t\t\t\t<Separator />\n\t\t\t\t</div>\n\t\t\t)}\n\n\t\t\t{selectionToolbarNode}\n\n\t\t\t<div\n\t\t\t\tref={tableAreaRef}\n\t\t\t\tstyle={tableAreaStyle}\n\t\t\t\tonFocus={enableRowSelection ? rememberTableFocus : undefined}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'min-h-0',\n\t\t\t\t\tshouldUseScrollableTableContainer ? 'overflow-hidden' : innerClassName,\n\t\t\t\t\t(fullscreen || fillAvailableHeight) && 'flex-1',\n\t\t\t\t)}\n\t\t\t>\n\n\t\t\t\t{!!loading && <span role=\"status\" className=\"sr-only\">{strings.loading?.label ?? defaultDataTableStrings.loading.label}</span>}\n\t\t\t\t<Table\n\t\t\t\t\taria-busy={loading || undefined}\n\t\t\t\t\tdensity={densityByDataTableSize[resolvedSize]}\n\t\t\t\t\tcontainerProps={{role: 'region', 'aria-label': strings.accessibility.scrollRegion}}\n\t\t\t\t\tstyle={enableResizing ? {width: table.getTotalSize()} : undefined}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t'relative', enableResizing && 'min-w-full table-fixed',\n\t\t\t\t\t\tclassName,\n\t\t\t\t\t)}\n\t\t\t\t\tcontainerClassName={cn(\n\t\t\t\t\t\t`focus-visible:outline-none ${focusRecipes.edge}`,\n\t\t\t\t\t\tshouldUseScrollableTableContainer && 'overflow-auto',\n\t\t\t\t\t\tresolvedMaxBodyHeight !== undefined && 'max-h-(--data-table-body-max-height)',\n\t\t\t\t\t\t(fullscreen || fillAvailableHeight) && 'h-full min-h-0',\n\t\t\t\t\t\ttableContainerClassName,\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t<DataTableHeader\n\t\t\t\t\t\tenableResizing={enableResizing}\n\t\t\t\t\t\ttable={table}\n\t\t\t\t\t\tstickyHeader={stickyHeader}\n\t\t\t\t\t\tclassName={headerClassName}\n\t\t\t\t\t\tcellClassName={cellClassName}\n\t\t\t\t\t\tstickyFirstColumn={stickyFirstColumn}\n\t\t\t\t\t\tcolumnGroups={columnGroups}\n\t\t\t\t\t\theaderTransparent={headerTransparent}\n\t\t\t\t\t\tstrings={strings}\n\t\t\t\t\t/>\n\t\t\t\t\t<DataTableBody\n\t\t\t\t\t\tloading={loading}\n\t\t\t\t\t\tloadingRows={loadingRows}\n\t\t\t\t\t\ttable={table}\n\t\t\t\t\t\tonRowClick={onRowClick}\n\t\t\t\t\t\temptyStateAction={emptyStateAction}\n\t\t\t\t\t\tcellClassName={cellClassName}\n\t\t\t\t\t\trowClassName={tableRowClasses}\n\t\t\t\t\t\tstickyFirstColumn={stickyFirstColumn}\n\t\t\t\t\t\tstrings={strings}\n\t\t\t\t\t/>\n\t\t\t\t</Table>\n\t\t\t</div>\n\t\t\t{!!shouldShow && (\n\t\t\t\t<>\n\t\t\t\t\t<Separator />\n\t\t\t\t\t<Pagination\n\t\t\t\t\t\tpagination={pagination}\n\t\t\t\t\t\tonPageChange={onPageChange}\n\t\t\t\t\t\tpageQueryKey={resolvedPageQueryKey}\n\t\t\t\t\t\tlabels={strings.pagination}\n\t\t\t\t\t/>\n\t\t\t\t</>\n\t\t\t)}\n\t\t\t{!!footerContent && (\n\t\t\t\t<div\n\t\t\t\t\tdata-slot=\"data-table-footer\"\n\t\t\t\t\t\tclassName={cn('data-table--footer py-row-y', tableRegionInsetClassName, regionRecipes.footer)}\n\t\t\t\t>\n\t\t\t\t\t{footerContent}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t\t</Provider>\n\t);\n}\n\nDataTable.displayName = 'DataTable';\n","import { Input } from '../../base/text-inputs';\nimport { ColumnVisibilityToggle } from './column-visibility-toggle';\nimport { tableRegionInsetClassName } from './table-region.recipes';\nimport { defaultDataTableStrings } from './table.strings';\nimport { type DataTableFilterBarProps } from './table.types';\n\nimport { cn } from '../../../lib/utils';\nexport function DataTableFilterBar<TData>({\n\t\t\t\t\t\t\t\t\t\t\t table,\n\t\t\t\t\t\t\t\t\t\t\t filterColumn,\n\t\t\t\t\t\t\t\t\t\t\t enableColumnVisibility = false,\n\t\t\t\t\t\t\t\t\t\t\t customContent,\n\t\t\t\t\t\t\t\t\t\t strings = defaultDataTableStrings,\n\t\t\t\t\t\t\t\t\t }: DataTableFilterBarProps<TData>) {\n\tif (!filterColumn && !enableColumnVisibility && !customContent) {\n\t\treturn null;\n\t}\n\n\tconst searchPlaceholder = strings.filter.searchPlaceholder;\n\n\treturn (\n\t\t<div className={cn('filter-bar--component', 'flex items-center justify-between py-surface', tableRegionInsetClassName)}>\n\t\t\t<div className=\"flex flex-1 items-center space-x-space-md\">\n\t\t\t\t{/* Filter input */}\n\t\t\t\t{!!filterColumn && (\n\t <Input\n\t\t\t\t\t\taria-label={searchPlaceholder}\n\t\t\t\t\t\tplaceholder={searchPlaceholder}\n\t\t\t\t\t\tvalue={(table.getColumn(filterColumn)?.getFilterValue() as string) ?? ''}\n\t\t\t\t\t\tonChange={(event) => {\n\t\t\t\t\t\t\tconst value = event.target.value;\n\t\t\t\t\t\t\ttable.getColumn(filterColumn)?.setFilterValue(value);\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tclassName=\"max-w-sm\"\n\t\t\t\t\t/>\n\t )}\n\n\t\t\t\t{/* Custom content */}\n\t\t\t\t{customContent}\n\t\t\t</div>\n\n\t\t\t{/* Column visibility toggle */}\n\t\t\t\t{!!enableColumnVisibility && (\n\t\t\t\t\t<ColumnVisibilityToggle\n\t\t\t\t\t\ttable={table}\n\t\t\t\t\t\tstrings={strings}\n\t\t\t\t\t\tlabelVisibility=\"responsive\"\n\t\t\t\t\t\tclassName=\"ml-auto\"\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t</div>\n\t);\n}\n\nDataTableFilterBar.displayName = 'DataTableFilterBar';\n","import { isValidElement, type ReactElement, type ReactNode } from 'react';\nimport type { Locale } from 'date-fns';\n\nimport {\n\tDate as DateValue,\n\tDateTime,\n\tEmail,\n\tEmptyValue,\n\tFileSize,\n\ttype FileSizeUnit,\n\tLink,\n\tMoney,\n\ttype MoneyProps,\n\tMonoValue,\n\tMutedValue,\n\tName,\n\tNumber as NumberValue,\n\tPercent,\n\tPhone,\n\tRelativeTime,\n\tSecondaryValue,\n\tTime,\n\tUrl,\n\tValue,\n} from '../../../primitives';\nimport { cn } from '../../../../lib/utils';\nimport { EMPTY } from '../../../../lib/format';\n\nexport type CellValueKind =\n\t| 'value'\n\t| 'secondary'\n\t| 'muted'\n\t| 'name'\n\t| 'mono'\n\t| 'link'\n\t| 'email'\n\t| 'phone'\n\t| 'url'\n\t| 'money'\n\t| 'number'\n\t| 'percent'\n\t| 'fileSize'\n\t| 'date'\n\t| 'time'\n\t| 'dateTime'\n\t| 'relativeTime';\n\nexport type PrimitiveCellValue = string | number | Date | null | undefined;\n\n/**\n * A value plus the formatting needed to render it.\n *\n * `kind` selects the display primitive; every other option applies only to the\n * kinds noted below and is ignored otherwise, so one descriptor shape can\n * describe any cell in a column definition.\n */\nexport interface CellValueDescriptor {\n\t/** The raw value. Empty values render the missing state instead. */\n\tvalue?: PrimitiveCellValue;\n\t/** Which primitive renders the value. Defaults to `value`. */\n\tkind?: CellValueKind;\n\t/** Pre-rendered content used verbatim, bypassing `kind` and all formatting. */\n\tdisplay?: ReactNode;\n\t/** Destination for the entry, when it navigates. */\n\thref?: string;\n\t/** ISO currency code. `money` only. */\n\tcurrency?: string;\n\t/** Whether the currency shows as a symbol, code, or name. `money` only. */\n\tcurrencyDisplay?: MoneyProps['currencyDisplay'];\n\t/** Smallest number of decimals to show. `money`, `number`, and `percent`. */\n\tminimumFractionDigits?: number;\n\t/** Largest number of decimals to show. `money`, `number`, and `percent`. */\n\tmaximumFractionDigits?: number;\n\t/** Selects the compact or full money presentation. `money` only. */\n\tformatMode?: MoneyProps['formatMode'];\n\t/** BCP 47 locale for number and currency formatting. */\n\tlocale?: string;\n\t/** date-fns `Locale` for date and time formatting. */\n\tdateLocale?: Locale;\n\t/** Unit the raw value is already expressed in. `fileSize` only. */\n\tfrom?: FileSizeUnit;\n\t/** Renders the zero value rather than the missing state. */\n\tforce?: boolean;\n\t/** Escape hatch passed to `Intl.NumberFormat`. `number` and `percent`. */\n\toptions?: Intl.NumberFormatOptions;\n\t/** Treats the value as a fraction and scales it to a percentage. `percent` only. */\n\tscaled?: boolean;\n\t/** date-fns pattern, overriding `datePreset`. `date` and `dateTime`. */\n\tdateFormat?: string;\n\t/** Named date length. `date` and `dateTime`. */\n\tdatePreset?: 'compact' | 'short' | 'medium' | 'long';\n\t/** date-fns pattern for the time portion. `time` and `dateTime`. */\n\ttimeFormat?: string;\n\t/** Copy shown in place of an empty value. Defaults to an em dash. */\n\temptyLabel?: ReactNode;\n\t/** Merged onto the outermost node. */\n\tclassName?: string;\n}\n\nexport type CellValueTuple = readonly [\n\tvalue: PrimitiveCellValue,\n\tkind?: CellValueKind,\n\toptions?: Omit<CellValueDescriptor, 'value' | 'kind'>,\n];\n\nexport type CellStackValue =\n\t| PrimitiveCellValue\n\t| false\n\t| ReactElement\n\t| CellValueDescriptor\n\t| CellValueTuple;\n\nexport interface CellValueProps extends Omit<CellValueDescriptor, 'className' | 'display'> {\n\t/** The value to display. When empty, renders fallback with muted styling. */\n\tvalue?: PrimitiveCellValue;\n\t/** Which primitive should render the value. Defaults to Value. */\n\tkind?: CellValueKind;\n\t/** Text shown when value is missing. Defaults to an em dash. */\n\tfallback?: ReactNode;\n\t/** Force missing state regardless of value emptiness. */\n\tmissing?: boolean;\n\t/** Additional class names. */\n\tclassName?: string;\n\t/** Children override. When provided, renders children directly with missing styling applied. */\n\tchildren?: ReactNode;\n}\n\nexport interface CellStackProps {\n\t/** Values are filtered for null, undefined, and empty strings, then capped at four rows. */\n\tvalues?: readonly CellStackValue[];\n\t/** Copy shown when every value is empty. */\n\temptyLabel?: ReactNode;\n\t/** Merged onto the outermost node. */\n\tclassName?: string;\n\t/** Merged onto the item. */\n\titemClassName?: string;\n\t/** Merged onto the primary. */\n\tprimaryClassName?: string;\n\t/** Merged onto the secondary. */\n\tsecondaryClassName?: string;\n\t/** Weight of the first row, which reads as the cell's primary value. */\n\tprimaryWeight?: 'regular' | 'medium' | 'semibold' | 'bold';\n}\n\nfunction isMissingPrimitive(value: PrimitiveCellValue | false) {\n\tif (value === false || value === null || value === undefined) return true;\n\tif (typeof value === 'string') return value.trim() === '';\n\treturn false;\n}\n\nfunction isMissingDisplay(value: ReactNode) {\n\treturn value === null || value === undefined;\n}\n\nfunction isDescriptor(value: CellStackValue): value is CellValueDescriptor {\n\treturn (\n\t\ttypeof value === 'object' &&\n\t\tvalue !== null &&\n\t\t!Array.isArray(value) &&\n\t\t!isValidElement(value) &&\n\t\t!(value instanceof Date)\n\t);\n}\n\nfunction isTuple(value: CellStackValue): value is CellValueTuple {\n\treturn Array.isArray(value);\n}\n\nfunction normalizeTuple(value: CellValueTuple): CellValueDescriptor {\n\tconst [rawValue, kind, options] = value;\n\treturn {\n\t\t...options,\n\t\tvalue: rawValue,\n\t\tkind,\n\t};\n}\n\nfunction normalizeCellValue(value: CellStackValue): CellValueDescriptor | ReactElement | null {\n\tif (value === false) return null;\n\tif (isValidElement(value)) return value;\n\tif (isTuple(value)) {\n\t\tconst descriptor = normalizeTuple(value);\n\t\treturn isMissingPrimitive(descriptor.value) && isMissingDisplay(descriptor.display) ? null : descriptor;\n\t}\n\tif (isDescriptor(value)) {\n\t\treturn isMissingPrimitive(value.value) && isMissingDisplay(value.display) ? null : value;\n\t}\n\treturn isMissingPrimitive(value) ? null : { value: value as PrimitiveCellValue };\n}\n\nfunction stringValue(value: PrimitiveCellValue) {\n\treturn value instanceof Date ? value.toISOString() : String(value ?? '');\n}\n\nfunction renderPrimitiveCellValue({\n\tdescriptor,\n\tindex = 0,\n\temptyLabel,\n\tclassName,\n\tprimaryWeight = 'medium',\n}: {\n\tdescriptor: CellValueDescriptor;\n\tindex?: number;\n\temptyLabel: ReactNode;\n\tclassName?: string;\n\tprimaryWeight?: NonNullable<CellStackProps['primaryWeight']>;\n}) {\n\tconst isPrimary = index === 0;\n\tconst kind = descriptor.kind ?? (isPrimary ? 'value' : 'secondary');\n\tconst value = descriptor.value;\n\tconst display: ReactNode = descriptor.display ?? (value instanceof Date ? stringValue(value) : value);\n\tconst resolvedEmptyLabel = descriptor.emptyLabel ?? emptyLabel;\n\tconst resolvedClassName = cn(className, descriptor.className);\n\tconst weight = isPrimary ? primaryWeight : 'regular';\n\n\tswitch (kind) {\n\t\tcase 'secondary':\n\t\t\treturn (\n\t\t\t\t<SecondaryValue size=\"inherit\" className={resolvedClassName}>\n\t\t\t\t\t{display}\n\t\t\t\t</SecondaryValue>\n\t\t\t);\n\t\tcase 'muted':\n\t\t\treturn (\n\t\t\t\t<MutedValue size=\"inherit\" className={resolvedClassName}>\n\t\t\t\t\t{display}\n\t\t\t\t</MutedValue>\n\t\t\t);\n\t\tcase 'name':\n\t\t\treturn (\n\t\t\t\t<Name\n\t\t\t\t\ttype=\"inherit\"\n\t\t\t\t\tvalue={descriptor.display === undefined && typeof value === 'string' ? value : undefined}\n\t\t\t\t\tforce={descriptor.force}\n\t\t\t\t\temptyLabel={resolvedEmptyLabel}\n\t\t\t\t\tsize=\"inherit\"\n\t\t\t\t\tweight={weight}\n\t\t\t\t\tclassName={resolvedClassName}\n\t\t\t\t>\n\t\t\t\t\t{descriptor.display}\n\t\t\t\t</Name>\n\t\t\t);\n\t\tcase 'mono':\n\t\t\treturn (\n\t\t\t\t<MonoValue type=\"inherit\" size=\"inherit\" weight={weight} className={resolvedClassName}>\n\t\t\t\t\t{display}\n\t\t\t\t</MonoValue>\n\t\t\t);\n\t\tcase 'link': {\n\t\t\tconst href = descriptor.href ?? stringValue(value);\n\t\t\treturn (\n\t\t\t\t<Link href={href} emptyLabel={resolvedEmptyLabel} className={resolvedClassName}>\n\t\t\t\t\t{display}\n\t\t\t\t</Link>\n\t\t\t);\n\t\t}\n\t\tcase 'email':\n\t\t\treturn (\n\t\t\t\t<Email\n\t\t\t\t\tvalue={typeof value === 'string' ? value : undefined}\n\t\t\t\t\tdisplay={descriptor.display}\n\t\t\t\t\temptyLabel={resolvedEmptyLabel}\n\t\t\t\t\tclassName={resolvedClassName}\n\t\t\t\t/>\n\t\t\t);\n\t\tcase 'phone':\n\t\t\treturn (\n\t\t\t\t<Phone\n\t\t\t\t\tvalue={typeof value === 'string' ? value : undefined}\n\t\t\t\t\tdisplay={descriptor.display}\n\t\t\t\t\temptyLabel={resolvedEmptyLabel}\n\t\t\t\t\tclassName={resolvedClassName}\n\t\t\t\t/>\n\t\t\t);\n\t\tcase 'url':\n\t\t\treturn (\n\t\t\t\t<Url\n\t\t\t\t\tvalue={typeof value === 'string' ? value : undefined}\n\t\t\t\t\tdisplay={descriptor.display}\n\t\t\t\t\temptyLabel={resolvedEmptyLabel}\n\t\t\t\t\tclassName={resolvedClassName}\n\t\t\t\t/>\n\t\t\t);\n\t\tcase 'money':\n\t\t\treturn (\n\t\t\t\t<Money\n\t\t\t\t\ttype=\"inherit\"\n\t\t\t\t\tamount={typeof value === 'number' || typeof value === 'string' ? value : null}\n\t\t\t\t\tcurrency={descriptor.currency}\n\t\t\t\t\tlocale={descriptor.locale}\n\t\t\t\t\tcurrencyDisplay={descriptor.currencyDisplay}\n\t\t\t\t\tminimumFractionDigits={descriptor.minimumFractionDigits}\n\t\t\t\t\tmaximumFractionDigits={descriptor.maximumFractionDigits}\n\t\t\t\t\tformatMode={descriptor.formatMode}\n\t\t\t\t\temptyLabel={resolvedEmptyLabel}\n\t\t\t\t\tsize=\"inherit\"\n\t\t\t\t\tweight={weight}\n\t\t\t\t\tclassName={resolvedClassName}\n\t\t\t\t/>\n\t\t\t);\n\t\tcase 'number':\n\t\t\treturn (\n\t\t\t\t<NumberValue\n\t\t\t\t\ttype=\"inherit\"\n\t\t\t\t\tvalue={typeof value === 'number' || typeof value === 'string' ? value : null}\n\t\t\t\t\tlocale={descriptor.locale}\n\t\t\t\t\toptions={descriptor.options}\n\t\t\t\t\temptyLabel={resolvedEmptyLabel}\n\t\t\t\t\tsize=\"inherit\"\n\t\t\t\t\tweight={weight}\n\t\t\t\t\tclassName={resolvedClassName}\n\t\t\t\t/>\n\t\t\t);\n\t\tcase 'percent':\n\t\t\treturn (\n\t\t\t\t<Percent\n\t\t\t\t\ttype=\"inherit\"\n\t\t\t\t\tvalue={typeof value === 'number' || typeof value === 'string' ? value : null}\n\t\t\t\t\tlocale={descriptor.locale}\n\t\t\t\t\tscaled={descriptor.scaled}\n\t\t\t\t\toptions={descriptor.options}\n\t\t\t\t\temptyLabel={resolvedEmptyLabel}\n\t\t\t\t\tsize=\"inherit\"\n\t\t\t\t\tweight={weight}\n\t\t\t\t\tclassName={resolvedClassName}\n\t\t\t\t/>\n\t\t\t);\n\t\tcase 'fileSize':\n\t\t\treturn (\n\t\t\t\t<FileSize\n\t\t\t\t\ttype=\"inherit\"\n\t\t\t\t\tvalue={typeof value === 'number' ? value : null}\n\t\t\t\t\tfrom={descriptor.from}\n\t\t\t\t\tlocale={descriptor.locale}\n\t\t\t\t\temptyLabel={resolvedEmptyLabel}\n\t\t\t\t\tsize=\"inherit\"\n\t\t\t\t\tweight={weight}\n\t\t\t\t\tclassName={resolvedClassName}\n\t\t\t\t/>\n\t\t\t);\n\t\tcase 'date':\n\t\t\treturn (\n\t\t\t\t<DateValue\n\t\t\t\t\ttype=\"inherit\"\n\t\t\t\t\tvalue={value}\n\t\t\t\t\tformat={descriptor.dateFormat}\n\t\t\t\t\tpreset={descriptor.datePreset}\n\t\t\t\t\tlocale={descriptor.dateLocale}\n\t\t\t\t\temptyLabel={resolvedEmptyLabel}\n\t\t\t\t\tsize=\"inherit\"\n\t\t\t\t\tweight={weight}\n\t\t\t\t\tclassName={resolvedClassName}\n\t\t\t\t/>\n\t\t\t);\n\t\tcase 'time':\n\t\t\treturn (\n\t\t\t\t<Time\n\t\t\t\t\ttype=\"inherit\"\n\t\t\t\t\tvalue={value}\n\t\t\t\t\tformat={descriptor.timeFormat}\n\t\t\t\t\tlocale={descriptor.dateLocale}\n\t\t\t\t\temptyLabel={resolvedEmptyLabel}\n\t\t\t\t\tsize=\"inherit\"\n\t\t\t\t\tweight={weight}\n\t\t\t\t\tclassName={resolvedClassName}\n\t\t\t\t/>\n\t\t\t);\n\t\tcase 'dateTime':\n\t\t\treturn (\n\t\t\t\t<DateTime\n\t\t\t\t\ttype=\"inherit\"\n\t\t\t\t\tvalue={value}\n\t\t\t\t\tformat={descriptor.dateFormat}\n\t\t\t\t\ttimeFormat={descriptor.timeFormat}\n\t\t\t\t\tpreset={descriptor.datePreset}\n\t\t\t\t\tlocale={descriptor.dateLocale}\n\t\t\t\t\temptyLabel={resolvedEmptyLabel}\n\t\t\t\t\tsize=\"inherit\"\n\t\t\t\t\tweight={weight}\n\t\t\t\t\tclassName={resolvedClassName}\n\t\t\t\t/>\n\t\t\t);\n\t\tcase 'relativeTime':\n\t\t\treturn (\n\t\t\t\t<RelativeTime\n\t\t\t\t\tvalue={value}\n\t\t\t\t\tlocale={descriptor.dateLocale}\n\t\t\t\t\temptyLabel={resolvedEmptyLabel}\n\t\t\t\t\tsize=\"inherit\"\n\t\t\t\t\tweight={weight}\n\t\t\t\t\tclassName={resolvedClassName}\n\t\t\t\t/>\n\t\t\t);\n\t\tcase 'value':\n\t\tdefault:\n\t\t\treturn (\n\t\t\t\t<Value type=\"inherit\" size=\"inherit\" weight={weight} className={resolvedClassName}>\n\t\t\t\t\t{display}\n\t\t\t\t</Value>\n\t\t\t);\n\t}\n}\n\n/**\n * Table cell value with primitive-backed formatting and automatic missing-value treatment.\n *\n * @example\n * <CellValue value={booking.reference} kind=\"mono\" />\n * <CellValue value={booking.total} kind=\"money\" />\n */\nexport function CellValue({\n\tvalue,\n\tkind,\n\thref,\n\tcurrency,\n\tcurrencyDisplay,\n\tminimumFractionDigits,\n\tmaximumFractionDigits,\n\tformatMode,\n\tlocale,\n\tdateLocale,\n\tfrom,\n\tforce,\n\toptions,\n\tscaled,\n\tdateFormat,\n\tdatePreset,\n\ttimeFormat,\n\temptyLabel,\n\tfallback = EMPTY,\n\tmissing,\n\tclassName,\n\tchildren,\n}: CellValueProps) {\n\tconst isMissing = missing ?? isMissingPrimitive(value);\n\n\tif (children !== undefined) {\n\t\tconst Primitive = isMissing ? EmptyValue : Value;\n\t\treturn (\n\t\t\t<Primitive\n\t\t\t\ttype={isMissing ? 'secondary' : 'inherit'}\n\t\t\t\tsize=\"inherit\"\n\t\t\t\tclassName={cn('cell-value--component', className)}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</Primitive>\n\t\t);\n\t}\n\n\tif (isMissing) {\n\t\treturn (\n\t\t\t<EmptyValue size=\"inherit\" className={cn('cell-value--component', className)}>\n\t\t\t\t{emptyLabel ?? fallback}\n\t\t\t</EmptyValue>\n\t\t);\n\t}\n\n\treturn renderPrimitiveCellValue({\n\t\tdescriptor: {\n\t\t\tvalue,\n\t\t\tkind,\n\t\t\thref,\n\t\t\tcurrency,\n\t\t\tcurrencyDisplay,\n\t\t\tminimumFractionDigits,\n\t\t\tmaximumFractionDigits,\n\t\t\tformatMode,\n\t\t\tlocale,\n\t\t\tdateLocale,\n\t\t\tfrom,\n\t\t\tforce,\n\t\t\toptions,\n\t\t\tscaled,\n\t\t\tdateFormat,\n\t\t\tdatePreset,\n\t\t\ttimeFormat,\n\t\t\temptyLabel,\n\t\t\tclassName: 'cell-value--component',\n\t\t},\n\t\temptyLabel: emptyLabel ?? fallback,\n\t\tclassName,\n\t});\n}\n\n/**\n * Table cell stack for primary + secondary value rows.\n *\n * Values are normalized, null/undefined/empty-string entries are skipped, and\n * only the first four visible rows render. The first visible primitive defaults\n * to normal `Value`; later primitive rows default to smaller `SecondaryValue`.\n * Pass tuples/descriptors to opt into richer primitives such as `email`,\n * `phone`, `name`, `money`, `fileSize`, or `date`.\n *\n * @example\n * <CellStack values={[\n * booking.contactName,\n * [booking.contactEmail, 'email'],\n * [booking.contactPhone, 'phone'],\n * ]} />\n */\nexport function CellStack({\n\tvalues = [],\n\temptyLabel = EMPTY,\n\tclassName,\n\titemClassName,\n\tprimaryClassName,\n\tsecondaryClassName,\n\tprimaryWeight = 'medium',\n}: CellStackProps) {\n\tconst visibleValues = values\n\t\t.map(normalizeCellValue)\n\t\t.filter((value): value is CellValueDescriptor | ReactElement => value !== null)\n\t\t.slice(0, 4);\n\n\tif (visibleValues.length === 0) {\n\t\treturn (\n\t\t\t<EmptyValue size=\"inherit\" className={cn('cell-stack--component', className)}>\n\t\t\t\t{emptyLabel}\n\t\t\t</EmptyValue>\n\t\t);\n\t}\n\n\treturn (\n\t\t<div className={cn('cell-stack--component flex min-w-0 flex-col items-start gap-space-2xs', className)}>\n\t\t\t{visibleValues.map((value, index) => {\n\t\t\t\tconst isPrimary = index === 0;\n\t\t\t\tconst resolvedClassName = cn(\n\t\t\t\t\t'cell-stack--item min-w-0 max-w-full truncate',\n\t\t\t\t\t!isPrimary && 'text-xs',\n\t\t\t\t\titemClassName,\n\t\t\t\t\tisPrimary ? primaryClassName : secondaryClassName,\n\t\t\t\t);\n\n\t\t\t\tif (isValidElement(value)) {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<div key={index} className={resolvedClassName}>\n\t\t\t\t\t\t\t{value}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn (\n\t\t\t\t\t<div key={index} className={resolvedClassName}>\n\t\t\t\t\t\t{renderPrimitiveCellValue({\n\t\t\t\t\t\t\tdescriptor: value,\n\t\t\t\t\t\t\tindex,\n\t\t\t\t\t\t\temptyLabel,\n\t\t\t\t\t\t\tclassName: cn('leading-tight', !isPrimary && 'text-xs'),\n\t\t\t\t\t\t\tprimaryWeight,\n\t\t\t\t\t\t})}\n\t\t\t\t\t</div>\n\t\t\t\t);\n\t\t\t})}\n\t\t</div>\n\t);\n}\n\nCellValue.displayName = 'CellValue';\nCellStack.displayName = 'CellStack';\n","import type { AnchorHTMLAttributes } from 'react';\n\nimport { Link } from '../../../primitives';\nimport { cn } from '../../../../lib/utils';\n\nexport type TableLinkProps = AnchorHTMLAttributes<HTMLAnchorElement>;\n\nexport const TableLink = ({ className, ...props }: TableLinkProps) => {\n\treturn (\n\t\t<Link\n\t\t\tclassName={cn(\n\t\t\t\t'table-link--component',\n\t\t\t\t'underline decoration-link-color/35 decoration-dotted underline-offset-2 hover:decoration-link-color',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{props.children}\n\t\t</Link>\n\t);\n};\n","import type { ComponentType, ReactNode } from 'react';\nimport type { LucideIcon } from 'lucide-react';\n\nimport { Avatar, AvatarFallback, AvatarImage } from '../../../base/avatar';\nimport { Badge, type BadgeTone } from '../../../base/badge';\nimport { Stack } from '../../../base/structure';\nimport { Initials } from '../../../primitives';\nimport { formatInitials } from '../../../primitives/initials-format';\nimport { Text, TextLink } from '../../../typography';\nimport { EMPTY } from '../../../../lib/format';\nimport { cn } from '../../../../lib/utils';\nimport { focusRecipes } from '../../../../lib/focus-recipes';\n\nexport interface ResourceCellMetadataItem {\n\t/** Stable identity for this entry. */\n\tid?: string;\n\t/** Display label. */\n\tlabel?: ReactNode;\n\tvalue: ReactNode;\n}\n\nexport type ResourceCellBadge =\n\t| ReactNode\n\t| ({\n\t\t\tid?: string;\n\t\t\tlabel: ReactNode;\n\t\t\ttone?: BadgeTone;\n\t\t\ticon?: LucideIcon;\n\t\t\tdot?: boolean;\n\t });\n\nexport interface ResourceCellLinkProps {\n\t/** Destination for the entry, when it navigates. */\n\thref: string;\n\tchildren: ReactNode;\n\t/** Merged onto the outermost node. */\n\tclassName?: string;\n\t'aria-label'?: string;\n}\n\nexport interface ResourceCellProps {\n\t/** Surface title. */\n\ttitle?: ReactNode;\n\t/** Secondary line under the title. */\n\tsubtitle?: ReactNode;\n\t/** Label/value facts rendered as a metadata list. */\n\tmetadata?: ReactNode | readonly ResourceCellMetadataItem[];\n\t/** Status chips shown after the title. */\n\tbadges?: readonly ResourceCellBadge[];\n\t/**\n\t * Thumbnail source. When it is absent or fails to load, the circle shows\n\t * `fallback`, then `icon`, then the title's initials.\n\t */\n\timageUrl?: string;\n\t/** Leading glyph in the media circle. Pass one only when it identifies the resource. */\n\ticon?: ComponentType<{ className?: string }>;\n\t/**\n\t * Media shown when `imageUrl` is absent or fails — usually\n\t * `<Initials value={name} />` for a person or organization.\n\t *\n\t * The cell draws its media circle only when `imageUrl`, `icon` or\n\t * `fallback` is supplied, so identifiers such as orders and invoices read\n\t * as plain text with no decorative monogram. In a person column where only\n\t * some rows have a photo, pass `fallback` on every row so titles align.\n\t */\n\tfallback?: ReactNode;\n\t/** Destination for the entry, when it navigates. */\n\thref?: string;\n\t/** Replaces the default link rendering. */\n\trenderLink?: (props: ResourceCellLinkProps) => ReactNode;\n\t/** Copy shown when the cell has no title. */\n\temptyLabel?: ReactNode;\n\t/** Merged onto the outermost node. */\n\tclassName?: string;\n\t/**\n\t * `circle` for people and organizations; `square` (the default radius) for\n\t * product photos and documents, so square images are not clipped.\n\t * @default 'circle'\n\t */\n\tmediaShape?: 'circle' | 'square';\n\t/** Merged onto the media. */\n\tmediaClassName?: string;\n\t/** Merged onto the content. */\n\tcontentClassName?: string;\n\t/** Merged onto the title. */\n\ttitleClassName?: string;\n\t/** Merged onto the subtitle. */\n\tsubtitleClassName?: string;\n}\n\nfunction renderResourceBadge(badge: ResourceCellBadge, index: number): ReactNode {\n\tif (\n\t\tbadge &&\n\t\ttypeof badge === 'object' &&\n\t\t!('type' in badge) &&\n\t\t'label' in badge\n\t) {\n\t\tconst Icon = badge.icon;\n\t\treturn (\n\t\t\t<Badge key={badge.id ?? index} tone={badge.tone ?? 'secondary'} dot={badge.dot}>\n\t\t\t\t{!!Icon && <Icon className=\"size-icon-sm\" />}\n\t\t\t\t{badge.label}\n\t\t\t</Badge>\n\t\t);\n\t}\n\n\treturn <span key={index}>{badge}</span>;\n}\n\nfunction renderResourceMetadata(metadata: ResourceCellProps['metadata']): ReactNode {\n\tif (!metadata) return null;\n\tif (Array.isArray(metadata)) {\n\t\treturn (\n\t\t\t<span className=\"inline-flex min-w-0 flex-wrap items-center gap-x-space-md gap-y-space-2xs\">\n\t\t\t\t{metadata.map((item, index) => (\n\t\t\t\t\t<span key={item.id ?? index} className=\"inline-flex min-w-0 items-center gap-space-sm\">\n\t\t\t\t\t\t{!!item.label && (\n\t\t\t\t\t\t\t<Text tag=\"span\" size=\"inherit\" type=\"secondary\" className=\"shrink-0\">\n\t\t\t\t\t\t\t\t{item.label}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t<Text tag=\"span\" size=\"inherit\" type=\"secondary\" className=\"truncate\">\n\t\t\t\t\t\t\t{item.value}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t</span>\n\t\t\t\t))}\n\t\t\t</span>\n\t\t);\n\t}\n\n\treturn metadata as ReactNode;\n}\n\nexport function ResourceCell({\n\ttitle,\n\tsubtitle,\n\tmetadata,\n\tbadges = [],\n\timageUrl,\n\ticon: IconComponent,\n\tfallback,\n\thref,\n\trenderLink,\n\temptyLabel = EMPTY,\n\tclassName,\n\tmediaShape = 'circle',\n\tmediaClassName,\n\tcontentClassName,\n\ttitleClassName,\n\tsubtitleClassName,\n}: ResourceCellProps) {\n\tif (!title) {\n\t\treturn (\n\t\t\t<Text size=\"inherit\" type=\"secondary\" className={className}>\n\t\t\t\t{emptyLabel}\n\t\t\t</Text>\n\t\t);\n\t}\n\n\tconst titleText = typeof title === 'string' ? title : undefined;\n\tconst initials = titleText\n\t\t? formatInitials(titleText, { strategy: 'first-words' })\n\t\t: '';\n\tconst content = (\n\t\t<Stack render={<span />} gap=\"dense\" className={cn('resource-cell--content', contentClassName)}>\n\t\t\t<Stack render={<span />} direction=\"horizontal\" gap=\"sm\" wrap={false} className=\"resource-cell--title-row\">\n\t\t\t\t<Text\n\t\t\t\t\ttype=\"inherit\"\n\t\t\t\t\ttag=\"span\"\n\t\t\t\t\tsize=\"inherit\"\n\t\t\t\t\tweight=\"medium\"\n\t\t\t\t\t// The full title stays available when the column truncates it.\n\t\t\t\t\ttitle={titleText}\n\t\t\t\t\tclassName={cn('resource-cell--title truncate', titleClassName)}\n\t\t\t\t>\n\t\t\t\t\t{title}\n\t\t\t\t</Text>\n\t\t\t\t{badges.length > 0 && (\n\t\t\t\t\t<span className=\"resource-cell--badges inline-flex shrink-0 items-center gap-space-sm\">\n\t\t\t\t\t\t{badges.map(renderResourceBadge)}\n\t\t\t\t\t</span>\n\t\t\t\t)}\n\t\t\t</Stack>\n\t\t\t{!!subtitle && (\n\t\t\t\t<Text\n\t\t\t\t\ttag=\"span\"\n\t\t\t\t\tsize=\"inherit\"\n\t\t\t\t\ttype=\"secondary\"\n\t\t\t\t\tclassName={cn('resource-cell--subtitle truncate', subtitleClassName)}\n\t\t\t\t>\n\t\t\t\t\t{subtitle}\n\t\t\t\t</Text>\n\t\t\t)}\n\t\t\t{!!metadata && (\n\t\t\t\t<span className=\"resource-cell--metadata min-w-0\">\n\t\t\t\t\t{renderResourceMetadata(metadata)}\n\t\t\t\t</span>\n\t\t\t)}\n\t\t</Stack>\n\t);\n\tconst hasFallback = fallback !== undefined && fallback !== null && fallback !== false && fallback !== '';\n\t// Media is opt-in: a monogram derived from \"ORD-2048\" carries no information.\n\tconst hasMedia = !!imageUrl || !!IconComponent || hasFallback;\n\tconst square = mediaShape === 'square';\n\tconst cell = (\n\t\t<span className={cn('resource-cell--component inline-flex min-w-0 items-center gap-space-md', className)}>\n\t\t\t{/* The public Avatar owns the frame, the image load and its fallback. */}\n\t\t\t{hasMedia && (\n\t\t\t\t<Avatar size=\"md\" data-shape={mediaShape} className={cn('resource-cell--media', square && 'rounded-radius after:rounded-radius', mediaClassName)}>\n\t\t\t\t\t{!!imageUrl && <AvatarImage src={imageUrl} alt={titleText ?? ''} className={cn(square && 'rounded-radius')} />}\n\t\t\t\t\t<AvatarFallback className={cn(square && 'rounded-radius')}>\n\t\t\t\t\t\t{hasFallback ? (\n\t\t\t\t\t\t\tfallback\n\t\t\t\t\t\t) : IconComponent ? (\n\t\t\t\t\t\t\t<IconComponent className=\"size-icon\" />\n\t\t\t\t\t\t) : initials ? (\n\t\t\t\t\t\t\t<Initials value={titleText} strategy=\"first-words\" />\n\t\t\t\t\t\t) : null}\n\t\t\t\t\t</AvatarFallback>\n\t\t\t\t</Avatar>\n\t\t\t)}\n\t\t\t{content}\n\t\t</span>\n\t);\n\n\tif (!href) return cell;\n\n\tconst linkClassName = `resource-cell--link inline-flex min-w-0 rounded-radius outline-none ${focusRecipes.text}`;\n\tif (renderLink) {\n\t\treturn renderLink({\n\t\t\thref,\n\t\t\tchildren: cell,\n\t\t\tclassName: linkClassName,\n\t\t\t'aria-label': titleText,\n\t\t});\n\t}\n\n\treturn (\n\t\t<TextLink\n\t\t\thref={href}\n\t\t\tsize=\"inherit\"\n\t\t\tunderline={false}\n\t\t\tclassName={linkClassName}\n\t\t\taria-label={titleText}\n\t\t>\n\t\t\t{cell}\n\t\t</TextLink>\n\t);\n}\n\nResourceCell.displayName = 'ResourceCell';\n","/**\n * Reusable cell renderers for DataTable columns.\n *\n * Use these from `column.cell` definitions to keep table preview pages and\n * production code consistent. Every renderer is presentational (no data\n * fetching) and accepts the value plus optional formatting hints.\n *\n * { accessorKey: 'status', cell: ({ getValue }) => <StatusCell value={getValue()} map={STATUS_MAP} /> }\n * { accessorKey: 'createdAt', cell: ({ getValue }) => <DateCell value={getValue()} /> }\n * { accessorKey: 'amount', cell: ({ getValue }) => <CurrencyCell value={getValue()} currency=\"USD\" /> }\n * { accessorKey: 'owner', cell: ({ getValue }) => <AvatarCell name={getValue()} /> }\n */\nimport type { ComponentType, ReactNode } from 'react';\nimport { Calendar, Mail, type LucideIcon } from 'lucide-react';\n\nimport { Avatar, AvatarFallback, AvatarImage } from '../../../base/avatar';\nimport { Badge, type BadgeTone } from '../../../base/badge';\nimport {\n\tDate as DateValue,\n\tInitials,\n\tMoney,\n\tparseDateInput,\n\ttype DateProps,\n} from '../../../primitives';\nimport { formatInitials } from '../../../primitives/initials-format';\nimport { Text } from '../../../typography';\nimport { EMPTY } from '../../../../lib/format';\nimport { cn } from '../../../../lib/utils';\n\n// ──────────────────────────────────────────────────────────────\n// StatusCell\n// ──────────────────────────────────────────────────────────────\n\nexport interface StatusCellEntry {\n\t/** Display label. */\n\tlabel: ReactNode;\n\ttone?: BadgeTone;\n\t/** Leading glyph. */\n\ticon?: LucideIcon;\n\tdot?: boolean;\n}\n\nexport interface StatusCellProps<TStatus extends string> {\n\t/** The record's status. */\n\tvalue?: TStatus | null;\n\t/** Label and tone for every status this column can show. */\n\tmap: Record<TStatus, StatusCellEntry>;\n\t/** Copy shown when the status is absent or missing from `map`. */\n\t/** Copy shown when the value is absent. */\n\temptyLabel?: ReactNode;\n\t/** Merged onto the outermost node. */\n\tclassName?: string;\n}\n\nexport function StatusCell<TStatus extends string>({\n\tvalue,\n\tmap,\n\temptyLabel = EMPTY,\n\tclassName,\n}: StatusCellProps<TStatus>) {\n\tif (!value || !(value in map)) {\n\t\treturn (\n\t\t\t<Text size=\"inherit\" type=\"secondary\" className={cn('status-cell--component', className)}>\n\t\t\t\t{emptyLabel}\n\t\t\t</Text>\n\t\t);\n\t}\n\tconst entry = map[value];\n\tconst Icon = entry.icon;\n\treturn (\n\t\t<Badge\n\t\t\ttone={entry.tone ?? 'secondary'}\n\t\t\tdot={entry.dot}\n\t\t\tclassName={cn('status-cell--component gap-space-sm', className)}\n\t\t>\n\t\t\t{!!Icon && <Icon className=\"size-icon-sm\" />}\n\t\t\t{entry.label}\n\t\t</Badge>\n\t);\n}\n\nStatusCell.displayName = 'StatusCell';\n\n// ──────────────────────────────────────────────────────────────\n// StatusClusterCell\n// ──────────────────────────────────────────────────────────────\n\nexport interface StatusClusterCellItem {\n\t/** Stable identity for this entry. */\n\tid?: string;\n\t/** Display label. */\n\tlabel: ReactNode;\n\ttone?: BadgeTone;\n\t/** Leading glyph. */\n\ticon?: LucideIcon;\n\tdot?: boolean;\n\thidden?: boolean;\n}\n\nexport interface StatusClusterCellProps {\n\t/** Status chips to show side by side in one cell. */\n\titems?: readonly StatusClusterCellItem[];\n\t/** Copy shown when there are no items. */\n\t/** Copy shown when the value is absent. */\n\temptyLabel?: ReactNode;\n\t/** Merged onto the outermost node. */\n\tclassName?: string;\n\t/** Merged onto the badge. */\n\tbadgeClassName?: string;\n}\n\nexport function StatusClusterCell({\n\titems = [],\n\temptyLabel = EMPTY,\n\tclassName,\n\tbadgeClassName,\n}: StatusClusterCellProps) {\n\tconst visibleItems = items.filter((item) => !item.hidden);\n\n\tif (visibleItems.length === 0) {\n\t\treturn (\n\t\t\t<Text size=\"inherit\" type=\"secondary\" className={cn('status-cluster-cell--component', className)}>\n\t\t\t\t{emptyLabel}\n\t\t\t</Text>\n\t\t);\n\t}\n\n\treturn (\n\t\t<span className={cn('status-cluster-cell--component inline-flex min-w-0 flex-wrap items-center gap-space-sm', className)}>\n\t\t\t{visibleItems.map((item, index) => {\n\t\t\t\tconst Icon = item.icon;\n\t\t\t\treturn (\n\t\t\t\t\t<Badge\n\t\t\t\t\t\tkey={item.id ?? index}\n\t\t\t\t\t\ttone={item.tone ?? 'secondary'}\n\t\t\t\t\t\tdot={item.dot}\n\t\t\t\t\t\tclassName={cn('shrink-0', badgeClassName)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{!!Icon && <Icon className=\"size-icon-sm\" />}\n\t\t\t\t\t\t{item.label}\n\t\t\t\t\t</Badge>\n\t\t\t\t);\n\t\t\t})}\n\t\t</span>\n\t);\n}\n\nStatusClusterCell.displayName = 'StatusClusterCell';\n\n// ──────────────────────────────────────────────────────────────\n// DateCell\n// ──────────────────────────────────────────────────────────────\n\nexport interface DateCellProps {\n\t/** The date to render. */\n\tvalue?: DateProps['value'];\n\t/** date-fns format string. Falls back to the Date primitive/provider default. */\n\tformat?: DateProps['format'];\n\t/** Semantic Date primitive preset. */\n\tpreset?: DateProps['preset'];\n\t/** date-fns locale override. Falls back to UIProvider dates. */\n\tlocale?: DateProps['locale'];\n\t/** Renders the leading glyph. Off by default: a repeated calendar glyph on every row adds no information. */\n\tshowIcon?: boolean;\n\t/** Leading glyph. */\n\ticon?: ComponentType<{ className?: string }>;\n\t/** Copy shown when the value is absent. */\n\temptyLabel?: ReactNode;\n\t/** Merged onto the outermost node. */\n\tclassName?: string;\n}\n\nexport function DateCell({\n\tvalue,\n\tformat,\n\tpreset,\n\tlocale,\n\tshowIcon = false,\n\ticon: IconComponent = Calendar,\n\temptyLabel = EMPTY,\n\tclassName,\n}: DateCellProps) {\n\tconst date = parseDateInput(value);\n\tif (!date) {\n\t\treturn (\n\t\t\t<Text size=\"inherit\" type=\"secondary\" className={cn('date-cell--component', className)}>\n\t\t\t\t{emptyLabel}\n\t\t\t</Text>\n\t\t);\n\t}\n\treturn (\n\t\t<span className={cn('date-cell--component inline-flex items-center gap-space-sm', className)}>\n\t\t\t{!!showIcon && <IconComponent className=\"size-icon text-muted-foreground\" />}\n\t\t\t<DateValue\n\t\t\t\tvalue={date}\n\t\t\t\tformat={format}\n\t\t\t\tpreset={preset}\n\t\t\t\tlocale={locale}\n\t\t\t\temptyLabel={emptyLabel}\n\t\t\t\tsize=\"inherit\"\n\t\t\t\ttype=\"secondary\"\n\t\t\t/>\n\t\t</span>\n\t);\n}\n\nDateCell.displayName = 'DateCell';\n\n// ──────────────────────────────────────────────────────────────\n// DateMetaCell\n// ──────────────────────────────────────────────────────────────\n\nexport interface DateMetaCellProps extends DateCellProps {\n\t/** Second line under the date — pass a function to derive it from the value. */\n\tsecondary?: ReactNode | ((date: Date) => ReactNode);\n\t/** Merged onto the primary. */\n\tprimaryClassName?: string;\n\t/** Merged onto the secondary. */\n\tsecondaryClassName?: string;\n}\n\nexport function DateMetaCell({\n\tvalue,\n\tformat,\n\tpreset,\n\tlocale,\n\tshowIcon = false,\n\ticon: IconComponent = Calendar,\n\temptyLabel = EMPTY,\n\tclassName,\n\tprimaryClassName,\n\tsecondary,\n\tsecondaryClassName,\n}: DateMetaCellProps) {\n\tconst date = parseDateInput(value);\n\tif (!date) {\n\t\treturn (\n\t\t\t<Text size=\"inherit\" type=\"secondary\" className={cn('date-meta-cell--component', className)}>\n\t\t\t\t{emptyLabel}\n\t\t\t</Text>\n\t\t);\n\t}\n\n\tconst secondaryNode = typeof secondary === 'function' ? secondary(date) : secondary;\n\n\treturn (\n\t\t<span className={cn('date-meta-cell--component inline-flex min-w-0 items-start gap-space-sm', className)}>\n\t\t\t{!!showIcon && <IconComponent className=\"mt-space-2xs size-icon shrink-0 text-muted-foreground\" />}\n\t\t\t<span className=\"grid min-w-0 gap-space-2xs\">\n\t\t\t\t<DateValue\n\t\t\t\t\tvalue={date}\n\t\t\t\t\tformat={format}\n\t\t\t\t\tpreset={preset}\n\t\t\t\t\tlocale={locale}\n\t\t\t\t\temptyLabel={emptyLabel}\n\t\t\t\t\tsize=\"inherit\"\n\t\t\t\t\ttype=\"secondary\"\n\t\t\t\t\tclassName={cn('truncate tabular-nums', primaryClassName)}\n\t\t\t\t/>\n\t\t\t\t{!!secondaryNode && (\n\t\t\t\t\t<Text\n\t\t\t\t\t\ttag=\"span\"\n\t\t\t\t\t\tsize=\"inherit\"\n\t\t\t\t\t\ttype=\"secondary\"\n\t\t\t\t\t\tclassName={cn('truncate', secondaryClassName)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{secondaryNode}\n\t\t\t\t\t</Text>\n\t\t\t\t)}\n\t\t\t</span>\n\t\t</span>\n\t);\n}\n\nDateMetaCell.displayName = 'DateMetaCell';\n\n// ──────────────────────────────────────────────────────────────\n// CurrencyCell\n// ──────────────────────────────────────────────────────────────\n\nexport interface CurrencyCellProps {\n\t/** The amount to render. */\n\tvalue?: number | string | null;\n\t/** ISO currency code. */\n\tcurrency?: string;\n\t/** BCP 47 locale for the amount. */\n\tlocale?: string;\n\t/** Copy shown when the amount is absent. */\n\t/** Copy shown when the value is absent. */\n\temptyLabel?: ReactNode;\n\t/** Merged onto the outermost node. */\n\tclassName?: string;\n\t/** Weight of the amount. */\n\tweight?: 'regular' | 'medium' | 'semibold' | 'bold';\n}\n\nexport function CurrencyCell({\n\tvalue,\n\tcurrency,\n\tlocale,\n\temptyLabel = EMPTY,\n\tclassName,\n\tweight = 'semibold',\n}: CurrencyCellProps) {\n\treturn (\n\t\t<Money\n\t\t\ttype=\"inherit\"\n\t\t\tamount={value}\n\t\t\tcurrency={currency}\n\t\t\tlocale={locale}\n\t\t\tformatMode={currency ? 'with_symbol' : 'decimal'}\n\t\t\temptyLabel={emptyLabel}\n\t\t\tsize=\"inherit\"\n\t\t\tweight={weight}\n\t\t\tclassName={cn('currency-cell--component tabular-nums', className)}\n\t\t/>\n\t);\n}\n\nCurrencyCell.displayName = 'CurrencyCell';\n\n// ──────────────────────────────────────────────────────────────\n// AvatarCell\n// ──────────────────────────────────────────────────────────────\n\nexport interface AvatarCellProps {\n\t/** Display name. */\n\tname?: string | null;\n\t/** Avatar source. Falls back to initials when absent or broken. */\n\timageUrl?: string;\n\t/** Leading glyph. */\n\ticon?: ComponentType<{ className?: string }>;\n\t/** Secondary line under the name. */\n\tsubtitle?: ReactNode;\n\t/** Copy shown when the value is absent. */\n\temptyLabel?: ReactNode;\n\t/** Merged onto the outermost node. */\n\tclassName?: string;\n}\n\nexport function AvatarCell({\n\tname,\n\timageUrl,\n\ticon: IconComponent = Mail,\n\tsubtitle,\n\temptyLabel = EMPTY,\n\tclassName,\n}: AvatarCellProps) {\n\tif (!name || name.trim().length === 0) {\n\t\treturn (\n\t\t\t<Text size=\"inherit\" type=\"secondary\" className={cn('avatar-cell--component', className)}>\n\t\t\t\t{emptyLabel}\n\t\t\t</Text>\n\t\t);\n\t}\n\treturn (\n\t\t<span className={cn('avatar-cell--component inline-flex items-center gap-space-md', className)}>\n\t\t\t{/* The public Avatar owns the frame, the image load and its fallback. */}\n\t\t\t<Avatar size=\"sm\" className=\"avatar-cell--avatar\">\n\t\t\t\t{!!imageUrl && <AvatarImage src={imageUrl} alt={name} />}\n\t\t\t\t<AvatarFallback>\n\t\t\t\t\t{formatInitials(name, { strategy: 'first-words' }) ? (\n\t\t\t\t\t\t<Initials value={name} strategy=\"first-words\" />\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<IconComponent className=\"size-icon\" />\n\t\t\t\t\t)}\n\t\t\t\t</AvatarFallback>\n\t\t\t</Avatar>\n\t\t\t<span className=\"min-w-0 inline-flex flex-col\">\n\t\t\t\t<Text type=\"inherit\" size=\"inherit\" weight=\"medium\" className=\"truncate\">\n\t\t\t\t\t{name}\n\t\t\t\t</Text>\n\t\t\t\t{!!subtitle && (\n\t\t\t\t\t<Text size=\"inherit\" type=\"secondary\" className=\"truncate\">\n\t\t\t\t\t\t{subtitle}\n\t\t\t\t\t</Text>\n\t\t\t\t)}\n\t\t\t</span>\n\t\t</span>\n\t);\n}\n\nAvatarCell.displayName = 'AvatarCell';\n\nexport {\n\tResourceCell,\n\ttype ResourceCellBadge,\n\ttype ResourceCellLinkProps,\n\ttype ResourceCellMetadataItem,\n\ttype ResourceCellProps,\n} from './resource-cell';\n"],"mappings":"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"}
|