@rookcom/monarch-react 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +43 -0
- package/dist/components/{button.d.ts → actions/button/button.d.ts} +9 -1
- package/dist/components/actions/button/button.d.ts.map +1 -0
- package/dist/components/actions/button/button.js +69 -0
- package/dist/components/actions/button/button.js.map +1 -0
- package/dist/components/actions/button/index.d.ts +2 -0
- package/dist/components/actions/button/index.d.ts.map +1 -0
- package/dist/components/actions/button/index.js +2 -0
- package/dist/components/actions/button/index.js.map +1 -0
- package/dist/components/actions/copy-button/copy-button.d.ts +71 -0
- package/dist/components/actions/copy-button/copy-button.d.ts.map +1 -0
- package/dist/components/actions/copy-button/copy-button.js +150 -0
- package/dist/components/actions/copy-button/copy-button.js.map +1 -0
- package/dist/components/actions/copy-button/index.d.ts +2 -0
- package/dist/components/actions/copy-button/index.d.ts.map +1 -0
- package/dist/components/actions/copy-button/index.js +2 -0
- package/dist/components/actions/copy-button/index.js.map +1 -0
- package/dist/components/actions/copy-field/copy-field.d.ts +47 -0
- package/dist/components/actions/copy-field/copy-field.d.ts.map +1 -0
- package/dist/components/actions/copy-field/copy-field.js +37 -0
- package/dist/components/actions/copy-field/copy-field.js.map +1 -0
- package/dist/components/actions/copy-field/index.d.ts +2 -0
- package/dist/components/actions/copy-field/index.d.ts.map +1 -0
- package/dist/components/actions/copy-field/index.js +2 -0
- package/dist/components/actions/copy-field/index.js.map +1 -0
- package/dist/components/billing/money/index.d.ts +2 -0
- package/dist/components/billing/money/index.d.ts.map +1 -0
- package/dist/components/billing/money/index.js +2 -0
- package/dist/components/billing/money/index.js.map +1 -0
- package/dist/components/billing/money/money.d.ts +44 -0
- package/dist/components/billing/money/money.d.ts.map +1 -0
- package/dist/components/billing/money/money.js +75 -0
- package/dist/components/billing/money/money.js.map +1 -0
- package/dist/components/data-display/accordion/accordion.d.ts +17 -0
- package/dist/components/data-display/accordion/accordion.d.ts.map +1 -0
- package/dist/components/data-display/accordion/accordion.js +23 -0
- package/dist/components/data-display/accordion/accordion.js.map +1 -0
- package/dist/components/data-display/accordion/index.d.ts +2 -0
- package/dist/components/data-display/accordion/index.d.ts.map +1 -0
- package/dist/components/data-display/accordion/index.js +2 -0
- package/dist/components/data-display/accordion/index.js.map +1 -0
- package/dist/components/data-display/badge/badge.d.ts.map +1 -0
- package/dist/components/{badge.js → data-display/badge/badge.js} +1 -1
- package/dist/components/data-display/badge/badge.js.map +1 -0
- package/dist/components/data-display/badge/index.d.ts +2 -0
- package/dist/components/data-display/badge/index.d.ts.map +1 -0
- package/dist/components/data-display/badge/index.js +2 -0
- package/dist/components/data-display/badge/index.js.map +1 -0
- package/dist/components/data-display/card/card.d.ts.map +1 -0
- package/dist/components/{card.js → data-display/card/card.js} +1 -1
- package/dist/components/data-display/card/card.js.map +1 -0
- package/dist/components/data-display/card/index.d.ts +2 -0
- package/dist/components/data-display/card/index.d.ts.map +1 -0
- package/dist/components/data-display/card/index.js +2 -0
- package/dist/components/data-display/card/index.js.map +1 -0
- package/dist/components/data-display/description-list/description-list.d.ts.map +1 -0
- package/dist/{patterns → components/data-display/description-list}/description-list.js +1 -1
- package/dist/components/data-display/description-list/description-list.js.map +1 -0
- package/dist/components/data-display/description-list/index.d.ts +2 -0
- package/dist/components/data-display/description-list/index.d.ts.map +1 -0
- package/dist/components/data-display/description-list/index.js +2 -0
- package/dist/components/data-display/description-list/index.js.map +1 -0
- package/dist/components/data-display/progress-bar/index.d.ts +2 -0
- package/dist/components/data-display/progress-bar/index.d.ts.map +1 -0
- package/dist/components/data-display/progress-bar/index.js +2 -0
- package/dist/components/data-display/progress-bar/index.js.map +1 -0
- package/dist/components/data-display/progress-bar/progress-bar.d.ts +57 -0
- package/dist/components/data-display/progress-bar/progress-bar.d.ts.map +1 -0
- package/dist/components/data-display/progress-bar/progress-bar.js +57 -0
- package/dist/components/data-display/progress-bar/progress-bar.js.map +1 -0
- package/dist/components/data-display/relative-time/index.d.ts +2 -0
- package/dist/components/data-display/relative-time/index.d.ts.map +1 -0
- package/dist/components/data-display/relative-time/index.js +2 -0
- package/dist/components/data-display/relative-time/index.js.map +1 -0
- package/dist/components/data-display/relative-time/relative-time.d.ts +66 -0
- package/dist/components/data-display/relative-time/relative-time.d.ts.map +1 -0
- package/dist/components/data-display/relative-time/relative-time.js +102 -0
- package/dist/components/data-display/relative-time/relative-time.js.map +1 -0
- package/dist/components/data-display/stat-card/index.d.ts +2 -0
- package/dist/components/data-display/stat-card/index.d.ts.map +1 -0
- package/dist/components/data-display/stat-card/index.js +2 -0
- package/dist/components/data-display/stat-card/index.js.map +1 -0
- package/dist/components/data-display/stat-card/stat-card.d.ts.map +1 -0
- package/dist/{patterns → components/data-display/stat-card}/stat-card.js +2 -2
- package/dist/components/data-display/stat-card/stat-card.js.map +1 -0
- package/dist/components/data-display/status-badge/index.d.ts +2 -0
- package/dist/components/data-display/status-badge/index.d.ts.map +1 -0
- package/dist/components/data-display/status-badge/index.js +2 -0
- package/dist/components/data-display/status-badge/index.js.map +1 -0
- package/dist/components/data-display/status-badge/status-badge.d.ts +169 -0
- package/dist/components/data-display/status-badge/status-badge.d.ts.map +1 -0
- package/dist/components/data-display/status-badge/status-badge.js +139 -0
- package/dist/components/data-display/status-badge/status-badge.js.map +1 -0
- package/dist/components/{table.d.ts → data-grid/data-table/data-table.d.ts} +2 -2
- package/dist/components/data-grid/data-table/data-table.d.ts.map +1 -0
- package/dist/components/{table.js → data-grid/data-table/data-table.js} +4 -4
- package/dist/components/data-grid/data-table/data-table.js.map +1 -0
- package/dist/components/data-grid/data-table/index.d.ts +2 -0
- package/dist/components/data-grid/data-table/index.d.ts.map +1 -0
- package/dist/components/data-grid/data-table/index.js +2 -0
- package/dist/components/data-grid/data-table/index.js.map +1 -0
- package/dist/components/data-grid/load-more/index.d.ts +2 -0
- package/dist/components/data-grid/load-more/index.d.ts.map +1 -0
- package/dist/components/data-grid/load-more/index.js +2 -0
- package/dist/components/data-grid/load-more/index.js.map +1 -0
- package/dist/components/data-grid/load-more/load-more.d.ts +97 -0
- package/dist/components/data-grid/load-more/load-more.d.ts.map +1 -0
- package/dist/components/data-grid/load-more/load-more.js +184 -0
- package/dist/components/data-grid/load-more/load-more.js.map +1 -0
- package/dist/components/feedback/alert/alert.d.ts.map +1 -0
- package/dist/components/{alert.js → feedback/alert/alert.js} +2 -2
- package/dist/components/feedback/alert/alert.js.map +1 -0
- package/dist/components/feedback/alert/index.d.ts +2 -0
- package/dist/components/feedback/alert/index.d.ts.map +1 -0
- package/dist/components/feedback/alert/index.js +2 -0
- package/dist/components/feedback/alert/index.js.map +1 -0
- package/dist/components/feedback/callout-banner/callout-banner.d.ts +66 -0
- package/dist/components/feedback/callout-banner/callout-banner.d.ts.map +1 -0
- package/dist/components/feedback/callout-banner/callout-banner.js +35 -0
- package/dist/components/feedback/callout-banner/callout-banner.js.map +1 -0
- package/dist/components/feedback/callout-banner/index.d.ts +2 -0
- package/dist/components/feedback/callout-banner/index.d.ts.map +1 -0
- package/dist/components/feedback/callout-banner/index.js +2 -0
- package/dist/components/feedback/callout-banner/index.js.map +1 -0
- package/dist/components/feedback/empty-state/empty-state.d.ts +59 -0
- package/dist/components/feedback/empty-state/empty-state.d.ts.map +1 -0
- package/dist/components/feedback/empty-state/empty-state.js +16 -0
- package/dist/components/feedback/empty-state/empty-state.js.map +1 -0
- package/dist/components/feedback/empty-state/index.d.ts +2 -0
- package/dist/components/feedback/empty-state/index.d.ts.map +1 -0
- package/dist/components/feedback/empty-state/index.js +2 -0
- package/dist/components/feedback/empty-state/index.js.map +1 -0
- package/dist/components/feedback/error-page/error-page.d.ts +66 -0
- package/dist/components/feedback/error-page/error-page.d.ts.map +1 -0
- package/dist/components/feedback/error-page/error-page.js +43 -0
- package/dist/components/feedback/error-page/error-page.js.map +1 -0
- package/dist/components/feedback/error-page/index.d.ts +2 -0
- package/dist/components/feedback/error-page/index.d.ts.map +1 -0
- package/dist/components/feedback/error-page/index.js +2 -0
- package/dist/components/feedback/error-page/index.js.map +1 -0
- package/dist/components/feedback/error-state/error-state.boundary.d.ts +45 -0
- package/dist/components/feedback/error-state/error-state.boundary.d.ts.map +1 -0
- package/dist/components/feedback/error-state/error-state.boundary.js +40 -0
- package/dist/components/feedback/error-state/error-state.boundary.js.map +1 -0
- package/dist/components/feedback/error-state/error-state.d.ts +51 -0
- package/dist/components/feedback/error-state/error-state.d.ts.map +1 -0
- package/dist/components/feedback/error-state/error-state.js +47 -0
- package/dist/components/feedback/error-state/error-state.js.map +1 -0
- package/dist/components/feedback/error-state/index.d.ts +3 -0
- package/dist/components/feedback/error-state/index.d.ts.map +1 -0
- package/dist/components/feedback/error-state/index.js +3 -0
- package/dist/components/feedback/error-state/index.js.map +1 -0
- package/dist/components/feedback/inline-error-retry/index.d.ts +2 -0
- package/dist/components/feedback/inline-error-retry/index.d.ts.map +1 -0
- package/dist/components/feedback/inline-error-retry/index.js +2 -0
- package/dist/components/feedback/inline-error-retry/index.js.map +1 -0
- package/dist/components/feedback/inline-error-retry/inline-error-retry.d.ts +41 -0
- package/dist/components/feedback/inline-error-retry/inline-error-retry.d.ts.map +1 -0
- package/dist/components/feedback/inline-error-retry/inline-error-retry.js +75 -0
- package/dist/components/feedback/inline-error-retry/inline-error-retry.js.map +1 -0
- package/dist/components/feedback/inline-notice/index.d.ts +2 -0
- package/dist/components/feedback/inline-notice/index.d.ts.map +1 -0
- package/dist/components/feedback/inline-notice/index.js +2 -0
- package/dist/components/feedback/inline-notice/index.js.map +1 -0
- package/dist/components/feedback/inline-notice/inline-notice.d.ts +40 -0
- package/dist/components/feedback/inline-notice/inline-notice.d.ts.map +1 -0
- package/dist/components/feedback/inline-notice/inline-notice.js +29 -0
- package/dist/components/feedback/inline-notice/inline-notice.js.map +1 -0
- package/dist/components/feedback/loading-state/index.d.ts +2 -0
- package/dist/components/feedback/loading-state/index.d.ts.map +1 -0
- package/dist/components/feedback/loading-state/index.js +2 -0
- package/dist/components/feedback/loading-state/index.js.map +1 -0
- package/dist/components/feedback/loading-state/loading-state.d.ts +17 -0
- package/dist/components/feedback/loading-state/loading-state.d.ts.map +1 -0
- package/dist/components/feedback/loading-state/loading-state.js +12 -0
- package/dist/components/feedback/loading-state/loading-state.js.map +1 -0
- package/dist/components/feedback/skeleton/index.d.ts +2 -0
- package/dist/components/feedback/skeleton/index.d.ts.map +1 -0
- package/dist/components/feedback/skeleton/index.js +2 -0
- package/dist/components/feedback/skeleton/index.js.map +1 -0
- package/dist/components/feedback/skeleton/skeleton.d.ts.map +1 -0
- package/dist/components/{skeleton.js → feedback/skeleton/skeleton.js} +1 -1
- package/dist/components/feedback/skeleton/skeleton.js.map +1 -0
- package/dist/components/feedback/spinner/index.d.ts +2 -0
- package/dist/components/feedback/spinner/index.d.ts.map +1 -0
- package/dist/components/feedback/spinner/index.js +2 -0
- package/dist/components/feedback/spinner/index.js.map +1 -0
- package/dist/components/feedback/spinner/spinner.d.ts.map +1 -0
- package/dist/components/{spinner.js → feedback/spinner/spinner.js} +1 -1
- package/dist/components/feedback/spinner/spinner.js.map +1 -0
- package/dist/components/feedback/toast/index.d.ts +2 -0
- package/dist/components/feedback/toast/index.d.ts.map +1 -0
- package/dist/components/feedback/toast/index.js +2 -0
- package/dist/components/feedback/toast/index.js.map +1 -0
- package/dist/components/feedback/toast/toast.d.ts +109 -0
- package/dist/components/feedback/toast/toast.d.ts.map +1 -0
- package/dist/components/feedback/toast/toast.js +187 -0
- package/dist/components/feedback/toast/toast.js.map +1 -0
- package/dist/components/forms/checkbox/checkbox.d.ts.map +1 -0
- package/dist/components/{checkbox.js → forms/checkbox/checkbox.js} +3 -3
- package/dist/components/forms/checkbox/checkbox.js.map +1 -0
- package/dist/components/forms/checkbox/index.d.ts +2 -0
- package/dist/components/forms/checkbox/index.d.ts.map +1 -0
- package/dist/components/forms/checkbox/index.js +2 -0
- package/dist/components/forms/checkbox/index.js.map +1 -0
- package/dist/components/forms/combobox/combobox.d.ts.map +1 -0
- package/dist/components/{combobox.js → forms/combobox/combobox.js} +4 -4
- package/dist/components/forms/combobox/combobox.js.map +1 -0
- package/dist/components/forms/combobox/index.d.ts +2 -0
- package/dist/components/forms/combobox/index.d.ts.map +1 -0
- package/dist/components/forms/combobox/index.js +2 -0
- package/dist/components/forms/combobox/index.js.map +1 -0
- package/dist/components/{field.d.ts → forms/form-field/form-field.d.ts} +42 -3
- package/dist/components/forms/form-field/form-field.d.ts.map +1 -0
- package/dist/components/{field.js → forms/form-field/form-field.js} +17 -4
- package/dist/components/forms/form-field/form-field.js.map +1 -0
- package/dist/components/forms/form-field/index.d.ts +2 -0
- package/dist/components/forms/form-field/index.d.ts.map +1 -0
- package/dist/components/forms/form-field/index.js +2 -0
- package/dist/components/forms/form-field/index.js.map +1 -0
- package/dist/components/forms/inline-edit-text/index.d.ts +2 -0
- package/dist/components/forms/inline-edit-text/index.d.ts.map +1 -0
- package/dist/components/forms/inline-edit-text/index.js +2 -0
- package/dist/components/forms/inline-edit-text/index.js.map +1 -0
- package/dist/components/forms/inline-edit-text/inline-edit-text.d.ts +63 -0
- package/dist/components/forms/inline-edit-text/inline-edit-text.d.ts.map +1 -0
- package/dist/components/forms/inline-edit-text/inline-edit-text.js +175 -0
- package/dist/components/forms/inline-edit-text/inline-edit-text.js.map +1 -0
- package/dist/components/forms/otp-pin-input/index.d.ts +2 -0
- package/dist/components/forms/otp-pin-input/index.d.ts.map +1 -0
- package/dist/components/forms/otp-pin-input/index.js +2 -0
- package/dist/components/forms/otp-pin-input/index.js.map +1 -0
- package/dist/components/forms/otp-pin-input/otp-pin-input.d.ts +32 -0
- package/dist/components/forms/otp-pin-input/otp-pin-input.d.ts.map +1 -0
- package/dist/components/forms/otp-pin-input/otp-pin-input.js +73 -0
- package/dist/components/forms/otp-pin-input/otp-pin-input.js.map +1 -0
- package/dist/components/forms/segmented-control/index.d.ts +2 -0
- package/dist/components/forms/segmented-control/index.d.ts.map +1 -0
- package/dist/components/forms/segmented-control/index.js +2 -0
- package/dist/components/forms/segmented-control/index.js.map +1 -0
- package/dist/components/forms/segmented-control/segmented-control.d.ts +62 -0
- package/dist/components/forms/segmented-control/segmented-control.d.ts.map +1 -0
- package/dist/components/forms/segmented-control/segmented-control.js +139 -0
- package/dist/components/forms/segmented-control/segmented-control.js.map +1 -0
- package/dist/components/forms/select/index.d.ts +2 -0
- package/dist/components/forms/select/index.d.ts.map +1 -0
- package/dist/components/forms/select/index.js +2 -0
- package/dist/components/forms/select/index.js.map +1 -0
- package/dist/components/forms/select/select.d.ts.map +1 -0
- package/dist/components/{select.js → forms/select/select.js} +3 -3
- package/dist/components/forms/select/select.js.map +1 -0
- package/dist/components/forms/switch/index.d.ts +2 -0
- package/dist/components/forms/switch/index.d.ts.map +1 -0
- package/dist/components/forms/switch/index.js +2 -0
- package/dist/components/forms/switch/index.js.map +1 -0
- package/dist/components/forms/switch/switch.d.ts.map +1 -0
- package/dist/components/{switch.js → forms/switch/switch.js} +2 -2
- package/dist/components/forms/switch/switch.js.map +1 -0
- package/dist/components/forms/switch-settings-list/index.d.ts +2 -0
- package/dist/components/forms/switch-settings-list/index.d.ts.map +1 -0
- package/dist/components/forms/switch-settings-list/index.js +2 -0
- package/dist/components/forms/switch-settings-list/index.js.map +1 -0
- package/dist/components/forms/switch-settings-list/switch-settings-list.d.ts +58 -0
- package/dist/components/forms/switch-settings-list/switch-settings-list.d.ts.map +1 -0
- package/dist/components/forms/switch-settings-list/switch-settings-list.js +123 -0
- package/dist/components/forms/switch-settings-list/switch-settings-list.js.map +1 -0
- package/dist/components/forms/tag-input/index.d.ts +2 -0
- package/dist/components/forms/tag-input/index.d.ts.map +1 -0
- package/dist/components/forms/tag-input/index.js +2 -0
- package/dist/components/forms/tag-input/index.js.map +1 -0
- package/dist/components/forms/tag-input/tag-input.d.ts +60 -0
- package/dist/components/forms/tag-input/tag-input.d.ts.map +1 -0
- package/dist/components/forms/tag-input/tag-input.js +258 -0
- package/dist/components/forms/tag-input/tag-input.js.map +1 -0
- package/dist/components/forms/text-field/index.d.ts +2 -0
- package/dist/components/forms/text-field/index.d.ts.map +1 -0
- package/dist/components/forms/text-field/index.js +2 -0
- package/dist/components/forms/text-field/index.js.map +1 -0
- package/dist/components/{input.d.ts → forms/text-field/text-field.d.ts} +1 -1
- package/dist/components/forms/text-field/text-field.d.ts.map +1 -0
- package/dist/components/{input.js → forms/text-field/text-field.js} +3 -3
- package/dist/components/forms/text-field/text-field.js.map +1 -0
- package/dist/components/geo/location-fields/index.d.ts +2 -0
- package/dist/components/geo/location-fields/index.d.ts.map +1 -0
- package/dist/components/geo/location-fields/index.js +2 -0
- package/dist/components/geo/location-fields/index.js.map +1 -0
- package/dist/components/geo/location-fields/location-fields.d.ts +104 -0
- package/dist/components/geo/location-fields/location-fields.d.ts.map +1 -0
- package/dist/components/geo/location-fields/location-fields.js +248 -0
- package/dist/components/geo/location-fields/location-fields.js.map +1 -0
- package/dist/components/identity/avatar/avatar.d.ts +68 -0
- package/dist/components/identity/avatar/avatar.d.ts.map +1 -0
- package/dist/components/identity/avatar/avatar.js +73 -0
- package/dist/components/identity/avatar/avatar.js.map +1 -0
- package/dist/components/identity/avatar/index.d.ts +2 -0
- package/dist/components/identity/avatar/index.d.ts.map +1 -0
- package/dist/components/identity/avatar/index.js +2 -0
- package/dist/components/identity/avatar/index.js.map +1 -0
- package/dist/components/identity/username-availability-input/index.d.ts +2 -0
- package/dist/components/identity/username-availability-input/index.d.ts.map +1 -0
- package/dist/components/identity/username-availability-input/index.js +2 -0
- package/dist/components/identity/username-availability-input/index.js.map +1 -0
- package/dist/components/identity/username-availability-input/username-availability-input.d.ts +71 -0
- package/dist/components/identity/username-availability-input/username-availability-input.d.ts.map +1 -0
- package/dist/components/identity/username-availability-input/username-availability-input.js +110 -0
- package/dist/components/identity/username-availability-input/username-availability-input.js.map +1 -0
- package/dist/components/layout/section-header/index.d.ts +2 -0
- package/dist/components/layout/section-header/index.d.ts.map +1 -0
- package/dist/components/layout/section-header/index.js +2 -0
- package/dist/components/layout/section-header/index.js.map +1 -0
- package/dist/components/layout/section-header/section-header.d.ts +49 -0
- package/dist/components/layout/section-header/section-header.d.ts.map +1 -0
- package/dist/components/layout/section-header/section-header.js +39 -0
- package/dist/components/layout/section-header/section-header.js.map +1 -0
- package/dist/components/layout/separator/index.d.ts +2 -0
- package/dist/components/layout/separator/index.d.ts.map +1 -0
- package/dist/components/layout/separator/index.js +2 -0
- package/dist/components/layout/separator/index.js.map +1 -0
- package/dist/components/layout/separator/separator.d.ts.map +1 -0
- package/dist/components/{separator.js → layout/separator/separator.js} +1 -1
- package/dist/components/layout/separator/separator.js.map +1 -0
- package/dist/components/layout/visually-hidden/index.d.ts +2 -0
- package/dist/components/layout/visually-hidden/index.d.ts.map +1 -0
- package/dist/components/layout/visually-hidden/index.js +2 -0
- package/dist/components/layout/visually-hidden/index.js.map +1 -0
- package/dist/components/layout/visually-hidden/visually-hidden.d.ts.map +1 -0
- package/dist/components/{visually-hidden.js → layout/visually-hidden/visually-hidden.js} +1 -1
- package/dist/components/layout/visually-hidden/visually-hidden.js.map +1 -0
- package/dist/components/navigation/back-link/back-link.d.ts +18 -0
- package/dist/components/navigation/back-link/back-link.d.ts.map +1 -0
- package/dist/components/navigation/back-link/back-link.js +16 -0
- package/dist/components/navigation/back-link/back-link.js.map +1 -0
- package/dist/components/navigation/back-link/index.d.ts +2 -0
- package/dist/components/navigation/back-link/index.d.ts.map +1 -0
- package/dist/components/navigation/back-link/index.js +2 -0
- package/dist/components/navigation/back-link/index.js.map +1 -0
- package/dist/components/navigation/breadcrumb/breadcrumb.d.ts.map +1 -0
- package/dist/components/{breadcrumb.js → navigation/breadcrumb/breadcrumb.js} +3 -3
- package/dist/components/navigation/breadcrumb/breadcrumb.js.map +1 -0
- package/dist/components/navigation/breadcrumb/index.d.ts +2 -0
- package/dist/components/navigation/breadcrumb/index.d.ts.map +1 -0
- package/dist/components/navigation/breadcrumb/index.js +2 -0
- package/dist/components/navigation/breadcrumb/index.js.map +1 -0
- package/dist/components/navigation/link/index.d.ts +2 -0
- package/dist/components/navigation/link/index.d.ts.map +1 -0
- package/dist/components/navigation/link/index.js +2 -0
- package/dist/components/navigation/link/index.js.map +1 -0
- package/dist/components/navigation/link/link.d.ts.map +1 -0
- package/dist/components/{link.js → navigation/link/link.js} +2 -2
- package/dist/components/navigation/link/link.js.map +1 -0
- package/dist/components/navigation/pagination/index.d.ts +2 -0
- package/dist/components/navigation/pagination/index.d.ts.map +1 -0
- package/dist/components/navigation/pagination/index.js +2 -0
- package/dist/components/navigation/pagination/index.js.map +1 -0
- package/dist/components/navigation/pagination/pagination.d.ts.map +1 -0
- package/dist/components/{pagination.js → navigation/pagination/pagination.js} +3 -3
- package/dist/components/navigation/pagination/pagination.js.map +1 -0
- package/dist/components/navigation/tabs/index.d.ts +2 -0
- package/dist/components/navigation/tabs/index.d.ts.map +1 -0
- package/dist/components/navigation/tabs/index.js +2 -0
- package/dist/components/navigation/tabs/index.js.map +1 -0
- package/dist/components/navigation/tabs/tabs.d.ts +121 -0
- package/dist/components/navigation/tabs/tabs.d.ts.map +1 -0
- package/dist/components/navigation/tabs/tabs.js +127 -0
- package/dist/components/navigation/tabs/tabs.js.map +1 -0
- package/dist/components/overlays/confirm-dialog/confirm-dialog.d.ts +107 -0
- package/dist/components/overlays/confirm-dialog/confirm-dialog.d.ts.map +1 -0
- package/dist/components/overlays/confirm-dialog/confirm-dialog.js +186 -0
- package/dist/components/overlays/confirm-dialog/confirm-dialog.js.map +1 -0
- package/dist/components/overlays/confirm-dialog/index.d.ts +2 -0
- package/dist/components/overlays/confirm-dialog/index.d.ts.map +1 -0
- package/dist/components/overlays/confirm-dialog/index.js +2 -0
- package/dist/components/overlays/confirm-dialog/index.js.map +1 -0
- package/dist/components/{dialog.d.ts → overlays/dialog/dialog.d.ts} +27 -1
- package/dist/components/overlays/dialog/dialog.d.ts.map +1 -0
- package/dist/components/{dialog.js → overlays/dialog/dialog.js} +6 -4
- package/dist/components/overlays/dialog/dialog.js.map +1 -0
- package/dist/components/overlays/dialog/index.d.ts +2 -0
- package/dist/components/overlays/dialog/index.d.ts.map +1 -0
- package/dist/components/overlays/dialog/index.js +2 -0
- package/dist/components/overlays/dialog/index.js.map +1 -0
- package/dist/components/overlays/dropdown-menu/dropdown-menu.d.ts.map +1 -0
- package/dist/components/{dropdown-menu.js → overlays/dropdown-menu/dropdown-menu.js} +2 -2
- package/dist/components/overlays/dropdown-menu/dropdown-menu.js.map +1 -0
- package/dist/components/overlays/dropdown-menu/index.d.ts +2 -0
- package/dist/components/overlays/dropdown-menu/index.d.ts.map +1 -0
- package/dist/components/overlays/dropdown-menu/index.js +2 -0
- package/dist/components/overlays/dropdown-menu/index.js.map +1 -0
- package/dist/components/overlays/popover/index.d.ts +2 -0
- package/dist/components/overlays/popover/index.d.ts.map +1 -0
- package/dist/components/overlays/popover/index.js +2 -0
- package/dist/components/overlays/popover/index.js.map +1 -0
- package/dist/components/overlays/popover/popover.d.ts.map +1 -0
- package/dist/components/{popover.js → overlays/popover/popover.js} +1 -1
- package/dist/components/overlays/popover/popover.js.map +1 -0
- package/dist/components/overlays/responsive-dialog/index.d.ts +2 -0
- package/dist/components/overlays/responsive-dialog/index.d.ts.map +1 -0
- package/dist/components/overlays/responsive-dialog/index.js +2 -0
- package/dist/components/overlays/responsive-dialog/index.js.map +1 -0
- package/dist/components/overlays/responsive-dialog/responsive-dialog.d.ts +25 -0
- package/dist/components/overlays/responsive-dialog/responsive-dialog.d.ts.map +1 -0
- package/dist/components/overlays/responsive-dialog/responsive-dialog.js +22 -0
- package/dist/components/overlays/responsive-dialog/responsive-dialog.js.map +1 -0
- package/dist/components/overlays/sheet/index.d.ts +2 -0
- package/dist/components/overlays/sheet/index.d.ts.map +1 -0
- package/dist/components/overlays/sheet/index.js +2 -0
- package/dist/components/overlays/sheet/index.js.map +1 -0
- package/dist/components/overlays/sheet/sheet.d.ts +53 -0
- package/dist/components/overlays/sheet/sheet.d.ts.map +1 -0
- package/dist/components/overlays/sheet/sheet.js +43 -0
- package/dist/components/overlays/sheet/sheet.js.map +1 -0
- package/dist/components/overlays/tooltip/index.d.ts +2 -0
- package/dist/components/overlays/tooltip/index.d.ts.map +1 -0
- package/dist/components/overlays/tooltip/index.js +2 -0
- package/dist/components/overlays/tooltip/index.js.map +1 -0
- package/dist/components/overlays/tooltip/tooltip.d.ts.map +1 -0
- package/dist/components/overlays/tooltip/tooltip.js.map +1 -0
- package/dist/components/search/search-input/index.d.ts +2 -0
- package/dist/components/search/search-input/index.d.ts.map +1 -0
- package/dist/components/search/search-input/index.js +2 -0
- package/dist/components/search/search-input/index.js.map +1 -0
- package/dist/components/search/search-input/search-input.d.ts +48 -0
- package/dist/components/search/search-input/search-input.d.ts.map +1 -0
- package/dist/components/search/search-input/search-input.js +140 -0
- package/dist/components/search/search-input/search-input.js.map +1 -0
- package/dist/components/technical/secret-field/index.d.ts +2 -0
- package/dist/components/technical/secret-field/index.d.ts.map +1 -0
- package/dist/components/technical/secret-field/index.js +2 -0
- package/dist/components/technical/secret-field/index.js.map +1 -0
- package/dist/components/technical/secret-field/secret-field.d.ts +38 -0
- package/dist/components/technical/secret-field/secret-field.d.ts.map +1 -0
- package/dist/components/technical/secret-field/secret-field.js +42 -0
- package/dist/components/technical/secret-field/secret-field.js.map +1 -0
- package/dist/components/typography/kbd/index.d.ts +2 -0
- package/dist/components/typography/kbd/index.d.ts.map +1 -0
- package/dist/components/typography/kbd/index.js +2 -0
- package/dist/components/typography/kbd/index.js.map +1 -0
- package/dist/components/typography/kbd/kbd.d.ts.map +1 -0
- package/dist/components/{kbd.js → typography/kbd/kbd.js} +1 -1
- package/dist/components/typography/kbd/kbd.js.map +1 -0
- package/dist/entries/marketing.d.ts +9 -0
- package/dist/entries/marketing.d.ts.map +1 -0
- package/dist/entries/marketing.js +9 -0
- package/dist/entries/marketing.js.map +1 -0
- package/dist/index.d.ts +62 -29
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +62 -29
- package/dist/index.js.map +1 -1
- package/dist/internal/dismiss.d.ts +23 -0
- package/dist/internal/dismiss.d.ts.map +1 -0
- package/dist/internal/dismiss.js +36 -0
- package/dist/internal/dismiss.js.map +1 -0
- package/dist/internal/dismissible.d.ts +26 -0
- package/dist/internal/dismissible.d.ts.map +1 -0
- package/dist/internal/dismissible.js +82 -0
- package/dist/internal/dismissible.js.map +1 -0
- package/dist/internal/icons.d.ts +14 -0
- package/dist/internal/icons.d.ts.map +1 -1
- package/dist/internal/icons.js +40 -0
- package/dist/internal/icons.js.map +1 -1
- package/dist/internal/inert.d.ts +7 -0
- package/dist/internal/inert.d.ts.map +1 -0
- package/dist/internal/inert.js +10 -0
- package/dist/internal/inert.js.map +1 -0
- package/dist/manifest.json +6003 -1285
- package/dist/patterns/actions/toolbar/index.d.ts +2 -0
- package/dist/patterns/actions/toolbar/index.d.ts.map +1 -0
- package/dist/patterns/actions/toolbar/index.js +2 -0
- package/dist/patterns/actions/toolbar/index.js.map +1 -0
- package/dist/patterns/actions/toolbar/toolbar.d.ts.map +1 -0
- package/dist/patterns/{toolbar.js → actions/toolbar/toolbar.js} +1 -1
- package/dist/patterns/actions/toolbar/toolbar.js.map +1 -0
- package/dist/patterns/layout/marketing-hero/index.d.ts +2 -0
- package/dist/patterns/layout/marketing-hero/index.d.ts.map +1 -0
- package/dist/patterns/layout/marketing-hero/index.js +2 -0
- package/dist/patterns/layout/marketing-hero/index.js.map +1 -0
- package/dist/patterns/layout/marketing-hero/marketing-hero.d.ts +24 -0
- package/dist/patterns/layout/marketing-hero/marketing-hero.d.ts.map +1 -0
- package/dist/patterns/layout/marketing-hero/marketing-hero.js +7 -0
- package/dist/patterns/layout/marketing-hero/marketing-hero.js.map +1 -0
- package/dist/patterns/layout/marketing-section-blocks/index.d.ts +7 -0
- package/dist/patterns/layout/marketing-section-blocks/index.d.ts.map +1 -0
- package/dist/patterns/layout/marketing-section-blocks/index.js +7 -0
- package/dist/patterns/layout/marketing-section-blocks/index.js.map +1 -0
- package/dist/patterns/layout/marketing-section-blocks/marketing-section-blocks.cta-band.d.ts +15 -0
- package/dist/patterns/layout/marketing-section-blocks/marketing-section-blocks.cta-band.d.ts.map +1 -0
- package/dist/patterns/layout/marketing-section-blocks/marketing-section-blocks.cta-band.js +7 -0
- package/dist/patterns/layout/marketing-section-blocks/marketing-section-blocks.cta-band.js.map +1 -0
- package/dist/patterns/layout/marketing-section-blocks/marketing-section-blocks.d.ts +37 -0
- package/dist/patterns/layout/marketing-section-blocks/marketing-section-blocks.d.ts.map +1 -0
- package/dist/patterns/layout/marketing-section-blocks/marketing-section-blocks.faq.d.ts +23 -0
- package/dist/patterns/layout/marketing-section-blocks/marketing-section-blocks.faq.d.ts.map +1 -0
- package/dist/patterns/layout/marketing-section-blocks/marketing-section-blocks.faq.js +15 -0
- package/dist/patterns/layout/marketing-section-blocks/marketing-section-blocks.faq.js.map +1 -0
- package/dist/patterns/layout/marketing-section-blocks/marketing-section-blocks.feature-grid.d.ts +25 -0
- package/dist/patterns/layout/marketing-section-blocks/marketing-section-blocks.feature-grid.d.ts.map +1 -0
- package/dist/patterns/layout/marketing-section-blocks/marketing-section-blocks.feature-grid.js +10 -0
- package/dist/patterns/layout/marketing-section-blocks/marketing-section-blocks.feature-grid.js.map +1 -0
- package/dist/patterns/layout/marketing-section-blocks/marketing-section-blocks.js +14 -0
- package/dist/patterns/layout/marketing-section-blocks/marketing-section-blocks.js.map +1 -0
- package/dist/patterns/layout/marketing-section-blocks/marketing-section-blocks.product-frame.d.ts +25 -0
- package/dist/patterns/layout/marketing-section-blocks/marketing-section-blocks.product-frame.d.ts.map +1 -0
- package/dist/patterns/layout/marketing-section-blocks/marketing-section-blocks.product-frame.js +12 -0
- package/dist/patterns/layout/marketing-section-blocks/marketing-section-blocks.product-frame.js.map +1 -0
- package/dist/patterns/layout/marketing-section-blocks/marketing-section-blocks.stat-strip.d.ts +14 -0
- package/dist/patterns/layout/marketing-section-blocks/marketing-section-blocks.stat-strip.d.ts.map +1 -0
- package/dist/patterns/layout/marketing-section-blocks/marketing-section-blocks.stat-strip.js +7 -0
- package/dist/patterns/layout/marketing-section-blocks/marketing-section-blocks.stat-strip.js.map +1 -0
- package/dist/patterns/layout/marketing-site-shell/index.d.ts +4 -0
- package/dist/patterns/layout/marketing-site-shell/index.d.ts.map +1 -0
- package/dist/patterns/layout/marketing-site-shell/index.js +3 -0
- package/dist/patterns/layout/marketing-site-shell/index.js.map +1 -0
- package/dist/patterns/layout/marketing-site-shell/marketing-site-shell.d.ts +31 -0
- package/dist/patterns/layout/marketing-site-shell/marketing-site-shell.d.ts.map +1 -0
- package/dist/patterns/layout/marketing-site-shell/marketing-site-shell.footer.d.ts +33 -0
- package/dist/patterns/layout/marketing-site-shell/marketing-site-shell.footer.d.ts.map +1 -0
- package/dist/patterns/layout/marketing-site-shell/marketing-site-shell.footer.js +11 -0
- package/dist/patterns/layout/marketing-site-shell/marketing-site-shell.footer.js.map +1 -0
- package/dist/patterns/layout/marketing-site-shell/marketing-site-shell.js +32 -0
- package/dist/patterns/layout/marketing-site-shell/marketing-site-shell.js.map +1 -0
- package/dist/patterns/layout/marketing-site-shell/marketing-site-shell.link.d.ts +10 -0
- package/dist/patterns/layout/marketing-site-shell/marketing-site-shell.link.d.ts.map +1 -0
- package/dist/patterns/layout/marketing-site-shell/marketing-site-shell.link.js +8 -0
- package/dist/patterns/layout/marketing-site-shell/marketing-site-shell.link.js.map +1 -0
- package/dist/patterns/layout/marketing-site-shell/marketing-site-shell.types.d.ts +24 -0
- package/dist/patterns/layout/marketing-site-shell/marketing-site-shell.types.d.ts.map +1 -0
- package/dist/patterns/layout/marketing-site-shell/marketing-site-shell.types.js +4 -0
- package/dist/patterns/layout/marketing-site-shell/marketing-site-shell.types.js.map +1 -0
- package/dist/patterns/layout/page-header/index.d.ts +2 -0
- package/dist/patterns/layout/page-header/index.d.ts.map +1 -0
- package/dist/patterns/layout/page-header/index.js +2 -0
- package/dist/patterns/layout/page-header/index.js.map +1 -0
- package/dist/patterns/layout/page-header/page-header.d.ts.map +1 -0
- package/dist/patterns/{page-header.js → layout/page-header/page-header.js} +1 -1
- package/dist/patterns/layout/page-header/page-header.js.map +1 -0
- package/dist/patterns/layout/settings-section/index.d.ts +2 -0
- package/dist/patterns/layout/settings-section/index.d.ts.map +1 -0
- package/dist/patterns/layout/settings-section/index.js +2 -0
- package/dist/patterns/layout/settings-section/index.js.map +1 -0
- package/dist/patterns/{settings.d.ts → layout/settings-section/settings-section.d.ts} +1 -1
- package/dist/patterns/layout/settings-section/settings-section.d.ts.map +1 -0
- package/dist/patterns/{settings.js → layout/settings-section/settings-section.js} +3 -3
- package/dist/patterns/layout/settings-section/settings-section.js.map +1 -0
- package/dist/patterns/layout/split-layout/index.d.ts +2 -0
- package/dist/patterns/layout/split-layout/index.d.ts.map +1 -0
- package/dist/patterns/layout/split-layout/index.js +2 -0
- package/dist/patterns/layout/split-layout/index.js.map +1 -0
- package/dist/patterns/layout/split-layout/split-layout.d.ts.map +1 -0
- package/dist/patterns/{split-layout.js → layout/split-layout/split-layout.js} +3 -3
- package/dist/patterns/layout/split-layout/split-layout.js.map +1 -0
- package/dist/patterns/search/filter-bar/filter-bar.d.ts.map +1 -0
- package/dist/patterns/{filter-bar.js → search/filter-bar/filter-bar.js} +2 -2
- package/dist/patterns/search/filter-bar/filter-bar.js.map +1 -0
- package/dist/patterns/search/filter-bar/index.d.ts +2 -0
- package/dist/patterns/search/filter-bar/index.d.ts.map +1 -0
- package/dist/patterns/search/filter-bar/index.js +2 -0
- package/dist/patterns/search/filter-bar/index.js.map +1 -0
- package/dist/styles.css +3648 -11
- package/package.json +7 -2
- package/dist/components/alert.d.ts.map +0 -1
- package/dist/components/alert.js.map +0 -1
- package/dist/components/avatar.d.ts +0 -16
- package/dist/components/avatar.d.ts.map +0 -1
- package/dist/components/avatar.js +0 -28
- package/dist/components/avatar.js.map +0 -1
- package/dist/components/badge.d.ts.map +0 -1
- package/dist/components/badge.js.map +0 -1
- package/dist/components/breadcrumb.d.ts.map +0 -1
- package/dist/components/breadcrumb.js.map +0 -1
- package/dist/components/button.d.ts.map +0 -1
- package/dist/components/button.js +0 -30
- package/dist/components/button.js.map +0 -1
- package/dist/components/card.d.ts.map +0 -1
- package/dist/components/card.js.map +0 -1
- package/dist/components/checkbox.d.ts.map +0 -1
- package/dist/components/checkbox.js.map +0 -1
- package/dist/components/combobox.d.ts.map +0 -1
- package/dist/components/combobox.js.map +0 -1
- package/dist/components/dialog.d.ts.map +0 -1
- package/dist/components/dialog.js.map +0 -1
- package/dist/components/dropdown-menu.d.ts.map +0 -1
- package/dist/components/dropdown-menu.js.map +0 -1
- package/dist/components/empty-state.d.ts +0 -17
- package/dist/components/empty-state.d.ts.map +0 -1
- package/dist/components/empty-state.js +0 -10
- package/dist/components/empty-state.js.map +0 -1
- package/dist/components/field.d.ts.map +0 -1
- package/dist/components/field.js.map +0 -1
- package/dist/components/input.d.ts.map +0 -1
- package/dist/components/input.js.map +0 -1
- package/dist/components/kbd.d.ts.map +0 -1
- package/dist/components/kbd.js.map +0 -1
- package/dist/components/link.d.ts.map +0 -1
- package/dist/components/link.js.map +0 -1
- package/dist/components/pagination.d.ts.map +0 -1
- package/dist/components/pagination.js.map +0 -1
- package/dist/components/popover.d.ts.map +0 -1
- package/dist/components/popover.js.map +0 -1
- package/dist/components/progress.d.ts +0 -14
- package/dist/components/progress.d.ts.map +0 -1
- package/dist/components/progress.js +0 -12
- package/dist/components/progress.js.map +0 -1
- package/dist/components/select.d.ts.map +0 -1
- package/dist/components/select.js.map +0 -1
- package/dist/components/separator.d.ts.map +0 -1
- package/dist/components/separator.js.map +0 -1
- package/dist/components/skeleton.d.ts.map +0 -1
- package/dist/components/skeleton.js.map +0 -1
- package/dist/components/spinner.d.ts.map +0 -1
- package/dist/components/spinner.js.map +0 -1
- package/dist/components/switch.d.ts.map +0 -1
- package/dist/components/switch.js.map +0 -1
- package/dist/components/table.d.ts.map +0 -1
- package/dist/components/table.js.map +0 -1
- package/dist/components/tabs.d.ts +0 -12
- package/dist/components/tabs.d.ts.map +0 -1
- package/dist/components/tabs.js +0 -17
- package/dist/components/tabs.js.map +0 -1
- package/dist/components/toast.d.ts +0 -40
- package/dist/components/toast.d.ts.map +0 -1
- package/dist/components/toast.js +0 -67
- package/dist/components/toast.js.map +0 -1
- package/dist/components/tooltip.d.ts.map +0 -1
- package/dist/components/tooltip.js.map +0 -1
- package/dist/components/visually-hidden.d.ts.map +0 -1
- package/dist/components/visually-hidden.js.map +0 -1
- package/dist/patterns/description-list.d.ts.map +0 -1
- package/dist/patterns/description-list.js.map +0 -1
- package/dist/patterns/filter-bar.d.ts.map +0 -1
- package/dist/patterns/filter-bar.js.map +0 -1
- package/dist/patterns/index.d.ts +0 -9
- package/dist/patterns/index.d.ts.map +0 -1
- package/dist/patterns/index.js +0 -9
- package/dist/patterns/index.js.map +0 -1
- package/dist/patterns/page-header.d.ts.map +0 -1
- package/dist/patterns/page-header.js.map +0 -1
- package/dist/patterns/settings.d.ts.map +0 -1
- package/dist/patterns/settings.js.map +0 -1
- package/dist/patterns/split-layout.d.ts.map +0 -1
- package/dist/patterns/split-layout.js.map +0 -1
- package/dist/patterns/stat-card.d.ts.map +0 -1
- package/dist/patterns/stat-card.js.map +0 -1
- package/dist/patterns/states.d.ts +0 -23
- package/dist/patterns/states.d.ts.map +0 -1
- package/dist/patterns/states.js +0 -15
- package/dist/patterns/states.js.map +0 -1
- package/dist/patterns/toolbar.d.ts.map +0 -1
- package/dist/patterns/toolbar.js.map +0 -1
- /package/dist/components/{badge.d.ts → data-display/badge/badge.d.ts} +0 -0
- /package/dist/components/{card.d.ts → data-display/card/card.d.ts} +0 -0
- /package/dist/{patterns → components/data-display/description-list}/description-list.d.ts +0 -0
- /package/dist/{patterns → components/data-display/stat-card}/stat-card.d.ts +0 -0
- /package/dist/components/{alert.d.ts → feedback/alert/alert.d.ts} +0 -0
- /package/dist/components/{skeleton.d.ts → feedback/skeleton/skeleton.d.ts} +0 -0
- /package/dist/components/{spinner.d.ts → feedback/spinner/spinner.d.ts} +0 -0
- /package/dist/components/{checkbox.d.ts → forms/checkbox/checkbox.d.ts} +0 -0
- /package/dist/components/{combobox.d.ts → forms/combobox/combobox.d.ts} +0 -0
- /package/dist/components/{select.d.ts → forms/select/select.d.ts} +0 -0
- /package/dist/components/{switch.d.ts → forms/switch/switch.d.ts} +0 -0
- /package/dist/components/{separator.d.ts → layout/separator/separator.d.ts} +0 -0
- /package/dist/components/{visually-hidden.d.ts → layout/visually-hidden/visually-hidden.d.ts} +0 -0
- /package/dist/components/{breadcrumb.d.ts → navigation/breadcrumb/breadcrumb.d.ts} +0 -0
- /package/dist/components/{link.d.ts → navigation/link/link.d.ts} +0 -0
- /package/dist/components/{pagination.d.ts → navigation/pagination/pagination.d.ts} +0 -0
- /package/dist/components/{dropdown-menu.d.ts → overlays/dropdown-menu/dropdown-menu.d.ts} +0 -0
- /package/dist/components/{popover.d.ts → overlays/popover/popover.d.ts} +0 -0
- /package/dist/components/{tooltip.d.ts → overlays/tooltip/tooltip.d.ts} +0 -0
- /package/dist/components/{tooltip.js → overlays/tooltip/tooltip.js} +0 -0
- /package/dist/components/{kbd.d.ts → typography/kbd/kbd.d.ts} +0 -0
- /package/dist/patterns/{toolbar.d.ts → actions/toolbar/toolbar.d.ts} +0 -0
- /package/dist/patterns/{page-header.d.ts → layout/page-header/page-header.d.ts} +0 -0
- /package/dist/patterns/{split-layout.d.ts → layout/split-layout/split-layout.d.ts} +0 -0
- /package/dist/patterns/{filter-bar.d.ts → search/filter-bar/filter-bar.d.ts} +0 -0
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { type HTMLAttributes, type ReactNode } from 'react';
|
|
2
|
+
export interface InlineEditTextProps extends Omit<HTMLAttributes<HTMLDivElement>, 'defaultValue' | 'onChange' | 'children' | 'onError'> {
|
|
3
|
+
/** What the text is, for example "Title". The input's accessible name, and part of the view button's. */
|
|
4
|
+
label: string;
|
|
5
|
+
/** The saved value (controlled). */
|
|
6
|
+
value?: string;
|
|
7
|
+
/** The initial saved value (uncontrolled). */
|
|
8
|
+
defaultValue?: string;
|
|
9
|
+
/**
|
|
10
|
+
* Persists a new value. Return a promise to show the pending state; reject
|
|
11
|
+
* it (throw) to keep the editor open with the error and the user's draft.
|
|
12
|
+
* Not called when the value is unchanged.
|
|
13
|
+
*/
|
|
14
|
+
onSave: (next: string) => void | Promise<void>;
|
|
15
|
+
/** Called when the user cancels with Escape or the Cancel button. */
|
|
16
|
+
onCancel?: () => void;
|
|
17
|
+
/**
|
|
18
|
+
* Called when `onSave` rejects, with the error and the draft that failed.
|
|
19
|
+
* Use it for product-specific handling such as an edit conflict (HTTP 409):
|
|
20
|
+
* keep the editor open and pass your own resolution UI through `error`.
|
|
21
|
+
*/
|
|
22
|
+
onSaveError?: (error: unknown, draft: string) => void;
|
|
23
|
+
/** Turns a rejected save into a message. Default: the Error's message, or "Couldn't save. Try again." */
|
|
24
|
+
getErrorMessage?: (error: unknown) => ReactNode;
|
|
25
|
+
/** Validates the draft before saving. Return a message to block the save, or nothing to allow it. */
|
|
26
|
+
validate?: (draft: string) => ReactNode | null | undefined;
|
|
27
|
+
/** An error supplied by the product (for example a conflict notice), shown while editing. */
|
|
28
|
+
error?: ReactNode;
|
|
29
|
+
/** Edit mode (controlled). */
|
|
30
|
+
editing?: boolean;
|
|
31
|
+
/** Initial edit mode (uncontrolled). */
|
|
32
|
+
defaultEditing?: boolean;
|
|
33
|
+
onEditingChange?: (editing: boolean) => void;
|
|
34
|
+
/** Shown in view mode when the value is empty, and as the input placeholder. */
|
|
35
|
+
placeholder?: string;
|
|
36
|
+
/** A textarea instead of an input: Enter adds a line, Ctrl/⌘+Enter saves. */
|
|
37
|
+
multiline?: boolean;
|
|
38
|
+
/** Rows for `multiline`. Default 3. */
|
|
39
|
+
rows?: number;
|
|
40
|
+
maxLength?: number;
|
|
41
|
+
/** Trim whitespace before comparing and saving. Default true. */
|
|
42
|
+
trim?: boolean;
|
|
43
|
+
/** Save when focus leaves the editor. Default true. */
|
|
44
|
+
saveOnBlur?: boolean;
|
|
45
|
+
/** Show Save and Cancel buttons under the editor. Default: true for `multiline`. */
|
|
46
|
+
showActions?: boolean;
|
|
47
|
+
/** Not editable: the value is shown as plain text. */
|
|
48
|
+
disabled?: boolean;
|
|
49
|
+
/** Visually hidden hint read after the view button's name. Default "Edit". */
|
|
50
|
+
editHint?: string;
|
|
51
|
+
saveLabel?: string;
|
|
52
|
+
cancelLabel?: string;
|
|
53
|
+
/** Accessible name of the pending spinner. Default "Saving". */
|
|
54
|
+
savingLabel?: string;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Text that turns into an input in place: click it or press Enter to edit,
|
|
58
|
+
* Enter (or leaving the field) saves, Escape cancels. Saving can be async,
|
|
59
|
+
* with a pending state, and a failed save keeps the editor open with the
|
|
60
|
+
* error. The product owns persistence and conflict handling.
|
|
61
|
+
*/
|
|
62
|
+
export declare const InlineEditText: import("react").ForwardRefExoticComponent<InlineEditTextProps & import("react").RefAttributes<HTMLDivElement>>;
|
|
63
|
+
//# sourceMappingURL=inline-edit-text.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inline-edit-text.d.ts","sourceRoot":"","sources":["../../../../src/components/forms/inline-edit-text/inline-edit-text.tsx"],"names":[],"mappings":"AAEA,OAAO,EASL,KAAK,cAAc,EAEnB,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AASf,MAAM,WAAW,mBAAoB,SAAQ,IAAI,CAC/C,cAAc,CAAC,cAAc,CAAC,EAC9B,cAAc,GAAG,UAAU,GAAG,UAAU,GAAG,SAAS,CACrD;IACC,yGAAyG;IACzG,KAAK,EAAE,MAAM,CAAC;IACd,oCAAoC;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8CAA8C;IAC9C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;OAIG;IACH,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C,qEAAqE;IACrE,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB;;;;OAIG;IACH,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACtD,yGAAyG;IACzG,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,SAAS,CAAC;IAChD,qGAAqG;IACrG,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,SAAS,GAAG,IAAI,GAAG,SAAS,CAAC;IAC3D,6FAA6F;IAC7F,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,8BAA8B;IAC9B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,wCAAwC;IACxC,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAC7C,gFAAgF;IAChF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,6EAA6E;IAC7E,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,uCAAuC;IACvC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iEAAiE;IACjE,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,uDAAuD;IACvD,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,oFAAoF;IACpF,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,sDAAsD;IACtD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,8EAA8E;IAC9E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gEAAgE;IAChE,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAOD;;;;;GAKG;AACH,eAAO,MAAM,cAAc,gHA8Q1B,CAAC"}
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
+
import { forwardRef, useCallback, useEffect, useId, useLayoutEffect, useRef, useState, } from 'react';
|
|
4
|
+
import { cx } from '../../../internal/cx.js';
|
|
5
|
+
import { PencilGlyph } from '../../../internal/icons.js';
|
|
6
|
+
import { Button } from '../../actions/button/index.js';
|
|
7
|
+
import { Spinner } from '../../feedback/spinner/index.js';
|
|
8
|
+
// useLayoutEffect warns during server rendering; focus work only runs in the browser.
|
|
9
|
+
const useIsomorphicLayoutEffect = typeof window === 'undefined' ? useEffect : useLayoutEffect;
|
|
10
|
+
function defaultMessage(error) {
|
|
11
|
+
if (error instanceof Error && error.message)
|
|
12
|
+
return error.message;
|
|
13
|
+
return 'Couldn’t save. Try again.';
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Text that turns into an input in place: click it or press Enter to edit,
|
|
17
|
+
* Enter (or leaving the field) saves, Escape cancels. Saving can be async,
|
|
18
|
+
* with a pending state, and a failed save keeps the editor open with the
|
|
19
|
+
* error. The product owns persistence and conflict handling.
|
|
20
|
+
*/
|
|
21
|
+
export const InlineEditText = forwardRef(function InlineEditText({ label, value: valueProp, defaultValue = '', onSave, onCancel, onSaveError, getErrorMessage = defaultMessage, validate, error: externalError, editing: editingProp, defaultEditing = false, onEditingChange, placeholder, multiline = false, rows = 3, maxLength, trim = true, saveOnBlur = true, showActions = multiline, disabled = false, editHint = 'Edit', saveLabel = 'Save', cancelLabel = 'Cancel', savingLabel = 'Saving', className, ...rest }, ref) {
|
|
22
|
+
const auto = useId();
|
|
23
|
+
const errorId = `mn-inline-edit-${auto}-error`;
|
|
24
|
+
const hintId = `mn-inline-edit-${auto}-hint`;
|
|
25
|
+
const [innerValue, setInnerValue] = useState(defaultValue);
|
|
26
|
+
const value = valueProp ?? innerValue;
|
|
27
|
+
const [innerEditing, setInnerEditing] = useState(defaultEditing && !disabled);
|
|
28
|
+
const editing = (editingProp ?? innerEditing) && !disabled;
|
|
29
|
+
const [draft, setDraft] = useState(value);
|
|
30
|
+
const [saving, setSaving] = useState(false);
|
|
31
|
+
const [localError, setLocalError] = useState(null);
|
|
32
|
+
const viewRef = useRef(null);
|
|
33
|
+
const inputRef = useRef(null);
|
|
34
|
+
const rootRef = useRef(null);
|
|
35
|
+
// Focus returns to the view button after Enter / Escape / the buttons, not
|
|
36
|
+
// after a blur save (the user has already moved elsewhere).
|
|
37
|
+
const restoreFocus = useRef(false);
|
|
38
|
+
const failedDraft = useRef(null);
|
|
39
|
+
const mounted = useRef(true);
|
|
40
|
+
useEffect(() => {
|
|
41
|
+
mounted.current = true;
|
|
42
|
+
return () => {
|
|
43
|
+
mounted.current = false;
|
|
44
|
+
};
|
|
45
|
+
}, []);
|
|
46
|
+
const setEditing = useCallback((next) => {
|
|
47
|
+
if (editingProp === undefined)
|
|
48
|
+
setInnerEditing(next);
|
|
49
|
+
onEditingChange?.(next);
|
|
50
|
+
}, [editingProp, onEditingChange]);
|
|
51
|
+
// Entering edit mode starts the draft from the saved value and focuses
|
|
52
|
+
// it; leaving after Enter / Escape / the buttons returns focus to the text.
|
|
53
|
+
const valueRef = useRef(value);
|
|
54
|
+
valueRef.current = value;
|
|
55
|
+
const wasEditing = useRef(editing);
|
|
56
|
+
useIsomorphicLayoutEffect(() => {
|
|
57
|
+
if (editing && !wasEditing.current) {
|
|
58
|
+
setDraft(valueRef.current);
|
|
59
|
+
setLocalError(null);
|
|
60
|
+
failedDraft.current = null;
|
|
61
|
+
inputRef.current?.focus();
|
|
62
|
+
inputRef.current?.select();
|
|
63
|
+
}
|
|
64
|
+
if (!editing && wasEditing.current && restoreFocus.current) {
|
|
65
|
+
viewRef.current?.focus();
|
|
66
|
+
}
|
|
67
|
+
if (!editing)
|
|
68
|
+
restoreFocus.current = false;
|
|
69
|
+
wasEditing.current = editing;
|
|
70
|
+
}, [editing]);
|
|
71
|
+
// Mounted already editing (defaultEditing / editing): focus the input once.
|
|
72
|
+
useEffect(() => {
|
|
73
|
+
if (wasEditing.current)
|
|
74
|
+
inputRef.current?.focus();
|
|
75
|
+
}, []);
|
|
76
|
+
const exit = (restore) => {
|
|
77
|
+
restoreFocus.current = restore;
|
|
78
|
+
setLocalError(null);
|
|
79
|
+
failedDraft.current = null;
|
|
80
|
+
setEditing(false);
|
|
81
|
+
};
|
|
82
|
+
const commit = async (restore) => {
|
|
83
|
+
if (saving)
|
|
84
|
+
return;
|
|
85
|
+
const next = trim ? draft.trim() : draft;
|
|
86
|
+
if (next === value) {
|
|
87
|
+
exit(restore);
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
const invalid = validate?.(next);
|
|
91
|
+
if (invalid !== null && invalid !== undefined && invalid !== false && invalid !== '') {
|
|
92
|
+
setLocalError(invalid);
|
|
93
|
+
failedDraft.current = draft;
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
setSaving(true);
|
|
97
|
+
setLocalError(null);
|
|
98
|
+
try {
|
|
99
|
+
await onSave(next);
|
|
100
|
+
if (!mounted.current)
|
|
101
|
+
return;
|
|
102
|
+
if (valueProp === undefined)
|
|
103
|
+
setInnerValue(next);
|
|
104
|
+
setSaving(false);
|
|
105
|
+
exit(restore);
|
|
106
|
+
}
|
|
107
|
+
catch (err) {
|
|
108
|
+
if (!mounted.current)
|
|
109
|
+
return;
|
|
110
|
+
setSaving(false);
|
|
111
|
+
failedDraft.current = draft;
|
|
112
|
+
setLocalError(getErrorMessage(err));
|
|
113
|
+
onSaveError?.(err, next);
|
|
114
|
+
// Keep the user in the editor with their draft.
|
|
115
|
+
if (restore)
|
|
116
|
+
inputRef.current?.focus();
|
|
117
|
+
}
|
|
118
|
+
};
|
|
119
|
+
const cancel = () => {
|
|
120
|
+
if (saving)
|
|
121
|
+
return;
|
|
122
|
+
setDraft(value);
|
|
123
|
+
exit(true);
|
|
124
|
+
onCancel?.();
|
|
125
|
+
};
|
|
126
|
+
const onKeyDown = (event) => {
|
|
127
|
+
if (event.nativeEvent.isComposing)
|
|
128
|
+
return;
|
|
129
|
+
if (event.key === 'Escape') {
|
|
130
|
+
event.preventDefault();
|
|
131
|
+
event.stopPropagation();
|
|
132
|
+
cancel();
|
|
133
|
+
}
|
|
134
|
+
else if (event.key === 'Enter' && (!multiline || event.metaKey || event.ctrlKey)) {
|
|
135
|
+
event.preventDefault();
|
|
136
|
+
void commit(true);
|
|
137
|
+
}
|
|
138
|
+
};
|
|
139
|
+
const onBlur = (event) => {
|
|
140
|
+
if (!saveOnBlur || saving)
|
|
141
|
+
return;
|
|
142
|
+
// Moving to the Save / Cancel buttons is not leaving the editor.
|
|
143
|
+
if (event.relatedTarget && rootRef.current?.contains(event.relatedTarget))
|
|
144
|
+
return;
|
|
145
|
+
// Do not retry a draft that has just failed; the error stays visible.
|
|
146
|
+
if (failedDraft.current !== null && failedDraft.current === draft)
|
|
147
|
+
return;
|
|
148
|
+
void commit(false);
|
|
149
|
+
};
|
|
150
|
+
const shownError = localError ?? (editing ? externalError : null);
|
|
151
|
+
const hasError = shownError !== null && shownError !== undefined && shownError !== false && shownError !== '';
|
|
152
|
+
const empty = value === '';
|
|
153
|
+
const setRoot = (el) => {
|
|
154
|
+
rootRef.current = el;
|
|
155
|
+
if (typeof ref === 'function')
|
|
156
|
+
ref(el);
|
|
157
|
+
else if (ref)
|
|
158
|
+
ref.current = el;
|
|
159
|
+
};
|
|
160
|
+
const shared = {
|
|
161
|
+
'aria-label': label,
|
|
162
|
+
'aria-invalid': hasError || undefined,
|
|
163
|
+
'aria-describedby': hasError ? errorId : undefined,
|
|
164
|
+
'aria-busy': saving || undefined,
|
|
165
|
+
readOnly: saving,
|
|
166
|
+
value: draft,
|
|
167
|
+
placeholder,
|
|
168
|
+
maxLength,
|
|
169
|
+
onKeyDown,
|
|
170
|
+
onBlur,
|
|
171
|
+
className: 'mn-inline-edit-text__input',
|
|
172
|
+
};
|
|
173
|
+
return (_jsxs("div", { ref: setRoot, ...rest, className: cx('mn-inline-edit-text', className), "data-state": editing ? 'editing' : 'viewing', "data-multiline": multiline || undefined, "data-empty": empty || undefined, "data-saving": saving || undefined, "data-invalid": hasError || undefined, "data-disabled": disabled || undefined, children: [editing ? (_jsxs(_Fragment, { children: [_jsxs("div", { className: "mn-inline-edit-text__editor", children: [multiline ? (_jsx("textarea", { ref: inputRef, ...shared, rows: rows, onChange: (e) => setDraft(e.target.value) })) : (_jsx("input", { ref: inputRef, ...shared, type: "text", onChange: (e) => setDraft(e.target.value) })), saving && !showActions ? (_jsx(Spinner, { size: "sm", label: savingLabel, className: "mn-inline-edit-text__spinner" })) : null] }), hasError ? (_jsx("p", { id: errorId, role: "alert", className: "mn-inline-edit-text__error", children: shownError })) : null, showActions ? (_jsxs("div", { className: "mn-inline-edit-text__actions", children: [_jsx(Button, { size: "sm", variant: "primary", loading: saving, onMouseDown: (e) => e.preventDefault(), onClick: () => void commit(true), children: saving ? savingLabel : saveLabel }), _jsx(Button, { size: "sm", variant: "ghost", disabled: saving, onMouseDown: (e) => e.preventDefault(), onClick: cancel, children: cancelLabel })] })) : null] })) : disabled ? (_jsx("span", { className: "mn-inline-edit-text__view", children: _jsx("span", { className: "mn-inline-edit-text__value", children: empty ? placeholder : value }) })) : (_jsxs("button", { ref: viewRef, type: "button", className: "mn-inline-edit-text__view", "aria-describedby": hintId, onClick: () => setEditing(true), children: [_jsxs("span", { className: "mn-visually-hidden", children: [label, ": "] }), _jsx("span", { className: "mn-inline-edit-text__value", children: empty ? (placeholder ?? '\u00a0') : value }), _jsx(PencilGlyph, { className: "mn-inline-edit-text__icon" })] })), !editing && !disabled ? (_jsx("span", { id: hintId, className: "mn-visually-hidden", children: editHint })) : null] }));
|
|
174
|
+
});
|
|
175
|
+
//# sourceMappingURL=inline-edit-text.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inline-edit-text.js","sourceRoot":"","sources":["../../../../src/components/forms/inline-edit-text/inline-edit-text.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/forms/otp-pin-input/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/forms/otp-pin-input/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { type InputHTMLAttributes } from 'react';
|
|
2
|
+
export interface OTPPinInputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'value' | 'defaultValue' | 'onChange' | 'size' | 'type' | 'maxLength' | 'minLength' | 'pattern'> {
|
|
3
|
+
/** Number of characters. Default 6. */
|
|
4
|
+
length?: number;
|
|
5
|
+
/** The code (controlled). */
|
|
6
|
+
value?: string;
|
|
7
|
+
/** Initial code when uncontrolled. */
|
|
8
|
+
defaultValue?: string;
|
|
9
|
+
/** Called with the cleaned code on every change. */
|
|
10
|
+
onValueChange?: (value: string) => void;
|
|
11
|
+
/** Called once each time the code reaches `length` characters (typed, pasted or autofilled). */
|
|
12
|
+
onComplete?: (value: string) => void;
|
|
13
|
+
/** `numeric` (default) accepts digits and opens the number keypad; `alphanumeric` accepts A–Z and 0–9, upper-cased. */
|
|
14
|
+
mode?: 'numeric' | 'alphanumeric';
|
|
15
|
+
/** Show dots instead of the characters, for a PIN typed on a shared screen. */
|
|
16
|
+
mask?: boolean;
|
|
17
|
+
/** Draw a gap after every N slots, e.g. 3 for "123 456". Visual only. */
|
|
18
|
+
groupSize?: number;
|
|
19
|
+
size?: 'md' | 'lg';
|
|
20
|
+
/** Marks the code invalid (e.g. after a failed verification). Inside a Field, the Field's `invalid` is used. */
|
|
21
|
+
invalid?: boolean;
|
|
22
|
+
/** Class for the outer wrapper (the real input is `.mn-otp-pin-input__input`). */
|
|
23
|
+
className?: string;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* A one-time code or PIN entry shown as separate boxes. It is one real
|
|
27
|
+
* `<input>` underneath, so autofill from SMS or email (`autocomplete="one-time-code"`),
|
|
28
|
+
* paste, the numeric keypad and screen readers all treat it as a single field.
|
|
29
|
+
* Give it a label with Field or `aria-label`.
|
|
30
|
+
*/
|
|
31
|
+
export declare const OTPPinInput: import("react").ForwardRefExoticComponent<OTPPinInputProps & import("react").RefAttributes<HTMLInputElement>>;
|
|
32
|
+
//# sourceMappingURL=otp-pin-input.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"otp-pin-input.d.ts","sourceRoot":"","sources":["../../../../src/components/forms/otp-pin-input/otp-pin-input.tsx"],"names":[],"mappings":"AAEA,OAAO,EAKL,KAAK,mBAAmB,EAGzB,MAAM,OAAO,CAAC;AAIf,MAAM,WAAW,gBAAiB,SAAQ,IAAI,CAC5C,mBAAmB,CAAC,gBAAgB,CAAC,EACrC,OAAO,GAAG,cAAc,GAAG,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,WAAW,GAAG,WAAW,GAAG,SAAS,CAChG;IACC,uCAAuC;IACvC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,6BAA6B;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sCAAsC;IACtC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oDAAoD;IACpD,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,gGAAgG;IAChG,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,uHAAuH;IACvH,IAAI,CAAC,EAAE,SAAS,GAAG,cAAc,CAAC;IAClC,+EAA+E;IAC/E,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,yEAAyE;IACzE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACnB,gHAAgH;IAChH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,kFAAkF;IAClF,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAcD;;;;;GAKG;AACH,eAAO,MAAM,WAAW,+GA4HtB,CAAC"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { forwardRef, useState, } from 'react';
|
|
4
|
+
import { cx } from '../../../internal/cx.js';
|
|
5
|
+
import { useFieldControl } from '../form-field/index.js';
|
|
6
|
+
function clean(raw, mode, length) {
|
|
7
|
+
const kept = mode === 'numeric' ? raw.replace(/\D/g, '') : raw.toUpperCase().replace(/[^A-Z0-9]/g, '');
|
|
8
|
+
return kept.slice(0, length);
|
|
9
|
+
}
|
|
10
|
+
function caretToEnd(e) {
|
|
11
|
+
const input = e.currentTarget;
|
|
12
|
+
const end = input.value.length;
|
|
13
|
+
if (input.selectionStart !== end || input.selectionEnd !== end)
|
|
14
|
+
input.setSelectionRange(end, end);
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* A one-time code or PIN entry shown as separate boxes. It is one real
|
|
18
|
+
* `<input>` underneath, so autofill from SMS or email (`autocomplete="one-time-code"`),
|
|
19
|
+
* paste, the numeric keypad and screen readers all treat it as a single field.
|
|
20
|
+
* Give it a label with Field or `aria-label`.
|
|
21
|
+
*/
|
|
22
|
+
export const OTPPinInput = forwardRef(function OTPPinInput({ length = 6, value: valueProp, defaultValue = '', onValueChange, onComplete, mode = 'numeric', mask = false, groupSize, size = 'md', invalid, className, onPaste, onFocus, onBlur, onSelect, onClick, ...rest }, ref) {
|
|
23
|
+
const [internal, setInternal] = useState(() => clean(defaultValue, mode, length));
|
|
24
|
+
const value = clean(valueProp !== undefined ? valueProp : internal, mode, length);
|
|
25
|
+
const [focused, setFocused] = useState(false);
|
|
26
|
+
const setValue = (next) => {
|
|
27
|
+
if (next === value)
|
|
28
|
+
return;
|
|
29
|
+
if (valueProp === undefined)
|
|
30
|
+
setInternal(next);
|
|
31
|
+
onValueChange?.(next);
|
|
32
|
+
if (next.length === length)
|
|
33
|
+
onComplete?.(next);
|
|
34
|
+
};
|
|
35
|
+
const handlePaste = (e) => {
|
|
36
|
+
onPaste?.(e);
|
|
37
|
+
if (e.defaultPrevented)
|
|
38
|
+
return;
|
|
39
|
+
e.preventDefault();
|
|
40
|
+
const pasted = clean(e.clipboardData.getData('text'), mode, length);
|
|
41
|
+
if (!pasted)
|
|
42
|
+
return;
|
|
43
|
+
// A full code replaces what is there; a fragment is appended.
|
|
44
|
+
setValue(pasted.length === length ? pasted : clean(value + pasted, mode, length));
|
|
45
|
+
};
|
|
46
|
+
const fieldProps = useFieldControl(rest, { invalid });
|
|
47
|
+
const active = focused ? Math.min(value.length, length - 1) : -1;
|
|
48
|
+
const slots = [];
|
|
49
|
+
for (let i = 0; i < length; i++) {
|
|
50
|
+
if (groupSize && i > 0 && i % groupSize === 0)
|
|
51
|
+
slots.push(_jsx("span", { className: "mn-otp-pin-input__separator" }, `sep-${i}`));
|
|
52
|
+
const char = value[i];
|
|
53
|
+
slots.push(_jsx("span", { className: "mn-otp-pin-input__slot", "data-filled": char !== undefined || undefined, "data-active": i === active || undefined, children: char === undefined ? (i === active && value.length < length ? (_jsx("span", { className: "mn-otp-pin-input__caret" })) : null) : mask ? (_jsx("span", { className: "mn-otp-pin-input__dot" })) : (char) }, i));
|
|
54
|
+
}
|
|
55
|
+
return (_jsxs("div", { className: cx('mn-otp-pin-input', className), style: {
|
|
56
|
+
'--_n': length,
|
|
57
|
+
'--_seps': groupSize ? Math.floor((length - 1) / groupSize) : 0,
|
|
58
|
+
}, "data-size": size, "data-focused": focused || undefined, "data-complete": value.length === length || undefined, "data-invalid": fieldProps['aria-invalid'] ? true : undefined, "data-disabled": fieldProps.disabled || undefined, children: [_jsx("div", { className: "mn-otp-pin-input__slots", "aria-hidden": true, children: slots }), _jsx("input", { ref: ref, autoComplete: "one-time-code", autoCapitalize: mode === 'alphanumeric' ? 'characters' : 'off', autoCorrect: "off", spellCheck: false, ...fieldProps, type: mask ? 'password' : 'text', inputMode: mode === 'numeric' ? 'numeric' : 'text', pattern: mode === 'numeric' ? '[0-9]*' : '[A-Za-z0-9]*', className: "mn-otp-pin-input__input", "data-mask": mask || undefined, value: value, onChange: (e) => setValue(clean(e.target.value, mode, length)), onPaste: handlePaste, onFocus: (e) => {
|
|
59
|
+
onFocus?.(e);
|
|
60
|
+
setFocused(true);
|
|
61
|
+
caretToEnd(e);
|
|
62
|
+
}, onBlur: (e) => {
|
|
63
|
+
onBlur?.(e);
|
|
64
|
+
setFocused(false);
|
|
65
|
+
}, onSelect: (e) => {
|
|
66
|
+
onSelect?.(e);
|
|
67
|
+
caretToEnd(e);
|
|
68
|
+
}, onClick: (e) => {
|
|
69
|
+
onClick?.(e);
|
|
70
|
+
caretToEnd(e);
|
|
71
|
+
} })] }));
|
|
72
|
+
});
|
|
73
|
+
//# sourceMappingURL=otp-pin-input.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"otp-pin-input.js","sourceRoot":"","sources":["../../../../src/components/forms/otp-pin-input/otp-pin-input.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/forms/segmented-control/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/forms/segmented-control/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { type HTMLAttributes, type ReactElement, type ReactNode, type Ref } from 'react';
|
|
2
|
+
export type SegmentedControlSize = 'sm' | 'md' | 'lg';
|
|
3
|
+
export interface SegmentedOption<T extends string = string> {
|
|
4
|
+
value: T;
|
|
5
|
+
/** Visible text, and the accessible name. Required even when `hideLabel` is set. */
|
|
6
|
+
label: string;
|
|
7
|
+
/** Decorative icon before the label. */
|
|
8
|
+
icon?: ReactNode;
|
|
9
|
+
/** Show only the icon; `label` becomes the accessible name and the tooltip. */
|
|
10
|
+
hideLabel?: boolean;
|
|
11
|
+
/** A count after the label ("Open 12"). Included in the accessible name. */
|
|
12
|
+
count?: number | string;
|
|
13
|
+
/** Short extra text after the label, for example "Save 20%". */
|
|
14
|
+
suffix?: ReactNode;
|
|
15
|
+
disabled?: boolean;
|
|
16
|
+
}
|
|
17
|
+
type ControlledValue<V> = {
|
|
18
|
+
value: V;
|
|
19
|
+
defaultValue?: never;
|
|
20
|
+
} | {
|
|
21
|
+
value?: never;
|
|
22
|
+
defaultValue?: V;
|
|
23
|
+
} | {
|
|
24
|
+
value?: undefined;
|
|
25
|
+
defaultValue?: V;
|
|
26
|
+
};
|
|
27
|
+
interface SharedProps<T extends string> extends Omit<HTMLAttributes<HTMLDivElement>, 'defaultValue' | 'onChange' | 'dir'> {
|
|
28
|
+
options: readonly SegmentedOption<T>[];
|
|
29
|
+
size?: SegmentedControlSize;
|
|
30
|
+
/** Stretch to the container and share the width equally. */
|
|
31
|
+
block?: boolean;
|
|
32
|
+
/** Disable every option. */
|
|
33
|
+
disabled?: boolean;
|
|
34
|
+
/** Text direction. Left and Right arrows follow it. Default: inherited from the page. */
|
|
35
|
+
dir?: 'ltr' | 'rtl';
|
|
36
|
+
}
|
|
37
|
+
/** The group must have an accessible name: a visible heading's id, or a label. */
|
|
38
|
+
type AccessibleName = {
|
|
39
|
+
'aria-label': string;
|
|
40
|
+
'aria-labelledby'?: string;
|
|
41
|
+
} | {
|
|
42
|
+
'aria-labelledby': string;
|
|
43
|
+
'aria-label'?: string;
|
|
44
|
+
};
|
|
45
|
+
export type SegmentedControlProps<T extends string = string> = SharedProps<T> & AccessibleName & ControlledValue<T> & {
|
|
46
|
+
onValueChange?: (value: T) => void;
|
|
47
|
+
/** Submits the selected value with a form under this name. */
|
|
48
|
+
name?: string;
|
|
49
|
+
/** Requires a selection (sets aria-required). */
|
|
50
|
+
required?: boolean;
|
|
51
|
+
};
|
|
52
|
+
export type ToggleGroupProps<T extends string = string> = SharedProps<T> & AccessibleName & ControlledValue<readonly T[]> & {
|
|
53
|
+
onValueChange?: (value: T[]) => void;
|
|
54
|
+
};
|
|
55
|
+
export declare const SegmentedControl: <T extends string = string>(props: SegmentedControlProps<T> & {
|
|
56
|
+
ref?: Ref<HTMLDivElement>;
|
|
57
|
+
}) => ReactElement;
|
|
58
|
+
export declare const ToggleGroup: <T extends string = string>(props: ToggleGroupProps<T> & {
|
|
59
|
+
ref?: Ref<HTMLDivElement>;
|
|
60
|
+
}) => ReactElement;
|
|
61
|
+
export {};
|
|
62
|
+
//# sourceMappingURL=segmented-control.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"segmented-control.d.ts","sourceRoot":"","sources":["../../../../src/components/forms/segmented-control/segmented-control.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { forwardRef, useCallback, useState, } from 'react';
|
|
4
|
+
import { cx } from '../../../internal/cx.js';
|
|
5
|
+
/** The keys that move focus, mapped to a step. `null` = not a navigation key. */
|
|
6
|
+
function stepFor(key, dir) {
|
|
7
|
+
const forward = dir === 'rtl' ? 'ArrowLeft' : 'ArrowRight';
|
|
8
|
+
const back = dir === 'rtl' ? 'ArrowRight' : 'ArrowLeft';
|
|
9
|
+
if (key === forward || key === 'ArrowDown')
|
|
10
|
+
return 1;
|
|
11
|
+
if (key === back || key === 'ArrowUp')
|
|
12
|
+
return -1;
|
|
13
|
+
if (key === 'Home')
|
|
14
|
+
return 'first';
|
|
15
|
+
if (key === 'End')
|
|
16
|
+
return 'last';
|
|
17
|
+
return null;
|
|
18
|
+
}
|
|
19
|
+
/** Index of the next enabled option, wrapping around; -1 when none is enabled. */
|
|
20
|
+
function nextEnabled(options, from, step, allDisabled) {
|
|
21
|
+
if (allDisabled)
|
|
22
|
+
return -1;
|
|
23
|
+
const n = options.length;
|
|
24
|
+
if (step === 'first')
|
|
25
|
+
return options.findIndex((o) => !o.disabled);
|
|
26
|
+
if (step === 'last') {
|
|
27
|
+
for (let i = n - 1; i >= 0; i--)
|
|
28
|
+
if (!options[i]?.disabled)
|
|
29
|
+
return i;
|
|
30
|
+
return -1;
|
|
31
|
+
}
|
|
32
|
+
for (let k = 1; k <= n; k++) {
|
|
33
|
+
const i = (((from + step * k) % n) + n) % n;
|
|
34
|
+
if (!options[i]?.disabled)
|
|
35
|
+
return i;
|
|
36
|
+
}
|
|
37
|
+
return -1;
|
|
38
|
+
}
|
|
39
|
+
function directionOf(el, dir) {
|
|
40
|
+
if (dir)
|
|
41
|
+
return dir;
|
|
42
|
+
return typeof getComputedStyle === 'function' && getComputedStyle(el).direction === 'rtl'
|
|
43
|
+
? 'rtl'
|
|
44
|
+
: 'ltr';
|
|
45
|
+
}
|
|
46
|
+
function focusOption(root, index) {
|
|
47
|
+
root?.querySelectorAll('[data-index]')[index]?.focus();
|
|
48
|
+
}
|
|
49
|
+
function OptionContent({ option }) {
|
|
50
|
+
return (_jsxs(_Fragment, { children: [option.icon ? (_jsx("span", { className: "mn-segmented-control__icon", "aria-hidden": true, children: option.icon })) : null, _jsx("span", { className: option.hideLabel ? 'mn-visually-hidden' : 'mn-segmented-control__label', children: option.label }), option.count !== undefined ? (_jsxs(_Fragment, { children: [' ', _jsx("span", { className: "mn-segmented-control__count", children: option.count })] })) : null, option.suffix ? (_jsxs(_Fragment, { children: [' ', _jsx("span", { className: "mn-segmented-control__suffix", children: option.suffix })] })) : null] }));
|
|
51
|
+
}
|
|
52
|
+
function useControllable(value, defaultValue, onChange) {
|
|
53
|
+
const [inner, setInner] = useState(defaultValue);
|
|
54
|
+
const controlled = value !== undefined;
|
|
55
|
+
const current = controlled ? value : inner;
|
|
56
|
+
const set = useCallback((next) => {
|
|
57
|
+
if (!controlled)
|
|
58
|
+
setInner(next);
|
|
59
|
+
onChange?.(next);
|
|
60
|
+
}, [controlled, onChange]);
|
|
61
|
+
return [current, set];
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* A single choice from 2–5 short options, shown as one connected control:
|
|
65
|
+
* view switches (list/board), periods (monthly/yearly), filters. It is a
|
|
66
|
+
* radio group (WAI-ARIA APG): one Tab stop, arrow keys move and select,
|
|
67
|
+
* Home/End jump. For several independent on/off choices use ToggleGroup;
|
|
68
|
+
* when each option shows its own panel use Tabs.
|
|
69
|
+
*/
|
|
70
|
+
function SegmentedControlInner({ options, value: valueProp, defaultValue, onValueChange, size = 'md', block = false, disabled = false, dir, name, required, className, ...rest }, ref) {
|
|
71
|
+
const [value, setValue] = useControllable(valueProp, defaultValue, onValueChange);
|
|
72
|
+
const selectedIndex = options.findIndex((o) => o.value === value);
|
|
73
|
+
// The one Tab stop: the selected option, or the first enabled one.
|
|
74
|
+
const tabStop = selectedIndex >= 0 && !options[selectedIndex]?.disabled
|
|
75
|
+
? selectedIndex
|
|
76
|
+
: nextEnabled(options, 0, 'first', disabled);
|
|
77
|
+
const handleKeyDown = (event, from) => {
|
|
78
|
+
const step = stepFor(event.key, directionOf(event.currentTarget, dir));
|
|
79
|
+
if (step === null)
|
|
80
|
+
return;
|
|
81
|
+
const to = nextEnabled(options, from, step, disabled);
|
|
82
|
+
const option = options[to];
|
|
83
|
+
if (!option)
|
|
84
|
+
return;
|
|
85
|
+
event.preventDefault();
|
|
86
|
+
focusOption(event.currentTarget.parentElement, to);
|
|
87
|
+
// Radio pattern: selection follows focus.
|
|
88
|
+
if (option.value !== value)
|
|
89
|
+
setValue(option.value);
|
|
90
|
+
};
|
|
91
|
+
return (_jsxs("div", { ref: ref, role: "radiogroup", ...rest, dir: dir, "aria-disabled": disabled || undefined, "aria-required": required || undefined, className: cx('mn-segmented-control', className), "data-size": size, "data-block": block || undefined, "data-disabled": disabled || undefined, children: [options.map((option, index) => {
|
|
92
|
+
const checked = index === selectedIndex;
|
|
93
|
+
const off = disabled || option.disabled;
|
|
94
|
+
return (_jsx("button", { type: "button", role: "radio", "aria-checked": checked, tabIndex: index === tabStop ? 0 : -1, disabled: off || undefined, title: option.hideLabel ? option.label : undefined, "data-index": index, "data-state": checked ? 'on' : 'off', "data-icon-only": option.hideLabel || undefined, className: "mn-segmented-control__item", onKeyDown: (event) => handleKeyDown(event, index), onClick: () => {
|
|
95
|
+
if (!checked)
|
|
96
|
+
setValue(option.value);
|
|
97
|
+
}, children: _jsx(OptionContent, { option: option }) }, option.value));
|
|
98
|
+
}), name !== undefined ? _jsx("input", { type: "hidden", name: name, value: value ?? '' }) : null] }));
|
|
99
|
+
}
|
|
100
|
+
export const SegmentedControl = forwardRef(SegmentedControlInner);
|
|
101
|
+
/**
|
|
102
|
+
* Several independent on/off choices shown as one connected control, for
|
|
103
|
+
* example a set of filters. Each option is a toggle button (`aria-pressed`)
|
|
104
|
+
* inside a labelled group. One Tab stop; arrow keys move focus, Space or
|
|
105
|
+
* Enter toggles.
|
|
106
|
+
*/
|
|
107
|
+
function ToggleGroupInner({ options, value: valueProp, defaultValue, onValueChange, size = 'md', block = false, disabled = false, dir, className, ...rest }, ref) {
|
|
108
|
+
const [value, setValue] = useControllable(valueProp, defaultValue ?? [], onValueChange);
|
|
109
|
+
// Roving focus remembers the last focused option, independent of what is pressed.
|
|
110
|
+
const [active, setActive] = useState(() => Math.max(0, nextEnabled(options, 0, 'first', disabled)));
|
|
111
|
+
const tabStop = options[active] && !options[active]?.disabled
|
|
112
|
+
? active
|
|
113
|
+
: nextEnabled(options, 0, 'first', disabled);
|
|
114
|
+
const handleKeyDown = (event, from) => {
|
|
115
|
+
const step = stepFor(event.key, directionOf(event.currentTarget, dir));
|
|
116
|
+
if (step === null)
|
|
117
|
+
return;
|
|
118
|
+
const to = nextEnabled(options, from, step, disabled);
|
|
119
|
+
if (to < 0)
|
|
120
|
+
return;
|
|
121
|
+
event.preventDefault();
|
|
122
|
+
setActive(to);
|
|
123
|
+
focusOption(event.currentTarget.parentElement, to);
|
|
124
|
+
};
|
|
125
|
+
return (_jsx("div", { ref: ref, role: "group", ...rest, dir: dir, "aria-disabled": disabled || undefined, className: cx('mn-segmented-control', className), "data-size": size, "data-block": block || undefined, "data-disabled": disabled || undefined, "data-multiple": "", children: options.map((option, index) => {
|
|
126
|
+
const pressed = value.includes(option.value);
|
|
127
|
+
const off = disabled || option.disabled;
|
|
128
|
+
return (_jsx("button", { type: "button", "aria-pressed": pressed, tabIndex: index === tabStop ? 0 : -1, disabled: off || undefined, title: option.hideLabel ? option.label : undefined, "data-index": index, "data-state": pressed ? 'on' : 'off', "data-icon-only": option.hideLabel || undefined, className: "mn-segmented-control__item", onFocus: () => setActive(index), onKeyDown: (event) => handleKeyDown(event, index), onClick: () => {
|
|
129
|
+
const next = pressed
|
|
130
|
+
? value.filter((v) => v !== option.value)
|
|
131
|
+
: options
|
|
132
|
+
.filter((o) => o.value === option.value || value.includes(o.value))
|
|
133
|
+
.map((o) => o.value);
|
|
134
|
+
setValue(next);
|
|
135
|
+
}, children: _jsx(OptionContent, { option: option }) }, option.value));
|
|
136
|
+
}) }));
|
|
137
|
+
}
|
|
138
|
+
export const ToggleGroup = forwardRef(ToggleGroupInner);
|
|
139
|
+
//# sourceMappingURL=segmented-control.js.map
|