@sito/dashboard-app 0.0.48 → 0.0.50

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 (69) hide show
  1. package/README.md +88 -20
  2. package/dist/components/Onboarding/types.d.ts +8 -0
  3. package/dist/components/index.d.ts +1 -1
  4. package/dist/dashboard-app.cjs +1 -1
  5. package/dist/dashboard-app.js +1778 -2558
  6. package/dist/lib/api/APIClient.d.ts +9 -6
  7. package/dist/lib/api/utils/services.d.ts +7 -2
  8. package/dist/lib/entities/auth/BaseAuthDto.d.ts +1 -1
  9. package/dist/lib/entities/auth/BaseRegisterDto.d.ts +1 -1
  10. package/dist/lib/entities/auth/RegisterDto.d.ts +1 -1
  11. package/dist/main.css +1 -1
  12. package/dist/providers/ManagerProvider.d.ts +2 -1
  13. package/dist/providers/types.d.ts +2 -0
  14. package/package.json +8 -9
  15. package/dist/components/Buttons/IconButton.stories.d.ts +0 -17
  16. package/dist/components/Buttons/ToTop.stories.d.ts +0 -12
  17. package/dist/components/Buttons/ToTop.test.d.ts +0 -1
  18. package/dist/components/Clock/Clock.stories.d.ts +0 -10
  19. package/dist/components/Dialog/ConfirmationDialog.stories.d.ts +0 -13
  20. package/dist/components/Dialog/ConfirmationDialog.test.d.ts +0 -1
  21. package/dist/components/Dialog/Dialog.stories.d.ts +0 -14
  22. package/dist/components/Dialog/DialogActions.stories.d.ts +0 -17
  23. package/dist/components/Dialog/FormDialog.stories.d.ts +0 -21
  24. package/dist/components/Dialog/ImportDialog/ImportDialog.stories.d.ts +0 -24
  25. package/dist/components/Dialog/ImportDialog/ImportDialog.test.d.ts +0 -1
  26. package/dist/components/Drawer/Drawer.stories.d.ts +0 -11
  27. package/dist/components/Drawer/Drawer.test.d.ts +0 -1
  28. package/dist/components/Empty/Empty.stories.d.ts +0 -16
  29. package/dist/components/Error/Error.stories.d.ts +0 -13
  30. package/dist/components/Form/FormContainer.stories.d.ts +0 -19
  31. package/dist/components/Form/ParagraphInput.stories.d.ts +0 -29
  32. package/dist/components/Form/PasswordInput.stories.d.ts +0 -14
  33. package/dist/components/Loading/SplashScreen.stories.d.ts +0 -11
  34. package/dist/components/Navbar/Navbar.stories.d.ts +0 -32
  35. package/dist/components/Navbar/Navbar.test.d.ts +0 -1
  36. package/dist/components/Notification/Notification.stories.d.ts +0 -11
  37. package/dist/components/Onboarding/Onboarding.stories.d.ts +0 -21
  38. package/dist/components/Onboarding/Onboarding.test.d.ts +0 -1
  39. package/dist/components/Onboarding/Step.stories.d.ts +0 -17
  40. package/dist/components/Page/Page.stories.d.ts +0 -34
  41. package/dist/components/Page/PageHeader.stories.d.ts +0 -20
  42. package/dist/components/PrettyGrid/PrettyGrid.stories.d.ts +0 -20
  43. package/dist/components/PrettyGrid/PrettyGrid.test.d.ts +0 -1
  44. package/dist/components/TabsLayout/Tab.stories.d.ts +0 -19
  45. package/dist/components/TabsLayout/TabsLayout.stories.d.ts +0 -19
  46. package/dist/hooks/actions/PrefabActions.stories.d.ts +0 -12
  47. package/dist/hooks/actions/useDeleteAction.test.d.ts +0 -1
  48. package/dist/hooks/actions/useEditAction.test.d.ts +0 -1
  49. package/dist/hooks/actions/useExportAction.test.d.ts +0 -1
  50. package/dist/hooks/actions/useImportAction.test.d.ts +0 -1
  51. package/dist/hooks/actions/useRestoreAction.test.d.ts +0 -1
  52. package/dist/hooks/dialogs/useDialog.test.d.ts +0 -1
  53. package/dist/hooks/dialogs/useImportDialog.test.d.ts +0 -1
  54. package/dist/hooks/useScrollTrigger.test.d.ts +0 -1
  55. package/dist/lib/api/APIClient.test.d.ts +0 -1
  56. package/dist/lib/api/AuthClient.test.d.ts +0 -1
  57. package/dist/lib/api/BaseClient.test.d.ts +0 -1
  58. package/dist/lib/api/IndexedDBClient.test.d.ts +0 -0
  59. package/dist/lib/api/utils/query.test.d.ts +0 -1
  60. package/dist/lib/api/utils/services.test.d.ts +0 -1
  61. package/dist/lib/utils/date.test.d.ts +0 -1
  62. package/dist/lib/utils/local.test.d.ts +0 -1
  63. package/dist/lib/utils/os.test.d.ts +0 -1
  64. package/dist/providers/AuthProvider.test.d.ts +0 -1
  65. package/dist/providers/ConfigProvider.test.d.ts +0 -1
  66. package/dist/providers/DrawerMenuProvider.test.d.ts +0 -1
  67. package/dist/providers/ManagerProvider.test.d.ts +0 -1
  68. package/dist/providers/NotificationProvider.test.d.ts +0 -1
  69. package/dist/test/setup.d.ts +0 -0
package/README.md CHANGED
@@ -14,7 +14,7 @@ pnpm add @sito/dashboard-app
14
14
 
15
15
  ## Requirements
16
16
 
17
- - Node.js `18.18.0` (see `.nvmrc`)
17
+ - Node.js `20.x` (see `.nvmrc`)
18
18
  - React `18.3.1`
19
19
  - React DOM `18.3.1`
20
20
  - `@tanstack/react-query` `5.83.0`
@@ -22,6 +22,21 @@ pnpm add @sito/dashboard-app
22
22
  - `@sito/dashboard` `^0.0.68`
23
23
  - Font Awesome + Emotion peers defined in `package.json`
24
24
 
25
+ Install all peers in consumer apps:
26
+
27
+ ```bash
28
+ npm install \
29
+ react@18.3.1 react-dom@18.3.1 \
30
+ @sito/dashboard@^0.0.68 \
31
+ @tanstack/react-query@5.83.0 \
32
+ react-hook-form@7.61.1 \
33
+ @fortawesome/fontawesome-svg-core@7.0.0 \
34
+ @fortawesome/free-solid-svg-icons@7.0.0 \
35
+ @fortawesome/free-regular-svg-icons@7.0.0 \
36
+ @fortawesome/free-brands-svg-icons@7.0.0 \
37
+ @fortawesome/react-fontawesome@0.2.3
38
+ ```
39
+
25
40
  ## Core exports
26
41
 
27
42
  - Layout and navigation: `Page`, `Navbar`, `Drawer`, `TabsLayout`, `PrettyGrid`, `ToTop`
@@ -29,7 +44,7 @@ pnpm add @sito/dashboard-app
29
44
  - Dialogs and forms: `Dialog`, `FormDialog`, `ImportDialog`, form inputs
30
45
  - Feedback: `Notification`, `Loading`, `Empty`, `Error`, `Onboarding`
31
46
  - Hooks: `useImportDialog`, `useDeleteDialog`, `usePostForm`, `useDeleteAction`, `useNavbar`, and more — all action hooks ship with default `sticky`, `multiple`, `id`, `icon`, and `tooltip` values so only `onClick` is required
32
- - Providers and utilities: `ConfigProvider`, `ManagerProvider`, `AuthProvider`, `NotificationProvider`, `NavbarProvider`, DTOs, API clients
47
+ - Providers and utilities: `ConfigProvider`, `ManagerProvider`, `AuthProvider`, `NotificationProvider`, `DrawerMenuProvider`, `NavbarProvider`, DTOs, API clients
33
48
 
34
49
  ## Component usage patterns
35
50
 
@@ -68,7 +83,7 @@ import { TabsLayout } from "@sito/dashboard-app";
68
83
  useLinks={false}
69
84
  tabButtonProps={{ variant: "outlined", color: "secondary" }}
70
85
  tabs={tabs}
71
- />
86
+ />;
72
87
  ```
73
88
 
74
89
  `tabButtonProps` lets you customize each tab button style/behavior (except `onClick` and `children`, which are controlled by `TabsLayout`).
@@ -95,7 +110,7 @@ import { Onboarding } from "@sito/dashboard-app";
95
110
  alt: "Setup preview",
96
111
  },
97
112
  ]}
98
- />
113
+ />;
99
114
  ```
100
115
 
101
116
  The action buttons still use the package's internal accessibility/button translation keys.
@@ -116,7 +131,7 @@ import { ImportDialog } from "@sito/dashboard-app";
116
131
  handleSubmit={submit}
117
132
  fileProcessor={parseFile}
118
133
  renderCustomPreview={(items) => <ProductsPreviewTable items={items ?? []} />}
119
- />
134
+ />;
120
135
  ```
121
136
 
122
137
  `useImportDialog` also accepts and forwards `renderCustomPreview`:
@@ -149,7 +164,7 @@ import { PrettyGrid, Loading } from "@sito/dashboard-app";
149
164
  loadingMore={isFetchingNextPage}
150
165
  onLoadMore={fetchNextPage}
151
166
  loadMoreComponent={<Loading className="!w-auto" loaderClass="w-5 h-5" />}
152
- />
167
+ />;
153
168
  ```
154
169
 
155
170
  Defaults:
@@ -175,7 +190,7 @@ import { ToTop } from "@sito/dashboard-app";
175
190
  className="right-8 bottom-8"
176
191
  scrollTop={0}
177
192
  scrollLeft={0}
178
- />
193
+ />;
179
194
  ```
180
195
 
181
196
  Main optional props:
@@ -189,20 +204,44 @@ Main optional props:
189
204
 
190
205
  ## Initial setup example
191
206
 
192
- Wrap your app with the providers to enable navigation, React Query integration, auth context, and notifications.
207
+ Wrap your app with providers in this order to enable routing integration, React Query, auth, notifications, and drawer/navbar state.
208
+ `ManagerProvider` mounts `QueryClientProvider` internally and creates an isolated default `QueryClient` per provider instance.
209
+ If you need custom React Query defaults or want to share a client intentionally, pass your own client with `queryClient={queryClient}`.
193
210
 
194
211
  ```tsx
195
212
  import type { ReactNode } from "react";
196
- import { BrowserRouter, Link, useLocation, useNavigate } from "react-router-dom";
213
+ import {
214
+ BrowserRouter,
215
+ Link,
216
+ useLocation,
217
+ useNavigate,
218
+ } from "react-router-dom";
197
219
  import {
198
220
  AuthProvider,
199
221
  ConfigProvider,
222
+ DrawerMenuProvider,
200
223
  IManager,
201
224
  ManagerProvider,
225
+ NavbarProvider,
202
226
  NotificationProvider,
203
227
  } from "@sito/dashboard-app";
204
228
 
205
- const manager = new IManager(import.meta.env.VITE_API_URL);
229
+ const authStorageKeys = {
230
+ user: "user",
231
+ remember: "remember",
232
+ refreshTokenKey: "refreshToken",
233
+ accessTokenExpiresAtKey: "accessTokenExpiresAt",
234
+ };
235
+
236
+ const manager = new IManager(
237
+ import.meta.env.VITE_API_URL,
238
+ authStorageKeys.user,
239
+ {
240
+ rememberKey: authStorageKeys.remember,
241
+ refreshTokenKey: authStorageKeys.refreshTokenKey,
242
+ accessTokenExpiresAtKey: authStorageKeys.accessTokenExpiresAtKey,
243
+ },
244
+ );
206
245
 
207
246
  function AppProviders({ children }: { children: ReactNode }) {
208
247
  const go = useNavigate();
@@ -211,12 +250,24 @@ function AppProviders({ children }: { children: ReactNode }) {
211
250
  return (
212
251
  <ConfigProvider
213
252
  location={location}
214
- navigate={(route) => go(route)}
253
+ navigate={(route) => {
254
+ if (typeof route === "number") go(route);
255
+ else go(route);
256
+ }}
215
257
  linkComponent={Link}
216
258
  >
217
259
  <ManagerProvider manager={manager}>
218
- <AuthProvider>
219
- <NotificationProvider>{children}</NotificationProvider>
260
+ <AuthProvider
261
+ user={authStorageKeys.user}
262
+ remember={authStorageKeys.remember}
263
+ refreshTokenKey={authStorageKeys.refreshTokenKey}
264
+ accessTokenExpiresAtKey={authStorageKeys.accessTokenExpiresAtKey}
265
+ >
266
+ <NotificationProvider>
267
+ <DrawerMenuProvider>
268
+ <NavbarProvider>{children}</NavbarProvider>
269
+ </DrawerMenuProvider>
270
+ </NotificationProvider>
220
271
  </AuthProvider>
221
272
  </ManagerProvider>
222
273
  </ConfigProvider>
@@ -232,6 +283,21 @@ export function App() {
232
283
  }
233
284
  ```
234
285
 
286
+ Notes:
287
+
288
+ - Keep `ManagerProvider` above `AuthProvider`.
289
+ - `NavbarProvider` is required when using `Navbar` or `useNavbar`; otherwise it can be omitted.
290
+ - If you customize auth storage keys in `AuthProvider`, pass the same keys to `IManager`/`BaseClient` auth config.
291
+
292
+ ## Built-in auth refresh behavior
293
+
294
+ `APIClient` and `BaseClient` already include refresh/retry behavior for secured requests:
295
+
296
+ - If `accessTokenExpiresAt` is close to expiry, a refresh runs before sending the request.
297
+ - If a secured request returns `401`, the client attempts one refresh and retries once.
298
+ - Concurrent refresh calls are deduplicated with a shared in-flight promise.
299
+ - If refresh fails, local session keys are cleared (`user`, `remember`, `refreshToken`, `accessTokenExpiresAt`).
300
+
235
301
  ## Local development (step-by-step)
236
302
 
237
303
  1. Clone the repository:
@@ -311,9 +377,9 @@ interface ProductFilterDto extends BaseFilterDto {
311
377
  class ProductsIndexedDBClient extends IndexedDBClient<
312
378
  "products",
313
379
  ProductDto,
314
- ProductDto, // TCommonDto
380
+ ProductDto, // TCommonDto
315
381
  Omit<ProductDto, "id" | "createdAt" | "updatedAt" | "deletedAt">,
316
- ProductDto, // TUpdateDto (extends DeleteDto via BaseEntityDto)
382
+ ProductDto, // TUpdateDto (extends DeleteDto via BaseEntityDto)
317
383
  ProductFilterDto,
318
384
  ImportPreviewDto
319
385
  > {
@@ -329,17 +395,19 @@ class ProductsIndexedDBClient extends IndexedDBClient<
329
395
  import { useState, useEffect } from "react";
330
396
 
331
397
  function useProductsClient() {
332
- const [client, setClient] = useState(
333
- () => navigator.onLine ? new ProductsClient(apiUrl) : new ProductsIndexedDBClient()
398
+ const [client, setClient] = useState(() =>
399
+ navigator.onLine
400
+ ? new ProductsClient(apiUrl)
401
+ : new ProductsIndexedDBClient(),
334
402
  );
335
403
 
336
404
  useEffect(() => {
337
- const goOnline = () => setClient(new ProductsClient(apiUrl));
405
+ const goOnline = () => setClient(new ProductsClient(apiUrl));
338
406
  const goOffline = () => setClient(new ProductsIndexedDBClient());
339
- window.addEventListener("online", goOnline);
407
+ window.addEventListener("online", goOnline);
340
408
  window.addEventListener("offline", goOffline);
341
409
  return () => {
342
- window.removeEventListener("online", goOnline);
410
+ window.removeEventListener("online", goOnline);
343
411
  window.removeEventListener("offline", goOffline);
344
412
  };
345
413
  }, []);
@@ -8,8 +8,16 @@ export type OnboardingStepType = {
8
8
  };
9
9
  export type StepPropsType = OnboardingStepType & {
10
10
  onClickNext: () => void;
11
+ onSkip: () => void;
12
+ onStartAsGuest: () => void;
13
+ onSignIn: () => void;
11
14
  final?: boolean;
12
15
  };
13
16
  export type OnboardingPropsType = {
14
17
  steps: OnboardingStepType[];
18
+ signInPath?: string;
19
+ guestPath?: string;
20
+ onSkip?: () => void;
21
+ onSignIn?: () => void;
22
+ onStartAsGuest?: () => void;
15
23
  };
@@ -1,5 +1,5 @@
1
1
  export { Action, Actions, ActionsDropdown } from '@sito/dashboard';
2
- export type { ActionPropsType, ActionsContainerPropsType } from '@sito/dashboard';
2
+ export type { ActionPropsType, ActionsContainerPropsType, } from '@sito/dashboard';
3
3
  export * from './Form';
4
4
  export * from './Dialog';
5
5
  export * from './Drawer';
@@ -1 +1 @@
1
- var vs=Object.defineProperty;var ks=(e,t,s)=>t in e?vs(e,t,{enumerable:!0,configurable:!0,writable:!0,value:s}):e[t]=s;var W=(e,t,s)=>ks(e,typeof t!="symbol"?t+"":t,s);var Br=require("./main.css");Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const S=require("@sito/dashboard"),d=require("react/jsx-runtime"),ce=require("@fortawesome/react-fontawesome"),p=require("react"),K=require("@fortawesome/free-solid-svg-icons"),Vt=require("react-dom"),ke=require("@tanstack/react-query"),Cs=require("@fortawesome/free-regular-svg-icons"),Ct=e=>e==null?!1:`${e}`.length>0,Ts=p.forwardRef(function(e,t){const{value:s,defaultValue:r,onChange:i,state:n=S.State.default,name:a="",id:o="",label:l="",disabled:m=!1,required:f=!1,containerClassName:h="",inputClassName:y="",labelClassName:b="",helperText:w="",helperTextClassName:k="",...C}=e,F=s!==void 0,[A,$]=p.useState(()=>Ct(r)),_=F?Ct(s):A,j=B=>{F||$(B.currentTarget.value.length>0),i==null||i(B)};return d.jsxs("div",{className:`form-paragraph-container group ${h}`,children:[d.jsx("textarea",{ref:t,name:a,id:o,className:`text-input text-area form-paragraph-textarea peer ${S.inputStateClassName(n)} ${_?"has-value":""} ${C.placeholder?"has-placeholder":""} ${y}`,required:f,defaultValue:r,...F?{value:s}:{},onChange:j,disabled:m,...C}),d.jsxs("label",{htmlFor:o,className:`text-input-label ${S.labelStateClassName(n)} ${b}`,children:[l,f?" *":""]}),!!w&&d.jsx("p",{className:`text-input-helper-text ${S.helperTextStateClassName(n)} ${k}`,children:w})]})}),Ss=e=>{const{t}=S.useTranslation(),{children:s,handleSubmit:r,onSubmit:i,isLoading:n=!1,buttonEnd:a=!0,reset:o}=e;return d.jsxs("form",{className:"form-container",onSubmit:r(i),children:[s,d.jsxs("div",{className:`form-actions ${a?"end":""}`,children:[d.jsxs(S.Button,{type:"submit",color:"primary",variant:"submit",disabled:n,name:t("_accessibility:buttons.submit"),"aria-label":t("_accessibility:ariaLabels.submit"),children:[n?d.jsx(S.Loading,{color:"stroke-base",loaderClass:"!w-6 mt-1",strokeWidth:"6"}):null,t("_accessibility:buttons.submit")]}),d.jsx(S.Button,{type:"button",variant:"outlined",onClick:()=>o==null?void 0:o(),name:t("_accessibility:buttons.cancel"),"aria-label":t("_accessibility:ariaLabels.cancel"),children:t("_accessibility:buttons.cancel")})]})]})},Es=p.forwardRef(function(e,t){const{t:s}=S.useTranslation(),[r,i]=p.useState(!1);return d.jsx(S.TextInput,{...e,type:r?"text":"password",ref:t,children:d.jsx(ye,{type:"button",tabIndex:-1,"aria-label":s(r?"_accessibility:ariaLabels.hidePassword":"_accessibility:ariaLabels.showPassword"),className:"password-icon",onClick:()=>i(!r),icon:r?K.faEyeSlash:K.faEye})})}),He=e=>{const{t}=S.useTranslation(),{title:s,children:r,handleClose:i,open:n=!1,containerClassName:a="",className:o="",animationClass:l="appear"}=e,m=p.useCallback(h=>{h.key==="Escape"&&n&&i()},[n,i]);p.useEffect(()=>(window.addEventListener("keydown",m),()=>{window.removeEventListener("keydown",m)}),[m]);const f=p.useCallback(h=>{h.target===h.currentTarget&&i()},[i]);return p.useEffect(()=>{const h=y=>{y?document.body.style.overflow="hidden":document.body.style.overflow="auto"};return h(n),()=>{h(!1)}},[n]),Vt.createPortal(d.jsx("div",{"aria-label":t("_accessibility:ariaLabels.closeDialog"),"aria-hidden":!n,onClick:f,className:`dialog-backdrop animated ${n?`opened ${l}`:"closed"} ${a}`,children:d.jsxs("div",{className:`dialog elevated animated ${n?`opened ${l}`:"closed"} ${o}`,children:[d.jsxs("div",{className:"dialog-header",children:[d.jsx("h3",{className:"dialog-title",children:s}),d.jsx(ye,{icon:K.faClose,disabled:!n,"aria-disabled":!n,onClick:i,className:"icon-button dialog-close-btn",name:t("_accessibility:buttons.closeDialog"),"aria-label":t("_accessibility:ariaLabels.closeDialog")})]}),r]})}),document.body)},We=e=>{const{primaryText:t,cancelText:s,onPrimaryClick:r,onCancel:i,isLoading:n=!1,disabled:a=!1,primaryType:o="submit",containerClassName:l="",primaryClassName:m="",alignEnd:f=!1,primaryName:h,primaryAriaLabel:y,cancelName:b,cancelAriaLabel:w}=e;return d.jsxs("div",{className:`dialog-actions ${f?"end":""} ${l}`,children:[d.jsxs(S.Button,{type:o,color:"primary",variant:"submit",className:m,disabled:a,onClick:r,name:h,"aria-label":y,children:[n?d.jsx(S.Loading,{color:"stroke-base",loaderClass:"!w-6 mt-1",strokeWidth:"6"}):null,t]}),d.jsx(S.Button,{type:"button",variant:"outlined",disabled:a,onClick:i,name:b,"aria-label":w,children:s})]})},As=e=>{const{t}=S.useTranslation(),{children:s,handleSubmit:r,onSubmit:i,handleClose:n,isLoading:a=!1,buttonEnd:o=!0,...l}=e;return d.jsx(He,{...l,handleClose:n,children:d.jsxs("form",{onSubmit:r(i),children:[d.jsx("div",{className:"form-container",children:s}),d.jsx(We,{primaryType:"submit",primaryText:t("_accessibility:buttons.submit"),cancelText:t("_accessibility:buttons.cancel"),onCancel:n,isLoading:a,disabled:a,primaryClassName:"dialog-form-primary",alignEnd:o,primaryName:t("_accessibility:buttons.submit"),primaryAriaLabel:t("_accessibility:ariaLabels.submit"),cancelName:t("_accessibility:buttons.cancel"),cancelAriaLabel:t("_accessibility:ariaLabels.cancel")})]})})},Ns=e=>{const{t}=S.useTranslation(),{children:s,handleSubmit:r,handleClose:i,isLoading:n=!1,...a}=e;return d.jsxs(He,{...a,handleClose:i,children:[s,d.jsx(We,{primaryText:t("_accessibility:buttons.ok"),cancelText:t("_accessibility:buttons.cancel"),onPrimaryClick:r,onCancel:i,isLoading:n,disabled:n,primaryType:"button",containerClassName:"mt-5",primaryName:t("_accessibility:buttons.ok"),primaryAriaLabel:t("_accessibility:ariaLabels.ok"),cancelName:t("_accessibility:buttons.cancel"),cancelAriaLabel:t("_accessibility:ariaLabels.cancel")})]})};function _s(e){const{message:t,className:s=""}=e,{t:r}=S.useTranslation();return d.jsx("p",{className:`import-error-message ${s}`,children:t??r("_messages:errors.parseFile",{defaultValue:"Failed to process file"})})}function Fs(e){const{message:t,className:s=""}=e,{t:r}=S.useTranslation();return d.jsxs("div",{className:`import-loading ${s}`,children:[d.jsx(S.Loading,{loaderClass:"w-5 h-5",className:"!w-auto"}),d.jsx("span",{children:t??r("_messages:loading.processingFile",{defaultValue:"Processing file..."})})]})}function js(e){const{items:t,max:s=5,className:r=""}=e,{t:i}=S.useTranslation();if(!t||t.length===0)return null;const n=t.slice(0,s);return d.jsxs("div",{className:`import-preview ${r}`,children:[d.jsx("p",{className:"import-preview-count",children:i("_pages:common.actions.import.previewCount",{count:t.length,defaultValue:`Preview: ${t.length} items`})}),d.jsx("pre",{className:"import-preview-content",children:JSON.stringify(n,null,2)})]})}const Mt=()=>({file:null,previewItems:null,parseError:null,processing:!1,overrideExisting:!1,inputKey:0});function Ds(e,t){switch(t.type){case"SET_FILE":return{...e,file:t.file,previewItems:null,parseError:null,processing:!1};case"START_PROCESSING":return{...e,processing:!0};case"SET_PREVIEW":return{...e,previewItems:t.items,parseError:null,processing:!1};case"SET_ERROR":return{...e,previewItems:null,parseError:t.message,processing:!1};case"SET_OVERRIDE":return{...e,overrideExisting:t.value};case"RESET":return{...Mt(),inputKey:e.inputKey+1}}}const $s=e=>{const{t}=S.useTranslation(),{children:s,handleSubmit:r,handleClose:i,isLoading:n=!1,fileProcessor:a,onFileProcessed:o,renderCustomPreview:l,onOverrideChange:m,open:f,...h}=e,[y,b]=p.useReducer(Ds,Mt()),{file:w,previewItems:k,parseError:C,processing:F,overrideExisting:A,inputKey:$}=y,_=p.useRef(o),j=p.useRef(a);p.useEffect(()=>{_.current=o},[o]),p.useEffect(()=>{j.current=a},[a]),p.useEffect(()=>{f||b({type:"RESET"})},[f]);const B=p.useCallback(async(R,X)=>{var P;if(j.current){b({type:"START_PROCESSING"});try{const q=await j.current(R,{override:X});b({type:"SET_PREVIEW",items:q??[]}),(P=_.current)==null||P.call(_,q??[])}catch(q){console.error(q);const re=q instanceof Error?q.message:"Failed to parse file";b({type:"SET_ERROR",message:re})}}},[]);return d.jsxs(He,{...h,open:f,handleClose:i,children:[d.jsx(S.FileInput,{onClear:()=>{var R;b({type:"SET_FILE",file:null}),(R=_.current)==null||R.call(_,[])},onChange:R=>{var P,q;const X=(P=R.target.files)==null?void 0:P[0];if(!X){b({type:"SET_FILE",file:null}),(q=_.current)==null||q.call(_,[]);return}b({type:"SET_FILE",file:X}),B(X,A)},label:t("_accessibility:labels.file")},$),d.jsxs("label",{className:"import-override-label",children:[d.jsx("input",{type:"checkbox",checked:A,onChange:R=>{const X=R.target.checked;b({type:"SET_OVERRIDE",value:X}),m==null||m(X),w&&B(w,X)}}),d.jsx("span",{children:t("_pages:common.actions.import.override",{defaultValue:"Override existing items"})})]}),d.jsx(_s,{message:C}),F&&d.jsx(Fs,{}),l?l(k):!!k&&k.length>0&&d.jsx(js,{items:k}),s,d.jsx(We,{primaryText:t("_accessibility:buttons.ok"),cancelText:t("_accessibility:buttons.cancel"),onPrimaryClick:()=>{(!a||!!k&&k.length>0)&&r()},onCancel:i,isLoading:n,primaryType:"button",containerClassName:"import-dialog-actions",primaryName:t("_accessibility:buttons.ok"),primaryAriaLabel:t("_accessibility:ariaLabels.ok"),cancelName:t("_accessibility:buttons.cancel"),cancelAriaLabel:t("_accessibility:ariaLabels.cancel")})]})};var z=(e=>(e[e.success=0]="success",e[e.error=1]="error",e[e.warning=2]="warning",e[e.info=3]="info",e))(z||{}),ee=(e=>(e.GET="GET",e.POST="POST",e.PUT="PUT",e.PATCH="PATCH",e.DELETE="DELETE",e))(ee||{});async function Oe(e,t="GET",s,r){const i={...s?{"Content-Type":"application/json"}:{},...r};try{const n=await fetch(e,{method:t,headers:i,...s?{body:JSON.stringify(s)}:{}}),a=await n.text();let o=null;try{o=a?JSON.parse(a):null}catch{o=null}if(!n.ok){const l=typeof o=="object"&&o!==null?o.message??o.error??a:a||n.statusText;return{data:null,status:n.status,error:{status:n.status,message:l||"Unknown error occurred"}}}return{data:n.status!==204&&o!==null?o:null,status:n.status,error:null}}catch(n){return{data:null,status:500,error:{status:500,message:n instanceof Error?n.message:"Unknown error occurred"}}}}function Pt(e,t){if(t){const s=Object.entries(t).filter(([,r])=>r!=null).map(([r,i])=>`${encodeURIComponent(r)}=${encodeURIComponent(String(i))}`).join("&");return s?`${e}?${s}`:e}return e}const rt=(e,t,s)=>{const r=[];if(t){const{sortingBy:i,sortingOrder:n,currentPage:a,pageSize:o}=t;i!==void 0&&r.push(`sort=${String(i)}`),n!==void 0&&r.push(`order=${n}`),a!==void 0&&r.push(`page=${a}`),o!==void 0&&r.push(`pageSize=${o}`)}if(s){const i=Object.entries(s).filter(([,n])=>n!=null&&n!=="").flatMap(([n,a])=>{if(Array.isArray(a))return a.map(o=>`${n}==${encodeURIComponent((o==null?void 0:o.id)??o)}`);if(typeof a=="object"&&a!==null&&"start"in a&&"end"in a){const o=[];return a.start!=null&&a.start!==""&&o.push(`${n}>=${encodeURIComponent(a.start)}`),a.end!=null&&a.end!==""&&o.push(`${n}<=${encodeURIComponent(a.end)}`),o}return typeof a=="object"&&a!==null?`${n}==${encodeURIComponent(a.id??"")}`:`${n}==${encodeURIComponent(a)}`});i.length>0&&r.push(`filters=${i.join(",")}`)}return r.length?`${e}?${r.join("&")}`:e},Ae=class Ae{constructor(t,s="user",r=!0,i,n={}){W(this,"baseUrl");W(this,"userKey");W(this,"rememberKey");W(this,"refreshTokenKey");W(this,"accessTokenExpiresAtKey");W(this,"refreshEndpoint");W(this,"refreshExpirySkewMs");W(this,"secured");W(this,"tokenAcquirer");this.baseUrl=t,this.secured=r,this.userKey=s,this.rememberKey=n.rememberKey??"remember",this.refreshTokenKey=n.refreshTokenKey??"refreshToken",this.accessTokenExpiresAtKey=n.accessTokenExpiresAtKey??"accessTokenExpiresAt",this.refreshEndpoint=n.refreshEndpoint??"auth/refresh",this.refreshExpirySkewMs=n.refreshExpirySkewMs??5e3,this.tokenAcquirer=i??this.defaultTokenAcquirer}defaultTokenAcquirer(t){if(t)return{credentials:"include"};const s=ve(this.userKey);if(s&&s.length)return{Authorization:`Bearer ${s}`}}getRefreshLockKey(){return`${this.baseUrl}|${this.userKey}|${this.refreshTokenKey}|${this.accessTokenExpiresAtKey}`}buildUrl(t){const s=this.baseUrl.endsWith("/")?this.baseUrl.slice(0,-1):this.baseUrl,r=t.startsWith("/")?t:`/${t}`;return`${s}${r}`}getRefreshToken(){const t=ve(this.refreshTokenKey);if(typeof t=="string"&&t.length)return t}getAccessTokenExpiresAt(){const t=ve(this.accessTokenExpiresAtKey);if(typeof t=="string"&&t.length)return t}canRefresh(){return!!this.getRefreshToken()}shouldRefreshBeforeRequest(){const t=this.getRefreshToken(),s=this.getAccessTokenExpiresAt();if(!t||!s)return!1;const r=Date.parse(s);return Number.isNaN(r)?!1:Date.now()>=r-this.refreshExpirySkewMs}clearStoredSession(){ie(this.userKey),ie(this.rememberKey),ie(this.refreshTokenKey),ie(this.accessTokenExpiresAtKey)}storeSession(t){be(this.userKey,t.token),typeof t.refreshToken=="string"&&t.refreshToken.length?be(this.refreshTokenKey,t.refreshToken):ie(this.refreshTokenKey),typeof t.accessTokenExpiresAt=="string"&&t.accessTokenExpiresAt.length?be(this.accessTokenExpiresAtKey,t.accessTokenExpiresAt):ie(this.accessTokenExpiresAtKey)}async refreshAccessTokenWithMutex(){const t=this.getRefreshToken();if(!t)throw{status:401,message:"Missing refresh token"};const s=this.getRefreshLockKey(),r=Ae.refreshInFlight.get(s);if(r){await r;return}const i=(async()=>{const{data:n,status:a,error:o}=await Oe(this.buildUrl(this.refreshEndpoint),ee.POST,{refreshToken:t});if(o||!(n!=null&&n.token)||typeof n.refreshToken!="string"||!n.refreshToken.length)throw this.clearStoredSession(),o??{status:a,message:"Unable to refresh session"};this.storeSession(n)})();Ae.refreshInFlight.set(s,i);try{await i}finally{Ae.refreshInFlight.delete(s)}}mergeHeaders(t){return{...(this.secured?this.tokenAcquirer():{})??{},...t??{}}}async makeRequestWithRefresh(t,s,r,i){this.secured&&this.shouldRefreshBeforeRequest()&&await this.refreshAccessTokenWithMutex();let n=await Oe(this.buildUrl(t),s,r,this.mergeHeaders(i));return this.secured&&n.status===401&&this.canRefresh()&&(await this.refreshAccessTokenWithMutex(),n=await Oe(this.buildUrl(t),s,r,this.mergeHeaders(i))),n}async doQuery(t,s=ee.GET,r,i){const{data:n,status:a,error:o}=await this.makeRequestWithRefresh(t,s,r,i);if(o||a<200||a>=300)throw o??{status:a,message:String(a)};return n}async get(t,s,r){const i=rt(t,s,r),{data:n,error:a}=await this.makeRequestWithRefresh(i,ee.GET);if(a)throw a;return n}async patch(t,s){const{error:r,data:i,status:n}=await this.makeRequestWithRefresh(t,ee.PATCH,s);if(r||i===null||i===void 0)throw r??{status:n,message:"Unknown error"};return i}async delete(t,s){const{error:r,data:i,status:n}=await this.makeRequestWithRefresh(t,ee.DELETE,s);if(r||i===null||i===void 0)throw r??{status:n,message:"Unknown error"};return i}async post(t,s){const{error:r,data:i,status:n}=await this.makeRequestWithRefresh(t,ee.POST,s);if(r||i===null||i===void 0)throw r??{status:n,message:"Unknown error"};return i}};W(Ae,"refreshInFlight",new Map);let $e=Ae;class Ot{constructor(t,s="user",r={}){W(this,"api");this.api=new $e(t,s,!1,void 0,r)}async login(t){const s="auth/sign-in",r=t;return await this.api.doQuery(s,ee.POST,r)}async refresh(t){return await this.api.doQuery("auth/refresh",ee.POST,t)}async logout(t){const s="auth/sign-out",r=t!=null&&t.accessToken?{Authorization:`Bearer ${t.accessToken}`}:void 0,i=t!=null&&t.refreshToken?{refreshToken:t.refreshToken}:void 0;return await this.api.doQuery(s,ee.POST,i,r)}async register(t){return await this.api.doQuery("auth/sign-up",ee.POST,t)}async getSession(){return await this.api.doQuery("auth/session",ee.GET,void 0,this.api.defaultTokenAcquirer())}}class Ls{constructor(t,s,r={}){W(this,"auth");this.auth=new Ot(t,s,r)}get Auth(){return this.auth}}class Is{constructor(t,s,r="user",i=!0,n={}){W(this,"table");W(this,"secured");W(this,"api");this.table=t,this.secured=i,this.api=new $e(s,r,i,void 0,n)}async insert(t){return await this.api.post(`${this.table}`,t)}async insertMany(t){return await this.api.doQuery(`${this.table}/batch`,ee.POST,t)}async update(t){return await this.api.patch(`${this.table}/${t.id}`,t)}async get(t,s){return await this.api.get(`${this.table}`,t,s)}async export(t){const s=rt(`${this.table}/export`,void 0,t);return await this.api.doQuery(s,ee.GET,void 0)}async import(t){return await this.api.doQuery(`${this.table}/import`,ee.POST,t)}async commonGet(t){return await this.api.doQuery(Pt(`${this.table}/common`,t),ee.GET)}async getById(t){return await this.api.doQuery(`${this.table}/${t}`)}async softDelete(t){return await this.api.delete(`${this.table}`,t)}async restore(t){return await this.api.patch(`${this.table}/restore`,t)}}class Rs{constructor(t,s,r=1){W(this,"table");W(this,"dbName");W(this,"version");W(this,"db",null);this.table=t,this.dbName=s,this.version=r}close(){this.db&&(this.db.onversionchange=null,this.db.close(),this.db=null)}open(){return this.db?Promise.resolve(this.db):new Promise((t,s)=>{const r=indexedDB.open(this.dbName,this.version);r.onupgradeneeded=i=>{const n=i.target.result;n.objectStoreNames.contains(this.table)||n.createObjectStore(this.table,{keyPath:"id",autoIncrement:!0})},r.onsuccess=i=>{this.db=i.target.result,this.db.onversionchange=()=>{this.close()},t(this.db)},r.onerror=i=>{s(i.target.error)}})}async transaction(t){return(await this.open()).transaction(this.table,t).objectStore(this.table)}request(t){return new Promise((s,r)=>{t.onsuccess=()=>s(t.result),t.onerror=()=>r(t.error)})}async insert(t){const s=await this.transaction("readwrite"),r=await this.request(s.add(t));return{...t,id:r}}async insertMany(t){const s=await this.transaction("readwrite");let r=0;for(const i of t)r=await this.request(s.add(i));return{...t[t.length-1],id:r}}async update(t,s){const r=typeof t=="number"?s:t;if(!r)throw new Error("IndexedDBClient.update requires a value payload");const i=typeof t=="number"?{...r,id:r.id??t}:r,n=await this.transaction("readwrite");return await this.request(n.put(i)),i}async get(t,s){var b;const r=await this.transaction("readonly"),i=await this.request(r.getAll()),n=this.applyFilter(i,s),a=(t==null?void 0:t.sortingBy)??"id",o=((b=t==null?void 0:t.sortingOrder)==null?void 0:b.toLowerCase())??"asc";n.sort((w,k)=>{const C=w[a],F=k[a];return C<F?o==="asc"?-1:1:C>F?o==="asc"?1:-1:0});const l=(t==null?void 0:t.pageSize)??10,m=(t==null?void 0:t.currentPage)??0,f=n.length,h=Math.ceil(f/l),y=n.slice(m*l,m*l+l);return{sort:a,order:o,currentPage:m,pageSize:l,totalElements:f,totalPages:h,items:y}}async export(t){const s=await this.transaction("readonly"),r=await this.request(s.getAll());return this.applyFilter(r,t)}async import(t){const s=await this.transaction("readwrite");let r=0;for(const i of t.items)t.override?await this.request(s.put(i)):await this.request(s.add(i)),r++;return r}async commonGet(t){const s=await this.transaction("readonly"),r=await this.request(s.getAll());return this.applyFilter(r,t)}async getById(t){const s=await this.transaction("readonly"),r=await this.request(s.get(t));if(!r)throw new Error(`Record ${t} not found in ${this.table}`);return r}async softDelete(t){const s=await this.transaction("readwrite");let r=0;for(const i of t){const n=await this.request(s.get(i));n&&(await this.request(s.put({...n,deletedAt:new Date})),r++)}return r}async restore(t){const s=await this.transaction("readwrite");let r=0;for(const i of t){const n=await this.request(s.get(i));n&&(await this.request(s.put({...n,deletedAt:null})),r++)}return r}applyFilter(t,s){return s?t.filter(r=>Object.entries(s).every(([i,n])=>this.matchesFilterValue(i,n,r[i]))):t}matchesFilterValue(t,s,r){if(s===void 0)return!0;if(t==="deletedAt"&&typeof s=="boolean"){const i=r!=null;return s?i:!i}return r===s}}function Vs(e){return Object.keys(e).filter(t=>isNaN(Number(t))).map(t=>({key:t,value:e[t]}))}const ve=(e,t="")=>{const s=localStorage.getItem(e)??void 0;if(s&&t.length)switch(t){case"object":return JSON.parse(s);case"number":return Number(s);case"boolean":return s==="true"||s==="1";default:return s}return s},be=(e,t)=>localStorage.setItem(e,typeof t=="object"?JSON.stringify(t):t),ie=e=>localStorage.removeItem(e);function Ms(e){const t=e?new Date(e):new Date,s={weekday:"long",day:"numeric",month:"long",year:"numeric",hour:"numeric",minute:"2-digit",hour12:!0};return t.toLocaleString(navigator.language||"es-ES",s)}function Ps(e){const t=e?new Date(e):new Date,s=String(t.getDate()).padStart(2,"0"),r=String(t.getMonth()+1).padStart(2,"0"),i=String(t.getFullYear()).slice(-2),n=String(t.getHours()).padStart(2,"0"),a=String(t.getMinutes()).padStart(2,"0");return`${s}/${r}/${i} ${n}:${a}`}function Os(e){const t=e?new Date(e):new Date,s=t.getFullYear(),r=String(t.getMonth()+1).padStart(2,"0"),i=String(t.getDate()).padStart(2,"0"),n=String(t.getHours()).padStart(2,"0"),a=String(t.getMinutes()).padStart(2,"0");return`${s}-${r}-${i}T${n}:${a}`}const Ut=()=>{var s;const e=navigator,t=((s=e==null?void 0:e.userAgentData)==null?void 0:s.platform)||(e==null?void 0:e.platform)||"";return/Mac|iPhone|iPod|iPad/i.test(t)};function Le(e){if(!e||typeof e!="object")return!1;const t=e;return Array.isArray(t.errors)&&t.errors.every(s=>Array.isArray(s)&&s.length===2&&typeof s[0]=="string")}function Ie(e){if(!e||typeof e!="object")return!1;const t=e;return typeof(t==null?void 0:t.status)=="number"&&typeof(t==null?void 0:t.message)=="string"}function Us(e,t){return e!=null&&e.errors?e.errors.map(([s,r])=>t(s,r)):[]}const Bt=p.createContext(void 0);function Bs(e){const{children:t}=e,s=p.useRef(0),[r,i]=p.useReducer((h,y)=>{const{type:b,items:w,id:k}=y;switch(b){case"set":return w??[];case"remove":return k!==void 0?h.filter(C=>C.id!==k):[]}return h},[],()=>[]),n=h=>h.map(y=>({...y,id:s.current++})),a=h=>i({type:"set",items:n([{...h,type:z.error}])}),o=h=>i({type:"set",items:n([{...h}])}),l=h=>i({type:"set",items:n(h)}),m=h=>i({type:"set",items:n([{...h,type:z.success}])}),f=h=>i({type:"remove",id:h});return d.jsx(Bt.Provider,{value:{notification:r,removeNotification:f,showErrorNotification:a,showNotification:o,showSuccessNotification:m,showStackNotifications:l},children:t})}const Ce=()=>{const e=p.useContext(Bt);if(!e)throw new Error("NotificationContext must be used within a Provider");return e},me=new ke.QueryClient({defaultOptions:{queries:{refetchInterval:!1,refetchOnMount:!0,refetchOnReconnect:!1,retry:!1,retryOnMount:!0,refetchOnWindowFocus:!1}}}),qt=p.createContext(void 0),qs=e=>{const{children:t,manager:s}=e;return d.jsx(qt.Provider,{value:{client:s},children:d.jsx(ke.QueryClientProvider,{client:me,children:t})})},Kt=()=>{const e=p.useContext(qt);if(!e)throw new Error("managerContext must be used within a Provider");return e.client},Ht=p.createContext(void 0),Ks=e=>{const{children:t,guestMode:s="guest_mode",user:r="user",remember:i="remember",refreshTokenKey:n="refreshToken",accessTokenExpiresAtKey:a="accessTokenExpiresAt"}=e,o=Kt(),[l,m]=p.useState({}),f=p.useCallback(()=>{ie(r),ie(i),ie(n),ie(a)},[a,n,i,r]),h=p.useCallback(()=>!!ve(s,"boolean")&&l.token===void 0,[l.token,s]),y=p.useCallback(F=>{be(s,F)},[s]),b=p.useCallback((F,A)=>{if(!F)return;const $=ve(i,"boolean"),_=A??(typeof $=="boolean"?$:!1);m(F),ie(s),be(r,F.token),be(i,_),typeof F.refreshToken=="string"&&F.refreshToken.length?be(n,F.refreshToken):ie(n),typeof F.accessTokenExpiresAt=="string"&&F.accessTokenExpiresAt.length?be(a,F.accessTokenExpiresAt):ie(a)},[a,s,n,i,r]),w=p.useCallback(async()=>{const F=ve(r)??l.token,A=ve(n)??(typeof l.refreshToken=="string"?l.refreshToken:void 0);try{await o.Auth.logout({accessToken:F,refreshToken:A})}catch($){console.error($)}m({}),f()},[l.refreshToken,l.token,f,o.Auth,n,r]),k=p.useCallback(async()=>{try{const F=await o.Auth.getSession();b(F)}catch(F){console.error(F),w()}},[b,w,o.Auth]),C={account:l,logUser:b,logoutUser:w,logUserFromLocal:k,isInGuestMode:h,setGuestMode:y};return d.jsx(Ht.Provider,{value:C,children:t})},nt=()=>{const e=p.useContext(Ht);if(!e)throw new Error("authContext must be used within a Provider");return e},Wt=p.createContext({}),Hs=e=>{const{children:t,location:s,navigate:r,linkComponent:i,searchComponent:n}=e;return d.jsx(Wt.Provider,{value:{location:s,navigate:r,linkComponent:i,searchComponent:n},children:t})},Ne=()=>{const e=p.useContext(Wt);if(e===void 0||Object.keys(e).length===0)throw new Error("Config provider has not been set. This step is required and cannot be skipped.");return e},Ws={addChildItem:()=>{},removeChildItem:()=>{},clearDynamicItems:()=>{},dynamicItems:{}},it=p.createContext(Ws),Qs=e=>{const{children:t}=e,[s,r]=p.useState({}),i=p.useCallback((l,m)=>r(f=>({...f,[l]:[...f[l]??[],m]})),[]),n=p.useCallback((l,m)=>r(f=>({...f,[l]:(f[l]??[]).filter((h,y)=>y!==m)})),[]),a=p.useCallback(l=>{r(l?m=>({...m,[l]:[]}):{})},[]),o=p.useMemo(()=>({dynamicItems:s,addChildItem:i,removeChildItem:n,clearDynamicItems:a}),[s,a,n,i]);return d.jsx(it.Provider,{value:o,children:t})},Qt=()=>p.useContext(it);function Gs(e){const{t}=S.useTranslation(),{open:s,onClose:r,menuMap:i,logo:n}=e,{account:a}=nt(),{dynamicItems:o}=Qt(),{linkComponent:l,location:m}=Ne(),f=l,h=p.useMemo(()=>i.filter(C=>{const F=C.auth,A=!!(a!=null&&a.email);return F==null||F&&A||!F&&!A}),[a==null?void 0:a.email,i]),y=p.useCallback(C=>{C.key==="Escape"&&s&&r()},[r,s]);p.useEffect(()=>(document.addEventListener("keydown",y),()=>{document.removeEventListener("keydown",y)}),[y]);const b=p.useCallback((C,F)=>F?C===`${m.pathname}${m.search}`:C===m.pathname,[m.pathname,m.search]),w=p.useCallback(C=>d.jsx("li",{className:`drawer-list-item-child ${b(C.path,!0)?"active":""} animated`,children:C.path?d.jsx(f,{tabIndex:s?0:-1,to:C.path??"/","aria-label":t(`_accessibility:ariaLabels.${C.id}`,{defaultValue:C.label}),className:"drawer-link",children:C.label}):C.label},C.id),[f,s,t,b]),k=p.useMemo(()=>h.map((C,F)=>{const A=C.page??String(F),$=`drawer-list-item ${b(C.path)?"active":""} animated`;if(C.type==="divider")return d.jsx("li",{className:$,children:d.jsx("hr",{className:"drawer-divider"})},A);const _=C.children??(C.page&&o?o[C.page]:null);return d.jsxs("li",{className:$,children:[d.jsxs(f,{tabIndex:s?0:-1,to:C.path??"/","aria-label":t(`_accessibility:ariaLabels.${String(C.page)}`,{defaultValue:t(`_pages:${String(C.page)}.title`)}),className:"drawer-link",children:[C.icon,t(`_pages:${C.page}.title`)]}),_&&d.jsx("ul",{className:"drawer-children-list",children:_.map(w)})]},A)}),[f,o,b,s,h,w,t]);return d.jsx("div",{"aria-label":t("_accessibility:ariaLabels.closeMenu"),"aria-disabled":!s,className:`${s?"opened":"closed"} drawer-backdrop`,onClick:()=>r(),children:d.jsxs("aside",{className:`${s?"opened":"closed"} drawer animated`,children:[d.jsxs("div",{className:"drawer-header-container",children:[n,d.jsx("h2",{className:"drawer-header poppins",children:t("_pages:home.appName")})]}),d.jsx("ul",{className:"drawer-menu-list",children:k})]})})}const ye=({icon:e,...t})=>d.jsx(S.IconButton,{icon:d.jsx(ce.FontAwesomeIcon,{icon:e}),...t});var Ze,Tt;function zs(){if(Tt)return Ze;Tt=1;const e=(o,l="local",m=void 0)=>{if(l==="local"){if(localStorage.getItem(o)!==void 0&&localStorage.getItem(o)!=="undefined"&&localStorage.getItem(o)!==null)return m===void 0||m!==void 0&&localStorage.getItem(o)===m}else if(l==="session"&&sessionStorage.getItem(o)!==void 0&&sessionStorage.getItem(o)!=="undefined"&&sessionStorage.getItem(o)!==null)return m===void 0||m!==void 0&&sessionStorage.getItem(o)===m;return!1},t=o=>{const l={};return o.substring(1).split("&").forEach(f=>{const[h,y]=f.split("=");l[h]=y}),l},s=(o="")=>{if(n(o)&&o.length)return n(o);{let l=navigator.language||navigator.userLanguage;if(l.indexOf("en")<0&&l.indexOf("es")<0&&(l="en-US"),l=l.split("-")[0],l)return o.length&&i(o,730,l),l}return"en"},r=(o=0,l=0,m=window,f="smooth")=>m.scroll({top:o,left:l,behavior:f}),i=(o,l,m,f="/",h="Lax")=>{var y=new Date;y.setTime(y.getTime()+l*24*60*60*1e3);const b="; expires="+y.toUTCString();document.cookie=`${o}=${m||""}${b};path=${f};SameSite=${h}`},n=o=>{const l=`${o}=`,f=decodeURIComponent(document.cookie).split(";");for(let h=0;h<f.length;h+=1){let y=f[h];for(;y.charAt(0)===" ";)y=y.substring(1);if(y.indexOf(l)===0)return y.substring(l.length,y.length)}return""};return Ze={getCookie:n,createCookie:i,deleteCookie:o=>document.cookie=`${o}=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;`,getUserLanguage:s,scrollTo:r,parseQueries:t,validation:e},Ze}var Js=zs();function Ys(){const{t:e,language:t}=S.useTranslation();return{timeAge:p.useCallback(r=>{const n=new Date-r,a=Math.floor(n/(1e3*60)),o=Math.floor(a/60),l=t==="es",m=e("_accessibility:labels.ago"),f=e("_accessibility:labels.minute"),h=e("_accessibility:labels.minutes"),y=e("_accessibility:labels.hour"),b=e("_accessibility:labels.hours"),w=e("_accessibility:labels.yesterday"),k=e("_accessibility:labels.justNow");return n<1e3*60?k:a<60?`${l?m:""} ${a} ${a===1?f:h} ${l?"":m}`:o<24?`${l?m:""} ${o} ${o===1?y:b} ${l?"":m}`:o<48?w:r.toLocaleDateString(navigator.language||"es-ES",{day:"2-digit",month:"2-digit",year:"numeric"})},[e,t])}}const at=e=>{const{showSuccessNotification:t}=Ce(),{mutationFn:s,onError:r,onSuccess:i,onSuccessMessage:n}=e,[a,o]=p.useState([]),{open:l,handleClose:m,handleOpen:f}=ft(),h=()=>{m(),o([])},y=async w=>{o(w),f()},b=ke.useMutation({mutationFn:()=>s(Array.isArray(a)?a:[a]),onError:w=>{console.error(w),r&&r(w),h()},onSuccess:async w=>{i&&i(w),t({message:n}),h()}});return{open:l,onClick:y,close:h,dialogFn:b,isLoading:b.isPending}};var Re=e=>e.type==="checkbox",Se=e=>e instanceof Date,se=e=>e==null;const Gt=e=>typeof e=="object";var H=e=>!se(e)&&!Array.isArray(e)&&Gt(e)&&!Se(e),Xs=e=>H(e)&&e.target?Re(e.target)?e.target.checked:e.target.value:e,Zs=e=>e.substring(0,e.search(/\.\d+(\.|$)/))||e,er=(e,t)=>e.has(Zs(t)),tr=e=>{const t=e.constructor&&e.constructor.prototype;return H(t)&&t.hasOwnProperty("isPrototypeOf")},ot=typeof window<"u"&&typeof window.HTMLElement<"u"&&typeof document<"u";function Y(e){let t;const s=Array.isArray(e),r=typeof FileList<"u"?e instanceof FileList:!1;if(e instanceof Date)t=new Date(e);else if(!(ot&&(e instanceof Blob||r))&&(s||H(e)))if(t=s?[]:{},!s&&!tr(e))t=e;else for(const i in e)e.hasOwnProperty(i)&&(t[i]=Y(e[i]));else return e;return t}var Qe=e=>/^\w*$/.test(e),G=e=>e===void 0,ct=e=>Array.isArray(e)?e.filter(Boolean):[],lt=e=>ct(e.replace(/["|']|\]/g,"").split(/\.|\[/)),E=(e,t,s)=>{if(!t||!H(e))return s;const r=(Qe(t)?[t]:lt(t)).reduce((i,n)=>se(i)?i:i[n],e);return G(r)||r===e?G(e[t])?s:e[t]:r},fe=e=>typeof e=="boolean",O=(e,t,s)=>{let r=-1;const i=Qe(t)?[t]:lt(t),n=i.length,a=n-1;for(;++r<n;){const o=i[r];let l=s;if(r!==a){const m=e[o];l=H(m)||Array.isArray(m)?m:isNaN(+i[r+1])?{}:[]}if(o==="__proto__"||o==="constructor"||o==="prototype")return;e[o]=l,e=e[o]}};const St={BLUR:"blur",FOCUS_OUT:"focusout"},ue={onBlur:"onBlur",onChange:"onChange",onSubmit:"onSubmit",onTouched:"onTouched",all:"all"},ge={max:"max",min:"min",maxLength:"maxLength",minLength:"minLength",pattern:"pattern",required:"required",validate:"validate"},sr=p.createContext(null);sr.displayName="HookFormContext";var rr=(e,t,s,r=!0)=>{const i={defaultValues:t._defaultValues};for(const n in e)Object.defineProperty(i,n,{get:()=>{const a=n;return t._proxyFormState[a]!==ue.all&&(t._proxyFormState[a]=!r||ue.all),e[a]}});return i};const nr=typeof window<"u"?p.useLayoutEffect:p.useEffect;var he=e=>typeof e=="string",ir=(e,t,s,r,i)=>he(e)?(r&&t.watch.add(e),E(s,e,i)):Array.isArray(e)?e.map(n=>(r&&t.watch.add(n),E(s,n))):(r&&(t.watchAll=!0),s),st=e=>se(e)||!Gt(e);function xe(e,t,s=new WeakSet){if(st(e)||st(t))return e===t;if(Se(e)&&Se(t))return e.getTime()===t.getTime();const r=Object.keys(e),i=Object.keys(t);if(r.length!==i.length)return!1;if(s.has(e)||s.has(t))return!0;s.add(e),s.add(t);for(const n of r){const a=e[n];if(!i.includes(n))return!1;if(n!=="ref"){const o=t[n];if(Se(a)&&Se(o)||H(a)&&H(o)||Array.isArray(a)&&Array.isArray(o)?!xe(a,o,s):a!==o)return!1}}return!0}var ar=(e,t,s,r,i)=>t?{...s[e],types:{...s[e]&&s[e].types?s[e].types:{},[r]:i||!0}}:{},je=e=>Array.isArray(e)?e:[e],Et=()=>{let e=[];return{get observers(){return e},next:i=>{for(const n of e)n.next&&n.next(i)},subscribe:i=>(e.push(i),{unsubscribe:()=>{e=e.filter(n=>n!==i)}}),unsubscribe:()=>{e=[]}}},ne=e=>H(e)&&!Object.keys(e).length,ut=e=>e.type==="file",de=e=>typeof e=="function",Be=e=>{if(!ot)return!1;const t=e?e.ownerDocument:0;return e instanceof(t&&t.defaultView?t.defaultView.HTMLElement:HTMLElement)},zt=e=>e.type==="select-multiple",dt=e=>e.type==="radio",or=e=>dt(e)||Re(e),et=e=>Be(e)&&e.isConnected;function cr(e,t){const s=t.slice(0,-1).length;let r=0;for(;r<s;)e=G(e)?r++:e[t[r++]];return e}function lr(e){for(const t in e)if(e.hasOwnProperty(t)&&!G(e[t]))return!1;return!0}function Q(e,t){const s=Array.isArray(t)?t:Qe(t)?[t]:lt(t),r=s.length===1?e:cr(e,s),i=s.length-1,n=s[i];return r&&delete r[n],i!==0&&(H(r)&&ne(r)||Array.isArray(r)&&lr(r))&&Q(e,s.slice(0,-1)),e}var Jt=e=>{for(const t in e)if(de(e[t]))return!0;return!1};function qe(e,t={}){const s=Array.isArray(e);if(H(e)||s)for(const r in e)Array.isArray(e[r])||H(e[r])&&!Jt(e[r])?(t[r]=Array.isArray(e[r])?[]:{},qe(e[r],t[r])):se(e[r])||(t[r]=!0);return t}function Yt(e,t,s){const r=Array.isArray(e);if(H(e)||r)for(const i in e)Array.isArray(e[i])||H(e[i])&&!Jt(e[i])?G(t)||st(s[i])?s[i]=Array.isArray(e[i])?qe(e[i],[]):{...qe(e[i])}:Yt(e[i],se(t)?{}:t[i],s[i]):s[i]=!xe(e[i],t[i]);return s}var _e=(e,t)=>Yt(e,t,qe(t));const At={value:!1,isValid:!1},Nt={value:!0,isValid:!0};var Xt=e=>{if(Array.isArray(e)){if(e.length>1){const t=e.filter(s=>s&&s.checked&&!s.disabled).map(s=>s.value);return{value:t,isValid:!!t.length}}return e[0].checked&&!e[0].disabled?e[0].attributes&&!G(e[0].attributes.value)?G(e[0].value)||e[0].value===""?Nt:{value:e[0].value,isValid:!0}:Nt:At}return At},Zt=(e,{valueAsNumber:t,valueAsDate:s,setValueAs:r})=>G(e)?e:t?e===""?NaN:e&&+e:s&&he(e)?new Date(e):r?r(e):e;const _t={isValid:!1,value:null};var es=e=>Array.isArray(e)?e.reduce((t,s)=>s&&s.checked&&!s.disabled?{isValid:!0,value:s.value}:t,_t):_t;function Ft(e){const t=e.ref;return ut(t)?t.files:dt(t)?es(e.refs).value:zt(t)?[...t.selectedOptions].map(({value:s})=>s):Re(t)?Xt(e.refs).value:Zt(G(t.value)?e.ref.value:t.value,e)}var ur=(e,t,s,r)=>{const i={};for(const n of e){const a=E(t,n);a&&O(i,n,a._f)}return{criteriaMode:s,names:[...e],fields:i,shouldUseNativeValidation:r}},Ke=e=>e instanceof RegExp,Fe=e=>G(e)?e:Ke(e)?e.source:H(e)?Ke(e.value)?e.value.source:e.value:e,jt=e=>({isOnSubmit:!e||e===ue.onSubmit,isOnBlur:e===ue.onBlur,isOnChange:e===ue.onChange,isOnAll:e===ue.all,isOnTouch:e===ue.onTouched});const Dt="AsyncFunction";var dr=e=>!!e&&!!e.validate&&!!(de(e.validate)&&e.validate.constructor.name===Dt||H(e.validate)&&Object.values(e.validate).find(t=>t.constructor.name===Dt)),fr=e=>e.mount&&(e.required||e.min||e.max||e.maxLength||e.minLength||e.pattern||e.validate),$t=(e,t,s)=>!s&&(t.watchAll||t.watch.has(e)||[...t.watch].some(r=>e.startsWith(r)&&/^\.\w+/.test(e.slice(r.length))));const De=(e,t,s,r)=>{for(const i of s||Object.keys(e)){const n=E(e,i);if(n){const{_f:a,...o}=n;if(a){if(a.refs&&a.refs[0]&&t(a.refs[0],i)&&!r)return!0;if(a.ref&&t(a.ref,a.name)&&!r)return!0;if(De(o,t))break}else if(H(o)&&De(o,t))break}}};function Lt(e,t,s){const r=E(e,s);if(r||Qe(s))return{error:r,name:s};const i=s.split(".");for(;i.length;){const n=i.join("."),a=E(t,n),o=E(e,n);if(a&&!Array.isArray(a)&&s!==n)return{name:s};if(o&&o.type)return{name:n,error:o};if(o&&o.root&&o.root.type)return{name:`${n}.root`,error:o.root};i.pop()}return{name:s}}var hr=(e,t,s,r)=>{s(e);const{name:i,...n}=e;return ne(n)||Object.keys(n).length>=Object.keys(t).length||Object.keys(n).find(a=>t[a]===(!r||ue.all))},mr=(e,t,s)=>!e||!t||e===t||je(e).some(r=>r&&(s?r===t:r.startsWith(t)||t.startsWith(r))),yr=(e,t,s,r,i)=>i.isOnAll?!1:!s&&i.isOnTouch?!(t||e):(s?r.isOnBlur:i.isOnBlur)?!e:(s?r.isOnChange:i.isOnChange)?e:!0,gr=(e,t)=>!ct(E(e,t)).length&&Q(e,t),br=(e,t,s)=>{const r=je(E(e,s));return O(r,"root",t[s]),O(e,s,r),e},Ue=e=>he(e);function It(e,t,s="validate"){if(Ue(e)||Array.isArray(e)&&e.every(Ue)||fe(e)&&!e)return{type:s,message:Ue(e)?e:"",ref:t}}var Ee=e=>H(e)&&!Ke(e)?e:{value:e,message:""},Rt=async(e,t,s,r,i,n)=>{const{ref:a,refs:o,required:l,maxLength:m,minLength:f,min:h,max:y,pattern:b,validate:w,name:k,valueAsNumber:C,mount:F}=e._f,A=E(s,k);if(!F||t.has(k))return{};const $=o?o[0]:a,_=D=>{i&&$.reportValidity&&($.setCustomValidity(fe(D)?"":D||""),$.reportValidity())},j={},B=dt(a),R=Re(a),X=B||R,P=(C||ut(a))&&G(a.value)&&G(A)||Be(a)&&a.value===""||A===""||Array.isArray(A)&&!A.length,q=ar.bind(null,k,r,j),re=(D,L,U,J=ge.maxLength,Z=ge.minLength)=>{const V=D?L:U;j[k]={type:D?J:Z,message:V,ref:a,...q(D?J:Z,V)}};if(n?!Array.isArray(A)||!A.length:l&&(!X&&(P||se(A))||fe(A)&&!A||R&&!Xt(o).isValid||B&&!es(o).isValid)){const{value:D,message:L}=Ue(l)?{value:!!l,message:l}:Ee(l);if(D&&(j[k]={type:ge.required,message:L,ref:$,...q(ge.required,L)},!r))return _(L),j}if(!P&&(!se(h)||!se(y))){let D,L;const U=Ee(y),J=Ee(h);if(!se(A)&&!isNaN(A)){const Z=a.valueAsNumber||A&&+A;se(U.value)||(D=Z>U.value),se(J.value)||(L=Z<J.value)}else{const Z=a.valueAsDate||new Date(A),V=le=>new Date(new Date().toDateString()+" "+le),te=a.type=="time",ae=a.type=="week";he(U.value)&&A&&(D=te?V(A)>V(U.value):ae?A>U.value:Z>new Date(U.value)),he(J.value)&&A&&(L=te?V(A)<V(J.value):ae?A<J.value:Z<new Date(J.value))}if((D||L)&&(re(!!D,U.message,J.message,ge.max,ge.min),!r))return _(j[k].message),j}if((m||f)&&!P&&(he(A)||n&&Array.isArray(A))){const D=Ee(m),L=Ee(f),U=!se(D.value)&&A.length>+D.value,J=!se(L.value)&&A.length<+L.value;if((U||J)&&(re(U,D.message,L.message),!r))return _(j[k].message),j}if(b&&!P&&he(A)){const{value:D,message:L}=Ee(b);if(Ke(D)&&!A.match(D)&&(j[k]={type:ge.pattern,message:L,ref:a,...q(ge.pattern,L)},!r))return _(L),j}if(w){if(de(w)){const D=await w(A,s),L=It(D,$);if(L&&(j[k]={...L,...q(ge.validate,L.message)},!r))return _(L.message),j}else if(H(w)){let D={};for(const L in w){if(!ne(D)&&!r)break;const U=It(await w[L](A,s),$,L);U&&(D={...U,...q(L,U.message)},_(U.message),r&&(j[k]=D))}if(!ne(D)&&(j[k]={ref:$,...D},!r))return j}}return _(!0),j};const pr={mode:ue.onSubmit,reValidateMode:ue.onChange,shouldFocusError:!0};function wr(e={}){let t={...pr,...e},s={submitCount:0,isDirty:!1,isReady:!1,isLoading:de(t.defaultValues),isValidating:!1,isSubmitted:!1,isSubmitting:!1,isSubmitSuccessful:!1,isValid:!1,touchedFields:{},dirtyFields:{},validatingFields:{},errors:t.errors||{},disabled:t.disabled||!1},r={},i=H(t.defaultValues)||H(t.values)?Y(t.defaultValues||t.values)||{}:{},n=t.shouldUnregister?{}:Y(i),a={action:!1,mount:!1,watch:!1},o={mount:new Set,disabled:new Set,unMount:new Set,array:new Set,watch:new Set},l,m=0;const f={isDirty:!1,dirtyFields:!1,validatingFields:!1,touchedFields:!1,isValidating:!1,isValid:!1,errors:!1};let h={...f};const y={array:Et(),state:Et()},b=t.criteriaMode===ue.all,w=c=>u=>{clearTimeout(m),m=setTimeout(c,u)},k=async c=>{if(!t.disabled&&(f.isValid||h.isValid||c)){const u=t.resolver?ne((await R()).errors):await P(r,!0);u!==s.isValid&&y.state.next({isValid:u})}},C=(c,u)=>{!t.disabled&&(f.isValidating||f.validatingFields||h.isValidating||h.validatingFields)&&((c||Array.from(o.mount)).forEach(g=>{g&&(u?O(s.validatingFields,g,u):Q(s.validatingFields,g))}),y.state.next({validatingFields:s.validatingFields,isValidating:!ne(s.validatingFields)}))},F=(c,u=[],g,T,v=!0,x=!0)=>{if(T&&g&&!t.disabled){if(a.action=!0,x&&Array.isArray(E(r,c))){const N=g(E(r,c),T.argA,T.argB);v&&O(r,c,N)}if(x&&Array.isArray(E(s.errors,c))){const N=g(E(s.errors,c),T.argA,T.argB);v&&O(s.errors,c,N),gr(s.errors,c)}if((f.touchedFields||h.touchedFields)&&x&&Array.isArray(E(s.touchedFields,c))){const N=g(E(s.touchedFields,c),T.argA,T.argB);v&&O(s.touchedFields,c,N)}(f.dirtyFields||h.dirtyFields)&&(s.dirtyFields=_e(i,n)),y.state.next({name:c,isDirty:re(c,u),dirtyFields:s.dirtyFields,errors:s.errors,isValid:s.isValid})}else O(n,c,u)},A=(c,u)=>{O(s.errors,c,u),y.state.next({errors:s.errors})},$=c=>{s.errors=c,y.state.next({errors:s.errors,isValid:!1})},_=(c,u,g,T)=>{const v=E(r,c);if(v){const x=E(n,c,G(g)?E(i,c):g);G(x)||T&&T.defaultChecked||u?O(n,c,u?x:Ft(v._f)):U(c,x),a.mount&&k()}},j=(c,u,g,T,v)=>{let x=!1,N=!1;const I={name:c};if(!t.disabled){if(!g||T){(f.isDirty||h.isDirty)&&(N=s.isDirty,s.isDirty=I.isDirty=re(),x=N!==I.isDirty);const M=xe(E(i,c),u);N=!!E(s.dirtyFields,c),M?Q(s.dirtyFields,c):O(s.dirtyFields,c,!0),I.dirtyFields=s.dirtyFields,x=x||(f.dirtyFields||h.dirtyFields)&&N!==!M}if(g){const M=E(s.touchedFields,c);M||(O(s.touchedFields,c,g),I.touchedFields=s.touchedFields,x=x||(f.touchedFields||h.touchedFields)&&M!==g)}x&&v&&y.state.next(I)}return x?I:{}},B=(c,u,g,T)=>{const v=E(s.errors,c),x=(f.isValid||h.isValid)&&fe(u)&&s.isValid!==u;if(t.delayError&&g?(l=w(()=>A(c,g)),l(t.delayError)):(clearTimeout(m),l=null,g?O(s.errors,c,g):Q(s.errors,c)),(g?!xe(v,g):v)||!ne(T)||x){const N={...T,...x&&fe(u)?{isValid:u}:{},errors:s.errors,name:c};s={...s,...N},y.state.next(N)}},R=async c=>{C(c,!0);const u=await t.resolver(n,t.context,ur(c||o.mount,r,t.criteriaMode,t.shouldUseNativeValidation));return C(c),u},X=async c=>{const{errors:u}=await R(c);if(c)for(const g of c){const T=E(u,g);T?O(s.errors,g,T):Q(s.errors,g)}else s.errors=u;return u},P=async(c,u,g={valid:!0})=>{for(const T in c){const v=c[T];if(v){const{_f:x,...N}=v;if(x){const I=o.array.has(x.name),M=v._f&&dr(v._f);M&&f.validatingFields&&C([T],!0);const oe=await Rt(v,o.disabled,n,b,t.shouldUseNativeValidation&&!u,I);if(M&&f.validatingFields&&C([T]),oe[x.name]&&(g.valid=!1,u))break;!u&&(E(oe,x.name)?I?br(s.errors,oe,x.name):O(s.errors,x.name,oe[x.name]):Q(s.errors,x.name))}!ne(N)&&await P(N,u,g)}}return g.valid},q=()=>{for(const c of o.unMount){const u=E(r,c);u&&(u._f.refs?u._f.refs.every(g=>!et(g)):!et(u._f.ref))&&Ge(c)}o.unMount=new Set},re=(c,u)=>!t.disabled&&(c&&u&&O(n,c,u),!xe(le(),i)),D=(c,u,g)=>ir(c,o,{...a.mount?n:G(u)?i:he(c)?{[c]:u}:u},g,u),L=c=>ct(E(a.mount?n:i,c,t.shouldUnregister?E(i,c,[]):[])),U=(c,u,g={})=>{const T=E(r,c);let v=u;if(T){const x=T._f;x&&(!x.disabled&&O(n,c,Zt(u,x)),v=Be(x.ref)&&se(u)?"":u,zt(x.ref)?[...x.ref.options].forEach(N=>N.selected=v.includes(N.value)):x.refs?Re(x.ref)?x.refs.forEach(N=>{(!N.defaultChecked||!N.disabled)&&(Array.isArray(v)?N.checked=!!v.find(I=>I===N.value):N.checked=v===N.value||!!v)}):x.refs.forEach(N=>N.checked=N.value===v):ut(x.ref)?x.ref.value="":(x.ref.value=v,x.ref.type||y.state.next({name:c,values:Y(n)})))}(g.shouldDirty||g.shouldTouch)&&j(c,v,g.shouldTouch,g.shouldDirty,!0),g.shouldValidate&&ae(c)},J=(c,u,g)=>{for(const T in u){if(!u.hasOwnProperty(T))return;const v=u[T],x=c+"."+T,N=E(r,x);(o.array.has(c)||H(v)||N&&!N._f)&&!Se(v)?J(x,v,g):U(x,v,g)}},Z=(c,u,g={})=>{const T=E(r,c),v=o.array.has(c),x=Y(u);O(n,c,x),v?(y.array.next({name:c,values:Y(n)}),(f.isDirty||f.dirtyFields||h.isDirty||h.dirtyFields)&&g.shouldDirty&&y.state.next({name:c,dirtyFields:_e(i,n),isDirty:re(c,x)})):T&&!T._f&&!se(x)?J(c,x,g):U(c,x,g),$t(c,o)&&y.state.next({...s,name:c}),y.state.next({name:a.mount?c:void 0,values:Y(n)})},V=async c=>{a.mount=!0;const u=c.target;let g=u.name,T=!0;const v=E(r,g),x=M=>{T=Number.isNaN(M)||Se(M)&&isNaN(M.getTime())||xe(M,E(n,g,M))},N=jt(t.mode),I=jt(t.reValidateMode);if(v){let M,oe;const Me=u.type?Ft(v._f):Xs(c),we=c.type===St.BLUR||c.type===St.FOCUS_OUT,ps=!fr(v._f)&&!t.resolver&&!E(s.errors,g)&&!v._f.deps||yr(we,E(s.touchedFields,g),s.isSubmitted,I,N),Ye=$t(g,o,we);O(n,g,Me),we?(v._f.onBlur&&v._f.onBlur(c),l&&l(0)):v._f.onChange&&v._f.onChange(c);const Xe=j(g,Me,we),ws=!ne(Xe)||Ye;if(!we&&y.state.next({name:g,type:c.type,values:Y(n)}),ps)return(f.isValid||h.isValid)&&(t.mode==="onBlur"?we&&k():we||k()),ws&&y.state.next({name:g,...Ye?{}:Xe});if(!we&&Ye&&y.state.next({...s}),t.resolver){const{errors:vt}=await R([g]);if(x(Me),T){const xs=Lt(s.errors,r,g),kt=Lt(vt,r,xs.name||g);M=kt.error,g=kt.name,oe=ne(vt)}}else C([g],!0),M=(await Rt(v,o.disabled,n,b,t.shouldUseNativeValidation))[g],C([g]),x(Me),T&&(M?oe=!1:(f.isValid||h.isValid)&&(oe=await P(r,!0)));T&&(v._f.deps&&ae(v._f.deps),B(g,oe,M,Xe))}},te=(c,u)=>{if(E(s.errors,u)&&c.focus)return c.focus(),1},ae=async(c,u={})=>{let g,T;const v=je(c);if(t.resolver){const x=await X(G(c)?c:v);g=ne(x),T=c?!v.some(N=>E(x,N)):g}else c?(T=(await Promise.all(v.map(async x=>{const N=E(r,x);return await P(N&&N._f?{[x]:N}:N)}))).every(Boolean),!(!T&&!s.isValid)&&k()):T=g=await P(r);return y.state.next({...!he(c)||(f.isValid||h.isValid)&&g!==s.isValid?{}:{name:c},...t.resolver||!c?{isValid:g}:{},errors:s.errors}),u.shouldFocus&&!T&&De(r,te,c?v:o.mount),T},le=c=>{const u={...a.mount?n:i};return G(c)?u:he(c)?E(u,c):c.map(g=>E(u,g))},Ve=(c,u)=>({invalid:!!E((u||s).errors,c),isDirty:!!E((u||s).dirtyFields,c),error:E((u||s).errors,c),isValidating:!!E(s.validatingFields,c),isTouched:!!E((u||s).touchedFields,c)}),Te=c=>{c&&je(c).forEach(u=>Q(s.errors,u)),y.state.next({errors:c?s.errors:{}})},mt=(c,u,g)=>{const T=(E(r,c,{_f:{}})._f||{}).ref,v=E(s.errors,c)||{},{ref:x,message:N,type:I,...M}=v;O(s.errors,c,{...M,...u,ref:T}),y.state.next({name:c,errors:s.errors,isValid:!1}),g&&g.shouldFocus&&T&&T.focus&&T.focus()},fs=(c,u)=>de(c)?y.state.subscribe({next:g=>"values"in g&&c(D(void 0,u),g)}):D(c,u,!0),yt=c=>y.state.subscribe({next:u=>{mr(c.name,u.name,c.exact)&&hr(u,c.formState||f,bs,c.reRenderRoot)&&c.callback({values:{...n},...s,...u,defaultValues:i})}}).unsubscribe,hs=c=>(a.mount=!0,h={...h,...c.formState},yt({...c,formState:h})),Ge=(c,u={})=>{for(const g of c?je(c):o.mount)o.mount.delete(g),o.array.delete(g),u.keepValue||(Q(r,g),Q(n,g)),!u.keepError&&Q(s.errors,g),!u.keepDirty&&Q(s.dirtyFields,g),!u.keepTouched&&Q(s.touchedFields,g),!u.keepIsValidating&&Q(s.validatingFields,g),!t.shouldUnregister&&!u.keepDefaultValue&&Q(i,g);y.state.next({values:Y(n)}),y.state.next({...s,...u.keepDirty?{isDirty:re()}:{}}),!u.keepIsValid&&k()},gt=({disabled:c,name:u})=>{(fe(c)&&a.mount||c||o.disabled.has(u))&&(c?o.disabled.add(u):o.disabled.delete(u))},ze=(c,u={})=>{let g=E(r,c);const T=fe(u.disabled)||fe(t.disabled);return O(r,c,{...g||{},_f:{...g&&g._f?g._f:{ref:{name:c}},name:c,mount:!0,...u}}),o.mount.add(c),g?gt({disabled:fe(u.disabled)?u.disabled:t.disabled,name:c}):_(c,!0,u.value),{...T?{disabled:u.disabled||t.disabled}:{},...t.progressive?{required:!!u.required,min:Fe(u.min),max:Fe(u.max),minLength:Fe(u.minLength),maxLength:Fe(u.maxLength),pattern:Fe(u.pattern)}:{},name:c,onChange:V,onBlur:V,ref:v=>{if(v){ze(c,u),g=E(r,c);const x=G(v.value)&&v.querySelectorAll&&v.querySelectorAll("input,select,textarea")[0]||v,N=or(x),I=g._f.refs||[];if(N?I.find(M=>M===x):x===g._f.ref)return;O(r,c,{_f:{...g._f,...N?{refs:[...I.filter(et),x,...Array.isArray(E(i,c))?[{}]:[]],ref:{type:x.type,name:c}}:{ref:x}}}),_(c,!1,void 0,x)}else g=E(r,c,{}),g._f&&(g._f.mount=!1),(t.shouldUnregister||u.shouldUnregister)&&!(er(o.array,c)&&a.action)&&o.unMount.add(c)}}},Je=()=>t.shouldFocusError&&De(r,te,o.mount),ms=c=>{fe(c)&&(y.state.next({disabled:c}),De(r,(u,g)=>{const T=E(r,g);T&&(u.disabled=T._f.disabled||c,Array.isArray(T._f.refs)&&T._f.refs.forEach(v=>{v.disabled=T._f.disabled||c}))},0,!1))},bt=(c,u)=>async g=>{let T;g&&(g.preventDefault&&g.preventDefault(),g.persist&&g.persist());let v=Y(n);if(y.state.next({isSubmitting:!0}),t.resolver){const{errors:x,values:N}=await R();s.errors=x,v=Y(N)}else await P(r);if(o.disabled.size)for(const x of o.disabled)Q(v,x);if(Q(s.errors,"root"),ne(s.errors)){y.state.next({errors:{}});try{await c(v,g)}catch(x){T=x}}else u&&await u({...s.errors},g),Je(),setTimeout(Je);if(y.state.next({isSubmitted:!0,isSubmitting:!1,isSubmitSuccessful:ne(s.errors)&&!T,submitCount:s.submitCount+1,errors:s.errors}),T)throw T},ys=(c,u={})=>{E(r,c)&&(G(u.defaultValue)?Z(c,Y(E(i,c))):(Z(c,u.defaultValue),O(i,c,Y(u.defaultValue))),u.keepTouched||Q(s.touchedFields,c),u.keepDirty||(Q(s.dirtyFields,c),s.isDirty=u.defaultValue?re(c,Y(E(i,c))):re()),u.keepError||(Q(s.errors,c),f.isValid&&k()),y.state.next({...s}))},pt=(c,u={})=>{const g=c?Y(c):i,T=Y(g),v=ne(c),x=v?i:T;if(u.keepDefaultValues||(i=g),!u.keepValues){if(u.keepDirtyValues){const N=new Set([...o.mount,...Object.keys(_e(i,n))]);for(const I of Array.from(N))E(s.dirtyFields,I)?O(x,I,E(n,I)):Z(I,E(x,I))}else{if(ot&&G(c))for(const N of o.mount){const I=E(r,N);if(I&&I._f){const M=Array.isArray(I._f.refs)?I._f.refs[0]:I._f.ref;if(Be(M)){const oe=M.closest("form");if(oe){oe.reset();break}}}}if(u.keepFieldsRef)for(const N of o.mount)Z(N,E(x,N));else r={}}n=t.shouldUnregister?u.keepDefaultValues?Y(i):{}:Y(x),y.array.next({values:{...x}}),y.state.next({values:{...x}})}o={mount:u.keepDirtyValues?o.mount:new Set,unMount:new Set,array:new Set,disabled:new Set,watch:new Set,watchAll:!1,focus:""},a.mount=!f.isValid||!!u.keepIsValid||!!u.keepDirtyValues,a.watch=!!t.shouldUnregister,y.state.next({submitCount:u.keepSubmitCount?s.submitCount:0,isDirty:v?!1:u.keepDirty?s.isDirty:!!(u.keepDefaultValues&&!xe(c,i)),isSubmitted:u.keepIsSubmitted?s.isSubmitted:!1,dirtyFields:v?{}:u.keepDirtyValues?u.keepDefaultValues&&n?_e(i,n):s.dirtyFields:u.keepDefaultValues&&c?_e(i,c):u.keepDirty?s.dirtyFields:{},touchedFields:u.keepTouched?s.touchedFields:{},errors:u.keepErrors?s.errors:{},isSubmitSuccessful:u.keepIsSubmitSuccessful?s.isSubmitSuccessful:!1,isSubmitting:!1})},wt=(c,u)=>pt(de(c)?c(n):c,u),gs=(c,u={})=>{const g=E(r,c),T=g&&g._f;if(T){const v=T.refs?T.refs[0]:T.ref;v.focus&&(v.focus(),u.shouldSelect&&de(v.select)&&v.select())}},bs=c=>{s={...s,...c}},xt={control:{register:ze,unregister:Ge,getFieldState:Ve,handleSubmit:bt,setError:mt,_subscribe:yt,_runSchema:R,_focusError:Je,_getWatch:D,_getDirty:re,_setValid:k,_setFieldArray:F,_setDisabledField:gt,_setErrors:$,_getFieldArray:L,_reset:pt,_resetDefaultValues:()=>de(t.defaultValues)&&t.defaultValues().then(c=>{wt(c,t.resetOptions),y.state.next({isLoading:!1})}),_removeUnmounted:q,_disableForm:ms,_subjects:y,_proxyFormState:f,get _fields(){return r},get _formValues(){return n},get _state(){return a},set _state(c){a=c},get _defaultValues(){return i},get _names(){return o},set _names(c){o=c},get _formState(){return s},get _options(){return t},set _options(c){t={...t,...c}}},subscribe:hs,trigger:ae,register:ze,handleSubmit:bt,watch:fs,setValue:Z,getValues:le,reset:wt,resetField:ys,clearErrors:Te,unregister:Ge,setError:mt,setFocus:gs,getFieldState:Ve};return{...xt,formControl:xt}}function ts(e={}){const t=p.useRef(void 0),s=p.useRef(void 0),[r,i]=p.useState({isDirty:!1,isValidating:!1,isLoading:de(e.defaultValues),isSubmitted:!1,isSubmitting:!1,isSubmitSuccessful:!1,isValid:!1,submitCount:0,dirtyFields:{},touchedFields:{},validatingFields:{},errors:e.errors||{},disabled:e.disabled||!1,isReady:!1,defaultValues:de(e.defaultValues)?void 0:e.defaultValues});if(!t.current)if(e.formControl)t.current={...e.formControl,formState:r},e.defaultValues&&!de(e.defaultValues)&&e.formControl.reset(e.defaultValues,e.resetOptions);else{const{formControl:a,...o}=wr(e);t.current={...o,formState:r}}const n=t.current.control;return n._options=e,nr(()=>{const a=n._subscribe({formState:n._proxyFormState,callback:()=>i({...n._formState}),reRenderRoot:!0});return i(o=>({...o,isReady:!0})),n._formState.isReady=!0,a},[n]),p.useEffect(()=>n._disableForm(e.disabled),[n,e.disabled]),p.useEffect(()=>{e.mode&&(n._options.mode=e.mode),e.reValidateMode&&(n._options.reValidateMode=e.reValidateMode)},[n,e.mode,e.reValidateMode]),p.useEffect(()=>{e.errors&&(n._setErrors(e.errors),n._focusError())},[n,e.errors]),p.useEffect(()=>{e.shouldUnregister&&n._subjects.state.next({values:n._getWatch()})},[n,e.shouldUnregister]),p.useEffect(()=>{if(n._proxyFormState.isDirty){const a=n._getDirty();a!==r.isDirty&&n._subjects.state.next({isDirty:a})}},[n,r.isDirty]),p.useEffect(()=>{e.values&&!xe(e.values,s.current)?(n._reset(e.values,{keepFieldsRef:!0,...n._options.resetOptions}),s.current=e.values,i(a=>({...a}))):n._resetDefaultValues()},[n,e.values]),p.useEffect(()=>{n._state.mount||(n._setValid(),n._state.mount=!0),n._state.watch&&(n._state.watch=!1,n._subjects.state.next({...n._formState})),n._removeUnmounted()}),t.current.formState=rr(r,n),t.current}const xr=e=>{const{t}=S.useTranslation(),{showStackNotifications:s,showSuccessNotification:r}=Ce(),{defaultValues:i,mutationFn:n,formToDto:a,onError:o,onSuccess:l,queryKey:m,onSuccessMessage:f}=e,{control:h,handleSubmit:y,reset:b,setError:w,getValues:k,setValue:C}=ts({defaultValues:i}),F=p.useCallback(_=>{const j=_==null?void 0:_.errors,B=[];return j&&j.forEach(([R,X])=>{const P=document.querySelector(`[name="${R}"]`);(P instanceof HTMLInputElement||P instanceof HTMLTextAreaElement||P instanceof HTMLSelectElement)&&(P.focus(),P.classList.add("error"),B.push(t(`_entities:${m}.${R}.${X}`)))}),B},[t,m]),A=p.useCallback(()=>{document.querySelectorAll("input, textarea, select").forEach(j=>{j.classList.remove("error")})},[]),$=ke.useMutation({mutationFn:n,onError:_=>{console.error(_);const j=_;if(o)o(_);else if(Le(j)){const B=F(j);s(B.map(R=>({message:R,type:z.error})))}else if(Ie(j)){const B=j.message||t("_accessibility:errors.500"),R=t(`_accessibility:errors.${j.status}`);s([{message:R||B,type:z.error}])}},onSuccess:async _=>{me&&await me.invalidateQueries({queryKey:m}),l&&l(_),f&&r({message:f})}});return{control:h,getValues:k,setValue:C,handleSubmit:y,onSubmit:_=>{A(),$.mutate(a?a(_):_)},reset:b,setError:w,isLoading:$.isPending}},ss=e=>{const{t}=S.useTranslation(),{onClick:s,icon:r=K.faTrash,sticky:i=!0,hidden:n=!1,multiple:a=!0,disabled:o=!1,id:l=pe.Delete,tooltip:m=t("_pages:common.actions.delete.text")}=e;return{action:p.useCallback(h=>({id:l,sticky:i,tooltip:m,multiple:a,onClick:()=>s([h==null?void 0:h.id]),hidden:!!h.deletedAt||n,disabled:!!h.deletedAt||o,icon:d.jsx(ce.FontAwesomeIcon,{className:"text-bg-error",icon:r}),onMultipleClick:y=>s(y.map(b=>b.id))}),[o,n,r,l,a,s,i,m])}},rs=e=>{const{t}=S.useTranslation(),{onClick:s,sticky:r=!0,hidden:i=!1,disabled:n=!1,multiple:a=!1,icon:o=K.faRotateLeft,id:l=pe.Restore,tooltip:m=t("_pages:common.actions.restore.text")}=e;return{action:p.useCallback(h=>({id:l,sticky:r,tooltip:m,multiple:a,onClick:()=>s([h==null?void 0:h.id]),hidden:!h.deletedAt||i,disabled:!h.deletedAt||n,icon:d.jsx(ce.FontAwesomeIcon,{className:"text-bg-error",icon:o}),onMultipleClick:y=>s(y.map(b=>b.id))}),[n,i,o,l,a,s,r,m])}},vr=e=>{const{t}=S.useTranslation(),{onClick:s,hidden:r=!1,sticky:i=!0,disabled:n=!1,id:a=pe.Edit,icon:o=K.faPencil,tooltip:l=t("_pages:common.actions.edit.text")}=e;return{action:p.useCallback(f=>({id:a,sticky:i,tooltip:l,onClick:()=>s(f==null?void 0:f.id),hidden:!!f.deletedAt||r,disabled:!!f.deletedAt||n,icon:d.jsx(ce.FontAwesomeIcon,{className:"primary",icon:o})}),[n,r,o,a,s,i,l])}};var pe=(e=>(e.Add="add",e.Edit="edit",e.Delete="delete",e.Restore="restore",e.Refresh="refresh",e.Export="export",e.Import="import",e))(pe||{});const ns=e=>{const{t}=S.useTranslation(),{onClick:s,hidden:r=!1,disabled:i=!1,isLoading:n=!1}=e;return{action:p.useCallback(()=>({id:pe.Export,hidden:r,disabled:i,icon:d.jsx(ce.FontAwesomeIcon,{className:`${n?"rotate":""}`,icon:n?K.faCircleNotch:K.faCloudArrowDown}),tooltip:t("_pages:common.actions.export.text"),onClick:s}),[i,r,n,s,t])}},is=e=>{const{t}=S.useTranslation(),{onClick:s,hidden:r=!1,disabled:i=!1,isLoading:n=!1}=e;return{action:p.useCallback(()=>({id:pe.Import,hidden:r,disabled:i,icon:d.jsx(ce.FontAwesomeIcon,{className:`${n?"rotate":""}`,icon:n?K.faCircleNotch:K.faCloudUpload}),tooltip:t("_pages:common.actions.import.text"),onClick:s}),[i,r,n,s,t])}},kr=e=>{const{queryKey:t,onSuccess:s,...r}=e,{showStackNotifications:i}=Ce(),{t:n}=S.useTranslation(),{open:a,onClick:o,close:l,dialogFn:m,isLoading:f}=at({onSuccessMessage:n("_pages:common.actions.delete.successMessage"),onError:y=>{const b=y;if(Le(b))i(b.errors.map(([w,k])=>({message:n(`_pages:${w}.errors.${k}`),type:z.error})));else if(Ie(b)){const w=b.message||n("_accessibility:errors.500"),k=n(`_accessibility:errors.${b.status}`);i([{message:k||w,type:z.error}])}},onSuccess:async y=>{await me.invalidateQueries({queryKey:t}),s&&s(y)},...r}),{action:h}=ss({onClick:o});return{onClick:o,title:n("_pages:common.actions.delete.dialog.title"),open:a,isLoading:f,handleSubmit:()=>m.mutate(),handleClose:l,action:h}},ft=()=>{const[e,t]=p.useState(!1);return{open:e,setOpen:t,handleClose:()=>t(!1),handleOpen:()=>t(!0)}},Cr=e=>{const{t}=S.useTranslation(),{showErrorNotification:s,showStackNotifications:r,showSuccessNotification:i}=Ce(),{defaultValues:n,getFunction:a,mutationFn:o,formToDto:l,dtoToForm:m,onError:f,onSuccess:h,queryKey:y,onSuccessMessage:b,title:w}=e,[k,C]=p.useState(0),{open:F,handleClose:A,handleOpen:$}=ft(),{control:_,handleSubmit:j,reset:B,setError:R,getValues:X,setValue:P}=ts({defaultValues:n}),{data:q,isLoading:re}=ke.useQuery({queryFn:()=>a==null?void 0:a(k),queryKey:[...y,k],enabled:!!a&&!!y&&!!k});p.useEffect(()=>{q&&m&&B({...m(q)})},[q]);const D=p.useCallback(V=>{const te=V==null?void 0:V.errors,ae=[];return te&&te.forEach(([le,Ve])=>{const Te=document.querySelector(`[name="${le}"]`);(Te instanceof HTMLInputElement||Te instanceof HTMLTextAreaElement||Te instanceof HTMLSelectElement)&&(Te.focus(),Te.classList.add("error"),ae.push(t(`_entities:${y}.${le}.${Ve}`)))}),ae},[t,y]),L=p.useCallback(()=>{document.querySelectorAll("input, textarea, select").forEach(te=>{te.classList.remove("error")})},[]),U=p.useCallback(V=>{C(V??0),$()},[$]),J=p.useCallback(()=>{L(),A(),B()},[B,L,A]),Z=ke.useMutation({mutationFn:o,onError:V=>{if(console.error(V),f)f(V);else{const te=V;if(Le(te)){const ae=D(te);r(ae.map(le=>({message:le,type:z.error})))}else if(Ie(te)){const ae=te.message||t("_accessibility:errors.500"),le=t(`_accessibility:errors.${te.status}`);s({message:le||ae})}else s({message:t("_accessibility:errors.500")})}},onSuccess:async V=>{await me.invalidateQueries({queryKey:y}),h&&h(V),i({message:b}),J()}});return{open:F,openDialog:U,handleClose:J,control:_,getValues:X,setValue:P,handleSubmit:j,onSubmit:V=>Z.mutate(l?l(V):V),reset:B,setError:R,title:w,isLoading:re||Z.isPending}},Tr=e=>{const{queryKey:t,onSuccess:s,...r}=e,{showStackNotifications:i}=Ce(),{t:n}=S.useTranslation(),{open:a,onClick:o,close:l,dialogFn:m,isLoading:f}=at({onSuccessMessage:n("_pages:common.actions.restore.successMessage"),onError:y=>{const b=y;if(Le(b))i(b.errors.map(([w,k])=>({message:n(`_pages:${w}.errors.${k}`),type:z.error})));else if(Ie(b)){const w=b.message||n("_accessibility:errors.500"),k=n(`_accessibility:errors.${b.status}`);i([{message:k||w,type:z.error}])}},onSuccess:async y=>{await me.invalidateQueries({queryKey:t}),s&&s(y)},...r}),{action:h}=rs({onClick:o});return{onClick:o,title:n("_pages:common.actions.restore.dialog.title"),open:a,isLoading:f,handleSubmit:()=>m.mutate(),handleClose:l,action:h}};function Sr(e){const{t}=S.useTranslation(),{queryKey:s,mutationFn:r,entity:i,fileProcessor:n,renderCustomPreview:a,onError:o}=e,[l,m]=p.useState(!1),[f,h]=p.useState(null),[y,b]=p.useState(!1),w=ke.useMutation({mutationFn:r,onError:C=>{console.error(C),o==null||o(C)},onSuccess:async()=>{me&&await me.invalidateQueries({queryKey:s})}}),{action:k}=is({onClick:()=>m(!0)});return{handleSubmit:async()=>{if(!(!f||f.length===0))try{await w.mutateAsync({items:f,override:y}),m(!1),h(null),b(!1)}catch(C){console.error(C)}},isLoading:w.isPending,fileProcessor:n,onFileProcessed:C=>h(C),renderCustomPreview:a,onOverrideChange:C=>b(C),open:l,title:t("_pages:common.actions.import.dialog.title",{entity:t(`_pages:${i}.title`)}),handleClose:()=>{m(!1),h(null)},action:k}}const Er=e=>{const{showSuccessNotification:t}=Ce(),{t:s}=S.useTranslation(),{entity:r,mutationFn:i,onError:n,onSuccess:a,onSuccessMessage:o=s("_pages:common.actions.export.successMessage")}=e,l=ke.useMutation({mutationFn:()=>i(),onError:h=>{console.error(h),n&&n(h)},onSuccess:async h=>{const y=JSON.stringify(h,null,2),b=new Blob([y],{type:"application/json"}),w=URL.createObjectURL(b),k=document.createElement("a");k.href=w,k.download=`${r}.json`,k.click(),URL.revokeObjectURL(w),a&&a(h),t({message:o})}}),m=p.useCallback(()=>{l.mutate()},[l]),{action:f}=ns({onClick:m,isLoading:l.isPending});return{action:f}};function as(e){const[t,s]=p.useState(!1),r=p.useCallback(()=>{const i=window.scrollY>e;s(i)},[e]);return p.useEffect(()=>(window.addEventListener("scroll",r),()=>{window.removeEventListener("scroll",r)}),[r]),t}const Ar=e=>{const{t}=S.useTranslation(),{icon:s=K.faArrowUp,threshold:r=200,scrollTop:i=0,scrollLeft:n=0,tooltip:a=t("_accessibility:buttons.toTop"),scrollOnClick:o=!0,onClick:l,className:m="",variant:f="submit",color:h="primary",...y}=e,b=as(r),w=()=>{l==null||l(),o&&Js.scrollTo(n,i)};return d.jsx(ye,{variant:f,color:h,icon:s,"data-tooltip-id":"tooltip",onClick:w,className:`to-top ${b?"show":"hide"} ${m}`.trim(),"data-tooltip-content":a,...y})};function Nr(e){const{t}=S.useTranslation();if("children"in e){const{children:_,className:j}=e;return d.jsx("div",{className:`error-container${j?` ${j}`:""}`,children:_})}const{error:r,message:i,iconProps:n,onRetry:a,retryLabel:o,retryButtonProps:l,messageProps:m,className:f,resetErrorBoundary:h}=e,y=a??h,{className:b,children:w,onClick:k,...C}=l??{},{className:F,...A}=m??{},$=n!==null;return d.jsxs("div",{className:`error-container${f?` ${f}`:""}`,children:[$&&d.jsx(ce.FontAwesomeIcon,{...n,icon:(n==null?void 0:n.icon)??Cs.faSadTear,className:`error-icon${n!=null&&n.className?` ${n.className}`:""}`}),d.jsx("p",{...A,className:`error-message${F?` ${F}`:""}`,children:i??(r==null?void 0:r.message)??t("_accessibility:errors.unknownError")}),y&&d.jsx(S.Button,{type:"button",variant:"submit",color:"primary",...C,className:`error-retry ${b?` ${b}`:""}`,onClick:_=>{k==null||k(_),_.defaultPrevented||y()},children:w??o??t("_accessibility:actions.retry",{defaultValue:"Retry"})})]})}const _r=e=>{const{showBackButton:t,title:s,actions:r}=e,{t:i}=S.useTranslation(),{navigate:n}=Ne();return d.jsxs("div",{className:"page-header",children:[d.jsxs("div",{className:"page-header-left",children:[t&&d.jsx(ye,{icon:K.faArrowLeft,onClick:()=>n(-1),name:i("_accessibility:buttons.back"),"data-tooltip-id":"tooltip","data-tooltip-content":i("_accessibility:buttons.back")}),d.jsx("h2",{className:"page-header-title",children:s})]}),d.jsxs("div",{children:[d.jsx(S.Actions,{className:"page-header-actions-desktop",actions:r??[]}),d.jsx(S.ActionsDropdown,{className:"page-header-actions-mobile",actions:r??[]})]})]})},Fr=e=>{const{title:t,children:s,addOptions:r,filterOptions:i,actions:n,queryKey:a,isLoading:o=!1,isAnimated:l=!0,showBackButton:m=!1}=e,{t:f}=S.useTranslation(),{countOfFilters:h}=S.useTableOptions(),y=p.useMemo(()=>{const b=Array.isArray(n)?[...n]:[];if(a){const w={id:pe.Refresh,onClick:()=>me.invalidateQueries({queryKey:a}),icon:d.jsx(ce.FontAwesomeIcon,{icon:K.faRotateLeft}),tooltip:f("_pages:common.actions.refresh.text")};b.unshift(w)}if(r){const w={...r,id:pe.Add,icon:d.jsx(ce.FontAwesomeIcon,{icon:K.faAdd})};b.unshift(w)}if(i){const w={...i,id:"filter",icon:d.jsx(ce.FontAwesomeIcon,{icon:K.faFilter}),children:d.jsx(S.Badge,{className:`${h>0?"show":"hide"} `,count:h})};b.push(w)}return b},[n,r,h,i,a,f]);return d.jsxs("main",{className:"page-main",children:[d.jsx(_r,{showBackButton:m,actions:y,title:t}),d.jsx("div",{className:`page-main-content ${l?"appear":""}`,children:o?d.jsx(S.Loading,{className:"page-loading"}):s}),r&&d.jsx(ye,{icon:r.icon??K.faAdd,color:r.color??"primary",variant:r.variant??"submit",onClick:()=>{var b;return(b=r.onClick)==null?void 0:b.call(r)},className:`button fab ${r.className??""}`})]})},jr=e=>{const{t}=S.useTranslation(),{className:s="",itemClassName:r="",loading:i=!1,emptyComponent:n=null,emptyMessage:a=t("_accessibility:messages.empty"),renderComponent:o,data:l=[],hasMore:m=!1,loadingMore:f=!1,onLoadMore:h,loadMoreComponent:y=null,observerRootMargin:b="0px 0px 200px 0px",observerThreshold:w=0}=e,k=p.useRef(!1),C=p.useRef(null),F=p.useCallback(async()=>{if(!(!m||!h)&&!(f||k.current)){k.current=!0;try{await h()}finally{k.current=!1}}},[m,f,h]);return p.useEffect(()=>{if(!m||!h||!C.current||typeof IntersectionObserver>"u")return;const A=new IntersectionObserver($=>{$.some(_=>_.isIntersecting)&&F()},{rootMargin:b,threshold:w});return A.observe(C.current),()=>A.disconnect()},[m,h,b,w,F]),i?d.jsx(S.Loading,{}):d.jsx(d.Fragment,{children:l!=null&&l.length?d.jsxs("ul",{className:`pretty-grid-main ${s}`,children:[l==null?void 0:l.map(A=>d.jsx("li",{className:`pretty-grid-item ${r}`,children:o(A)},A.id)),m&&h&&d.jsx("li",{className:"pretty-grid-load-more",ref:C,children:y})]}):d.jsx(d.Fragment,{children:n||d.jsx(ds,{message:a})})})},ht=p.createContext({title:"",setTitle:()=>{},rightContent:null,setRightContent:()=>{}}),Dr=e=>{const{children:t}=e,[s,r]=p.useState(""),[i,n]=p.useState(null),a=p.useCallback(m=>{r(m)},[]),o=p.useCallback(m=>{n(m)},[]),l=p.useMemo(()=>({title:s,setTitle:a,rightContent:i,setRightContent:o}),[s,a,i,o]);return d.jsx(ht.Provider,{value:l,children:t})},os=()=>p.useContext(ht);function $r(e){const{t}=S.useTranslation(),{openDrawer:s,showSearch:r=!0,menuButtonProps:i}=e,{searchComponent:n,location:a}=Ne(),{title:o,rightContent:l}=os(),[m,f]=p.useState(!1),h=p.useCallback(b=>{(Ut()?b.metaKey:b.ctrlKey)&&b.shiftKey&&b.key.toLowerCase()==="f"&&(f(!0),b.preventDefault())},[]);p.useEffect(()=>(window.addEventListener("keydown",h),()=>{window.removeEventListener("keydown",h)}),[h]);const y=n;return d.jsxs(d.Fragment,{children:[a.pathname!=="/"&&!!y&&d.jsx(y,{open:m,onClose:()=>f(!1)}),d.jsxs("header",{id:"header",className:"header",children:[d.jsxs("div",{className:"navbar-left",children:[d.jsx(ye,{...i,type:(i==null?void 0:i.type)??"button",icon:(i==null?void 0:i.icon)??K.faBars,onClick:b=>{var w;(w=i==null?void 0:i.onClick)==null||w.call(i,b),s()},name:(i==null?void 0:i.name)??t("_accessibility:buttons.openMenu"),"aria-label":(i==null?void 0:i["aria-label"])??t("_accessibility:ariaLabels.openMenu"),className:`navbar-menu animated ${(i==null?void 0:i.className)??""}`}),d.jsx("h1",{className:"poppins navbar-title",children:o||t("_pages:home.appName")})]}),d.jsxs("div",{className:"navbar-right",children:[l,r&&d.jsx(ye,{icon:K.faSearch,className:"navbar-search-btn",onClick:()=>f(!0)})]})]})]})}const Pe=300,Lr=e=>e??z.error,Ir=e=>{switch(e){case z.error:return K.faWarning;default:return K.faCircleCheck}},tt=e=>{switch(e){case z.success:return"!text-success";case z.error:return"!text-error";case z.warning:return"!text-warning";default:return"!text-info"}},Rr=e=>{switch(e){case z.success:return"bg-bg-success";case z.error:return"bg-bg-error";case z.warning:return"bg-bg-warning";default:return"bg-bg-info"}};function Vr(){const{t:e}=S.useTranslation(),{notification:t,removeNotification:s}=Ce(),[r,i]=p.useState([]),n=p.useRef(r);p.useLayoutEffect(()=>{n.current=r});const a=p.useRef(null),o=p.useCallback(l=>{i(m=>l!==void 0?m.map(f=>f.id===l?{...f,closing:!0}:f):m.map(f=>({...f,closing:!0}))),l!==void 0?setTimeout(()=>{s(l),i(m=>m.filter(f=>f.id!==l))},Pe):(a.current&&clearTimeout(a.current),a.current=setTimeout(()=>{s(),i([]),a.current=null},Pe))},[s]);return p.useEffect(()=>{let l=null;const m=()=>{l&&clearTimeout(l),a.current&&(clearTimeout(a.current),a.current=null)};if(t.length===0)return n.current.length===0?void 0:(a.current&&clearTimeout(a.current),l=setTimeout(()=>{i(b=>b.map(w=>({...w,closing:!0}))),l=null},0),a.current=setTimeout(()=>{i([]),a.current=null},Pe),m);const f=new Set(n.current.map(b=>b.id));if(!t.some(b=>b.id!==void 0&&!f.has(b.id)))return;if(n.current.length===0){const b=[...t];return l=setTimeout(()=>{i(b.map(w=>({...w,closing:!1}))),l=null},0),()=>{l&&clearTimeout(l)}}a.current&&clearTimeout(a.current),l=setTimeout(()=>{i(b=>b.every(w=>w.closing)?b:b.map(w=>({...w,closing:!0}))),l=null},0);const y=[...t];return a.current=setTimeout(()=>{i(y.map(b=>({...b,closing:!1}))),a.current=null},Pe),m},[t]),p.useEffect(()=>{if(!r.length)return;let l;const m=window.setTimeout(()=>{l=()=>o(),window.addEventListener("click",l)},0),f=h=>{h.key==="Escape"&&o()};return window.addEventListener("keydown",f),()=>{window.clearTimeout(m),l&&window.removeEventListener("click",l),window.removeEventListener("keydown",f)}},[r.length,o]),Vt.createPortal(d.jsx("div",{className:`notification-portal ${r.length?"active":""}`,children:r.map(({id:l,type:m,message:f,closing:h})=>{const y=Lr(m);return d.jsxs("div",{className:`notification ${h?"closing":""} ${Rr(y)}`,onClick:b=>b.stopPropagation(),children:[d.jsxs("div",{className:"notification-body",children:[d.jsx(ce.FontAwesomeIcon,{icon:Ir(y),className:`notification-icon ${tt(y)}`}),d.jsx("p",{className:`notification-text ${tt(y)}`,children:f})]}),d.jsx(ye,{type:"button",icon:K.faClose,color:"error",className:"notification-close group",onClick:b=>{b.stopPropagation(),l!==void 0&&o(l)},iconClassName:`${tt(y)} notification-close-icon`,name:e("_accessibility:buttons.closeNotification"),"aria-label":e("_accessibility:ariaLabels.closeNotification")})]},l)})}),document.body)}function Mr(e){const{className:t,...s}=e;return d.jsx("div",{className:"splash-screen",children:d.jsx(S.Loading,{className:`blur-appear ${t?` ${t}`:""}`,...s})})}const cs=e=>{const{id:t,active:s,onClick:r,children:i,to:n,useLinks:a=!0,tabButtonProps:o}=e,{linkComponent:l}=Ne(),m=l;if(!a){const{className:h="",variant:y=s?"submit":"outlined",color:b=s?"primary":"default",...w}=o??{};return d.jsx(S.Button,{type:"button",variant:y,color:b,className:`tab ${h}`,onClick:r,...w,children:i})}const f=`button submit tab ${s?"primary":"outlined"} ${(o==null?void 0:o.className)??""}`.trim();return d.jsx(m,{to:n??`#${t}`,onClick:()=>r(),className:f,children:i})},ls=e=>{var b;const{tabs:t=[],defaultTab:s,currentTab:r,onTabChange:i,className:n="",tabsContainerClassName:a="",useLinks:o=!0,tabButtonProps:l}=e,[m,f]=p.useState(s??((b=t[0])==null?void 0:b.id)),h=r??m,y=p.useMemo(()=>t.find(w=>w.id===h),[t,h]);return d.jsxs("div",{className:`tabs-layout-main ${n}`,children:[d.jsx("ul",{className:`horizontal tabs tabs-container ${a}`,children:t.map(({id:w,to:k,label:C})=>d.jsx("li",{children:d.jsx(cs,{onClick:()=>{f(w),i==null||i(w)},id:w,to:k??"",siblings:t.length>1,active:h===w,useLinks:o,tabButtonProps:l,children:C})},w))}),y==null?void 0:y.content]})},us=e=>{const{title:t,body:s,content:r,onClickNext:i,image:n="",alt:a="",final:o=!1}=e,{setGuestMode:l}=nt(),{navigate:m}=Ne(),{t:f}=S.useTranslation();return d.jsxs("div",{className:"big-appear step-container",children:[n&&d.jsx("img",{src:n,alt:a}),t!=null&&d.jsx("h2",{className:"step-title",children:t}),s!=null&&d.jsx("div",{className:"step-body",children:s}),r!=null&&d.jsx("div",{className:"step-content",children:r}),d.jsx("div",{className:"step-actions",children:o?d.jsxs(d.Fragment,{children:[d.jsx(S.Button,{color:"primary",className:"step-button",variant:"outlined",onClick:()=>{l(!0),m("/")},"aria-label":f("_accessibility:ariaLabels.start"),children:f("_accessibility:buttons.startAsGuest")}),d.jsx(S.Button,{color:"primary",variant:"submit",className:"step-button","aria-label":f("_accessibility:ariaLabels.start"),onClick:()=>m("/auth/sign-in"),children:f("_accessibility:buttons.signIn")})]}):d.jsxs(d.Fragment,{children:[d.jsx(S.Button,{color:"primary",className:"step-button",variant:"outlined",onClick:()=>m("/auth/sign-in"),"aria-label":f("_accessibility:ariaLabels.skip"),children:f("_accessibility:buttons.skip")}),d.jsx(S.Button,{color:"primary",className:"step-button",variant:"outlined",onClick:()=>i(),"aria-label":f("_accessibility:ariaLabels.next"),children:f("_accessibility:buttons.next")})]})})]})},Pr=e=>{const{steps:t}=e,[s,r]=p.useState(1),i=p.useMemo(()=>t.map((n,a)=>({id:a+1,label:"",content:d.jsx(us,{...n,final:a===t.length-1,onClickNext:()=>r(o=>o+1)})})),[t]);return d.jsx("div",{className:"onboarding-main",children:d.jsx(ls,{currentTab:s,onTabChange:n=>r(Number(n)),tabs:i,useLinks:!1})})},ds=e=>{const{message:t,messageProps:s={className:"empty-message"},action:r,iconProps:i}=e;return d.jsxs("div",{className:"empty-container",children:[i&&d.jsx(ce.FontAwesomeIcon,{...i}),d.jsx("p",{...s,children:t}),r&&d.jsx(S.Action,{showTooltips:!1,showText:!0,...r})]})};Object.defineProperty(exports,"Action",{enumerable:!0,get:()=>S.Action});Object.defineProperty(exports,"Actions",{enumerable:!0,get:()=>S.Actions});Object.defineProperty(exports,"ActionsDropdown",{enumerable:!0,get:()=>S.ActionsDropdown});Object.defineProperty(exports,"Button",{enumerable:!0,get:()=>S.Button});exports.APIClient=$e;exports.AppIconButton=ye;exports.AuthClient=Ot;exports.AuthProvider=Ks;exports.BaseClient=Is;exports.ConfigProvider=Hs;exports.ConfirmationDialog=Ns;exports.Dialog=He;exports.DialogActions=We;exports.Drawer=Gs;exports.DrawerMenuContext=it;exports.DrawerMenuProvider=Qs;exports.Empty=ds;exports.Error=Nr;exports.FormContainer=Ss;exports.FormDialog=As;exports.GlobalActions=pe;exports.IManager=Ls;exports.IconButton=ye;exports.ImportDialog=$s;exports.IndexedDBClient=Rs;exports.ManagerProvider=qs;exports.Methods=ee;exports.Navbar=$r;exports.NavbarContext=ht;exports.NavbarProvider=Dr;exports.Notification=Vr;exports.NotificationEnumType=z;exports.NotificationProvider=Bs;exports.Onboarding=Pr;exports.Page=Fr;exports.ParagraphInput=Ts;exports.PasswordInput=Es;exports.PrettyGrid=jr;exports.SplashScreen=Mr;exports.Step=us;exports.Tab=cs;exports.TabsLayout=ls;exports.ToTop=Ar;exports.buildQueryUrl=Pt;exports.enumToKeyValueArray=Vs;exports.formatForDatetimeLocal=Os;exports.fromLocal=ve;exports.getFormattedDateTime=Ms;exports.getShortFormattedDateTime=Ps;exports.isHttpError=Ie;exports.isMac=Ut;exports.isValidationError=Le;exports.makeRequest=Oe;exports.mapValidationErrors=Us;exports.parseQueries=rt;exports.queryClient=me;exports.removeFromLocal=ie;exports.toLocal=be;exports.useAuth=nt;exports.useConfig=Ne;exports.useConfirmationForm=at;exports.useDeleteAction=ss;exports.useDeleteDialog=kr;exports.useDialog=ft;exports.useDrawerMenu=Qt;exports.useEditAction=vr;exports.useExportAction=ns;exports.useExportActionMutate=Er;exports.useFormDialog=Cr;exports.useImportAction=is;exports.useImportDialog=Sr;exports.useManager=Kt;exports.useNavbar=os;exports.useNotification=Ce;exports.usePostForm=xr;exports.useRestoreAction=rs;exports.useRestoreDialog=Tr;exports.useScrollTrigger=as;exports.useTimeAge=Ys;Object.keys(S).forEach(e=>{e!=="default"&&!Object.prototype.hasOwnProperty.call(exports,e)&&Object.defineProperty(exports,e,{enumerable:!0,get:()=>S[e]})});
1
+ var Ge=Object.defineProperty;var ze=(s,e,t)=>e in s?Ge(s,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):s[e]=t;var j=(s,e,t)=>ze(s,typeof e!="symbol"?e+"":e,t);var Jt=require("./main.css");Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const y=require("@sito/dashboard"),l=require("react/jsx-runtime"),F=require("@fortawesome/react-fontawesome"),m=require("react"),E=require("@fortawesome/free-solid-svg-icons"),Te=require("react-dom"),P=require("@tanstack/react-query"),Je=require("@fortawesome/free-regular-svg-icons"),ve=require("react-hook-form"),Ce=s=>s==null?!1:`${s}`.length>0,Ye=m.forwardRef(function(s,e){const{value:t,defaultValue:n,onChange:r,state:o=y.State.default,name:a="",id:c="",label:i="",disabled:u=!1,required:h=!1,containerClassName:d="",inputClassName:f="",labelClassName:p="",helperText:g="",helperTextClassName:w="",...b}=s,x=t!==void 0,[S,T]=m.useState(()=>Ce(n)),k=x?Ce(t):S,M=O=>{x||T(O.currentTarget.value.length>0),r==null||r(O)};return l.jsxs("div",{className:`form-paragraph-container group ${d}`,children:[l.jsx("textarea",{ref:e,name:a,id:c,className:`text-input text-area form-paragraph-textarea peer ${y.inputStateClassName(o)} ${k?"has-value":""} ${b.placeholder?"has-placeholder":""} ${f}`,required:h,defaultValue:n,...x?{value:t}:{},onChange:M,disabled:u,...b}),l.jsxs("label",{htmlFor:c,className:`text-input-label ${y.labelStateClassName(o)} ${p}`,children:[i,h?" *":""]}),!!g&&l.jsx("p",{className:`text-input-helper-text ${y.helperTextStateClassName(o)} ${w}`,children:g})]})}),Xe=s=>{const{t:e}=y.useTranslation(),{children:t,handleSubmit:n,onSubmit:r,isLoading:o=!1,buttonEnd:a=!0,reset:c}=s;return l.jsxs("form",{className:"form-container",onSubmit:n(r),children:[t,l.jsxs("div",{className:`form-actions ${a?"end":""}`,children:[l.jsxs(y.Button,{type:"submit",color:"primary",variant:"submit",disabled:o,name:e("_accessibility:buttons.submit"),"aria-label":e("_accessibility:ariaLabels.submit"),children:[o?l.jsx(y.Loading,{color:"stroke-base",loaderClass:"!w-6 mt-1",strokeWidth:"6"}):null,e("_accessibility:buttons.submit")]}),l.jsx(y.Button,{type:"button",variant:"outlined",onClick:()=>c==null?void 0:c(),name:e("_accessibility:buttons.cancel"),"aria-label":e("_accessibility:ariaLabels.cancel"),children:e("_accessibility:buttons.cancel")})]})]})},Ze=m.forwardRef(function(s,e){const{t}=y.useTranslation(),[n,r]=m.useState(!1);return l.jsx(y.TextInput,{...s,type:n?"text":"password",ref:e,children:l.jsx(D,{type:"button",tabIndex:-1,"aria-label":t(n?"_accessibility:ariaLabels.hidePassword":"_accessibility:ariaLabels.showPassword"),className:"password-icon",onClick:()=>r(!n),icon:n?E.faEyeSlash:E.faEye})})}),re=s=>{const{t:e}=y.useTranslation(),{title:t,children:n,handleClose:r,open:o=!1,containerClassName:a="",className:c="",animationClass:i="appear"}=s,u=m.useCallback(d=>{d.key==="Escape"&&o&&r()},[o,r]);m.useEffect(()=>(window.addEventListener("keydown",u),()=>{window.removeEventListener("keydown",u)}),[u]);const h=m.useCallback(d=>{d.target===d.currentTarget&&r()},[r]);return m.useEffect(()=>{const d=f=>{f?document.body.style.overflow="hidden":document.body.style.overflow="auto"};return d(o),()=>{d(!1)}},[o]),Te.createPortal(l.jsx("div",{"aria-label":e("_accessibility:ariaLabels.closeDialog"),"aria-hidden":!o,onClick:h,className:`dialog-backdrop animated ${o?`opened ${i}`:"closed"} ${a}`,children:l.jsxs("div",{className:`dialog elevated animated ${o?`opened ${i}`:"closed"} ${c}`,children:[l.jsxs("div",{className:"dialog-header",children:[l.jsx("h3",{className:"dialog-title",children:t}),l.jsx(D,{icon:E.faClose,disabled:!o,"aria-disabled":!o,onClick:r,variant:"text",color:"error",className:"icon-button dialog-close-btn",name:e("_accessibility:buttons.closeDialog"),"aria-label":e("_accessibility:ariaLabels.closeDialog")})]}),n]})}),document.body)},oe=s=>{const{primaryText:e,cancelText:t,onPrimaryClick:n,onCancel:r,isLoading:o=!1,disabled:a=!1,primaryType:c="submit",containerClassName:i="",primaryClassName:u="",alignEnd:h=!1,primaryName:d,primaryAriaLabel:f,cancelName:p,cancelAriaLabel:g}=s;return l.jsxs("div",{className:`dialog-actions ${h?"end":""} ${i}`,children:[l.jsxs(y.Button,{type:c,color:"primary",variant:"submit",className:u,disabled:a,onClick:n,name:d,"aria-label":f,children:[o?l.jsx(y.Loading,{color:"stroke-base",loaderClass:"!w-6 mt-1",strokeWidth:"6"}):null,e]}),l.jsx(y.Button,{type:"button",variant:"outlined",disabled:a,onClick:r,name:p,"aria-label":g,children:t})]})},et=s=>{const{t:e}=y.useTranslation(),{children:t,handleSubmit:n,onSubmit:r,handleClose:o,isLoading:a=!1,buttonEnd:c=!0,...i}=s;return l.jsx(re,{...i,handleClose:o,children:l.jsxs("form",{onSubmit:n(r),children:[l.jsx("div",{className:"form-container",children:t}),l.jsx(oe,{primaryType:"submit",primaryText:e("_accessibility:buttons.submit"),cancelText:e("_accessibility:buttons.cancel"),onCancel:o,isLoading:a,disabled:a,primaryClassName:"dialog-form-primary",alignEnd:c,primaryName:e("_accessibility:buttons.submit"),primaryAriaLabel:e("_accessibility:ariaLabels.submit"),cancelName:e("_accessibility:buttons.cancel"),cancelAriaLabel:e("_accessibility:ariaLabels.cancel")})]})})},tt=s=>{const{t:e}=y.useTranslation(),{children:t,handleSubmit:n,handleClose:r,isLoading:o=!1,...a}=s;return l.jsxs(re,{...a,handleClose:r,children:[t,l.jsx(oe,{primaryText:e("_accessibility:buttons.ok"),cancelText:e("_accessibility:buttons.cancel"),onPrimaryClick:n,onCancel:r,isLoading:o,disabled:o,primaryType:"button",containerClassName:"mt-5",primaryName:e("_accessibility:buttons.ok"),primaryAriaLabel:e("_accessibility:ariaLabels.ok"),cancelName:e("_accessibility:buttons.cancel"),cancelAriaLabel:e("_accessibility:ariaLabels.cancel")})]})};function st(s){const{message:e,className:t=""}=s,{t:n}=y.useTranslation();return l.jsx("p",{className:`import-error-message ${t}`,children:e??n("_messages:errors.parseFile",{defaultValue:"Failed to process file"})})}function nt(s){const{message:e,className:t=""}=s,{t:n}=y.useTranslation();return l.jsxs("div",{className:`import-loading ${t}`,children:[l.jsx(y.Loading,{loaderClass:"w-5 h-5",className:"!w-auto"}),l.jsx("span",{children:e??n("_messages:loading.processingFile",{defaultValue:"Processing file..."})})]})}function rt(s){const{items:e,max:t=5,className:n=""}=s,{t:r}=y.useTranslation();if(!e||e.length===0)return null;const o=e.slice(0,t);return l.jsxs("div",{className:`import-preview ${n}`,children:[l.jsx("p",{className:"import-preview-count",children:r("_pages:common.actions.import.previewCount",{count:e.length,defaultValue:`Preview: ${e.length} items`})}),l.jsx("pre",{className:"import-preview-content",children:JSON.stringify(o,null,2)})]})}const Ee=()=>({file:null,previewItems:null,parseError:null,processing:!1,overrideExisting:!1,inputKey:0});function ot(s,e){switch(e.type){case"SET_FILE":return{...s,file:e.file,previewItems:null,parseError:null,processing:!1};case"START_PROCESSING":return{...s,processing:!0};case"SET_PREVIEW":return{...s,previewItems:e.items,parseError:null,processing:!1};case"SET_ERROR":return{...s,previewItems:null,parseError:e.message,processing:!1};case"SET_OVERRIDE":return{...s,overrideExisting:e.value};case"RESET":return{...Ee(),inputKey:s.inputKey+1}}}const at=s=>{const{t:e}=y.useTranslation(),{children:t,handleSubmit:n,handleClose:r,isLoading:o=!1,fileProcessor:a,onFileProcessed:c,renderCustomPreview:i,onOverrideChange:u,open:h,...d}=s,[f,p]=m.useReducer(ot,Ee()),{file:g,previewItems:w,parseError:b,processing:x,overrideExisting:S,inputKey:T}=f,k=m.useRef(c),M=m.useRef(a);m.useEffect(()=>{k.current=c},[c]),m.useEffect(()=>{M.current=a},[a]),m.useEffect(()=>{h||p({type:"RESET"})},[h]);const O=m.useCallback(async($,C)=>{var L;if(M.current){p({type:"START_PROCESSING"});try{const v=await M.current($,{override:C});p({type:"SET_PREVIEW",items:v??[]}),(L=k.current)==null||L.call(k,v??[])}catch(v){console.error(v);const R=v instanceof Error?v.message:"Failed to parse file";p({type:"SET_ERROR",message:R})}}},[]);return l.jsxs(re,{...d,open:h,handleClose:r,children:[l.jsx(y.FileInput,{onClear:()=>{var $;p({type:"SET_FILE",file:null}),($=k.current)==null||$.call(k,[])},onChange:$=>{var L,v;const C=(L=$.target.files)==null?void 0:L[0];if(!C){p({type:"SET_FILE",file:null}),(v=k.current)==null||v.call(k,[]);return}p({type:"SET_FILE",file:C}),O(C,S)},label:e("_accessibility:labels.file")},T),l.jsxs("label",{className:"import-override-label",children:[l.jsx("input",{type:"checkbox",checked:S,onChange:$=>{const C=$.target.checked;p({type:"SET_OVERRIDE",value:C}),u==null||u(C),g&&O(g,C)}}),l.jsx("span",{children:e("_pages:common.actions.import.override",{defaultValue:"Override existing items"})})]}),l.jsx(st,{message:b}),x&&l.jsx(nt,{}),i?i(w):!!w&&w.length>0&&l.jsx(rt,{items:w}),t,l.jsx(oe,{primaryText:e("_accessibility:buttons.ok"),cancelText:e("_accessibility:buttons.cancel"),onPrimaryClick:()=>{(!a||!!w&&w.length>0)&&n()},onCancel:r,isLoading:o,primaryType:"button",containerClassName:"import-dialog-actions",primaryName:e("_accessibility:buttons.ok"),primaryAriaLabel:e("_accessibility:ariaLabels.ok"),cancelName:e("_accessibility:buttons.cancel"),cancelAriaLabel:e("_accessibility:ariaLabels.cancel")})]})};var A=(s=>(s[s.success=0]="success",s[s.error=1]="error",s[s.warning=2]="warning",s[s.info=3]="info",s))(A||{}),I=(s=>(s.GET="GET",s.POST="POST",s.PUT="PUT",s.PATCH="PATCH",s.DELETE="DELETE",s))(I||{});const it=s=>Array.isArray(s)||s instanceof Headers?!1:typeof s=="object"&&s!==null&&("headers"in s||"credentials"in s),ct=s=>s?it(s)?s:{headers:s}:{},lt=s=>s?s instanceof Headers?Object.fromEntries(s.entries()):Array.isArray(s)?Object.fromEntries(s):s:{};async function ne(s,e="GET",t,n){const r=ct(n),o={...t!==void 0?{"Content-Type":"application/json"}:{},...lt(r.headers)};try{const a=await fetch(s,{method:e,headers:o,...r.credentials?{credentials:r.credentials}:{},...t!==void 0?{body:JSON.stringify(t)}:{}}),c=await a.text();let i=null;try{i=c?JSON.parse(c):null}catch{i=null}if(!a.ok){const u=typeof i=="object"&&i!==null?i.message??i.error??c:c||a.statusText;return{data:null,status:a.status,error:{status:a.status,message:u||"Unknown error occurred"}}}return{data:a.status!==204&&i!==null?i:null,status:a.status,error:null}}catch(a){return{data:null,status:500,error:{status:500,message:a instanceof Error?a.message:"Unknown error occurred"}}}}function Ne(s,e){if(e){const t=Object.entries(e).filter(([,n])=>n!=null).map(([n,r])=>`${encodeURIComponent(n)}=${encodeURIComponent(String(r))}`).join("&");return t?`${s}?${t}`:s}return s}const le=(s,e,t)=>{const n=[];if(e){const{sortingBy:r,sortingOrder:o,currentPage:a,pageSize:c}=e;r!==void 0&&n.push(`sort=${String(r)}`),o!==void 0&&n.push(`order=${o}`),a!==void 0&&n.push(`page=${a}`),c!==void 0&&n.push(`pageSize=${c}`)}if(t){const r=Object.entries(t).filter(([,o])=>o!=null&&o!=="").flatMap(([o,a])=>{if(Array.isArray(a))return a.map(c=>`${o}==${encodeURIComponent((c==null?void 0:c.id)??c)}`);if(typeof a=="object"&&a!==null&&"start"in a&&"end"in a){const c=[];return a.start!=null&&a.start!==""&&c.push(`${o}>=${encodeURIComponent(a.start)}`),a.end!=null&&a.end!==""&&c.push(`${o}<=${encodeURIComponent(a.end)}`),c}return typeof a=="object"&&a!==null?`${o}==${encodeURIComponent(a.id??"")}`:`${o}==${encodeURIComponent(a)}`});r.length>0&&n.push(`filters=${r.join(",")}`)}return n.length?`${s}?${n.join("&")}`:s},z=class z{constructor(e,t="user",n=!0,r,o={}){j(this,"baseUrl");j(this,"userKey");j(this,"rememberKey");j(this,"refreshTokenKey");j(this,"accessTokenExpiresAtKey");j(this,"refreshEndpoint");j(this,"refreshExpirySkewMs");j(this,"secured");j(this,"tokenAcquirer");this.baseUrl=e,this.secured=n,this.userKey=t,this.rememberKey=o.rememberKey??"remember",this.refreshTokenKey=o.refreshTokenKey??"refreshToken",this.accessTokenExpiresAtKey=o.accessTokenExpiresAtKey??"accessTokenExpiresAt",this.refreshEndpoint=o.refreshEndpoint??"auth/refresh",this.refreshExpirySkewMs=o.refreshExpirySkewMs??5e3,this.tokenAcquirer=r??this.defaultTokenAcquirer}defaultTokenAcquirer(e){if(e)return{credentials:"include"};const t=B(this.userKey);if(t&&t.length)return{Authorization:`Bearer ${t}`}}getRefreshLockKey(){return`${this.baseUrl}|${this.userKey}|${this.refreshTokenKey}|${this.accessTokenExpiresAtKey}`}buildUrl(e){const t=this.baseUrl.endsWith("/")?this.baseUrl.slice(0,-1):this.baseUrl,n=e.startsWith("/")?e:`/${e}`;return`${t}${n}`}getRefreshToken(){const e=B(this.refreshTokenKey);if(typeof e=="string"&&e.length)return e}getAccessTokenExpiresAt(){const e=B(this.accessTokenExpiresAtKey);if(typeof e=="string"&&e.length)return e}canRefresh(){return!!this.getRefreshToken()}shouldRefreshBeforeRequest(){const e=this.getRefreshToken(),t=this.getAccessTokenExpiresAt();if(!e||!t)return!1;const n=Date.parse(t);return Number.isNaN(n)?!1:Date.now()>=n-this.refreshExpirySkewMs}clearStoredSession(){_(this.userKey),_(this.rememberKey),_(this.refreshTokenKey),_(this.accessTokenExpiresAtKey)}storeSession(e,t){U(this.userKey,e.token);const n=e.refreshToken===void 0?t:e.refreshToken;typeof n=="string"&&n.length?U(this.refreshTokenKey,n):_(this.refreshTokenKey),typeof e.accessTokenExpiresAt=="string"&&e.accessTokenExpiresAt.length?U(this.accessTokenExpiresAtKey,e.accessTokenExpiresAt):_(this.accessTokenExpiresAtKey)}async refreshAccessTokenWithMutex(){const e=this.getRefreshToken();if(!e)throw{status:401,message:"Missing refresh token"};const t=this.getRefreshLockKey(),n=z.refreshInFlight.get(t);if(n){await n;return}const r=(async()=>{const{data:o,status:a,error:c}=await ne(this.buildUrl(this.refreshEndpoint),I.POST,{refreshToken:e});if(c||!(o!=null&&o.token))throw this.clearStoredSession(),c??{status:a,message:"Unable to refresh session"};this.storeSession(o,e)})();z.refreshInFlight.set(t,r);try{await r}finally{z.refreshInFlight.delete(t)}}isRequestOptions(e){return Array.isArray(e)||e instanceof Headers?!1:typeof e=="object"&&e!==null&&("headers"in e||"credentials"in e)}toRequestOptions(e){return e?this.isRequestOptions(e)?e:{headers:e}:{}}toHeaderRecord(e){return e?e instanceof Headers?Object.fromEntries(e.entries()):Array.isArray(e)?Object.fromEntries(e):e:{}}mergeRequestConfig(e){const t=this.secured?this.tokenAcquirer():void 0,n=this.toRequestOptions(t),r=this.toRequestOptions(e),o={...this.toHeaderRecord(n.headers),...this.toHeaderRecord(r.headers)},a=r.credentials??n.credentials,c=Object.keys(o).length>0;if(a)return c?{headers:o,credentials:a}:{credentials:a};if(c)return o}async makeRequestWithRefresh(e,t,n,r){this.secured&&this.shouldRefreshBeforeRequest()&&await this.refreshAccessTokenWithMutex();let o=await ne(this.buildUrl(e),t,n,this.mergeRequestConfig(r));return this.secured&&o.status===401&&this.canRefresh()&&(await this.refreshAccessTokenWithMutex(),o=await ne(this.buildUrl(e),t,n,this.mergeRequestConfig(r))),o}async doQuery(e,t=I.GET,n,r){const{data:o,status:a,error:c}=await this.makeRequestWithRefresh(e,t,n,r);if(c||a<200||a>=300)throw c??{status:a,message:String(a)};return o}async get(e,t,n){const r=le(e,t,n),{data:o,error:a,status:c}=await this.makeRequestWithRefresh(r,I.GET);if(a||c<200||c>=300||!o)throw a??{status:c,message:String(c)};return o}async patch(e,t){const{error:n,data:r,status:o}=await this.makeRequestWithRefresh(e,I.PATCH,t);if(n||r===null||r===void 0)throw n??{status:o,message:"Unknown error"};return r}async delete(e,t){const{error:n,data:r,status:o}=await this.makeRequestWithRefresh(e,I.DELETE,t);if(n||r===null||r===void 0)throw n??{status:o,message:"Unknown error"};return r}async post(e,t){const{error:n,data:r,status:o}=await this.makeRequestWithRefresh(e,I.POST,t);if(n||r===null||r===void 0)throw n??{status:o,message:"Unknown error"};return r}};j(z,"refreshInFlight",new Map);let X=z;class je{constructor(e,t="user",n={}){j(this,"api");this.api=new X(e,t,!1,void 0,n)}async login(e){const t="auth/sign-in",n=e;return await this.api.doQuery(t,I.POST,n)}async refresh(e){return await this.api.doQuery("auth/refresh",I.POST,e)}async logout(e){const t="auth/sign-out",n=e!=null&&e.accessToken?{Authorization:`Bearer ${e.accessToken}`}:void 0,r=e!=null&&e.refreshToken?{refreshToken:e.refreshToken}:void 0;return await this.api.doQuery(t,I.POST,r,n)}async register(e){return await this.api.doQuery("auth/sign-up",I.POST,e)}async getSession(){return await this.api.doQuery("auth/session",I.GET,void 0,this.api.defaultTokenAcquirer())}}class ut{constructor(e,t,n={}){j(this,"auth");this.auth=new je(e,t,n)}get Auth(){return this.auth}}class dt{constructor(e,t,n="user",r=!0,o={}){j(this,"table");j(this,"secured");j(this,"api");this.table=e,this.secured=r,this.api=new X(t,n,r,void 0,o)}async insert(e){return await this.api.post(`${this.table}`,e)}async insertMany(e){return await this.api.doQuery(`${this.table}/batch`,I.POST,e)}async update(e){return await this.api.patch(`${this.table}/${e.id}`,e)}async get(e,t){return await this.api.get(`${this.table}`,e,t)}async export(e){const t=le(`${this.table}/export`,void 0,e);return await this.api.doQuery(t,I.GET,void 0)}async import(e){return await this.api.doQuery(`${this.table}/import`,I.POST,e)}async commonGet(e){return await this.api.doQuery(Ne(`${this.table}/common`,e),I.GET)}async getById(e){return await this.api.doQuery(`${this.table}/${e}`)}async softDelete(e){return await this.api.delete(`${this.table}`,e)}async restore(e){return await this.api.patch(`${this.table}/restore`,e)}}class mt{constructor(e,t,n=1){j(this,"table");j(this,"dbName");j(this,"version");j(this,"db",null);this.table=e,this.dbName=t,this.version=n}close(){this.db&&(this.db.onversionchange=null,this.db.close(),this.db=null)}open(){return this.db?Promise.resolve(this.db):new Promise((e,t)=>{const n=indexedDB.open(this.dbName,this.version);n.onupgradeneeded=r=>{const o=r.target.result;o.objectStoreNames.contains(this.table)||o.createObjectStore(this.table,{keyPath:"id",autoIncrement:!0})},n.onsuccess=r=>{this.db=r.target.result,this.db.onversionchange=()=>{this.close()},e(this.db)},n.onerror=r=>{t(r.target.error)}})}async transaction(e){return(await this.open()).transaction(this.table,e).objectStore(this.table)}request(e){return new Promise((t,n)=>{e.onsuccess=()=>t(e.result),e.onerror=()=>n(e.error)})}async insert(e){const t=await this.transaction("readwrite"),n=await this.request(t.add(e));return{...e,id:n}}async insertMany(e){const t=await this.transaction("readwrite");let n=0;for(const r of e)n=await this.request(t.add(r));return{...e[e.length-1],id:n}}async update(e,t){const n=typeof e=="number"?t:e;if(!n)throw new Error("IndexedDBClient.update requires a value payload");const r=typeof e=="number"?{...n,id:n.id??e}:n,o=await this.transaction("readwrite");return await this.request(o.put(r)),r}async get(e,t){var p;const n=await this.transaction("readonly"),r=await this.request(n.getAll()),o=this.applyFilter(r,t),a=(e==null?void 0:e.sortingBy)??"id",c=((p=e==null?void 0:e.sortingOrder)==null?void 0:p.toLowerCase())??"asc";o.sort((g,w)=>{const b=g[a],x=w[a];return b<x?c==="asc"?-1:1:b>x?c==="asc"?1:-1:0});const i=(e==null?void 0:e.pageSize)??10,u=(e==null?void 0:e.currentPage)??0,h=o.length,d=Math.ceil(h/i),f=o.slice(u*i,u*i+i);return{sort:a,order:c,currentPage:u,pageSize:i,totalElements:h,totalPages:d,items:f}}async export(e){const t=await this.transaction("readonly"),n=await this.request(t.getAll());return this.applyFilter(n,e)}async import(e){const t=await this.transaction("readwrite");let n=0;for(const r of e.items)e.override?await this.request(t.put(r)):await this.request(t.add(r)),n++;return n}async commonGet(e){const t=await this.transaction("readonly"),n=await this.request(t.getAll());return this.applyFilter(n,e)}async getById(e){const t=await this.transaction("readonly"),n=await this.request(t.get(e));if(!n)throw new Error(`Record ${e} not found in ${this.table}`);return n}async softDelete(e){const t=await this.transaction("readwrite");let n=0;for(const r of e){const o=await this.request(t.get(r));o&&(await this.request(t.put({...o,deletedAt:new Date})),n++)}return n}async restore(e){const t=await this.transaction("readwrite");let n=0;for(const r of e){const o=await this.request(t.get(r));o&&(await this.request(t.put({...o,deletedAt:null})),n++)}return n}applyFilter(e,t){return t?e.filter(n=>Object.entries(t).every(([r,o])=>this.matchesFilterValue(r,o,n[r]))):e}matchesFilterValue(e,t,n){if(t===void 0)return!0;if(e==="deletedAt"&&typeof t=="boolean"){const r=n!=null;return t?r:!r}return n===t}}function ht(s){return Object.keys(s).filter(e=>isNaN(Number(e))).map(e=>({key:e,value:s[e]}))}const B=(s,e="")=>{const t=localStorage.getItem(s)??void 0;if(t&&e.length)switch(e){case"object":return JSON.parse(t);case"number":return Number(t);case"boolean":return t==="true"||t==="1";default:return t}return t},U=(s,e)=>localStorage.setItem(s,typeof e=="object"?JSON.stringify(e):e),_=s=>localStorage.removeItem(s);function ft(s){const e=s?new Date(s):new Date,t={weekday:"long",day:"numeric",month:"long",year:"numeric",hour:"numeric",minute:"2-digit",hour12:!0};return e.toLocaleString(navigator.language||"es-ES",t)}function pt(s){const e=s?new Date(s):new Date,t=String(e.getDate()).padStart(2,"0"),n=String(e.getMonth()+1).padStart(2,"0"),r=String(e.getFullYear()).slice(-2),o=String(e.getHours()).padStart(2,"0"),a=String(e.getMinutes()).padStart(2,"0");return`${t}/${n}/${r} ${o}:${a}`}function gt(s){const e=s?new Date(s):new Date,t=e.getFullYear(),n=String(e.getMonth()+1).padStart(2,"0"),r=String(e.getDate()).padStart(2,"0"),o=String(e.getHours()).padStart(2,"0"),a=String(e.getMinutes()).padStart(2,"0");return`${t}-${n}-${r}T${o}:${a}`}const Ae=()=>{var t;const s=navigator,e=((t=s==null?void 0:s.userAgentData)==null?void 0:t.platform)||(s==null?void 0:s.platform)||"";return/Mac|iPhone|iPod|iPad/i.test(e)};function Z(s){if(!s||typeof s!="object")return!1;const e=s;return Array.isArray(e.errors)&&e.errors.every(t=>Array.isArray(t)&&t.length===2&&typeof t[0]=="string")}function ee(s){if(!s||typeof s!="object")return!1;const e=s;return typeof(e==null?void 0:e.status)=="number"&&typeof(e==null?void 0:e.message)=="string"}function bt(s,e){return s!=null&&s.errors?s.errors.map(([t,n])=>e(t,n)):[]}const $e=m.createContext(void 0);function yt(s){const{children:e}=s,t=m.useRef(0),[n,r]=m.useReducer((f,p)=>{const{type:g,items:w,id:b}=p;switch(g){case"set":return w??[];case"remove":return b!==void 0?f.filter(x=>x.id!==b):[]}return f},[],()=>[]),o=f=>f.map(p=>({...p,id:t.current++})),a=m.useCallback(f=>r({type:"set",items:o([{...f,type:A.error}])}),[]),c=m.useCallback(f=>r({type:"set",items:o([{...f}])}),[]),i=m.useCallback(f=>r({type:"set",items:o(f)}),[]),u=m.useCallback(f=>r({type:"set",items:o([{...f,type:A.success}])}),[]),h=f=>r({type:"remove",id:f}),d=m.useMemo(()=>({notification:n,removeNotification:h,showErrorNotification:a,showNotification:c,showSuccessNotification:u,showStackNotifications:i}),[n,a,c,i,u]);return l.jsx($e.Provider,{value:d,children:e})}const H=()=>{const s=m.useContext($e);if(!s)throw new Error("NotificationContext must be used within a Provider");return s},ue=()=>new P.QueryClient({defaultOptions:{queries:{refetchInterval:!1,refetchOnMount:!0,refetchOnReconnect:!1,retry:!1,retryOnMount:!0,refetchOnWindowFocus:!1}}}),wt=ue(),Le=m.createContext(void 0),xt=s=>{const{children:e,manager:t,queryClient:n}=s,[r]=m.useState(ue),o=n??r;return l.jsx(Le.Provider,{value:{client:t},children:l.jsx(P.QueryClientProvider,{client:o,children:e})})},Ie=()=>{const s=m.useContext(Le);if(!s)throw new Error("managerContext must be used within a Provider");return s.client},Re=m.createContext(void 0),Ct=s=>{const{children:e,guestMode:t="guest_mode",user:n="user",remember:r="remember",refreshTokenKey:o="refreshToken",accessTokenExpiresAtKey:a="accessTokenExpiresAt"}=s,c=Ie(),[i,u]=m.useState({}),h=m.useCallback(()=>{_(n),_(r),_(o),_(a)},[a,o,r,n]),d=m.useCallback(()=>!!B(t,"boolean")&&i.token===void 0,[i.token,t]),f=m.useCallback(x=>{U(t,x)},[t]),p=m.useCallback((x,S)=>{if(!x)return;const T=B(r,"boolean"),k=S??(typeof T=="boolean"?T:!1);u(x),_(t),U(n,x.token),U(r,k),typeof x.refreshToken=="string"&&x.refreshToken.length?U(o,x.refreshToken):_(o),typeof x.accessTokenExpiresAt=="string"&&x.accessTokenExpiresAt.length?U(a,x.accessTokenExpiresAt):_(a)},[a,t,o,r,n]),g=m.useCallback(async()=>{const x=B(n)??i.token,S=B(o)??(typeof i.refreshToken=="string"?i.refreshToken:void 0);try{await c.Auth.logout({accessToken:x,refreshToken:S})}catch(T){console.error(T)}u({}),h()},[i.refreshToken,i.token,h,c.Auth,o,n]),w=m.useCallback(async()=>{try{const x=await c.Auth.getSession();p(x)}catch(x){console.error(x),g()}},[p,g,c.Auth]),b=m.useMemo(()=>({account:i,logUser:p,logoutUser:g,logUserFromLocal:w,isInGuestMode:d,setGuestMode:f}),[i,p,g,w,d,f]);return l.jsx(Re.Provider,{value:b,children:e})},de=()=>{const s=m.useContext(Re);if(!s)throw new Error("authContext must be used within a Provider");return s},_e=m.createContext({}),kt=s=>{const{children:e,location:t,navigate:n,linkComponent:r,searchComponent:o}=s;return l.jsx(_e.Provider,{value:{location:t,navigate:n,linkComponent:r,searchComponent:o},children:e})},J=()=>{const s=m.useContext(_e);if(s===void 0||Object.keys(s).length===0)throw new Error("Config provider has not been set. This step is required and cannot be skipped.");return s},St={addChildItem:()=>{},removeChildItem:()=>{},clearDynamicItems:()=>{},dynamicItems:{}},me=m.createContext(St),Tt=s=>{const{children:e}=s,[t,n]=m.useState({}),r=m.useCallback((i,u)=>n(h=>({...h,[i]:[...h[i]??[],u]})),[]),o=m.useCallback((i,u)=>n(h=>({...h,[i]:(h[i]??[]).filter((d,f)=>f!==u)})),[]),a=m.useCallback(i=>{n(i?u=>({...u,[i]:[]}):{})},[]),c=m.useMemo(()=>({dynamicItems:t,addChildItem:r,removeChildItem:o,clearDynamicItems:a}),[t,a,o,r]);return l.jsx(me.Provider,{value:c,children:e})},Pe=()=>m.useContext(me);function vt(s){const{t:e}=y.useTranslation(),{open:t,onClose:n,menuMap:r,logo:o}=s,{account:a}=de(),{dynamicItems:c}=Pe(),{linkComponent:i,location:u}=J(),h=i,d=m.useMemo(()=>r.filter(b=>{const x=b.auth,S=!!(a!=null&&a.email);return x==null||x&&S||!x&&!S}),[a==null?void 0:a.email,r]),f=m.useCallback(b=>{b.key==="Escape"&&t&&n()},[n,t]);m.useEffect(()=>(document.addEventListener("keydown",f),()=>{document.removeEventListener("keydown",f)}),[f]);const p=m.useCallback((b,x)=>x?b===`${u.pathname}${u.search}`:b===u.pathname,[u.pathname,u.search]),g=m.useCallback(b=>l.jsx("li",{className:`drawer-list-item-child ${p(b.path,!0)?"active":""} animated`,children:b.path?l.jsx(h,{tabIndex:t?0:-1,to:b.path??"/","aria-label":e(`_accessibility:ariaLabels.${b.id}`,{defaultValue:b.label}),className:"drawer-link",children:b.label}):b.label},b.id),[h,t,e,p]),w=m.useMemo(()=>d.map((b,x)=>{const S=b.page??String(x),T=`drawer-list-item ${p(b.path)?"active":""} animated`;if(b.type==="divider")return l.jsx("li",{className:T,children:l.jsx("hr",{className:"drawer-divider"})},S);const k=b.children??(b.page&&c?c[b.page]:null);return l.jsxs("li",{className:T,children:[l.jsxs(h,{tabIndex:t?0:-1,to:b.path??"/","aria-label":e(`_accessibility:ariaLabels.${String(b.page)}`,{defaultValue:e(`_pages:${String(b.page)}.title`)}),className:"drawer-link",children:[b.icon,e(`_pages:${b.page}.title`)]}),k&&l.jsx("ul",{className:"drawer-children-list",children:k.map(g)})]},S)}),[h,c,p,t,d,g,e]);return l.jsx("div",{"aria-label":e("_accessibility:ariaLabels.closeMenu"),"aria-disabled":!t,className:`${t?"opened":"closed"} drawer-backdrop`,onClick:()=>n(),children:l.jsxs("aside",{className:`${t?"opened":"closed"} drawer animated`,children:[l.jsxs("div",{className:"drawer-header-container",children:[o,l.jsx("h2",{className:"drawer-header poppins",children:e("_pages:home.appName")})]}),l.jsx("ul",{className:"drawer-menu-list",children:w})]})})}const D=({icon:s,...e})=>l.jsx(y.IconButton,{icon:l.jsx(F.FontAwesomeIcon,{icon:s}),...e});var ie,ke;function Et(){if(ke)return ie;ke=1;const s=(c,i="local",u=void 0)=>{if(i==="local"){if(localStorage.getItem(c)!==void 0&&localStorage.getItem(c)!=="undefined"&&localStorage.getItem(c)!==null)return u===void 0||u!==void 0&&localStorage.getItem(c)===u}else if(i==="session"&&sessionStorage.getItem(c)!==void 0&&sessionStorage.getItem(c)!=="undefined"&&sessionStorage.getItem(c)!==null)return u===void 0||u!==void 0&&sessionStorage.getItem(c)===u;return!1},e=c=>{const i={};return c.substring(1).split("&").forEach(h=>{const[d,f]=h.split("=");i[d]=f}),i},t=(c="")=>{if(o(c)&&c.length)return o(c);{let i=navigator.language||navigator.userLanguage;if(i.indexOf("en")<0&&i.indexOf("es")<0&&(i="en-US"),i=i.split("-")[0],i)return c.length&&r(c,730,i),i}return"en"},n=(c=0,i=0,u=window,h="smooth")=>u.scroll({top:c,left:i,behavior:h}),r=(c,i,u,h="/",d="Lax")=>{var f=new Date;f.setTime(f.getTime()+i*24*60*60*1e3);const p="; expires="+f.toUTCString();document.cookie=`${c}=${u||""}${p};path=${h};SameSite=${d}`},o=c=>{const i=`${c}=`,h=decodeURIComponent(document.cookie).split(";");for(let d=0;d<h.length;d+=1){let f=h[d];for(;f.charAt(0)===" ";)f=f.substring(1);if(f.indexOf(i)===0)return f.substring(i.length,f.length)}return""};return ie={getCookie:o,createCookie:r,deleteCookie:c=>document.cookie=`${c}=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;`,getUserLanguage:t,scrollTo:n,parseQueries:e,validation:s},ie}var Nt=Et();function jt(){const{t:s,language:e}=y.useTranslation();return{timeAge:m.useCallback(n=>{const o=new Date-n,a=Math.floor(o/(1e3*60)),c=Math.floor(a/60),i=e==="es",u=s("_accessibility:labels.ago"),h=s("_accessibility:labels.minute"),d=s("_accessibility:labels.minutes"),f=s("_accessibility:labels.hour"),p=s("_accessibility:labels.hours"),g=s("_accessibility:labels.yesterday"),w=s("_accessibility:labels.justNow");return o<1e3*60?w:a<60?`${i?u:""} ${a} ${a===1?h:d} ${i?"":u}`:c<24?`${i?u:""} ${c} ${c===1?f:p} ${i?"":u}`:c<48?g:n.toLocaleDateString(navigator.language||"es-ES",{day:"2-digit",month:"2-digit",year:"numeric"})},[s,e])}}const he=s=>{const{showSuccessNotification:e}=H(),{mutationFn:t,onError:n,onSuccess:r,onSuccessMessage:o}=s,[a,c]=m.useState([]),{open:i,handleClose:u,handleOpen:h}=fe(),d=()=>{u(),c([])},f=async g=>{c(g),h()},p=P.useMutation({mutationFn:()=>t(Array.isArray(a)?a:[a]),onError:g=>{console.error(g),n&&n(g),d()},onSuccess:async g=>{r&&r(g),e({message:o}),d()}});return{open:i,onClick:f,close:d,dialogFn:p,isLoading:p.isPending}},At=s=>{const{t:e}=y.useTranslation(),{showStackNotifications:t,showSuccessNotification:n,showErrorNotification:r}=H(),o=P.useQueryClient(),{defaultValues:a,mutationFn:c,formToDto:i,onError:u,onSuccess:h,queryKey:d,onSuccessMessage:f}=s,{control:p,handleSubmit:g,reset:w,setError:b,getValues:x,setValue:S}=ve.useForm({defaultValues:a}),T=m.useRef(null),k=m.useCallback(()=>{const C=document.activeElement;if(!(C instanceof HTMLElement)){T.current=null;return}T.current=C.closest("form")},[]),M=m.useCallback(C=>{const L=C==null?void 0:C.errors,v=[],R=T.current;if(!R)return v;let te=!1;return L&&L.forEach(([W,ae])=>{const V=R.querySelector(`[name="${W}"]`);(V instanceof HTMLInputElement||V instanceof HTMLTextAreaElement||V instanceof HTMLSelectElement)&&(te||(V.focus(),te=!0),V.classList.add("error"),v.push(e(`_entities:${d}.${W}.${ae}`)))}),v},[e,d]),O=m.useCallback(()=>{const C=T.current;if(!C)return;C.querySelectorAll("input, textarea, select").forEach(v=>{v.classList.remove("error")})},[]),$=P.useMutation({mutationFn:c,onError:C=>{console.error(C);const L=C;if(u)u(C);else if(Z(L)){const v=M(L);t(v.map(R=>({message:R,type:A.error})))}else if(ee(L)){const v=L.message||e("_accessibility:errors.500"),R=e(`_accessibility:errors.${L.status}`);r({message:R||v})}else r({message:e("_accessibility:errors.500")})},onSuccess:async C=>{await o.invalidateQueries({queryKey:d}),h&&h(C),f&&n({message:f})}});return{control:p,getValues:x,setValue:S,handleSubmit:g,onSubmit:C=>{k(),O(),$.mutate(i?i(C):C)},reset:w,setError:b,isLoading:$.isPending}},Me=s=>{const{t:e}=y.useTranslation(),{onClick:t,icon:n=E.faTrash,sticky:r=!0,hidden:o=!1,multiple:a=!0,disabled:c=!1,id:i=Q.Delete,tooltip:u=e("_pages:common.actions.delete.text")}=s;return{action:m.useCallback(d=>({id:i,sticky:r,tooltip:u,multiple:a,onClick:()=>t([d==null?void 0:d.id]),hidden:!!d.deletedAt||o,disabled:!!d.deletedAt||c,icon:l.jsx(F.FontAwesomeIcon,{className:"text-bg-error",icon:n}),onMultipleClick:f=>t(f.map(p=>p.id))}),[c,o,n,i,a,t,r,u])}},Fe=s=>{const{t:e}=y.useTranslation(),{onClick:t,sticky:n=!0,hidden:r=!1,disabled:o=!1,multiple:a=!1,icon:c=E.faRotateLeft,id:i=Q.Restore,tooltip:u=e("_pages:common.actions.restore.text")}=s;return{action:m.useCallback(d=>({id:i,sticky:n,tooltip:u,multiple:a,onClick:()=>t([d==null?void 0:d.id]),hidden:!d.deletedAt||r,disabled:!d.deletedAt||o,icon:l.jsx(F.FontAwesomeIcon,{className:"text-bg-error",icon:c}),onMultipleClick:f=>t(f.map(p=>p.id))}),[o,r,c,i,a,t,n,u])}},$t=s=>{const{t:e}=y.useTranslation(),{onClick:t,hidden:n=!1,sticky:r=!0,disabled:o=!1,id:a=Q.Edit,icon:c=E.faPencil,tooltip:i=e("_pages:common.actions.edit.text")}=s;return{action:m.useCallback(h=>({id:a,sticky:r,tooltip:i,onClick:()=>t(h==null?void 0:h.id),hidden:!!h.deletedAt||n,disabled:!!h.deletedAt||o,icon:l.jsx(F.FontAwesomeIcon,{className:"primary",icon:c})}),[o,n,c,a,t,r,i])}};var Q=(s=>(s.Add="add",s.Edit="edit",s.Delete="delete",s.Restore="restore",s.Refresh="refresh",s.Export="export",s.Import="import",s))(Q||{});const De=s=>{const{t:e}=y.useTranslation(),{onClick:t,hidden:n=!1,disabled:r=!1,isLoading:o=!1}=s;return{action:m.useCallback(()=>({id:Q.Export,hidden:n,disabled:r,icon:l.jsx(F.FontAwesomeIcon,{className:`${o?"rotate":""}`,icon:o?E.faCircleNotch:E.faCloudArrowDown}),tooltip:e("_pages:common.actions.export.text"),onClick:t}),[r,n,o,t,e])}},Oe=s=>{const{t:e}=y.useTranslation(),{onClick:t,hidden:n=!1,disabled:r=!1,isLoading:o=!1}=s;return{action:m.useCallback(()=>({id:Q.Import,hidden:n,disabled:r,icon:l.jsx(F.FontAwesomeIcon,{className:`${o?"rotate":""}`,icon:o?E.faCircleNotch:E.faCloudUpload}),tooltip:e("_pages:common.actions.import.text"),onClick:t}),[r,n,o,t,e])}},Lt=s=>{const{queryKey:e,onSuccess:t,...n}=s,r=P.useQueryClient(),{showStackNotifications:o}=H(),{t:a}=y.useTranslation(),{open:c,onClick:i,close:u,dialogFn:h,isLoading:d}=he({onSuccessMessage:a("_pages:common.actions.delete.successMessage"),onError:p=>{const g=p;if(Z(g))o(g.errors.map(([w,b])=>({message:a(`_pages:${w}.errors.${b}`),type:A.error})));else if(ee(g)){const w=g.message||a("_accessibility:errors.500"),b=a(`_accessibility:errors.${g.status}`);o([{message:b||w,type:A.error}])}},onSuccess:async p=>{await r.invalidateQueries({queryKey:e}),t&&t(p)},...n}),{action:f}=Me({onClick:i});return{onClick:i,title:a("_pages:common.actions.delete.dialog.title"),open:c,isLoading:d,handleSubmit:()=>h.mutate(),handleClose:u,action:f}},fe=()=>{const[s,e]=m.useState(!1);return{open:s,setOpen:e,handleClose:()=>e(!1),handleOpen:()=>e(!0)}},It=s=>{const{t:e}=y.useTranslation(),t=P.useQueryClient(),{showErrorNotification:n,showStackNotifications:r,showSuccessNotification:o}=H(),{defaultValues:a,getFunction:c,mutationFn:i,formToDto:u,dtoToForm:h,onError:d,onSuccess:f,queryKey:p,onSuccessMessage:g,title:w}=s,[b,x]=m.useState(0),{open:S,handleClose:T,handleOpen:k}=fe(),{control:M,handleSubmit:O,reset:$,setError:C,getValues:L,setValue:v}=ve.useForm({defaultValues:a}),R=m.useRef(null),te=m.useCallback(()=>{const N=document.activeElement;if(!(N instanceof HTMLElement)){R.current=null;return}R.current=N.closest("form")},[]),{data:W,isLoading:ae}=P.useQuery({queryFn:()=>c==null?void 0:c(b),queryKey:[...p,b],enabled:!!c&&!!p&&!!b});m.useEffect(()=>{W&&h&&$({...h(W)})},[W]);const V=m.useCallback(N=>{const q=N==null?void 0:N.errors,K=[],G=R.current;if(!G)return K;let we=!1;return q&&q.forEach(([xe,We])=>{const Y=G.querySelector(`[name="${xe}"]`);(Y instanceof HTMLInputElement||Y instanceof HTMLTextAreaElement||Y instanceof HTMLSelectElement)&&(we||(Y.focus(),we=!0),Y.classList.add("error"),K.push(e(`_entities:${p}.${xe}.${We}`)))}),K},[e,p]),ge=m.useCallback(()=>{const N=R.current;if(!N)return;N.querySelectorAll("input, textarea, select").forEach(K=>{K.classList.remove("error")})},[]),Ve=m.useCallback(N=>{x(N??0),k()},[k]),be=m.useCallback(()=>{ge(),R.current=null,T(),$()},[$,ge,T]),ye=P.useMutation({mutationFn:i,onError:N=>{if(console.error(N),d)d(N);else{const q=N;if(Z(q)){const K=V(q);r(K.map(G=>({message:G,type:A.error})))}else if(ee(q)){const K=q.message||e("_accessibility:errors.500"),G=e(`_accessibility:errors.${q.status}`);n({message:G||K})}else n({message:e("_accessibility:errors.500")})}},onSuccess:async N=>{await t.invalidateQueries({queryKey:p}),f&&f(N),o({message:g}),be()}});return{open:S,openDialog:Ve,handleClose:be,control:M,getValues:L,setValue:v,handleSubmit:O,onSubmit:N=>{te(),ye.mutate(u?u(N):N)},reset:$,setError:C,title:w,isLoading:ae||ye.isPending}},Rt=s=>{const{queryKey:e,onSuccess:t,...n}=s,r=P.useQueryClient(),{showStackNotifications:o}=H(),{t:a}=y.useTranslation(),{open:c,onClick:i,close:u,dialogFn:h,isLoading:d}=he({onSuccessMessage:a("_pages:common.actions.restore.successMessage"),onError:p=>{const g=p;if(Z(g))o(g.errors.map(([w,b])=>({message:a(`_pages:${w}.errors.${b}`),type:A.error})));else if(ee(g)){const w=g.message||a("_accessibility:errors.500"),b=a(`_accessibility:errors.${g.status}`);o([{message:b||w,type:A.error}])}},onSuccess:async p=>{await r.invalidateQueries({queryKey:e}),t&&t(p)},...n}),{action:f}=Fe({onClick:i});return{onClick:i,title:a("_pages:common.actions.restore.dialog.title"),open:c,isLoading:d,handleSubmit:()=>h.mutate(),handleClose:u,action:f}};function _t(s){const{t:e}=y.useTranslation(),t=P.useQueryClient(),{queryKey:n,mutationFn:r,entity:o,fileProcessor:a,renderCustomPreview:c,onError:i}=s,[u,h]=m.useState(!1),[d,f]=m.useState(null),[p,g]=m.useState(!1),w=P.useMutation({mutationFn:r,onError:x=>{console.error(x),i==null||i(x)},onSuccess:async()=>{await t.invalidateQueries({queryKey:n})}}),{action:b}=Oe({onClick:()=>h(!0)});return{handleSubmit:async()=>{if(!(!d||d.length===0))try{await w.mutateAsync({items:d,override:p}),h(!1),f(null),g(!1)}catch(x){console.error(x)}},isLoading:w.isPending,fileProcessor:a,onFileProcessed:x=>f(x),renderCustomPreview:c,onOverrideChange:x=>g(x),open:u,title:e("_pages:common.actions.import.dialog.title",{entity:e(`_pages:${o}.title`)}),handleClose:()=>{h(!1),f(null),g(!1)},action:b}}const Pt=s=>{const{showSuccessNotification:e}=H(),{t}=y.useTranslation(),{entity:n,mutationFn:r,onError:o,onSuccess:a,onSuccessMessage:c=t("_pages:common.actions.export.successMessage")}=s,i=P.useMutation({mutationFn:()=>r(),onError:d=>{console.error(d),o&&o(d)},onSuccess:async d=>{const f=JSON.stringify(d,null,2),p=new Blob([f],{type:"application/json"}),g=URL.createObjectURL(p),w=document.createElement("a");w.href=g,w.download=`${n}.json`,w.click(),URL.revokeObjectURL(g),a&&a(d),e({message:c})}}),u=m.useCallback(()=>{i.mutate()},[i]),{action:h}=De({onClick:u,isLoading:i.isPending});return{action:h}},Se=()=>typeof window<"u"?window.scrollY:0;function qe(s){const[e,t]=m.useState(Se),n=m.useCallback(()=>{t(Se())},[]);return m.useEffect(()=>(window.addEventListener("scroll",n),()=>{window.removeEventListener("scroll",n)}),[n]),e>s}const Mt=s=>{const{t:e}=y.useTranslation(),{icon:t=E.faArrowUp,threshold:n=200,scrollTop:r=0,scrollLeft:o=0,tooltip:a=e("_accessibility:buttons.toTop"),scrollOnClick:c=!0,onClick:i,className:u="",variant:h="submit",color:d="primary",...f}=s,p=qe(n),g=()=>{i==null||i(),c&&Nt.scrollTo(o,r)};return l.jsx(D,{variant:h,color:d,icon:t,"data-tooltip-id":"tooltip",onClick:g,className:`to-top ${p?"show":"hide"} ${u}`.trim(),"data-tooltip-content":a,...f})};function Ft(s){const{t:e}=y.useTranslation();if("children"in s){const{children:k,className:M}=s;return l.jsx("div",{className:`error-container${M?` ${M}`:""}`,children:k})}const{error:n,message:r,iconProps:o,onRetry:a,retryLabel:c,retryButtonProps:i,messageProps:u,className:h,resetErrorBoundary:d}=s,f=a??d,{className:p,children:g,onClick:w,...b}=i??{},{className:x,...S}=u??{},T=o!==null;return l.jsxs("div",{className:`error-container${h?` ${h}`:""}`,children:[T&&l.jsx(F.FontAwesomeIcon,{...o,icon:(o==null?void 0:o.icon)??Je.faSadTear,className:`error-icon${o!=null&&o.className?` ${o.className}`:""}`}),l.jsx("p",{...S,className:`error-message${x?` ${x}`:""}`,children:r??(n==null?void 0:n.message)??e("_accessibility:errors.unknownError")}),f&&l.jsx(y.Button,{type:"button",variant:"submit",color:"primary",...b,className:`error-retry ${p?` ${p}`:""}`,onClick:k=>{w==null||w(k),k.defaultPrevented||f()},children:g??c??e("_accessibility:actions.retry",{defaultValue:"Retry"})})]})}const Dt=s=>{const{showBackButton:e,title:t,actions:n}=s,{t:r}=y.useTranslation(),{navigate:o}=J();return l.jsxs("div",{className:"page-header",children:[l.jsxs("div",{className:"page-header-left",children:[e&&l.jsx(D,{icon:E.faArrowLeft,onClick:()=>o(-1),className:"page-header-back",name:r("_accessibility:buttons.back"),"data-tooltip-id":"tooltip","data-tooltip-content":r("_accessibility:buttons.back")}),l.jsx("h2",{className:"page-header-title",children:t})]}),l.jsxs("div",{children:[l.jsx(y.Actions,{className:"page-header-actions-desktop",actions:n??[]}),l.jsx(y.ActionsDropdown,{className:"page-header-actions-mobile",actions:n??[]})]})]})},Ot=s=>{const{title:e,children:t,addOptions:n,filterOptions:r,actions:o,queryKey:a,isLoading:c=!1,isAnimated:i=!0,showBackButton:u=!1}=s,{t:h}=y.useTranslation(),d=P.useQueryClient(),{countOfFilters:f}=y.useTableOptions(),p=m.useMemo(()=>{const g=Array.isArray(o)?[...o]:[];if(a){const w={id:Q.Refresh,onClick:()=>d.invalidateQueries({queryKey:a}),icon:l.jsx(F.FontAwesomeIcon,{icon:E.faRotateLeft}),tooltip:h("_pages:common.actions.refresh.text")};g.unshift(w)}if(n){const w={...n,id:Q.Add,icon:l.jsx(F.FontAwesomeIcon,{icon:E.faAdd})};g.unshift(w)}if(r){const w={...r,id:"filter",icon:l.jsx(F.FontAwesomeIcon,{icon:E.faFilter}),children:l.jsx(y.Badge,{className:`${f>0?"show":"hide"} `,count:f})};g.push(w)}return g},[o,n,f,r,d,a,h]);return l.jsxs("main",{className:"page-main",children:[l.jsx(Dt,{showBackButton:u,actions:p,title:e}),l.jsx("div",{className:`page-main-content ${i?"appear":""}`,children:c?l.jsx(y.Loading,{className:"page-loading"}):t}),n&&l.jsx(D,{icon:n.icon??E.faAdd,color:n.color??"primary",variant:n.variant??"submit",onClick:()=>{var g;return(g=n.onClick)==null?void 0:g.call(n)},className:`button fab ${n.className??""}`})]})},qt=s=>{const{t:e}=y.useTranslation(),{className:t="",itemClassName:n="",loading:r=!1,emptyComponent:o=null,emptyMessage:a=e("_accessibility:messages.empty"),renderComponent:c,data:i=[],hasMore:u=!1,loadingMore:h=!1,onLoadMore:d,loadMoreComponent:f=null,observerRootMargin:p="0px 0px 200px 0px",observerThreshold:g=0}=s,w=m.useRef(!1),b=m.useRef(null),x=m.useCallback(async()=>{if(!(!u||!d)&&!(h||w.current)){w.current=!0;try{await d()}finally{w.current=!1}}},[u,h,d]);return m.useEffect(()=>{if(!u||!d||!b.current||typeof IntersectionObserver>"u")return;const S=new IntersectionObserver(T=>{T.some(k=>k.isIntersecting)&&x()},{rootMargin:p,threshold:g});return S.observe(b.current),()=>S.disconnect()},[u,d,p,g,x]),r?l.jsx(y.Loading,{}):l.jsx(l.Fragment,{children:i!=null&&i.length?l.jsxs("ul",{className:`pretty-grid-main ${t}`,children:[i==null?void 0:i.map(S=>l.jsx("li",{className:`pretty-grid-item ${n}`,children:c(S)},S.id)),u&&d&&l.jsx("li",{className:"pretty-grid-load-more",ref:b,children:f})]}):l.jsx(l.Fragment,{children:o||l.jsx(He,{message:a})})})},pe=m.createContext({title:"",setTitle:()=>{},rightContent:null,setRightContent:()=>{}}),Kt=s=>{const{children:e}=s,[t,n]=m.useState(""),[r,o]=m.useState(null),a=m.useCallback(u=>{n(u)},[]),c=m.useCallback(u=>{o(u)},[]),i=m.useMemo(()=>({title:t,setTitle:a,rightContent:r,setRightContent:c}),[t,a,r,c]);return l.jsx(pe.Provider,{value:i,children:e})},Ke=()=>m.useContext(pe);function Ut(s){const{t:e}=y.useTranslation(),{openDrawer:t,showSearch:n=!0,menuButtonProps:r}=s,{searchComponent:o,location:a}=J(),{title:c,rightContent:i}=Ke(),[u,h]=m.useState(!1),d=m.useCallback(g=>{(Ae()?g.metaKey:g.ctrlKey)&&g.shiftKey&&g.key.toLowerCase()==="f"&&(h(!0),g.preventDefault())},[]);m.useEffect(()=>(window.addEventListener("keydown",d),()=>{window.removeEventListener("keydown",d)}),[d]);const f=o,p=n&&!!f;return l.jsxs(l.Fragment,{children:[a.pathname!=="/"&&!!f&&l.jsx(f,{open:u,onClose:()=>h(!1)}),l.jsxs("header",{id:"header",className:"header",children:[l.jsxs("div",{className:"navbar-left",children:[l.jsx(D,{...r,type:(r==null?void 0:r.type)??"button",icon:(r==null?void 0:r.icon)??E.faBars,onClick:g=>{var w;(w=r==null?void 0:r.onClick)==null||w.call(r,g),t()},name:(r==null?void 0:r.name)??e("_accessibility:buttons.openMenu"),"aria-label":(r==null?void 0:r["aria-label"])??e("_accessibility:ariaLabels.openMenu"),className:`navbar-menu animated ${(r==null?void 0:r.className)??""}`}),l.jsx("h1",{className:"poppins navbar-title",children:c||e("_pages:home.appName")})]}),l.jsxs("div",{className:"navbar-right",children:[i,p&&l.jsx(D,{icon:E.faSearch,className:"navbar-search-btn",onClick:()=>h(!0)})]})]})]})}const se=300,Qt=s=>s??A.error,Bt=s=>{switch(s){case A.error:return E.faWarning;default:return E.faCircleCheck}},ce=s=>{switch(s){case A.success:return"!text-success";case A.error:return"!text-error";case A.warning:return"!text-warning";default:return"!text-info"}},Ht=s=>{switch(s){case A.success:return"bg-bg-success";case A.error:return"bg-bg-error";case A.warning:return"bg-bg-warning";default:return"bg-bg-info"}};function Vt(){const{t:s}=y.useTranslation(),{notification:e,removeNotification:t}=H(),[n,r]=m.useState([]),o=m.useRef(n);m.useLayoutEffect(()=>{o.current=n});const a=m.useRef(null),c=m.useCallback(i=>{r(u=>i!==void 0?u.map(h=>h.id===i?{...h,closing:!0}:h):u.map(h=>({...h,closing:!0}))),i!==void 0?setTimeout(()=>{t(i),r(u=>u.filter(h=>h.id!==i))},se):(a.current&&clearTimeout(a.current),a.current=setTimeout(()=>{t(),r([]),a.current=null},se))},[t]);return m.useEffect(()=>{let i=null;const u=()=>{i&&clearTimeout(i),a.current&&(clearTimeout(a.current),a.current=null)};if(e.length===0)return o.current.length===0?void 0:(a.current&&clearTimeout(a.current),i=setTimeout(()=>{r(p=>p.map(g=>({...g,closing:!0}))),i=null},0),a.current=setTimeout(()=>{r([]),a.current=null},se),u);const h=new Set(o.current.map(p=>p.id));if(!e.some(p=>p.id!==void 0&&!h.has(p.id)))return;if(o.current.length===0){const p=[...e];return i=setTimeout(()=>{r(p.map(g=>({...g,closing:!1}))),i=null},0),()=>{i&&clearTimeout(i)}}a.current&&clearTimeout(a.current),i=setTimeout(()=>{r(p=>p.every(g=>g.closing)?p:p.map(g=>({...g,closing:!0}))),i=null},0);const f=[...e];return a.current=setTimeout(()=>{r(f.map(p=>({...p,closing:!1}))),a.current=null},se),u},[e]),m.useEffect(()=>{if(!n.length)return;let i;const u=window.setTimeout(()=>{i=()=>c(),window.addEventListener("click",i)},0),h=d=>{d.key==="Escape"&&c()};return window.addEventListener("keydown",h),()=>{window.clearTimeout(u),i&&window.removeEventListener("click",i),window.removeEventListener("keydown",h)}},[n.length,c]),Te.createPortal(l.jsx("div",{className:`notification-portal ${n.length?"active":""}`,children:n.map(({id:i,type:u,message:h,closing:d})=>{const f=Qt(u);return l.jsxs("div",{className:`notification ${d?"closing":""} ${Ht(f)}`,onClick:p=>p.stopPropagation(),children:[l.jsxs("div",{className:"notification-body",children:[l.jsx(F.FontAwesomeIcon,{icon:Bt(f),className:`notification-icon ${ce(f)}`}),l.jsx("p",{className:`notification-text ${ce(f)}`,children:h})]}),l.jsx(D,{type:"button",icon:E.faClose,color:"error",className:"notification-close group",onClick:p=>{p.stopPropagation(),i!==void 0&&c(i)},iconClassName:`${ce(f)} notification-close-icon`,name:s("_accessibility:buttons.closeNotification"),"aria-label":s("_accessibility:ariaLabels.closeNotification")})]},i)})}),document.body)}function Wt(s){const{className:e,...t}=s;return l.jsx("div",{className:"splash-screen",children:l.jsx(y.Loading,{className:`blur-appear ${e?` ${e}`:""}`,...t})})}const Ue=s=>{const{id:e,active:t,onClick:n,children:r,to:o,useLinks:a=!0,tabButtonProps:c}=s,{linkComponent:i}=J(),u=i;if(!a){const{className:d="",variant:f=t?"submit":"outlined",color:p=t?"primary":"default",...g}=c??{};return l.jsx(y.Button,{type:"button",variant:f,color:p,className:`tab ${d}`,onClick:n,...g,children:r})}const h=`button submit tab ${t?"primary":"outlined"} ${(c==null?void 0:c.className)??""}`.trim();return l.jsx(u,{to:o??`#${e}`,onClick:()=>n(),className:h,children:r})},Qe=s=>{var p;const{tabs:e=[],defaultTab:t,currentTab:n,onTabChange:r,className:o="",tabsContainerClassName:a="",useLinks:c=!0,tabButtonProps:i}=s,[u,h]=m.useState(t??((p=e[0])==null?void 0:p.id)),d=n??u,f=m.useMemo(()=>e.find(g=>g.id===d),[e,d]);return l.jsxs("div",{className:`tabs-layout-main ${o}`,children:[l.jsx("ul",{className:`horizontal tabs tabs-container ${a}`,children:e.map(({id:g,to:w,label:b})=>l.jsx("li",{children:l.jsx(Ue,{onClick:()=>{n===void 0&&h(g),r==null||r(g)},id:g,to:w,siblings:e.length>1,active:d===g,useLinks:c,tabButtonProps:i,children:b})},g))}),f==null?void 0:f.content]})},Be=s=>{const{title:e,body:t,content:n,onClickNext:r,onSkip:o,onStartAsGuest:a,onSignIn:c,image:i="",alt:u="",final:h=!1}=s,{t:d}=y.useTranslation();return l.jsxs("div",{className:"big-appear step-container",children:[i&&l.jsx("img",{src:i,alt:u}),e!=null&&l.jsx("h2",{className:"step-title",children:e}),t!=null&&l.jsx("div",{className:"step-body",children:t}),n!=null&&l.jsx("div",{className:"step-content",children:n}),l.jsx("div",{className:"step-actions",children:h?l.jsxs(l.Fragment,{children:[l.jsx(y.Button,{color:"primary",className:"step-button",variant:"outlined",onClick:a,"aria-label":d("_accessibility:ariaLabels.start"),children:d("_accessibility:buttons.startAsGuest")}),l.jsx(y.Button,{color:"primary",variant:"submit",className:"step-button","aria-label":d("_accessibility:ariaLabels.start"),onClick:c,children:d("_accessibility:buttons.signIn")})]}):l.jsxs(l.Fragment,{children:[l.jsx(y.Button,{color:"primary",className:"step-button",variant:"outlined",onClick:o,"aria-label":d("_accessibility:ariaLabels.skip"),children:d("_accessibility:buttons.skip")}),l.jsx(y.Button,{color:"primary",className:"step-button",variant:"outlined",onClick:()=>r(),"aria-label":d("_accessibility:ariaLabels.next"),children:d("_accessibility:buttons.next")})]})})]})},Gt=s=>{const{steps:e,signInPath:t="/auth/sign-in",guestPath:n="/",onSkip:r,onSignIn:o,onStartAsGuest:a}=s,{setGuestMode:c}=de(),{navigate:i}=J(),[u,h]=m.useState(1),d=m.useCallback(()=>{if(r){r();return}i(t)},[i,r,t]),f=m.useCallback(()=>{if(o){o();return}i(t)},[i,o,t]),p=m.useCallback(()=>{if(a){a();return}c(!0),i(n)},[n,i,a,c]),g=m.useMemo(()=>e.map((w,b)=>({id:b+1,label:"",content:l.jsx(Be,{...w,final:b===e.length-1,onClickNext:()=>h(x=>x+1),onSkip:d,onStartAsGuest:p,onSignIn:f})})),[f,d,p,e]);return l.jsx("div",{className:"onboarding-main",children:l.jsx(Qe,{currentTab:u,onTabChange:w=>h(Number(w)),tabs:g,useLinks:!1})})},He=s=>{const{message:e,messageProps:t={className:"empty-message"},action:n,iconProps:r}=s;return l.jsxs("div",{className:"empty-container",children:[r&&l.jsx(F.FontAwesomeIcon,{...r}),l.jsx("p",{...t,children:e}),n&&l.jsx(y.Action,{showTooltips:!1,showText:!0,...n})]})};Object.defineProperty(exports,"Action",{enumerable:!0,get:()=>y.Action});Object.defineProperty(exports,"Actions",{enumerable:!0,get:()=>y.Actions});Object.defineProperty(exports,"ActionsDropdown",{enumerable:!0,get:()=>y.ActionsDropdown});Object.defineProperty(exports,"Button",{enumerable:!0,get:()=>y.Button});exports.APIClient=X;exports.AppIconButton=D;exports.AuthClient=je;exports.AuthProvider=Ct;exports.BaseClient=dt;exports.ConfigProvider=kt;exports.ConfirmationDialog=tt;exports.Dialog=re;exports.DialogActions=oe;exports.Drawer=vt;exports.DrawerMenuContext=me;exports.DrawerMenuProvider=Tt;exports.Empty=He;exports.Error=Ft;exports.FormContainer=Xe;exports.FormDialog=et;exports.GlobalActions=Q;exports.IManager=ut;exports.IconButton=D;exports.ImportDialog=at;exports.IndexedDBClient=mt;exports.ManagerProvider=xt;exports.Methods=I;exports.Navbar=Ut;exports.NavbarContext=pe;exports.NavbarProvider=Kt;exports.Notification=Vt;exports.NotificationEnumType=A;exports.NotificationProvider=yt;exports.Onboarding=Gt;exports.Page=Ot;exports.ParagraphInput=Ye;exports.PasswordInput=Ze;exports.PrettyGrid=qt;exports.SplashScreen=Wt;exports.Step=Be;exports.Tab=Ue;exports.TabsLayout=Qe;exports.ToTop=Mt;exports.buildQueryUrl=Ne;exports.createQueryClient=ue;exports.enumToKeyValueArray=ht;exports.formatForDatetimeLocal=gt;exports.fromLocal=B;exports.getFormattedDateTime=ft;exports.getShortFormattedDateTime=pt;exports.isHttpError=ee;exports.isMac=Ae;exports.isValidationError=Z;exports.makeRequest=ne;exports.mapValidationErrors=bt;exports.parseQueries=le;exports.queryClient=wt;exports.removeFromLocal=_;exports.toLocal=U;exports.useAuth=de;exports.useConfig=J;exports.useConfirmationForm=he;exports.useDeleteAction=Me;exports.useDeleteDialog=Lt;exports.useDialog=fe;exports.useDrawerMenu=Pe;exports.useEditAction=$t;exports.useExportAction=De;exports.useExportActionMutate=Pt;exports.useFormDialog=It;exports.useImportAction=Oe;exports.useImportDialog=_t;exports.useManager=Ie;exports.useNavbar=Ke;exports.useNotification=H;exports.usePostForm=At;exports.useRestoreAction=Fe;exports.useRestoreDialog=Rt;exports.useScrollTrigger=qe;exports.useTimeAge=jt;Object.keys(y).forEach(s=>{s!=="default"&&!Object.prototype.hasOwnProperty.call(exports,s)&&Object.defineProperty(exports,s,{enumerable:!0,get:()=>y[s]})});