@acmekit/dashboard 2.13.7 → 2.13.9

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 (83) hide show
  1. package/dist/api-key-management-create-VWUERPPB.mjs +170 -0
  2. package/dist/api-key-management-detail-V4ENQHYY.mjs +306 -0
  3. package/dist/api-key-management-edit-R44OHS7B.mjs +106 -0
  4. package/dist/api-key-management-list-K2XPKF5E.mjs +400 -0
  5. package/dist/app.js +16765 -1370
  6. package/dist/app.mjs +786 -1030
  7. package/dist/chunk-22YYMH6M.mjs +382 -0
  8. package/dist/chunk-2U3RK3JG.mjs +474 -0
  9. package/dist/chunk-535OVBXR.mjs +226 -0
  10. package/dist/chunk-774WSTCC.mjs +19 -0
  11. package/dist/chunk-C76H5USB.mjs +16 -0
  12. package/dist/chunk-DFFLVEZ5.mjs +40 -0
  13. package/dist/chunk-DN3MIYQH.mjs +140 -0
  14. package/dist/chunk-DQCEH3X2.mjs +28 -0
  15. package/dist/chunk-DTY37DDZ.mjs +20 -0
  16. package/dist/chunk-EFRMWHRX.mjs +84 -0
  17. package/dist/chunk-FXYH54JP.mjs +16 -0
  18. package/dist/chunk-G22WWLPG.mjs +44 -0
  19. package/dist/chunk-G2VJOHHV.mjs +32 -0
  20. package/dist/chunk-GBFVWROS.mjs +58 -0
  21. package/dist/chunk-ITNQKZQQ.mjs +142 -0
  22. package/dist/chunk-IUCDCPJU.mjs +0 -0
  23. package/dist/chunk-LKWTBYYC.mjs +35 -0
  24. package/dist/{chunk-4VYJHIB3.mjs → chunk-ND3ODI36.mjs} +0 -72
  25. package/dist/chunk-OAHCJFG3.mjs +17 -0
  26. package/dist/chunk-RPAL6FHW.mjs +73 -0
  27. package/dist/{chunk-JSJZMTQG.mjs → chunk-RREPQMYC.mjs} +14 -41
  28. package/dist/chunk-S3REQHPQ.mjs +86 -0
  29. package/dist/chunk-S4DMV3ZT.mjs +35 -0
  30. package/dist/chunk-ST2YB7JN.mjs +74 -0
  31. package/dist/chunk-TCNCAWYD.mjs +9 -0
  32. package/dist/chunk-ULSPL3DR.mjs +126 -0
  33. package/dist/chunk-WILMJYUB.mjs +35 -0
  34. package/dist/chunk-XIM7X4FB.mjs +83 -0
  35. package/dist/chunk-YLPAZ2DP.mjs +1837 -0
  36. package/dist/chunk-YRWSG3YM.mjs +80 -0
  37. package/dist/{invite-S5USGDOZ.mjs → invite-XGPZZBUP.mjs} +15 -7
  38. package/dist/{login-AIMR26AL.mjs → login-GNP3QIPI.mjs} +25 -12
  39. package/dist/profile-detail-YX27F7N6.mjs +96 -0
  40. package/dist/profile-edit-2VRDU75O.mjs +173 -0
  41. package/dist/{reset-password-UQPRHMB3.mjs → reset-password-TWRNZO6Z.mjs} +7 -3
  42. package/dist/settings-3XWLL5LG.mjs +545 -0
  43. package/dist/translation-list-CCEQJNED.mjs +581 -0
  44. package/dist/translations-edit-E57GVUFV.mjs +5376 -0
  45. package/dist/user-detail-KUSRRVNX.mjs +169 -0
  46. package/dist/user-edit-HTN3ZGCL.mjs +114 -0
  47. package/dist/user-invite-E3FAAU3V.mjs +361 -0
  48. package/dist/user-list-KNJ5S3IM.mjs +1116 -0
  49. package/dist/user-metadata-5GQK75DT.mjs +425 -0
  50. package/dist/workflow-execution-detail-LZXCRVNC.mjs +819 -0
  51. package/dist/workflow-execution-list-HQ3V6TML.mjs +175 -0
  52. package/package.json +9 -9
  53. package/src/components/layout/settings-layout/settings-layout.tsx +8 -2
  54. package/src/dashboard-app/routes/get-route.map.tsx +1 -14
  55. package/src/hooks/api/api-keys.tsx +0 -49
  56. package/src/hooks/api/index.ts +0 -1
  57. package/src/providers/keybind-provider/hooks.tsx +0 -145
  58. package/src/routes/translations/translation-list/translation-list.tsx +10 -21
  59. package/src/routes/translations/translations-edit/translations-edit.tsx +14 -11
  60. package/src/vite-env.d.ts +3 -1
  61. package/dist/chunk-FBTP4AJM.mjs +0 -221
  62. package/dist/chunk-QYOO4QR6.mjs +0 -73
  63. package/src/components/data-table/helpers/sales-channels/index.ts +0 -4
  64. package/src/components/data-table/helpers/sales-channels/use-sales-channel-table-columns.tsx +0 -61
  65. package/src/components/data-table/helpers/sales-channels/use-sales-channel-table-empty-state.tsx +0 -22
  66. package/src/components/data-table/helpers/sales-channels/use-sales-channel-table-filters.tsx +0 -33
  67. package/src/components/data-table/helpers/sales-channels/use-sales-channel-table-query.tsx +0 -30
  68. package/src/routes/api-key-management/api-key-management-detail/components/api-key-sales-channel-section/api-key-sales-channel-section.tsx +0 -206
  69. package/src/routes/api-key-management/api-key-management-detail/components/api-key-sales-channel-section/index.ts +0 -1
  70. package/src/routes/store/common/hooks/use-currencies-table-columns.tsx +0 -29
  71. package/src/routes/store/common/hooks/use-currencies-table-query.tsx +0 -21
  72. package/src/routes/store/common/hooks/use-locales-table-columns.tsx +0 -29
  73. package/src/routes/store/common/hooks/use-locales-table-query.tsx +0 -21
  74. package/src/routes/store/store-detail/components/store-general-section/index.ts +0 -1
  75. package/src/routes/store/store-detail/components/store-general-section/store-general-section.tsx +0 -48
  76. package/src/routes/store/store-detail/index.ts +0 -2
  77. package/src/routes/store/store-detail/loader.ts +0 -18
  78. package/src/routes/store/store-detail/store-detail.tsx +0 -42
  79. package/src/routes/store/store-edit/components/edit-store-form/edit-store-form.tsx +0 -83
  80. package/src/routes/store/store-edit/index.ts +0 -1
  81. package/src/routes/store/store-edit/store-edit.tsx +0 -25
  82. package/src/routes/store/store-metadata/index.ts +0 -1
  83. package/src/routes/store/store-metadata/store-metadata.tsx +0 -24
@@ -0,0 +1,474 @@
1
+ import {
2
+ Form
3
+ } from "./chunk-ND3ODI36.mjs";
4
+
5
+ // src/components/modals/route-drawer/route-drawer.tsx
6
+ import { Drawer, clx } from "@acmekit/ui";
7
+ import { useEffect, useState as useState3 } from "react";
8
+ import { useNavigate as useNavigate2 } from "react-router-dom";
9
+
10
+ // src/components/modals/hooks/use-state-aware-to.tsx
11
+ import { useMemo } from "react";
12
+ import { useLocation } from "react-router-dom";
13
+ var useStateAwareTo = (prev) => {
14
+ const location = useLocation();
15
+ const to = useMemo(() => {
16
+ const params = location.state?.restore_params;
17
+ if (params) {
18
+ return `${prev}?${params.toString()}`;
19
+ }
20
+ if (location.search) {
21
+ return `${prev}${location.search}`;
22
+ }
23
+ return prev;
24
+ }, [location.state, location.search, prev]);
25
+ return to;
26
+ };
27
+
28
+ // src/components/modals/route-modal-form/route-modal-form.tsx
29
+ import { Prompt } from "@acmekit/ui";
30
+ import { useTranslation } from "react-i18next";
31
+ import { useBlocker } from "react-router-dom";
32
+ import { jsx, jsxs } from "react/jsx-runtime";
33
+ var RouteModalForm = ({
34
+ form,
35
+ blockSearchParams: blockSearch = false,
36
+ children,
37
+ onClose
38
+ }) => {
39
+ const { t } = useTranslation();
40
+ const {
41
+ formState: { isDirty }
42
+ } = form;
43
+ const blocker = useBlocker(({ currentLocation, nextLocation }) => {
44
+ const { isSubmitSuccessful: nextIsSuccessful } = nextLocation.state || {};
45
+ const { isSubmitSuccessful: currentIsSuccessful } = currentLocation.state || {};
46
+ const isSubmitSuccessful = nextIsSuccessful || currentIsSuccessful;
47
+ if (isSubmitSuccessful) {
48
+ onClose?.(true);
49
+ return false;
50
+ }
51
+ const isPathChanged = currentLocation.pathname !== nextLocation.pathname;
52
+ const isSearchChanged = currentLocation.search !== nextLocation.search;
53
+ if (blockSearch) {
54
+ const shouldBlock2 = isDirty && (isPathChanged || isSearchChanged);
55
+ if (isPathChanged) {
56
+ onClose?.(isSubmitSuccessful);
57
+ }
58
+ return shouldBlock2;
59
+ }
60
+ const shouldBlock = isDirty && isPathChanged;
61
+ if (isPathChanged) {
62
+ onClose?.(isSubmitSuccessful);
63
+ }
64
+ return shouldBlock;
65
+ });
66
+ const handleCancel = () => {
67
+ blocker?.reset?.();
68
+ };
69
+ const handleContinue = () => {
70
+ blocker?.proceed?.();
71
+ onClose?.(false);
72
+ };
73
+ return /* @__PURE__ */ jsxs(Form, { ...form, children: [
74
+ children,
75
+ /* @__PURE__ */ jsx(Prompt, { open: blocker.state === "blocked", variant: "confirmation", children: /* @__PURE__ */ jsxs(Prompt.Content, { children: [
76
+ /* @__PURE__ */ jsxs(Prompt.Header, { children: [
77
+ /* @__PURE__ */ jsx(Prompt.Title, { children: t("general.unsavedChangesTitle") }),
78
+ /* @__PURE__ */ jsx(Prompt.Description, { children: t("general.unsavedChangesDescription") })
79
+ ] }),
80
+ /* @__PURE__ */ jsxs(Prompt.Footer, { children: [
81
+ /* @__PURE__ */ jsx(Prompt.Cancel, { onClick: handleCancel, type: "button", children: t("actions.cancel") }),
82
+ /* @__PURE__ */ jsx(Prompt.Action, { onClick: handleContinue, type: "button", children: t("actions.continue") })
83
+ ] })
84
+ ] }) })
85
+ ] });
86
+ };
87
+
88
+ // src/components/modals/route-modal-provider/route-provider.tsx
89
+ import { useCallback, useMemo as useMemo2, useState } from "react";
90
+ import { useLocation as useLocation2, useNavigate } from "react-router-dom";
91
+
92
+ // src/components/modals/route-modal-provider/route-modal-context.tsx
93
+ import { createContext } from "react";
94
+ var RouteModalProviderContext = createContext(null);
95
+
96
+ // src/components/modals/route-modal-provider/route-provider.tsx
97
+ import { jsx as jsx2 } from "react/jsx-runtime";
98
+ var RouteModalProvider = ({
99
+ prev,
100
+ children
101
+ }) => {
102
+ const navigate = useNavigate();
103
+ const location = useLocation2();
104
+ const [closeOnEscape, setCloseOnEscape] = useState(true);
105
+ const handleSuccess = useCallback(
106
+ (path) => {
107
+ const to = path || prev;
108
+ if (typeof to === "number") {
109
+ navigate(location.pathname + location.search, {
110
+ replace: true,
111
+ state: { ...location.state, isSubmitSuccessful: true }
112
+ });
113
+ setTimeout(() => {
114
+ navigate(to);
115
+ }, 0);
116
+ } else {
117
+ navigate(to, { replace: true, state: { isSubmitSuccessful: true } });
118
+ }
119
+ },
120
+ [navigate, prev, location]
121
+ );
122
+ const value = useMemo2(
123
+ () => ({
124
+ handleSuccess,
125
+ setCloseOnEscape,
126
+ __internal: { closeOnEscape }
127
+ }),
128
+ [handleSuccess, setCloseOnEscape, closeOnEscape]
129
+ );
130
+ return /* @__PURE__ */ jsx2(RouteModalProviderContext.Provider, { value, children });
131
+ };
132
+
133
+ // src/components/modals/stacked-modal-provider/stacked-modal-provider.tsx
134
+ import { useState as useState2 } from "react";
135
+
136
+ // src/components/modals/stacked-modal-provider/stacked-modal-context.tsx
137
+ import { createContext as createContext2 } from "react";
138
+ var StackedModalContext = createContext2(null);
139
+
140
+ // src/components/modals/stacked-modal-provider/stacked-modal-provider.tsx
141
+ import { jsx as jsx3 } from "react/jsx-runtime";
142
+ var StackedModalProvider = ({
143
+ children,
144
+ onOpenChange
145
+ }) => {
146
+ const [state, setState] = useState2({});
147
+ const getIsOpen = (id) => {
148
+ return state[id] || false;
149
+ };
150
+ const setIsOpen = (id, open) => {
151
+ setState((prevState) => ({
152
+ ...prevState,
153
+ [id]: open
154
+ }));
155
+ onOpenChange(open);
156
+ };
157
+ const register = (id) => {
158
+ setState((prevState) => ({
159
+ ...prevState,
160
+ [id]: false
161
+ }));
162
+ };
163
+ const unregister = (id) => {
164
+ setState((prevState) => {
165
+ const newState = { ...prevState };
166
+ delete newState[id];
167
+ return newState;
168
+ });
169
+ };
170
+ return /* @__PURE__ */ jsx3(
171
+ StackedModalContext.Provider,
172
+ {
173
+ value: {
174
+ getIsOpen,
175
+ setIsOpen,
176
+ register,
177
+ unregister
178
+ },
179
+ children
180
+ }
181
+ );
182
+ };
183
+
184
+ // src/components/modals/stacked-modal-provider/use-stacked-modal.ts
185
+ import { useContext } from "react";
186
+ var useStackedModal = () => {
187
+ const context = useContext(StackedModalContext);
188
+ if (!context) {
189
+ throw new Error(
190
+ "useStackedModal must be used within a StackedModalProvider"
191
+ );
192
+ }
193
+ return context;
194
+ };
195
+
196
+ // src/components/modals/route-drawer/route-drawer.tsx
197
+ import { jsx as jsx4 } from "react/jsx-runtime";
198
+ var Root = ({ prev = "..", children }) => {
199
+ const navigate = useNavigate2();
200
+ const [open, setOpen] = useState3(false);
201
+ const [stackedModalOpen, onStackedModalOpen] = useState3(false);
202
+ const to = useStateAwareTo(prev);
203
+ useEffect(() => {
204
+ setOpen(true);
205
+ return () => {
206
+ setOpen(false);
207
+ onStackedModalOpen(false);
208
+ };
209
+ }, []);
210
+ const handleOpenChange = (open2) => {
211
+ if (!open2) {
212
+ document.body.style.pointerEvents = "auto";
213
+ navigate(to, { replace: true });
214
+ return;
215
+ }
216
+ setOpen(open2);
217
+ };
218
+ return /* @__PURE__ */ jsx4(Drawer, { open, onOpenChange: handleOpenChange, children: /* @__PURE__ */ jsx4(RouteModalProvider, { prev: to, children: /* @__PURE__ */ jsx4(StackedModalProvider, { onOpenChange: onStackedModalOpen, children: /* @__PURE__ */ jsx4(
219
+ Drawer.Content,
220
+ {
221
+ "aria-describedby": void 0,
222
+ className: clx({
223
+ "!bg-ui-bg-disabled !inset-y-5 !right-5": stackedModalOpen
224
+ }),
225
+ children
226
+ }
227
+ ) }) }) });
228
+ };
229
+ var Header = Drawer.Header;
230
+ var Title = Drawer.Title;
231
+ var Description = Drawer.Description;
232
+ var Body = Drawer.Body;
233
+ var Footer = Drawer.Footer;
234
+ var Close = Drawer.Close;
235
+ var Form2 = RouteModalForm;
236
+ var RouteDrawer = Object.assign(Root, {
237
+ Header,
238
+ Title,
239
+ Body,
240
+ Description,
241
+ Footer,
242
+ Close,
243
+ Form: Form2
244
+ });
245
+
246
+ // src/components/modals/route-focus-modal/route-focus-modal.tsx
247
+ import { FocusModal, clx as clx2 } from "@acmekit/ui";
248
+ import { useEffect as useEffect2, useState as useState4 } from "react";
249
+ import { useNavigate as useNavigate3 } from "react-router-dom";
250
+
251
+ // src/components/modals/route-modal-provider/use-route-modal.tsx
252
+ import { useContext as useContext2 } from "react";
253
+ var useRouteModal = () => {
254
+ const context = useContext2(RouteModalProviderContext);
255
+ if (!context) {
256
+ throw new Error("useRouteModal must be used within a RouteModalProvider");
257
+ }
258
+ return context;
259
+ };
260
+
261
+ // src/components/modals/route-focus-modal/route-focus-modal.tsx
262
+ import { jsx as jsx5 } from "react/jsx-runtime";
263
+ var Root2 = ({ prev = "..", children }) => {
264
+ const navigate = useNavigate3();
265
+ const [open, setOpen] = useState4(false);
266
+ const [stackedModalOpen, onStackedModalOpen] = useState4(false);
267
+ const to = typeof prev === "number" ? prev : useStateAwareTo(prev);
268
+ useEffect2(() => {
269
+ setOpen(true);
270
+ return () => {
271
+ setOpen(false);
272
+ onStackedModalOpen(false);
273
+ };
274
+ }, []);
275
+ const handleOpenChange = (open2) => {
276
+ if (!open2) {
277
+ document.body.style.pointerEvents = "auto";
278
+ if (typeof to === "number") {
279
+ navigate(to);
280
+ } else {
281
+ navigate(to, { replace: true });
282
+ }
283
+ return;
284
+ }
285
+ setOpen(open2);
286
+ };
287
+ return /* @__PURE__ */ jsx5(FocusModal, { open, onOpenChange: handleOpenChange, children: /* @__PURE__ */ jsx5(RouteModalProvider, { prev: to, children: /* @__PURE__ */ jsx5(StackedModalProvider, { onOpenChange: onStackedModalOpen, children: /* @__PURE__ */ jsx5(Content, { stackedModalOpen, children }) }) }) });
288
+ };
289
+ var Content = ({ stackedModalOpen, children }) => {
290
+ const { __internal } = useRouteModal();
291
+ const shouldPreventClose = !__internal.closeOnEscape;
292
+ return /* @__PURE__ */ jsx5(
293
+ FocusModal.Content,
294
+ {
295
+ onEscapeKeyDown: shouldPreventClose ? (e) => {
296
+ e.preventDefault();
297
+ } : void 0,
298
+ className: clx2({
299
+ "!bg-ui-bg-disabled !inset-x-5 !inset-y-3": stackedModalOpen
300
+ }),
301
+ children
302
+ }
303
+ );
304
+ };
305
+ var Header2 = FocusModal.Header;
306
+ var Title2 = FocusModal.Title;
307
+ var Description2 = FocusModal.Description;
308
+ var Footer2 = FocusModal.Footer;
309
+ var Body2 = FocusModal.Body;
310
+ var Close2 = FocusModal.Close;
311
+ var Form3 = RouteModalForm;
312
+ var RouteFocusModal = Object.assign(Root2, {
313
+ Header: Header2,
314
+ Title: Title2,
315
+ Body: Body2,
316
+ Description: Description2,
317
+ Footer: Footer2,
318
+ Close: Close2,
319
+ Form: Form3
320
+ });
321
+
322
+ // src/components/modals/stacked-drawer/stacked-drawer.tsx
323
+ import { Drawer as Drawer2, clx as clx3 } from "@acmekit/ui";
324
+ import {
325
+ forwardRef,
326
+ useEffect as useEffect3
327
+ } from "react";
328
+ import { jsx as jsx6 } from "react/jsx-runtime";
329
+ var Root3 = ({ id, children }) => {
330
+ const { register, unregister, getIsOpen, setIsOpen } = useStackedModal();
331
+ useEffect3(() => {
332
+ register(id);
333
+ return () => unregister(id);
334
+ }, []);
335
+ return /* @__PURE__ */ jsx6(Drawer2, { open: getIsOpen(id), onOpenChange: (open) => setIsOpen(id, open), children });
336
+ };
337
+ var Close3 = Drawer2.Close;
338
+ Close3.displayName = "StackedDrawer.Close";
339
+ var Header3 = Drawer2.Header;
340
+ Header3.displayName = "StackedDrawer.Header";
341
+ var Body3 = Drawer2.Body;
342
+ Body3.displayName = "StackedDrawer.Body";
343
+ var Trigger = Drawer2.Trigger;
344
+ Trigger.displayName = "StackedDrawer.Trigger";
345
+ var Footer3 = Drawer2.Footer;
346
+ Footer3.displayName = "StackedDrawer.Footer";
347
+ var Title3 = Drawer2.Title;
348
+ Title3.displayName = "StackedDrawer.Title";
349
+ var Description3 = Drawer2.Description;
350
+ Description3.displayName = "StackedDrawer.Description";
351
+ var Content2 = forwardRef(({ className, ...props }, ref) => {
352
+ return /* @__PURE__ */ jsx6(
353
+ Drawer2.Content,
354
+ {
355
+ ref,
356
+ className: clx3(className),
357
+ overlayProps: {
358
+ className: "bg-transparent"
359
+ },
360
+ ...props
361
+ }
362
+ );
363
+ });
364
+ Content2.displayName = "StackedDrawer.Content";
365
+ var StackedDrawer = Object.assign(Root3, {
366
+ Close: Close3,
367
+ Header: Header3,
368
+ Body: Body3,
369
+ Content: Content2,
370
+ Trigger,
371
+ Footer: Footer3,
372
+ Description: Description3,
373
+ Title: Title3
374
+ });
375
+
376
+ // src/components/modals/stacked-focus-modal/stacked-focus-modal.tsx
377
+ import { FocusModal as FocusModal2, clx as clx4 } from "@acmekit/ui";
378
+ import {
379
+ forwardRef as forwardRef2,
380
+ useEffect as useEffect4
381
+ } from "react";
382
+ import { jsx as jsx7 } from "react/jsx-runtime";
383
+ var Root4 = ({
384
+ id,
385
+ onOpenChangeCallback,
386
+ children
387
+ }) => {
388
+ const { register, unregister, getIsOpen, setIsOpen } = useStackedModal();
389
+ useEffect4(() => {
390
+ register(id);
391
+ return () => unregister(id);
392
+ }, []);
393
+ const handleOpenChange = (open) => {
394
+ setIsOpen(id, open);
395
+ onOpenChangeCallback?.(open);
396
+ };
397
+ return /* @__PURE__ */ jsx7(FocusModal2, { open: getIsOpen(id), onOpenChange: handleOpenChange, children });
398
+ };
399
+ var Close4 = FocusModal2.Close;
400
+ Close4.displayName = "StackedFocusModal.Close";
401
+ var Header4 = FocusModal2.Header;
402
+ Header4.displayName = "StackedFocusModal.Header";
403
+ var Body4 = FocusModal2.Body;
404
+ Body4.displayName = "StackedFocusModal.Body";
405
+ var Trigger2 = FocusModal2.Trigger;
406
+ Trigger2.displayName = "StackedFocusModal.Trigger";
407
+ var Footer4 = FocusModal2.Footer;
408
+ Footer4.displayName = "StackedFocusModal.Footer";
409
+ var Title4 = FocusModal2.Title;
410
+ Title4.displayName = "StackedFocusModal.Title";
411
+ var Description4 = FocusModal2.Description;
412
+ Description4.displayName = "StackedFocusModal.Description";
413
+ var Content3 = forwardRef2(({ className, ...props }, ref) => {
414
+ return /* @__PURE__ */ jsx7(
415
+ FocusModal2.Content,
416
+ {
417
+ ref,
418
+ className: clx4("!top-6", className),
419
+ overlayProps: {
420
+ className: "bg-transparent"
421
+ },
422
+ ...props
423
+ }
424
+ );
425
+ });
426
+ Content3.displayName = "StackedFocusModal.Content";
427
+ var StackedFocusModal = Object.assign(Root4, {
428
+ Close: Close4,
429
+ Header: Header4,
430
+ Body: Body4,
431
+ Content: Content3,
432
+ Trigger: Trigger2,
433
+ Footer: Footer4,
434
+ Description: Description4,
435
+ Title: Title4
436
+ });
437
+
438
+ // src/components/utilities/keybound-form/keybound-form.tsx
439
+ import React from "react";
440
+ import { jsx as jsx8 } from "react/jsx-runtime";
441
+ var KeyboundForm = React.forwardRef(({ onSubmit, onKeyDown, ...rest }, ref) => {
442
+ const handleSubmit = (event) => {
443
+ event.preventDefault();
444
+ onSubmit?.(event);
445
+ };
446
+ const handleKeyDown = (event) => {
447
+ if (event.key === "Enter") {
448
+ if (event.target instanceof HTMLTextAreaElement && !(event.metaKey || event.ctrlKey)) {
449
+ return;
450
+ }
451
+ event.preventDefault();
452
+ if (event.metaKey || event.ctrlKey) {
453
+ handleSubmit(event);
454
+ }
455
+ }
456
+ };
457
+ return /* @__PURE__ */ jsx8(
458
+ "form",
459
+ {
460
+ ...rest,
461
+ onSubmit: handleSubmit,
462
+ onKeyDown: onKeyDown ?? handleKeyDown,
463
+ ref
464
+ }
465
+ );
466
+ });
467
+ KeyboundForm.displayName = "KeyboundForm";
468
+
469
+ export {
470
+ RouteDrawer,
471
+ useRouteModal,
472
+ RouteFocusModal,
473
+ KeyboundForm
474
+ };
@@ -0,0 +1,226 @@
1
+ // src/i18n/languages.ts
2
+ import {
3
+ ar,
4
+ bg,
5
+ bs,
6
+ cs,
7
+ de,
8
+ el,
9
+ enUS,
10
+ es,
11
+ faIR,
12
+ fr,
13
+ he,
14
+ hu,
15
+ id,
16
+ it,
17
+ ja,
18
+ ko,
19
+ lt,
20
+ mk,
21
+ mn,
22
+ nl,
23
+ pl,
24
+ pt,
25
+ ptBR,
26
+ ro,
27
+ ru,
28
+ th,
29
+ tr,
30
+ uk,
31
+ vi,
32
+ zhCN,
33
+ zhTW
34
+ } from "date-fns/locale";
35
+ var languages = [
36
+ {
37
+ code: "bs",
38
+ display_name: "Bosanski",
39
+ ltr: true,
40
+ date_locale: bs
41
+ },
42
+ {
43
+ code: "bg",
44
+ display_name: "\u0411\u044A\u043B\u0433\u0430\u0440\u0441\u043A\u0438",
45
+ ltr: true,
46
+ date_locale: bg
47
+ },
48
+ {
49
+ code: "en",
50
+ display_name: "English",
51
+ ltr: true,
52
+ date_locale: enUS
53
+ },
54
+ {
55
+ code: "es",
56
+ display_name: "Espa\xF1ol",
57
+ ltr: true,
58
+ date_locale: es
59
+ },
60
+ {
61
+ code: "el",
62
+ display_name: "\u0395\u03BB\u03BB\u03B7\u03BD\u03B9\u03BA\u03AC",
63
+ ltr: true,
64
+ date_locale: el
65
+ },
66
+ {
67
+ code: "de",
68
+ display_name: "Deutsch",
69
+ ltr: true,
70
+ date_locale: de
71
+ },
72
+ {
73
+ code: "fr",
74
+ display_name: "Fran\xE7ais",
75
+ ltr: true,
76
+ date_locale: fr
77
+ },
78
+ {
79
+ code: "he",
80
+ display_name: "\u05E2\u05D1\u05E8\u05D9\u05EA",
81
+ ltr: false,
82
+ date_locale: he
83
+ },
84
+ {
85
+ code: "hu",
86
+ display_name: "Magyar",
87
+ ltr: true,
88
+ date_locale: hu
89
+ },
90
+ {
91
+ code: "it",
92
+ display_name: "Italiano",
93
+ ltr: true,
94
+ date_locale: it
95
+ },
96
+ {
97
+ code: "ja",
98
+ display_name: "\u65E5\u672C\u8A9E",
99
+ ltr: true,
100
+ date_locale: ja
101
+ },
102
+ {
103
+ code: "pl",
104
+ display_name: "Polski",
105
+ ltr: true,
106
+ date_locale: pl
107
+ },
108
+ {
109
+ code: "ptBR",
110
+ display_name: "Portugu\xEAs (Brasil)",
111
+ ltr: true,
112
+ date_locale: ptBR
113
+ },
114
+ {
115
+ code: "ptPT",
116
+ display_name: "Portugu\xEAs (Portugal)",
117
+ ltr: true,
118
+ date_locale: pt
119
+ },
120
+ {
121
+ code: "tr",
122
+ display_name: "T\xFCrk\xE7e",
123
+ ltr: true,
124
+ date_locale: tr
125
+ },
126
+ {
127
+ code: "th",
128
+ display_name: "\u0E44\u0E17\u0E22",
129
+ ltr: true,
130
+ date_locale: th
131
+ },
132
+ {
133
+ code: "uk",
134
+ display_name: "\u0423\u043A\u0440\u0430\u0457\u043D\u0441\u044C\u043A\u0430",
135
+ ltr: true,
136
+ date_locale: uk
137
+ },
138
+ {
139
+ code: "ro",
140
+ display_name: "Rom\xE2n\u0103",
141
+ ltr: true,
142
+ date_locale: ro
143
+ },
144
+ {
145
+ code: "mk",
146
+ display_name: "\u041C\u0430\u043A\u0435\u0434\u043E\u043D\u0441\u043A\u0438",
147
+ ltr: true,
148
+ date_locale: mk
149
+ },
150
+ {
151
+ code: "mn",
152
+ display_name: "\u041C\u043E\u043D\u0433\u043E\u043B",
153
+ ltr: true,
154
+ date_locale: mn
155
+ },
156
+ {
157
+ code: "ar",
158
+ display_name: "\u0627\u0644\u0639\u0631\u0628\u064A\u0629",
159
+ ltr: false,
160
+ date_locale: ar
161
+ },
162
+ {
163
+ code: "zhCN",
164
+ display_name: "\u7B80\u4F53\u4E2D\u6587",
165
+ ltr: true,
166
+ date_locale: zhCN
167
+ },
168
+ {
169
+ code: "fa",
170
+ display_name: "\u0641\u0627\u0631\u0633\u06CC",
171
+ ltr: false,
172
+ date_locale: faIR
173
+ },
174
+ {
175
+ code: "cs",
176
+ display_name: "\u010Ce\u0161tina",
177
+ ltr: true,
178
+ date_locale: cs
179
+ },
180
+ {
181
+ code: "ru",
182
+ display_name: "\u0420\u0443\u0441\u0441\u043A\u0438\u0439",
183
+ ltr: true,
184
+ date_locale: ru
185
+ },
186
+ {
187
+ code: "lt",
188
+ display_name: "Lietuvi\u0161kai",
189
+ ltr: true,
190
+ date_locale: lt
191
+ },
192
+ {
193
+ code: "vi",
194
+ display_name: "Ti\u1EBFng Vi\u1EC7t",
195
+ ltr: true,
196
+ date_locale: vi
197
+ },
198
+ {
199
+ code: "id",
200
+ display_name: "Bahasa Indonesia",
201
+ ltr: true,
202
+ date_locale: id
203
+ },
204
+ {
205
+ code: "ko",
206
+ display_name: "\uD55C\uAD6D\uC5B4",
207
+ ltr: true,
208
+ date_locale: ko
209
+ },
210
+ {
211
+ code: "nl",
212
+ display_name: "Nederlands",
213
+ ltr: true,
214
+ date_locale: nl
215
+ },
216
+ {
217
+ code: "zhTW",
218
+ display_name: "\u7E41\u9AD4\u4E2D\u6587(\u81FA\u7063)",
219
+ ltr: true,
220
+ date_locale: zhTW
221
+ }
222
+ ];
223
+
224
+ export {
225
+ languages
226
+ };
@@ -0,0 +1,19 @@
1
+ // src/lib/query-key-factory.ts
2
+ var queryKeysFactory = (globalKey) => {
3
+ const queryKeyFactory = {
4
+ all: [globalKey],
5
+ lists: () => [...queryKeyFactory.all, "list"],
6
+ list: (query) => [...queryKeyFactory.lists(), query ? { query } : void 0].filter(
7
+ (k) => !!k
8
+ ),
9
+ details: () => [...queryKeyFactory.all, "detail"],
10
+ detail: (id, query) => [...queryKeyFactory.details(), id, query ? { query } : void 0].filter(
11
+ (k) => !!k
12
+ )
13
+ };
14
+ return queryKeyFactory;
15
+ };
16
+
17
+ export {
18
+ queryKeysFactory
19
+ };