@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
|
@@ -13,11 +13,11 @@ import { mergeStyles } from "../../helpers/mergeStyles";
|
|
|
13
13
|
|
|
14
14
|
export interface CollapseProps extends JSX.HTMLAttributes<HTMLDivElement> {
|
|
15
15
|
/**
|
|
16
|
-
*
|
|
16
|
+
* Whether to show content. Default: false (closed)
|
|
17
17
|
*
|
|
18
|
-
*
|
|
19
|
-
* -
|
|
20
|
-
* - `Button`
|
|
18
|
+
* Accessibility note:
|
|
19
|
+
* - Use `aria-expanded` and `aria-controls` on the toggle button.
|
|
20
|
+
* - If using the `Button` component, Enter/Space keyboard accessibility is automatically supported.
|
|
21
21
|
*
|
|
22
22
|
* @example
|
|
23
23
|
* ```tsx
|
|
@@ -40,24 +40,24 @@ const transitionClass = clsx(
|
|
|
40
40
|
export const Collapse: ParentComponent<CollapseProps> = (props) => {
|
|
41
41
|
const [local, rest] = splitProps(props, ["children", "class", "style", "open"]);
|
|
42
42
|
|
|
43
|
-
//
|
|
43
|
+
// Content element ref
|
|
44
44
|
const [contentRef, setContentRef] = createSignal<HTMLDivElement>();
|
|
45
45
|
|
|
46
|
-
//
|
|
46
|
+
// Track content height
|
|
47
47
|
const size = createElementSize(contentRef);
|
|
48
48
|
|
|
49
|
-
//
|
|
50
|
-
//
|
|
49
|
+
// Disable transition on initial render (prevent flickering)
|
|
50
|
+
// Enable it on the next frame via requestAnimationFrame
|
|
51
51
|
const [mounted, setMounted] = createSignal(false);
|
|
52
52
|
onMount(() => {
|
|
53
53
|
const rafId = requestAnimationFrame(() => setMounted(true));
|
|
54
54
|
onCleanup(() => cancelAnimationFrame(rafId));
|
|
55
55
|
});
|
|
56
56
|
|
|
57
|
-
//
|
|
57
|
+
// Treat undefined open as false
|
|
58
58
|
const isOpen = () => local.open ?? false;
|
|
59
59
|
|
|
60
|
-
// margin-top
|
|
60
|
+
// Calculate margin-top
|
|
61
61
|
const marginTop = () => (isOpen() ? undefined : `${-(size.height ?? 0)}px`);
|
|
62
62
|
|
|
63
63
|
return (
|
|
@@ -72,7 +72,7 @@ export const Collapse: ParentComponent<CollapseProps> = (props) => {
|
|
|
72
72
|
class={mounted() ? transitionClass : ""}
|
|
73
73
|
style={{
|
|
74
74
|
"margin-top": marginTop(),
|
|
75
|
-
//
|
|
75
|
+
// When closed, prevent access to focusable elements and prevent FOUC
|
|
76
76
|
"visibility": !isOpen() ? "hidden" : undefined,
|
|
77
77
|
}}
|
|
78
78
|
>
|
|
@@ -21,6 +21,7 @@ import { createMountTransition } from "../../hooks/createMountTransition";
|
|
|
21
21
|
import { startPointerDrag } from "../../helpers/startPointerDrag";
|
|
22
22
|
import { createSlotComponent } from "../../helpers/createSlotComponent";
|
|
23
23
|
import { mergeStyles } from "../../helpers/mergeStyles";
|
|
24
|
+
import { useI18nOptional } from "../../providers/i18n/I18nContext";
|
|
24
25
|
import { Icon } from "../display/Icon";
|
|
25
26
|
import { borderSubtle } from "../../styles/tokens.styles";
|
|
26
27
|
import { DialogDefaultsContext } from "./DialogContext";
|
|
@@ -38,41 +39,41 @@ const DialogHeader = createSlotComponent(DialogSlotsContext, (ctx) => ctx.setHea
|
|
|
38
39
|
const DialogAction = createSlotComponent(DialogSlotsContext, (ctx) => ctx.setAction);
|
|
39
40
|
|
|
40
41
|
export interface DialogProps {
|
|
41
|
-
/**
|
|
42
|
+
/** Modal open state */
|
|
42
43
|
open?: boolean;
|
|
43
|
-
/**
|
|
44
|
+
/** Callback when open state changes */
|
|
44
45
|
onOpenChange?: (open: boolean) => void;
|
|
45
|
-
/**
|
|
46
|
+
/** Show close button (default: true) */
|
|
46
47
|
closable?: boolean;
|
|
47
|
-
/**
|
|
48
|
+
/** Close on backdrop click */
|
|
48
49
|
closeOnBackdrop?: boolean;
|
|
49
|
-
/** Escape
|
|
50
|
+
/** Close on Escape key (default: true) */
|
|
50
51
|
closeOnEscape?: boolean;
|
|
51
|
-
/**
|
|
52
|
+
/** Resizable (default: false) */
|
|
52
53
|
resizable?: boolean;
|
|
53
|
-
/**
|
|
54
|
+
/** Draggable (default: true) */
|
|
54
55
|
movable?: boolean;
|
|
55
|
-
/**
|
|
56
|
+
/** Floating mode (no backdrop) */
|
|
56
57
|
float?: boolean;
|
|
57
|
-
/**
|
|
58
|
+
/** Full-screen mode */
|
|
58
59
|
fill?: boolean;
|
|
59
|
-
/**
|
|
60
|
+
/** Width */
|
|
60
61
|
width?: number;
|
|
61
|
-
/**
|
|
62
|
+
/** Height */
|
|
62
63
|
height?: number;
|
|
63
|
-
/**
|
|
64
|
+
/** Minimum width */
|
|
64
65
|
minWidth?: number;
|
|
65
|
-
/**
|
|
66
|
+
/** Minimum height */
|
|
66
67
|
minHeight?: number;
|
|
67
|
-
/**
|
|
68
|
+
/** Fixed position */
|
|
68
69
|
position?: "bottom-right" | "top-right";
|
|
69
|
-
/**
|
|
70
|
+
/** Header style */
|
|
70
71
|
headerStyle?: JSX.CSSProperties | string;
|
|
71
|
-
/**
|
|
72
|
+
/** Confirmation function before closing */
|
|
72
73
|
canDeactivate?: () => boolean;
|
|
73
|
-
/**
|
|
74
|
+
/** Callback after close animation completes */
|
|
74
75
|
onCloseComplete?: () => void;
|
|
75
|
-
/**
|
|
76
|
+
/** Additional CSS class */
|
|
76
77
|
class?: string;
|
|
77
78
|
}
|
|
78
79
|
|
|
@@ -122,19 +123,19 @@ const resizePositionMap: Record<ResizeDirection, string> = {
|
|
|
122
123
|
};
|
|
123
124
|
|
|
124
125
|
/**
|
|
125
|
-
*
|
|
126
|
+
* Dialog component
|
|
126
127
|
*
|
|
127
|
-
*
|
|
128
|
-
* float/fill
|
|
128
|
+
* Provides a declarative dialog UI. Supports dragging, 8-directional resizing,
|
|
129
|
+
* float/fill modes, automatic z-index management, and more.
|
|
129
130
|
*
|
|
130
131
|
* @example
|
|
131
132
|
* ```tsx
|
|
132
133
|
* const [open, setOpen] = createSignal(false);
|
|
133
134
|
*
|
|
134
|
-
* <Button onClick={() => setOpen(true)}
|
|
135
|
+
* <Button onClick={() => setOpen(true)}>Open Dialog</Button>
|
|
135
136
|
* <Dialog open={open()} onOpenChange={setOpen}>
|
|
136
|
-
* <Dialog.Header
|
|
137
|
-
* <div class="p-4"
|
|
137
|
+
* <Dialog.Header>My Dialog</Dialog.Header>
|
|
138
|
+
* <div class="p-4">Dialog content</div>
|
|
138
139
|
* </Dialog>
|
|
139
140
|
* ```
|
|
140
141
|
*/
|
|
@@ -145,6 +146,7 @@ interface DialogComponent extends ParentComponent<DialogProps> {
|
|
|
145
146
|
|
|
146
147
|
export const Dialog: DialogComponent = (props) => {
|
|
147
148
|
const dialogDefaults = useContext(DialogDefaultsContext);
|
|
149
|
+
const i18n = useI18nOptional();
|
|
148
150
|
|
|
149
151
|
const [local] = splitProps(props, [
|
|
150
152
|
"open",
|
|
@@ -179,10 +181,10 @@ export const Dialog: DialogComponent = (props) => {
|
|
|
179
181
|
onChange: () => local.onOpenChange,
|
|
180
182
|
});
|
|
181
183
|
|
|
182
|
-
//
|
|
184
|
+
// Animation state (mount transition)
|
|
183
185
|
const { mounted, animating, unmount } = createMountTransition(open);
|
|
184
186
|
|
|
185
|
-
//
|
|
187
|
+
// Prevent duplicate onCloseComplete calls
|
|
186
188
|
let closeCompleteEmitted = false;
|
|
187
189
|
|
|
188
190
|
const emitCloseComplete = () => {
|
|
@@ -192,7 +194,7 @@ export const Dialog: DialogComponent = (props) => {
|
|
|
192
194
|
local.onCloseComplete?.();
|
|
193
195
|
};
|
|
194
196
|
|
|
195
|
-
//
|
|
197
|
+
// Reset closeCompleteEmitted when open changes + detect fallback unmount
|
|
196
198
|
let wasMounted = false;
|
|
197
199
|
createEffect(() => {
|
|
198
200
|
if (open()) {
|
|
@@ -201,23 +203,23 @@ export const Dialog: DialogComponent = (props) => {
|
|
|
201
203
|
if (mounted()) {
|
|
202
204
|
wasMounted = true;
|
|
203
205
|
} else if (wasMounted) {
|
|
204
|
-
//
|
|
205
|
-
//
|
|
206
|
+
// Prevent onCloseComplete from not being called when fallback timer runs
|
|
207
|
+
// before transitionend and removes DOM
|
|
206
208
|
emitCloseComplete();
|
|
207
209
|
}
|
|
208
210
|
});
|
|
209
211
|
|
|
210
|
-
//
|
|
212
|
+
// Dialog ref
|
|
211
213
|
let dialogRef: HTMLDivElement | undefined;
|
|
212
214
|
|
|
213
|
-
//
|
|
215
|
+
// Wrapper ref (managed as signal to guarantee Portal ref timing)
|
|
214
216
|
const [wrapperRef, setWrapperRef] = createSignal<HTMLDivElement>();
|
|
215
217
|
|
|
216
218
|
const closeOnEscape = () => local.closeOnEscape ?? dialogDefaults?.().closeOnEscape ?? true;
|
|
217
219
|
const closeOnBackdrop = () =>
|
|
218
220
|
local.closeOnBackdrop ?? dialogDefaults?.().closeOnBackdrop ?? false;
|
|
219
221
|
|
|
220
|
-
// Escape
|
|
222
|
+
// Detect Escape key
|
|
221
223
|
createEffect(() => {
|
|
222
224
|
if (!open()) return;
|
|
223
225
|
|
|
@@ -237,7 +239,7 @@ export const Dialog: DialogComponent = (props) => {
|
|
|
237
239
|
onCleanup(() => document.removeEventListener("keydown", handleKeyDown));
|
|
238
240
|
});
|
|
239
241
|
|
|
240
|
-
//
|
|
242
|
+
// Register when opening, unregister when closing
|
|
241
243
|
createEffect(() => {
|
|
242
244
|
if (!open()) return;
|
|
243
245
|
const el = wrapperRef();
|
|
@@ -246,24 +248,24 @@ export const Dialog: DialogComponent = (props) => {
|
|
|
246
248
|
onCleanup(() => unregisterDialog(el));
|
|
247
249
|
});
|
|
248
250
|
|
|
249
|
-
//
|
|
251
|
+
// Attempt to close (check canDeactivate)
|
|
250
252
|
const tryClose = () => {
|
|
251
253
|
if (local.canDeactivate && !local.canDeactivate()) return;
|
|
252
254
|
setOpen(false);
|
|
253
255
|
};
|
|
254
256
|
|
|
255
|
-
//
|
|
257
|
+
// Backdrop click handler
|
|
256
258
|
const handleBackdropClick = () => {
|
|
257
259
|
if (!closeOnBackdrop()) return;
|
|
258
260
|
tryClose();
|
|
259
261
|
};
|
|
260
262
|
|
|
261
|
-
//
|
|
263
|
+
// Close button click handler
|
|
262
264
|
const handleCloseClick = () => {
|
|
263
265
|
tryClose();
|
|
264
266
|
};
|
|
265
267
|
|
|
266
|
-
// transitionend
|
|
268
|
+
// Handle transitionend event
|
|
267
269
|
const handleTransitionEnd = (e: TransitionEvent) => {
|
|
268
270
|
if (e.propertyName !== "opacity") return;
|
|
269
271
|
if (!open()) {
|
|
@@ -271,20 +273,20 @@ export const Dialog: DialogComponent = (props) => {
|
|
|
271
273
|
}
|
|
272
274
|
};
|
|
273
275
|
|
|
274
|
-
// z-index
|
|
276
|
+
// Automatic z-index management
|
|
275
277
|
const handleDialogFocus = () => {
|
|
276
278
|
const el = wrapperRef();
|
|
277
279
|
if (!el) return;
|
|
278
280
|
bringToFront(el);
|
|
279
281
|
};
|
|
280
282
|
|
|
281
|
-
//
|
|
283
|
+
// Dragging
|
|
282
284
|
const handleHeaderPointerDown = (event: PointerEvent) => {
|
|
283
|
-
// movable
|
|
285
|
+
// movable default is true
|
|
284
286
|
if (local.movable === false) return;
|
|
285
287
|
const wrapperEl = wrapperRef();
|
|
286
288
|
if (!dialogRef || !wrapperEl) return;
|
|
287
|
-
//
|
|
289
|
+
// Do not treat events from interactive elements like close button as drag
|
|
288
290
|
if ((event.target as HTMLElement).closest("button")) return;
|
|
289
291
|
|
|
290
292
|
const target = event.currentTarget as HTMLElement;
|
|
@@ -307,7 +309,7 @@ export const Dialog: DialogComponent = (props) => {
|
|
|
307
309
|
dialogEl.style.bottom = "auto";
|
|
308
310
|
dialogEl.style.margin = "0";
|
|
309
311
|
|
|
310
|
-
//
|
|
312
|
+
// Prevent off-screen
|
|
311
313
|
if (dialogEl.offsetLeft > wrapperEl.offsetWidth - 100) {
|
|
312
314
|
dialogEl.style.left = wrapperEl.offsetWidth - 100 + "px";
|
|
313
315
|
}
|
|
@@ -328,7 +330,7 @@ export const Dialog: DialogComponent = (props) => {
|
|
|
328
330
|
});
|
|
329
331
|
};
|
|
330
332
|
|
|
331
|
-
//
|
|
333
|
+
// Resize
|
|
332
334
|
const handleResizeBarPointerDown = (event: PointerEvent, direction: ResizeDirection) => {
|
|
333
335
|
if (!local.resizable) return;
|
|
334
336
|
if (!dialogRef) return;
|
|
@@ -381,7 +383,7 @@ export const Dialog: DialogComponent = (props) => {
|
|
|
381
383
|
});
|
|
382
384
|
};
|
|
383
385
|
|
|
384
|
-
// dialog
|
|
386
|
+
// Calculate dialog inline styles
|
|
385
387
|
const dialogStyle = (): JSX.CSSProperties => {
|
|
386
388
|
const style: JSX.CSSProperties = {};
|
|
387
389
|
|
|
@@ -404,7 +406,7 @@ export const Dialog: DialogComponent = (props) => {
|
|
|
404
406
|
style["min-height"] = `${local.minHeight}px`;
|
|
405
407
|
}
|
|
406
408
|
|
|
407
|
-
//
|
|
409
|
+
// Position mode
|
|
408
410
|
if (local.position === "bottom-right") {
|
|
409
411
|
style.position = "absolute";
|
|
410
412
|
style.right = "3rem";
|
|
@@ -418,7 +420,7 @@ export const Dialog: DialogComponent = (props) => {
|
|
|
418
420
|
return style;
|
|
419
421
|
};
|
|
420
422
|
|
|
421
|
-
//
|
|
423
|
+
// Animation class
|
|
422
424
|
const animationClass = () => {
|
|
423
425
|
const base = clsx("transition-[opacity,transform]", "duration-200", "ease-out");
|
|
424
426
|
if (animating()) {
|
|
@@ -428,9 +430,9 @@ export const Dialog: DialogComponent = (props) => {
|
|
|
428
430
|
}
|
|
429
431
|
};
|
|
430
432
|
|
|
431
|
-
//
|
|
433
|
+
// Wrapper class
|
|
432
434
|
const wrapperClass = () =>
|
|
433
|
-
// eslint-disable-next-line tailwindcss/enforces-shorthand -- inset-0
|
|
435
|
+
// eslint-disable-next-line tailwindcss/enforces-shorthand -- inset-0 not supported in Chrome 84
|
|
434
436
|
clsx(
|
|
435
437
|
"fixed bottom-0 left-0 right-0 top-0",
|
|
436
438
|
"flex flex-col items-center",
|
|
@@ -438,9 +440,9 @@ export const Dialog: DialogComponent = (props) => {
|
|
|
438
440
|
local.float && "pointer-events-none",
|
|
439
441
|
);
|
|
440
442
|
|
|
441
|
-
//
|
|
443
|
+
// Backdrop class
|
|
442
444
|
const backdropClass = () =>
|
|
443
|
-
// eslint-disable-next-line tailwindcss/enforces-shorthand -- inset-0
|
|
445
|
+
// eslint-disable-next-line tailwindcss/enforces-shorthand -- inset-0 not supported in Chrome 84
|
|
444
446
|
clsx(
|
|
445
447
|
"absolute bottom-0 left-0 right-0 top-0",
|
|
446
448
|
"bg-black/30",
|
|
@@ -451,7 +453,7 @@ export const Dialog: DialogComponent = (props) => {
|
|
|
451
453
|
animating() ? "opacity-100" : "opacity-0",
|
|
452
454
|
);
|
|
453
455
|
|
|
454
|
-
//
|
|
456
|
+
// Dialog class
|
|
455
457
|
const dialogBaseClass = () =>
|
|
456
458
|
clsx(
|
|
457
459
|
"relative",
|
|
@@ -469,7 +471,7 @@ export const Dialog: DialogComponent = (props) => {
|
|
|
469
471
|
animationClass(),
|
|
470
472
|
);
|
|
471
473
|
|
|
472
|
-
//
|
|
474
|
+
// Header class
|
|
473
475
|
const headerClass = () =>
|
|
474
476
|
clsx("flex items-center gap-2", "px-3 py-1", "select-none", "border-b", borderSubtle);
|
|
475
477
|
|
|
@@ -478,12 +480,12 @@ export const Dialog: DialogComponent = (props) => {
|
|
|
478
480
|
<Portal>
|
|
479
481
|
<DialogSlotsContext.Provider value={{ setHeader, setAction }}>
|
|
480
482
|
<div ref={setWrapperRef} data-modal class={wrapperClass()}>
|
|
481
|
-
{/*
|
|
483
|
+
{/* Backdrop */}
|
|
482
484
|
<Show when={!local.float}>
|
|
483
485
|
<div data-modal-backdrop class={backdropClass()} onClick={handleBackdropClick} />
|
|
484
486
|
</Show>
|
|
485
487
|
|
|
486
|
-
{/*
|
|
488
|
+
{/* Dialog */}
|
|
487
489
|
<div
|
|
488
490
|
ref={(el) => {
|
|
489
491
|
dialogRef = el;
|
|
@@ -498,7 +500,7 @@ export const Dialog: DialogComponent = (props) => {
|
|
|
498
500
|
onFocus={handleDialogFocus}
|
|
499
501
|
onTransitionEnd={handleTransitionEnd}
|
|
500
502
|
>
|
|
501
|
-
{/*
|
|
503
|
+
{/* Header */}
|
|
502
504
|
<Show when={hasHeader()}>
|
|
503
505
|
<div
|
|
504
506
|
data-modal-header
|
|
@@ -519,6 +521,7 @@ export const Dialog: DialogComponent = (props) => {
|
|
|
519
521
|
data-modal-close
|
|
520
522
|
size={"sm"}
|
|
521
523
|
variant={"ghost"}
|
|
524
|
+
aria-label={i18n?.t("dialog.close") ?? "Close dialog"}
|
|
522
525
|
onClick={handleCloseClick}
|
|
523
526
|
>
|
|
524
527
|
<Icon icon={IconX} />
|
|
@@ -527,12 +530,12 @@ export const Dialog: DialogComponent = (props) => {
|
|
|
527
530
|
</div>
|
|
528
531
|
</Show>
|
|
529
532
|
|
|
530
|
-
{/*
|
|
533
|
+
{/* Content */}
|
|
531
534
|
<div data-modal-content class={dialogContentClass}>
|
|
532
535
|
{local.children}
|
|
533
536
|
</div>
|
|
534
537
|
|
|
535
|
-
{/*
|
|
538
|
+
{/* Resize bars */}
|
|
536
539
|
<Show when={local.resizable}>
|
|
537
540
|
<For each={RESIZE_DIRECTIONS}>
|
|
538
541
|
{(direction) => (
|
|
@@ -1,69 +1,69 @@
|
|
|
1
1
|
import { createContext, useContext, type Accessor, type JSX } from "solid-js";
|
|
2
2
|
|
|
3
|
-
/**
|
|
3
|
+
/** Dialog default configuration */
|
|
4
4
|
export interface DialogDefaults {
|
|
5
|
-
/**
|
|
5
|
+
/** Allow closing via ESC key */
|
|
6
6
|
closeOnEscape?: boolean;
|
|
7
|
-
/**
|
|
7
|
+
/** Allow closing via backdrop click */
|
|
8
8
|
closeOnBackdrop?: boolean;
|
|
9
9
|
}
|
|
10
10
|
|
|
11
|
-
/**
|
|
11
|
+
/** Dialog default configuration Context */
|
|
12
12
|
export const DialogDefaultsContext = createContext<Accessor<DialogDefaults>>();
|
|
13
13
|
|
|
14
|
-
/**
|
|
14
|
+
/** Programmatic dialog options */
|
|
15
15
|
export interface DialogShowOptions {
|
|
16
|
-
/**
|
|
16
|
+
/** Dialog header */
|
|
17
17
|
header?: JSX.Element;
|
|
18
|
-
/**
|
|
18
|
+
/** Show close button */
|
|
19
19
|
closable?: boolean;
|
|
20
|
-
/**
|
|
20
|
+
/** Close on backdrop click */
|
|
21
21
|
closeOnBackdrop?: boolean;
|
|
22
|
-
/** ESC
|
|
22
|
+
/** Close on ESC key */
|
|
23
23
|
closeOnEscape?: boolean;
|
|
24
|
-
/**
|
|
24
|
+
/** Resizable */
|
|
25
25
|
resizable?: boolean;
|
|
26
|
-
/**
|
|
26
|
+
/** Draggable */
|
|
27
27
|
movable?: boolean;
|
|
28
|
-
/**
|
|
28
|
+
/** Floating mode (fixed to bottom-right) */
|
|
29
29
|
float?: boolean;
|
|
30
|
-
/**
|
|
30
|
+
/** Fill full screen */
|
|
31
31
|
fill?: boolean;
|
|
32
|
-
/**
|
|
32
|
+
/** Initial width (px) */
|
|
33
33
|
width?: number;
|
|
34
|
-
/**
|
|
34
|
+
/** Initial height (px) */
|
|
35
35
|
height?: number;
|
|
36
|
-
/**
|
|
36
|
+
/** Minimum width (px) */
|
|
37
37
|
minWidth?: number;
|
|
38
|
-
/**
|
|
38
|
+
/** Minimum height (px) */
|
|
39
39
|
minHeight?: number;
|
|
40
|
-
/**
|
|
40
|
+
/** Floating position */
|
|
41
41
|
position?: "bottom-right" | "top-right";
|
|
42
|
-
/**
|
|
42
|
+
/** Custom header style */
|
|
43
43
|
headerStyle?: JSX.CSSProperties | string;
|
|
44
|
-
/**
|
|
44
|
+
/** Confirmation function before closing (return false to cancel) */
|
|
45
45
|
canDeactivate?: () => boolean;
|
|
46
46
|
}
|
|
47
47
|
|
|
48
|
-
/**
|
|
48
|
+
/** Programmatic dialog Context value */
|
|
49
49
|
export interface DialogContextValue {
|
|
50
|
-
/**
|
|
50
|
+
/** Open dialog and wait until closing, returns result */
|
|
51
51
|
show<T = undefined>(
|
|
52
52
|
factory: () => JSX.Element,
|
|
53
53
|
options: DialogShowOptions,
|
|
54
54
|
): Promise<T | undefined>;
|
|
55
55
|
}
|
|
56
56
|
|
|
57
|
-
/**
|
|
57
|
+
/** Programmatic dialog Context */
|
|
58
58
|
export const DialogContext = createContext<DialogContextValue>();
|
|
59
59
|
|
|
60
60
|
/**
|
|
61
|
-
*
|
|
61
|
+
* Hook to access programmatic dialogs
|
|
62
62
|
*
|
|
63
|
-
* @throws DialogProvider
|
|
63
|
+
* @throws Throws error if DialogProvider is not present
|
|
64
64
|
*/
|
|
65
65
|
export function useDialog(): DialogContextValue {
|
|
66
66
|
const ctx = useContext(DialogContext);
|
|
67
|
-
if (!ctx) throw new Error("useDialog
|
|
67
|
+
if (!ctx) throw new Error("useDialog can only be used inside DialogProvider");
|
|
68
68
|
return ctx;
|
|
69
69
|
}
|
|
@@ -1,24 +1,24 @@
|
|
|
1
1
|
import { createContext, useContext } from "solid-js";
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
4
|
+
* Dialog instance (used internally within programmatic dialogs)
|
|
5
5
|
*/
|
|
6
6
|
export interface DialogInstance<TResult> {
|
|
7
|
-
/**
|
|
7
|
+
/** Close dialog (result is passed to show() Promise) */
|
|
8
8
|
close: (result?: TResult) => void;
|
|
9
9
|
}
|
|
10
10
|
|
|
11
|
-
/**
|
|
11
|
+
/** Dialog instance Context */
|
|
12
12
|
export const DialogInstanceContext = createContext<DialogInstance<unknown>>();
|
|
13
13
|
|
|
14
14
|
/**
|
|
15
|
-
*
|
|
15
|
+
* Hook to access dialog instance
|
|
16
16
|
*
|
|
17
17
|
* @remarks
|
|
18
|
-
* DialogProvider.show()
|
|
19
|
-
*
|
|
18
|
+
* Only has a value inside a dialog opened via DialogProvider.show().
|
|
19
|
+
* Returns undefined when called outside the Provider.
|
|
20
20
|
*
|
|
21
|
-
* @returns DialogInstance
|
|
21
|
+
* @returns DialogInstance or undefined (outside Provider)
|
|
22
22
|
*/
|
|
23
23
|
export function useDialogInstance<TResult = undefined>(): DialogInstance<TResult> | undefined {
|
|
24
24
|
return useContext(DialogInstanceContext) as DialogInstance<TResult> | undefined;
|
|
@@ -30,10 +30,10 @@ interface DialogEntry {
|
|
|
30
30
|
let nextId = 0;
|
|
31
31
|
|
|
32
32
|
/**
|
|
33
|
-
*
|
|
33
|
+
* Programmatic dialog Provider
|
|
34
34
|
*
|
|
35
|
-
* `useDialog().show(content, options)
|
|
36
|
-
* `close(result)`
|
|
35
|
+
* Open dialogs with `useDialog().show(content, options)`,
|
|
36
|
+
* and close them with `close(result)` to resolve the Promise.
|
|
37
37
|
*
|
|
38
38
|
* @example
|
|
39
39
|
* ```tsx
|
|
@@ -73,7 +73,7 @@ export const DialogProvider: ParentComponent<DialogProviderProps> = (props) => {
|
|
|
73
73
|
});
|
|
74
74
|
};
|
|
75
75
|
|
|
76
|
-
//
|
|
76
|
+
// Start close animation (set open to false)
|
|
77
77
|
const requestClose = (id: string, result?: unknown) => {
|
|
78
78
|
const entry = entries().find((e) => e.id === id);
|
|
79
79
|
if (entry) {
|
|
@@ -82,7 +82,7 @@ export const DialogProvider: ParentComponent<DialogProviderProps> = (props) => {
|
|
|
82
82
|
}
|
|
83
83
|
};
|
|
84
84
|
|
|
85
|
-
//
|
|
85
|
+
// Actually remove after animation completes
|
|
86
86
|
const removeEntry = (id: string) => {
|
|
87
87
|
setEntries((prev) => {
|
|
88
88
|
const entry = prev.find((e) => e.id === id);
|