themelia-react-ui 2.0.5 → 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 +326 -0
- package/MIGRATION.md +858 -0
- package/README.md +35 -24
- package/dist/{accordion-B9MHG0cT.js → accordion-DNVqwEIC.js} +37 -37
- 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-Dg_69lPS.js → attachment-D2-fpfmv.js} +15 -15
- package/dist/{attachment-Dg_69lPS.js.map → attachment-D2-fpfmv.js.map} +1 -1
- package/dist/{auth-DTkkshS8.js → auth-g_oUTDDC.js} +236 -243
- package/dist/auth-g_oUTDDC.js.map +1 -0
- package/dist/{avatar-CeZaFmNH.js → avatar-Ca3Ihrq4.js} +4 -4
- package/dist/{avatar-CeZaFmNH.js.map → avatar-Ca3Ihrq4.js.map} +1 -1
- package/dist/{badge-xIiV_E7f.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 +208 -198
- 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 +8 -14
- 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-Cb8cuvyy.js → batch-action-bar-D6MZQNnC.js} +10 -10
- package/dist/{batch-action-bar-Cb8cuvyy.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 +398 -354
- 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 +173 -1392
- 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 +1533 -1399
- 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-CQ9JSlez.js +136 -0
- package/dist/breadcrumbs-CQ9JSlez.js.map +1 -0
- package/dist/{button-S2Cubiiz.js → button-rd6FiHfQ.js} +12 -8
- package/dist/button-rd6FiHfQ.js.map +1 -0
- package/dist/{buttons-BedGfygC.js → buttons-pZVgPTZn.js} +230 -246
- package/dist/buttons-pZVgPTZn.js.map +1 -0
- package/dist/{cards-rNX1M4Xn.js → cards-CgWyqvgZ.js} +25 -22
- package/dist/{cards-rNX1M4Xn.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-Darg_0Kv.js → chart-CygRCyIZ.js} +5 -5
- package/dist/{chart-Darg_0Kv.js.map → chart-CygRCyIZ.js.map} +1 -1
- package/dist/{checkbox-fflqmODR.js → checkbox-Dy5_XBMZ.js} +4 -4
- package/dist/{checkbox-fflqmODR.js.map → checkbox-Dy5_XBMZ.js.map} +1 -1
- package/dist/{choice-inputs-zUgBZfE4.js → choice-inputs-oJEsrb5Y.js} +195 -184
- package/dist/choice-inputs-oJEsrb5Y.js.map +1 -0
- package/dist/{code-block-BzmM9Eig.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-gDh1v6O4.js → collection-content-D7SoDlYd.js} +3 -3
- package/dist/{collection-content-gDh1v6O4.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/choice-types.d.ts +4 -0
- package/dist/components/base/choice-inputs/pill-radio-group.d.ts +7 -6
- 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/combobox/combobox-field.d.ts +2 -2
- package/dist/components/base/command/command.d.ts +1 -1
- package/dist/components/base/date-pickers/date-picker-internals.d.ts +3 -1
- package/dist/components/base/date-pickers/datepicker.types.d.ts +11 -7
- package/dist/components/base/date-pickers/time-picker.d.ts +17 -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/feedback/state-display.d.ts +5 -1
- package/dist/components/base/feedback/state-display.strings.d.ts +9 -0
- package/dist/components/base/forms/form-field.d.ts +7 -2
- package/dist/components/base/forms/workflow.d.ts +2 -2
- package/dist/components/base/forms-numeric/coordinates-input.d.ts +4 -1
- package/dist/components/base/forms-numeric/decimal-input.d.ts +2 -2
- package/dist/components/base/forms-numeric/dimensions-input.d.ts +13 -18
- package/dist/components/base/forms-numeric/index.d.ts +3 -3
- package/dist/components/base/forms-numeric/numeric-composite-field.d.ts +12 -0
- package/dist/components/base/forms-numeric/weight-input.d.ts +6 -1
- 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 +17 -8
- 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 +6 -1
- 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 +40 -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/avatar-upload.d.ts +2 -1
- package/dist/components/base/upload/file-upload.validation.d.ts +37 -1
- package/dist/components/base/upload/image-upload.d.ts +4 -1
- 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 +8 -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-reasoning/types.d.ts +2 -0
- package/dist/components/blocks/ai/ai-sources/ai-sources.d.ts +1 -1
- package/dist/components/blocks/ai/ai-sources/types.d.ts +10 -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 +8 -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 +7 -3
- package/dist/components/blocks/analytics/metric-comparison/metric-comparison.d.ts +2 -0
- package/dist/components/blocks/analytics/metric-grid/metric-grid.d.ts +4 -5
- package/dist/components/blocks/analytics/types.d.ts +13 -4
- 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 +12 -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 +10 -3
- 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 +46 -22
- package/dist/components/features/activities/hooks/use-activity-feed.d.ts +6 -0
- package/dist/components/features/activities/hooks/use-activity-resources.d.ts +2 -1
- 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/hooks/use-ai-chat-scroll.d.ts +1 -1
- 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 +20 -4
- 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 +4 -3
- package/dist/components/features/combobox/hooks/use-combobox-state.d.ts +1 -0
- package/dist/components/features/combobox/hooks/use-load-more.d.ts +1 -0
- package/dist/components/features/combobox/index.d.ts +1 -1
- package/dist/components/features/combobox/types.d.ts +68 -37
- 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 +19 -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/date-facet.d.ts +4 -2
- package/dist/components/features/filters/facets/range-facet.d.ts +24 -7
- 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 +75 -8
- 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/date-filter-content.d.ts +3 -2
- 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-popover-content.d.ts +4 -2
- package/dist/components/features/filters/partials/filter-tabs.d.ts +2 -1
- package/dist/components/features/filters/partials/range-filter-content.d.ts +12 -0
- package/dist/components/features/filters/partials/regular-filter-content.d.ts +1 -1
- package/dist/components/features/filters/utils/filter-utils.d.ts +34 -5
- 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 +39 -3
- package/dist/components/features/media-library/media-library.types.d.ts +82 -9
- package/dist/components/features/media-library/partials/media-library-partials.d.ts +3 -3
- package/dist/components/features/mentions/hooks/use-mentions-search.d.ts +7 -0
- package/dist/components/features/mentions/hooks/use-mentions.d.ts +16 -1
- 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 +12 -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/hooks/use-overlay-visibility.d.ts +2 -2
- 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 +26 -8
- package/dist/components/features/questionnaire/questionnaire.types.d.ts +7 -2
- 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 -147
- 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/form-rich-text-editor.d.ts +1 -1
- package/dist/components/features/rich-text-editor/partials/caret-helpers.d.ts +5 -7
- package/dist/components/features/rich-text-editor/partials/editor-field-aria.d.ts +14 -0
- 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 +5 -4
- package/dist/components/features/rich-text-editor/rich-text-editor.recipes.d.ts +1 -1
- package/dist/components/features/rich-text-editor/rich-text-editor.types.d.ts +30 -4
- package/dist/components/features/schema-form/hooks/use-schema-form.d.ts +10 -1
- package/dist/components/features/schema-form/partials/schema-form-field.d.ts +3 -1
- 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/schema-form/schema-form.utils.d.ts +1 -1
- package/dist/components/features/suggestions/suggestions.strings.d.ts +14 -0
- package/dist/components/features/suggestions/suggestions.types.d.ts +13 -5
- 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/index.d.ts +1 -0
- 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 +37 -12
- 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 +4 -0
- package/dist/components/features/table/table.types.d.ts +91 -49
- 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 +19 -8
- 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 +6 -4
- 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/navigation/side-nav.d.ts +3 -2
- package/dist/components/layout/normalize-layout-path.d.ts +1 -0
- 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 +4 -6
- 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 +17 -7
- package/dist/components/layout/sidebar/sidebar.context.d.ts +1 -0
- package/dist/components/layout/sidebar/sidebar.types.d.ts +12 -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 +11 -3
- package/dist/components/primitives/money.d.ts +2 -2
- package/dist/components/primitives/number.d.ts +3 -2
- package/dist/components/typography/heading.d.ts +9 -3
- package/dist/components/typography/index.d.ts +1 -1
- package/dist/components/typography/rich-text/rich-text-tree.d.ts +7 -5
- 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-CIxwbZt5.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-DIznBqiT.js → copyable-Bmr14W0d.js} +6 -6
- package/dist/{copyable-DIznBqiT.js.map → copyable-Bmr14W0d.js.map} +1 -1
- package/dist/{data-display-BdgCAw8T.js → data-display-CWe9SOYh.js} +264 -250
- 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-D1keJQIG.js +1617 -0
- 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-KsZLw9Ov.js → display-VlmP1I0i.js} +23 -46
- package/dist/display-VlmP1I0i.js.map +1 -0
- package/dist/{dropdown-menu-CLs8Lihj.js → dropdown-menu-B8hjvbkS.js} +9 -9
- package/dist/{dropdown-menu-CLs8Lihj.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 +767 -700
- package/dist/features/activities.js.map +1 -1
- package/dist/features/ai-chat.js +280 -235
- package/dist/features/ai-chat.js.map +1 -1
- package/dist/features/appointment-calendar.js +430 -334
- 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 +347 -313
- package/dist/features/email-composer.js.map +1 -1
- package/dist/features/event-calendar.js +501 -348
- package/dist/features/event-calendar.js.map +1 -1
- package/dist/features/filters.js +2 -2
- package/dist/features/global-search.js +250 -210
- package/dist/features/global-search.js.map +1 -1
- package/dist/features/kanban.js +280 -210
- package/dist/features/kanban.js.map +1 -1
- package/dist/features/map/style.css +15 -0
- package/dist/features/map.js +435 -404
- package/dist/features/map.js.map +1 -1
- package/dist/features/media-library.js +1745 -1195
- 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 +1862 -1759
- package/dist/features/products.js.map +1 -1
- package/dist/features/questionnaire.js +188 -168
- 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 -217
- package/dist/features/resource.js.map +1 -1
- package/dist/features/rich-text-editor.js +28 -19
- package/dist/features/rich-text-editor.js.map +1 -1
- package/dist/features/schema-form.js +380 -287
- package/dist/features/schema-form.js.map +1 -1
- package/dist/features/suggestions.js +90 -74
- package/dist/features/suggestions.js.map +1 -1
- package/dist/features/table.js +2 -2
- package/dist/features/theme-tweaker.js +718 -627
- 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-DWcNcOjh.js → field-affordance-recipes-DfbMadot.js} +13 -9
- package/dist/field-affordance-recipes-DfbMadot.js.map +1 -0
- package/dist/field-control-attributes-B6i335wr.js +18 -0
- package/dist/field-control-attributes-B6i335wr.js.map +1 -0
- package/dist/field-state-recipes-EtCxpEy3.js +18 -0
- 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-BdfCwSoQ.js +74 -0
- package/dist/form-field-BdfCwSoQ.js.map +1 -0
- package/dist/{form-sizing-Bs2qFUeE.js → form-sizing-DE_dZw32.js} +3 -3
- package/dist/{form-sizing-Bs2qFUeE.js.map → form-sizing-DE_dZw32.js.map} +1 -1
- package/dist/{forms-C0RGnJTe.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-DMMxG__r.js → header-Cq3G0ZRP.js} +163 -158
- package/dist/header-Cq3G0ZRP.js.map +1 -0
- package/dist/hooks/use-files.d.ts +2 -0
- package/dist/{hooks-DB6CJ4MR.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-DZF-YjQp.js → icon-badge-B0Kq7wom.js} +3 -3
- package/dist/{icon-badge-DZF-YjQp.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-DMBwAZmr.js → input-2YrgTUrz.js} +3 -3
- package/dist/{input-DMBwAZmr.js.map → input-2YrgTUrz.js.map} +1 -1
- package/dist/{input-CvyDQlY7.js → input-DfJyrjoR.js} +7 -7
- package/dist/{input-CvyDQlY7.js.map → input-DfJyrjoR.js.map} +1 -1
- package/dist/{interaction-recipes-XR9ZpVYL.js → interaction-recipes-DmuS1ase.js} +2 -2
- package/dist/{interaction-recipes-XR9ZpVYL.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-DbtnyAtd.js +33 -0
- 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-control-attributes.d.ts +11 -0
- package/dist/lib/field-state-recipes.d.ts +8 -0
- package/dist/lib/focus-recipes.d.ts +7 -0
- package/dist/lib/format.d.ts +26 -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 +33 -3
- package/dist/lib/theme-scope.d.ts +17 -1
- package/dist/lib/token-merge.generated.d.ts +19 -25
- 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-BiiVrRrm.js +138 -0
- package/dist/message-BiiVrRrm.js.map +1 -0
- package/dist/{metadata-list-C3MkU-Om.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-CmqaQR_G.js +257 -0
- package/dist/navigation-CmqaQR_G.js.map +1 -0
- package/dist/normalize-layout-path-BmEgg6fu.js +14 -0
- package/dist/normalize-layout-path-BmEgg6fu.js.map +1 -0
- package/dist/number-NFWKIoiK.js +340 -0
- package/dist/number-NFWKIoiK.js.map +1 -0
- package/dist/{overflow-tab-bar-IVFVQFV6.js → overflow-tab-bar-DV7HE_3t.js} +8 -8
- package/dist/{overflow-tab-bar-IVFVQFV6.js.map → overflow-tab-bar-DV7HE_3t.js.map} +1 -1
- package/dist/{overlays-BSgCtM2v.js → overlays-D-gAIfPF.js} +369 -364
- 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-7P3sfE9u.js → page-header-commands-elelNOfd.js} +29 -29
- package/dist/{page-header-commands-7P3sfE9u.js.map → page-header-commands-elelNOfd.js.map} +1 -1
- package/dist/{pagination-CgCjElfu.js → pagination-BuSWw1US.js} +22 -23
- package/dist/pagination-BuSWw1US.js.map +1 -0
- package/dist/popover-BpMxbqEK.js +205 -0
- package/dist/popover-BpMxbqEK.js.map +1 -0
- package/dist/{popover-menu-DlnQ2zlR.js → popover-menu-CO-_iiuz.js} +7 -7
- package/dist/{popover-menu-DlnQ2zlR.js.map → popover-menu-CO-_iiuz.js.map} +1 -1
- package/dist/{popover.recipes-DdiEp0rd.js → popover.recipes-BqkdvlZn.js} +3 -4
- package/dist/{popover.recipes-DdiEp0rd.js.map → popover.recipes-BqkdvlZn.js.map} +1 -1
- package/dist/{portal-recipes-BpsV_iRw.js → portal-recipes-BPeS4rGB.js} +2 -2
- package/dist/{portal-recipes-BpsV_iRw.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-BJhQP9WX.js → progress-RARK8AjB.js} +5 -5
- package/dist/{progress-BJhQP9WX.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-Cypm9__d.js +44 -0
- package/dist/rich-text-Cypm9__d.js.map +1 -0
- 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/{scroll-area-B0dB2cBi.js → scroll-area-B9HKbji0.js} +3 -3
- package/dist/{scroll-area-B0dB2cBi.js.map → scroll-area-B9HKbji0.js.map} +1 -1
- package/dist/{separator-Ct_WSWTJ.js → separator-DaDe26sf.js} +3 -3
- package/dist/separator-DaDe26sf.js.map +1 -0
- package/dist/{separator-Bb17I4pu.js → separator-KGsNXt2J.js} +2 -2
- package/dist/{separator-Bb17I4pu.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-f9gRWXIR.js → sidebar-C-iQ_TJP.js} +379 -350
- 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-BapcJd9C.js → skeleton-Cab_KgVo.js} +13 -13
- package/dist/skeleton-Cab_KgVo.js.map +1 -0
- package/dist/{smart-card-CW0hjetE.js → smart-card-C59z6KFO.js} +217 -210
- package/dist/smart-card-C59z6KFO.js.map +1 -0
- package/dist/{structure-DuxKl954.js → structure-DElaQwwN.js} +2 -2
- package/dist/{structure-DuxKl954.js.map → structure-DElaQwwN.js.map} +1 -1
- package/dist/style.css +1 -1
- package/dist/{surface-recipes-BKRVW8Os.js → surface-recipes-DV6rrOFq.js} +11 -3
- package/dist/surface-recipes-DV6rrOFq.js.map +1 -0
- package/dist/table-CSRUgpdK.js +180 -0
- 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-WnHfV2pM.js +192 -0
- package/dist/tabs-WnHfV2pM.js.map +1 -0
- package/dist/{text-inputs-B1culiSK.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-CzUJHnFs.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-BQnine1k.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-DMuMYJFT.js +875 -0
- package/dist/upload-DMuMYJFT.js.map +1 -0
- package/dist/{usage-card-BeSLY0i0.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-B6kKb8jB.js → utils-BVbAG2J6.js} +128 -112
- 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/edit.tsx +3 -3
- 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 +27 -23
- package/docs/consumer-skill/references/analytics.md +33 -4
- 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 +25852 -32067
- package/docs/consumer-skill/references/composition.md +42 -21
- package/docs/consumer-skill/references/design-contract.md +1 -0
- package/docs/consumer-skill/references/discovery.md +8 -5
- package/docs/consumer-skill/references/installation.md +59 -10
- package/docs/consumer-skill/references/integration.md +28 -5
- package/docs/consumer-skill/references/product-composition.md +2 -2
- package/docs/consumer-skill/references/public-api.json +726 -641
- package/docs/consumer-skill/references/review.md +57 -15
- package/docs/consumer-skill/references/rhf-workflows.md +72 -0
- package/docs/consumer-skill/references/screen-archetypes.md +2 -2
- package/docs/consumer-skill/references/theming.md +8 -3
- 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 +178 -44
- 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 +74 -10
- 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 +12 -13
- package/templates/README.md +3 -2
- package/templates/admin-shell-template.tsx +50 -11
- package/templates/analytics-operations-template.tsx +20 -24
- package/templates/customers-template.tsx +30 -25
- 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-B9MHG0cT.js.map +0 -1
- package/dist/action-menu-Dr8K-ghE.js +0 -284
- package/dist/action-menu-Dr8K-ghE.js.map +0 -1
- package/dist/ai-artifact-C58tQcBy.js +0 -1185
- package/dist/ai-artifact-C58tQcBy.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-B_IuNWOo.js +0 -321
- package/dist/app-shell-B_IuNWOo.js.map +0 -1
- package/dist/auth-DTkkshS8.js.map +0 -1
- package/dist/badge-xIiV_E7f.js.map +0 -1
- package/dist/base/sheet.js +0 -3
- package/dist/breadcrumbs-J-K2kl4c.js +0 -129
- package/dist/breadcrumbs-J-K2kl4c.js.map +0 -1
- package/dist/button-S2Cubiiz.js.map +0 -1
- package/dist/buttons-BedGfygC.js.map +0 -1
- package/dist/cascader-B1MiqkBq.js +0 -439
- package/dist/cascader-B1MiqkBq.js.map +0 -1
- package/dist/choice-inputs-zUgBZfE4.js.map +0 -1
- package/dist/code-block-BzmM9Eig.js.map +0 -1
- package/dist/collapsible-BkAI_XD4.js +0 -81
- package/dist/collapsible-BkAI_XD4.js.map +0 -1
- package/dist/combobox-BEx0vJgF.js +0 -362
- package/dist/combobox-BEx0vJgF.js.map +0 -1
- package/dist/combobox-BwzoXFSG.js +0 -884
- package/dist/combobox-BwzoXFSG.js.map +0 -1
- package/dist/command-CrlPIL6m.js +0 -425
- package/dist/command-CrlPIL6m.js.map +0 -1
- package/dist/comments-Dmpp0YIc.js +0 -1169
- package/dist/comments-Dmpp0YIc.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 -16
- 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-CIxwbZt5.js.map +0 -1
- package/dist/data-display-BdgCAw8T.js.map +0 -1
- package/dist/date-Cq8ioE4o.js +0 -144
- package/dist/date-Cq8ioE4o.js.map +0 -1
- package/dist/date-picker-RlIzKom_.js +0 -1551
- package/dist/date-picker-RlIzKom_.js.map +0 -1
- package/dist/date-pickers-DY-CpXS1.js +0 -179
- package/dist/date-pickers-DY-CpXS1.js.map +0 -1
- package/dist/display-KsZLw9Ov.js.map +0 -1
- package/dist/features/sync.js +0 -142
- package/dist/features/sync.js.map +0 -1
- package/dist/feedback-Dm4izqFn.js +0 -240
- package/dist/feedback-Dm4izqFn.js.map +0 -1
- package/dist/field-affordance-recipes-DWcNcOjh.js.map +0 -1
- package/dist/field-state-recipes-BVA2CWHo.js +0 -12
- package/dist/field-state-recipes-BVA2CWHo.js.map +0 -1
- package/dist/filters-DzgSJpMK.js +0 -2257
- package/dist/filters-DzgSJpMK.js.map +0 -1
- package/dist/focus-recipes-B653VaLq.js.map +0 -1
- package/dist/form-field-BriWAXyg.js +0 -63
- package/dist/form-field-BriWAXyg.js.map +0 -1
- package/dist/forms-C0RGnJTe.js.map +0 -1
- package/dist/forms-numeric-DIhghX1Q.js +0 -910
- package/dist/forms-numeric-DIhghX1Q.js.map +0 -1
- package/dist/header-DMMxG__r.js.map +0 -1
- package/dist/hooks-DB6CJ4MR.js.map +0 -1
- package/dist/http-D_6rOnzU.js.map +0 -1
- package/dist/item-DjCcM18E.js +0 -277
- package/dist/item-DjCcM18E.js.map +0 -1
- package/dist/layout.types-Cn7aUzJp.js +0 -20
- package/dist/layout.types-Cn7aUzJp.js.map +0 -1
- package/dist/media-gallery-C-vChPmE.js +0 -203
- package/dist/media-gallery-C-vChPmE.js.map +0 -1
- package/dist/mentions-0_4nWuI-.js +0 -570
- package/dist/mentions-0_4nWuI-.js.map +0 -1
- package/dist/message-g8p7eVtN.js +0 -128
- package/dist/message-g8p7eVtN.js.map +0 -1
- package/dist/metadata-list-C3MkU-Om.js.map +0 -1
- package/dist/motion-recipes-DitYv6P2.js.map +0 -1
- package/dist/navigation-C90-oQFq.js +0 -255
- package/dist/navigation-C90-oQFq.js.map +0 -1
- package/dist/navigation-DaRjthVk.js +0 -288
- package/dist/navigation-DaRjthVk.js.map +0 -1
- package/dist/number-CRU3kGuk.js +0 -354
- package/dist/number-CRU3kGuk.js.map +0 -1
- package/dist/overlays-BSgCtM2v.js.map +0 -1
- package/dist/page-DUUKDAjo.js +0 -331
- package/dist/page-DUUKDAjo.js.map +0 -1
- package/dist/pagination-CgCjElfu.js.map +0 -1
- package/dist/popover-B85RenIl.js +0 -201
- package/dist/popover-B85RenIl.js.map +0 -1
- package/dist/primitives-ByWgGUgt.js +0 -380
- package/dist/primitives-ByWgGUgt.js.map +0 -1
- package/dist/receipt-tOc7B3hw.js +0 -116
- package/dist/receipt-tOc7B3hw.js.map +0 -1
- package/dist/rich-text-Dth5E882.js +0 -78
- package/dist/rich-text-Dth5E882.js.map +0 -1
- package/dist/rich-text-editor-C1fOjBTd.js +0 -1195
- package/dist/rich-text-editor-C1fOjBTd.js.map +0 -1
- package/dist/rich-text-editor-toolbar-laT3tpBT.js +0 -98
- package/dist/rich-text-editor-toolbar-laT3tpBT.js.map +0 -1
- package/dist/sanitize-html-DsQmI48u.js +0 -92
- package/dist/sanitize-html-DsQmI48u.js.map +0 -1
- package/dist/separator-Ct_WSWTJ.js.map +0 -1
- package/dist/settings-Bar5wiSo.js +0 -167
- package/dist/settings-Bar5wiSo.js.map +0 -1
- package/dist/sheet-BGPERY55.js +0 -250
- package/dist/sheet-BGPERY55.js.map +0 -1
- package/dist/sidebar-D-JYMMbY.js +0 -686
- package/dist/sidebar-D-JYMMbY.js.map +0 -1
- package/dist/sidebar-f9gRWXIR.js.map +0 -1
- package/dist/skeleton-BapcJd9C.js.map +0 -1
- package/dist/slot-CLF9kLrS.js +0 -16
- package/dist/slot-CLF9kLrS.js.map +0 -1
- package/dist/smart-card-CW0hjetE.js.map +0 -1
- package/dist/surface-recipes-BKRVW8Os.js.map +0 -1
- package/dist/table-B4TE7iOV.js +0 -175
- package/dist/table-B4TE7iOV.js.map +0 -1
- package/dist/table-CFOWY9pQ.js +0 -1536
- package/dist/table-CFOWY9pQ.js.map +0 -1
- package/dist/tabs-e7ko9S2o.js +0 -191
- package/dist/tabs-e7ko9S2o.js.map +0 -1
- package/dist/text-inputs-B1culiSK.js.map +0 -1
- package/dist/timelines-D3Sl9ueq.js +0 -458
- package/dist/timelines-D3Sl9ueq.js.map +0 -1
- package/dist/tooltip-8wz5S_Zr.js +0 -113
- package/dist/tooltip-8wz5S_Zr.js.map +0 -1
- package/dist/tree-CzUJHnFs.js.map +0 -1
- package/dist/typography-BQnine1k.js.map +0 -1
- package/dist/ui-provider-C-74NVLc.js.map +0 -1
- package/dist/upload-BOW6U2tI.js +0 -855
- package/dist/upload-BOW6U2tI.js.map +0 -1
- package/dist/upload-queue-qUXn1ykN.js +0 -409
- package/dist/upload-queue-qUXn1ykN.js.map +0 -1
- package/dist/usage-card-BeSLY0i0.js.map +0 -1
- package/dist/utils-B6kKb8jB.js.map +0 -1
- package/dist/value-inputs-skdVB2zh.js +0 -980
- package/dist/value-inputs-skdVB2zh.js.map +0 -1
- package/dist/value-typography-uAmWUAL1.js +0 -116
- package/dist/value-typography-uAmWUAL1.js.map +0 -1
- package/dist/workspace-DHeHv0qw.js +0 -411
- package/dist/workspace-DHeHv0qw.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"combobox-DrDXtSSt.js","names":["ComboboxPrimitive","_Fragment","_Fragment","React","BaseCombobox","Combobox","resolveComponentScale","useDensityConfig","cn","Text","Button","anchoredListHeightRecipes","Stack","markRecipes","regionRecipes","ErrorState","layerRecipes","fieldAffordanceRecipes","selectToggleRecipes","ComboboxPositioner","ComboboxPortal","ComboboxEmpty","ComboboxItem","Combobox$2","ComboboxCollection","ComboboxChipsInput","ComboboxChips","ComboboxList","ComboboxPopup","ComboboxChip","ComboboxGroup","ComboboxNativeInput","ComboboxGroupLabel","formControlMinHeightClasses","formControlPaddingClasses","Input","ScrollArea","useDebouncedCallback","React$1","Fragment$1","ComboboxInputField","ariaInvalid","ariaRequired","association","error","clearable","size","className","required","Combobox","clearLabel","XIcon","toggleLabel","ChevronDownIcon","defaultComboboxStrings","itemLabel","CREATE_OPTION_SYMBOL","isCreateOption","item","getCreateOptionValue","createCreateOption","inputValue","LoadingMore","loading","Loader2","text","StatusText","StatusContent","trimmed","searchValue","strings","minSearchLength","remaining","primitiveSizeByComboboxSize","emptyClassByComboboxSize","ComboboxDropdown","positionerClassName","portalContainer","primitiveSize","showStatus","showEmpty","items","loadingMore","applyFooter","content","ComboboxStatus","listRef","groupedItems","group","groupItems","groupLabel","renderGroupLabel","getItemDisabled","renderItemContent","getItemReactKey","createOptionItem","ErrorMessage","_size","escapeRegExp","str","HighlightedText","highlight","regex","parts","cursor","isMatch","index","key","part","highlightClassName","useDebouncedSearch","emitSearch","value","debounceMs","useGroupedItems","useMemo","getItemGroup","groups","groupKey","existing","useLoadMore","isLoadingRef","useRef","cooldownRef","canLoadMore","hasMore","onLoadMore","requestLoadMore","useEffect","useCallback","event","scrollTop","clientHeight","scrollHeight","useComboboxStrings","useStrings","custom","hasExactMatch","normalizedSearch","getItemLabel","useComboboxCore","stringsProp","getKey","getItemKey","trimmedSearch","showListContent","currentScrollHandler","handleScroll","viewport","onScroll","next","cancelPendingLoad","baseItems","ensuredItems","merged","itemKey","ensured","showCreateOption","creatable","onCreate","PlusIcon","renderItem","label","highlightMatch","getItemValue","useComboboxState","localValue","setLocalValue","useState","defaultValue","isControlled","controlled","changeValue","onChange","resolveComboboxSize","sizeProp","defaultScale","primitiveComboboxSizeBySize","getComboboxFormSize","describedBy","external","errorId","ComboboxWithListControl","controlledSearch","onSearchChange","ariaLabel","ariaLabelledBy","ariaDescribedBy","formSize","fieldInvalid","invalid","hasError","useId","selectedValue","onSelectedValueChange","onValueChange","onSearchValueChange","defaultSearchValue","openState","handleOpenChange","open","defaultOpen","onOpenChange","resolvedOpen","disabled","core","wasOpen","closed","clearSearchOnClose","displayInputValue","handleValueChange","details","reason","Combobox$1","props","MultiCombobox","primitiveComboboxSize","containerRef","selectedValues","onSelectedValuesChange","values","defaultValues","onValuesChange","setOpen","draftValues","setDraftValues","regularValues","createValue","applyButton","closeOnSelect","handleApply","onApply","handleCancel","onCancel","visibleValues","chipsPlaceholder","defaultAsyncResourceComboboxStrings","isSimpleText","AsyncResourceCombobox","setSearchValue","setItems","isLoading","setIsLoading","fetchError","setFetchError","retryCount","setRetryCount","requestIdRef","inputRef","setInputRef","node","ref","runFetch","request","fetcher","context","thrown","requestId","nextItems","onAfterFetch","nextError","onError","preload","controller","limit","retry","count","renderOption","description","getDescription","meta","getMeta","getLabel","resolvedError","errorMessage","hasFetchError","errorNode","renderError"],"sources":["../src/components/base/combobox/combobox-field.tsx","../src/components/features/combobox/combobox.strings.ts","../src/components/features/combobox/constants.ts","../src/components/features/combobox/components/loading-more.tsx","../src/components/features/combobox/components/status-content.tsx","../src/components/features/combobox/components/combobox-dropdown.tsx","../src/components/features/combobox/components/error-message.tsx","../src/components/features/combobox/components/highlighted-text.tsx","../src/components/features/combobox/hooks/use-debounced-search.ts","../src/components/features/combobox/hooks/use-grouped-items.ts","../src/components/features/combobox/hooks/use-load-more.ts","../src/components/features/combobox/hooks/use-combobox-core.tsx","../src/components/features/combobox/hooks/use-combobox-state.ts","../src/components/features/combobox/combobox.tsx","../src/components/features/combobox/async-resource-combobox.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Combobox as ComboboxPrimitive } from '@base-ui/react/combobox';\nimport { ChevronDownIcon, XIcon } from 'lucide-react';\nimport { ComboboxNativeInput } from '../../ui/combobox';\nimport { Button } from '../buttons';\nimport { Input } from '../text-inputs';\nimport { type FormControlSize } from '../../../lib/ui-provider';\nimport { cn } from '../../../lib/utils';\nimport { fieldAffordanceRecipes, selectToggleRecipes } from '../../../lib/field-affordance-recipes';\n\n// Private shared input composition. The feature supplies state and strings;\n// this base owner keeps the native input/frame and all affordance geometry.\ninterface ComboboxInputFieldProps extends Pick<React.ComponentPropsWithRef<'input'>,\n\t'id' | 'ref' | 'aria-label' | 'aria-labelledby' | 'aria-describedby' | 'aria-invalid' | 'aria-required'\n> {\n\tplaceholder: string;\n\tclearLabel: string;\n\ttoggleLabel: string;\n\tsize: FormControlSize;\n\terror?: boolean;\n\trequired?: boolean;\n\tdisabled?: boolean;\n\tclearable?: boolean;\n\tclassName?: string;\n\tonBlur?: () => void;\n}\n\nexport function ComboboxInputField({\n\tplaceholder,\n\tclearLabel,\n\ttoggleLabel,\n\tsize,\n\terror,\n\trequired,\n\tdisabled,\n\tclearable = true,\n\tclassName,\n\tonBlur,\n\t'aria-invalid': ariaInvalid,\n\t'aria-required': ariaRequired,\n\t...association\n}: ComboboxInputFieldProps): React.ReactElement {\n\treturn (\n\t\t<div className=\"relative\">\n\t\t\t<ComboboxNativeInput\n\t\t\t\trender={\n\t\t\t\t\t<Input\n\t\t\t\t\t\tsize={size}\n\t\t\t\t\t\tinvalid={error}\n\t\t\t\t\t\tclassName={cn(clearable ? selectToggleRecipes.clearPadding[size] : selectToggleRecipes.padding[size], className)}\n\t\t\t\t\t/>\n\t\t\t\t}\n\t\t\t\tplaceholder={placeholder}\n\t\t\t\t{...association}\n\t\t\t\taria-invalid={ariaInvalid ?? (error || undefined)}\n\t\t\t\taria-required={ariaRequired ?? required}\n\t\t\t\tdisabled={disabled}\n\t\t\t\tonBlur={onBlur}\n\t\t\t/>\n\t\t\t<div className={cn('absolute inset-y-0 flex items-center gap-space-xs text-muted-foreground', selectToggleRecipes.track[size])}>\n\t\t\t\t{clearable ? (\n\t\t\t\t\t<ComboboxPrimitive.Clear\n\t\t\t\t\t\trender={\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\t\t\t\tsize=\"sm\" iconOnly\n\t\t\t\t\t\t\t\tclassName={cn(fieldAffordanceRecipes.target,fieldAffordanceRecipes.focus,fieldAffordanceRecipes.clear)}\n\t\t\t\t\t\t\t\taria-label={clearLabel}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<XIcon className={fieldAffordanceRecipes.icon} aria-hidden=\"true\" />\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t) : null}\n\t\t\t\t<ComboboxPrimitive.Trigger\n\t\t\t\t\trender={\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\t\t\tsize=\"sm\" iconOnly\n\t\t\t\t\t\t\t\tclassName={cn(fieldAffordanceRecipes.target,fieldAffordanceRecipes.focus,fieldAffordanceRecipes.toggle)}\n\t\t\t\t\t\t\taria-label={toggleLabel}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t<ChevronDownIcon className={cn('shrink-0', selectToggleRecipes.icon[size])} aria-hidden=\"true\" />\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","/**\n * Default user-facing strings for `<Combobox>`.\n *\n * Consumers wire backend i18n at the call site:\n *\n * <Combobox strings={{ noResults: t('search.empty') }} … />\n *\n * Templates use `{placeholder}` tokens — the component substitutes them at\n * render time. Function-valued strings would also work; we keep templates\n * here for the constants file.\n */\nimport type { ComboboxStrings } from './types';\n\nexport const defaultComboboxStrings = {\n\tplaceholder: 'Search...',\n\tclear: 'Clear selection',\n\ttoggle: 'Open options',\n\tdismiss: 'Dismiss',\n\tremoveSelection: (itemLabel: string) => `Remove ${itemLabel}`,\n\tsearching: 'Loading...',\n\tnoResults: 'No results found.',\n\ttypeToSearch: 'Type at least {min} characters to search...',\n\ttypeMore: 'Type {remaining} more character{s} to search...',\n\tcreateNew: 'Create {value}',\n\tloadingMore: 'Loading...',\n\tapply: 'Apply',\n\tcancel: 'Cancel',\n} satisfies ComboboxStrings;\n\nexport type { ComboboxStrings };\n","/**\n * Constants and default values for the Combobox component.\n *\n * Default strings live in `./combobox.strings.ts` per rule 19.\n */\n\nexport { defaultComboboxStrings } from './combobox.strings';\n\n// ============================================================================\n// Default Values\n// ============================================================================\n\nexport const DEFAULT_MIN_SEARCH_LENGTH = 3;\n/** Re-exported so the combobox shares the library-wide debounce window. */\nexport { DEFAULT_DEBOUNCE_MS } from '../../../hooks/use-debounced-callback';\nexport const DEFAULT_SIZE = 'md';\nexport const LOAD_MORE_THRESHOLD = 0.8;\nexport const LOAD_MORE_DEBOUNCE_MS = 100;\nexport const LOAD_MORE_COOLDOWN_MS = 500;\n\n// ============================================================================\n// Symbols\n// ============================================================================\n\nexport const CREATE_OPTION_SYMBOL = Symbol('combobox-create-option');\n\n// ============================================================================\n// Type Guards\n// ============================================================================\n\nexport function isCreateOption<T>(item: T): item is T & { [CREATE_OPTION_SYMBOL]: string } {\n\treturn (\n\t\ttypeof item === 'object' &&\n\t\titem !== null &&\n\t\tCREATE_OPTION_SYMBOL in (item as object)\n\t);\n}\n\nexport function getCreateOptionValue<T>(item: T): string {\n\tif (!isCreateOption(item)) {\n\t\tthrow new Error('Item is not a create option');\n\t}\n\treturn (item as { [CREATE_OPTION_SYMBOL]: string })[CREATE_OPTION_SYMBOL];\n}\n\nexport function createCreateOption<T>(inputValue: string): T {\n\treturn { [CREATE_OPTION_SYMBOL]: inputValue } as unknown as T;\n}\n","/**\n * LoadingMore Component\n */\n\nimport { Loader2 } from 'lucide-react';\nimport * as React from 'react';\nimport { Stack } from '../../../base/structure';\nimport { Text } from '../../../typography';\nimport { cn } from '../../../../lib/utils';\n\nexport interface LoadingMoreProps {\n\t/** Shows the pending indicator. */\n\tloading: boolean;\n\t/** Visible label. */\n\ttext: string;\n\tclassName?: string;\n}\n\nexport function LoadingMore({\n\tloading,\n\ttext,\n\tclassName,\n}: LoadingMoreProps): React.ReactElement | null {\n\tif (!loading) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<Stack\n\t\t\tdirection=\"horizontal\"\n\t\t\tgap=\"sm\"\n\t\t\tjustify=\"center\"\n\t\t\twrap={false}\n\t\t\tclassName={cn('loading-more--component', \n\t\t\t\t'px-control py-space-xs text-xs text-muted-foreground',\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\trole=\"status\"\n\t\t\taria-live=\"polite\"\n\t\t>\n\t\t\t<Loader2 className=\"size-icon-sm animate-spin\" aria-hidden=\"true\" />\n\t\t\t<Text tag=\"span\" size=\"xs\" type=\"secondary\" className=\"text-inherit\">\n\t\t\t\t{text}\n\t\t\t</Text>\n\t\t</Stack>\n\t);\n}\n\nLoadingMore.displayName = 'LoadingMore';\n","/**\n * StatusContent Component\n */\n\nimport { Loader2 } from 'lucide-react';\nimport * as React from 'react';\nimport { Text } from '../../../typography';\nimport type { ComboboxStrings } from '../types';\n\nfunction StatusText({ children }: { children: string }) {\n\treturn (\n\t\t<Text tag=\"span\" size=\"inherit\" type=\"secondary\" className=\"text-inherit\">\n\t\t\t{children}\n\t\t</Text>\n\t);\n}\n\nexport interface StatusContentProps {\n\t/** Whether results are being fetched. */\n\tloading?: boolean;\n\t/** Current search text. */\n\tsearchValue: string;\n\t/** Characters required before the list becomes active. */\n\tminSearchLength: number;\n\t/** How many options matched, deciding between the empty and results copy. */\n\titemCount: number;\n\t/** Resolved copy for the status rows. */\n\tstrings: ComboboxStrings;\n}\n\nexport function StatusContent({\n\tloading,\n\tsearchValue,\n\tminSearchLength,\n\titemCount,\n\tstrings,\n}: StatusContentProps): React.ReactNode {\n\tconst trimmed = searchValue.trim();\n\n\tif (loading) {\n\t\treturn (\n\t\t\t<>\n\t\t\t\t<Loader2 className=\"size-icon-sm animate-spin\" />\n\t\t\t\t<StatusText>{strings.searching}</StatusText>\n\t\t\t</>\n\t\t);\n\t}\n\n\tif (trimmed === '') {\n\t\tif (strings.typeToSearch.includes('{min}')) {\n\t\t\treturn (\n\t\t\t\t<StatusText>\n\t\t\t\t\t{strings.typeToSearch.replace('{min}', String(minSearchLength))}\n\t\t\t\t</StatusText>\n\t\t\t);\n\t\t}\n\t\treturn <StatusText>{strings.typeToSearch}</StatusText>;\n\t}\n\n\tif (trimmed.length < minSearchLength) {\n\t\tconst remaining = minSearchLength - trimmed.length;\n\t\tif (strings.formatTypeMore) {\n\t\t\treturn <StatusText>{strings.formatTypeMore(remaining)}</StatusText>;\n\t\t}\n\t\tif (strings.typeMore.includes('{remaining}') || strings.typeMore.includes('{s}')) {\n\t\t\treturn (\n\t\t\t\t<StatusText>\n\t\t\t\t\t{strings.typeMore\n\t\t\t\t\t\t.replace('{remaining}', String(remaining))\n\t\t\t\t\t\t.replace('{s}', remaining !== 1 ? 's' : '')}\n\t\t\t\t</StatusText>\n\t\t\t);\n\t\t}\n\t\treturn <StatusText>{strings.typeMore}</StatusText>;\n\t}\n\n\tif (itemCount === 0) {\n\t\treturn null;\n\t}\n\n\treturn null;\n}\n\nStatusContent.displayName = 'StatusContent';\n","/**\n * Shared ComboboxDropdown Component\n *\n * Renders the dropdown content for both single and multiple selection variants.\n * Extracts shared rendering logic to reduce duplication.\n */\n\nimport * as React from 'react';\n\nimport {\n\tComboboxPortal,\n\tComboboxPositioner,\n\tComboboxPopup,\n\tComboboxEmpty,\n\tComboboxList,\n\tComboboxItem,\n\tComboboxStatus,\n\tComboboxGroup,\n\tComboboxGroupLabel,\n\tComboboxCollection,\n} from '../../../base/combobox';\nimport { Button } from '../../../base/buttons';\nimport { ScrollArea } from '../../../base/display/scroll-area';\nimport { Stack } from '../../../base/structure';\nimport { Text } from '../../../typography';\nimport { cn } from '../../../../lib/utils';\n\nimport { DEFAULT_SIZE } from '../constants';\nimport type { ComboboxStrings, ComboboxSize } from '../types';\nimport { LoadingMore } from './loading-more';\nimport { StatusContent } from './status-content';\nimport { layerRecipes } from '../../../../lib/layer-recipes';\nimport { anchoredListHeightRecipes } from '../../../../lib/anchored-positioning';\nimport { regionRecipes } from '../../../../lib/surface-recipes';\n\nconst primitiveSizeByComboboxSize: Record<ComboboxSize, 'sm' | 'md' | 'lg'> = {\n\tsm: 'sm',\n\tmd: 'md',\n\tlg: 'lg',\n};\n\nconst emptyClassByComboboxSize: Record<ComboboxSize, string> = {\n\tsm: 'flex min-h-control-sm items-center justify-center px-row-x py-row-y text-center text-pxs leading-tight text-muted-foreground',\n\tmd: 'flex min-h-control items-center justify-center px-row-x py-row-y text-center text-sm leading-tight text-muted-foreground',\n\tlg: 'flex min-h-control-lg items-center justify-center px-row-x py-row-y-lg text-center text-sm leading-tight text-muted-foreground',\n};\n\nexport interface ComboboxDropdownProps<T> {\n\t// Display state\n\t/** Whether results are being fetched. */\n\tloading: boolean;\n\t/** Whether the status row replaces the list — while loading, or below `minSearchLength`. */\n\tshowStatus: boolean;\n\t/** Whether the no-results row shows. */\n\tshowEmpty: boolean;\n\n\t// Search\n\t/** Current search text, used to highlight matches. */\n\tsearchValue: string;\n\t/** Characters required before the list becomes active. */\n\tminSearchLength: number;\n\n\t// Items\n\t/** Options to render, including the create row when offered. */\n\titems: T[];\n\t/** Options bucketed by group name, or `null` when grouping is off. */\n\tgroupedItems: Map<string, T[]> | null;\n\t/** The synthetic create row, or `null` when it is not offered. */\n\tcreateOptionItem: T | null;\n\n\t// Rendering\n\t/** Renders one option's content. */\n\trenderItemContent: (item: T) => React.ReactNode;\n\t/** Returns the React key for an option. */\n\tgetItemReactKey: (item: T) => string;\n\t/** Marks individual options unselectable while still rendering them. */\n\tgetItemDisabled?: (item: T) => boolean;\n\t/** Renders a group heading. */\n\trenderGroupLabel?: (group: string) => React.ReactNode;\n\n\t// Load more\n\t/** Whether the next page is being fetched. */\n\tloadingMore?: boolean;\n\n\t// Strings\n\t/** Resolved copy for the status, empty, and create rows. */\n\tstrings: ComboboxStrings;\n\n\t// Size\n\t/** Row density, matching the trigger's size. */\n\tsize?: ComboboxSize;\n\n\t// Portal\n\t/** Mounts the dropdown inside this element instead of the default portal root. */\n\tportalContainer?: React.RefObject<HTMLElement | null>;\n\n\t// Refs\n\t/** Ref to the scrollable list, used for scroll-triggered pagination. */\n\tlistRef: React.RefObject<HTMLDivElement | null>;\n\n\t// Multiple selection anchor\n\t/** Element the dropdown positions against. */\n\tanchor?: React.RefObject<HTMLElement | null>;\n\n\t/** Optional apply / cancel footer for the apply-button workflow. */\n\tapplyFooter?: {\n\t\tapplyLabel: string;\n\t\tcancelLabel: string;\n\t\tonApply: () => void;\n\t\tonCancel: () => void;\n\t};\n}\n\nexport function ComboboxDropdown<T>({\n\tloading,\n\tshowStatus,\n\tshowEmpty,\n\tsearchValue,\n\tminSearchLength,\n\titems,\n\tgroupedItems,\n\tcreateOptionItem,\n\trenderItemContent,\n\tgetItemReactKey,\n\tgetItemDisabled,\n\trenderGroupLabel,\n\tloadingMore,\n\tstrings,\n\tsize = DEFAULT_SIZE,\n\tportalContainer,\n\tlistRef,\n\tanchor,\n\tapplyFooter,\n}: ComboboxDropdownProps<T>): React.ReactElement | null {\n\tconst positionerClassName = portalContainer != null ? layerRecipes.nestedOverlay : undefined;\n\tconst primitiveSize = primitiveSizeByComboboxSize[size];\n\tconst hasPopupContent =\n\t\tshowStatus ||\n\t\tshowEmpty ||\n\t\titems.length > 0 ||\n\t\tBoolean(loadingMore) ||\n\t\tBoolean(applyFooter);\n\t// An exclusive inline error has no dropdown rows. Mounting a zero-height\n\t// popup still starts Base UI focus management and hides its Retry sibling.\n\tif (!hasPopupContent) return null;\n\n\tconst content = (\n\t\t<ComboboxPositioner\n\t\t\tanchor={anchor}\n\t\t\tclassName={positionerClassName}\n\t\t>\n\t\t\t<ComboboxPopup\n\t\t\t\taria-busy={loading || undefined}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'combobox-dropdown--popup',\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t{/* Status message */}\n\t\t\t\t{!!showStatus && (\n\t\t\t\t\t<ComboboxStatus className=\"gap-space-sm px-control py-space-xs text-xs text-muted-foreground\">\n\t\t\t\t\t\t<StatusContent\n\t\t\t\t\t\t\tloading={loading}\n\t\t\t\t\t\t\tsearchValue={searchValue}\n\t\t\t\t\t\t\tminSearchLength={minSearchLength}\n\t\t\t\t\t\t\titemCount={items.length}\n\t\t\t\t\t\t\tstrings={strings}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</ComboboxStatus>\n\t\t\t\t)}\n\n\t\t\t\t{/* Empty state */}\n\t\t\t\t{!!showEmpty && (\n\t\t\t\t\t<ComboboxEmpty className={emptyClassByComboboxSize[size]}>\n\t\t\t\t\t\t<Text tag=\"span\" size=\"inherit\" type=\"secondary\" className=\"text-inherit\">\n\t\t\t\t\t\t\t{strings.noResults}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t</ComboboxEmpty>\n\t\t\t\t)}\n\n\t\t\t\t{/* Items list */}\n\t\t\t\t<ScrollArea\n\t\t\t\t\tviewportRef={listRef}\n\t\t\t\t\tviewportClassName={anchoredListHeightRecipes.md}\n\t\t\t\t>\n\t\t\t\t\t<ComboboxList className=\"combobox-dropdown--list max-h-none overflow-visible\">\n\t\t\t\t\t\t{groupedItems ? (\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t{Array.from(groupedItems.entries()).map(([group, groupItems]) => {\n\t\t\t\t\t\t\t\t\tconst groupLabel =\n\t\t\t\t\t\t\t\t\t\ttypeof renderGroupLabel === 'function'\n\t\t\t\t\t\t\t\t\t\t\t? renderGroupLabel(group)\n\t\t\t\t\t\t\t\t\t\t\t: group;\n\t\t\t\t\t\t\t\t\tconst groupLabelContent =\n\t\t\t\t\t\t\t\t\t\ttypeof groupLabel === 'string' || typeof groupLabel === 'number' || typeof groupLabel === 'bigint'\n\t\t\t\t\t\t\t\t\t\t\t// A group caption is supporting copy, not another option: the\n\t\t\t\t\t\t\t\t\t\t\t// compact secondary role Command and menu captions use.\n\t\t\t\t\t\t\t\t\t\t\t? <Text tag=\"span\" size=\"xs\" type=\"secondary\" weight=\"medium\" lineHeight=\"tight\">{groupLabel}</Text>\n\t\t\t\t\t\t\t\t\t\t\t: groupLabel;\n\n\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t<ComboboxGroup className=\"combobox-dropdown--group p-0\" key={group} items={groupItems}>\n\t\t\t\t\t\t\t\t\t\t\t<ComboboxGroupLabel>{groupLabelContent}</ComboboxGroupLabel>\n\t\t\t\t\t\t\t\t\t\t\t<ComboboxCollection>\n\t\t\t\t\t\t\t\t\t\t\t\t{(item: T) => (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<ComboboxItem\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tkey={getItemReactKey(item)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tvalue={item}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsize={primitiveSize}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisabled={getItemDisabled?.(item)}\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\t\t{renderItemContent(item)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t</ComboboxItem>\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</ComboboxCollection>\n\t\t\t\t\t\t\t\t\t\t</ComboboxGroup>\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t})}\n\n\t\t\t\t\t\t\t\t{createOptionItem != null && (\n\t\t\t\t\t\t\t\t\t<ComboboxItem\n\t\t\t\t\t\t\t\t\t\tkey={getItemReactKey(createOptionItem)}\n\t\t\t\t\t\t\t\t\t\tvalue={createOptionItem}\n\t\t\t\t\t\t\t\t\t\tsize={primitiveSize}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{renderItemContent(createOptionItem)}\n\t\t\t\t\t\t\t\t\t</ComboboxItem>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<ComboboxCollection>\n\t\t\t\t\t\t\t\t{(item: T) => (\n\t\t\t\t\t\t\t\t\t<ComboboxItem\n\t\t\t\t\t\t\t\t\t\tkey={getItemReactKey(item)}\n\t\t\t\t\t\t\t\t\t\tvalue={item}\n\t\t\t\t\t\t\t\t\t\tsize={primitiveSize}\n\t\t\t\t\t\t\t\t\t\tdisabled={getItemDisabled?.(item)}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{renderItemContent(item)}\n\t\t\t\t\t\t\t\t\t</ComboboxItem>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</ComboboxCollection>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</ComboboxList>\n\t\t\t\t</ScrollArea>\n\n\t\t\t\t{/* Loading more indicator */}\n\t\t\t\t<LoadingMore\n\t\t\t\t\tloading={!!loadingMore}\n\t\t\t\t\ttext={strings.loadingMore}\n\t\t\t\t/>\n\n\t\t\t\t{/* Apply / cancel footer (multi-select with applyButton). */}\n\t\t\t\t{!!applyFooter && (\n\t\t\t\t\t<Stack direction=\"horizontal\" gap=\"md\" justify=\"end\" wrap={false} className={cn('px-control py-space-xs', regionRecipes.footer)}>\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\t\t\tonClick={(e) => {\n\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t\tapplyFooter.onCancel();\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{applyFooter.cancelLabel}\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\ttone=\"primary\"\n\t\t\t\t\t\t\tonClick={(e) => {\n\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t\tapplyFooter.onApply();\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{applyFooter.applyLabel}\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</Stack>\n\t\t\t\t)}\n\t\t\t</ComboboxPopup>\n\t\t</ComboboxPositioner>\n\t);\n\n\tif (portalContainer) {\n\t\treturn <ComboboxPortal container={portalContainer}>{content}</ComboboxPortal>;\n\t}\n\n\treturn <ComboboxPortal>{content}</ComboboxPortal>;\n}\n\nComboboxDropdown.displayName = 'ComboboxDropdown';\n","/**\n * ErrorMessage Component\n */\n\nimport * as React from 'react';\nimport { Text } from '../../../typography';\nimport { cn } from '../../../../lib/utils';\nimport type { ComboboxSize } from '../types';\n\nexport interface ErrorMessageProps {\n\t/** Id the owning input references through `aria-describedby`. */\n\tid?: string;\n\terror?: string;\n\t/** Size preset. */\n\tsize: ComboboxSize;\n\tclassName?: string;\n}\n\nexport function ErrorMessage({\n\tid,\n\terror,\n\tsize: _size,\n\tclassName,\n}: ErrorMessageProps): React.ReactElement | null {\n\tif (!error) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t// `xs` at every control size, matching `FormField` and the date pickers.\n\t\t// Leaving the default size unpinned resolved to `sm`, which made the\n\t\t// combobox the one control whose error text grew as the control grew.\n\t\t<Text\n\t\t\tid={id}\n\t\t\ttag=\"p\"\n\t\t\tsize=\"xs\"\n\t\t\ttype=\"error\"\n\t\t\tclassName={cn('error-message--component', className)}\n\t\t\trole=\"alert\"\n\t\t\taria-live=\"polite\"\n\t\t>\n\t\t\t{error}\n\t\t</Text>\n\t);\n}\n\nErrorMessage.displayName = 'ErrorMessage';\n","/**\n * HighlightedText Component\n */\n\nimport * as React from 'react';\nimport { Text } from '../../../typography';\nimport { markRecipes } from '../../../../lib/tone-recipes';\n\nexport interface HighlightedTextProps {\n\t/** Visible label. */\n\ttext: string;\n\thighlight: string;\n\thighlightClassName?: string;\n}\n\nfunction escapeRegExp(str: string): string {\n\treturn str.replace(/[$()*+.?[\\\\\\]^{|}]/g, '\\\\$&');\n}\n\nexport function HighlightedText({\n\ttext,\n\thighlight,\n\thighlightClassName = markRecipes.match,\n}: HighlightedTextProps): React.ReactNode {\n\tif (!highlight.trim()) {\n\t\treturn (\n\t\t\t<Text tag=\"span\" size=\"inherit\" lineHeight=\"tight\" className=\"text-inherit\">\n\t\t\t\t{text}\n\t\t\t</Text>\n\t\t);\n\t}\n\n\tconst regex = new RegExp(`(${escapeRegExp(highlight)})`, 'gi');\n\tconst parts = text.split(regex);\n\tlet cursor = 0;\n\n\treturn (\n\t\t<Text tag=\"span\" size=\"inherit\" lineHeight=\"tight\" className=\"text-inherit\">\n\t\t\t{parts.map((part, index) => {\n\t\t\t\tconst isMatch = index % 2 === 1;\n\t\t\t\tconst key = String(cursor);\n\t\t\t\tcursor += part.length;\n\n\t\t\t\tif (isMatch) {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<mark key={key} className={highlightClassName}>\n\t\t\t\t\t\t\t{part}\n\t\t\t\t\t\t</mark>\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn <React.Fragment key={key}>{part}</React.Fragment>;\n\t\t\t})}\n\t\t</Text>\n\t);\n}\n\nHighlightedText.displayName = 'HighlightedText';\n","/**\n * Hook for debounced search functionality\n */\n\nimport { useEffect } from 'react';\nimport { useDebouncedCallback } from '../../../../hooks/use-debounced-callback';\nimport { DEFAULT_DEBOUNCE_MS, DEFAULT_MIN_SEARCH_LENGTH } from '../constants';\n\nexport interface UseDebouncedSearchOptions {\n\tsearchValue: string;\n\tonSearch: ((value: string) => void) | undefined;\n\tdebounceMs?: number;\n\tminSearchLength?: number;\n}\n\nexport function useDebouncedSearch({\n\tsearchValue,\n\tonSearch,\n\tdebounceMs = DEFAULT_DEBOUNCE_MS,\n\tminSearchLength = DEFAULT_MIN_SEARCH_LENGTH,\n}: UseDebouncedSearchOptions): void {\n\t// `useDebouncedCallback` holds `onSearch` in a ref, so `emitSearch` keeps a\n\t// stable identity even though consumers pass a new inline callback every\n\t// render. Depending on the raw `onSearch` here re-ran the effect on every\n\t// render and — when it triggered a state update — caused an infinite fetch\n\t// loop.\n\tconst emitSearch = useDebouncedCallback((value: string) => {\n\t\tonSearch?.(value);\n\t}, debounceMs);\n\n\tuseEffect(() => {\n\t\tconst trimmed = searchValue.trim();\n\t\tif (trimmed.length < minSearchLength) return;\n\n\t\temitSearch(trimmed);\n\t\treturn emitSearch.cancel;\n\t}, [searchValue, minSearchLength, emitSearch]);\n}\n","/**\n * Hook for grouping items by category\n */\n\nimport { useMemo } from 'react';\n\nexport interface UseGroupedItemsOptions<T> {\n\titems: T[];\n\tgetItemGroup: ((item: T) => string) | undefined;\n}\n\nexport type GroupedItemsResult<T> = Map<string, T[]> | null;\n\nexport function useGroupedItems<T>({\n\titems,\n\tgetItemGroup,\n}: UseGroupedItemsOptions<T>): GroupedItemsResult<T> {\n\treturn useMemo(() => {\n\t\tif (!getItemGroup) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst groups = new Map<string, T[]>();\n\n\t\tfor (const item of items) {\n\t\t\tconst groupKey = getItemGroup(item);\n\t\t\tconst existing = groups.get(groupKey);\n\n\t\t\tif (existing) {\n\t\t\t\texisting.push(item);\n\t\t\t} else {\n\t\t\t\tgroups.set(groupKey, [item]);\n\t\t\t}\n\t\t}\n\n\t\treturn groups;\n\t}, [items, getItemGroup]);\n}\n","/**\n * Hook for infinite scroll / load more functionality\n */\n\nimport { useCallback, useEffect, useRef } from 'react';\nimport { useDebouncedCallback } from '../../../../hooks/use-debounced-callback';\nimport {\n\tLOAD_MORE_THRESHOLD,\n\tLOAD_MORE_DEBOUNCE_MS,\n\tLOAD_MORE_COOLDOWN_MS,\n} from '../constants';\n\nexport interface UseLoadMoreOptions {\n\thasMore: boolean | undefined;\n\tonLoadMore: (() => void) | undefined;\n\tloadingMore: boolean | undefined;\n}\n\nexport interface UseLoadMoreReturn {\n\thandleScroll: (event: Event) => void;\n\tcancelPendingLoad: () => void;\n}\n\nexport function useLoadMore({\n\thasMore,\n\tonLoadMore,\n\tloadingMore,\n}: UseLoadMoreOptions): UseLoadMoreReturn {\n\tconst isLoadingRef = useRef(false);\n\tconst cooldownRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\tconst canLoadMore = !!hasMore && !!onLoadMore && !loadingMore;\n\n\tconst requestLoadMore = useDebouncedCallback(() => {\n\t\tif (!canLoadMore || isLoadingRef.current) return;\n\t\tisLoadingRef.current = true;\n\n\t\t// Cooldown, not a debounce: it keeps a second page from being requested\n\t\t// while the first is still in flight.\n\t\tif (cooldownRef.current) clearTimeout(cooldownRef.current);\n\t\tcooldownRef.current = setTimeout(() => {\n\t\t\tisLoadingRef.current = false;\n\t\t\tcooldownRef.current = null;\n\t\t}, LOAD_MORE_COOLDOWN_MS);\n\t\tonLoadMore?.();\n\t}, LOAD_MORE_DEBOUNCE_MS);\n\n\tuseEffect(() => {\n\t\treturn () => {\n\t\t\tif (cooldownRef.current) clearTimeout(cooldownRef.current);\n\t\t};\n\t}, []);\n\n\tconst handleScroll = useCallback(\n\t\t(event: Event) => {\n\t\t\tif (!canLoadMore || isLoadingRef.current) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst target = event.target as HTMLElement;\n\t\t\tconst { scrollHeight, scrollTop, clientHeight } = target;\n\t\t\tconst scrollPercentage = (scrollTop + clientHeight) / scrollHeight;\n\n\t\t\tif (scrollPercentage >= LOAD_MORE_THRESHOLD) {\n\t\t\t\trequestLoadMore();\n\t\t\t}\n\t\t},\n\t\t[canLoadMore, requestLoadMore]\n\t);\n\n\treturn { handleScroll, cancelPendingLoad: requestLoadMore.cancel };\n}\n","/**\n * Headless state and rendering contract shared by the canonical comboboxes.\n *\n * Extracts shared logic between single and multiple selection variants\n * to reduce duplication and ensure consistent behavior.\n */\n\nimport { PlusIcon } from 'lucide-react';\nimport * as React from 'react';\nimport { useRef, useMemo, useLayoutEffect, useCallback } from 'react';\nimport { Text } from '../../../typography';\nimport { useStrings, type StringsProp } from '../../../../lib/strings';\n\nimport { HighlightedText } from '../components/highlighted-text';\nimport { defaultComboboxStrings } from '../combobox.strings';\nimport {\n\tDEFAULT_MIN_SEARCH_LENGTH,\n\tDEFAULT_DEBOUNCE_MS,\n\tisCreateOption,\n\tgetCreateOptionValue,\n\tcreateCreateOption,\n} from '../constants';\nimport type { ComboboxListControl, ComboboxStrings, ComboboxSharedProps } from '../types';\nimport { useDebouncedSearch } from './use-debounced-search';\nimport { useGroupedItems } from './use-grouped-items';\nimport { useLoadMore } from './use-load-more';\n\nimport { cn } from '../../../../lib/utils';\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface UseComboboxCoreOptions<T> extends ComboboxSharedProps<T>, ComboboxListControl {\n\t/** Items that should always be included (selected items) */\n\tensuredItems?: T[];\n}\n\nexport interface UseComboboxCoreReturn<T> {\n\t// Resolved values\n\tstrings: ComboboxStrings;\n\tgetKey: (item: T) => string;\n\ttrimmedSearch: string;\n\n\t// Refs\n\tlistRef: React.RefObject<HTMLDivElement | null>;\n\n\t// Items\n\tbaseItems: T[];\n\tallItems: T[];\n\tgroupedItems: Map<string, T[]> | null;\n\tcreateOptionItem: T | null;\n\n\t// Display state\n\tshowStatus: boolean;\n\tshowEmpty: boolean;\n\tshowCreateOption: boolean;\n\n\t// Handlers\n\trenderItemContent: (item: T) => React.ReactNode;\n\titemToStringLabel: (item: T) => string;\n\titemToStringValue: (item: T) => string;\n\tgetItemReactKey: (item: T) => string;\n\n\t// Scroll handling\n\thandleScroll: (event: Event) => void;\n}\n\n// ============================================================================\n// Hook Implementation\n// ============================================================================\n\nfunction useComboboxStrings(custom?: StringsProp<ComboboxStrings>): ComboboxStrings {\n\treturn useStrings(defaultComboboxStrings, custom);\n}\n\nfunction hasExactMatch<T>(\n\titems: T[],\n\tsearchValue: string,\n\tgetItemLabel: (item: T) => string\n): boolean {\n\tconst normalizedSearch = searchValue.toLowerCase();\n\treturn items.some(\n\t\t(item) => getItemLabel(item).toLowerCase() === normalizedSearch\n\t);\n}\n\nexport function useComboboxCore<T>({\n\t// Core props\n\titems,\n\tsearchValue,\n\tgetItemLabel,\n\tgetItemKey,\n\tgetItemValue,\n\tloading = false,\n\tshowListContent = true,\n\tminSearchLength = DEFAULT_MIN_SEARCH_LENGTH,\n\tstrings: stringsProp,\n\trenderItem,\n\n\t// Debounced Search\n\tonSearch,\n\tdebounceMs = DEFAULT_DEBOUNCE_MS,\n\n\t// Creatable\n\tcreatable,\n\tonCreate,\n\n\t// Grouped Items\n\tgetItemGroup,\n\n\t// Load More\n\thasMore,\n\tonLoadMore,\n\tloadingMore,\n\n\t// Highlight Match\n\thighlightMatch,\n\n\t\t// Ensured items (selected items that should always be included)\n\tensuredItems = [],\n}: UseComboboxCoreOptions<T>): UseComboboxCoreReturn<T> {\n\t// -------------------------------------------------------------------------\n\t// Setup\n\t// -------------------------------------------------------------------------\n\n\tconst strings = useComboboxStrings(stringsProp);\n\tconst getKey = getItemKey ?? getItemLabel;\n\tconst trimmedSearch = searchValue.trim();\n\tconst showStatus = showListContent && (loading || trimmedSearch.length < minSearchLength);\n\n\t// -------------------------------------------------------------------------\n\t// Hooks\n\t// -------------------------------------------------------------------------\n\n\tuseDebouncedSearch({\n\t\tsearchValue,\n\t\tonSearch,\n\t\tdebounceMs,\n\t\tminSearchLength,\n\t});\n\n\tconst { handleScroll, cancelPendingLoad } = useLoadMore({\n\t\thasMore: showListContent && !showStatus ? hasMore : false,\n\t\tonLoadMore,\n\t\tloadingMore,\n\t});\n\n\tconst currentScrollHandler = useRef(handleScroll);\n\tuseLayoutEffect(() => {\n\t\tcurrentScrollHandler.current = handleScroll;\n\t}, [handleScroll]);\n\n\t// Keep the public object ref and bind pagination when its portaled\n\t// viewport actually mounts, including after closing and reopening.\n\tconst listRef = useMemo(() => {\n\t\tlet viewport: HTMLDivElement | null = null;\n\t\tconst onScroll = (event: Event) => currentScrollHandler.current(event);\n\t\treturn {\n\t\t\tget current() { return viewport; },\n\t\t\tset current(next: HTMLDivElement | null) {\n\t\t\t\tif (viewport === next) return;\n\t\t\t\tviewport?.removeEventListener('scroll', onScroll);\n\t\t\t\tcancelPendingLoad();\n\t\t\t\tviewport = next;\n\t\t\t\tviewport?.addEventListener('scroll', onScroll);\n\t\t\t},\n\t\t};\n\t}, [cancelPendingLoad]);\n\n\t// -------------------------------------------------------------------------\n\t// Computed Values\n\t// -------------------------------------------------------------------------\n\n\t// Merge ensured items with fetched items\n\tconst baseItems = useMemo(() => {\n\t\tif (!showListContent || showStatus) return [];\n\t\tif (ensuredItems.length === 0) return items;\n\n\t\tconst merged = [...ensuredItems];\n\t\titems.forEach((item) => {\n\t\t\tconst itemKey = getKey(item);\n\t\t\tif (!ensuredItems.some((ensured) => getKey(ensured) === itemKey)) {\n\t\t\t\tmerged.push(item);\n\t\t\t}\n\t\t});\n\t\treturn merged;\n\t}, [items, ensuredItems, getKey, showListContent, showStatus]);\n\n\t// Group items if grouping is enabled\n\tconst groupedItems = useGroupedItems({\n\t\titems: baseItems,\n\t\tgetItemGroup,\n\t});\n\n\t// Determine if create option should be shown\n\tconst showCreateOption = useMemo(() => {\n\t\tif (!showListContent || showStatus) return false;\n\t\tif (!creatable || !onCreate) return false;\n\t\tif (trimmedSearch.length < minSearchLength) return false;\n\t\treturn !hasExactMatch(baseItems, trimmedSearch, getItemLabel);\n\t}, [creatable, onCreate, trimmedSearch, minSearchLength, baseItems, getItemLabel, showListContent, showStatus]);\n\n\tconst createOptionItem = useMemo(() => {\n\t\tif (!showCreateOption) return null;\n\t\treturn createCreateOption<T>(trimmedSearch);\n\t}, [showCreateOption, trimmedSearch]);\n\n\t// Build final items array with create option\n\tconst allItems = useMemo(() => {\n\t\tif (createOptionItem) return [...baseItems, createOptionItem];\n\t\treturn baseItems;\n\t}, [baseItems, createOptionItem]);\n\n\t// Status display conditions\n\tconst showEmpty =\n\t\tshowListContent &&\n\t\t!loading &&\n\t\ttrimmedSearch.length >= minSearchLength &&\n\t\titems.length === 0 &&\n\t\t!showCreateOption;\n\n\t// -------------------------------------------------------------------------\n\t// Handlers\n\t// -------------------------------------------------------------------------\n\n\tconst renderItemContent = useCallback(\n\t\t(item: T): React.ReactNode => {\n\t\t\t// Handle create option\n\t\t\tif (isCreateOption(item)) {\n\t\t\t\tconst value = getCreateOptionValue(item);\n\t\t\t\treturn (\n\t\t\t\t\t<span className={cn('combobox-core--component', 'flex items-center gap-space-sm')}>\n\t\t\t\t\t\t<PlusIcon className=\"size-icon-sm\" />\n\t\t\t\t\t\t{strings.createNew.includes('{value}') ? (\n\t\t\t\t\t\t\t<Text tag=\"span\" size=\"inherit\" weight=\"medium\" lineHeight=\"tight\" className=\"text-inherit\">\n\t\t\t\t\t\t\t\t{strings.createNew.replace('{value}', value)}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<span className=\"inline-flex items-center gap-space-sm\">\n\t\t\t\t\t\t\t\t<Text tag=\"span\" size=\"inherit\" weight=\"medium\" lineHeight=\"tight\" className=\"text-inherit\">\n\t\t\t\t\t\t\t\t\t{strings.createNew}\n\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t<Text tag=\"span\" size=\"inherit\" weight=\"medium\" lineHeight=\"tight\" className=\"text-inherit\">\n\t\t\t\t\t\t\t\t\t{value}\n\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</span>\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Custom renderer takes precedence\n\t\t\tif (renderItem) {\n\t\t\t\treturn renderItem(item);\n\t\t\t}\n\n\t\t\t// Default rendering with optional highlighting\n\t\t\tconst label = getItemLabel(item);\n\t\t\tif (highlightMatch && trimmedSearch) {\n\t\t\t\treturn <HighlightedText text={label} highlight={trimmedSearch} />;\n\t\t\t}\n\t\t\treturn (\n\t\t\t\t<Text tag=\"span\" size=\"inherit\" weight=\"medium\" lineHeight=\"tight\" className=\"text-inherit\">\n\t\t\t\t\t{label}\n\t\t\t\t</Text>\n\t\t\t);\n\t\t},\n\t\t[strings.createNew, renderItem, getItemLabel, highlightMatch, trimmedSearch]\n\t);\n\n\tconst itemToStringLabel = useCallback(\n\t\t(item: T): string => {\n\t\t\tif (isCreateOption(item)) {\n\t\t\t\treturn getCreateOptionValue(item);\n\t\t\t}\n\t\t\treturn getItemLabel(item);\n\t\t},\n\t\t[getItemLabel]\n\t);\n\n\tconst itemToStringValue = useCallback(\n\t\t(item: T): string => isCreateOption(item) ? getCreateOptionValue(item) : (getItemValue ?? getKey)(item),\n\t\t[getItemValue, getKey],\n\t);\n\n\tconst getItemReactKey = useCallback(\n\t\t(item: T): string => {\n\t\t\tif (isCreateOption(item)) return `__create__:${getCreateOptionValue(item)}`;\n\t\t\treturn String(getKey(item));\n\t\t},\n\t\t[getKey]\n\t);\n\n\treturn {\n\t\tstrings,\n\t\tgetKey,\n\t\ttrimmedSearch,\n\t\tlistRef,\n\t\tbaseItems,\n\t\tallItems,\n\t\tgroupedItems,\n\t\tcreateOptionItem,\n\t\tshowStatus,\n\t\tshowEmpty,\n\t\tshowCreateOption,\n\t\trenderItemContent,\n\t\titemToStringLabel,\n\t\titemToStringValue,\n\t\tgetItemReactKey,\n\t\thandleScroll,\n\t};\n}\n","import { useCallback, useState } from 'react';\n\nexport function useComboboxState<T>(\n\tcontrolled: T | undefined,\n\tdefaultValue: T,\n\tonChange?: (value: T) => void,\n) {\n\tconst [localValue, setLocalValue] = useState(() => defaultValue);\n\tconst isControlled = controlled !== undefined;\n\tconst changeValue = useCallback((next: T) => {\n\t\tif (!isControlled) setLocalValue(() => next);\n\t\tonChange?.(next);\n\t}, [isControlled, onChange]);\n\n\treturn [isControlled ? controlled : localValue, changeValue] as const;\n}\n","import { Stack } from '../../base/structure';\n/**\n * Combobox Components\n *\n * A feature-rich, API-driven combobox built on Base UI with shadcn styling.\n * Supports single and multiple selection, form integration, debounced search,\n * grouping, pagination, and more.\n *\n * This version uses shared hooks and components to eliminate duplication\n * between single and multiple selection variants.\n */\n\nimport * as React from 'react';\nimport { useRef, useCallback, useEffect, useId, useState } from 'react';\n\nimport {\n\tComboboxRoot as BaseCombobox,\n\tComboboxChips,\n\tComboboxChip,\n\tComboboxChipsInput,\n} from '../../base/combobox';\nimport { Text } from '../../typography';\nimport { ComboboxInputField } from '../../base/combobox/combobox-field';\nimport { useDensityConfig, type FormControlSize } from '../../../lib/ui-provider';\nimport { resolveComponentScale } from '../../../lib/ui-provider/scale';\nimport { cn } from '../../../lib/utils';\n\nimport { ComboboxDropdown } from './components/combobox-dropdown';\nimport { ErrorMessage } from './components/error-message';\nimport {\n\tformControlMinHeightClasses,\n\tformControlPaddingClasses,\n} from '../../base/forms/form-sizing';\nimport {\n\tDEFAULT_MIN_SEARCH_LENGTH,\n\tDEFAULT_SIZE,\n\tisCreateOption,\n\tgetCreateOptionValue,\n} from './constants';\n\nimport { useComboboxCore } from './hooks/use-combobox-core';\nimport { useComboboxState } from './hooks/use-combobox-state';\nimport { defaultComboboxStrings } from './combobox.strings';\nimport type {\n\tComboboxListControl,\n\tComboboxProps,\n\tMultiComboboxProps,\n\tComboboxSize,\n} from './types';\n\nfunction resolveComboboxSize(\n\tsizeProp: ComboboxSize | undefined,\n\tdefaultScale: FormControlSize | undefined,\n): ComboboxSize {\n\treturn resolveComponentScale(sizeProp, defaultScale, DEFAULT_SIZE);\n};\n\n\nconst primitiveComboboxSizeBySize: Record<ComboboxSize, 'sm' | 'md' | 'lg'> = {\n\tsm: 'sm',\n\tmd: 'md',\n\tlg: 'lg',\n};\n\nfunction getComboboxFormSize(size: ComboboxSize): FormControlSize {\n\treturn size;\n}\n\n/** Appends the component's own error message to any description the caller supplied. */\nfunction describedBy(external: string | undefined, errorId: string | undefined): string | undefined {\n\treturn [external, errorId].filter(Boolean).join(' ') || undefined;\n}\n\n// ============================================================================\n// Single Selection Component\n// ============================================================================\n\n/**\n * The single-selection combobox with the list control the async wrappers in\n * this package need. Not exported from the family entry; `Combobox` is the\n * public component.\n */\nexport function ComboboxWithListControl<T>({\n\t// Core props\n\titems,\n\tvalue,\n\tdefaultValue = null,\n\tonValueChange,\n\tclearSearchOnClose = true,\n\tsearchValue: controlledSearch,\n\tdefaultSearchValue = '',\n\tonSearchValueChange: onSearchChange,\n\tgetItemLabel,\n\tgetItemKey,\n\tgetItemValue,\n\tloading = false,\n\tshowListContent = true,\n\tminSearchLength = DEFAULT_MIN_SEARCH_LENGTH,\n\tstrings: stringsProp,\n\tdisabled = false,\n\tclassName,\n\tclearable = true,\n\trenderItem,\n\tportalContainer,\n\n\t// Form Integration\n\tid,\n\tref,\n\t'aria-label': ariaLabel,\n\t'aria-labelledby': ariaLabelledBy,\n\t'aria-describedby': ariaDescribedBy,\n\t'aria-invalid': ariaInvalid,\n\t'aria-required': ariaRequired,\n\tname,\n\tinvalid,\n\terror,\n\trequired,\n\tonBlur,\n\n\t// Debounced Search\n\tonSearch,\n\tdebounceMs,\n\n\t// Creatable\n\tcreatable,\n\tonCreate,\n\n\t// Grouped Items\n\tgetItemGroup,\n\trenderGroupLabel,\n\n\t// Load More\n\thasMore,\n\tonLoadMore,\n\tloadingMore,\n\n\t// Disable individual items\n\tgetItemDisabled,\n\n\t// Highlight Match\n\thighlightMatch,\n\n\t// Size\n\tsize: sizeProp,\n\n\t// Controlled Open\n\topen,\n\tdefaultOpen = false,\n\tonOpenChange,\n}: ComboboxProps<T> & ComboboxListControl): React.ReactElement {\n\tconst { defaultScale } = useDensityConfig();\n\tconst size = resolveComboboxSize(sizeProp, defaultScale);\n\tconst formSize = getComboboxFormSize(size);\n\tconst fieldInvalid = invalid || error ? true : ariaInvalid;\n\tconst hasError = Boolean(fieldInvalid && fieldInvalid !== 'false');\n\tconst errorId = useId();\n\tconst [selectedValue, onSelectedValueChange] = useComboboxState<T | null>(\n\t\tvalue, defaultValue, onValueChange,\n\t);\n\tconst [searchValue, onSearchValueChange] = useComboboxState(controlledSearch, defaultSearchValue, onSearchChange);\n\tconst [openState, handleOpenChange] = useComboboxState(open, defaultOpen, onOpenChange);\n\tconst resolvedOpen = !disabled && openState;\n\n\t// Use shared core hook\n\tconst core = useComboboxCore({\n\t\titems,\n\t\tsearchValue,\n\t\tonSearchValueChange,\n\t\tgetItemLabel,\n\t\tgetItemKey,\n\t\tgetItemValue,\n\t\tloading,\n\t\tshowListContent,\n\t\tminSearchLength,\n\t\tstrings: stringsProp,\n\t\trenderItem,\n\t\tonSearch,\n\t\tdebounceMs,\n\t\tcreatable,\n\t\tonCreate,\n\t\tgetItemGroup,\n\t\thasMore,\n\t\tonLoadMore,\n\t\tloadingMore,\n\t\thighlightMatch,\n\t\tsize,\n\t\t// Include selected value in items list\n\t\tensuredItems: selectedValue !== null ? [selectedValue] : [],\n\t});\n\n\tconst wasOpen = useRef(resolvedOpen);\n\tuseEffect(() => {\n\t\tconst closed = wasOpen.current && !resolvedOpen;\n\t\twasOpen.current = resolvedOpen;\n\t\tif (closed && clearSearchOnClose && searchValue !== '') onSearchValueChange('');\n\t}, [resolvedOpen, clearSearchOnClose, searchValue, onSearchValueChange]);\n\n\t// When closed with a selected value, show the label; when open, show search text\n\tconst displayInputValue = resolvedOpen\n\t\t? searchValue\n\t\t: (selectedValue !== null ? core.itemToStringLabel(selectedValue) : '');\n\n\t// Handle value change, including create option\n\tconst handleValueChange = useCallback(\n\t\t(value: T | null): void => {\n\t\t\tif (value && isCreateOption(value)) {\n\t\t\t\tconst inputValue = getCreateOptionValue(value);\n\t\t\t\tonCreate?.(inputValue);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tonSelectedValueChange(value);\n\t\t},\n\t\t[onSelectedValueChange, onCreate]\n\t);\n\n\treturn (\n\t\t<Stack gap=\"dense\" className=\"combobox--component\">\n\t\t\t<BaseCombobox\n\t\t\t\tdismissLabel={core.strings.dismiss}\n\t\t\t\titems={core.allItems}\n\t\t\t\tvalue={selectedValue}\n\t\t\t\tonValueChange={(value, details) => {\n\t\t\t\t\t// Escape on a closed field must not erase the chosen value; let the\n\t\t\t\t\t// surrounding dialog or drawer handle the key instead.\n\t\t\t\t\tif (details.reason === 'escape-key') { details.allowPropagation(); return; }\n\t\t\t\t\thandleValueChange(value);\n\t\t\t\t}}\n\t\t\t\tinputValue={displayInputValue}\n\t\t\t\tonInputValueChange={(value, details) => {\n\t\t\t\t\tconst { reason } = details;\n\t\t\t\t\tif (reason === 'escape-key') { details.allowPropagation(); return; }\n\t\t\t\t\tif (reason === 'item-press') {\n\t\t\t\t\t\tonSearchValueChange('');\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tonSearchValueChange(value);\n\t\t\t\t}}\n\t\t\t\titemToStringLabel={core.itemToStringLabel}\n\t\t\t\titemToStringValue={core.itemToStringValue}\n\t\t\t\tdisabled={disabled}\n\t\t\t\tfilter={null}\n\t\t\t\tname={name}\n\t\t\t\trequired={required}\n\t\t\t\topen={resolvedOpen}\n\t\t\t\tonOpenChange={handleOpenChange}\n\t\t\t>\n\t\t\t\t<ComboboxInputField\n\t\t\t\t\tid={id}\n\t\t\t\t\tref={ref}\n\t\t\t\t\taria-label={ariaLabel}\n\t\t\t\t\taria-labelledby={ariaLabelledBy}\n\t\t\t\t\taria-describedby={describedBy(ariaDescribedBy, error ? errorId : undefined)}\n\t\t\t\t\taria-invalid={fieldInvalid}\n\t\t\t\t\taria-required={ariaRequired}\n\t\t\t\t\tplaceholder={core.strings.placeholder}\n\t\t\t\t\tclearLabel={core.strings.clear}\n\t\t\t\t\ttoggleLabel={core.strings.toggle}\n\t\t\t\t\tclassName={className}\n\t\t\t\t\tsize={formSize}\n\t\t\t\t\terror={hasError}\n\t\t\t\t\trequired={required}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\tclearable={clearable}\n\t\t\t\t\tonBlur={onBlur}\n\t\t\t\t/>\n\n\t\t\t\t<ComboboxDropdown\n\t\t\t\t\tloading={loading}\n\t\t\t\t\tshowStatus={core.showStatus}\n\t\t\t\t\tshowEmpty={core.showEmpty}\n\t\t\t\t\tsearchValue={searchValue}\n\t\t\t\t\tminSearchLength={minSearchLength}\n\t\t\t\t\titems={core.allItems}\n\t\t\t\t\tgroupedItems={core.groupedItems}\n\t\t\t\t\tcreateOptionItem={core.createOptionItem}\n\t\t\t\t\trenderItemContent={core.renderItemContent}\n\t\t\t\t\tgetItemReactKey={core.getItemReactKey}\n\t\t\t\t\tgetItemDisabled={getItemDisabled}\n\t\t\t\t\trenderGroupLabel={renderGroupLabel}\n\t\t\t\t\tloadingMore={showListContent && !core.showStatus ? loadingMore : false}\n\t\t\t\t\tstrings={core.strings}\n\t\t\t\t\tsize={size}\n\t\t\t\t\tportalContainer={portalContainer}\n\t\t\t\t\tlistRef={core.listRef}\n\t\t\t\t/>\n\t\t\t</BaseCombobox>\n\n\t\t\t<ErrorMessage id={errorId} error={error} size={size} />\n\t\t</Stack>\n\t);\n}\n\nexport function Combobox<T>(props: ComboboxProps<T>): React.ReactElement {\n\treturn <ComboboxWithListControl {...props} />;\n}\n\n// ============================================================================\n// Multiple Selection Component\n// ============================================================================\n\nexport function MultiCombobox<T>({\n\t// Core props\n\titems,\n\tvalues,\n\tdefaultValues = [],\n\tonValuesChange,\n\tsearchValue: controlledSearch,\n\tdefaultSearchValue = '',\n\tonSearchValueChange: onSearchChange,\n\tgetItemLabel,\n\tgetItemKey,\n\tgetItemValue,\n\tloading = false,\n\tminSearchLength = DEFAULT_MIN_SEARCH_LENGTH,\n\tstrings: stringsProp,\n\tdisabled = false,\n\tclassName,\n\trenderItem,\n\tportalContainer,\n\n\t// Form Integration\n\tid,\n\tref,\n\t'aria-label': ariaLabel,\n\t'aria-labelledby': ariaLabelledBy,\n\t'aria-describedby': ariaDescribedBy,\n\t'aria-invalid': ariaInvalid,\n\t'aria-required': ariaRequired,\n\tname,\n\tinvalid,\n\terror,\n\trequired,\n\tonBlur,\n\n\t// Debounced Search\n\tonSearch,\n\tdebounceMs,\n\n\t// Creatable\n\tcreatable,\n\tonCreate,\n\n\t// Grouped Items\n\tgetItemGroup,\n\trenderGroupLabel,\n\n\t// Load More\n\thasMore,\n\tonLoadMore,\n\tloadingMore,\n\n\t// Disable individual items\n\tgetItemDisabled,\n\n\t// Highlight Match\n\thighlightMatch,\n\n\t// Size\n\tsize: sizeProp,\n\n\t// Controlled Open\n\topen,\n\tdefaultOpen = false,\n\tonOpenChange,\n\n\t// Behaviour\n\tcloseOnSelect = false,\n\tapplyButton = false,\n\tonApply,\n\tonCancel,\n}: MultiComboboxProps<T>): React.ReactElement {\n\tconst { defaultScale } = useDensityConfig();\n\tconst size = resolveComboboxSize(sizeProp, defaultScale);\n\tconst formSize = getComboboxFormSize(size);\n\tconst primitiveComboboxSize = primitiveComboboxSizeBySize[size];\n\tconst fieldInvalid = invalid || error ? true : ariaInvalid;\n\tconst hasError = Boolean(fieldInvalid && fieldInvalid !== 'false');\n\tconst errorId = useId();\n\tconst containerRef = useRef<HTMLDivElement | null>(null);\n\tconst getKey = getItemKey ?? getItemLabel;\n\tconst [selectedValues, onSelectedValuesChange] = useComboboxState<T[]>(\n\t\tvalues, defaultValues, onValuesChange,\n\t);\n\tconst [searchValue, onSearchValueChange] = useComboboxState(controlledSearch, defaultSearchValue, onSearchChange);\n\tconst [openState, setOpen] = useComboboxState(open, defaultOpen, onOpenChange);\n\tconst resolvedOpen = !disabled && openState;\n\n\t// Draft state — only used in `applyButton` mode. It holds the user's\n\t// in-progress selection until Apply commits it; `null` means nothing is\n\t// pending, so the committed selection shows. Keeping \"no draft\" as its own\n\t// value, instead of mirroring `selectedValues` in an effect, is what lets a\n\t// parent pass a fresh array on every render (`field.value ?? []`) without\n\t// wiping the picks. Every close without Apply clears it.\n\tconst [draftValues, setDraftValues] = useState<T[] | null>(null);\n\n\t// Use shared core hook\n\tconst core = useComboboxCore({\n\t\titems,\n\t\tsearchValue,\n\t\tonSearchValueChange,\n\t\tgetItemLabel,\n\t\tgetItemKey,\n\t\tgetItemValue,\n\t\tloading,\n\t\tminSearchLength,\n\t\tstrings: stringsProp,\n\t\trenderItem,\n\t\tonSearch,\n\t\tdebounceMs,\n\t\tcreatable,\n\t\tonCreate,\n\t\tgetItemGroup,\n\t\thasMore,\n\t\tonLoadMore,\n\t\tloadingMore,\n\t\thighlightMatch,\n\t\tsize,\n\t\t// Include selected values in items list\n\t\tensuredItems: selectedValues,\n\t});\n\n\t// Handle value change, filtering out create options\n\tconst handleValueChange = useCallback(\n\t\t(values: T[]): void => {\n\t\t\tconst regularValues: T[] = [];\n\t\t\tlet createValue: string | null = null;\n\n\t\t\tfor (const value of values) {\n\t\t\t\tif (isCreateOption(value)) {\n\t\t\t\t\tcreateValue = getCreateOptionValue(value);\n\t\t\t\t} else {\n\t\t\t\t\tregularValues.push(value);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (createValue !== null) {\n\t\t\t\t// Choosing the create row adds nothing to the selection itself; the\n\t\t\t\t// consumer decides what `onCreate` selects.\n\t\t\t\tonCreate?.(createValue);\n\t\t\t} else if (!applyButton || closeOnSelect) {\n\t\t\t\t// A pick that also closes the list can never reach Apply. It is\n\t\t\t\t// committed, so a selection is never shown without being saved.\n\t\t\t\tsetDraftValues(null);\n\t\t\t\tonSelectedValuesChange(regularValues);\n\t\t\t} else {\n\t\t\t\tsetDraftValues(regularValues);\n\t\t\t}\n\n\t\t\tif (closeOnSelect) {\n\t\t\t\tsetOpen(false);\n\t\t\t}\n\t\t},\n\t\t[onSelectedValuesChange, onCreate, applyButton, closeOnSelect, setOpen],\n\t);\n\n\tconst handleApply = useCallback(() => {\n\t\tif (applyButton) onSelectedValuesChange(draftValues ?? selectedValues);\n\t\tsetDraftValues(null);\n\t\tonApply?.();\n\t\tsetOpen(false);\n\t}, [applyButton, draftValues, selectedValues, onApply, onSelectedValuesChange, setOpen]);\n\n\tconst handleCancel = useCallback(() => {\n\t\tsetDraftValues(null);\n\t\tonCancel?.();\n\t\tsetOpen(false);\n\t}, [onCancel, setOpen]);\n\n\tconst visibleValues = applyButton && draftValues !== null ? draftValues : selectedValues;\n\tconst chipsPlaceholder = visibleValues.length > 0 ? undefined : core.strings.placeholder;\n\n\treturn (\n\t\t<Stack gap=\"dense\" className=\"combobox--component\">\n\t\t\t<BaseCombobox\n\t\t\t\tdismissLabel={core.strings.dismiss}\n\t\t\t\titems={core.allItems}\n\t\t\t\tmultiple\n\t\t\t\tvalue={visibleValues}\n\t\t\t\tonValueChange={(value, details) => {\n\t\t\t\t\t// Escape on a closed field must not erase the chosen value; let the\n\t\t\t\t\t// surrounding dialog or drawer handle the key instead.\n\t\t\t\t\tif (details.reason === 'escape-key') { details.allowPropagation(); return; }\n\t\t\t\t\thandleValueChange(value);\n\t\t\t\t}}\n\t\t\t\tinputValue={searchValue}\n\t\t\t\tonInputValueChange={(value, details) => {\n\t\t\t\t\tconst { reason } = details;\n\t\t\t\t\tif (reason === 'escape-key') { details.allowPropagation(); return; }\n\t\t\t\t\tif (reason === 'item-press') {\n\t\t\t\t\t\tonSearchValueChange('');\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tonSearchValueChange(value);\n\t\t\t\t}}\n\t\t\t\titemToStringLabel={core.itemToStringLabel}\n\t\t\t\titemToStringValue={core.itemToStringValue}\n\t\t\t\tdisabled={disabled}\n\t\t\t\tfilter={null}\n\t\t\t\tname={name}\n\t\t\t\trequired={required}\n\t\t\t\topen={resolvedOpen}\n\t\t\t\tonOpenChange={(next, details) => {\n\t\t\t\t\tif (!next && applyButton && !closeOnSelect && details.reason === 'item-press') {\n\t\t\t\t\t\tdetails.cancel();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\t// In apply-button mode, closing without committing should\n\t\t\t\t\t// revert the draft so the next open starts clean.\n\t\t\t\t\tif (!next) setDraftValues(null);\n\t\t\t\t\tsetOpen(next);\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<ComboboxChips\n\t\t\t\t\tref={containerRef}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\tformControlMinHeightClasses[formSize],\n\t\t\t\t\t\tformControlPaddingClasses[formSize],\n\t\t\t\t\t\tformSize === 'sm' ? 'text-pxs' : 'text-sm',\n\t\t\t\t\t\t'bg-transparent !shadow-none',\n\t\t\t\t\t\tclassName,\n\t\t\t\t\t)}\n\t\t\t\t\tsize={primitiveComboboxSize}\n\t\t\t\t\terror={hasError}\n\t\t\t\t>\n\t\t\t\t\t{visibleValues.map((item) => (\n\t\t\t\t\t\t<ComboboxChip key={getKey(item)} strings={{ remove: (core.strings.removeSelection ?? defaultComboboxStrings.removeSelection)(getItemLabel(item)) }}>\n\t\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\t\ttag=\"span\"\n\t\t\t\t\t\t\t\tsize=\"inherit\"\n\t\t\t\t\t\t\t\tweight=\"medium\"\n\t\t\t\t\t\t\t\tlineHeight=\"tight\"\n\t\t\t\t\t\t\t\tclassName=\"combobox--chip-label text-inherit\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{getItemLabel(item)}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t</ComboboxChip>\n\t\t\t\t\t))}\n\t\t\t\t\t<ComboboxChipsInput\n\t\t\t\t\t\tid={id}\n\t\t\t\t\t\tref={ref}\n\t\t\t\t\t\taria-label={ariaLabel}\n\t\t\t\t\t\taria-labelledby={ariaLabelledBy}\n\t\t\t\t\t\taria-describedby={describedBy(ariaDescribedBy, error ? errorId : undefined)}\n\t\t\t\t\t\tplaceholder={chipsPlaceholder}\n\t\t\t\t\t\taria-invalid={fieldInvalid}\n\t\t\t\t\t\taria-required={ariaRequired ?? required}\n\t\t\t\t\t\tonBlur={onBlur}\n\t\t\t\t\t/>\n\t\t\t\t</ComboboxChips>\n\n\t\t\t\t<ComboboxDropdown\n\t\t\t\t\tloading={loading}\n\t\t\t\t\tshowStatus={core.showStatus}\n\t\t\t\t\tshowEmpty={core.showEmpty}\n\t\t\t\t\tsearchValue={searchValue}\n\t\t\t\t\tminSearchLength={minSearchLength}\n\t\t\t\t\titems={core.allItems}\n\t\t\t\t\tgroupedItems={core.groupedItems}\n\t\t\t\t\tcreateOptionItem={core.createOptionItem}\n\t\t\t\t\trenderItemContent={core.renderItemContent}\n\t\t\t\t\tgetItemReactKey={core.getItemReactKey}\n\t\t\t\t\tgetItemDisabled={getItemDisabled}\n\t\t\t\t\trenderGroupLabel={renderGroupLabel}\n\t\t\t\t\tloadingMore={!core.showStatus ? loadingMore : false}\n\t\t\t\t\tstrings={core.strings}\n\t\t\t\t\tsize={size}\n\t\t\t\t\tportalContainer={portalContainer}\n\t\t\t\t\tlistRef={core.listRef}\n\t\t\t\t\tanchor={containerRef}\n\t\t\t\t\tapplyFooter={applyButton ? {\n\t\t\t\t\t\tapplyLabel: core.strings.apply,\n\t\t\t\t\t\tcancelLabel: core.strings.cancel,\n\t\t\t\t\t\tonApply: handleApply,\n\t\t\t\t\t\tonCancel: handleCancel,\n\t\t\t\t\t} : undefined}\n\t\t\t\t/>\n\t\t\t</BaseCombobox>\n\n\t\t\t<ErrorMessage id={errorId} error={error} size={size} />\n\t\t</Stack>\n\t);\n}\n\nCombobox.displayName = 'Combobox';\nComboboxWithListControl.displayName = 'Combobox';\nMultiCombobox.displayName = 'MultiCombobox';\n","import { useCallback, useEffect, useMemo, useRef, useState, type ReactNode } from 'react';\n\nimport { ErrorState } from '../../base/feedback';\nimport { Stack } from '../../base/structure';\nimport { Text } from '../../typography';\nimport { useDebouncedCallback } from '../../../hooks/use-debounced-callback';\nimport { useStrings, type StringsProp } from '../../../lib/strings';\nimport { cn } from '../../../lib/utils';\n\nimport { ComboboxWithListControl } from './combobox';\nimport { defaultComboboxStrings } from './combobox.strings';\nimport { DEFAULT_DEBOUNCE_MS } from './constants';\nimport { useComboboxState } from './hooks/use-combobox-state';\nimport type { ComboboxSize, ComboboxStrings, ComboboxProps } from './types';\n\nexport interface AsyncResourceComboboxFetcherArgs {\n\tquery: string;\n\tlimit: number;\n\tsignal?: AbortSignal;\n}\n\nexport type AsyncResourceComboboxFetcher<T> = (\n\targs: AsyncResourceComboboxFetcherArgs,\n) => Promise<T[]>;\n\nexport interface AsyncResourceComboboxStrings extends ComboboxStrings {\n\terror: string;\n\tretry: string;\n}\n\nexport const defaultAsyncResourceComboboxStrings: AsyncResourceComboboxStrings = {\n\t...defaultComboboxStrings,\n\terror: 'Unable to load options.',\n\tretry: 'Retry',\n};\n\nexport interface AsyncResourceComboboxRenderOptionContext {\n\tquery: string;\n\tisSelected: boolean;\n}\n\nexport interface AsyncResourceComboboxRenderErrorContext {\n\terror: unknown;\n\tquery: string;\n\tretry: () => void;\n}\n\nexport interface AsyncResourceComboboxProps<T>\n\textends Omit<\n\t\tComboboxProps<T>,\n\t\t| 'items'\n\t\t| 'hasMore'\n\t\t| 'onLoadMore'\n\t\t| 'loadingMore'\n\t\t| 'clearSearchOnClose'\n\t\t| 'getItemLabel'\n\t\t| 'getItemKey'\n\t\t| 'loading'\n\t\t| 'renderItem'\n\t\t| 'strings'\n\t\t| 'error'\n\t\t| 'debounceMs'\n\t> {\n\t/**\n\t * Loads options for the current query. This component owns the request\n\t * lifecycle: calls are debounced by `debounceMs`, the previous request is\n\t * aborted through `args.signal`, and out-of-order responses are discarded, so\n\t * the fetcher only needs to resolve or reject.\n\t *\n\t * A rejection clears the fetched list and presents the localized error as an\n\t * exclusive state, suppressing the ordinary no-results row. Honour\n\t * `args.signal` so aborts do not surface as errors.\n\t */\n\tfetcher: AsyncResourceComboboxFetcher<T>;\n\t/** Selected item, for controlled use. Omit entirely to let the component own selection. */\n\tvalue?: T | null;\n\t/** Initial selection for uncontrolled use. Ignored once `value` is passed. */\n\tdefaultValue?: T | null;\n\t/** Fired with the new selection in both controlled and uncontrolled modes. */\n\tonValueChange?: (value: T | null) => void;\n\t/** Fired after a successful fetch with the items received and the request that produced them. */\n\tonAfterFetch?: (items: T[], context: AsyncResourceComboboxFetcherArgs) => void;\n\t/** Fired when the fetcher rejects. Aborted and superseded requests never reach this. */\n\tonError?: (error: unknown, context: AsyncResourceComboboxFetcherArgs) => void;\n\t/** Stable identity for an item. Also decides which option reads as selected. */\n\tgetKey: (item: T) => string;\n\t/** Primary display label for an item. */\n\tgetLabel: (item: T) => string;\n\t/** Secondary text beside the label in the default option row. */\n\tgetDescription?: (item: T) => ReactNode;\n\t/** Tertiary, dimmed text after the description in the default option row. */\n\tgetMeta?: (item: T) => ReactNode;\n\t/**\n\t * Replaces the entire default option row, including the label. When set,\n\t * `getLabel`, `getDescription`, and `getMeta` no longer affect rendering\n\t * (`getLabel` is still used for the input's text value).\n\t */\n\trenderOption?: (item: T, context: AsyncResourceComboboxRenderOptionContext) => ReactNode;\n\t/**\n\t * Page size passed to the fetcher as `args.limit`. Default: `10`.\n\t *\n\t * Advisory only — the component does not truncate the returned array, so the\n\t * fetcher is responsible for honouring it.\n\t */\n\tlimit?: number;\n\t/** Quiet period before a query is issued, in milliseconds. Default: `300`. */\n\tdebounceMs?: number;\n\t/**\n\t * Characters required before a query is issued. Default: `0` here, rather\n\t * than the `3` used by the synchronous comboboxes — resource lookup is\n\t * expected to be browsable from the first keystroke alongside `preload`.\n\t *\n\t * An empty input is governed by `preload`, not by this threshold.\n\t */\n\tminSearchLength?: number;\n\t/**\n\t * Fetches with an empty query so options are available before typing.\n\t * Default: `true`. Set `false` to require a query first.\n\t */\n\tpreload?: boolean;\n\t/** Replaces the default error copy shown when the fetcher rejects. */\n\terrorMessage?: ReactNode;\n\t/** Replaces the package error state while retaining the failed query and retry action. */\n\trenderError?: (context: AsyncResourceComboboxRenderErrorContext) => ReactNode;\n\t/** Overrides the combobox copy, including the async-only `error` message. */\n\tstrings?: StringsProp<AsyncResourceComboboxStrings>;\n\t/** Trigger density. Falls back to `UIProvider.density.defaultScale`, then `md`. */\n\tsize?: ComboboxSize;\n}\n\nfunction isSimpleText(value: ReactNode): value is string | number | bigint {\n\treturn typeof value === 'string' || typeof value === 'number' || typeof value === 'bigint';\n}\n\nexport function AsyncResourceCombobox<T>({\n\tfetcher,\n\tvalue,\n\tdefaultValue = null,\n\tonValueChange,\n\tsearchValue: controlledSearch,\n\tdefaultSearchValue = '',\n\tonSearchValueChange,\n\tonAfterFetch,\n\tonError,\n\tgetKey,\n\tgetLabel,\n\tgetDescription,\n\tgetMeta,\n\trenderOption,\n\tlimit = 10,\n\tdebounceMs = DEFAULT_DEBOUNCE_MS,\n\tpreload = true,\n\tminSearchLength = 0,\n\terrorMessage,\n\trenderError,\n\tstrings: stringsProp,\n\tdisabled,\n\tsize,\n\tref,\n\t...props\n}: AsyncResourceComboboxProps<T>) {\n\tconst strings = useStrings(defaultAsyncResourceComboboxStrings, stringsProp);\n\tconst [selectedValue, handleValueChange] = useComboboxState<T | null>(value, defaultValue, onValueChange);\n\tconst [searchValue, setSearchValue] = useComboboxState(controlledSearch, defaultSearchValue, onSearchValueChange);\n\tconst [items, setItems] = useState<T[]>([]);\n\tconst [isLoading, setIsLoading] = useState(false);\n\tconst [fetchError, setFetchError] = useState<{ error: unknown; query: string } | null>(null);\n\tconst [retryCount, setRetryCount] = useState(0);\n\tconst requestIdRef = useRef(0);\n\tconst trimmedSearch = searchValue.trim();\n\t// Retry unmounts the control that had focus, so the input is kept reachable\n\t// while the consumer's own ref still receives it.\n\tconst inputRef = useRef<HTMLInputElement | null>(null);\n\tconst setInputRef = useCallback((node: HTMLInputElement | null) => {\n\t\tinputRef.current = node;\n\t\tif (typeof ref === 'function') return ref(node);\n\t\tif (ref) ref.current = node;\n\t\treturn undefined;\n\t}, [ref]);\n\n\t// `fetcher`, `onAfterFetch` and `onError` are almost always inline, so their\n\t// identities change on every render. Listing them in the effect below re-ran\n\t// it every render, and because the fetch sets state that re-render was\n\t// self-sustaining — an unbounded request loop. `useDebouncedCallback` holds\n\t// them in a ref and returns a stable function, so the effect only re-runs on\n\t// a real query change.\n\tconst runFetch = useDebouncedCallback(\n\t\t(requestId: number, context: AsyncResourceComboboxFetcherArgs) => {\n\t\t\tsetIsLoading(true);\n\t\t\tsetFetchError(null);\n\n\t\t\t// A fetcher that throws before returning its promise (a malformed URL,\n\t\t\t// say) is reported like any other rejection instead of escaping.\n\t\t\tlet request: Promise<T[]>;\n\t\t\ttry {\n\t\t\t\trequest = Promise.resolve(fetcher(context));\n\t\t\t} catch (thrown) {\n\t\t\t\trequest = Promise.reject(thrown);\n\t\t\t}\n\n\t\t\trequest\n\t\t\t\t.then((nextItems) => {\n\t\t\t\t\tif (context.signal?.aborted || requestIdRef.current !== requestId) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tsetItems(nextItems);\n\t\t\t\t\tonAfterFetch?.(nextItems, context);\n\t\t\t\t})\n\t\t\t\t.catch((nextError: unknown) => {\n\t\t\t\t\tif (context.signal?.aborted || requestIdRef.current !== requestId) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tsetItems([]);\n\t\t\t\t\tsetFetchError({ error: nextError, query: context.query });\n\t\t\t\t\tonError?.(nextError, context);\n\t\t\t\t})\n\t\t\t\t.finally(() => {\n\t\t\t\t\tif (!context.signal?.aborted && requestIdRef.current === requestId) {\n\t\t\t\t\t\tsetIsLoading(false);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t},\n\t\tdebounceMs,\n\t);\n\n\tuseEffect(() => {\n\t\tif (disabled) {\n\t\t\tsetIsLoading(false);\n\t\t\treturn;\n\t\t}\n\n\t\tconst shouldFetch =\n\t\t\ttrimmedSearch.length > 0\n\t\t\t\t? trimmedSearch.length >= minSearchLength\n\t\t\t\t: preload;\n\n\t\tif (!shouldFetch) {\n\t\t\tsetItems([]);\n\t\t\tsetIsLoading(false);\n\t\t\tsetFetchError(null);\n\t\t\treturn;\n\t\t}\n\n\t\tconst requestId = requestIdRef.current + 1;\n\t\trequestIdRef.current = requestId;\n\t\tconst controller = new AbortController();\n\n\t\t// Pending from the moment the query changes, not from when the debounced\n\t\t// request starts: otherwise the previous query's rows stay on screen, and\n\t\t// selectable, for the whole debounce window.\n\t\tsetIsLoading(true);\n\t\tsetFetchError(null);\n\t\trunFetch(requestId, {\n\t\t\tquery: trimmedSearch,\n\t\t\tlimit,\n\t\t\tsignal: controller.signal,\n\t\t});\n\n\t\treturn () => {\n\t\t\trunFetch.cancel();\n\t\t\tcontroller.abort();\n\t\t};\n\t}, [\n\t\tdisabled,\n\t\tlimit,\n\t\tminSearchLength,\n\t\tpreload,\n\t\tretryCount,\n\t\trunFetch,\n\t\ttrimmedSearch,\n\t]);\n\n\tconst retry = useCallback(() => {\n\t\tif (!fetchError) return;\n\t\tsetSearchValue(fetchError.query);\n\t\tsetRetryCount((count) => count + 1);\n\t\t// The error and its Retry button unmount as the request restarts.\n\t\tinputRef.current?.focus();\n\t}, [fetchError, setSearchValue]);\n\n\tconst renderItem = useCallback(\n\t\t(item: T) => {\n\t\t\tif (renderOption) {\n\t\t\t\treturn renderOption(item, {\n\t\t\t\t\tquery: trimmedSearch,\n\t\t\t\t\tisSelected: selectedValue !== null && getKey(selectedValue) === getKey(item),\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst description = getDescription?.(item);\n\t\t\tconst meta = getMeta?.(item);\n\n\t\t\treturn (\n\t\t\t\t<Stack\n\t\t\t\t\trender={<span />}\n\t\t\t\t\tdirection=\"horizontal\"\n\t\t\t\t\tgap=\"md\"\n\t\t\t\t\twrap={false}\n\t\t\t\t\tclassName=\"async-resource-combobox--option leading-tight\"\n\t\t\t\t>\n\t\t\t\t\t<Text type=\"inherit\"\n\t\t\t\t\t\ttag=\"span\"\n\t\t\t\t\t\tsize={size === 'sm' ? 'pxs' : undefined}\n\t\t\t\t\t\tweight=\"medium\"\n\t\t\t\t\t\tclassName=\"min-w-0 shrink truncate\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{getLabel(item)}\n\t\t\t\t\t</Text>\n\t\t\t\t\t{(!!description || !!meta) && (\n\t\t\t\t\t\t<span className=\"inline-flex min-w-0 flex-1 items-center gap-space-sm overflow-hidden text-muted-foreground\">\n\t\t\t\t\t\t\t{!!description && (isSimpleText(description) ? (\n\t\t\t\t\t\t\t\t<Text tag=\"span\" size=\"xs\" type=\"secondary\" className=\"min-w-0 truncate\">\n\t\t\t\t\t\t\t\t\t{description}\n\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t) : description)}\n\t\t\t\t\t\t\t{!!meta && (isSimpleText(meta) ? (\n\t\t\t\t\t\t\t\t<Text tag=\"span\" size=\"xs\" type=\"secondary\" className=\"min-w-0 truncate\">\n\t\t\t\t\t\t\t\t\t{meta}\n\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t) : meta)}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t)}\n\t\t\t\t</Stack>\n\t\t\t);\n\t\t},\n\t\t[getDescription, getKey, getLabel, getMeta, renderOption, selectedValue, size, trimmedSearch],\n\t);\n\n\tconst resolvedError = useMemo(() => {\n\t\tif (!fetchError) return undefined;\n\t\treturn errorMessage ?? strings.error;\n\t}, [errorMessage, fetchError, strings.error]);\n\tconst hasFetchError = fetchError !== null;\n\tconst errorNode = fetchError\n\t\t? renderError?.({ error: fetchError.error, query: fetchError.query, retry }) ?? (\n\t\t\t<ErrorState\n\t\t\t\tvariant=\"inline\"\n\t\t\t\ttitle={resolvedError}\n\t\t\t\tonRetry={retry}\n\t\t\t\tretryLabel={strings.retry}\n\t\t\t\tclassName=\"async-resource-combobox--error mt-space-sm\"\n\t\t\t/>\n\t\t)\n\t\t: null;\n\n\treturn (\n\t\t<div\n\t\t\tdata-component=\"async-resource-combobox\"\n\t\t\tdata-slot=\"async-resource-combobox\"\n\t\t\tclassName={cn('async-resource-combobox--component', props.className)}\n\t\t>\n\t\t\t<ComboboxWithListControl\n\t\t\t\t{...props}\n\t\t\t\tref={setInputRef}\n\t\t\t\tclassName={undefined}\n\t\t\t\tdisabled={disabled}\n\t\t\t\tsize={size}\n\t\t\t\titems={items}\n\t\t\t\tvalue={selectedValue}\n\t\t\t\tonValueChange={handleValueChange}\n\t\t\t\tclearSearchOnClose={false}\n\t\t\t\tsearchValue={searchValue}\n\t\t\t\tonSearchValueChange={setSearchValue}\n\t\t\t\tgetItemLabel={getLabel}\n\t\t\t\tgetItemKey={getKey}\n\t\t\t\tloading={!hasFetchError && isLoading}\n\t\t\t\tshowListContent={!hasFetchError}\n\t\t\t\tminSearchLength={minSearchLength}\n\t\t\t\tstrings={strings}\n\t\t\t\trenderItem={renderItem}\n\t\t\t/>\n\t\t\t{errorNode}\n\t\t</div>\n\t);\n}\n\nAsyncResourceCombobox.displayName = 'AsyncResourceCombobox';\n"],"mappings":"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"}
|