@simplysm/solid 13.0.69 → 13.0.71
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 +168 -195
- package/dist/components/data/calendar/Calendar.d.ts.map +1 -1
- package/dist/components/data/calendar/Calendar.js +15 -2
- package/dist/components/data/calendar/Calendar.js.map +2 -2
- package/dist/components/data/kanban/KanbanContext.js +2 -2
- package/dist/components/data/kanban/KanbanContext.js.map +1 -1
- package/dist/components/data/list/List.d.ts +8 -8
- package/dist/components/data/list/ListContext.d.ts +1 -1
- package/dist/components/data/list/ListItem.d.ts +15 -15
- package/dist/components/data/sheet/DataSheet.d.ts.map +1 -1
- package/dist/components/data/sheet/DataSheet.js +6 -4
- package/dist/components/data/sheet/DataSheet.js.map +2 -2
- package/dist/components/data/sheet/DataSheetConfigDialog.js +8 -8
- package/dist/components/data/sheet/DataSheetConfigDialog.js.map +1 -1
- package/dist/components/data/sheet/types.d.ts +4 -4
- package/dist/components/data/sheet/types.d.ts.map +1 -1
- package/dist/components/disclosure/Collapse.d.ts +4 -4
- package/dist/components/disclosure/Dialog.d.ts +24 -24
- package/dist/components/disclosure/Dialog.d.ts.map +1 -1
- package/dist/components/disclosure/Dialog.js +7 -2
- package/dist/components/disclosure/Dialog.js.map +2 -2
- package/dist/components/disclosure/DialogContext.d.ts +25 -25
- package/dist/components/disclosure/DialogContext.d.ts.map +1 -1
- package/dist/components/disclosure/DialogContext.js +1 -1
- package/dist/components/disclosure/DialogContext.js.map +1 -1
- package/dist/components/disclosure/DialogInstanceContext.d.ts +7 -7
- package/dist/components/disclosure/DialogInstanceContext.d.ts.map +1 -1
- package/dist/components/disclosure/DialogProvider.d.ts +3 -3
- package/dist/components/disclosure/Dropdown.d.ts +26 -24
- package/dist/components/disclosure/Dropdown.d.ts.map +1 -1
- package/dist/components/disclosure/Dropdown.js +24 -8
- package/dist/components/disclosure/Dropdown.js.map +2 -2
- package/dist/components/disclosure/Tabs.js +1 -1
- package/dist/components/disclosure/Tabs.js.map +1 -1
- package/dist/components/disclosure/dialogZIndex.d.ts +9 -7
- package/dist/components/disclosure/dialogZIndex.d.ts.map +1 -1
- package/dist/components/disclosure/dialogZIndex.js +4 -0
- package/dist/components/disclosure/dialogZIndex.js.map +1 -1
- package/dist/components/features/crud-detail/CrudDetail.d.ts.map +1 -1
- package/dist/components/features/crud-detail/CrudDetail.js +34 -22
- package/dist/components/features/crud-detail/CrudDetail.js.map +2 -2
- package/dist/components/features/crud-sheet/CrudSheet.d.ts.map +1 -1
- package/dist/components/features/crud-sheet/CrudSheet.js +48 -33
- package/dist/components/features/crud-sheet/CrudSheet.js.map +2 -2
- package/dist/components/features/crudRegistry.d.ts +16 -0
- package/dist/components/features/crudRegistry.d.ts.map +1 -0
- package/dist/components/features/crudRegistry.js +37 -0
- package/dist/components/features/crudRegistry.js.map +6 -0
- package/dist/components/features/data-select-button/DataSelectButton.d.ts +14 -14
- package/dist/components/features/data-select-button/DataSelectButton.d.ts.map +1 -1
- package/dist/components/features/data-select-button/DataSelectButton.js +27 -9
- package/dist/components/features/data-select-button/DataSelectButton.js.map +2 -2
- package/dist/components/features/permission-table/PermissionTable.d.ts +3 -3
- package/dist/components/features/permission-table/PermissionTable.d.ts.map +1 -1
- package/dist/components/features/permission-table/PermissionTable.js +74 -85
- package/dist/components/features/permission-table/PermissionTable.js.map +2 -2
- package/dist/components/features/shared-data/SharedDataSelect.d.ts +12 -12
- package/dist/components/features/shared-data/SharedDataSelect.d.ts.map +1 -1
- package/dist/components/features/shared-data/SharedDataSelect.js +10 -6
- package/dist/components/features/shared-data/SharedDataSelect.js.map +2 -2
- package/dist/components/features/shared-data/SharedDataSelectButton.d.ts +10 -10
- package/dist/components/features/shared-data/SharedDataSelectButton.d.ts.map +1 -1
- package/dist/components/features/shared-data/SharedDataSelectList.d.ts +23 -15
- package/dist/components/features/shared-data/SharedDataSelectList.d.ts.map +1 -1
- package/dist/components/features/shared-data/SharedDataSelectList.js +191 -65
- package/dist/components/features/shared-data/SharedDataSelectList.js.map +2 -2
- package/dist/components/features/shared-data/SharedDataSelectListContext.d.ts +15 -0
- package/dist/components/features/shared-data/SharedDataSelectListContext.d.ts.map +1 -0
- package/dist/components/features/shared-data/SharedDataSelectListContext.js +27 -0
- package/dist/components/features/shared-data/SharedDataSelectListContext.js.map +6 -0
- package/dist/components/feedback/Progress.d.ts +1 -1
- package/dist/components/feedback/Progress.d.ts.map +1 -1
- package/dist/components/feedback/busy/BusyContainer.d.ts +2 -2
- package/dist/components/feedback/busy/BusyContainer.d.ts.map +1 -1
- package/dist/components/feedback/busy/BusyContext.d.ts +11 -11
- package/dist/components/feedback/busy/BusyContext.d.ts.map +1 -1
- package/dist/components/feedback/busy/BusyContext.js +1 -1
- package/dist/components/feedback/busy/BusyContext.js.map +1 -1
- package/dist/components/feedback/busy/BusyProvider.d.ts +6 -6
- package/dist/components/feedback/busy/BusyProvider.d.ts.map +1 -1
- package/dist/components/feedback/notification/NotificationBanner.d.ts.map +1 -1
- package/dist/components/feedback/notification/NotificationBanner.js +7 -3
- package/dist/components/feedback/notification/NotificationBanner.js.map +2 -2
- package/dist/components/feedback/notification/NotificationBell.js +2 -2
- package/dist/components/feedback/notification/NotificationBell.js.map +1 -1
- package/dist/components/feedback/notification/NotificationContext.d.ts +22 -22
- package/dist/components/feedback/notification/NotificationContext.d.ts.map +1 -1
- package/dist/components/feedback/notification/NotificationContext.js +1 -1
- package/dist/components/feedback/notification/NotificationContext.js.map +1 -1
- package/dist/components/feedback/notification/NotificationProvider.d.ts +5 -5
- package/dist/components/feedback/notification/NotificationProvider.js +1 -1
- package/dist/components/feedback/notification/NotificationProvider.js.map +1 -1
- package/dist/components/feedback/print/PrintContext.js +1 -1
- package/dist/components/feedback/print/PrintContext.js.map +1 -1
- package/dist/components/form-control/DropdownTrigger.styles.d.ts +1 -1
- package/dist/components/form-control/DropdownTrigger.styles.d.ts.map +1 -1
- package/dist/components/form-control/ThemeToggle.d.ts +7 -7
- package/dist/components/form-control/ThemeToggle.d.ts.map +1 -1
- package/dist/components/form-control/ThemeToggle.js +3 -3
- package/dist/components/form-control/checkbox/Checkbox.js +1 -1
- package/dist/components/form-control/checkbox/CheckboxGroup.js +1 -1
- package/dist/components/form-control/checkbox/Radio.js +1 -1
- package/dist/components/form-control/checkbox/RadioGroup.js +1 -1
- package/dist/components/form-control/color-picker/ColorPicker.d.ts +12 -12
- package/dist/components/form-control/color-picker/ColorPicker.d.ts.map +1 -1
- package/dist/components/form-control/color-picker/ColorPicker.js +2 -2
- package/dist/components/form-control/combobox/Combobox.d.ts +22 -22
- package/dist/components/form-control/combobox/Combobox.d.ts.map +1 -1
- package/dist/components/form-control/combobox/Combobox.js +2 -2
- package/dist/components/form-control/combobox/ComboboxContext.d.ts +4 -4
- package/dist/components/form-control/combobox/ComboboxContext.d.ts.map +1 -1
- package/dist/components/form-control/combobox/ComboboxContext.js +1 -1
- package/dist/components/form-control/combobox/ComboboxContext.js.map +1 -1
- package/dist/components/form-control/combobox/ComboboxItem.d.ts +3 -3
- package/dist/components/form-control/combobox/ComboboxItem.d.ts.map +1 -1
- package/dist/components/form-control/date-range-picker/DateRangePicker.d.ts +14 -14
- package/dist/components/form-control/date-range-picker/DateRangePicker.d.ts.map +1 -1
- package/dist/components/form-control/date-range-picker/DateRangePicker.js +20 -9
- package/dist/components/form-control/date-range-picker/DateRangePicker.js.map +2 -2
- package/dist/components/form-control/editor/EditorToolbar.d.ts.map +1 -1
- package/dist/components/form-control/editor/EditorToolbar.js +65 -20
- package/dist/components/form-control/editor/EditorToolbar.js.map +2 -2
- package/dist/components/form-control/editor/RichTextEditor.d.ts +6 -6
- package/dist/components/form-control/editor/RichTextEditor.d.ts.map +1 -1
- package/dist/components/form-control/editor/RichTextEditor.js +1 -1
- package/dist/components/form-control/editor/editor.css +5 -5
- package/dist/components/form-control/field/DatePicker.d.ts +22 -22
- package/dist/components/form-control/field/DatePicker.d.ts.map +1 -1
- package/dist/components/form-control/field/DatePicker.js +4 -4
- package/dist/components/form-control/field/DatePicker.js.map +1 -1
- package/dist/components/form-control/field/DateTimePicker.d.ts +21 -21
- package/dist/components/form-control/field/DateTimePicker.d.ts.map +1 -1
- package/dist/components/form-control/field/DateTimePicker.js +4 -4
- package/dist/components/form-control/field/DateTimePicker.js.map +1 -1
- package/dist/components/form-control/field/FieldPlaceholder.d.ts +1 -1
- package/dist/components/form-control/field/FieldPlaceholder.d.ts.map +1 -1
- package/dist/components/form-control/field/NumberInput.d.ts +23 -23
- package/dist/components/form-control/field/NumberInput.d.ts.map +1 -1
- package/dist/components/form-control/field/NumberInput.js +4 -4
- package/dist/components/form-control/field/NumberInput.js.map +1 -1
- package/dist/components/form-control/field/TextInput.d.ts +25 -25
- package/dist/components/form-control/field/TextInput.d.ts.map +1 -1
- package/dist/components/form-control/field/TextInput.js +5 -5
- package/dist/components/form-control/field/TextInput.js.map +1 -1
- package/dist/components/form-control/field/Textarea.d.ts +19 -19
- package/dist/components/form-control/field/Textarea.d.ts.map +1 -1
- package/dist/components/form-control/field/Textarea.js +4 -4
- package/dist/components/form-control/field/Textarea.js.map +1 -1
- package/dist/components/form-control/field/TimePicker.d.ts +20 -20
- package/dist/components/form-control/field/TimePicker.d.ts.map +1 -1
- package/dist/components/form-control/field/TimePicker.js +4 -4
- package/dist/components/form-control/field/TimePicker.js.map +1 -1
- package/dist/components/form-control/numpad/Numpad.d.ts +11 -11
- package/dist/components/form-control/numpad/Numpad.d.ts.map +1 -1
- package/dist/components/form-control/select/Select.d.ts +26 -26
- package/dist/components/form-control/select/Select.d.ts.map +1 -1
- package/dist/components/form-control/select/Select.js +34 -23
- package/dist/components/form-control/select/Select.js.map +2 -2
- package/dist/components/form-control/select/SelectContext.d.ts +7 -7
- package/dist/components/form-control/select/SelectContext.d.ts.map +1 -1
- package/dist/components/form-control/select/SelectContext.js +1 -1
- package/dist/components/form-control/select/SelectContext.js.map +1 -1
- package/dist/components/form-control/select/SelectItem.d.ts +4 -4
- package/dist/components/form-control/select/SelectItem.d.ts.map +1 -1
- package/dist/components/form-control/state-preset/StatePreset.js +8 -8
- package/dist/components/form-control/state-preset/StatePreset.js.map +1 -1
- package/dist/components/layout/FormTable.js +4 -4
- package/dist/components/layout/sidebar/Sidebar.d.ts +5 -5
- package/dist/components/layout/sidebar/SidebarContainer.d.ts +11 -11
- package/dist/components/layout/sidebar/SidebarContainer.d.ts.map +1 -1
- package/dist/components/layout/sidebar/SidebarContainer.js +6 -1
- package/dist/components/layout/sidebar/SidebarContainer.js.map +2 -2
- package/dist/components/layout/sidebar/SidebarContext.d.ts +7 -7
- package/dist/components/layout/sidebar/SidebarContext.js +1 -1
- package/dist/components/layout/sidebar/SidebarContext.js.map +1 -1
- package/dist/components/layout/sidebar/SidebarMenu.d.ts +11 -11
- package/dist/components/layout/sidebar/SidebarUser.d.ts +14 -14
- package/dist/components/layout/topbar/Topbar.d.ts +6 -6
- package/dist/components/layout/topbar/Topbar.d.ts.map +1 -1
- package/dist/components/layout/topbar/Topbar.js +11 -6
- package/dist/components/layout/topbar/Topbar.js.map +2 -2
- package/dist/components/layout/topbar/TopbarContainer.d.ts +6 -6
- package/dist/components/layout/topbar/TopbarContext.js +2 -2
- package/dist/components/layout/topbar/TopbarContext.js.map +1 -1
- package/dist/components/layout/topbar/TopbarMenu.d.ts +11 -11
- package/dist/components/layout/topbar/TopbarMenu.d.ts.map +1 -1
- package/dist/components/layout/topbar/TopbarMenu.js +5 -1
- package/dist/components/layout/topbar/TopbarMenu.js.map +2 -2
- package/dist/components/layout/topbar/TopbarUser.d.ts +9 -9
- package/dist/directives/ripple.d.ts +5 -5
- package/dist/helpers/createAppStructure.d.ts.map +1 -1
- package/dist/helpers/createAppStructure.js +7 -3
- package/dist/helpers/createAppStructure.js.map +1 -1
- package/dist/helpers/createHmrSafeContext.d.ts +3 -0
- package/dist/helpers/createHmrSafeContext.d.ts.map +1 -0
- package/dist/helpers/createHmrSafeContext.js +10 -0
- package/dist/helpers/createHmrSafeContext.js.map +6 -0
- package/dist/helpers/createSlotComponent.d.ts +3 -3
- package/dist/helpers/mergeStyles.d.ts +8 -8
- package/dist/hooks/createControllableSignal.d.ts +10 -10
- package/dist/hooks/createControllableStore.d.ts +6 -6
- package/dist/hooks/createIMEHandler.d.ts +7 -7
- package/dist/hooks/createMountTransition.d.ts +4 -4
- package/dist/hooks/createSelectionGroup.d.ts.map +1 -1
- package/dist/hooks/createSelectionGroup.js +4 -3
- package/dist/hooks/createSelectionGroup.js.map +2 -2
- package/dist/hooks/createSlotSignal.d.ts +2 -2
- package/dist/hooks/useLocalStorage.d.ts +11 -11
- package/dist/hooks/useLogger.d.ts +1 -1
- package/dist/hooks/useLogger.d.ts.map +1 -1
- package/dist/hooks/useLogger.js +1 -1
- package/dist/hooks/useLogger.js.map +1 -1
- package/dist/hooks/useRouterLink.d.ts +10 -10
- package/dist/hooks/useRouterLink.d.ts.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/providers/ClipboardProvider.d.ts +5 -5
- package/dist/providers/ConfigContext.d.ts +6 -6
- package/dist/providers/ConfigContext.js +2 -2
- package/dist/providers/ConfigContext.js.map +1 -1
- package/dist/providers/ErrorLoggerProvider.d.ts +3 -3
- package/dist/providers/LoggerContext.d.ts +13 -13
- package/dist/providers/PwaUpdateProvider.d.ts +4 -4
- package/dist/providers/PwaUpdateProvider.js +2 -2
- package/dist/providers/PwaUpdateProvider.js.map +1 -1
- package/dist/providers/ServiceClientContext.d.ts +8 -8
- package/dist/providers/ServiceClientContext.d.ts.map +1 -1
- package/dist/providers/ServiceClientContext.js +1 -1
- package/dist/providers/ServiceClientContext.js.map +1 -1
- package/dist/providers/ServiceClientProvider.d.ts +6 -6
- package/dist/providers/ServiceClientProvider.js +7 -7
- package/dist/providers/ServiceClientProvider.js.map +1 -1
- package/dist/providers/SyncStorageContext.d.ts +14 -14
- package/dist/providers/SystemProvider.d.ts.map +1 -1
- package/dist/providers/SystemProvider.js +21 -16
- package/dist/providers/SystemProvider.js.map +2 -2
- package/dist/providers/ThemeContext.d.ts +20 -20
- package/dist/providers/ThemeContext.d.ts.map +1 -1
- package/dist/providers/ThemeContext.js +1 -1
- package/dist/providers/ThemeContext.js.map +1 -1
- package/dist/providers/i18n/I18nContext.d.ts +44 -0
- package/dist/providers/i18n/I18nContext.d.ts.map +1 -0
- package/dist/providers/i18n/I18nContext.js +73 -0
- package/dist/providers/i18n/I18nContext.js.map +6 -0
- package/dist/providers/i18n/I18nContext.types.d.ts +28 -0
- package/dist/providers/i18n/I18nContext.types.d.ts.map +1 -0
- package/dist/providers/i18n/I18nContext.types.js +1 -0
- package/dist/providers/i18n/I18nContext.types.js.map +6 -0
- package/dist/providers/i18n/i18nUtils.d.ts +18 -0
- package/dist/providers/i18n/i18nUtils.d.ts.map +1 -0
- package/dist/providers/i18n/i18nUtils.js +25 -0
- package/dist/providers/i18n/i18nUtils.js.map +6 -0
- package/dist/providers/i18n/locales/en.d.ts +163 -0
- package/dist/providers/i18n/locales/en.d.ts.map +1 -0
- package/dist/providers/i18n/locales/en.js +165 -0
- package/dist/providers/i18n/locales/en.js.map +6 -0
- package/dist/providers/i18n/locales/ko.d.ts +163 -0
- package/dist/providers/i18n/locales/ko.d.ts.map +1 -0
- package/dist/providers/i18n/locales/ko.js +165 -0
- package/dist/providers/i18n/locales/ko.js.map +6 -0
- package/dist/providers/shared-data/SharedDataChangeEvent.d.ts +4 -4
- package/dist/providers/shared-data/SharedDataContext.d.ts +28 -28
- package/dist/providers/shared-data/SharedDataContext.d.ts.map +1 -1
- package/dist/providers/shared-data/SharedDataContext.js +1 -1
- package/dist/providers/shared-data/SharedDataContext.js.map +1 -1
- package/dist/providers/shared-data/SharedDataProvider.d.ts +9 -9
- package/dist/providers/shared-data/SharedDataProvider.js +4 -4
- package/dist/providers/shared-data/SharedDataProvider.js.map +1 -1
- package/package.json +9 -8
- package/src/components/data/calendar/Calendar.tsx +10 -4
- package/src/components/data/kanban/Kanban.tsx +14 -14
- package/src/components/data/kanban/KanbanContext.ts +3 -3
- package/src/components/data/list/List.tsx +10 -10
- package/src/components/data/list/ListContext.ts +1 -1
- package/src/components/data/list/ListItem.styles.ts +8 -8
- package/src/components/data/list/ListItem.tsx +15 -15
- package/src/components/data/sheet/DataSheet.styles.ts +22 -22
- package/src/components/data/sheet/DataSheet.tsx +52 -48
- package/src/components/data/sheet/DataSheetColumn.tsx +1 -1
- package/src/components/data/sheet/DataSheetConfigDialog.tsx +9 -9
- package/src/components/data/sheet/sheetUtils.ts +7 -7
- package/src/components/data/sheet/types.ts +16 -16
- package/src/components/disclosure/Collapse.tsx +11 -11
- package/src/components/disclosure/Dialog.tsx +60 -57
- package/src/components/disclosure/DialogContext.ts +26 -26
- package/src/components/disclosure/DialogInstanceContext.ts +7 -7
- package/src/components/disclosure/DialogProvider.tsx +5 -5
- package/src/components/disclosure/Dropdown.tsx +89 -75
- package/src/components/disclosure/Tabs.tsx +1 -1
- package/src/components/disclosure/dialogZIndex.ts +16 -11
- package/src/components/display/Echarts.tsx +4 -4
- package/src/components/features/address/AddressSearch.tsx +2 -2
- package/src/components/features/crud-detail/CrudDetail.tsx +34 -21
- package/src/components/features/crud-detail/CrudDetailAfter.tsx +1 -1
- package/src/components/features/crud-detail/CrudDetailBefore.tsx +1 -1
- package/src/components/features/crud-detail/CrudDetailTools.tsx +1 -1
- package/src/components/features/crud-sheet/CrudSheet.tsx +52 -40
- package/src/components/features/crud-sheet/CrudSheetColumn.tsx +1 -1
- package/src/components/features/crud-sheet/CrudSheetFilter.tsx +1 -1
- package/src/components/features/crud-sheet/CrudSheetHeader.tsx +1 -1
- package/src/components/features/crud-sheet/CrudSheetTools.tsx +1 -1
- package/src/components/features/crudRegistry.ts +60 -0
- package/src/components/features/data-select-button/DataSelectButton.tsx +34 -32
- package/src/components/features/permission-table/PermissionTable.tsx +70 -64
- package/src/components/features/shared-data/SharedDataSelect.tsx +24 -22
- package/src/components/features/shared-data/SharedDataSelectButton.tsx +10 -10
- package/src/components/features/shared-data/SharedDataSelectList.tsx +231 -59
- package/src/components/features/shared-data/SharedDataSelectListContext.ts +39 -0
- package/src/components/feedback/Progress.tsx +1 -1
- package/src/components/feedback/busy/BusyContainer.tsx +6 -6
- package/src/components/feedback/busy/BusyContext.ts +12 -12
- package/src/components/feedback/busy/BusyProvider.tsx +6 -6
- package/src/components/feedback/notification/NotificationBanner.tsx +3 -1
- package/src/components/feedback/notification/NotificationBell.tsx +4 -4
- package/src/components/feedback/notification/NotificationContext.ts +28 -28
- package/src/components/feedback/notification/NotificationProvider.tsx +9 -9
- package/src/components/feedback/print/PrintContext.ts +1 -1
- package/src/components/form-control/Button.tsx +1 -1
- package/src/components/form-control/DropdownTrigger.styles.ts +1 -1
- package/src/components/form-control/Invalid.tsx +5 -5
- package/src/components/form-control/ThemeToggle.tsx +10 -10
- package/src/components/form-control/checkbox/Checkbox.styles.ts +8 -8
- package/src/components/form-control/checkbox/Checkbox.tsx +2 -2
- package/src/components/form-control/checkbox/CheckboxGroup.tsx +1 -1
- package/src/components/form-control/checkbox/Radio.tsx +2 -2
- package/src/components/form-control/checkbox/RadioGroup.tsx +1 -1
- package/src/components/form-control/color-picker/ColorPicker.tsx +17 -17
- package/src/components/form-control/combobox/Combobox.tsx +55 -55
- package/src/components/form-control/combobox/ComboboxContext.ts +5 -5
- package/src/components/form-control/combobox/ComboboxItem.tsx +3 -3
- package/src/components/form-control/date-range-picker/DateRangePicker.tsx +40 -26
- package/src/components/form-control/editor/EditorToolbar.tsx +52 -50
- package/src/components/form-control/editor/RichTextEditor.tsx +16 -16
- package/src/components/form-control/editor/editor.css +5 -5
- package/src/components/form-control/field/DatePicker.tsx +39 -39
- package/src/components/form-control/field/DateTimePicker.tsx +38 -38
- package/src/components/form-control/field/Field.styles.ts +11 -11
- package/src/components/form-control/field/FieldPlaceholder.tsx +1 -1
- package/src/components/form-control/field/NumberInput.tsx +63 -63
- package/src/components/form-control/field/TextInput.tsx +48 -48
- package/src/components/form-control/field/Textarea.tsx +32 -32
- package/src/components/form-control/field/TimePicker.tsx +37 -37
- package/src/components/form-control/numpad/Numpad.tsx +26 -26
- package/src/components/form-control/select/Select.tsx +82 -86
- package/src/components/form-control/select/SelectContext.ts +8 -8
- package/src/components/form-control/select/SelectItem.tsx +5 -5
- package/src/components/form-control/state-preset/StatePreset.tsx +13 -13
- package/src/components/layout/FormTable.tsx +4 -4
- package/src/components/layout/sidebar/Sidebar.tsx +8 -8
- package/src/components/layout/sidebar/SidebarContainer.tsx +19 -17
- package/src/components/layout/sidebar/SidebarContext.ts +8 -8
- package/src/components/layout/sidebar/SidebarMenu.tsx +19 -19
- package/src/components/layout/sidebar/SidebarUser.tsx +14 -14
- package/src/components/layout/topbar/Topbar.tsx +15 -13
- package/src/components/layout/topbar/TopbarContainer.tsx +6 -6
- package/src/components/layout/topbar/TopbarContext.ts +2 -2
- package/src/components/layout/topbar/TopbarMenu.tsx +18 -16
- package/src/components/layout/topbar/TopbarUser.tsx +9 -9
- package/src/directives/ripple.ts +8 -8
- package/src/helpers/createAppStructure.ts +15 -8
- package/src/helpers/createHmrSafeContext.ts +8 -0
- package/src/helpers/createSlotComponent.ts +4 -4
- package/src/helpers/mergeStyles.ts +11 -11
- package/src/hooks/createControllableSignal.ts +11 -11
- package/src/hooks/createControllableStore.ts +8 -8
- package/src/hooks/createIMEHandler.ts +7 -7
- package/src/hooks/createMountTransition.ts +4 -4
- package/src/hooks/createSelectionGroup.tsx +5 -3
- package/src/hooks/createSlotSignal.ts +2 -2
- package/src/hooks/useLocalStorage.ts +13 -13
- package/src/hooks/useLogger.ts +2 -2
- package/src/hooks/useRouterLink.ts +15 -15
- package/src/index.ts +4 -3
- package/src/providers/ClipboardProvider.tsx +19 -19
- package/src/providers/ConfigContext.tsx +8 -8
- package/src/providers/ErrorLoggerProvider.tsx +3 -3
- package/src/providers/LoggerContext.tsx +13 -13
- package/src/providers/PwaUpdateProvider.tsx +6 -6
- package/src/providers/ServiceClientContext.ts +9 -9
- package/src/providers/ServiceClientProvider.tsx +15 -15
- package/src/providers/SyncStorageContext.tsx +15 -15
- package/src/providers/SystemProvider.tsx +15 -12
- package/src/providers/ThemeContext.tsx +26 -26
- package/src/providers/i18n/I18nContext.tsx +129 -0
- package/src/providers/i18n/I18nContext.types.ts +30 -0
- package/src/providers/i18n/i18nUtils.ts +38 -0
- package/src/providers/i18n/locales/en.ts +161 -0
- package/src/providers/i18n/locales/ko.ts +161 -0
- package/src/providers/shared-data/SharedDataChangeEvent.ts +4 -4
- package/src/providers/shared-data/SharedDataContext.ts +29 -29
- package/src/providers/shared-data/SharedDataProvider.tsx +21 -21
- package/src/styles/patterns.styles.ts +6 -6
- package/src/styles/tokens.styles.ts +5 -5
- package/tailwind.config.ts +1 -1
- package/tailwind.css +4 -4
- package/tests/components/data/List.spec.tsx +689 -0
- package/tests/components/data/Pagination.spec.tsx +336 -0
- package/tests/components/data/Table.spec.tsx +55 -0
- package/tests/components/data/kanban/Kanban.selection.spec.tsx +213 -0
- package/tests/components/data/sheet/DataSheet.spec.tsx +645 -0
- package/tests/components/disclosure/Collapse.spec.tsx +173 -0
- package/tests/components/disclosure/Dialog.spec.tsx +438 -0
- package/tests/components/disclosure/DialogProvider.spec.tsx +142 -0
- package/tests/components/disclosure/Dropdown.spec.tsx +333 -0
- package/tests/components/disclosure/Tabs.spec.tsx +220 -0
- package/tests/components/disclosure/dialogZIndex.spec.ts +45 -0
- package/tests/components/display/Alert.spec.tsx +47 -0
- package/tests/components/display/Barcode.spec.tsx +61 -0
- package/tests/components/display/Card.spec.tsx +41 -0
- package/tests/components/display/Link.spec.tsx +62 -0
- package/tests/components/display/Tag.spec.tsx +47 -0
- package/tests/components/features/address/AddressSearch.spec.tsx +45 -0
- package/tests/components/features/crud-detail/CrudDetail.spec.tsx +537 -0
- package/tests/components/features/crud-sheet/CrudSheet.spec.tsx +491 -0
- package/tests/components/features/crudRegistry.spec.ts +119 -0
- package/tests/components/features/data-select-button/DataSelectButton.spec.tsx +482 -0
- package/tests/components/features/permission-table/PermissionTable.spec.tsx +288 -0
- package/tests/components/features/shared-data/SharedDataSelectList.spec.tsx +448 -0
- package/tests/components/feedback/busy/BusyContainer.spec.tsx +80 -0
- package/tests/components/feedback/notification/LiveRegion.spec.tsx +52 -0
- package/tests/components/feedback/notification/NotificationBanner.spec.tsx +187 -0
- package/tests/components/feedback/notification/NotificationBell.spec.tsx +226 -0
- package/tests/components/feedback/notification/NotificationContext.spec.tsx +362 -0
- package/tests/components/feedback/print/Print.spec.tsx +45 -0
- package/tests/components/form-control/Button.spec.tsx +119 -0
- package/tests/components/form-control/Invalid.spec.tsx +131 -0
- package/tests/components/form-control/checkbox/Checkbox.spec.tsx +137 -0
- package/tests/components/form-control/checkbox/CheckboxGroup.spec.tsx +108 -0
- package/tests/components/form-control/checkbox/Radio.spec.tsx +138 -0
- package/tests/components/form-control/checkbox/RadioGroup.spec.tsx +108 -0
- package/tests/components/form-control/color-picker/ColorPicker.spec.tsx +94 -0
- package/tests/components/form-control/combobox/Combobox.spec.tsx +253 -0
- package/tests/components/form-control/combobox/ComboboxItem.spec.tsx +88 -0
- package/tests/components/form-control/date-range-picker/DateRangePicker.spec.tsx +208 -0
- package/tests/components/form-control/field/DatePicker.spec.tsx +381 -0
- package/tests/components/form-control/field/DateTimePicker.spec.tsx +383 -0
- package/tests/components/form-control/field/NumberInput.spec.tsx +371 -0
- package/tests/components/form-control/field/TextInput.spec.tsx +341 -0
- package/tests/components/form-control/field/Textarea.spec.tsx +224 -0
- package/tests/components/form-control/field/TimePicker.spec.tsx +315 -0
- package/tests/components/form-control/numpad/Numpad.spec.tsx +248 -0
- package/tests/components/form-control/select/Select.spec.tsx +676 -0
- package/tests/components/form-control/select/SelectItem.spec.tsx +174 -0
- package/tests/components/layout/FormGroup.spec.tsx +104 -0
- package/tests/components/layout/FormTable.spec.tsx +43 -0
- package/tests/components/layout/sidebar/Sidebar.spec.tsx +192 -0
- package/tests/components/layout/sidebar/SidebarContainer.spec.tsx +261 -0
- package/tests/components/layout/sidebar/SidebarMenu.spec.tsx +219 -0
- package/tests/components/layout/sidebar/SidebarUser.spec.tsx +133 -0
- package/tests/components/layout/topbar/TopbarActions.spec.tsx +77 -0
- package/tests/components/layout/topbar/TopbarContainer.spec.tsx +38 -0
- package/tests/components/layout/topbar/createTopbarActions.spec.tsx +66 -0
- package/tests/directives/ripple.spec.tsx +130 -0
- package/tests/helpers/createAppStructure.spec.tsx +843 -0
- package/tests/helpers/mergeStyles.spec.ts +172 -0
- package/tests/hooks/createControllableSignal.spec.ts +194 -0
- package/tests/hooks/createIMEHandler.spec.ts +80 -0
- package/tests/hooks/createMountTransition.spec.ts +86 -0
- package/tests/hooks/useLocalStorage.spec.tsx +223 -0
- package/tests/hooks/useLogger.spec.tsx +116 -0
- package/tests/hooks/usePrint.spec.tsx +134 -0
- package/tests/hooks/useRouterLink.spec.tsx +183 -0
- package/tests/hooks/useSyncConfig.spec.tsx +304 -0
- package/tests/providers/ClipboardProvider.spec.tsx +20 -0
- package/tests/providers/ConfigContext.spec.tsx +42 -0
- package/tests/providers/ErrorLoggerProvider.spec.tsx +73 -0
- package/tests/providers/LoggerContext.spec.tsx +76 -0
- package/tests/providers/PwaUpdateProvider.spec.tsx +22 -0
- package/tests/providers/ServiceClientContext.spec.tsx +88 -0
- package/tests/providers/SyncStorageContext.spec.tsx +77 -0
- package/tests/providers/i18n/I18nContext.spec.tsx +110 -0
- package/tests/providers/shared-data/SharedDataProvider.spec.tsx +401 -0
- package/tests/vitest-env.d.ts +1 -0
- package/dist/components/form-control/select-list/SelectList.d.ts +0 -54
- package/dist/components/form-control/select-list/SelectList.d.ts.map +0 -1
- package/dist/components/form-control/select-list/SelectList.js +0 -280
- package/dist/components/form-control/select-list/SelectList.js.map +0 -6
- package/dist/components/form-control/select-list/SelectListContext.d.ts +0 -13
- package/dist/components/form-control/select-list/SelectListContext.d.ts.map +0 -1
- package/dist/components/form-control/select-list/SelectListContext.js +0 -14
- package/dist/components/form-control/select-list/SelectListContext.js.map +0 -6
- package/docs/data-components.md +0 -782
- package/docs/disclosure.md +0 -254
- package/docs/display.md +0 -153
- package/docs/feedback.md +0 -238
- package/docs/form-controls.md +0 -1068
- package/docs/helpers.md +0 -54
- package/docs/hooks.md +0 -588
- package/docs/layout.md +0 -384
- package/docs/providers.md +0 -211
- package/docs/styling.md +0 -184
- package/src/components/form-control/select-list/SelectList.tsx +0 -385
- package/src/components/form-control/select-list/SelectListContext.ts +0 -23
|
@@ -9,54 +9,54 @@ import { Invalid } from "../../form-control/Invalid";
|
|
|
9
9
|
type DatePickerUnit = "year" | "month" | "date";
|
|
10
10
|
|
|
11
11
|
export interface DatePickerProps {
|
|
12
|
-
/**
|
|
12
|
+
/** Input value */
|
|
13
13
|
value?: DateOnly;
|
|
14
14
|
|
|
15
|
-
/**
|
|
15
|
+
/** Value change callback */
|
|
16
16
|
onValueChange?: (value: DateOnly | undefined) => void;
|
|
17
17
|
|
|
18
|
-
/**
|
|
18
|
+
/** Date unit */
|
|
19
19
|
unit?: DatePickerUnit;
|
|
20
20
|
|
|
21
|
-
/**
|
|
21
|
+
/** Minimum date */
|
|
22
22
|
min?: DateOnly;
|
|
23
23
|
|
|
24
|
-
/**
|
|
24
|
+
/** Maximum date */
|
|
25
25
|
max?: DateOnly;
|
|
26
26
|
|
|
27
|
-
/**
|
|
27
|
+
/** Title (tooltip) */
|
|
28
28
|
title?: string;
|
|
29
29
|
|
|
30
|
-
/**
|
|
30
|
+
/** Disable input */
|
|
31
31
|
disabled?: boolean;
|
|
32
32
|
|
|
33
|
-
/**
|
|
33
|
+
/** Read-only */
|
|
34
34
|
readonly?: boolean;
|
|
35
35
|
|
|
36
|
-
/**
|
|
36
|
+
/** Size */
|
|
37
37
|
size?: FieldSize;
|
|
38
38
|
|
|
39
|
-
/**
|
|
39
|
+
/** Borderless style */
|
|
40
40
|
inset?: boolean;
|
|
41
41
|
|
|
42
|
-
/**
|
|
42
|
+
/** Custom class */
|
|
43
43
|
class?: string;
|
|
44
44
|
|
|
45
|
-
/**
|
|
45
|
+
/** Custom style */
|
|
46
46
|
style?: JSX.CSSProperties;
|
|
47
47
|
|
|
48
|
-
/**
|
|
48
|
+
/** Required input */
|
|
49
49
|
required?: boolean;
|
|
50
50
|
|
|
51
|
-
/**
|
|
51
|
+
/** Custom validation function */
|
|
52
52
|
validate?: (value: DateOnly | undefined) => string | undefined;
|
|
53
53
|
|
|
54
|
-
/** touchMode:
|
|
54
|
+
/** touchMode: show errors only after blur */
|
|
55
55
|
touchMode?: boolean;
|
|
56
56
|
}
|
|
57
57
|
|
|
58
58
|
/**
|
|
59
|
-
* DateOnly
|
|
59
|
+
* Convert DateOnly value to format string matching type
|
|
60
60
|
*/
|
|
61
61
|
function formatDateValue(value: DateOnly | undefined, type: DatePickerUnit): string | undefined {
|
|
62
62
|
if (value == null) return undefined;
|
|
@@ -72,7 +72,7 @@ function formatDateValue(value: DateOnly | undefined, type: DatePickerUnit): str
|
|
|
72
72
|
}
|
|
73
73
|
|
|
74
74
|
/**
|
|
75
|
-
*
|
|
75
|
+
* Convert input string to DateOnly
|
|
76
76
|
*/
|
|
77
77
|
function parseValue(str: string, type: DatePickerUnit): DateOnly | undefined {
|
|
78
78
|
if (str === "") return undefined;
|
|
@@ -84,20 +84,20 @@ function parseValue(str: string, type: DatePickerUnit): DateOnly | undefined {
|
|
|
84
84
|
return new DateOnly(year, 1, 1);
|
|
85
85
|
}
|
|
86
86
|
case "month": {
|
|
87
|
-
// yyyy-MM
|
|
87
|
+
// yyyy-MM format
|
|
88
88
|
const match = /^(\d{4})-(\d{2})$/.exec(str);
|
|
89
89
|
if (match == null) return undefined;
|
|
90
90
|
return new DateOnly(Number(match[1]), Number(match[2]), 1);
|
|
91
91
|
}
|
|
92
92
|
case "date": {
|
|
93
|
-
// yyyy-MM-dd
|
|
93
|
+
// yyyy-MM-dd format
|
|
94
94
|
return DateOnly.parse(str);
|
|
95
95
|
}
|
|
96
96
|
}
|
|
97
97
|
}
|
|
98
98
|
|
|
99
99
|
/**
|
|
100
|
-
* HTML input
|
|
100
|
+
* Determine HTML input type attribute
|
|
101
101
|
*/
|
|
102
102
|
function getInputType(type: DatePickerUnit): string {
|
|
103
103
|
switch (type) {
|
|
@@ -111,23 +111,23 @@ function getInputType(type: DatePickerUnit): string {
|
|
|
111
111
|
}
|
|
112
112
|
|
|
113
113
|
/**
|
|
114
|
-
* DatePicker
|
|
114
|
+
* DatePicker component
|
|
115
115
|
*
|
|
116
|
-
*
|
|
117
|
-
*
|
|
116
|
+
* Date input field supporting year, month, and date units.
|
|
117
|
+
* Handles string ↔ DateOnly type conversion internally.
|
|
118
118
|
*
|
|
119
119
|
* @example
|
|
120
120
|
* ```tsx
|
|
121
|
-
* //
|
|
121
|
+
* // Date input
|
|
122
122
|
* <DatePicker unit="date" value={date()} onValueChange={setDate} />
|
|
123
123
|
*
|
|
124
|
-
* //
|
|
124
|
+
* // Year only
|
|
125
125
|
* <DatePicker unit="year" value={yearDate()} onValueChange={setYearDate} />
|
|
126
126
|
*
|
|
127
|
-
* //
|
|
127
|
+
* // Year-month input
|
|
128
128
|
* <DatePicker unit="month" value={monthDate()} onValueChange={setMonthDate} />
|
|
129
129
|
*
|
|
130
|
-
* // min/max
|
|
130
|
+
* // With min/max constraints
|
|
131
131
|
* <DatePicker
|
|
132
132
|
* unit="date"
|
|
133
133
|
* value={date()}
|
|
@@ -155,26 +155,26 @@ export const DatePicker: Component<DatePickerProps> = (props) => {
|
|
|
155
155
|
"touchMode",
|
|
156
156
|
]);
|
|
157
157
|
|
|
158
|
-
//
|
|
158
|
+
// Default unit is date
|
|
159
159
|
const fieldType = () => local.unit ?? "date";
|
|
160
160
|
|
|
161
|
-
// controlled/uncontrolled
|
|
161
|
+
// Support controlled/uncontrolled pattern
|
|
162
162
|
const [value, setValue] = createControllableSignal({
|
|
163
163
|
value: () => local.value,
|
|
164
164
|
onChange: () => local.onValueChange,
|
|
165
165
|
});
|
|
166
166
|
|
|
167
|
-
//
|
|
167
|
+
// Display value
|
|
168
168
|
const displayValue = () => formatDateValue(value(), fieldType()) ?? "";
|
|
169
169
|
|
|
170
|
-
//
|
|
170
|
+
// Change handler (on blur or Enter)
|
|
171
171
|
const handleChange: JSX.EventHandler<HTMLInputElement, Event> = (e) => {
|
|
172
172
|
const newValue = e.currentTarget.value;
|
|
173
173
|
const parsed = parseValue(newValue, fieldType());
|
|
174
174
|
setValue(parsed);
|
|
175
175
|
};
|
|
176
176
|
|
|
177
|
-
//
|
|
177
|
+
// Wrapper class (includeCustomClass: whether to include external class)
|
|
178
178
|
const getWrapperClass = (includeCustomClass: boolean) =>
|
|
179
179
|
getFieldWrapperClass({
|
|
180
180
|
size: local.size,
|
|
@@ -184,18 +184,18 @@ export const DatePicker: Component<DatePickerProps> = (props) => {
|
|
|
184
184
|
extra: "min-w-32",
|
|
185
185
|
});
|
|
186
186
|
|
|
187
|
-
//
|
|
187
|
+
// Editable check
|
|
188
188
|
const isEditable = () => !local.disabled && !local.readonly;
|
|
189
189
|
|
|
190
|
-
//
|
|
190
|
+
// Validation message (check in order, return first error)
|
|
191
191
|
const errorMsg = createMemo(() => {
|
|
192
192
|
const v = value();
|
|
193
|
-
if (local.required && v === undefined) return "
|
|
193
|
+
if (local.required && v === undefined) return "This field is required";
|
|
194
194
|
if (v !== undefined) {
|
|
195
195
|
if (local.min !== undefined && v.tick < local.min.tick)
|
|
196
|
-
return
|
|
196
|
+
return `Must be greater than or equal to ${local.min}`;
|
|
197
197
|
if (local.max !== undefined && v.tick > local.max.tick)
|
|
198
|
-
return
|
|
198
|
+
return `Must be less than or equal to ${local.max}`;
|
|
199
199
|
}
|
|
200
200
|
return local.validate?.(v);
|
|
201
201
|
});
|
|
@@ -209,7 +209,7 @@ export const DatePicker: Component<DatePickerProps> = (props) => {
|
|
|
209
209
|
<Show
|
|
210
210
|
when={local.inset}
|
|
211
211
|
fallback={
|
|
212
|
-
// standalone
|
|
212
|
+
// standalone mode: maintain existing Show pattern
|
|
213
213
|
<Show
|
|
214
214
|
when={isEditable()}
|
|
215
215
|
fallback={
|
|
@@ -239,7 +239,7 @@ export const DatePicker: Component<DatePickerProps> = (props) => {
|
|
|
239
239
|
</Show>
|
|
240
240
|
}
|
|
241
241
|
>
|
|
242
|
-
{/* inset
|
|
242
|
+
{/* inset mode: dual-element overlay pattern */}
|
|
243
243
|
<div {...rest} data-date-field class={clsx("relative", local.class)} style={local.style}>
|
|
244
244
|
<div
|
|
245
245
|
data-date-field-content
|
|
@@ -9,54 +9,54 @@ import { Invalid } from "../../form-control/Invalid";
|
|
|
9
9
|
type DateTimePickerUnit = "minute" | "second";
|
|
10
10
|
|
|
11
11
|
export interface DateTimePickerProps {
|
|
12
|
-
/**
|
|
12
|
+
/** Input value */
|
|
13
13
|
value?: DateTime;
|
|
14
14
|
|
|
15
|
-
/**
|
|
15
|
+
/** Value change callback */
|
|
16
16
|
onValueChange?: (value: DateTime | undefined) => void;
|
|
17
17
|
|
|
18
|
-
/**
|
|
18
|
+
/** DateTime unit */
|
|
19
19
|
unit?: DateTimePickerUnit;
|
|
20
20
|
|
|
21
|
-
/**
|
|
21
|
+
/** Minimum datetime */
|
|
22
22
|
min?: DateTime;
|
|
23
23
|
|
|
24
|
-
/**
|
|
24
|
+
/** Maximum datetime */
|
|
25
25
|
max?: DateTime;
|
|
26
26
|
|
|
27
|
-
/**
|
|
27
|
+
/** Title (tooltip) */
|
|
28
28
|
title?: string;
|
|
29
29
|
|
|
30
|
-
/**
|
|
30
|
+
/** Disable input */
|
|
31
31
|
disabled?: boolean;
|
|
32
32
|
|
|
33
|
-
/**
|
|
33
|
+
/** Read-only */
|
|
34
34
|
readonly?: boolean;
|
|
35
35
|
|
|
36
|
-
/**
|
|
36
|
+
/** Size */
|
|
37
37
|
size?: FieldSize;
|
|
38
38
|
|
|
39
|
-
/**
|
|
39
|
+
/** Borderless style */
|
|
40
40
|
inset?: boolean;
|
|
41
41
|
|
|
42
|
-
/**
|
|
42
|
+
/** Custom class */
|
|
43
43
|
class?: string;
|
|
44
44
|
|
|
45
|
-
/**
|
|
45
|
+
/** Custom style */
|
|
46
46
|
style?: JSX.CSSProperties;
|
|
47
47
|
|
|
48
|
-
/**
|
|
48
|
+
/** Required input */
|
|
49
49
|
required?: boolean;
|
|
50
50
|
|
|
51
|
-
/**
|
|
51
|
+
/** Custom validation function */
|
|
52
52
|
validate?: (value: DateTime | undefined) => string | undefined;
|
|
53
53
|
|
|
54
|
-
/** touchMode:
|
|
54
|
+
/** touchMode: show errors only after blur */
|
|
55
55
|
touchMode?: boolean;
|
|
56
56
|
}
|
|
57
57
|
|
|
58
58
|
/**
|
|
59
|
-
* DateTime
|
|
59
|
+
* Convert DateTime value to format string matching type
|
|
60
60
|
*/
|
|
61
61
|
function formatDateTimeValue(
|
|
62
62
|
value: DateTime | undefined,
|
|
@@ -73,14 +73,14 @@ function formatDateTimeValue(
|
|
|
73
73
|
}
|
|
74
74
|
|
|
75
75
|
/**
|
|
76
|
-
*
|
|
76
|
+
* Convert input string to DateTime
|
|
77
77
|
*/
|
|
78
78
|
function parseValue(str: string, unit: DateTimePickerUnit): DateTime | undefined {
|
|
79
79
|
if (str === "") return undefined;
|
|
80
80
|
|
|
81
81
|
switch (unit) {
|
|
82
82
|
case "minute": {
|
|
83
|
-
// yyyy-MM-ddTHH:mm
|
|
83
|
+
// yyyy-MM-ddTHH:mm format
|
|
84
84
|
const match = /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2})$/.exec(str);
|
|
85
85
|
if (match == null) return undefined;
|
|
86
86
|
return new DateTime(
|
|
@@ -93,7 +93,7 @@ function parseValue(str: string, unit: DateTimePickerUnit): DateTime | undefined
|
|
|
93
93
|
);
|
|
94
94
|
}
|
|
95
95
|
case "second": {
|
|
96
|
-
// yyyy-MM-ddTHH:mm:ss
|
|
96
|
+
// yyyy-MM-ddTHH:mm:ss format
|
|
97
97
|
const match = /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})$/.exec(str);
|
|
98
98
|
if (match == null) return undefined;
|
|
99
99
|
return new DateTime(
|
|
@@ -109,20 +109,20 @@ function parseValue(str: string, unit: DateTimePickerUnit): DateTime | undefined
|
|
|
109
109
|
}
|
|
110
110
|
|
|
111
111
|
/**
|
|
112
|
-
* DateTimePicker
|
|
112
|
+
* DateTimePicker component
|
|
113
113
|
*
|
|
114
|
-
*
|
|
115
|
-
*
|
|
114
|
+
* DateTime input field supporting minute and second units.
|
|
115
|
+
* Handles string ↔ DateTime type conversion internally.
|
|
116
116
|
*
|
|
117
117
|
* @example
|
|
118
118
|
* ```tsx
|
|
119
|
-
* //
|
|
119
|
+
* // DateTime input (minute unit)
|
|
120
120
|
* <DateTimePicker unit="minute" value={dateTime()} onValueChange={setDateTime} />
|
|
121
121
|
*
|
|
122
|
-
* //
|
|
122
|
+
* // DateTime input (second unit)
|
|
123
123
|
* <DateTimePicker unit="second" value={dateTime()} onValueChange={setDateTime} />
|
|
124
124
|
*
|
|
125
|
-
* // min/max
|
|
125
|
+
* // With min/max constraints
|
|
126
126
|
* <DateTimePicker
|
|
127
127
|
* unit="minute"
|
|
128
128
|
* value={dateTime()}
|
|
@@ -150,26 +150,26 @@ export const DateTimePicker: Component<DateTimePickerProps> = (props) => {
|
|
|
150
150
|
"touchMode",
|
|
151
151
|
]);
|
|
152
152
|
|
|
153
|
-
//
|
|
153
|
+
// Default unit is minute
|
|
154
154
|
const fieldType = () => local.unit ?? "minute";
|
|
155
155
|
|
|
156
|
-
// controlled/uncontrolled
|
|
156
|
+
// Support controlled/uncontrolled pattern
|
|
157
157
|
const [value, setValue] = createControllableSignal({
|
|
158
158
|
value: () => local.value,
|
|
159
159
|
onChange: () => local.onValueChange,
|
|
160
160
|
});
|
|
161
161
|
|
|
162
|
-
//
|
|
162
|
+
// Display value
|
|
163
163
|
const displayValue = () => formatDateTimeValue(value(), fieldType()) ?? "";
|
|
164
164
|
|
|
165
|
-
//
|
|
165
|
+
// Change handler (on blur or Enter)
|
|
166
166
|
const handleChange: JSX.EventHandler<HTMLInputElement, Event> = (e) => {
|
|
167
167
|
const newValue = e.currentTarget.value;
|
|
168
168
|
const parsed = parseValue(newValue, fieldType());
|
|
169
169
|
setValue(parsed);
|
|
170
170
|
};
|
|
171
171
|
|
|
172
|
-
//
|
|
172
|
+
// Wrapper class (includeCustomClass: whether to apply custom class to outer div in inset mode)
|
|
173
173
|
const getWrapperClass = (includeCustomClass: boolean) =>
|
|
174
174
|
getFieldWrapperClass({
|
|
175
175
|
size: local.size,
|
|
@@ -179,21 +179,21 @@ export const DateTimePicker: Component<DateTimePickerProps> = (props) => {
|
|
|
179
179
|
extra: "min-w-44",
|
|
180
180
|
});
|
|
181
181
|
|
|
182
|
-
//
|
|
182
|
+
// Editable check
|
|
183
183
|
const isEditable = () => !local.disabled && !local.readonly;
|
|
184
184
|
|
|
185
|
-
//
|
|
185
|
+
// Step attribute (1 when second)
|
|
186
186
|
const getStep = () => (fieldType() === "second" ? "1" : undefined);
|
|
187
187
|
|
|
188
|
-
//
|
|
188
|
+
// Validation message (check in order, return first error)
|
|
189
189
|
const errorMsg = createMemo(() => {
|
|
190
190
|
const v = value();
|
|
191
|
-
if (local.required && v === undefined) return "
|
|
191
|
+
if (local.required && v === undefined) return "This field is required";
|
|
192
192
|
if (v !== undefined) {
|
|
193
193
|
if (local.min !== undefined && v.tick < local.min.tick)
|
|
194
|
-
return
|
|
194
|
+
return `Must be greater than or equal to ${local.min.toFormatString("yyyy-MM-dd HH:mm:ss")}`;
|
|
195
195
|
if (local.max !== undefined && v.tick > local.max.tick)
|
|
196
|
-
return
|
|
196
|
+
return `Must be less than or equal to ${local.max.toFormatString("yyyy-MM-dd HH:mm:ss")}`;
|
|
197
197
|
}
|
|
198
198
|
return local.validate?.(v);
|
|
199
199
|
});
|
|
@@ -207,7 +207,7 @@ export const DateTimePicker: Component<DateTimePickerProps> = (props) => {
|
|
|
207
207
|
<Show
|
|
208
208
|
when={local.inset}
|
|
209
209
|
fallback={
|
|
210
|
-
// standalone
|
|
210
|
+
// standalone mode
|
|
211
211
|
<Show
|
|
212
212
|
when={isEditable()}
|
|
213
213
|
fallback={
|
|
@@ -238,7 +238,7 @@ export const DateTimePicker: Component<DateTimePickerProps> = (props) => {
|
|
|
238
238
|
</Show>
|
|
239
239
|
}
|
|
240
240
|
>
|
|
241
|
-
{/* inset
|
|
241
|
+
{/* inset mode: dual-element overlay pattern */}
|
|
242
242
|
<div
|
|
243
243
|
{...rest}
|
|
244
244
|
data-datetime-field
|
|
@@ -16,7 +16,7 @@ import {
|
|
|
16
16
|
|
|
17
17
|
export type FieldSize = ComponentSize;
|
|
18
18
|
|
|
19
|
-
//
|
|
19
|
+
// Base wrapper styles
|
|
20
20
|
export const fieldBaseClass = clsx(
|
|
21
21
|
"inline-flex items-center",
|
|
22
22
|
fieldSurface,
|
|
@@ -25,7 +25,7 @@ export const fieldBaseClass = clsx(
|
|
|
25
25
|
"[text-decoration:inherit]",
|
|
26
26
|
);
|
|
27
27
|
|
|
28
|
-
//
|
|
28
|
+
// Size-specific styles
|
|
29
29
|
export const fieldSizeClasses: Record<FieldSize, string> = {
|
|
30
30
|
xs: clsx("h-field-xs", paddingXs),
|
|
31
31
|
sm: clsx("h-field-sm", paddingSm),
|
|
@@ -33,14 +33,14 @@ export const fieldSizeClasses: Record<FieldSize, string> = {
|
|
|
33
33
|
xl: clsx("h-field-xl", paddingXl),
|
|
34
34
|
};
|
|
35
35
|
|
|
36
|
-
//
|
|
36
|
+
// Inset styles
|
|
37
37
|
export const fieldInsetClass = clsx(
|
|
38
38
|
insetBase,
|
|
39
39
|
"bg-primary-50 dark:bg-primary-950/30",
|
|
40
40
|
insetFocusOutline,
|
|
41
41
|
);
|
|
42
42
|
|
|
43
|
-
//
|
|
43
|
+
// Inset heights (excluding 2px border)
|
|
44
44
|
export const fieldInsetHeightClass = "h-field-inset";
|
|
45
45
|
export const fieldInsetSizeHeightClasses: Record<FieldSize, string> = {
|
|
46
46
|
xs: "h-field-inset-xs",
|
|
@@ -49,13 +49,13 @@ export const fieldInsetSizeHeightClasses: Record<FieldSize, string> = {
|
|
|
49
49
|
xl: "h-field-inset-xl",
|
|
50
50
|
};
|
|
51
51
|
|
|
52
|
-
//
|
|
52
|
+
// Disabled styles
|
|
53
53
|
export const fieldDisabledClass = clsx("bg-base-100 text-base-500 dark:bg-base-800");
|
|
54
54
|
|
|
55
|
-
//
|
|
55
|
+
// Textarea wrapper styles (h-field removed)
|
|
56
56
|
export const textAreaBaseClass = clsx("inline-block w-48", fieldSurface, "px-2 py-1");
|
|
57
57
|
|
|
58
|
-
//
|
|
58
|
+
// Textarea size-specific styles (h-field-* removed)
|
|
59
59
|
export const textAreaSizeClasses: Record<FieldSize, string> = {
|
|
60
60
|
xs: paddingXs,
|
|
61
61
|
sm: paddingSm,
|
|
@@ -63,10 +63,10 @@ export const textAreaSizeClasses: Record<FieldSize, string> = {
|
|
|
63
63
|
xl: paddingXl,
|
|
64
64
|
};
|
|
65
65
|
|
|
66
|
-
//
|
|
66
|
+
// Input styles
|
|
67
67
|
export const fieldInputClass = inputBase;
|
|
68
68
|
|
|
69
|
-
//
|
|
69
|
+
// Prefix icon gap classes (replaces nested ternary)
|
|
70
70
|
export const fieldGapClasses: Record<FieldSize | "default", string> = {
|
|
71
71
|
xs: "gap-0.5",
|
|
72
72
|
sm: "gap-1.5",
|
|
@@ -75,7 +75,7 @@ export const fieldGapClasses: Record<FieldSize | "default", string> = {
|
|
|
75
75
|
xl: "gap-4",
|
|
76
76
|
};
|
|
77
77
|
|
|
78
|
-
//
|
|
78
|
+
// Shared wrapper class generation function
|
|
79
79
|
export function getFieldWrapperClass(options: {
|
|
80
80
|
size?: FieldSize;
|
|
81
81
|
disabled?: boolean;
|
|
@@ -95,7 +95,7 @@ export function getFieldWrapperClass(options: {
|
|
|
95
95
|
);
|
|
96
96
|
}
|
|
97
97
|
|
|
98
|
-
// Textarea
|
|
98
|
+
// Textarea-specific wrapper class generation function
|
|
99
99
|
export function getTextareaWrapperClass(options: {
|
|
100
100
|
size?: FieldSize;
|
|
101
101
|
disabled?: boolean;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { type Component, Show } from "solid-js";
|
|
2
2
|
import { textMuted } from "../../../styles/tokens.styles";
|
|
3
3
|
|
|
4
|
-
/**
|
|
4
|
+
/** Shared component to display placeholder or NBSP when value is empty */
|
|
5
5
|
export const PlaceholderFallback: Component<{ value?: string; placeholder?: string }> = (props) => (
|
|
6
6
|
<>
|
|
7
7
|
<Show
|