@simplysm/solid 13.0.70 → 13.0.71

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (98) hide show
  1. package/README.md +1 -1
  2. package/dist/components/disclosure/Dropdown.d.ts +6 -4
  3. package/dist/components/disclosure/Dropdown.d.ts.map +1 -1
  4. package/dist/components/disclosure/Dropdown.js +24 -8
  5. package/dist/components/disclosure/Dropdown.js.map +2 -2
  6. package/dist/components/disclosure/dialogZIndex.d.ts +2 -0
  7. package/dist/components/disclosure/dialogZIndex.d.ts.map +1 -1
  8. package/dist/components/disclosure/dialogZIndex.js +4 -0
  9. package/dist/components/disclosure/dialogZIndex.js.map +1 -1
  10. package/dist/components/features/crud-detail/CrudDetail.d.ts.map +1 -1
  11. package/dist/components/features/crud-detail/CrudDetail.js +16 -7
  12. package/dist/components/features/crud-detail/CrudDetail.js.map +2 -2
  13. package/dist/components/features/crud-sheet/CrudSheet.d.ts.map +1 -1
  14. package/dist/components/features/crud-sheet/CrudSheet.js +14 -5
  15. package/dist/components/features/crud-sheet/CrudSheet.js.map +2 -2
  16. package/dist/components/features/crudRegistry.d.ts +16 -0
  17. package/dist/components/features/crudRegistry.d.ts.map +1 -0
  18. package/dist/components/features/crudRegistry.js +37 -0
  19. package/dist/components/features/crudRegistry.js.map +6 -0
  20. package/dist/components/features/permission-table/PermissionTable.d.ts.map +1 -1
  21. package/dist/components/features/permission-table/PermissionTable.js +71 -86
  22. package/dist/components/features/permission-table/PermissionTable.js.map +2 -2
  23. package/dist/components/features/shared-data/SharedDataSelect.js +2 -4
  24. package/dist/components/features/shared-data/SharedDataSelect.js.map +2 -2
  25. package/dist/components/features/shared-data/SharedDataSelectList.d.ts +2 -4
  26. package/dist/components/features/shared-data/SharedDataSelectList.d.ts.map +1 -1
  27. package/dist/components/features/shared-data/SharedDataSelectList.js +11 -46
  28. package/dist/components/features/shared-data/SharedDataSelectList.js.map +2 -2
  29. package/dist/components/form-control/select/Select.d.ts.map +1 -1
  30. package/dist/components/form-control/select/Select.js +1 -1
  31. package/dist/components/form-control/select/Select.js.map +1 -1
  32. package/dist/helpers/createAppStructure.d.ts.map +1 -1
  33. package/dist/helpers/createAppStructure.js +3 -2
  34. package/dist/helpers/createAppStructure.js.map +1 -1
  35. package/dist/helpers/createHmrSafeContext.d.ts +3 -0
  36. package/dist/helpers/createHmrSafeContext.d.ts.map +1 -0
  37. package/dist/helpers/createHmrSafeContext.js +10 -0
  38. package/dist/helpers/createHmrSafeContext.js.map +6 -0
  39. package/dist/hooks/createSelectionGroup.d.ts.map +1 -1
  40. package/dist/hooks/createSelectionGroup.js +3 -2
  41. package/dist/hooks/createSelectionGroup.js.map +2 -2
  42. package/package.json +6 -5
  43. package/src/components/disclosure/Dropdown.tsx +31 -17
  44. package/src/components/disclosure/dialogZIndex.ts +5 -0
  45. package/src/components/features/crud-detail/CrudDetail.tsx +16 -5
  46. package/src/components/features/crud-sheet/CrudSheet.tsx +13 -3
  47. package/src/components/features/crudRegistry.ts +60 -0
  48. package/src/components/features/permission-table/PermissionTable.tsx +49 -46
  49. package/src/components/features/shared-data/SharedDataSelect.tsx +2 -2
  50. package/src/components/features/shared-data/SharedDataSelectList.tsx +11 -36
  51. package/src/components/form-control/select/Select.tsx +1 -5
  52. package/src/helpers/createAppStructure.ts +3 -2
  53. package/src/helpers/createHmrSafeContext.ts +8 -0
  54. package/src/hooks/createSelectionGroup.tsx +4 -2
  55. package/tests/components/data/List.spec.tsx +52 -52
  56. package/tests/components/data/Pagination.spec.tsx +43 -43
  57. package/tests/components/data/Table.spec.tsx +4 -4
  58. package/tests/components/data/kanban/Kanban.selection.spec.tsx +21 -21
  59. package/tests/components/data/sheet/DataSheet.spec.tsx +50 -50
  60. package/tests/components/disclosure/Collapse.spec.tsx +24 -24
  61. package/tests/components/disclosure/Dialog.spec.tsx +33 -33
  62. package/tests/components/disclosure/DialogProvider.spec.tsx +9 -9
  63. package/tests/components/disclosure/Dropdown.spec.tsx +134 -14
  64. package/tests/components/disclosure/Tabs.spec.tsx +21 -21
  65. package/tests/components/disclosure/dialogZIndex.spec.ts +45 -0
  66. package/tests/components/display/Alert.spec.tsx +4 -4
  67. package/tests/components/display/Barcode.spec.tsx +7 -7
  68. package/tests/components/display/Card.spec.tsx +3 -3
  69. package/tests/components/display/Link.spec.tsx +5 -5
  70. package/tests/components/display/Tag.spec.tsx +4 -4
  71. package/tests/components/features/address/AddressSearch.spec.tsx +3 -3
  72. package/tests/components/features/crudRegistry.spec.ts +119 -0
  73. package/tests/components/features/data-select-button/DataSelectButton.spec.tsx +8 -8
  74. package/tests/components/features/permission-table/PermissionTable.spec.tsx +43 -43
  75. package/tests/components/features/shared-data/SharedDataSelectList.spec.tsx +2 -17
  76. package/tests/components/feedback/busy/BusyContainer.spec.tsx +7 -7
  77. package/tests/components/feedback/notification/NotificationBell.spec.tsx +9 -9
  78. package/tests/components/feedback/print/Print.spec.tsx +4 -4
  79. package/tests/components/form-control/Button.spec.tsx +18 -18
  80. package/tests/components/form-control/checkbox/Checkbox.spec.tsx +20 -20
  81. package/tests/components/form-control/checkbox/CheckboxGroup.spec.tsx +12 -12
  82. package/tests/components/form-control/checkbox/Radio.spec.tsx +21 -21
  83. package/tests/components/form-control/checkbox/RadioGroup.spec.tsx +12 -12
  84. package/tests/components/form-control/color-picker/ColorPicker.spec.tsx +10 -10
  85. package/tests/components/form-control/combobox/Combobox.spec.tsx +16 -16
  86. package/tests/components/form-control/combobox/ComboboxItem.spec.tsx +7 -7
  87. package/tests/components/form-control/date-range-picker/DateRangePicker.spec.tsx +24 -24
  88. package/tests/components/form-control/field/DatePicker.spec.tsx +50 -50
  89. package/tests/components/form-control/field/DateTimePicker.spec.tsx +47 -47
  90. package/tests/components/form-control/field/NumberInput.spec.tsx +54 -54
  91. package/tests/components/form-control/field/TextInput.spec.tsx +49 -49
  92. package/tests/components/form-control/field/Textarea.spec.tsx +33 -33
  93. package/tests/components/form-control/field/TimePicker.spec.tsx +42 -42
  94. package/tests/components/form-control/numpad/Numpad.spec.tsx +40 -40
  95. package/tests/components/form-control/select/Select.spec.tsx +9 -9
  96. package/tests/components/form-control/select/SelectItem.spec.tsx +10 -10
  97. package/tests/helpers/createAppStructure.spec.tsx +57 -57
  98. package/tests/helpers/mergeStyles.spec.ts +31 -31
@@ -4,63 +4,63 @@ import { createSignal } from "solid-js";
4
4
  import { DateTime } from "@simplysm/core-common";
5
5
  import { DateTimePicker } from "../../../../src/components/form-control/field/DateTimePicker";
6
6
 
7
- describe("DateTimePicker 컴포넌트", () => {
7
+ describe("DateTimePicker component", () => {
8
8
  describe("basic rendering", () => {
9
- it("unit=minute일 input type=datetime-local 렌더링된다", () => {
9
+ it("renders input type=datetime-local when unit=minute", () => {
10
10
  const { container } = render(() => <DateTimePicker unit="minute" />);
11
11
  const input = container.querySelector("input") as HTMLInputElement;
12
12
  expect(input).toBeTruthy();
13
13
  expect(input.type).toBe("datetime-local");
14
14
  });
15
15
 
16
- it("unit=second일 input type=datetime-local 렌더링된다", () => {
16
+ it("renders input type=datetime-local when unit=second", () => {
17
17
  const { container } = render(() => <DateTimePicker unit="second" />);
18
18
  const input = container.querySelector("input") as HTMLInputElement;
19
19
  expect(input).toBeTruthy();
20
20
  expect(input.type).toBe("datetime-local");
21
21
  });
22
22
 
23
- it("기본 unit minute이다", () => {
23
+ it("defaults unit to minute", () => {
24
24
  const { container } = render(() => <DateTimePicker />);
25
25
  const input = container.querySelector("input") as HTMLInputElement;
26
26
  expect(input.type).toBe("datetime-local");
27
27
  });
28
28
 
29
- it("autocomplete 기본값은 one-time-code이다", () => {
29
+ it("defaults autocomplete to one-time-code", () => {
30
30
  const { container } = render(() => <DateTimePicker />);
31
31
  const input = container.querySelector("input") as HTMLInputElement;
32
32
  expect(input.autocomplete).toBe("one-time-code");
33
33
  });
34
34
 
35
- it("unit=second일 step=1 설정된다", () => {
35
+ it("sets step=1 when unit=second", () => {
36
36
  const { container } = render(() => <DateTimePicker unit="second" />);
37
37
  const input = container.querySelector("input") as HTMLInputElement;
38
38
  expect(input.step).toBe("1");
39
39
  });
40
40
 
41
- it("unit=minute일 step 설정되지 않는다", () => {
41
+ it("does not set step when unit=minute", () => {
42
42
  const { container } = render(() => <DateTimePicker unit="minute" />);
43
43
  const input = container.querySelector("input") as HTMLInputElement;
44
44
  expect(input.step).toBe("");
45
45
  });
46
46
  });
47
47
 
48
- describe(" 변환", () => {
49
- it("DateTime 값이 minute 단위에서 yyyy-MM-ddTHH:mm 형식으로 표시된다", () => {
48
+ describe("value conversion", () => {
49
+ it("displays DateTime in yyyy-MM-ddTHH:mm format for minute unit", () => {
50
50
  const dateTime = new DateTime(2025, 3, 15, 10, 30, 45);
51
51
  const { container } = render(() => <DateTimePicker unit="minute" value={dateTime} />);
52
52
  const input = container.querySelector("input") as HTMLInputElement;
53
53
  expect(input.value).toBe("2025-03-15T10:30");
54
54
  });
55
55
 
56
- it("DateTime 값이 second 단위에서 yyyy-MM-ddTHH:mm:ss 형식으로 표시된다", () => {
56
+ it("displays DateTime in yyyy-MM-ddTHH:mm:ss format for second unit", () => {
57
57
  const dateTime = new DateTime(2025, 3, 15, 10, 30, 45);
58
58
  const { container } = render(() => <DateTimePicker unit="second" value={dateTime} />);
59
59
  const input = container.querySelector("input") as HTMLInputElement;
60
60
  expect(input.value).toBe("2025-03-15T10:30:45");
61
61
  });
62
62
 
63
- it("minute 단위 입력 DateTime으로 변환되어 onValueChange로 전달된다", () => {
63
+ it("passes DateTime converted from minute input to onValueChange", () => {
64
64
  const handleChange = vi.fn();
65
65
  const { container } = render(() => (
66
66
  <DateTimePicker unit="minute" onValueChange={handleChange} />
@@ -79,7 +79,7 @@ describe("DateTimePicker 컴포넌트", () => {
79
79
  expect(result.second).toBe(0);
80
80
  });
81
81
 
82
- it("second 단위 입력 DateTime으로 변환되어 onValueChange로 전달된다", () => {
82
+ it("passes DateTime converted from second input to onValueChange", () => {
83
83
  const handleChange = vi.fn();
84
84
  const { container } = render(() => (
85
85
  <DateTimePicker unit="second" onValueChange={handleChange} />
@@ -98,7 +98,7 @@ describe("DateTimePicker 컴포넌트", () => {
98
98
  expect(result.second).toBe(45);
99
99
  });
100
100
 
101
- it(" 입력 undefined가 onValueChange로 전달된다", () => {
101
+ it("passes undefined to onValueChange on empty input", () => {
102
102
  const handleChange = vi.fn();
103
103
  const dateTime = new DateTime(2025, 3, 15, 10, 30, 45);
104
104
  const { container } = render(() => (
@@ -112,29 +112,29 @@ describe("DateTimePicker 컴포넌트", () => {
112
112
  });
113
113
  });
114
114
 
115
- describe("min/max 속성", () => {
116
- it("min 속성이 minute 단위에서 문자열로 변환된다", () => {
115
+ describe("min/max props", () => {
116
+ it("converts min to string for minute unit", () => {
117
117
  const minDateTime = new DateTime(2025, 1, 1, 0, 0, 0);
118
118
  const { container } = render(() => <DateTimePicker unit="minute" min={minDateTime} />);
119
119
  const input = container.querySelector("input") as HTMLInputElement;
120
120
  expect(input.min).toBe("2025-01-01T00:00");
121
121
  });
122
122
 
123
- it("max 속성이 minute 단위에서 문자열로 변환된다", () => {
123
+ it("converts max to string for minute unit", () => {
124
124
  const maxDateTime = new DateTime(2025, 12, 31, 23, 59, 0);
125
125
  const { container } = render(() => <DateTimePicker unit="minute" max={maxDateTime} />);
126
126
  const input = container.querySelector("input") as HTMLInputElement;
127
127
  expect(input.max).toBe("2025-12-31T23:59");
128
128
  });
129
129
 
130
- it("min 속성이 second 단위에서 단위까지 포함된다", () => {
130
+ it("includes seconds in min for second unit", () => {
131
131
  const minDateTime = new DateTime(2025, 1, 1, 0, 0, 30);
132
132
  const { container } = render(() => <DateTimePicker unit="second" min={minDateTime} />);
133
133
  const input = container.querySelector("input") as HTMLInputElement;
134
134
  expect(input.min).toBe("2025-01-01T00:00:30");
135
135
  });
136
136
 
137
- it("max 속성이 second 단위에서 단위까지 포함된다", () => {
137
+ it("includes seconds in max for second unit", () => {
138
138
  const maxDateTime = new DateTime(2025, 12, 31, 23, 59, 59);
139
139
  const { container } = render(() => <DateTimePicker unit="second" max={maxDateTime} />);
140
140
  const input = container.querySelector("input") as HTMLInputElement;
@@ -142,8 +142,8 @@ describe("DateTimePicker 컴포넌트", () => {
142
142
  });
143
143
  });
144
144
 
145
- describe("controlled 패턴", () => {
146
- it("외부 상태 변경 input 값이 업데이트된다", () => {
145
+ describe("controlled pattern", () => {
146
+ it("updates input value when external state changes", () => {
147
147
  const [value, setValue] = createSignal<DateTime | undefined>(
148
148
  new DateTime(2025, 1, 1, 10, 0, 0),
149
149
  );
@@ -159,8 +159,8 @@ describe("DateTimePicker 컴포넌트", () => {
159
159
  });
160
160
  });
161
161
 
162
- describe("uncontrolled 패턴", () => {
163
- it("onValueChange 없이 내부 상태로 값이 관리된다", () => {
162
+ describe("uncontrolled pattern", () => {
163
+ it("manages value internally without onValueChange", () => {
164
164
  const { container } = render(() => (
165
165
  <DateTimePicker unit="minute" value={new DateTime(2025, 1, 1, 10, 0, 0)} />
166
166
  ));
@@ -174,7 +174,7 @@ describe("DateTimePicker 컴포넌트", () => {
174
174
  });
175
175
 
176
176
  describe("disabled state", () => {
177
- it("disabled=true일 div 렌더링된다", () => {
177
+ it("renders as div when disabled=true", () => {
178
178
  const { container } = render(() => (
179
179
  <DateTimePicker disabled value={new DateTime(2025, 3, 15, 10, 30, 0)} />
180
180
  ));
@@ -185,14 +185,14 @@ describe("DateTimePicker 컴포넌트", () => {
185
185
  expect(div).toBeTruthy();
186
186
  });
187
187
 
188
- it("disabled 상태에서 value 표시된다", () => {
188
+ it("displays value when disabled", () => {
189
189
  const { getByText } = render(() => (
190
190
  <DateTimePicker unit="minute" disabled value={new DateTime(2025, 3, 15, 10, 30, 0)} />
191
191
  ));
192
192
  expect(getByText("2025-03-15T10:30")).toBeTruthy();
193
193
  });
194
194
 
195
- it("disabled 스타일이 적용된다", () => {
195
+ it("applies disabled style", () => {
196
196
  const { container } = render(() => (
197
197
  <DateTimePicker disabled value={new DateTime(2025, 3, 15, 10, 30, 0)} />
198
198
  ));
@@ -201,8 +201,8 @@ describe("DateTimePicker 컴포넌트", () => {
201
201
  });
202
202
  });
203
203
 
204
- describe("readonly 상태", () => {
205
- it("readonly=true일 div 렌더링된다", () => {
204
+ describe("readonly state", () => {
205
+ it("renders as div when readonly=true", () => {
206
206
  const { container } = render(() => (
207
207
  <DateTimePicker readonly value={new DateTime(2025, 3, 15, 10, 30, 0)} />
208
208
  ));
@@ -213,7 +213,7 @@ describe("DateTimePicker 컴포넌트", () => {
213
213
  expect(div).toBeTruthy();
214
214
  });
215
215
 
216
- it("readonly 상태에서 value 표시된다", () => {
216
+ it("displays value when readonly", () => {
217
217
  const { getByText } = render(() => (
218
218
  <DateTimePicker unit="minute" readonly value={new DateTime(2025, 3, 15, 10, 30, 0)} />
219
219
  ));
@@ -221,22 +221,22 @@ describe("DateTimePicker 컴포넌트", () => {
221
221
  });
222
222
  });
223
223
 
224
- describe("size 옵션", () => {
225
- it("size=sm일 작은 padding 적용된다", () => {
224
+ describe("size option", () => {
225
+ it("applies small padding when size=sm", () => {
226
226
  const { container } = render(() => <DateTimePicker size="sm" />);
227
227
  const wrapper = container.firstChild as HTMLElement;
228
228
  expect(wrapper.classList.contains("py-0.5")).toBe(true);
229
229
  });
230
230
 
231
- it("size=lg일 padding 적용된다", () => {
231
+ it("applies large padding when size=lg", () => {
232
232
  const { container } = render(() => <DateTimePicker size="lg" />);
233
233
  const wrapper = container.firstChild as HTMLElement;
234
234
  expect(wrapper.classList.contains("py-2")).toBe(true);
235
235
  });
236
236
  });
237
237
 
238
- describe("inset 스타일", () => {
239
- it("inset=true일 outer div에는 relative만, content div에 inset 스타일이 적용된다", () => {
238
+ describe("inset style", () => {
239
+ it("applies relative to outer and inset style to content when inset=true", () => {
240
240
  const { container } = render(() => <DateTimePicker inset />);
241
241
  const outer = container.firstChild as HTMLElement;
242
242
  expect(outer.classList.contains("relative")).toBe(true);
@@ -247,7 +247,7 @@ describe("DateTimePicker 컴포넌트", () => {
247
247
  expect(contentDiv.classList.contains("bg-primary-50")).toBe(true);
248
248
  });
249
249
 
250
- it("inset + readonly일 때 content div 보이고 input 없다", () => {
250
+ it("shows content div and no input when inset + readonly", () => {
251
251
  const { container } = render(() => (
252
252
  <DateTimePicker inset readonly value={new DateTime(2025, 3, 15, 14, 30, 0)} />
253
253
  ));
@@ -261,7 +261,7 @@ describe("DateTimePicker 컴포넌트", () => {
261
261
  expect(outer.querySelector("input:not([aria-hidden])")).toBeFalsy();
262
262
  });
263
263
 
264
- it("inset + editable일 때 content div(hidden)와 input 모두 존재한다", () => {
264
+ it("shows hidden content div and input when inset + editable", () => {
265
265
  const { container } = render(() => (
266
266
  <DateTimePicker inset value={new DateTime(2025, 3, 15, 14, 30, 0)} />
267
267
  ));
@@ -274,7 +274,7 @@ describe("DateTimePicker 컴포넌트", () => {
274
274
  expect(outer.querySelector("input")).toBeTruthy();
275
275
  });
276
276
 
277
- it("inset + 값일 때 content div NBSP가 표시된다", () => {
277
+ it("shows NBSP in content div when inset + empty value", () => {
278
278
  const { container } = render(() => <DateTimePicker inset readonly />);
279
279
  const outer = container.firstChild as HTMLElement;
280
280
  const contentDiv = outer.querySelector("[data-datetime-field-content]") as HTMLElement;
@@ -282,14 +282,14 @@ describe("DateTimePicker 컴포넌트", () => {
282
282
  });
283
283
  });
284
284
 
285
- describe("다크 모드 스타일", () => {
286
- it("다크 모드 border 스타일이 적용된다", () => {
285
+ describe("dark mode style", () => {
286
+ it("applies dark mode border style", () => {
287
287
  const { container } = render(() => <DateTimePicker />);
288
288
  const wrapper = container.firstChild as HTMLElement;
289
289
  expect(wrapper.classList.contains("dark:border-base-700")).toBe(true);
290
290
  });
291
291
 
292
- it("다크 모드 background 스타일이 적용된다", () => {
292
+ it("applies dark mode background style", () => {
293
293
  const { container } = render(() => <DateTimePicker />);
294
294
  const wrapper = container.firstChild as HTMLElement;
295
295
  expect(wrapper.classList.contains("dark:bg-primary-950/30")).toBe(true);
@@ -297,7 +297,7 @@ describe("DateTimePicker 컴포넌트", () => {
297
297
  });
298
298
 
299
299
  describe("class merging", () => {
300
- it("사용자 정의 class 기존 스타일과 병합된다", () => {
300
+ it("merges custom class with existing styles", () => {
301
301
  // eslint-disable-next-line tailwindcss/no-custom-classname
302
302
  const { container } = render(() => <DateTimePicker class="my-custom-class" />);
303
303
  const wrapper = container.firstChild as HTMLElement;
@@ -312,7 +312,7 @@ describe("DateTimePicker 컴포넌트", () => {
312
312
  expect(hiddenInput.validationMessage).toBe("This field is required");
313
313
  });
314
314
 
315
- it("required 값이 있으면 유효하다", () => {
315
+ it("is valid when required and value exists", () => {
316
316
  const { container } = render(() => (
317
317
  <DateTimePicker required value={new DateTime(2024, 1, 1, 0, 0, 0)} />
318
318
  ));
@@ -320,7 +320,7 @@ describe("DateTimePicker 컴포넌트", () => {
320
320
  expect(hiddenInput.validity.valid).toBe(true);
321
321
  });
322
322
 
323
- it("min 위반 에러 메시지가 설정된다", () => {
323
+ it("sets error message when min is violated", () => {
324
324
  const { container } = render(() => (
325
325
  <DateTimePicker
326
326
  min={new DateTime(2024, 6, 1, 0, 0, 0)}
@@ -331,7 +331,7 @@ describe("DateTimePicker 컴포넌트", () => {
331
331
  expect(hiddenInput.validationMessage).not.toBe("");
332
332
  });
333
333
 
334
- it("min 충족 시 유효하다", () => {
334
+ it("is valid when min is satisfied", () => {
335
335
  const { container } = render(() => (
336
336
  <DateTimePicker
337
337
  min={new DateTime(2024, 1, 1, 0, 0, 0)}
@@ -342,7 +342,7 @@ describe("DateTimePicker 컴포넌트", () => {
342
342
  expect(hiddenInput.validity.valid).toBe(true);
343
343
  });
344
344
 
345
- it("max 위반 에러 메시지가 설정된다", () => {
345
+ it("sets error message when max is violated", () => {
346
346
  const { container } = render(() => (
347
347
  <DateTimePicker
348
348
  max={new DateTime(2024, 6, 1, 0, 0, 0)}
@@ -353,7 +353,7 @@ describe("DateTimePicker 컴포넌트", () => {
353
353
  expect(hiddenInput.validationMessage).not.toBe("");
354
354
  });
355
355
 
356
- it("max 충족 시 유효하다", () => {
356
+ it("is valid when max is satisfied", () => {
357
357
  const { container } = render(() => (
358
358
  <DateTimePicker
359
359
  max={new DateTime(2024, 12, 31, 23, 59, 59)}
@@ -364,7 +364,7 @@ describe("DateTimePicker 컴포넌트", () => {
364
364
  expect(hiddenInput.validity.valid).toBe(true);
365
365
  });
366
366
 
367
- it("validate 함수가 에러를 반환하면 에러 메시지가 설정된다", () => {
367
+ it("sets error message returned by validate function", () => {
368
368
  const { container } = render(() => (
369
369
  <DateTimePicker value={new DateTime(2024, 1, 1, 0, 0, 0)} validate={() => "커스텀 에러"} />
370
370
  ));
@@ -372,7 +372,7 @@ describe("DateTimePicker 컴포넌트", () => {
372
372
  expect(hiddenInput.validationMessage).toBe("커스텀 에러");
373
373
  });
374
374
 
375
- it("validate 함수가 undefined를 반환하면 유효하다", () => {
375
+ it("is valid when validate function returns undefined", () => {
376
376
  const { container } = render(() => (
377
377
  <DateTimePicker value={new DateTime(2024, 1, 1, 0, 0, 0)} validate={() => undefined} />
378
378
  ));