@simplysm/solid 13.0.69 → 13.0.70
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 +24 -24
- package/dist/components/disclosure/Tabs.js +1 -1
- package/dist/components/disclosure/Tabs.js.map +1 -1
- package/dist/components/disclosure/dialogZIndex.d.ts +7 -7
- package/dist/components/disclosure/dialogZIndex.d.ts.map +1 -1
- package/dist/components/features/crud-detail/CrudDetail.d.ts.map +1 -1
- package/dist/components/features/crud-detail/CrudDetail.js +19 -16
- 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 +34 -28
- package/dist/components/features/crud-sheet/CrudSheet.js.map +2 -2
- 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 +6 -2
- 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 +8 -2
- 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 -13
- package/dist/components/features/shared-data/SharedDataSelectList.d.ts.map +1 -1
- package/dist/components/features/shared-data/SharedDataSelectList.js +219 -58
- 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 +4 -1
- package/dist/helpers/createAppStructure.js.map +1 -1
- 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.js +1 -1
- package/dist/hooks/createSelectionGroup.js.map +1 -1
- 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 +8 -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 +64 -64
- package/src/components/disclosure/Tabs.tsx +1 -1
- package/src/components/disclosure/dialogZIndex.ts +11 -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 +18 -16
- 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 +39 -37
- 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/data-select-button/DataSelectButton.tsx +34 -32
- package/src/components/features/permission-table/PermissionTable.tsx +22 -19
- package/src/components/features/shared-data/SharedDataSelect.tsx +22 -20
- package/src/components/features/shared-data/SharedDataSelectButton.tsx +10 -10
- package/src/components/features/shared-data/SharedDataSelectList.tsx +245 -48
- 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 +84 -84
- 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 +12 -6
- 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 +1 -1
- 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 +213 -0
- package/tests/components/disclosure/Tabs.spec.tsx +220 -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/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 +463 -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
|
@@ -41,53 +41,53 @@ const DropdownContent = createSlotComponent(DropdownContext, (ctx) => ctx.setCon
|
|
|
41
41
|
|
|
42
42
|
export interface DropdownProps {
|
|
43
43
|
/**
|
|
44
|
-
*
|
|
45
|
-
*
|
|
44
|
+
* Absolute position (for context menus, no minWidth)
|
|
45
|
+
* When used with Trigger, calculates position relative to Trigger
|
|
46
46
|
*/
|
|
47
47
|
position?: { x: number; y: number };
|
|
48
48
|
|
|
49
49
|
/**
|
|
50
|
-
*
|
|
50
|
+
* Popup open state
|
|
51
51
|
*/
|
|
52
52
|
open?: boolean;
|
|
53
53
|
|
|
54
54
|
/**
|
|
55
|
-
*
|
|
55
|
+
* Callback when open state changes
|
|
56
56
|
*/
|
|
57
57
|
onOpenChange?: (open: boolean) => void;
|
|
58
58
|
|
|
59
59
|
/**
|
|
60
|
-
*
|
|
60
|
+
* Popup max height (default: 300px), scrolls internally if exceeded
|
|
61
61
|
*/
|
|
62
62
|
maxHeight?: number;
|
|
63
63
|
|
|
64
64
|
/**
|
|
65
|
-
*
|
|
65
|
+
* Disabled (Trigger click ignored)
|
|
66
66
|
*/
|
|
67
67
|
disabled?: boolean;
|
|
68
68
|
|
|
69
69
|
/**
|
|
70
|
-
*
|
|
70
|
+
* Enable keyboard navigation (used in Select, etc)
|
|
71
71
|
*
|
|
72
|
-
* direction=down
|
|
73
|
-
* -
|
|
74
|
-
* -
|
|
75
|
-
* -
|
|
72
|
+
* When direction=down:
|
|
73
|
+
* - ArrowDown from trigger -> focus first focusable item
|
|
74
|
+
* - ArrowUp from first item -> focus trigger
|
|
75
|
+
* - ArrowUp from trigger -> close
|
|
76
76
|
*
|
|
77
|
-
* direction=up
|
|
78
|
-
* -
|
|
79
|
-
* -
|
|
80
|
-
* -
|
|
77
|
+
* When direction=up:
|
|
78
|
+
* - ArrowUp from trigger -> focus last focusable item
|
|
79
|
+
* - ArrowDown from last item -> focus trigger
|
|
80
|
+
* - ArrowDown from trigger -> close
|
|
81
81
|
*/
|
|
82
82
|
keyboardNav?: boolean;
|
|
83
83
|
|
|
84
84
|
/**
|
|
85
|
-
*
|
|
85
|
+
* Custom class for popup
|
|
86
86
|
*/
|
|
87
87
|
class?: string;
|
|
88
88
|
|
|
89
89
|
/**
|
|
90
|
-
*
|
|
90
|
+
* Custom style for popup
|
|
91
91
|
*/
|
|
92
92
|
style?: JSX.CSSProperties;
|
|
93
93
|
|
|
@@ -103,28 +103,28 @@ interface DropdownComponent extends ParentComponent<DropdownProps> {
|
|
|
103
103
|
}
|
|
104
104
|
|
|
105
105
|
/**
|
|
106
|
-
*
|
|
106
|
+
* Dropdown popup component
|
|
107
107
|
*
|
|
108
|
-
* Trigger/Content
|
|
109
|
-
* Trigger
|
|
108
|
+
* Separates trigger and content using Trigger/Content slot pattern.
|
|
109
|
+
* Auto-toggles on Trigger click, can be disabled with disabled prop.
|
|
110
110
|
*
|
|
111
111
|
* @example
|
|
112
112
|
* ```tsx
|
|
113
113
|
* <Dropdown>
|
|
114
114
|
* <Dropdown.Trigger>
|
|
115
|
-
* <Button
|
|
115
|
+
* <Button>Open</Button>
|
|
116
116
|
* </Dropdown.Trigger>
|
|
117
117
|
* <Dropdown.Content>
|
|
118
|
-
* <div
|
|
118
|
+
* <div>Popup content</div>
|
|
119
119
|
* </Dropdown.Content>
|
|
120
120
|
* </Dropdown>
|
|
121
121
|
* ```
|
|
122
122
|
*
|
|
123
|
-
* @example Context menu (
|
|
123
|
+
* @example Context menu (position without Trigger)
|
|
124
124
|
* ```tsx
|
|
125
125
|
* <Dropdown position={{ x: 300, y: 200 }} open={true}>
|
|
126
126
|
* <Dropdown.Content>
|
|
127
|
-
* <div
|
|
127
|
+
* <div>Menu</div>
|
|
128
128
|
* </Dropdown.Content>
|
|
129
129
|
* </Dropdown>
|
|
130
130
|
* ```
|
|
@@ -147,32 +147,32 @@ export const Dropdown: DropdownComponent = ((props: DropdownProps) => {
|
|
|
147
147
|
onChange: () => local.onOpenChange,
|
|
148
148
|
});
|
|
149
149
|
|
|
150
|
-
//
|
|
150
|
+
// Toggle function (includes disabled check)
|
|
151
151
|
const toggle = () => {
|
|
152
152
|
if (local.disabled) return;
|
|
153
153
|
setOpen(!open());
|
|
154
154
|
};
|
|
155
155
|
|
|
156
|
-
//
|
|
156
|
+
// Slot registration signals
|
|
157
157
|
const [triggerSlot, setTrigger] = createSlotSignal();
|
|
158
158
|
const [contentSlot, setContent] = createSlotSignal();
|
|
159
159
|
|
|
160
|
-
// Trigger wrapper ref (
|
|
160
|
+
// Trigger wrapper ref (needed for position calculation)
|
|
161
161
|
let triggerRef: HTMLDivElement | undefined;
|
|
162
162
|
|
|
163
|
-
//
|
|
163
|
+
// Popup ref
|
|
164
164
|
const [popupRef, setPopupRef] = createSignal<HTMLDivElement>();
|
|
165
165
|
|
|
166
|
-
//
|
|
166
|
+
// Animation state (mount transition)
|
|
167
167
|
const { mounted, animating, unmount } = createMountTransition(open);
|
|
168
168
|
|
|
169
|
-
//
|
|
169
|
+
// Computed position
|
|
170
170
|
const [computedStyle, setComputedStyle] = createSignal<JSX.CSSProperties>({});
|
|
171
171
|
|
|
172
|
-
//
|
|
172
|
+
// Direction (up/down)
|
|
173
173
|
const [direction, setDirection] = createSignal<"down" | "up">("down");
|
|
174
174
|
|
|
175
|
-
//
|
|
175
|
+
// Extract position calculation function
|
|
176
176
|
const updatePosition = () => {
|
|
177
177
|
const popup = popupRef();
|
|
178
178
|
if (!popup) return;
|
|
@@ -184,13 +184,13 @@ export const Dropdown: DropdownComponent = ((props: DropdownProps) => {
|
|
|
184
184
|
const viewportHeight = window.innerHeight;
|
|
185
185
|
const viewportWidth = window.innerWidth;
|
|
186
186
|
|
|
187
|
-
//
|
|
187
|
+
// Determine up/down direction (based on viewport center)
|
|
188
188
|
const spaceBelow = viewportHeight - rect.bottom;
|
|
189
189
|
const spaceAbove = rect.top;
|
|
190
190
|
const openDown = spaceBelow >= spaceAbove;
|
|
191
191
|
setDirection(openDown ? "down" : "up");
|
|
192
192
|
|
|
193
|
-
//
|
|
193
|
+
// Adjust left/right (prevent off-screen) - relative to viewport
|
|
194
194
|
const adjustedLeft = Math.min(rect.left, viewportWidth - popup.offsetWidth);
|
|
195
195
|
|
|
196
196
|
style.left = `${Math.max(0, adjustedLeft)}px`;
|
|
@@ -205,13 +205,13 @@ export const Dropdown: DropdownComponent = ((props: DropdownProps) => {
|
|
|
205
205
|
const viewportHeight = window.innerHeight;
|
|
206
206
|
const viewportWidth = window.innerWidth;
|
|
207
207
|
|
|
208
|
-
//
|
|
208
|
+
// Determine up/down direction
|
|
209
209
|
const spaceBelow = viewportHeight - local.position.y;
|
|
210
210
|
const spaceAbove = local.position.y;
|
|
211
211
|
const openDown = spaceBelow >= spaceAbove;
|
|
212
212
|
setDirection(openDown ? "down" : "up");
|
|
213
213
|
|
|
214
|
-
//
|
|
214
|
+
// Adjust left/right - relative to viewport
|
|
215
215
|
const adjustedLeft = Math.min(local.position.x, viewportWidth - (popup.offsetWidth || 200));
|
|
216
216
|
style.left = `${Math.max(0, adjustedLeft)}px`;
|
|
217
217
|
|
|
@@ -225,7 +225,7 @@ export const Dropdown: DropdownComponent = ((props: DropdownProps) => {
|
|
|
225
225
|
setComputedStyle(style);
|
|
226
226
|
};
|
|
227
227
|
|
|
228
|
-
//
|
|
228
|
+
// Calculate position on mount + recalculate when popup size changes
|
|
229
229
|
createEffect(() => {
|
|
230
230
|
if (!mounted()) return;
|
|
231
231
|
|
|
@@ -239,7 +239,7 @@ export const Dropdown: DropdownComponent = ((props: DropdownProps) => {
|
|
|
239
239
|
}
|
|
240
240
|
});
|
|
241
241
|
|
|
242
|
-
//
|
|
242
|
+
// Detect outside click (pointerdown)
|
|
243
243
|
createEffect(() => {
|
|
244
244
|
if (!open()) return;
|
|
245
245
|
|
|
@@ -247,13 +247,13 @@ export const Dropdown: DropdownComponent = ((props: DropdownProps) => {
|
|
|
247
247
|
const popup = popupRef();
|
|
248
248
|
const target = e.target as Node;
|
|
249
249
|
|
|
250
|
-
//
|
|
250
|
+
// Ignore clicks inside popup
|
|
251
251
|
if (popup?.contains(target)) return;
|
|
252
252
|
|
|
253
|
-
//
|
|
253
|
+
// Ignore clicks inside trigger
|
|
254
254
|
if (triggerRef?.contains(target)) return;
|
|
255
255
|
|
|
256
|
-
//
|
|
256
|
+
// Outside click -> close
|
|
257
257
|
setOpen(false);
|
|
258
258
|
};
|
|
259
259
|
|
|
@@ -261,7 +261,7 @@ export const Dropdown: DropdownComponent = ((props: DropdownProps) => {
|
|
|
261
261
|
onCleanup(() => document.removeEventListener("pointerdown", handlePointerDown));
|
|
262
262
|
});
|
|
263
263
|
|
|
264
|
-
// Tab
|
|
264
|
+
// Detect Tab key focus movement (focusout)
|
|
265
265
|
createEffect(() => {
|
|
266
266
|
if (!open()) return;
|
|
267
267
|
|
|
@@ -269,16 +269,16 @@ export const Dropdown: DropdownComponent = ((props: DropdownProps) => {
|
|
|
269
269
|
const popup = popupRef();
|
|
270
270
|
const relatedTarget = e.relatedTarget as Node | null;
|
|
271
271
|
|
|
272
|
-
// relatedTarget
|
|
272
|
+
// Ignore if relatedTarget is null (pointerdown handles it)
|
|
273
273
|
if (!relatedTarget) return;
|
|
274
274
|
|
|
275
|
-
//
|
|
275
|
+
// Ignore movement to popup
|
|
276
276
|
if (popup?.contains(relatedTarget)) return;
|
|
277
277
|
|
|
278
|
-
//
|
|
278
|
+
// Ignore movement to trigger
|
|
279
279
|
if (triggerRef?.contains(relatedTarget)) return;
|
|
280
280
|
|
|
281
|
-
//
|
|
281
|
+
// Focus moved outside -> close
|
|
282
282
|
setOpen(false);
|
|
283
283
|
};
|
|
284
284
|
|
|
@@ -286,7 +286,7 @@ export const Dropdown: DropdownComponent = ((props: DropdownProps) => {
|
|
|
286
286
|
onCleanup(() => document.removeEventListener("focusout", handleFocusOut));
|
|
287
287
|
});
|
|
288
288
|
|
|
289
|
-
// Escape
|
|
289
|
+
// Detect Escape key
|
|
290
290
|
createEffect(() => {
|
|
291
291
|
if (!open()) return;
|
|
292
292
|
|
|
@@ -301,11 +301,11 @@ export const Dropdown: DropdownComponent = ((props: DropdownProps) => {
|
|
|
301
301
|
onCleanup(() => document.removeEventListener("keydown", handleKeyDown));
|
|
302
302
|
});
|
|
303
303
|
|
|
304
|
-
//
|
|
304
|
+
// Keyboard navigation: handler for trigger
|
|
305
305
|
const handleTriggerKeyDown = (e: KeyboardEvent) => {
|
|
306
306
|
if (!local.keyboardNav) return;
|
|
307
307
|
|
|
308
|
-
//
|
|
308
|
+
// When closed: open with ArrowUp/ArrowDown
|
|
309
309
|
if (!open()) {
|
|
310
310
|
if (e.key === "ArrowDown" || e.key === "ArrowUp") {
|
|
311
311
|
e.preventDefault();
|
|
@@ -314,7 +314,7 @@ export const Dropdown: DropdownComponent = ((props: DropdownProps) => {
|
|
|
314
314
|
return;
|
|
315
315
|
}
|
|
316
316
|
|
|
317
|
-
//
|
|
317
|
+
// When open: handle based on direction
|
|
318
318
|
const popup = popupRef();
|
|
319
319
|
if (!popup) return;
|
|
320
320
|
|
|
@@ -345,19 +345,19 @@ export const Dropdown: DropdownComponent = ((props: DropdownProps) => {
|
|
|
345
345
|
}
|
|
346
346
|
};
|
|
347
347
|
|
|
348
|
-
//
|
|
348
|
+
// Keyboard navigation: handler for popup
|
|
349
349
|
const handlePopupKeyDown = (e: KeyboardEvent) => {
|
|
350
350
|
if (!local.keyboardNav) return;
|
|
351
351
|
|
|
352
|
-
//
|
|
352
|
+
// Ignore events already handled (e.g., by List)
|
|
353
353
|
if (e.defaultPrevented) return;
|
|
354
354
|
|
|
355
355
|
if (!triggerRef) return;
|
|
356
356
|
|
|
357
357
|
const dir = direction();
|
|
358
358
|
|
|
359
|
-
//
|
|
360
|
-
//
|
|
359
|
+
// If ArrowUp/ArrowDown not handled in popup (first/last item)
|
|
360
|
+
// Move focus to trigger
|
|
361
361
|
if (dir === "down" && e.key === "ArrowUp") {
|
|
362
362
|
e.preventDefault();
|
|
363
363
|
triggerRef.focus();
|
|
@@ -367,24 +367,24 @@ export const Dropdown: DropdownComponent = ((props: DropdownProps) => {
|
|
|
367
367
|
}
|
|
368
368
|
};
|
|
369
369
|
|
|
370
|
-
//
|
|
370
|
+
// Detect scroll
|
|
371
371
|
createEffect(() => {
|
|
372
372
|
if (!open()) return;
|
|
373
373
|
|
|
374
374
|
const handleScroll = (e: Event) => {
|
|
375
|
-
//
|
|
375
|
+
// Ignore scroll inside popup
|
|
376
376
|
const popup = popupRef();
|
|
377
377
|
if (popup?.contains(e.target as Node)) return;
|
|
378
378
|
|
|
379
379
|
setOpen(false);
|
|
380
380
|
};
|
|
381
381
|
|
|
382
|
-
//
|
|
382
|
+
// Detect all scroll events with capture
|
|
383
383
|
document.addEventListener("scroll", handleScroll, { capture: true });
|
|
384
384
|
onCleanup(() => document.removeEventListener("scroll", handleScroll, { capture: true }));
|
|
385
385
|
});
|
|
386
386
|
|
|
387
|
-
// resize
|
|
387
|
+
// Detect resize (close when viewport size changes)
|
|
388
388
|
createEffect(() => {
|
|
389
389
|
if (!open()) return;
|
|
390
390
|
|
|
@@ -396,20 +396,20 @@ export const Dropdown: DropdownComponent = ((props: DropdownProps) => {
|
|
|
396
396
|
onCleanup(() => window.removeEventListener("resize", handleResize));
|
|
397
397
|
});
|
|
398
398
|
|
|
399
|
-
// transitionend
|
|
399
|
+
// Handle transitionend event
|
|
400
400
|
const handleTransitionEnd = (e: TransitionEvent) => {
|
|
401
|
-
//
|
|
401
|
+
// Only handle when opacity transition completes
|
|
402
402
|
if (e.propertyName !== "opacity") return;
|
|
403
403
|
|
|
404
404
|
if (!open()) {
|
|
405
|
-
//
|
|
405
|
+
// Closing animation complete -> remove from DOM
|
|
406
406
|
unmount();
|
|
407
407
|
}
|
|
408
408
|
};
|
|
409
409
|
|
|
410
410
|
const maxHeight = () => local.maxHeight ?? 300;
|
|
411
411
|
|
|
412
|
-
//
|
|
412
|
+
// Animation class (only transition opacity and transform, not position properties)
|
|
413
413
|
const animationClass = () => {
|
|
414
414
|
const base = "transition-[opacity,transform] duration-150 ease-out";
|
|
415
415
|
const visible = animating();
|
|
@@ -426,7 +426,7 @@ export const Dropdown: DropdownComponent = ((props: DropdownProps) => {
|
|
|
426
426
|
<DropdownContext.Provider value={{ toggle, setTrigger, setContent }}>
|
|
427
427
|
{local.children}
|
|
428
428
|
|
|
429
|
-
{/*
|
|
429
|
+
{/* Render trigger slot (attach click/keyboard handlers to wrapper div) */}
|
|
430
430
|
<Show when={triggerSlot()}>
|
|
431
431
|
<div
|
|
432
432
|
ref={(el) => {
|
|
@@ -440,7 +440,7 @@ export const Dropdown: DropdownComponent = ((props: DropdownProps) => {
|
|
|
440
440
|
</div>
|
|
441
441
|
</Show>
|
|
442
442
|
|
|
443
|
-
{/* Content
|
|
443
|
+
{/* Content slot: Portal + popup */}
|
|
444
444
|
<Show when={mounted()}>
|
|
445
445
|
<Portal>
|
|
446
446
|
<div
|
|
@@ -25,7 +25,7 @@ interface TabsTabProps {
|
|
|
25
25
|
|
|
26
26
|
function TabsTabInner(props: TabsTabProps) {
|
|
27
27
|
const ctx = useContext(TabsContext);
|
|
28
|
-
if (!ctx) throw new Error("Tabs.Tab
|
|
28
|
+
if (!ctx) throw new Error("Tabs.Tab can only be used inside Tabs");
|
|
29
29
|
|
|
30
30
|
const isSelected = () => ctx.value() === props.value;
|
|
31
31
|
|
|
@@ -1,24 +1,24 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Dialog z-index
|
|
2
|
+
* Dialog z-index registry
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
* Manages z-index of open Dialogs to prevent infinite increase.
|
|
5
|
+
* Base starting value is 2000 (same as tailwind z-modal), uses only as many as there are open Dialogs.
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
8
|
const BASE_Z = 2000;
|
|
9
9
|
|
|
10
|
-
//
|
|
10
|
+
// List of open Dialog wrapper elements (order = z-index order)
|
|
11
11
|
const stack: HTMLElement[] = [];
|
|
12
12
|
|
|
13
|
-
/** Dialog
|
|
13
|
+
/** Register Dialog — add to top of stack and assign z-index */
|
|
14
14
|
export function registerDialog(el: HTMLElement): void {
|
|
15
15
|
const idx = stack.indexOf(el);
|
|
16
|
-
if (idx >= 0) return; //
|
|
16
|
+
if (idx >= 0) return; // Already registered
|
|
17
17
|
stack.push(el);
|
|
18
18
|
el.style.zIndex = (BASE_Z + stack.length - 1).toString();
|
|
19
19
|
}
|
|
20
20
|
|
|
21
|
-
/** Dialog
|
|
21
|
+
/** Unregister Dialog — remove from stack and reorder rest */
|
|
22
22
|
export function unregisterDialog(el: HTMLElement): void {
|
|
23
23
|
const idx = stack.indexOf(el);
|
|
24
24
|
if (idx < 0) return;
|
|
@@ -26,23 +26,23 @@ export function unregisterDialog(el: HTMLElement): void {
|
|
|
26
26
|
reindex();
|
|
27
27
|
}
|
|
28
28
|
|
|
29
|
-
/** Dialog
|
|
29
|
+
/** Bring Dialog to front (on focus) */
|
|
30
30
|
export function bringToFront(el: HTMLElement): void {
|
|
31
31
|
const idx = stack.indexOf(el);
|
|
32
|
-
if (idx < 0 || idx === stack.length - 1) return; //
|
|
32
|
+
if (idx < 0 || idx === stack.length - 1) return; // Already at front
|
|
33
33
|
stack.splice(idx, 1);
|
|
34
34
|
stack.push(el);
|
|
35
35
|
reindex();
|
|
36
36
|
}
|
|
37
37
|
|
|
38
|
-
/**
|
|
38
|
+
/** Reassign z-index in stack order */
|
|
39
39
|
function reindex(): void {
|
|
40
40
|
for (let i = 0; i < stack.length; i++) {
|
|
41
41
|
stack[i].style.zIndex = (BASE_Z + i).toString();
|
|
42
42
|
}
|
|
43
43
|
}
|
|
44
44
|
|
|
45
|
-
/**
|
|
45
|
+
/** Check if Dialog is at top of stack */
|
|
46
46
|
export function isTopmost(el: HTMLElement): boolean {
|
|
47
47
|
return stack.length > 0 && stack[stack.length - 1] === el;
|
|
48
48
|
}
|
|
@@ -24,7 +24,7 @@ export const Echarts: Component<EchartsProps> = (props) => {
|
|
|
24
24
|
let chart: echartsType.EChartsType | undefined;
|
|
25
25
|
const [ready, setReady] = createSignal(false);
|
|
26
26
|
|
|
27
|
-
//
|
|
27
|
+
// On mount, dynamically load echarts + initialize chart
|
|
28
28
|
createEffect(() => {
|
|
29
29
|
void import("echarts").then((echarts) => {
|
|
30
30
|
chart = echarts.init(containerRef, null, { renderer: "svg" });
|
|
@@ -34,13 +34,13 @@ export const Echarts: Component<EchartsProps> = (props) => {
|
|
|
34
34
|
onCleanup(() => chart?.dispose());
|
|
35
35
|
});
|
|
36
36
|
|
|
37
|
-
// option
|
|
37
|
+
// Detect option changes
|
|
38
38
|
createEffect(() => {
|
|
39
39
|
if (!ready()) return;
|
|
40
40
|
chart!.setOption(local.option);
|
|
41
41
|
});
|
|
42
42
|
|
|
43
|
-
// busy
|
|
43
|
+
// Detect busy state changes
|
|
44
44
|
createEffect(() => {
|
|
45
45
|
if (!ready()) return;
|
|
46
46
|
if (local.busy) {
|
|
@@ -50,7 +50,7 @@ export const Echarts: Component<EchartsProps> = (props) => {
|
|
|
50
50
|
}
|
|
51
51
|
});
|
|
52
52
|
|
|
53
|
-
//
|
|
53
|
+
// Detect container size changes
|
|
54
54
|
createResizeObserver(containerRef, () => {
|
|
55
55
|
chart?.resize();
|
|
56
56
|
});
|
|
@@ -22,7 +22,7 @@ export const AddressSearchContent: Component = () => {
|
|
|
22
22
|
scriptEl.setAttribute("id", "daum_address");
|
|
23
23
|
|
|
24
24
|
scriptEl.onload = (): void => {
|
|
25
|
-
// @ts-expect-error -- Daum Postcode
|
|
25
|
+
// @ts-expect-error -- Daum Postcode global API
|
|
26
26
|
daum.postcode.load(() => {
|
|
27
27
|
resolve();
|
|
28
28
|
});
|
|
@@ -31,7 +31,7 @@ export const AddressSearchContent: Component = () => {
|
|
|
31
31
|
});
|
|
32
32
|
}
|
|
33
33
|
|
|
34
|
-
// @ts-expect-error -- Daum Postcode
|
|
34
|
+
// @ts-expect-error -- Daum Postcode global API
|
|
35
35
|
new daum.Postcode({
|
|
36
36
|
oncomplete: (data: any): void => {
|
|
37
37
|
const addr = data.userSelectedType === "R" ? data.roadAddress : data.jibunAddress;
|
|
@@ -19,6 +19,7 @@ import { createTopbarActions, TopbarContext } from "../../layout/topbar/TopbarCo
|
|
|
19
19
|
import { useDialogInstance } from "../../disclosure/DialogInstanceContext";
|
|
20
20
|
import { Dialog } from "../../disclosure/Dialog";
|
|
21
21
|
import { createEventListener } from "@solid-primitives/event-listener";
|
|
22
|
+
import { useI18nOptional } from "../../../providers/i18n/I18nContext";
|
|
22
23
|
import clsx from "clsx";
|
|
23
24
|
import {
|
|
24
25
|
IconCheck,
|
|
@@ -60,6 +61,7 @@ const CrudDetailBase = <TData extends object>(props: CrudDetailProps<TData>) =>
|
|
|
60
61
|
]);
|
|
61
62
|
|
|
62
63
|
const noti = useNotification();
|
|
64
|
+
const i18n = useI18nOptional();
|
|
63
65
|
const topbarCtx = useContext(TopbarContext);
|
|
64
66
|
const dialogInstance = useDialogInstance<boolean>();
|
|
65
67
|
|
|
@@ -89,7 +91,7 @@ const CrudDetailBase = <TData extends object>(props: CrudDetailProps<TData>) =>
|
|
|
89
91
|
originalData = objClone(result.data);
|
|
90
92
|
setInfo(result.info);
|
|
91
93
|
} catch (err) {
|
|
92
|
-
noti.error(err, "
|
|
94
|
+
noti.error(err, i18n?.t("crudDetail.lookupFailed") ?? "Lookup failed");
|
|
93
95
|
}
|
|
94
96
|
setBusyCount((c) => c - 1);
|
|
95
97
|
setReady(true);
|
|
@@ -108,7 +110,7 @@ const CrudDetailBase = <TData extends object>(props: CrudDetailProps<TData>) =>
|
|
|
108
110
|
// -- Refresh --
|
|
109
111
|
async function handleRefresh() {
|
|
110
112
|
if (hasChanges()) {
|
|
111
|
-
if (!confirm("
|
|
113
|
+
if (!confirm(i18n?.t("crudDetail.discardChanges") ?? "Discard changes?")) return;
|
|
112
114
|
}
|
|
113
115
|
await doLoad();
|
|
114
116
|
}
|
|
@@ -120,7 +122,7 @@ const CrudDetailBase = <TData extends object>(props: CrudDetailProps<TData>) =>
|
|
|
120
122
|
|
|
121
123
|
const currentInfo = info();
|
|
122
124
|
if (currentInfo && !currentInfo.isNew && !hasChanges()) {
|
|
123
|
-
noti.info("
|
|
125
|
+
noti.info(i18n?.t("crudDetail.notice") ?? "Notice", i18n?.t("crudDetail.noChanges") ?? "No changes to save.");
|
|
124
126
|
return;
|
|
125
127
|
}
|
|
126
128
|
|
|
@@ -128,7 +130,7 @@ const CrudDetailBase = <TData extends object>(props: CrudDetailProps<TData>) =>
|
|
|
128
130
|
try {
|
|
129
131
|
const result = await local.submit(objClone(unwrap(data)));
|
|
130
132
|
if (result) {
|
|
131
|
-
noti.success("
|
|
133
|
+
noti.success(i18n?.t("crudDetail.saveCompleted") ?? "Save completed", i18n?.t("crudDetail.saveSuccess") ?? "Saved successfully.");
|
|
132
134
|
if (dialogInstance) {
|
|
133
135
|
dialogInstance.close(true);
|
|
134
136
|
} else {
|
|
@@ -136,7 +138,7 @@ const CrudDetailBase = <TData extends object>(props: CrudDetailProps<TData>) =>
|
|
|
136
138
|
}
|
|
137
139
|
}
|
|
138
140
|
} catch (err) {
|
|
139
|
-
noti.error(err, "
|
|
141
|
+
noti.error(err, i18n?.t("crudDetail.saveFailed") ?? "Save failed");
|
|
140
142
|
}
|
|
141
143
|
setBusyCount((c) => c - 1);
|
|
142
144
|
}
|
|
@@ -160,7 +162,7 @@ const CrudDetailBase = <TData extends object>(props: CrudDetailProps<TData>) =>
|
|
|
160
162
|
try {
|
|
161
163
|
const result = await local.toggleDelete(del);
|
|
162
164
|
if (result) {
|
|
163
|
-
noti.success(del ? "
|
|
165
|
+
noti.success(del ? (i18n?.t("crudDetail.deleteCompleted") ?? "Delete completed") : (i18n?.t("crudDetail.restoreCompleted") ?? "Restore completed"), del ? (i18n?.t("crudDetail.deleteSuccess") ?? "Deleted successfully.") : (i18n?.t("crudDetail.restoreSuccess") ?? "Restored successfully."));
|
|
164
166
|
if (dialogInstance) {
|
|
165
167
|
dialogInstance.close(true);
|
|
166
168
|
} else {
|
|
@@ -168,7 +170,7 @@ const CrudDetailBase = <TData extends object>(props: CrudDetailProps<TData>) =>
|
|
|
168
170
|
}
|
|
169
171
|
}
|
|
170
172
|
} catch (err) {
|
|
171
|
-
noti.error(err, del ? "
|
|
173
|
+
noti.error(err, del ? (i18n?.t("crudDetail.deleteFailed") ?? "Delete failed") : (i18n?.t("crudDetail.restoreFailed") ?? "Restore failed"));
|
|
172
174
|
}
|
|
173
175
|
setBusyCount((c) => c - 1);
|
|
174
176
|
}
|
|
@@ -198,7 +200,7 @@ const CrudDetailBase = <TData extends object>(props: CrudDetailProps<TData>) =>
|
|
|
198
200
|
onClick={() => formRef?.requestSubmit()}
|
|
199
201
|
>
|
|
200
202
|
<Icon icon={IconDeviceFloppy} class="mr-1" />
|
|
201
|
-
|
|
203
|
+
{i18n?.t("crudDetail.save") ?? "Save"}
|
|
202
204
|
</Button>
|
|
203
205
|
</Show>
|
|
204
206
|
<Show
|
|
@@ -214,13 +216,13 @@ const CrudDetailBase = <TData extends object>(props: CrudDetailProps<TData>) =>
|
|
|
214
216
|
onClick={() => void handleToggleDelete()}
|
|
215
217
|
>
|
|
216
218
|
<Icon icon={info()!.isDeleted ? IconTrashOff : IconTrash} class="mr-1" />
|
|
217
|
-
{info()!.isDeleted ? "
|
|
219
|
+
{info()!.isDeleted ? (i18n?.t("crudDetail.restore") ?? "Restore") : (i18n?.t("crudDetail.delete") ?? "Delete")}
|
|
218
220
|
</Button>
|
|
219
221
|
)}
|
|
220
222
|
</Show>
|
|
221
223
|
<Button size="lg" variant="ghost" theme="info" onClick={() => void handleRefresh()}>
|
|
222
224
|
<Icon icon={IconRefresh} class="mr-1" />
|
|
223
|
-
|
|
225
|
+
{i18n?.t("crudDetail.refresh") ?? "Refresh"}
|
|
224
226
|
</Button>
|
|
225
227
|
</>
|
|
226
228
|
));
|
|
@@ -285,7 +287,7 @@ const CrudDetailBase = <TData extends object>(props: CrudDetailProps<TData>) =>
|
|
|
285
287
|
onClick={() => formRef?.requestSubmit()}
|
|
286
288
|
>
|
|
287
289
|
<Icon icon={IconDeviceFloppy} class="mr-1" />
|
|
288
|
-
|
|
290
|
+
{i18n?.t("crudDetail.save") ?? "Save"}
|
|
289
291
|
</Button>
|
|
290
292
|
</Show>
|
|
291
293
|
<Show
|
|
@@ -305,13 +307,13 @@ const CrudDetailBase = <TData extends object>(props: CrudDetailProps<TData>) =>
|
|
|
305
307
|
onClick={() => void handleToggleDelete()}
|
|
306
308
|
>
|
|
307
309
|
<Icon icon={info()!.isDeleted ? IconTrashOff : IconTrash} class="mr-1" />
|
|
308
|
-
{info()!.isDeleted ? "
|
|
310
|
+
{info()!.isDeleted ? (i18n?.t("crudDetail.restore") ?? "Restore") : (i18n?.t("crudDetail.delete") ?? "Delete")}
|
|
309
311
|
</Button>
|
|
310
312
|
)}
|
|
311
313
|
</Show>
|
|
312
314
|
<Button size="sm" theme="info" variant="ghost" onClick={() => void handleRefresh()}>
|
|
313
315
|
<Icon icon={IconRefresh} class="mr-1" />
|
|
314
|
-
|
|
316
|
+
{i18n?.t("crudDetail.refresh") ?? "Refresh"}
|
|
315
317
|
</Button>
|
|
316
318
|
</Show>
|
|
317
319
|
<Show when={defs().tools}>{(toolsDef) => toolsDef().children}</Show>
|
|
@@ -330,7 +332,7 @@ const CrudDetailBase = <TData extends object>(props: CrudDetailProps<TData>) =>
|
|
|
330
332
|
<Show when={info()?.lastModifiedAt}>
|
|
331
333
|
{(_) => (
|
|
332
334
|
<div class="px-2 pb-1 text-xs text-base-400">
|
|
333
|
-
|
|
335
|
+
{i18n?.t("crudDetail.lastModified") ?? "Last modified"}: {info()!.lastModifiedAt!.toFormatString("yyyy-MM-dd HH:mm")}
|
|
334
336
|
<Show when={info()?.lastModifiedBy}> ({info()!.lastModifiedBy})</Show>
|
|
335
337
|
</div>
|
|
336
338
|
)}
|
|
@@ -349,7 +351,7 @@ const CrudDetailBase = <TData extends object>(props: CrudDetailProps<TData>) =>
|
|
|
349
351
|
{(_) => (
|
|
350
352
|
<Button variant={"solid"} theme="danger" onClick={() => void handleToggleDelete()}>
|
|
351
353
|
<Icon icon={info()!.isDeleted ? IconTrashOff : IconTrash} class="mr-1" />
|
|
352
|
-
{info()!.isDeleted ? "
|
|
354
|
+
{info()!.isDeleted ? (i18n?.t("crudDetail.restore") ?? "Restore") : (i18n?.t("crudDetail.delete") ?? "Delete")}
|
|
353
355
|
</Button>
|
|
354
356
|
)}
|
|
355
357
|
</Show>
|
|
@@ -361,7 +363,7 @@ const CrudDetailBase = <TData extends object>(props: CrudDetailProps<TData>) =>
|
|
|
361
363
|
class={"gap-1"}
|
|
362
364
|
>
|
|
363
365
|
<Icon icon={IconCheck} />
|
|
364
|
-
|
|
366
|
+
{i18n?.t("crudDetail.confirm") ?? "Confirm"}
|
|
365
367
|
</Button>
|
|
366
368
|
</Show>
|
|
367
369
|
</div>
|
|
@@ -9,7 +9,7 @@ export function isCrudDetailAfterDef(value: unknown): value is CrudDetailAfterDe
|
|
|
9
9
|
);
|
|
10
10
|
}
|
|
11
11
|
|
|
12
|
-
/* eslint-disable solid/reactivity -- plain object
|
|
12
|
+
/* eslint-disable solid/reactivity -- plain object return pattern does not require reactive context */
|
|
13
13
|
export function CrudDetailAfter(props: { children: JSX.Element }): JSX.Element {
|
|
14
14
|
return {
|
|
15
15
|
__type: "crud-detail-after",
|