@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.
Files changed (215) hide show
  1. package/README.md +209 -202
  2. package/dist/components/data/calendar/Calendar.d.ts.map +1 -1
  3. package/dist/components/data/calendar/Calendar.js +3 -11
  4. package/dist/components/data/calendar/Calendar.js.map +2 -2
  5. package/dist/components/data/sheet/DataSheet.d.ts.map +1 -1
  6. package/dist/components/data/sheet/DataSheet.js +13 -16
  7. package/dist/components/data/sheet/DataSheet.js.map +2 -2
  8. package/dist/components/data/sheet/DataSheet.styles.d.ts.map +1 -1
  9. package/dist/components/data/sheet/DataSheet.styles.js +1 -1
  10. package/dist/components/data/sheet/DataSheet.styles.js.map +1 -1
  11. package/dist/components/data/sheet/DataSheetConfigDialog.d.ts.map +1 -1
  12. package/dist/components/data/sheet/DataSheetConfigDialog.js +27 -9
  13. package/dist/components/data/sheet/DataSheetConfigDialog.js.map +2 -2
  14. package/dist/components/disclosure/Dialog.d.ts +1 -1
  15. package/dist/components/disclosure/Dialog.d.ts.map +1 -1
  16. package/dist/components/disclosure/Dialog.js +5 -5
  17. package/dist/components/disclosure/Dialog.js.map +2 -2
  18. package/dist/components/disclosure/dialogZIndex.d.ts +1 -1
  19. package/dist/components/features/crud-detail/CrudDetail.js +23 -23
  20. package/dist/components/features/crud-detail/CrudDetail.js.map +2 -2
  21. package/dist/components/features/crud-sheet/CrudSheet.js +49 -49
  22. package/dist/components/features/crud-sheet/CrudSheet.js.map +2 -2
  23. package/dist/components/features/crud-sheet/types.d.ts +4 -4
  24. package/dist/components/features/crud-sheet/types.d.ts.map +1 -1
  25. package/dist/components/features/data-select-button/DataSelectButton.d.ts +25 -7
  26. package/dist/components/features/data-select-button/DataSelectButton.d.ts.map +1 -1
  27. package/dist/components/features/data-select-button/DataSelectButton.js +27 -12
  28. package/dist/components/features/data-select-button/DataSelectButton.js.map +2 -2
  29. package/dist/components/features/permission-table/PermissionTable.js +4 -4
  30. package/dist/components/features/permission-table/PermissionTable.js.map +2 -2
  31. package/dist/components/features/shared-data/SharedDataSelect.d.ts +22 -10
  32. package/dist/components/features/shared-data/SharedDataSelect.d.ts.map +1 -1
  33. package/dist/components/features/shared-data/SharedDataSelect.js +113 -29
  34. package/dist/components/features/shared-data/SharedDataSelect.js.map +2 -2
  35. package/dist/components/features/shared-data/SharedDataSelectButton.d.ts +3 -3
  36. package/dist/components/features/shared-data/SharedDataSelectButton.d.ts.map +1 -1
  37. package/dist/components/features/shared-data/SharedDataSelectButton.js.map +1 -1
  38. package/dist/components/features/shared-data/SharedDataSelectList.js +5 -4
  39. package/dist/components/features/shared-data/SharedDataSelectList.js.map +2 -2
  40. package/dist/components/feedback/notification/NotificationBanner.js +3 -3
  41. package/dist/components/feedback/notification/NotificationBanner.js.map +2 -2
  42. package/dist/components/feedback/notification/NotificationBell.d.ts.map +1 -1
  43. package/dist/components/feedback/notification/NotificationBell.js +12 -5
  44. package/dist/components/feedback/notification/NotificationBell.js.map +2 -2
  45. package/dist/components/feedback/notification/NotificationProvider.d.ts.map +1 -1
  46. package/dist/components/feedback/notification/NotificationProvider.js +3 -1
  47. package/dist/components/feedback/notification/NotificationProvider.js.map +2 -2
  48. package/dist/components/form-control/ThemeToggle.d.ts.map +1 -1
  49. package/dist/components/form-control/ThemeToggle.js +9 -6
  50. package/dist/components/form-control/ThemeToggle.js.map +2 -2
  51. package/dist/components/form-control/checkbox/Checkbox.d.ts.map +1 -1
  52. package/dist/components/form-control/checkbox/Checkbox.js +3 -1
  53. package/dist/components/form-control/checkbox/Checkbox.js.map +2 -2
  54. package/dist/components/form-control/checkbox/CheckboxGroup.js +1 -1
  55. package/dist/components/form-control/checkbox/CheckboxGroup.js.map +2 -2
  56. package/dist/components/form-control/checkbox/Radio.d.ts.map +1 -1
  57. package/dist/components/form-control/checkbox/Radio.js +3 -1
  58. package/dist/components/form-control/checkbox/Radio.js.map +2 -2
  59. package/dist/components/form-control/checkbox/RadioGroup.js +1 -1
  60. package/dist/components/form-control/checkbox/RadioGroup.js.map +2 -2
  61. package/dist/components/form-control/color-picker/ColorPicker.d.ts.map +1 -1
  62. package/dist/components/form-control/color-picker/ColorPicker.js +3 -1
  63. package/dist/components/form-control/color-picker/ColorPicker.js.map +2 -2
  64. package/dist/components/form-control/combobox/Combobox.d.ts.map +1 -1
  65. package/dist/components/form-control/combobox/Combobox.js +9 -5
  66. package/dist/components/form-control/combobox/Combobox.js.map +2 -2
  67. package/dist/components/form-control/date-range-picker/DateRangePicker.js +9 -9
  68. package/dist/components/form-control/date-range-picker/DateRangePicker.js.map +2 -2
  69. package/dist/components/form-control/editor/EditorToolbar.js +3 -3
  70. package/dist/components/form-control/editor/EditorToolbar.js.map +2 -2
  71. package/dist/components/form-control/field/DatePicker.d.ts.map +1 -1
  72. package/dist/components/form-control/field/DatePicker.js +9 -3
  73. package/dist/components/form-control/field/DatePicker.js.map +2 -2
  74. package/dist/components/form-control/field/DateTimePicker.d.ts.map +1 -1
  75. package/dist/components/form-control/field/DateTimePicker.js +9 -3
  76. package/dist/components/form-control/field/DateTimePicker.js.map +2 -2
  77. package/dist/components/form-control/field/NumberInput.d.ts.map +1 -1
  78. package/dist/components/form-control/field/NumberInput.js +9 -3
  79. package/dist/components/form-control/field/NumberInput.js.map +2 -2
  80. package/dist/components/form-control/field/TextInput.d.ts.map +1 -1
  81. package/dist/components/form-control/field/TextInput.js +10 -4
  82. package/dist/components/form-control/field/TextInput.js.map +2 -2
  83. package/dist/components/form-control/field/Textarea.d.ts.map +1 -1
  84. package/dist/components/form-control/field/Textarea.js +9 -3
  85. package/dist/components/form-control/field/Textarea.js.map +2 -2
  86. package/dist/components/form-control/field/TimePicker.d.ts.map +1 -1
  87. package/dist/components/form-control/field/TimePicker.js +9 -3
  88. package/dist/components/form-control/field/TimePicker.js.map +2 -2
  89. package/dist/components/form-control/numpad/Numpad.d.ts.map +1 -1
  90. package/dist/components/form-control/numpad/Numpad.js +5 -1
  91. package/dist/components/form-control/numpad/Numpad.js.map +2 -2
  92. package/dist/components/form-control/select/Select.js +7 -7
  93. package/dist/components/form-control/select/Select.js.map +2 -2
  94. package/dist/components/form-control/state-preset/StatePreset.d.ts.map +1 -1
  95. package/dist/components/form-control/state-preset/StatePreset.js +42 -20
  96. package/dist/components/form-control/state-preset/StatePreset.js.map +2 -2
  97. package/dist/components/layout/sidebar/SidebarContainer.js +3 -3
  98. package/dist/components/layout/sidebar/SidebarContainer.js.map +2 -2
  99. package/dist/components/layout/sidebar/SidebarMenu.d.ts.map +1 -1
  100. package/dist/components/layout/sidebar/SidebarMenu.js +5 -2
  101. package/dist/components/layout/sidebar/SidebarMenu.js.map +2 -2
  102. package/dist/components/layout/topbar/Topbar.js +3 -4
  103. package/dist/components/layout/topbar/Topbar.js.map +2 -2
  104. package/dist/components/layout/topbar/TopbarMenu.js +3 -3
  105. package/dist/components/layout/topbar/TopbarMenu.js.map +2 -2
  106. package/dist/hooks/createSelectionGroup.d.ts +2 -2
  107. package/dist/hooks/createSelectionGroup.d.ts.map +1 -1
  108. package/dist/hooks/createSelectionGroup.js +5 -2
  109. package/dist/hooks/createSelectionGroup.js.map +2 -2
  110. package/dist/providers/i18n/I18nContext.d.ts +0 -4
  111. package/dist/providers/i18n/I18nContext.d.ts.map +1 -1
  112. package/dist/providers/i18n/I18nContext.js +1 -5
  113. package/dist/providers/i18n/I18nContext.js.map +2 -2
  114. package/dist/providers/i18n/locales/en.d.ts +38 -0
  115. package/dist/providers/i18n/locales/en.d.ts.map +1 -1
  116. package/dist/providers/i18n/locales/en.js +39 -1
  117. package/dist/providers/i18n/locales/en.js.map +1 -1
  118. package/dist/providers/i18n/locales/ko.d.ts +38 -0
  119. package/dist/providers/i18n/locales/ko.d.ts.map +1 -1
  120. package/dist/providers/i18n/locales/ko.js +39 -1
  121. package/dist/providers/i18n/locales/ko.js.map +1 -1
  122. package/package.json +6 -6
  123. package/src/components/data/calendar/Calendar.tsx +3 -4
  124. package/src/components/data/sheet/DataSheet.styles.ts +1 -1
  125. package/src/components/data/sheet/DataSheet.tsx +14 -15
  126. package/src/components/data/sheet/DataSheetConfigDialog.tsx +12 -10
  127. package/src/components/data/sheet/types.ts +1 -1
  128. package/src/components/disclosure/Dialog.tsx +10 -10
  129. package/src/components/disclosure/dialogZIndex.ts +1 -1
  130. package/src/components/features/crud-detail/CrudDetail.tsx +25 -25
  131. package/src/components/features/crud-sheet/CrudSheet.tsx +53 -53
  132. package/src/components/features/crud-sheet/types.ts +4 -4
  133. package/src/components/features/data-select-button/DataSelectButton.tsx +51 -21
  134. package/src/components/features/permission-table/PermissionTable.tsx +3 -3
  135. package/src/components/features/shared-data/SharedDataSelect.tsx +172 -33
  136. package/src/components/features/shared-data/SharedDataSelectButton.tsx +3 -2
  137. package/src/components/features/shared-data/SharedDataSelectList.tsx +4 -4
  138. package/src/components/feedback/notification/NotificationBanner.tsx +3 -3
  139. package/src/components/feedback/notification/NotificationBell.tsx +6 -4
  140. package/src/components/feedback/notification/NotificationProvider.tsx +3 -1
  141. package/src/components/form-control/ThemeToggle.tsx +10 -6
  142. package/src/components/form-control/checkbox/Checkbox.tsx +4 -1
  143. package/src/components/form-control/checkbox/CheckboxGroup.tsx +1 -1
  144. package/src/components/form-control/checkbox/Radio.tsx +4 -1
  145. package/src/components/form-control/checkbox/RadioGroup.tsx +1 -1
  146. package/src/components/form-control/color-picker/ColorPicker.tsx +4 -1
  147. package/src/components/form-control/combobox/Combobox.tsx +6 -3
  148. package/src/components/form-control/date-range-picker/DateRangePicker.tsx +8 -8
  149. package/src/components/form-control/editor/EditorToolbar.tsx +23 -23
  150. package/src/components/form-control/field/DatePicker.tsx +6 -3
  151. package/src/components/form-control/field/DateTimePicker.tsx +6 -3
  152. package/src/components/form-control/field/NumberInput.tsx +6 -3
  153. package/src/components/form-control/field/TextInput.tsx +7 -4
  154. package/src/components/form-control/field/Textarea.tsx +6 -3
  155. package/src/components/form-control/field/TimePicker.tsx +6 -3
  156. package/src/components/form-control/numpad/Numpad.tsx +3 -1
  157. package/src/components/form-control/select/Select.tsx +7 -7
  158. package/src/components/form-control/state-preset/StatePreset.tsx +14 -12
  159. package/src/components/layout/sidebar/SidebarContainer.tsx +3 -3
  160. package/src/components/layout/sidebar/SidebarMenu.tsx +3 -1
  161. package/src/components/layout/topbar/Topbar.tsx +3 -3
  162. package/src/components/layout/topbar/TopbarMenu.tsx +3 -3
  163. package/src/hooks/createSelectionGroup.tsx +8 -4
  164. package/src/providers/i18n/I18nContext.tsx +0 -7
  165. package/src/providers/i18n/locales/en.ts +38 -0
  166. package/src/providers/i18n/locales/ko.ts +38 -0
  167. package/tailwind.config.ts +2 -2
  168. package/tests/components/data/kanban/Kanban.selection.spec.tsx +34 -24
  169. package/tests/components/disclosure/Dialog.spec.tsx +28 -28
  170. package/tests/components/disclosure/DialogProvider.spec.tsx +51 -25
  171. package/tests/components/features/address/AddressSearch.spec.tsx +12 -4
  172. package/tests/components/features/crud-detail/CrudDetail.spec.tsx +1 -0
  173. package/tests/components/features/crud-sheet/CrudSheet.spec.tsx +30 -6
  174. package/tests/components/features/data-select-button/DataSelectButton.spec.tsx +77 -56
  175. package/tests/components/features/permission-table/PermissionTable.spec.tsx +12 -8
  176. package/tests/components/features/shared-data/SharedDataSelect.spec.tsx +172 -0
  177. package/tests/components/features/shared-data/SharedDataSelectList.spec.tsx +14 -2
  178. package/tests/components/feedback/notification/LiveRegion.spec.tsx +20 -9
  179. package/tests/components/feedback/notification/NotificationBanner.spec.tsx +64 -46
  180. package/tests/components/feedback/notification/NotificationBell.spec.tsx +70 -51
  181. package/tests/components/feedback/notification/NotificationContext.spec.tsx +105 -78
  182. package/tests/components/form-control/checkbox/Checkbox.spec.tsx +25 -20
  183. package/tests/components/form-control/checkbox/CheckboxGroup.spec.tsx +53 -30
  184. package/tests/components/form-control/checkbox/Radio.spec.tsx +25 -20
  185. package/tests/components/form-control/checkbox/RadioGroup.spec.tsx +53 -30
  186. package/tests/components/form-control/color-picker/ColorPicker.spec.tsx +24 -15
  187. package/tests/components/form-control/combobox/Combobox.spec.tsx +92 -59
  188. package/tests/components/form-control/date-range-picker/DateRangePicker.spec.tsx +2 -2
  189. package/tests/components/form-control/field/DatePicker.spec.tsx +50 -44
  190. package/tests/components/form-control/field/DateTimePicker.spec.tsx +51 -45
  191. package/tests/components/form-control/field/NumberInput.spec.tsx +53 -47
  192. package/tests/components/form-control/field/TextInput.spec.tsx +50 -44
  193. package/tests/components/form-control/field/Textarea.spec.tsx +35 -29
  194. package/tests/components/form-control/field/TimePicker.spec.tsx +43 -37
  195. package/tests/components/form-control/numpad/Numpad.spec.tsx +175 -25
  196. package/tests/components/form-control/select/Select.spec.tsx +5 -0
  197. package/tests/components/form-control/select/SelectItem.spec.tsx +1 -0
  198. package/tests/components/layout/sidebar/Sidebar.spec.tsx +79 -35
  199. package/tests/components/layout/sidebar/SidebarContainer.spec.tsx +1 -0
  200. package/tests/components/layout/sidebar/SidebarMenu.spec.tsx +28 -17
  201. package/tests/components/layout/topbar/TopbarActions.spec.tsx +41 -23
  202. package/tests/components/layout/topbar/createTopbarActions.spec.tsx +1 -0
  203. package/tests/hooks/usePrint.spec.tsx +1 -1
  204. package/tests/hooks/useRouterLink.spec.tsx +2 -0
  205. package/tests/hooks/useSyncConfig.spec.tsx +1 -0
  206. package/tests/providers/ErrorLoggerProvider.spec.tsx +1 -0
  207. package/tests/providers/PwaUpdateProvider.spec.tsx +16 -6
  208. package/tests/providers/ServiceClientContext.spec.tsx +40 -25
  209. package/tests/providers/i18n/I18nContext.spec.tsx +3 -4
  210. package/tests/providers/shared-data/SharedDataProvider.spec.tsx +2 -0
  211. package/dist/hooks/usePrint.d.ts +0 -3
  212. package/dist/hooks/usePrint.d.ts.map +0 -1
  213. package/dist/hooks/usePrint.js +0 -5
  214. package/dist/hooks/usePrint.js.map +0 -6
  215. 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-modal attribute", async () => {
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 modal = document.querySelector("[data-modal]");
48
- expect(modal).not.toBeNull();
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-modal-header]");
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-modal-header]");
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-modal]")).not.toBeNull();
115
+ expect(document.querySelector("[data-dialog]")).not.toBeNull();
116
116
  });
117
- const closeBtn = document.querySelector("[data-modal-close]");
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-modal-close]")).not.toBeNull();
134
+ expect(document.querySelector("[data-dialog-close]")).not.toBeNull();
135
135
  });
136
- fireEvent.click(document.querySelector("[data-modal-close]")!);
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-modal-backdrop]")).not.toBeNull();
151
+ expect(document.querySelector("[data-dialog-backdrop]")).not.toBeNull();
152
152
  });
153
- fireEvent.click(document.querySelector("[data-modal-backdrop]")!);
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-modal-backdrop]")).not.toBeNull();
168
+ expect(document.querySelector("[data-dialog-backdrop]")).not.toBeNull();
169
169
  });
170
- fireEvent.click(document.querySelector("[data-modal-backdrop]")!);
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-modal]")).not.toBeNull();
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-modal]")).not.toBeNull();
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-modal]")).not.toBeNull();
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-modal-close]")).not.toBeNull();
236
+ expect(document.querySelector("[data-dialog-close]")).not.toBeNull();
237
237
  });
238
- fireEvent.click(document.querySelector("[data-modal-close]")!);
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-modal-dialog]") as HTMLElement;
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-modal-dialog]") as HTMLElement;
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-modal-dialog]") as HTMLElement;
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-modal-dialog]") as HTMLElement;
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-modal-backdrop]");
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-modal-dialog]") as HTMLElement;
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-modal-dialog]") as HTMLElement;
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-modal-dialog]") as HTMLElement;
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-modal]")).not.toBeNull();
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-modal-dialog]") as HTMLElement;
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="modal-content">다이얼로그 내용</span>
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
- <DialogProvider>
59
- <TestApp />
60
- </DialogProvider>
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="modal-content"]')).not.toBeNull();
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
- <DialogProvider>
73
- <TestApp />
74
- </DialogProvider>
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="modal-content"]')).toBeNull();
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
- <DialogProvider>
94
- <TestApp />
95
- </DialogProvider>
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="modal-content"]')).toBeNull();
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
- <DialogProvider>
114
- <TestApp />
115
- </DialogProvider>
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 modal = document.querySelector("[data-modal]");
122
- expect(modal).not.toBeNull();
123
- expect(modal!.textContent).toContain("테스트 다이얼로그");
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
- <DialogProvider>
130
- <TestAppNoHeader />
131
- </DialogProvider>
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="modal-content"]')).not.toBeNull();
163
+ expect(document.querySelector('[data-testid="dialog-content"]')).not.toBeNull();
138
164
  });
139
- const header = document.querySelector("[data-modal-header]");
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
- <DialogProvider>
28
- <TestApp />
29
- </DialogProvider>
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
- <TestWrapper>
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
- </TestWrapper>
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-modal-content]");
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 modal mode", () => {
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-modal-content]");
490
+ const dialogContent = document.querySelector("[data-dialog-content]");
467
491
  expect(dialogContent?.textContent).toContain("Confirm");
468
492
  });
469
493