@simplysm/solid 13.0.28 → 13.0.29
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 +6 -5
- package/dist/components/data/Pagination.d.ts.map +1 -1
- package/dist/components/data/Pagination.js.map +1 -1
- package/dist/components/data/calendar/Calendar.d.ts.map +1 -1
- package/dist/components/data/calendar/Calendar.js.map +1 -1
- package/dist/components/data/kanban/Kanban.d.ts.map +1 -1
- package/dist/components/data/kanban/Kanban.js +2 -2
- package/dist/components/data/kanban/Kanban.js.map +2 -2
- package/dist/components/data/list/List.d.ts.map +1 -1
- package/dist/components/data/list/List.js.map +1 -1
- package/dist/components/data/list/ListItem.d.ts.map +1 -1
- package/dist/components/data/list/ListItem.js.map +1 -1
- package/dist/components/data/permission-table/PermissionTable.d.ts.map +1 -1
- package/dist/components/data/permission-table/PermissionTable.js.map +1 -1
- package/dist/components/data/sheet/DataSheet.d.ts.map +1 -1
- package/dist/components/data/sheet/DataSheet.js.map +1 -1
- package/dist/components/data/sheet/DataSheet.styles.d.ts.map +1 -1
- package/dist/components/data/sheet/DataSheet.styles.js +23 -5
- package/dist/components/data/sheet/DataSheet.styles.js.map +1 -1
- package/dist/components/data/sheet/DataSheetColumn.d.ts.map +1 -1
- package/dist/components/data/sheet/DataSheetColumn.js.map +1 -1
- package/dist/components/data/sheet/DataSheetConfigDialog.d.ts.map +1 -1
- package/dist/components/data/sheet/DataSheetConfigDialog.js.map +1 -1
- package/dist/components/data/sheet/sheetUtils.d.ts.map +1 -1
- package/dist/components/data/sheet/sheetUtils.js.map +1 -1
- package/dist/components/disclosure/Collapse.d.ts.map +1 -1
- package/dist/components/disclosure/Collapse.js +0 -3
- package/dist/components/disclosure/Collapse.js.map +1 -1
- package/dist/components/disclosure/Dialog.d.ts.map +1 -1
- package/dist/components/disclosure/Dialog.js.map +1 -1
- package/dist/components/disclosure/DialogContext.d.ts.map +1 -1
- package/dist/components/disclosure/DialogContext.js.map +1 -1
- package/dist/components/disclosure/DialogProvider.d.ts.map +1 -1
- package/dist/components/disclosure/DialogProvider.js.map +1 -1
- package/dist/components/disclosure/Dropdown.d.ts.map +1 -1
- package/dist/components/disclosure/Dropdown.js.map +1 -1
- package/dist/components/disclosure/Tabs.d.ts.map +1 -1
- package/dist/components/disclosure/Tabs.js.map +1 -1
- package/dist/components/display/Alert.d.ts.map +1 -1
- package/dist/components/display/Alert.js.map +1 -1
- package/dist/components/display/Card.d.ts +0 -1
- package/dist/components/display/Card.d.ts.map +1 -1
- package/dist/components/display/Card.js +1 -2
- package/dist/components/display/Card.js.map +1 -1
- package/dist/components/display/Echarts.d.ts +1 -1
- package/dist/components/display/Echarts.d.ts.map +1 -1
- package/dist/components/display/Echarts.js +2 -2
- package/dist/components/display/Echarts.js.map +2 -2
- package/dist/components/display/Link.d.ts +5 -0
- package/dist/components/display/Link.d.ts.map +1 -0
- package/dist/components/display/Link.js +26 -0
- package/dist/components/display/Link.js.map +6 -0
- package/dist/components/feedback/busy/BusyContainer.d.ts +12 -0
- package/dist/components/feedback/busy/BusyContainer.d.ts.map +1 -0
- package/dist/components/feedback/{loading/LoadingContainer.js → busy/BusyContainer.js} +7 -7
- package/dist/components/feedback/busy/BusyContainer.js.map +6 -0
- package/dist/components/feedback/busy/BusyContext.d.ts +11 -0
- package/dist/components/feedback/busy/BusyContext.d.ts.map +1 -0
- package/dist/components/feedback/busy/BusyContext.js +14 -0
- package/dist/components/feedback/busy/BusyContext.js.map +6 -0
- package/dist/components/feedback/busy/BusyProvider.d.ts +7 -0
- package/dist/components/feedback/busy/BusyProvider.d.ts.map +1 -0
- package/dist/components/feedback/{loading/LoadingProvider.js → busy/BusyProvider.js} +7 -7
- package/dist/components/feedback/busy/BusyProvider.js.map +6 -0
- package/dist/components/feedback/notification/NotificationBanner.d.ts.map +1 -1
- package/dist/components/feedback/notification/NotificationBanner.js.map +1 -1
- package/dist/components/feedback/notification/NotificationBell.d.ts.map +1 -1
- package/dist/components/feedback/notification/NotificationBell.js.map +1 -1
- package/dist/components/feedback/notification/NotificationContext.d.ts.map +1 -1
- package/dist/components/feedback/notification/NotificationContext.js.map +1 -1
- package/dist/components/feedback/notification/NotificationProvider.d.ts.map +1 -1
- package/dist/components/feedback/notification/NotificationProvider.js.map +1 -1
- package/dist/components/form-control/Button.d.ts.map +1 -1
- package/dist/components/form-control/Button.js +2 -2
- package/dist/components/form-control/Button.js.map +1 -1
- package/dist/components/form-control/DropdownTrigger.styles.d.ts.map +1 -1
- package/dist/components/form-control/DropdownTrigger.styles.js +6 -1
- package/dist/components/form-control/DropdownTrigger.styles.js.map +1 -1
- package/dist/components/form-control/Invalid.d.ts.map +1 -1
- package/dist/components/form-control/Invalid.js +1 -1
- package/dist/components/form-control/Invalid.js.map +1 -1
- package/dist/components/form-control/ThemeToggle.d.ts.map +1 -1
- package/dist/components/form-control/ThemeToggle.js.map +1 -1
- package/dist/components/form-control/checkbox/Checkbox.styles.d.ts.map +1 -1
- package/dist/components/form-control/checkbox/Checkbox.styles.js +5 -1
- package/dist/components/form-control/checkbox/Checkbox.styles.js.map +1 -1
- package/dist/components/form-control/color-picker/ColorPicker.d.ts.map +1 -1
- package/dist/components/form-control/color-picker/ColorPicker.js.map +1 -1
- package/dist/components/form-control/combobox/Combobox.d.ts.map +1 -1
- package/dist/components/form-control/combobox/Combobox.js +5 -5
- package/dist/components/form-control/combobox/Combobox.js.map +2 -2
- package/dist/components/form-control/editor/EditorToolbar.d.ts.map +1 -1
- package/dist/components/form-control/editor/EditorToolbar.js.map +1 -1
- package/dist/components/form-control/editor/RichTextEditor.d.ts.map +1 -1
- package/dist/components/form-control/editor/RichTextEditor.js.map +1 -1
- package/dist/components/form-control/field/DatePicker.d.ts.map +1 -1
- package/dist/components/form-control/field/DatePicker.js.map +1 -1
- package/dist/components/form-control/field/DateTimePicker.d.ts.map +1 -1
- package/dist/components/form-control/field/DateTimePicker.js.map +1 -1
- package/dist/components/form-control/field/Field.styles.d.ts.map +1 -1
- package/dist/components/form-control/field/Field.styles.js +17 -3
- package/dist/components/form-control/field/Field.styles.js.map +1 -1
- package/dist/components/form-control/field/NumberInput.d.ts +3 -0
- package/dist/components/form-control/field/NumberInput.d.ts.map +1 -1
- package/dist/components/form-control/field/NumberInput.js +23 -5
- package/dist/components/form-control/field/NumberInput.js.map +2 -2
- package/dist/components/form-control/field/TextInput.d.ts +4 -1
- package/dist/components/form-control/field/TextInput.d.ts.map +1 -1
- package/dist/components/form-control/field/TextInput.js +23 -6
- package/dist/components/form-control/field/TextInput.js.map +2 -2
- package/dist/components/form-control/field/Textarea.d.ts.map +1 -1
- package/dist/components/form-control/field/Textarea.js.map +1 -1
- package/dist/components/form-control/field/TimePicker.d.ts.map +1 -1
- package/dist/components/form-control/field/TimePicker.js.map +1 -1
- package/dist/components/form-control/select/Select.d.ts.map +1 -1
- package/dist/components/form-control/select/Select.js.map +1 -1
- package/dist/components/form-control/select/SelectItem.d.ts.map +1 -1
- package/dist/components/form-control/select/SelectItem.js.map +1 -1
- package/dist/components/form-control/state-preset/StatePreset.d.ts.map +1 -1
- package/dist/components/form-control/state-preset/StatePreset.js.map +1 -1
- package/dist/components/layout/FormGroup.d.ts.map +1 -1
- package/dist/components/layout/FormGroup.js.map +1 -1
- package/dist/components/layout/sidebar/Sidebar.d.ts.map +1 -1
- package/dist/components/layout/sidebar/Sidebar.js +1 -1
- package/dist/components/layout/sidebar/Sidebar.js.map +1 -1
- package/dist/components/layout/sidebar/SidebarContainer.d.ts.map +1 -1
- package/dist/components/layout/sidebar/SidebarContainer.js.map +1 -1
- package/dist/components/layout/sidebar/SidebarMenu.js.map +1 -1
- package/dist/components/layout/sidebar/SidebarUser.d.ts.map +1 -1
- package/dist/components/layout/sidebar/SidebarUser.js +2 -2
- package/dist/components/layout/sidebar/SidebarUser.js.map +1 -1
- package/dist/components/layout/topbar/Topbar.js +1 -1
- package/dist/components/layout/topbar/TopbarMenu.d.ts.map +1 -1
- package/dist/components/layout/topbar/TopbarMenu.js.map +1 -1
- package/dist/components/layout/topbar/TopbarUser.d.ts.map +1 -1
- package/dist/components/layout/topbar/TopbarUser.js.map +1 -1
- package/dist/helpers/createAppStructure.d.ts.map +1 -1
- package/dist/helpers/createAppStructure.js +17 -12
- package/dist/helpers/createAppStructure.js.map +1 -1
- package/dist/helpers/mergeStyles.d.ts.map +1 -1
- package/dist/helpers/mergeStyles.js +4 -1
- package/dist/helpers/mergeStyles.js.map +1 -1
- package/dist/helpers/splitSlots.d.ts.map +1 -1
- package/dist/helpers/splitSlots.js.map +1 -1
- package/dist/hooks/createControllableSignal.d.ts.map +1 -1
- package/dist/hooks/createControllableSignal.js.map +1 -1
- package/dist/hooks/useClipboardValueCopy.js +3 -1
- package/dist/hooks/useClipboardValueCopy.js.map +1 -1
- package/dist/hooks/useLocalStorage.d.ts.map +1 -1
- package/dist/hooks/useLocalStorage.js.map +1 -1
- package/dist/hooks/usePrint.d.ts.map +1 -1
- package/dist/hooks/usePrint.js +5 -3
- package/dist/hooks/usePrint.js.map +1 -1
- package/dist/hooks/useRouterLink.d.ts.map +1 -1
- package/dist/hooks/useRouterLink.js.map +1 -1
- package/dist/hooks/useSyncConfig.d.ts +3 -3
- package/dist/hooks/useSyncConfig.js +4 -4
- package/dist/hooks/useSyncConfig.js.map +1 -1
- package/dist/index.d.ts +4 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -3
- package/dist/index.js.map +1 -1
- package/dist/providers/ConfigContext.d.ts +2 -2
- package/dist/providers/ConfigContext.d.ts.map +1 -1
- package/dist/providers/InitializeProvider.js +3 -3
- package/dist/providers/InitializeProvider.js.map +2 -2
- package/dist/providers/ServiceClientProvider.d.ts.map +1 -1
- package/dist/providers/ServiceClientProvider.js.map +1 -1
- package/dist/providers/ThemeContext.d.ts.map +1 -1
- package/dist/providers/ThemeContext.js.map +1 -1
- package/dist/providers/shared-data/SharedDataChangeEvent.d.ts.map +1 -1
- package/dist/providers/shared-data/SharedDataChangeEvent.js +1 -3
- package/dist/providers/shared-data/SharedDataChangeEvent.js.map +1 -1
- package/dist/providers/shared-data/SharedDataContext.d.ts +1 -1
- package/dist/providers/shared-data/SharedDataContext.d.ts.map +1 -1
- package/dist/providers/shared-data/SharedDataProvider.d.ts.map +1 -1
- package/dist/providers/shared-data/SharedDataProvider.js +6 -6
- package/dist/providers/shared-data/SharedDataProvider.js.map +2 -2
- package/dist/styles/patterns.styles.js +1 -1
- package/dist/styles/tokens.styles.d.ts +1 -1
- package/dist/styles/tokens.styles.js +1 -1
- package/docs/display.md +19 -2
- package/docs/feedback.md +10 -10
- package/docs/hooks.md +6 -6
- package/docs/layout.md +3 -3
- package/docs/providers.md +1 -1
- package/package.json +3 -3
- package/src/components/data/Pagination.tsx +6 -1
- package/src/components/data/calendar/Calendar.tsx +18 -4
- package/src/components/data/kanban/Kanban.tsx +62 -18
- package/src/components/data/list/List.tsx +11 -4
- package/src/components/data/list/ListItem.tsx +12 -2
- package/src/components/data/permission-table/PermissionTable.tsx +32 -5
- package/src/components/data/sheet/DataSheet.styles.ts +23 -5
- package/src/components/data/sheet/DataSheet.tsx +100 -25
- package/src/components/data/sheet/DataSheetColumn.tsx +5 -1
- package/src/components/data/sheet/DataSheetConfigDialog.tsx +27 -5
- package/src/components/data/sheet/sheetUtils.ts +12 -3
- package/src/components/disclosure/Collapse.tsx +14 -3
- package/src/components/disclosure/Dialog.tsx +35 -6
- package/src/components/disclosure/DialogContext.ts +4 -1
- package/src/components/disclosure/DialogProvider.tsx +15 -3
- package/src/components/disclosure/Dropdown.tsx +12 -2
- package/src/components/disclosure/Tabs.tsx +29 -5
- package/src/components/display/Alert.tsx +3 -4
- package/src/components/display/Card.tsx +1 -2
- package/src/components/display/Echarts.tsx +12 -5
- package/src/components/display/Link.tsx +22 -0
- package/src/components/feedback/{loading/LoadingContainer.tsx → busy/BusyContainer.tsx} +43 -14
- package/src/components/feedback/busy/BusyContext.ts +20 -0
- package/src/components/feedback/{loading/LoadingProvider.tsx → busy/BusyProvider.tsx} +10 -10
- package/src/components/feedback/notification/NotificationBanner.tsx +13 -2
- package/src/components/feedback/notification/NotificationBell.tsx +17 -3
- package/src/components/feedback/notification/NotificationContext.ts +4 -1
- package/src/components/feedback/notification/NotificationProvider.tsx +3 -1
- package/src/components/form-control/Button.tsx +8 -3
- package/src/components/form-control/DropdownTrigger.styles.ts +7 -1
- package/src/components/form-control/Invalid.tsx +5 -1
- package/src/components/form-control/ThemeToggle.tsx +6 -2
- package/src/components/form-control/checkbox/Checkbox.styles.ts +5 -1
- package/src/components/form-control/color-picker/ColorPicker.tsx +15 -2
- package/src/components/form-control/combobox/Combobox.tsx +16 -8
- package/src/components/form-control/editor/EditorToolbar.tsx +16 -5
- package/src/components/form-control/editor/RichTextEditor.tsx +22 -4
- package/src/components/form-control/field/DatePicker.tsx +5 -1
- package/src/components/form-control/field/DateTimePicker.tsx +8 -1
- package/src/components/form-control/field/Field.styles.ts +17 -3
- package/src/components/form-control/field/NumberInput.tsx +24 -0
- package/src/components/form-control/field/TextInput.tsx +28 -5
- package/src/components/form-control/field/Textarea.tsx +2 -1
- package/src/components/form-control/field/TimePicker.tsx +5 -1
- package/src/components/form-control/select/Select.tsx +32 -7
- package/src/components/form-control/select/SelectItem.tsx +3 -1
- package/src/components/form-control/state-preset/StatePreset.tsx +39 -14
- package/src/components/layout/FormGroup.tsx +11 -2
- package/src/components/layout/sidebar/Sidebar.tsx +3 -2
- package/src/components/layout/sidebar/SidebarContainer.tsx +8 -1
- package/src/components/layout/sidebar/SidebarMenu.tsx +7 -1
- package/src/components/layout/sidebar/SidebarUser.tsx +9 -4
- package/src/components/layout/topbar/Topbar.tsx +1 -1
- package/src/components/layout/topbar/TopbarMenu.tsx +27 -5
- package/src/components/layout/topbar/TopbarUser.tsx +5 -1
- package/src/helpers/createAppStructure.ts +29 -15
- package/src/helpers/mergeStyles.ts +6 -2
- package/src/helpers/splitSlots.ts +4 -1
- package/src/hooks/createControllableSignal.ts +2 -1
- package/src/hooks/useClipboardValueCopy.ts +5 -2
- package/src/hooks/useLocalStorage.ts +3 -1
- package/src/hooks/usePrint.ts +9 -4
- package/src/hooks/useRouterLink.ts +3 -1
- package/src/hooks/useSyncConfig.ts +7 -7
- package/src/index.ts +5 -4
- package/src/providers/ConfigContext.ts +2 -2
- package/src/providers/InitializeProvider.tsx +2 -2
- package/src/providers/ServiceClientProvider.tsx +14 -3
- package/src/providers/ThemeContext.tsx +10 -2
- package/src/providers/shared-data/SharedDataChangeEvent.ts +4 -3
- package/src/providers/shared-data/SharedDataContext.ts +1 -1
- package/src/providers/shared-data/SharedDataProvider.tsx +13 -8
- package/src/styles/patterns.styles.ts +1 -1
- package/src/styles/tokens.styles.ts +1 -1
- package/tailwind.config.ts +9 -0
- package/tailwind.css +1 -1
- package/dist/components/display/Card.css +0 -15
- package/dist/components/feedback/loading/LoadingContainer.d.ts +0 -12
- package/dist/components/feedback/loading/LoadingContainer.d.ts.map +0 -1
- package/dist/components/feedback/loading/LoadingContainer.js.map +0 -6
- package/dist/components/feedback/loading/LoadingContext.d.ts +0 -11
- package/dist/components/feedback/loading/LoadingContext.d.ts.map +0 -1
- package/dist/components/feedback/loading/LoadingContext.js +0 -14
- package/dist/components/feedback/loading/LoadingContext.js.map +0 -6
- package/dist/components/feedback/loading/LoadingProvider.d.ts +0 -7
- package/dist/components/feedback/loading/LoadingProvider.d.ts.map +0 -1
- package/dist/components/feedback/loading/LoadingProvider.js.map +0 -6
- package/src/components/display/Card.css +0 -15
- package/src/components/feedback/loading/LoadingContext.ts +0 -20
- /package/dist/components/feedback/{loading/LoadingContainer.css → busy/BusyContainer.css} +0 -0
- /package/src/components/feedback/{loading/LoadingContainer.css → busy/BusyContainer.css} +0 -0
|
@@ -1,4 +1,13 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
children,
|
|
3
|
+
createMemo,
|
|
4
|
+
createSignal,
|
|
5
|
+
For,
|
|
6
|
+
type JSX,
|
|
7
|
+
Show,
|
|
8
|
+
splitProps,
|
|
9
|
+
useContext,
|
|
10
|
+
} from "solid-js";
|
|
2
11
|
import { createResizeObserver } from "@solid-primitives/resize-observer";
|
|
3
12
|
import clsx from "clsx";
|
|
4
13
|
import { twMerge } from "tailwind-merge";
|
|
@@ -157,7 +166,9 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
|
|
|
157
166
|
|
|
158
167
|
const { DataSheetConfigDialog } = await import("./DataSheetConfigDialog");
|
|
159
168
|
|
|
160
|
-
const allCols = resolved
|
|
169
|
+
const allCols = resolved
|
|
170
|
+
.toArray()
|
|
171
|
+
.filter(isDataSheetColumnDef) as unknown as DataSheetColumnDef<T>[];
|
|
161
172
|
|
|
162
173
|
const columnInfos: DataSheetConfigColumnInfo[] = allCols
|
|
163
174
|
.filter((col) => !col.collapse)
|
|
@@ -359,7 +370,9 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
|
|
|
359
370
|
target.setPointerCapture(event.pointerId);
|
|
360
371
|
|
|
361
372
|
const th = target.closest("th")!;
|
|
362
|
-
const container = th
|
|
373
|
+
const container = th
|
|
374
|
+
.closest("[data-sheet]")!
|
|
375
|
+
.querySelector("[data-sheet-scroll]") as HTMLElement;
|
|
363
376
|
const startX = event.clientX;
|
|
364
377
|
const startWidth = th.offsetWidth;
|
|
365
378
|
|
|
@@ -484,7 +497,9 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
|
|
|
484
497
|
if (local.selectMode === "single") {
|
|
485
498
|
setSelectedItems(isSelected ? [] : [item]);
|
|
486
499
|
} else {
|
|
487
|
-
setSelectedItems(
|
|
500
|
+
setSelectedItems(
|
|
501
|
+
isSelected ? selectedItems().filter((i) => i !== item) : [...selectedItems(), item],
|
|
502
|
+
);
|
|
488
503
|
}
|
|
489
504
|
}
|
|
490
505
|
|
|
@@ -584,7 +599,11 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
|
|
|
584
599
|
} else if (relY > third * 2) {
|
|
585
600
|
foundPosition = "after";
|
|
586
601
|
} else {
|
|
587
|
-
foundPosition = local.getChildren
|
|
602
|
+
foundPosition = local.getChildren
|
|
603
|
+
? "inside"
|
|
604
|
+
: relY < rect.height / 2
|
|
605
|
+
? "before"
|
|
606
|
+
: "after";
|
|
588
607
|
}
|
|
589
608
|
foundTarget = flat.item;
|
|
590
609
|
break;
|
|
@@ -707,7 +726,8 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
|
|
|
707
726
|
hasExpandFeature() && !hasSelectFeature() && !hasReorderFeature() && lastFixedIndex() < 0;
|
|
708
727
|
|
|
709
728
|
// 선택 기능 컬럼이 "마지막 고정"인지 (일반 고정 컬럼이 없고, 선택 컬럼이 가장 오른쪽 기능 컬럼일 때)
|
|
710
|
-
const isSelectColLastFixed = () =>
|
|
729
|
+
const isSelectColLastFixed = () =>
|
|
730
|
+
hasSelectFeature() && !hasReorderFeature() && lastFixedIndex() < 0;
|
|
711
731
|
|
|
712
732
|
const isReorderColLastFixed = () => hasReorderFeature() && lastFixedIndex() < 0;
|
|
713
733
|
|
|
@@ -722,13 +742,19 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
|
|
|
722
742
|
const isAllExpanded = createMemo(() => {
|
|
723
743
|
if (!local.getChildren) return false;
|
|
724
744
|
const allExpandable = collectAllExpandable(pagedItems(), local.getChildren);
|
|
725
|
-
return
|
|
745
|
+
return (
|
|
746
|
+
allExpandable.length > 0 && allExpandable.every((item) => expandedItems().includes(item))
|
|
747
|
+
);
|
|
726
748
|
});
|
|
727
749
|
|
|
728
750
|
return (
|
|
729
751
|
<div
|
|
730
752
|
data-sheet={local.persistKey ?? ""}
|
|
731
|
-
class={twMerge(
|
|
753
|
+
class={twMerge(
|
|
754
|
+
"flex flex-col",
|
|
755
|
+
local.inset ? insetContainerClass : defaultContainerClass,
|
|
756
|
+
local.class,
|
|
757
|
+
)}
|
|
732
758
|
>
|
|
733
759
|
<Show when={!local.hideConfigBar && (modal != null || effectivePageCount() > 1)}>
|
|
734
760
|
<div class={toolbarClass}>
|
|
@@ -743,13 +769,22 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
|
|
|
743
769
|
</Show>
|
|
744
770
|
<div class="flex-1" />
|
|
745
771
|
<Show when={modal != null}>
|
|
746
|
-
<button
|
|
772
|
+
<button
|
|
773
|
+
class={configButtonClass}
|
|
774
|
+
onClick={openConfigModal}
|
|
775
|
+
title="시트 설정"
|
|
776
|
+
type="button"
|
|
777
|
+
>
|
|
747
778
|
<Icon icon={IconSettings} size="1em" />
|
|
748
779
|
</button>
|
|
749
780
|
</Show>
|
|
750
781
|
</div>
|
|
751
782
|
</Show>
|
|
752
|
-
<div
|
|
783
|
+
<div
|
|
784
|
+
data-sheet-scroll
|
|
785
|
+
class={twMerge(dataSheetContainerClass, "flex-1 min-h-0")}
|
|
786
|
+
style={local.contentStyle}
|
|
787
|
+
>
|
|
753
788
|
<table
|
|
754
789
|
class={twMerge(tableClass, local.inset ? insetTableClass : undefined)}
|
|
755
790
|
onKeyDown={onTableKeyDown}
|
|
@@ -800,7 +835,10 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
|
|
|
800
835
|
<Icon
|
|
801
836
|
icon={IconChevronDown}
|
|
802
837
|
size="1em"
|
|
803
|
-
class={clsx(
|
|
838
|
+
class={clsx(
|
|
839
|
+
"transition-transform",
|
|
840
|
+
isAllExpanded() ? "rotate-0" : "-rotate-90",
|
|
841
|
+
)}
|
|
804
842
|
/>
|
|
805
843
|
</button>
|
|
806
844
|
</div>
|
|
@@ -863,9 +901,13 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
|
|
|
863
901
|
<Show when={cell}>
|
|
864
902
|
{(c) => {
|
|
865
903
|
const isSortable = () =>
|
|
866
|
-
c().isLastRow &&
|
|
904
|
+
c().isLastRow &&
|
|
905
|
+
c().colIndex != null &&
|
|
906
|
+
effectiveColumns()[c().colIndex!].sortable;
|
|
867
907
|
const colKey = () =>
|
|
868
|
-
c().colIndex != null
|
|
908
|
+
c().colIndex != null
|
|
909
|
+
? effectiveColumns()[c().colIndex!].key
|
|
910
|
+
: undefined;
|
|
869
911
|
|
|
870
912
|
// 그룹 헤더의 고정 여부: colspan 범위 내 모든 컬럼이 fixed인지
|
|
871
913
|
const isGroupFixed = (): boolean => {
|
|
@@ -881,12 +923,15 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
|
|
|
881
923
|
|
|
882
924
|
// 셀의 고정 컬럼 여부 (마지막 행이면 colIndex 기반, 그 외 그룹 기반)
|
|
883
925
|
const isCellFixed = () =>
|
|
884
|
-
(c().isLastRow &&
|
|
926
|
+
(c().isLastRow &&
|
|
927
|
+
c().colIndex != null &&
|
|
928
|
+
effectiveColumns()[c().colIndex!].fixed) ||
|
|
885
929
|
isGroupFixed();
|
|
886
930
|
|
|
887
931
|
// 셀의 마지막 고정 여부
|
|
888
932
|
const isCellLastFixed = () => {
|
|
889
|
-
if (c().isLastRow && c().colIndex != null)
|
|
933
|
+
if (c().isLastRow && c().colIndex != null)
|
|
934
|
+
return isLastFixed(c().colIndex!);
|
|
890
935
|
if (isGroupFixed()) {
|
|
891
936
|
const lastCol = cellColIndex() + c().colspan - 1;
|
|
892
937
|
return isLastFixed(lastCol);
|
|
@@ -932,7 +977,11 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
|
|
|
932
977
|
: c().text
|
|
933
978
|
}
|
|
934
979
|
ref={(el: HTMLElement) => {
|
|
935
|
-
if (
|
|
980
|
+
if (
|
|
981
|
+
c().isLastRow &&
|
|
982
|
+
c().colIndex != null &&
|
|
983
|
+
effectiveColumns()[c().colIndex!].fixed
|
|
984
|
+
) {
|
|
936
985
|
registerColumnRef(c().colIndex!, el);
|
|
937
986
|
}
|
|
938
987
|
}}
|
|
@@ -958,9 +1007,15 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
|
|
|
958
1007
|
<Icon icon={IconSortDescending} size="1em" />
|
|
959
1008
|
</Show>
|
|
960
1009
|
<Show when={sortDef() == null}>
|
|
961
|
-
<Icon
|
|
1010
|
+
<Icon
|
|
1011
|
+
icon={IconArrowsSort}
|
|
1012
|
+
size="1em"
|
|
1013
|
+
class="opacity-30"
|
|
1014
|
+
/>
|
|
1015
|
+
</Show>
|
|
1016
|
+
<Show when={sortIndex()}>
|
|
1017
|
+
{(idx) => <sub>{idx()}</sub>}
|
|
962
1018
|
</Show>
|
|
963
|
-
<Show when={sortIndex()}>{(idx) => <sub>{idx()}</sub>}</Show>
|
|
964
1019
|
</div>
|
|
965
1020
|
);
|
|
966
1021
|
}}
|
|
@@ -968,13 +1023,17 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
|
|
|
968
1023
|
</div>
|
|
969
1024
|
<Show
|
|
970
1025
|
when={
|
|
971
|
-
c().isLastRow &&
|
|
1026
|
+
c().isLastRow &&
|
|
1027
|
+
c().colIndex != null &&
|
|
1028
|
+
effectiveColumns()[c().colIndex!].resizable
|
|
972
1029
|
}
|
|
973
1030
|
>
|
|
974
1031
|
<div
|
|
975
1032
|
class={resizerClass}
|
|
976
1033
|
onClick={(e) => e.stopPropagation()}
|
|
977
|
-
onPointerDown={(e) =>
|
|
1034
|
+
onPointerDown={(e) =>
|
|
1035
|
+
onResizerPointerdown(e, effectiveColumns()[c().colIndex!].key)
|
|
1036
|
+
}
|
|
978
1037
|
onDblClick={(e) => {
|
|
979
1038
|
e.stopPropagation();
|
|
980
1039
|
onResizerDoubleClick(effectiveColumns()[c().colIndex!].key);
|
|
@@ -1054,7 +1113,11 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
|
|
|
1054
1113
|
)}
|
|
1055
1114
|
</For>
|
|
1056
1115
|
<Show when={flat.hasChildren}>
|
|
1057
|
-
<button
|
|
1116
|
+
<button
|
|
1117
|
+
type="button"
|
|
1118
|
+
class={expandToggleClass}
|
|
1119
|
+
onClick={() => toggleExpand(flat.item)}
|
|
1120
|
+
>
|
|
1058
1121
|
<Icon
|
|
1059
1122
|
icon={IconChevronDown}
|
|
1060
1123
|
size="1em"
|
|
@@ -1092,11 +1155,16 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
|
|
|
1092
1155
|
fallback={
|
|
1093
1156
|
/* single 모드 */
|
|
1094
1157
|
<Show when={selectable() === true}>
|
|
1095
|
-
<div
|
|
1158
|
+
<div
|
|
1159
|
+
class={featureCellBodyClickableClass}
|
|
1160
|
+
onClick={() => toggleSelect(flat.item)}
|
|
1161
|
+
>
|
|
1096
1162
|
<div
|
|
1097
1163
|
class={twMerge(
|
|
1098
1164
|
selectSingleClass,
|
|
1099
|
-
isSelected()
|
|
1165
|
+
isSelected()
|
|
1166
|
+
? selectSingleSelectedClass
|
|
1167
|
+
: selectSingleUnselectedClass,
|
|
1100
1168
|
)}
|
|
1101
1169
|
>
|
|
1102
1170
|
<Icon icon={IconChevronRight} size="1em" />
|
|
@@ -1116,7 +1184,11 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
|
|
|
1116
1184
|
}
|
|
1117
1185
|
setLastClickedRow(rowIndex());
|
|
1118
1186
|
}}
|
|
1119
|
-
title={
|
|
1187
|
+
title={
|
|
1188
|
+
typeof selectable() === "string"
|
|
1189
|
+
? (selectable() as string)
|
|
1190
|
+
: undefined
|
|
1191
|
+
}
|
|
1120
1192
|
>
|
|
1121
1193
|
<Checkbox
|
|
1122
1194
|
value={isSelected()}
|
|
@@ -1148,7 +1220,10 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
|
|
|
1148
1220
|
left: reorderColLeft(),
|
|
1149
1221
|
}}
|
|
1150
1222
|
>
|
|
1151
|
-
<div
|
|
1223
|
+
<div
|
|
1224
|
+
class={reorderCellWrapperClass}
|
|
1225
|
+
onPointerDown={(e) => onReorderPointerDown(e, flat.item)}
|
|
1226
|
+
>
|
|
1152
1227
|
<div class={reorderHandleClass}>
|
|
1153
1228
|
<Icon icon={IconGripVertical} size="1em" />
|
|
1154
1229
|
</div>
|
|
@@ -3,7 +3,11 @@ import type { DataSheetColumnDef, DataSheetColumnProps } from "./types";
|
|
|
3
3
|
import { normalizeHeader } from "./sheetUtils";
|
|
4
4
|
|
|
5
5
|
export function isDataSheetColumnDef(value: unknown): value is DataSheetColumnDef<unknown> {
|
|
6
|
-
return
|
|
6
|
+
return (
|
|
7
|
+
value != null &&
|
|
8
|
+
typeof value === "object" &&
|
|
9
|
+
(value as Record<string, unknown>)["__type"] === "sheet-column"
|
|
10
|
+
);
|
|
7
11
|
}
|
|
8
12
|
|
|
9
13
|
/* eslint-disable solid/reactivity -- plain object 반환 패턴으로 reactive context 불필요 */
|
|
@@ -2,7 +2,12 @@ import { type Component } from "solid-js";
|
|
|
2
2
|
import { createStore, reconcile } from "solid-js/store";
|
|
3
3
|
import clsx from "clsx";
|
|
4
4
|
import { useDialogInstance } from "../../disclosure/DialogInstanceContext";
|
|
5
|
-
import type {
|
|
5
|
+
import type {
|
|
6
|
+
DataSheetConfig,
|
|
7
|
+
DataSheetConfigColumn,
|
|
8
|
+
DataSheetConfigColumnInfo,
|
|
9
|
+
DataSheetReorderEvent,
|
|
10
|
+
} from "./types";
|
|
6
11
|
import { DataSheet } from "./DataSheet";
|
|
7
12
|
import { Checkbox } from "../../form-control/checkbox/Checkbox";
|
|
8
13
|
import { TextInput } from "../../form-control/field/TextInput";
|
|
@@ -66,7 +71,11 @@ export const DataSheetConfigDialog: Component<DataSheetConfigDialogProps> = (pro
|
|
|
66
71
|
setEditItems(reconcile(items));
|
|
67
72
|
}
|
|
68
73
|
|
|
69
|
-
function updateItem(
|
|
74
|
+
function updateItem(
|
|
75
|
+
key: string,
|
|
76
|
+
field: keyof EditColumnItem,
|
|
77
|
+
value: EditColumnItem[keyof EditColumnItem],
|
|
78
|
+
): void {
|
|
70
79
|
const index = editItems.findIndex((item) => item.key === key);
|
|
71
80
|
if (index >= 0) {
|
|
72
81
|
setEditItems(index, { [field]: value } as Partial<EditColumnItem>);
|
|
@@ -104,17 +113,30 @@ export const DataSheetConfigDialog: Component<DataSheetConfigDialogProps> = (pro
|
|
|
104
113
|
<div class={containerClass}>
|
|
105
114
|
<div class={sheetWrapperClass}>
|
|
106
115
|
<DataSheet items={editItems} inset hideConfigBar onItemsReorder={handleReorder}>
|
|
107
|
-
<DataSheet.Column<EditColumnItem>
|
|
116
|
+
<DataSheet.Column<EditColumnItem>
|
|
117
|
+
key="header"
|
|
118
|
+
header="컬럼"
|
|
119
|
+
class="px-2 py-1"
|
|
120
|
+
sortable={false}
|
|
121
|
+
>
|
|
108
122
|
{(ctx) => ctx.item.headerText}
|
|
109
123
|
</DataSheet.Column>
|
|
110
124
|
<DataSheet.Column<EditColumnItem> key="fixed" header="고정" sortable={false}>
|
|
111
125
|
{(ctx) => (
|
|
112
|
-
<Checkbox
|
|
126
|
+
<Checkbox
|
|
127
|
+
inset
|
|
128
|
+
value={ctx.item.fixed}
|
|
129
|
+
onValueChange={(v) => updateItem(ctx.item.key, "fixed", v)}
|
|
130
|
+
/>
|
|
113
131
|
)}
|
|
114
132
|
</DataSheet.Column>
|
|
115
133
|
<DataSheet.Column<EditColumnItem> key="hidden" header="숨김" sortable={false}>
|
|
116
134
|
{(ctx) => (
|
|
117
|
-
<Checkbox
|
|
135
|
+
<Checkbox
|
|
136
|
+
inset
|
|
137
|
+
value={ctx.item.hidden}
|
|
138
|
+
onValueChange={(v) => updateItem(ctx.item.key, "hidden", v)}
|
|
139
|
+
/>
|
|
118
140
|
)}
|
|
119
141
|
</DataSheet.Column>
|
|
120
142
|
<DataSheet.Column<EditColumnItem> key="width" header="너비" sortable={false}>
|
|
@@ -7,7 +7,9 @@ export function normalizeHeader(header?: string | string[]): string[] {
|
|
|
7
7
|
return header;
|
|
8
8
|
}
|
|
9
9
|
|
|
10
|
-
export function buildHeaderTable<TItem>(
|
|
10
|
+
export function buildHeaderTable<TItem>(
|
|
11
|
+
columns: DataSheetColumnDef<TItem>[],
|
|
12
|
+
): (HeaderDef | null)[][] {
|
|
11
13
|
if (columns.length === 0) return [];
|
|
12
14
|
|
|
13
15
|
const maxDepth = Math.max(...columns.map((c) => c.header.length));
|
|
@@ -84,7 +86,13 @@ export function buildHeaderTable<TItem>(columns: DataSheetColumnDef<TItem>[]): (
|
|
|
84
86
|
}
|
|
85
87
|
|
|
86
88
|
// 같은 병합 그룹에 속하는지 확인 (행 0~endRow까지 같은 텍스트 시퀀스)
|
|
87
|
-
function isSameGroup(
|
|
89
|
+
function isSameGroup(
|
|
90
|
+
padded: string[][],
|
|
91
|
+
colA: number,
|
|
92
|
+
colB: number,
|
|
93
|
+
startRow: number,
|
|
94
|
+
endRow: number,
|
|
95
|
+
): boolean {
|
|
88
96
|
for (let r = startRow; r < endRow; r++) {
|
|
89
97
|
if (padded[colA][r] !== padded[colB][r]) return false;
|
|
90
98
|
}
|
|
@@ -152,7 +160,8 @@ export function applySorting<TItem>(items: TItem[], sorts: SortingDef[]): TItem[
|
|
|
152
160
|
|
|
153
161
|
let result = [...items];
|
|
154
162
|
for (const sort of [...sorts].reverse()) {
|
|
155
|
-
const selector = (item: TItem) =>
|
|
163
|
+
const selector = (item: TItem) =>
|
|
164
|
+
objGetChainValue(item, sort.key) as string | number | undefined;
|
|
156
165
|
result = sort.desc ? result.orderByDesc(selector) : result.orderBy(selector);
|
|
157
166
|
}
|
|
158
167
|
return result;
|
|
@@ -1,4 +1,11 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
type JSX,
|
|
3
|
+
type ParentComponent,
|
|
4
|
+
splitProps,
|
|
5
|
+
createSignal,
|
|
6
|
+
onMount,
|
|
7
|
+
onCleanup,
|
|
8
|
+
} from "solid-js";
|
|
2
9
|
import { createElementSize } from "@solid-primitives/resize-observer";
|
|
3
10
|
import clsx from "clsx";
|
|
4
11
|
import { twMerge } from "tailwind-merge";
|
|
@@ -23,7 +30,12 @@ export interface CollapseProps extends JSX.HTMLAttributes<HTMLDivElement> {
|
|
|
23
30
|
open?: boolean;
|
|
24
31
|
}
|
|
25
32
|
|
|
26
|
-
const transitionClass = clsx(
|
|
33
|
+
const transitionClass = clsx(
|
|
34
|
+
"transition-[margin-top]",
|
|
35
|
+
"duration-200",
|
|
36
|
+
"ease-out",
|
|
37
|
+
"motion-reduce:transition-none",
|
|
38
|
+
);
|
|
27
39
|
|
|
28
40
|
export const Collapse: ParentComponent<CollapseProps> = (props) => {
|
|
29
41
|
const [local, rest] = splitProps(props, ["children", "class", "style", "open"]);
|
|
@@ -54,7 +66,6 @@ export const Collapse: ParentComponent<CollapseProps> = (props) => {
|
|
|
54
66
|
data-collapse
|
|
55
67
|
class={twMerge("block", local.class)}
|
|
56
68
|
style={mergeStyles(local.style, { overflow: "hidden" })}
|
|
57
|
-
aria-hidden={!isOpen()}
|
|
58
69
|
>
|
|
59
70
|
<div
|
|
60
71
|
ref={setContentRef}
|
|
@@ -1,4 +1,13 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
type JSX,
|
|
3
|
+
type ParentComponent,
|
|
4
|
+
createEffect,
|
|
5
|
+
onCleanup,
|
|
6
|
+
Show,
|
|
7
|
+
splitProps,
|
|
8
|
+
For,
|
|
9
|
+
useContext,
|
|
10
|
+
} from "solid-js";
|
|
2
11
|
import { Portal } from "solid-js/web";
|
|
3
12
|
import clsx from "clsx";
|
|
4
13
|
import { twMerge } from "tailwind-merge";
|
|
@@ -58,7 +67,15 @@ export interface DialogProps {
|
|
|
58
67
|
children: JSX.Element;
|
|
59
68
|
}
|
|
60
69
|
|
|
61
|
-
type ResizeDirection =
|
|
70
|
+
type ResizeDirection =
|
|
71
|
+
| "left"
|
|
72
|
+
| "right"
|
|
73
|
+
| "top"
|
|
74
|
+
| "bottom"
|
|
75
|
+
| "top-left"
|
|
76
|
+
| "top-right"
|
|
77
|
+
| "bottom-left"
|
|
78
|
+
| "bottom-right";
|
|
62
79
|
|
|
63
80
|
const RESIZE_DIRECTIONS: ResizeDirection[] = [
|
|
64
81
|
"left",
|
|
@@ -171,7 +188,8 @@ export const Dialog: ParentComponent<DialogProps> = (props) => {
|
|
|
171
188
|
let wrapperRef: HTMLDivElement | undefined;
|
|
172
189
|
|
|
173
190
|
const closeOnEscape = () => local.closeOnEscape ?? dialogDefaults?.().closeOnEscape ?? true;
|
|
174
|
-
const closeOnBackdrop = () =>
|
|
191
|
+
const closeOnBackdrop = () =>
|
|
192
|
+
local.closeOnBackdrop ?? dialogDefaults?.().closeOnBackdrop ?? false;
|
|
175
193
|
|
|
176
194
|
// Escape 키 감지
|
|
177
195
|
createEffect(() => {
|
|
@@ -423,7 +441,9 @@ export const Dialog: ParentComponent<DialogProps> = (props) => {
|
|
|
423
441
|
"mx-auto",
|
|
424
442
|
"w-fit min-w-[200px]",
|
|
425
443
|
"bg-white dark:bg-base-800",
|
|
426
|
-
local.float
|
|
444
|
+
local.float
|
|
445
|
+
? clsx("shadow-md dark:shadow-black/30", "border", borderSubtle)
|
|
446
|
+
: "shadow-2xl dark:shadow-black/40",
|
|
427
447
|
local.fill ? "rounded-none border-none" : "rounded-lg",
|
|
428
448
|
"overflow-hidden",
|
|
429
449
|
"flex flex-col",
|
|
@@ -470,7 +490,11 @@ export const Dialog: ParentComponent<DialogProps> = (props) => {
|
|
|
470
490
|
<div
|
|
471
491
|
data-modal-header
|
|
472
492
|
class={clsx(headerClass(), "touch-none")}
|
|
473
|
-
style={
|
|
493
|
+
style={
|
|
494
|
+
typeof local.headerStyle === "string"
|
|
495
|
+
? mergeStyles(local.headerStyle)
|
|
496
|
+
: local.headerStyle
|
|
497
|
+
}
|
|
474
498
|
onPointerDown={handleHeaderPointerDown}
|
|
475
499
|
>
|
|
476
500
|
<h5 class={clsx("flex-1", "px-4 py-2", "text-sm font-semibold")}>{local.title}</h5>
|
|
@@ -506,7 +530,12 @@ export const Dialog: ParentComponent<DialogProps> = (props) => {
|
|
|
506
530
|
{(direction) => (
|
|
507
531
|
<div
|
|
508
532
|
data-resize-bar={direction}
|
|
509
|
-
class={clsx(
|
|
533
|
+
class={clsx(
|
|
534
|
+
"absolute",
|
|
535
|
+
"touch-none",
|
|
536
|
+
resizePositionMap[direction],
|
|
537
|
+
resizeCursorMap[direction],
|
|
538
|
+
)}
|
|
510
539
|
onPointerDown={(e) => handleResizeBarPointerDown(e, direction)}
|
|
511
540
|
/>
|
|
512
541
|
)}
|
|
@@ -27,7 +27,10 @@ export interface DialogShowOptions {
|
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
export interface DialogContextValue {
|
|
30
|
-
show<T = undefined>(
|
|
30
|
+
show<T = undefined>(
|
|
31
|
+
factory: () => JSX.Element,
|
|
32
|
+
options: DialogShowOptions,
|
|
33
|
+
): Promise<T | undefined>;
|
|
31
34
|
}
|
|
32
35
|
|
|
33
36
|
export const DialogContext = createContext<DialogContextValue>();
|
|
@@ -1,4 +1,11 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
type Accessor,
|
|
3
|
+
type ParentComponent,
|
|
4
|
+
createSignal,
|
|
5
|
+
For,
|
|
6
|
+
splitProps,
|
|
7
|
+
type JSX,
|
|
8
|
+
} from "solid-js";
|
|
2
9
|
import {
|
|
3
10
|
DialogContext,
|
|
4
11
|
DialogDefaultsContext,
|
|
@@ -46,7 +53,10 @@ export const DialogProvider: ParentComponent<DialogProviderProps> = (props) => {
|
|
|
46
53
|
|
|
47
54
|
const [entries, setEntries] = createSignal<DialogEntry[]>([]);
|
|
48
55
|
|
|
49
|
-
const show = <T,>(
|
|
56
|
+
const show = <T,>(
|
|
57
|
+
factory: () => JSX.Element,
|
|
58
|
+
options: DialogShowOptions,
|
|
59
|
+
): Promise<T | undefined> => {
|
|
50
60
|
return new Promise<T | undefined>((resolve) => {
|
|
51
61
|
const id = String(nextId++);
|
|
52
62
|
const [open, setOpen] = createSignal(true);
|
|
@@ -122,7 +132,9 @@ export const DialogProvider: ParentComponent<DialogProviderProps> = (props) => {
|
|
|
122
132
|
headerStyle={entry.options.headerStyle}
|
|
123
133
|
canDeactivate={entry.options.canDeactivate}
|
|
124
134
|
>
|
|
125
|
-
<DialogInstanceContext.Provider value={instance}>
|
|
135
|
+
<DialogInstanceContext.Provider value={instance}>
|
|
136
|
+
{entry.factory()}
|
|
137
|
+
</DialogInstanceContext.Provider>
|
|
126
138
|
</Dialog>
|
|
127
139
|
);
|
|
128
140
|
}}
|
|
@@ -1,4 +1,12 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
type JSX,
|
|
3
|
+
type ParentComponent,
|
|
4
|
+
createSignal,
|
|
5
|
+
createEffect,
|
|
6
|
+
onCleanup,
|
|
7
|
+
Show,
|
|
8
|
+
splitProps,
|
|
9
|
+
} from "solid-js";
|
|
2
10
|
import { createResizeObserver } from "@solid-primitives/resize-observer";
|
|
3
11
|
import { createMountTransition } from "../../hooks/createMountTransition";
|
|
4
12
|
import { Portal } from "solid-js/web";
|
|
@@ -261,7 +269,9 @@ export const Dropdown: ParentComponent<DropdownProps> = (props) => {
|
|
|
261
269
|
|
|
262
270
|
const dir = direction();
|
|
263
271
|
const focusables = [
|
|
264
|
-
...popup.querySelectorAll<HTMLElement>(
|
|
272
|
+
...popup.querySelectorAll<HTMLElement>(
|
|
273
|
+
'[tabindex]:not([tabindex="-1"]), button, [data-list-item]',
|
|
274
|
+
),
|
|
265
275
|
];
|
|
266
276
|
|
|
267
277
|
if (dir === "down") {
|
|
@@ -40,11 +40,18 @@ function TabsTabInner(props: TabsTabProps) {
|
|
|
40
40
|
}
|
|
41
41
|
};
|
|
42
42
|
|
|
43
|
-
const baseClass = clsx(
|
|
43
|
+
const baseClass = clsx(
|
|
44
|
+
"relative cursor-pointer select-none font-medium",
|
|
45
|
+
"transition-colors",
|
|
46
|
+
"-mb-px",
|
|
47
|
+
);
|
|
44
48
|
|
|
45
49
|
const stateClass = () =>
|
|
46
50
|
isSelected()
|
|
47
|
-
? clsx(
|
|
51
|
+
? clsx(
|
|
52
|
+
"border-b-2 border-primary-500 text-primary-600",
|
|
53
|
+
"dark:border-primary-400 dark:text-primary-400",
|
|
54
|
+
)
|
|
48
55
|
: clsx(
|
|
49
56
|
"border-b-2 border-transparent",
|
|
50
57
|
"text-base-500 hover:border-base-300 hover:text-base-700",
|
|
@@ -60,7 +67,13 @@ function TabsTabInner(props: TabsTabProps) {
|
|
|
60
67
|
aria-selected={isSelected()}
|
|
61
68
|
aria-disabled={props.disabled ?? false}
|
|
62
69
|
tabIndex={props.disabled ? -1 : 0}
|
|
63
|
-
class={twMerge(
|
|
70
|
+
class={twMerge(
|
|
71
|
+
baseClass,
|
|
72
|
+
sizeClasses(),
|
|
73
|
+
stateClass(),
|
|
74
|
+
props.disabled && disabledClass,
|
|
75
|
+
props.class,
|
|
76
|
+
)}
|
|
64
77
|
onClick={() => {
|
|
65
78
|
if (!props.disabled) {
|
|
66
79
|
ctx.select(props.value);
|
|
@@ -97,7 +110,14 @@ interface TabsComponent {
|
|
|
97
110
|
}
|
|
98
111
|
|
|
99
112
|
const TabsInner: ParentComponent<TabsProps> = (props) => {
|
|
100
|
-
const [local, rest] = splitProps(props, [
|
|
113
|
+
const [local, rest] = splitProps(props, [
|
|
114
|
+
"value",
|
|
115
|
+
"onValueChange",
|
|
116
|
+
"size",
|
|
117
|
+
"class",
|
|
118
|
+
"style",
|
|
119
|
+
"children",
|
|
120
|
+
]);
|
|
101
121
|
|
|
102
122
|
const [value, setValue] = createControllableSignal<string | undefined>({
|
|
103
123
|
value: () => local.value,
|
|
@@ -112,7 +132,11 @@ const TabsInner: ParentComponent<TabsProps> = (props) => {
|
|
|
112
132
|
size: () => local.size,
|
|
113
133
|
};
|
|
114
134
|
|
|
115
|
-
const baseClass = clsx(
|
|
135
|
+
const baseClass = clsx(
|
|
136
|
+
"inline-flex items-center gap-1",
|
|
137
|
+
"border-b border-base-200",
|
|
138
|
+
"dark:border-base-700",
|
|
139
|
+
);
|
|
116
140
|
|
|
117
141
|
return (
|
|
118
142
|
<TabsContext.Provider value={contextValue}>
|
|
@@ -11,10 +11,9 @@ export interface AlertProps extends JSX.HTMLAttributes<HTMLDivElement> {
|
|
|
11
11
|
|
|
12
12
|
const baseClass = clsx("block", "p-3", "rounded");
|
|
13
13
|
|
|
14
|
-
const themeClasses = Object.fromEntries(
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
>;
|
|
14
|
+
const themeClasses = Object.fromEntries(
|
|
15
|
+
Object.entries(themeTokens).map(([theme, t]) => [theme, t.light]),
|
|
16
|
+
) as Record<AlertTheme, string>;
|
|
18
17
|
|
|
19
18
|
export const Alert: ParentComponent<AlertProps> = (props) => {
|
|
20
19
|
const [local, rest] = splitProps(props, ["children", "class", "theme"]);
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { type JSX, type ParentComponent, splitProps } from "solid-js";
|
|
2
2
|
import clsx from "clsx";
|
|
3
3
|
import { twMerge } from "tailwind-merge";
|
|
4
|
-
import "./Card.css";
|
|
5
4
|
|
|
6
5
|
export interface CardProps extends JSX.HTMLAttributes<HTMLDivElement> {}
|
|
7
6
|
|
|
@@ -12,7 +11,7 @@ const baseClass = clsx(
|
|
|
12
11
|
"shadow focus-within:shadow-md hover:shadow-md",
|
|
13
12
|
"dark:shadow-black/20 dark:focus-within:shadow-black/30 dark:hover:shadow-black/30",
|
|
14
13
|
"transition-shadow duration-300",
|
|
15
|
-
"animate-
|
|
14
|
+
"animate-fade-in",
|
|
16
15
|
);
|
|
17
16
|
|
|
18
17
|
export const Card: ParentComponent<CardProps> = (props) => {
|