@simplysm/solid 13.0.72 → 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 (210) 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.js +10 -10
  6. package/dist/components/data/sheet/DataSheet.js.map +2 -2
  7. package/dist/components/data/sheet/DataSheetConfigDialog.d.ts.map +1 -1
  8. package/dist/components/data/sheet/DataSheetConfigDialog.js +27 -9
  9. package/dist/components/data/sheet/DataSheetConfigDialog.js.map +2 -2
  10. package/dist/components/disclosure/Dialog.d.ts +1 -1
  11. package/dist/components/disclosure/Dialog.d.ts.map +1 -1
  12. package/dist/components/disclosure/Dialog.js +5 -5
  13. package/dist/components/disclosure/Dialog.js.map +2 -2
  14. package/dist/components/disclosure/dialogZIndex.d.ts +1 -1
  15. package/dist/components/features/crud-detail/CrudDetail.js +23 -23
  16. package/dist/components/features/crud-detail/CrudDetail.js.map +2 -2
  17. package/dist/components/features/crud-sheet/CrudSheet.js +49 -49
  18. package/dist/components/features/crud-sheet/CrudSheet.js.map +2 -2
  19. package/dist/components/features/crud-sheet/types.d.ts +4 -4
  20. package/dist/components/features/crud-sheet/types.d.ts.map +1 -1
  21. package/dist/components/features/data-select-button/DataSelectButton.d.ts +25 -7
  22. package/dist/components/features/data-select-button/DataSelectButton.d.ts.map +1 -1
  23. package/dist/components/features/data-select-button/DataSelectButton.js +27 -12
  24. package/dist/components/features/data-select-button/DataSelectButton.js.map +2 -2
  25. package/dist/components/features/permission-table/PermissionTable.js +4 -4
  26. package/dist/components/features/permission-table/PermissionTable.js.map +2 -2
  27. package/dist/components/features/shared-data/SharedDataSelect.d.ts +22 -10
  28. package/dist/components/features/shared-data/SharedDataSelect.d.ts.map +1 -1
  29. package/dist/components/features/shared-data/SharedDataSelect.js +113 -29
  30. package/dist/components/features/shared-data/SharedDataSelect.js.map +2 -2
  31. package/dist/components/features/shared-data/SharedDataSelectButton.d.ts +3 -3
  32. package/dist/components/features/shared-data/SharedDataSelectButton.d.ts.map +1 -1
  33. package/dist/components/features/shared-data/SharedDataSelectButton.js.map +1 -1
  34. package/dist/components/features/shared-data/SharedDataSelectList.js +5 -4
  35. package/dist/components/features/shared-data/SharedDataSelectList.js.map +2 -2
  36. package/dist/components/feedback/notification/NotificationBanner.js +3 -3
  37. package/dist/components/feedback/notification/NotificationBanner.js.map +2 -2
  38. package/dist/components/feedback/notification/NotificationBell.d.ts.map +1 -1
  39. package/dist/components/feedback/notification/NotificationBell.js +12 -5
  40. package/dist/components/feedback/notification/NotificationBell.js.map +2 -2
  41. package/dist/components/feedback/notification/NotificationProvider.d.ts.map +1 -1
  42. package/dist/components/feedback/notification/NotificationProvider.js +3 -1
  43. package/dist/components/feedback/notification/NotificationProvider.js.map +2 -2
  44. package/dist/components/form-control/ThemeToggle.d.ts.map +1 -1
  45. package/dist/components/form-control/ThemeToggle.js +9 -6
  46. package/dist/components/form-control/ThemeToggle.js.map +2 -2
  47. package/dist/components/form-control/checkbox/Checkbox.d.ts.map +1 -1
  48. package/dist/components/form-control/checkbox/Checkbox.js +3 -1
  49. package/dist/components/form-control/checkbox/Checkbox.js.map +2 -2
  50. package/dist/components/form-control/checkbox/CheckboxGroup.js +1 -1
  51. package/dist/components/form-control/checkbox/CheckboxGroup.js.map +2 -2
  52. package/dist/components/form-control/checkbox/Radio.d.ts.map +1 -1
  53. package/dist/components/form-control/checkbox/Radio.js +3 -1
  54. package/dist/components/form-control/checkbox/Radio.js.map +2 -2
  55. package/dist/components/form-control/checkbox/RadioGroup.js +1 -1
  56. package/dist/components/form-control/checkbox/RadioGroup.js.map +2 -2
  57. package/dist/components/form-control/color-picker/ColorPicker.d.ts.map +1 -1
  58. package/dist/components/form-control/color-picker/ColorPicker.js +3 -1
  59. package/dist/components/form-control/color-picker/ColorPicker.js.map +2 -2
  60. package/dist/components/form-control/combobox/Combobox.d.ts.map +1 -1
  61. package/dist/components/form-control/combobox/Combobox.js +9 -5
  62. package/dist/components/form-control/combobox/Combobox.js.map +2 -2
  63. package/dist/components/form-control/date-range-picker/DateRangePicker.js +9 -9
  64. package/dist/components/form-control/date-range-picker/DateRangePicker.js.map +2 -2
  65. package/dist/components/form-control/editor/EditorToolbar.js +3 -3
  66. package/dist/components/form-control/editor/EditorToolbar.js.map +2 -2
  67. package/dist/components/form-control/field/DatePicker.d.ts.map +1 -1
  68. package/dist/components/form-control/field/DatePicker.js +9 -3
  69. package/dist/components/form-control/field/DatePicker.js.map +2 -2
  70. package/dist/components/form-control/field/DateTimePicker.d.ts.map +1 -1
  71. package/dist/components/form-control/field/DateTimePicker.js +9 -3
  72. package/dist/components/form-control/field/DateTimePicker.js.map +2 -2
  73. package/dist/components/form-control/field/NumberInput.d.ts.map +1 -1
  74. package/dist/components/form-control/field/NumberInput.js +9 -3
  75. package/dist/components/form-control/field/NumberInput.js.map +2 -2
  76. package/dist/components/form-control/field/TextInput.d.ts.map +1 -1
  77. package/dist/components/form-control/field/TextInput.js +10 -4
  78. package/dist/components/form-control/field/TextInput.js.map +2 -2
  79. package/dist/components/form-control/field/Textarea.d.ts.map +1 -1
  80. package/dist/components/form-control/field/Textarea.js +9 -3
  81. package/dist/components/form-control/field/Textarea.js.map +2 -2
  82. package/dist/components/form-control/field/TimePicker.d.ts.map +1 -1
  83. package/dist/components/form-control/field/TimePicker.js +9 -3
  84. package/dist/components/form-control/field/TimePicker.js.map +2 -2
  85. package/dist/components/form-control/numpad/Numpad.d.ts.map +1 -1
  86. package/dist/components/form-control/numpad/Numpad.js +5 -1
  87. package/dist/components/form-control/numpad/Numpad.js.map +2 -2
  88. package/dist/components/form-control/select/Select.js +7 -7
  89. package/dist/components/form-control/select/Select.js.map +2 -2
  90. package/dist/components/form-control/state-preset/StatePreset.d.ts.map +1 -1
  91. package/dist/components/form-control/state-preset/StatePreset.js +42 -20
  92. package/dist/components/form-control/state-preset/StatePreset.js.map +2 -2
  93. package/dist/components/layout/sidebar/SidebarContainer.js +3 -3
  94. package/dist/components/layout/sidebar/SidebarContainer.js.map +2 -2
  95. package/dist/components/layout/sidebar/SidebarMenu.d.ts.map +1 -1
  96. package/dist/components/layout/sidebar/SidebarMenu.js +5 -2
  97. package/dist/components/layout/sidebar/SidebarMenu.js.map +2 -2
  98. package/dist/components/layout/topbar/Topbar.js +3 -4
  99. package/dist/components/layout/topbar/Topbar.js.map +2 -2
  100. package/dist/components/layout/topbar/TopbarMenu.js +3 -3
  101. package/dist/components/layout/topbar/TopbarMenu.js.map +2 -2
  102. package/dist/hooks/createSelectionGroup.d.ts +2 -2
  103. package/dist/hooks/createSelectionGroup.d.ts.map +1 -1
  104. package/dist/hooks/createSelectionGroup.js +5 -2
  105. package/dist/hooks/createSelectionGroup.js.map +2 -2
  106. package/dist/providers/i18n/I18nContext.d.ts +0 -4
  107. package/dist/providers/i18n/I18nContext.d.ts.map +1 -1
  108. package/dist/providers/i18n/I18nContext.js +1 -5
  109. package/dist/providers/i18n/I18nContext.js.map +2 -2
  110. package/dist/providers/i18n/locales/en.d.ts +38 -0
  111. package/dist/providers/i18n/locales/en.d.ts.map +1 -1
  112. package/dist/providers/i18n/locales/en.js +39 -1
  113. package/dist/providers/i18n/locales/en.js.map +1 -1
  114. package/dist/providers/i18n/locales/ko.d.ts +38 -0
  115. package/dist/providers/i18n/locales/ko.d.ts.map +1 -1
  116. package/dist/providers/i18n/locales/ko.js +39 -1
  117. package/dist/providers/i18n/locales/ko.js.map +1 -1
  118. package/package.json +6 -6
  119. package/src/components/data/calendar/Calendar.tsx +3 -4
  120. package/src/components/data/sheet/DataSheet.tsx +11 -11
  121. package/src/components/data/sheet/DataSheetConfigDialog.tsx +12 -10
  122. package/src/components/data/sheet/types.ts +1 -1
  123. package/src/components/disclosure/Dialog.tsx +10 -10
  124. package/src/components/disclosure/dialogZIndex.ts +1 -1
  125. package/src/components/features/crud-detail/CrudDetail.tsx +25 -25
  126. package/src/components/features/crud-sheet/CrudSheet.tsx +53 -53
  127. package/src/components/features/crud-sheet/types.ts +4 -4
  128. package/src/components/features/data-select-button/DataSelectButton.tsx +51 -21
  129. package/src/components/features/permission-table/PermissionTable.tsx +3 -3
  130. package/src/components/features/shared-data/SharedDataSelect.tsx +172 -33
  131. package/src/components/features/shared-data/SharedDataSelectButton.tsx +3 -2
  132. package/src/components/features/shared-data/SharedDataSelectList.tsx +4 -4
  133. package/src/components/feedback/notification/NotificationBanner.tsx +3 -3
  134. package/src/components/feedback/notification/NotificationBell.tsx +6 -4
  135. package/src/components/feedback/notification/NotificationProvider.tsx +3 -1
  136. package/src/components/form-control/ThemeToggle.tsx +10 -6
  137. package/src/components/form-control/checkbox/Checkbox.tsx +4 -1
  138. package/src/components/form-control/checkbox/CheckboxGroup.tsx +1 -1
  139. package/src/components/form-control/checkbox/Radio.tsx +4 -1
  140. package/src/components/form-control/checkbox/RadioGroup.tsx +1 -1
  141. package/src/components/form-control/color-picker/ColorPicker.tsx +4 -1
  142. package/src/components/form-control/combobox/Combobox.tsx +6 -3
  143. package/src/components/form-control/date-range-picker/DateRangePicker.tsx +8 -8
  144. package/src/components/form-control/editor/EditorToolbar.tsx +23 -23
  145. package/src/components/form-control/field/DatePicker.tsx +6 -3
  146. package/src/components/form-control/field/DateTimePicker.tsx +6 -3
  147. package/src/components/form-control/field/NumberInput.tsx +6 -3
  148. package/src/components/form-control/field/TextInput.tsx +7 -4
  149. package/src/components/form-control/field/Textarea.tsx +6 -3
  150. package/src/components/form-control/field/TimePicker.tsx +6 -3
  151. package/src/components/form-control/numpad/Numpad.tsx +3 -1
  152. package/src/components/form-control/select/Select.tsx +7 -7
  153. package/src/components/form-control/state-preset/StatePreset.tsx +14 -12
  154. package/src/components/layout/sidebar/SidebarContainer.tsx +3 -3
  155. package/src/components/layout/sidebar/SidebarMenu.tsx +3 -1
  156. package/src/components/layout/topbar/Topbar.tsx +3 -3
  157. package/src/components/layout/topbar/TopbarMenu.tsx +3 -3
  158. package/src/hooks/createSelectionGroup.tsx +8 -4
  159. package/src/providers/i18n/I18nContext.tsx +0 -7
  160. package/src/providers/i18n/locales/en.ts +38 -0
  161. package/src/providers/i18n/locales/ko.ts +38 -0
  162. package/tailwind.config.ts +2 -2
  163. package/tests/components/data/kanban/Kanban.selection.spec.tsx +34 -24
  164. package/tests/components/disclosure/Dialog.spec.tsx +28 -28
  165. package/tests/components/disclosure/DialogProvider.spec.tsx +51 -25
  166. package/tests/components/features/address/AddressSearch.spec.tsx +12 -4
  167. package/tests/components/features/crud-detail/CrudDetail.spec.tsx +1 -0
  168. package/tests/components/features/crud-sheet/CrudSheet.spec.tsx +30 -6
  169. package/tests/components/features/data-select-button/DataSelectButton.spec.tsx +77 -56
  170. package/tests/components/features/permission-table/PermissionTable.spec.tsx +12 -8
  171. package/tests/components/features/shared-data/SharedDataSelect.spec.tsx +172 -0
  172. package/tests/components/features/shared-data/SharedDataSelectList.spec.tsx +14 -2
  173. package/tests/components/feedback/notification/LiveRegion.spec.tsx +20 -9
  174. package/tests/components/feedback/notification/NotificationBanner.spec.tsx +64 -46
  175. package/tests/components/feedback/notification/NotificationBell.spec.tsx +70 -51
  176. package/tests/components/feedback/notification/NotificationContext.spec.tsx +105 -78
  177. package/tests/components/form-control/checkbox/Checkbox.spec.tsx +25 -20
  178. package/tests/components/form-control/checkbox/CheckboxGroup.spec.tsx +53 -30
  179. package/tests/components/form-control/checkbox/Radio.spec.tsx +25 -20
  180. package/tests/components/form-control/checkbox/RadioGroup.spec.tsx +53 -30
  181. package/tests/components/form-control/color-picker/ColorPicker.spec.tsx +24 -15
  182. package/tests/components/form-control/combobox/Combobox.spec.tsx +92 -59
  183. package/tests/components/form-control/date-range-picker/DateRangePicker.spec.tsx +2 -2
  184. package/tests/components/form-control/field/DatePicker.spec.tsx +50 -44
  185. package/tests/components/form-control/field/DateTimePicker.spec.tsx +51 -45
  186. package/tests/components/form-control/field/NumberInput.spec.tsx +53 -47
  187. package/tests/components/form-control/field/TextInput.spec.tsx +50 -44
  188. package/tests/components/form-control/field/Textarea.spec.tsx +35 -29
  189. package/tests/components/form-control/field/TimePicker.spec.tsx +43 -37
  190. package/tests/components/form-control/numpad/Numpad.spec.tsx +175 -25
  191. package/tests/components/form-control/select/Select.spec.tsx +5 -0
  192. package/tests/components/form-control/select/SelectItem.spec.tsx +1 -0
  193. package/tests/components/layout/sidebar/Sidebar.spec.tsx +79 -35
  194. package/tests/components/layout/sidebar/SidebarContainer.spec.tsx +1 -0
  195. package/tests/components/layout/sidebar/SidebarMenu.spec.tsx +28 -17
  196. package/tests/components/layout/topbar/TopbarActions.spec.tsx +41 -23
  197. package/tests/components/layout/topbar/createTopbarActions.spec.tsx +1 -0
  198. package/tests/hooks/usePrint.spec.tsx +1 -1
  199. package/tests/hooks/useRouterLink.spec.tsx +2 -0
  200. package/tests/hooks/useSyncConfig.spec.tsx +1 -0
  201. package/tests/providers/ErrorLoggerProvider.spec.tsx +1 -0
  202. package/tests/providers/PwaUpdateProvider.spec.tsx +16 -6
  203. package/tests/providers/ServiceClientContext.spec.tsx +40 -25
  204. package/tests/providers/i18n/I18nContext.spec.tsx +3 -4
  205. package/tests/providers/shared-data/SharedDataProvider.spec.tsx +2 -0
  206. package/dist/hooks/usePrint.d.ts +0 -3
  207. package/dist/hooks/usePrint.d.ts.map +0 -1
  208. package/dist/hooks/usePrint.js +0 -5
  209. package/dist/hooks/usePrint.js.map +0 -6
  210. package/src/hooks/usePrint.ts +0 -2
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/providers/i18n/locales/ko.ts"],
4
- "mappings": "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",
4
+ "mappings": "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",
5
5
  "names": []
6
6
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@simplysm/solid",
3
- "version": "13.0.72",
3
+ "version": "13.0.74",
4
4
  "description": "Simplysm package - SolidJS library",
5
5
  "author": "simplysm",
6
6
  "license": "Apache-2.0",
@@ -28,7 +28,7 @@
28
28
  "@solid-primitives/resize-observer": "^2.1.5",
29
29
  "@solid-primitives/storage": "^4.3.4",
30
30
  "@solidjs/router": "^0.15.4",
31
- "@tabler/icons-solidjs": "^3.37.1",
31
+ "@tabler/icons-solidjs": "^3.38.0",
32
32
  "@tiptap/core": "^3.20.0",
33
33
  "@tiptap/extension-color": "^3.20.0",
34
34
  "@tiptap/extension-highlight": "^3.20.0",
@@ -51,10 +51,10 @@
51
51
  "tabbable": "^6.4.0",
52
52
  "tailwind-merge": "^3.5.0",
53
53
  "tailwindcss": "^3.4.19",
54
- "@simplysm/core-common": "13.0.72",
55
- "@simplysm/core-browser": "13.0.72",
56
- "@simplysm/service-common": "13.0.72",
57
- "@simplysm/service-client": "13.0.72"
54
+ "@simplysm/core-browser": "13.0.74",
55
+ "@simplysm/core-common": "13.0.74",
56
+ "@simplysm/service-client": "13.0.74",
57
+ "@simplysm/service-common": "13.0.74"
58
58
  },
59
59
  "devDependencies": {
60
60
  "@solidjs/testing-library": "^0.8.10"
@@ -3,7 +3,7 @@ import { DateOnly } from "@simplysm/core-common";
3
3
  import clsx from "clsx";
4
4
  import { twMerge } from "tailwind-merge";
5
5
  import { createControllableSignal } from "../../../hooks/createControllableSignal";
6
- import { useI18nOptional } from "../../../providers/i18n/I18nContext";
6
+ import { useI18n } from "../../../providers/i18n/I18nContext";
7
7
 
8
8
  export interface CalendarProps<TValue> extends Omit<
9
9
  JSX.HTMLAttributes<HTMLTableElement>,
@@ -62,15 +62,14 @@ function CalendarBase<TValue>(props: CalendarProps<TValue>) {
62
62
  onChange: () => local.onYearMonthChange,
63
63
  });
64
64
 
65
- const i18n = useI18nOptional();
65
+ const i18n = useI18n();
66
66
  const weekNames = ["sun", "mon", "tue", "wed", "thu", "fri", "sat"] as const;
67
67
 
68
68
  const weekHeaders = createMemo(() => {
69
69
  const start = weekStartDay();
70
70
  return Array.from({ length: 7 }, (_, i) => {
71
71
  const key = weekNames[(start + i) % 7];
72
- return i18n?.t(`calendar.weeks.${key}`) ??
73
- { sun: "Sun", mon: "Mon", tue: "Tue", wed: "Wed", thu: "Thu", fri: "Fri", sat: "Sat" }[key];
72
+ return i18n.t(`calendar.weeks.${key}`);
74
73
  });
75
74
  });
76
75
 
@@ -39,7 +39,7 @@ import { Checkbox } from "../../form-control/checkbox/Checkbox";
39
39
  import { Pagination } from "../Pagination";
40
40
  import { useSyncConfig } from "../../../hooks/useSyncConfig";
41
41
  import { DialogContext } from "../../disclosure/DialogContext";
42
- import { useI18nOptional } from "../../../providers/i18n/I18nContext";
42
+ import { useI18n } from "../../../providers/i18n/I18nContext";
43
43
  import "./DataSheet.css";
44
44
  import {
45
45
  configButtonClass,
@@ -111,8 +111,8 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
111
111
  "children",
112
112
  ]);
113
113
 
114
- const modal = useContext(DialogContext);
115
- const i18n = useI18nOptional();
114
+ const dialog = useContext(DialogContext);
115
+ const i18n = useI18n();
116
116
 
117
117
  // #region Column Collection
118
118
  const resolved = children(() => local.children);
@@ -163,8 +163,8 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
163
163
  setConfig({ ...prev, columnRecord: record });
164
164
  }
165
165
 
166
- async function openConfigModal(): Promise<void> {
167
- if (!modal) return;
166
+ async function openConfigDialog(): Promise<void> {
167
+ if (!dialog) return;
168
168
 
169
169
  const { DataSheetConfigDialog } = await import("./DataSheetConfigDialog");
170
170
 
@@ -185,7 +185,7 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
185
185
 
186
186
  const currentConfig = config();
187
187
 
188
- const result = await modal.show<DataSheetConfig>(
188
+ const result = await dialog.show<DataSheetConfig>(
189
189
  () => <DataSheetConfigDialog columnInfos={columnInfos} currentConfig={currentConfig} />,
190
190
  {
191
191
  header: "Sheet Settings",
@@ -770,7 +770,7 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
770
770
  local.class,
771
771
  )}
772
772
  >
773
- <Show when={!local.hideConfigBar && (modal != null || effectivePageCount() > 1)}>
773
+ <Show when={!local.hideConfigBar && (dialog != null || effectivePageCount() > 1)}>
774
774
  <div class={toolbarClass}>
775
775
  <Show when={effectivePageCount() > 1}>
776
776
  <Pagination
@@ -782,10 +782,10 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
782
782
  />
783
783
  </Show>
784
784
  <div class="flex-1" />
785
- <Show when={modal != null}>
785
+ <Show when={dialog != null}>
786
786
  <button
787
787
  class={configButtonClass}
788
- onClick={openConfigModal}
788
+ onClick={openConfigDialog}
789
789
  title="Sheet Settings"
790
790
  type="button"
791
791
  >
@@ -845,8 +845,8 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
845
845
  class={expandToggleClass}
846
846
  onClick={toggleExpandAll}
847
847
  title={isAllExpanded()
848
- ? (i18n?.t("dataSheet.collapseAll") ?? "Collapse all")
849
- : (i18n?.t("dataSheet.expandAll") ?? "Expand all")}
848
+ ? i18n.t("dataSheet.collapseAll")
849
+ : i18n.t("dataSheet.expandAll")}
850
850
  >
851
851
  <Icon
852
852
  icon={IconChevronDown}
@@ -13,6 +13,7 @@ import { Checkbox } from "../../form-control/checkbox/Checkbox";
13
13
  import { TextInput } from "../../form-control/field/TextInput";
14
14
  import { Button } from "../../form-control/Button";
15
15
  import { borderSubtle } from "../../../styles/tokens.styles";
16
+ import { useI18n } from "../../../providers/i18n/I18nContext";
16
17
 
17
18
  const containerClass = clsx("flex flex-col", "gap-2", "p-2");
18
19
  const sheetWrapperClass = clsx("rounded border", borderSubtle);
@@ -34,8 +35,9 @@ export interface DataSheetConfigDialogProps {
34
35
 
35
36
  export const DataSheetConfigDialog: Component<DataSheetConfigDialogProps> = (props) => {
36
37
  const dialog = useDialogInstance<DataSheetConfig>();
38
+ const i18n = useI18n();
37
39
 
38
- /* eslint-disable solid/reactivity -- modal props are static values only used once at mount time */
40
+ /* eslint-disable solid/reactivity -- dialog props are static values only used once at mount time */
39
41
  const initialItems: EditColumnItem[] = props.columnInfos
40
42
  .filter((info) => !info.collapse)
41
43
  .map((info) => {
@@ -105,7 +107,7 @@ export const DataSheetConfigDialog: Component<DataSheetConfigDialogProps> = (pro
105
107
  }
106
108
 
107
109
  function handleReset(): void {
108
- if (!confirm("Are you sure you want to reset all sheet settings?")) return;
110
+ if (!confirm(i18n.t("dataSheetConfigDialog.resetConfirm"))) return;
109
111
  dialog?.close({ columnRecord: {} });
110
112
  }
111
113
 
@@ -115,13 +117,13 @@ export const DataSheetConfigDialog: Component<DataSheetConfigDialogProps> = (pro
115
117
  <DataSheet items={editItems} inset hideConfigBar onItemsReorder={handleReorder}>
116
118
  <DataSheet.Column<EditColumnItem>
117
119
  key="header"
118
- header="Column"
120
+ header={i18n.t("dataSheetConfigDialog.column")}
119
121
  class="px-2 py-1"
120
122
  sortable={false}
121
123
  >
122
124
  {(ctx) => ctx.item.headerText}
123
125
  </DataSheet.Column>
124
- <DataSheet.Column<EditColumnItem> key="fixed" header="Fixed" sortable={false}>
126
+ <DataSheet.Column<EditColumnItem> key="fixed" header={i18n.t("dataSheetConfigDialog.fixed")} sortable={false}>
125
127
  {(ctx) => (
126
128
  <Checkbox
127
129
  inset
@@ -130,7 +132,7 @@ export const DataSheetConfigDialog: Component<DataSheetConfigDialogProps> = (pro
130
132
  />
131
133
  )}
132
134
  </DataSheet.Column>
133
- <DataSheet.Column<EditColumnItem> key="hidden" header="Hidden" sortable={false}>
135
+ <DataSheet.Column<EditColumnItem> key="hidden" header={i18n.t("dataSheetConfigDialog.hidden")} sortable={false}>
134
136
  {(ctx) => (
135
137
  <Checkbox
136
138
  inset
@@ -139,13 +141,13 @@ export const DataSheetConfigDialog: Component<DataSheetConfigDialogProps> = (pro
139
141
  />
140
142
  )}
141
143
  </DataSheet.Column>
142
- <DataSheet.Column<EditColumnItem> key="width" header="Width" sortable={false}>
144
+ <DataSheet.Column<EditColumnItem> key="width" header={i18n.t("dataSheetConfigDialog.width")} sortable={false}>
143
145
  {(ctx) => (
144
146
  <TextInput
145
147
  value={ctx.item.width}
146
148
  onValueChange={(v) => updateItem(ctx.item.key, "width", v)}
147
149
  inset
148
- placeholder="auto"
150
+ placeholder={i18n.t("dataSheetConfigDialog.autoPlaceholder")}
149
151
  />
150
152
  )}
151
153
  </DataSheet.Column>
@@ -154,12 +156,12 @@ export const DataSheetConfigDialog: Component<DataSheetConfigDialogProps> = (pro
154
156
 
155
157
  <div class={footerClass}>
156
158
  <Button onClick={handleReset} theme="warning" variant="solid">
157
- Reset
159
+ {i18n.t("dataSheetConfigDialog.reset")}
158
160
  </Button>
159
161
  <div class={footerActionsClass}>
160
- <Button onClick={() => dialog?.close(undefined)}>Cancel</Button>
162
+ <Button onClick={() => dialog?.close(undefined)}>{i18n.t("dataSheetConfigDialog.cancel")}</Button>
161
163
  <Button onClick={handleOk} theme="primary" variant="solid">
162
- Confirm
164
+ {i18n.t("dataSheetConfigDialog.confirm")}
163
165
  </Button>
164
166
  </div>
165
167
  </div>
@@ -138,7 +138,7 @@ export interface DataSheetReorderEvent<TItem> {
138
138
  position: DataSheetDragPosition;
139
139
  }
140
140
 
141
- // Column information passed to config modal
141
+ // Column information passed to config dialog
142
142
  export interface DataSheetConfigColumnInfo {
143
143
  key: string;
144
144
  header: string[];
@@ -21,7 +21,7 @@ import { createMountTransition } from "../../hooks/createMountTransition";
21
21
  import { startPointerDrag } from "../../helpers/startPointerDrag";
22
22
  import { createSlotComponent } from "../../helpers/createSlotComponent";
23
23
  import { mergeStyles } from "../../helpers/mergeStyles";
24
- import { useI18nOptional } from "../../providers/i18n/I18nContext";
24
+ import { useI18n } from "../../providers/i18n/I18nContext";
25
25
  import { Icon } from "../display/Icon";
26
26
  import { borderSubtle } from "../../styles/tokens.styles";
27
27
  import { DialogDefaultsContext } from "./DialogContext";
@@ -39,7 +39,7 @@ const DialogHeader = createSlotComponent(DialogSlotsContext, (ctx) => ctx.setHea
39
39
  const DialogAction = createSlotComponent(DialogSlotsContext, (ctx) => ctx.setAction);
40
40
 
41
41
  export interface DialogProps {
42
- /** Modal open state */
42
+ /** Dialog open state */
43
43
  open?: boolean;
44
44
  /** Callback when open state changes */
45
45
  onOpenChange?: (open: boolean) => void;
@@ -146,7 +146,7 @@ interface DialogComponent extends ParentComponent<DialogProps> {
146
146
 
147
147
  export const Dialog: DialogComponent = (props) => {
148
148
  const dialogDefaults = useContext(DialogDefaultsContext);
149
- const i18n = useI18nOptional();
149
+ const i18n = useI18n();
150
150
 
151
151
  const [local] = splitProps(props, [
152
152
  "open",
@@ -479,10 +479,10 @@ export const Dialog: DialogComponent = (props) => {
479
479
  <Show when={mounted()}>
480
480
  <Portal>
481
481
  <DialogSlotsContext.Provider value={{ setHeader, setAction }}>
482
- <div ref={setWrapperRef} data-modal class={wrapperClass()}>
482
+ <div ref={setWrapperRef} data-dialog class={wrapperClass()}>
483
483
  {/* Backdrop */}
484
484
  <Show when={!local.float}>
485
- <div data-modal-backdrop class={backdropClass()} onClick={handleBackdropClick} />
485
+ <div data-dialog-backdrop class={backdropClass()} onClick={handleBackdropClick} />
486
486
  </Show>
487
487
 
488
488
  {/* Dialog */}
@@ -490,7 +490,7 @@ export const Dialog: DialogComponent = (props) => {
490
490
  ref={(el) => {
491
491
  dialogRef = el;
492
492
  }}
493
- data-modal-dialog
493
+ data-dialog-panel
494
494
  role="dialog"
495
495
  aria-modal={local.float ? undefined : true}
496
496
  aria-labelledby={hasHeader() ? headerId : undefined}
@@ -503,7 +503,7 @@ export const Dialog: DialogComponent = (props) => {
503
503
  {/* Header */}
504
504
  <Show when={hasHeader()}>
505
505
  <div
506
- data-modal-header
506
+ data-dialog-header
507
507
  class={clsx(headerClass(), "touch-none")}
508
508
  style={
509
509
  typeof local.headerStyle === "string"
@@ -518,10 +518,10 @@ export const Dialog: DialogComponent = (props) => {
518
518
  <Show when={action()}>{action()!()}</Show>
519
519
  <Show when={local.closable ?? true}>
520
520
  <Button
521
- data-modal-close
521
+ data-dialog-close
522
522
  size={"sm"}
523
523
  variant={"ghost"}
524
- aria-label={i18n?.t("dialog.close") ?? "Close dialog"}
524
+ aria-label={i18n.t("dialog.close")}
525
525
  onClick={handleCloseClick}
526
526
  >
527
527
  <Icon icon={IconX} />
@@ -531,7 +531,7 @@ export const Dialog: DialogComponent = (props) => {
531
531
  </Show>
532
532
 
533
533
  {/* Content */}
534
- <div data-modal-content class={dialogContentClass}>
534
+ <div data-dialog-content class={dialogContentClass}>
535
535
  {local.children}
536
536
  </div>
537
537
 
@@ -2,7 +2,7 @@
2
2
  * Dialog z-index registry
3
3
  *
4
4
  * Manages z-index of open Dialogs to prevent infinite increase.
5
- * Base starting value is 2000 (same as tailwind z-modal), uses only as many as there are open Dialogs.
5
+ * Base starting value is 2000 (same as tailwind z-dialog), uses only as many as there are open Dialogs.
6
6
  */
7
7
 
8
8
  const BASE_Z = 2000;
@@ -22,7 +22,7 @@ import { createTopbarActions, TopbarContext } from "../../layout/topbar/TopbarCo
22
22
  import { useDialogInstance } from "../../disclosure/DialogInstanceContext";
23
23
  import { Dialog } from "../../disclosure/Dialog";
24
24
  import { createEventListener } from "@solid-primitives/event-listener";
25
- import { useI18nOptional } from "../../../providers/i18n/I18nContext";
25
+ import { useI18n } from "../../../providers/i18n/I18nContext";
26
26
  import clsx from "clsx";
27
27
  import {
28
28
  IconCheck,
@@ -64,11 +64,11 @@ const CrudDetailBase = <TData extends object>(props: CrudDetailProps<TData>) =>
64
64
  ]);
65
65
 
66
66
  const noti = useNotification();
67
- const i18n = useI18nOptional();
67
+ const i18n = useI18n();
68
68
  const topbarCtx = useContext(TopbarContext);
69
69
  const dialogInstance = useDialogInstance<boolean>();
70
70
 
71
- const isModal = dialogInstance !== undefined;
71
+ const isInDialog = dialogInstance !== undefined;
72
72
 
73
73
  const canEdit = () => local.editable ?? true;
74
74
 
@@ -96,7 +96,7 @@ const CrudDetailBase = <TData extends object>(props: CrudDetailProps<TData>) =>
96
96
  originalData = objClone(result.data);
97
97
  setInfo(result.info);
98
98
  } catch (err) {
99
- noti.error(err, i18n?.t("crudDetail.lookupFailed") ?? "Lookup failed");
99
+ noti.error(err, i18n.t("crudDetail.lookupFailed"));
100
100
  }
101
101
  setBusyCount((c) => c - 1);
102
102
  setReady(true);
@@ -119,7 +119,7 @@ const CrudDetailBase = <TData extends object>(props: CrudDetailProps<TData>) =>
119
119
  // -- Refresh --
120
120
  async function handleRefresh() {
121
121
  if (hasChanges()) {
122
- if (!confirm(i18n?.t("crudDetail.discardChanges") ?? "Discard changes?")) return;
122
+ if (!confirm(i18n.t("crudDetail.discardChanges"))) return;
123
123
  }
124
124
  await doLoad();
125
125
  }
@@ -131,7 +131,7 @@ const CrudDetailBase = <TData extends object>(props: CrudDetailProps<TData>) =>
131
131
 
132
132
  const currentInfo = info();
133
133
  if (currentInfo && !currentInfo.isNew && !hasChanges()) {
134
- noti.info(i18n?.t("crudDetail.notice") ?? "Notice", i18n?.t("crudDetail.noChanges") ?? "No changes to save.");
134
+ noti.info(i18n.t("crudDetail.notice"), i18n.t("crudDetail.noChanges"));
135
135
  return;
136
136
  }
137
137
 
@@ -139,7 +139,7 @@ const CrudDetailBase = <TData extends object>(props: CrudDetailProps<TData>) =>
139
139
  try {
140
140
  const result = await local.submit(objClone(unwrap(data)));
141
141
  if (result) {
142
- noti.success(i18n?.t("crudDetail.saveCompleted") ?? "Save completed", i18n?.t("crudDetail.saveSuccess") ?? "Saved successfully.");
142
+ noti.success(i18n.t("crudDetail.saveCompleted"), i18n.t("crudDetail.saveSuccess"));
143
143
  if (dialogInstance) {
144
144
  dialogInstance.close(true);
145
145
  } else {
@@ -147,7 +147,7 @@ const CrudDetailBase = <TData extends object>(props: CrudDetailProps<TData>) =>
147
147
  }
148
148
  }
149
149
  } catch (err) {
150
- noti.error(err, i18n?.t("crudDetail.saveFailed") ?? "Save failed");
150
+ noti.error(err, i18n.t("crudDetail.saveFailed"));
151
151
  }
152
152
  setBusyCount((c) => c - 1);
153
153
  }
@@ -171,7 +171,7 @@ const CrudDetailBase = <TData extends object>(props: CrudDetailProps<TData>) =>
171
171
  try {
172
172
  const result = await local.toggleDelete(del);
173
173
  if (result) {
174
- noti.success(del ? (i18n?.t("crudDetail.deleteCompleted") ?? "Delete completed") : (i18n?.t("crudDetail.restoreCompleted") ?? "Restore completed"), del ? (i18n?.t("crudDetail.deleteSuccess") ?? "Deleted successfully.") : (i18n?.t("crudDetail.restoreSuccess") ?? "Restored successfully."));
174
+ noti.success(del ? i18n.t("crudDetail.deleteCompleted") : i18n.t("crudDetail.restoreCompleted"), del ? i18n.t("crudDetail.deleteSuccess") : i18n.t("crudDetail.restoreSuccess"));
175
175
  if (dialogInstance) {
176
176
  dialogInstance.close(true);
177
177
  } else {
@@ -179,7 +179,7 @@ const CrudDetailBase = <TData extends object>(props: CrudDetailProps<TData>) =>
179
179
  }
180
180
  }
181
181
  } catch (err) {
182
- noti.error(err, del ? (i18n?.t("crudDetail.deleteFailed") ?? "Delete failed") : (i18n?.t("crudDetail.restoreFailed") ?? "Restore failed"));
182
+ noti.error(err, del ? i18n.t("crudDetail.deleteFailed") : i18n.t("crudDetail.restoreFailed"));
183
183
  }
184
184
  setBusyCount((c) => c - 1);
185
185
  }
@@ -211,7 +211,7 @@ const CrudDetailBase = <TData extends object>(props: CrudDetailProps<TData>) =>
211
211
  onClick={() => formRef?.requestSubmit()}
212
212
  >
213
213
  <Icon icon={IconDeviceFloppy} class="mr-1" />
214
- {i18n?.t("crudDetail.save") ?? "Save"}
214
+ {i18n.t("crudDetail.save")}
215
215
  </Button>
216
216
  </Show>
217
217
  <Show
@@ -227,13 +227,13 @@ const CrudDetailBase = <TData extends object>(props: CrudDetailProps<TData>) =>
227
227
  onClick={() => void handleToggleDelete()}
228
228
  >
229
229
  <Icon icon={info()!.isDeleted ? IconTrashOff : IconTrash} class="mr-1" />
230
- {info()!.isDeleted ? (i18n?.t("crudDetail.restore") ?? "Restore") : (i18n?.t("crudDetail.delete") ?? "Delete")}
230
+ {info()!.isDeleted ? i18n.t("crudDetail.restore") : i18n.t("crudDetail.delete")}
231
231
  </Button>
232
232
  )}
233
233
  </Show>
234
234
  <Button size="lg" variant="ghost" theme="info" onClick={() => void handleRefresh()}>
235
235
  <Icon icon={IconRefresh} class="mr-1" />
236
- {i18n?.t("crudDetail.refresh") ?? "Refresh"}
236
+ {i18n.t("crudDetail.refresh")}
237
237
  </Button>
238
238
  </>
239
239
  ));
@@ -272,8 +272,8 @@ const CrudDetailBase = <TData extends object>(props: CrudDetailProps<TData>) =>
272
272
  // -- Render --
273
273
  return (
274
274
  <>
275
- {/* Modal mode: Dialog.Action (refresh button in header) */}
276
- <Show when={isModal}>
275
+ {/* Dialog mode: Dialog.Action (refresh button in header) */}
276
+ <Show when={isInDialog}>
277
277
  <Dialog.Action>
278
278
  <Button size={"sm"} variant={"ghost"} onClick={() => void handleRefresh()}>
279
279
  <Icon icon={IconRefresh} />
@@ -287,9 +287,9 @@ const CrudDetailBase = <TData extends object>(props: CrudDetailProps<TData>) =>
287
287
  class={clsx("flex h-full flex-col gap-2", local.class)}
288
288
  >
289
289
  {/* Toolbar */}
290
- <Show when={(!isModal && !topbarCtx) || defs().tools}>
290
+ <Show when={(!isInDialog && !topbarCtx) || defs().tools}>
291
291
  <div class="flex gap-2 pb-0">
292
- <Show when={!topbarCtx && !isModal}>
292
+ <Show when={!topbarCtx && !isInDialog}>
293
293
  <Show when={canEdit() && local.submit}>
294
294
  <Button
295
295
  size="sm"
@@ -298,7 +298,7 @@ const CrudDetailBase = <TData extends object>(props: CrudDetailProps<TData>) =>
298
298
  onClick={() => formRef?.requestSubmit()}
299
299
  >
300
300
  <Icon icon={IconDeviceFloppy} class="mr-1" />
301
- {i18n?.t("crudDetail.save") ?? "Save"}
301
+ {i18n.t("crudDetail.save")}
302
302
  </Button>
303
303
  </Show>
304
304
  <Show
@@ -318,13 +318,13 @@ const CrudDetailBase = <TData extends object>(props: CrudDetailProps<TData>) =>
318
318
  onClick={() => void handleToggleDelete()}
319
319
  >
320
320
  <Icon icon={info()!.isDeleted ? IconTrashOff : IconTrash} class="mr-1" />
321
- {info()!.isDeleted ? (i18n?.t("crudDetail.restore") ?? "Restore") : (i18n?.t("crudDetail.delete") ?? "Delete")}
321
+ {info()!.isDeleted ? i18n.t("crudDetail.restore") : i18n.t("crudDetail.delete")}
322
322
  </Button>
323
323
  )}
324
324
  </Show>
325
325
  <Button size="sm" theme="info" variant="ghost" onClick={() => void handleRefresh()}>
326
326
  <Icon icon={IconRefresh} class="mr-1" />
327
- {i18n?.t("crudDetail.refresh") ?? "Refresh"}
327
+ {i18n.t("crudDetail.refresh")}
328
328
  </Button>
329
329
  </Show>
330
330
  <Show when={defs().tools}>{(toolsDef) => toolsDef().children}</Show>
@@ -343,7 +343,7 @@ const CrudDetailBase = <TData extends object>(props: CrudDetailProps<TData>) =>
343
343
  <Show when={info()?.lastModifiedAt}>
344
344
  {(_) => (
345
345
  <div class="px-2 pb-1 text-xs text-base-400">
346
- {i18n?.t("crudDetail.lastModified") ?? "Last modified"}: {info()!.lastModifiedAt!.toFormatString("yyyy-MM-dd HH:mm")}
346
+ {i18n.t("crudDetail.lastModified")}: {info()!.lastModifiedAt!.toFormatString("yyyy-MM-dd HH:mm")}
347
347
  <Show when={info()?.lastModifiedBy}> ({info()!.lastModifiedBy})</Show>
348
348
  </div>
349
349
  )}
@@ -352,8 +352,8 @@ const CrudDetailBase = <TData extends object>(props: CrudDetailProps<TData>) =>
352
352
  {/* After (outside form) */}
353
353
  <Show when={defs().after}>{(afterDef) => afterDef().children}</Show>
354
354
 
355
- {/* Modal mode: bottom bar */}
356
- <Show when={isModal && canEdit()}>
355
+ {/* Dialog mode: bottom bar */}
356
+ <Show when={isInDialog && canEdit()}>
357
357
  <div class="flex gap-2 border-t border-base-200 px-3 py-1.5">
358
358
  <div class="flex-1" />
359
359
  <Show
@@ -362,7 +362,7 @@ const CrudDetailBase = <TData extends object>(props: CrudDetailProps<TData>) =>
362
362
  {(_) => (
363
363
  <Button variant={"solid"} theme="danger" onClick={() => void handleToggleDelete()}>
364
364
  <Icon icon={info()!.isDeleted ? IconTrashOff : IconTrash} class="mr-1" />
365
- {info()!.isDeleted ? (i18n?.t("crudDetail.restore") ?? "Restore") : (i18n?.t("crudDetail.delete") ?? "Delete")}
365
+ {info()!.isDeleted ? i18n.t("crudDetail.restore") : i18n.t("crudDetail.delete")}
366
366
  </Button>
367
367
  )}
368
368
  </Show>
@@ -374,7 +374,7 @@ const CrudDetailBase = <TData extends object>(props: CrudDetailProps<TData>) =>
374
374
  class={"gap-1"}
375
375
  >
376
376
  <Icon icon={IconCheck} />
377
- {i18n?.t("crudDetail.confirm") ?? "Confirm"}
377
+ {i18n.t("crudDetail.confirm")}
378
378
  </Button>
379
379
  </Show>
380
380
  </div>