@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
|
@@ -18,6 +18,7 @@ import { twMerge } from "tailwind-merge";
|
|
|
18
18
|
import { mergeStyles } from "../../helpers/mergeStyles";
|
|
19
19
|
import { createSlotComponent } from "../../helpers/createSlotComponent";
|
|
20
20
|
import { borderSubtle } from "../../styles/tokens.styles";
|
|
21
|
+
import { tabbable } from "tabbable";
|
|
21
22
|
|
|
22
23
|
// --- DropdownContext (internal) ---
|
|
23
24
|
|
|
@@ -41,53 +42,55 @@ const DropdownContent = createSlotComponent(DropdownContext, (ctx) => ctx.setCon
|
|
|
41
42
|
|
|
42
43
|
export interface DropdownProps {
|
|
43
44
|
/**
|
|
44
|
-
*
|
|
45
|
-
*
|
|
45
|
+
* Absolute position (for context menus, no minWidth)
|
|
46
|
+
* When used with Trigger, calculates position relative to Trigger
|
|
46
47
|
*/
|
|
47
48
|
position?: { x: number; y: number };
|
|
48
49
|
|
|
49
50
|
/**
|
|
50
|
-
*
|
|
51
|
+
* Popup open state
|
|
51
52
|
*/
|
|
52
53
|
open?: boolean;
|
|
53
54
|
|
|
54
55
|
/**
|
|
55
|
-
*
|
|
56
|
+
* Callback when open state changes
|
|
56
57
|
*/
|
|
57
58
|
onOpenChange?: (open: boolean) => void;
|
|
58
59
|
|
|
59
60
|
/**
|
|
60
|
-
*
|
|
61
|
+
* Popup max height (default: 300px), scrolls internally if exceeded
|
|
61
62
|
*/
|
|
62
63
|
maxHeight?: number;
|
|
63
64
|
|
|
64
65
|
/**
|
|
65
|
-
*
|
|
66
|
+
* Disabled (Trigger click ignored)
|
|
66
67
|
*/
|
|
67
68
|
disabled?: boolean;
|
|
68
69
|
|
|
69
70
|
/**
|
|
70
|
-
*
|
|
71
|
+
* Enable keyboard navigation (used in Select, etc)
|
|
71
72
|
*
|
|
72
|
-
* direction=down
|
|
73
|
-
* -
|
|
74
|
-
* -
|
|
75
|
-
* -
|
|
73
|
+
* When direction=down:
|
|
74
|
+
* - ArrowDown from trigger -> focus first tabbable item in popup
|
|
75
|
+
* - ArrowUp/ArrowDown within popup -> navigate between tabbable items
|
|
76
|
+
* - ArrowUp from first tabbable -> focus trigger
|
|
77
|
+
* - ArrowUp from trigger -> close
|
|
76
78
|
*
|
|
77
|
-
* direction=up
|
|
78
|
-
* -
|
|
79
|
-
* -
|
|
80
|
-
* -
|
|
79
|
+
* When direction=up:
|
|
80
|
+
* - ArrowUp from trigger -> focus last tabbable item in popup
|
|
81
|
+
* - ArrowUp/ArrowDown within popup -> navigate between tabbable items
|
|
82
|
+
* - ArrowDown from last tabbable -> focus trigger
|
|
83
|
+
* - ArrowDown from trigger -> close
|
|
81
84
|
*/
|
|
82
85
|
keyboardNav?: boolean;
|
|
83
86
|
|
|
84
87
|
/**
|
|
85
|
-
*
|
|
88
|
+
* Custom class for popup
|
|
86
89
|
*/
|
|
87
90
|
class?: string;
|
|
88
91
|
|
|
89
92
|
/**
|
|
90
|
-
*
|
|
93
|
+
* Custom style for popup
|
|
91
94
|
*/
|
|
92
95
|
style?: JSX.CSSProperties;
|
|
93
96
|
|
|
@@ -103,28 +106,28 @@ interface DropdownComponent extends ParentComponent<DropdownProps> {
|
|
|
103
106
|
}
|
|
104
107
|
|
|
105
108
|
/**
|
|
106
|
-
*
|
|
109
|
+
* Dropdown popup component
|
|
107
110
|
*
|
|
108
|
-
* Trigger/Content
|
|
109
|
-
* Trigger
|
|
111
|
+
* Separates trigger and content using Trigger/Content slot pattern.
|
|
112
|
+
* Auto-toggles on Trigger click, can be disabled with disabled prop.
|
|
110
113
|
*
|
|
111
114
|
* @example
|
|
112
115
|
* ```tsx
|
|
113
116
|
* <Dropdown>
|
|
114
117
|
* <Dropdown.Trigger>
|
|
115
|
-
* <Button
|
|
118
|
+
* <Button>Open</Button>
|
|
116
119
|
* </Dropdown.Trigger>
|
|
117
120
|
* <Dropdown.Content>
|
|
118
|
-
* <div
|
|
121
|
+
* <div>Popup content</div>
|
|
119
122
|
* </Dropdown.Content>
|
|
120
123
|
* </Dropdown>
|
|
121
124
|
* ```
|
|
122
125
|
*
|
|
123
|
-
* @example Context menu (
|
|
126
|
+
* @example Context menu (position without Trigger)
|
|
124
127
|
* ```tsx
|
|
125
128
|
* <Dropdown position={{ x: 300, y: 200 }} open={true}>
|
|
126
129
|
* <Dropdown.Content>
|
|
127
|
-
* <div
|
|
130
|
+
* <div>Menu</div>
|
|
128
131
|
* </Dropdown.Content>
|
|
129
132
|
* </Dropdown>
|
|
130
133
|
* ```
|
|
@@ -147,32 +150,32 @@ export const Dropdown: DropdownComponent = ((props: DropdownProps) => {
|
|
|
147
150
|
onChange: () => local.onOpenChange,
|
|
148
151
|
});
|
|
149
152
|
|
|
150
|
-
//
|
|
153
|
+
// Toggle function (includes disabled check)
|
|
151
154
|
const toggle = () => {
|
|
152
155
|
if (local.disabled) return;
|
|
153
156
|
setOpen(!open());
|
|
154
157
|
};
|
|
155
158
|
|
|
156
|
-
//
|
|
159
|
+
// Slot registration signals
|
|
157
160
|
const [triggerSlot, setTrigger] = createSlotSignal();
|
|
158
161
|
const [contentSlot, setContent] = createSlotSignal();
|
|
159
162
|
|
|
160
|
-
// Trigger wrapper ref (
|
|
163
|
+
// Trigger wrapper ref (needed for position calculation)
|
|
161
164
|
let triggerRef: HTMLDivElement | undefined;
|
|
162
165
|
|
|
163
|
-
//
|
|
166
|
+
// Popup ref
|
|
164
167
|
const [popupRef, setPopupRef] = createSignal<HTMLDivElement>();
|
|
165
168
|
|
|
166
|
-
//
|
|
169
|
+
// Animation state (mount transition)
|
|
167
170
|
const { mounted, animating, unmount } = createMountTransition(open);
|
|
168
171
|
|
|
169
|
-
//
|
|
172
|
+
// Computed position
|
|
170
173
|
const [computedStyle, setComputedStyle] = createSignal<JSX.CSSProperties>({});
|
|
171
174
|
|
|
172
|
-
//
|
|
175
|
+
// Direction (up/down)
|
|
173
176
|
const [direction, setDirection] = createSignal<"down" | "up">("down");
|
|
174
177
|
|
|
175
|
-
//
|
|
178
|
+
// Extract position calculation function
|
|
176
179
|
const updatePosition = () => {
|
|
177
180
|
const popup = popupRef();
|
|
178
181
|
if (!popup) return;
|
|
@@ -184,13 +187,13 @@ export const Dropdown: DropdownComponent = ((props: DropdownProps) => {
|
|
|
184
187
|
const viewportHeight = window.innerHeight;
|
|
185
188
|
const viewportWidth = window.innerWidth;
|
|
186
189
|
|
|
187
|
-
//
|
|
190
|
+
// Determine up/down direction (based on viewport center)
|
|
188
191
|
const spaceBelow = viewportHeight - rect.bottom;
|
|
189
192
|
const spaceAbove = rect.top;
|
|
190
193
|
const openDown = spaceBelow >= spaceAbove;
|
|
191
194
|
setDirection(openDown ? "down" : "up");
|
|
192
195
|
|
|
193
|
-
//
|
|
196
|
+
// Adjust left/right (prevent off-screen) - relative to viewport
|
|
194
197
|
const adjustedLeft = Math.min(rect.left, viewportWidth - popup.offsetWidth);
|
|
195
198
|
|
|
196
199
|
style.left = `${Math.max(0, adjustedLeft)}px`;
|
|
@@ -205,13 +208,13 @@ export const Dropdown: DropdownComponent = ((props: DropdownProps) => {
|
|
|
205
208
|
const viewportHeight = window.innerHeight;
|
|
206
209
|
const viewportWidth = window.innerWidth;
|
|
207
210
|
|
|
208
|
-
//
|
|
211
|
+
// Determine up/down direction
|
|
209
212
|
const spaceBelow = viewportHeight - local.position.y;
|
|
210
213
|
const spaceAbove = local.position.y;
|
|
211
214
|
const openDown = spaceBelow >= spaceAbove;
|
|
212
215
|
setDirection(openDown ? "down" : "up");
|
|
213
216
|
|
|
214
|
-
//
|
|
217
|
+
// Adjust left/right - relative to viewport
|
|
215
218
|
const adjustedLeft = Math.min(local.position.x, viewportWidth - (popup.offsetWidth || 200));
|
|
216
219
|
style.left = `${Math.max(0, adjustedLeft)}px`;
|
|
217
220
|
|
|
@@ -225,7 +228,7 @@ export const Dropdown: DropdownComponent = ((props: DropdownProps) => {
|
|
|
225
228
|
setComputedStyle(style);
|
|
226
229
|
};
|
|
227
230
|
|
|
228
|
-
//
|
|
231
|
+
// Calculate position on mount + recalculate when popup size changes
|
|
229
232
|
createEffect(() => {
|
|
230
233
|
if (!mounted()) return;
|
|
231
234
|
|
|
@@ -239,7 +242,7 @@ export const Dropdown: DropdownComponent = ((props: DropdownProps) => {
|
|
|
239
242
|
}
|
|
240
243
|
});
|
|
241
244
|
|
|
242
|
-
//
|
|
245
|
+
// Detect outside click (pointerdown)
|
|
243
246
|
createEffect(() => {
|
|
244
247
|
if (!open()) return;
|
|
245
248
|
|
|
@@ -247,13 +250,13 @@ export const Dropdown: DropdownComponent = ((props: DropdownProps) => {
|
|
|
247
250
|
const popup = popupRef();
|
|
248
251
|
const target = e.target as Node;
|
|
249
252
|
|
|
250
|
-
//
|
|
253
|
+
// Ignore clicks inside popup
|
|
251
254
|
if (popup?.contains(target)) return;
|
|
252
255
|
|
|
253
|
-
//
|
|
256
|
+
// Ignore clicks inside trigger
|
|
254
257
|
if (triggerRef?.contains(target)) return;
|
|
255
258
|
|
|
256
|
-
//
|
|
259
|
+
// Outside click -> close
|
|
257
260
|
setOpen(false);
|
|
258
261
|
};
|
|
259
262
|
|
|
@@ -261,7 +264,7 @@ export const Dropdown: DropdownComponent = ((props: DropdownProps) => {
|
|
|
261
264
|
onCleanup(() => document.removeEventListener("pointerdown", handlePointerDown));
|
|
262
265
|
});
|
|
263
266
|
|
|
264
|
-
// Tab
|
|
267
|
+
// Detect Tab key focus movement (focusout)
|
|
265
268
|
createEffect(() => {
|
|
266
269
|
if (!open()) return;
|
|
267
270
|
|
|
@@ -269,16 +272,16 @@ export const Dropdown: DropdownComponent = ((props: DropdownProps) => {
|
|
|
269
272
|
const popup = popupRef();
|
|
270
273
|
const relatedTarget = e.relatedTarget as Node | null;
|
|
271
274
|
|
|
272
|
-
// relatedTarget
|
|
275
|
+
// Ignore if relatedTarget is null (pointerdown handles it)
|
|
273
276
|
if (!relatedTarget) return;
|
|
274
277
|
|
|
275
|
-
//
|
|
278
|
+
// Ignore movement to popup
|
|
276
279
|
if (popup?.contains(relatedTarget)) return;
|
|
277
280
|
|
|
278
|
-
//
|
|
281
|
+
// Ignore movement to trigger
|
|
279
282
|
if (triggerRef?.contains(relatedTarget)) return;
|
|
280
283
|
|
|
281
|
-
//
|
|
284
|
+
// Focus moved outside -> close
|
|
282
285
|
setOpen(false);
|
|
283
286
|
};
|
|
284
287
|
|
|
@@ -286,7 +289,7 @@ export const Dropdown: DropdownComponent = ((props: DropdownProps) => {
|
|
|
286
289
|
onCleanup(() => document.removeEventListener("focusout", handleFocusOut));
|
|
287
290
|
});
|
|
288
291
|
|
|
289
|
-
// Escape
|
|
292
|
+
// Detect Escape key
|
|
290
293
|
createEffect(() => {
|
|
291
294
|
if (!open()) return;
|
|
292
295
|
|
|
@@ -301,11 +304,11 @@ export const Dropdown: DropdownComponent = ((props: DropdownProps) => {
|
|
|
301
304
|
onCleanup(() => document.removeEventListener("keydown", handleKeyDown));
|
|
302
305
|
});
|
|
303
306
|
|
|
304
|
-
//
|
|
307
|
+
// Keyboard navigation: handler for trigger
|
|
305
308
|
const handleTriggerKeyDown = (e: KeyboardEvent) => {
|
|
306
309
|
if (!local.keyboardNav) return;
|
|
307
310
|
|
|
308
|
-
//
|
|
311
|
+
// When closed: open with ArrowUp/ArrowDown
|
|
309
312
|
if (!open()) {
|
|
310
313
|
if (e.key === "ArrowDown" || e.key === "ArrowUp") {
|
|
311
314
|
e.preventDefault();
|
|
@@ -314,16 +317,12 @@ export const Dropdown: DropdownComponent = ((props: DropdownProps) => {
|
|
|
314
317
|
return;
|
|
315
318
|
}
|
|
316
319
|
|
|
317
|
-
//
|
|
320
|
+
// When open: handle based on direction
|
|
318
321
|
const popup = popupRef();
|
|
319
322
|
if (!popup) return;
|
|
320
323
|
|
|
321
324
|
const dir = direction();
|
|
322
|
-
const focusables =
|
|
323
|
-
...popup.querySelectorAll<HTMLElement>(
|
|
324
|
-
'[tabindex]:not([tabindex="-1"]), button, [data-list-item]',
|
|
325
|
-
),
|
|
326
|
-
];
|
|
325
|
+
const focusables = tabbable(popup);
|
|
327
326
|
|
|
328
327
|
if (dir === "down") {
|
|
329
328
|
if (e.key === "ArrowDown" && focusables.length > 0) {
|
|
@@ -345,46 +344,60 @@ export const Dropdown: DropdownComponent = ((props: DropdownProps) => {
|
|
|
345
344
|
}
|
|
346
345
|
};
|
|
347
346
|
|
|
348
|
-
//
|
|
347
|
+
// Keyboard navigation: handler for popup
|
|
349
348
|
const handlePopupKeyDown = (e: KeyboardEvent) => {
|
|
350
349
|
if (!local.keyboardNav) return;
|
|
351
350
|
|
|
352
|
-
//
|
|
351
|
+
// Ignore events already handled (e.g., by List)
|
|
353
352
|
if (e.defaultPrevented) return;
|
|
354
353
|
|
|
355
354
|
if (!triggerRef) return;
|
|
356
355
|
|
|
356
|
+
const popup = popupRef();
|
|
357
|
+
if (!popup) return;
|
|
358
|
+
|
|
357
359
|
const dir = direction();
|
|
360
|
+
const allTabbable = tabbable(popup);
|
|
361
|
+
const current = (document.activeElement ?? e.target) as HTMLElement;
|
|
362
|
+
const currentIdx = allTabbable.indexOf(current);
|
|
358
363
|
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
364
|
+
if (e.key === "ArrowUp") {
|
|
365
|
+
if (currentIdx > 0) {
|
|
366
|
+
e.preventDefault();
|
|
367
|
+
allTabbable[currentIdx - 1].focus();
|
|
368
|
+
} else if (dir === "down") {
|
|
369
|
+
e.preventDefault();
|
|
370
|
+
triggerRef.focus();
|
|
371
|
+
}
|
|
372
|
+
} else if (e.key === "ArrowDown") {
|
|
373
|
+
if (currentIdx >= 0 && currentIdx < allTabbable.length - 1) {
|
|
374
|
+
e.preventDefault();
|
|
375
|
+
allTabbable[currentIdx + 1].focus();
|
|
376
|
+
} else if (dir === "up") {
|
|
377
|
+
e.preventDefault();
|
|
378
|
+
triggerRef.focus();
|
|
379
|
+
}
|
|
367
380
|
}
|
|
368
381
|
};
|
|
369
382
|
|
|
370
|
-
//
|
|
383
|
+
// Detect scroll
|
|
371
384
|
createEffect(() => {
|
|
372
385
|
if (!open()) return;
|
|
373
386
|
|
|
374
387
|
const handleScroll = (e: Event) => {
|
|
375
|
-
//
|
|
388
|
+
// Ignore scroll inside popup
|
|
376
389
|
const popup = popupRef();
|
|
377
390
|
if (popup?.contains(e.target as Node)) return;
|
|
378
391
|
|
|
379
392
|
setOpen(false);
|
|
380
393
|
};
|
|
381
394
|
|
|
382
|
-
//
|
|
395
|
+
// Detect all scroll events with capture
|
|
383
396
|
document.addEventListener("scroll", handleScroll, { capture: true });
|
|
384
397
|
onCleanup(() => document.removeEventListener("scroll", handleScroll, { capture: true }));
|
|
385
398
|
});
|
|
386
399
|
|
|
387
|
-
// resize
|
|
400
|
+
// Detect resize (close when viewport size changes)
|
|
388
401
|
createEffect(() => {
|
|
389
402
|
if (!open()) return;
|
|
390
403
|
|
|
@@ -396,20 +409,20 @@ export const Dropdown: DropdownComponent = ((props: DropdownProps) => {
|
|
|
396
409
|
onCleanup(() => window.removeEventListener("resize", handleResize));
|
|
397
410
|
});
|
|
398
411
|
|
|
399
|
-
// transitionend
|
|
412
|
+
// Handle transitionend event
|
|
400
413
|
const handleTransitionEnd = (e: TransitionEvent) => {
|
|
401
|
-
//
|
|
414
|
+
// Only handle when opacity transition completes
|
|
402
415
|
if (e.propertyName !== "opacity") return;
|
|
403
416
|
|
|
404
417
|
if (!open()) {
|
|
405
|
-
//
|
|
418
|
+
// Closing animation complete -> remove from DOM
|
|
406
419
|
unmount();
|
|
407
420
|
}
|
|
408
421
|
};
|
|
409
422
|
|
|
410
423
|
const maxHeight = () => local.maxHeight ?? 300;
|
|
411
424
|
|
|
412
|
-
//
|
|
425
|
+
// Animation class (only transition opacity and transform, not position properties)
|
|
413
426
|
const animationClass = () => {
|
|
414
427
|
const base = "transition-[opacity,transform] duration-150 ease-out";
|
|
415
428
|
const visible = animating();
|
|
@@ -426,12 +439,13 @@ export const Dropdown: DropdownComponent = ((props: DropdownProps) => {
|
|
|
426
439
|
<DropdownContext.Provider value={{ toggle, setTrigger, setContent }}>
|
|
427
440
|
{local.children}
|
|
428
441
|
|
|
429
|
-
{/*
|
|
442
|
+
{/* Render trigger slot (attach click/keyboard handlers to wrapper div) */}
|
|
430
443
|
<Show when={triggerSlot()}>
|
|
431
444
|
<div
|
|
432
445
|
ref={(el) => {
|
|
433
446
|
triggerRef = el;
|
|
434
447
|
}}
|
|
448
|
+
tabIndex={-1}
|
|
435
449
|
data-dropdown-trigger
|
|
436
450
|
onClick={toggle}
|
|
437
451
|
onKeyDown={handleTriggerKeyDown}
|
|
@@ -440,7 +454,7 @@ export const Dropdown: DropdownComponent = ((props: DropdownProps) => {
|
|
|
440
454
|
</div>
|
|
441
455
|
</Show>
|
|
442
456
|
|
|
443
|
-
{/* Content
|
|
457
|
+
{/* Content slot: Portal + popup */}
|
|
444
458
|
<Show when={mounted()}>
|
|
445
459
|
<Portal>
|
|
446
460
|
<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,28 @@ 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
|
}
|
|
49
|
+
|
|
50
|
+
/** Get the topmost (front-most) Dialog element, or null if none are open */
|
|
51
|
+
export function getTopmostDialog(): HTMLElement | null {
|
|
52
|
+
return stack.length > 0 ? stack[stack.length - 1] : null;
|
|
53
|
+
}
|
|
@@ -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;
|