@eifi1/ui-kit 0.33.0 → 0.34.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/README.md +445 -283
- package/dist/account/account-parts.d.ts +6 -8
- package/dist/account/account-parts.js +1 -2
- package/dist/account/account-parts.js.map +1 -1
- package/dist/{components → account}/account-settings-labels.d.ts +16 -10
- package/dist/{components → account}/account-settings-labels.js +3 -1
- package/dist/account/account-settings-labels.js.map +1 -0
- package/dist/{components → account}/account-settings.d.ts +53 -23
- package/dist/{components → account}/account-settings.js +97 -26
- package/dist/account/account-settings.js.map +1 -0
- package/dist/account/data-export-setting-labels.d.ts +2 -0
- package/dist/account/data-export-setting-labels.js +15 -0
- package/dist/account/data-export-setting-labels.js.map +1 -0
- package/dist/account/data-export-setting.d.ts +9 -11
- package/dist/account/data-export-setting.js +11 -27
- package/dist/account/data-export-setting.js.map +1 -1
- package/dist/account/delete-account-setting-labels.d.ts +2 -0
- package/dist/account/delete-account-setting-labels.js +23 -0
- package/dist/account/delete-account-setting-labels.js.map +1 -0
- package/dist/account/delete-account-setting.d.ts +132 -100
- package/dist/account/delete-account-setting.js +7 -23
- package/dist/account/delete-account-setting.js.map +1 -1
- package/dist/account/email-change-setting-labels.d.ts +2 -0
- package/dist/account/email-change-setting-labels.js +28 -0
- package/dist/account/email-change-setting-labels.js.map +1 -0
- package/dist/account/email-change-setting.d.ts +10 -12
- package/dist/account/email-change-setting.js +11 -30
- package/dist/account/email-change-setting.js.map +1 -1
- package/dist/{components → account}/passkeys-setting.d.ts +9 -12
- package/dist/{components → account}/passkeys-setting.js +10 -7
- package/dist/account/passkeys-setting.js.map +1 -0
- package/dist/account/sessions-setting-labels.d.ts +2 -0
- package/dist/account/sessions-setting-labels.js +22 -0
- package/dist/account/sessions-setting-labels.js.map +1 -0
- package/dist/account/sessions-setting.d.ts +12 -14
- package/dist/account/sessions-setting.js +8 -23
- package/dist/account/sessions-setting.js.map +1 -1
- package/dist/admin/admin-action-confirm-labels.d.ts +2 -0
- package/dist/admin/admin-action-confirm-labels.js +16 -0
- package/dist/admin/admin-action-confirm-labels.js.map +1 -0
- package/dist/admin/admin-action-confirm.d.ts +156 -100
- package/dist/admin/admin-action-confirm.js +17 -22
- package/dist/admin/admin-action-confirm.js.map +1 -1
- package/dist/admin/admin-action-log-labels.d.ts +2 -0
- package/dist/admin/admin-action-log-labels.js +73 -0
- package/dist/admin/admin-action-log-labels.js.map +1 -0
- package/dist/admin/admin-action-log.d.ts +98 -22
- package/dist/admin/admin-action-log.js +48 -45
- package/dist/admin/admin-action-log.js.map +1 -1
- package/dist/admin/admin-parts.d.ts +7 -14
- package/dist/admin/admin-parts.js +0 -4
- package/dist/admin/admin-parts.js.map +1 -1
- package/dist/admin/invitations-panel-labels.d.ts +2 -0
- package/dist/admin/invitations-panel-labels.js +29 -0
- package/dist/admin/invitations-panel-labels.js.map +1 -0
- package/dist/admin/invitations-panel.d.ts +167 -100
- package/dist/admin/invitations-panel.js +12 -31
- package/dist/admin/invitations-panel.js.map +1 -1
- package/dist/admin/plan-change-labels.d.ts +2 -0
- package/dist/admin/plan-change-labels.js +22 -0
- package/dist/admin/plan-change-labels.js.map +1 -0
- package/dist/admin/plan-change.d.ts +244 -100
- package/dist/admin/plan-change.js +17 -23
- package/dist/admin/plan-change.js.map +1 -1
- package/dist/admin/reviewer-scope-editor-labels.d.ts +2 -0
- package/dist/admin/reviewer-scope-editor-labels.js +14 -0
- package/dist/admin/reviewer-scope-editor-labels.js.map +1 -0
- package/dist/admin/reviewer-scope-editor.d.ts +95 -100
- package/dist/admin/reviewer-scope-editor.js +5 -13
- package/dist/admin/reviewer-scope-editor.js.map +1 -1
- package/dist/admin/role-select-labels.d.ts +2 -0
- package/dist/admin/role-select-labels.js +15 -0
- package/dist/admin/role-select-labels.js.map +1 -0
- package/dist/admin/role-select.d.ts +136 -100
- package/dist/admin/role-select.js +7 -18
- package/dist/admin/role-select.js.map +1 -1
- package/dist/admin/transfer-ownership-dialog-labels.d.ts +2 -0
- package/dist/admin/transfer-ownership-dialog-labels.js +18 -0
- package/dist/admin/transfer-ownership-dialog-labels.js.map +1 -0
- package/dist/admin/transfer-ownership-dialog.d.ts +81 -100
- package/dist/admin/transfer-ownership-dialog.js +3 -15
- package/dist/admin/transfer-ownership-dialog.js.map +1 -1
- package/dist/admin/user-roster-labels.d.ts +2 -0
- package/dist/admin/user-roster-labels.js +16 -0
- package/dist/admin/user-roster-labels.js.map +1 -0
- package/dist/admin/user-roster.d.ts +225 -100
- package/dist/admin/user-roster.js +4 -14
- package/dist/admin/user-roster.js.map +1 -1
- package/dist/auth/accept-invitation-labels.d.ts +2 -0
- package/dist/auth/accept-invitation-labels.js +20 -0
- package/dist/auth/accept-invitation-labels.js.map +1 -0
- package/dist/auth/accept-invitation.d.ts +11 -13
- package/dist/auth/accept-invitation.js +3 -16
- package/dist/auth/accept-invitation.js.map +1 -1
- package/dist/auth/auth-errors.d.ts +34 -23
- package/dist/auth/auth-errors.js +8 -4
- package/dist/auth/auth-errors.js.map +1 -1
- package/dist/auth/complete-name-dialog-labels.d.ts +2 -0
- package/dist/auth/complete-name-dialog-labels.js +14 -0
- package/dist/auth/complete-name-dialog-labels.js.map +1 -0
- package/dist/auth/complete-name-dialog.d.ts +9 -11
- package/dist/auth/complete-name-dialog.js +4 -11
- package/dist/auth/complete-name-dialog.js.map +1 -1
- package/dist/auth/email-tag.d.ts +2 -4
- package/dist/auth/forgot-password-form-labels.d.ts +3 -0
- package/dist/auth/forgot-password-form-labels.js +17 -0
- package/dist/auth/forgot-password-form-labels.js.map +1 -0
- package/dist/auth/forgot-password-form.d.ts +9 -12
- package/dist/auth/forgot-password-form.js +6 -15
- package/dist/auth/forgot-password-form.js.map +1 -1
- package/dist/auth/form-rules.d.ts +5 -7
- package/dist/auth/new-password-fields.d.ts +4 -8
- package/dist/auth/new-password-fields.js +1 -1
- package/dist/auth/new-password-fields.js.map +1 -1
- package/dist/auth/not-found-page-labels.d.ts +2 -0
- package/dist/auth/not-found-page-labels.js +11 -0
- package/dist/auth/not-found-page-labels.js.map +1 -0
- package/dist/auth/not-found-page.d.ts +9 -11
- package/dist/auth/not-found-page.js +5 -10
- package/dist/auth/not-found-page.js.map +1 -1
- package/dist/auth/register-form-labels.d.ts +3 -0
- package/dist/auth/register-form-labels.js +28 -0
- package/dist/auth/register-form-labels.js.map +1 -0
- package/dist/auth/register-form.d.ts +174 -100
- package/dist/auth/register-form.js +11 -31
- package/dist/auth/register-form.js.map +1 -1
- package/dist/auth/reset-password-form-labels.d.ts +3 -0
- package/dist/auth/reset-password-form-labels.js +24 -0
- package/dist/auth/reset-password-form-labels.js.map +1 -0
- package/dist/auth/reset-password-form.d.ts +12 -15
- package/dist/auth/reset-password-form.js +6 -22
- package/dist/auth/reset-password-form.js.map +1 -1
- package/dist/auth/sign-in-form-labels.d.ts +3 -0
- package/dist/auth/sign-in-form-labels.js +42 -0
- package/dist/auth/sign-in-form-labels.js.map +1 -0
- package/dist/auth/sign-in-form.d.ts +15 -19
- package/dist/auth/sign-in-form.js +12 -46
- package/dist/auth/sign-in-form.js.map +1 -1
- package/dist/auth/status-parts.d.ts +13 -17
- package/dist/auth/status-parts.js +3 -3
- package/dist/auth/status-parts.js.map +1 -1
- package/dist/auth/verify-email-labels.d.ts +2 -0
- package/dist/auth/verify-email-labels.js +25 -0
- package/dist/auth/verify-email-labels.js.map +1 -0
- package/dist/auth/verify-email.d.ts +15 -17
- package/dist/auth/verify-email.js +4 -21
- package/dist/auth/verify-email.js.map +1 -1
- package/dist/billing/billing-banner.d.ts +8 -108
- package/dist/billing/billing-banner.js +2 -1
- package/dist/billing/billing-banner.js.map +1 -1
- package/dist/billing/billing-labels.d.ts +168 -100
- package/dist/billing/billing-labels.js.map +1 -1
- package/dist/billing/billing-lock.d.ts +10 -109
- package/dist/billing/billing-overview.d.ts +7 -108
- package/dist/billing/billing-standing.d.ts +6 -107
- package/dist/billing/checkout-processing.d.ts +8 -110
- package/dist/billing/checkout-processing.js +2 -9
- package/dist/billing/checkout-processing.js.map +1 -1
- package/dist/billing/checkout-return.d.ts +5 -7
- package/dist/billing/pay-page.d.ts +22 -119
- package/dist/billing/pay-page.js.map +1 -1
- package/dist/billing/plan-card.d.ts +14 -114
- package/dist/billing/plan-card.js +15 -13
- package/dist/billing/plan-card.js.map +1 -1
- package/dist/billing/plan-limit-notice.d.ts +8 -108
- package/dist/billing/plan-limit-notice.js +1 -1
- package/dist/billing/plan-limit-notice.js.map +1 -1
- package/dist/billing/plan-limit-toast.d.ts +6 -106
- package/dist/billing/plan-limit.d.ts +2 -4
- package/dist/billing/plan-price.d.ts +10 -12
- package/dist/billing/subscription-actions.d.ts +6 -108
- package/dist/billing/subscription-actions.js +2 -2
- package/dist/billing/subscription-actions.js.map +1 -1
- package/dist/billing/subscription-status-chip.d.ts +7 -107
- package/dist/chart.d.ts +12 -112
- package/dist/chart.js +4 -0
- package/dist/chart.js.map +1 -1
- package/dist/components/account-chips-labels.d.ts +10 -0
- package/dist/components/account-chips-labels.js +15 -0
- package/dist/components/account-chips-labels.js.map +1 -0
- package/dist/components/account-chips.d.ts +22 -44
- package/dist/components/account-chips.js +9 -14
- package/dist/components/account-chips.js.map +1 -1
- package/dist/components/alert-banner.d.ts +15 -11
- package/dist/components/alert-banner.js +28 -18
- package/dist/components/alert-banner.js.map +1 -1
- package/dist/components/amount-input.d.ts +66 -109
- package/dist/components/amount-input.js +259 -283
- package/dist/components/amount-input.js.map +1 -1
- package/dist/components/appearance-labels.d.ts +6 -10
- package/dist/components/appearance-labels.js.map +1 -1
- package/dist/components/authed-image-labels.d.ts +2 -0
- package/dist/components/authed-image-labels.js +10 -0
- package/dist/components/authed-image-labels.js.map +1 -0
- package/dist/components/authed-image.d.ts +11 -13
- package/dist/components/authed-image.js +2 -6
- package/dist/components/authed-image.js.map +1 -1
- package/dist/components/autocomplete.d.ts +13 -11
- package/dist/components/autocomplete.js +35 -30
- package/dist/components/autocomplete.js.map +1 -1
- package/dist/components/breadcrumbs-labels.d.ts +2 -0
- package/dist/components/breadcrumbs-labels.js +9 -0
- package/dist/components/breadcrumbs-labels.js.map +1 -0
- package/dist/components/breadcrumbs.d.ts +10 -12
- package/dist/components/breadcrumbs.js +7 -10
- package/dist/components/breadcrumbs.js.map +1 -1
- package/dist/components/bulk-action-bar-labels.d.ts +2 -0
- package/dist/components/bulk-action-bar-labels.js +10 -0
- package/dist/components/bulk-action-bar-labels.js.map +1 -0
- package/dist/components/bulk-action-bar.d.ts +10 -12
- package/dist/components/bulk-action-bar.js +9 -12
- package/dist/components/bulk-action-bar.js.map +1 -1
- package/dist/components/button-group.d.ts +7 -109
- package/dist/components/button-group.js +5 -5
- package/dist/components/button-group.js.map +1 -1
- package/dist/components/button-look.d.ts +88 -0
- package/dist/components/button-look.js +91 -0
- package/dist/components/button-look.js.map +1 -0
- package/dist/components/button.d.ts +153 -0
- package/dist/components/button.js +165 -0
- package/dist/components/button.js.map +1 -0
- package/dist/components/calculator.d.ts +8 -106
- package/dist/components/calculator.js +10 -7
- package/dist/components/calculator.js.map +1 -1
- package/dist/components/calendar-heatmap-labels.d.ts +3 -0
- package/dist/components/calendar-heatmap-labels.js +12 -0
- package/dist/components/calendar-heatmap-labels.js.map +1 -0
- package/dist/components/calendar-heatmap.d.ts +13 -16
- package/dist/components/calendar-heatmap.js +7 -13
- package/dist/components/calendar-heatmap.js.map +1 -1
- package/dist/components/card.d.ts +145 -0
- package/dist/components/card.js +186 -0
- package/dist/components/card.js.map +1 -0
- package/dist/components/chart-height.d.ts +4 -7
- package/dist/components/chart-zoom-core.d.ts +202 -0
- package/dist/components/chart-zoom-core.js +334 -0
- package/dist/components/chart-zoom-core.js.map +1 -0
- package/dist/components/chart-zoom.d.ts +39 -205
- package/dist/components/chart-zoom.js +15 -316
- package/dist/components/chart-zoom.js.map +1 -1
- package/dist/components/chart.d.ts +11 -15
- package/dist/components/chart.js +11 -11
- package/dist/components/chart.js.map +1 -1
- package/dist/components/checkbox-group.d.ts +6 -10
- package/dist/components/checkbox-group.js +10 -9
- package/dist/components/checkbox-group.js.map +1 -1
- package/dist/components/checkbox.d.ts +8 -12
- package/dist/components/checkbox.js +20 -18
- package/dist/components/checkbox.js.map +1 -1
- package/dist/components/chip-input.d.ts +73 -0
- package/dist/components/chip-input.js +224 -0
- package/dist/components/chip-input.js.map +1 -0
- package/dist/components/chip-labels.d.ts +2 -0
- package/dist/components/chip-labels.js +12 -0
- package/dist/components/chip-labels.js.map +1 -0
- package/dist/components/chip.d.ts +18 -93
- package/dist/components/chip.js +74 -426
- package/dist/components/chip.js.map +1 -1
- package/dist/components/choice-card.d.ts +21 -18
- package/dist/components/choice-card.js +45 -45
- package/dist/components/choice-card.js.map +1 -1
- package/dist/components/column-mapper-labels.d.ts +5 -0
- package/dist/components/column-mapper-labels.js +34 -0
- package/dist/components/column-mapper-labels.js.map +1 -0
- package/dist/components/column-mapper.d.ts +15 -17
- package/dist/components/column-mapper.js +11 -37
- package/dist/components/column-mapper.js.map +1 -1
- package/dist/components/combobox-core.d.ts +79 -40
- package/dist/components/combobox-core.js +189 -122
- package/dist/components/combobox-core.js.map +1 -1
- package/dist/components/combobox-suggestions.d.ts +76 -0
- package/dist/components/combobox-suggestions.js +56 -0
- package/dist/components/combobox-suggestions.js.map +1 -0
- package/dist/components/combobox.d.ts +14 -159
- package/dist/components/combobox.js +40 -507
- package/dist/components/combobox.js.map +1 -1
- package/dist/components/confirm-dialog-labels.d.ts +7 -0
- package/dist/components/confirm-dialog-labels.js +10 -0
- package/dist/components/confirm-dialog-labels.js.map +1 -0
- package/dist/components/confirm-dialog.d.ts +165 -100
- package/dist/components/confirm-dialog.js +2 -6
- package/dist/components/confirm-dialog.js.map +1 -1
- package/dist/components/copy-button-labels.d.ts +2 -0
- package/dist/components/copy-button-labels.js +12 -0
- package/dist/components/copy-button-labels.js.map +1 -0
- package/dist/components/copy-button.d.ts +70 -100
- package/dist/components/copy-button.js +4 -9
- package/dist/components/copy-button.js.map +1 -1
- package/dist/components/country-select-labels.d.ts +2 -0
- package/dist/components/country-select-labels.js +10 -0
- package/dist/components/country-select-labels.js.map +1 -0
- package/dist/components/country-select.d.ts +18 -15
- package/dist/components/country-select.js +49 -64
- package/dist/components/country-select.js.map +1 -1
- package/dist/components/currency-option-list.d.ts +63 -0
- package/dist/components/currency-option-list.js +135 -0
- package/dist/components/currency-option-list.js.map +1 -0
- package/dist/components/currency-select.d.ts +10 -30
- package/dist/components/currency-select.js +50 -133
- package/dist/components/currency-select.js.map +1 -1
- package/dist/components/danger-confirm-labels.d.ts +14 -0
- package/dist/components/danger-confirm-labels.js +17 -0
- package/dist/components/danger-confirm-labels.js.map +1 -0
- package/dist/components/danger-confirm.d.ts +448 -100
- package/dist/components/danger-confirm.js +40 -46
- package/dist/components/danger-confirm.js.map +1 -1
- package/dist/components/data-table-cells.d.ts +9 -24
- package/dist/components/data-table-cells.js +1 -1
- package/dist/components/data-table-cells.js.map +1 -1
- package/dist/components/data-table-column-settings.d.ts +16 -0
- package/dist/components/data-table-column-settings.js +119 -0
- package/dist/components/data-table-column-settings.js.map +1 -0
- package/dist/components/data-table-filter-popover.d.ts +5 -19
- package/dist/components/data-table-filter-popover.js +39 -22
- package/dist/components/data-table-filter-popover.js.map +1 -1
- package/dist/components/data-table-filters.d.ts +93 -15
- package/dist/components/data-table-filters.js +22 -7
- package/dist/components/data-table-filters.js.map +1 -1
- package/dist/components/data-table-head.d.ts +36 -0
- package/dist/components/data-table-head.js +190 -0
- package/dist/components/data-table-head.js.map +1 -0
- package/dist/components/data-table-labels.d.ts +124 -15
- package/dist/components/data-table-labels.js +9 -5
- package/dist/components/data-table-labels.js.map +1 -1
- package/dist/components/data-table-mobile.d.ts +106 -0
- package/dist/components/data-table-mobile.js +412 -0
- package/dist/components/data-table-mobile.js.map +1 -0
- package/dist/components/data-table-pagination.d.ts +6 -21
- package/dist/components/data-table-pagination.js +7 -7
- package/dist/components/data-table-pagination.js.map +1 -1
- package/dist/components/data-table-resize.d.ts +37 -0
- package/dist/components/data-table-resize.js +103 -0
- package/dist/components/data-table-resize.js.map +1 -0
- package/dist/components/data-table-row-actions.d.ts +24 -0
- package/dist/components/data-table-row-actions.js +95 -0
- package/dist/components/data-table-row-actions.js.map +1 -0
- package/dist/components/data-table-selection.d.ts +21 -0
- package/dist/components/data-table-selection.js +30 -0
- package/dist/components/data-table-selection.js.map +1 -0
- package/dist/components/data-table-shared.d.ts +77 -0
- package/dist/components/data-table-shared.js +77 -0
- package/dist/components/data-table-shared.js.map +1 -0
- package/dist/components/data-table-sort.d.ts +8 -10
- package/dist/components/data-table.d.ts +603 -15
- package/dist/components/data-table.js +134 -927
- package/dist/components/data-table.js.map +1 -1
- package/dist/components/date-field.d.ts +203 -0
- package/dist/components/date-field.js +270 -0
- package/dist/components/date-field.js.map +1 -0
- package/dist/components/date-picker.d.ts +6 -261
- package/dist/components/date-picker.js +24 -760
- package/dist/components/date-picker.js.map +1 -1
- package/dist/components/date-range-picker.d.ts +125 -0
- package/dist/components/date-range-picker.js +261 -0
- package/dist/components/date-range-picker.js.map +1 -0
- package/dist/components/description-list-labels.d.ts +2 -0
- package/dist/components/description-list-labels.js +8 -0
- package/dist/components/description-list-labels.js.map +1 -0
- package/dist/components/description-list.d.ts +13 -15
- package/dist/components/description-list.js +17 -11
- package/dist/components/description-list.js.map +1 -1
- package/dist/components/dialog-frame-labels.d.ts +2 -0
- package/dist/components/dialog-frame-labels.js +6 -0
- package/dist/components/dialog-frame-labels.js.map +1 -0
- package/dist/components/dialog-frame.d.ts +7 -11
- package/dist/components/dialog-frame.js +6 -6
- package/dist/components/dialog-frame.js.map +1 -1
- package/dist/components/disclosure.d.ts +6 -10
- package/dist/components/disclosure.js +11 -11
- package/dist/components/disclosure.js.map +1 -1
- package/dist/components/dropdown.d.ts +55 -27
- package/dist/components/dropdown.js +62 -31
- package/dist/components/dropdown.js.map +1 -1
- package/dist/components/empty-state.d.ts +64 -0
- package/dist/components/empty-state.js +70 -0
- package/dist/components/empty-state.js.map +1 -0
- package/dist/components/entity-combobox.d.ts +10 -11
- package/dist/components/entity-combobox.js +14 -13
- package/dist/components/entity-combobox.js.map +1 -1
- package/dist/components/error-boundary-labels.d.ts +2 -0
- package/dist/components/error-boundary-labels.js +19 -0
- package/dist/components/error-boundary-labels.js.map +1 -0
- package/dist/components/error-boundary.d.ts +17 -17
- package/dist/components/error-boundary.js +5 -17
- package/dist/components/error-boundary.js.map +1 -1
- package/dist/components/facing-pair.d.ts +7 -115
- package/dist/components/facing-pair.js +1 -1
- package/dist/components/facing-pair.js.map +1 -1
- package/dist/components/field-base.d.ts +260 -0
- package/dist/components/field-base.js +228 -0
- package/dist/components/field-base.js.map +1 -0
- package/dist/components/field-parts.d.ts +188 -87
- package/dist/components/field-parts.js +60 -33
- package/dist/components/field-parts.js.map +1 -1
- package/dist/components/field-strip.d.ts +19 -28
- package/dist/components/field-strip.js +2 -2
- package/dist/components/field-strip.js.map +1 -1
- package/dist/components/field-sync-labels.d.ts +2 -0
- package/dist/components/field-sync-labels.js +12 -0
- package/dist/components/field-sync-labels.js.map +1 -0
- package/dist/components/field-sync.d.ts +20 -19
- package/dist/components/field-sync.js +4 -10
- package/dist/components/field-sync.js.map +1 -1
- package/dist/components/field.d.ts +45 -10
- package/dist/components/field.js +10 -8
- package/dist/components/field.js.map +1 -1
- package/dist/components/file-button.d.ts +85 -100
- package/dist/components/file-button.js +23 -169
- package/dist/components/file-button.js.map +1 -1
- package/dist/components/file-dropzone.d.ts +9 -109
- package/dist/components/file-dropzone.js +22 -22
- package/dist/components/file-dropzone.js.map +1 -1
- package/dist/components/floating-panel-labels.d.ts +2 -0
- package/dist/components/floating-panel-labels.js +9 -0
- package/dist/components/floating-panel-labels.js.map +1 -0
- package/dist/components/floating-panel.d.ts +17 -21
- package/dist/components/floating-panel.js +19 -18
- package/dist/components/floating-panel.js.map +1 -1
- package/dist/components/focus-ring.d.ts +9 -6
- package/dist/components/focus-ring.js +2 -2
- package/dist/components/focus-ring.js.map +1 -1
- package/dist/components/form-actions-labels.d.ts +2 -0
- package/dist/components/form-actions-labels.js +10 -0
- package/dist/components/form-actions-labels.js.map +1 -0
- package/dist/components/form-actions.d.ts +280 -100
- package/dist/components/form-actions.js +10 -20
- package/dist/components/form-actions.js.map +1 -1
- package/dist/components/full-bleed-dialog.d.ts +7 -8
- package/dist/components/full-bleed-dialog.js +14 -13
- package/dist/components/full-bleed-dialog.js.map +1 -1
- package/dist/components/grouped-picker.d.ts +21 -16
- package/dist/components/grouped-picker.js +76 -62
- package/dist/components/grouped-picker.js.map +1 -1
- package/dist/components/help-popover.d.ts +60 -0
- package/dist/components/help-popover.js +48 -0
- package/dist/components/help-popover.js.map +1 -0
- package/dist/components/hover-menu.d.ts +17 -16
- package/dist/components/hover-menu.js +18 -17
- package/dist/components/hover-menu.js.map +1 -1
- package/dist/components/iban-input-labels.d.ts +2 -0
- package/dist/components/iban-input-labels.js +13 -0
- package/dist/components/iban-input-labels.js.map +1 -0
- package/dist/components/iban-input.d.ts +73 -100
- package/dist/components/iban-input.js +22 -15
- package/dist/components/iban-input.js.map +1 -1
- package/dist/components/icon-button.d.ts +300 -0
- package/dist/components/icon-button.js +465 -0
- package/dist/components/icon-button.js.map +1 -0
- package/dist/components/icon-picker-labels.d.ts +2 -0
- package/dist/components/icon-picker-labels.js +12 -0
- package/dist/components/icon-picker-labels.js.map +1 -0
- package/dist/components/icon-picker.d.ts +13 -13
- package/dist/components/icon-picker.js +18 -17
- package/dist/components/icon-picker.js.map +1 -1
- package/dist/components/image-grid-labels.d.ts +2 -0
- package/dist/components/image-grid-labels.js +10 -0
- package/dist/components/image-grid-labels.js.map +1 -0
- package/dist/components/image-grid.d.ts +12 -14
- package/dist/components/image-grid.js +6 -10
- package/dist/components/image-grid.js.map +1 -1
- package/dist/components/inline-edit-field-labels.d.ts +2 -0
- package/dist/components/inline-edit-field-labels.js +10 -0
- package/dist/components/inline-edit-field-labels.js.map +1 -0
- package/dist/components/inline-edit-field.d.ts +11 -13
- package/dist/components/inline-edit-field.js +11 -13
- package/dist/components/inline-edit-field.js.map +1 -1
- package/dist/components/inline-entity-combobox.d.ts +155 -0
- package/dist/components/inline-entity-combobox.js +467 -0
- package/dist/components/inline-entity-combobox.js.map +1 -0
- package/dist/components/input.d.ts +98 -0
- package/dist/components/input.js +219 -0
- package/dist/components/input.js.map +1 -0
- package/dist/components/jump-calendar.d.ts +8 -0
- package/dist/components/jump-calendar.js +274 -0
- package/dist/components/jump-calendar.js.map +1 -0
- package/dist/components/language-select.d.ts +20 -110
- package/dist/components/language-select.js +12 -7
- package/dist/components/language-select.js.map +1 -1
- package/dist/components/legal-labels.d.ts +2 -0
- package/dist/components/legal-labels.js +100 -0
- package/dist/components/legal-labels.js.map +1 -0
- package/dist/components/legal-page.d.ts +17 -117
- package/dist/components/legal-page.js +2 -2
- package/dist/components/legal-page.js.map +1 -1
- package/dist/components/legal.d.ts +353 -100
- package/dist/components/legal.js +7 -101
- package/dist/components/legal.js.map +1 -1
- package/dist/components/lightbox-labels.d.ts +2 -0
- package/dist/components/lightbox-labels.js +17 -0
- package/dist/components/lightbox-labels.js.map +1 -0
- package/dist/components/lightbox.d.ts +12 -14
- package/dist/components/lightbox.js +9 -19
- package/dist/components/lightbox.js.map +1 -1
- package/dist/components/line-items-labels.d.ts +2 -0
- package/dist/components/line-items-labels.js +13 -0
- package/dist/components/line-items-labels.js.map +1 -0
- package/dist/components/line-items.d.ts +16 -18
- package/dist/components/line-items.js +18 -26
- package/dist/components/line-items.js.map +1 -1
- package/dist/components/list-labels.d.ts +2 -0
- package/dist/components/list-labels.js +9 -0
- package/dist/components/list-labels.js.map +1 -0
- package/dist/components/list.d.ts +32 -21
- package/dist/components/list.js +41 -25
- package/dist/components/list.js.map +1 -1
- package/dist/components/loading-state.d.ts +5 -9
- package/dist/components/loading-state.js +2 -2
- package/dist/components/loading-state.js.map +1 -1
- package/dist/components/measured-grid-labels.d.ts +4 -0
- package/dist/components/measured-grid-labels.js +21 -0
- package/dist/components/measured-grid-labels.js.map +1 -0
- package/dist/components/measured-grid.d.ts +13 -17
- package/dist/components/measured-grid.js +31 -50
- package/dist/components/measured-grid.js.map +1 -1
- package/dist/components/menu-item.d.ts +10 -10
- package/dist/components/menu-item.js +9 -9
- package/dist/components/menu-item.js.map +1 -1
- package/dist/components/mini-calendar-labels.d.ts +4 -0
- package/dist/components/mini-calendar-labels.js +14 -0
- package/dist/components/mini-calendar-labels.js.map +1 -0
- package/dist/components/mini-calendar.d.ts +10 -14
- package/dist/components/mini-calendar.js +22 -29
- package/dist/components/mini-calendar.js.map +1 -1
- package/dist/components/modal.d.ts +26 -18
- package/dist/components/modal.js +8 -11
- package/dist/components/modal.js.map +1 -1
- package/dist/components/money-draft.d.ts +34 -0
- package/dist/components/money-draft.js +39 -0
- package/dist/components/money-draft.js.map +1 -0
- package/dist/components/money-field.d.ts +13 -110
- package/dist/components/money-field.js +6 -22
- package/dist/components/money-field.js.map +1 -1
- package/dist/components/month-picker-labels.d.ts +5 -0
- package/dist/components/month-picker-labels.js +18 -0
- package/dist/components/month-picker-labels.js.map +1 -0
- package/dist/components/month-picker.d.ts +15 -13
- package/dist/components/month-picker.js +34 -32
- package/dist/components/month-picker.js.map +1 -1
- package/dist/components/multi-entity-combobox.d.ts +9 -11
- package/dist/components/multi-entity-combobox.js +14 -13
- package/dist/components/multi-entity-combobox.js.map +1 -1
- package/dist/components/multi-select.d.ts +81 -21
- package/dist/components/multi-select.js +171 -197
- package/dist/components/multi-select.js.map +1 -1
- package/dist/components/nav-pills.d.ts +9 -10
- package/dist/components/nav-pills.js +53 -42
- package/dist/components/nav-pills.js.map +1 -1
- package/dist/components/number-field.d.ts +13 -110
- package/dist/components/number-field.js +2 -3
- package/dist/components/number-field.js.map +1 -1
- package/dist/components/number-input.d.ts +55 -109
- package/dist/components/number-input.js +50 -67
- package/dist/components/number-input.js.map +1 -1
- package/dist/components/numeric-field.d.ts +85 -0
- package/dist/components/numeric-field.js +71 -0
- package/dist/components/numeric-field.js.map +1 -0
- package/dist/components/numpad-sheet.d.ts +5 -107
- package/dist/components/numpad-sheet.js +7 -7
- package/dist/components/numpad-sheet.js.map +1 -1
- package/dist/components/one-time-code-input.d.ts +6 -7
- package/dist/components/one-time-code-input.js +119 -124
- package/dist/components/one-time-code-input.js.map +1 -1
- package/dist/components/page-contents-labels.d.ts +2 -0
- package/dist/components/page-contents-labels.js +8 -0
- package/dist/components/page-contents-labels.js.map +1 -0
- package/dist/components/page-contents.d.ts +13 -15
- package/dist/components/page-contents.js +7 -9
- package/dist/components/page-contents.js.map +1 -1
- package/dist/components/page-header.d.ts +10 -10
- package/dist/components/page-header.js +3 -3
- package/dist/components/page-header.js.map +1 -1
- package/dist/components/password-strength-labels.d.ts +2 -0
- package/dist/components/password-strength-labels.js +21 -0
- package/dist/components/password-strength-labels.js.map +1 -0
- package/dist/components/password-strength.d.ts +15 -17
- package/dist/components/password-strength.js +7 -22
- package/dist/components/password-strength.js.map +1 -1
- package/dist/components/phone-input-labels.d.ts +2 -0
- package/dist/components/phone-input-labels.js +9 -0
- package/dist/components/phone-input-labels.js.map +1 -0
- package/dist/components/phone-input.d.ts +75 -100
- package/dist/components/phone-input.js +20 -23
- package/dist/components/phone-input.js.map +1 -1
- package/dist/components/picker-sheet.d.ts +20 -8
- package/dist/components/picker-sheet.js +22 -11
- package/dist/components/picker-sheet.js.map +1 -1
- package/dist/components/pie-chart-labels.d.ts +2 -4
- package/dist/components/pie-chart.d.ts +8 -11
- package/dist/components/pie-chart.js +5 -5
- package/dist/components/pie-chart.js.map +1 -1
- package/dist/components/popover-labels.d.ts +2 -0
- package/dist/components/popover-labels.js +11 -0
- package/dist/components/popover-labels.js.map +1 -0
- package/dist/components/popover.d.ts +13 -11
- package/dist/components/popover.js +21 -23
- package/dist/components/popover.js.map +1 -1
- package/dist/components/progress-bar-labels.d.ts +2 -0
- package/dist/components/progress-bar-labels.js +9 -0
- package/dist/components/progress-bar-labels.js.map +1 -0
- package/dist/components/progress-bar.d.ts +16 -15
- package/dist/components/progress-bar.js +22 -20
- package/dist/components/progress-bar.js.map +1 -1
- package/dist/components/qr-code.d.ts +4 -8
- package/dist/components/qr-code.js.map +1 -1
- package/dist/components/reauth-dialog-labels.d.ts +2 -0
- package/dist/components/reauth-dialog-labels.js +12 -0
- package/dist/components/reauth-dialog-labels.js.map +1 -0
- package/dist/components/reauth-dialog.d.ts +8 -10
- package/dist/components/reauth-dialog.js +3 -8
- package/dist/components/reauth-dialog.js.map +1 -1
- package/dist/components/row-actions-labels.d.ts +2 -0
- package/dist/components/row-actions-labels.js +9 -0
- package/dist/components/row-actions-labels.js.map +1 -0
- package/dist/components/row-actions.d.ts +224 -100
- package/dist/components/row-actions.js +4 -5
- package/dist/components/row-actions.js.map +1 -1
- package/dist/components/scroll-area.d.ts +6 -9
- package/dist/components/scroll-area.js +4 -10
- package/dist/components/scroll-area.js.map +1 -1
- package/dist/components/search-field.d.ts +12 -27
- package/dist/components/search-field.js +13 -16
- package/dist/components/search-field.js.map +1 -1
- package/dist/components/select.d.ts +69 -0
- package/dist/components/select.js +164 -0
- package/dist/components/select.js.map +1 -0
- package/dist/components/separator.d.ts +3 -7
- package/dist/components/separator.js.map +1 -1
- package/dist/components/series-chart-axes.d.ts +120 -0
- package/dist/components/series-chart-axes.js +164 -0
- package/dist/components/series-chart-axes.js.map +1 -0
- package/dist/components/series-chart-budget.d.ts +8 -9
- package/dist/components/series-chart-labels.d.ts +2 -4
- package/dist/components/series-chart-thin.d.ts +34 -0
- package/dist/components/series-chart-thin.js +103 -0
- package/dist/components/series-chart-thin.js.map +1 -0
- package/dist/components/series-chart-ticks.d.ts +9 -11
- package/dist/components/series-chart.d.ts +64 -213
- package/dist/components/series-chart.js +69 -160
- package/dist/components/series-chart.js.map +1 -1
- package/dist/components/server-wake-labels.d.ts +2 -0
- package/dist/components/server-wake-labels.js +9 -0
- package/dist/components/server-wake-labels.js.map +1 -0
- package/dist/components/server-wake.d.ts +32 -23
- package/dist/components/server-wake.js +15 -35
- package/dist/components/server-wake.js.map +1 -1
- package/dist/components/settings-fields.d.ts +46 -117
- package/dist/components/settings-fields.js +13 -3
- package/dist/components/settings-fields.js.map +1 -1
- package/dist/components/share-card-labels.d.ts +2 -0
- package/dist/components/share-card-labels.js +29 -0
- package/dist/components/share-card-labels.js.map +1 -0
- package/dist/components/share-card.d.ts +188 -100
- package/dist/components/share-card.js +16 -34
- package/dist/components/share-card.js.map +1 -1
- package/dist/components/sign-chip-labels.d.ts +2 -0
- package/dist/components/sign-chip-labels.js +11 -0
- package/dist/components/sign-chip-labels.js.map +1 -0
- package/dist/components/sign-chip.d.ts +7 -9
- package/dist/components/sign-chip.js +2 -7
- package/dist/components/sign-chip.js.map +1 -1
- package/dist/components/signature-pad-labels.d.ts +2 -0
- package/dist/components/signature-pad-labels.js +23 -0
- package/dist/components/signature-pad-labels.js.map +1 -0
- package/dist/components/signature-pad.d.ts +16 -15
- package/dist/components/signature-pad.js +22 -35
- package/dist/components/signature-pad.js.map +1 -1
- package/dist/components/signed-amount-labels.d.ts +2 -0
- package/dist/components/signed-amount-labels.js +9 -0
- package/dist/components/signed-amount-labels.js.map +1 -0
- package/dist/components/signed-amount.d.ts +19 -21
- package/dist/components/signed-amount.js +12 -15
- package/dist/components/signed-amount.js.map +1 -1
- package/dist/components/skeleton.d.ts +13 -9
- package/dist/components/skeleton.js +1 -1
- package/dist/components/skeleton.js.map +1 -1
- package/dist/components/slider.d.ts +16 -11
- package/dist/components/slider.js +23 -18
- package/dist/components/slider.js.map +1 -1
- package/dist/components/sparkline-labels.d.ts +2 -0
- package/dist/components/sparkline-labels.js +13 -0
- package/dist/components/sparkline-labels.js.map +1 -0
- package/dist/components/sparkline.d.ts +10 -12
- package/dist/components/sparkline.js +10 -17
- package/dist/components/sparkline.js.map +1 -1
- package/dist/components/spinner.d.ts +45 -0
- package/dist/components/spinner.js +39 -0
- package/dist/components/spinner.js.map +1 -0
- package/dist/components/stat-tile-labels.d.ts +2 -0
- package/dist/components/stat-tile-labels.js +14 -0
- package/dist/components/stat-tile-labels.js.map +1 -0
- package/dist/components/stat-tile.d.ts +15 -17
- package/dist/components/stat-tile.js +25 -32
- package/dist/components/stat-tile.js.map +1 -1
- package/dist/components/status-dot.d.ts +8 -20
- package/dist/components/status-dot.js +13 -12
- package/dist/components/status-dot.js.map +1 -1
- package/dist/components/swatch-picker-labels.d.ts +2 -0
- package/dist/components/swatch-picker-labels.js +9 -0
- package/dist/components/swatch-picker-labels.js.map +1 -0
- package/dist/components/swatch-picker.d.ts +14 -14
- package/dist/components/swatch-picker.js +14 -8
- package/dist/components/swatch-picker.js.map +1 -1
- package/dist/components/swipeable-row.d.ts +14 -27
- package/dist/components/swipeable-row.js +2 -2
- package/dist/components/swipeable-row.js.map +1 -1
- package/dist/components/switch.d.ts +10 -13
- package/dist/components/switch.js +13 -12
- package/dist/components/switch.js.map +1 -1
- package/dist/components/table.d.ts +28 -31
- package/dist/components/table.js +15 -15
- package/dist/components/table.js.map +1 -1
- package/dist/components/tabs.d.ts +182 -0
- package/dist/components/tabs.js +312 -0
- package/dist/components/tabs.js.map +1 -0
- package/dist/components/text-link.d.ts +17 -118
- package/dist/components/text-link.js +7 -7
- package/dist/components/text-link.js.map +1 -1
- package/dist/components/text.d.ts +14 -13
- package/dist/components/text.js +5 -5
- package/dist/components/text.js.map +1 -1
- package/dist/components/textarea.d.ts +20 -0
- package/dist/components/textarea.js +161 -0
- package/dist/components/textarea.js.map +1 -0
- package/dist/components/tile-radio.d.ts +6 -10
- package/dist/components/tile-radio.js +6 -6
- package/dist/components/tile-radio.js.map +1 -1
- package/dist/components/time-input.d.ts +5 -107
- package/dist/components/time-input.js +14 -5
- package/dist/components/time-input.js.map +1 -1
- package/dist/components/toast-labels.d.ts +2 -0
- package/dist/components/toast-labels.js +11 -0
- package/dist/components/toast-labels.js.map +1 -0
- package/dist/components/toast.d.ts +21 -23
- package/dist/components/toast.js +1 -6
- package/dist/components/toast.js.map +1 -1
- package/dist/components/toggle-group.d.ts +26 -26
- package/dist/components/toggle-group.js +43 -19
- package/dist/components/toggle-group.js.map +1 -1
- package/dist/components/toggle-legend.d.ts +18 -21
- package/dist/components/toggle-legend.js +3 -3
- package/dist/components/toggle-legend.js.map +1 -1
- package/dist/components/tooltip.d.ts +16 -15
- package/dist/components/tooltip.js +4 -9
- package/dist/components/tooltip.js.map +1 -1
- package/dist/components/translation-review-editor.d.ts +8 -10
- package/dist/components/translation-review-editor.js +6 -5
- package/dist/components/translation-review-editor.js.map +1 -1
- package/dist/components/translation-review-labels.d.ts +4 -7
- package/dist/components/translation-review-parts.d.ts +19 -28
- package/dist/components/translation-review-parts.js +4 -7
- package/dist/components/translation-review-parts.js.map +1 -1
- package/dist/components/translation-review.d.ts +26 -24
- package/dist/components/translation-review.js +13 -10
- package/dist/components/translation-review.js.map +1 -1
- package/dist/components/tree-view.d.ts +7 -11
- package/dist/components/tree-view.js +8 -8
- package/dist/components/tree-view.js.map +1 -1
- package/dist/components/treemap.d.ts +9 -13
- package/dist/components/trigger-aria.d.ts +2 -4
- package/dist/components/ui-labels.d.ts +5 -0
- package/dist/components/ui-labels.js +20 -0
- package/dist/components/ui-labels.js.map +1 -0
- package/dist/components/use-anchor-dir.d.ts +3 -6
- package/dist/components/use-mobile-reveal.d.ts +2 -6
- package/dist/components/use-table-state.d.ts +154 -15
- package/dist/components/user-avatar.d.ts +8 -21
- package/dist/components/user-avatar.js +1 -1
- package/dist/components/user-avatar.js.map +1 -1
- package/dist/components/wizard-stepper.d.ts +6 -6
- package/dist/components/wizard-stepper.js +4 -3
- package/dist/components/wizard-stepper.js.map +1 -1
- package/dist/components/write-lock-labels.d.ts +2 -0
- package/dist/components/write-lock-labels.js +8 -0
- package/dist/components/write-lock-labels.js.map +1 -0
- package/dist/components/write-lock.d.ts +16 -18
- package/dist/components/write-lock.js +4 -8
- package/dist/components/write-lock.js.map +1 -1
- package/dist/data-table.d.ts +10 -18
- package/dist/data-table.js.map +1 -1
- package/dist/demo/demo-banner.d.ts +10 -13
- package/dist/demo/demo-banner.js +5 -19
- package/dist/demo/demo-banner.js.map +1 -1
- package/dist/demo/demo-countdown.d.ts +7 -9
- package/dist/demo/demo-ended.d.ts +10 -13
- package/dist/demo/demo-ended.js +4 -4
- package/dist/demo/demo-ended.js.map +1 -1
- package/dist/demo/demo-labels.d.ts +4 -5
- package/dist/demo/demo-labels.js.map +1 -1
- package/dist/demo/demo-session.d.ts +3 -5
- package/dist/demo/demo-start.d.ts +8 -11
- package/dist/demo/demo-start.js +3 -2
- package/dist/demo/demo-start.js.map +1 -1
- package/dist/feedback/feedback-attachment-labels.d.ts +16 -0
- package/dist/feedback/feedback-attachment-labels.js +17 -0
- package/dist/feedback/feedback-attachment-labels.js.map +1 -0
- package/dist/feedback/feedback-attachment.d.ts +312 -100
- package/dist/feedback/feedback-attachment.js +31 -42
- package/dist/feedback/feedback-attachment.js.map +1 -1
- package/dist/feedback/feedback-capture.d.ts +2 -4
- package/dist/feedback/feedback-context-labels.d.ts +2 -0
- package/dist/feedback/feedback-context-labels.js +9 -0
- package/dist/feedback/feedback-context-labels.js.map +1 -0
- package/dist/feedback/feedback-context.d.ts +110 -100
- package/dist/feedback/feedback-context.js +4 -7
- package/dist/feedback/feedback-context.js.map +1 -1
- package/dist/feedback/feedback-crash.d.ts +8 -109
- package/dist/feedback/feedback-dialog-labels.d.ts +12 -0
- package/dist/feedback/feedback-dialog-labels.js +17 -0
- package/dist/feedback/feedback-dialog-labels.js.map +1 -0
- package/dist/feedback/feedback-dialog.d.ts +186 -100
- package/dist/feedback/feedback-dialog.js +8 -18
- package/dist/feedback/feedback-dialog.js.map +1 -1
- package/dist/feedback/feedback-inbox.d.ts +236 -100
- package/dist/feedback/feedback-inbox.js +31 -141
- package/dist/feedback/feedback-inbox.js.map +1 -1
- package/dist/feedback/feedback-labels.d.ts +83 -100
- package/dist/feedback/feedback-labels.js.map +1 -1
- package/dist/feedback/feedback-menu-labels.d.ts +2 -0
- package/dist/feedback/feedback-menu-labels.js +10 -0
- package/dist/feedback/feedback-menu-labels.js.map +1 -0
- package/dist/feedback/feedback-menu.d.ts +83 -100
- package/dist/feedback/feedback-menu.js +3 -7
- package/dist/feedback/feedback-menu.js.map +1 -1
- package/dist/feedback/feedback-record.d.ts +239 -100
- package/dist/feedback/feedback-record.js +7 -2
- package/dist/feedback/feedback-record.js.map +1 -1
- package/dist/feedback/feedback-row-detail-labels.d.ts +2 -0
- package/dist/feedback/feedback-row-detail-labels.js +31 -0
- package/dist/feedback/feedback-row-detail-labels.js.map +1 -0
- package/dist/feedback/feedback-row-detail.d.ts +315 -100
- package/dist/feedback/feedback-row-detail.js +11 -37
- package/dist/feedback/feedback-row-detail.js.map +1 -1
- package/dist/feedback/feedback-status-undo.d.ts +66 -100
- package/dist/feedback/feedback-status-undo.js.map +1 -1
- package/dist/feedback/feedback-submit-dialog.d.ts +39 -0
- package/dist/feedback/feedback-submit-dialog.js +66 -0
- package/dist/feedback/feedback-submit-dialog.js.map +1 -0
- package/dist/feedback/feedback-submit.d.ts +13 -108
- package/dist/feedback/feedback-submit.js +19 -40
- package/dist/feedback/feedback-submit.js.map +1 -1
- package/dist/feedback/feedback-swipe.d.ts +9 -109
- package/dist/feedback/feedback-swipe.js +1 -1
- package/dist/feedback/feedback-swipe.js.map +1 -1
- package/dist/feedback/feedback-table-labels.d.ts +2 -0
- package/dist/feedback/feedback-table-labels.js +26 -0
- package/dist/feedback/feedback-table-labels.js.map +1 -0
- package/dist/feedback/feedback-table.d.ts +314 -100
- package/dist/feedback/feedback-table.js +11 -31
- package/dist/feedback/feedback-table.js.map +1 -1
- package/dist/feedback/feedback-thread-labels.d.ts +3 -0
- package/dist/feedback/feedback-thread-labels.js +21 -0
- package/dist/feedback/feedback-thread-labels.js.map +1 -0
- package/dist/feedback/feedback-thread.d.ts +378 -100
- package/dist/feedback/feedback-thread.js +32 -35
- package/dist/feedback/feedback-thread.js.map +1 -1
- package/dist/feedback/feedback-vocabulary.d.ts +98 -0
- package/dist/feedback/feedback-vocabulary.js +143 -0
- package/dist/feedback/feedback-vocabulary.js.map +1 -0
- package/dist/feedback.d.ts +15 -104
- package/dist/hooks/use-anchored-panel.d.ts +109 -17
- package/dist/hooks/use-anchored-panel.js +38 -6
- package/dist/hooks/use-anchored-panel.js.map +1 -1
- package/dist/hooks/use-anchored-rect.d.ts +15 -6
- package/dist/hooks/use-anchored-rect.js +2 -1
- package/dist/hooks/use-anchored-rect.js.map +1 -1
- package/dist/hooks/use-announce.d.ts +4 -6
- package/dist/hooks/use-authed-src.d.ts +5 -7
- package/dist/hooks/use-authed-src.js +3 -7
- package/dist/hooks/use-authed-src.js.map +1 -1
- package/dist/hooks/use-body-scroll-lock.d.ts +1 -3
- package/dist/hooks/use-breakpoint.d.ts +16 -17
- package/dist/hooks/use-breakpoint.js.map +1 -1
- package/dist/hooks/use-close-transition.d.ts +8 -8
- package/dist/hooks/use-close-transition.js +5 -4
- package/dist/hooks/use-close-transition.js.map +1 -1
- package/dist/hooks/use-copy-to-clipboard.d.ts +5 -7
- package/dist/hooks/use-debounce.d.ts +13 -6
- package/dist/hooks/use-debounce.js.map +1 -1
- package/dist/hooks/use-dismiss.d.ts +37 -11
- package/dist/hooks/use-dismiss.js +69 -10
- package/dist/hooks/use-dismiss.js.map +1 -1
- package/dist/hooks/use-file-drop.d.ts +8 -109
- package/dist/hooks/use-file-drop.js +1 -1
- package/dist/hooks/use-file-drop.js.map +1 -1
- package/dist/hooks/use-file-picker-labels.d.ts +2 -0
- package/dist/hooks/use-file-picker-labels.js +25 -0
- package/dist/hooks/use-file-picker-labels.js.map +1 -0
- package/dist/hooks/use-file-picker.d.ts +164 -0
- package/dist/hooks/use-file-picker.js +149 -0
- package/dist/hooks/use-file-picker.js.map +1 -0
- package/dist/hooks/use-focus-trap.d.ts +10 -4
- package/dist/hooks/use-focus-trap.js +19 -12
- package/dist/hooks/use-focus-trap.js.map +1 -1
- package/dist/hooks/use-hotkey.d.ts +7 -9
- package/dist/hooks/use-large-text.d.ts +3 -5
- package/dist/hooks/use-media-query.d.ts +1 -3
- package/dist/hooks/use-noindex.d.ts +1 -3
- package/dist/hooks/use-overlay-history.d.ts +1 -3
- package/dist/hooks/use-row-swipe.d.ts +5 -8
- package/dist/hooks/use-search-param-state.d.ts +10 -11
- package/dist/hooks/use-windowed-rows.d.ts +4 -7
- package/dist/i18n/defaults.d.ts +11 -104
- package/dist/i18n/defaults.js +82 -82
- package/dist/i18n/defaults.js.map +1 -1
- package/dist/i18n/german.d.ts +2 -104
- package/dist/i18n/german.js +56 -9
- package/dist/i18n/german.js.map +1 -1
- package/dist/i18n/kit-labels.d.ts +609 -100
- package/dist/i18n/kit-labels.js +22 -97
- package/dist/i18n/kit-labels.js.map +1 -1
- package/dist/i18n/languages.d.ts +197 -100
- package/dist/i18n/locales/de-CH.d.ts +3 -105
- package/dist/i18n/locales/en.d.ts +4 -104
- package/dist/i18n/locales/en.js +1834 -4
- package/dist/i18n/locales/en.js.map +7 -1
- package/dist/i18n/locales/es.d.ts +3 -105
- package/dist/i18n/locales/es.js +54 -9
- package/dist/i18n/locales/es.js.map +1 -1
- package/dist/i18n/locales/fr.d.ts +3 -105
- package/dist/i18n/locales/fr.js +56 -9
- package/dist/i18n/locales/fr.js.map +1 -1
- package/dist/i18n/locales/hu.d.ts +3 -105
- package/dist/i18n/locales/hu.js +56 -10
- package/dist/i18n/locales/hu.js.map +1 -1
- package/dist/i18n/locales/it.d.ts +3 -105
- package/dist/i18n/locales/it.js +55 -9
- package/dist/i18n/locales/it.js.map +1 -1
- package/dist/i18n/locales/zh.d.ts +3 -105
- package/dist/i18n/locales/zh.js +52 -8
- package/dist/i18n/locales/zh.js.map +1 -1
- package/dist/i18n/plurals.d.ts +20 -3
- package/dist/i18n/plurals.js +11 -0
- package/dist/i18n/plurals.js.map +1 -1
- package/dist/i18n/review.d.ts +5 -106
- package/dist/i18n/review.js +4 -0
- package/dist/i18n/review.js.map +1 -1
- package/dist/i18n/shared-labels.d.ts +17 -0
- package/dist/i18n/shared-labels.js +111 -0
- package/dist/i18n/shared-labels.js.map +1 -0
- package/dist/i18n/swiss.d.ts +1 -3
- package/dist/index.d.ts +329 -249
- package/dist/index.js +188 -215
- package/dist/index.js.map +1 -1
- package/dist/landing/access.d.ts +7 -9
- package/dist/landing/access.js.map +1 -1
- package/dist/landing/landing-actions.d.ts +9 -108
- package/dist/landing/landing-actions.js +1 -1
- package/dist/landing/landing-actions.js.map +1 -1
- package/dist/landing/landing-labels.d.ts +4 -5
- package/dist/landing/landing-labels.js.map +1 -1
- package/dist/landing/landing-sections.d.ts +21 -120
- package/dist/landing/landing-sections.js +15 -15
- package/dist/landing/landing-sections.js.map +1 -1
- package/dist/landing/page-seo.d.ts +7 -9
- package/dist/landing/public-header.d.ts +10 -110
- package/dist/landing/public-header.js +1 -1
- package/dist/landing/public-header.js.map +1 -1
- package/dist/landing/routing.d.ts +16 -119
- package/dist/landing/routing.js +2 -6
- package/dist/landing/routing.js.map +1 -1
- package/dist/lib/calc.d.ts +7 -9
- package/dist/lib/chip-edge-snap.d.ts +10 -0
- package/dist/lib/chip-edge-snap.js +131 -0
- package/dist/lib/chip-edge-snap.js.map +1 -0
- package/dist/lib/clipping.d.ts +2 -4
- package/dist/lib/cn.d.ts +2 -5
- package/dist/lib/cn.js +6 -1
- package/dist/lib/cn.js.map +1 -1
- package/dist/lib/column-mapping.d.ts +10 -13
- package/dist/lib/countries.d.ts +3 -5
- package/dist/lib/dates.d.ts +25 -25
- package/dist/lib/dates.js.map +1 -1
- package/dist/lib/decimal-marks.d.ts +8 -8
- package/dist/lib/decimal-marks.js +1 -1
- package/dist/lib/decimal-marks.js.map +1 -1
- package/dist/lib/direction.d.ts +4 -6
- package/dist/lib/document-navigation.d.ts +1 -3
- package/dist/lib/download.d.ts +67 -0
- package/dist/lib/download.js +89 -0
- package/dist/lib/download.js.map +1 -0
- package/dist/lib/floating-stack.d.ts +8 -6
- package/dist/lib/floating-stack.js.map +1 -1
- package/dist/lib/format.d.ts +24 -23
- package/dist/lib/format.js +3 -3
- package/dist/lib/format.js.map +1 -1
- package/dist/lib/iban.d.ts +9 -11
- package/dist/lib/ime.d.ts +17 -0
- package/dist/lib/ime.js +13 -0
- package/dist/lib/ime.js.map +1 -0
- package/dist/lib/isin.d.ts +3 -5
- package/dist/lib/logger.d.ts +4 -6
- package/dist/lib/person-name.d.ts +3 -5
- package/dist/lib/phone.d.ts +9 -11
- package/dist/lib/presence.d.ts +15 -0
- package/dist/lib/presence.js +8 -0
- package/dist/lib/presence.js.map +1 -0
- package/dist/lib/qr-encode.d.ts +4 -6
- package/dist/lib/reduced-motion.d.ts +18 -0
- package/dist/lib/reduced-motion.js +9 -0
- package/dist/lib/reduced-motion.js.map +1 -0
- package/dist/lib/round.d.ts +22 -0
- package/dist/lib/round.js +15 -0
- package/dist/lib/round.js.map +1 -0
- package/dist/lib/safe-storage.d.ts +14 -4
- package/dist/lib/safe-storage.js +24 -9
- package/dist/lib/safe-storage.js.map +1 -1
- package/dist/lib/server-wake.d.ts +13 -14
- package/dist/lib/session-refresh.d.ts +200 -0
- package/dist/lib/session-refresh.js +187 -0
- package/dist/lib/session-refresh.js.map +1 -0
- package/dist/lib/strip-fade.d.ts +10 -13
- package/dist/lib/table-text.d.ts +14 -16
- package/dist/lib/text-match.d.ts +41 -0
- package/dist/lib/text-match.js +23 -0
- package/dist/lib/text-match.js.map +1 -0
- package/dist/lib/translation-review.d.ts +44 -45
- package/dist/lib/translation-review.js +3 -2
- package/dist/lib/translation-review.js.map +1 -1
- package/dist/rhf/fields.d.ts +123 -188
- package/dist/rhf/fields.js +46 -54
- package/dist/rhf/fields.js.map +1 -1
- package/dist/rhf/form-core.d.ts +153 -0
- package/dist/rhf/form-core.js +143 -0
- package/dist/rhf/form-core.js.map +1 -0
- package/dist/rhf/form.d.ts +38 -174
- package/dist/rhf/form.js +9 -131
- package/dist/rhf/form.js.map +1 -1
- package/dist/rhf/line-items.d.ts +40 -11
- package/dist/rhf/line-items.js.map +1 -1
- package/dist/rhf/use-rhf-wizard-step.d.ts +3 -6
- package/dist/rhf.d.ts +4 -117
- package/dist/rhf.js.map +1 -1
- package/dist/search/command-palette-labels.d.ts +2 -0
- package/dist/search/command-palette-labels.js +15 -0
- package/dist/search/command-palette-labels.js.map +1 -0
- package/dist/search/command-palette.d.ts +10 -13
- package/dist/search/command-palette.js +25 -44
- package/dist/search/command-palette.js.map +1 -1
- package/dist/search/global-search-labels.d.ts +2 -0
- package/dist/search/global-search-labels.js +12 -0
- package/dist/search/global-search-labels.js.map +1 -0
- package/dist/search/global-search.d.ts +17 -16
- package/dist/search/global-search.js +12 -12
- package/dist/search/global-search.js.map +1 -1
- package/dist/search/search-index.d.ts +13 -14
- package/dist/search/search-index.js +2 -1
- package/dist/search/search-index.js.map +1 -1
- package/dist/search/use-command-key.d.ts +9 -0
- package/dist/search/use-command-key.js +18 -0
- package/dist/search/use-command-key.js.map +1 -0
- package/dist/search.d.ts +3 -4
- package/dist/settings/settings-card-classes.d.ts +11 -0
- package/dist/settings/settings-card-classes.js +8 -0
- package/dist/settings/settings-card-classes.js.map +1 -0
- package/dist/settings/settings-catalogue.d.ts +11 -14
- package/dist/settings/settings-context.d.ts +4 -8
- package/dist/settings/settings-heading.d.ts +8 -12
- package/dist/settings/settings-heading.js +1 -1
- package/dist/settings/settings-heading.js.map +1 -1
- package/dist/settings/settings-labels.d.ts +6 -7
- package/dist/settings/settings-labels.js.map +1 -1
- package/dist/settings/settings-layout.d.ts +36 -13
- package/dist/settings/settings-layout.js +25 -4
- package/dist/settings/settings-layout.js.map +1 -1
- package/dist/settings/settings-section.d.ts +4 -106
- package/dist/settings/settings-section.js +2 -2
- package/dist/settings/settings-section.js.map +1 -1
- package/dist/settings/use-account-appearance.d.ts +11 -16
- package/dist/settings/use-account-language.d.ts +8 -10
- package/dist/settings/use-settings-focus.d.ts +3 -5
- package/dist/settings/use-settings-focus.js +2 -4
- package/dist/settings/use-settings-focus.js.map +1 -1
- package/dist/settings/use-settings-route.d.ts +11 -16
- package/dist/shell/app-shell-labels.d.ts +2 -0
- package/dist/shell/app-shell-labels.js +9 -0
- package/dist/shell/app-shell-labels.js.map +1 -0
- package/dist/shell/app-shell.d.ts +216 -100
- package/dist/shell/app-shell.js +51 -35
- package/dist/shell/app-shell.js.map +1 -1
- package/dist/shell/auth-layout.d.ts +6 -9
- package/dist/shell/auth-layout.js +6 -6
- package/dist/shell/auth-layout.js.map +1 -1
- package/dist/shell/company-switcher-labels.d.ts +2 -0
- package/dist/shell/company-switcher-labels.js +12 -0
- package/dist/shell/company-switcher-labels.js.map +1 -0
- package/dist/shell/company-switcher.d.ts +9 -11
- package/dist/shell/company-switcher.js +3 -9
- package/dist/shell/company-switcher.js.map +1 -1
- package/dist/shell/option-switcher-menu.d.ts +19 -9
- package/dist/shell/option-switcher-menu.js +6 -4
- package/dist/shell/option-switcher-menu.js.map +1 -1
- package/dist/shell/role-switcher.d.ts +5 -6
- package/dist/shell/role-switcher.js +4 -3
- package/dist/shell/role-switcher.js.map +1 -1
- package/dist/shell/top-bar-brand.d.ts +4 -106
- package/dist/shell/top-bar-brand.js +1 -1
- package/dist/shell/top-bar-brand.js.map +1 -1
- package/dist/shell/top-bar.d.ts +6 -9
- package/dist/shell/top-bar.js +1 -1
- package/dist/shell/top-bar.js.map +1 -1
- package/dist/shell/topbar-action-menu.d.ts +30 -31
- package/dist/shell/topbar-action-menu.js +12 -10
- package/dist/shell/topbar-action-menu.js.map +1 -1
- package/dist/shell/topbar-controls.d.ts +20 -18
- package/dist/shell/topbar-controls.js +14 -11
- package/dist/shell/topbar-controls.js.map +1 -1
- package/dist/shell.d.ts +25 -115
- package/dist/shell.js.map +1 -1
- package/dist/table-text.d.ts +1 -1
- package/dist/testing/css-variables.d.ts +4 -6
- package/dist/testing/css-variables.generated.d.ts +2 -4
- package/dist/testing/index.d.ts +2 -1
- package/dist/testing/index.js +9 -1
- package/dist/testing/index.js.map +1 -1
- package/dist/testing/viewport.d.ts +93 -0
- package/dist/testing/viewport.js +152 -0
- package/dist/testing/viewport.js.map +1 -0
- package/dist/theme/chart-palette.d.ts +7 -9
- package/dist/theme/color.d.ts +14 -16
- package/dist/theme/color.js +2 -1
- package/dist/theme/color.js.map +1 -1
- package/dist/theme/contrast-tokens.d.ts +13 -17
- package/dist/theme/contrast.d.ts +22 -27
- package/dist/theme/palette-derive.d.ts +16 -22
- package/dist/theme/palette-derive.js +15 -7
- package/dist/theme/palette-derive.js.map +1 -1
- package/dist/theme/palette-presets.d.ts +25 -15
- package/dist/theme/palette-presets.js +66 -66
- package/dist/theme/palette-presets.js.map +1 -1
- package/dist/theme/palette-store.d.ts +10 -13
- package/dist/theme/text-size.d.ts +21 -26
- package/dist/theme/theme-store.d.ts +9 -14
- package/dist/tour/tour-labels.d.ts +2 -0
- package/dist/tour/tour-labels.js +13 -0
- package/dist/tour/tour-labels.js.map +1 -0
- package/dist/tour/tour.d.ts +12 -14
- package/dist/tour/tour.js +9 -20
- package/dist/tour/tour.js.map +1 -1
- package/dist/tour.d.ts +1 -2
- package/dist/wizard/stepper-nav.d.ts +8 -107
- package/dist/wizard/stepper-nav.js +15 -14
- package/dist/wizard/stepper-nav.js.map +1 -1
- package/dist/wizard/types.d.ts +18 -18
- package/dist/wizard/types.js +1 -19
- package/dist/wizard/types.js.map +1 -1
- package/dist/wizard/use-wizard.d.ts +2 -6
- package/dist/wizard/validation.d.ts +3 -7
- package/dist/wizard/wizard-context.d.ts +7 -11
- package/dist/wizard/wizard-labels.d.ts +4 -0
- package/dist/wizard/wizard-labels.js +24 -0
- package/dist/wizard/wizard-labels.js.map +1 -0
- package/dist/wizard/wizard-step.d.ts +3 -7
- package/dist/wizard/wizard-step.js +2 -2
- package/dist/wizard/wizard-step.js.map +1 -1
- package/dist/wizard/wizard-summary.d.ts +5 -8
- package/dist/wizard/wizard-summary.js +6 -5
- package/dist/wizard/wizard-summary.js.map +1 -1
- package/dist/wizard.d.ts +7 -106
- package/package.json +9 -6
- package/src/account/account-parts.ts +3 -3
- package/src/{components → account}/account-settings-labels.ts +11 -1
- package/src/{components → account}/account-settings.tsx +145 -34
- package/src/account/data-export-setting-labels.ts +20 -0
- package/src/account/data-export-setting.tsx +19 -38
- package/src/account/delete-account-setting-labels.ts +33 -0
- package/src/account/delete-account-setting.tsx +13 -35
- package/src/account/email-change-setting-labels.ts +32 -0
- package/src/account/email-change-setting.tsx +17 -36
- package/src/{components → account}/passkeys-setting.tsx +14 -9
- package/src/account/sessions-setting-labels.ts +24 -0
- package/src/account/sessions-setting.tsx +14 -28
- package/src/admin/admin-action-confirm-labels.ts +19 -0
- package/src/admin/admin-action-confirm.tsx +59 -38
- package/src/admin/admin-action-log-labels.ts +74 -0
- package/src/admin/admin-action-log.tsx +180 -54
- package/src/admin/admin-parts.ts +0 -7
- package/src/admin/invitations-panel-labels.ts +31 -0
- package/src/admin/invitations-panel.tsx +16 -34
- package/src/admin/plan-change-labels.ts +23 -0
- package/src/admin/plan-change.tsx +89 -37
- package/src/admin/reviewer-scope-editor-labels.ts +16 -0
- package/src/admin/reviewer-scope-editor.tsx +9 -15
- package/src/admin/role-select-labels.ts +16 -0
- package/src/admin/role-select.tsx +13 -23
- package/src/admin/transfer-ownership-dialog-labels.ts +20 -0
- package/src/admin/transfer-ownership-dialog.tsx +7 -17
- package/src/admin/user-roster-labels.ts +17 -0
- package/src/admin/user-roster.tsx +9 -17
- package/src/auth/accept-invitation-labels.ts +21 -0
- package/src/auth/accept-invitation.tsx +9 -20
- package/src/auth/auth-errors.ts +29 -13
- package/src/auth/complete-name-dialog-labels.ts +16 -0
- package/src/auth/complete-name-dialog.tsx +8 -13
- package/src/auth/forgot-password-form-labels.ts +20 -0
- package/src/auth/forgot-password-form.tsx +12 -20
- package/src/auth/new-password-fields.tsx +1 -1
- package/src/auth/not-found-page-labels.ts +12 -0
- package/src/auth/not-found-page.tsx +11 -14
- package/src/auth/register-form-labels.ts +31 -0
- package/src/auth/register-form.tsx +18 -38
- package/src/auth/reset-password-form-labels.ts +27 -0
- package/src/auth/reset-password-form.tsx +12 -27
- package/src/auth/sign-in-form-labels.ts +44 -0
- package/src/auth/sign-in-form.tsx +18 -51
- package/src/auth/status-parts.tsx +3 -3
- package/src/auth/verify-email-labels.ts +26 -0
- package/src/auth/verify-email.tsx +15 -30
- package/src/billing/billing-banner.tsx +2 -1
- package/src/billing/billing-labels.ts +1 -1
- package/src/billing/checkout-processing.ts +2 -12
- package/src/billing/pay-page.ts +9 -5
- package/src/billing/plan-card.tsx +26 -27
- package/src/billing/plan-limit-notice.tsx +1 -1
- package/src/billing/subscription-actions.tsx +4 -4
- package/src/chart.ts +7 -1
- package/src/components/account-chips-labels.ts +16 -0
- package/src/components/account-chips.tsx +13 -16
- package/src/components/alert-banner.tsx +39 -19
- package/src/components/amount-input.tsx +461 -405
- package/src/components/appearance-labels.ts +2 -2
- package/src/components/authed-image-labels.ts +11 -0
- package/src/components/authed-image.tsx +6 -8
- package/src/components/autocomplete.tsx +84 -80
- package/src/components/breadcrumbs-labels.ts +10 -0
- package/src/components/breadcrumbs.tsx +17 -14
- package/src/components/bulk-action-bar-labels.ts +11 -0
- package/src/components/bulk-action-bar.tsx +15 -16
- package/src/components/button-group.tsx +7 -7
- package/src/components/button-look.ts +230 -0
- package/src/components/button.tsx +339 -0
- package/src/components/calculator.tsx +18 -11
- package/src/components/calendar-heatmap-labels.ts +15 -0
- package/src/components/calendar-heatmap.tsx +13 -19
- package/src/components/card.tsx +381 -0
- package/src/components/chart-zoom-core.tsx +653 -0
- package/src/components/chart-zoom.tsx +64 -648
- package/src/components/chart.tsx +11 -11
- package/src/components/checkbox-group.tsx +13 -10
- package/src/components/checkbox.tsx +43 -42
- package/src/components/chip-input.tsx +377 -0
- package/src/components/chip-labels.ts +13 -0
- package/src/components/chip.tsx +115 -711
- package/src/components/choice-card.tsx +83 -85
- package/src/components/column-mapper-labels.ts +45 -0
- package/src/components/column-mapper.tsx +16 -51
- package/src/components/combobox-core.tsx +351 -196
- package/src/components/combobox-suggestions.tsx +129 -0
- package/src/components/combobox.tsx +69 -893
- package/src/components/confirm-dialog-labels.ts +13 -0
- package/src/components/confirm-dialog.tsx +4 -8
- package/src/components/copy-button-labels.ts +13 -0
- package/src/components/copy-button.tsx +10 -12
- package/src/components/country-select-labels.ts +11 -0
- package/src/components/country-select.tsx +74 -89
- package/src/components/currency-option-list.tsx +216 -0
- package/src/components/currency-select.tsx +85 -196
- package/src/components/danger-confirm-labels.ts +20 -0
- package/src/components/danger-confirm.tsx +69 -77
- package/src/components/data-table-cells.tsx +5 -5
- package/src/components/data-table-column-settings.tsx +137 -0
- package/src/components/data-table-filter-popover.tsx +49 -24
- package/src/components/data-table-filters.ts +48 -11
- package/src/components/data-table-head.tsx +258 -0
- package/src/components/data-table-labels.ts +43 -11
- package/src/components/data-table-mobile.tsx +594 -0
- package/src/components/data-table-pagination.tsx +11 -10
- package/src/components/data-table-resize.ts +187 -0
- package/src/components/data-table-row-actions.tsx +152 -0
- package/src/components/data-table-selection.ts +55 -0
- package/src/components/data-table-shared.tsx +172 -0
- package/src/components/data-table.tsx +178 -1300
- package/src/components/date-field.tsx +627 -0
- package/src/components/date-picker.tsx +58 -1446
- package/src/components/date-range-picker.tsx +490 -0
- package/src/components/description-list-labels.ts +9 -0
- package/src/components/description-list.tsx +31 -15
- package/src/components/dialog-frame-labels.ts +7 -0
- package/src/components/dialog-frame.tsx +8 -6
- package/src/components/disclosure.tsx +14 -14
- package/src/components/dropdown.tsx +114 -42
- package/src/components/empty-state.tsx +137 -0
- package/src/components/entity-combobox.tsx +17 -12
- package/src/components/error-boundary-labels.ts +20 -0
- package/src/components/error-boundary.tsx +10 -20
- package/src/components/facing-pair.ts +1 -1
- package/src/components/field-base.tsx +615 -0
- package/src/components/field-parts.tsx +206 -77
- package/src/components/field-strip.tsx +16 -21
- package/src/components/field-sync-labels.ts +13 -0
- package/src/components/field-sync.tsx +11 -12
- package/src/components/field.tsx +13 -11
- package/src/components/file-button.tsx +64 -412
- package/src/components/file-dropzone.tsx +36 -33
- package/src/components/floating-panel-labels.ts +10 -0
- package/src/components/floating-panel.tsx +32 -21
- package/src/components/focus-ring.ts +9 -4
- package/src/components/form-actions-labels.ts +11 -0
- package/src/components/form-actions.tsx +17 -21
- package/src/components/full-bleed-dialog.tsx +33 -25
- package/src/components/grouped-picker.tsx +118 -96
- package/src/components/help-popover.tsx +115 -0
- package/src/components/hover-menu.tsx +46 -35
- package/src/components/iban-input-labels.ts +15 -0
- package/src/components/iban-input.tsx +25 -20
- package/src/components/icon-button.tsx +945 -0
- package/src/components/icon-picker-labels.ts +13 -0
- package/src/components/icon-picker.tsx +27 -24
- package/src/components/image-grid-labels.ts +11 -0
- package/src/components/image-grid.tsx +13 -15
- package/src/components/inline-edit-field-labels.ts +11 -0
- package/src/components/inline-edit-field.tsx +20 -19
- package/src/components/inline-entity-combobox.tsx +789 -0
- package/src/components/input.tsx +380 -0
- package/src/components/jump-calendar.tsx +385 -0
- package/src/components/language-select.tsx +31 -16
- package/src/components/legal-labels.ts +99 -0
- package/src/components/legal-page.tsx +2 -2
- package/src/components/legal.tsx +11 -101
- package/src/components/lightbox-labels.ts +18 -0
- package/src/components/lightbox.tsx +13 -21
- package/src/components/line-items-labels.ts +14 -0
- package/src/components/line-items.tsx +24 -31
- package/src/components/list-labels.ts +10 -0
- package/src/components/list.tsx +98 -75
- package/src/components/loading-state.tsx +4 -4
- package/src/components/measured-grid-labels.ts +25 -0
- package/src/components/measured-grid.tsx +39 -62
- package/src/components/menu-item.tsx +29 -26
- package/src/components/mini-calendar-labels.ts +17 -0
- package/src/components/mini-calendar.tsx +38 -45
- package/src/components/modal.tsx +36 -18
- package/src/components/money-draft.ts +72 -0
- package/src/components/money-field.tsx +16 -30
- package/src/components/month-picker-labels.ts +22 -0
- package/src/components/month-picker.tsx +59 -45
- package/src/components/multi-entity-combobox.tsx +17 -12
- package/src/components/multi-select.tsx +313 -288
- package/src/components/nav-pills.tsx +19 -8
- package/src/components/number-field.tsx +14 -5
- package/src/components/number-input.tsx +125 -90
- package/src/components/numeric-field.ts +161 -0
- package/src/components/numpad-sheet.tsx +16 -16
- package/src/components/one-time-code-input.tsx +154 -169
- package/src/components/page-contents-labels.ts +9 -0
- package/src/components/page-contents.tsx +15 -15
- package/src/components/page-header.tsx +9 -5
- package/src/components/password-strength-labels.ts +23 -0
- package/src/components/password-strength.tsx +13 -27
- package/src/components/phone-input-labels.ts +10 -0
- package/src/components/phone-input.tsx +42 -57
- package/src/components/picker-sheet.tsx +47 -18
- package/src/components/pie-chart.tsx +11 -9
- package/src/components/popover-labels.ts +14 -0
- package/src/components/popover.tsx +40 -39
- package/src/components/progress-bar-labels.ts +10 -0
- package/src/components/progress-bar.tsx +32 -23
- package/src/components/qr-code.tsx +2 -2
- package/src/components/reauth-dialog-labels.ts +13 -0
- package/src/components/reauth-dialog.tsx +7 -10
- package/src/components/row-actions-labels.ts +10 -0
- package/src/components/row-actions.tsx +11 -10
- package/src/components/scroll-area.tsx +4 -10
- package/src/components/search-field.tsx +35 -49
- package/src/components/select.tsx +302 -0
- package/src/components/separator.tsx +2 -2
- package/src/components/series-chart-axes.ts +329 -0
- package/src/components/series-chart-thin.ts +180 -0
- package/src/components/series-chart.tsx +124 -325
- package/src/components/server-wake-labels.ts +11 -0
- package/src/components/server-wake.tsx +42 -63
- package/src/components/settings-fields.tsx +46 -17
- package/src/components/share-card-labels.ts +30 -0
- package/src/components/share-card.tsx +22 -37
- package/src/components/sign-chip-labels.ts +12 -0
- package/src/components/sign-chip.tsx +6 -9
- package/src/components/signature-pad-labels.ts +24 -0
- package/src/components/signature-pad.tsx +48 -57
- package/src/components/signed-amount-labels.ts +10 -0
- package/src/components/signed-amount.tsx +21 -22
- package/src/components/skeleton.tsx +11 -3
- package/src/components/slider.tsx +51 -39
- package/src/components/sparkline-labels.ts +14 -0
- package/src/components/sparkline.tsx +16 -21
- package/src/components/spinner.tsx +81 -0
- package/src/components/stat-tile-labels.ts +15 -0
- package/src/components/stat-tile.tsx +32 -37
- package/src/components/status-dot.tsx +17 -14
- package/src/components/swatch-picker-labels.ts +10 -0
- package/src/components/swatch-picker.tsx +23 -16
- package/src/components/swipeable-row.tsx +7 -7
- package/src/components/switch.tsx +33 -32
- package/src/components/table.tsx +15 -15
- package/src/components/tabs.tsx +660 -0
- package/src/components/text-link.tsx +7 -7
- package/src/components/text.tsx +10 -6
- package/src/components/textarea.tsx +323 -0
- package/src/components/tile-radio.tsx +6 -6
- package/src/components/time-input.tsx +15 -7
- package/src/components/toast-labels.ts +12 -0
- package/src/components/toast.tsx +5 -8
- package/src/components/toggle-group.tsx +105 -42
- package/src/components/toggle-legend.tsx +6 -6
- package/src/components/tooltip.tsx +10 -21
- package/src/components/translation-review-editor.tsx +8 -7
- package/src/components/translation-review-parts.tsx +9 -13
- package/src/components/translation-review.tsx +26 -14
- package/src/components/tree-view.tsx +14 -12
- package/src/components/ui-labels.ts +22 -0
- package/src/components/user-avatar.tsx +3 -3
- package/src/components/wizard-stepper.tsx +10 -5
- package/src/components/write-lock-labels.ts +9 -0
- package/src/components/write-lock.tsx +10 -12
- package/src/data-table.ts +4 -0
- package/src/demo/demo-banner.tsx +9 -25
- package/src/demo/demo-ended.tsx +8 -7
- package/src/demo/demo-labels.ts +2 -2
- package/src/demo/demo-start.tsx +7 -5
- package/src/feedback/feedback-attachment-labels.ts +36 -0
- package/src/feedback/feedback-attachment.tsx +42 -66
- package/src/feedback/feedback-context-labels.ts +10 -0
- package/src/feedback/feedback-context.tsx +8 -9
- package/src/feedback/feedback-dialog-labels.ts +28 -0
- package/src/feedback/feedback-dialog.tsx +14 -44
- package/src/feedback/feedback-inbox.tsx +49 -252
- package/src/feedback/feedback-labels.ts +5 -5
- package/src/feedback/feedback-menu-labels.ts +11 -0
- package/src/feedback/feedback-menu.tsx +13 -11
- package/src/feedback/feedback-record.ts +21 -7
- package/src/feedback/feedback-row-detail-labels.ts +33 -0
- package/src/feedback/feedback-row-detail.tsx +30 -43
- package/src/feedback/feedback-status-undo.ts +3 -2
- package/src/feedback/feedback-submit-dialog.tsx +109 -0
- package/src/feedback/feedback-submit.tsx +45 -55
- package/src/feedback/feedback-swipe.tsx +1 -1
- package/src/feedback/feedback-table-labels.ts +27 -0
- package/src/feedback/feedback-table.tsx +24 -40
- package/src/feedback/feedback-thread-labels.ts +22 -0
- package/src/feedback/feedback-thread.tsx +68 -48
- package/src/feedback/feedback-vocabulary.ts +252 -0
- package/src/hooks/use-anchored-panel.ts +155 -9
- package/src/hooks/use-anchored-rect.ts +11 -9
- package/src/hooks/use-authed-src.ts +13 -7
- package/src/hooks/use-breakpoint.ts +5 -4
- package/src/hooks/use-close-transition.ts +9 -10
- package/src/hooks/use-debounce.ts +9 -0
- package/src/hooks/use-dismiss.ts +176 -19
- package/src/hooks/use-file-drop.ts +2 -2
- package/src/hooks/use-file-picker-labels.ts +29 -0
- package/src/hooks/use-file-picker.tsx +363 -0
- package/src/hooks/use-focus-trap.ts +74 -18
- package/src/i18n/defaults.ts +91 -82
- package/src/i18n/german.ts +54 -7
- package/src/i18n/kit-labels.tsx +70 -119
- package/src/i18n/locales/en.ts +46 -0
- package/src/i18n/locales/es.ts +52 -7
- package/src/i18n/locales/fr.ts +55 -8
- package/src/i18n/locales/hu.ts +54 -8
- package/src/i18n/locales/it.ts +53 -7
- package/src/i18n/locales/zh.ts +50 -6
- package/src/i18n/plurals.ts +29 -0
- package/src/i18n/review.ts +4 -0
- package/src/i18n/shared-labels.ts +135 -0
- package/src/index.ts +412 -402
- package/src/landing/access.ts +2 -1
- package/src/landing/landing-actions.tsx +6 -5
- package/src/landing/landing-labels.ts +2 -2
- package/src/landing/landing-sections.tsx +24 -23
- package/src/landing/public-header.tsx +3 -2
- package/src/landing/routing.tsx +2 -7
- package/src/lib/chip-edge-snap.ts +212 -0
- package/src/lib/cn.ts +13 -1
- package/src/lib/dates.ts +4 -2
- package/src/lib/decimal-marks.ts +4 -2
- package/src/lib/download.ts +172 -0
- package/src/lib/floating-stack.ts +5 -1
- package/src/lib/format.ts +5 -3
- package/src/lib/ime.ts +24 -0
- package/src/lib/presence.ts +18 -0
- package/src/lib/reduced-motion.ts +21 -0
- package/src/lib/round.ts +38 -0
- package/src/lib/safe-storage.ts +35 -11
- package/src/lib/session-refresh.ts +473 -0
- package/src/lib/text-match.ts +60 -0
- package/src/lib/translation-review.ts +7 -6
- package/src/rhf/fields.tsx +131 -179
- package/src/rhf/form-core.tsx +327 -0
- package/src/rhf/form.tsx +46 -321
- package/src/rhf/line-items.tsx +1 -1
- package/src/rhf.ts +3 -2
- package/src/search/command-palette-labels.ts +16 -0
- package/src/search/command-palette.tsx +37 -50
- package/src/search/global-search-labels.ts +13 -0
- package/src/search/global-search.tsx +50 -24
- package/src/search/search-index.ts +5 -6
- package/src/search/use-command-key.ts +22 -0
- package/src/settings/settings-card-classes.ts +11 -0
- package/src/settings/settings-heading.tsx +1 -1
- package/src/settings/settings-labels.ts +2 -2
- package/src/settings/settings-layout.tsx +65 -6
- package/src/settings/settings-section.tsx +5 -5
- package/src/settings/use-settings-focus.ts +2 -5
- package/src/shell/app-shell-labels.ts +10 -0
- package/src/shell/app-shell.tsx +79 -53
- package/src/shell/auth-layout.tsx +11 -10
- package/src/shell/company-switcher-labels.ts +13 -0
- package/src/shell/company-switcher.tsx +7 -11
- package/src/shell/option-switcher-menu.tsx +25 -6
- package/src/shell/role-switcher.tsx +7 -3
- package/src/shell/top-bar-brand.tsx +1 -1
- package/src/shell/top-bar.tsx +6 -5
- package/src/shell/topbar-action-menu.tsx +39 -20
- package/src/shell/topbar-controls.tsx +24 -12
- package/src/shell.ts +1 -1
- package/src/testing/index.ts +11 -0
- package/src/testing/viewport.ts +251 -0
- package/src/theme/color.ts +7 -1
- package/src/theme/palette-derive.ts +29 -7
- package/src/theme/palette-presets.ts +81 -68
- package/src/tour/tour-labels.ts +14 -0
- package/src/tour/tour.tsx +13 -23
- package/src/wizard/stepper-nav.tsx +19 -18
- package/src/wizard/types.ts +7 -22
- package/src/wizard/wizard-labels.ts +29 -0
- package/src/wizard/wizard-step.tsx +2 -2
- package/src/wizard/wizard-summary.tsx +8 -7
- package/tokens.css +63 -14
- package/dist/components/account-settings-labels.js.map +0 -1
- package/dist/components/account-settings.js.map +0 -1
- package/dist/components/choice-parts.d.ts +0 -24
- package/dist/components/choice-parts.js +0 -18
- package/dist/components/choice-parts.js.map +0 -1
- package/dist/components/passkeys-setting.js.map +0 -1
- package/dist/components/ui.d.ts +0 -100
- package/dist/components/ui.js +0 -1955
- package/dist/components/ui.js.map +0 -1
- package/dist/data-table-labels-BJ5JE_X2.d.ts +0 -923
- package/dist/delete-account-setting-DiPX4Vue.d.ts +0 -8130
- package/src/components/choice-parts.ts +0 -33
- package/src/components/ui.tsx +0 -4233
|
@@ -1,161 +1,34 @@
|
|
|
1
1
|
import { Fragment, useId, useMemo, useRef, useState } from "react";
|
|
2
|
-
import type { ComponentPropsWithoutRef, ReactNode, Ref
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import { FIELD_BASE, FIELD_FLOATING_PAD, FIELD_INVALID } from "./ui";
|
|
2
|
+
import type { ComponentPropsWithoutRef, ReactNode, Ref } from "react";
|
|
3
|
+
import { ChevronDown } from "lucide-react";
|
|
4
|
+
import { FIELD_BASE, FIELD_FLOATING_PAD, FIELD_INVALID } from "./field-base";
|
|
6
5
|
import { cn } from "../lib/cn";
|
|
7
6
|
import { useDropdown } from "./dropdown";
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
7
|
+
import { takeEscape, useDismissLayer } from "../hooks/use-dismiss";
|
|
8
|
+
import { isImeEnter } from "../lib/ime";
|
|
10
9
|
import { usePhoneLayout } from "../hooks/use-breakpoint";
|
|
11
10
|
import { PickerSheet, SHEET_ROW_CLASS } from "./picker-sheet";
|
|
12
|
-
import {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
endHintRowProps,
|
|
16
|
-
isOptionEnabled,
|
|
17
|
-
offersCreate,
|
|
18
|
-
stepEnabled,
|
|
19
|
-
SUGGESTION_LIST_CLASS,
|
|
20
|
-
suggestionRowClass,
|
|
21
|
-
useActiveOptionScroll,
|
|
22
|
-
useComboboxFieldError,
|
|
23
|
-
type ComboClearValue,
|
|
24
|
-
type ComboOption,
|
|
25
|
-
} from "./combobox-core";
|
|
26
|
-
import { DEFAULT_COMBOBOX_LABELS, useKitLabels } from "../i18n/kit-labels";
|
|
11
|
+
import { ComboboxFieldLabel, endHintRowProps, useActiveOptionScroll } from "./combobox-core";
|
|
12
|
+
import { useKitLocale } from "../i18n/kit-labels";
|
|
13
|
+
import { rankMatch } from "../lib/text-match";
|
|
27
14
|
import {
|
|
28
15
|
EndHintRow,
|
|
29
16
|
FieldCaption,
|
|
30
17
|
LABEL_IN_ROW,
|
|
31
18
|
LockedReason,
|
|
19
|
+
mergeDescribedBy,
|
|
32
20
|
StaticLabelRow,
|
|
21
|
+
useFieldError,
|
|
33
22
|
useFieldHint,
|
|
34
23
|
useLockReason,
|
|
24
|
+
type DisabledReasonDisplay,
|
|
35
25
|
} from "./field-parts";
|
|
36
|
-
import {
|
|
37
|
-
import {
|
|
38
|
-
|
|
39
|
-
//
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
const LIST_CLASS = SUGGESTION_LIST_CLASS;
|
|
43
|
-
|
|
44
|
-
/**
|
|
45
|
-
* "This focus came from a mouse button that is not the left one" — for the two
|
|
46
|
-
* fields below, which open their list ON FOCUS.
|
|
47
|
-
*
|
|
48
|
-
* Keksdose live #309 rework: *"When clicking the mouse back button now while hovering
|
|
49
|
-
* one of the selects it opens the select as long as I am holding the button down and
|
|
50
|
-
* closes select after releasing."* A mouse's BACK button focuses whatever it is
|
|
51
|
-
* pressed over, exactly as the left one does — the browser only reserves the
|
|
52
|
-
* NAVIGATION for itself — so a field that opens on focus opened a list for a gesture
|
|
53
|
-
* that means "go back", and the release then navigated out from under it. Measured on
|
|
54
|
-
* his own budget: `mousePressed button=back` over the transfer form's account field
|
|
55
|
-
* left `aria-expanded=true`, and the release took the whole add card with it.
|
|
56
|
-
*
|
|
57
|
-
* The press is recorded and read by the focus that the SAME press causes: focus is
|
|
58
|
-
* mousedown's default action, dispatched inside the same task, so the flag is always
|
|
59
|
-
* read before the `setTimeout` below can drop it. And it is always dropped — a press
|
|
60
|
-
* that focuses nothing (the pointer was over a disabled field, the button was
|
|
61
|
-
* released elsewhere) must not leave a latch that swallows the next Tab.
|
|
62
|
-
*
|
|
63
|
-
* Only the OPEN is suppressed, never the navigation: Back still goes back, which is
|
|
64
|
-
* the whole of what the button was pressed for.
|
|
65
|
-
*/
|
|
66
|
-
function usePrimaryPressOnly() {
|
|
67
|
-
const auxPress = useRef(false);
|
|
68
|
-
return {
|
|
69
|
-
onMouseDown: (e: { button: number }) => {
|
|
70
|
-
if (e.button === 0) return;
|
|
71
|
-
auxPress.current = true;
|
|
72
|
-
setTimeout(() => {
|
|
73
|
-
auxPress.current = false;
|
|
74
|
-
}, 0);
|
|
75
|
-
},
|
|
76
|
-
/** True while handling the focus a non-primary press just caused. */
|
|
77
|
-
fromAuxButton: () => auxPress.current,
|
|
78
|
-
};
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
/**
|
|
82
|
-
* The desktop suggestion list, PORTALLED and anchored to the field.
|
|
83
|
-
*
|
|
84
|
-
* It used to be an `absolute` `<ul>` inside the field's own wrapper, and that is
|
|
85
|
-
* Keksdose live #295: *"Category select inside the list is not readable. Some sort
|
|
86
|
-
* of z indexes issue?"*. It was not z-index — a stacking context can be out-ranked,
|
|
87
|
-
* but `overflow` cannot be argued with. The receipt's line table sits in a card
|
|
88
|
-
* carrying `overflow-clip`, so a list opened from the last visible row was cut off
|
|
89
|
-
* at the card's edge: measured at 256px tall with 150px of it painted.
|
|
90
|
-
*
|
|
91
|
-
* Every other panel in this package already learned this — `DropdownPanel`'s
|
|
92
|
-
* `anchorRef` form, the calculator popover, the tooltip — so this reuses the same
|
|
93
|
-
* hook rather than inventing a second placement. What that buys beyond the clip:
|
|
94
|
-
* the list flips above the field when there is no room below, and it caps its own
|
|
95
|
-
* height against the VISIBLE viewport, which on a phone means the on-screen
|
|
96
|
-
* keyboard (see {@link useAnchoredPanel}).
|
|
97
|
-
*
|
|
98
|
-
* `panelRef` is not optional plumbing. Portalled, the list is no longer a
|
|
99
|
-
* descendant of the wrapper, so {@link useDropdown}'s outside-click test answers
|
|
100
|
-
* "outside" for a click on the list itself — the first option a user picked would
|
|
101
|
-
* close the dropdown having picked nothing.
|
|
102
|
-
*/
|
|
103
|
-
function SuggestionList({
|
|
104
|
-
id,
|
|
105
|
-
anchorRef,
|
|
106
|
-
panelRef,
|
|
107
|
-
children,
|
|
108
|
-
}: {
|
|
109
|
-
/** What the field's `aria-controls` names. */
|
|
110
|
-
id: string;
|
|
111
|
-
anchorRef: RefObject<HTMLElement | null>;
|
|
112
|
-
panelRef: RefObject<HTMLDivElement | null>;
|
|
113
|
-
children: ReactNode;
|
|
114
|
-
}) {
|
|
115
|
-
const { rect, top, maxHeight } = useAnchoredPanel(anchorRef, true, { preferredHeight: 256 });
|
|
116
|
-
const dir = useAnchorDir(anchorRef, true);
|
|
117
|
-
if (!rect) return null;
|
|
118
|
-
return createPortal(
|
|
119
|
-
<div
|
|
120
|
-
ref={panelRef}
|
|
121
|
-
// z-50, not the old z-30: the list is a child of <body> now, so it is
|
|
122
|
-
// competing with the app's own overlays rather than with its own siblings.
|
|
123
|
-
className="fixed z-50"
|
|
124
|
-
// Portalled out of the form's `dir`; the field's is put back. The list is
|
|
125
|
-
// exactly the field's width, so `left` places it in either direction.
|
|
126
|
-
dir={dir}
|
|
127
|
-
style={{ top, left: rect.left, width: rect.width }}
|
|
128
|
-
>
|
|
129
|
-
<ul id={id} role="listbox" data-clips="" className={LIST_CLASS} style={{ maxHeight }}>
|
|
130
|
-
{children}
|
|
131
|
-
</ul>
|
|
132
|
-
</div>,
|
|
133
|
-
document.body,
|
|
134
|
-
);
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
const rowClass = suggestionRowClass;
|
|
138
|
-
|
|
139
|
-
/**
|
|
140
|
-
* The write lock on the two TYPED fields below — {@link Button}'s `disabledReason`
|
|
141
|
-
* path, for an input (keksdose G2).
|
|
142
|
-
*
|
|
143
|
-
* `readOnly` rather than `disabled`, as everywhere the kit locks a field: still focusable,
|
|
144
|
-
* so the reason in the Tooltip reaches a keyboard; refusing keys, so nothing typed can
|
|
145
|
-
* become a value; and FIELD_BASE paints a `[readonly]` field in the settled grey a
|
|
146
|
-
* disabled one wears. No list opens, by focus, click, chevron or arrow — and Enter is
|
|
147
|
-
* swallowed, so a locked field does not submit the form around it either (Select's
|
|
148
|
-
* lock, `LOCKED_SELECT_KEYS`). Every other key is left alone: the arrows and Home/End
|
|
149
|
-
* still move the caret through a long value someone is trying to read.
|
|
150
|
-
*/
|
|
151
|
-
function lockedKeyDown(e: { key: string; preventDefault: () => void }) {
|
|
152
|
-
if (e.key === "Enter") e.preventDefault();
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
/** {@link InlineEntityCombobox}'s create row over the shared row look: in the brand
|
|
156
|
-
* colour {@link Combobox}'s own create row wears, with a leading "+" as the panel
|
|
157
|
-
* pickers' has — an action at the foot of the list, not one more record. */
|
|
158
|
-
const CREATE_ROW_CLASS = "flex items-center gap-2 font-medium text-[var(--brand)]";
|
|
26
|
+
import type { CommitScope } from "./write-lock";
|
|
27
|
+
import { lockedKeyDown, rowClass, SuggestionList, usePrimaryPressOnly } from "./combobox-suggestions";
|
|
28
|
+
// The id-keyed sibling lives in inline-entity-combobox.tsx (MOD-9), the list both share
|
|
29
|
+
// in combobox-suggestions.tsx; its public names are still this module's.
|
|
30
|
+
export { InlineEntityCombobox } from "./inline-entity-combobox";
|
|
31
|
+
export type { InlineEntityComboboxProps } from "./inline-entity-combobox";
|
|
159
32
|
|
|
160
33
|
/**
|
|
161
34
|
* Four of the div's own attributes are omitted because this component already owns
|
|
@@ -170,7 +43,10 @@ export interface ComboboxProps
|
|
|
170
43
|
onChange: (v: string) => void;
|
|
171
44
|
/** Suggestion pool (e.g. existing payee names). */
|
|
172
45
|
options: string[];
|
|
173
|
-
label
|
|
46
|
+
/** The visible label, a `<label for>` above the field: a ReactNode, as on every kit
|
|
47
|
+
* field (a string until 0.34, refactor audit 2026-10, API-9). Without one, name the
|
|
48
|
+
* field with `aria-label`. */
|
|
49
|
+
label?: ReactNode;
|
|
174
50
|
id?: string;
|
|
175
51
|
placeholder?: string;
|
|
176
52
|
className?: string;
|
|
@@ -208,6 +84,9 @@ export interface ComboboxProps
|
|
|
208
84
|
* `disabledReason` way with the lock's reason; inside a form with its own Save, leave
|
|
209
85
|
* it off and put `commit` on the Save. No provider, or an unlocked one: no effect. */
|
|
210
86
|
commit?: CommitScope;
|
|
87
|
+
/** Where the reason shows — {@link Button}'s `disabledReasonDisplay`: a line under the
|
|
88
|
+
* field at Large and on a touch screen by default, the tooltip otherwise (DUP-3). */
|
|
89
|
+
disabledReasonDisplay?: DisabledReasonDisplay;
|
|
211
90
|
/** Heading an option belongs under. Supplying it makes this list read exactly
|
|
212
91
|
* like {@link InlineEntityCombobox}'s — one heading per group with its rows
|
|
213
92
|
* indented beneath — instead of a flat list (feedback #136 rework: the payee
|
|
@@ -309,6 +188,7 @@ export function Combobox(props: ComboboxProps) {
|
|
|
309
188
|
hint,
|
|
310
189
|
disabled,
|
|
311
190
|
disabledReason,
|
|
191
|
+
disabledReasonDisplay,
|
|
312
192
|
commit,
|
|
313
193
|
optionAdornment,
|
|
314
194
|
autoFocus,
|
|
@@ -325,11 +205,7 @@ export function Combobox(props: ComboboxProps) {
|
|
|
325
205
|
...rest
|
|
326
206
|
} = props;
|
|
327
207
|
const hintParts = useFieldHint(hint, ariaDescribedBy);
|
|
328
|
-
const field =
|
|
329
|
-
error,
|
|
330
|
-
invalid || ariaInvalid === true || ariaInvalid === "true",
|
|
331
|
-
hintParts.describedBy,
|
|
332
|
-
);
|
|
208
|
+
const field = useFieldError(error, invalid, hintParts.describedBy, ariaInvalid);
|
|
333
209
|
const generated = useId();
|
|
334
210
|
const fieldId = id ?? generated;
|
|
335
211
|
// Derived from the GENERATED id, never from `id`: a caller's id is theirs to
|
|
@@ -338,9 +214,10 @@ export function Combobox(props: ComboboxProps) {
|
|
|
338
214
|
const optionId = (index: number) => `${generated}-option-${index}`;
|
|
339
215
|
// `backCloses` is the desktop half of live #309: the phone's list IS a
|
|
340
216
|
// {@link PickerSheet}, which registers its own history entry, so registering a
|
|
341
|
-
// second one here would cost two Back presses to dismiss one sheet.
|
|
217
|
+
// second one here would cost two Back presses to dismiss one sheet. Its Escape
|
|
218
|
+
// layer is this field's own, below — the list can be open with nothing to show.
|
|
342
219
|
const isPhone = usePhoneLayout();
|
|
343
|
-
const { open, setOpen, wrapperRef, panelRef } = useDropdown({ backCloses: !isPhone });
|
|
220
|
+
const { open, setOpen, wrapperRef, panelRef } = useDropdown({ backCloses: !isPhone, escapeLayer: false });
|
|
344
221
|
const primaryOnly = usePrimaryPressOnly();
|
|
345
222
|
const [active, setActive] = useState(-1);
|
|
346
223
|
// The lock (see `lockedKeyDown`): a lock arriving while the list is up closes it,
|
|
@@ -381,7 +258,9 @@ export function Combobox(props: ComboboxProps) {
|
|
|
381
258
|
*/
|
|
382
259
|
const [typing, setTyping] = useState(false);
|
|
383
260
|
|
|
384
|
-
const query = typing ? value.trim()
|
|
261
|
+
const query = typing ? value.trim() : "";
|
|
262
|
+
// Folded as every kit list folds (DUP-5): "zurich" finds Zürich, by the locale's case.
|
|
263
|
+
const locale = useKitLocale();
|
|
385
264
|
const matches = useMemo(() => {
|
|
386
265
|
const seen = new Set<string>();
|
|
387
266
|
const uniq = options.filter((o) => o && !seen.has(o) && seen.add(o));
|
|
@@ -390,12 +269,14 @@ export function Combobox(props: ComboboxProps) {
|
|
|
390
269
|
if (!query) {
|
|
391
270
|
ranked = uniq.slice(0, cap);
|
|
392
271
|
} else {
|
|
393
|
-
//
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
(o) =>
|
|
397
|
-
|
|
398
|
-
|
|
272
|
+
// The whole name, then prefix matches, then substring matches — most relevant on
|
|
273
|
+
// top (`rankMatch`; a stable sort keeps the pool's order within a rank).
|
|
274
|
+
ranked = uniq
|
|
275
|
+
.map((o) => ({ o, rank: rankMatch(o, query, { locale }) }))
|
|
276
|
+
.filter((x) => x.rank >= 0)
|
|
277
|
+
.sort((a, b) => a.rank - b.rank)
|
|
278
|
+
.map((x) => x.o)
|
|
279
|
+
.slice(0, cap);
|
|
399
280
|
}
|
|
400
281
|
if (!groupBy) return ranked;
|
|
401
282
|
// Keep each group contiguous so a heading appears once instead of every time
|
|
@@ -409,7 +290,7 @@ export function Combobox(props: ComboboxProps) {
|
|
|
409
290
|
byGroup.get(key)!.push(o);
|
|
410
291
|
}
|
|
411
292
|
return [...byGroup.values()].flat();
|
|
412
|
-
}, [options, query, groupBy, maxSuggestions, isPhone]);
|
|
293
|
+
}, [options, query, groupBy, maxSuggestions, isPhone, locale]);
|
|
413
294
|
|
|
414
295
|
/**
|
|
415
296
|
* Which rows OPEN a group, and with what heading — computed once for both lists.
|
|
@@ -459,7 +340,7 @@ export function Combobox(props: ComboboxProps) {
|
|
|
459
340
|
// copy of the reason, Button's anatomy; `block` so a full-width field stays full width.
|
|
460
341
|
const withLock = (box: ReactNode) =>
|
|
461
342
|
locked ? (
|
|
462
|
-
<LockedReason lock={lock} className="block">
|
|
343
|
+
<LockedReason lock={lock} display={disabledReasonDisplay} className="block">
|
|
463
344
|
{box}
|
|
464
345
|
</LockedReason>
|
|
465
346
|
) : (
|
|
@@ -472,6 +353,15 @@ export function Combobox(props: ComboboxProps) {
|
|
|
472
353
|
? createLabel(typed)
|
|
473
354
|
: null;
|
|
474
355
|
|
|
356
|
+
// The list is a layer on the Escape stack while it SHOWS (Wave 2, DUP-1): an Escape
|
|
357
|
+
// over an empty "open" list is the dialog's, as it always was. On a phone the sheet
|
|
358
|
+
// is the layer.
|
|
359
|
+
const showing = !isPhone && open && !inert && (matches.length > 0 || Boolean(createRow));
|
|
360
|
+
useDismissLayer(showing, () => {
|
|
361
|
+
setOpen(false);
|
|
362
|
+
setActive(-1);
|
|
363
|
+
});
|
|
364
|
+
|
|
475
365
|
return (
|
|
476
366
|
// `rest` dresses the outer box — a `data-tour` anchor, a test id. Not the NAME,
|
|
477
367
|
// description, invalid or required state: those belong on the <input> below,
|
|
@@ -571,6 +461,9 @@ export function Combobox(props: ComboboxProps) {
|
|
|
571
461
|
e.preventDefault();
|
|
572
462
|
setActive((i) => Math.max(i - 1, 0));
|
|
573
463
|
} else if (e.key === "Enter") {
|
|
464
|
+
// The Enter that confirms an IME composition is the IME's: it picks no
|
|
465
|
+
// row and submits nothing (BUG-9).
|
|
466
|
+
if (isImeEnter(e)) return;
|
|
574
467
|
if (open && active >= 0 && active < matches.length) {
|
|
575
468
|
e.preventDefault();
|
|
576
469
|
take(matches[active]);
|
|
@@ -583,6 +476,11 @@ export function Combobox(props: ComboboxProps) {
|
|
|
583
476
|
onSubmit?.();
|
|
584
477
|
}
|
|
585
478
|
} else if (e.key === "Escape") {
|
|
479
|
+
// A list that is SHOWING is the top of the Escape stack, and the key
|
|
480
|
+
// closes it and stops here: a Modal or FullBleedDialog around the field
|
|
481
|
+
// otherwise closed with it, form and all (round 0.34 BUG-1). With no
|
|
482
|
+
// list on screen the key goes on to whoever wants it.
|
|
483
|
+
if (showing && takeEscape(e)) return;
|
|
586
484
|
setOpen(false);
|
|
587
485
|
setActive(-1);
|
|
588
486
|
} else if (e.key === "Tab") {
|
|
@@ -613,7 +511,7 @@ export function Combobox(props: ComboboxProps) {
|
|
|
613
511
|
if (!inert) setOpen((o) => !o);
|
|
614
512
|
}}
|
|
615
513
|
className={cn(
|
|
616
|
-
"absolute end-2.5 top-1/2 size-4 -translate-y-1/2 text-
|
|
514
|
+
"absolute end-2.5 top-1/2 size-4 -translate-y-1/2 text-placeholder",
|
|
617
515
|
// The box above does the dimming; dimming here too would halve it again.
|
|
618
516
|
!inert && "cursor-pointer",
|
|
619
517
|
)}
|
|
@@ -660,7 +558,7 @@ export function Combobox(props: ComboboxProps) {
|
|
|
660
558
|
role="option"
|
|
661
559
|
aria-selected={false}
|
|
662
560
|
onClick={() => take(typed)}
|
|
663
|
-
className={cn(SHEET_ROW_CLASS, "font-medium text-
|
|
561
|
+
className={cn(SHEET_ROW_CLASS, "font-medium text-brand")}
|
|
664
562
|
>
|
|
665
563
|
{createRow}
|
|
666
564
|
</button>
|
|
@@ -673,7 +571,7 @@ export function Combobox(props: ComboboxProps) {
|
|
|
673
571
|
{group !== undefined && (
|
|
674
572
|
<li
|
|
675
573
|
role="presentation"
|
|
676
|
-
className="px-4 pb-0.5 pt-3 text-caption font-semibold uppercase tracking-wide text-
|
|
574
|
+
className="px-4 pb-0.5 pt-3 text-caption font-semibold uppercase tracking-wide text-muted"
|
|
677
575
|
>
|
|
678
576
|
{group}
|
|
679
577
|
</li>
|
|
@@ -689,7 +587,7 @@ export function Combobox(props: ComboboxProps) {
|
|
|
689
587
|
optionAdornment && "flex items-center justify-between gap-2",
|
|
690
588
|
)}
|
|
691
589
|
>
|
|
692
|
-
{optionAdornment ? <span className="truncate">{o}</span> : o}
|
|
590
|
+
{optionAdornment ? <span className="truncate-until-large">{o}</span> : o}
|
|
693
591
|
{optionAdornment?.(o)}
|
|
694
592
|
</button>
|
|
695
593
|
</li>
|
|
@@ -699,7 +597,7 @@ export function Combobox(props: ComboboxProps) {
|
|
|
699
597
|
</ul>
|
|
700
598
|
</PickerSheet>
|
|
701
599
|
)}
|
|
702
|
-
{
|
|
600
|
+
{showing && (
|
|
703
601
|
<SuggestionList id={listboxId} anchorRef={fieldRef} panelRef={panelRef}>
|
|
704
602
|
{createRow && (
|
|
705
603
|
<li role="presentation">
|
|
@@ -714,7 +612,7 @@ export function Combobox(props: ComboboxProps) {
|
|
|
714
612
|
e.preventDefault();
|
|
715
613
|
take(typed);
|
|
716
614
|
}}
|
|
717
|
-
className={cn(rowClass(false), "font-medium text-
|
|
615
|
+
className={cn(rowClass(false), "font-medium text-brand")}
|
|
718
616
|
>
|
|
719
617
|
{createRow}
|
|
720
618
|
</button>
|
|
@@ -730,7 +628,7 @@ export function Combobox(props: ComboboxProps) {
|
|
|
730
628
|
{group !== undefined && (
|
|
731
629
|
<li
|
|
732
630
|
role="presentation"
|
|
733
|
-
className="px-3 pb-0.5 pt-2 text-caption font-semibold uppercase tracking-wide text-
|
|
631
|
+
className="px-3 pb-0.5 pt-2 text-caption font-semibold uppercase tracking-wide text-muted first:pt-1"
|
|
734
632
|
>
|
|
735
633
|
{group}
|
|
736
634
|
</li>
|
|
@@ -761,10 +659,12 @@ export function Combobox(props: ComboboxProps) {
|
|
|
761
659
|
// A row with a badge is a flex row so the label truncates and the
|
|
762
660
|
// badge keeps its width; without one it stays the plain block the
|
|
763
661
|
// other lists render, so nothing shifts for callers that pass none.
|
|
662
|
+
// From Large up the label wraps instead (`truncate-until-large`,
|
|
663
|
+
// text size §10.17, round 0.34 T1), as the badge-less row does.
|
|
764
664
|
optionAdornment && "flex items-center justify-between gap-2",
|
|
765
665
|
)}
|
|
766
666
|
>
|
|
767
|
-
{optionAdornment ? <span className="truncate">{o}</span> : o}
|
|
667
|
+
{optionAdornment ? <span className="truncate-until-large">{o}</span> : o}
|
|
768
668
|
{optionAdornment?.(o)}
|
|
769
669
|
</button>
|
|
770
670
|
</li>
|
|
@@ -776,727 +676,3 @@ export function Combobox(props: ComboboxProps) {
|
|
|
776
676
|
</div>
|
|
777
677
|
);
|
|
778
678
|
}
|
|
779
|
-
|
|
780
|
-
/** `id` is the INPUT's and `onChange` is the field's — see {@link ComboboxProps}
|
|
781
|
-
* for why the div's spellings of them are omitted. */
|
|
782
|
-
export interface InlineEntityComboboxProps<V extends string | number, C extends ComboClearValue = null>
|
|
783
|
-
extends Omit<ComponentPropsWithoutRef<"div">, "id" | "onChange"> {
|
|
784
|
-
/** Selected option id; `null` or `clearValue` when nothing is selected. */
|
|
785
|
-
value: V | C | null;
|
|
786
|
-
/** Required and unanswered — see {@link Combobox}'s `invalid`. */
|
|
787
|
-
invalid?: boolean;
|
|
788
|
-
/** What is wrong with the value — see {@link Combobox}'s `error`. */
|
|
789
|
-
error?: ReactNode;
|
|
790
|
-
/** Standing advice — see {@link Combobox}'s `hint` (keksdose K4). */
|
|
791
|
-
hint?: ReactNode;
|
|
792
|
-
/** A picked/typed option emits its id; emptying the field, or the "×", emits
|
|
793
|
-
* `clearValue`. */
|
|
794
|
-
onChange: (v: V | C) => void;
|
|
795
|
-
/** What a clear emits — `null` by default, `""` for a schema that wants an empty
|
|
796
|
-
* string. See {@link EntityCombobox}'s `clearValue`. */
|
|
797
|
-
clearValue?: C;
|
|
798
|
-
options: ComboOption<V>[];
|
|
799
|
-
label?: string;
|
|
800
|
-
id?: string;
|
|
801
|
-
placeholder?: string;
|
|
802
|
-
className?: string;
|
|
803
|
-
disabled?: boolean;
|
|
804
|
-
/** Focus on mount, the way `<input autoFocus>` does — and, through `onFocus`
|
|
805
|
-
* below, open the list with it. A click-the-value editor needs it: the cell
|
|
806
|
-
* the user clicked names the field the editor should land the caret in, and
|
|
807
|
-
* without a passthrough this component's fixed prop list puts the `<input>`
|
|
808
|
-
* out of a caller's reach entirely (Keksdose feedback live #218). */
|
|
809
|
-
autoFocus?: boolean;
|
|
810
|
-
/** Phone sheet only — the anchored list has the field itself to type in. Falls
|
|
811
|
-
* back to `placeholder`, then to `combobox.search` from the {@link UiKitProvider}. */
|
|
812
|
-
searchPlaceholder?: string;
|
|
813
|
-
/** Phone sheet only: a full screen showing nothing has to say why. The anchored
|
|
814
|
-
* list simply does not open. Default: `combobox.noResults` from the provider. */
|
|
815
|
-
emptyLabel?: string;
|
|
816
|
-
closeLabel?: string;
|
|
817
|
-
/** The phone sheet's heading (and, as a string, its accessible name) for a field
|
|
818
|
-
* whose label is drawn by someone else — a form's `FormLabel`;
|
|
819
|
-
* `RhfInlineEntityCombobox` hands its label over here (0.24). Default: `label`.
|
|
820
|
-
* See {@link Combobox}'s `sheetTitle`. */
|
|
821
|
-
sheetTitle?: ReactNode;
|
|
822
|
-
/** Offer a clear "×" in place of the chevron whenever something is selected.
|
|
823
|
-
*
|
|
824
|
-
* Emptying the text already clears (see {@link reconcile}), and on a desktop that
|
|
825
|
-
* is the fast way. It is not a way at all on a PHONE: touching the field opens the
|
|
826
|
-
* full-screen sheet, which covers the very input the text would have been deleted
|
|
827
|
-
* from — so a field that had been answered could not be UNanswered by any gesture
|
|
828
|
-
* the screen offered (Keksdose live #236, filed from a phone). The "×" is the one
|
|
829
|
-
* affordance both shells share, and it clears without opening anything. */
|
|
830
|
-
clearable?: boolean;
|
|
831
|
-
clearLabel?: string;
|
|
832
|
-
/**
|
|
833
|
-
* Why the choice cannot be changed — {@link Button}'s `disabledReason`, for a picker
|
|
834
|
-
* that SAVES on change. keksdose G2: the statement review's account picker IS the
|
|
835
|
-
* write (picking re-runs the duplicate check on the server), and on the read-only demo
|
|
836
|
-
* the app wrapped it in a hand-made Tooltip over a native `disabled` — out of the tab
|
|
837
|
-
* order, so the reason never reached a keyboard.
|
|
838
|
-
*
|
|
839
|
-
* With a reason the input stays focusable and `aria-disabled`, is `readOnly` (the
|
|
840
|
-
* settled grey), opens no list or sheet, offers no clear "×", and no pick, typed
|
|
841
|
-
* label or clear reaches `onChange`; the reason is in the kit {@link Tooltip} and on
|
|
842
|
-
* the input's `aria-describedby`. Wins over `disabled`. Use it CONTROLLED, as the
|
|
843
|
-
* component always is: the shown label is `value`'s.
|
|
844
|
-
*/
|
|
845
|
-
disabledReason?: ReactNode;
|
|
846
|
-
/**
|
|
847
|
-
* This picker COMMITS — choosing saves. Under a locked {@link WriteLockProvider} it is
|
|
848
|
-
* locked the `disabledReason` way with the lock's reason (which wins over its own).
|
|
849
|
-
* A picker inside a form with its own Save stays editable under the lock — leave this
|
|
850
|
-
* off there and put `commit` on the Save. No provider, or an unlocked one: no effect.
|
|
851
|
-
*/
|
|
852
|
-
commit?: CommitScope;
|
|
853
|
-
/**
|
|
854
|
-
* A last row that makes a new record from what was typed — keksdose G9, whose "Create
|
|
855
|
-
* cash account" had to become a separate button because this picker had no such row.
|
|
856
|
-
*
|
|
857
|
-
* Shown while the typed query is non-empty and names no option exactly
|
|
858
|
-
* (case-insensitive — an exact hit is a record the list already shows), worded
|
|
859
|
-
* `createLabel(query)`, default `combobox.create`: "Create “{query}”". The arrow keys
|
|
860
|
-
* reach it like an option; Enter or a click calls `onCreate(query)` and closes the
|
|
861
|
-
* list. Making the record, and then passing its id as `value`, is the caller's: the
|
|
862
|
-
* field shows the old selection until it does.
|
|
863
|
-
*
|
|
864
|
-
* The same rule as {@link EntityCombobox}'s `onCreate`, so the family agrees. It is a
|
|
865
|
-
* row of the LIST, not an option: it is never `aria-selected`, never matched by a
|
|
866
|
-
* typed label on blur, and never sorted among the records the way a sentinel option
|
|
867
|
-
* would be (the reason keksdose gave for the separate button).
|
|
868
|
-
*/
|
|
869
|
-
onCreate?: (query: string) => void;
|
|
870
|
-
/** The create row's words for a query. Default: `combobox.create` from the
|
|
871
|
-
* {@link UiKitProvider}, else English `Create “{query}”`. */
|
|
872
|
-
createLabel?: (query: string) => string;
|
|
873
|
-
/**
|
|
874
|
-
* Offer the create row with NOTHING typed too, worded as this — keksdose's "Create cash
|
|
875
|
-
* account", which mints an account under a default name and so needs no query.
|
|
876
|
-
* `onCreate` then receives `""`, and the caller supplies the name. Left out, the row
|
|
877
|
-
* needs a query.
|
|
878
|
-
*
|
|
879
|
-
* One string rather than a switch: a row with no query has nothing to quote, so the
|
|
880
|
-
* kit cannot word it — "Create “”" says nothing — and naming it is what turns it on.
|
|
881
|
-
* With both, one handler serves both rows:
|
|
882
|
-
*
|
|
883
|
-
* ```tsx
|
|
884
|
-
* onCreate={(name) => createCash(name || t("cash_account_default_name"))}
|
|
885
|
-
* createEmptyLabel={t("create_cash_account")}
|
|
886
|
-
* ```
|
|
887
|
-
*/
|
|
888
|
-
createEmptyLabel?: string;
|
|
889
|
-
/**
|
|
890
|
-
* The create row WRITES while picking does not — keksdose dev#496: on the read-only
|
|
891
|
-
* demo choosing the cash account is draft state and stays live, minting one is a
|
|
892
|
-
* write. Under a locked {@link WriteLockProvider} the row stays in the list, dimmed and
|
|
893
|
-
* passed over by the arrows, with the lock's reason as its second line (a hover is the
|
|
894
|
-
* one explanation a phone cannot show), and `onCreate` is not called. Not needed with
|
|
895
|
-
* `commit`: a locked field opens no list at all.
|
|
896
|
-
*/
|
|
897
|
-
createCommit?: CommitScope;
|
|
898
|
-
/**
|
|
899
|
-
* The `<input>` — the focusable control, the one a reader types in — as a React 19
|
|
900
|
-
* ref prop (0.24, kastlan). Its account picker is this component inside an
|
|
901
|
-
* `RhfField` render, and react-hook-form's focus-on-error calls `focus()` on whatever
|
|
902
|
-
* `field.ref` is handed: with no ref there was nothing to hand it, so a line-item form
|
|
903
|
-
* whose account was missing failed its submit and left the caret where it was. Pass
|
|
904
|
-
* `field.ref` here, or use `RhfInlineEntityCombobox`, which does. The wrapper is not
|
|
905
|
-
* reachable this way — focus and selection are the input's. See {@link Combobox}'s `ref`.
|
|
906
|
-
*/
|
|
907
|
-
ref?: Ref<HTMLInputElement>;
|
|
908
|
-
}
|
|
909
|
-
|
|
910
|
-
/**
|
|
911
|
-
* The id-keyed sibling of {@link Combobox}: identical anatomy (a real text input
|
|
912
|
-
* with the shared field styling, chevron and inline as-you-type filtering) but
|
|
913
|
-
* the value is an option id, not free text. Built so an entity picker can sit
|
|
914
|
-
* next to a free-text combobox without any visible difference — a button-trigger
|
|
915
|
-
* panel picker ({@link EntityCombobox}) never matches an input field exactly.
|
|
916
|
-
*
|
|
917
|
-
* Text-vs-value reconciliation: the input's text is transient. Picking a row or
|
|
918
|
-
* typing an exact (unique) label commits that option; emptying the text commits
|
|
919
|
-
* a clear; anything else reverts to the selected option's label on blur/Escape.
|
|
920
|
-
*
|
|
921
|
-
* **On a phone the list opens as a full-screen sheet**, exactly like {@link Combobox}
|
|
922
|
-
* beside it (Keksdose live #200, extended by dev#477 — the account picker moved onto
|
|
923
|
-
* this component and must not lose its sheet). The sheet carries its OWN query state
|
|
924
|
-
* rather than reusing `text`: `text` is what {@link reconcile} judges on blur, so a
|
|
925
|
-
* sheet that emptied it to show the full list would read as "the user cleared the
|
|
926
|
-
* field" the moment it closed.
|
|
927
|
-
*/
|
|
928
|
-
export function InlineEntityCombobox<V extends string | number, C extends ComboClearValue = null>(
|
|
929
|
-
props: InlineEntityComboboxProps<V, C>,
|
|
930
|
-
) {
|
|
931
|
-
const {
|
|
932
|
-
value: rawValue,
|
|
933
|
-
onChange,
|
|
934
|
-
clearValue = null as C,
|
|
935
|
-
options,
|
|
936
|
-
label,
|
|
937
|
-
id,
|
|
938
|
-
placeholder,
|
|
939
|
-
className,
|
|
940
|
-
disabled,
|
|
941
|
-
autoFocus,
|
|
942
|
-
searchPlaceholder,
|
|
943
|
-
emptyLabel,
|
|
944
|
-
closeLabel,
|
|
945
|
-
sheetTitle,
|
|
946
|
-
clearable,
|
|
947
|
-
clearLabel,
|
|
948
|
-
disabledReason,
|
|
949
|
-
commit,
|
|
950
|
-
onCreate,
|
|
951
|
-
createLabel,
|
|
952
|
-
createEmptyLabel,
|
|
953
|
-
createCommit,
|
|
954
|
-
invalid,
|
|
955
|
-
error,
|
|
956
|
-
hint,
|
|
957
|
-
ref,
|
|
958
|
-
"aria-label": ariaLabel,
|
|
959
|
-
// Off `rest` and onto the <input>, which is the combobox a reader meets: `Field`'s
|
|
960
|
-
// render-prop spreads `{ id, aria-describedby, aria-invalid, aria-required }`, and
|
|
961
|
-
// on the wrapper div the hint and required state described nothing.
|
|
962
|
-
"aria-describedby": ariaDescribedBy,
|
|
963
|
-
"aria-invalid": ariaInvalid,
|
|
964
|
-
"aria-required": ariaRequired,
|
|
965
|
-
...rest
|
|
966
|
-
} = props;
|
|
967
|
-
// The clear value reads as "nothing selected", whichever one the caller picked —
|
|
968
|
-
// so from here down `value` is the id or `null`, as it always was.
|
|
969
|
-
const value: V | null = rawValue == null || rawValue === clearValue ? null : (rawValue as V);
|
|
970
|
-
const hintParts = useFieldHint(hint, ariaDescribedBy);
|
|
971
|
-
const field = useComboboxFieldError(
|
|
972
|
-
error,
|
|
973
|
-
invalid || ariaInvalid === true || ariaInvalid === "true",
|
|
974
|
-
hintParts.describedBy,
|
|
975
|
-
);
|
|
976
|
-
const generated = useId();
|
|
977
|
-
const fieldId = id ?? generated;
|
|
978
|
-
// See the twin above on why these hang off the generated id.
|
|
979
|
-
const listboxId = `${generated}-listbox`;
|
|
980
|
-
const optionId = (index: number) => `${generated}-option-${index}`;
|
|
981
|
-
const isPhone = usePhoneLayout();
|
|
982
|
-
// See the twin above: the phone sheet owns its own Back entry (live #309).
|
|
983
|
-
const { open, setOpen, wrapperRef, panelRef } = useDropdown({ backCloses: !isPhone });
|
|
984
|
-
const primaryOnly = usePrimaryPressOnly();
|
|
985
|
-
const [active, setActive] = useState(-1);
|
|
986
|
-
// null = not editing → the input shows the selected option's label.
|
|
987
|
-
const [text, setText] = useState<string | null>(null);
|
|
988
|
-
const sheetInputRef = useRef<HTMLInputElement | null>(null);
|
|
989
|
-
// The box the portalled list hangs off — see {@link SuggestionList}.
|
|
990
|
-
const fieldRef = useRef<HTMLDivElement>(null);
|
|
991
|
-
// The sheet's search box. Starts empty on every open, so a field that already
|
|
992
|
-
// holds a value still offers the whole list — the shape a native <select> has
|
|
993
|
-
// on a phone, and what the anchored panel gets from `query` below.
|
|
994
|
-
const [sheetQuery, setSheetQuery] = useState("");
|
|
995
|
-
// Props first, provider second — see `EntityCombobox`. `emptyLabel` used to render
|
|
996
|
-
// nothing when omitted, which left a phone user staring at a blank full-screen
|
|
997
|
-
// sheet; now an omitted one says "No results" in the provider's language.
|
|
998
|
-
const labels = useKitLabels("combobox", DEFAULT_COMBOBOX_LABELS, {
|
|
999
|
-
search: searchPlaceholder,
|
|
1000
|
-
noResults: emptyLabel,
|
|
1001
|
-
clear: clearLabel,
|
|
1002
|
-
create: createLabel,
|
|
1003
|
-
});
|
|
1004
|
-
// The lock (see `lockedKeyDown` above). A lock arriving mid-edit closes the list and
|
|
1005
|
-
// drops the loose text, adjusted while rendering: nothing typed before it may be
|
|
1006
|
-
// judged by `reconcile` after it.
|
|
1007
|
-
const lock = useLockReason(commit, disabledReason);
|
|
1008
|
-
const locked = lock.locked;
|
|
1009
|
-
const inert = locked || Boolean(disabled);
|
|
1010
|
-
if (locked && (open || text !== null)) {
|
|
1011
|
-
setOpen(false);
|
|
1012
|
-
setText(null);
|
|
1013
|
-
}
|
|
1014
|
-
// The create row's own lock (`createCommit`): the list stays live, the row does not.
|
|
1015
|
-
const createReason = useCommitReason(createCommit, undefined);
|
|
1016
|
-
const createLocked = hasMessage(createReason);
|
|
1017
|
-
|
|
1018
|
-
const selected = useMemo(
|
|
1019
|
-
() => (value == null ? null : (options.find((o) => o.value === value) ?? null)),
|
|
1020
|
-
[options, value],
|
|
1021
|
-
);
|
|
1022
|
-
const shown = text ?? selected?.label ?? "";
|
|
1023
|
-
// Nothing selected has nothing to clear, and the chevron comes back — the field
|
|
1024
|
-
// keeps exactly one trailing control, so the "×" never crowds the value it sits on.
|
|
1025
|
-
const showClear = Boolean(clearable && value != null && !inert);
|
|
1026
|
-
|
|
1027
|
-
// Focusing select-alls the current label; filtering only kicks in once the
|
|
1028
|
-
// text actually differs from it, so an already-filled field still opens on
|
|
1029
|
-
// the FULL list instead of a single-row "filter" of its own value.
|
|
1030
|
-
const typedQuery =
|
|
1031
|
-
text !== null && text !== (selected?.label ?? "") ? text.trim().toLowerCase() : "";
|
|
1032
|
-
const query = isPhone ? sheetQuery.trim().toLowerCase() : typedQuery;
|
|
1033
|
-
const matches = useMemo(() => {
|
|
1034
|
-
let ranked = options;
|
|
1035
|
-
if (query) {
|
|
1036
|
-
const hit = (s: string | undefined) => s?.toLowerCase().includes(query) ?? false;
|
|
1037
|
-
const starts = options.filter((o) => o.label.toLowerCase().startsWith(query));
|
|
1038
|
-
const rest = options.filter(
|
|
1039
|
-
(o) =>
|
|
1040
|
-
!o.label.toLowerCase().startsWith(query) &&
|
|
1041
|
-
(hit(o.label) || hit(o.sublabel) || hit(o.group)),
|
|
1042
|
-
);
|
|
1043
|
-
ranked = [...starts, ...rest];
|
|
1044
|
-
}
|
|
1045
|
-
if (!ranked.some((o) => o.group)) return ranked;
|
|
1046
|
-
// Keep each group contiguous so the headings below appear once instead of
|
|
1047
|
-
// re-appearing every time the ranking interleaves two groups — while preserving
|
|
1048
|
-
// "best match first": a Map keeps insertion order, so groups come out ordered by
|
|
1049
|
-
// their best-ranked member and members keep their rank order inside the group.
|
|
1050
|
-
const blocks = new Map<string, ComboOption<V>[]>();
|
|
1051
|
-
for (const o of ranked) {
|
|
1052
|
-
const key = o.group ?? "";
|
|
1053
|
-
if (!blocks.has(key)) blocks.set(key, []);
|
|
1054
|
-
blocks.get(key)!.push(o);
|
|
1055
|
-
}
|
|
1056
|
-
return [...blocks.values()].flat();
|
|
1057
|
-
}, [options, query]);
|
|
1058
|
-
|
|
1059
|
-
// The create row (`onCreate`), on the query as typed — not lowercased: it becomes a
|
|
1060
|
-
// name. Compared against EVERY option, not `matches`: an exact hit anywhere is a
|
|
1061
|
-
// record that exists, disabled or not. Restated from `text` rather than derived from
|
|
1062
|
-
// `typedQuery`: this value is handed to the caller's `onCreate`, and the React
|
|
1063
|
-
// Compiler cannot then keep `matches` memoised on anything it was derived from.
|
|
1064
|
-
const createQuery = isPhone
|
|
1065
|
-
? sheetQuery.trim()
|
|
1066
|
-
: text !== null && text !== (selected?.label ?? "")
|
|
1067
|
-
? text.trim()
|
|
1068
|
-
: "";
|
|
1069
|
-
const showCreate = offersCreate(
|
|
1070
|
-
onCreate,
|
|
1071
|
-
createQuery,
|
|
1072
|
-
options.map((o) => o.label),
|
|
1073
|
-
createEmptyLabel,
|
|
1074
|
-
);
|
|
1075
|
-
const createText = createQuery ? labels.create(createQuery) : createEmptyLabel;
|
|
1076
|
-
// Every row the keyboard can land on: the options, then the create row — passed over
|
|
1077
|
-
// like a disabled option while a write lock holds it.
|
|
1078
|
-
const rows: readonly { disabled?: boolean }[] = showCreate
|
|
1079
|
-
? [...matches, { disabled: createLocked }]
|
|
1080
|
-
: matches;
|
|
1081
|
-
const createIndex = matches.length;
|
|
1082
|
-
|
|
1083
|
-
// Pointer-device only: the phone's rows live in a {@link PickerSheet} whose own
|
|
1084
|
-
// search box holds focus, so the field behind it must not claim to be pointing at
|
|
1085
|
-
// one of them.
|
|
1086
|
-
// A disabled row is never the keyboard's, even if the list changed under it.
|
|
1087
|
-
const activeId = !isPhone && isOptionEnabled(rows[active]) ? optionId(active) : undefined;
|
|
1088
|
-
useActiveOptionScroll(activeId);
|
|
1089
|
-
|
|
1090
|
-
const close = () => {
|
|
1091
|
-
setOpen(false);
|
|
1092
|
-
setActive(-1);
|
|
1093
|
-
setSheetQuery("");
|
|
1094
|
-
};
|
|
1095
|
-
const take = (o: ComboOption<V>) => {
|
|
1096
|
-
// A `disabled` option is listed, never taken — by any path; nor is anything while
|
|
1097
|
-
// the field is locked.
|
|
1098
|
-
if (o.disabled || locked) return;
|
|
1099
|
-
if (o.value !== value) onChange(o.value);
|
|
1100
|
-
setText(null);
|
|
1101
|
-
close();
|
|
1102
|
-
};
|
|
1103
|
-
/** Turn loose text into a decision: empty clears, an exact label match that names
|
|
1104
|
-
* ONE entity commits, anything else reverts to the selected label.
|
|
1105
|
-
*
|
|
1106
|
-
* Unique by VALUE, not by row. An option may deliberately appear twice — Keksdose
|
|
1107
|
-
* repeats recently-used categories in a "Recent" group at the top (live #203) — and
|
|
1108
|
-
* counting rows made every such option uncommittable: two hits, so nothing fired and
|
|
1109
|
-
* the field reverted to whatever was selected before. Typing a category you had just
|
|
1110
|
-
* used, then tabbing away, silently discarded it, and the more categories you used
|
|
1111
|
-
* the more of them stopped working. Two rows naming the same id are not an ambiguity;
|
|
1112
|
-
* two ids sharing a label are. */
|
|
1113
|
-
const create = () => {
|
|
1114
|
-
if (!onCreate || locked || createLocked) return;
|
|
1115
|
-
onCreate(createQuery);
|
|
1116
|
-
setText(null);
|
|
1117
|
-
close();
|
|
1118
|
-
};
|
|
1119
|
-
const reconcile = () => {
|
|
1120
|
-
// Locked, loose text is dropped rather than judged: nothing reaches `onChange`.
|
|
1121
|
-
if (text !== null && !locked) {
|
|
1122
|
-
const q = text.trim();
|
|
1123
|
-
if (!q) {
|
|
1124
|
-
if (value != null) onChange(clearValue);
|
|
1125
|
-
} else {
|
|
1126
|
-
// A disabled option's label typed out in full is not a way round `disabled`:
|
|
1127
|
-
// it is not a hit, so the text reverts like any other non-answer.
|
|
1128
|
-
const hits = options.filter(
|
|
1129
|
-
(o) => !o.disabled && o.label.toLowerCase() === q.toLowerCase(),
|
|
1130
|
-
);
|
|
1131
|
-
const ids = new Set(hits.map((h) => h.value));
|
|
1132
|
-
if (ids.size === 1 && hits[0].value !== value) onChange(hits[0].value);
|
|
1133
|
-
}
|
|
1134
|
-
}
|
|
1135
|
-
setText(null);
|
|
1136
|
-
close();
|
|
1137
|
-
};
|
|
1138
|
-
|
|
1139
|
-
// The create row's inside, one for both shells: a "+" (it is an action, not a record),
|
|
1140
|
-
// the words, and — while a write lock holds it — the lock's reason as a second line.
|
|
1141
|
-
const createRowContent = (
|
|
1142
|
-
<>
|
|
1143
|
-
<Plus aria-hidden className="size-4 shrink-0" />
|
|
1144
|
-
<span className="min-w-0 flex-1">
|
|
1145
|
-
<span className="block truncate">{createText}</span>
|
|
1146
|
-
{createLocked && (
|
|
1147
|
-
<span className="block truncate text-xs font-normal text-[var(--text-placeholder)]">
|
|
1148
|
-
{createReason}
|
|
1149
|
-
</span>
|
|
1150
|
-
)}
|
|
1151
|
-
</span>
|
|
1152
|
-
</>
|
|
1153
|
-
);
|
|
1154
|
-
// While locked the field sits in the reason's Tooltip — see Combobox.
|
|
1155
|
-
const withLock = (box: ReactNode) =>
|
|
1156
|
-
locked ? (
|
|
1157
|
-
<LockedReason lock={lock} className="block">
|
|
1158
|
-
{box}
|
|
1159
|
-
</LockedReason>
|
|
1160
|
-
) : (
|
|
1161
|
-
box
|
|
1162
|
-
);
|
|
1163
|
-
|
|
1164
|
-
return (
|
|
1165
|
-
// `rest` dresses the outer box — a `data-tour` anchor, a test id. Not the NAME,
|
|
1166
|
-
// description, invalid or required state: those belong on the <input> below,
|
|
1167
|
-
// which is the combobox a reader meets. Spread FIRST, so the field's ARIA and the
|
|
1168
|
-
// handlers carrying live #309 and dev#549 cannot be replaced from outside.
|
|
1169
|
-
<div {...rest} ref={wrapperRef} className={cn("relative", className)}>
|
|
1170
|
-
{/* A real <label for> — see {@link Combobox}; with a "?", in a row after the field. */}
|
|
1171
|
-
{label !== undefined && hintParts.labelHint === undefined && (
|
|
1172
|
-
<ComboboxFieldLabel htmlFor={fieldId} className={inert ? "opacity-50" : undefined}>
|
|
1173
|
-
{label}
|
|
1174
|
-
</ComboboxFieldLabel>
|
|
1175
|
-
)}
|
|
1176
|
-
<EndHintRow {...endHintRowProps("hint" in props, label !== undefined, hintParts.labelHint)}>
|
|
1177
|
-
{withLock(
|
|
1178
|
-
/* Inner wrapper for chevron centering — same reasoning as Combobox above.
|
|
1179
|
-
It is also what the portalled list anchors to.
|
|
1180
|
-
Dimmed as a whole when disabled (or locked), the way EntityCombobox dims its
|
|
1181
|
-
trigger. FIELD_BASE's grey alone left a disabled picker looking like a
|
|
1182
|
-
filled-in one beside the pickers that do dim (the label is not the input's
|
|
1183
|
-
`peer`, so it is dimmed by hand above). */
|
|
1184
|
-
<div ref={fieldRef} className={cn("relative", inert && "cursor-not-allowed opacity-50")}>
|
|
1185
|
-
<input
|
|
1186
|
-
ref={ref}
|
|
1187
|
-
id={fieldId}
|
|
1188
|
-
value={shown}
|
|
1189
|
-
placeholder={placeholder}
|
|
1190
|
-
// The caller's name, over the <label for> above. Just the label, never
|
|
1191
|
-
// "label: value" the way a trigger button has to compose it: an input
|
|
1192
|
-
// already exposes its value separately.
|
|
1193
|
-
aria-label={ariaLabel}
|
|
1194
|
-
role="combobox"
|
|
1195
|
-
aria-expanded={open}
|
|
1196
|
-
// Required by the role, and the half that was missing: the field said it
|
|
1197
|
-
// was expanded and never said what it had expanded (ESLint's
|
|
1198
|
-
// `role-has-required-aria-props`, the audit's §a11y).
|
|
1199
|
-
aria-controls={listboxId}
|
|
1200
|
-
aria-activedescendant={activeId}
|
|
1201
|
-
aria-autocomplete="list"
|
|
1202
|
-
aria-invalid={field.isInvalid || undefined}
|
|
1203
|
-
aria-describedby={mergeDescribedBy(field.describedBy, locked && lock.reasonId)}
|
|
1204
|
-
aria-required={ariaRequired}
|
|
1205
|
-
autoComplete="off"
|
|
1206
|
-
// Locked: focusable, `readOnly`, `aria-disabled` — see `lockedKeyDown`.
|
|
1207
|
-
disabled={locked ? undefined : disabled}
|
|
1208
|
-
readOnly={locked || undefined}
|
|
1209
|
-
aria-disabled={locked || undefined}
|
|
1210
|
-
// eslint-disable-next-line jsx-a11y/no-autofocus -- a documented prop the caller opts into (off by default); the field never takes focus on its own.
|
|
1211
|
-
autoFocus={autoFocus}
|
|
1212
|
-
// `inputMode="none"` rather than readOnly, for the same reason Combobox
|
|
1213
|
-
// above gives: the sheet carries the keyboard, and a readOnly field would
|
|
1214
|
-
// take FIELD_BASE's settled look on a field that is perfectly editable.
|
|
1215
|
-
inputMode={isPhone ? "none" : undefined}
|
|
1216
|
-
onMouseDown={primaryOnly.onMouseDown}
|
|
1217
|
-
onFocus={(e) => {
|
|
1218
|
-
// See {@link usePrimaryPressOnly}: a back/forward button lands here on
|
|
1219
|
-
// its way to navigating, and neither the list nor the select-all is
|
|
1220
|
-
// anything it asked for (live #309 rework). A locked field takes focus to
|
|
1221
|
-
// say why, and opens nothing.
|
|
1222
|
-
if (primaryOnly.fromAuxButton() || locked) return;
|
|
1223
|
-
setText(shown);
|
|
1224
|
-
e.currentTarget.select();
|
|
1225
|
-
setOpen(true);
|
|
1226
|
-
// The sheet has its own input; the field behind it must not also pull up
|
|
1227
|
-
// the keyboard and scroll the page under the dialog.
|
|
1228
|
-
if (isPhone) sheetInputRef.current?.focus();
|
|
1229
|
-
}}
|
|
1230
|
-
onBlur={() => {
|
|
1231
|
-
// On a phone the blur is the SHEET taking focus, not the user leaving the
|
|
1232
|
-
// field — reconciling there would close the sheet the instant it opened.
|
|
1233
|
-
if (!isPhone) reconcile();
|
|
1234
|
-
}}
|
|
1235
|
-
onChange={(e) => {
|
|
1236
|
-
if (locked) return;
|
|
1237
|
-
setText(e.target.value);
|
|
1238
|
-
setOpen(true);
|
|
1239
|
-
setActive(-1);
|
|
1240
|
-
}}
|
|
1241
|
-
onKeyDown={(e) => {
|
|
1242
|
-
if (locked) return lockedKeyDown(e);
|
|
1243
|
-
// Disabled rows are passed over; Up from "nothing highlighted" lands on
|
|
1244
|
-
// the first takeable row, as it always landed on row 0. The create row is
|
|
1245
|
-
// the last row the arrows reach.
|
|
1246
|
-
if (e.key === "ArrowDown") {
|
|
1247
|
-
e.preventDefault();
|
|
1248
|
-
setOpen(true);
|
|
1249
|
-
setActive((i) => stepEnabled(rows, i, 1));
|
|
1250
|
-
} else if (e.key === "ArrowUp") {
|
|
1251
|
-
e.preventDefault();
|
|
1252
|
-
setActive((i) => (i < 0 ? stepEnabled(rows, -1, 1) : stepEnabled(rows, i, -1)));
|
|
1253
|
-
} else if (e.key === "Enter") {
|
|
1254
|
-
if (open && isOptionEnabled(rows[active])) {
|
|
1255
|
-
e.preventDefault();
|
|
1256
|
-
if (active === createIndex && showCreate) create();
|
|
1257
|
-
else take(matches[active]);
|
|
1258
|
-
} else {
|
|
1259
|
-
reconcile();
|
|
1260
|
-
}
|
|
1261
|
-
} else if (e.key === "Escape") {
|
|
1262
|
-
setText(null);
|
|
1263
|
-
close();
|
|
1264
|
-
} else if (e.key === "Tab") {
|
|
1265
|
-
// Focus is in THIS input and stays there, so the browser's own Tab is
|
|
1266
|
-
// left alone; all that is needed is that the list stop covering what
|
|
1267
|
-
// the user is tabbing to. `reconcile` rather than `close`, because
|
|
1268
|
-
// leaving the field is exactly when loose text has to be judged.
|
|
1269
|
-
reconcile();
|
|
1270
|
-
}
|
|
1271
|
-
// Home/End stay with the caret — see the note in {@link Combobox}: this
|
|
1272
|
-
// field is editable, and its text is what `reconcile` judges.
|
|
1273
|
-
}}
|
|
1274
|
-
className={cn(
|
|
1275
|
-
FIELD_BASE,
|
|
1276
|
-
label !== undefined && FIELD_FLOATING_PAD,
|
|
1277
|
-
"pe-9",
|
|
1278
|
-
field.isInvalid && FIELD_INVALID,
|
|
1279
|
-
)}
|
|
1280
|
-
/>
|
|
1281
|
-
{showClear ? (
|
|
1282
|
-
<button
|
|
1283
|
-
type="button"
|
|
1284
|
-
// Out of the tab order, like the clear on `EntityCombobox`: the keyboard
|
|
1285
|
-
// already clears this field by selecting its text and deleting, and a
|
|
1286
|
-
// second stop between every picker and the next field is a worse trade
|
|
1287
|
-
// than the one gesture it saves.
|
|
1288
|
-
tabIndex={-1}
|
|
1289
|
-
aria-label={labels.clear}
|
|
1290
|
-
// preventDefault, exactly as the chevron does: without it the press
|
|
1291
|
-
// focuses the input, which on a phone opens the sheet over the field the
|
|
1292
|
-
// press was clearing.
|
|
1293
|
-
onMouseDown={(e) => e.preventDefault()}
|
|
1294
|
-
onClick={() => {
|
|
1295
|
-
setText(null);
|
|
1296
|
-
close();
|
|
1297
|
-
if (!locked) onChange(clearValue);
|
|
1298
|
-
}}
|
|
1299
|
-
className={cn(
|
|
1300
|
-
"absolute end-2 top-1/2 -translate-y-1/2 rounded p-0.5 text-[var(--text-placeholder)]",
|
|
1301
|
-
"hover:text-[var(--text-secondary)]",
|
|
1302
|
-
)}
|
|
1303
|
-
>
|
|
1304
|
-
<X aria-hidden className="size-4" />
|
|
1305
|
-
</button>
|
|
1306
|
-
) : (
|
|
1307
|
-
<ChevronDown
|
|
1308
|
-
aria-hidden
|
|
1309
|
-
onMouseDown={(e) => {
|
|
1310
|
-
// Toggle on the chevron without stealing focus from the input — and
|
|
1311
|
-
// not at all on a disabled or locked field, which the input's own
|
|
1312
|
-
// `disabled`/`readOnly` does not stop from here.
|
|
1313
|
-
e.preventDefault();
|
|
1314
|
-
if (!inert) setOpen((o) => !o);
|
|
1315
|
-
}}
|
|
1316
|
-
className={cn(
|
|
1317
|
-
"absolute end-2.5 top-1/2 size-4 -translate-y-1/2 text-[var(--text-placeholder)]",
|
|
1318
|
-
// The box above does the dimming; dimming here too would halve it again.
|
|
1319
|
-
!inert && "cursor-pointer",
|
|
1320
|
-
)}
|
|
1321
|
-
/>
|
|
1322
|
-
)}
|
|
1323
|
-
</div>,
|
|
1324
|
-
)}
|
|
1325
|
-
</EndHintRow>
|
|
1326
|
-
{label !== undefined && hintParts.labelHint !== undefined && (
|
|
1327
|
-
<StaticLabelRow hint={hintParts.labelHint}>
|
|
1328
|
-
<ComboboxFieldLabel htmlFor={fieldId} className={cn(LABEL_IN_ROW, inert && "opacity-50")}>
|
|
1329
|
-
{label}
|
|
1330
|
-
</ComboboxFieldLabel>
|
|
1331
|
-
</StaticLabelRow>
|
|
1332
|
-
)}
|
|
1333
|
-
<FieldCaption parts={hintParts} />
|
|
1334
|
-
{field.errorEl}
|
|
1335
|
-
{isPhone && (
|
|
1336
|
-
<PickerSheet
|
|
1337
|
-
open={open && !inert}
|
|
1338
|
-
// Closing without choosing keeps the value: `text` was never emptied, so
|
|
1339
|
-
// reconcile has nothing to undo — it just puts the label back.
|
|
1340
|
-
onClose={reconcile}
|
|
1341
|
-
title={sheetTitle ?? label}
|
|
1342
|
-
query={sheetQuery}
|
|
1343
|
-
onQueryChange={(v) => {
|
|
1344
|
-
setSheetQuery(v);
|
|
1345
|
-
setActive(-1);
|
|
1346
|
-
}}
|
|
1347
|
-
searchPlaceholder={searchPlaceholder ?? placeholder ?? labels.search}
|
|
1348
|
-
inputRef={sheetInputRef}
|
|
1349
|
-
closeLabel={closeLabel}
|
|
1350
|
-
>
|
|
1351
|
-
<ul id={listboxId} role="listbox">
|
|
1352
|
-
{matches.map((o, i) => (
|
|
1353
|
-
// Keyed by group AND value, like combobox-core.tsx: an option may
|
|
1354
|
-
// deliberately appear twice (see `reconcile`), and a bare value key
|
|
1355
|
-
// would collide.
|
|
1356
|
-
<Fragment key={`${o.group ?? ""}|${String(o.value)}`}>
|
|
1357
|
-
{o.group && o.group !== matches[i - 1]?.group && (
|
|
1358
|
-
<li
|
|
1359
|
-
role="presentation"
|
|
1360
|
-
className="px-4 pb-0.5 pt-3 text-caption font-semibold uppercase tracking-wide text-[var(--text-muted)]"
|
|
1361
|
-
>
|
|
1362
|
-
{o.group}
|
|
1363
|
-
</li>
|
|
1364
|
-
)}
|
|
1365
|
-
<li role="presentation">
|
|
1366
|
-
<button
|
|
1367
|
-
type="button"
|
|
1368
|
-
role="option"
|
|
1369
|
-
aria-selected={o.value === value}
|
|
1370
|
-
aria-disabled={o.disabled || undefined}
|
|
1371
|
-
onClick={() => take(o)}
|
|
1372
|
-
className={cn(
|
|
1373
|
-
SHEET_ROW_CLASS,
|
|
1374
|
-
o.value === value && "font-medium",
|
|
1375
|
-
o.disabled && DISABLED_ROW_CLASS,
|
|
1376
|
-
)}
|
|
1377
|
-
>
|
|
1378
|
-
{o.label}
|
|
1379
|
-
</button>
|
|
1380
|
-
</li>
|
|
1381
|
-
</Fragment>
|
|
1382
|
-
))}
|
|
1383
|
-
{showCreate && (
|
|
1384
|
-
<li role="presentation">
|
|
1385
|
-
<button
|
|
1386
|
-
type="button"
|
|
1387
|
-
role="option"
|
|
1388
|
-
// An action, never chosen — see `onCreate`.
|
|
1389
|
-
aria-selected={false}
|
|
1390
|
-
aria-disabled={createLocked || undefined}
|
|
1391
|
-
onClick={create}
|
|
1392
|
-
className={cn(
|
|
1393
|
-
SHEET_ROW_CLASS,
|
|
1394
|
-
CREATE_ROW_CLASS,
|
|
1395
|
-
createLocked && DISABLED_ROW_CLASS,
|
|
1396
|
-
)}
|
|
1397
|
-
>
|
|
1398
|
-
{createRowContent}
|
|
1399
|
-
</button>
|
|
1400
|
-
</li>
|
|
1401
|
-
)}
|
|
1402
|
-
{/* "Nothing matched" only when there is nothing to do either: with a create
|
|
1403
|
-
row the list is not empty, it is offering to fill itself. */}
|
|
1404
|
-
{matches.length === 0 && !showCreate && (
|
|
1405
|
-
<li className="px-4 py-3 text-sm text-[var(--text-muted)]">{labels.noResults}</li>
|
|
1406
|
-
)}
|
|
1407
|
-
</ul>
|
|
1408
|
-
</PickerSheet>
|
|
1409
|
-
)}
|
|
1410
|
-
{!isPhone && open && !inert && (matches.length > 0 || showCreate) && (
|
|
1411
|
-
<SuggestionList id={listboxId} anchorRef={fieldRef} panelRef={panelRef}>
|
|
1412
|
-
{matches.map((o, i) => (
|
|
1413
|
-
// A group heading is emitted at each group boundary rather than repeating
|
|
1414
|
-
// the group on every row (feedback #136). `matches` is group-contiguous,
|
|
1415
|
-
// so comparing with the previous row is enough. Fragment key sits here;
|
|
1416
|
-
// the heading and the option carry their own list semantics — keyed by
|
|
1417
|
-
// group AND value, because an option may deliberately appear twice (see
|
|
1418
|
-
// `reconcile`).
|
|
1419
|
-
<Fragment key={`${o.group ?? ""}|${String(o.value)}`}>
|
|
1420
|
-
{o.group && o.group !== matches[i - 1]?.group && (
|
|
1421
|
-
<li
|
|
1422
|
-
role="presentation"
|
|
1423
|
-
className="px-3 pb-0.5 pt-2 text-caption font-semibold uppercase tracking-wide text-[var(--text-muted)] first:pt-1"
|
|
1424
|
-
>
|
|
1425
|
-
{o.group}
|
|
1426
|
-
</li>
|
|
1427
|
-
)}
|
|
1428
|
-
<li role="presentation">
|
|
1429
|
-
<button
|
|
1430
|
-
type="button"
|
|
1431
|
-
id={optionId(i)}
|
|
1432
|
-
// See {@link Combobox}: the role rides the button, `aria-selected`
|
|
1433
|
-
// is the CHOSEN row, and the keyboard's row is the field's
|
|
1434
|
-
// `aria-activedescendant`.
|
|
1435
|
-
role="option"
|
|
1436
|
-
aria-selected={o.value === value}
|
|
1437
|
-
aria-disabled={o.disabled || undefined}
|
|
1438
|
-
tabIndex={-1}
|
|
1439
|
-
onMouseDown={(e) => {
|
|
1440
|
-
// mousedown (not click) so the input's blur can't close the
|
|
1441
|
-
// list before the selection registers. Prevented on a disabled
|
|
1442
|
-
// row too, so pressing one leaves the field focused and open.
|
|
1443
|
-
e.preventDefault();
|
|
1444
|
-
take(o);
|
|
1445
|
-
}}
|
|
1446
|
-
onMouseEnter={() => {
|
|
1447
|
-
if (!o.disabled) setActive(i);
|
|
1448
|
-
}}
|
|
1449
|
-
className={cn(
|
|
1450
|
-
rowClass(i === active && !o.disabled),
|
|
1451
|
-
o.disabled && DISABLED_ROW_CLASS,
|
|
1452
|
-
// Indented under its heading, so the hierarchy is readable at a
|
|
1453
|
-
// glance instead of inferred from grey trailing text.
|
|
1454
|
-
o.group && "ps-6",
|
|
1455
|
-
o.value === value && "font-medium",
|
|
1456
|
-
)}
|
|
1457
|
-
>
|
|
1458
|
-
{o.label}
|
|
1459
|
-
{o.sublabel && (
|
|
1460
|
-
<span className="ms-2 text-xs text-[var(--text-placeholder)]">
|
|
1461
|
-
{o.sublabel}
|
|
1462
|
-
</span>
|
|
1463
|
-
)}
|
|
1464
|
-
</button>
|
|
1465
|
-
</li>
|
|
1466
|
-
</Fragment>
|
|
1467
|
-
))}
|
|
1468
|
-
{showCreate && (
|
|
1469
|
-
<li role="presentation">
|
|
1470
|
-
<button
|
|
1471
|
-
type="button"
|
|
1472
|
-
id={optionId(createIndex)}
|
|
1473
|
-
role="option"
|
|
1474
|
-
// An action, never chosen; whether the keyboard is ON it is the field's
|
|
1475
|
-
// `aria-activedescendant`'s to say.
|
|
1476
|
-
aria-selected={false}
|
|
1477
|
-
aria-disabled={createLocked || undefined}
|
|
1478
|
-
tabIndex={-1}
|
|
1479
|
-
onMouseDown={(e) => {
|
|
1480
|
-
// mousedown, like the rows above: the input's blur would otherwise
|
|
1481
|
-
// reconcile and close the list before the click landed.
|
|
1482
|
-
e.preventDefault();
|
|
1483
|
-
create();
|
|
1484
|
-
}}
|
|
1485
|
-
onMouseEnter={() => {
|
|
1486
|
-
if (!createLocked) setActive(createIndex);
|
|
1487
|
-
}}
|
|
1488
|
-
className={cn(
|
|
1489
|
-
rowClass(active === createIndex && !createLocked),
|
|
1490
|
-
CREATE_ROW_CLASS,
|
|
1491
|
-
createLocked && DISABLED_ROW_CLASS,
|
|
1492
|
-
)}
|
|
1493
|
-
>
|
|
1494
|
-
{createRowContent}
|
|
1495
|
-
</button>
|
|
1496
|
-
</li>
|
|
1497
|
-
)}
|
|
1498
|
-
</SuggestionList>
|
|
1499
|
-
)}
|
|
1500
|
-
</div>
|
|
1501
|
-
);
|
|
1502
|
-
}
|