@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
|
@@ -3,6 +3,7 @@ import { createRoot } from "solid-js";
|
|
|
3
3
|
import { render, waitFor } from "@solidjs/testing-library";
|
|
4
4
|
import { NotificationProvider } from "../../../../src/components/feedback/notification/NotificationProvider";
|
|
5
5
|
import { ConfigContext } from "../../../../src/providers/ConfigContext";
|
|
6
|
+
import { I18nProvider } from "../../../../src/providers/i18n/I18nContext";
|
|
6
7
|
import {
|
|
7
8
|
useNotification,
|
|
8
9
|
type NotificationContextValue,
|
|
@@ -27,12 +28,14 @@ describe("NotificationProvider", () => {
|
|
|
27
28
|
|
|
28
29
|
render(() => (
|
|
29
30
|
<ConfigContext.Provider value={{ clientName: "testApp" }}>
|
|
30
|
-
<
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
31
|
+
<I18nProvider>
|
|
32
|
+
<NotificationProvider>
|
|
33
|
+
{(() => {
|
|
34
|
+
notification = useNotification();
|
|
35
|
+
return null;
|
|
36
|
+
})()}
|
|
37
|
+
</NotificationProvider>
|
|
38
|
+
</I18nProvider>
|
|
36
39
|
</ConfigContext.Provider>
|
|
37
40
|
));
|
|
38
41
|
|
|
@@ -45,12 +48,14 @@ describe("NotificationProvider", () => {
|
|
|
45
48
|
|
|
46
49
|
render(() => (
|
|
47
50
|
<ConfigContext.Provider value={{ clientName: "testApp" }}>
|
|
48
|
-
<
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
51
|
+
<I18nProvider>
|
|
52
|
+
<NotificationProvider>
|
|
53
|
+
{(() => {
|
|
54
|
+
notification = useNotification();
|
|
55
|
+
return null;
|
|
56
|
+
})()}
|
|
57
|
+
</NotificationProvider>
|
|
58
|
+
</I18nProvider>
|
|
54
59
|
</ConfigContext.Provider>
|
|
55
60
|
));
|
|
56
61
|
|
|
@@ -70,12 +75,14 @@ describe("NotificationProvider", () => {
|
|
|
70
75
|
|
|
71
76
|
render(() => (
|
|
72
77
|
<ConfigContext.Provider value={{ clientName: "testApp" }}>
|
|
73
|
-
<
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
78
|
+
<I18nProvider>
|
|
79
|
+
<NotificationProvider>
|
|
80
|
+
{(() => {
|
|
81
|
+
notification = useNotification();
|
|
82
|
+
return null;
|
|
83
|
+
})()}
|
|
84
|
+
</NotificationProvider>
|
|
85
|
+
</I18nProvider>
|
|
79
86
|
</ConfigContext.Provider>
|
|
80
87
|
));
|
|
81
88
|
|
|
@@ -96,12 +103,14 @@ describe("NotificationProvider", () => {
|
|
|
96
103
|
|
|
97
104
|
render(() => (
|
|
98
105
|
<ConfigContext.Provider value={{ clientName: "testApp" }}>
|
|
99
|
-
<
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
106
|
+
<I18nProvider>
|
|
107
|
+
<NotificationProvider>
|
|
108
|
+
{(() => {
|
|
109
|
+
notification = useNotification();
|
|
110
|
+
return null;
|
|
111
|
+
})()}
|
|
112
|
+
</NotificationProvider>
|
|
113
|
+
</I18nProvider>
|
|
105
114
|
</ConfigContext.Provider>
|
|
106
115
|
));
|
|
107
116
|
|
|
@@ -125,12 +134,14 @@ describe("NotificationProvider", () => {
|
|
|
125
134
|
|
|
126
135
|
render(() => (
|
|
127
136
|
<ConfigContext.Provider value={{ clientName: "testApp" }}>
|
|
128
|
-
<
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
137
|
+
<I18nProvider>
|
|
138
|
+
<NotificationProvider>
|
|
139
|
+
{(() => {
|
|
140
|
+
notification = useNotification();
|
|
141
|
+
return null;
|
|
142
|
+
})()}
|
|
143
|
+
</NotificationProvider>
|
|
144
|
+
</I18nProvider>
|
|
134
145
|
</ConfigContext.Provider>
|
|
135
146
|
));
|
|
136
147
|
|
|
@@ -153,12 +164,14 @@ describe("NotificationProvider", () => {
|
|
|
153
164
|
|
|
154
165
|
render(() => (
|
|
155
166
|
<ConfigContext.Provider value={{ clientName: "testApp" }}>
|
|
156
|
-
<
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
167
|
+
<I18nProvider>
|
|
168
|
+
<NotificationProvider>
|
|
169
|
+
{(() => {
|
|
170
|
+
notification = useNotification();
|
|
171
|
+
return null;
|
|
172
|
+
})()}
|
|
173
|
+
</NotificationProvider>
|
|
174
|
+
</I18nProvider>
|
|
162
175
|
</ConfigContext.Provider>
|
|
163
176
|
));
|
|
164
177
|
|
|
@@ -179,12 +192,14 @@ describe("NotificationProvider", () => {
|
|
|
179
192
|
|
|
180
193
|
render(() => (
|
|
181
194
|
<ConfigContext.Provider value={{ clientName: "testApp" }}>
|
|
182
|
-
<
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
195
|
+
<I18nProvider>
|
|
196
|
+
<NotificationProvider>
|
|
197
|
+
{(() => {
|
|
198
|
+
notification = useNotification();
|
|
199
|
+
return null;
|
|
200
|
+
})()}
|
|
201
|
+
</NotificationProvider>
|
|
202
|
+
</I18nProvider>
|
|
188
203
|
</ConfigContext.Provider>
|
|
189
204
|
));
|
|
190
205
|
|
|
@@ -201,12 +216,14 @@ describe("NotificationProvider", () => {
|
|
|
201
216
|
|
|
202
217
|
render(() => (
|
|
203
218
|
<ConfigContext.Provider value={{ clientName: "testApp" }}>
|
|
204
|
-
<
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
219
|
+
<I18nProvider>
|
|
220
|
+
<NotificationProvider>
|
|
221
|
+
{(() => {
|
|
222
|
+
notification = useNotification();
|
|
223
|
+
return null;
|
|
224
|
+
})()}
|
|
225
|
+
</NotificationProvider>
|
|
226
|
+
</I18nProvider>
|
|
210
227
|
</ConfigContext.Provider>
|
|
211
228
|
));
|
|
212
229
|
|
|
@@ -232,12 +249,14 @@ describe("NotificationProvider", () => {
|
|
|
232
249
|
|
|
233
250
|
render(() => (
|
|
234
251
|
<ConfigContext.Provider value={{ clientName: "testApp" }}>
|
|
235
|
-
<
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
252
|
+
<I18nProvider>
|
|
253
|
+
<NotificationProvider>
|
|
254
|
+
{(() => {
|
|
255
|
+
notification = useNotification();
|
|
256
|
+
return null;
|
|
257
|
+
})()}
|
|
258
|
+
</NotificationProvider>
|
|
259
|
+
</I18nProvider>
|
|
241
260
|
</ConfigContext.Provider>
|
|
242
261
|
));
|
|
243
262
|
|
|
@@ -254,12 +273,14 @@ describe("NotificationProvider", () => {
|
|
|
254
273
|
|
|
255
274
|
render(() => (
|
|
256
275
|
<ConfigContext.Provider value={{ clientName: "testApp" }}>
|
|
257
|
-
<
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
276
|
+
<I18nProvider>
|
|
277
|
+
<NotificationProvider>
|
|
278
|
+
{(() => {
|
|
279
|
+
notification = useNotification();
|
|
280
|
+
return null;
|
|
281
|
+
})()}
|
|
282
|
+
</NotificationProvider>
|
|
283
|
+
</I18nProvider>
|
|
263
284
|
</ConfigContext.Provider>
|
|
264
285
|
));
|
|
265
286
|
|
|
@@ -279,12 +300,14 @@ describe("NotificationProvider", () => {
|
|
|
279
300
|
|
|
280
301
|
render(() => (
|
|
281
302
|
<ConfigContext.Provider value={{ clientName: "testApp" }}>
|
|
282
|
-
<
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
303
|
+
<I18nProvider>
|
|
304
|
+
<NotificationProvider>
|
|
305
|
+
{(() => {
|
|
306
|
+
notification = useNotification();
|
|
307
|
+
return null;
|
|
308
|
+
})()}
|
|
309
|
+
</NotificationProvider>
|
|
310
|
+
</I18nProvider>
|
|
288
311
|
</ConfigContext.Provider>
|
|
289
312
|
));
|
|
290
313
|
|
|
@@ -308,12 +331,14 @@ describe("NotificationProvider", () => {
|
|
|
308
331
|
|
|
309
332
|
render(() => (
|
|
310
333
|
<ConfigContext.Provider value={{ clientName: "testApp" }}>
|
|
311
|
-
<
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
334
|
+
<I18nProvider>
|
|
335
|
+
<NotificationProvider>
|
|
336
|
+
{(() => {
|
|
337
|
+
notification = useNotification();
|
|
338
|
+
return null;
|
|
339
|
+
})()}
|
|
340
|
+
</NotificationProvider>
|
|
341
|
+
</I18nProvider>
|
|
317
342
|
</ConfigContext.Provider>
|
|
318
343
|
));
|
|
319
344
|
|
|
@@ -337,12 +362,14 @@ describe("NotificationProvider", () => {
|
|
|
337
362
|
|
|
338
363
|
render(() => (
|
|
339
364
|
<ConfigContext.Provider value={{ clientName: "testApp" }}>
|
|
340
|
-
<
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
365
|
+
<I18nProvider>
|
|
366
|
+
<NotificationProvider>
|
|
367
|
+
{(() => {
|
|
368
|
+
notification = useNotification();
|
|
369
|
+
return null;
|
|
370
|
+
})()}
|
|
371
|
+
</NotificationProvider>
|
|
372
|
+
</I18nProvider>
|
|
346
373
|
</ConfigContext.Provider>
|
|
347
374
|
));
|
|
348
375
|
|
|
@@ -1,29 +1,34 @@
|
|
|
1
1
|
import { render, fireEvent } from "@solidjs/testing-library";
|
|
2
|
-
import { describe, it, expect, vi } from "vitest";
|
|
2
|
+
import { describe, it, expect, vi, beforeEach } from "vitest";
|
|
3
3
|
import { createSignal } from "solid-js";
|
|
4
4
|
import { Checkbox } from "../../../../src/components/form-control/checkbox/Checkbox";
|
|
5
|
+
import { I18nProvider } from "../../../../src/providers/i18n/I18nContext";
|
|
6
|
+
import { ConfigProvider } from "../../../../src/providers/ConfigContext";
|
|
5
7
|
|
|
6
8
|
describe("Checkbox component", () => {
|
|
9
|
+
beforeEach(() => {
|
|
10
|
+
localStorage.setItem("test.i18n-locale", JSON.stringify("en"));
|
|
11
|
+
});
|
|
7
12
|
describe("basic rendering", () => {
|
|
8
13
|
it("renders with checkbox role", () => {
|
|
9
|
-
const { getByRole } = render(() => <Checkbox
|
|
14
|
+
const { getByRole } = render(() => <ConfigProvider clientName="test"><I18nProvider><Checkbox /></I18nProvider></ConfigProvider>);
|
|
10
15
|
expect(getByRole("checkbox")).toBeTruthy();
|
|
11
16
|
});
|
|
12
17
|
|
|
13
18
|
it("renders children as label", () => {
|
|
14
|
-
const { getByText } = render(() => <Checkbox>동의합니다</Checkbox>);
|
|
19
|
+
const { getByText } = render(() => <ConfigProvider clientName="test"><I18nProvider><Checkbox>동의합니다</Checkbox></I18nProvider></ConfigProvider>);
|
|
15
20
|
expect(getByText("동의합니다")).toBeTruthy();
|
|
16
21
|
});
|
|
17
22
|
|
|
18
23
|
it("defaults to unchecked", () => {
|
|
19
|
-
const { getByRole } = render(() => <Checkbox
|
|
24
|
+
const { getByRole } = render(() => <ConfigProvider clientName="test"><I18nProvider><Checkbox /></I18nProvider></ConfigProvider>);
|
|
20
25
|
expect(getByRole("checkbox").getAttribute("aria-checked")).toBe("false");
|
|
21
26
|
});
|
|
22
27
|
});
|
|
23
28
|
|
|
24
29
|
describe("click behavior", () => {
|
|
25
30
|
it("toggles checked state on click", () => {
|
|
26
|
-
const { getByRole } = render(() => <Checkbox
|
|
31
|
+
const { getByRole } = render(() => <ConfigProvider clientName="test"><I18nProvider><Checkbox /></I18nProvider></ConfigProvider>);
|
|
27
32
|
const checkbox = getByRole("checkbox");
|
|
28
33
|
|
|
29
34
|
fireEvent.click(checkbox);
|
|
@@ -34,7 +39,7 @@ describe("Checkbox component", () => {
|
|
|
34
39
|
});
|
|
35
40
|
|
|
36
41
|
it("does not change when disabled", () => {
|
|
37
|
-
const { getByRole } = render(() => <Checkbox disabled
|
|
42
|
+
const { getByRole } = render(() => <ConfigProvider clientName="test"><I18nProvider><Checkbox disabled /></I18nProvider></ConfigProvider>);
|
|
38
43
|
const checkbox = getByRole("checkbox");
|
|
39
44
|
|
|
40
45
|
fireEvent.click(checkbox);
|
|
@@ -44,7 +49,7 @@ describe("Checkbox component", () => {
|
|
|
44
49
|
|
|
45
50
|
describe("keyboard behavior", () => {
|
|
46
51
|
it("toggles with Space key", () => {
|
|
47
|
-
const { getByRole } = render(() => <Checkbox
|
|
52
|
+
const { getByRole } = render(() => <ConfigProvider clientName="test"><I18nProvider><Checkbox /></I18nProvider></ConfigProvider>);
|
|
48
53
|
const checkbox = getByRole("checkbox");
|
|
49
54
|
|
|
50
55
|
fireEvent.keyDown(checkbox, { key: " " });
|
|
@@ -57,13 +62,13 @@ describe("Checkbox component", () => {
|
|
|
57
62
|
|
|
58
63
|
describe("controlled pattern", () => {
|
|
59
64
|
it("reflects value prop as checked state", () => {
|
|
60
|
-
const { getByRole } = render(() => <Checkbox value={true}
|
|
65
|
+
const { getByRole } = render(() => <ConfigProvider clientName="test"><I18nProvider><Checkbox value={true} /></I18nProvider></ConfigProvider>);
|
|
61
66
|
expect(getByRole("checkbox").getAttribute("aria-checked")).toBe("true");
|
|
62
67
|
});
|
|
63
68
|
|
|
64
69
|
it("calls onValueChange on click", () => {
|
|
65
70
|
const handleChange = vi.fn();
|
|
66
|
-
const { getByRole } = render(() => <Checkbox value={false} onValueChange={handleChange}
|
|
71
|
+
const { getByRole } = render(() => <ConfigProvider clientName="test"><I18nProvider><Checkbox value={false} onValueChange={handleChange} /></I18nProvider></ConfigProvider>);
|
|
67
72
|
|
|
68
73
|
fireEvent.click(getByRole("checkbox"));
|
|
69
74
|
expect(handleChange).toHaveBeenCalledWith(true);
|
|
@@ -71,7 +76,7 @@ describe("Checkbox component", () => {
|
|
|
71
76
|
|
|
72
77
|
it("updates when external state changes", () => {
|
|
73
78
|
const [value, setValue] = createSignal(false);
|
|
74
|
-
const { getByRole } = render(() => <Checkbox value={value()} onValueChange={setValue}
|
|
79
|
+
const { getByRole } = render(() => <ConfigProvider clientName="test"><I18nProvider><Checkbox value={value()} onValueChange={setValue} /></I18nProvider></ConfigProvider>);
|
|
75
80
|
|
|
76
81
|
expect(getByRole("checkbox").getAttribute("aria-checked")).toBe("false");
|
|
77
82
|
|
|
@@ -82,21 +87,21 @@ describe("Checkbox component", () => {
|
|
|
82
87
|
|
|
83
88
|
describe("style variants", () => {
|
|
84
89
|
it("applies different styles per size", () => {
|
|
85
|
-
const { getByRole: getDefault } = render(() => <Checkbox
|
|
86
|
-
const { getByRole: getSm } = render(() => <Checkbox size="sm"
|
|
90
|
+
const { getByRole: getDefault } = render(() => <ConfigProvider clientName="test"><I18nProvider><Checkbox /></I18nProvider></ConfigProvider>);
|
|
91
|
+
const { getByRole: getSm } = render(() => <ConfigProvider clientName="test"><I18nProvider><Checkbox size="sm" /></I18nProvider></ConfigProvider>);
|
|
87
92
|
|
|
88
93
|
expect(getDefault("checkbox").className).not.toBe(getSm("checkbox").className);
|
|
89
94
|
});
|
|
90
95
|
|
|
91
96
|
it("applies different styles when inset", () => {
|
|
92
|
-
const { getByRole: getDefault } = render(() => <Checkbox
|
|
93
|
-
const { getByRole: getInset } = render(() => <Checkbox inset
|
|
97
|
+
const { getByRole: getDefault } = render(() => <ConfigProvider clientName="test"><I18nProvider><Checkbox /></I18nProvider></ConfigProvider>);
|
|
98
|
+
const { getByRole: getInset } = render(() => <ConfigProvider clientName="test"><I18nProvider><Checkbox inset /></I18nProvider></ConfigProvider>);
|
|
94
99
|
|
|
95
100
|
expect(getDefault("checkbox").className).not.toBe(getInset("checkbox").className);
|
|
96
101
|
});
|
|
97
102
|
|
|
98
103
|
it("applies disabled style", () => {
|
|
99
|
-
const { getByRole } = render(() => <Checkbox disabled
|
|
104
|
+
const { getByRole } = render(() => <ConfigProvider clientName="test"><I18nProvider><Checkbox disabled /></I18nProvider></ConfigProvider>);
|
|
100
105
|
expect(getByRole("checkbox").classList.contains("opacity-30")).toBe(true);
|
|
101
106
|
});
|
|
102
107
|
});
|
|
@@ -104,32 +109,32 @@ describe("Checkbox component", () => {
|
|
|
104
109
|
describe("class merging", () => {
|
|
105
110
|
it("merges custom classes", () => {
|
|
106
111
|
// eslint-disable-next-line tailwindcss/no-custom-classname
|
|
107
|
-
const { getByRole } = render(() => <Checkbox class="my-custom-class"
|
|
112
|
+
const { getByRole } = render(() => <ConfigProvider clientName="test"><I18nProvider><Checkbox class="my-custom-class" /></I18nProvider></ConfigProvider>);
|
|
108
113
|
expect(getByRole("checkbox").classList.contains("my-custom-class")).toBe(true);
|
|
109
114
|
});
|
|
110
115
|
});
|
|
111
116
|
|
|
112
117
|
describe("validation", () => {
|
|
113
118
|
it("sets error message when required and unchecked", () => {
|
|
114
|
-
const { container } = render(() => <Checkbox required value={false}
|
|
119
|
+
const { container } = render(() => <ConfigProvider clientName="test"><I18nProvider><Checkbox required value={false} /></I18nProvider></ConfigProvider>);
|
|
115
120
|
const hiddenInput = container.querySelector("input[aria-hidden='true']") as HTMLInputElement;
|
|
116
121
|
expect(hiddenInput.validationMessage).toBe("This is a required selection");
|
|
117
122
|
});
|
|
118
123
|
|
|
119
124
|
it("is valid when required and checked", () => {
|
|
120
|
-
const { container } = render(() => <Checkbox required value={true}
|
|
125
|
+
const { container } = render(() => <ConfigProvider clientName="test"><I18nProvider><Checkbox required value={true} /></I18nProvider></ConfigProvider>);
|
|
121
126
|
const hiddenInput = container.querySelector("input[aria-hidden='true']") as HTMLInputElement;
|
|
122
127
|
expect(hiddenInput.validity.valid).toBe(true);
|
|
123
128
|
});
|
|
124
129
|
|
|
125
130
|
it("sets error message returned by validate function", () => {
|
|
126
|
-
const { container } = render(() => <Checkbox value={true} validate={() => "커스텀 에러"}
|
|
131
|
+
const { container } = render(() => <ConfigProvider clientName="test"><I18nProvider><Checkbox value={true} validate={() => "커스텀 에러"} /></I18nProvider></ConfigProvider>);
|
|
127
132
|
const hiddenInput = container.querySelector("input[aria-hidden='true']") as HTMLInputElement;
|
|
128
133
|
expect(hiddenInput.validationMessage).toBe("커스텀 에러");
|
|
129
134
|
});
|
|
130
135
|
|
|
131
136
|
it("is valid when validate function returns undefined", () => {
|
|
132
|
-
const { container } = render(() => <Checkbox value={true} validate={() => undefined}
|
|
137
|
+
const { container } = render(() => <ConfigProvider clientName="test"><I18nProvider><Checkbox value={true} validate={() => undefined} /></I18nProvider></ConfigProvider>);
|
|
133
138
|
const hiddenInput = container.querySelector("input[aria-hidden='true']") as HTMLInputElement;
|
|
134
139
|
expect(hiddenInput.validity.valid).toBe(true);
|
|
135
140
|
});
|
|
@@ -1,25 +1,34 @@
|
|
|
1
1
|
import { render, fireEvent } from "@solidjs/testing-library";
|
|
2
|
-
import { describe, it, expect, vi } from "vitest";
|
|
2
|
+
import { describe, it, expect, vi, beforeEach } from "vitest";
|
|
3
3
|
import { createSignal } from "solid-js";
|
|
4
4
|
import { CheckboxGroup } from "../../../../src/components/form-control/checkbox/CheckboxGroup";
|
|
5
|
+
import { I18nProvider } from "../../../../src/providers/i18n/I18nContext";
|
|
6
|
+
import { ConfigProvider } from "../../../../src/providers/ConfigContext";
|
|
5
7
|
|
|
6
8
|
describe("CheckboxGroup component", () => {
|
|
9
|
+
beforeEach(() => {
|
|
10
|
+
localStorage.setItem("test.i18n-locale", JSON.stringify("en"));
|
|
11
|
+
});
|
|
7
12
|
describe("basic rendering", () => {
|
|
8
13
|
it("renders the container", () => {
|
|
9
14
|
const { container } = render(() => (
|
|
10
|
-
<
|
|
11
|
-
<CheckboxGroup
|
|
12
|
-
|
|
15
|
+
<ConfigProvider clientName="test"><I18nProvider>
|
|
16
|
+
<CheckboxGroup>
|
|
17
|
+
<CheckboxGroup.Item value="a">A</CheckboxGroup.Item>
|
|
18
|
+
</CheckboxGroup>
|
|
19
|
+
</I18nProvider></ConfigProvider>
|
|
13
20
|
));
|
|
14
21
|
expect(container.querySelector("div")).toBeTruthy();
|
|
15
22
|
});
|
|
16
23
|
|
|
17
24
|
it("renders items as checkboxes", () => {
|
|
18
25
|
const { getAllByRole } = render(() => (
|
|
19
|
-
<
|
|
20
|
-
<CheckboxGroup
|
|
21
|
-
|
|
22
|
-
|
|
26
|
+
<ConfigProvider clientName="test"><I18nProvider>
|
|
27
|
+
<CheckboxGroup>
|
|
28
|
+
<CheckboxGroup.Item value="a">A</CheckboxGroup.Item>
|
|
29
|
+
<CheckboxGroup.Item value="b">B</CheckboxGroup.Item>
|
|
30
|
+
</CheckboxGroup>
|
|
31
|
+
</I18nProvider></ConfigProvider>
|
|
23
32
|
));
|
|
24
33
|
expect(getAllByRole("checkbox").length).toBe(2);
|
|
25
34
|
});
|
|
@@ -28,10 +37,12 @@ describe("CheckboxGroup component", () => {
|
|
|
28
37
|
describe("controlled pattern", () => {
|
|
29
38
|
it("reflects value prop as selected state", () => {
|
|
30
39
|
const { getAllByRole } = render(() => (
|
|
31
|
-
<
|
|
32
|
-
<CheckboxGroup
|
|
33
|
-
|
|
34
|
-
|
|
40
|
+
<ConfigProvider clientName="test"><I18nProvider>
|
|
41
|
+
<CheckboxGroup value={["a"]}>
|
|
42
|
+
<CheckboxGroup.Item value="a">A</CheckboxGroup.Item>
|
|
43
|
+
<CheckboxGroup.Item value="b">B</CheckboxGroup.Item>
|
|
44
|
+
</CheckboxGroup>
|
|
45
|
+
</I18nProvider></ConfigProvider>
|
|
35
46
|
));
|
|
36
47
|
const checkboxes = getAllByRole("checkbox");
|
|
37
48
|
expect(checkboxes[0].getAttribute("aria-checked")).toBe("true");
|
|
@@ -41,9 +52,11 @@ describe("CheckboxGroup component", () => {
|
|
|
41
52
|
it("calls onValueChange on toggle", () => {
|
|
42
53
|
const handleChange = vi.fn();
|
|
43
54
|
const { getAllByRole } = render(() => (
|
|
44
|
-
<
|
|
45
|
-
<CheckboxGroup
|
|
46
|
-
|
|
55
|
+
<ConfigProvider clientName="test"><I18nProvider>
|
|
56
|
+
<CheckboxGroup value={[]} onValueChange={handleChange}>
|
|
57
|
+
<CheckboxGroup.Item value="a">A</CheckboxGroup.Item>
|
|
58
|
+
</CheckboxGroup>
|
|
59
|
+
</I18nProvider></ConfigProvider>
|
|
47
60
|
));
|
|
48
61
|
fireEvent.click(getAllByRole("checkbox")[0]);
|
|
49
62
|
expect(handleChange).toHaveBeenCalledWith(["a"]);
|
|
@@ -52,9 +65,11 @@ describe("CheckboxGroup component", () => {
|
|
|
52
65
|
it("updates when external state changes", () => {
|
|
53
66
|
const [value, setValue] = createSignal<string[]>([]);
|
|
54
67
|
const { getAllByRole } = render(() => (
|
|
55
|
-
<
|
|
56
|
-
<CheckboxGroup
|
|
57
|
-
|
|
68
|
+
<ConfigProvider clientName="test"><I18nProvider>
|
|
69
|
+
<CheckboxGroup value={value()} onValueChange={setValue}>
|
|
70
|
+
<CheckboxGroup.Item value="a">A</CheckboxGroup.Item>
|
|
71
|
+
</CheckboxGroup>
|
|
72
|
+
</I18nProvider></ConfigProvider>
|
|
58
73
|
));
|
|
59
74
|
expect(getAllByRole("checkbox")[0].getAttribute("aria-checked")).toBe("false");
|
|
60
75
|
setValue(["a"]);
|
|
@@ -71,36 +86,44 @@ describe("CheckboxGroup component", () => {
|
|
|
71
86
|
|
|
72
87
|
it("sets error message when required and no item selected", () => {
|
|
73
88
|
const { container } = render(() => (
|
|
74
|
-
<
|
|
75
|
-
<CheckboxGroup
|
|
76
|
-
|
|
89
|
+
<ConfigProvider clientName="test"><I18nProvider>
|
|
90
|
+
<CheckboxGroup required value={[]}>
|
|
91
|
+
<CheckboxGroup.Item value="a">A</CheckboxGroup.Item>
|
|
92
|
+
</CheckboxGroup>
|
|
93
|
+
</I18nProvider></ConfigProvider>
|
|
77
94
|
));
|
|
78
95
|
expect(getGroupHiddenInput(container).validationMessage).toBe("Please select an item");
|
|
79
96
|
});
|
|
80
97
|
|
|
81
98
|
it("is valid when required and item is selected", () => {
|
|
82
99
|
const { container } = render(() => (
|
|
83
|
-
<
|
|
84
|
-
<CheckboxGroup
|
|
85
|
-
|
|
100
|
+
<ConfigProvider clientName="test"><I18nProvider>
|
|
101
|
+
<CheckboxGroup required value={["a"]}>
|
|
102
|
+
<CheckboxGroup.Item value="a">A</CheckboxGroup.Item>
|
|
103
|
+
</CheckboxGroup>
|
|
104
|
+
</I18nProvider></ConfigProvider>
|
|
86
105
|
));
|
|
87
106
|
expect(getGroupHiddenInput(container).validity.valid).toBe(true);
|
|
88
107
|
});
|
|
89
108
|
|
|
90
109
|
it("sets error message returned by validate function", () => {
|
|
91
110
|
const { container } = render(() => (
|
|
92
|
-
<
|
|
93
|
-
<CheckboxGroup
|
|
94
|
-
|
|
111
|
+
<ConfigProvider clientName="test"><I18nProvider>
|
|
112
|
+
<CheckboxGroup value={["a"]} validate={() => "커스텀 에러"}>
|
|
113
|
+
<CheckboxGroup.Item value="a">A</CheckboxGroup.Item>
|
|
114
|
+
</CheckboxGroup>
|
|
115
|
+
</I18nProvider></ConfigProvider>
|
|
95
116
|
));
|
|
96
117
|
expect(getGroupHiddenInput(container).validationMessage).toBe("커스텀 에러");
|
|
97
118
|
});
|
|
98
119
|
|
|
99
120
|
it("is valid when validate function returns undefined", () => {
|
|
100
121
|
const { container } = render(() => (
|
|
101
|
-
<
|
|
102
|
-
<CheckboxGroup
|
|
103
|
-
|
|
122
|
+
<ConfigProvider clientName="test"><I18nProvider>
|
|
123
|
+
<CheckboxGroup value={["a"]} validate={() => undefined}>
|
|
124
|
+
<CheckboxGroup.Item value="a">A</CheckboxGroup.Item>
|
|
125
|
+
</CheckboxGroup>
|
|
126
|
+
</I18nProvider></ConfigProvider>
|
|
104
127
|
));
|
|
105
128
|
expect(getGroupHiddenInput(container).validity.valid).toBe(true);
|
|
106
129
|
});
|