@simplysm/solid 13.0.71 → 13.0.74
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 +209 -202
- package/dist/components/data/calendar/Calendar.d.ts.map +1 -1
- package/dist/components/data/calendar/Calendar.js +3 -11
- package/dist/components/data/calendar/Calendar.js.map +2 -2
- package/dist/components/data/sheet/DataSheet.d.ts.map +1 -1
- package/dist/components/data/sheet/DataSheet.js +13 -16
- package/dist/components/data/sheet/DataSheet.js.map +2 -2
- package/dist/components/data/sheet/DataSheet.styles.d.ts.map +1 -1
- package/dist/components/data/sheet/DataSheet.styles.js +1 -1
- package/dist/components/data/sheet/DataSheet.styles.js.map +1 -1
- package/dist/components/data/sheet/DataSheetConfigDialog.d.ts.map +1 -1
- package/dist/components/data/sheet/DataSheetConfigDialog.js +27 -9
- package/dist/components/data/sheet/DataSheetConfigDialog.js.map +2 -2
- package/dist/components/disclosure/Dialog.d.ts +1 -1
- package/dist/components/disclosure/Dialog.d.ts.map +1 -1
- package/dist/components/disclosure/Dialog.js +5 -5
- package/dist/components/disclosure/Dialog.js.map +2 -2
- package/dist/components/disclosure/dialogZIndex.d.ts +1 -1
- package/dist/components/features/crud-detail/CrudDetail.js +23 -23
- package/dist/components/features/crud-detail/CrudDetail.js.map +2 -2
- package/dist/components/features/crud-sheet/CrudSheet.js +49 -49
- package/dist/components/features/crud-sheet/CrudSheet.js.map +2 -2
- package/dist/components/features/crud-sheet/types.d.ts +4 -4
- package/dist/components/features/crud-sheet/types.d.ts.map +1 -1
- package/dist/components/features/data-select-button/DataSelectButton.d.ts +25 -7
- package/dist/components/features/data-select-button/DataSelectButton.d.ts.map +1 -1
- package/dist/components/features/data-select-button/DataSelectButton.js +27 -12
- package/dist/components/features/data-select-button/DataSelectButton.js.map +2 -2
- package/dist/components/features/permission-table/PermissionTable.js +4 -4
- package/dist/components/features/permission-table/PermissionTable.js.map +2 -2
- package/dist/components/features/shared-data/SharedDataSelect.d.ts +22 -10
- package/dist/components/features/shared-data/SharedDataSelect.d.ts.map +1 -1
- package/dist/components/features/shared-data/SharedDataSelect.js +113 -29
- package/dist/components/features/shared-data/SharedDataSelect.js.map +2 -2
- package/dist/components/features/shared-data/SharedDataSelectButton.d.ts +3 -3
- package/dist/components/features/shared-data/SharedDataSelectButton.d.ts.map +1 -1
- package/dist/components/features/shared-data/SharedDataSelectButton.js.map +1 -1
- package/dist/components/features/shared-data/SharedDataSelectList.js +5 -4
- package/dist/components/features/shared-data/SharedDataSelectList.js.map +2 -2
- package/dist/components/feedback/notification/NotificationBanner.js +3 -3
- package/dist/components/feedback/notification/NotificationBanner.js.map +2 -2
- package/dist/components/feedback/notification/NotificationBell.d.ts.map +1 -1
- package/dist/components/feedback/notification/NotificationBell.js +12 -5
- package/dist/components/feedback/notification/NotificationBell.js.map +2 -2
- package/dist/components/feedback/notification/NotificationProvider.d.ts.map +1 -1
- package/dist/components/feedback/notification/NotificationProvider.js +3 -1
- package/dist/components/feedback/notification/NotificationProvider.js.map +2 -2
- package/dist/components/form-control/ThemeToggle.d.ts.map +1 -1
- package/dist/components/form-control/ThemeToggle.js +9 -6
- package/dist/components/form-control/ThemeToggle.js.map +2 -2
- package/dist/components/form-control/checkbox/Checkbox.d.ts.map +1 -1
- package/dist/components/form-control/checkbox/Checkbox.js +3 -1
- package/dist/components/form-control/checkbox/Checkbox.js.map +2 -2
- package/dist/components/form-control/checkbox/CheckboxGroup.js +1 -1
- package/dist/components/form-control/checkbox/CheckboxGroup.js.map +2 -2
- package/dist/components/form-control/checkbox/Radio.d.ts.map +1 -1
- package/dist/components/form-control/checkbox/Radio.js +3 -1
- package/dist/components/form-control/checkbox/Radio.js.map +2 -2
- package/dist/components/form-control/checkbox/RadioGroup.js +1 -1
- package/dist/components/form-control/checkbox/RadioGroup.js.map +2 -2
- package/dist/components/form-control/color-picker/ColorPicker.d.ts.map +1 -1
- package/dist/components/form-control/color-picker/ColorPicker.js +3 -1
- package/dist/components/form-control/color-picker/ColorPicker.js.map +2 -2
- package/dist/components/form-control/combobox/Combobox.d.ts.map +1 -1
- package/dist/components/form-control/combobox/Combobox.js +9 -5
- package/dist/components/form-control/combobox/Combobox.js.map +2 -2
- package/dist/components/form-control/date-range-picker/DateRangePicker.js +9 -9
- package/dist/components/form-control/date-range-picker/DateRangePicker.js.map +2 -2
- package/dist/components/form-control/editor/EditorToolbar.js +3 -3
- package/dist/components/form-control/editor/EditorToolbar.js.map +2 -2
- package/dist/components/form-control/field/DatePicker.d.ts.map +1 -1
- package/dist/components/form-control/field/DatePicker.js +9 -3
- package/dist/components/form-control/field/DatePicker.js.map +2 -2
- package/dist/components/form-control/field/DateTimePicker.d.ts.map +1 -1
- package/dist/components/form-control/field/DateTimePicker.js +9 -3
- package/dist/components/form-control/field/DateTimePicker.js.map +2 -2
- package/dist/components/form-control/field/NumberInput.d.ts.map +1 -1
- package/dist/components/form-control/field/NumberInput.js +9 -3
- package/dist/components/form-control/field/NumberInput.js.map +2 -2
- package/dist/components/form-control/field/TextInput.d.ts.map +1 -1
- package/dist/components/form-control/field/TextInput.js +10 -4
- 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 +9 -3
- package/dist/components/form-control/field/Textarea.js.map +2 -2
- package/dist/components/form-control/field/TimePicker.d.ts.map +1 -1
- package/dist/components/form-control/field/TimePicker.js +9 -3
- package/dist/components/form-control/field/TimePicker.js.map +2 -2
- package/dist/components/form-control/numpad/Numpad.d.ts.map +1 -1
- package/dist/components/form-control/numpad/Numpad.js +5 -1
- package/dist/components/form-control/numpad/Numpad.js.map +2 -2
- package/dist/components/form-control/select/Select.js +7 -7
- package/dist/components/form-control/select/Select.js.map +2 -2
- package/dist/components/form-control/state-preset/StatePreset.d.ts.map +1 -1
- package/dist/components/form-control/state-preset/StatePreset.js +42 -20
- package/dist/components/form-control/state-preset/StatePreset.js.map +2 -2
- package/dist/components/layout/sidebar/SidebarContainer.js +3 -3
- package/dist/components/layout/sidebar/SidebarContainer.js.map +2 -2
- package/dist/components/layout/sidebar/SidebarMenu.d.ts.map +1 -1
- package/dist/components/layout/sidebar/SidebarMenu.js +5 -2
- package/dist/components/layout/sidebar/SidebarMenu.js.map +2 -2
- package/dist/components/layout/topbar/Topbar.js +3 -4
- package/dist/components/layout/topbar/Topbar.js.map +2 -2
- package/dist/components/layout/topbar/TopbarMenu.js +3 -3
- package/dist/components/layout/topbar/TopbarMenu.js.map +2 -2
- package/dist/hooks/createSelectionGroup.d.ts +2 -2
- package/dist/hooks/createSelectionGroup.d.ts.map +1 -1
- package/dist/hooks/createSelectionGroup.js +5 -2
- package/dist/hooks/createSelectionGroup.js.map +2 -2
- package/dist/providers/i18n/I18nContext.d.ts +0 -4
- package/dist/providers/i18n/I18nContext.d.ts.map +1 -1
- package/dist/providers/i18n/I18nContext.js +1 -5
- package/dist/providers/i18n/I18nContext.js.map +2 -2
- package/dist/providers/i18n/locales/en.d.ts +38 -0
- package/dist/providers/i18n/locales/en.d.ts.map +1 -1
- package/dist/providers/i18n/locales/en.js +39 -1
- package/dist/providers/i18n/locales/en.js.map +1 -1
- package/dist/providers/i18n/locales/ko.d.ts +38 -0
- package/dist/providers/i18n/locales/ko.d.ts.map +1 -1
- package/dist/providers/i18n/locales/ko.js +39 -1
- package/dist/providers/i18n/locales/ko.js.map +1 -1
- package/package.json +6 -6
- package/src/components/data/calendar/Calendar.tsx +3 -4
- package/src/components/data/sheet/DataSheet.styles.ts +1 -1
- package/src/components/data/sheet/DataSheet.tsx +14 -15
- package/src/components/data/sheet/DataSheetConfigDialog.tsx +12 -10
- package/src/components/data/sheet/types.ts +1 -1
- package/src/components/disclosure/Dialog.tsx +10 -10
- package/src/components/disclosure/dialogZIndex.ts +1 -1
- package/src/components/features/crud-detail/CrudDetail.tsx +25 -25
- package/src/components/features/crud-sheet/CrudSheet.tsx +53 -53
- package/src/components/features/crud-sheet/types.ts +4 -4
- package/src/components/features/data-select-button/DataSelectButton.tsx +51 -21
- package/src/components/features/permission-table/PermissionTable.tsx +3 -3
- package/src/components/features/shared-data/SharedDataSelect.tsx +172 -33
- package/src/components/features/shared-data/SharedDataSelectButton.tsx +3 -2
- package/src/components/features/shared-data/SharedDataSelectList.tsx +4 -4
- package/src/components/feedback/notification/NotificationBanner.tsx +3 -3
- package/src/components/feedback/notification/NotificationBell.tsx +6 -4
- package/src/components/feedback/notification/NotificationProvider.tsx +3 -1
- package/src/components/form-control/ThemeToggle.tsx +10 -6
- package/src/components/form-control/checkbox/Checkbox.tsx +4 -1
- package/src/components/form-control/checkbox/CheckboxGroup.tsx +1 -1
- package/src/components/form-control/checkbox/Radio.tsx +4 -1
- package/src/components/form-control/checkbox/RadioGroup.tsx +1 -1
- package/src/components/form-control/color-picker/ColorPicker.tsx +4 -1
- package/src/components/form-control/combobox/Combobox.tsx +6 -3
- package/src/components/form-control/date-range-picker/DateRangePicker.tsx +8 -8
- package/src/components/form-control/editor/EditorToolbar.tsx +23 -23
- package/src/components/form-control/field/DatePicker.tsx +6 -3
- package/src/components/form-control/field/DateTimePicker.tsx +6 -3
- package/src/components/form-control/field/NumberInput.tsx +6 -3
- package/src/components/form-control/field/TextInput.tsx +7 -4
- package/src/components/form-control/field/Textarea.tsx +6 -3
- package/src/components/form-control/field/TimePicker.tsx +6 -3
- package/src/components/form-control/numpad/Numpad.tsx +3 -1
- package/src/components/form-control/select/Select.tsx +7 -7
- package/src/components/form-control/state-preset/StatePreset.tsx +14 -12
- package/src/components/layout/sidebar/SidebarContainer.tsx +3 -3
- package/src/components/layout/sidebar/SidebarMenu.tsx +3 -1
- package/src/components/layout/topbar/Topbar.tsx +3 -3
- package/src/components/layout/topbar/TopbarMenu.tsx +3 -3
- package/src/hooks/createSelectionGroup.tsx +8 -4
- package/src/providers/i18n/I18nContext.tsx +0 -7
- package/src/providers/i18n/locales/en.ts +38 -0
- package/src/providers/i18n/locales/ko.ts +38 -0
- package/tailwind.config.ts +2 -2
- package/tests/components/data/kanban/Kanban.selection.spec.tsx +34 -24
- package/tests/components/disclosure/Dialog.spec.tsx +28 -28
- package/tests/components/disclosure/DialogProvider.spec.tsx +51 -25
- package/tests/components/features/address/AddressSearch.spec.tsx +12 -4
- package/tests/components/features/crud-detail/CrudDetail.spec.tsx +1 -0
- package/tests/components/features/crud-sheet/CrudSheet.spec.tsx +30 -6
- package/tests/components/features/data-select-button/DataSelectButton.spec.tsx +77 -56
- package/tests/components/features/permission-table/PermissionTable.spec.tsx +12 -8
- package/tests/components/features/shared-data/SharedDataSelect.spec.tsx +172 -0
- package/tests/components/features/shared-data/SharedDataSelectList.spec.tsx +14 -2
- package/tests/components/feedback/notification/LiveRegion.spec.tsx +20 -9
- package/tests/components/feedback/notification/NotificationBanner.spec.tsx +64 -46
- package/tests/components/feedback/notification/NotificationBell.spec.tsx +70 -51
- package/tests/components/feedback/notification/NotificationContext.spec.tsx +105 -78
- package/tests/components/form-control/checkbox/Checkbox.spec.tsx +25 -20
- package/tests/components/form-control/checkbox/CheckboxGroup.spec.tsx +53 -30
- package/tests/components/form-control/checkbox/Radio.spec.tsx +25 -20
- package/tests/components/form-control/checkbox/RadioGroup.spec.tsx +53 -30
- package/tests/components/form-control/color-picker/ColorPicker.spec.tsx +24 -15
- package/tests/components/form-control/combobox/Combobox.spec.tsx +92 -59
- package/tests/components/form-control/date-range-picker/DateRangePicker.spec.tsx +2 -2
- package/tests/components/form-control/field/DatePicker.spec.tsx +50 -44
- package/tests/components/form-control/field/DateTimePicker.spec.tsx +51 -45
- package/tests/components/form-control/field/NumberInput.spec.tsx +53 -47
- package/tests/components/form-control/field/TextInput.spec.tsx +50 -44
- package/tests/components/form-control/field/Textarea.spec.tsx +35 -29
- package/tests/components/form-control/field/TimePicker.spec.tsx +43 -37
- package/tests/components/form-control/numpad/Numpad.spec.tsx +175 -25
- package/tests/components/form-control/select/Select.spec.tsx +5 -0
- package/tests/components/form-control/select/SelectItem.spec.tsx +1 -0
- package/tests/components/layout/sidebar/Sidebar.spec.tsx +79 -35
- package/tests/components/layout/sidebar/SidebarContainer.spec.tsx +1 -0
- package/tests/components/layout/sidebar/SidebarMenu.spec.tsx +28 -17
- package/tests/components/layout/topbar/TopbarActions.spec.tsx +41 -23
- package/tests/components/layout/topbar/createTopbarActions.spec.tsx +1 -0
- package/tests/hooks/usePrint.spec.tsx +1 -1
- package/tests/hooks/useRouterLink.spec.tsx +2 -0
- package/tests/hooks/useSyncConfig.spec.tsx +1 -0
- package/tests/providers/ErrorLoggerProvider.spec.tsx +1 -0
- package/tests/providers/PwaUpdateProvider.spec.tsx +16 -6
- package/tests/providers/ServiceClientContext.spec.tsx +40 -25
- package/tests/providers/i18n/I18nContext.spec.tsx +3 -4
- package/tests/providers/shared-data/SharedDataProvider.spec.tsx +2 -0
- package/dist/hooks/usePrint.d.ts +0 -3
- package/dist/hooks/usePrint.d.ts.map +0 -1
- package/dist/hooks/usePrint.js +0 -5
- package/dist/hooks/usePrint.js.map +0 -6
- package/src/hooks/usePrint.ts +0 -2
|
@@ -34,7 +34,7 @@ describe("Dialog", () => {
|
|
|
34
34
|
expect(content).toBeNull();
|
|
35
35
|
});
|
|
36
36
|
|
|
37
|
-
it("sets data-
|
|
37
|
+
it("sets data-dialog attribute", async () => {
|
|
38
38
|
render(() => (
|
|
39
39
|
<ConfigProvider clientName="test"><I18nProvider>
|
|
40
40
|
<Dialog open={true}>
|
|
@@ -44,8 +44,8 @@ describe("Dialog", () => {
|
|
|
44
44
|
</I18nProvider></ConfigProvider>
|
|
45
45
|
));
|
|
46
46
|
await waitFor(() => {
|
|
47
|
-
const
|
|
48
|
-
expect(
|
|
47
|
+
const dialog = document.querySelector("[data-dialog]");
|
|
48
|
+
expect(dialog).not.toBeNull();
|
|
49
49
|
});
|
|
50
50
|
});
|
|
51
51
|
|
|
@@ -60,7 +60,7 @@ describe("Dialog", () => {
|
|
|
60
60
|
));
|
|
61
61
|
|
|
62
62
|
await waitFor(() => {
|
|
63
|
-
const header = document.querySelector("[data-
|
|
63
|
+
const header = document.querySelector("[data-dialog-header]");
|
|
64
64
|
expect(header?.textContent).toContain("테스트 제목");
|
|
65
65
|
});
|
|
66
66
|
});
|
|
@@ -80,7 +80,7 @@ describe("Dialog", () => {
|
|
|
80
80
|
const content = document.querySelector('[data-testid="content"]');
|
|
81
81
|
expect(content).not.toBeNull();
|
|
82
82
|
});
|
|
83
|
-
const header = document.querySelector("[data-
|
|
83
|
+
const header = document.querySelector("[data-dialog-header]");
|
|
84
84
|
expect(header).toBeNull();
|
|
85
85
|
});
|
|
86
86
|
|
|
@@ -112,9 +112,9 @@ describe("Dialog", () => {
|
|
|
112
112
|
</I18nProvider></ConfigProvider>
|
|
113
113
|
));
|
|
114
114
|
await waitFor(() => {
|
|
115
|
-
expect(document.querySelector("[data-
|
|
115
|
+
expect(document.querySelector("[data-dialog]")).not.toBeNull();
|
|
116
116
|
});
|
|
117
|
-
const closeBtn = document.querySelector("[data-
|
|
117
|
+
const closeBtn = document.querySelector("[data-dialog-close]");
|
|
118
118
|
expect(closeBtn).toBeNull();
|
|
119
119
|
});
|
|
120
120
|
});
|
|
@@ -131,9 +131,9 @@ describe("Dialog", () => {
|
|
|
131
131
|
</I18nProvider></ConfigProvider>
|
|
132
132
|
));
|
|
133
133
|
await waitFor(() => {
|
|
134
|
-
expect(document.querySelector("[data-
|
|
134
|
+
expect(document.querySelector("[data-dialog-close]")).not.toBeNull();
|
|
135
135
|
});
|
|
136
|
-
fireEvent.click(document.querySelector("[data-
|
|
136
|
+
fireEvent.click(document.querySelector("[data-dialog-close]")!);
|
|
137
137
|
expect(handleOpenChange).toHaveBeenCalledWith(false);
|
|
138
138
|
});
|
|
139
139
|
|
|
@@ -148,9 +148,9 @@ describe("Dialog", () => {
|
|
|
148
148
|
</I18nProvider></ConfigProvider>
|
|
149
149
|
));
|
|
150
150
|
await waitFor(() => {
|
|
151
|
-
expect(document.querySelector("[data-
|
|
151
|
+
expect(document.querySelector("[data-dialog-backdrop]")).not.toBeNull();
|
|
152
152
|
});
|
|
153
|
-
fireEvent.click(document.querySelector("[data-
|
|
153
|
+
fireEvent.click(document.querySelector("[data-dialog-backdrop]")!);
|
|
154
154
|
expect(handleOpenChange).toHaveBeenCalledWith(false);
|
|
155
155
|
});
|
|
156
156
|
|
|
@@ -165,9 +165,9 @@ describe("Dialog", () => {
|
|
|
165
165
|
</I18nProvider></ConfigProvider>
|
|
166
166
|
));
|
|
167
167
|
await waitFor(() => {
|
|
168
|
-
expect(document.querySelector("[data-
|
|
168
|
+
expect(document.querySelector("[data-dialog-backdrop]")).not.toBeNull();
|
|
169
169
|
});
|
|
170
|
-
fireEvent.click(document.querySelector("[data-
|
|
170
|
+
fireEvent.click(document.querySelector("[data-dialog-backdrop]")!);
|
|
171
171
|
expect(handleOpenChange).not.toHaveBeenCalled();
|
|
172
172
|
});
|
|
173
173
|
|
|
@@ -182,7 +182,7 @@ describe("Dialog", () => {
|
|
|
182
182
|
</I18nProvider></ConfigProvider>
|
|
183
183
|
));
|
|
184
184
|
await waitFor(() => {
|
|
185
|
-
expect(document.querySelector("[data-
|
|
185
|
+
expect(document.querySelector("[data-dialog]")).not.toBeNull();
|
|
186
186
|
});
|
|
187
187
|
fireEvent.keyDown(document, { key: "Escape" });
|
|
188
188
|
expect(handleOpenChange).toHaveBeenCalledWith(false);
|
|
@@ -199,7 +199,7 @@ describe("Dialog", () => {
|
|
|
199
199
|
</I18nProvider></ConfigProvider>
|
|
200
200
|
));
|
|
201
201
|
await waitFor(() => {
|
|
202
|
-
expect(document.querySelector("[data-
|
|
202
|
+
expect(document.querySelector("[data-dialog]")).not.toBeNull();
|
|
203
203
|
});
|
|
204
204
|
fireEvent.keyDown(document, { key: "Escape" });
|
|
205
205
|
expect(handleOpenChange).toHaveBeenCalledWith(false);
|
|
@@ -216,7 +216,7 @@ describe("Dialog", () => {
|
|
|
216
216
|
</I18nProvider></ConfigProvider>
|
|
217
217
|
));
|
|
218
218
|
await waitFor(() => {
|
|
219
|
-
expect(document.querySelector("[data-
|
|
219
|
+
expect(document.querySelector("[data-dialog]")).not.toBeNull();
|
|
220
220
|
});
|
|
221
221
|
fireEvent.keyDown(document, { key: "Escape" });
|
|
222
222
|
expect(handleOpenChange).not.toHaveBeenCalled();
|
|
@@ -233,9 +233,9 @@ describe("Dialog", () => {
|
|
|
233
233
|
</I18nProvider></ConfigProvider>
|
|
234
234
|
));
|
|
235
235
|
await waitFor(() => {
|
|
236
|
-
expect(document.querySelector("[data-
|
|
236
|
+
expect(document.querySelector("[data-dialog-close]")).not.toBeNull();
|
|
237
237
|
});
|
|
238
|
-
fireEvent.click(document.querySelector("[data-
|
|
238
|
+
fireEvent.click(document.querySelector("[data-dialog-close]")!);
|
|
239
239
|
expect(handleOpenChange).not.toHaveBeenCalled();
|
|
240
240
|
});
|
|
241
241
|
});
|
|
@@ -251,7 +251,7 @@ describe("Dialog", () => {
|
|
|
251
251
|
</I18nProvider></ConfigProvider>
|
|
252
252
|
));
|
|
253
253
|
await waitFor(() => {
|
|
254
|
-
const dialog = document.querySelector("[data-
|
|
254
|
+
const dialog = document.querySelector("[data-dialog-panel]") as HTMLElement;
|
|
255
255
|
expect(dialog).not.toBeNull();
|
|
256
256
|
expect(dialog.getAttribute("role")).toBe("dialog");
|
|
257
257
|
expect(dialog.getAttribute("aria-modal")).toBe("true");
|
|
@@ -269,7 +269,7 @@ describe("Dialog", () => {
|
|
|
269
269
|
));
|
|
270
270
|
|
|
271
271
|
await waitFor(() => {
|
|
272
|
-
const dialog = document.querySelector("[data-
|
|
272
|
+
const dialog = document.querySelector("[data-dialog-panel]") as HTMLElement;
|
|
273
273
|
const headerId = dialog.getAttribute("aria-labelledby");
|
|
274
274
|
expect(headerId).toBeTruthy();
|
|
275
275
|
const header = document.getElementById(headerId!);
|
|
@@ -287,7 +287,7 @@ describe("Dialog", () => {
|
|
|
287
287
|
));
|
|
288
288
|
|
|
289
289
|
await waitFor(() => {
|
|
290
|
-
const dialog = document.querySelector("[data-
|
|
290
|
+
const dialog = document.querySelector("[data-dialog-panel]") as HTMLElement;
|
|
291
291
|
expect(dialog).not.toBeNull();
|
|
292
292
|
expect(dialog.hasAttribute("aria-labelledby")).toBe(false);
|
|
293
293
|
});
|
|
@@ -303,7 +303,7 @@ describe("Dialog", () => {
|
|
|
303
303
|
</I18nProvider></ConfigProvider>
|
|
304
304
|
));
|
|
305
305
|
await waitFor(() => {
|
|
306
|
-
const dialog = document.querySelector("[data-
|
|
306
|
+
const dialog = document.querySelector("[data-dialog-panel]") as HTMLElement;
|
|
307
307
|
expect(dialog).not.toBeNull();
|
|
308
308
|
expect(dialog.getAttribute("role")).toBe("dialog");
|
|
309
309
|
expect(dialog.hasAttribute("aria-modal")).toBe(false);
|
|
@@ -324,7 +324,7 @@ describe("Dialog", () => {
|
|
|
324
324
|
await waitFor(() => {
|
|
325
325
|
expect(document.querySelector('[data-testid="content"]')).not.toBeNull();
|
|
326
326
|
});
|
|
327
|
-
const backdrop = document.querySelector("[data-
|
|
327
|
+
const backdrop = document.querySelector("[data-dialog-backdrop]");
|
|
328
328
|
expect(backdrop).toBeNull();
|
|
329
329
|
});
|
|
330
330
|
});
|
|
@@ -340,7 +340,7 @@ describe("Dialog", () => {
|
|
|
340
340
|
</I18nProvider></ConfigProvider>
|
|
341
341
|
));
|
|
342
342
|
await waitFor(() => {
|
|
343
|
-
const dialog = document.querySelector("[data-
|
|
343
|
+
const dialog = document.querySelector("[data-dialog-panel]") as HTMLElement;
|
|
344
344
|
expect(dialog).not.toBeNull();
|
|
345
345
|
expect(dialog.style.width).toBe("100%");
|
|
346
346
|
expect(dialog.style.height).toBe("100%");
|
|
@@ -359,7 +359,7 @@ describe("Dialog", () => {
|
|
|
359
359
|
</I18nProvider></ConfigProvider>
|
|
360
360
|
));
|
|
361
361
|
await waitFor(() => {
|
|
362
|
-
const dialog = document.querySelector("[data-
|
|
362
|
+
const dialog = document.querySelector("[data-dialog-panel]") as HTMLElement;
|
|
363
363
|
expect(dialog).not.toBeNull();
|
|
364
364
|
expect(dialog.style.width).toBe("400px");
|
|
365
365
|
expect(dialog.style.height).toBe("300px");
|
|
@@ -376,7 +376,7 @@ describe("Dialog", () => {
|
|
|
376
376
|
</I18nProvider></ConfigProvider>
|
|
377
377
|
));
|
|
378
378
|
await waitFor(() => {
|
|
379
|
-
const dialog = document.querySelector("[data-
|
|
379
|
+
const dialog = document.querySelector("[data-dialog-panel]") as HTMLElement;
|
|
380
380
|
expect(dialog).not.toBeNull();
|
|
381
381
|
expect(dialog.style.minWidth).toBe("300px");
|
|
382
382
|
expect(dialog.style.minHeight).toBe("200px");
|
|
@@ -410,7 +410,7 @@ describe("Dialog", () => {
|
|
|
410
410
|
</I18nProvider></ConfigProvider>
|
|
411
411
|
));
|
|
412
412
|
await waitFor(() => {
|
|
413
|
-
expect(document.querySelector("[data-
|
|
413
|
+
expect(document.querySelector("[data-dialog]")).not.toBeNull();
|
|
414
414
|
});
|
|
415
415
|
const bars = document.querySelectorAll("[data-resize-bar]");
|
|
416
416
|
expect(bars.length).toBe(0);
|
|
@@ -428,7 +428,7 @@ describe("Dialog", () => {
|
|
|
428
428
|
</I18nProvider></ConfigProvider>
|
|
429
429
|
));
|
|
430
430
|
await waitFor(() => {
|
|
431
|
-
const dialog = document.querySelector("[data-
|
|
431
|
+
const dialog = document.querySelector("[data-dialog-panel]") as HTMLElement;
|
|
432
432
|
expect(dialog).not.toBeNull();
|
|
433
433
|
expect(dialog.classList.contains("transition-[opacity,transform]")).toBe(true);
|
|
434
434
|
expect(dialog.classList.contains("duration-200")).toBe(true);
|
|
@@ -1,15 +1,17 @@
|
|
|
1
1
|
import { render, fireEvent, waitFor } from "@solidjs/testing-library";
|
|
2
|
-
import { describe, it, expect } from "vitest";
|
|
2
|
+
import { describe, it, expect, beforeEach } from "vitest";
|
|
3
3
|
import { DialogProvider } from "../../../src/components/disclosure/DialogProvider";
|
|
4
4
|
import { useDialog } from "../../../src/components/disclosure/DialogContext";
|
|
5
5
|
import { useDialogInstance } from "../../../src/components/disclosure/DialogInstanceContext";
|
|
6
|
+
import { I18nProvider } from "../../../src/providers/i18n/I18nContext";
|
|
7
|
+
import { ConfigProvider } from "../../../src/providers/ConfigContext";
|
|
6
8
|
|
|
7
9
|
// dialog content component for testing
|
|
8
10
|
function TestContent() {
|
|
9
11
|
const dialog = useDialogInstance<string>();
|
|
10
12
|
return (
|
|
11
13
|
<div>
|
|
12
|
-
<span data-testid="
|
|
14
|
+
<span data-testid="dialog-content">다이얼로그 내용</span>
|
|
13
15
|
<button data-testid="close-btn" onClick={() => dialog?.close("result")}>
|
|
14
16
|
닫기
|
|
15
17
|
</button>
|
|
@@ -53,25 +55,37 @@ function TestAppNoHeader() {
|
|
|
53
55
|
}
|
|
54
56
|
|
|
55
57
|
describe("DialogProvider", () => {
|
|
58
|
+
beforeEach(() => {
|
|
59
|
+
localStorage.setItem("test.i18n-locale", JSON.stringify("en"));
|
|
60
|
+
});
|
|
61
|
+
|
|
56
62
|
it("displays dialog via show()", async () => {
|
|
57
63
|
render(() => (
|
|
58
|
-
<
|
|
59
|
-
<
|
|
60
|
-
|
|
64
|
+
<ConfigProvider clientName="test">
|
|
65
|
+
<I18nProvider>
|
|
66
|
+
<DialogProvider>
|
|
67
|
+
<TestApp />
|
|
68
|
+
</DialogProvider>
|
|
69
|
+
</I18nProvider>
|
|
70
|
+
</ConfigProvider>
|
|
61
71
|
));
|
|
62
72
|
|
|
63
73
|
fireEvent.click(document.querySelector('[data-testid="open-btn"]')!);
|
|
64
74
|
|
|
65
75
|
await waitFor(() => {
|
|
66
|
-
expect(document.querySelector('[data-testid="
|
|
76
|
+
expect(document.querySelector('[data-testid="dialog-content"]')).not.toBeNull();
|
|
67
77
|
});
|
|
68
78
|
});
|
|
69
79
|
|
|
70
80
|
it("closes dialog when close is called via useDialogInstance", async () => {
|
|
71
81
|
render(() => (
|
|
72
|
-
<
|
|
73
|
-
<
|
|
74
|
-
|
|
82
|
+
<ConfigProvider clientName="test">
|
|
83
|
+
<I18nProvider>
|
|
84
|
+
<DialogProvider>
|
|
85
|
+
<TestApp />
|
|
86
|
+
</DialogProvider>
|
|
87
|
+
</I18nProvider>
|
|
88
|
+
</ConfigProvider>
|
|
75
89
|
));
|
|
76
90
|
|
|
77
91
|
fireEvent.click(document.querySelector('[data-testid="open-btn"]')!);
|
|
@@ -84,15 +98,19 @@ describe("DialogProvider", () => {
|
|
|
84
98
|
|
|
85
99
|
// dialog content is removed after close animation fallback timer (200ms)
|
|
86
100
|
await waitFor(() => {
|
|
87
|
-
expect(document.querySelector('[data-testid="
|
|
101
|
+
expect(document.querySelector('[data-testid="dialog-content"]')).toBeNull();
|
|
88
102
|
});
|
|
89
103
|
});
|
|
90
104
|
|
|
91
105
|
it("closes dialog when close() is called", async () => {
|
|
92
106
|
render(() => (
|
|
93
|
-
<
|
|
94
|
-
<
|
|
95
|
-
|
|
107
|
+
<ConfigProvider clientName="test">
|
|
108
|
+
<I18nProvider>
|
|
109
|
+
<DialogProvider>
|
|
110
|
+
<TestApp />
|
|
111
|
+
</DialogProvider>
|
|
112
|
+
</I18nProvider>
|
|
113
|
+
</ConfigProvider>
|
|
96
114
|
));
|
|
97
115
|
|
|
98
116
|
fireEvent.click(document.querySelector('[data-testid="open-btn"]')!);
|
|
@@ -104,39 +122,47 @@ describe("DialogProvider", () => {
|
|
|
104
122
|
fireEvent.click(document.querySelector('[data-testid="close-no-result"]')!);
|
|
105
123
|
|
|
106
124
|
await waitFor(() => {
|
|
107
|
-
expect(document.querySelector('[data-testid="
|
|
125
|
+
expect(document.querySelector('[data-testid="dialog-content"]')).toBeNull();
|
|
108
126
|
});
|
|
109
127
|
});
|
|
110
128
|
|
|
111
129
|
it("displays dialog header", async () => {
|
|
112
130
|
render(() => (
|
|
113
|
-
<
|
|
114
|
-
<
|
|
115
|
-
|
|
131
|
+
<ConfigProvider clientName="test">
|
|
132
|
+
<I18nProvider>
|
|
133
|
+
<DialogProvider>
|
|
134
|
+
<TestApp />
|
|
135
|
+
</DialogProvider>
|
|
136
|
+
</I18nProvider>
|
|
137
|
+
</ConfigProvider>
|
|
116
138
|
));
|
|
117
139
|
|
|
118
140
|
fireEvent.click(document.querySelector('[data-testid="open-btn"]')!);
|
|
119
141
|
|
|
120
142
|
await waitFor(() => {
|
|
121
|
-
const
|
|
122
|
-
expect(
|
|
123
|
-
expect(
|
|
143
|
+
const dialog = document.querySelector("[data-dialog]");
|
|
144
|
+
expect(dialog).not.toBeNull();
|
|
145
|
+
expect(dialog!.textContent).toContain("테스트 다이얼로그");
|
|
124
146
|
});
|
|
125
147
|
});
|
|
126
148
|
|
|
127
149
|
it("does not render header when header is not provided", async () => {
|
|
128
150
|
render(() => (
|
|
129
|
-
<
|
|
130
|
-
<
|
|
131
|
-
|
|
151
|
+
<ConfigProvider clientName="test">
|
|
152
|
+
<I18nProvider>
|
|
153
|
+
<DialogProvider>
|
|
154
|
+
<TestAppNoHeader />
|
|
155
|
+
</DialogProvider>
|
|
156
|
+
</I18nProvider>
|
|
157
|
+
</ConfigProvider>
|
|
132
158
|
));
|
|
133
159
|
|
|
134
160
|
fireEvent.click(document.querySelector('[data-testid="open-btn"]')!);
|
|
135
161
|
|
|
136
162
|
await waitFor(() => {
|
|
137
|
-
expect(document.querySelector('[data-testid="
|
|
163
|
+
expect(document.querySelector('[data-testid="dialog-content"]')).not.toBeNull();
|
|
138
164
|
});
|
|
139
|
-
const header = document.querySelector("[data-
|
|
165
|
+
const header = document.querySelector("[data-dialog-header]");
|
|
140
166
|
expect(header).toBeNull();
|
|
141
167
|
});
|
|
142
168
|
});
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { render, waitFor } from "@solidjs/testing-library";
|
|
2
|
-
import { describe, it, expect } from "vitest";
|
|
2
|
+
import { describe, it, expect, beforeEach } from "vitest";
|
|
3
3
|
import { DialogProvider } from "../../../../src/components/disclosure/DialogProvider";
|
|
4
4
|
import { useDialog } from "../../../../src/components/disclosure/DialogContext";
|
|
5
5
|
import { AddressSearchContent } from "../../../../src/components/features/address/AddressSearch";
|
|
6
|
+
import { I18nProvider } from "../../../../src/providers/i18n/I18nContext";
|
|
7
|
+
import { ConfigProvider } from "../../../../src/providers/ConfigContext";
|
|
6
8
|
|
|
7
9
|
function TestApp() {
|
|
8
10
|
const dialog = useDialog();
|
|
@@ -22,11 +24,17 @@ function TestApp() {
|
|
|
22
24
|
}
|
|
23
25
|
|
|
24
26
|
describe("AddressSearchContent", () => {
|
|
27
|
+
beforeEach(() => {
|
|
28
|
+
localStorage.setItem("test.i18n-locale", JSON.stringify("en"));
|
|
29
|
+
});
|
|
30
|
+
|
|
25
31
|
it("mounts and renders Daum Postcode widget inside content area", async () => {
|
|
26
32
|
const { getByTestId } = render(() => (
|
|
27
|
-
<
|
|
28
|
-
<
|
|
29
|
-
|
|
33
|
+
<ConfigProvider clientName="test"><I18nProvider>
|
|
34
|
+
<DialogProvider>
|
|
35
|
+
<TestApp />
|
|
36
|
+
</DialogProvider>
|
|
37
|
+
</I18nProvider></ConfigProvider>
|
|
30
38
|
));
|
|
31
39
|
|
|
32
40
|
getByTestId("open-btn").click();
|
|
@@ -28,6 +28,7 @@ import { I18nProvider } from "../../../../src/providers/i18n/I18nContext";
|
|
|
28
28
|
// Helper: extract actions accessor from TopbarContext
|
|
29
29
|
function ActionsReader(props: { onCapture: (actions: Accessor<JSX.Element | undefined>) => void }) {
|
|
30
30
|
const actions = useTopbarActionsAccessor();
|
|
31
|
+
|
|
31
32
|
props.onCapture(actions);
|
|
32
33
|
return null;
|
|
33
34
|
}
|
|
@@ -91,6 +91,14 @@ describe("CrudSheet types", () => {
|
|
|
91
91
|
});
|
|
92
92
|
|
|
93
93
|
describe("CrudSheet rendering", () => {
|
|
94
|
+
beforeEach(() => {
|
|
95
|
+
localStorage.setItem("test.i18n-locale", JSON.stringify("en"));
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
afterEach(() => {
|
|
99
|
+
localStorage.removeItem("test.i18n-locale");
|
|
100
|
+
});
|
|
101
|
+
|
|
94
102
|
it("basic rendering: column, filter, and BusyContainer are displayed", async () => {
|
|
95
103
|
const searchFn = () =>
|
|
96
104
|
Promise.resolve({
|
|
@@ -245,6 +253,14 @@ describe("CrudSheet inline edit", () => {
|
|
|
245
253
|
});
|
|
246
254
|
|
|
247
255
|
describe("CrudSheet itemDeletable", () => {
|
|
256
|
+
beforeEach(() => {
|
|
257
|
+
localStorage.setItem("test.i18n-locale", JSON.stringify("en"));
|
|
258
|
+
});
|
|
259
|
+
|
|
260
|
+
afterEach(() => {
|
|
261
|
+
localStorage.removeItem("test.i18n-locale");
|
|
262
|
+
});
|
|
263
|
+
|
|
248
264
|
it("inline delete button is disabled for items where itemDeletable=false", async () => {
|
|
249
265
|
const searchFn = () =>
|
|
250
266
|
Promise.resolve({
|
|
@@ -286,6 +302,14 @@ describe("CrudSheet itemDeletable", () => {
|
|
|
286
302
|
});
|
|
287
303
|
|
|
288
304
|
describe("CrudSheet editable (renamed from canEdit)", () => {
|
|
305
|
+
beforeEach(() => {
|
|
306
|
+
localStorage.setItem("test.i18n-locale", JSON.stringify("en"));
|
|
307
|
+
});
|
|
308
|
+
|
|
309
|
+
afterEach(() => {
|
|
310
|
+
localStorage.removeItem("test.i18n-locale");
|
|
311
|
+
});
|
|
312
|
+
|
|
289
313
|
it("inline edit buttons are hidden when editable=false", async () => {
|
|
290
314
|
const searchFn = () =>
|
|
291
315
|
Promise.resolve({
|
|
@@ -327,10 +351,10 @@ describe("CrudSheet select mode", () => {
|
|
|
327
351
|
localStorage.removeItem("test.i18n-locale");
|
|
328
352
|
});
|
|
329
353
|
|
|
330
|
-
it("toolbar is hidden when selectMode is set", async () => {
|
|
354
|
+
it("toolbar is hidden when selectMode is set inside Dialog", async () => {
|
|
331
355
|
const { container } = render(() => (
|
|
332
356
|
<ConfigProvider clientName="test"><I18nProvider>
|
|
333
|
-
<
|
|
357
|
+
<DialogWrapper>
|
|
334
358
|
<CrudSheet<TestItem, Record<string, never>>
|
|
335
359
|
search={() => Promise.resolve({ items: [{ id: 1, name: "홍길동", isDeleted: false }] })}
|
|
336
360
|
getItemKey={(item) => item.id}
|
|
@@ -345,7 +369,7 @@ describe("CrudSheet select mode", () => {
|
|
|
345
369
|
{(ctx) => <div>{ctx.item.name}</div>}
|
|
346
370
|
</CrudSheet.Column>
|
|
347
371
|
</CrudSheet>
|
|
348
|
-
</
|
|
372
|
+
</DialogWrapper>
|
|
349
373
|
</I18nProvider></ConfigProvider>
|
|
350
374
|
));
|
|
351
375
|
|
|
@@ -373,7 +397,7 @@ describe("CrudSheet select mode", () => {
|
|
|
373
397
|
|
|
374
398
|
await new Promise((r) => setTimeout(r, 100));
|
|
375
399
|
// Dialog renders via Portal so content is in document.body
|
|
376
|
-
const dialogContent = document.querySelector("[data-
|
|
400
|
+
const dialogContent = document.querySelector("[data-dialog-content]");
|
|
377
401
|
expect(dialogContent?.textContent).toContain("Confirm");
|
|
378
402
|
});
|
|
379
403
|
});
|
|
@@ -434,7 +458,7 @@ describe("CrudSheet control mode", () => {
|
|
|
434
458
|
});
|
|
435
459
|
});
|
|
436
460
|
|
|
437
|
-
describe("CrudSheet
|
|
461
|
+
describe("CrudSheet dialog mode", () => {
|
|
438
462
|
beforeEach(() => {
|
|
439
463
|
localStorage.setItem("test.i18n-locale", JSON.stringify("en"));
|
|
440
464
|
});
|
|
@@ -463,7 +487,7 @@ describe("CrudSheet modal mode", () => {
|
|
|
463
487
|
|
|
464
488
|
await new Promise((r) => setTimeout(r, 100));
|
|
465
489
|
// Dialog renders via Portal so content is in document.body
|
|
466
|
-
const dialogContent = document.querySelector("[data-
|
|
490
|
+
const dialogContent = document.querySelector("[data-dialog-content]");
|
|
467
491
|
expect(dialogContent?.textContent).toContain("Confirm");
|
|
468
492
|
});
|
|
469
493
|
|