@godxjp/ui 5.0.2 → 6.0.1

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 (242) hide show
  1. package/README.md +101 -142
  2. package/dist/app/index.d.ts +140 -0
  3. package/dist/app/index.js +38 -0
  4. package/dist/app.prop-IobwLwaM.d.ts +90 -0
  5. package/dist/checkbox-NkFkqsQ8.d.ts +13 -0
  6. package/dist/chunk-2XW7J3EI.js +226 -0
  7. package/dist/chunk-3F2AKYRD.js +416 -0
  8. package/dist/chunk-3KPEZ5CF.js +37 -0
  9. package/dist/chunk-3UGU5TYP.js +89 -0
  10. package/dist/chunk-6RA3KSVK.js +588 -0
  11. package/dist/chunk-7NZFVD24.js +122 -0
  12. package/dist/chunk-7PWBC4BY.js +25 -0
  13. package/dist/chunk-7S7MYFXE.js +61 -0
  14. package/dist/chunk-7WRZG2IG.js +71 -0
  15. package/dist/chunk-B775Y6BE.js +1 -0
  16. package/dist/chunk-BHV2FUOA.js +111 -0
  17. package/dist/chunk-BI3HERR7.js +70 -0
  18. package/dist/chunk-BPSKQUL2.js +68 -0
  19. package/dist/chunk-CDWPQ5RP.js +187 -0
  20. package/dist/chunk-CP2LET6N.js +244 -0
  21. package/dist/chunk-CQBADMFG.js +20 -0
  22. package/dist/chunk-CRERCLIZ.js +33 -0
  23. package/dist/chunk-DU6ZYZRP.js +238 -0
  24. package/dist/chunk-DY5C44UP.js +55 -0
  25. package/dist/chunk-E4HJNQ62.js +117 -0
  26. package/dist/chunk-E76QIYSY.js +93 -0
  27. package/dist/chunk-F7PG4OEV.js +37 -0
  28. package/dist/chunk-GDSVW62T.js +171 -0
  29. package/dist/chunk-H2FHJOLU.js +178 -0
  30. package/dist/chunk-HJEBRCXL.js +55 -0
  31. package/dist/chunk-ICM6XBST.js +16 -0
  32. package/dist/chunk-IK7I3ABN.js +88 -0
  33. package/dist/chunk-L6J44O74.js +144 -0
  34. package/dist/chunk-LDSLS6HE.js +1 -0
  35. package/dist/chunk-LVNUHUEZ.js +191 -0
  36. package/dist/chunk-M64MVRLS.js +92 -0
  37. package/dist/chunk-NGQW3KEM.js +402 -0
  38. package/dist/chunk-NZ4FOC5N.js +559 -0
  39. package/dist/chunk-PIIRNAXA.js +26 -0
  40. package/dist/chunk-S66TJXJU.js +33 -0
  41. package/dist/chunk-SMLKNECP.js +133 -0
  42. package/dist/chunk-TAHBM3F2.js +66 -0
  43. package/dist/chunk-TO33OY4L.js +150 -0
  44. package/dist/chunk-TO7URV7U.js +51 -0
  45. package/dist/chunk-TOO5AEKL.js +81 -0
  46. package/dist/chunk-U3GHAOIJ.js +299 -0
  47. package/dist/chunk-U7N2A7A3.js +9 -0
  48. package/dist/chunk-UX634MYF.js +123 -0
  49. package/dist/chunk-V6UWJKZF.js +28 -0
  50. package/dist/chunk-VOHTRR5X.js +28 -0
  51. package/dist/chunk-WRFKVUPW.js +332 -0
  52. package/dist/chunk-WXW43RK5.js +24 -0
  53. package/dist/chunk-XG7XDYIM.js +60 -0
  54. package/dist/chunk-YFCQKO3B.js +842 -0
  55. package/dist/chunk-ZDWXGWLY.js +73 -0
  56. package/dist/chunk-ZLK5SPT6.js +11 -0
  57. package/dist/chunk-ZS6DTAM2.js +31 -0
  58. package/dist/chunk-ZT5UEUBO.js +1 -0
  59. package/dist/components/admin/index.d.ts +80 -0
  60. package/dist/components/admin/index.js +38 -0
  61. package/dist/components/data-display/badge.d.ts +12 -0
  62. package/dist/components/data-display/badge.js +3 -0
  63. package/dist/components/data-display/card.d.ts +87 -0
  64. package/dist/components/data-display/card.js +2 -0
  65. package/dist/components/data-display/index.d.ts +72 -0
  66. package/dist/components/data-display/index.js +89 -0
  67. package/dist/components/data-display/popover.d.ts +13 -0
  68. package/dist/components/data-display/popover.js +2 -0
  69. package/dist/components/data-display/scroll-area.d.ts +7 -0
  70. package/dist/components/data-display/scroll-area.js +2 -0
  71. package/dist/components/data-display/table.d.ts +10 -0
  72. package/dist/components/data-display/table.js +3 -0
  73. package/dist/components/data-entry/autocomplete.d.ts +16 -0
  74. package/dist/components/data-entry/autocomplete.js +8 -0
  75. package/dist/components/data-entry/calendar.d.ts +16 -0
  76. package/dist/components/data-entry/calendar.js +4 -0
  77. package/dist/components/data-entry/cascader.d.ts +32 -0
  78. package/dist/components/data-entry/cascader.js +13 -0
  79. package/dist/components/data-entry/checkbox.d.ts +13 -0
  80. package/dist/components/data-entry/checkbox.js +4 -0
  81. package/dist/components/data-entry/color-picker.d.ts +16 -0
  82. package/dist/components/data-entry/color-picker.js +6 -0
  83. package/dist/components/data-entry/command.d.ts +69 -0
  84. package/dist/components/data-entry/command.js +3 -0
  85. package/dist/components/data-entry/date-picker.d.ts +16 -0
  86. package/dist/components/data-entry/date-picker.js +8 -0
  87. package/dist/components/data-entry/date-range-picker.d.ts +16 -0
  88. package/dist/components/data-entry/date-range-picker.js +8 -0
  89. package/dist/components/data-entry/index.d.ts +53 -0
  90. package/dist/components/data-entry/index.js +152 -0
  91. package/dist/components/data-entry/input.d.ts +6 -0
  92. package/dist/components/data-entry/input.js +2 -0
  93. package/dist/components/data-entry/label.d.ts +8 -0
  94. package/dist/components/data-entry/label.js +2 -0
  95. package/dist/components/data-entry/radio.d.ts +24 -0
  96. package/dist/components/data-entry/radio.js +4 -0
  97. package/dist/components/data-entry/select.d.ts +18 -0
  98. package/dist/components/data-entry/select.js +3 -0
  99. package/dist/components/data-entry/slider.d.ts +16 -0
  100. package/dist/components/data-entry/slider.js +2 -0
  101. package/dist/components/data-entry/switch.d.ts +17 -0
  102. package/dist/components/data-entry/switch.js +2 -0
  103. package/dist/components/data-entry/textarea.d.ts +6 -0
  104. package/dist/components/data-entry/textarea.js +3 -0
  105. package/dist/components/data-entry/time-picker.d.ts +16 -0
  106. package/dist/components/data-entry/time-picker.js +7 -0
  107. package/dist/components/data-entry/transfer.d.ts +17 -0
  108. package/dist/components/data-entry/transfer.js +11 -0
  109. package/dist/components/data-entry/tree-select.d.ts +26 -0
  110. package/dist/components/data-entry/tree-select.js +13 -0
  111. package/dist/components/data-entry/upload.d.ts +42 -0
  112. package/dist/components/data-entry/upload.js +11 -0
  113. package/dist/components/feedback/alert.d.ts +60 -0
  114. package/dist/components/feedback/alert.js +7 -0
  115. package/dist/components/feedback/dialog.d.ts +64 -0
  116. package/dist/components/feedback/dialog.js +7 -0
  117. package/dist/components/feedback/index.d.ts +16 -0
  118. package/dist/components/feedback/index.js +14 -0
  119. package/dist/components/feedback/sheet.d.ts +24 -0
  120. package/dist/components/feedback/sheet.js +2 -0
  121. package/dist/components/feedback/sonner.d.ts +6 -0
  122. package/dist/components/feedback/sonner.js +1 -0
  123. package/dist/components/general/button.d.ts +20 -0
  124. package/dist/components/general/button.js +2 -0
  125. package/dist/components/general/index.d.ts +6 -0
  126. package/dist/components/general/index.js +2 -0
  127. package/dist/components/layout/index.d.ts +71 -0
  128. package/dist/components/layout/index.js +5 -0
  129. package/dist/components/navigation/dropdown-menu.d.ts +28 -0
  130. package/dist/components/navigation/dropdown-menu.js +2 -0
  131. package/dist/components/navigation/index.d.ts +32 -0
  132. package/dist/components/navigation/index.js +12 -0
  133. package/dist/components/navigation/pagination.d.ts +11 -0
  134. package/dist/components/navigation/pagination.js +7 -0
  135. package/dist/components/navigation/steps.d.ts +12 -0
  136. package/dist/components/navigation/steps.js +3 -0
  137. package/dist/components/navigation/tabs-items.d.ts +12 -0
  138. package/dist/components/navigation/tabs-items.js +3 -0
  139. package/dist/components/navigation/tabs.d.ts +12 -0
  140. package/dist/components/navigation/tabs.js +2 -0
  141. package/dist/components/query/index.d.ts +43 -0
  142. package/dist/components/query/index.js +8 -0
  143. package/dist/components/ui/index.d.ts +57 -0
  144. package/dist/components/ui/index.js +37 -0
  145. package/dist/content.prop-D1Dd3TAc.d.ts +31 -0
  146. package/dist/data-display.prop-DNTAzmDy.d.ts +58 -0
  147. package/dist/data-entry.prop-BEGA1lTq.d.ts +323 -0
  148. package/dist/data-table-D1u_rKLK.d.ts +83 -0
  149. package/dist/data.prop-BVvfKC_g.d.ts +41 -0
  150. package/dist/feedback.prop-BmxUlpAW.d.ts +64 -0
  151. package/dist/filter-bar-B7OGFO9S.d.ts +10 -0
  152. package/dist/form/index.d.ts +21 -0
  153. package/dist/form/index.js +4 -0
  154. package/dist/form.prop-BHgpuFFm.d.ts +41 -0
  155. package/dist/format-date-ByyZoqI5.d.ts +51 -0
  156. package/dist/general.prop-D7brMPNL.d.ts +16 -0
  157. package/dist/i18n/index.d.ts +217 -0
  158. package/dist/i18n/index.js +2 -0
  159. package/dist/index.d.ts +46 -26
  160. package/dist/index.js +39 -13062
  161. package/dist/inline-C5u6ptJV.d.ts +10 -0
  162. package/dist/interaction.prop-Cdn7wOtq.d.ts +25 -0
  163. package/dist/layout.prop-4TCNvyQZ.d.ts +20 -0
  164. package/dist/layout.prop-C795F0qg.d.ts +112 -0
  165. package/dist/lib/datetime/index.d.ts +31 -0
  166. package/dist/lib/datetime/index.js +1 -0
  167. package/dist/lib/utils.d.ts +5 -0
  168. package/dist/lib/utils.js +1 -0
  169. package/dist/navigation.prop-DpZqcXey.d.ts +78 -0
  170. package/dist/navigation.prop-DxBiClEH.d.ts +20 -0
  171. package/dist/props/components/index.d.ts +27 -0
  172. package/dist/props/components/index.js +1 -0
  173. package/dist/props/index.d.ts +28 -0
  174. package/dist/props/index.js +3 -0
  175. package/dist/props/registry.d.ts +649 -0
  176. package/dist/props/registry.js +1 -0
  177. package/dist/props/vocabulary/index.d.ts +7 -0
  178. package/dist/props/vocabulary/index.js +1 -0
  179. package/dist/query.prop-hIPrk2zI.d.ts +71 -0
  180. package/dist/search-input-uP01rY1L.d.ts +22 -0
  181. package/dist/shared.prop-BNRJc9K0.d.ts +45 -0
  182. package/dist/styles/alert-layout.css +191 -0
  183. package/dist/styles/badge-layout.css +22 -0
  184. package/dist/styles/card-layout.css +373 -0
  185. package/dist/styles/control.css +504 -0
  186. package/dist/styles/data-display-layout.css +246 -0
  187. package/dist/styles/density.css +43 -0
  188. package/dist/styles/dialog-layout.css +84 -0
  189. package/dist/styles/index.css +105 -0
  190. package/dist/styles/layout.css +479 -0
  191. package/dist/styles/shell-layout.css +604 -0
  192. package/dist/styles/table-layout.css +109 -0
  193. package/dist/theme/example.service.css +37 -0
  194. package/dist/tokens/base.css +13 -0
  195. package/dist/tokens/foundation.css +151 -0
  196. package/dist/tokens/primitives/badge.css +13 -0
  197. package/dist/tokens/primitives/card.css +29 -0
  198. package/dist/tokens/primitives/control.css +55 -0
  199. package/dist/tokens/primitives/feedback.css +17 -0
  200. package/dist/tokens/primitives/layout.css +20 -0
  201. package/dist/tokens/primitives/navigation.css +13 -0
  202. package/dist/tokens/primitives/table.css +10 -0
  203. package/dist/types-mvzYGrma.d.ts +37 -0
  204. package/dist/use-toast-Dol5bdY3.d.ts +34 -0
  205. package/package.json +279 -117
  206. package/scripts/ui-audit.mjs +179 -0
  207. package/BRAND.md +0 -296
  208. package/CHANGELOG.md +0 -668
  209. package/config/eslint.js +0 -54
  210. package/config/prettier.cjs +0 -20
  211. package/config/tsconfig.base.json +0 -22
  212. package/config/vitest.base.ts +0 -26
  213. package/dist/MiniMonth-YAmPGEpC.d.ts +0 -143
  214. package/dist/Table.types-BbsxoIYE.d.ts +0 -352
  215. package/dist/color-DO0qqUAb.d.ts +0 -38
  216. package/dist/components/composites.d.ts +0 -963
  217. package/dist/components/composites.js +0 -7343
  218. package/dist/components/composites.js.map +0 -1
  219. package/dist/components/primitives.d.ts +0 -2744
  220. package/dist/components/primitives.js +0 -7356
  221. package/dist/components/primitives.js.map +0 -1
  222. package/dist/components/shell.d.ts +0 -182
  223. package/dist/components/shell.js +0 -774
  224. package/dist/components/shell.js.map +0 -1
  225. package/dist/hooks.d.ts +0 -100
  226. package/dist/hooks.js +0 -558
  227. package/dist/hooks.js.map +0 -1
  228. package/dist/i18n.d.ts +0 -61
  229. package/dist/i18n.js +0 -860
  230. package/dist/i18n.js.map +0 -1
  231. package/dist/index.js.map +0 -1
  232. package/dist/padding-DY0JV5Ja.d.ts +0 -16
  233. package/dist/preferences.d.ts +0 -132
  234. package/dist/preferences.js +0 -262
  235. package/dist/preferences.js.map +0 -1
  236. package/dist/props.d.ts +0 -86
  237. package/dist/props.js +0 -16
  238. package/dist/props.js.map +0 -1
  239. package/dist/size-CQwNvOWd.d.ts +0 -19
  240. package/dist/types-LTj-2bl-.d.ts +0 -30
  241. package/dist/useTableViews-D5NIAJ7h.d.ts +0 -154
  242. package/src/tokens/tailwind.css +0 -158
package/dist/hooks.js DELETED
@@ -1,558 +0,0 @@
1
- import { useState, useEffect, useCallback, useSyncExternalStore, useMemo } from 'react';
2
- import i18next from 'i18next';
3
- import 'i18next-browser-languagedetector';
4
- import 'react-i18next';
5
-
6
- // src/hooks/useTweaks.ts
7
-
8
- // src/preferences/holder.ts
9
- var DEFAULT = {
10
- locale: "ja",
11
- timezone: "Asia/Tokyo"
12
- };
13
- var CURRENT = { ...DEFAULT };
14
- var subscribers = /* @__PURE__ */ new Set();
15
- function getGodxConfig() {
16
- return CURRENT;
17
- }
18
- function subscribeGodxConfig(fn) {
19
- subscribers.add(fn);
20
- return () => {
21
- subscribers.delete(fn);
22
- };
23
- }
24
-
25
- // src/i18n/format.ts
26
- function resolveLocale(opts) {
27
- return opts?.locale ?? getGodxConfig().locale;
28
- }
29
- function resolveTimezone(opts) {
30
- return opts?.timezone ?? getGodxConfig().timezone;
31
- }
32
- function toDate(value) {
33
- if (value instanceof Date) return value;
34
- if (typeof value === "number") return new Date(value);
35
- if (typeof value === "string") return new Date(value);
36
- if (typeof value === "object" && value !== null && "toDate" in value) {
37
- const v = value;
38
- return v.toDate(getGodxConfig().timezone);
39
- }
40
- throw new TypeError(`format helpers: unsupported value ${String(value)}`);
41
- }
42
- function extractIntlOpts(opts) {
43
- if (!opts) return {};
44
- const { locale: _l, timezone: _t, ...rest } = opts;
45
- return rest;
46
- }
47
- function formatDate(value, opts) {
48
- const locale = resolveLocale(opts);
49
- const timezone = resolveTimezone(opts);
50
- const intlOpts = {
51
- dateStyle: "medium",
52
- ...extractIntlOpts(opts),
53
- timeZone: timezone
54
- };
55
- return new Intl.DateTimeFormat(locale, intlOpts).format(toDate(value));
56
- }
57
- function formatTime(value, opts) {
58
- const locale = resolveLocale(opts);
59
- const timezone = resolveTimezone(opts);
60
- const intlOpts = {
61
- timeStyle: "short",
62
- ...extractIntlOpts(opts),
63
- timeZone: timezone
64
- };
65
- return new Intl.DateTimeFormat(locale, intlOpts).format(toDate(value));
66
- }
67
- function formatDateTime(value, opts) {
68
- const locale = resolveLocale(opts);
69
- const timezone = resolveTimezone(opts);
70
- const intlOpts = {
71
- dateStyle: "medium",
72
- timeStyle: "short",
73
- ...extractIntlOpts(opts),
74
- timeZone: timezone
75
- };
76
- return new Intl.DateTimeFormat(locale, intlOpts).format(toDate(value));
77
- }
78
- function formatNumber(value, opts) {
79
- const locale = resolveLocale(opts);
80
- return new Intl.NumberFormat(locale, extractIntlOpts(opts)).format(value);
81
- }
82
- function formatCurrency(value, opts) {
83
- const locale = resolveLocale(opts);
84
- const intlOpts = {
85
- style: "currency",
86
- ...extractIntlOpts(opts)
87
- };
88
- return new Intl.NumberFormat(locale, intlOpts).format(value);
89
- }
90
-
91
- // src/i18n/relative.ts
92
- var SECOND = 1e3;
93
- var MINUTE = 60 * SECOND;
94
- var HOUR = 60 * MINUTE;
95
- var DAY = 24 * HOUR;
96
- var WEEK = 7 * DAY;
97
- var MONTH = 30 * DAY;
98
- var YEAR = 365 * DAY;
99
- function toMs(value) {
100
- if (value instanceof Date) return value.getTime();
101
- if (typeof value === "number") return value;
102
- if (typeof value === "string") return new Date(value).getTime();
103
- if (typeof value === "object" && value !== null && "toDate" in value) {
104
- return value.toDate(getGodxConfig().timezone).getTime();
105
- }
106
- throw new TypeError(`formatRelative: unsupported value ${String(value)}`);
107
- }
108
- function formatRelative(value, opts = {}) {
109
- const locale = opts.locale ?? getGodxConfig().locale;
110
- const nowMs = opts.now instanceof Date ? opts.now.getTime() : opts.now ?? Date.now();
111
- const valueMs = toMs(value);
112
- const diffMs = valueMs - nowMs;
113
- const abs = Math.abs(diffMs);
114
- let unit;
115
- let amount;
116
- if (abs < MINUTE) {
117
- unit = "second";
118
- amount = Math.round(diffMs / SECOND);
119
- } else if (abs < HOUR) {
120
- unit = "minute";
121
- amount = Math.round(diffMs / MINUTE);
122
- } else if (abs < DAY) {
123
- unit = "hour";
124
- amount = Math.round(diffMs / HOUR);
125
- } else if (abs < WEEK) {
126
- unit = "day";
127
- amount = Math.round(diffMs / DAY);
128
- } else if (abs < MONTH) {
129
- unit = "week";
130
- amount = Math.round(diffMs / WEEK);
131
- } else if (abs < YEAR) {
132
- unit = "month";
133
- amount = Math.round(diffMs / MONTH);
134
- } else {
135
- unit = "year";
136
- amount = Math.round(diffMs / YEAR);
137
- }
138
- return new Intl.RelativeTimeFormat(locale, {
139
- numeric: opts.numeric ?? "auto",
140
- style: opts.style ?? "long"
141
- }).format(amount, unit);
142
- }
143
-
144
- // src/i18n/index.ts
145
- var GODX_LOCALE_STORAGE_KEY = "godx.locale";
146
- var i18n_default = i18next;
147
-
148
- // src/hooks/useTweaks.ts
149
- var STORAGE_KEY = "godx.tweaks";
150
- var DEFAULTS = {
151
- density: "default",
152
- theme: "light",
153
- tenant: "godx",
154
- locale: "ja",
155
- sidebarCollapsed: false
156
- };
157
- function loadInitial() {
158
- if (typeof window === "undefined") return DEFAULTS;
159
- try {
160
- const raw = window.localStorage.getItem(STORAGE_KEY);
161
- const stored = raw ? JSON.parse(raw) : {};
162
- const detected = i18n_default.language?.slice(0, 2) || "ja";
163
- return {
164
- ...DEFAULTS,
165
- ...stored,
166
- locale: stored.locale ?? detected
167
- };
168
- } catch {
169
- return DEFAULTS;
170
- }
171
- }
172
- function useTweaks() {
173
- const [tweaks, setTweaks] = useState(loadInitial);
174
- useEffect(() => {
175
- try {
176
- window.localStorage.setItem(STORAGE_KEY, JSON.stringify(tweaks));
177
- } catch {
178
- }
179
- }, [tweaks]);
180
- useEffect(() => {
181
- const html = document.documentElement;
182
- html.dataset.theme = tweaks.theme;
183
- html.dataset.density = tweaks.density;
184
- html.dataset.tenant = tweaks.tenant;
185
- html.lang = tweaks.locale;
186
- }, [tweaks.theme, tweaks.density, tweaks.tenant, tweaks.locale]);
187
- useEffect(() => {
188
- if (!i18n_default.isInitialized) return;
189
- if (i18n_default.language?.slice(0, 2) !== tweaks.locale) {
190
- void i18n_default.changeLanguage(tweaks.locale);
191
- try {
192
- window.localStorage.setItem(GODX_LOCALE_STORAGE_KEY, tweaks.locale);
193
- } catch {
194
- }
195
- }
196
- }, [tweaks.locale]);
197
- const setTweak = useCallback((key, value) => {
198
- setTweaks((prev) => ({ ...prev, [key]: value }));
199
- }, []);
200
- return { tweaks, setTweak, setTweaks };
201
- }
202
- function productOptions(products) {
203
- return products.map((p) => ({ value: p.tenant, label: p.name }));
204
- }
205
- var BP_ORDER = ["xxl", "xl", "lg", "md", "sm", "xs"];
206
- var BP_ORDER_ASC = ["xs", "sm", "md", "lg", "xl", "xxl"];
207
- var FALLBACK_WIDTH = {
208
- xs: "0px",
209
- sm: "640px",
210
- md: "768px",
211
- lg: "1024px",
212
- xl: "1280px",
213
- xxl: "1536px"
214
- };
215
- function widthOf(bp) {
216
- if (typeof window === "undefined") return FALLBACK_WIDTH[bp];
217
- const v = getComputedStyle(document.documentElement).getPropertyValue(`--breakpoint-${bp}`).trim();
218
- return v || FALLBACK_WIDTH[bp];
219
- }
220
- function currentBreakpoint() {
221
- if (typeof window === "undefined") return "xs";
222
- for (const bp of BP_ORDER) {
223
- if (window.matchMedia(`(min-width: ${widthOf(bp)})`).matches) {
224
- return bp;
225
- }
226
- }
227
- return "xs";
228
- }
229
- function useBreakpoint() {
230
- const [bp, setBp] = useState(() => currentBreakpoint());
231
- useEffect(() => {
232
- if (typeof window === "undefined") return;
233
- const mqls = BP_ORDER.map(
234
- (b) => window.matchMedia(`(min-width: ${widthOf(b)})`)
235
- );
236
- const update = () => setBp(currentBreakpoint());
237
- mqls.forEach((mql) => mql.addEventListener("change", update));
238
- update();
239
- return () => {
240
- mqls.forEach((mql) => mql.removeEventListener("change", update));
241
- };
242
- }, []);
243
- return bp;
244
- }
245
- function matchBreakpoint(current, target) {
246
- return BP_ORDER_ASC.indexOf(current) >= BP_ORDER_ASC.indexOf(target);
247
- }
248
- function useFormatters() {
249
- const { locale, timezone } = useSyncExternalStore(
250
- subscribeGodxConfig,
251
- getGodxConfig,
252
- getGodxConfig
253
- );
254
- return useMemo(
255
- () => ({
256
- locale,
257
- timezone,
258
- formatDate: (value, opts) => formatDate(value, { ...opts, locale, timezone }),
259
- formatTime: (value, opts) => formatTime(value, { ...opts, locale, timezone }),
260
- formatDateTime: (value, opts) => formatDateTime(value, { ...opts, locale, timezone }),
261
- formatRelative: (value, opts) => formatRelative(value, { ...opts, locale }),
262
- formatNumber: (value, opts) => formatNumber(value, { ...opts, locale }),
263
- formatCurrency: (value, opts) => formatCurrency(value, { ...opts, locale })
264
- }),
265
- [locale, timezone]
266
- );
267
- }
268
- function useTablePagination(options = {}) {
269
- const {
270
- defaultPage = 1,
271
- defaultPageSize = 20,
272
- page: controlledPage,
273
- pageSize: controlledPageSize,
274
- onChange
275
- } = options;
276
- const [internalPage, setInternalPage] = useState(defaultPage);
277
- const [internalPageSize, setInternalPageSize] = useState(defaultPageSize);
278
- const page = controlledPage ?? internalPage;
279
- const pageSize = controlledPageSize ?? internalPageSize;
280
- const setPage = useCallback(
281
- (nextPage) => {
282
- if (controlledPage === void 0) setInternalPage(nextPage);
283
- onChange?.(nextPage, pageSize);
284
- },
285
- [controlledPage, onChange, pageSize]
286
- );
287
- const setPageSize = useCallback(
288
- (nextPageSize) => {
289
- if (controlledPageSize === void 0) setInternalPageSize(nextPageSize);
290
- if (controlledPage === void 0) setInternalPage(1);
291
- onChange?.(1, nextPageSize);
292
- },
293
- [controlledPage, controlledPageSize, onChange]
294
- );
295
- const handleChange = useCallback(
296
- (nextPage, nextPageSize) => {
297
- if (controlledPage === void 0) setInternalPage(nextPage);
298
- if (controlledPageSize === void 0) setInternalPageSize(nextPageSize);
299
- onChange?.(nextPage, nextPageSize);
300
- },
301
- [controlledPage, controlledPageSize, onChange]
302
- );
303
- const resetPage = useCallback(() => {
304
- if (controlledPage === void 0) setInternalPage(1);
305
- onChange?.(1, pageSize);
306
- }, [controlledPage, onChange, pageSize]);
307
- const reset = useCallback(() => {
308
- if (controlledPage === void 0) setInternalPage(defaultPage);
309
- if (controlledPageSize === void 0) setInternalPageSize(defaultPageSize);
310
- onChange?.(defaultPage, defaultPageSize);
311
- }, [
312
- controlledPage,
313
- controlledPageSize,
314
- defaultPage,
315
- defaultPageSize,
316
- onChange
317
- ]);
318
- return {
319
- page,
320
- pageSize,
321
- setPage,
322
- setPageSize,
323
- onChange: handleChange,
324
- resetPage,
325
- reset
326
- };
327
- }
328
- function useTableSelection(options = {}) {
329
- const {
330
- mode = "multiple",
331
- defaultSelected = [],
332
- selected: controlledSelected,
333
- onChange
334
- } = options;
335
- const [internal, setInternal] = useState(defaultSelected);
336
- const selectedRowKeys = controlledSelected ?? internal;
337
- const setSelectedRowKeys = useCallback(
338
- (next) => {
339
- if (controlledSelected === void 0) setInternal(next);
340
- onChange?.(next);
341
- },
342
- [controlledSelected, onChange]
343
- );
344
- const select = useCallback(
345
- (key) => {
346
- const next = mode === "single" ? [key] : selectedRowKeys.includes(key) ? selectedRowKeys : [...selectedRowKeys, key];
347
- if (next === selectedRowKeys) return;
348
- setSelectedRowKeys(next);
349
- },
350
- [mode, selectedRowKeys, setSelectedRowKeys]
351
- );
352
- const deselect = useCallback(
353
- (key) => {
354
- if (!selectedRowKeys.includes(key)) return;
355
- setSelectedRowKeys(selectedRowKeys.filter((k) => k !== key));
356
- },
357
- [selectedRowKeys, setSelectedRowKeys]
358
- );
359
- const toggle = useCallback(
360
- (key) => {
361
- if (selectedRowKeys.includes(key)) {
362
- setSelectedRowKeys(selectedRowKeys.filter((k) => k !== key));
363
- } else {
364
- setSelectedRowKeys(mode === "single" ? [key] : [...selectedRowKeys, key]);
365
- }
366
- },
367
- [mode, selectedRowKeys, setSelectedRowKeys]
368
- );
369
- const clear = useCallback(() => {
370
- if (selectedRowKeys.length === 0) return;
371
- setSelectedRowKeys([]);
372
- }, [selectedRowKeys.length, setSelectedRowKeys]);
373
- const isSelected = useCallback(
374
- (key) => selectedRowKeys.includes(key),
375
- [selectedRowKeys]
376
- );
377
- return {
378
- selectedRowKeys,
379
- setSelectedRowKeys,
380
- toggle,
381
- select,
382
- deselect,
383
- clear,
384
- isSelected,
385
- count: selectedRowKeys.length
386
- };
387
- }
388
- function readPersisted(storage, storageKey, currentVersion, migrate) {
389
- if (!storage) return void 0;
390
- try {
391
- const raw = storage.getItem(storageKey);
392
- if (raw === null) return void 0;
393
- const parsed = JSON.parse(raw);
394
- if (typeof parsed !== "object" || parsed === null) return void 0;
395
- const envelope = parsed;
396
- if (typeof envelope.version !== "number" || !("value" in envelope))
397
- return void 0;
398
- if (envelope.version === currentVersion) return envelope.value;
399
- if (migrate)
400
- return migrate({
401
- version: envelope.version,
402
- value: envelope.value
403
- });
404
- return void 0;
405
- } catch {
406
- return void 0;
407
- }
408
- }
409
- function writePersisted(storage, storageKey, version, value) {
410
- if (!storage) return;
411
- try {
412
- storage.setItem(
413
- storageKey,
414
- JSON.stringify({ version, value })
415
- );
416
- } catch {
417
- }
418
- }
419
- function resolveStorage(override) {
420
- if (override !== void 0) return override;
421
- if (typeof window === "undefined") return null;
422
- try {
423
- return window.localStorage;
424
- } catch {
425
- return null;
426
- }
427
- }
428
- function useTableState(options) {
429
- const {
430
- storageKey,
431
- defaultValue,
432
- version = 1,
433
- migrate,
434
- storage: storageOverride
435
- } = options;
436
- const storage = resolveStorage(storageOverride);
437
- const [value, setValue] = useState(() => {
438
- if (storageKey === void 0) return defaultValue;
439
- const persisted = readPersisted(storage, storageKey, version, migrate);
440
- return persisted !== void 0 ? persisted : defaultValue;
441
- });
442
- useEffect(() => {
443
- if (storageKey === void 0) return;
444
- writePersisted(storage, storageKey, version, value);
445
- }, [storage, storageKey, value, version]);
446
- const setNext = useCallback(
447
- (next) => {
448
- setValue(
449
- (prev) => typeof next === "function" ? next(prev) : next
450
- );
451
- },
452
- []
453
- );
454
- return [value, setNext];
455
- }
456
- var CUSTOM_KEY = "custom";
457
- function isPersistableLabel(label) {
458
- return typeof label === "string";
459
- }
460
- function generateKey() {
461
- if (typeof crypto !== "undefined" && "randomUUID" in crypto) {
462
- return `view-${crypto.randomUUID()}`;
463
- }
464
- return `view-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
465
- }
466
- function useTableViews(options) {
467
- const {
468
- items: builtInItems,
469
- defaultActive,
470
- activeKey: controlledActiveKey,
471
- onActiveKeyChange,
472
- onSavedViewsChange,
473
- storageKey,
474
- maxSavedViews = 20
475
- } = options;
476
- const [internalActiveKey, setInternalActiveKey] = useState(
477
- defaultActive ?? builtInItems[0]?.key
478
- );
479
- const activeKey = controlledActiveKey ?? internalActiveKey;
480
- const [savedViews, setSavedViewsState] = useTableState({
481
- storageKey,
482
- defaultValue: [],
483
- version: 1
484
- });
485
- const updateSavedViews = useCallback(
486
- (next) => {
487
- setSavedViewsState((prev) => {
488
- const resolved = typeof next === "function" ? next(prev) : next;
489
- const trimmed = resolved.slice(-maxSavedViews);
490
- onSavedViewsChange?.(trimmed);
491
- return trimmed;
492
- });
493
- },
494
- [maxSavedViews, onSavedViewsChange, setSavedViewsState]
495
- );
496
- const setActiveKey = useCallback(
497
- (key) => {
498
- if (controlledActiveKey === void 0) setInternalActiveKey(key);
499
- onActiveKeyChange?.(key);
500
- },
501
- [controlledActiveKey, onActiveKeyChange]
502
- );
503
- const applyView = useCallback(
504
- (view) => {
505
- setActiveKey(view.key);
506
- return {
507
- filters: view.filters,
508
- sort: view.sort,
509
- columnVisibility: view.columnVisibility
510
- };
511
- },
512
- [setActiveKey]
513
- );
514
- const saveView = useCallback(
515
- (label, snapshot) => {
516
- const next = {
517
- key: generateKey(),
518
- label,
519
- ...snapshot,
520
- deletable: true
521
- };
522
- updateSavedViews((prev) => [...prev, next]);
523
- setActiveKey(next.key);
524
- return next;
525
- },
526
- [setActiveKey, updateSavedViews]
527
- );
528
- const deleteView = useCallback(
529
- (key) => {
530
- const target = savedViews.find((view) => view.key === key);
531
- if (!target || !isPersistableLabel(target.label)) return;
532
- updateSavedViews((prev) => prev.filter((view) => view.key !== key));
533
- if (activeKey === key) {
534
- const firstBuiltIn = builtInItems[0]?.key;
535
- if (firstBuiltIn !== void 0) setActiveKey(firstBuiltIn);
536
- }
537
- },
538
- [activeKey, builtInItems, savedViews, setActiveKey, updateSavedViews]
539
- );
540
- const markCustom = useCallback(() => {
541
- if (activeKey === CUSTOM_KEY) return;
542
- setActiveKey(CUSTOM_KEY);
543
- }, [activeKey, setActiveKey]);
544
- return {
545
- items: [...builtInItems, ...savedViews],
546
- savedViews,
547
- activeKey,
548
- setActiveKey,
549
- applyView,
550
- saveView,
551
- deleteView,
552
- markCustom
553
- };
554
- }
555
-
556
- export { matchBreakpoint, productOptions, useBreakpoint, useFormatters, useTablePagination, useTableSelection, useTableState, useTableViews, useTweaks };
557
- //# sourceMappingURL=hooks.js.map
558
- //# sourceMappingURL=hooks.js.map