@hyddenlabs/hydn-ui 0.3.0-alpha.99 → 0.3.1
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 +46 -29
- package/dist/components/branding/google-logo.d.ts +14 -0
- package/dist/components/branding/google-logo.d.ts.map +1 -0
- package/dist/components/branding/google-logo.js +49 -0
- package/dist/components/branding/google-logo.js.map +1 -0
- package/dist/components/branding/hydden-logo.d.ts +14 -0
- package/dist/components/branding/hydden-logo.d.ts.map +1 -0
- package/dist/components/branding/hydden-logo.js +8 -0
- package/dist/components/branding/hydden-logo.js.map +1 -0
- package/dist/components/branding/microsoft-logo.d.ts +14 -0
- package/dist/components/branding/microsoft-logo.d.ts.map +1 -0
- package/dist/components/branding/microsoft-logo.js +25 -0
- package/dist/components/branding/microsoft-logo.js.map +1 -0
- package/dist/components/data-display/avatar/avatar.d.ts +24 -0
- package/dist/components/data-display/avatar/avatar.d.ts.map +1 -0
- package/dist/components/data-display/avatar/avatar.js +25 -0
- package/dist/components/data-display/avatar/avatar.js.map +1 -0
- package/dist/components/data-display/avatar/index.d.ts +3 -0
- package/dist/components/data-display/avatar/index.d.ts.map +1 -0
- package/dist/components/data-display/badge/badge.d.ts +24 -0
- package/dist/components/data-display/badge/badge.d.ts.map +1 -0
- package/dist/components/data-display/badge/badge.js +27 -0
- package/dist/components/data-display/badge/badge.js.map +1 -0
- package/dist/components/data-display/badge/index.d.ts +5 -0
- package/dist/components/data-display/badge/index.d.ts.map +1 -0
- package/dist/components/data-display/badge/status-label.d.ts +25 -0
- package/dist/components/data-display/badge/status-label.d.ts.map +1 -0
- package/dist/components/data-display/badge/status-label.js +63 -0
- package/dist/components/data-display/badge/status-label.js.map +1 -0
- package/dist/components/data-display/chip/chip.d.ts +42 -0
- package/dist/components/data-display/chip/chip.d.ts.map +1 -0
- package/dist/components/data-display/chip/chip.js +79 -0
- package/dist/components/data-display/chip/chip.js.map +1 -0
- package/dist/components/data-display/chip/index.d.ts +3 -0
- package/dist/components/data-display/chip/index.d.ts.map +1 -0
- package/dist/components/data-display/code-block/code-block.d.ts +17 -0
- package/dist/components/data-display/code-block/code-block.d.ts.map +1 -0
- package/dist/components/data-display/code-block/code-block.js +34 -0
- package/dist/components/data-display/code-block/code-block.js.map +1 -0
- package/dist/components/data-display/data-table/data-table.d.ts +226 -0
- package/dist/components/data-display/data-table/data-table.d.ts.map +1 -0
- package/dist/components/data-display/data-table/data-table.js +404 -0
- package/dist/components/data-display/data-table/data-table.js.map +1 -0
- package/dist/components/data-display/data-table/index.d.ts +5 -0
- package/dist/components/data-display/data-table/index.d.ts.map +1 -0
- package/dist/components/data-display/data-table/use-table.d.ts +42 -0
- package/dist/components/data-display/data-table/use-table.d.ts.map +1 -0
- package/dist/components/data-display/data-table/use-table.js +120 -0
- package/dist/components/data-display/data-table/use-table.js.map +1 -0
- package/dist/components/data-display/empty-state/empty-state.d.ts +8 -0
- package/dist/components/data-display/empty-state/empty-state.d.ts.map +1 -0
- package/dist/components/data-display/empty-state/empty-state.js +17 -0
- package/dist/components/data-display/empty-state/empty-state.js.map +1 -0
- package/dist/components/data-display/empty-state/index.d.ts +3 -0
- package/dist/components/data-display/empty-state/index.d.ts.map +1 -0
- package/dist/components/data-display/list/index.d.ts +3 -0
- package/dist/components/data-display/list/index.d.ts.map +1 -0
- package/dist/components/data-display/list/list.d.ts +31 -0
- package/dist/components/data-display/list/list.d.ts.map +1 -0
- package/dist/components/data-display/list/list.js +16 -0
- package/dist/components/data-display/list/list.js.map +1 -0
- package/dist/components/data-display/table/index.d.ts +3 -0
- package/dist/components/data-display/table/index.d.ts.map +1 -0
- package/dist/components/data-display/table/table.d.ts +101 -0
- package/dist/components/data-display/table/table.d.ts.map +1 -0
- package/dist/components/data-display/table/table.js +98 -0
- package/dist/components/data-display/table/table.js.map +1 -0
- package/dist/components/data-display/timeline/index.d.ts +3 -0
- package/dist/components/data-display/timeline/index.d.ts.map +1 -0
- package/dist/components/data-display/timeline/timeline.d.ts +57 -0
- package/dist/components/data-display/timeline/timeline.d.ts.map +1 -0
- package/dist/components/data-display/timeline/timeline.js +52 -0
- package/dist/components/data-display/timeline/timeline.js.map +1 -0
- package/dist/components/feedback/alert/alert.d.ts +27 -0
- package/dist/components/feedback/alert/alert.d.ts.map +1 -0
- package/dist/components/feedback/alert/alert.js +86 -0
- package/dist/components/feedback/alert/alert.js.map +1 -0
- package/dist/components/feedback/alert/index.d.ts +3 -0
- package/dist/components/feedback/alert/index.d.ts.map +1 -0
- package/dist/components/feedback/dialog/delete-dialog.d.ts +41 -0
- package/dist/components/feedback/dialog/delete-dialog.d.ts.map +1 -0
- package/dist/components/feedback/dialog/delete-dialog.js +52 -0
- package/dist/components/feedback/dialog/delete-dialog.js.map +1 -0
- package/dist/components/feedback/dialog/dialog.d.ts +24 -0
- package/dist/components/feedback/dialog/dialog.d.ts.map +1 -0
- package/dist/components/feedback/dialog/dialog.js +15 -0
- package/dist/components/feedback/dialog/dialog.js.map +1 -0
- package/dist/components/feedback/dialog/index.d.ts +5 -0
- package/dist/components/feedback/dialog/index.d.ts.map +1 -0
- package/dist/components/feedback/error-page/error-400.d.ts +22 -0
- package/dist/components/feedback/error-page/error-400.d.ts.map +1 -0
- package/dist/components/feedback/error-page/error-400.js +28 -0
- package/dist/components/feedback/error-page/error-400.js.map +1 -0
- package/dist/components/feedback/error-page/error-401.d.ts +26 -0
- package/dist/components/feedback/error-page/error-401.d.ts.map +1 -0
- package/dist/components/feedback/error-page/error-401.js +33 -0
- package/dist/components/feedback/error-page/error-401.js.map +1 -0
- package/dist/components/feedback/error-page/error-403.d.ts +26 -0
- package/dist/components/feedback/error-page/error-403.d.ts.map +1 -0
- package/dist/components/feedback/error-page/error-403.js +33 -0
- package/dist/components/feedback/error-page/error-403.js.map +1 -0
- package/dist/components/feedback/error-page/error-404.d.ts +26 -0
- package/dist/components/feedback/error-page/error-404.d.ts.map +1 -0
- package/dist/components/feedback/error-page/error-404.js +33 -0
- package/dist/components/feedback/error-page/error-404.js.map +1 -0
- package/dist/components/feedback/error-page/index.d.ts +9 -0
- package/dist/components/feedback/error-page/index.d.ts.map +1 -0
- package/dist/components/feedback/loading-container/index.d.ts +3 -0
- package/dist/components/feedback/loading-container/index.d.ts.map +1 -0
- package/dist/components/feedback/loading-container/loading-container.d.ts +16 -0
- package/dist/components/feedback/loading-container/loading-container.d.ts.map +1 -0
- package/dist/components/feedback/loading-container/loading-container.js +28 -0
- package/dist/components/feedback/loading-container/loading-container.js.map +1 -0
- package/dist/components/feedback/modal/index.d.ts +3 -0
- package/dist/components/feedback/modal/index.d.ts.map +1 -0
- package/dist/components/feedback/modal/modal.d.ts +33 -0
- package/dist/components/feedback/modal/modal.d.ts.map +1 -0
- package/dist/components/feedback/modal/modal.js +88 -0
- package/dist/components/feedback/modal/modal.js.map +1 -0
- package/dist/components/feedback/overlay/useOverlay.d.ts +24 -0
- package/dist/components/feedback/overlay/useOverlay.d.ts.map +1 -0
- package/dist/components/feedback/overlay/useOverlay.js +119 -0
- package/dist/components/feedback/overlay/useOverlay.js.map +1 -0
- package/dist/components/feedback/popover/index.d.ts +3 -0
- package/dist/components/feedback/popover/index.d.ts.map +1 -0
- package/dist/components/feedback/popover/popover.d.ts +25 -0
- package/dist/components/feedback/popover/popover.d.ts.map +1 -0
- package/dist/components/feedback/popover/popover.js +118 -0
- package/dist/components/feedback/popover/popover.js.map +1 -0
- package/dist/components/feedback/progress-bar/index.d.ts +3 -0
- package/dist/components/feedback/progress-bar/index.d.ts.map +1 -0
- package/dist/components/feedback/progress-bar/progress-bar.d.ts +22 -0
- package/dist/components/feedback/progress-bar/progress-bar.d.ts.map +1 -0
- package/dist/components/feedback/progress-bar/progress-bar.js +27 -0
- package/dist/components/feedback/progress-bar/progress-bar.js.map +1 -0
- package/dist/components/feedback/skeleton/index.d.ts +3 -0
- package/dist/components/feedback/skeleton/index.d.ts.map +1 -0
- package/dist/components/feedback/skeleton/skeleton.d.ts +19 -0
- package/dist/components/feedback/skeleton/skeleton.d.ts.map +1 -0
- package/dist/components/feedback/skeleton/skeleton.js +28 -0
- package/dist/components/feedback/skeleton/skeleton.js.map +1 -0
- package/dist/components/feedback/smooth-transition/index.d.ts +3 -0
- package/dist/components/feedback/smooth-transition/index.d.ts.map +1 -0
- package/dist/components/feedback/smooth-transition/smooth-transition.d.ts +68 -0
- package/dist/components/feedback/smooth-transition/smooth-transition.d.ts.map +1 -0
- package/dist/components/feedback/smooth-transition/smooth-transition.js +89 -0
- package/dist/components/feedback/smooth-transition/smooth-transition.js.map +1 -0
- package/dist/components/feedback/spinner/index.d.ts +3 -0
- package/dist/components/feedback/spinner/index.d.ts.map +1 -0
- package/dist/components/feedback/spinner/spinner.d.ts +21 -0
- package/dist/components/feedback/spinner/spinner.d.ts.map +1 -0
- package/dist/components/feedback/spinner/spinner.js +27 -0
- package/dist/components/feedback/spinner/spinner.js.map +1 -0
- package/dist/components/feedback/toast/index.d.ts +3 -0
- package/dist/components/feedback/toast/index.d.ts.map +1 -0
- package/dist/components/feedback/toast/toast.d.ts +23 -0
- package/dist/components/feedback/toast/toast.d.ts.map +1 -0
- package/dist/components/feedback/toast/toast.js +45 -0
- package/dist/components/feedback/toast/toast.js.map +1 -0
- package/dist/components/feedback/tooltip/index.d.ts +3 -0
- package/dist/components/feedback/tooltip/index.d.ts.map +1 -0
- package/dist/components/feedback/tooltip/tooltip.d.ts +39 -0
- package/dist/components/feedback/tooltip/tooltip.d.ts.map +1 -0
- package/dist/components/feedback/tooltip/tooltip.js +129 -0
- package/dist/components/feedback/tooltip/tooltip.js.map +1 -0
- package/dist/components/forms/button/button-with-icon.d.ts +18 -0
- package/dist/components/forms/button/button-with-icon.d.ts.map +1 -0
- package/dist/components/forms/button/button-with-icon.js +15 -0
- package/dist/components/forms/button/button-with-icon.js.map +1 -0
- package/dist/components/forms/button/button.d.ts +66 -0
- package/dist/components/forms/button/button.d.ts.map +1 -0
- package/dist/components/forms/button/button.examples.d.ts +73 -0
- package/dist/components/forms/button/button.examples.d.ts.map +1 -0
- package/dist/components/forms/button/button.js +118 -0
- package/dist/components/forms/button/button.js.map +1 -0
- package/dist/components/forms/button/icon-button.d.ts +23 -0
- package/dist/components/forms/button/icon-button.d.ts.map +1 -0
- package/dist/components/forms/button/icon-button.js +85 -0
- package/dist/components/forms/button/icon-button.js.map +1 -0
- package/dist/components/forms/button/index.d.ts +10 -0
- package/dist/components/forms/button/index.d.ts.map +1 -0
- package/dist/components/forms/button/inline-button.d.ts +45 -0
- package/dist/components/forms/button/inline-button.d.ts.map +1 -0
- package/dist/components/forms/button/inline-button.js +59 -0
- package/dist/components/forms/button/inline-button.js.map +1 -0
- package/dist/components/forms/button-group/button-group.d.ts +20 -0
- package/dist/components/forms/button-group/button-group.d.ts.map +1 -0
- package/dist/components/forms/button-group/button-group.js +24 -0
- package/dist/components/forms/button-group/button-group.js.map +1 -0
- package/dist/components/forms/button-group/index.d.ts +3 -0
- package/dist/components/forms/button-group/index.d.ts.map +1 -0
- package/dist/components/forms/calendar/calendar.d.ts +37 -0
- package/dist/components/forms/calendar/calendar.d.ts.map +1 -0
- package/dist/components/forms/calendar/calendar.js +131 -0
- package/dist/components/forms/calendar/calendar.js.map +1 -0
- package/dist/components/forms/calendar/index.d.ts +3 -0
- package/dist/components/forms/calendar/index.d.ts.map +1 -0
- package/dist/components/forms/checkbox/checkbox.d.ts +31 -0
- package/dist/components/forms/checkbox/checkbox.d.ts.map +1 -0
- package/dist/components/forms/checkbox/checkbox.js +39 -0
- package/dist/components/forms/checkbox/checkbox.js.map +1 -0
- package/dist/components/forms/checkbox/index.d.ts +3 -0
- package/dist/components/forms/checkbox/index.d.ts.map +1 -0
- package/dist/components/forms/code/code.d.ts +32 -0
- package/dist/components/forms/code/code.d.ts.map +1 -0
- package/dist/components/forms/code/code.js +31 -0
- package/dist/components/forms/code/code.js.map +1 -0
- package/dist/components/forms/code/index.d.ts +1 -0
- package/dist/components/forms/code/index.d.ts.map +1 -0
- package/dist/components/forms/date-picker/date-picker.d.ts +72 -0
- package/dist/components/forms/date-picker/date-picker.d.ts.map +1 -0
- package/dist/components/forms/date-picker/date-picker.js +173 -0
- package/dist/components/forms/date-picker/date-picker.js.map +1 -0
- package/dist/components/forms/date-picker/index.d.ts +3 -0
- package/dist/components/forms/date-picker/index.d.ts.map +1 -0
- package/dist/components/forms/editable-text/editable-text.d.ts +59 -0
- package/dist/components/forms/editable-text/editable-text.d.ts.map +1 -0
- package/dist/components/forms/editable-text/editable-text.js +188 -0
- package/dist/components/forms/editable-text/editable-text.js.map +1 -0
- package/dist/components/forms/editable-text/index.d.ts +3 -0
- package/dist/components/forms/editable-text/index.d.ts.map +1 -0
- package/dist/components/forms/fieldset/fieldset.d.ts +46 -0
- package/dist/components/forms/fieldset/fieldset.d.ts.map +1 -0
- package/dist/components/forms/fieldset/fieldset.js +40 -0
- package/dist/components/forms/fieldset/fieldset.js.map +1 -0
- package/dist/components/forms/fieldset/index.d.ts +3 -0
- package/dist/components/forms/fieldset/index.d.ts.map +1 -0
- package/dist/components/forms/form/form-example.d.ts +11 -0
- package/dist/components/forms/form/form-example.d.ts.map +1 -0
- package/dist/components/forms/form/form.d.ts +44 -0
- package/dist/components/forms/form/form.d.ts.map +1 -0
- package/dist/components/forms/form/form.js +39 -0
- package/dist/components/forms/form/form.js.map +1 -0
- package/dist/components/forms/form/index.d.ts +3 -0
- package/dist/components/forms/form/index.d.ts.map +1 -0
- package/dist/components/forms/form-checkbox/form-checkbox.d.ts +27 -0
- package/dist/components/forms/form-checkbox/form-checkbox.d.ts.map +1 -0
- package/dist/components/forms/form-checkbox/form-checkbox.js +58 -0
- package/dist/components/forms/form-checkbox/form-checkbox.js.map +1 -0
- package/dist/components/forms/form-checkbox/index.d.ts +3 -0
- package/dist/components/forms/form-checkbox/index.d.ts.map +1 -0
- package/dist/components/forms/form-checkbox-group/form-checkbox-group.d.ts +40 -0
- package/dist/components/forms/form-checkbox-group/form-checkbox-group.d.ts.map +1 -0
- package/dist/components/forms/form-checkbox-group/form-checkbox-group.js +74 -0
- package/dist/components/forms/form-checkbox-group/form-checkbox-group.js.map +1 -0
- package/dist/components/forms/form-field/form-field.d.ts +53 -0
- package/dist/components/forms/form-field/form-field.d.ts.map +1 -0
- package/dist/components/forms/form-field/form-field.js +56 -0
- package/dist/components/forms/form-field/form-field.js.map +1 -0
- package/dist/components/forms/form-field/index.d.ts +3 -0
- package/dist/components/forms/form-field/index.d.ts.map +1 -0
- package/dist/components/forms/form-input/form-input.d.ts +60 -0
- package/dist/components/forms/form-input/form-input.d.ts.map +1 -0
- package/dist/components/forms/form-input/form-input.js +53 -0
- package/dist/components/forms/form-input/form-input.js.map +1 -0
- package/dist/components/forms/form-select/form-select.d.ts +32 -0
- package/dist/components/forms/form-select/form-select.d.ts.map +1 -0
- package/dist/components/forms/form-select/form-select.js +34 -0
- package/dist/components/forms/form-select/form-select.js.map +1 -0
- package/dist/components/forms/form-textarea/form-textarea.d.ts +31 -0
- package/dist/components/forms/form-textarea/form-textarea.d.ts.map +1 -0
- package/dist/components/forms/form-textarea/form-textarea.js +34 -0
- package/dist/components/forms/form-textarea/form-textarea.js.map +1 -0
- package/dist/components/forms/input/index.d.ts +3 -0
- package/dist/components/forms/input/index.d.ts.map +1 -0
- package/dist/components/forms/input/input.d.ts +71 -0
- package/dist/components/forms/input/input.d.ts.map +1 -0
- package/dist/components/forms/input/input.js +64 -0
- package/dist/components/forms/input/input.js.map +1 -0
- package/dist/components/forms/input-group/index.d.ts +3 -0
- package/dist/components/forms/input-group/index.d.ts.map +1 -0
- package/dist/components/forms/input-group/input-group.d.ts +43 -0
- package/dist/components/forms/input-group/input-group.d.ts.map +1 -0
- package/dist/components/forms/input-group/input-group.js +55 -0
- package/dist/components/forms/input-group/input-group.js.map +1 -0
- package/dist/components/forms/multi-select/index.d.ts +3 -0
- package/dist/components/forms/multi-select/index.d.ts.map +1 -0
- package/dist/components/forms/multi-select/multi-select.d.ts +75 -0
- package/dist/components/forms/multi-select/multi-select.d.ts.map +1 -0
- package/dist/components/forms/multi-select/multi-select.js +259 -0
- package/dist/components/forms/multi-select/multi-select.js.map +1 -0
- package/dist/components/forms/radio/index.d.ts +3 -0
- package/dist/components/forms/radio/index.d.ts.map +1 -0
- package/dist/components/forms/radio/radio.d.ts +31 -0
- package/dist/components/forms/radio/radio.d.ts.map +1 -0
- package/dist/components/forms/radio/radio.js +74 -0
- package/dist/components/forms/radio/radio.js.map +1 -0
- package/dist/components/forms/radio-group/index.d.ts +3 -0
- package/dist/components/forms/radio-group/index.d.ts.map +1 -0
- package/dist/components/forms/radio-group/radio-group.d.ts +32 -0
- package/dist/components/forms/radio-group/radio-group.d.ts.map +1 -0
- package/dist/components/forms/radio-group/radio-group.js +28 -0
- package/dist/components/forms/radio-group/radio-group.js.map +1 -0
- package/dist/components/forms/select/index.d.ts +5 -0
- package/dist/components/forms/select/index.d.ts.map +1 -0
- package/dist/components/forms/select/select-item.d.ts +16 -0
- package/dist/components/forms/select/select-item.d.ts.map +1 -0
- package/dist/components/forms/select/select-item.js +9 -0
- package/dist/components/forms/select/select-item.js.map +1 -0
- package/dist/components/forms/select/select.d.ts +52 -0
- package/dist/components/forms/select/select.d.ts.map +1 -0
- package/dist/components/forms/select/select.js +51 -0
- package/dist/components/forms/select/select.js.map +1 -0
- package/dist/components/forms/slider/index.d.ts +3 -0
- package/dist/components/forms/slider/index.d.ts.map +1 -0
- package/dist/components/forms/slider/slider.d.ts +21 -0
- package/dist/components/forms/slider/slider.d.ts.map +1 -0
- package/dist/components/forms/slider/slider.js +65 -0
- package/dist/components/forms/slider/slider.js.map +1 -0
- package/dist/components/forms/switch/index.d.ts +3 -0
- package/dist/components/forms/switch/index.d.ts.map +1 -0
- package/dist/components/forms/switch/switch.d.ts +30 -0
- package/dist/components/forms/switch/switch.d.ts.map +1 -0
- package/dist/components/forms/switch/switch.js +104 -0
- package/dist/components/forms/switch/switch.js.map +1 -0
- package/dist/components/forms/textarea/index.d.ts +3 -0
- package/dist/components/forms/textarea/index.d.ts.map +1 -0
- package/dist/components/forms/textarea/textarea.d.ts +54 -0
- package/dist/components/forms/textarea/textarea.d.ts.map +1 -0
- package/dist/components/forms/textarea/textarea.js +55 -0
- package/dist/components/forms/textarea/textarea.js.map +1 -0
- package/dist/components/index.d.ts +124 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/layout/accordion/accordion.d.ts +30 -0
- package/dist/components/layout/accordion/accordion.d.ts.map +1 -0
- package/dist/components/layout/accordion/accordion.js +38 -0
- package/dist/components/layout/accordion/accordion.js.map +1 -0
- package/dist/components/layout/accordion/index.d.ts +3 -0
- package/dist/components/layout/accordion/index.d.ts.map +1 -0
- package/dist/components/layout/action-card/action-card.d.ts +37 -0
- package/dist/components/layout/action-card/action-card.d.ts.map +1 -0
- package/dist/components/layout/action-card/action-card.js +104 -0
- package/dist/components/layout/action-card/action-card.js.map +1 -0
- package/dist/components/layout/action-card/index.d.ts +3 -0
- package/dist/components/layout/action-card/index.d.ts.map +1 -0
- package/dist/components/layout/card/card-actions.d.ts +47 -0
- package/dist/components/layout/card/card-actions.d.ts.map +1 -0
- package/dist/components/layout/card/card-actions.js +30 -0
- package/dist/components/layout/card/card-actions.js.map +1 -0
- package/dist/components/layout/card/card-body.d.ts +26 -0
- package/dist/components/layout/card/card-body.d.ts.map +1 -0
- package/dist/components/layout/card/card-body.js +22 -0
- package/dist/components/layout/card/card-body.js.map +1 -0
- package/dist/components/layout/card/card-figure.d.ts +50 -0
- package/dist/components/layout/card/card-figure.d.ts.map +1 -0
- package/dist/components/layout/card/card-figure.js +27 -0
- package/dist/components/layout/card/card-figure.js.map +1 -0
- package/dist/components/layout/card/card-footer.d.ts +46 -0
- package/dist/components/layout/card/card-footer.d.ts.map +1 -0
- package/dist/components/layout/card/card-footer.js +39 -0
- package/dist/components/layout/card/card-footer.js.map +1 -0
- package/dist/components/layout/card/card-header.d.ts +41 -0
- package/dist/components/layout/card/card-header.d.ts.map +1 -0
- package/dist/components/layout/card/card-header.js +27 -0
- package/dist/components/layout/card/card-header.js.map +1 -0
- package/dist/components/layout/card/card-title.d.ts +43 -0
- package/dist/components/layout/card/card-title.d.ts.map +1 -0
- package/dist/components/layout/card/card-title.js +21 -0
- package/dist/components/layout/card/card-title.js.map +1 -0
- package/dist/components/layout/card/card.d.ts +74 -0
- package/dist/components/layout/card/card.d.ts.map +1 -0
- package/dist/components/layout/card/card.js +64 -0
- package/dist/components/layout/card/card.js.map +1 -0
- package/dist/components/layout/card/index.d.ts +15 -0
- package/dist/components/layout/card/index.d.ts.map +1 -0
- package/dist/components/layout/container/container.d.ts +33 -0
- package/dist/components/layout/container/container.d.ts.map +1 -0
- package/dist/components/layout/container/container.js +36 -0
- package/dist/components/layout/container/container.js.map +1 -0
- package/dist/components/layout/container/index.d.ts +3 -0
- package/dist/components/layout/container/index.d.ts.map +1 -0
- package/dist/components/layout/divider/divider.d.ts +15 -0
- package/dist/components/layout/divider/divider.d.ts.map +1 -0
- package/dist/components/layout/divider/divider.js +10 -0
- package/dist/components/layout/divider/divider.js.map +1 -0
- package/dist/components/layout/divider/index.d.ts +3 -0
- package/dist/components/layout/divider/index.d.ts.map +1 -0
- package/dist/components/layout/drawer/drawer.d.ts +35 -0
- package/dist/components/layout/drawer/drawer.d.ts.map +1 -0
- package/dist/components/layout/drawer/drawer.js +108 -0
- package/dist/components/layout/drawer/drawer.js.map +1 -0
- package/dist/components/layout/drawer/index.d.ts +3 -0
- package/dist/components/layout/drawer/index.d.ts.map +1 -0
- package/dist/components/layout/feature-section/feature-section.d.ts +36 -0
- package/dist/components/layout/feature-section/feature-section.d.ts.map +1 -0
- package/dist/components/layout/feature-section/feature-section.js +37 -0
- package/dist/components/layout/feature-section/feature-section.js.map +1 -0
- package/dist/components/layout/feature-section/index.d.ts +3 -0
- package/dist/components/layout/feature-section/index.d.ts.map +1 -0
- package/dist/components/layout/footer/footer.d.ts +37 -0
- package/dist/components/layout/footer/footer.d.ts.map +1 -0
- package/dist/components/layout/footer/footer.js +36 -0
- package/dist/components/layout/footer/footer.js.map +1 -0
- package/dist/components/layout/footer/index.d.ts +3 -0
- package/dist/components/layout/footer/index.d.ts.map +1 -0
- package/dist/components/layout/grid/grid.d.ts +66 -0
- package/dist/components/layout/grid/grid.d.ts.map +1 -0
- package/dist/components/layout/grid/grid.js +62 -0
- package/dist/components/layout/grid/grid.js.map +1 -0
- package/dist/components/layout/grid/index.d.ts +3 -0
- package/dist/components/layout/grid/index.d.ts.map +1 -0
- package/dist/components/layout/hero/hero.d.ts +61 -0
- package/dist/components/layout/hero/hero.d.ts.map +1 -0
- package/dist/components/layout/hero/hero.js +79 -0
- package/dist/components/layout/hero/hero.js.map +1 -0
- package/dist/components/layout/hero/index.d.ts +3 -0
- package/dist/components/layout/hero/index.d.ts.map +1 -0
- package/dist/components/layout/left-nav-layout/index.d.ts +7 -0
- package/dist/components/layout/left-nav-layout/index.d.ts.map +1 -0
- package/dist/components/layout/left-nav-layout/left-nav-item.d.ts +56 -0
- package/dist/components/layout/left-nav-layout/left-nav-item.d.ts.map +1 -0
- package/dist/components/layout/left-nav-layout/left-nav-item.js +105 -0
- package/dist/components/layout/left-nav-layout/left-nav-item.js.map +1 -0
- package/dist/components/layout/left-nav-layout/left-nav-layout.d.ts +67 -0
- package/dist/components/layout/left-nav-layout/left-nav-layout.d.ts.map +1 -0
- package/dist/components/layout/left-nav-layout/left-nav-layout.js +182 -0
- package/dist/components/layout/left-nav-layout/left-nav-layout.js.map +1 -0
- package/dist/components/layout/left-nav-layout/left-nav-section.d.ts +40 -0
- package/dist/components/layout/left-nav-layout/left-nav-section.d.ts.map +1 -0
- package/dist/components/layout/left-nav-layout/left-nav-section.js +119 -0
- package/dist/components/layout/left-nav-layout/left-nav-section.js.map +1 -0
- package/dist/components/layout/page/index.d.ts +3 -0
- package/dist/components/layout/page/index.d.ts.map +1 -0
- package/dist/components/layout/page/page.d.ts +17 -0
- package/dist/components/layout/page/page.d.ts.map +1 -0
- package/dist/components/layout/page/page.js +9 -0
- package/dist/components/layout/page/page.js.map +1 -0
- package/dist/components/layout/page-header/index.d.ts +3 -0
- package/dist/components/layout/page-header/index.d.ts.map +1 -0
- package/dist/components/layout/page-header/page-header.d.ts +21 -0
- package/dist/components/layout/page-header/page-header.d.ts.map +1 -0
- package/dist/components/layout/page-header/page-header.js +18 -0
- package/dist/components/layout/page-header/page-header.js.map +1 -0
- package/dist/components/layout/page-transition/index.d.ts +3 -0
- package/dist/components/layout/page-transition/index.d.ts.map +1 -0
- package/dist/components/layout/page-transition/page-transition.d.ts +52 -0
- package/dist/components/layout/page-transition/page-transition.d.ts.map +1 -0
- package/dist/components/layout/page-transition/page-transition.js +43 -0
- package/dist/components/layout/page-transition/page-transition.js.map +1 -0
- package/dist/components/layout/section/index.d.ts +3 -0
- package/dist/components/layout/section/index.d.ts.map +1 -0
- package/dist/components/layout/section/section.d.ts +35 -0
- package/dist/components/layout/section/section.d.ts.map +1 -0
- package/dist/components/layout/section/section.js +18 -0
- package/dist/components/layout/section/section.js.map +1 -0
- package/dist/components/layout/section-header/index.d.ts +3 -0
- package/dist/components/layout/section-header/index.d.ts.map +1 -0
- package/dist/components/layout/section-header/section-header.d.ts +23 -0
- package/dist/components/layout/section-header/section-header.d.ts.map +1 -0
- package/dist/components/layout/section-header/section-header.js +18 -0
- package/dist/components/layout/section-header/section-header.js.map +1 -0
- package/dist/components/layout/settings-page/index.d.ts +4 -0
- package/dist/components/layout/settings-page/index.d.ts.map +1 -0
- package/dist/components/layout/settings-page/setting-item.d.ts +52 -0
- package/dist/components/layout/settings-page/setting-item.d.ts.map +1 -0
- package/dist/components/layout/settings-page/setting-item.js +31 -0
- package/dist/components/layout/settings-page/setting-item.js.map +1 -0
- package/dist/components/layout/settings-page/settings-page.d.ts +37 -0
- package/dist/components/layout/settings-page/settings-page.d.ts.map +1 -0
- package/dist/components/layout/settings-page/settings-page.js +18 -0
- package/dist/components/layout/settings-page/settings-page.js.map +1 -0
- package/dist/components/layout/settings-page/settings-section.d.ts +35 -0
- package/dist/components/layout/settings-page/settings-section.d.ts.map +1 -0
- package/dist/components/layout/settings-page/settings-section.js +17 -0
- package/dist/components/layout/settings-page/settings-section.js.map +1 -0
- package/dist/components/layout/stack/index.d.ts +3 -0
- package/dist/components/layout/stack/index.d.ts.map +1 -0
- package/dist/components/layout/stack/stack.d.ts +33 -0
- package/dist/components/layout/stack/stack.d.ts.map +1 -0
- package/dist/components/layout/stack/stack.js +44 -0
- package/dist/components/layout/stack/stack.js.map +1 -0
- package/dist/components/navigation/breadcrumbs/breadcrumbs.d.ts +61 -0
- package/dist/components/navigation/breadcrumbs/breadcrumbs.d.ts.map +1 -0
- package/dist/components/navigation/breadcrumbs/breadcrumbs.js +30 -0
- package/dist/components/navigation/breadcrumbs/breadcrumbs.js.map +1 -0
- package/dist/components/navigation/breadcrumbs/index.d.ts +3 -0
- package/dist/components/navigation/breadcrumbs/index.d.ts.map +1 -0
- package/dist/components/navigation/dropdown/dropdown.d.ts +83 -0
- package/dist/components/navigation/dropdown/dropdown.d.ts.map +1 -0
- package/dist/components/navigation/dropdown/dropdown.js +295 -0
- package/dist/components/navigation/dropdown/dropdown.js.map +1 -0
- package/dist/components/navigation/dropdown/index.d.ts +5 -0
- package/dist/components/navigation/dropdown/index.d.ts.map +1 -0
- package/dist/components/navigation/nav/index.d.ts +3 -0
- package/dist/components/navigation/nav/index.d.ts.map +1 -0
- package/dist/components/navigation/nav/nav.d.ts +24 -0
- package/dist/components/navigation/nav/nav.d.ts.map +1 -0
- package/dist/components/navigation/nav/nav.js +32 -0
- package/dist/components/navigation/nav/nav.js.map +1 -0
- package/dist/components/navigation/nav-dropdown/index.d.ts +5 -0
- package/dist/components/navigation/nav-dropdown/index.d.ts.map +1 -0
- package/dist/components/navigation/nav-dropdown/nav-dropdown-item.d.ts +17 -0
- package/dist/components/navigation/nav-dropdown/nav-dropdown-item.d.ts.map +1 -0
- package/dist/components/navigation/nav-dropdown/nav-dropdown-item.js +17 -0
- package/dist/components/navigation/nav-dropdown/nav-dropdown-item.js.map +1 -0
- package/dist/components/navigation/nav-dropdown/nav-dropdown.d.ts +20 -0
- package/dist/components/navigation/nav-dropdown/nav-dropdown.d.ts.map +1 -0
- package/dist/components/navigation/nav-dropdown/nav-dropdown.js +24 -0
- package/dist/components/navigation/nav-dropdown/nav-dropdown.js.map +1 -0
- package/dist/components/navigation/navbar/index.d.ts +9 -0
- package/dist/components/navigation/navbar/index.d.ts.map +1 -0
- package/dist/components/navigation/navbar/navbar-brand.d.ts +23 -0
- package/dist/components/navigation/navbar/navbar-brand.d.ts.map +1 -0
- package/dist/components/navigation/navbar/navbar-brand.js +21 -0
- package/dist/components/navigation/navbar/navbar-brand.js.map +1 -0
- package/dist/components/navigation/navbar/navbar-link.d.ts +23 -0
- package/dist/components/navigation/navbar/navbar-link.d.ts.map +1 -0
- package/dist/components/navigation/navbar/navbar-link.js +34 -0
- package/dist/components/navigation/navbar/navbar-link.js.map +1 -0
- package/dist/components/navigation/navbar/navbar-toggle.d.ts +34 -0
- package/dist/components/navigation/navbar/navbar-toggle.d.ts.map +1 -0
- package/dist/components/navigation/navbar/navbar-toggle.js +37 -0
- package/dist/components/navigation/navbar/navbar-toggle.js.map +1 -0
- package/dist/components/navigation/navbar/navbar.d.ts +33 -0
- package/dist/components/navigation/navbar/navbar.d.ts.map +1 -0
- package/dist/components/navigation/navbar/navbar.js +40 -0
- package/dist/components/navigation/navbar/navbar.js.map +1 -0
- package/dist/components/navigation/notification-dropdown/index.d.ts +3 -0
- package/dist/components/navigation/notification-dropdown/index.d.ts.map +1 -0
- package/dist/components/navigation/notification-dropdown/notification-dropdown.d.ts +59 -0
- package/dist/components/navigation/notification-dropdown/notification-dropdown.d.ts.map +1 -0
- package/dist/components/navigation/notification-dropdown/notification-dropdown.js +456 -0
- package/dist/components/navigation/notification-dropdown/notification-dropdown.js.map +1 -0
- package/dist/components/navigation/pagination/index.d.ts +3 -0
- package/dist/components/navigation/pagination/index.d.ts.map +1 -0
- package/dist/components/navigation/pagination/pagination.d.ts +21 -0
- package/dist/components/navigation/pagination/pagination.d.ts.map +1 -0
- package/dist/components/navigation/pagination/pagination.js +72 -0
- package/dist/components/navigation/pagination/pagination.js.map +1 -0
- package/dist/components/navigation/scroll-nav/index.d.ts +3 -0
- package/dist/components/navigation/scroll-nav/index.d.ts.map +1 -0
- package/dist/components/navigation/scroll-nav/scroll-nav.d.ts +53 -0
- package/dist/components/navigation/scroll-nav/scroll-nav.d.ts.map +1 -0
- package/dist/components/navigation/scroll-nav/scroll-nav.js +188 -0
- package/dist/components/navigation/scroll-nav/scroll-nav.js.map +1 -0
- package/dist/components/navigation/sidebar/index.d.ts +3 -0
- package/dist/components/navigation/sidebar/index.d.ts.map +1 -0
- package/dist/components/navigation/sidebar/sidebar.d.ts +18 -0
- package/dist/components/navigation/sidebar/sidebar.d.ts.map +1 -0
- package/dist/components/navigation/sidebar/sidebar.js +41 -0
- package/dist/components/navigation/sidebar/sidebar.js.map +1 -0
- package/dist/components/navigation/stepper/index.d.ts +3 -0
- package/dist/components/navigation/stepper/index.d.ts.map +1 -0
- package/dist/components/navigation/stepper/stepper.d.ts +50 -0
- package/dist/components/navigation/stepper/stepper.d.ts.map +1 -0
- package/dist/components/navigation/stepper/stepper.js +159 -0
- package/dist/components/navigation/stepper/stepper.js.map +1 -0
- package/dist/components/navigation/tabs/index.d.ts +3 -0
- package/dist/components/navigation/tabs/index.d.ts.map +1 -0
- package/dist/components/navigation/tabs/tabs.d.ts +32 -0
- package/dist/components/navigation/tabs/tabs.d.ts.map +1 -0
- package/dist/components/navigation/tabs/tabs.js +61 -0
- package/dist/components/navigation/tabs/tabs.js.map +1 -0
- package/dist/components/system/auth-provider/auth-provider.d.ts +103 -0
- package/dist/components/system/auth-provider/auth-provider.d.ts.map +1 -0
- package/dist/components/system/auth-provider/auth-provider.js +118 -0
- package/dist/components/system/auth-provider/auth-provider.js.map +1 -0
- package/dist/components/system/auth-provider/auth-utils.d.ts +32 -0
- package/dist/components/system/auth-provider/auth-utils.d.ts.map +1 -0
- package/dist/components/system/auth-provider/auth-utils.js +83 -0
- package/dist/components/system/auth-provider/auth-utils.js.map +1 -0
- package/dist/components/system/auth-provider/index.d.ts +4 -0
- package/dist/components/system/auth-provider/index.d.ts.map +1 -0
- package/dist/components/system/color-mode-toggle/color-mode-toggle.d.ts +18 -0
- package/dist/components/system/color-mode-toggle/color-mode-toggle.d.ts.map +1 -0
- package/dist/components/system/color-mode-toggle/color-mode-toggle.js +27 -0
- package/dist/components/system/color-mode-toggle/color-mode-toggle.js.map +1 -0
- package/dist/components/system/color-mode-toggle/index.d.ts +3 -0
- package/dist/components/system/color-mode-toggle/index.d.ts.map +1 -0
- package/dist/components/system/error-boundary/error-boundary.d.ts +21 -0
- package/dist/components/system/error-boundary/error-boundary.d.ts.map +1 -0
- package/dist/components/system/icon/icon.d.ts +35 -0
- package/dist/components/system/icon/icon.d.ts.map +1 -0
- package/dist/components/system/icon/icon.js +83 -0
- package/dist/components/system/icon/icon.js.map +1 -0
- package/dist/components/system/icon/index.d.ts +3 -0
- package/dist/components/system/icon/index.d.ts.map +1 -0
- package/dist/components/system/theme-provider/index.d.ts +3 -0
- package/dist/components/system/theme-provider/index.d.ts.map +1 -0
- package/dist/components/system/theme-provider/theme-provider.d.ts +40 -0
- package/dist/components/system/theme-provider/theme-provider.d.ts.map +1 -0
- package/dist/components/system/theme-provider/theme-provider.js +55 -0
- package/dist/components/system/theme-provider/theme-provider.js.map +1 -0
- package/dist/components/typography/code/code.d.ts +24 -0
- package/dist/components/typography/code/code.d.ts.map +1 -0
- package/dist/components/typography/code/code.js +18 -0
- package/dist/components/typography/code/code.js.map +1 -0
- package/dist/components/typography/code/index.d.ts +3 -0
- package/dist/components/typography/code/index.d.ts.map +1 -0
- package/dist/components/typography/heading/heading.d.ts +32 -0
- package/dist/components/typography/heading/heading.d.ts.map +1 -0
- package/dist/components/typography/heading/heading.js +39 -0
- package/dist/components/typography/heading/heading.js.map +1 -0
- package/dist/components/typography/heading/index.d.ts +3 -0
- package/dist/components/typography/heading/index.d.ts.map +1 -0
- package/dist/components/typography/link/index.d.ts +3 -0
- package/dist/components/typography/link/index.d.ts.map +1 -0
- package/dist/components/typography/link/link.d.ts +44 -0
- package/dist/components/typography/link/link.d.ts.map +1 -0
- package/dist/components/typography/link/link.js +72 -0
- package/dist/components/typography/link/link.js.map +1 -0
- package/dist/components/typography/text/index.d.ts +3 -0
- package/dist/components/typography/text/index.d.ts.map +1 -0
- package/dist/components/typography/text/text.d.ts +104 -0
- package/dist/components/typography/text/text.d.ts.map +1 -0
- package/dist/components/typography/text/text.js +148 -0
- package/dist/components/typography/text/text.js.map +1 -0
- package/dist/components.d.ts +2 -0
- package/dist/components.d.ts.map +1 -0
- package/dist/hooks/useDebounce.d.ts +29 -0
- package/dist/hooks/useDebounce.d.ts.map +1 -0
- package/dist/hooks/useDebounce.js +26 -0
- package/dist/hooks/useDebounce.js.map +1 -0
- package/dist/hooks/useScrollReset.d.ts +11 -0
- package/dist/hooks/useScrollReset.d.ts.map +1 -0
- package/dist/hooks/useScrollReset.js +55 -0
- package/dist/hooks/useScrollReset.js.map +1 -0
- package/dist/humans.txt +8 -0
- package/dist/icons/logo.svg +9 -0
- package/dist/index.d.ts +7 -1170
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +287 -4333
- package/dist/index.js.map +1 -1
- package/dist/manifest.json +16 -0
- package/dist/node_modules/clsx/dist/clsx.js +18 -0
- package/dist/node_modules/clsx/dist/clsx.js.map +1 -0
- package/dist/robots.txt +5 -0
- package/dist/sitemap.xml +8 -0
- package/dist/staticwebapp.config.json +23 -0
- package/dist/style.css +2 -2
- package/dist/styles.d.ts +9 -0
- package/dist/theme/hydn-presets.d.ts +4 -0
- package/dist/theme/hydn-presets.d.ts.map +1 -0
- package/dist/theme/size-tokens.d.ts +686 -0
- package/dist/theme/size-tokens.d.ts.map +1 -0
- package/dist/theme/size-tokens.js +636 -0
- package/dist/theme/size-tokens.js.map +1 -0
- package/dist/theme/tokens.d.ts +116 -0
- package/dist/theme/tokens.d.ts.map +1 -0
- package/dist/theme/tokens.js +164 -0
- package/dist/theme/tokens.js.map +1 -0
- package/dist/utils/debounce.d.ts +7 -0
- package/dist/utils/debounce.d.ts.map +1 -0
- package/dist/utils/debounce.js +40 -0
- package/dist/utils/debounce.js.map +1 -0
- package/package.json +49 -43
- package/dist/index.cjs +0 -4425
- package/dist/index.cjs.map +0 -1
- package/dist/index.d.cts +0 -1170
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
import { jsxs, jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useState, useRef, useEffect } from "react";
|
|
3
|
+
import Calendar from "../calendar/calendar.js";
|
|
4
|
+
import { Icon } from "../../system/icon/icon.js";
|
|
5
|
+
import { interactiveSizes, getIconPixels } from "../../../theme/size-tokens.js";
|
|
6
|
+
function DatePicker({
|
|
7
|
+
value,
|
|
8
|
+
onChange,
|
|
9
|
+
minDate,
|
|
10
|
+
maxDate,
|
|
11
|
+
placeholder = "Select date",
|
|
12
|
+
disabled = false,
|
|
13
|
+
dateFormat = "MM/DD/YYYY",
|
|
14
|
+
clearable = true,
|
|
15
|
+
className = "",
|
|
16
|
+
size = "md"
|
|
17
|
+
}) {
|
|
18
|
+
const [isOpen, setIsOpen] = useState(false);
|
|
19
|
+
const [selectedDate, setSelectedDate] = useState(value);
|
|
20
|
+
const containerRef = useRef(null);
|
|
21
|
+
const inputRef = useRef(null);
|
|
22
|
+
useEffect(() => {
|
|
23
|
+
setSelectedDate(value);
|
|
24
|
+
}, [value]);
|
|
25
|
+
useEffect(() => {
|
|
26
|
+
const handleClickOutside = (event) => {
|
|
27
|
+
if (containerRef.current && !containerRef.current.contains(event.target)) {
|
|
28
|
+
setIsOpen(false);
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
if (isOpen) {
|
|
32
|
+
document.addEventListener("mousedown", handleClickOutside);
|
|
33
|
+
return () => document.removeEventListener("mousedown", handleClickOutside);
|
|
34
|
+
}
|
|
35
|
+
return void 0;
|
|
36
|
+
}, [isOpen]);
|
|
37
|
+
useEffect(() => {
|
|
38
|
+
const handleEscape = (event) => {
|
|
39
|
+
if (event.key === "Escape" && isOpen) {
|
|
40
|
+
setIsOpen(false);
|
|
41
|
+
inputRef.current?.focus();
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
if (isOpen) {
|
|
45
|
+
document.addEventListener("keydown", handleEscape);
|
|
46
|
+
return () => document.removeEventListener("keydown", handleEscape);
|
|
47
|
+
}
|
|
48
|
+
return void 0;
|
|
49
|
+
}, [isOpen]);
|
|
50
|
+
const formatDate = (date) => {
|
|
51
|
+
if (!date) return "";
|
|
52
|
+
const month = String(date.getMonth() + 1).padStart(2, "0");
|
|
53
|
+
const day = String(date.getDate()).padStart(2, "0");
|
|
54
|
+
const year = date.getFullYear();
|
|
55
|
+
return dateFormat.replace("MM", month).replace("DD", day).replace("YYYY", String(year)).replace("YY", String(year).slice(-2));
|
|
56
|
+
};
|
|
57
|
+
const handleDateSelect = (date) => {
|
|
58
|
+
setSelectedDate(date);
|
|
59
|
+
onChange?.(date);
|
|
60
|
+
setIsOpen(false);
|
|
61
|
+
inputRef.current?.focus();
|
|
62
|
+
};
|
|
63
|
+
const handleClear = (e) => {
|
|
64
|
+
e.stopPropagation();
|
|
65
|
+
setSelectedDate(void 0);
|
|
66
|
+
onChange?.(void 0);
|
|
67
|
+
inputRef.current?.focus();
|
|
68
|
+
};
|
|
69
|
+
const handleInputClick = () => {
|
|
70
|
+
if (!disabled) {
|
|
71
|
+
setIsOpen(!isOpen);
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
const handleKeyDown = (e) => {
|
|
75
|
+
if (e.key === "Enter" || e.key === " ") {
|
|
76
|
+
e.preventDefault();
|
|
77
|
+
setIsOpen(!isOpen);
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
function getBaseHeightClass(heightClasses) {
|
|
81
|
+
const classes = heightClasses.split(" ");
|
|
82
|
+
const base = classes.find((cls) => /^h-\d+/.test(cls));
|
|
83
|
+
return base || classes[0] || "";
|
|
84
|
+
}
|
|
85
|
+
const sizeConfig = interactiveSizes[size] || interactiveSizes.md;
|
|
86
|
+
const containerClasses = `${getBaseHeightClass(sizeConfig.height)} ${sizeConfig.padding}`;
|
|
87
|
+
const textClasses = sizeConfig.text;
|
|
88
|
+
const iconSize = getIconPixels(size, "desktop");
|
|
89
|
+
return /* @__PURE__ */ jsxs("div", { ref: containerRef, className: `relative w-full ${className}`, children: [
|
|
90
|
+
/* @__PURE__ */ jsxs(
|
|
91
|
+
"div",
|
|
92
|
+
{
|
|
93
|
+
className: `
|
|
94
|
+
w-full flex items-center justify-between gap-2
|
|
95
|
+
border border-input rounded-md
|
|
96
|
+
bg-background text-foreground
|
|
97
|
+
cursor-pointer
|
|
98
|
+
transition-all duration-200
|
|
99
|
+
${containerClasses}
|
|
100
|
+
${textClasses}
|
|
101
|
+
${isOpen ? "ring-2 ring-ring ring-offset-2" : "hover:border-ring"}
|
|
102
|
+
${disabled ? "opacity-50 cursor-not-allowed" : ""}
|
|
103
|
+
`.trim(),
|
|
104
|
+
onClick: handleInputClick,
|
|
105
|
+
role: "button",
|
|
106
|
+
tabIndex: disabled ? -1 : 0,
|
|
107
|
+
onKeyDown: handleKeyDown,
|
|
108
|
+
"aria-haspopup": "dialog",
|
|
109
|
+
"aria-expanded": isOpen,
|
|
110
|
+
"aria-label": "Date picker",
|
|
111
|
+
children: [
|
|
112
|
+
/* @__PURE__ */ jsx(
|
|
113
|
+
"input",
|
|
114
|
+
{
|
|
115
|
+
ref: inputRef,
|
|
116
|
+
type: "text",
|
|
117
|
+
value: formatDate(selectedDate),
|
|
118
|
+
placeholder,
|
|
119
|
+
readOnly: true,
|
|
120
|
+
disabled,
|
|
121
|
+
className: `flex-1 min-w-0 bg-transparent outline-none cursor-pointer placeholder:text-muted-foreground ${textClasses}`,
|
|
122
|
+
"aria-label": "Selected date"
|
|
123
|
+
}
|
|
124
|
+
),
|
|
125
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1 shrink-0", children: [
|
|
126
|
+
clearable && selectedDate && !disabled ? /* @__PURE__ */ jsx(
|
|
127
|
+
"button",
|
|
128
|
+
{
|
|
129
|
+
type: "button",
|
|
130
|
+
onClick: handleClear,
|
|
131
|
+
className: "p-1 hover:bg-muted rounded transition-colors shrink-0",
|
|
132
|
+
"aria-label": "Clear date",
|
|
133
|
+
children: /* @__PURE__ */ jsxs(
|
|
134
|
+
"svg",
|
|
135
|
+
{
|
|
136
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
137
|
+
width: iconSize - 2,
|
|
138
|
+
height: iconSize - 2,
|
|
139
|
+
viewBox: "0 0 24 24",
|
|
140
|
+
fill: "none",
|
|
141
|
+
stroke: "currentColor",
|
|
142
|
+
strokeWidth: "2",
|
|
143
|
+
strokeLinecap: "round",
|
|
144
|
+
strokeLinejoin: "round",
|
|
145
|
+
children: [
|
|
146
|
+
/* @__PURE__ */ jsx("line", { x1: "18", y1: "6", x2: "6", y2: "18" }),
|
|
147
|
+
/* @__PURE__ */ jsx("line", { x1: "6", y1: "6", x2: "18", y2: "18" })
|
|
148
|
+
]
|
|
149
|
+
}
|
|
150
|
+
)
|
|
151
|
+
}
|
|
152
|
+
) : clearable ? /* @__PURE__ */ jsx("div", { className: "w-6 h-6 shrink-0" }) : null,
|
|
153
|
+
/* @__PURE__ */ jsx(Icon, { name: "calendar", size, className: "text-muted-foreground shrink-0" })
|
|
154
|
+
] })
|
|
155
|
+
]
|
|
156
|
+
}
|
|
157
|
+
),
|
|
158
|
+
isOpen && !disabled && /* @__PURE__ */ jsx(
|
|
159
|
+
"div",
|
|
160
|
+
{
|
|
161
|
+
className: "absolute left-0 top-full mt-2 z-50 animate-scaleIn origin-top",
|
|
162
|
+
role: "dialog",
|
|
163
|
+
"aria-label": "Calendar",
|
|
164
|
+
children: /* @__PURE__ */ jsx(Calendar, { value: selectedDate, onChange: handleDateSelect, minDate, maxDate })
|
|
165
|
+
}
|
|
166
|
+
)
|
|
167
|
+
] });
|
|
168
|
+
}
|
|
169
|
+
DatePicker.displayName = "DatePicker";
|
|
170
|
+
export {
|
|
171
|
+
DatePicker as default
|
|
172
|
+
};
|
|
173
|
+
//# sourceMappingURL=date-picker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"date-picker.js","sources":["../../../../src/components/forms/date-picker/date-picker.tsx"],"sourcesContent":["import { useState, useRef, useEffect } from 'react';\nimport Calendar from '../calendar/calendar';\nimport Icon from '../../system/icon/icon';\nimport { interactiveSizes, getIconPixels, type InteractiveSize } from '../../../theme/size-tokens';\n\nexport type DatePickerProps = {\n /**\n * The currently selected date\n */\n value?: Date;\n /**\n * Callback when a date is selected\n */\n onChange?: (date: Date | undefined) => void;\n /**\n * Minimum selectable date\n */\n minDate?: Date;\n /**\n * Maximum selectable date\n */\n maxDate?: Date;\n /**\n * Placeholder text when no date is selected\n */\n placeholder?: string;\n /**\n * Disabled state\n */\n disabled?: boolean;\n /**\n * Date format string (default: 'MM/DD/YYYY')\n */\n dateFormat?: string;\n /**\n * Show clear button\n */\n clearable?: boolean;\n /**\n * Additional CSS classes\n */\n className?: string;\n /**\n * Input size - uses unified size system\n */\n size?: InteractiveSize;\n};\n\n/**\n * DatePicker - Input field with calendar popup for date selection\n *\n * Features:\n * - Calendar popup on click\n * - Keyboard navigation (Arrow keys, Enter, Escape)\n * - Date formatting\n * - Min/max date constraints\n * - Clearable option\n * - Accessible with proper ARIA labels\n *\n * @example\n * ```tsx\n * const [date, setDate] = useState<Date>();\n *\n * <DatePicker\n * value={date}\n * onChange={setDate}\n * placeholder=\"Select a date\"\n * clearable\n * />\n * ```\n */\nfunction DatePicker({\n value,\n onChange,\n minDate,\n maxDate,\n placeholder = 'Select date',\n disabled = false,\n dateFormat = 'MM/DD/YYYY',\n clearable = true,\n className = '',\n size = 'md'\n}: Readonly<DatePickerProps>) {\n const [isOpen, setIsOpen] = useState(false);\n const [selectedDate, setSelectedDate] = useState<Date | undefined>(value);\n const containerRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n\n // Update internal state when value prop changes\n useEffect(() => {\n setSelectedDate(value);\n }, [value]);\n\n // Close calendar on click outside\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (containerRef.current && !containerRef.current.contains(event.target as Node)) {\n setIsOpen(false);\n }\n };\n\n if (isOpen) {\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }\n return undefined;\n }, [isOpen]);\n\n // Close on Escape key\n useEffect(() => {\n const handleEscape = (event: KeyboardEvent) => {\n if (event.key === 'Escape' && isOpen) {\n setIsOpen(false);\n inputRef.current?.focus();\n }\n };\n\n if (isOpen) {\n document.addEventListener('keydown', handleEscape);\n return () => document.removeEventListener('keydown', handleEscape);\n }\n return undefined;\n }, [isOpen]);\n\n const formatDate = (date: Date | undefined): string => {\n if (!date) return '';\n\n const month = String(date.getMonth() + 1).padStart(2, '0');\n const day = String(date.getDate()).padStart(2, '0');\n const year = date.getFullYear();\n\n // Simple format replacement\n return dateFormat\n .replace('MM', month)\n .replace('DD', day)\n .replace('YYYY', String(year))\n .replace('YY', String(year).slice(-2));\n };\n\n const handleDateSelect = (date: Date) => {\n setSelectedDate(date);\n onChange?.(date);\n setIsOpen(false);\n inputRef.current?.focus();\n };\n\n const handleClear = (e: React.MouseEvent) => {\n e.stopPropagation();\n setSelectedDate(undefined);\n onChange?.(undefined);\n inputRef.current?.focus();\n };\n\n const handleInputClick = () => {\n if (!disabled) {\n setIsOpen(!isOpen);\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n setIsOpen(!isOpen);\n }\n };\n\n // Utility to extract the base (non-responsive) height class\n function getBaseHeightClass(heightClasses: string): string {\n // Match 'h-...' not prefixed by a colon (responsive variant)\n const classes = heightClasses.split(' ');\n const base = classes.find((cls) => /^h-\\d+/.test(cls));\n return base || classes[0] || '';\n }\n\n // Use unified interactive sizes\n const sizeConfig = interactiveSizes[size] || interactiveSizes.md;\n const containerClasses = `${getBaseHeightClass(sizeConfig.height)} ${sizeConfig.padding}`;\n const textClasses = sizeConfig.text;\n const iconSize = getIconPixels(size, 'desktop');\n\n return (\n <div ref={containerRef} className={`relative w-full ${className}`}>\n {/* Input field */}\n <div\n className={`\n w-full flex items-center justify-between gap-2\n border border-input rounded-md\n bg-background text-foreground\n cursor-pointer\n transition-all duration-200\n ${containerClasses}\n ${textClasses}\n ${isOpen ? 'ring-2 ring-ring ring-offset-2' : 'hover:border-ring'}\n ${disabled ? 'opacity-50 cursor-not-allowed' : ''}\n `.trim()}\n onClick={handleInputClick}\n role=\"button\"\n tabIndex={disabled ? -1 : 0}\n onKeyDown={handleKeyDown}\n aria-haspopup=\"dialog\"\n aria-expanded={isOpen}\n aria-label=\"Date picker\"\n >\n <input\n ref={inputRef}\n type=\"text\"\n value={formatDate(selectedDate)}\n placeholder={placeholder}\n readOnly\n disabled={disabled}\n className={`flex-1 min-w-0 bg-transparent outline-none cursor-pointer placeholder:text-muted-foreground ${textClasses}`}\n aria-label=\"Selected date\"\n />\n\n <div className=\"flex items-center gap-1 shrink-0\">\n {clearable && selectedDate && !disabled ? (\n <button\n type=\"button\"\n onClick={handleClear}\n className=\"p-1 hover:bg-muted rounded transition-colors shrink-0\"\n aria-label=\"Clear date\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={iconSize - 2}\n height={iconSize - 2}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n </button>\n ) : clearable ? (\n <div className=\"w-6 h-6 shrink-0\" />\n ) : null}\n <Icon name=\"calendar\" size={size} className=\"text-muted-foreground shrink-0\" />\n </div>\n </div>\n\n {/* Calendar popup */}\n {isOpen && !disabled && (\n <div\n className=\"absolute left-0 top-full mt-2 z-50 animate-scaleIn origin-top\"\n role=\"dialog\"\n aria-label=\"Calendar\"\n >\n <Calendar value={selectedDate} onChange={handleDateSelect} minDate={minDate} maxDate={maxDate} />\n </div>\n )}\n </div>\n );\n}\n\nDatePicker.displayName = 'DatePicker';\n\nexport default DatePicker;\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/forms/date-picker/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,YAAY,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { TextSize, ValidationState } from '../../../theme/size-tokens';
|
|
2
|
+
export type EditableTextProps = {
|
|
3
|
+
/** Current value (controlled) */
|
|
4
|
+
value?: string;
|
|
5
|
+
/** Default value for uncontrolled mode */
|
|
6
|
+
defaultValue?: string;
|
|
7
|
+
/** Callback when save is clicked - receives the new value */
|
|
8
|
+
onSave?: (value: string) => void;
|
|
9
|
+
/** Callback when value changes - for controlled mode */
|
|
10
|
+
onChange?: (value: string) => void;
|
|
11
|
+
/** Callback when cancel is clicked */
|
|
12
|
+
onCancel?: () => void;
|
|
13
|
+
/** Callback when edit mode is entered */
|
|
14
|
+
onEdit?: () => void;
|
|
15
|
+
/** Placeholder text shown when value is empty */
|
|
16
|
+
placeholder?: string;
|
|
17
|
+
/** Disables editing */
|
|
18
|
+
disabled?: boolean;
|
|
19
|
+
/** Size variant - uses unified size system */
|
|
20
|
+
size?: TextSize;
|
|
21
|
+
/** Validation state */
|
|
22
|
+
validationState?: ValidationState;
|
|
23
|
+
/** Custom CSS classes for the display text */
|
|
24
|
+
className?: string;
|
|
25
|
+
/** HTML id attribute */
|
|
26
|
+
id?: string;
|
|
27
|
+
/** HTML name attribute */
|
|
28
|
+
name?: string;
|
|
29
|
+
/** Required field */
|
|
30
|
+
required?: boolean;
|
|
31
|
+
/** Auto-focus input when entering edit mode */
|
|
32
|
+
autoFocus?: boolean;
|
|
33
|
+
/** Maximum length of input value */
|
|
34
|
+
maxLength?: number;
|
|
35
|
+
/** Save on Enter key (default: true, only for single-line) */
|
|
36
|
+
saveOnEnter?: boolean;
|
|
37
|
+
/** Save the current edit when the input blurs (default: true). If false, blur will cancel. */
|
|
38
|
+
saveOnBlur?: boolean;
|
|
39
|
+
/** Whether the text is editable. If false, component will not render as input field */
|
|
40
|
+
isEditable?: boolean;
|
|
41
|
+
};
|
|
42
|
+
/**
|
|
43
|
+
* EditableText - Click-to-edit text display with save/cancel actions
|
|
44
|
+
*
|
|
45
|
+
* Displays text that becomes editable when clicked.
|
|
46
|
+
*
|
|
47
|
+
* @example
|
|
48
|
+
* ```tsx
|
|
49
|
+
* <EditableText
|
|
50
|
+
* value={name}
|
|
51
|
+
* onSave={(newValue) => updateName(newValue)}
|
|
52
|
+
* placeholder="Enter name"
|
|
53
|
+
* />
|
|
54
|
+
* ```
|
|
55
|
+
*/
|
|
56
|
+
export default function EditableText({ value: controlledValue, defaultValue, onSave, onChange, onCancel, onEdit, placeholder, disabled, size, validationState, className, id, name, required, autoFocus, maxLength, saveOnEnter, isEditable,
|
|
57
|
+
/** Save the current edit when the input blurs (default: true). If false, blur will cancel. */
|
|
58
|
+
saveOnBlur }: EditableTextProps): import("react/jsx-runtime").JSX.Element;
|
|
59
|
+
//# sourceMappingURL=editable-text.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"editable-text.d.ts","sourceRoot":"","sources":["../../../../src/components/forms/editable-text/editable-text.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAa,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAIlF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,iCAAiC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0CAA0C;IAC1C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,6DAA6D;IAC7D,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,wDAAwD;IACxD,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,sCAAsC;IACtC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,yCAAyC;IACzC,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,iDAAiD;IACjD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uBAAuB;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,8CAA8C;IAC9C,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,uBAAuB;IACvB,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,8CAA8C;IAC9C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wBAAwB;IACxB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,0BAA0B;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,qBAAqB;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,+CAA+C;IAC/C,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,oCAAoC;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,8DAA8D;IAC9D,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,8FAA8F;IAC9F,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,uFAAuF;IACvF,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,EACnC,KAAK,EAAE,eAAe,EACtB,YAAiB,EACjB,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,MAAM,EACN,WAA6B,EAC7B,QAAgB,EAChB,IAAa,EACb,eAA2B,EAC3B,SAAc,EACd,EAAE,EACF,IAAI,EACJ,QAAgB,EAChB,SAAgB,EAChB,SAAS,EACT,WAAkB,EAClB,UAAiB;AACjB,8FAA8F;AAC9F,UAAiB,EAClB,EAAE,iBAAiB,2CA0LnB"}
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
import { jsxs, jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useState, useRef, useEffect } from "react";
|
|
3
|
+
import { textSizes } from "../../../theme/size-tokens.js";
|
|
4
|
+
import IconButton from "../button/icon-button.js";
|
|
5
|
+
import { Icon } from "../../system/icon/icon.js";
|
|
6
|
+
function EditableText({
|
|
7
|
+
value: controlledValue,
|
|
8
|
+
defaultValue = "",
|
|
9
|
+
onSave,
|
|
10
|
+
onChange,
|
|
11
|
+
onCancel,
|
|
12
|
+
onEdit,
|
|
13
|
+
placeholder = "Click to edit",
|
|
14
|
+
disabled = false,
|
|
15
|
+
size = "base",
|
|
16
|
+
validationState = "neutral",
|
|
17
|
+
className = "",
|
|
18
|
+
id,
|
|
19
|
+
name,
|
|
20
|
+
required = false,
|
|
21
|
+
autoFocus = true,
|
|
22
|
+
maxLength,
|
|
23
|
+
saveOnEnter = true,
|
|
24
|
+
isEditable = true,
|
|
25
|
+
/** Save the current edit when the input blurs (default: true). If false, blur will cancel. */
|
|
26
|
+
saveOnBlur = true
|
|
27
|
+
}) {
|
|
28
|
+
const isControlled = controlledValue !== void 0;
|
|
29
|
+
const [internalValue, setInternalValue] = useState(defaultValue);
|
|
30
|
+
const [isEditing, setIsEditing] = useState(false);
|
|
31
|
+
const [editValue, setEditValue] = useState("");
|
|
32
|
+
const inputRef = useRef(null);
|
|
33
|
+
const canvasRef = useRef(null);
|
|
34
|
+
const adjustInputWidth = () => {
|
|
35
|
+
const el = inputRef.current;
|
|
36
|
+
if (!el) return;
|
|
37
|
+
if (!canvasRef.current) canvasRef.current = document.createElement("canvas");
|
|
38
|
+
const ctx = canvasRef.current.getContext("2d");
|
|
39
|
+
if (!ctx) return;
|
|
40
|
+
const style = window.getComputedStyle(el);
|
|
41
|
+
ctx.font = style.font || `${style.fontSize} ${style.fontFamily}`;
|
|
42
|
+
const text = editValue || placeholder || "";
|
|
43
|
+
const measured = Math.ceil(ctx.measureText(text).width) + 16;
|
|
44
|
+
el.style.width = `${Math.max(48, measured)}px`;
|
|
45
|
+
};
|
|
46
|
+
const currentValue = isControlled ? controlledValue : internalValue;
|
|
47
|
+
useEffect(() => {
|
|
48
|
+
if (isEditing && autoFocus && inputRef.current) {
|
|
49
|
+
inputRef.current.focus();
|
|
50
|
+
inputRef.current.select();
|
|
51
|
+
adjustInputWidth();
|
|
52
|
+
}
|
|
53
|
+
}, [isEditing, autoFocus]);
|
|
54
|
+
useEffect(() => {
|
|
55
|
+
if (isEditing) adjustInputWidth();
|
|
56
|
+
}, [editValue, placeholder, isEditing]);
|
|
57
|
+
const handleClick = () => {
|
|
58
|
+
if (disabled || !isEditable) return;
|
|
59
|
+
setEditValue(currentValue);
|
|
60
|
+
setIsEditing(true);
|
|
61
|
+
onEdit?.();
|
|
62
|
+
};
|
|
63
|
+
const handleSave = () => {
|
|
64
|
+
const trimmedValue = editValue.trim();
|
|
65
|
+
if (!isControlled) {
|
|
66
|
+
setInternalValue(trimmedValue);
|
|
67
|
+
}
|
|
68
|
+
onSave?.(trimmedValue);
|
|
69
|
+
onChange?.(trimmedValue);
|
|
70
|
+
setIsEditing(false);
|
|
71
|
+
};
|
|
72
|
+
const handleCancel = () => {
|
|
73
|
+
setEditValue(currentValue);
|
|
74
|
+
setIsEditing(false);
|
|
75
|
+
onCancel?.();
|
|
76
|
+
};
|
|
77
|
+
const handleKeyDown = (e) => {
|
|
78
|
+
if (e.key === "Escape") {
|
|
79
|
+
e.preventDefault();
|
|
80
|
+
handleCancel();
|
|
81
|
+
} else if (e.key === "Enter" && saveOnEnter && !e.shiftKey && !e.ctrlKey && !e.metaKey) {
|
|
82
|
+
e.preventDefault();
|
|
83
|
+
handleSave();
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
const handleBlur = (e) => {
|
|
87
|
+
setTimeout(() => {
|
|
88
|
+
const relatedTarget = e.relatedTarget;
|
|
89
|
+
const isClickingButton = relatedTarget?.closest("[data-editable-actions]");
|
|
90
|
+
if (isClickingButton) return;
|
|
91
|
+
if (saveOnBlur) {
|
|
92
|
+
handleSave();
|
|
93
|
+
} else {
|
|
94
|
+
handleCancel();
|
|
95
|
+
}
|
|
96
|
+
}, 0);
|
|
97
|
+
};
|
|
98
|
+
const handleChange = (e) => {
|
|
99
|
+
setEditValue(e.target.value);
|
|
100
|
+
};
|
|
101
|
+
const sizeConfig = textSizes[size] || textSizes["base"];
|
|
102
|
+
if (isEditing) {
|
|
103
|
+
const validationBorder = {
|
|
104
|
+
neutral: "border-b-foreground/30 focus:border-b-foreground",
|
|
105
|
+
error: "border-b-error focus:border-b-error",
|
|
106
|
+
success: "border-b-success focus:border-b-success",
|
|
107
|
+
warning: "border-b-warning focus:border-b-warning"
|
|
108
|
+
}[validationState];
|
|
109
|
+
const commonProps = {
|
|
110
|
+
ref: inputRef,
|
|
111
|
+
value: editValue,
|
|
112
|
+
onChange: handleChange,
|
|
113
|
+
onKeyDown: handleKeyDown,
|
|
114
|
+
onBlur: handleBlur,
|
|
115
|
+
placeholder,
|
|
116
|
+
disabled,
|
|
117
|
+
id,
|
|
118
|
+
name,
|
|
119
|
+
required,
|
|
120
|
+
maxLength,
|
|
121
|
+
className: `${sizeConfig} border-0 border-b ${validationBorder} bg-transparent py-1 outline-none transition-colors placeholder:text-muted-foreground inline-block`
|
|
122
|
+
};
|
|
123
|
+
return /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
|
|
124
|
+
/* @__PURE__ */ jsx("input", { ...commonProps, type: "text" }),
|
|
125
|
+
/* @__PURE__ */ jsxs("div", { "data-editable-actions": true, className: "flex items-center gap-1", children: [
|
|
126
|
+
/* @__PURE__ */ jsx(
|
|
127
|
+
IconButton,
|
|
128
|
+
{
|
|
129
|
+
icon: "IconX",
|
|
130
|
+
ariaLabel: "Cancel",
|
|
131
|
+
onClick: handleCancel,
|
|
132
|
+
variant: "error",
|
|
133
|
+
size: "xs",
|
|
134
|
+
iconSize: "sm",
|
|
135
|
+
buttonStyle: "ghost"
|
|
136
|
+
}
|
|
137
|
+
),
|
|
138
|
+
/* @__PURE__ */ jsx(
|
|
139
|
+
IconButton,
|
|
140
|
+
{
|
|
141
|
+
icon: "IconCheck",
|
|
142
|
+
ariaLabel: "Save",
|
|
143
|
+
onClick: handleSave,
|
|
144
|
+
variant: "success",
|
|
145
|
+
size: "xs",
|
|
146
|
+
iconSize: "sm",
|
|
147
|
+
buttonStyle: "ghost"
|
|
148
|
+
}
|
|
149
|
+
)
|
|
150
|
+
] })
|
|
151
|
+
] });
|
|
152
|
+
}
|
|
153
|
+
const displayText = currentValue || placeholder;
|
|
154
|
+
const isPlaceholder = !currentValue;
|
|
155
|
+
if (!isEditable) {
|
|
156
|
+
return /* @__PURE__ */ jsx(
|
|
157
|
+
"span",
|
|
158
|
+
{
|
|
159
|
+
className: `${sizeConfig} ${className} inline-flex items-center gap-2 py-1 text-left ${isPlaceholder ? "text-muted-foreground" : "text-foreground"} w-fit max-w-full`,
|
|
160
|
+
children: /* @__PURE__ */ jsx("span", { className: "flex-1", children: displayText })
|
|
161
|
+
}
|
|
162
|
+
);
|
|
163
|
+
}
|
|
164
|
+
return /* @__PURE__ */ jsxs(
|
|
165
|
+
"button",
|
|
166
|
+
{
|
|
167
|
+
type: "button",
|
|
168
|
+
onClick: handleClick,
|
|
169
|
+
disabled,
|
|
170
|
+
className: `group ${sizeConfig} ${className} relative inline-flex items-center gap-2 cursor-text border-b border-transparent py-1 text-left transition-all hover:border-b-foreground/30 focus:outline-none focus:ring-2 focus:ring-ring/20 focus:rounded disabled:cursor-not-allowed disabled:opacity-50 ${isPlaceholder ? "text-muted-foreground" : "text-foreground"} w-fit max-w-full`,
|
|
171
|
+
children: [
|
|
172
|
+
/* @__PURE__ */ jsx("span", { className: "flex-1", children: displayText }),
|
|
173
|
+
/* @__PURE__ */ jsx(
|
|
174
|
+
Icon,
|
|
175
|
+
{
|
|
176
|
+
name: "IconPencil",
|
|
177
|
+
className: "shrink-0 opacity-20 transition-opacity group-hover:opacity-60 group-focus:opacity-60",
|
|
178
|
+
size: "xs"
|
|
179
|
+
}
|
|
180
|
+
)
|
|
181
|
+
]
|
|
182
|
+
}
|
|
183
|
+
);
|
|
184
|
+
}
|
|
185
|
+
export {
|
|
186
|
+
EditableText as default
|
|
187
|
+
};
|
|
188
|
+
//# sourceMappingURL=editable-text.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"editable-text.js","sources":["../../../../src/components/forms/editable-text/editable-text.tsx"],"sourcesContent":["import React, { useEffect, useRef, useState } from 'react';\n\nimport { TextSize, textSizes, ValidationState } from '../../../theme/size-tokens';\nimport IconButton from '../button/icon-button';\nimport { Icon } from '../../system/icon';\n\nexport type EditableTextProps = {\n /** Current value (controlled) */\n value?: string;\n /** Default value for uncontrolled mode */\n defaultValue?: string;\n /** Callback when save is clicked - receives the new value */\n onSave?: (value: string) => void;\n /** Callback when value changes - for controlled mode */\n onChange?: (value: string) => void;\n /** Callback when cancel is clicked */\n onCancel?: () => void;\n /** Callback when edit mode is entered */\n onEdit?: () => void;\n /** Placeholder text shown when value is empty */\n placeholder?: string;\n /** Disables editing */\n disabled?: boolean;\n /** Size variant - uses unified size system */\n size?: TextSize;\n /** Validation state */\n validationState?: ValidationState;\n /** Custom CSS classes for the display text */\n className?: string;\n /** HTML id attribute */\n id?: string;\n /** HTML name attribute */\n name?: string;\n /** Required field */\n required?: boolean;\n /** Auto-focus input when entering edit mode */\n autoFocus?: boolean;\n /** Maximum length of input value */\n maxLength?: number;\n /** Save on Enter key (default: true, only for single-line) */\n saveOnEnter?: boolean;\n /** Save the current edit when the input blurs (default: true). If false, blur will cancel. */\n saveOnBlur?: boolean;\n /** Whether the text is editable. If false, component will not render as input field */\n isEditable?: boolean;\n};\n\n/**\n * EditableText - Click-to-edit text display with save/cancel actions\n *\n * Displays text that becomes editable when clicked.\n *\n * @example\n * ```tsx\n * <EditableText\n * value={name}\n * onSave={(newValue) => updateName(newValue)}\n * placeholder=\"Enter name\"\n * />\n * ```\n */\nexport default function EditableText({\n value: controlledValue,\n defaultValue = '',\n onSave,\n onChange,\n onCancel,\n onEdit,\n placeholder = 'Click to edit',\n disabled = false,\n size = 'base',\n validationState = 'neutral',\n className = '',\n id,\n name,\n required = false,\n autoFocus = true,\n maxLength,\n saveOnEnter = true,\n isEditable = true,\n /** Save the current edit when the input blurs (default: true). If false, blur will cancel. */\n saveOnBlur = true\n}: EditableTextProps) {\n const isControlled = controlledValue !== undefined;\n const [internalValue, setInternalValue] = useState(defaultValue);\n const [isEditing, setIsEditing] = useState(false);\n const [editValue, setEditValue] = useState('');\n const inputRef = useRef<HTMLInputElement | HTMLTextAreaElement>(null);\n // Offscreen canvas for measuring text width without touching the DOM\n const canvasRef = useRef<HTMLCanvasElement | null>(null);\n\n // Adjust input width to match content so it doesn't push action icons too far.\n const adjustInputWidth = () => {\n const el = inputRef.current as HTMLInputElement | null;\n if (!el) return;\n // Use an offscreen canvas to measure text width to avoid DOM layout/paint\n if (!canvasRef.current) canvasRef.current = document.createElement('canvas');\n const ctx = canvasRef.current.getContext('2d');\n if (!ctx) return;\n\n const style = window.getComputedStyle(el);\n // Set canvas font to match the input's computed font so measureText is comparable\n ctx.font = style.font || `${style.fontSize} ${style.fontFamily}`;\n const text = editValue || placeholder || '';\n const measured = Math.ceil(ctx.measureText(text).width) + 16;\n el.style.width = `${Math.max(48, measured)}px`;\n };\n\n const currentValue = isControlled ? controlledValue : internalValue;\n\n useEffect(() => {\n if (isEditing && autoFocus && inputRef.current) {\n inputRef.current.focus();\n // Select all text for easy replacement\n inputRef.current.select();\n // ensure width matches current content when entering edit mode\n adjustInputWidth();\n }\n // We intentionally omit adjustInputWidth, editValue, and placeholder from deps here.\n // adjustInputWidth is defined in the component scope and only reads refs/state;\n // it's safe to omit from deps to keep this effect stable.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isEditing, autoFocus]);\n\n useEffect(() => {\n if (isEditing) adjustInputWidth();\n // adjustInputWidth is stable for this effect and only depends on editValue/placeholder/inputRef,\n // which are already captured by the dependency list.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [editValue, placeholder, isEditing]);\n\n const handleClick = () => {\n if (disabled || !isEditable) return;\n setEditValue(currentValue);\n setIsEditing(true);\n onEdit?.();\n };\n\n const handleSave = () => {\n const trimmedValue = editValue.trim();\n if (!isControlled) {\n setInternalValue(trimmedValue);\n }\n onSave?.(trimmedValue);\n onChange?.(trimmedValue);\n setIsEditing(false);\n };\n\n const handleCancel = () => {\n setEditValue(currentValue);\n setIsEditing(false);\n onCancel?.();\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Escape') {\n e.preventDefault();\n handleCancel();\n } else if (e.key === 'Enter' && saveOnEnter && !e.shiftKey && !e.ctrlKey && !e.metaKey) {\n e.preventDefault();\n handleSave();\n }\n };\n\n const handleBlur = (e: React.FocusEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n // Check if the blur is due to clicking within our container (Save/Cancel buttons)\n // Use setTimeout to let the click event complete first\n setTimeout(() => {\n // If we're still in editing mode and the related target isn't our container, cancel\n const relatedTarget = e.relatedTarget as HTMLElement;\n const isClickingButton = relatedTarget?.closest('[data-editable-actions]');\n if (isClickingButton) return;\n\n if (saveOnBlur) {\n handleSave();\n } else {\n handleCancel();\n }\n }, 0);\n };\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n setEditValue(e.target.value);\n };\n\n const sizeConfig = textSizes[size as TextSize] || textSizes['base'];\n\n if (isEditing) {\n const validationBorder = {\n neutral: 'border-b-foreground/30 focus:border-b-foreground',\n error: 'border-b-error focus:border-b-error',\n success: 'border-b-success focus:border-b-success',\n warning: 'border-b-warning focus:border-b-warning'\n }[validationState];\n\n const commonProps = {\n ref: inputRef as never,\n value: editValue,\n onChange: handleChange,\n onKeyDown: handleKeyDown,\n onBlur: handleBlur,\n placeholder,\n disabled,\n id,\n name,\n required,\n maxLength,\n className: `${sizeConfig} border-0 border-b ${validationBorder} bg-transparent py-1 outline-none transition-colors placeholder:text-muted-foreground inline-block`\n };\n\n return (\n <div className=\"flex items-center gap-2\">\n <input {...commonProps} type=\"text\" />\n\n <div data-editable-actions className=\"flex items-center gap-1\">\n <IconButton\n icon=\"IconX\"\n ariaLabel=\"Cancel\"\n onClick={handleCancel}\n variant=\"error\"\n size=\"xs\"\n iconSize=\"sm\"\n buttonStyle=\"ghost\"\n />\n <IconButton\n icon=\"IconCheck\"\n ariaLabel=\"Save\"\n onClick={handleSave}\n variant=\"success\"\n size=\"xs\"\n iconSize=\"sm\"\n buttonStyle=\"ghost\"\n />\n </div>\n </div>\n );\n }\n\n const displayText = currentValue || placeholder;\n const isPlaceholder = !currentValue;\n\n // If editing is disabled via `isEditable`, render static text only.\n // This is useful for system-default fields that should be visible but not editable.\n if (!isEditable) {\n return (\n <span\n className={`${sizeConfig} ${className} inline-flex items-center gap-2 py-1 text-left ${isPlaceholder ? 'text-muted-foreground' : 'text-foreground'} w-fit max-w-full`}\n >\n <span className=\"flex-1\">{displayText}</span>\n </span>\n );\n }\n\n return (\n <button\n type=\"button\"\n onClick={handleClick}\n disabled={disabled}\n className={`group ${sizeConfig} ${className} relative inline-flex items-center gap-2 cursor-text border-b border-transparent py-1 text-left transition-all hover:border-b-foreground/30 focus:outline-none focus:ring-2 focus:ring-ring/20 focus:rounded disabled:cursor-not-allowed disabled:opacity-50 ${isPlaceholder ? 'text-muted-foreground' : 'text-foreground'} w-fit max-w-full`}\n >\n <span className=\"flex-1\">{displayText}</span>\n <Icon\n name=\"IconPencil\"\n className=\"shrink-0 opacity-20 transition-opacity group-hover:opacity-60 group-focus:opacity-60\"\n size=\"xs\"\n />\n </button>\n );\n}\n"],"names":[],"mappings":";;;;;AA6DA,SAAwB,aAAa;AAAA,EACnC,OAAO;AAAA,EACP,eAAe;AAAA,EACf;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,cAAc;AAAA,EACd,WAAW;AAAA,EACX,OAAO;AAAA,EACP,kBAAkB;AAAA,EAClB,YAAY;AAAA,EACZ;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX,YAAY;AAAA,EACZ;AAAA,EACA,cAAc;AAAA,EACd,aAAa;AAAA;AAAA,EAEb,aAAa;AACf,GAAsB;AACpB,QAAM,eAAe,oBAAoB;AACzC,QAAM,CAAC,eAAe,gBAAgB,IAAI,SAAS,YAAY;AAC/D,QAAM,CAAC,WAAW,YAAY,IAAI,SAAS,KAAK;AAChD,QAAM,CAAC,WAAW,YAAY,IAAI,SAAS,EAAE;AAC7C,QAAM,WAAW,OAA+C,IAAI;AAEpE,QAAM,YAAY,OAAiC,IAAI;AAGvD,QAAM,mBAAmB,MAAM;AAC7B,UAAM,KAAK,SAAS;AACpB,QAAI,CAAC,GAAI;AAET,QAAI,CAAC,UAAU,mBAAmB,UAAU,SAAS,cAAc,QAAQ;AAC3E,UAAM,MAAM,UAAU,QAAQ,WAAW,IAAI;AAC7C,QAAI,CAAC,IAAK;AAEV,UAAM,QAAQ,OAAO,iBAAiB,EAAE;AAExC,QAAI,OAAO,MAAM,QAAQ,GAAG,MAAM,QAAQ,IAAI,MAAM,UAAU;AAC9D,UAAM,OAAO,aAAa,eAAe;AACzC,UAAM,WAAW,KAAK,KAAK,IAAI,YAAY,IAAI,EAAE,KAAK,IAAI;AAC1D,OAAG,MAAM,QAAQ,GAAG,KAAK,IAAI,IAAI,QAAQ,CAAC;AAAA,EAC5C;AAEA,QAAM,eAAe,eAAe,kBAAkB;AAEtD,YAAU,MAAM;AACd,QAAI,aAAa,aAAa,SAAS,SAAS;AAC9C,eAAS,QAAQ,MAAA;AAEjB,eAAS,QAAQ,OAAA;AAEjB,uBAAA;AAAA,IACF;AAAA,EAKF,GAAG,CAAC,WAAW,SAAS,CAAC;AAEzB,YAAU,MAAM;AACd,QAAI,UAAW,kBAAA;AAAA,EAIjB,GAAG,CAAC,WAAW,aAAa,SAAS,CAAC;AAEtC,QAAM,cAAc,MAAM;AACxB,QAAI,YAAY,CAAC,WAAY;AAC7B,iBAAa,YAAY;AACzB,iBAAa,IAAI;AACjB,aAAA;AAAA,EACF;AAEA,QAAM,aAAa,MAAM;AACvB,UAAM,eAAe,UAAU,KAAA;AAC/B,QAAI,CAAC,cAAc;AACjB,uBAAiB,YAAY;AAAA,IAC/B;AACA,aAAS,YAAY;AACrB,eAAW,YAAY;AACvB,iBAAa,KAAK;AAAA,EACpB;AAEA,QAAM,eAAe,MAAM;AACzB,iBAAa,YAAY;AACzB,iBAAa,KAAK;AAClB,eAAA;AAAA,EACF;AAEA,QAAM,gBAAgB,CAAC,MAA2B;AAChD,QAAI,EAAE,QAAQ,UAAU;AACtB,QAAE,eAAA;AACF,mBAAA;AAAA,IACF,WAAW,EAAE,QAAQ,WAAW,eAAe,CAAC,EAAE,YAAY,CAAC,EAAE,WAAW,CAAC,EAAE,SAAS;AACtF,QAAE,eAAA;AACF,iBAAA;AAAA,IACF;AAAA,EACF;AAEA,QAAM,aAAa,CAAC,MAAgE;AAGlF,eAAW,MAAM;AAEf,YAAM,gBAAgB,EAAE;AACxB,YAAM,mBAAmB,eAAe,QAAQ,yBAAyB;AACzE,UAAI,iBAAkB;AAEtB,UAAI,YAAY;AACd,mBAAA;AAAA,MACF,OAAO;AACL,qBAAA;AAAA,MACF;AAAA,IACF,GAAG,CAAC;AAAA,EACN;AAEA,QAAM,eAAe,CAAC,MAAiE;AACrF,iBAAa,EAAE,OAAO,KAAK;AAAA,EAC7B;AAEA,QAAM,aAAa,UAAU,IAAgB,KAAK,UAAU,MAAM;AAElE,MAAI,WAAW;AACb,UAAM,mBAAmB;AAAA,MACvB,SAAS;AAAA,MACT,OAAO;AAAA,MACP,SAAS;AAAA,MACT,SAAS;AAAA,IAAA,EACT,eAAe;AAEjB,UAAM,cAAc;AAAA,MAClB,KAAK;AAAA,MACL,OAAO;AAAA,MACP,UAAU;AAAA,MACV,WAAW;AAAA,MACX,QAAQ;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,WAAW,GAAG,UAAU,sBAAsB,gBAAgB;AAAA,IAAA;AAGhE,WACE,qBAAC,OAAA,EAAI,WAAU,2BACb,UAAA;AAAA,MAAA,oBAAC,SAAA,EAAO,GAAG,aAAa,MAAK,OAAA,CAAO;AAAA,MAEpC,qBAAC,OAAA,EAAI,yBAAqB,MAAC,WAAU,2BACnC,UAAA;AAAA,QAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,WAAU;AAAA,YACV,SAAS;AAAA,YACT,SAAQ;AAAA,YACR,MAAK;AAAA,YACL,UAAS;AAAA,YACT,aAAY;AAAA,UAAA;AAAA,QAAA;AAAA,QAEd;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,WAAU;AAAA,YACV,SAAS;AAAA,YACT,SAAQ;AAAA,YACR,MAAK;AAAA,YACL,UAAS;AAAA,YACT,aAAY;AAAA,UAAA;AAAA,QAAA;AAAA,MACd,EAAA,CACF;AAAA,IAAA,GACF;AAAA,EAEJ;AAEA,QAAM,cAAc,gBAAgB;AACpC,QAAM,gBAAgB,CAAC;AAIvB,MAAI,CAAC,YAAY;AACf,WACE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAW,GAAG,UAAU,IAAI,SAAS,kDAAkD,gBAAgB,0BAA0B,iBAAiB;AAAA,QAElJ,UAAA,oBAAC,QAAA,EAAK,WAAU,UAAU,UAAA,YAAA,CAAY;AAAA,MAAA;AAAA,IAAA;AAAA,EAG5C;AAEA,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACL,SAAS;AAAA,MACT;AAAA,MACA,WAAW,SAAS,UAAU,IAAI,SAAS,gQAAgQ,gBAAgB,0BAA0B,iBAAiB;AAAA,MAEtW,UAAA;AAAA,QAAA,oBAAC,QAAA,EAAK,WAAU,UAAU,UAAA,aAAY;AAAA,QACtC;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,WAAU;AAAA,YACV,MAAK;AAAA,UAAA;AAAA,QAAA;AAAA,MACP;AAAA,IAAA;AAAA,EAAA;AAGN;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/forms/editable-text/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC1D,YAAY,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
import { FormSpacing } from '../../../theme/size-tokens';
|
|
3
|
+
export type FieldsetProps = {
|
|
4
|
+
/** Form controls to group together - typically FormField components */
|
|
5
|
+
children: ReactNode;
|
|
6
|
+
/** Legend text displayed at top of fieldset */
|
|
7
|
+
legend?: string;
|
|
8
|
+
/** Disables all form controls within the fieldset */
|
|
9
|
+
disabled?: boolean;
|
|
10
|
+
/** HTML id attribute */
|
|
11
|
+
id?: string;
|
|
12
|
+
/** Layout direction for children */
|
|
13
|
+
direction?: 'horizontal' | 'vertical';
|
|
14
|
+
/** Gap spacing between children elements */
|
|
15
|
+
spacing?: FormSpacing;
|
|
16
|
+
/** Cross-axis alignment */
|
|
17
|
+
align?: 'start' | 'center' | 'end' | 'stretch';
|
|
18
|
+
/** Main-axis alignment */
|
|
19
|
+
justify?: 'start' | 'center' | 'end' | 'between' | 'around';
|
|
20
|
+
/** Show border around fieldset */
|
|
21
|
+
bordered?: boolean;
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* Fieldset - Semantic grouping for related form controls
|
|
25
|
+
*
|
|
26
|
+
* Groups related form fields with an optional legend.
|
|
27
|
+
* All child inputs are disabled when the fieldset is disabled.
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* ```tsx
|
|
31
|
+
* <Fieldset legend="Personal Information" spacing="md">
|
|
32
|
+
* <FormField label="First Name">
|
|
33
|
+
* <Input placeholder="John" />
|
|
34
|
+
* </FormField>
|
|
35
|
+
* <FormField label="Last Name">
|
|
36
|
+
* <Input placeholder="Doe" />
|
|
37
|
+
* </FormField>
|
|
38
|
+
* </Fieldset>
|
|
39
|
+
* ```
|
|
40
|
+
*/
|
|
41
|
+
declare function Fieldset({ children, legend, disabled, id, direction, spacing, align, justify, bordered }: Readonly<FieldsetProps>): import("react/jsx-runtime").JSX.Element;
|
|
42
|
+
declare namespace Fieldset {
|
|
43
|
+
var displayName: string;
|
|
44
|
+
}
|
|
45
|
+
export default Fieldset;
|
|
46
|
+
//# sourceMappingURL=fieldset.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fieldset.d.ts","sourceRoot":"","sources":["../../../../src/components/forms/fieldset/fieldset.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAElC,OAAO,EAAe,KAAK,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAE3E,MAAM,MAAM,aAAa,GAAG;IAC1B,uEAAuE;IACvE,QAAQ,EAAE,SAAS,CAAC;IACpB,+CAA+C;IAC/C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qDAAqD;IACrD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,wBAAwB;IACxB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,oCAAoC;IACpC,SAAS,CAAC,EAAE,YAAY,GAAG,UAAU,CAAC;IACtC,4CAA4C;IAC5C,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,2BAA2B;IAC3B,KAAK,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,GAAG,SAAS,CAAC;IAC/C,0BAA0B;IAC1B,OAAO,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,GAAG,SAAS,GAAG,QAAQ,CAAC;IAC5D,kCAAkC;IAClC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAiBF;;;;;;;;;;;;;;;;;GAiBG;AACH,iBAAS,QAAQ,CAAC,EAChB,QAAQ,EACR,MAAM,EACN,QAAgB,EAChB,EAAE,EACF,SAAsB,EACtB,OAAc,EACd,KAAiB,EACjB,OAAO,EACP,QAAe,EAChB,EAAE,QAAQ,CAAC,aAAa,CAAC,2CAczB;kBAxBQ,QAAQ;;;AA4BjB,eAAe,QAAQ,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { jsxs, jsx } from "react/jsx-runtime";
|
|
2
|
+
import { formSpacing } from "../../../theme/size-tokens.js";
|
|
3
|
+
const alignClasses = {
|
|
4
|
+
start: "items-start",
|
|
5
|
+
center: "items-center",
|
|
6
|
+
end: "items-end",
|
|
7
|
+
stretch: "items-stretch"
|
|
8
|
+
};
|
|
9
|
+
const justifyClasses = {
|
|
10
|
+
start: "justify-start",
|
|
11
|
+
center: "justify-center",
|
|
12
|
+
end: "justify-end",
|
|
13
|
+
between: "justify-between",
|
|
14
|
+
around: "justify-around"
|
|
15
|
+
};
|
|
16
|
+
function Fieldset({
|
|
17
|
+
children,
|
|
18
|
+
legend,
|
|
19
|
+
disabled = false,
|
|
20
|
+
id,
|
|
21
|
+
direction = "vertical",
|
|
22
|
+
spacing = "md",
|
|
23
|
+
align = "stretch",
|
|
24
|
+
justify,
|
|
25
|
+
bordered = true
|
|
26
|
+
}) {
|
|
27
|
+
const directionClass = direction === "horizontal" ? "flex-row flex-wrap" : "flex-col";
|
|
28
|
+
const justifyClass = justify ? justifyClasses[justify] : "";
|
|
29
|
+
const borderClass = bordered ? "border border-border rounded-lg p-4" : "";
|
|
30
|
+
const disabledClass = disabled ? "opacity-50" : "";
|
|
31
|
+
return /* @__PURE__ */ jsxs("fieldset", { disabled, id, className: `${borderClass} ${disabledClass}`.trim(), children: [
|
|
32
|
+
legend && /* @__PURE__ */ jsx("legend", { className: "px-2 text-sm font-semibold text-foreground", children: legend }),
|
|
33
|
+
/* @__PURE__ */ jsx("div", { className: `flex ${directionClass} ${formSpacing[spacing]} ${alignClasses[align]} ${justifyClass}`.trim(), children })
|
|
34
|
+
] });
|
|
35
|
+
}
|
|
36
|
+
Fieldset.displayName = "Fieldset";
|
|
37
|
+
export {
|
|
38
|
+
Fieldset as default
|
|
39
|
+
};
|
|
40
|
+
//# sourceMappingURL=fieldset.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fieldset.js","sources":["../../../../src/components/forms/fieldset/fieldset.tsx"],"sourcesContent":["import { ReactNode } from 'react';\n\nimport { formSpacing, type FormSpacing } from '../../../theme/size-tokens';\n\nexport type FieldsetProps = {\n /** Form controls to group together - typically FormField components */\n children: ReactNode;\n /** Legend text displayed at top of fieldset */\n legend?: string;\n /** Disables all form controls within the fieldset */\n disabled?: boolean;\n /** HTML id attribute */\n id?: string;\n /** Layout direction for children */\n direction?: 'horizontal' | 'vertical';\n /** Gap spacing between children elements */\n spacing?: FormSpacing;\n /** Cross-axis alignment */\n align?: 'start' | 'center' | 'end' | 'stretch';\n /** Main-axis alignment */\n justify?: 'start' | 'center' | 'end' | 'between' | 'around';\n /** Show border around fieldset */\n bordered?: boolean;\n};\n\nconst alignClasses = {\n start: 'items-start',\n center: 'items-center',\n end: 'items-end',\n stretch: 'items-stretch'\n} as const;\n\nconst justifyClasses = {\n start: 'justify-start',\n center: 'justify-center',\n end: 'justify-end',\n between: 'justify-between',\n around: 'justify-around'\n} as const;\n\n/**\n * Fieldset - Semantic grouping for related form controls\n *\n * Groups related form fields with an optional legend.\n * All child inputs are disabled when the fieldset is disabled.\n *\n * @example\n * ```tsx\n * <Fieldset legend=\"Personal Information\" spacing=\"md\">\n * <FormField label=\"First Name\">\n * <Input placeholder=\"John\" />\n * </FormField>\n * <FormField label=\"Last Name\">\n * <Input placeholder=\"Doe\" />\n * </FormField>\n * </Fieldset>\n * ```\n */\nfunction Fieldset({\n children,\n legend,\n disabled = false,\n id,\n direction = 'vertical',\n spacing = 'md',\n align = 'stretch',\n justify,\n bordered = true\n}: Readonly<FieldsetProps>) {\n const directionClass = direction === 'horizontal' ? 'flex-row flex-wrap' : 'flex-col';\n const justifyClass = justify ? justifyClasses[justify] : '';\n const borderClass = bordered ? 'border border-border rounded-lg p-4' : '';\n const disabledClass = disabled ? 'opacity-50' : '';\n\n return (\n <fieldset disabled={disabled} id={id} className={`${borderClass} ${disabledClass}`.trim()}>\n {legend && <legend className=\"px-2 text-sm font-semibold text-foreground\">{legend}</legend>}\n <div className={`flex ${directionClass} ${formSpacing[spacing]} ${alignClasses[align]} ${justifyClass}`.trim()}>\n {children}\n </div>\n </fieldset>\n );\n}\n\nFieldset.displayName = 'Fieldset';\n\nexport default Fieldset;\n"],"names":[],"mappings":";;AAyBA,MAAM,eAAe;AAAA,EACnB,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,KAAK;AAAA,EACL,SAAS;AACX;AAEA,MAAM,iBAAiB;AAAA,EACrB,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,KAAK;AAAA,EACL,SAAS;AAAA,EACT,QAAQ;AACV;AAoBA,SAAS,SAAS;AAAA,EAChB;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX;AAAA,EACA,YAAY;AAAA,EACZ,UAAU;AAAA,EACV,QAAQ;AAAA,EACR;AAAA,EACA,WAAW;AACb,GAA4B;AAC1B,QAAM,iBAAiB,cAAc,eAAe,uBAAuB;AAC3E,QAAM,eAAe,UAAU,eAAe,OAAO,IAAI;AACzD,QAAM,cAAc,WAAW,wCAAwC;AACvE,QAAM,gBAAgB,WAAW,eAAe;AAEhD,SACE,qBAAC,YAAA,EAAS,UAAoB,IAAQ,WAAW,GAAG,WAAW,IAAI,aAAa,GAAG,KAAA,GAChF,UAAA;AAAA,IAAA,UAAU,oBAAC,UAAA,EAAO,WAAU,8CAA8C,UAAA,QAAO;AAAA,wBACjF,OAAA,EAAI,WAAW,QAAQ,cAAc,IAAI,YAAY,OAAO,CAAC,IAAI,aAAa,KAAK,CAAC,IAAI,YAAY,GAAG,KAAA,GACrG,SAAA,CACH;AAAA,EAAA,GACF;AAEJ;AAEA,SAAS,cAAc;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/forms/fieldset/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Example usage of Form and Fieldset components
|
|
3
|
+
* This demonstrates how to use the idiomatic Form and Fieldset components
|
|
4
|
+
* with proper semantic HTML structure
|
|
5
|
+
*/
|
|
6
|
+
declare function FormExample(): import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
declare namespace FormExample {
|
|
8
|
+
var displayName: string;
|
|
9
|
+
}
|
|
10
|
+
export default FormExample;
|
|
11
|
+
//# sourceMappingURL=form-example.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"form-example.d.ts","sourceRoot":"","sources":["../../../../src/components/forms/form/form-example.tsx"],"names":[],"mappings":"AAQA;;;;GAIG;AACH,iBAAS,WAAW,4CA0FnB;kBA1FQ,WAAW;;;AA8FpB,eAAe,WAAW,CAAC"}
|