@questpie/admin 3.0.4 → 3.0.6

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 (90) hide show
  1. package/README.md +99 -1
  2. package/dist/client/builder/types/field-types.d.mts +11 -0
  3. package/dist/client/components/blocks/block-editor-layout.mjs +2 -2
  4. package/dist/client/components/blocks/block-library-sidebar.mjs +89 -61
  5. package/dist/client/components/brand-logo.d.mts +25 -0
  6. package/dist/client/components/brand-logo.mjs +174 -0
  7. package/dist/client/components/media/media-grid.mjs +95 -78
  8. package/dist/client/components/primitives/select-multi.mjs +388 -368
  9. package/dist/client/components/primitives/select-single.mjs +344 -331
  10. package/dist/client/components/widgets/chart-widget.mjs +78 -62
  11. package/dist/client/components/widgets/progress-widget.mjs +39 -37
  12. package/dist/client/components/widgets/quick-actions-widget.mjs +111 -90
  13. package/dist/client/components/widgets/recent-items-widget.mjs +40 -38
  14. package/dist/client/components/widgets/table-widget.mjs +4 -3
  15. package/dist/client/components/widgets/timeline-widget.mjs +92 -74
  16. package/dist/client/components/widgets/value-widget.mjs +164 -144
  17. package/dist/client/create-admin-client.d.mts +7 -0
  18. package/dist/client/create-admin-client.mjs +25 -0
  19. package/dist/client/hooks/use-brand.d.mts +22 -0
  20. package/dist/client/hooks/use-brand.mjs +52 -0
  21. package/dist/client/hooks/use-server-actions.mjs +21 -16
  22. package/dist/client/preview/block-scope-context.d.mts +2 -2
  23. package/dist/client/preview/preview-banner.d.mts +2 -2
  24. package/dist/client/preview/preview-banner.mjs +75 -46
  25. package/dist/client/runtime/index.mjs +1 -1
  26. package/dist/client/runtime/provider.d.mts +4 -0
  27. package/dist/client/runtime/provider.mjs +38 -8
  28. package/dist/client/styles/base.css +4 -0
  29. package/dist/client/types/admin-config.d.mts +24 -0
  30. package/dist/client/views/auth/auth-layout.d.mts +6 -1
  31. package/dist/client/views/auth/auth-layout.mjs +116 -102
  32. package/dist/client/views/collection/auto-form-fields.mjs +2 -0
  33. package/dist/client/views/collection/field-renderer.mjs +3 -2
  34. package/dist/client/views/collection/table-view.mjs +26 -26
  35. package/dist/client/views/globals/global-form-view.mjs +908 -863
  36. package/dist/client/views/layout/admin-layout.mjs +151 -131
  37. package/dist/client/views/layout/admin-router.mjs +297 -180
  38. package/dist/client/views/layout/admin-sidebar.mjs +178 -156
  39. package/dist/client/views/pages/accept-invite-page.mjs +122 -144
  40. package/dist/client/views/pages/forgot-password-page.mjs +22 -30
  41. package/dist/client/views/pages/invite-page.mjs +24 -33
  42. package/dist/client/views/pages/login-page.mjs +24 -32
  43. package/dist/client/views/pages/reset-password-page.mjs +77 -92
  44. package/dist/client/views/pages/setup-page.mjs +73 -65
  45. package/dist/client.d.mts +6 -2
  46. package/dist/client.mjs +5 -2
  47. package/dist/index.d.mts +6 -2
  48. package/dist/index.mjs +5 -2
  49. package/dist/server/augmentation/dashboard.d.mts +23 -5
  50. package/dist/server/augmentation/form-layout.d.mts +10 -0
  51. package/dist/server/augmentation/index.d.mts +1 -1
  52. package/dist/server/augmentation.d.mts +1 -1
  53. package/dist/server/i18n/index.mjs +13 -7
  54. package/dist/server/i18n/messages/cs.mjs +391 -1
  55. package/dist/server/i18n/messages/de.mjs +389 -1
  56. package/dist/server/i18n/messages/en.mjs +102 -0
  57. package/dist/server/i18n/messages/es.mjs +389 -1
  58. package/dist/server/i18n/messages/fr.mjs +389 -1
  59. package/dist/server/i18n/messages/pl.mjs +393 -1
  60. package/dist/server/i18n/messages/pt.mjs +386 -1
  61. package/dist/server/i18n/messages/sk.mjs +133 -1
  62. package/dist/server/modules/admin/collections/account.d.mts +50 -50
  63. package/dist/server/modules/admin/collections/admin-locks.d.mts +53 -53
  64. package/dist/server/modules/admin/collections/admin-preferences.d.mts +39 -39
  65. package/dist/server/modules/admin/collections/admin-saved-views.d.mts +47 -47
  66. package/dist/server/modules/admin/collections/apikey.d.mts +68 -68
  67. package/dist/server/modules/admin/collections/assets.d.mts +20 -20
  68. package/dist/server/modules/admin/collections/session.d.mts +42 -42
  69. package/dist/server/modules/admin/collections/user.d.mts +32 -32
  70. package/dist/server/modules/admin/collections/verification.d.mts +36 -36
  71. package/dist/server/modules/admin/dto/admin-config.dto.mjs +19 -1
  72. package/dist/server/modules/admin/routes/admin-config.d.mts +2 -2
  73. package/dist/server/modules/admin/routes/execute-action.d.mts +9 -9
  74. package/dist/server/modules/admin/routes/execute-action.mjs +34 -28
  75. package/dist/server/modules/admin/routes/i18n-helpers.mjs +34 -0
  76. package/dist/server/modules/admin/routes/locales.d.mts +2 -2
  77. package/dist/server/modules/admin/routes/preview.d.mts +11 -11
  78. package/dist/server/modules/admin/routes/preview.mjs +25 -17
  79. package/dist/server/modules/admin/routes/reactive.d.mts +9 -9
  80. package/dist/server/modules/admin/routes/route-helpers.mjs +1 -1
  81. package/dist/server/modules/admin/routes/setup.mjs +10 -7
  82. package/dist/server/modules/admin/routes/translations.d.mts +4 -4
  83. package/dist/server/modules/admin/routes/widget-data.d.mts +5 -5
  84. package/dist/server/modules/admin-preferences/collections/saved-views.d.mts +23 -23
  85. package/dist/server.d.mts +4 -4
  86. package/dist/shared/preview-utils.d.mts +34 -1
  87. package/dist/shared/preview-utils.mjs +79 -1
  88. package/dist/shared.d.mts +2 -2
  89. package/dist/shared.mjs +2 -2
  90. package/package.json +3 -3
@@ -13,6 +13,7 @@ import { Skeleton } from "../../components/ui/skeleton.mjs";
13
13
  import { useAuthClientSafe } from "../../hooks/use-auth.mjs";
14
14
  import { useCurrentUser, useSessionState } from "../../hooks/use-current-user.mjs";
15
15
  import { Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarMenu, SidebarMenuItem, SidebarSeparator, SidebarTrigger, useSidebar } from "../../components/ui/sidebar.mjs";
16
+ import { BrandLogoMark } from "../../components/brand-logo.mjs";
16
17
  import { getAdminPreferenceQueryKey, useAdminPreference, useSetAdminPreference } from "../../hooks/use-admin-preferences.mjs";
17
18
  import { c } from "react/compiler-runtime";
18
19
  import { Icon } from "@iconify/react";
@@ -144,9 +145,10 @@ function _temp(s) {
144
145
  return s.navigation;
145
146
  }
146
147
  function useSidebarProps(props) {
147
- const $ = c(6);
148
+ const $ = c(7);
148
149
  const storeNavigation = useAdminStore(_temp3);
149
150
  const storeBrandName = useAdminStore(_temp4);
151
+ const storeBrandLogo = useAdminStore(_temp5);
150
152
  const serverNavigation = useServerNavigation();
151
153
  let t0;
152
154
  if ($[0] !== serverNavigation || $[1] !== storeNavigation) {
@@ -157,15 +159,17 @@ function useSidebarProps(props) {
157
159
  } else t0 = $[2];
158
160
  const t1 = props.brandName ?? storeBrandName ?? "Admin";
159
161
  let t2;
160
- if ($[3] !== t0 || $[4] !== t1) {
162
+ if ($[3] !== storeBrandLogo || $[4] !== t0 || $[5] !== t1) {
161
163
  t2 = {
162
164
  navigation: t0,
163
- brandName: t1
165
+ brandName: t1,
166
+ brandLogo: storeBrandLogo
164
167
  };
165
- $[3] = t0;
166
- $[4] = t1;
167
- $[5] = t2;
168
- } else t2 = $[5];
168
+ $[3] = storeBrandLogo;
169
+ $[4] = t0;
170
+ $[5] = t1;
171
+ $[6] = t2;
172
+ } else t2 = $[6];
169
173
  return t2;
170
174
  }
171
175
  /**
@@ -180,6 +184,9 @@ function useSidebarProps(props) {
180
184
  * <RenderIcon icon={{ type: "icon", props: { name: "ph:users" } }} />
181
185
  * ```
182
186
  */
187
+ function _temp5(s_1) {
188
+ return s_1.brandLogo;
189
+ }
183
190
  function _temp4(s_0) {
184
191
  return s_0.brandName;
185
192
  }
@@ -1026,7 +1033,7 @@ function UserFooter(t0) {
1026
1033
  src: getFlagUrl(locale.code),
1027
1034
  alt: locale.code,
1028
1035
  className: "image-outline h-3 w-4 object-cover",
1029
- onError: _temp5
1036
+ onError: _temp6
1030
1037
  }),
1031
1038
  /* @__PURE__ */ jsx("span", {
1032
1039
  className: "font-chrome chrome-meta w-6 text-xs font-medium",
@@ -1051,7 +1058,7 @@ function UserFooter(t0) {
1051
1058
  src: getFlagUrl(locale_0.flagCountryCode ?? locale_0.code),
1052
1059
  alt: locale_0.code,
1053
1060
  className: "image-outline h-3 w-4 object-cover",
1054
- onError: _temp6
1061
+ onError: _temp7
1055
1062
  }),
1056
1063
  /* @__PURE__ */ jsx("span", {
1057
1064
  className: "font-chrome chrome-meta w-6 text-xs font-medium",
@@ -1192,14 +1199,14 @@ function UserFooter(t0) {
1192
1199
  * </SidebarProvider>
1193
1200
  * ```
1194
1201
  */
1195
- function _temp6(e_0) {
1202
+ function _temp7(e_0) {
1196
1203
  e_0.currentTarget.style.display = "none";
1197
1204
  }
1198
- function _temp5(e) {
1205
+ function _temp6(e) {
1199
1206
  e.currentTarget.style.display = "none";
1200
1207
  }
1201
1208
  function AdminSidebar(t0) {
1202
- const $ = c(93);
1209
+ const $ = c(99);
1203
1210
  const { LinkComponent, activeRoute, basePath: t1, brandName: brandNameProp, className, renderBrand, renderNavItem, footer, onSearchOpen, afterBrand, beforeFooter, theme, setTheme, showThemeToggle, useActiveProps: t2 } = t0;
1204
1211
  const basePath = t1 === void 0 ? "/admin" : t1;
1205
1212
  const useActiveProps = t2 === void 0 ? true : t2;
@@ -1209,7 +1216,8 @@ function AdminSidebar(t0) {
1209
1216
  $[0] = brandNameProp;
1210
1217
  $[1] = t3;
1211
1218
  } else t3 = $[1];
1212
- const { navigation, brandName } = useSidebarProps(t3);
1219
+ const { navigation, brandName, brandLogo } = useSidebarProps(t3);
1220
+ const { t } = useTranslation();
1213
1221
  const { state, isMobile, setOpenMobile, toggleSidebar } = useSidebar();
1214
1222
  const collapsed = state === "collapsed";
1215
1223
  const currentActiveRoute = activeRoute ?? (typeof window !== "undefined" ? window.location.pathname : void 0);
@@ -1254,20 +1262,25 @@ function AdminSidebar(t0) {
1254
1262
  } else t8 = $[12];
1255
1263
  const handleBrandClick = t8;
1256
1264
  let t9;
1257
- if ($[13] !== brandName) {
1258
- t9 = (isCollapsed) => /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(QuestpieSymbol, {}), !isCollapsed && /* @__PURE__ */ jsx("div", {
1265
+ if ($[13] !== brandLogo || $[14] !== brandName) {
1266
+ t9 = (isCollapsed) => /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(BrandLogoMark, {
1267
+ logo: brandLogo,
1268
+ alt: brandName,
1269
+ fallback: /* @__PURE__ */ jsx(QuestpieSymbol, {})
1270
+ }), !isCollapsed && /* @__PURE__ */ jsx("div", {
1259
1271
  className: "grid flex-1 text-left leading-tight",
1260
1272
  children: /* @__PURE__ */ jsx("span", {
1261
1273
  className: "qa-sidebar__brand-name font-chrome truncate text-sm font-medium",
1262
1274
  children: brandName
1263
1275
  })
1264
1276
  })] });
1265
- $[13] = brandName;
1266
- $[14] = t9;
1267
- } else t9 = $[14];
1277
+ $[13] = brandLogo;
1278
+ $[14] = brandName;
1279
+ $[15] = t9;
1280
+ } else t9 = $[15];
1268
1281
  const renderBuiltInBrand = t9;
1269
1282
  let t10;
1270
- if ($[15] !== brandName || $[16] !== effectiveRenderBrand || $[17] !== renderBuiltInBrand) {
1283
+ if ($[16] !== brandName || $[17] !== effectiveRenderBrand || $[18] !== renderBuiltInBrand) {
1271
1284
  t10 = (isCollapsed_0) => {
1272
1285
  const builtInBrand = renderBuiltInBrand(isCollapsed_0);
1273
1286
  if (!effectiveRenderBrand) return builtInBrand;
@@ -1279,79 +1292,80 @@ function AdminSidebar(t0) {
1279
1292
  })
1280
1293
  });
1281
1294
  };
1282
- $[15] = brandName;
1283
- $[16] = effectiveRenderBrand;
1284
- $[17] = renderBuiltInBrand;
1285
- $[18] = t10;
1286
- } else t10 = $[18];
1295
+ $[16] = brandName;
1296
+ $[17] = effectiveRenderBrand;
1297
+ $[18] = renderBuiltInBrand;
1298
+ $[19] = t10;
1299
+ } else t10 = $[19];
1287
1300
  const renderBrandContent = t10;
1288
1301
  let t11;
1289
- if ($[19] !== collapsed || $[20] !== renderBrandContent) {
1302
+ if ($[20] !== collapsed || $[21] !== renderBrandContent) {
1290
1303
  t11 = renderBrandContent(collapsed);
1291
- $[19] = collapsed;
1292
- $[20] = renderBrandContent;
1293
- $[21] = t11;
1294
- } else t11 = $[21];
1304
+ $[20] = collapsed;
1305
+ $[21] = renderBrandContent;
1306
+ $[22] = t11;
1307
+ } else t11 = $[22];
1295
1308
  const brandContent = t11;
1296
1309
  const t12 = collapsed && "justify-center";
1297
1310
  let t13;
1298
- if ($[22] !== t12) {
1311
+ if ($[23] !== t12) {
1299
1312
  t13 = cn("qa-sidebar__brand flex items-center gap-2 rounded-md p-2 transition-[background-color,color,transform] duration-[var(--motion-duration-base)] ease-[var(--motion-ease-standard)] active:scale-[0.96] motion-reduce:transition-none motion-reduce:active:scale-100", "hover:bg-sidebar-accent", t12);
1300
- $[22] = t12;
1301
- $[23] = t13;
1302
- } else t13 = $[23];
1313
+ $[23] = t12;
1314
+ $[24] = t13;
1315
+ } else t13 = $[24];
1303
1316
  let t14;
1304
- if ($[24] !== LinkComponent || $[25] !== basePath || $[26] !== brandContent || $[27] !== t13) {
1317
+ if ($[25] !== LinkComponent || $[26] !== basePath || $[27] !== brandContent || $[28] !== t13) {
1305
1318
  t14 = /* @__PURE__ */ jsx(LinkComponent, {
1306
1319
  to: basePath,
1307
1320
  className: t13,
1308
1321
  children: brandContent
1309
1322
  });
1310
- $[24] = LinkComponent;
1311
- $[25] = basePath;
1312
- $[26] = brandContent;
1313
- $[27] = t13;
1314
- $[28] = t14;
1315
- } else t14 = $[28];
1323
+ $[25] = LinkComponent;
1324
+ $[26] = basePath;
1325
+ $[27] = brandContent;
1326
+ $[28] = t13;
1327
+ $[29] = t14;
1328
+ } else t14 = $[29];
1316
1329
  const brandLink = t14;
1317
1330
  let t15;
1318
- if ($[29] !== onSearchOpen) {
1331
+ if ($[30] !== onSearchOpen || $[31] !== t) {
1319
1332
  t15 = onSearchOpen && /* @__PURE__ */ jsx(Button, {
1320
1333
  type: "button",
1321
1334
  variant: "ghost",
1322
1335
  size: "icon-xs",
1323
1336
  className: "text-sidebar-foreground/60 hover:bg-sidebar-accent hover:text-sidebar-foreground",
1324
1337
  onClick: onSearchOpen,
1325
- title: "Search",
1326
- "aria-label": "Search",
1338
+ title: t("common.search"),
1339
+ "aria-label": t("common.search"),
1327
1340
  children: /* @__PURE__ */ jsx(Icon, { icon: "ph:magnifying-glass" })
1328
1341
  });
1329
- $[29] = onSearchOpen;
1330
- $[30] = t15;
1331
- } else t15 = $[30];
1342
+ $[30] = onSearchOpen;
1343
+ $[31] = t;
1344
+ $[32] = t15;
1345
+ } else t15 = $[32];
1332
1346
  let t16;
1333
- if ($[31] === Symbol.for("react.memo_cache_sentinel")) {
1347
+ if ($[33] === Symbol.for("react.memo_cache_sentinel")) {
1334
1348
  t16 = /* @__PURE__ */ jsx(SidebarTrigger, { className: "text-sidebar-foreground/60 hover:bg-sidebar-accent hover:text-sidebar-foreground" });
1335
- $[31] = t16;
1336
- } else t16 = $[31];
1349
+ $[33] = t16;
1350
+ } else t16 = $[33];
1337
1351
  let t17;
1338
- if ($[32] !== t15) {
1352
+ if ($[34] !== t15) {
1339
1353
  t17 = /* @__PURE__ */ jsxs("div", {
1340
1354
  className: "qa-sidebar__header-actions flex shrink-0 items-center gap-1",
1341
1355
  children: [t15, t16]
1342
1356
  });
1343
- $[32] = t15;
1344
- $[33] = t17;
1345
- } else t17 = $[33];
1357
+ $[34] = t15;
1358
+ $[35] = t17;
1359
+ } else t17 = $[35];
1346
1360
  const sidebarActions = t17;
1347
1361
  let t18;
1348
- if ($[34] !== className) {
1362
+ if ($[36] !== className) {
1349
1363
  t18 = cn("qa-sidebar bg-sidebar relative border-none", className);
1350
- $[34] = className;
1351
- $[35] = t18;
1352
- } else t18 = $[35];
1364
+ $[36] = className;
1365
+ $[37] = t18;
1366
+ } else t18 = $[37];
1353
1367
  let t19;
1354
- if ($[36] !== LinkComponent || $[37] !== basePath || $[38] !== brandLink || $[39] !== brandName || $[40] !== collapsed || $[41] !== isMobile || $[42] !== renderBrandContent) {
1368
+ if ($[38] !== LinkComponent || $[39] !== basePath || $[40] !== brandLink || $[41] !== brandName || $[42] !== collapsed || $[43] !== isMobile || $[44] !== renderBrandContent) {
1355
1369
  t19 = collapsed && !isMobile ? /* @__PURE__ */ jsxs(Tooltip, { children: [/* @__PURE__ */ jsx(TooltipTrigger, { render: /* @__PURE__ */ jsx(LinkComponent, {
1356
1370
  to: basePath,
1357
1371
  className: cn("flex items-center gap-2 rounded-md p-2 transition-[background-color,color,transform] duration-[var(--motion-duration-base)] ease-[var(--motion-ease-standard)] active:scale-[0.96] motion-reduce:transition-none motion-reduce:active:scale-100", "hover:bg-sidebar-accent", "justify-center"),
@@ -1360,17 +1374,17 @@ function AdminSidebar(t0) {
1360
1374
  side: "right",
1361
1375
  children: brandName
1362
1376
  })] }) : brandLink;
1363
- $[36] = LinkComponent;
1364
- $[37] = basePath;
1365
- $[38] = brandLink;
1366
- $[39] = brandName;
1367
- $[40] = collapsed;
1368
- $[41] = isMobile;
1369
- $[42] = renderBrandContent;
1370
- $[43] = t19;
1371
- } else t19 = $[43];
1377
+ $[38] = LinkComponent;
1378
+ $[39] = basePath;
1379
+ $[40] = brandLink;
1380
+ $[41] = brandName;
1381
+ $[42] = collapsed;
1382
+ $[43] = isMobile;
1383
+ $[44] = renderBrandContent;
1384
+ $[45] = t19;
1385
+ } else t19 = $[45];
1372
1386
  let t20;
1373
- if ($[44] !== handleBrandClick || $[45] !== t19) {
1387
+ if ($[46] !== handleBrandClick || $[47] !== t19) {
1374
1388
  t20 = /* @__PURE__ */ jsx(SidebarMenu, {
1375
1389
  className: "min-w-0 flex-1",
1376
1390
  children: /* @__PURE__ */ jsx(SidebarMenuItem, {
@@ -1378,23 +1392,23 @@ function AdminSidebar(t0) {
1378
1392
  children: t19
1379
1393
  })
1380
1394
  });
1381
- $[44] = handleBrandClick;
1382
- $[45] = t19;
1383
- $[46] = t20;
1384
- } else t20 = $[46];
1395
+ $[46] = handleBrandClick;
1396
+ $[47] = t19;
1397
+ $[48] = t20;
1398
+ } else t20 = $[48];
1385
1399
  const t21 = !collapsed && sidebarActions;
1386
1400
  let t22;
1387
- if ($[47] !== t20 || $[48] !== t21) {
1401
+ if ($[49] !== t20 || $[50] !== t21) {
1388
1402
  t22 = /* @__PURE__ */ jsxs(SidebarHeader, {
1389
1403
  className: "qa-sidebar__header h-auto flex-row items-center gap-2 border-none px-3 pt-3 pb-1",
1390
1404
  children: [t20, t21]
1391
1405
  });
1392
- $[47] = t20;
1393
- $[48] = t21;
1394
- $[49] = t22;
1395
- } else t22 = $[49];
1406
+ $[49] = t20;
1407
+ $[50] = t21;
1408
+ $[51] = t22;
1409
+ } else t22 = $[51];
1396
1410
  let t23;
1397
- if ($[50] !== collapsed || $[51] !== isMobile || $[52] !== onSearchOpen || $[53] !== toggleSidebar) {
1411
+ if ($[52] !== collapsed || $[53] !== isMobile || $[54] !== onSearchOpen || $[55] !== t || $[56] !== toggleSidebar) {
1398
1412
  t23 = collapsed && !isMobile && /* @__PURE__ */ jsxs("div", {
1399
1413
  className: "qa-sidebar__collapsed-peek group/peek absolute top-4 -right-3 z-50 flex items-center",
1400
1414
  children: [/* @__PURE__ */ jsx(Button, {
@@ -1403,46 +1417,53 @@ function AdminSidebar(t0) {
1403
1417
  size: "icon-xs",
1404
1418
  className: "border-sidebar-border/70 bg-sidebar text-sidebar-foreground/60 hover:bg-sidebar-accent hover:text-sidebar-foreground h-8 w-3 rounded-l-none rounded-r-md border border-l-0 p-0 shadow-[var(--floating-shadow)]",
1405
1419
  onClick: toggleSidebar,
1406
- "aria-label": "Expand sidebar",
1420
+ "aria-label": t("ui.expandSidebar"),
1407
1421
  children: /* @__PURE__ */ jsx("span", { className: "h-3 w-0.5 rounded-full bg-current opacity-55" })
1408
1422
  }), /* @__PURE__ */ jsxs("div", {
1409
1423
  className: "floating-surface ml-1 flex scale-95 items-center gap-1 p-1 opacity-0 transition-[opacity,transform] duration-[var(--motion-duration-base)] ease-[var(--motion-ease-enter)] group-focus-within/peek:scale-100 group-focus-within/peek:opacity-100 group-hover/peek:scale-100 group-hover/peek:opacity-100 motion-reduce:scale-100 motion-reduce:transition-none",
1410
1424
  children: [/* @__PURE__ */ jsx(SidebarTrigger, {
1411
1425
  className: "text-muted-foreground hover:bg-muted hover:text-foreground",
1412
- "aria-label": "Expand sidebar"
1426
+ "aria-label": t("ui.expandSidebar")
1413
1427
  }), onSearchOpen && /* @__PURE__ */ jsx(Button, {
1414
1428
  type: "button",
1415
1429
  variant: "ghost",
1416
1430
  size: "icon-sm",
1417
1431
  className: "text-muted-foreground hover:bg-muted hover:text-foreground",
1418
1432
  onClick: onSearchOpen,
1419
- title: "Search",
1420
- "aria-label": "Search",
1433
+ title: t("common.search"),
1434
+ "aria-label": t("common.search"),
1421
1435
  children: /* @__PURE__ */ jsx(Icon, { icon: "ph:magnifying-glass" })
1422
1436
  })]
1423
1437
  })]
1424
1438
  });
1425
- $[50] = collapsed;
1426
- $[51] = isMobile;
1427
- $[52] = onSearchOpen;
1428
- $[53] = toggleSidebar;
1429
- $[54] = t23;
1430
- } else t23 = $[54];
1439
+ $[52] = collapsed;
1440
+ $[53] = isMobile;
1441
+ $[54] = onSearchOpen;
1442
+ $[55] = t;
1443
+ $[56] = toggleSidebar;
1444
+ $[57] = t23;
1445
+ } else t23 = $[57];
1431
1446
  let t24;
1432
- if ($[55] !== afterBrand || $[56] !== collapsed) {
1447
+ if ($[58] !== afterBrand || $[59] !== collapsed) {
1433
1448
  t24 = afterBrand && !collapsed && /* @__PURE__ */ jsx("div", {
1434
1449
  className: "qa-sidebar__after-brand border-sidebar-border/70 border-b px-3 py-2",
1435
1450
  children: afterBrand
1436
1451
  });
1437
- $[55] = afterBrand;
1438
- $[56] = collapsed;
1439
- $[57] = t24;
1440
- } else t24 = $[57];
1452
+ $[58] = afterBrand;
1453
+ $[59] = collapsed;
1454
+ $[60] = t24;
1455
+ } else t24 = $[60];
1441
1456
  let t25;
1442
- if ($[58] !== LinkComponent || $[59] !== basePath || $[60] !== currentActiveRoute || $[61] !== effectiveRenderNavItem || $[62] !== isSectionCollapsed || $[63] !== navigation || $[64] !== toggleSection || $[65] !== useActiveProps) {
1443
- let t26$1;
1444
- if ($[67] !== LinkComponent || $[68] !== basePath || $[69] !== currentActiveRoute || $[70] !== effectiveRenderNavItem || $[71] !== isSectionCollapsed || $[72] !== toggleSection || $[73] !== useActiveProps) {
1445
- t26$1 = (group, index) => /* @__PURE__ */ jsx(NavGroup, {
1457
+ if ($[61] !== t) {
1458
+ t25 = t("nav.adminNavigation");
1459
+ $[61] = t;
1460
+ $[62] = t25;
1461
+ } else t25 = $[62];
1462
+ let t26;
1463
+ if ($[63] !== LinkComponent || $[64] !== basePath || $[65] !== currentActiveRoute || $[66] !== effectiveRenderNavItem || $[67] !== isSectionCollapsed || $[68] !== navigation || $[69] !== toggleSection || $[70] !== useActiveProps) {
1464
+ let t27$1;
1465
+ if ($[72] !== LinkComponent || $[73] !== basePath || $[74] !== currentActiveRoute || $[75] !== effectiveRenderNavItem || $[76] !== isSectionCollapsed || $[77] !== toggleSection || $[78] !== useActiveProps) {
1466
+ t27$1 = (group, index) => /* @__PURE__ */ jsx(NavGroup, {
1446
1467
  group,
1447
1468
  activeRoute: currentActiveRoute,
1448
1469
  LinkComponent,
@@ -1452,65 +1473,66 @@ function AdminSidebar(t0) {
1452
1473
  isSectionCollapsed,
1453
1474
  toggleSection
1454
1475
  }, group.id ?? `group-${index}`);
1455
- $[67] = LinkComponent;
1456
- $[68] = basePath;
1457
- $[69] = currentActiveRoute;
1458
- $[70] = effectiveRenderNavItem;
1459
- $[71] = isSectionCollapsed;
1460
- $[72] = toggleSection;
1461
- $[73] = useActiveProps;
1462
- $[74] = t26$1;
1463
- } else t26$1 = $[74];
1464
- t25 = navigation.map(t26$1);
1465
- $[58] = LinkComponent;
1466
- $[59] = basePath;
1467
- $[60] = currentActiveRoute;
1468
- $[61] = effectiveRenderNavItem;
1469
- $[62] = isSectionCollapsed;
1470
- $[63] = navigation;
1471
- $[64] = toggleSection;
1472
- $[65] = useActiveProps;
1473
- $[66] = t25;
1474
- } else t25 = $[66];
1475
- let t26;
1476
- if ($[75] !== t25) {
1477
- t26 = /* @__PURE__ */ jsx(SidebarContent, {
1476
+ $[72] = LinkComponent;
1477
+ $[73] = basePath;
1478
+ $[74] = currentActiveRoute;
1479
+ $[75] = effectiveRenderNavItem;
1480
+ $[76] = isSectionCollapsed;
1481
+ $[77] = toggleSection;
1482
+ $[78] = useActiveProps;
1483
+ $[79] = t27$1;
1484
+ } else t27$1 = $[79];
1485
+ t26 = navigation.map(t27$1);
1486
+ $[63] = LinkComponent;
1487
+ $[64] = basePath;
1488
+ $[65] = currentActiveRoute;
1489
+ $[66] = effectiveRenderNavItem;
1490
+ $[67] = isSectionCollapsed;
1491
+ $[68] = navigation;
1492
+ $[69] = toggleSection;
1493
+ $[70] = useActiveProps;
1494
+ $[71] = t26;
1495
+ } else t26 = $[71];
1496
+ let t27;
1497
+ if ($[80] !== t25 || $[81] !== t26) {
1498
+ t27 = /* @__PURE__ */ jsx(SidebarContent, {
1478
1499
  className: "qa-sidebar__content gap-3 px-2 py-3 group-data-[collapsible=icon]:gap-2",
1479
1500
  children: /* @__PURE__ */ jsx("nav", {
1480
- "aria-label": "Admin navigation",
1501
+ "aria-label": t25,
1481
1502
  className: "qa-sidebar__nav",
1482
- children: t25
1503
+ children: t26
1483
1504
  })
1484
1505
  });
1485
- $[75] = t25;
1486
- $[76] = t26;
1487
- } else t26 = $[76];
1488
- let t27;
1489
- if ($[77] !== beforeFooter || $[78] !== collapsed) {
1490
- t27 = beforeFooter && !collapsed && /* @__PURE__ */ jsx("div", {
1506
+ $[80] = t25;
1507
+ $[81] = t26;
1508
+ $[82] = t27;
1509
+ } else t27 = $[82];
1510
+ let t28;
1511
+ if ($[83] !== beforeFooter || $[84] !== collapsed) {
1512
+ t28 = beforeFooter && !collapsed && /* @__PURE__ */ jsx("div", {
1491
1513
  className: "qa-sidebar__before-footer border-sidebar-border/70 border-t px-3 py-2",
1492
1514
  children: beforeFooter
1493
1515
  });
1494
- $[77] = beforeFooter;
1495
- $[78] = collapsed;
1496
- $[79] = t27;
1497
- } else t27 = $[79];
1498
- let t28;
1499
- if ($[80] !== footer || $[81] !== setTheme || $[82] !== showThemeToggle || $[83] !== theme) {
1500
- t28 = footer ?? /* @__PURE__ */ jsx(UserFooter, {
1516
+ $[83] = beforeFooter;
1517
+ $[84] = collapsed;
1518
+ $[85] = t28;
1519
+ } else t28 = $[85];
1520
+ let t29;
1521
+ if ($[86] !== footer || $[87] !== setTheme || $[88] !== showThemeToggle || $[89] !== theme) {
1522
+ t29 = footer ?? /* @__PURE__ */ jsx(UserFooter, {
1501
1523
  theme,
1502
1524
  setTheme,
1503
1525
  showThemeToggle
1504
1526
  });
1505
- $[80] = footer;
1506
- $[81] = setTheme;
1507
- $[82] = showThemeToggle;
1508
- $[83] = theme;
1509
- $[84] = t28;
1510
- } else t28 = $[84];
1511
- let t29;
1512
- if ($[85] !== t18 || $[86] !== t22 || $[87] !== t23 || $[88] !== t24 || $[89] !== t26 || $[90] !== t27 || $[91] !== t28) {
1513
- t29 = /* @__PURE__ */ jsxs(Sidebar, {
1527
+ $[86] = footer;
1528
+ $[87] = setTheme;
1529
+ $[88] = showThemeToggle;
1530
+ $[89] = theme;
1531
+ $[90] = t29;
1532
+ } else t29 = $[90];
1533
+ let t30;
1534
+ if ($[91] !== t18 || $[92] !== t22 || $[93] !== t23 || $[94] !== t24 || $[95] !== t27 || $[96] !== t28 || $[97] !== t29) {
1535
+ t30 = /* @__PURE__ */ jsxs(Sidebar, {
1514
1536
  collapsible: "icon",
1515
1537
  variant: "inset",
1516
1538
  className: t18,
@@ -1518,21 +1540,21 @@ function AdminSidebar(t0) {
1518
1540
  t22,
1519
1541
  t23,
1520
1542
  t24,
1521
- t26,
1522
1543
  t27,
1523
- t28
1544
+ t28,
1545
+ t29
1524
1546
  ]
1525
1547
  });
1526
- $[85] = t18;
1527
- $[86] = t22;
1528
- $[87] = t23;
1529
- $[88] = t24;
1530
- $[89] = t26;
1531
- $[90] = t27;
1532
- $[91] = t28;
1533
- $[92] = t29;
1534
- } else t29 = $[92];
1535
- return t29;
1548
+ $[91] = t18;
1549
+ $[92] = t22;
1550
+ $[93] = t23;
1551
+ $[94] = t24;
1552
+ $[95] = t27;
1553
+ $[96] = t28;
1554
+ $[97] = t29;
1555
+ $[98] = t30;
1556
+ } else t30 = $[98];
1557
+ return t30;
1536
1558
  }
1537
1559
 
1538
1560
  //#endregion