@eifi1/ui-kit 0.33.1 → 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 +444 -282
- 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 -101
- 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 -101
- 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 -101
- 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 -101
- package/dist/admin/plan-change.js +16 -24
- 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 -101
- 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 -101
- 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 -101
- 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 -101
- 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 -101
- 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 -109
- 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 -101
- package/dist/billing/billing-labels.js.map +1 -1
- package/dist/billing/billing-lock.d.ts +10 -110
- package/dist/billing/billing-overview.d.ts +7 -109
- package/dist/billing/billing-standing.d.ts +6 -108
- package/dist/billing/checkout-processing.d.ts +8 -111
- 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 +15 -117
- package/dist/billing/plan-card.d.ts +14 -115
- 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 -109
- 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 -107
- 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 -109
- 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 -108
- package/dist/chart.d.ts +12 -113
- 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 -110
- 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 +33 -28
- 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 -110
- 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 -107
- 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 +187 -121
- 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 -101
- 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 -101
- 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 -101
- 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 +53 -30
- 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 -116
- 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 -101
- 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 -110
- 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 -101
- 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 -101
- 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 -111
- 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 -118
- package/dist/components/legal-page.js +2 -2
- package/dist/components/legal-page.js.map +1 -1
- package/dist/components/legal.d.ts +353 -101
- 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 -111
- 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 +6 -111
- package/dist/components/number-field.js +2 -3
- package/dist/components/number-field.js.map +1 -1
- package/dist/components/number-input.d.ts +30 -111
- package/dist/components/number-input.js +34 -66
- 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 -108
- 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 -101
- 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 +15 -21
- 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 -101
- 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 -214
- 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 -118
- 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 -101
- 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 +5 -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 -119
- 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 -108
- 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 -101
- 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 -101
- 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 -110
- 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 -101
- 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 -101
- 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 -101
- 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 -101
- 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 -101
- 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 -101
- 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 -101
- 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 -109
- 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 -110
- 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 -101
- 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 -101
- package/dist/feedback/feedback-thread.js +27 -34
- 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 -105
- package/dist/hooks/use-anchored-panel.d.ts +77 -15
- package/dist/hooks/use-anchored-panel.js +34 -1
- 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 -110
- 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 +2 -4
- package/dist/hooks/use-focus-trap.js +2 -1
- 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 -105
- package/dist/i18n/defaults.js +82 -82
- package/dist/i18n/defaults.js.map +1 -1
- package/dist/i18n/german.d.ts +2 -105
- package/dist/i18n/german.js +52 -8
- package/dist/i18n/german.js.map +1 -1
- package/dist/i18n/kit-labels.d.ts +609 -101
- package/dist/i18n/kit-labels.js +22 -97
- package/dist/i18n/kit-labels.js.map +1 -1
- package/dist/i18n/languages.d.ts +197 -101
- package/dist/i18n/locales/de-CH.d.ts +3 -106
- package/dist/i18n/locales/en.d.ts +4 -105
- 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 -106
- package/dist/i18n/locales/es.js +52 -8
- package/dist/i18n/locales/es.js.map +1 -1
- package/dist/i18n/locales/fr.d.ts +3 -106
- package/dist/i18n/locales/fr.js +53 -8
- package/dist/i18n/locales/fr.js.map +1 -1
- package/dist/i18n/locales/hu.d.ts +3 -106
- package/dist/i18n/locales/hu.js +52 -8
- package/dist/i18n/locales/hu.js.map +1 -1
- package/dist/i18n/locales/it.d.ts +3 -106
- package/dist/i18n/locales/it.js +53 -8
- package/dist/i18n/locales/it.js.map +1 -1
- package/dist/i18n/locales/zh.d.ts +3 -106
- package/dist/i18n/locales/zh.js +51 -8
- package/dist/i18n/locales/zh.js.map +1 -1
- package/dist/i18n/plurals.d.ts +3 -5
- package/dist/i18n/review.d.ts +5 -107
- 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 -109
- 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 -121
- 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 -111
- package/dist/landing/public-header.js +1 -1
- package/dist/landing/public-header.js.map +1 -1
- package/dist/landing/routing.d.ts +16 -120
- 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 -189
- 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 -175
- 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 -118
- 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 -107
- 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 -101
- 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 -107
- 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 -116
- 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 -108
- 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 -107
- 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 +58 -34
- 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/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 +79 -78
- 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 +346 -194
- package/src/components/combobox-suggestions.tsx +129 -0
- package/src/components/combobox.tsx +69 -895
- 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 +102 -40
- 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 +27 -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 +31 -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 +7 -5
- package/src/components/number-input.tsx +72 -97
- 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 +34 -37
- 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 +1 -1
- 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 +48 -47
- package/src/feedback/feedback-vocabulary.ts +252 -0
- package/src/hooks/use-anchored-panel.ts +102 -2
- 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 +19 -6
- package/src/i18n/defaults.ts +91 -82
- package/src/i18n/german.ts +50 -6
- package/src/i18n/kit-labels.tsx +70 -119
- package/src/i18n/locales/en.ts +46 -0
- package/src/i18n/locales/es.ts +50 -6
- package/src/i18n/locales/fr.ts +52 -7
- package/src/i18n/locales/hu.ts +50 -6
- package/src/i18n/locales/it.ts +51 -6
- package/src/i18n/locales/zh.ts +49 -6
- package/src/i18n/review.ts +4 -0
- package/src/i18n/shared-labels.ts +135 -0
- package/src/index.ts +412 -404
- 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 +45 -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 -101
- 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-DAgGBrbn.d.ts +0 -8167
- package/src/components/choice-parts.ts +0 -33
- package/src/components/ui.tsx +0 -4233
package/dist/components/ui.js
DELETED
|
@@ -1,1955 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
-
import { createContext, forwardRef, useContext, useId, useLayoutEffect, useRef, useState } from "react";
|
|
4
|
-
import { ChevronDown, Eye, EyeOff, Plus, X } from "lucide-react";
|
|
5
|
-
import { cn } from "../lib/cn.js";
|
|
6
|
-
import { FOCUS_RING, FOCUS_RING_WIDTH } from "./focus-ring.js";
|
|
7
|
-
import { scrollIntoStrip, useStripFade } from "../lib/strip-fade.js";
|
|
8
|
-
import { horizontalStep } from "../lib/direction.js";
|
|
9
|
-
import { usePhoneLayout } from "../hooks/use-breakpoint.js";
|
|
10
|
-
import { useLargeText } from "../hooks/use-large-text.js";
|
|
11
|
-
import { Tooltip } from "./tooltip.js";
|
|
12
|
-
import { DEFAULT_COMMON_LABELS, useKitLabels, useKitLink } from "../i18n/kit-labels.js";
|
|
13
|
-
import { pickLinkRenderer, replacingClick, routerLinkNavigation } from "./text-link.js";
|
|
14
|
-
import { useCommitReason } from "./write-lock.js";
|
|
15
|
-
import { mergeDescribedBy } from "./choice-parts.js";
|
|
16
|
-
import {
|
|
17
|
-
CompactControlsContext,
|
|
18
|
-
DisabledReasonLine,
|
|
19
|
-
EndHintRow,
|
|
20
|
-
FieldCaption,
|
|
21
|
-
LockedReason,
|
|
22
|
-
useDisabledReasonLine,
|
|
23
|
-
useFieldHint,
|
|
24
|
-
useLockReason,
|
|
25
|
-
FLOATING_LABEL_STATIC,
|
|
26
|
-
LABEL_ABOVE_AT_LARGE,
|
|
27
|
-
LABEL_ABOVE_BOX,
|
|
28
|
-
STATIC_LABEL_TYPE
|
|
29
|
-
} from "./field-parts.js";
|
|
30
|
-
import { FieldLabel, FLOATING_LABEL_STATIC as FLOATING_LABEL_STATIC2, FieldHint } from "./field-parts.js";
|
|
31
|
-
import { FOCUS_RING as FOCUS_RING2, FOCUS_RING_WIDTH as FOCUS_RING_WIDTH2 } from "./focus-ring.js";
|
|
32
|
-
const BUTTON_BASE = cn(
|
|
33
|
-
"inline-flex items-center justify-center rounded-md font-medium transition-colors focus:outline-none disabled:opacity-50 disabled:cursor-not-allowed [&_svg]:shrink-0",
|
|
34
|
-
FOCUS_RING_WIDTH
|
|
35
|
-
);
|
|
36
|
-
const TOUCH_TARGET_LARGE = "large:min-h-[48px] large:min-w-[48px]";
|
|
37
|
-
const BUTTON_SIZES = {
|
|
38
|
-
md: "gap-2 px-3 py-2 text-sm",
|
|
39
|
-
sm: "gap-1.5 px-2 py-1 text-xs"
|
|
40
|
-
};
|
|
41
|
-
const BUTTON_SIZES_LARGE = {
|
|
42
|
-
md: "large:min-h-[48px]",
|
|
43
|
-
sm: "large:min-h-[48px] large:py-2.5"
|
|
44
|
-
};
|
|
45
|
-
const HOVER_INK = "hover:bg-[color-mix(in_srgb,var(--text-primary)_7%,transparent)]";
|
|
46
|
-
const buttonVariantClasses = {
|
|
47
|
-
primary: (
|
|
48
|
-
// Hovers onto `--bg-active`, not `--border` (0.33, §12.9): More contrast steps the
|
|
49
|
-
// border until it is a 3:1 LINE, and as a fill under the label that left 2.7:1.
|
|
50
|
-
"border border-[var(--border)] bg-[var(--bg-surface-2)] text-[var(--text-primary)] hover:bg-active focus-visible:ring-[var(--brand)]"
|
|
51
|
-
),
|
|
52
|
-
secondary: `border border-[var(--border)] bg-transparent text-[var(--text-primary)] ${HOVER_INK} focus-visible:ring-[var(--brand)]`,
|
|
53
|
-
ghost: `bg-transparent text-[var(--text-primary)] ${HOVER_INK} focus-visible:ring-[var(--brand)]`,
|
|
54
|
-
danger: "bg-[var(--danger)] text-[var(--danger-contrast)] hover:bg-[var(--danger-hover)] focus-visible:ring-[var(--danger-border-strong)]",
|
|
55
|
-
brand: "bg-[var(--brand)] text-[var(--brand-contrast)] hover:bg-[var(--brand-hover)] focus-visible:ring-[var(--brand)]",
|
|
56
|
-
// A text link that is still a `<button>` — keksdose's six hand-rolled
|
|
57
|
-
// `<button className="text-brand underline">` sites ("Resend code", "Show all",
|
|
58
|
-
// "Undo" in a toast…), which act rather than navigate and so must not be anchors.
|
|
59
|
-
// The box padding goes (`p-0`) so it sits in a sentence at the text's own size, but
|
|
60
|
-
// the base's focus ring stays: those copies had `outline-none` and no ring, so
|
|
61
|
-
// a keyboard user tabbing onto them saw nothing at all. `rounded-sm` keeps that
|
|
62
|
-
// ring hugging the word instead of drawing a pill round it.
|
|
63
|
-
link: "rounded-sm p-0 bg-transparent text-[var(--brand)] underline-offset-4 hover:underline focus-visible:ring-[var(--brand)]"
|
|
64
|
-
};
|
|
65
|
-
const BUTTON_TONES = {
|
|
66
|
-
muted: "text-[var(--text-secondary)] hover:text-[var(--text-primary)] disabled:hover:text-[var(--text-secondary)]",
|
|
67
|
-
danger: "text-[var(--text-secondary)] hover:text-[var(--danger)] focus-visible:ring-[var(--danger-border-strong)] disabled:hover:text-[var(--text-secondary)]"
|
|
68
|
-
};
|
|
69
|
-
const TONED_VARIANTS = /* @__PURE__ */ new Set(["link", "ghost"]);
|
|
70
|
-
const BUTTON_BOXED_DANGER = {
|
|
71
|
-
// Not boxed, but its hover is a fill: the danger wash under the danger text, as
|
|
72
|
-
// IconButton's danger tone (0.33). On B′'s translucent ink `--danger` fell to 4.2:1
|
|
73
|
-
// over a light page.
|
|
74
|
-
ghost: "hover:bg-[var(--danger-bg)]",
|
|
75
|
-
secondary: "border-[var(--danger-border)] bg-transparent text-[var(--danger)] hover:bg-[var(--danger-bg)] focus-visible:ring-[var(--danger-border-strong)]",
|
|
76
|
-
primary: "border-[var(--danger-border)] bg-[var(--danger-bg)] text-[var(--danger)] hover:border-[var(--danger)] hover:bg-[var(--danger)] hover:text-[var(--danger-contrast)] focus-visible:ring-[var(--danger-border-strong)] disabled:hover:border-[var(--danger-border)] disabled:hover:bg-[var(--danger-bg)] disabled:hover:text-[var(--danger)]"
|
|
77
|
-
};
|
|
78
|
-
const BUTTON_LINK_PRESSED = "font-medium text-[var(--brand)] hover:text-[var(--brand)] disabled:hover:text-[var(--brand)]";
|
|
79
|
-
function buttonClasses(variant = "primary", classNameOrOptions) {
|
|
80
|
-
const { size = "md", className } = typeof classNameOrOptions === "object" ? classNameOrOptions : { className: classNameOrOptions };
|
|
81
|
-
return cn(
|
|
82
|
-
BUTTON_BASE,
|
|
83
|
-
BUTTON_SIZES[size],
|
|
84
|
-
variant !== "link" && BUTTON_SIZES_LARGE[size],
|
|
85
|
-
buttonVariantClasses[variant],
|
|
86
|
-
className
|
|
87
|
-
);
|
|
88
|
-
}
|
|
89
|
-
function hasContent(node) {
|
|
90
|
-
return node !== void 0 && node !== null && node !== false && node !== "";
|
|
91
|
-
}
|
|
92
|
-
import {
|
|
93
|
-
CompactControls,
|
|
94
|
-
DisabledReasonLine as DisabledReasonLine2,
|
|
95
|
-
DISABLED_REASON_LINE_CLASS,
|
|
96
|
-
useDisabledReasonLine as useDisabledReasonLine2
|
|
97
|
-
} from "./field-parts.js";
|
|
98
|
-
function buttonLook(variant, size, stretch, tone) {
|
|
99
|
-
return cn(
|
|
100
|
-
BUTTON_BASE,
|
|
101
|
-
BUTTON_SIZES[size],
|
|
102
|
-
// §4: `sm` at `md`'s height and the 48 px target at Large — not on a `link`. In the
|
|
103
|
-
// order `buttonClasses` has it, so the two strings stay identical.
|
|
104
|
-
variant !== "link" && BUTTON_SIZES_LARGE[size],
|
|
105
|
-
// In a flex row next to a taller labelled field, `stretch` makes the button
|
|
106
|
-
// fill the field's height so the two line up (self-stretch overrides the row's
|
|
107
|
-
// align-items). No effect outside a flex row / when it's already the tallest.
|
|
108
|
-
stretch && "self-stretch",
|
|
109
|
-
buttonVariantClasses[variant],
|
|
110
|
-
tone !== "default" && TONED_VARIANTS.has(variant) && BUTTON_TONES[tone],
|
|
111
|
-
tone === "danger" && BUTTON_BOXED_DANGER[variant]
|
|
112
|
-
);
|
|
113
|
-
}
|
|
114
|
-
function Button(props) {
|
|
115
|
-
if (props.href !== void 0) return /* @__PURE__ */ jsx(ButtonLink, { ...props });
|
|
116
|
-
return /* @__PURE__ */ jsx(ButtonElement, { ...props });
|
|
117
|
-
}
|
|
118
|
-
function RenderedButtonLink({ render, ...props }) {
|
|
119
|
-
return render(props);
|
|
120
|
-
}
|
|
121
|
-
function ButtonLink({
|
|
122
|
-
href,
|
|
123
|
-
renderLink,
|
|
124
|
-
external,
|
|
125
|
-
replace,
|
|
126
|
-
reloadDocument,
|
|
127
|
-
disabled,
|
|
128
|
-
variant = "primary",
|
|
129
|
-
size = "md",
|
|
130
|
-
stretch,
|
|
131
|
-
tone = "default",
|
|
132
|
-
className,
|
|
133
|
-
children,
|
|
134
|
-
target,
|
|
135
|
-
rel,
|
|
136
|
-
onClick,
|
|
137
|
-
...rest
|
|
138
|
-
}) {
|
|
139
|
-
const kitLink = useKitLink();
|
|
140
|
-
const common = useKitLabels("common", DEFAULT_COMMON_LABELS);
|
|
141
|
-
const Link = reloadDocument ? void 0 : pickLinkRenderer(renderLink, kitLink, href);
|
|
142
|
-
const newTab = !disabled && (external || target === "_blank");
|
|
143
|
-
const cls = cn(
|
|
144
|
-
buttonLook(variant, size, stretch, tone),
|
|
145
|
-
// `relative` holds the sr-only note (see sr-only-containment.test).
|
|
146
|
-
newTab && "relative",
|
|
147
|
-
// BUTTON_BASE's `disabled:` classes never match an `<a>`; no pointer events also
|
|
148
|
-
// keeps the hover fill from lighting up on something that refuses the click.
|
|
149
|
-
disabled && "pointer-events-none cursor-not-allowed opacity-50",
|
|
150
|
-
className
|
|
151
|
-
);
|
|
152
|
-
const body = /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
153
|
-
children,
|
|
154
|
-
newTab && " ",
|
|
155
|
-
newTab && /* @__PURE__ */ jsxs("span", { className: "sr-only", children: [
|
|
156
|
-
"(",
|
|
157
|
-
common.opensInNewTab,
|
|
158
|
-
")"
|
|
159
|
-
] })
|
|
160
|
-
] });
|
|
161
|
-
if (disabled) {
|
|
162
|
-
return /* @__PURE__ */ jsx("a", { ...rest, role: "link", "aria-disabled": "true", className: cls, children: body });
|
|
163
|
-
}
|
|
164
|
-
if (external || !Link) {
|
|
165
|
-
return /* @__PURE__ */ jsx(
|
|
166
|
-
"a",
|
|
167
|
-
{
|
|
168
|
-
...rest,
|
|
169
|
-
href,
|
|
170
|
-
target: external ? "_blank" : target,
|
|
171
|
-
rel: external ? rel ?? "noopener noreferrer" : rel,
|
|
172
|
-
onClick: external ? onClick : replacingClick(onClick, href, replace, target),
|
|
173
|
-
className: cls,
|
|
174
|
-
children: body
|
|
175
|
-
}
|
|
176
|
-
);
|
|
177
|
-
}
|
|
178
|
-
return /* @__PURE__ */ jsx(
|
|
179
|
-
RenderedButtonLink,
|
|
180
|
-
{
|
|
181
|
-
render: Link,
|
|
182
|
-
...rest,
|
|
183
|
-
...routerLinkNavigation(replace),
|
|
184
|
-
href,
|
|
185
|
-
target,
|
|
186
|
-
rel,
|
|
187
|
-
onClick,
|
|
188
|
-
className: cls,
|
|
189
|
-
children: body
|
|
190
|
-
}
|
|
191
|
-
);
|
|
192
|
-
}
|
|
193
|
-
function ButtonElement({
|
|
194
|
-
variant = "primary",
|
|
195
|
-
size = "md",
|
|
196
|
-
stretch,
|
|
197
|
-
tone = "default",
|
|
198
|
-
pressed,
|
|
199
|
-
disabledReason: ownDisabledReason,
|
|
200
|
-
disabledReasonDisplay,
|
|
201
|
-
commit,
|
|
202
|
-
pending,
|
|
203
|
-
className,
|
|
204
|
-
onClick,
|
|
205
|
-
children,
|
|
206
|
-
href: _href,
|
|
207
|
-
renderLink: _renderLink,
|
|
208
|
-
external: _external,
|
|
209
|
-
replace: _replace,
|
|
210
|
-
reloadDocument: _reloadDocument,
|
|
211
|
-
...rest
|
|
212
|
-
}) {
|
|
213
|
-
const reasonId = useId();
|
|
214
|
-
const disabledReason = useCommitReason(commit, ownDisabledReason);
|
|
215
|
-
const locked = hasContent(disabledReason);
|
|
216
|
-
const inert = locked || Boolean(pending);
|
|
217
|
-
const ownDescribedBy = rest["aria-describedby"];
|
|
218
|
-
const button = /* @__PURE__ */ jsx(
|
|
219
|
-
"button",
|
|
220
|
-
{
|
|
221
|
-
...rest,
|
|
222
|
-
disabled: inert ? void 0 : rest.disabled,
|
|
223
|
-
"aria-disabled": inert || rest["aria-disabled"],
|
|
224
|
-
"aria-busy": pending || rest["aria-busy"],
|
|
225
|
-
"aria-describedby": locked ? ownDescribedBy ? `${ownDescribedBy} ${reasonId}` : reasonId : ownDescribedBy,
|
|
226
|
-
"aria-pressed": pressed ?? rest["aria-pressed"],
|
|
227
|
-
onClick: (e) => {
|
|
228
|
-
if (inert) {
|
|
229
|
-
e.preventDefault();
|
|
230
|
-
return;
|
|
231
|
-
}
|
|
232
|
-
onClick?.(e);
|
|
233
|
-
},
|
|
234
|
-
className: cn(
|
|
235
|
-
buttonLook(variant, size, stretch, tone),
|
|
236
|
-
pressed && (variant === "link" ? BUTTON_LINK_PRESSED : ICON_BUTTON_PRESSED),
|
|
237
|
-
// The disabled look for the focusable kind of disabled.
|
|
238
|
-
locked && "cursor-not-allowed opacity-50",
|
|
239
|
-
// No dimming while pending: the spinner IS the state, and at half opacity it
|
|
240
|
-
// would be the faintest thing on the button. `relative` anchors it.
|
|
241
|
-
pending && "relative cursor-progress",
|
|
242
|
-
className
|
|
243
|
-
),
|
|
244
|
-
children: pending ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
245
|
-
/* @__PURE__ */ jsx("span", { className: "inline-flex items-center justify-center gap-[inherit] opacity-0", children }),
|
|
246
|
-
/* @__PURE__ */ jsx(
|
|
247
|
-
Spinner,
|
|
248
|
-
{
|
|
249
|
-
label: null,
|
|
250
|
-
className: "absolute inset-0 m-auto size-4 border-current/30 border-t-current"
|
|
251
|
-
}
|
|
252
|
-
)
|
|
253
|
-
] }) : children
|
|
254
|
-
}
|
|
255
|
-
);
|
|
256
|
-
if (!locked) return button;
|
|
257
|
-
return /* @__PURE__ */ jsx(
|
|
258
|
-
ReasonFrame,
|
|
259
|
-
{
|
|
260
|
-
reason: disabledReason,
|
|
261
|
-
reasonId,
|
|
262
|
-
display: disabledReasonDisplay,
|
|
263
|
-
className: stretch ? "self-stretch" : void 0,
|
|
264
|
-
children: button
|
|
265
|
-
}
|
|
266
|
-
);
|
|
267
|
-
}
|
|
268
|
-
function ReasonFrame({
|
|
269
|
-
reason,
|
|
270
|
-
reasonId,
|
|
271
|
-
display,
|
|
272
|
-
className,
|
|
273
|
-
side,
|
|
274
|
-
portal,
|
|
275
|
-
children
|
|
276
|
-
}) {
|
|
277
|
-
const line = useDisabledReasonLine(display);
|
|
278
|
-
if (line) {
|
|
279
|
-
return /* @__PURE__ */ jsx(DisabledReasonLine, { id: reasonId, reason, className, children });
|
|
280
|
-
}
|
|
281
|
-
return /* @__PURE__ */ jsx(Tooltip, { label: reason, side, portal, className, children: /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
282
|
-
children,
|
|
283
|
-
/* @__PURE__ */ jsx("span", { id: reasonId, hidden: true, children: reason })
|
|
284
|
-
] }) });
|
|
285
|
-
}
|
|
286
|
-
const ICON_BUTTON_BASE = cn(
|
|
287
|
-
"inline-flex items-center justify-center rounded-md transition-colors focus:outline-none disabled:opacity-50 disabled:cursor-not-allowed",
|
|
288
|
-
FOCUS_RING_WIDTH
|
|
289
|
-
);
|
|
290
|
-
const ICON_BUTTON_SIZES = {
|
|
291
|
-
// 64px with a 28px glyph: a camera's shutter (keksdose invoices/camera-capture.tsx:248,
|
|
292
|
-
// `size-16` by hand) — the one control of a full-screen capture view, thumb-sized.
|
|
293
|
-
"2xl": "size-16 [&_svg]:size-7",
|
|
294
|
-
// 48px with a 24px glyph: the one primary action of a phone screen or sheet, a step
|
|
295
|
-
// past the 44px minimum rather than on it.
|
|
296
|
-
xl: "size-12 [&_svg]:size-6",
|
|
297
|
-
// The 44px touch target (WCAG 2.5.5's size) with the same 20px glyph — keksdose's
|
|
298
|
-
// bulk-action bars write `size-11` by hand over an `md` button to get it on phones.
|
|
299
|
-
lg: "size-11 [&_svg]:size-5",
|
|
300
|
-
md: "size-9 [&_svg]:size-5",
|
|
301
|
-
sm: "size-8 [&_svg]:size-5",
|
|
302
|
-
xs: "size-7 rounded [&_svg]:size-4",
|
|
303
|
-
"2xs": "size-6 rounded [&_svg]:size-3.5"
|
|
304
|
-
};
|
|
305
|
-
const ICON_BUTTON_STRETCH_SIZES = {
|
|
306
|
-
"2xl": "w-16 min-h-16 self-stretch [&_svg]:size-7",
|
|
307
|
-
xl: "w-12 min-h-12 self-stretch [&_svg]:size-6",
|
|
308
|
-
lg: "w-11 min-h-11 self-stretch [&_svg]:size-5",
|
|
309
|
-
md: "w-9 min-h-9 self-stretch [&_svg]:size-5",
|
|
310
|
-
sm: "w-8 min-h-8 self-stretch [&_svg]:size-5",
|
|
311
|
-
xs: "w-7 min-h-7 self-stretch rounded [&_svg]:size-4",
|
|
312
|
-
"2xs": "w-6 min-h-6 self-stretch rounded [&_svg]:size-3.5"
|
|
313
|
-
};
|
|
314
|
-
const ICON_BUTTON_TEXT_SIZES = {
|
|
315
|
-
"2xl": "h-16 gap-2 px-4 text-base [&_svg]:size-7",
|
|
316
|
-
xl: "h-12 gap-2 px-3.5 text-sm [&_svg]:size-6",
|
|
317
|
-
lg: "h-11 gap-2 px-3 text-sm [&_svg]:size-5",
|
|
318
|
-
md: "h-9 gap-1.5 px-2.5 text-sm [&_svg]:size-5",
|
|
319
|
-
sm: "h-8 gap-1.5 px-2 text-sm [&_svg]:size-5",
|
|
320
|
-
xs: "h-7 gap-1 rounded px-1.5 text-xs [&_svg]:size-4",
|
|
321
|
-
"2xs": "h-6 gap-1 rounded px-1.5 text-xs [&_svg]:size-3.5"
|
|
322
|
-
};
|
|
323
|
-
const ICON_BUTTON_TEXT_STRETCH_SIZES = {
|
|
324
|
-
"2xl": "min-h-16 self-stretch gap-2 px-4 text-base [&_svg]:size-7",
|
|
325
|
-
xl: "min-h-12 self-stretch gap-2 px-3.5 text-sm [&_svg]:size-6",
|
|
326
|
-
lg: "min-h-11 self-stretch gap-2 px-3 text-sm [&_svg]:size-5",
|
|
327
|
-
md: "min-h-9 self-stretch gap-1.5 px-2.5 text-sm [&_svg]:size-5",
|
|
328
|
-
sm: "min-h-8 self-stretch gap-1.5 px-2 text-sm [&_svg]:size-5",
|
|
329
|
-
xs: "min-h-7 self-stretch gap-1 rounded px-1.5 text-xs [&_svg]:size-4",
|
|
330
|
-
"2xs": "min-h-6 self-stretch gap-1 rounded px-1.5 text-xs [&_svg]:size-3.5"
|
|
331
|
-
};
|
|
332
|
-
const ICON_BUTTON_TOUCH_LARGE = {
|
|
333
|
-
"2xl": "",
|
|
334
|
-
xl: "",
|
|
335
|
-
lg: "",
|
|
336
|
-
md: TOUCH_TARGET_LARGE,
|
|
337
|
-
sm: TOUCH_TARGET_LARGE,
|
|
338
|
-
xs: TOUCH_TARGET_LARGE,
|
|
339
|
-
"2xs": "relative large:after:absolute large:after:inset-[calc((100%-48px)/2)] large:after:content-['']"
|
|
340
|
-
};
|
|
341
|
-
const ICON_BUTTON_TONES = {
|
|
342
|
-
danger: {
|
|
343
|
-
quiet: "text-[var(--text-placeholder)] hover:bg-[var(--danger-bg)] hover:text-[var(--danger)] focus-visible:ring-[var(--danger-border-strong)]",
|
|
344
|
-
toned: "text-[var(--danger)] hover:bg-[var(--danger-bg)] focus-visible:ring-[var(--danger-border-strong)]"
|
|
345
|
-
},
|
|
346
|
-
warning: {
|
|
347
|
-
quiet: "text-[var(--text-placeholder)] hover:bg-[var(--warning-bg)] hover:text-[var(--warning)] focus-visible:ring-warning-strong",
|
|
348
|
-
// The ring is warning's loud line (0.33, k27): `--warning-border`, amber-300, was a
|
|
349
|
-
// focus ring at 1.1:1 on the light surfaces.
|
|
350
|
-
toned: "text-[var(--warning)] hover:bg-[var(--warning-bg)] focus-visible:ring-warning-strong"
|
|
351
|
-
},
|
|
352
|
-
info: {
|
|
353
|
-
quiet: "text-[var(--text-placeholder)] hover:bg-[var(--info-bg)] hover:text-[var(--info)] focus-visible:ring-[var(--info-border)]",
|
|
354
|
-
toned: "text-[var(--info)] hover:bg-[var(--info-bg)] focus-visible:ring-[var(--info-border)]"
|
|
355
|
-
},
|
|
356
|
-
success: {
|
|
357
|
-
quiet: "text-[var(--text-placeholder)] hover:bg-[var(--success-bg)] hover:text-[var(--success)] focus-visible:ring-[var(--success-border)]",
|
|
358
|
-
toned: "text-[var(--success)] hover:bg-[var(--success-bg)] focus-visible:ring-[var(--success-border)]"
|
|
359
|
-
},
|
|
360
|
-
// The hover fill and the ring are MIXED from the one colour, since a custom tone
|
|
361
|
-
// brings no `-bg` / `-border` pair of its own. The fallback is the body colour, so a
|
|
362
|
-
// `custom` tone with no colour set is the default look rather than invisible.
|
|
363
|
-
custom: {
|
|
364
|
-
quiet: "text-[var(--text-placeholder)] hover:bg-[color-mix(in_srgb,var(--icon-button-tone,var(--text-primary))_12%,transparent)] hover:text-[var(--icon-button-tone,var(--text-primary))] focus-visible:ring-[color-mix(in_srgb,var(--icon-button-tone,var(--text-primary))_40%,transparent)]",
|
|
365
|
-
toned: "text-[var(--icon-button-tone,var(--text-primary))] hover:bg-[color-mix(in_srgb,var(--icon-button-tone,var(--text-primary))_12%,transparent)] focus-visible:ring-[color-mix(in_srgb,var(--icon-button-tone,var(--text-primary))_40%,transparent)]"
|
|
366
|
-
}
|
|
367
|
-
};
|
|
368
|
-
const ICON_BUTTON_MUTED = `text-[var(--text-placeholder)] ${HOVER_INK} hover:text-[var(--text-primary)]`;
|
|
369
|
-
const QUIET_BY_DEFAULT = {
|
|
370
|
-
danger: true,
|
|
371
|
-
warning: false,
|
|
372
|
-
info: false,
|
|
373
|
-
success: false,
|
|
374
|
-
custom: false
|
|
375
|
-
};
|
|
376
|
-
function iconButtonToneClass(tone, quiet) {
|
|
377
|
-
if (tone === "default") return "";
|
|
378
|
-
if (tone === "muted") return cn(ICON_BUTTON_MUTED, ICON_BUTTON_QUIET_DISABLED_REST);
|
|
379
|
-
const isQuiet = quiet ?? QUIET_BY_DEFAULT[tone];
|
|
380
|
-
const look = ICON_BUTTON_TONES[tone];
|
|
381
|
-
return isQuiet ? cn(look.quiet, ICON_BUTTON_QUIET_DISABLED_REST) : look.toned;
|
|
382
|
-
}
|
|
383
|
-
const ICON_BUTTON_DISABLED_REST = {
|
|
384
|
-
primary: "disabled:hover:bg-[var(--bg-surface-2)]",
|
|
385
|
-
secondary: "disabled:hover:bg-transparent",
|
|
386
|
-
ghost: "disabled:hover:bg-transparent",
|
|
387
|
-
danger: "disabled:hover:bg-[var(--danger)]",
|
|
388
|
-
brand: "disabled:hover:bg-[var(--brand)]",
|
|
389
|
-
link: "disabled:hover:bg-transparent disabled:hover:no-underline",
|
|
390
|
-
overlay: "disabled:hover:bg-[color-mix(in_srgb,var(--bg-inverse)_60%,transparent)]",
|
|
391
|
-
shutter: "disabled:hover:bg-[var(--media-scrim)]"
|
|
392
|
-
};
|
|
393
|
-
const ICON_BUTTON_QUIET_DISABLED_REST = "disabled:hover:text-[var(--text-placeholder)]";
|
|
394
|
-
const ICON_BUTTON_PRESSED = "bg-[var(--brand-bg)] text-[var(--brand)] hover:bg-[var(--brand-bg-hover)] hover:text-brand-muted disabled:hover:bg-[var(--brand-bg)] disabled:hover:text-[var(--brand)]";
|
|
395
|
-
const ICON_BUTTON_OVERLAY = "rounded-full bg-[color-mix(in_srgb,var(--bg-inverse)_60%,transparent)] text-[var(--text-inverse)] backdrop-blur-sm hover:bg-[color-mix(in_srgb,var(--bg-inverse)_75%,transparent)] focus-visible:ring-[var(--text-inverse)]";
|
|
396
|
-
const ICON_BUTTON_SHUTTER = "rounded-full border-4 border-[var(--media-ink)] bg-[var(--media-scrim)] text-[var(--media-ink)] backdrop-blur-sm hover:bg-[var(--media-scrim-hover)] focus-visible:ring-[var(--media-ink)] focus-visible:ring-offset-2 focus-visible:ring-offset-[var(--media-scrim-hover)]";
|
|
397
|
-
const ICON_BUTTON_GLYPH_SIZES = {
|
|
398
|
-
12: "[&_svg]:size-3",
|
|
399
|
-
14: "[&_svg]:size-3.5",
|
|
400
|
-
16: "[&_svg]:size-4",
|
|
401
|
-
20: "[&_svg]:size-5",
|
|
402
|
-
24: "[&_svg]:size-6",
|
|
403
|
-
28: "[&_svg]:size-7"
|
|
404
|
-
};
|
|
405
|
-
const ICON_BUTTON_SPINNER = {
|
|
406
|
-
"2xl": "size-7",
|
|
407
|
-
xl: "size-6",
|
|
408
|
-
lg: "size-5",
|
|
409
|
-
md: "size-5",
|
|
410
|
-
sm: "size-5",
|
|
411
|
-
xs: "size-4",
|
|
412
|
-
"2xs": "size-3.5"
|
|
413
|
-
};
|
|
414
|
-
const ICON_BUTTON_SPINNER_GLYPH = {
|
|
415
|
-
12: "size-3",
|
|
416
|
-
14: "size-3.5",
|
|
417
|
-
16: "size-4",
|
|
418
|
-
20: "size-5",
|
|
419
|
-
24: "size-6",
|
|
420
|
-
28: "size-7"
|
|
421
|
-
};
|
|
422
|
-
function useIconButtonText(label, labelVisible, variant, tooltip) {
|
|
423
|
-
const large = useLargeText();
|
|
424
|
-
const compact = useContext(CompactControlsContext);
|
|
425
|
-
if (!large || label === void 0 || label === "" || !tooltip) return false;
|
|
426
|
-
const visible = labelVisible ?? (!compact && variant !== "overlay" && variant !== "shutter");
|
|
427
|
-
return visible;
|
|
428
|
-
}
|
|
429
|
-
function IconButtonText({ label }) {
|
|
430
|
-
return /* @__PURE__ */ jsx("span", { "data-slot": "icon-button-label", children: label });
|
|
431
|
-
}
|
|
432
|
-
const ICON_BUTTON_TONE_PAIR = "[--icon-button-tone:var(--icon-button-tone-light)] dark:[--icon-button-tone:var(--icon-button-tone-dark)]";
|
|
433
|
-
function toneColorStyle(toneColor, style) {
|
|
434
|
-
if (toneColor === void 0) return style;
|
|
435
|
-
const vars = typeof toneColor === "string" ? { "--icon-button-tone": toneColor } : { "--icon-button-tone-light": toneColor.light, "--icon-button-tone-dark": toneColor.dark };
|
|
436
|
-
return { ...style, ...vars };
|
|
437
|
-
}
|
|
438
|
-
function iconButtonLook({
|
|
439
|
-
variant,
|
|
440
|
-
size,
|
|
441
|
-
stretch,
|
|
442
|
-
glyphSize,
|
|
443
|
-
shape,
|
|
444
|
-
tone,
|
|
445
|
-
quiet,
|
|
446
|
-
toneColor,
|
|
447
|
-
withText = false
|
|
448
|
-
}) {
|
|
449
|
-
return cn(
|
|
450
|
-
ICON_BUTTON_BASE,
|
|
451
|
-
withText ? cn("font-medium whitespace-nowrap", stretch ? ICON_BUTTON_TEXT_STRETCH_SIZES[size] : ICON_BUTTON_TEXT_SIZES[size]) : stretch ? ICON_BUTTON_STRETCH_SIZES[size] : ICON_BUTTON_SIZES[size],
|
|
452
|
-
// With text the pill is a 48 px target at any size; the square follows its size.
|
|
453
|
-
withText ? TOUCH_TARGET_LARGE : ICON_BUTTON_TOUCH_LARGE[size],
|
|
454
|
-
glyphSize !== void 0 && ICON_BUTTON_GLYPH_SIZES[glyphSize],
|
|
455
|
-
// After the size, so the overlay's `rounded-full` beats the small sizes' `rounded`.
|
|
456
|
-
variant === "overlay" ? ICON_BUTTON_OVERLAY : variant === "shutter" ? ICON_BUTTON_SHUTTER : buttonVariantClasses[variant],
|
|
457
|
-
shape === "round" && "rounded-full",
|
|
458
|
-
ICON_BUTTON_DISABLED_REST[variant],
|
|
459
|
-
iconButtonToneClass(tone, quiet),
|
|
460
|
-
toneColor !== void 0 && typeof toneColor !== "string" && ICON_BUTTON_TONE_PAIR
|
|
461
|
-
);
|
|
462
|
-
}
|
|
463
|
-
function withIconButtonBadge(control, badge, stretch) {
|
|
464
|
-
if (!hasContent(badge)) return control;
|
|
465
|
-
return /* @__PURE__ */ jsxs("span", { className: cn("relative inline-flex shrink-0", stretch && "self-stretch"), children: [
|
|
466
|
-
control,
|
|
467
|
-
/* @__PURE__ */ jsx(
|
|
468
|
-
"span",
|
|
469
|
-
{
|
|
470
|
-
"aria-hidden": true,
|
|
471
|
-
"data-slot": "icon-button-badge",
|
|
472
|
-
className: "pointer-events-none absolute -end-0.5 -bottom-0.5 inline-flex rounded-full bg-[var(--bg-surface)] [&_svg]:size-3",
|
|
473
|
-
children: badge
|
|
474
|
-
}
|
|
475
|
-
)
|
|
476
|
-
] });
|
|
477
|
-
}
|
|
478
|
-
function IconButton(props) {
|
|
479
|
-
if (props.href !== void 0) return /* @__PURE__ */ jsx(IconButtonLink, { ...props });
|
|
480
|
-
return /* @__PURE__ */ jsx(IconButtonElement, { ...props });
|
|
481
|
-
}
|
|
482
|
-
IconButton.displayName = "IconButton";
|
|
483
|
-
function IconButtonLink({
|
|
484
|
-
href,
|
|
485
|
-
renderLink,
|
|
486
|
-
external,
|
|
487
|
-
replace,
|
|
488
|
-
reloadDocument,
|
|
489
|
-
disabled,
|
|
490
|
-
variant = "ghost",
|
|
491
|
-
size = "md",
|
|
492
|
-
tone: toneProp,
|
|
493
|
-
quiet,
|
|
494
|
-
stopPropagation,
|
|
495
|
-
stretch,
|
|
496
|
-
shape = "square",
|
|
497
|
-
toneColor,
|
|
498
|
-
label,
|
|
499
|
-
labelVisible,
|
|
500
|
-
tooltip = true,
|
|
501
|
-
tooltipSide,
|
|
502
|
-
tooltipPortal,
|
|
503
|
-
tooltipLazy = true,
|
|
504
|
-
glyphSize,
|
|
505
|
-
badge,
|
|
506
|
-
className,
|
|
507
|
-
style,
|
|
508
|
-
target,
|
|
509
|
-
rel,
|
|
510
|
-
onClick,
|
|
511
|
-
onKeyDown,
|
|
512
|
-
children: glyph,
|
|
513
|
-
ref,
|
|
514
|
-
...rest
|
|
515
|
-
}) {
|
|
516
|
-
const withText = useIconButtonText(label, labelVisible, variant, tooltip);
|
|
517
|
-
const children = withText ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
518
|
-
glyph,
|
|
519
|
-
/* @__PURE__ */ jsx(IconButtonText, { label })
|
|
520
|
-
] }) : glyph;
|
|
521
|
-
const kitLink = useKitLink();
|
|
522
|
-
const common = useKitLabels("common", DEFAULT_COMMON_LABELS);
|
|
523
|
-
const tone = toneProp ?? (toneColor !== void 0 ? "custom" : "default");
|
|
524
|
-
const Link = reloadDocument ? void 0 : pickLinkRenderer(renderLink, kitLink, href);
|
|
525
|
-
const newTab = !disabled && (external || target === "_blank");
|
|
526
|
-
const name = rest["aria-label"] ?? label;
|
|
527
|
-
const ariaLabel = name !== void 0 && newTab ? `${name} (${common.opensInNewTab})` : name;
|
|
528
|
-
const handleClick = (e) => {
|
|
529
|
-
if (stopPropagation) e.stopPropagation();
|
|
530
|
-
onClick?.(e);
|
|
531
|
-
};
|
|
532
|
-
const handleKeyDown = (e) => {
|
|
533
|
-
if (stopPropagation && e.key === "Enter") e.stopPropagation();
|
|
534
|
-
onKeyDown?.(e);
|
|
535
|
-
};
|
|
536
|
-
const cls = cn(
|
|
537
|
-
iconButtonLook({ variant, size, stretch, glyphSize, shape, tone, quiet, toneColor, withText }),
|
|
538
|
-
// BASE's `disabled:` classes never match an `<a>` — Button's disabled link look.
|
|
539
|
-
disabled && "pointer-events-none cursor-not-allowed opacity-50",
|
|
540
|
-
className
|
|
541
|
-
);
|
|
542
|
-
const look = { style: toneColorStyle(toneColor, style), className: cls };
|
|
543
|
-
let control;
|
|
544
|
-
if (disabled) {
|
|
545
|
-
control = /* @__PURE__ */ jsx("a", { ...rest, ...look, ref, role: "link", "aria-disabled": "true", "aria-label": ariaLabel, children });
|
|
546
|
-
} else if (external || !Link) {
|
|
547
|
-
control = /* @__PURE__ */ jsx(
|
|
548
|
-
"a",
|
|
549
|
-
{
|
|
550
|
-
...rest,
|
|
551
|
-
...look,
|
|
552
|
-
ref,
|
|
553
|
-
href,
|
|
554
|
-
"aria-label": ariaLabel,
|
|
555
|
-
target: external ? "_blank" : target,
|
|
556
|
-
rel: external ? rel ?? "noopener noreferrer" : rel,
|
|
557
|
-
onClick: external ? handleClick : replacingClick(handleClick, href, replace, target),
|
|
558
|
-
onKeyDown: handleKeyDown,
|
|
559
|
-
children
|
|
560
|
-
}
|
|
561
|
-
);
|
|
562
|
-
} else {
|
|
563
|
-
control = /* @__PURE__ */ jsx(
|
|
564
|
-
RenderedButtonLink,
|
|
565
|
-
{
|
|
566
|
-
render: Link,
|
|
567
|
-
...rest,
|
|
568
|
-
...look,
|
|
569
|
-
...routerLinkNavigation(replace),
|
|
570
|
-
ref,
|
|
571
|
-
href,
|
|
572
|
-
"aria-label": ariaLabel,
|
|
573
|
-
target,
|
|
574
|
-
rel,
|
|
575
|
-
onClick: handleClick,
|
|
576
|
-
onKeyDown: handleKeyDown,
|
|
577
|
-
children
|
|
578
|
-
}
|
|
579
|
-
);
|
|
580
|
-
}
|
|
581
|
-
control = withIconButtonBadge(control, badge, stretch);
|
|
582
|
-
if (!tooltip || withText || label === void 0 || label === "") return control;
|
|
583
|
-
return (
|
|
584
|
-
// A fragment, as on the button: the bubble says what `aria-label` already does.
|
|
585
|
-
/* @__PURE__ */ jsx(
|
|
586
|
-
Tooltip,
|
|
587
|
-
{
|
|
588
|
-
label,
|
|
589
|
-
side: tooltipSide,
|
|
590
|
-
portal: tooltipPortal,
|
|
591
|
-
lazy: tooltipLazy,
|
|
592
|
-
className: stretch ? "self-stretch" : void 0,
|
|
593
|
-
children: /* @__PURE__ */ jsx(Fragment, { children: control })
|
|
594
|
-
}
|
|
595
|
-
)
|
|
596
|
-
);
|
|
597
|
-
}
|
|
598
|
-
function IconButtonElement({
|
|
599
|
-
variant = "ghost",
|
|
600
|
-
size = "md",
|
|
601
|
-
tone: toneProp,
|
|
602
|
-
quiet,
|
|
603
|
-
pressed,
|
|
604
|
-
stopPropagation,
|
|
605
|
-
stretch,
|
|
606
|
-
shape = "square",
|
|
607
|
-
toneColor,
|
|
608
|
-
label,
|
|
609
|
-
labelVisible,
|
|
610
|
-
tooltip = true,
|
|
611
|
-
tooltipSide,
|
|
612
|
-
tooltipPortal,
|
|
613
|
-
tooltipLazy = true,
|
|
614
|
-
disabledReason: ownDisabledReason,
|
|
615
|
-
disabledReasonDisplay,
|
|
616
|
-
commit,
|
|
617
|
-
pending,
|
|
618
|
-
glyphSize,
|
|
619
|
-
badge,
|
|
620
|
-
disabledStyle = "dim",
|
|
621
|
-
className,
|
|
622
|
-
style,
|
|
623
|
-
onClick,
|
|
624
|
-
onKeyDown,
|
|
625
|
-
children,
|
|
626
|
-
href: _href,
|
|
627
|
-
renderLink: _renderLink,
|
|
628
|
-
external: _external,
|
|
629
|
-
replace: _replace,
|
|
630
|
-
reloadDocument: _reloadDocument,
|
|
631
|
-
ref,
|
|
632
|
-
...rest
|
|
633
|
-
}) {
|
|
634
|
-
const tone = toneProp ?? (toneColor !== void 0 ? "custom" : "default");
|
|
635
|
-
const keep = disabledStyle === "keep";
|
|
636
|
-
const withText = useIconButtonText(label, labelVisible, variant, tooltip);
|
|
637
|
-
const reasonId = useId();
|
|
638
|
-
const disabledReason = useCommitReason(commit, ownDisabledReason);
|
|
639
|
-
const locked = hasContent(disabledReason);
|
|
640
|
-
const inert = locked || Boolean(pending);
|
|
641
|
-
const ownDescribedBy = rest["aria-describedby"];
|
|
642
|
-
const button = /* @__PURE__ */ jsxs(
|
|
643
|
-
"button",
|
|
644
|
-
{
|
|
645
|
-
ref,
|
|
646
|
-
...rest,
|
|
647
|
-
disabled: inert ? void 0 : rest.disabled,
|
|
648
|
-
"aria-disabled": inert || rest["aria-disabled"],
|
|
649
|
-
"aria-busy": pending || rest["aria-busy"],
|
|
650
|
-
"aria-describedby": locked ? ownDescribedBy ? `${ownDescribedBy} ${reasonId}` : reasonId : ownDescribedBy,
|
|
651
|
-
"aria-label": rest["aria-label"] ?? label,
|
|
652
|
-
"aria-pressed": pressed ?? rest["aria-pressed"],
|
|
653
|
-
style: toneColorStyle(toneColor, style),
|
|
654
|
-
onClick: (e) => {
|
|
655
|
-
if (stopPropagation) e.stopPropagation();
|
|
656
|
-
if (inert) {
|
|
657
|
-
e.preventDefault();
|
|
658
|
-
return;
|
|
659
|
-
}
|
|
660
|
-
onClick?.(e);
|
|
661
|
-
},
|
|
662
|
-
onKeyDown: (e) => {
|
|
663
|
-
if (stopPropagation && (e.key === "Enter" || e.key === " ")) e.stopPropagation();
|
|
664
|
-
onKeyDown?.(e);
|
|
665
|
-
},
|
|
666
|
-
className: cn(
|
|
667
|
-
iconButtonLook({ variant, size, stretch, glyphSize, shape, tone, quiet, toneColor, withText }),
|
|
668
|
-
pressed && ICON_BUTTON_PRESSED,
|
|
669
|
-
// The disabled look for the focusable kind of disabled, as on Button.
|
|
670
|
-
locked && (keep ? "cursor-default" : "cursor-not-allowed opacity-50"),
|
|
671
|
-
keep && "disabled:cursor-default disabled:opacity-100",
|
|
672
|
-
pending && "cursor-progress",
|
|
673
|
-
className
|
|
674
|
-
),
|
|
675
|
-
children: [
|
|
676
|
-
pending ? (
|
|
677
|
-
// Decorative, as on Button: `aria-busy` says it. Sized to the glyph it stands
|
|
678
|
-
// in for, in the glyph's colour, so the swap does not change the button's look.
|
|
679
|
-
/* @__PURE__ */ jsx(
|
|
680
|
-
Spinner,
|
|
681
|
-
{
|
|
682
|
-
label: null,
|
|
683
|
-
className: cn(
|
|
684
|
-
"border-current/30 border-t-current",
|
|
685
|
-
glyphSize !== void 0 ? ICON_BUTTON_SPINNER_GLYPH[glyphSize] : ICON_BUTTON_SPINNER[size]
|
|
686
|
-
)
|
|
687
|
-
}
|
|
688
|
-
)
|
|
689
|
-
) : children,
|
|
690
|
-
withText && /* @__PURE__ */ jsx(IconButtonText, { label })
|
|
691
|
-
]
|
|
692
|
-
}
|
|
693
|
-
);
|
|
694
|
-
const control = withIconButtonBadge(button, badge, stretch);
|
|
695
|
-
if (locked) {
|
|
696
|
-
return (
|
|
697
|
-
// Button's shape: the reason as a line under it, or the bubble with a hidden copy
|
|
698
|
-
// for the description (see ReasonFrame).
|
|
699
|
-
/* @__PURE__ */ jsx(
|
|
700
|
-
ReasonFrame,
|
|
701
|
-
{
|
|
702
|
-
reason: disabledReason,
|
|
703
|
-
reasonId,
|
|
704
|
-
display: disabledReasonDisplay,
|
|
705
|
-
side: tooltipSide,
|
|
706
|
-
portal: tooltipPortal,
|
|
707
|
-
className: stretch ? "self-stretch" : void 0,
|
|
708
|
-
children: control
|
|
709
|
-
}
|
|
710
|
-
)
|
|
711
|
-
);
|
|
712
|
-
}
|
|
713
|
-
if (!tooltip || withText || label === void 0 || label === "") return control;
|
|
714
|
-
return (
|
|
715
|
-
// A fragment, so Tooltip leaves the button's description alone: the bubble says
|
|
716
|
-
// exactly what `aria-label` already does. Lazy by default — see `tooltipLazy`.
|
|
717
|
-
/* @__PURE__ */ jsx(
|
|
718
|
-
Tooltip,
|
|
719
|
-
{
|
|
720
|
-
label,
|
|
721
|
-
side: tooltipSide,
|
|
722
|
-
portal: tooltipPortal,
|
|
723
|
-
lazy: tooltipLazy,
|
|
724
|
-
className: stretch ? "self-stretch" : void 0,
|
|
725
|
-
children: /* @__PURE__ */ jsx(Fragment, { children: control })
|
|
726
|
-
}
|
|
727
|
-
)
|
|
728
|
-
);
|
|
729
|
-
}
|
|
730
|
-
const FIELD_TOUCH_TEXT = "pointer-coarse:text-[length:max(0.875rem,16px)]";
|
|
731
|
-
const FIELD_BASE = "block w-full rounded-md border border-[var(--border)] bg-[var(--bg-surface)] px-3 py-2 text-sm text-[var(--text-primary)] shadow-sm placeholder:text-[var(--text-placeholder)] focus:border-[var(--brand)] focus:ring-[var(--brand)] " + // §10.1: at least 16 px on a touch screen, or iOS zooms the page on focus.
|
|
732
|
-
FIELD_TOUCH_TEXT + " disabled:cursor-default disabled:bg-[var(--bg-surface-2)] disabled:text-[var(--text-muted)] [&[readonly]]:bg-[var(--bg-surface-2)] [&[readonly]]:text-[var(--text-muted)]";
|
|
733
|
-
const FIELD_WRITABLE_LOOK = "[&[readonly]]:bg-[var(--bg-surface)] [&[readonly]]:text-[var(--text-primary)]";
|
|
734
|
-
const FIELD_FLOATING_PAD = "pt-4 pb-1 large:py-2";
|
|
735
|
-
const FIELD_INVALID = "border-[var(--danger-border-strong)] ring-1 ring-[var(--danger-border-strong)] focus:border-[var(--danger)] focus:ring-[var(--danger)]";
|
|
736
|
-
const FLOATING_INPUT_CLASS = cn(FIELD_BASE, FIELD_FLOATING_PAD, "peer placeholder:text-transparent");
|
|
737
|
-
const PHONE_QUERY = "(max-width: 767px)";
|
|
738
|
-
const FIELD_DISPLAY = "block w-full border-x-0 border-t-0 border-b border-[var(--border)] bg-transparent px-0 pt-0 pb-1 text-[var(--text-primary)] shadow-none placeholder:text-[var(--text-placeholder)] focus:border-[var(--brand)] focus:outline-none focus:ring-0 disabled:opacity-60";
|
|
739
|
-
const FIELD_TRIGGER = cn(
|
|
740
|
-
FIELD_BASE,
|
|
741
|
-
"relative flex items-center justify-between gap-2 text-start hover:bg-[var(--bg-hover)]",
|
|
742
|
-
"[&>:first-child]:min-h-[1lh]"
|
|
743
|
-
);
|
|
744
|
-
function FieldChevron({ className, ...rest }) {
|
|
745
|
-
return /* @__PURE__ */ jsx(
|
|
746
|
-
ChevronDown,
|
|
747
|
-
{
|
|
748
|
-
...rest,
|
|
749
|
-
"aria-hidden": true,
|
|
750
|
-
className: cn(
|
|
751
|
-
"pointer-events-none absolute end-2.5 top-1/2 size-4 -translate-y-1/2 text-[var(--text-placeholder)]",
|
|
752
|
-
className
|
|
753
|
-
)
|
|
754
|
-
}
|
|
755
|
-
);
|
|
756
|
-
}
|
|
757
|
-
const LABEL_FLOATED_AT_LARGE = "large:text-caption large:leading-tight large:text-secondary large:transition-none";
|
|
758
|
-
const FLOATING_LABEL_CLASS = cn(
|
|
759
|
-
"pointer-events-none absolute start-3 top-2.5 text-sm text-[var(--text-placeholder)] transition-all",
|
|
760
|
-
"max-w-[calc(100%-1.5rem)] truncate-until-large",
|
|
761
|
-
"peer-focus:top-1 peer-focus:text-caption peer-focus:leading-tight peer-focus:text-[var(--text-secondary)]",
|
|
762
|
-
"peer-[:not(:placeholder-shown)]:top-1 peer-[:not(:placeholder-shown)]:text-caption peer-[:not(:placeholder-shown)]:leading-tight peer-[:not(:placeholder-shown)]:text-[var(--text-secondary)]",
|
|
763
|
-
"peer-disabled:opacity-50",
|
|
764
|
-
LABEL_ABOVE_AT_LARGE,
|
|
765
|
-
"large:block",
|
|
766
|
-
LABEL_FLOATED_AT_LARGE
|
|
767
|
-
);
|
|
768
|
-
const FLOATING_ROW_CLASS = cn(
|
|
769
|
-
"pointer-events-none absolute start-3 top-2.5 flex items-center gap-1 transition-all",
|
|
770
|
-
"max-w-[calc(100%-3rem)] text-sm text-[var(--text-placeholder)]",
|
|
771
|
-
"peer-focus:top-1 peer-focus:text-caption peer-focus:leading-tight peer-focus:text-[var(--text-secondary)]",
|
|
772
|
-
"peer-[:not(:placeholder-shown)]:top-1 peer-[:not(:placeholder-shown)]:text-caption peer-[:not(:placeholder-shown)]:leading-tight peer-[:not(:placeholder-shown)]:text-[var(--text-secondary)]",
|
|
773
|
-
"peer-disabled:opacity-50",
|
|
774
|
-
LABEL_ABOVE_AT_LARGE,
|
|
775
|
-
LABEL_FLOATED_AT_LARGE
|
|
776
|
-
);
|
|
777
|
-
const STATIC_ROW_CLASS = cn("pointer-events-none absolute inset-x-3 top-1 flex items-center gap-1", LABEL_ABOVE_AT_LARGE);
|
|
778
|
-
function FloatingField({
|
|
779
|
-
className,
|
|
780
|
-
htmlFor,
|
|
781
|
-
label,
|
|
782
|
-
staticLabel,
|
|
783
|
-
srOnlyLabel,
|
|
784
|
-
hint,
|
|
785
|
-
children,
|
|
786
|
-
...rest
|
|
787
|
-
}) {
|
|
788
|
-
const withHint = hint !== void 0 && !srOnlyLabel;
|
|
789
|
-
const atEnd = withHint && staticLabel;
|
|
790
|
-
const above = label !== void 0 && !srOnlyLabel;
|
|
791
|
-
const labelEl = label !== void 0 && /* @__PURE__ */ jsx(
|
|
792
|
-
"label",
|
|
793
|
-
{
|
|
794
|
-
htmlFor,
|
|
795
|
-
"data-field-label": above && !withHint ? "" : void 0,
|
|
796
|
-
className: srOnlyLabel ? "sr-only" : atEnd ? cn("pointer-events-none min-w-0 truncate-until-large", STATIC_LABEL_TYPE) : withHint ? "pointer-events-none min-w-0 truncate-until-large" : staticLabel ? FLOATING_LABEL_STATIC : FLOATING_LABEL_CLASS,
|
|
797
|
-
children: label
|
|
798
|
-
}
|
|
799
|
-
);
|
|
800
|
-
return (
|
|
801
|
-
// `relative` is the whole contract of this wrapper — the floating label and every
|
|
802
|
-
// control that hangs off it (a reveal toggle, a chevron) are positioned against
|
|
803
|
-
// this box — so it is merged through `cn` after the spread rather than left where
|
|
804
|
-
// a caller's stray `className` or `style` could unset it. At Large, with a label
|
|
805
|
-
// above, a grid: the label's row over the field's, the field's parts in the latter.
|
|
806
|
-
/* @__PURE__ */ jsxs("div", { ...rest, className: cn("relative", above && LABEL_ABOVE_BOX, className), children: [
|
|
807
|
-
children,
|
|
808
|
-
withHint ? (
|
|
809
|
-
// Static: `inset-x-3` rather than `start-3`, so a long label truncates at
|
|
810
|
-
// the field's own end padding instead of running under the chevron.
|
|
811
|
-
// Animated: the row floats with the label and is only as wide as it needs
|
|
812
|
-
// to be. Either way the hint keeps its width (`shrink-0`) and the label
|
|
813
|
-
// is the one that gives way.
|
|
814
|
-
/* @__PURE__ */ jsxs("div", { "data-field-label": "", className: atEnd ? STATIC_ROW_CLASS : FLOATING_ROW_CLASS, children: [
|
|
815
|
-
labelEl,
|
|
816
|
-
/* @__PURE__ */ jsx("span", { className: "pointer-events-auto flex shrink-0 items-center", children: hint })
|
|
817
|
-
] })
|
|
818
|
-
) : labelEl
|
|
819
|
-
] })
|
|
820
|
-
);
|
|
821
|
-
}
|
|
822
|
-
function Label({ required, size = "md", disabled, className, children, ...rest }) {
|
|
823
|
-
return /* @__PURE__ */ jsxs(
|
|
824
|
-
"label",
|
|
825
|
-
{
|
|
826
|
-
...rest,
|
|
827
|
-
className: cn(
|
|
828
|
-
"inline-flex items-center gap-0.5 font-medium leading-none text-[var(--text-primary)]",
|
|
829
|
-
size === "sm" ? "text-xs" : "text-sm",
|
|
830
|
-
disabled && "cursor-default opacity-50",
|
|
831
|
-
className
|
|
832
|
-
),
|
|
833
|
-
children: [
|
|
834
|
-
children,
|
|
835
|
-
required && /* @__PURE__ */ jsx("span", { "aria-hidden": true, className: "text-[var(--danger)]", children: "*" })
|
|
836
|
-
]
|
|
837
|
-
}
|
|
838
|
-
);
|
|
839
|
-
}
|
|
840
|
-
const FIELD_ERROR_CLASS = "mt-1 text-caption leading-tight text-[var(--danger)]";
|
|
841
|
-
function useFieldError(error, invalid, describedBy, ariaInvalid) {
|
|
842
|
-
const errorId = useId();
|
|
843
|
-
const hasError = error !== void 0 && error !== null && error !== false && error !== "";
|
|
844
|
-
return {
|
|
845
|
-
/** A field carrying a message that says what is wrong with it IS wrong. */
|
|
846
|
-
isInvalid: Boolean(invalid) || hasError || ariaInvalid === true || ariaInvalid === "true",
|
|
847
|
-
describedBy: hasError ? describedBy ? `${describedBy} ${errorId}` : errorId : describedBy,
|
|
848
|
-
errorEl: hasError ? /* @__PURE__ */ jsx("p", { id: errorId, className: FIELD_ERROR_CLASS, children: error }) : null
|
|
849
|
-
};
|
|
850
|
-
}
|
|
851
|
-
function FieldGroup({
|
|
852
|
-
errorEl,
|
|
853
|
-
reserve = false,
|
|
854
|
-
children
|
|
855
|
-
}) {
|
|
856
|
-
if (errorEl === null && !reserve) return /* @__PURE__ */ jsx(Fragment, { children });
|
|
857
|
-
return /* @__PURE__ */ jsxs("div", { children: [
|
|
858
|
-
children,
|
|
859
|
-
errorEl
|
|
860
|
-
] });
|
|
861
|
-
}
|
|
862
|
-
const DEFAULT_PASSWORD_REVEAL_LABELS = {
|
|
863
|
-
show: "Show password",
|
|
864
|
-
hide: "Hide password"
|
|
865
|
-
};
|
|
866
|
-
function resolvePasswordRevealLabels(partial) {
|
|
867
|
-
if (!partial) return DEFAULT_PASSWORD_REVEAL_LABELS;
|
|
868
|
-
return { ...DEFAULT_PASSWORD_REVEAL_LABELS, ...partial };
|
|
869
|
-
}
|
|
870
|
-
const DEFAULT_CHARACTER_COUNT_LABELS = {
|
|
871
|
-
count: (used, max) => `${used} of ${max} characters`,
|
|
872
|
-
remaining: (left) => left === 1 ? "1 character left" : `${left} characters left`,
|
|
873
|
-
limitReached: "Character limit reached"
|
|
874
|
-
};
|
|
875
|
-
function textLength(value) {
|
|
876
|
-
return value === void 0 || value === null ? 0 : String(value).length;
|
|
877
|
-
}
|
|
878
|
-
function useTypedLength(value, defaultValue) {
|
|
879
|
-
const [typed, setTyped] = useState(() => textLength(defaultValue));
|
|
880
|
-
return { used: value !== void 0 ? textLength(value) : typed, track: (text) => setTyped(text.length) };
|
|
881
|
-
}
|
|
882
|
-
function nearLimitAt(max) {
|
|
883
|
-
return Math.min(20, Math.max(1, Math.ceil(max * 0.1)));
|
|
884
|
-
}
|
|
885
|
-
function countZone(used, max) {
|
|
886
|
-
if (used >= max) return "limit";
|
|
887
|
-
return max - used <= nearLimitAt(max) ? "near" : "ok";
|
|
888
|
-
}
|
|
889
|
-
function CharacterCount({
|
|
890
|
-
id,
|
|
891
|
-
used,
|
|
892
|
-
max,
|
|
893
|
-
labels,
|
|
894
|
-
caption
|
|
895
|
-
}) {
|
|
896
|
-
const zone = countZone(used, max);
|
|
897
|
-
const [said, setSaid] = useState({ zone, text: "" });
|
|
898
|
-
if (said.zone !== zone) {
|
|
899
|
-
setSaid({
|
|
900
|
-
zone,
|
|
901
|
-
text: zone === "near" ? labels.remaining(max - used) : zone === "limit" ? labels.limitReached : ""
|
|
902
|
-
});
|
|
903
|
-
}
|
|
904
|
-
return (
|
|
905
|
-
// `relative` holds the sr-only region (see sr-only-containment.test).
|
|
906
|
-
/* @__PURE__ */ jsxs("div", { className: "relative mt-1 flex items-start gap-2", children: [
|
|
907
|
-
/* @__PURE__ */ jsx("div", { className: "min-w-0 flex-1", children: caption }),
|
|
908
|
-
/* @__PURE__ */ jsxs(
|
|
909
|
-
"span",
|
|
910
|
-
{
|
|
911
|
-
"aria-hidden": true,
|
|
912
|
-
className: cn(
|
|
913
|
-
"shrink-0 text-caption leading-tight tabular-nums",
|
|
914
|
-
zone === "limit" ? "text-[var(--danger)]" : zone === "near" ? "text-[var(--warning)]" : "text-[var(--text-muted)]"
|
|
915
|
-
),
|
|
916
|
-
children: [
|
|
917
|
-
used,
|
|
918
|
-
"/",
|
|
919
|
-
max
|
|
920
|
-
]
|
|
921
|
-
}
|
|
922
|
-
),
|
|
923
|
-
/* @__PURE__ */ jsx("span", { id, hidden: true, children: labels.count(used, max) }),
|
|
924
|
-
/* @__PURE__ */ jsx("span", { role: "status", className: "sr-only", children: said.text })
|
|
925
|
-
] })
|
|
926
|
-
);
|
|
927
|
-
}
|
|
928
|
-
function fieldBelow(hint, counter, errorEl) {
|
|
929
|
-
if (counter === null && hint.captionText === void 0 && errorEl === null) return null;
|
|
930
|
-
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
931
|
-
counter ?? /* @__PURE__ */ jsx(FieldCaption, { parts: hint }),
|
|
932
|
-
errorEl
|
|
933
|
-
] });
|
|
934
|
-
}
|
|
935
|
-
const FLOATING_PLACEHOLDER_ON_FOCUS = "focus:placeholder:text-[var(--text-placeholder)]";
|
|
936
|
-
const hasPlaceholderText = (placeholder) => placeholder !== void 0 && placeholder.trim() !== "";
|
|
937
|
-
const PICKER_TYPES = /* @__PURE__ */ new Set(["date", "datetime-local", "month", "time", "week"]);
|
|
938
|
-
function useCharacterCountLabels(prop) {
|
|
939
|
-
return useKitLabels("characterCount", DEFAULT_CHARACTER_COUNT_LABELS, prop);
|
|
940
|
-
}
|
|
941
|
-
const Input = forwardRef(function Input2(props, ref) {
|
|
942
|
-
const {
|
|
943
|
-
className,
|
|
944
|
-
inputClassName,
|
|
945
|
-
label,
|
|
946
|
-
id,
|
|
947
|
-
placeholder,
|
|
948
|
-
type,
|
|
949
|
-
variant = "field",
|
|
950
|
-
invalid,
|
|
951
|
-
error,
|
|
952
|
-
hint,
|
|
953
|
-
showCount,
|
|
954
|
-
countLabels,
|
|
955
|
-
passwordLabels,
|
|
956
|
-
...rest
|
|
957
|
-
} = props;
|
|
958
|
-
const reserve = "error" in props || "hint" in props || "showCount" in props;
|
|
959
|
-
const generated = useId();
|
|
960
|
-
const fieldId = id ?? generated;
|
|
961
|
-
const countId = useId();
|
|
962
|
-
const hintParts = useFieldHint(hint, rest["aria-describedby"]);
|
|
963
|
-
const maxLength = rest.maxLength;
|
|
964
|
-
const counting = Boolean(showCount) && typeof maxLength === "number" && maxLength > 0;
|
|
965
|
-
const length = useTypedLength(rest.value, rest.defaultValue);
|
|
966
|
-
const countText = useCharacterCountLabels(countLabels);
|
|
967
|
-
const { isInvalid, describedBy, errorEl } = useFieldError(
|
|
968
|
-
error,
|
|
969
|
-
invalid,
|
|
970
|
-
// Caller's, caption, count — then the error, appended by the hook.
|
|
971
|
-
mergeDescribedBy(hintParts.describedBy, counting && countId),
|
|
972
|
-
rest["aria-invalid"]
|
|
973
|
-
);
|
|
974
|
-
const counter = counting ? /* @__PURE__ */ jsx(
|
|
975
|
-
CharacterCount,
|
|
976
|
-
{
|
|
977
|
-
id: countId,
|
|
978
|
-
used: length.used,
|
|
979
|
-
max: maxLength,
|
|
980
|
-
labels: countText,
|
|
981
|
-
caption: /* @__PURE__ */ jsx(FieldCaption, { parts: hintParts, className: "mt-0" })
|
|
982
|
-
}
|
|
983
|
-
) : null;
|
|
984
|
-
const below = fieldBelow(hintParts, counter, errorEl);
|
|
985
|
-
const onChange = counting ? (e) => {
|
|
986
|
-
length.track(e.target.value);
|
|
987
|
-
rest.onChange?.(e);
|
|
988
|
-
} : rest.onChange;
|
|
989
|
-
const asDisplay = usePhoneLayout() && variant === "display";
|
|
990
|
-
const isPassword = type === "password";
|
|
991
|
-
const [revealed, setRevealed] = useState(false);
|
|
992
|
-
const effectiveType = isPassword && revealed ? "text" : type;
|
|
993
|
-
const handleClick = PICKER_TYPES.has(type ?? "") ? (e) => {
|
|
994
|
-
rest.onClick?.(e);
|
|
995
|
-
try {
|
|
996
|
-
e.currentTarget.showPicker?.();
|
|
997
|
-
} catch {
|
|
998
|
-
}
|
|
999
|
-
} : rest.onClick;
|
|
1000
|
-
const passwordText = useKitLabels("passwordReveal", DEFAULT_PASSWORD_REVEAL_LABELS, passwordLabels);
|
|
1001
|
-
const revealToggle = isPassword ? /* @__PURE__ */ jsx(
|
|
1002
|
-
"button",
|
|
1003
|
-
{
|
|
1004
|
-
type: "button",
|
|
1005
|
-
onClick: () => setRevealed((v) => !v),
|
|
1006
|
-
disabled: rest.disabled,
|
|
1007
|
-
"aria-label": revealed ? passwordText.hide : passwordText.show,
|
|
1008
|
-
"aria-pressed": revealed,
|
|
1009
|
-
className: cn(
|
|
1010
|
-
"absolute inset-y-0 end-0 flex items-center rounded-e-md px-2.5 text-[var(--text-placeholder)] transition-colors hover:text-[var(--text-secondary)] focus:outline-none disabled:cursor-default disabled:opacity-50",
|
|
1011
|
-
FOCUS_RING
|
|
1012
|
-
),
|
|
1013
|
-
children: revealed ? /* @__PURE__ */ jsx(EyeOff, { className: "size-4" }) : /* @__PURE__ */ jsx(Eye, { className: "size-4" })
|
|
1014
|
-
}
|
|
1015
|
-
) : null;
|
|
1016
|
-
if (label === void 0) {
|
|
1017
|
-
const endHint = hintParts.labelHint;
|
|
1018
|
-
const ownClass = endHint === void 0 ? className : void 0;
|
|
1019
|
-
if (!isPassword) {
|
|
1020
|
-
return /* @__PURE__ */ jsx(FieldGroup, { errorEl: below, reserve, children: /* @__PURE__ */ jsx(EndHintRow, { hint: endHint, className, children: /* @__PURE__ */ jsx(
|
|
1021
|
-
"input",
|
|
1022
|
-
{
|
|
1023
|
-
ref,
|
|
1024
|
-
id,
|
|
1025
|
-
type,
|
|
1026
|
-
placeholder,
|
|
1027
|
-
...rest,
|
|
1028
|
-
"aria-invalid": isInvalid || rest["aria-invalid"] || void 0,
|
|
1029
|
-
"aria-describedby": describedBy,
|
|
1030
|
-
onClick: handleClick,
|
|
1031
|
-
onChange,
|
|
1032
|
-
className: cn(FIELD_BASE, ownClass, inputClassName, isInvalid && FIELD_INVALID)
|
|
1033
|
-
}
|
|
1034
|
-
) }) });
|
|
1035
|
-
}
|
|
1036
|
-
return /* @__PURE__ */ jsx(FieldGroup, { errorEl: below, reserve, children: /* @__PURE__ */ jsx(EndHintRow, { hint: endHint, className, children: /* @__PURE__ */ jsxs("div", { className: cn("relative", ownClass), children: [
|
|
1037
|
-
/* @__PURE__ */ jsx(
|
|
1038
|
-
"input",
|
|
1039
|
-
{
|
|
1040
|
-
ref,
|
|
1041
|
-
id,
|
|
1042
|
-
type: effectiveType,
|
|
1043
|
-
placeholder,
|
|
1044
|
-
...rest,
|
|
1045
|
-
"aria-invalid": isInvalid || rest["aria-invalid"] || void 0,
|
|
1046
|
-
"aria-describedby": describedBy,
|
|
1047
|
-
onChange,
|
|
1048
|
-
className: cn(FIELD_BASE, "pe-9", inputClassName, isInvalid && FIELD_INVALID)
|
|
1049
|
-
}
|
|
1050
|
-
),
|
|
1051
|
-
revealToggle
|
|
1052
|
-
] }) }) });
|
|
1053
|
-
}
|
|
1054
|
-
const ownPlaceholder = hasPlaceholderText(placeholder);
|
|
1055
|
-
return /* @__PURE__ */ jsx(FieldGroup, { errorEl: below, reserve, children: /* @__PURE__ */ jsxs(
|
|
1056
|
-
FloatingField,
|
|
1057
|
-
{
|
|
1058
|
-
className,
|
|
1059
|
-
htmlFor: fieldId,
|
|
1060
|
-
label,
|
|
1061
|
-
srOnlyLabel: asDisplay,
|
|
1062
|
-
hint: hintParts.labelHint,
|
|
1063
|
-
children: [
|
|
1064
|
-
/* @__PURE__ */ jsx(
|
|
1065
|
-
"input",
|
|
1066
|
-
{
|
|
1067
|
-
ref,
|
|
1068
|
-
id: fieldId,
|
|
1069
|
-
type: effectiveType,
|
|
1070
|
-
placeholder: asDisplay ? placeholder ?? (typeof label === "string" ? label : " ") : ownPlaceholder ? placeholder : " ",
|
|
1071
|
-
...rest,
|
|
1072
|
-
"aria-invalid": isInvalid || rest["aria-invalid"] || void 0,
|
|
1073
|
-
"aria-describedby": describedBy,
|
|
1074
|
-
onClick: handleClick,
|
|
1075
|
-
onChange,
|
|
1076
|
-
className: cn(
|
|
1077
|
-
asDisplay ? cn(FIELD_DISPLAY, "text-xl font-semibold leading-snug") : cn(FLOATING_INPUT_CLASS, ownPlaceholder && FLOATING_PLACEHOLDER_ON_FOCUS),
|
|
1078
|
-
isPassword && "pe-9",
|
|
1079
|
-
inputClassName,
|
|
1080
|
-
isInvalid && FIELD_INVALID
|
|
1081
|
-
)
|
|
1082
|
-
}
|
|
1083
|
-
),
|
|
1084
|
-
revealToggle
|
|
1085
|
-
]
|
|
1086
|
-
}
|
|
1087
|
-
) });
|
|
1088
|
-
});
|
|
1089
|
-
Input.displayName = "Input";
|
|
1090
|
-
const SELECT_SM = "h-7 py-0 ps-2 pe-7 text-xs";
|
|
1091
|
-
const LOCKED_SELECT_KEYS = /* @__PURE__ */ new Set(["Tab", "Escape", "Shift"]);
|
|
1092
|
-
const FIELD_LOCKED = "cursor-not-allowed bg-[var(--bg-surface-2)] text-[var(--text-muted)]";
|
|
1093
|
-
const Select = forwardRef(function Select2(props, ref) {
|
|
1094
|
-
const {
|
|
1095
|
-
className,
|
|
1096
|
-
label,
|
|
1097
|
-
id,
|
|
1098
|
-
children,
|
|
1099
|
-
invalid,
|
|
1100
|
-
error,
|
|
1101
|
-
hint,
|
|
1102
|
-
size,
|
|
1103
|
-
selectClassName,
|
|
1104
|
-
disabledReason,
|
|
1105
|
-
commit,
|
|
1106
|
-
onMouseDown,
|
|
1107
|
-
onKeyDown,
|
|
1108
|
-
onChange,
|
|
1109
|
-
...rest
|
|
1110
|
-
} = props;
|
|
1111
|
-
const reserve = "error" in props || "hint" in props || "showCount" in props;
|
|
1112
|
-
const generated = useId();
|
|
1113
|
-
const lock = useLockReason(commit, disabledReason);
|
|
1114
|
-
const locked = lock.locked;
|
|
1115
|
-
const nativeSize = typeof size === "number" ? size : void 0;
|
|
1116
|
-
const listBox = nativeSize !== void 0 && nativeSize > 1 || Boolean(rest.multiple);
|
|
1117
|
-
const small = size === "sm" && label === void 0;
|
|
1118
|
-
const fieldId = id ?? generated;
|
|
1119
|
-
const hintId = useId();
|
|
1120
|
-
const textHint = typeof hint === "string" && hint !== "" || typeof hint === "number";
|
|
1121
|
-
const { isInvalid, describedBy, errorEl } = useFieldError(
|
|
1122
|
-
error,
|
|
1123
|
-
invalid,
|
|
1124
|
-
// The caption goes in BEFORE the error — the standing advice first, the news
|
|
1125
|
-
// second, the order useFieldError keeps for a caller's own description. A lock's
|
|
1126
|
-
// reason sits between the two.
|
|
1127
|
-
mergeDescribedBy(rest["aria-describedby"], textHint && hintId, locked && lock.reasonId),
|
|
1128
|
-
rest["aria-invalid"]
|
|
1129
|
-
);
|
|
1130
|
-
const below = textHint || errorEl !== null ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
1131
|
-
textHint && /* @__PURE__ */ jsx("p", { id: hintId, className: "mt-1 text-caption leading-tight text-[var(--text-muted)]", children: hint }),
|
|
1132
|
-
errorEl
|
|
1133
|
-
] }) : null;
|
|
1134
|
-
const chevron = rest.disabled || listBox || locked ? null : /* @__PURE__ */ jsx(FieldChevron, { className: small ? "end-1.5 size-3.5" : void 0 });
|
|
1135
|
-
const dress = listBox ? "overflow-y-auto [&_option]:py-1" : "appearance-none pe-9";
|
|
1136
|
-
const interaction = locked ? {
|
|
1137
|
-
disabled: void 0,
|
|
1138
|
-
"aria-disabled": true,
|
|
1139
|
-
onMouseDown: (e) => e.preventDefault(),
|
|
1140
|
-
onKeyDown: (e) => {
|
|
1141
|
-
if (!LOCKED_SELECT_KEYS.has(e.key) && !e.ctrlKey && !e.metaKey) e.preventDefault();
|
|
1142
|
-
},
|
|
1143
|
-
onChange: () => {
|
|
1144
|
-
}
|
|
1145
|
-
} : { onMouseDown, onKeyDown, onChange };
|
|
1146
|
-
const boxClass = locked ? void 0 : className;
|
|
1147
|
-
const withReason = (box) => locked ? /* @__PURE__ */ jsx(LockedReason, { lock, className: cn("block", className), children: box }) : box;
|
|
1148
|
-
if (label === void 0) {
|
|
1149
|
-
const select = /* @__PURE__ */ jsx(
|
|
1150
|
-
"select",
|
|
1151
|
-
{
|
|
1152
|
-
ref,
|
|
1153
|
-
id,
|
|
1154
|
-
size: nativeSize,
|
|
1155
|
-
...rest,
|
|
1156
|
-
...interaction,
|
|
1157
|
-
"aria-invalid": isInvalid || rest["aria-invalid"] || void 0,
|
|
1158
|
-
"aria-describedby": describedBy,
|
|
1159
|
-
className: cn(
|
|
1160
|
-
FIELD_BASE,
|
|
1161
|
-
dress,
|
|
1162
|
-
listBox && "py-0",
|
|
1163
|
-
small && SELECT_SM,
|
|
1164
|
-
locked && FIELD_LOCKED,
|
|
1165
|
-
selectClassName,
|
|
1166
|
-
isInvalid && FIELD_INVALID
|
|
1167
|
-
),
|
|
1168
|
-
children
|
|
1169
|
-
}
|
|
1170
|
-
);
|
|
1171
|
-
if (hasContent(hint) && !textHint) {
|
|
1172
|
-
return /* @__PURE__ */ jsx(FieldGroup, { errorEl: below, reserve, children: withReason(
|
|
1173
|
-
/* @__PURE__ */ jsxs("div", { className: cn("flex items-center gap-1.5", boxClass), children: [
|
|
1174
|
-
/* @__PURE__ */ jsxs("div", { className: "relative min-w-0 flex-1", children: [
|
|
1175
|
-
select,
|
|
1176
|
-
chevron
|
|
1177
|
-
] }),
|
|
1178
|
-
/* @__PURE__ */ jsx("span", { className: "flex shrink-0 items-center", children: hint })
|
|
1179
|
-
] })
|
|
1180
|
-
) });
|
|
1181
|
-
}
|
|
1182
|
-
return /* @__PURE__ */ jsx(FieldGroup, { errorEl: below, reserve, children: withReason(
|
|
1183
|
-
/* @__PURE__ */ jsxs("div", { className: cn("relative", boxClass), children: [
|
|
1184
|
-
select,
|
|
1185
|
-
chevron
|
|
1186
|
-
] })
|
|
1187
|
-
) });
|
|
1188
|
-
}
|
|
1189
|
-
return /* @__PURE__ */ jsx(FieldGroup, { errorEl: below, reserve, children: withReason(
|
|
1190
|
-
/* @__PURE__ */ jsxs(
|
|
1191
|
-
FloatingField,
|
|
1192
|
-
{
|
|
1193
|
-
className: boxClass,
|
|
1194
|
-
htmlFor: fieldId,
|
|
1195
|
-
label,
|
|
1196
|
-
staticLabel: true,
|
|
1197
|
-
hint: textHint ? void 0 : hint,
|
|
1198
|
-
children: [
|
|
1199
|
-
/* @__PURE__ */ jsx(
|
|
1200
|
-
"select",
|
|
1201
|
-
{
|
|
1202
|
-
ref,
|
|
1203
|
-
id: fieldId,
|
|
1204
|
-
size: nativeSize,
|
|
1205
|
-
...rest,
|
|
1206
|
-
...interaction,
|
|
1207
|
-
"aria-invalid": isInvalid || rest["aria-invalid"] || void 0,
|
|
1208
|
-
"aria-describedby": describedBy,
|
|
1209
|
-
className: cn(
|
|
1210
|
-
FIELD_BASE,
|
|
1211
|
-
// The floated label takes the top strip of a list box too, so its first
|
|
1212
|
-
// row starts under the label rather than behind it. No bottom padding — see
|
|
1213
|
-
// `dress`.
|
|
1214
|
-
// At Large the label stands above the field (§10.17): no strip.
|
|
1215
|
-
listBox ? "pt-5 pb-0 large:pt-2" : FIELD_FLOATING_PAD,
|
|
1216
|
-
"peer",
|
|
1217
|
-
dress,
|
|
1218
|
-
locked && FIELD_LOCKED,
|
|
1219
|
-
selectClassName,
|
|
1220
|
-
isInvalid && FIELD_INVALID
|
|
1221
|
-
),
|
|
1222
|
-
children
|
|
1223
|
-
}
|
|
1224
|
-
),
|
|
1225
|
-
chevron
|
|
1226
|
-
]
|
|
1227
|
-
}
|
|
1228
|
-
)
|
|
1229
|
-
) });
|
|
1230
|
-
});
|
|
1231
|
-
Select.displayName = "Select";
|
|
1232
|
-
const TEXTAREA_LABEL_EDGE = cn(
|
|
1233
|
-
"after:pointer-events-none after:absolute after:inset-x-0 after:top-full after:h-[var(--label-strip-edge,0px)] after:content-['']",
|
|
1234
|
-
"after:bg-inherit after:[mask-image:linear-gradient(#000_var(--label-strip-edge-solid,0px),transparent)]"
|
|
1235
|
-
);
|
|
1236
|
-
const LABEL_EDGE_SOFT_PX = 3;
|
|
1237
|
-
function labelEdge(scrollTop, lineHeight) {
|
|
1238
|
-
if (!(scrollTop > 0)) return { height: 0, solid: 0 };
|
|
1239
|
-
if (!(lineHeight > 0)) return { height: Math.min(scrollTop, LABEL_EDGE_SOFT_PX), solid: 0 };
|
|
1240
|
-
const gone = scrollTop % lineHeight;
|
|
1241
|
-
const left = gone === 0 ? 0 : lineHeight - gone;
|
|
1242
|
-
if (left > 0 && left <= lineHeight / 2) return { height: left, solid: left };
|
|
1243
|
-
return { height: Math.min(gone, LABEL_EDGE_SOFT_PX), solid: 0 };
|
|
1244
|
-
}
|
|
1245
|
-
const TEXTAREA_LABEL_STRIP = cn(
|
|
1246
|
-
"pointer-events-none absolute inset-x-px top-px hidden h-4 rounded-t-[calc(0.375rem-1px)] bg-[var(--bg-surface)]",
|
|
1247
|
-
// Never at Large (0.33, §10.17): the label stands above the field, so there is no
|
|
1248
|
-
// strip to keep scrolled text out of, and a layer here would hide the first line.
|
|
1249
|
-
"not-large:peer-focus:block not-large:peer-[:not(:placeholder-shown)]:block",
|
|
1250
|
-
"peer-disabled:bg-[var(--bg-surface-2)] peer-[[readonly]]:bg-[var(--bg-surface-2)]",
|
|
1251
|
-
TEXTAREA_LABEL_EDGE
|
|
1252
|
-
);
|
|
1253
|
-
function TextareaLabelStrip() {
|
|
1254
|
-
const ref = useRef(null);
|
|
1255
|
-
useLayoutEffect(() => {
|
|
1256
|
-
const strip = ref.current;
|
|
1257
|
-
const field = strip?.previousElementSibling;
|
|
1258
|
-
if (!strip || !(field instanceof HTMLTextAreaElement)) return;
|
|
1259
|
-
const fit = () => {
|
|
1260
|
-
if (field.offsetWidth === 0) return;
|
|
1261
|
-
const style = getComputedStyle(field);
|
|
1262
|
-
const borderLeft = parseFloat(style.borderLeftWidth) || 0;
|
|
1263
|
-
const borderRight = parseFloat(style.borderRightWidth) || 0;
|
|
1264
|
-
const gutter = field.offsetWidth - field.clientWidth - borderLeft - borderRight;
|
|
1265
|
-
const bar = gutter > 1.5;
|
|
1266
|
-
const onLeft = field.clientLeft - borderLeft > 1.5;
|
|
1267
|
-
const rtl = style.direction === "rtl";
|
|
1268
|
-
const atEnd = onLeft === rtl;
|
|
1269
|
-
const border = (end) => end === rtl ? borderLeft : borderRight;
|
|
1270
|
-
strip.style.insetInlineEnd = bar && atEnd ? `${border(true) + gutter}px` : "";
|
|
1271
|
-
strip.style.insetInlineStart = bar && !atEnd ? `${border(false) + gutter}px` : "";
|
|
1272
|
-
strip.style.borderStartEndRadius = bar && atEnd ? "0" : "";
|
|
1273
|
-
strip.style.borderStartStartRadius = bar && !atEnd ? "0" : "";
|
|
1274
|
-
};
|
|
1275
|
-
const follow = () => {
|
|
1276
|
-
const edge = labelEdge(field.scrollTop, parseFloat(getComputedStyle(field).lineHeight));
|
|
1277
|
-
if (edge.height > 0) {
|
|
1278
|
-
strip.style.setProperty("--label-strip-edge", `${edge.height}px`);
|
|
1279
|
-
strip.style.setProperty("--label-strip-edge-solid", `${edge.solid}px`);
|
|
1280
|
-
} else {
|
|
1281
|
-
strip.style.removeProperty("--label-strip-edge");
|
|
1282
|
-
strip.style.removeProperty("--label-strip-edge-solid");
|
|
1283
|
-
}
|
|
1284
|
-
};
|
|
1285
|
-
fit();
|
|
1286
|
-
follow();
|
|
1287
|
-
field.addEventListener("scroll", follow, { passive: true });
|
|
1288
|
-
if (typeof ResizeObserver === "undefined") return () => field.removeEventListener("scroll", follow);
|
|
1289
|
-
const observer = new ResizeObserver(() => {
|
|
1290
|
-
fit();
|
|
1291
|
-
follow();
|
|
1292
|
-
});
|
|
1293
|
-
observer.observe(field);
|
|
1294
|
-
return () => {
|
|
1295
|
-
field.removeEventListener("scroll", follow);
|
|
1296
|
-
observer.disconnect();
|
|
1297
|
-
};
|
|
1298
|
-
}, []);
|
|
1299
|
-
return /* @__PURE__ */ jsx("span", { ref, "aria-hidden": true, "data-slot": "label-strip", className: TEXTAREA_LABEL_STRIP });
|
|
1300
|
-
}
|
|
1301
|
-
const Textarea = forwardRef(function Textarea2(props, ref) {
|
|
1302
|
-
const { className, label, id, placeholder, invalid, error, hint, showCount, countLabels, ...rest } = props;
|
|
1303
|
-
const reserve = "error" in props || "hint" in props || "showCount" in props;
|
|
1304
|
-
const generated = useId();
|
|
1305
|
-
const fieldId = id ?? generated;
|
|
1306
|
-
const countId = useId();
|
|
1307
|
-
const hintParts = useFieldHint(hint, rest["aria-describedby"]);
|
|
1308
|
-
const maxLength = rest.maxLength;
|
|
1309
|
-
const counting = Boolean(showCount) && typeof maxLength === "number" && maxLength > 0;
|
|
1310
|
-
const length = useTypedLength(rest.value, rest.defaultValue);
|
|
1311
|
-
const countText = useCharacterCountLabels(countLabels);
|
|
1312
|
-
const { isInvalid, describedBy, errorEl } = useFieldError(
|
|
1313
|
-
error,
|
|
1314
|
-
invalid,
|
|
1315
|
-
mergeDescribedBy(hintParts.describedBy, counting && countId),
|
|
1316
|
-
rest["aria-invalid"]
|
|
1317
|
-
);
|
|
1318
|
-
const counter = counting ? /* @__PURE__ */ jsx(
|
|
1319
|
-
CharacterCount,
|
|
1320
|
-
{
|
|
1321
|
-
id: countId,
|
|
1322
|
-
used: length.used,
|
|
1323
|
-
max: maxLength,
|
|
1324
|
-
labels: countText,
|
|
1325
|
-
caption: /* @__PURE__ */ jsx(FieldCaption, { parts: hintParts, className: "mt-0" })
|
|
1326
|
-
}
|
|
1327
|
-
) : null;
|
|
1328
|
-
const below = fieldBelow(hintParts, counter, errorEl);
|
|
1329
|
-
const onChange = counting ? (e) => {
|
|
1330
|
-
length.track(e.target.value);
|
|
1331
|
-
rest.onChange?.(e);
|
|
1332
|
-
} : rest.onChange;
|
|
1333
|
-
if (label === void 0) {
|
|
1334
|
-
const endHint = hintParts.labelHint;
|
|
1335
|
-
return /* @__PURE__ */ jsx(FieldGroup, { errorEl: below, reserve, children: /* @__PURE__ */ jsx(EndHintRow, { hint: endHint, className, children: /* @__PURE__ */ jsx(
|
|
1336
|
-
"textarea",
|
|
1337
|
-
{
|
|
1338
|
-
ref,
|
|
1339
|
-
id,
|
|
1340
|
-
placeholder,
|
|
1341
|
-
...rest,
|
|
1342
|
-
"aria-invalid": isInvalid || rest["aria-invalid"] || void 0,
|
|
1343
|
-
"aria-describedby": describedBy,
|
|
1344
|
-
onChange,
|
|
1345
|
-
className: cn(FIELD_BASE, endHint === void 0 && className, isInvalid && FIELD_INVALID)
|
|
1346
|
-
}
|
|
1347
|
-
) }) });
|
|
1348
|
-
}
|
|
1349
|
-
const ownPlaceholder = hasPlaceholderText(placeholder);
|
|
1350
|
-
return /* @__PURE__ */ jsx(FieldGroup, { errorEl: below, reserve, children: /* @__PURE__ */ jsxs(FloatingField, { className, htmlFor: fieldId, label, hint: hintParts.labelHint, children: [
|
|
1351
|
-
/* @__PURE__ */ jsx(
|
|
1352
|
-
"textarea",
|
|
1353
|
-
{
|
|
1354
|
-
ref,
|
|
1355
|
-
id: fieldId,
|
|
1356
|
-
placeholder: ownPlaceholder ? placeholder : " ",
|
|
1357
|
-
...rest,
|
|
1358
|
-
"aria-invalid": isInvalid || rest["aria-invalid"] || void 0,
|
|
1359
|
-
"aria-describedby": describedBy,
|
|
1360
|
-
onChange,
|
|
1361
|
-
className: cn(
|
|
1362
|
-
FLOATING_INPUT_CLASS,
|
|
1363
|
-
ownPlaceholder && FLOATING_PLACEHOLDER_ON_FOCUS,
|
|
1364
|
-
isInvalid && FIELD_INVALID
|
|
1365
|
-
)
|
|
1366
|
-
}
|
|
1367
|
-
),
|
|
1368
|
-
/* @__PURE__ */ jsx(TextareaLabelStrip, {})
|
|
1369
|
-
] }) });
|
|
1370
|
-
});
|
|
1371
|
-
Textarea.displayName = "Textarea";
|
|
1372
|
-
const CARD_TONES = {
|
|
1373
|
-
warning: {
|
|
1374
|
-
border: "border-[var(--warning-border)]",
|
|
1375
|
-
fill: "bg-[var(--warning-bg)]",
|
|
1376
|
-
title: "[&_[data-slot=card-title]]:text-[var(--warning)]"
|
|
1377
|
-
},
|
|
1378
|
-
danger: {
|
|
1379
|
-
border: "border-[var(--danger-border)]",
|
|
1380
|
-
fill: "bg-[var(--danger-bg)]",
|
|
1381
|
-
title: "[&_[data-slot=card-title]]:text-[var(--danger)]"
|
|
1382
|
-
},
|
|
1383
|
-
info: {
|
|
1384
|
-
border: "border-[var(--info-border)]",
|
|
1385
|
-
fill: "bg-[var(--info-bg)]",
|
|
1386
|
-
title: "[&_[data-slot=card-title]]:text-[var(--info)]"
|
|
1387
|
-
},
|
|
1388
|
-
success: {
|
|
1389
|
-
border: "border-[var(--success-border)]",
|
|
1390
|
-
fill: "bg-[var(--success-bg)]",
|
|
1391
|
-
title: "[&_[data-slot=card-title]]:text-[var(--success)]"
|
|
1392
|
-
}
|
|
1393
|
-
};
|
|
1394
|
-
const CARD_PADDING = {
|
|
1395
|
-
none: "p-0",
|
|
1396
|
-
sm: "p-3",
|
|
1397
|
-
md: "p-4"
|
|
1398
|
-
};
|
|
1399
|
-
const CARD_PADDING_STRONG = {
|
|
1400
|
-
none: "p-0",
|
|
1401
|
-
sm: "p-[calc(0.75rem-1px)]",
|
|
1402
|
-
md: "p-[calc(1rem-1px)]"
|
|
1403
|
-
};
|
|
1404
|
-
const CARD_TONE_WASH = {
|
|
1405
|
-
warning: "bg-[image:linear-gradient(var(--warning-bg),var(--warning-bg))]",
|
|
1406
|
-
danger: "bg-[image:linear-gradient(var(--danger-bg),var(--danger-bg))]",
|
|
1407
|
-
info: "bg-[image:linear-gradient(var(--info-bg),var(--info-bg))]",
|
|
1408
|
-
success: "bg-[image:linear-gradient(var(--success-bg),var(--success-bg))]"
|
|
1409
|
-
};
|
|
1410
|
-
const CARD_TONES_STRONG = {
|
|
1411
|
-
warning: "border-2 border-warning-strong",
|
|
1412
|
-
danger: "border-2 border-[var(--danger-border-strong)]",
|
|
1413
|
-
info: "border-2 border-[var(--info)]",
|
|
1414
|
-
success: "border-2 border-[var(--success)]"
|
|
1415
|
-
};
|
|
1416
|
-
const CardPaddedContext = createContext(false);
|
|
1417
|
-
const CardDensityContext = createContext("comfortable");
|
|
1418
|
-
function Card({
|
|
1419
|
-
className,
|
|
1420
|
-
children,
|
|
1421
|
-
flush,
|
|
1422
|
-
variant = "default",
|
|
1423
|
-
tone,
|
|
1424
|
-
toneStrength = "soft",
|
|
1425
|
-
toneFill = false,
|
|
1426
|
-
density = "comfortable",
|
|
1427
|
-
padding,
|
|
1428
|
-
...rest
|
|
1429
|
-
}) {
|
|
1430
|
-
const toned = tone ? CARD_TONES[tone] : void 0;
|
|
1431
|
-
const bordered = variant !== "inset";
|
|
1432
|
-
const strong = toned !== void 0 && bordered && toneStrength === "strong";
|
|
1433
|
-
const ownPadding = padding ?? (variant === "inset" ? "sm" : variant === "outline" ? "md" : void 0);
|
|
1434
|
-
return /* @__PURE__ */ jsx(
|
|
1435
|
-
"div",
|
|
1436
|
-
{
|
|
1437
|
-
"data-tone": tone,
|
|
1438
|
-
"data-tone-strength": strong ? "strong" : void 0,
|
|
1439
|
-
"data-density": density === "compact" ? "compact" : void 0,
|
|
1440
|
-
...rest,
|
|
1441
|
-
className: cn(
|
|
1442
|
-
variant === "inset" ? "rounded-md bg-[var(--bg-surface-2)] p-3" : variant === "outline" ? (
|
|
1443
|
-
// No shadow and no `flush`: it sits on a surface that already has both.
|
|
1444
|
-
"rounded-lg border border-[var(--border)] bg-[var(--bg-surface)] p-4"
|
|
1445
|
-
) : cn(
|
|
1446
|
-
// Surface + border are theme tokens so the palette switcher (feedback
|
|
1447
|
-
// #307) can re-skin every card; a caller's own bg-*/border-* override
|
|
1448
|
-
// still wins via tailwind-merge.
|
|
1449
|
-
"bg-[var(--bg-surface)]",
|
|
1450
|
-
flush ? "border-y border-[var(--border)] md:rounded-lg md:border md:shadow-sm" : "rounded-lg border border-[var(--border)] shadow-sm"
|
|
1451
|
-
),
|
|
1452
|
-
toned && (bordered ? toned.border : toned.fill),
|
|
1453
|
-
strong && tone && CARD_TONES_STRONG[tone],
|
|
1454
|
-
toneFill && bordered && tone && CARD_TONE_WASH[tone],
|
|
1455
|
-
toned?.title,
|
|
1456
|
-
ownPadding && (strong ? CARD_PADDING_STRONG : CARD_PADDING)[ownPadding],
|
|
1457
|
-
className
|
|
1458
|
-
),
|
|
1459
|
-
children: /* @__PURE__ */ jsx(CardPaddedContext.Provider, { value: ownPadding !== void 0, children: /* @__PURE__ */ jsx(CardDensityContext.Provider, { value: density, children }) })
|
|
1460
|
-
}
|
|
1461
|
-
);
|
|
1462
|
-
}
|
|
1463
|
-
const CARD_STACK_ACTION = "max-sm:grid-cols-1 max-sm:[&>[data-slot=card-action]]:col-start-1 max-sm:[&>[data-slot=card-action]]:row-span-1 max-sm:[&>[data-slot=card-action]]:row-start-auto max-sm:[&>[data-slot=card-action]]:justify-self-start";
|
|
1464
|
-
const CARD_STACK_ACTION_AT_LARGE = "large:max-sm:grid-cols-1 large:max-sm:[&>[data-slot=card-action]]:col-start-1 large:max-sm:[&>[data-slot=card-action]]:row-span-1 large:max-sm:[&>[data-slot=card-action]]:row-start-auto large:max-sm:[&>[data-slot=card-action]]:justify-self-start";
|
|
1465
|
-
function CardHeader({ className, stackAction, ...props }) {
|
|
1466
|
-
const padded = useContext(CardPaddedContext);
|
|
1467
|
-
const compact = useContext(CardDensityContext) === "compact";
|
|
1468
|
-
return /* @__PURE__ */ jsx(
|
|
1469
|
-
"div",
|
|
1470
|
-
{
|
|
1471
|
-
"data-slot": "card-header",
|
|
1472
|
-
className: cn(
|
|
1473
|
-
// Grid (not flex) so CardAction can occupy a top-right column; with no
|
|
1474
|
-
// action it collapses to one column and title/description stack.
|
|
1475
|
-
//
|
|
1476
|
-
// The two-column switch sets a VARIABLE, not `grid-template-columns`. As
|
|
1477
|
-
// `has-data-[slot=card-action]:grid-cols-[1fr_auto]` it was two classes of
|
|
1478
|
-
// specificity (the class plus the attribute inside `:has()`), and a caller's
|
|
1479
|
-
// `max-sm:grid-cols-1` — one class inside a media query — lost to it at every
|
|
1480
|
-
// width, so the action could never be stacked on a phone from outside. Now the
|
|
1481
|
-
// property itself is set by a plain one-class utility that any `grid-cols-*`
|
|
1482
|
-
// variant of the caller's outranks by coming later in the sheet; the `:has()`
|
|
1483
|
-
// rule only picks the value. The base `1fr` resets the variable so a header
|
|
1484
|
-
// never inherits an ancestor header's two columns.
|
|
1485
|
-
"grid auto-rows-min items-start gap-1.5 [--card-header-cols:1fr] has-data-[slot=card-action]:[--card-header-cols:1fr_auto] grid-cols-[var(--card-header-cols,1fr)]",
|
|
1486
|
-
padded ? "px-0 pt-0" : "px-6 pt-6",
|
|
1487
|
-
compact && "gap-0.5",
|
|
1488
|
-
stackAction === true && CARD_STACK_ACTION,
|
|
1489
|
-
stackAction === void 0 && CARD_STACK_ACTION_AT_LARGE,
|
|
1490
|
-
className
|
|
1491
|
-
),
|
|
1492
|
-
...props
|
|
1493
|
-
}
|
|
1494
|
-
);
|
|
1495
|
-
}
|
|
1496
|
-
function CardTitle({ className, as: Tag = "div", ...props }) {
|
|
1497
|
-
const compact = useContext(CardDensityContext) === "compact";
|
|
1498
|
-
return /* @__PURE__ */ jsx(
|
|
1499
|
-
Tag,
|
|
1500
|
-
{
|
|
1501
|
-
"data-slot": "card-title",
|
|
1502
|
-
className: cn(compact ? "text-sm font-medium leading-snug" : "font-semibold leading-none", className),
|
|
1503
|
-
...props
|
|
1504
|
-
}
|
|
1505
|
-
);
|
|
1506
|
-
}
|
|
1507
|
-
function CardDescription({ className, ...props }) {
|
|
1508
|
-
const compact = useContext(CardDensityContext) === "compact";
|
|
1509
|
-
return /* @__PURE__ */ jsx(
|
|
1510
|
-
"div",
|
|
1511
|
-
{
|
|
1512
|
-
"data-slot": "card-description",
|
|
1513
|
-
className: cn(compact ? "text-xs" : "text-sm", "text-[var(--text-muted)]", className),
|
|
1514
|
-
...props
|
|
1515
|
-
}
|
|
1516
|
-
);
|
|
1517
|
-
}
|
|
1518
|
-
function CardAction({ className, ...props }) {
|
|
1519
|
-
return /* @__PURE__ */ jsx(
|
|
1520
|
-
"div",
|
|
1521
|
-
{
|
|
1522
|
-
"data-slot": "card-action",
|
|
1523
|
-
className: cn("col-start-2 row-start-1 row-span-2 self-start justify-self-end", className),
|
|
1524
|
-
...props
|
|
1525
|
-
}
|
|
1526
|
-
);
|
|
1527
|
-
}
|
|
1528
|
-
function CardContent({ className, ...props }) {
|
|
1529
|
-
const padded = useContext(CardPaddedContext);
|
|
1530
|
-
return /* @__PURE__ */ jsx("div", { "data-slot": "card-content", className: cn(!padded && "px-6 last:pb-6", className), ...props });
|
|
1531
|
-
}
|
|
1532
|
-
function CardFooter({ className, ...props }) {
|
|
1533
|
-
const padded = useContext(CardPaddedContext);
|
|
1534
|
-
return /* @__PURE__ */ jsx(
|
|
1535
|
-
"div",
|
|
1536
|
-
{
|
|
1537
|
-
"data-slot": "card-footer",
|
|
1538
|
-
className: cn("flex items-center", !padded && "px-6 pb-6", className),
|
|
1539
|
-
...props
|
|
1540
|
-
}
|
|
1541
|
-
);
|
|
1542
|
-
}
|
|
1543
|
-
function Spinner({ className, label, showLabel, labelPosition = "end", ...rest }) {
|
|
1544
|
-
const common = useKitLabels("common", DEFAULT_COMMON_LABELS, {
|
|
1545
|
-
loading: label ?? void 0
|
|
1546
|
-
});
|
|
1547
|
-
const ring = cn(
|
|
1548
|
-
"relative inline-block h-5 w-5 animate-spin rounded-full border-2 border-[var(--border)] border-t-[var(--text-primary)]",
|
|
1549
|
-
className
|
|
1550
|
-
);
|
|
1551
|
-
if (label === null) return /* @__PURE__ */ jsx("span", { "aria-hidden": true, ...rest, className: ring });
|
|
1552
|
-
if (showLabel) {
|
|
1553
|
-
return /* @__PURE__ */ jsxs(
|
|
1554
|
-
"span",
|
|
1555
|
-
{
|
|
1556
|
-
role: "status",
|
|
1557
|
-
...rest,
|
|
1558
|
-
className: cn(
|
|
1559
|
-
"inline-flex items-center text-sm text-[var(--text-secondary)]",
|
|
1560
|
-
labelPosition === "below" ? "flex-col gap-2 text-center" : "gap-2"
|
|
1561
|
-
),
|
|
1562
|
-
children: [
|
|
1563
|
-
/* @__PURE__ */ jsx("span", { "aria-hidden": true, className: ring }),
|
|
1564
|
-
/* @__PURE__ */ jsx("span", { children: common.loading })
|
|
1565
|
-
]
|
|
1566
|
-
}
|
|
1567
|
-
);
|
|
1568
|
-
}
|
|
1569
|
-
return /* @__PURE__ */ jsx("span", { role: "status", ...rest, className: ring, children: /* @__PURE__ */ jsxs("span", { className: "sr-only", children: [
|
|
1570
|
-
common.loading,
|
|
1571
|
-
" "
|
|
1572
|
-
] }) });
|
|
1573
|
-
}
|
|
1574
|
-
const EMPTY_STATE_TONE = {
|
|
1575
|
-
danger: "text-[var(--danger)]",
|
|
1576
|
-
success: "text-[var(--success)]"
|
|
1577
|
-
};
|
|
1578
|
-
function EmptyState({
|
|
1579
|
-
title,
|
|
1580
|
-
hint,
|
|
1581
|
-
icon,
|
|
1582
|
-
action,
|
|
1583
|
-
headingAs,
|
|
1584
|
-
variant = "box",
|
|
1585
|
-
tone,
|
|
1586
|
-
size = "md",
|
|
1587
|
-
className,
|
|
1588
|
-
...rest
|
|
1589
|
-
}) {
|
|
1590
|
-
const Title = headingAs ?? "div";
|
|
1591
|
-
const toneClass = tone ? EMPTY_STATE_TONE[tone] : void 0;
|
|
1592
|
-
const hasHint = hint != null && hint !== false && hint !== "";
|
|
1593
|
-
if (variant === "inline") {
|
|
1594
|
-
const sm = size === "sm";
|
|
1595
|
-
return /* @__PURE__ */ jsxs(
|
|
1596
|
-
"div",
|
|
1597
|
-
{
|
|
1598
|
-
...rest,
|
|
1599
|
-
className: cn(
|
|
1600
|
-
"flex flex-wrap items-center text-[var(--text-muted)]",
|
|
1601
|
-
sm ? "justify-start gap-x-1.5 gap-y-0.5 py-1 text-start text-xs" : "justify-center gap-x-2 gap-y-1 py-4 text-center text-sm",
|
|
1602
|
-
className
|
|
1603
|
-
),
|
|
1604
|
-
children: [
|
|
1605
|
-
icon != null && /* @__PURE__ */ jsx(
|
|
1606
|
-
"span",
|
|
1607
|
-
{
|
|
1608
|
-
"aria-hidden": true,
|
|
1609
|
-
className: cn("flex text-[var(--text-placeholder)]", sm ? "[&_svg]:size-3.5" : "[&_svg]:size-4", toneClass),
|
|
1610
|
-
children: icon
|
|
1611
|
-
}
|
|
1612
|
-
),
|
|
1613
|
-
/* @__PURE__ */ jsx(Title, { className: cn(sm ? "text-xs" : "text-sm", toneClass), children: title }),
|
|
1614
|
-
hasHint && /* @__PURE__ */ jsx("span", { className: "text-xs", children: hint }),
|
|
1615
|
-
action != null && /* @__PURE__ */ jsx("span", { className: "flex flex-wrap items-center gap-2", children: action })
|
|
1616
|
-
]
|
|
1617
|
-
}
|
|
1618
|
-
);
|
|
1619
|
-
}
|
|
1620
|
-
return /* @__PURE__ */ jsxs(
|
|
1621
|
-
"div",
|
|
1622
|
-
{
|
|
1623
|
-
...rest,
|
|
1624
|
-
className: cn(
|
|
1625
|
-
"flex flex-col items-center justify-center rounded-lg border border-dashed border-[var(--border-strong)] bg-[var(--bg-surface-2)] px-4 py-10 text-center text-sm text-[var(--text-muted)]",
|
|
1626
|
-
className
|
|
1627
|
-
),
|
|
1628
|
-
children: [
|
|
1629
|
-
icon != null && /* @__PURE__ */ jsx("div", { "aria-hidden": true, className: cn("mb-3 text-[var(--text-placeholder)] [&_svg]:size-8", toneClass), children: icon }),
|
|
1630
|
-
/* @__PURE__ */ jsx(Title, { className: cn("text-sm font-medium text-[var(--text-secondary)]", toneClass), children: title }),
|
|
1631
|
-
hasHint && /* @__PURE__ */ jsx("div", { className: "mt-1 text-xs", children: hint }),
|
|
1632
|
-
action != null && /* @__PURE__ */ jsx("div", { className: "mt-4 flex flex-wrap items-center justify-center gap-2", children: action })
|
|
1633
|
-
]
|
|
1634
|
-
}
|
|
1635
|
-
);
|
|
1636
|
-
}
|
|
1637
|
-
const DEFAULT_TABS_LABELS = {
|
|
1638
|
-
add: "Add tab",
|
|
1639
|
-
remove: (tab) => `Remove ${tab}`
|
|
1640
|
-
};
|
|
1641
|
-
const TABLIST_CLASSES = "flex gap-1 overflow-x-auto overflow-y-hidden border-b border-[var(--border)]";
|
|
1642
|
-
const TABLIST_VERTICAL_CLASSES = "flex flex-col gap-0.5";
|
|
1643
|
-
const TAB_VERTICAL_CLASSES = FOCUS_RING_WIDTH + " flex w-full items-center rounded-md px-3 py-2 text-start text-sm font-medium transition-colors focus:outline-none focus-visible:ring-[var(--border-strong)]";
|
|
1644
|
-
const TAB_VERTICAL_ACTIVE_CLASSES = "bg-[var(--bg-active)] text-[var(--text-primary)]";
|
|
1645
|
-
const TAB_VERTICAL_INACTIVE_CLASSES = "text-[var(--text-muted)] hover:bg-[var(--bg-hover)] hover:text-[var(--text-primary)]";
|
|
1646
|
-
const TABLIST_WRAP_CLASSES = "flex flex-wrap gap-1.5 md:flex-nowrap md:gap-1 md:overflow-x-auto md:overflow-y-hidden md:border-b md:border-[var(--border)]";
|
|
1647
|
-
const TAB_CLASSES = FOCUS_RING_WIDTH + " max-w-full whitespace-nowrap px-3 py-2 text-sm font-medium transition-colors border-b-2 -mb-px focus:outline-none focus-visible:ring-[var(--border-strong)]";
|
|
1648
|
-
const TAB_ACTIVE_CLASSES = "border-[var(--text-primary)] text-[var(--text-primary)]";
|
|
1649
|
-
const TAB_INACTIVE_CLASSES = "border-transparent text-[var(--text-muted)] hover:text-[var(--text-secondary)] hover:border-[var(--border-strong)]";
|
|
1650
|
-
const TAB_WRAP_CLASSES = FOCUS_RING_WIDTH + " max-w-full whitespace-nowrap rounded-md px-2.5 py-2 text-xs font-medium transition-colors focus:outline-none focus-visible:ring-[var(--border-strong)] md:rounded-none md:border-b-2 md:-mb-px md:bg-transparent md:px-3 md:py-2 md:text-sm";
|
|
1651
|
-
const TAB_WRAP_ACTIVE_CLASSES = "bg-[var(--brand)] text-[var(--brand-contrast)] md:border-[var(--text-primary)] md:text-[var(--text-primary)]";
|
|
1652
|
-
const TAB_WRAP_INACTIVE_CLASSES = "bg-[var(--bg-surface)] text-[var(--text-primary)] md:border-transparent md:text-[var(--text-muted)] md:hover:border-[var(--border-strong)] md:hover:text-[var(--text-secondary)]";
|
|
1653
|
-
const TAB_REMOVABLE_CLASSES = "pe-8 md:pe-8";
|
|
1654
|
-
const TAB_EMPTY_CLASSES = "-mx-1.5 rounded border border-dashed border-[var(--border-strong)] px-1.5";
|
|
1655
|
-
const TAB_ADD_CLASSES = FOCUS_RING_WIDTH + " inline-flex items-center gap-1 whitespace-nowrap rounded-md px-3 py-2 text-sm font-medium text-[var(--text-muted)] transition-colors hover:text-[var(--text-primary)] focus:outline-none focus-visible:ring-[var(--border-strong)] disabled:cursor-not-allowed disabled:opacity-50 [&_svg]:size-4";
|
|
1656
|
-
const TAB_ADD_WRAP_CLASSES = "px-2.5 text-xs md:px-3 md:text-sm";
|
|
1657
|
-
const TAB_ADD_PHONE_CLASSES = "relative max-md:px-2";
|
|
1658
|
-
function Tabs({
|
|
1659
|
-
tabs,
|
|
1660
|
-
active,
|
|
1661
|
-
onChange,
|
|
1662
|
-
className,
|
|
1663
|
-
wrap = false,
|
|
1664
|
-
label,
|
|
1665
|
-
panelId,
|
|
1666
|
-
onRemove,
|
|
1667
|
-
removeOn = "every",
|
|
1668
|
-
onAdd,
|
|
1669
|
-
addLabel,
|
|
1670
|
-
labels,
|
|
1671
|
-
busy = false,
|
|
1672
|
-
orientation = "horizontal",
|
|
1673
|
-
"aria-label": ariaLabel,
|
|
1674
|
-
...rest
|
|
1675
|
-
}) {
|
|
1676
|
-
const text = useKitLabels("tabs", DEFAULT_TABS_LABELS, labels);
|
|
1677
|
-
const phone = usePhoneLayout();
|
|
1678
|
-
const vertical = orientation === "vertical" && !phone;
|
|
1679
|
-
const stripRef = useRef(null);
|
|
1680
|
-
const fade = useStripFade(stripRef);
|
|
1681
|
-
useLayoutEffect(() => {
|
|
1682
|
-
const strip = stripRef.current;
|
|
1683
|
-
const tab = strip?.querySelector('[role="tab"][aria-selected="true"]');
|
|
1684
|
-
if (strip && tab) scrollIntoStrip(strip, tab);
|
|
1685
|
-
}, [active]);
|
|
1686
|
-
const isRemovable = (tab) => onRemove !== void 0 && tab.removable !== false;
|
|
1687
|
-
const deletesOnKey = (tab) => isRemovable(tab) && (removeOn === "every" || tab.id === active);
|
|
1688
|
-
const nameOf = (tab) => tab.name ?? (typeof tab.label === "string" ? tab.label : tab.id);
|
|
1689
|
-
const pendingFocus = useRef(null);
|
|
1690
|
-
const requestRemove = (id) => {
|
|
1691
|
-
const index = tabs.findIndex((t) => t.id === id);
|
|
1692
|
-
pendingFocus.current = {
|
|
1693
|
-
removed: id,
|
|
1694
|
-
wasActive: id === active,
|
|
1695
|
-
neighbour: (tabs[index + 1] ?? tabs[index - 1])?.id
|
|
1696
|
-
};
|
|
1697
|
-
onRemove?.(id);
|
|
1698
|
-
};
|
|
1699
|
-
useLayoutEffect(() => {
|
|
1700
|
-
const pending = pendingFocus.current;
|
|
1701
|
-
if (!pending || tabs.some((t) => t.id === pending.removed)) return;
|
|
1702
|
-
pendingFocus.current = null;
|
|
1703
|
-
const strip = stripRef.current;
|
|
1704
|
-
if (!strip) return;
|
|
1705
|
-
const focused = document.activeElement;
|
|
1706
|
-
if (focused && focused !== document.body && !strip.contains(focused)) return;
|
|
1707
|
-
const target = !pending.wasActive && tabs.some((t) => t.id === pending.neighbour) ? pending.neighbour : active;
|
|
1708
|
-
const index = tabs.findIndex((t) => t.id === target);
|
|
1709
|
-
strip.querySelectorAll('[role="tab"]')[index]?.focus();
|
|
1710
|
-
}, [tabs, active]);
|
|
1711
|
-
const onTabKeyDown = (e, tab) => {
|
|
1712
|
-
if (e.key === "Delete" && deletesOnKey(tab)) {
|
|
1713
|
-
e.preventDefault();
|
|
1714
|
-
if (!busy) requestRemove(tab.id);
|
|
1715
|
-
return;
|
|
1716
|
-
}
|
|
1717
|
-
const step = vertical ? e.key === "ArrowDown" ? 1 : e.key === "ArrowUp" ? -1 : 0 : horizontalStep(e.key, e.currentTarget);
|
|
1718
|
-
if (step === 0 && e.key !== "Home" && e.key !== "End") return;
|
|
1719
|
-
const strip = e.currentTarget.closest('[role="tablist"]');
|
|
1720
|
-
if (!strip) return;
|
|
1721
|
-
const items = Array.from(strip.querySelectorAll('[role="tab"]'));
|
|
1722
|
-
const from = items.indexOf(e.currentTarget);
|
|
1723
|
-
if (from === -1) return;
|
|
1724
|
-
e.preventDefault();
|
|
1725
|
-
const to = e.key === "Home" ? 0 : e.key === "End" ? items.length - 1 : (from + step + items.length) % items.length;
|
|
1726
|
-
items[to]?.focus();
|
|
1727
|
-
};
|
|
1728
|
-
const tablist = /* @__PURE__ */ jsx(
|
|
1729
|
-
"div",
|
|
1730
|
-
{
|
|
1731
|
-
...rest,
|
|
1732
|
-
ref: stripRef,
|
|
1733
|
-
role: "tablist",
|
|
1734
|
-
"aria-label": ariaLabel ?? label,
|
|
1735
|
-
"aria-orientation": vertical ? "vertical" : void 0,
|
|
1736
|
-
style: fade.mask ? { ...rest.style, maskImage: fade.mask, WebkitMaskImage: fade.mask } : rest.style,
|
|
1737
|
-
"data-overflow": fade.overflow,
|
|
1738
|
-
className: cn(
|
|
1739
|
-
vertical ? TABLIST_VERTICAL_CLASSES : wrap ? TABLIST_WRAP_CLASSES : TABLIST_CLASSES,
|
|
1740
|
-
onAdd ? "min-w-0" : className
|
|
1741
|
-
),
|
|
1742
|
-
children: tabs.map((tab) => {
|
|
1743
|
-
const isActive = tab.id === active;
|
|
1744
|
-
const removable = isRemovable(tab);
|
|
1745
|
-
const shared = {
|
|
1746
|
-
role: "tab",
|
|
1747
|
-
"aria-selected": isActive,
|
|
1748
|
-
// Roving tabindex: the whole strip is ONE stop in the page's tab order, and
|
|
1749
|
-
// it is the open tab. Ten report tabs otherwise cost ten Tab presses to step
|
|
1750
|
-
// over on the way to the table below them (live #262's strip is the extreme
|
|
1751
|
-
// case, but every strip in the app paid it).
|
|
1752
|
-
//
|
|
1753
|
-
// The stop follows the SELECTION, not the focus. Arrowing is a look around —
|
|
1754
|
-
// activation here is manual, because a tab can be a real route — so re-
|
|
1755
|
-
// pointing the stop at a report the user only arrowed past would hand the
|
|
1756
|
-
// strip back on the next visit in a state they never chose. The cost is that
|
|
1757
|
-
// Tab out and back returns to the open tab rather than to the last one
|
|
1758
|
-
// looked at; the ARIA pattern allows either, and this one needs no second
|
|
1759
|
-
// piece of state shadowing `active`.
|
|
1760
|
-
tabIndex: isActive ? 0 : -1,
|
|
1761
|
-
// Only the open tab: see `panelId`.
|
|
1762
|
-
"aria-controls": isActive ? panelId : void 0,
|
|
1763
|
-
id: isActive && panelId ? `${panelId}-tab` : void 0,
|
|
1764
|
-
"aria-keyshortcuts": deletesOnKey(tab) ? "Delete" : void 0,
|
|
1765
|
-
onKeyDown: (e) => onTabKeyDown(e, tab),
|
|
1766
|
-
className: vertical ? cn(
|
|
1767
|
-
TAB_VERTICAL_CLASSES,
|
|
1768
|
-
isActive ? TAB_VERTICAL_ACTIVE_CLASSES : TAB_VERTICAL_INACTIVE_CLASSES,
|
|
1769
|
-
removable && "pe-8"
|
|
1770
|
-
) : cn(
|
|
1771
|
-
wrap ? TAB_WRAP_CLASSES : TAB_CLASSES,
|
|
1772
|
-
wrap ? isActive ? TAB_WRAP_ACTIVE_CLASSES : TAB_WRAP_INACTIVE_CLASSES : isActive ? TAB_ACTIVE_CLASSES : TAB_INACTIVE_CLASSES,
|
|
1773
|
-
removable && TAB_REMOVABLE_CLASSES
|
|
1774
|
-
)
|
|
1775
|
-
};
|
|
1776
|
-
const inner = /* @__PURE__ */ jsxs(
|
|
1777
|
-
"span",
|
|
1778
|
-
{
|
|
1779
|
-
className: cn(
|
|
1780
|
-
// In a side nav the row is the full width, so the label takes it and a
|
|
1781
|
-
// badge lands at the row's end, where a column of counts lines up.
|
|
1782
|
-
vertical ? "flex min-w-0 flex-1 items-center gap-1.5" : "inline-flex max-w-full min-w-0 items-center gap-1.5",
|
|
1783
|
-
tab.empty && TAB_EMPTY_CLASSES
|
|
1784
|
-
),
|
|
1785
|
-
children: [
|
|
1786
|
-
tab.icon != null && /* @__PURE__ */ jsx("span", { "aria-hidden": true, className: "inline-flex shrink-0 items-center gap-0.5", children: tab.icon }),
|
|
1787
|
-
tab.detail != null ? (
|
|
1788
|
-
// `min-w-0` + `truncate` on each line: capped by the tab's `max-w-full`, a
|
|
1789
|
-
// long detail ends in an ellipsis. The whole text stays the tab's name.
|
|
1790
|
-
/* @__PURE__ */ jsxs("span", { className: "flex min-w-0 flex-col items-start text-start", children: [
|
|
1791
|
-
/* @__PURE__ */ jsx("span", { className: "max-w-full truncate", children: tab.label }),
|
|
1792
|
-
" ",
|
|
1793
|
-
/* @__PURE__ */ jsx(
|
|
1794
|
-
"span",
|
|
1795
|
-
{
|
|
1796
|
-
className: cn(
|
|
1797
|
-
"max-w-full truncate text-caption font-normal leading-tight text-[var(--text-muted)]",
|
|
1798
|
-
// On a wrapped strip's filled chip (below `md`) the muted grey
|
|
1799
|
-
// was dark text on the brand fill — "loop 2" all but vanished
|
|
1800
|
-
// under the one label that most needed reading. It takes the
|
|
1801
|
-
// chip's own ink instead, as the label and the × already do.
|
|
1802
|
-
wrap && isActive && !vertical && "text-[var(--brand-contrast)] md:text-[var(--text-muted)]"
|
|
1803
|
-
),
|
|
1804
|
-
children: tab.detail
|
|
1805
|
-
}
|
|
1806
|
-
)
|
|
1807
|
-
] })
|
|
1808
|
-
) : tab.label,
|
|
1809
|
-
tab.badge != null ? vertical ? /* @__PURE__ */ jsx("span", { className: "ms-auto flex shrink-0 items-center", children: tab.badge }) : tab.badge : null
|
|
1810
|
-
]
|
|
1811
|
-
}
|
|
1812
|
-
);
|
|
1813
|
-
const element = tab.href ? /* @__PURE__ */ jsx(
|
|
1814
|
-
"a",
|
|
1815
|
-
{
|
|
1816
|
-
...shared,
|
|
1817
|
-
href: tab.href,
|
|
1818
|
-
draggable: false,
|
|
1819
|
-
onClick: (e) => {
|
|
1820
|
-
if (e.button !== 0 || e.metaKey || e.ctrlKey || e.shiftKey || e.altKey) return;
|
|
1821
|
-
e.preventDefault();
|
|
1822
|
-
onChange(tab.id);
|
|
1823
|
-
},
|
|
1824
|
-
onKeyDown: (e) => {
|
|
1825
|
-
onTabKeyDown(e, tab);
|
|
1826
|
-
if (e.defaultPrevented || e.key !== " ") return;
|
|
1827
|
-
e.preventDefault();
|
|
1828
|
-
onChange(tab.id);
|
|
1829
|
-
},
|
|
1830
|
-
children: inner
|
|
1831
|
-
},
|
|
1832
|
-
tab.id
|
|
1833
|
-
) : /* @__PURE__ */ jsx("button", { ...shared, onClick: () => onChange(tab.id), children: inner }, tab.id);
|
|
1834
|
-
if (!removable) return element;
|
|
1835
|
-
return (
|
|
1836
|
-
// The × cannot go INSIDE the tab: a button in a button is invalid HTML, and
|
|
1837
|
-
// a tab's children are presentational, so a reader would flatten it into the
|
|
1838
|
-
// tab's name. It sits beside the tab, over the gutter the tab reserves.
|
|
1839
|
-
/* @__PURE__ */ jsxs("div", { className: cn("relative flex max-w-full", !vertical && "shrink-0"), children: [
|
|
1840
|
-
element,
|
|
1841
|
-
isActive && /* @__PURE__ */ jsx(
|
|
1842
|
-
IconButton,
|
|
1843
|
-
{
|
|
1844
|
-
size: "2xs",
|
|
1845
|
-
tone: "danger",
|
|
1846
|
-
tabIndex: -1,
|
|
1847
|
-
type: "button",
|
|
1848
|
-
"aria-label": text.remove(nameOf(tab)),
|
|
1849
|
-
disabled: busy,
|
|
1850
|
-
onClick: () => requestRemove(tab.id),
|
|
1851
|
-
className: cn(
|
|
1852
|
-
"absolute inset-y-0 end-1 my-auto",
|
|
1853
|
-
// On a wrapped strip's filled chip the quiet grey would vanish into
|
|
1854
|
-
// the brand fill below `md`.
|
|
1855
|
-
wrap && "text-[var(--brand-contrast)] md:text-[var(--text-placeholder)]"
|
|
1856
|
-
),
|
|
1857
|
-
children: /* @__PURE__ */ jsx(X, {})
|
|
1858
|
-
}
|
|
1859
|
-
)
|
|
1860
|
-
] }, tab.id)
|
|
1861
|
-
);
|
|
1862
|
-
})
|
|
1863
|
-
}
|
|
1864
|
-
);
|
|
1865
|
-
if (!onAdd) return tablist;
|
|
1866
|
-
if (vertical) {
|
|
1867
|
-
return /* @__PURE__ */ jsxs("div", { className: cn("flex flex-col gap-0.5", className), children: [
|
|
1868
|
-
tablist,
|
|
1869
|
-
/* @__PURE__ */ jsxs("button", { type: "button", onClick: onAdd, disabled: busy, className: TAB_ADD_CLASSES, children: [
|
|
1870
|
-
/* @__PURE__ */ jsx(Plus, { "aria-hidden": true }),
|
|
1871
|
-
addLabel ?? text.add
|
|
1872
|
-
] })
|
|
1873
|
-
] });
|
|
1874
|
-
}
|
|
1875
|
-
return /* @__PURE__ */ jsxs(
|
|
1876
|
-
"div",
|
|
1877
|
-
{
|
|
1878
|
-
className: cn(
|
|
1879
|
-
wrap ? "flex flex-wrap items-end gap-1.5 md:flex-nowrap md:gap-0" : "flex items-end",
|
|
1880
|
-
className
|
|
1881
|
-
),
|
|
1882
|
-
children: [
|
|
1883
|
-
tablist,
|
|
1884
|
-
/* @__PURE__ */ jsx(
|
|
1885
|
-
"div",
|
|
1886
|
-
{
|
|
1887
|
-
className: cn(
|
|
1888
|
-
"flex flex-1 items-center",
|
|
1889
|
-
wrap ? "md:self-stretch md:border-b md:border-[var(--border)]" : "self-stretch border-b border-[var(--border)]"
|
|
1890
|
-
),
|
|
1891
|
-
children: /* @__PURE__ */ jsxs(
|
|
1892
|
-
"button",
|
|
1893
|
-
{
|
|
1894
|
-
type: "button",
|
|
1895
|
-
onClick: onAdd,
|
|
1896
|
-
disabled: busy,
|
|
1897
|
-
className: cn(TAB_ADD_CLASSES, wrap ? TAB_ADD_WRAP_CLASSES : TAB_ADD_PHONE_CLASSES),
|
|
1898
|
-
children: [
|
|
1899
|
-
/* @__PURE__ */ jsx(Plus, { "aria-hidden": true }),
|
|
1900
|
-
/* @__PURE__ */ jsx("span", { className: wrap ? void 0 : "max-md:sr-only", children: addLabel ?? text.add })
|
|
1901
|
-
]
|
|
1902
|
-
}
|
|
1903
|
-
)
|
|
1904
|
-
}
|
|
1905
|
-
)
|
|
1906
|
-
]
|
|
1907
|
-
}
|
|
1908
|
-
);
|
|
1909
|
-
}
|
|
1910
|
-
export {
|
|
1911
|
-
Button,
|
|
1912
|
-
Card,
|
|
1913
|
-
CardAction,
|
|
1914
|
-
CardContent,
|
|
1915
|
-
CardDescription,
|
|
1916
|
-
CardFooter,
|
|
1917
|
-
CardHeader,
|
|
1918
|
-
CardTitle,
|
|
1919
|
-
CompactControls,
|
|
1920
|
-
DEFAULT_CHARACTER_COUNT_LABELS,
|
|
1921
|
-
DEFAULT_PASSWORD_REVEAL_LABELS,
|
|
1922
|
-
DEFAULT_TABS_LABELS,
|
|
1923
|
-
DISABLED_REASON_LINE_CLASS,
|
|
1924
|
-
DisabledReasonLine2 as DisabledReasonLine,
|
|
1925
|
-
EmptyState,
|
|
1926
|
-
FIELD_BASE,
|
|
1927
|
-
FIELD_DISPLAY,
|
|
1928
|
-
FIELD_FLOATING_PAD,
|
|
1929
|
-
FIELD_INVALID,
|
|
1930
|
-
FIELD_TOUCH_TEXT,
|
|
1931
|
-
FIELD_TRIGGER,
|
|
1932
|
-
FIELD_WRITABLE_LOOK,
|
|
1933
|
-
FLOATING_INPUT_CLASS,
|
|
1934
|
-
FLOATING_LABEL_CLASS,
|
|
1935
|
-
FLOATING_LABEL_STATIC2 as FLOATING_LABEL_STATIC,
|
|
1936
|
-
FOCUS_RING2 as FOCUS_RING,
|
|
1937
|
-
FOCUS_RING_WIDTH2 as FOCUS_RING_WIDTH,
|
|
1938
|
-
FieldChevron,
|
|
1939
|
-
FieldHint,
|
|
1940
|
-
FieldLabel,
|
|
1941
|
-
FloatingField,
|
|
1942
|
-
IconButton,
|
|
1943
|
-
Input,
|
|
1944
|
-
Label,
|
|
1945
|
-
PHONE_QUERY,
|
|
1946
|
-
Select,
|
|
1947
|
-
Spinner,
|
|
1948
|
-
TOUCH_TARGET_LARGE,
|
|
1949
|
-
Tabs,
|
|
1950
|
-
Textarea,
|
|
1951
|
-
buttonClasses,
|
|
1952
|
-
resolvePasswordRevealLabels,
|
|
1953
|
-
useDisabledReasonLine2 as useDisabledReasonLine
|
|
1954
|
-
};
|
|
1955
|
-
//# sourceMappingURL=ui.js.map
|