@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
|
@@ -8,52 +8,52 @@ import { PlaceholderFallback } from "./FieldPlaceholder";
|
|
|
8
8
|
import { Invalid } from "../../form-control/Invalid";
|
|
9
9
|
|
|
10
10
|
export interface TextareaProps {
|
|
11
|
-
/**
|
|
11
|
+
/** Input value */
|
|
12
12
|
value?: string;
|
|
13
13
|
|
|
14
|
-
/**
|
|
14
|
+
/** Value change callback */
|
|
15
15
|
onValueChange?: (value: string) => void;
|
|
16
16
|
|
|
17
|
-
/**
|
|
17
|
+
/** Placeholder */
|
|
18
18
|
placeholder?: string;
|
|
19
19
|
|
|
20
|
-
/**
|
|
20
|
+
/** Title (tooltip) */
|
|
21
21
|
title?: string;
|
|
22
22
|
|
|
23
|
-
/**
|
|
23
|
+
/** Disabled state */
|
|
24
24
|
disabled?: boolean;
|
|
25
25
|
|
|
26
|
-
/**
|
|
26
|
+
/** Read-only */
|
|
27
27
|
readonly?: boolean;
|
|
28
28
|
|
|
29
|
-
/**
|
|
29
|
+
/** Size */
|
|
30
30
|
size?: FieldSize;
|
|
31
31
|
|
|
32
|
-
/**
|
|
32
|
+
/** Borderless style */
|
|
33
33
|
inset?: boolean;
|
|
34
34
|
|
|
35
|
-
/**
|
|
35
|
+
/** Minimum rows (default: 1) */
|
|
36
36
|
minRows?: number;
|
|
37
37
|
|
|
38
|
-
/**
|
|
38
|
+
/** Required input */
|
|
39
39
|
required?: boolean;
|
|
40
40
|
|
|
41
|
-
/**
|
|
41
|
+
/** Minimum length */
|
|
42
42
|
minLength?: number;
|
|
43
43
|
|
|
44
|
-
/**
|
|
44
|
+
/** Maximum length */
|
|
45
45
|
maxLength?: number;
|
|
46
46
|
|
|
47
|
-
/**
|
|
47
|
+
/** Custom validation function */
|
|
48
48
|
validate?: (value: string) => string | undefined;
|
|
49
49
|
|
|
50
|
-
/** touchMode:
|
|
50
|
+
/** touchMode: Show error only after blur */
|
|
51
51
|
touchMode?: boolean;
|
|
52
52
|
|
|
53
|
-
/**
|
|
53
|
+
/** Custom class */
|
|
54
54
|
class?: string;
|
|
55
55
|
|
|
56
|
-
/**
|
|
56
|
+
/** Custom style */
|
|
57
57
|
style?: JSX.CSSProperties;
|
|
58
58
|
}
|
|
59
59
|
|
|
@@ -67,14 +67,14 @@ const textareaBaseClass = clsx(
|
|
|
67
67
|
);
|
|
68
68
|
|
|
69
69
|
/**
|
|
70
|
-
* Textarea
|
|
70
|
+
* Textarea component
|
|
71
71
|
*
|
|
72
72
|
* @example
|
|
73
73
|
* ```tsx
|
|
74
|
-
* //
|
|
74
|
+
* // Basic usage
|
|
75
75
|
* <Textarea value={text()} onValueChange={setText} />
|
|
76
76
|
*
|
|
77
|
-
* //
|
|
77
|
+
* // Specify minimum rows
|
|
78
78
|
* <Textarea minRows={3} value={text()} onValueChange={setText} />
|
|
79
79
|
* ```
|
|
80
80
|
*/
|
|
@@ -103,10 +103,10 @@ export const Textarea: Component<TextareaProps> = (props) => {
|
|
|
103
103
|
onChange: () => local.onValueChange,
|
|
104
104
|
});
|
|
105
105
|
|
|
106
|
-
// IME
|
|
106
|
+
// Delay onValueChange during IME composition to prevent DOM recreation (Korean composition break)
|
|
107
107
|
const ime = createIMEHandler((v) => setValue(v));
|
|
108
108
|
|
|
109
|
-
// content div
|
|
109
|
+
// Display value for content div (includes composingValue — determines cell width/height)
|
|
110
110
|
const displayValue = () => ime.composingValue() ?? value();
|
|
111
111
|
|
|
112
112
|
const handleCompositionStart = () => ime.handleCompositionStart();
|
|
@@ -135,7 +135,7 @@ export const Textarea: Component<TextareaProps> = (props) => {
|
|
|
135
135
|
el.selectionStart = start + 1;
|
|
136
136
|
el.selectionEnd = start + 1;
|
|
137
137
|
|
|
138
|
-
// input
|
|
138
|
+
// Manually dispatch input event to sync value
|
|
139
139
|
el.dispatchEvent(new InputEvent("input", { bubbles: true }));
|
|
140
140
|
}
|
|
141
141
|
};
|
|
@@ -145,11 +145,11 @@ export const Textarea: Component<TextareaProps> = (props) => {
|
|
|
145
145
|
const val = displayValue();
|
|
146
146
|
const content =
|
|
147
147
|
val !== "" && val.split("\n").length >= rows ? val : "\n".repeat(rows - 1) + "\u00A0";
|
|
148
|
-
//
|
|
148
|
+
// Add space if ending with newline to ensure empty line height
|
|
149
149
|
return content.endsWith("\n") ? content + "\u00A0" : content;
|
|
150
150
|
};
|
|
151
151
|
|
|
152
|
-
//
|
|
152
|
+
// Wrapper class (exclude local.class when includeCustomClass=false — only apply to outer in inset)
|
|
153
153
|
const getWrapperClass = (includeCustomClass: boolean) =>
|
|
154
154
|
getTextareaWrapperClass({
|
|
155
155
|
size: local.size,
|
|
@@ -161,25 +161,25 @@ export const Textarea: Component<TextareaProps> = (props) => {
|
|
|
161
161
|
const getTextareaClass = () =>
|
|
162
162
|
twMerge(textareaBaseClass, local.size && textAreaSizeClasses[local.size], local.inset && "p-0");
|
|
163
163
|
|
|
164
|
-
//
|
|
164
|
+
// Whether editable
|
|
165
165
|
const isEditable = () => !local.disabled && !local.readonly;
|
|
166
166
|
|
|
167
|
-
//
|
|
167
|
+
// Flush uncommitted composition value when toggling disabled
|
|
168
168
|
createEffect(() => {
|
|
169
169
|
if (!isEditable()) {
|
|
170
170
|
ime.flushComposition();
|
|
171
171
|
}
|
|
172
172
|
});
|
|
173
173
|
|
|
174
|
-
//
|
|
174
|
+
// Validation error message (check in order, return first failure message)
|
|
175
175
|
const errorMsg = createMemo(() => {
|
|
176
176
|
const v = value();
|
|
177
|
-
if (local.required && !v) return "
|
|
177
|
+
if (local.required && !v) return "This is a required field";
|
|
178
178
|
if (v) {
|
|
179
179
|
if (local.minLength != null && v.length < local.minLength)
|
|
180
|
-
return
|
|
180
|
+
return `Enter at least ${local.minLength} characters`;
|
|
181
181
|
if (local.maxLength != null && v.length > local.maxLength)
|
|
182
|
-
return
|
|
182
|
+
return `Enter up to ${local.maxLength} characters`;
|
|
183
183
|
}
|
|
184
184
|
return local.validate?.(v);
|
|
185
185
|
});
|
|
@@ -189,7 +189,7 @@ export const Textarea: Component<TextareaProps> = (props) => {
|
|
|
189
189
|
<Show
|
|
190
190
|
when={local.inset}
|
|
191
191
|
fallback={
|
|
192
|
-
// standalone
|
|
192
|
+
// standalone mode: maintain existing Show pattern
|
|
193
193
|
<Show
|
|
194
194
|
when={isEditable()}
|
|
195
195
|
fallback={
|
|
@@ -235,7 +235,7 @@ export const Textarea: Component<TextareaProps> = (props) => {
|
|
|
235
235
|
</Show>
|
|
236
236
|
}
|
|
237
237
|
>
|
|
238
|
-
{/* inset
|
|
238
|
+
{/* inset mode: dual-element overlay pattern */}
|
|
239
239
|
<div
|
|
240
240
|
{...rest}
|
|
241
241
|
data-textarea-field
|
|
@@ -9,54 +9,54 @@ import { Invalid } from "../../form-control/Invalid";
|
|
|
9
9
|
type TimePickerUnit = "minute" | "second";
|
|
10
10
|
|
|
11
11
|
export interface TimePickerProps {
|
|
12
|
-
/**
|
|
12
|
+
/** Input value */
|
|
13
13
|
value?: Time;
|
|
14
14
|
|
|
15
|
-
/**
|
|
15
|
+
/** Value change callback */
|
|
16
16
|
onValueChange?: (value: Time | undefined) => void;
|
|
17
17
|
|
|
18
|
-
/**
|
|
18
|
+
/** Time unit */
|
|
19
19
|
unit?: TimePickerUnit;
|
|
20
20
|
|
|
21
|
-
/**
|
|
21
|
+
/** Title (tooltip) */
|
|
22
22
|
title?: string;
|
|
23
23
|
|
|
24
|
-
/**
|
|
24
|
+
/** Disable input */
|
|
25
25
|
disabled?: boolean;
|
|
26
26
|
|
|
27
|
-
/**
|
|
27
|
+
/** Read-only */
|
|
28
28
|
readonly?: boolean;
|
|
29
29
|
|
|
30
|
-
/**
|
|
30
|
+
/** Size */
|
|
31
31
|
size?: FieldSize;
|
|
32
32
|
|
|
33
|
-
/**
|
|
33
|
+
/** Borderless style */
|
|
34
34
|
inset?: boolean;
|
|
35
35
|
|
|
36
|
-
/**
|
|
36
|
+
/** Custom class */
|
|
37
37
|
class?: string;
|
|
38
38
|
|
|
39
|
-
/**
|
|
39
|
+
/** Custom style */
|
|
40
40
|
style?: JSX.CSSProperties;
|
|
41
41
|
|
|
42
|
-
/**
|
|
42
|
+
/** Minimum time */
|
|
43
43
|
min?: Time;
|
|
44
44
|
|
|
45
|
-
/**
|
|
45
|
+
/** Maximum time */
|
|
46
46
|
max?: Time;
|
|
47
47
|
|
|
48
|
-
/**
|
|
48
|
+
/** Required input */
|
|
49
49
|
required?: boolean;
|
|
50
50
|
|
|
51
|
-
/**
|
|
51
|
+
/** Custom validation function */
|
|
52
52
|
validate?: (value: Time | 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
|
-
* Time
|
|
59
|
+
* Convert Time value to input value string
|
|
60
60
|
*/
|
|
61
61
|
function formatValue(value: Time | undefined, unit: TimePickerUnit): string {
|
|
62
62
|
if (value == null) return "";
|
|
@@ -70,20 +70,20 @@ function formatValue(value: Time | undefined, unit: TimePickerUnit): string {
|
|
|
70
70
|
}
|
|
71
71
|
|
|
72
72
|
/**
|
|
73
|
-
*
|
|
73
|
+
* Convert input string to Time
|
|
74
74
|
*/
|
|
75
75
|
function parseValue(str: string, unit: TimePickerUnit): Time | undefined {
|
|
76
76
|
if (str === "") return undefined;
|
|
77
77
|
|
|
78
78
|
switch (unit) {
|
|
79
79
|
case "minute": {
|
|
80
|
-
// HH:mm
|
|
80
|
+
// HH:mm format
|
|
81
81
|
const match = /^(\d{2}):(\d{2})$/.exec(str);
|
|
82
82
|
if (match == null) return undefined;
|
|
83
83
|
return new Time(Number(match[1]), Number(match[2]), 0);
|
|
84
84
|
}
|
|
85
85
|
case "second": {
|
|
86
|
-
// HH:mm:ss
|
|
86
|
+
// HH:mm:ss format
|
|
87
87
|
const match = /^(\d{2}):(\d{2}):(\d{2})$/.exec(str);
|
|
88
88
|
if (match == null) return undefined;
|
|
89
89
|
return new Time(Number(match[1]), Number(match[2]), Number(match[3]));
|
|
@@ -92,17 +92,17 @@ function parseValue(str: string, unit: TimePickerUnit): Time | undefined {
|
|
|
92
92
|
}
|
|
93
93
|
|
|
94
94
|
/**
|
|
95
|
-
* TimePicker
|
|
95
|
+
* TimePicker component
|
|
96
96
|
*
|
|
97
|
-
*
|
|
98
|
-
*
|
|
97
|
+
* Time input field supporting minute and second units.
|
|
98
|
+
* Handles string ↔ Time type conversion internally.
|
|
99
99
|
*
|
|
100
100
|
* @example
|
|
101
101
|
* ```tsx
|
|
102
|
-
* //
|
|
102
|
+
* // Time input (minute unit)
|
|
103
103
|
* <TimePicker unit="minute" value={time()} onValueChange={setTime} />
|
|
104
104
|
*
|
|
105
|
-
* //
|
|
105
|
+
* // Time input (second unit)
|
|
106
106
|
* <TimePicker unit="second" value={time()} onValueChange={setTime} />
|
|
107
107
|
* ```
|
|
108
108
|
*/
|
|
@@ -125,26 +125,26 @@ export const TimePicker: Component<TimePickerProps> = (props) => {
|
|
|
125
125
|
"touchMode",
|
|
126
126
|
]);
|
|
127
127
|
|
|
128
|
-
//
|
|
128
|
+
// Default unit is minute
|
|
129
129
|
const fieldType = () => local.unit ?? "minute";
|
|
130
130
|
|
|
131
|
-
// controlled/uncontrolled
|
|
131
|
+
// Support controlled/uncontrolled pattern
|
|
132
132
|
const [value, setValue] = createControllableSignal({
|
|
133
133
|
value: () => local.value,
|
|
134
134
|
onChange: () => local.onValueChange,
|
|
135
135
|
});
|
|
136
136
|
|
|
137
|
-
//
|
|
137
|
+
// Display value
|
|
138
138
|
const displayValue = () => formatValue(value(), fieldType());
|
|
139
139
|
|
|
140
|
-
//
|
|
140
|
+
// Change handler (on blur or Enter)
|
|
141
141
|
const handleChange: JSX.EventHandler<HTMLInputElement, Event> = (e) => {
|
|
142
142
|
const newValue = e.currentTarget.value;
|
|
143
143
|
const parsed = parseValue(newValue, fieldType());
|
|
144
144
|
setValue(parsed);
|
|
145
145
|
};
|
|
146
146
|
|
|
147
|
-
//
|
|
147
|
+
// Wrapper class
|
|
148
148
|
const getWrapperClass = (includeCustomClass: boolean) =>
|
|
149
149
|
getFieldWrapperClass({
|
|
150
150
|
size: local.size,
|
|
@@ -154,21 +154,21 @@ export const TimePicker: Component<TimePickerProps> = (props) => {
|
|
|
154
154
|
extra: "min-w-24",
|
|
155
155
|
});
|
|
156
156
|
|
|
157
|
-
//
|
|
157
|
+
// Editable check
|
|
158
158
|
const isEditable = () => !local.disabled && !local.readonly;
|
|
159
159
|
|
|
160
|
-
//
|
|
160
|
+
// Step attribute (1 when second)
|
|
161
161
|
const getStep = () => (fieldType() === "second" ? "1" : undefined);
|
|
162
162
|
|
|
163
|
-
//
|
|
163
|
+
// Validation message (check in order, return first error)
|
|
164
164
|
const errorMsg = createMemo(() => {
|
|
165
165
|
const v = value();
|
|
166
|
-
if (local.required && v === undefined) return "
|
|
166
|
+
if (local.required && v === undefined) return "This field is required";
|
|
167
167
|
if (v !== undefined) {
|
|
168
168
|
if (local.min !== undefined && v.tick < local.min.tick)
|
|
169
|
-
return
|
|
169
|
+
return `Must be greater than or equal to ${local.min.toFormatString("HH:mm:ss")}`;
|
|
170
170
|
if (local.max !== undefined && v.tick > local.max.tick)
|
|
171
|
-
return
|
|
171
|
+
return `Must be less than or equal to ${local.max.toFormatString("HH:mm:ss")}`;
|
|
172
172
|
}
|
|
173
173
|
return local.validate?.(v);
|
|
174
174
|
});
|
|
@@ -182,7 +182,7 @@ export const TimePicker: Component<TimePickerProps> = (props) => {
|
|
|
182
182
|
<Show
|
|
183
183
|
when={local.inset}
|
|
184
184
|
fallback={
|
|
185
|
-
// standalone
|
|
185
|
+
// standalone mode
|
|
186
186
|
<Show
|
|
187
187
|
when={isEditable()}
|
|
188
188
|
fallback={
|
|
@@ -211,7 +211,7 @@ export const TimePicker: Component<TimePickerProps> = (props) => {
|
|
|
211
211
|
</Show>
|
|
212
212
|
}
|
|
213
213
|
>
|
|
214
|
-
{/* inset
|
|
214
|
+
{/* inset mode: dual-element overlay pattern */}
|
|
215
215
|
<div {...rest} data-time-field class={clsx("relative", local.class)} style={local.style}>
|
|
216
216
|
<div
|
|
217
217
|
data-time-field-content
|
|
@@ -9,35 +9,35 @@ import { IconEraser, IconArrowLeft } from "@tabler/icons-solidjs";
|
|
|
9
9
|
import type { ComponentSize } from "../../../styles/tokens.styles";
|
|
10
10
|
|
|
11
11
|
export interface NumpadProps {
|
|
12
|
-
/**
|
|
12
|
+
/** Input value */
|
|
13
13
|
value?: number;
|
|
14
|
-
/**
|
|
14
|
+
/** Value change callback */
|
|
15
15
|
onValueChange?: (value: number | undefined) => void;
|
|
16
|
-
/**
|
|
16
|
+
/** Placeholder */
|
|
17
17
|
placeholder?: string;
|
|
18
|
-
/**
|
|
18
|
+
/** Whether input is required */
|
|
19
19
|
required?: boolean;
|
|
20
|
-
/**
|
|
20
|
+
/** Disable direct text field input */
|
|
21
21
|
inputDisabled?: boolean;
|
|
22
|
-
/**
|
|
22
|
+
/** Show Enter button */
|
|
23
23
|
useEnterButton?: boolean;
|
|
24
|
-
/**
|
|
24
|
+
/** Show minus button */
|
|
25
25
|
useMinusButton?: boolean;
|
|
26
|
-
/**
|
|
26
|
+
/** Enter button click callback */
|
|
27
27
|
onEnterButtonClick?: () => void;
|
|
28
|
-
/**
|
|
28
|
+
/** Size */
|
|
29
29
|
size?: ComponentSize;
|
|
30
|
-
/**
|
|
30
|
+
/** Custom class */
|
|
31
31
|
class?: string;
|
|
32
|
-
/**
|
|
32
|
+
/** Custom style */
|
|
33
33
|
style?: JSX.CSSProperties;
|
|
34
34
|
}
|
|
35
35
|
|
|
36
36
|
const baseClass = clsx("grid grid-cols-3", "gap-0.5", "w-auto");
|
|
37
37
|
|
|
38
38
|
/**
|
|
39
|
-
* inputStr
|
|
40
|
-
*
|
|
39
|
+
* Parse inputStr and convert to number.
|
|
40
|
+
* Returns undefined for empty string or "-" only.
|
|
41
41
|
*/
|
|
42
42
|
function parseInputStr(str: string): number | undefined {
|
|
43
43
|
if (str === "" || str === "-" || str === "." || str === "-.") return undefined;
|
|
@@ -46,7 +46,7 @@ function parseInputStr(str: string): number | undefined {
|
|
|
46
46
|
}
|
|
47
47
|
|
|
48
48
|
/**
|
|
49
|
-
*
|
|
49
|
+
* Convert number to inputStr.
|
|
50
50
|
*/
|
|
51
51
|
function valueToInputStr(value: number | undefined): string {
|
|
52
52
|
if (value == null) return "";
|
|
@@ -54,18 +54,18 @@ function valueToInputStr(value: number | undefined): string {
|
|
|
54
54
|
}
|
|
55
55
|
|
|
56
56
|
export const Numpad: Component<NumpadProps> = (props) => {
|
|
57
|
-
//
|
|
57
|
+
// Controlled/uncontrolled pattern
|
|
58
58
|
const [value, setValue] = createControllableSignal({
|
|
59
59
|
value: () => props.value,
|
|
60
60
|
onChange: () => props.onValueChange,
|
|
61
61
|
});
|
|
62
62
|
|
|
63
|
-
//
|
|
63
|
+
// Internal input string state
|
|
64
64
|
const [inputStr, setInputStr] = createSignal<string>("");
|
|
65
|
-
//
|
|
65
|
+
// Prevent external value → inputStr sync when button input is in progress
|
|
66
66
|
let isButtonInput = false;
|
|
67
67
|
|
|
68
|
-
//
|
|
68
|
+
// Sync inputStr when external value changes (only when not in button input)
|
|
69
69
|
createEffect(() => {
|
|
70
70
|
const val = value();
|
|
71
71
|
if (!isButtonInput) {
|
|
@@ -74,38 +74,38 @@ export const Numpad: Component<NumpadProps> = (props) => {
|
|
|
74
74
|
isButtonInput = false;
|
|
75
75
|
});
|
|
76
76
|
|
|
77
|
-
// inputStr
|
|
77
|
+
// Parse inputStr and apply to value
|
|
78
78
|
const applyInputStr = (str: string) => {
|
|
79
79
|
isButtonInput = true;
|
|
80
80
|
setInputStr(str);
|
|
81
81
|
setValue(parseInputStr(str));
|
|
82
82
|
};
|
|
83
83
|
|
|
84
|
-
//
|
|
84
|
+
// Digit buttons (0-9)
|
|
85
85
|
const handleDigit = (digit: string) => {
|
|
86
86
|
applyInputStr(inputStr() + digit);
|
|
87
87
|
};
|
|
88
88
|
|
|
89
|
-
//
|
|
89
|
+
// Decimal point button
|
|
90
90
|
const handleDot = () => {
|
|
91
91
|
const current = inputStr();
|
|
92
92
|
if (current.includes(".")) return;
|
|
93
93
|
applyInputStr(current + ".");
|
|
94
94
|
};
|
|
95
95
|
|
|
96
|
-
// C (
|
|
96
|
+
// C (Clear) button
|
|
97
97
|
const handleClear = () => {
|
|
98
98
|
applyInputStr("");
|
|
99
99
|
};
|
|
100
100
|
|
|
101
|
-
// BS (
|
|
101
|
+
// BS (Backspace) button
|
|
102
102
|
const handleBackspace = () => {
|
|
103
103
|
const current = inputStr();
|
|
104
104
|
if (current.length === 0) return;
|
|
105
105
|
applyInputStr(current.slice(0, -1));
|
|
106
106
|
};
|
|
107
107
|
|
|
108
|
-
// - (
|
|
108
|
+
// - (Minus toggle) button
|
|
109
109
|
const handleMinus = () => {
|
|
110
110
|
const current = inputStr();
|
|
111
111
|
if (current.startsWith("-")) {
|
|
@@ -115,12 +115,12 @@ export const Numpad: Component<NumpadProps> = (props) => {
|
|
|
115
115
|
}
|
|
116
116
|
};
|
|
117
117
|
|
|
118
|
-
// ENT
|
|
118
|
+
// ENT button
|
|
119
119
|
const handleEnter = () => {
|
|
120
120
|
props.onEnterButtonClick?.();
|
|
121
121
|
};
|
|
122
122
|
|
|
123
|
-
// NumberInput
|
|
123
|
+
// NumberInput value change handler
|
|
124
124
|
const handleFieldValueChange = (val: number | undefined) => {
|
|
125
125
|
setValue(val);
|
|
126
126
|
setInputStr(valueToInputStr(val));
|