@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
|
@@ -21,7 +21,7 @@ import {
|
|
|
21
21
|
import { PlaceholderFallback } from "./FieldPlaceholder";
|
|
22
22
|
import { Invalid } from "../../form-control/Invalid";
|
|
23
23
|
|
|
24
|
-
// NumberInput
|
|
24
|
+
// NumberInput-specific input style (right-aligned + spinner hidden)
|
|
25
25
|
const numberInputClass = clsx(
|
|
26
26
|
fieldInputClass,
|
|
27
27
|
"text-right",
|
|
@@ -38,67 +38,67 @@ const NumberInputSlotsContext = createContext<NumberInputSlotsContextValue>();
|
|
|
38
38
|
const NumberInputPrefix = createSlotComponent(NumberInputSlotsContext, (ctx) => ctx.setPrefix);
|
|
39
39
|
|
|
40
40
|
export interface NumberInputProps {
|
|
41
|
-
/**
|
|
41
|
+
/** Input value */
|
|
42
42
|
value?: number;
|
|
43
43
|
|
|
44
|
-
/**
|
|
44
|
+
/** Value change callback */
|
|
45
45
|
onValueChange?: (value: number | undefined) => void;
|
|
46
46
|
|
|
47
|
-
/**
|
|
47
|
+
/** Display thousand separator (default: true) */
|
|
48
48
|
comma?: boolean;
|
|
49
49
|
|
|
50
|
-
/**
|
|
50
|
+
/** Minimum decimal places */
|
|
51
51
|
minDigits?: number;
|
|
52
52
|
|
|
53
|
-
/**
|
|
53
|
+
/** Placeholder text */
|
|
54
54
|
placeholder?: string;
|
|
55
55
|
|
|
56
|
-
/**
|
|
56
|
+
/** Title (tooltip) */
|
|
57
57
|
title?: string;
|
|
58
58
|
|
|
59
|
-
/**
|
|
59
|
+
/** Disable input */
|
|
60
60
|
disabled?: boolean;
|
|
61
61
|
|
|
62
|
-
/**
|
|
62
|
+
/** Read-only */
|
|
63
63
|
readonly?: boolean;
|
|
64
64
|
|
|
65
|
-
/**
|
|
65
|
+
/** Size */
|
|
66
66
|
size?: FieldSize;
|
|
67
67
|
|
|
68
|
-
/**
|
|
68
|
+
/** Borderless style */
|
|
69
69
|
inset?: boolean;
|
|
70
70
|
|
|
71
|
-
/**
|
|
71
|
+
/** Custom class */
|
|
72
72
|
class?: string;
|
|
73
73
|
|
|
74
|
-
/**
|
|
74
|
+
/** Custom style */
|
|
75
75
|
style?: JSX.CSSProperties;
|
|
76
76
|
|
|
77
|
-
/**
|
|
77
|
+
/** Required input */
|
|
78
78
|
required?: boolean;
|
|
79
79
|
|
|
80
|
-
/**
|
|
80
|
+
/** Minimum value */
|
|
81
81
|
min?: number;
|
|
82
82
|
|
|
83
|
-
/**
|
|
83
|
+
/** Maximum value */
|
|
84
84
|
max?: number;
|
|
85
85
|
|
|
86
|
-
/**
|
|
86
|
+
/** Custom validation function */
|
|
87
87
|
validate?: (value: number | undefined) => string | undefined;
|
|
88
88
|
|
|
89
|
-
/** touchMode:
|
|
89
|
+
/** touchMode: show errors only after blur */
|
|
90
90
|
touchMode?: boolean;
|
|
91
91
|
|
|
92
|
-
/**
|
|
92
|
+
/** Children (Prefix slot, etc.) */
|
|
93
93
|
children?: JSX.Element;
|
|
94
94
|
}
|
|
95
95
|
|
|
96
96
|
/**
|
|
97
|
-
*
|
|
98
|
-
* @param value
|
|
99
|
-
* @param useComma
|
|
100
|
-
* @param minDigits
|
|
101
|
-
* @returns
|
|
97
|
+
* Convert number to display string
|
|
98
|
+
* @param value - Numeric value
|
|
99
|
+
* @param useComma - Whether to use thousand separator
|
|
100
|
+
* @param minDigits - Minimum decimal places
|
|
101
|
+
* @returns Display string
|
|
102
102
|
*/
|
|
103
103
|
function formatNumber(value: number | undefined, useComma: boolean, minDigits?: number): string {
|
|
104
104
|
if (value == null) return "";
|
|
@@ -106,12 +106,12 @@ function formatNumber(value: number | undefined, useComma: boolean, minDigits?:
|
|
|
106
106
|
let result: string;
|
|
107
107
|
|
|
108
108
|
if (minDigits != null && minDigits > 0) {
|
|
109
|
-
//
|
|
109
|
+
// Check current decimal places
|
|
110
110
|
const valueStr = String(value);
|
|
111
111
|
const decimalIndex = valueStr.indexOf(".");
|
|
112
112
|
const currentDigits = decimalIndex >= 0 ? valueStr.length - decimalIndex - 1 : 0;
|
|
113
113
|
|
|
114
|
-
//
|
|
114
|
+
// Pad if less than minimum decimal places
|
|
115
115
|
if (currentDigits < minDigits) {
|
|
116
116
|
result = value.toFixed(minDigits);
|
|
117
117
|
} else {
|
|
@@ -122,11 +122,11 @@ function formatNumber(value: number | undefined, useComma: boolean, minDigits?:
|
|
|
122
122
|
}
|
|
123
123
|
|
|
124
124
|
if (useComma) {
|
|
125
|
-
//
|
|
125
|
+
// Separate integer and decimal parts
|
|
126
126
|
const dotIndex = result.indexOf(".");
|
|
127
127
|
const integerPart = dotIndex >= 0 ? result.slice(0, dotIndex) : result;
|
|
128
128
|
const decimalPart = dotIndex >= 0 ? result.slice(dotIndex + 1) : null;
|
|
129
|
-
//
|
|
129
|
+
// Add comma only to integer part
|
|
130
130
|
const formattedInteger = integerPart.replace(/\B(?=(\d{3})+(?!\d))/g, ",");
|
|
131
131
|
result = decimalPart !== null ? `${formattedInteger}.${decimalPart}` : formattedInteger;
|
|
132
132
|
}
|
|
@@ -135,17 +135,17 @@ function formatNumber(value: number | undefined, useComma: boolean, minDigits?:
|
|
|
135
135
|
}
|
|
136
136
|
|
|
137
137
|
/**
|
|
138
|
-
*
|
|
139
|
-
* @param str
|
|
140
|
-
* @returns
|
|
138
|
+
* Convert display string to number
|
|
139
|
+
* @param str - Display string
|
|
140
|
+
* @returns Numeric value or undefined
|
|
141
141
|
*/
|
|
142
142
|
function parseNumber(str: string): number | undefined {
|
|
143
143
|
if (str === "" || str === "-") return undefined;
|
|
144
144
|
|
|
145
|
-
//
|
|
145
|
+
// Remove commas
|
|
146
146
|
const cleanStr = str.replace(/,/g, "");
|
|
147
147
|
|
|
148
|
-
//
|
|
148
|
+
// Attempt number conversion
|
|
149
149
|
const num = Number(cleanStr);
|
|
150
150
|
|
|
151
151
|
if (Number.isNaN(num)) return undefined;
|
|
@@ -154,18 +154,18 @@ function parseNumber(str: string): number | undefined {
|
|
|
154
154
|
}
|
|
155
155
|
|
|
156
156
|
/**
|
|
157
|
-
*
|
|
158
|
-
* @param str
|
|
159
|
-
* @returns
|
|
157
|
+
* Check if input string is valid number format
|
|
158
|
+
* @param str - Input string
|
|
159
|
+
* @returns Whether valid
|
|
160
160
|
*/
|
|
161
161
|
function isValidNumberInput(str: string): boolean {
|
|
162
162
|
if (str === "" || str === "-" || str === ".") return true;
|
|
163
163
|
|
|
164
|
-
//
|
|
164
|
+
// Remove commas
|
|
165
165
|
const cleanStr = str.replace(/,/g, "");
|
|
166
166
|
|
|
167
|
-
//
|
|
168
|
-
//
|
|
167
|
+
// Number format pattern (including input-in-progress state)
|
|
168
|
+
// Examples: "123", "123.", "123.45", "-123", "-", "-.123"
|
|
169
169
|
return /^-?\d*\.?\d*$/.test(cleanStr);
|
|
170
170
|
}
|
|
171
171
|
|
|
@@ -175,20 +175,20 @@ interface NumberInputComponent {
|
|
|
175
175
|
}
|
|
176
176
|
|
|
177
177
|
/**
|
|
178
|
-
* NumberInput
|
|
178
|
+
* NumberInput component
|
|
179
179
|
*
|
|
180
180
|
* @example
|
|
181
181
|
* ```tsx
|
|
182
|
-
* //
|
|
182
|
+
* // Basic usage
|
|
183
183
|
* <NumberInput value={num()} onValueChange={setNum} />
|
|
184
184
|
*
|
|
185
|
-
* //
|
|
185
|
+
* // Without thousand separator
|
|
186
186
|
* <NumberInput value={num()} comma={false} />
|
|
187
187
|
*
|
|
188
|
-
* //
|
|
188
|
+
* // Specify minimum decimal places
|
|
189
189
|
* <NumberInput value={price()} minDigits={2} />
|
|
190
190
|
*
|
|
191
|
-
* // Prefix
|
|
191
|
+
* // Prefix slot
|
|
192
192
|
* <NumberInput value={price()}>
|
|
193
193
|
* <NumberInput.Prefix>₩</NumberInput.Prefix>
|
|
194
194
|
* </NumberInput>
|
|
@@ -216,11 +216,11 @@ export const NumberInput: NumberInputComponent = (props) => {
|
|
|
216
216
|
"children",
|
|
217
217
|
]);
|
|
218
218
|
|
|
219
|
-
//
|
|
219
|
+
// Internal string state to track editing state
|
|
220
220
|
const [inputStr, setInputStr] = createSignal<string>("");
|
|
221
221
|
const [isEditing, setIsEditing] = createSignal(false);
|
|
222
222
|
|
|
223
|
-
// controlled/uncontrolled
|
|
223
|
+
// Support controlled/uncontrolled pattern
|
|
224
224
|
const [value, setValue] = createControllableSignal({
|
|
225
225
|
value: () => local.value,
|
|
226
226
|
onChange: () => local.onValueChange,
|
|
@@ -229,7 +229,7 @@ export const NumberInput: NumberInputComponent = (props) => {
|
|
|
229
229
|
const [prefix, setPrefix] = createSlotSignal();
|
|
230
230
|
const prefixEl = () => prefix() !== undefined;
|
|
231
231
|
|
|
232
|
-
//
|
|
232
|
+
// Sync input string when external value changes
|
|
233
233
|
createEffect(() => {
|
|
234
234
|
const val = value();
|
|
235
235
|
if (!isEditing()) {
|
|
@@ -237,7 +237,7 @@ export const NumberInput: NumberInputComponent = (props) => {
|
|
|
237
237
|
}
|
|
238
238
|
});
|
|
239
239
|
|
|
240
|
-
//
|
|
240
|
+
// Compute display value
|
|
241
241
|
const displayValue = () => {
|
|
242
242
|
if (isEditing()) {
|
|
243
243
|
return inputStr();
|
|
@@ -245,13 +245,13 @@ export const NumberInput: NumberInputComponent = (props) => {
|
|
|
245
245
|
return formatNumber(value(), local.comma ?? true, local.minDigits);
|
|
246
246
|
};
|
|
247
247
|
|
|
248
|
-
//
|
|
248
|
+
// Input handler
|
|
249
249
|
const handleInput: JSX.InputEventHandler<HTMLInputElement, InputEvent> = (e) => {
|
|
250
250
|
const newValue = e.currentTarget.value;
|
|
251
251
|
|
|
252
|
-
//
|
|
252
|
+
// Check if valid number format
|
|
253
253
|
if (!isValidNumberInput(newValue)) {
|
|
254
|
-
//
|
|
254
|
+
// Ignore invalid input and restore previous value
|
|
255
255
|
e.currentTarget.value = inputStr();
|
|
256
256
|
return;
|
|
257
257
|
}
|
|
@@ -259,15 +259,15 @@ export const NumberInput: NumberInputComponent = (props) => {
|
|
|
259
259
|
setInputStr(newValue);
|
|
260
260
|
setIsEditing(true);
|
|
261
261
|
|
|
262
|
-
//
|
|
262
|
+
// Convert to number
|
|
263
263
|
const num = parseNumber(newValue);
|
|
264
264
|
setValue(num);
|
|
265
265
|
};
|
|
266
266
|
|
|
267
|
-
//
|
|
267
|
+
// Focus handler
|
|
268
268
|
const handleFocus: JSX.FocusEventHandler<HTMLInputElement, FocusEvent> = () => {
|
|
269
269
|
setIsEditing(true);
|
|
270
|
-
// focus
|
|
270
|
+
// On focus, set value without comma
|
|
271
271
|
const val = value();
|
|
272
272
|
if (val != null) {
|
|
273
273
|
setInputStr(String(val));
|
|
@@ -276,14 +276,14 @@ export const NumberInput: NumberInputComponent = (props) => {
|
|
|
276
276
|
}
|
|
277
277
|
};
|
|
278
278
|
|
|
279
|
-
//
|
|
279
|
+
// Blur handler
|
|
280
280
|
const handleBlur: JSX.FocusEventHandler<HTMLInputElement, FocusEvent> = () => {
|
|
281
281
|
setIsEditing(false);
|
|
282
|
-
// blur
|
|
282
|
+
// On blur, apply formatting
|
|
283
283
|
setInputStr(formatNumber(value(), local.comma ?? true, local.minDigits));
|
|
284
284
|
};
|
|
285
285
|
|
|
286
|
-
//
|
|
286
|
+
// Wrapper class (exclude local.class in inset branch)
|
|
287
287
|
const getWrapperClass = (includeCustomClass: boolean) =>
|
|
288
288
|
getFieldWrapperClass({
|
|
289
289
|
size: local.size,
|
|
@@ -295,13 +295,13 @@ export const NumberInput: NumberInputComponent = (props) => {
|
|
|
295
295
|
|
|
296
296
|
const isEditable = () => !local.disabled && !local.readonly;
|
|
297
297
|
|
|
298
|
-
//
|
|
298
|
+
// Validation message (check in order, return first error)
|
|
299
299
|
const errorMsg = createMemo(() => {
|
|
300
300
|
const v = value();
|
|
301
|
-
if (local.required && v === undefined) return "
|
|
301
|
+
if (local.required && v === undefined) return "This field is required";
|
|
302
302
|
if (v !== undefined) {
|
|
303
|
-
if (local.min !== undefined && v < local.min) return
|
|
304
|
-
if (local.max !== undefined && v > local.max) return
|
|
303
|
+
if (local.min !== undefined && v < local.min) return `Minimum value is ${local.min}`;
|
|
304
|
+
if (local.max !== undefined && v > local.max) return `Maximum value is ${local.max}`;
|
|
305
305
|
}
|
|
306
306
|
return local.validate?.(v);
|
|
307
307
|
});
|
|
@@ -317,7 +317,7 @@ export const NumberInput: NumberInputComponent = (props) => {
|
|
|
317
317
|
<Show
|
|
318
318
|
when={local.inset}
|
|
319
319
|
fallback={
|
|
320
|
-
// standalone
|
|
320
|
+
// standalone mode: keep existing Show pattern
|
|
321
321
|
<Show
|
|
322
322
|
when={isEditable()}
|
|
323
323
|
fallback={
|
|
@@ -358,7 +358,7 @@ export const NumberInput: NumberInputComponent = (props) => {
|
|
|
358
358
|
</Show>
|
|
359
359
|
}
|
|
360
360
|
>
|
|
361
|
-
{/* inset
|
|
361
|
+
{/* inset mode: dual-element overlay pattern */}
|
|
362
362
|
<div
|
|
363
363
|
{...rest}
|
|
364
364
|
data-number-field
|
|
@@ -25,72 +25,72 @@ type TextInputType = "text" | "password" | "email";
|
|
|
25
25
|
const TextInputPrefix = createSlotComponent(TextInputSlotsContext, (ctx) => ctx.setPrefix);
|
|
26
26
|
|
|
27
27
|
export interface TextInputProps {
|
|
28
|
-
/**
|
|
28
|
+
/** Input value */
|
|
29
29
|
value?: string;
|
|
30
30
|
|
|
31
|
-
/**
|
|
31
|
+
/** Value change callback */
|
|
32
32
|
onValueChange?: (value: string) => void;
|
|
33
33
|
|
|
34
|
-
/**
|
|
34
|
+
/** Input type */
|
|
35
35
|
type?: TextInputType;
|
|
36
36
|
|
|
37
|
-
/**
|
|
37
|
+
/** Placeholder */
|
|
38
38
|
placeholder?: string;
|
|
39
39
|
|
|
40
|
-
/**
|
|
40
|
+
/** Title (tooltip) */
|
|
41
41
|
title?: string;
|
|
42
42
|
|
|
43
|
-
/**
|
|
43
|
+
/** Autocomplete */
|
|
44
44
|
autocomplete?: JSX.HTMLAutocomplete;
|
|
45
45
|
|
|
46
|
-
/**
|
|
46
|
+
/** Disabled state */
|
|
47
47
|
disabled?: boolean;
|
|
48
48
|
|
|
49
|
-
/**
|
|
49
|
+
/** Read-only */
|
|
50
50
|
readonly?: boolean;
|
|
51
51
|
|
|
52
|
-
/**
|
|
52
|
+
/** Size */
|
|
53
53
|
size?: FieldSize;
|
|
54
54
|
|
|
55
|
-
/**
|
|
55
|
+
/** Borderless style */
|
|
56
56
|
inset?: boolean;
|
|
57
57
|
|
|
58
|
-
/**
|
|
58
|
+
/** Input format (e.g., XXX-XXXX-XXXX) */
|
|
59
59
|
format?: string;
|
|
60
60
|
|
|
61
|
-
/**
|
|
61
|
+
/** Required input */
|
|
62
62
|
required?: boolean;
|
|
63
63
|
|
|
64
|
-
/**
|
|
64
|
+
/** Minimum length */
|
|
65
65
|
minLength?: number;
|
|
66
66
|
|
|
67
|
-
/**
|
|
67
|
+
/** Maximum length */
|
|
68
68
|
maxLength?: number;
|
|
69
69
|
|
|
70
|
-
/**
|
|
70
|
+
/** Input pattern (regex string) */
|
|
71
71
|
pattern?: string;
|
|
72
72
|
|
|
73
|
-
/**
|
|
73
|
+
/** Custom validation function */
|
|
74
74
|
validate?: (value: string) => string | undefined;
|
|
75
75
|
|
|
76
|
-
/** touchMode:
|
|
76
|
+
/** touchMode: Show error only after blur */
|
|
77
77
|
touchMode?: boolean;
|
|
78
78
|
|
|
79
|
-
/**
|
|
79
|
+
/** Custom class */
|
|
80
80
|
class?: string;
|
|
81
81
|
|
|
82
|
-
/**
|
|
82
|
+
/** Custom style */
|
|
83
83
|
style?: JSX.CSSProperties;
|
|
84
84
|
|
|
85
|
-
/** children (TextInput.Prefix
|
|
85
|
+
/** children (TextInput.Prefix slot) */
|
|
86
86
|
children?: JSX.Element;
|
|
87
87
|
}
|
|
88
88
|
|
|
89
89
|
/**
|
|
90
|
-
*
|
|
91
|
-
* @param value
|
|
92
|
-
* @param format
|
|
93
|
-
* @returns
|
|
90
|
+
* Apply format to value
|
|
91
|
+
* @param value original value
|
|
92
|
+
* @param format format string (e.g., XXX-XXXX-XXXX)
|
|
93
|
+
* @returns formatted value
|
|
94
94
|
*/
|
|
95
95
|
function applyFormat(value: string, format: string): string {
|
|
96
96
|
if (!value || !format) return value;
|
|
@@ -111,10 +111,10 @@ function applyFormat(value: string, format: string): string {
|
|
|
111
111
|
}
|
|
112
112
|
|
|
113
113
|
/**
|
|
114
|
-
*
|
|
115
|
-
* @param formattedValue
|
|
116
|
-
* @param format
|
|
117
|
-
* @returns
|
|
114
|
+
* Remove format characters to extract original value
|
|
115
|
+
* @param formattedValue formatted value
|
|
116
|
+
* @param format format string
|
|
117
|
+
* @returns original value
|
|
118
118
|
*/
|
|
119
119
|
function removeFormat(formattedValue: string, format: string): string {
|
|
120
120
|
if (!formattedValue || !format) return formattedValue;
|
|
@@ -135,18 +135,18 @@ function removeFormat(formattedValue: string, format: string): string {
|
|
|
135
135
|
}
|
|
136
136
|
|
|
137
137
|
/**
|
|
138
|
-
* TextInput
|
|
138
|
+
* TextInput component
|
|
139
139
|
*
|
|
140
140
|
* @example
|
|
141
141
|
* ```tsx
|
|
142
|
-
* //
|
|
142
|
+
* // Basic usage
|
|
143
143
|
* <TextInput value={text()} onValueChange={setText} />
|
|
144
144
|
*
|
|
145
|
-
* //
|
|
145
|
+
* // With format
|
|
146
146
|
* <TextInput format="XXX-XXXX-XXXX" value={phone()} onValueChange={setPhone} />
|
|
147
147
|
*
|
|
148
|
-
* //
|
|
149
|
-
* <TextInput type="password" placeholder="
|
|
148
|
+
* // Password type
|
|
149
|
+
* <TextInput type="password" placeholder="Enter password" />
|
|
150
150
|
* ```
|
|
151
151
|
*/
|
|
152
152
|
interface TextInputComponent {
|
|
@@ -178,13 +178,13 @@ const TextInputInner = (props: TextInputProps) => {
|
|
|
178
178
|
"children",
|
|
179
179
|
]);
|
|
180
180
|
|
|
181
|
-
// controlled/uncontrolled
|
|
181
|
+
// Support controlled/uncontrolled pattern
|
|
182
182
|
const [value, setValue] = createControllableSignal({
|
|
183
183
|
value: () => local.value ?? "",
|
|
184
184
|
onChange: () => local.onValueChange,
|
|
185
185
|
});
|
|
186
186
|
|
|
187
|
-
// IME
|
|
187
|
+
// Delay onValueChange during IME composition to prevent DOM recreation (Korean composition break)
|
|
188
188
|
const ime = createIMEHandler((v) => setValue(v));
|
|
189
189
|
|
|
190
190
|
function extractValue(el: HTMLInputElement): string {
|
|
@@ -195,7 +195,7 @@ const TextInputInner = (props: TextInputProps) => {
|
|
|
195
195
|
return val;
|
|
196
196
|
}
|
|
197
197
|
|
|
198
|
-
// input
|
|
198
|
+
// Value for input element (excludes composingValue — prevent IME composition disruption)
|
|
199
199
|
const inputValue = () => {
|
|
200
200
|
const val = value();
|
|
201
201
|
if (local.format != null && local.format !== "") {
|
|
@@ -204,7 +204,7 @@ const TextInputInner = (props: TextInputProps) => {
|
|
|
204
204
|
return val;
|
|
205
205
|
};
|
|
206
206
|
|
|
207
|
-
// content div
|
|
207
|
+
// Display value for content div (includes composingValue — determines cell width)
|
|
208
208
|
const displayValue = () => {
|
|
209
209
|
const composing = ime.composingValue();
|
|
210
210
|
if (composing != null) {
|
|
@@ -226,11 +226,11 @@ const TextInputInner = (props: TextInputProps) => {
|
|
|
226
226
|
ime.handleCompositionEnd(extractValue(e.currentTarget));
|
|
227
227
|
};
|
|
228
228
|
|
|
229
|
-
// Prefix
|
|
229
|
+
// Register Prefix slot Context
|
|
230
230
|
const [prefix, setPrefix] = createSlotSignal();
|
|
231
231
|
const prefixEl = () => prefix() !== undefined;
|
|
232
232
|
|
|
233
|
-
//
|
|
233
|
+
// Wrapper class (exclude local.class when includeCustomClass=false — only apply to outer in inset)
|
|
234
234
|
const getWrapperClass = (includeCustomClass: boolean) =>
|
|
235
235
|
getFieldWrapperClass({
|
|
236
236
|
size: local.size,
|
|
@@ -240,27 +240,27 @@ const TextInputInner = (props: TextInputProps) => {
|
|
|
240
240
|
extra: prefixEl() && fieldGapClasses[local.size ?? "default"],
|
|
241
241
|
});
|
|
242
242
|
|
|
243
|
-
//
|
|
243
|
+
// Whether editable
|
|
244
244
|
const isEditable = () => !local.disabled && !local.readonly;
|
|
245
245
|
|
|
246
|
-
//
|
|
246
|
+
// Flush uncommitted composition value when toggling disabled
|
|
247
247
|
createEffect(() => {
|
|
248
248
|
if (!isEditable()) {
|
|
249
249
|
ime.flushComposition();
|
|
250
250
|
}
|
|
251
251
|
});
|
|
252
252
|
|
|
253
|
-
//
|
|
253
|
+
// Validation error message (check in order, return first failure message)
|
|
254
254
|
const errorMsg = createMemo(() => {
|
|
255
255
|
const v = value();
|
|
256
|
-
if (local.required && !v) return "
|
|
256
|
+
if (local.required && !v) return "This is a required field";
|
|
257
257
|
if (v) {
|
|
258
258
|
if (local.minLength != null && v.length < local.minLength)
|
|
259
|
-
return
|
|
259
|
+
return `Enter at least ${local.minLength} characters`;
|
|
260
260
|
if (local.maxLength != null && v.length > local.maxLength)
|
|
261
|
-
return
|
|
261
|
+
return `Enter up to ${local.maxLength} characters`;
|
|
262
262
|
if (local.pattern != null && !new RegExp(local.pattern).test(v))
|
|
263
|
-
return "
|
|
263
|
+
return "The input format is invalid";
|
|
264
264
|
}
|
|
265
265
|
return local.validate?.(v);
|
|
266
266
|
});
|
|
@@ -276,7 +276,7 @@ const TextInputInner = (props: TextInputProps) => {
|
|
|
276
276
|
<Show
|
|
277
277
|
when={local.inset}
|
|
278
278
|
fallback={
|
|
279
|
-
// standalone
|
|
279
|
+
// standalone mode: maintain existing Show pattern
|
|
280
280
|
<Show
|
|
281
281
|
when={isEditable()}
|
|
282
282
|
fallback={
|
|
@@ -313,7 +313,7 @@ const TextInputInner = (props: TextInputProps) => {
|
|
|
313
313
|
</Show>
|
|
314
314
|
}
|
|
315
315
|
>
|
|
316
|
-
{/* inset
|
|
316
|
+
{/* inset mode: dual-element overlay pattern */}
|
|
317
317
|
<div
|
|
318
318
|
{...rest}
|
|
319
319
|
data-text-field
|