@carlonicora/nextjs-jsonapi 1.131.0 → 1.131.2

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.
@@ -3481,7 +3481,7 @@ function SheetContent({
3481
3481
  ...props
3482
3482
  }) {
3483
3483
  return /* @__PURE__ */ jsxs20(SheetPortal, { children: [
3484
- /* @__PURE__ */ jsx36(SheetOverlay, {}),
3484
+ /* @__PURE__ */ jsx36(SheetOverlay, { forceRender: true }),
3485
3485
  /* @__PURE__ */ jsxs20(
3486
3486
  SheetPrimitive.Popup,
3487
3487
  {
@@ -7490,7 +7490,7 @@ import { Fragment as Fragment19, createContext as createContext12, useContext as
7490
7490
  import { useAtom } from "jotai";
7491
7491
  import { atomWithStorage } from "jotai/utils";
7492
7492
  import { usePathname } from "next/navigation";
7493
- import { createContext as createContext9, useCallback as useCallback11, useContext as useContext10, useEffect as useEffect9, useRef as useRef10, useState as useState10 } from "react";
7493
+ import { createContext as createContext9, useCallback as useCallback11, useContext as useContext10, useEffect as useEffect9, useMemo as useMemo9, useRef as useRef10, useState as useState10 } from "react";
7494
7494
 
7495
7495
  // src/contexts/SocketContext.tsx
7496
7496
  import { createContext as createContext8, useContext as useContext9 } from "react";
@@ -7557,11 +7557,23 @@ var CurrentUserProvider = /* @__PURE__ */ __name(({ children }) => {
7557
7557
  const descriptor = Object.getOwnPropertyDescriptor(Modules, matchedModuleKey);
7558
7558
  return descriptor?.get?.call(Modules);
7559
7559
  }, "matchUrlToModule");
7560
- const currentUser = dehydratedUser ? rehydrate(Modules.User, dehydratedUser) : null;
7561
- const company = currentUser?.company ?? null;
7560
+ const currentUser = useMemo9(
7561
+ () => dehydratedUser ? rehydrate(Modules.User, dehydratedUser) : null,
7562
+ [dehydratedUser]
7563
+ );
7564
+ const [tokenOverride, setTokenOverride] = useState10(null);
7565
+ const company = useMemo9(() => {
7566
+ const c = currentUser?.company ?? null;
7567
+ if (!c || !tokenOverride) return c;
7568
+ return Object.assign(Object.create(Object.getPrototypeOf(c)), c, {
7569
+ _availableMonthlyTokens: tokenOverride.availableMonthlyTokens,
7570
+ _availableExtraTokens: tokenOverride.availableExtraTokens
7571
+ });
7572
+ }, [currentUser, tokenOverride]);
7562
7573
  const setUser = /* @__PURE__ */ __name((user) => {
7563
7574
  if (user) setDehydratedUser(user.dehydrate());
7564
7575
  else setDehydratedUser(null);
7576
+ setTokenOverride(null);
7565
7577
  }, "setUser");
7566
7578
  const hasRole = /* @__PURE__ */ __name((roleId) => {
7567
7579
  if (!currentUser) return false;
@@ -7618,6 +7630,7 @@ var CurrentUserProvider = /* @__PURE__ */ __name(({ children }) => {
7618
7630
  });
7619
7631
  }
7620
7632
  setDehydratedUser(fullUser.dehydrate());
7633
+ setTokenOverride(null);
7621
7634
  }
7622
7635
  } catch (error) {
7623
7636
  console.error("Failed to refresh user data:", error);
@@ -7635,19 +7648,26 @@ var CurrentUserProvider = /* @__PURE__ */ __name(({ children }) => {
7635
7648
  if (!socket || !isConnected || !currentUser?.company?.id) {
7636
7649
  return;
7637
7650
  }
7638
- const handleCompanyUpdate = /* @__PURE__ */ __name((data) => {
7651
+ const handleTokensUpdated = /* @__PURE__ */ __name((data) => {
7652
+ if (data.companyId !== currentUser.company?.id) return;
7653
+ setTokenOverride({
7654
+ availableMonthlyTokens: data.availableMonthlyTokens,
7655
+ availableExtraTokens: data.availableExtraTokens
7656
+ });
7657
+ }, "handleTokensUpdated");
7658
+ const handleSubscriptionUpdated = /* @__PURE__ */ __name((data) => {
7639
7659
  if (data.companyId === currentUser.company?.id && !isRefreshingRef.current) {
7640
7660
  isRefreshingRef.current = true;
7641
7661
  refreshUserRef.current({ skipCookieUpdate: true }).finally(() => {
7642
7662
  isRefreshingRef.current = false;
7643
7663
  });
7644
7664
  }
7645
- }, "handleCompanyUpdate");
7646
- socket.on("company:tokens_updated", handleCompanyUpdate);
7647
- socket.on("company:subscription_updated", handleCompanyUpdate);
7665
+ }, "handleSubscriptionUpdated");
7666
+ socket.on("company:tokens_updated", handleTokensUpdated);
7667
+ socket.on("company:subscription_updated", handleSubscriptionUpdated);
7648
7668
  return () => {
7649
- socket.off("company:tokens_updated", handleCompanyUpdate);
7650
- socket.off("company:subscription_updated", handleCompanyUpdate);
7669
+ socket.off("company:tokens_updated", handleTokensUpdated);
7670
+ socket.off("company:subscription_updated", handleSubscriptionUpdated);
7651
7671
  };
7652
7672
  }, [socket, isConnected, currentUser?.company?.id]);
7653
7673
  return /* @__PURE__ */ jsx58(
@@ -7854,7 +7874,7 @@ __name(UserDeleter, "UserDeleter");
7854
7874
  // src/features/user/components/forms/UserEditor.tsx
7855
7875
  import { zodResolver } from "@hookform/resolvers/zod";
7856
7876
  import { useTranslations as useTranslations5 } from "next-intl";
7857
- import { useCallback as useCallback12, useEffect as useEffect12, useMemo as useMemo9, useState as useState13 } from "react";
7877
+ import { useCallback as useCallback12, useEffect as useEffect12, useMemo as useMemo10, useState as useState13 } from "react";
7858
7878
  import { useForm } from "react-hook-form";
7859
7879
  import { v4 } from "uuid";
7860
7880
  import { z } from "zod";
@@ -7918,7 +7938,7 @@ function UserEditorInternal({
7918
7938
  setContentType(null);
7919
7939
  }
7920
7940
  }, [file, company]);
7921
- const formSchema = useMemo9(
7941
+ const formSchema = useMemo10(
7922
7942
  () => z.object({
7923
7943
  id: z.uuidv4(),
7924
7944
  name: z.string().min(1, { message: t(`user.fields.name.error`) }),
@@ -8126,7 +8146,7 @@ __name(UserEditor, "UserEditor");
8126
8146
  import { useTranslations as useTranslations6 } from "next-intl";
8127
8147
 
8128
8148
  // src/components/forms/EntityMultiSelector.tsx
8129
- import { useCallback as useCallback13, useEffect as useEffect13, useMemo as useMemo10, useRef as useRef11, useState as useState14 } from "react";
8149
+ import { useCallback as useCallback13, useEffect as useEffect13, useMemo as useMemo11, useRef as useRef11, useState as useState14 } from "react";
8130
8150
  import { useWatch } from "react-hook-form";
8131
8151
  import { CheckIcon as CheckIcon8, ChevronDownIcon as ChevronDownIcon7, SearchIcon as SearchIcon2, XIcon as XIcon5 } from "lucide-react";
8132
8152
 
@@ -8217,7 +8237,7 @@ function EntityMultiSelector({
8217
8237
  return fn ? fn(entity) : { id: entity.id, name: getLabelRef.current(entity) };
8218
8238
  }, []);
8219
8239
  const selectedValues = useWatch({ control: form.control, name: id }) || [];
8220
- const selectedIds = useMemo10(() => new Set(selectedValues.map((v) => v.id)), [selectedValues]);
8240
+ const selectedIds = useMemo11(() => new Set(selectedValues.map((v) => v.id)), [selectedValues]);
8221
8241
  const data = useDataListRetriever({
8222
8242
  retriever: /* @__PURE__ */ __name((params) => retriever(params), "retriever"),
8223
8243
  retrieverParams,
@@ -8299,7 +8319,7 @@ function EntityMultiSelector({
8299
8319
  },
8300
8320
  [form, id, options]
8301
8321
  );
8302
- const sortedOptions = useMemo10(() => {
8322
+ const sortedOptions = useMemo11(() => {
8303
8323
  const filtered = searchTerm.trim() ? options.filter((o) => o.label.toLowerCase().includes(searchTerm.trim().toLowerCase())) : options;
8304
8324
  return [...filtered].sort((a, b) => {
8305
8325
  const aSelected = selectedIds.has(a.id) ? 0 : 1;
@@ -8307,7 +8327,7 @@ function EntityMultiSelector({
8307
8327
  return aSelected - bSelected;
8308
8328
  });
8309
8329
  }, [options, selectedIds, searchTerm]);
8310
- const triggerSummary = useMemo10(() => {
8330
+ const triggerSummary = useMemo11(() => {
8311
8331
  if (selectedValues.length === 0) return null;
8312
8332
  return selectedValues.map((v) => stableGetFormValueLabel(v)).join(", ");
8313
8333
  }, [selectedValues, stableGetFormValueLabel]);
@@ -9060,7 +9080,7 @@ __name(CurrencyInput, "CurrencyInput");
9060
9080
  // src/components/forms/DatePickerPopover.tsx
9061
9081
  import { isValid, parse } from "date-fns";
9062
9082
  import { Calendar as CalendarIcon, CircleXIcon } from "lucide-react";
9063
- import { useMemo as useMemo11, useState as useState20 } from "react";
9083
+ import { useMemo as useMemo12, useState as useState20 } from "react";
9064
9084
  import { jsx as jsx80, jsxs as jsxs46 } from "react/jsx-runtime";
9065
9085
  var DatePickerPopover = /* @__PURE__ */ __name(({
9066
9086
  children,
@@ -9074,12 +9094,12 @@ var DatePickerPopover = /* @__PURE__ */ __name(({
9074
9094
  const dateFnsLocale = useI18nDateFnsLocale();
9075
9095
  const [isOpen, setIsOpen] = useState20(false);
9076
9096
  const [displayMonth, setDisplayMonth] = useState20(() => value || /* @__PURE__ */ new Date());
9077
- const dateFormatter = useMemo11(
9097
+ const dateFormatter = useMemo12(
9078
9098
  () => new Intl.DateTimeFormat(locale, { day: "2-digit", month: "2-digit", year: "numeric" }),
9079
9099
  [locale]
9080
9100
  );
9081
9101
  const formatDate = /* @__PURE__ */ __name((date) => dateFormatter.format(date), "formatDate");
9082
- const datePlaceholder = useMemo11(() => {
9102
+ const datePlaceholder = useMemo12(() => {
9083
9103
  const parts = dateFormatter.formatToParts(new Date(2e3, 0, 1));
9084
9104
  return parts.map((part) => {
9085
9105
  if (part.type === "day") return "dd";
@@ -9088,7 +9108,7 @@ var DatePickerPopover = /* @__PURE__ */ __name(({
9088
9108
  return part.value;
9089
9109
  }).join("");
9090
9110
  }, [dateFormatter]);
9091
- const dateFormatPattern = useMemo11(() => {
9111
+ const dateFormatPattern = useMemo12(() => {
9092
9112
  const parts = dateFormatter.formatToParts(new Date(2e3, 0, 1));
9093
9113
  return parts.map((part) => {
9094
9114
  if (part.type === "day") return "dd";
@@ -9100,7 +9120,7 @@ var DatePickerPopover = /* @__PURE__ */ __name(({
9100
9120
  const [inputValue, setInputValue] = useState20(() => value ? formatDate(value) : "");
9101
9121
  const currentYear = (/* @__PURE__ */ new Date()).getFullYear();
9102
9122
  const yearOptions = Array.from({ length: currentYear - 1900 + 11 }, (_, i) => 1900 + i);
9103
- const monthNames = useMemo11(() => {
9123
+ const monthNames = useMemo12(() => {
9104
9124
  const formatter = new Intl.DateTimeFormat(locale, { month: "long" });
9105
9125
  return Array.from({ length: 12 }, (_, i) => {
9106
9126
  const monthName = formatter.format(new Date(2e3, i, 1));
@@ -9335,6 +9355,7 @@ import { PencilIcon as PencilIcon3 } from "lucide-react";
9335
9355
 
9336
9356
  // src/components/forms/useEditorDialog.ts
9337
9357
  import { useCallback as useCallback15, useEffect as useEffect16, useRef as useRef13, useState as useState22 } from "react";
9358
+ var openEditorStack = [];
9338
9359
  function useEditorDialog(isFormDirty, options) {
9339
9360
  const [open, setOpen] = useState22(false);
9340
9361
  const [showDiscardConfirm, setShowDiscardConfirm] = useState22(false);
@@ -9372,9 +9393,20 @@ function useEditorDialog(isFormDirty, options) {
9372
9393
  },
9373
9394
  [isFormDirty]
9374
9395
  );
9396
+ const dialogId = useRef13({});
9397
+ useEffect16(() => {
9398
+ if (!open) return;
9399
+ const id = dialogId.current;
9400
+ openEditorStack.push(id);
9401
+ return () => {
9402
+ const index = openEditorStack.lastIndexOf(id);
9403
+ if (index !== -1) openEditorStack.splice(index, 1);
9404
+ };
9405
+ }, [open]);
9375
9406
  useEffect16(() => {
9376
9407
  const handleKeyDown = /* @__PURE__ */ __name((event) => {
9377
9408
  if (event.key === "Escape" && open) {
9409
+ if (openEditorStack[openEditorStack.length - 1] !== dialogId.current) return;
9378
9410
  event.preventDefault();
9379
9411
  event.stopPropagation();
9380
9412
  handleOpenChange(false);
@@ -9745,7 +9777,7 @@ import {
9745
9777
  useCallback as useCallback18,
9746
9778
  useContext as useContext11,
9747
9779
  useEffect as useEffect19,
9748
- useMemo as useMemo12,
9780
+ useMemo as useMemo13,
9749
9781
  useRef as useRef16,
9750
9782
  useState as useState24
9751
9783
  } from "react";
@@ -9969,7 +10001,7 @@ var FileInput = forwardRef6(
9969
10001
  const t = useTranslations16();
9970
10002
  const rootProps = isLOF ? {} : dropzoneState.getRootProps();
9971
10003
  const { isDragActive: parentIsDragActive } = dropzoneState;
9972
- const acceptedLabels = useMemo12(() => {
10004
+ const acceptedLabels = useMemo13(() => {
9973
10005
  if (!accept) return null;
9974
10006
  const extensions = /* @__PURE__ */ new Set();
9975
10007
  let hasWildcardImages = false;
@@ -10038,7 +10070,7 @@ import { useRef as useRef17 } from "react";
10038
10070
  import dynamic from "next/dynamic";
10039
10071
  import React17 from "react";
10040
10072
  import { jsx as jsx85 } from "react/jsx-runtime";
10041
- var BlockNoteEditor = dynamic(() => import("./BlockNoteEditor-Q2GLKMFU.mjs"), {
10073
+ var BlockNoteEditor = dynamic(() => import("./BlockNoteEditor-F4AKH532.mjs"), {
10042
10074
  ssr: false
10043
10075
  });
10044
10076
  var BlockNoteEditorContainer = React17.memo(/* @__PURE__ */ __name(function EditorContainer(props) {
@@ -10156,7 +10188,7 @@ __name(FormCheckbox, "FormCheckbox");
10156
10188
  // src/components/forms/FormDate.tsx
10157
10189
  import { isValid as isValid2, parse as parse2 } from "date-fns";
10158
10190
  import { Calendar as CalendarIcon3, CircleXIcon as CircleXIcon2 } from "lucide-react";
10159
- import { useMemo as useMemo13, useState as useState25 } from "react";
10191
+ import { useMemo as useMemo14, useState as useState25 } from "react";
10160
10192
  import { jsx as jsx88, jsxs as jsxs52 } from "react/jsx-runtime";
10161
10193
  function FormDate({
10162
10194
  form,
@@ -10178,12 +10210,12 @@ function FormDate({
10178
10210
  const currentValue = form.getValues(id);
10179
10211
  return currentValue || defaultMonth || /* @__PURE__ */ new Date();
10180
10212
  });
10181
- const dateFormatter = useMemo13(
10213
+ const dateFormatter = useMemo14(
10182
10214
  () => new Intl.DateTimeFormat(locale, { day: "2-digit", month: "2-digit", year: "numeric" }),
10183
10215
  [locale]
10184
10216
  );
10185
10217
  const formatDate = /* @__PURE__ */ __name((date) => dateFormatter.format(date), "formatDate");
10186
- const datePlaceholder = useMemo13(() => {
10218
+ const datePlaceholder = useMemo14(() => {
10187
10219
  const parts = dateFormatter.formatToParts(new Date(2e3, 0, 1));
10188
10220
  return parts.map((part) => {
10189
10221
  if (part.type === "day") return "dd";
@@ -10192,7 +10224,7 @@ function FormDate({
10192
10224
  return part.value;
10193
10225
  }).join("");
10194
10226
  }, [dateFormatter]);
10195
- const dateFormatPattern = useMemo13(() => {
10227
+ const dateFormatPattern = useMemo14(() => {
10196
10228
  const parts = dateFormatter.formatToParts(new Date(2e3, 0, 1));
10197
10229
  return parts.map((part) => {
10198
10230
  if (part.type === "day") return "dd";
@@ -10297,7 +10329,7 @@ __name(FormDate, "FormDate");
10297
10329
 
10298
10330
  // src/components/forms/FormDateTime.tsx
10299
10331
  import { Calendar as CalendarIcon4, CircleXIcon as CircleXIcon3 } from "lucide-react";
10300
- import { useMemo as useMemo14, useState as useState26 } from "react";
10332
+ import { useMemo as useMemo15, useState as useState26 } from "react";
10301
10333
  import { jsx as jsx89, jsxs as jsxs53 } from "react/jsx-runtime";
10302
10334
  function FormDateTime({
10303
10335
  form,
@@ -10319,7 +10351,7 @@ function FormDateTime({
10319
10351
  const currentValue = form.getValues(id);
10320
10352
  return currentValue || defaultMonth || /* @__PURE__ */ new Date();
10321
10353
  });
10322
- const dateTimeFormatter = useMemo14(
10354
+ const dateTimeFormatter = useMemo15(
10323
10355
  () => new Intl.DateTimeFormat(locale, {
10324
10356
  year: "numeric",
10325
10357
  month: "long",
@@ -11219,12 +11251,12 @@ var useUserSearch = /* @__PURE__ */ __name(() => {
11219
11251
 
11220
11252
  // src/features/user/hooks/useUserTableStructure.tsx
11221
11253
  import { useTranslations as useTranslations19 } from "next-intl";
11222
- import { useMemo as useMemo15 } from "react";
11254
+ import { useMemo as useMemo16 } from "react";
11223
11255
  import { Fragment as Fragment11, jsx as jsx103, jsxs as jsxs64 } from "react/jsx-runtime";
11224
11256
  var useUserTableStructure = /* @__PURE__ */ __name((params) => {
11225
11257
  const t = useTranslations19();
11226
11258
  const generateUrl = usePageUrlGenerator();
11227
- const tableData = useMemo15(() => {
11259
+ const tableData = useMemo16(() => {
11228
11260
  return params.data.map((user) => {
11229
11261
  const entry = {
11230
11262
  jsonApiData: user
@@ -11309,10 +11341,10 @@ var useUserTableStructure = /* @__PURE__ */ __name((params) => {
11309
11341
  title: t(`common.date.create`)
11310
11342
  })
11311
11343
  };
11312
- const columns = useMemo15(() => {
11344
+ const columns = useMemo16(() => {
11313
11345
  return params.fields.map((field) => fieldColumnMap[field]?.()).filter((col) => col !== void 0);
11314
11346
  }, [params.fields, fieldColumnMap, t, generateUrl]);
11315
- return useMemo15(() => ({ data: tableData, columns }), [tableData, columns]);
11347
+ return useMemo16(() => ({ data: tableData, columns }), [tableData, columns]);
11316
11348
  }, "useUserTableStructure");
11317
11349
 
11318
11350
  // src/features/user/components/widgets/UserSearchPopover.tsx
@@ -12396,7 +12428,7 @@ import { zodResolver as zodResolver3 } from "@hookform/resolvers/zod";
12396
12428
  import { UploadIcon as UploadIcon3 } from "lucide-react";
12397
12429
  import { useTranslations as useTranslations37 } from "next-intl";
12398
12430
  import Image6 from "next/image";
12399
- import { useCallback as useCallback21, useEffect as useEffect26, useMemo as useMemo16, useRef as useRef21, useState as useState35 } from "react";
12431
+ import { useCallback as useCallback21, useEffect as useEffect26, useMemo as useMemo17, useRef as useRef21, useState as useState35 } from "react";
12400
12432
  import { useForm as useForm3 } from "react-hook-form";
12401
12433
  import { v4 as v42 } from "uuid";
12402
12434
  import { z as z2 } from "zod";
@@ -12465,7 +12497,7 @@ function CompanyEditorInternal({
12465
12497
  setContentType(null);
12466
12498
  }
12467
12499
  }, [file]);
12468
- const formSchema = useMemo16(
12500
+ const formSchema = useMemo17(
12469
12501
  () => z2.object({
12470
12502
  id: z2.uuidv4(),
12471
12503
  name: z2.string().min(1, {
@@ -13209,7 +13241,7 @@ __name(HowToDeleter, "HowToDeleter");
13209
13241
  import { zodResolver as zodResolver4 } from "@hookform/resolvers/zod";
13210
13242
  import { PlusIcon, SearchIcon as SearchIcon6, XIcon as XIcon10 } from "lucide-react";
13211
13243
  import { useTranslations as useTranslations45 } from "next-intl";
13212
- import { useCallback as useCallback24, useEffect as useEffect30, useMemo as useMemo17, useRef as useRef24, useState as useState41 } from "react";
13244
+ import { useCallback as useCallback24, useEffect as useEffect30, useMemo as useMemo18, useRef as useRef24, useState as useState41 } from "react";
13213
13245
  import { useForm as useForm4 } from "react-hook-form";
13214
13246
  import { v4 as v43 } from "uuid";
13215
13247
  import { z as z3 } from "zod";
@@ -13261,7 +13293,7 @@ function PageSelector({
13261
13293
  const [open, setOpen] = useState41(false);
13262
13294
  const [search, setSearch] = useState41("");
13263
13295
  const selectedLabel = value ? allPageUrls.find((opt) => opt.id === value) : void 0;
13264
- const filteredOptions = useMemo17(() => {
13296
+ const filteredOptions = useMemo18(() => {
13265
13297
  const available = allPageUrls.filter((opt) => opt.id === value || !selectedPages.includes(opt.id));
13266
13298
  if (!search) return available;
13267
13299
  const term = search.toLowerCase();
@@ -13328,7 +13360,7 @@ function HowToEditorInternal({
13328
13360
  }) {
13329
13361
  const router = useI18nRouter();
13330
13362
  const t = useTranslations45();
13331
- const formSchema = useMemo17(
13363
+ const formSchema = useMemo18(
13332
13364
  () => z3.object({
13333
13365
  id: z3.string().uuid(),
13334
13366
  name: z3.string().min(1, { message: t(`howto.fields.name.error`) }),
@@ -13390,7 +13422,7 @@ function HowToEditorInternal({
13390
13422
  },
13391
13423
  [form]
13392
13424
  );
13393
- const allPageUrls = useMemo17(() => ModuleRegistry.getAllPageUrls(), []);
13425
+ const allPageUrls = useMemo18(() => ModuleRegistry.getAllPageUrls(), []);
13394
13426
  const pages = form.watch("pages");
13395
13427
  const addPage = /* @__PURE__ */ __name(() => {
13396
13428
  form.setValue("pages", [...pages, ""], { shouldDirty: true });
@@ -13637,7 +13669,7 @@ var useHowToContext = /* @__PURE__ */ __name(() => {
13637
13669
  // src/features/rbac/contexts/RbacContext.tsx
13638
13670
  import { DownloadIcon, Loader2Icon as Loader2Icon3 } from "lucide-react";
13639
13671
  import { useTranslations as useTranslations47 } from "next-intl";
13640
- import { createContext as createContext18, useCallback as useCallback25, useContext as useContext19, useEffect as useEffect31, useMemo as useMemo18, useState as useState43 } from "react";
13672
+ import { createContext as createContext18, useCallback as useCallback25, useContext as useContext19, useEffect as useEffect31, useMemo as useMemo19, useState as useState43 } from "react";
13641
13673
  import { jsx as jsx145, jsxs as jsxs84 } from "react/jsx-runtime";
13642
13674
  var DEFAULT_OUTPUT_PATH = "apps/api/src/rbac/permissions.ts";
13643
13675
  function upsertToken(tokens, action, scope) {
@@ -13746,7 +13778,7 @@ var RbacProvider = /* @__PURE__ */ __name(({
13746
13778
  if (functions.length > 0) response.functions = functions;
13747
13779
  return response;
13748
13780
  }, "title");
13749
- const contextValue = useMemo18(
13781
+ const contextValue = useMemo19(
13750
13782
  () => ({
13751
13783
  matrix,
13752
13784
  modulePaths,
@@ -13772,7 +13804,7 @@ var useRbacContext = /* @__PURE__ */ __name(() => {
13772
13804
 
13773
13805
  // src/features/assistant/contexts/AssistantContext.tsx
13774
13806
  import { useTranslations as useTranslations48 } from "next-intl";
13775
- import { createContext as createContext19, useCallback as useCallback26, useContext as useContext20, useEffect as useEffect32, useMemo as useMemo19, useState as useState44 } from "react";
13807
+ import { createContext as createContext19, useCallback as useCallback26, useContext as useContext20, useEffect as useEffect32, useMemo as useMemo20, useState as useState44 } from "react";
13776
13808
  import { jsx as jsx146 } from "react/jsx-runtime";
13777
13809
  var AssistantContext = createContext19(void 0);
13778
13810
  function stripOptimistic(list) {
@@ -13943,7 +13975,7 @@ function AssistantProvider({ children, dehydratedAssistant, dehydratedMessages,
13943
13975
  cancelled = true;
13944
13976
  };
13945
13977
  }, []);
13946
- const value = useMemo19(
13978
+ const value = useMemo20(
13947
13979
  () => ({
13948
13980
  assistant,
13949
13981
  messages,
@@ -14670,7 +14702,7 @@ __name(RoundPageContainerTitle, "RoundPageContainerTitle");
14670
14702
 
14671
14703
  // src/components/containers/RoundPageContainer.tsx
14672
14704
  import { useSearchParams } from "next/navigation";
14673
- import { Fragment as Fragment22, useCallback as useCallback27, useEffect as useEffect40, useMemo as useMemo20, useState as useState50 } from "react";
14705
+ import { Fragment as Fragment22, useCallback as useCallback27, useEffect as useEffect40, useMemo as useMemo21, useState as useState50 } from "react";
14674
14706
  import { Fragment as Fragment23, jsx as jsx157, jsxs as jsxs93 } from "react/jsx-runtime";
14675
14707
  var DETAILS_COOKIE_NAME = "round_page_details_state";
14676
14708
  var DETAILS_COOKIE_MAX_AGE = 60 * 60 * 24 * 7;
@@ -14736,7 +14768,7 @@ function RoundPageContainer({
14736
14768
  [module, id, rewriteUrl, onSectionChange]
14737
14769
  );
14738
14770
  const activeFillHeight = tabs?.find((t) => tabValue(t) === activeTab)?.fillHeight === true;
14739
- const { ungrouped, groups } = useMemo20(() => partitionTabs(tabs ?? []), [tabs]);
14771
+ const { ungrouped, groups } = useMemo21(() => partitionTabs(tabs ?? []), [tabs]);
14740
14772
  const isReady = mounted && isMobile !== void 0;
14741
14773
  if (!isReady) {
14742
14774
  return /* @__PURE__ */ jsxs93(Fragment23, { children: [
@@ -15160,7 +15192,7 @@ var createMentionInlineContentSpec = /* @__PURE__ */ __name((resolveFn, disableM
15160
15192
  // src/components/editors/BlockNoteEditorSuggestionMenuController.tsx
15161
15193
  import { SuggestionMenuController } from "@blocknote/react";
15162
15194
  import { autoUpdate, flip, shift } from "@floating-ui/react";
15163
- import React25, { useCallback as useCallback29, useMemo as useMemo21 } from "react";
15195
+ import React25, { useCallback as useCallback29, useMemo as useMemo22 } from "react";
15164
15196
  import { jsx as jsx162 } from "react/jsx-runtime";
15165
15197
  var MentionInsertContext = React25.createContext(null);
15166
15198
  var useMentionInsert = /* @__PURE__ */ __name(() => React25.useContext(MentionInsertContext), "useMentionInsert");
@@ -15212,7 +15244,7 @@ function BlockNoteEditorMentionSuggestionMenu({
15212
15244
  },
15213
15245
  [editor, mentionSearchFn, mentionSearchParams]
15214
15246
  );
15215
- const wrappedSuggestionMenuComponent = useMemo21(() => {
15247
+ const wrappedSuggestionMenuComponent = useMemo22(() => {
15216
15248
  if (!suggestionMenuComponent) return void 0;
15217
15249
  const Component2 = suggestionMenuComponent;
15218
15250
  const Wrapped = /* @__PURE__ */ __name((props) => {
@@ -15459,7 +15491,7 @@ var cellUrl = /* @__PURE__ */ __name((params) => {
15459
15491
  }, "cellUrl");
15460
15492
 
15461
15493
  // src/client/context/JsonApiProvider.tsx
15462
- import { useEffect as useEffect44, useMemo as useMemo22 } from "react";
15494
+ import { useEffect as useEffect44, useMemo as useMemo23 } from "react";
15463
15495
  import { jsx as jsx171 } from "react/jsx-runtime";
15464
15496
  function JsonApiProvider({ config, children }) {
15465
15497
  useEffect44(() => {
@@ -15467,7 +15499,7 @@ function JsonApiProvider({ config, children }) {
15467
15499
  config.bootstrapper();
15468
15500
  }
15469
15501
  }, [config.bootstrapper]);
15470
- const memoizedConfig = useMemo22(() => config, [config]);
15502
+ const memoizedConfig = useMemo23(() => config, [config]);
15471
15503
  return /* @__PURE__ */ jsx171(JsonApiContext.Provider, { value: memoizedConfig, children });
15472
15504
  }
15473
15505
  __name(JsonApiProvider, "JsonApiProvider");
@@ -15673,16 +15705,16 @@ function useJsonApiMutation(config) {
15673
15705
  __name(useJsonApiMutation, "useJsonApiMutation");
15674
15706
 
15675
15707
  // src/client/hooks/useRehydration.ts
15676
- import { useMemo as useMemo23 } from "react";
15708
+ import { useMemo as useMemo24 } from "react";
15677
15709
  function useRehydration(classKey, data) {
15678
- return useMemo23(() => {
15710
+ return useMemo24(() => {
15679
15711
  if (!data) return null;
15680
15712
  return RehydrationFactory.rehydrate(classKey, data);
15681
15713
  }, [classKey, data]);
15682
15714
  }
15683
15715
  __name(useRehydration, "useRehydration");
15684
15716
  function useRehydrationList(classKey, data) {
15685
- return useMemo23(() => {
15717
+ return useMemo24(() => {
15686
15718
  if (!data || data.length === 0) return [];
15687
15719
  return RehydrationFactory.rehydrateList(classKey, data);
15688
15720
  }, [classKey, data]);
@@ -15691,13 +15723,13 @@ __name(useRehydrationList, "useRehydrationList");
15691
15723
 
15692
15724
  // src/features/company/hooks/useCompanyTableStructure.tsx
15693
15725
  import { useTranslations as useTranslations54 } from "next-intl";
15694
- import { useMemo as useMemo24 } from "react";
15726
+ import { useMemo as useMemo25 } from "react";
15695
15727
  import { jsx as jsx172 } from "react/jsx-runtime";
15696
15728
  var useCompanyTableStructure = /* @__PURE__ */ __name((params) => {
15697
15729
  const t = useTranslations54();
15698
15730
  const generateUrl = usePageUrlGenerator();
15699
15731
  const { hasRole } = useCurrentUserContext();
15700
- const tableData = useMemo24(() => {
15732
+ const tableData = useMemo25(() => {
15701
15733
  return params.data.map((company) => {
15702
15734
  const entry = {
15703
15735
  jsonApiData: company
@@ -15741,14 +15773,14 @@ var useCompanyTableStructure = /* @__PURE__ */ __name((params) => {
15741
15773
  title: t(`common.date.create`)
15742
15774
  })
15743
15775
  };
15744
- const columns = useMemo24(() => {
15776
+ const columns = useMemo25(() => {
15745
15777
  return params.fields.map((field) => fieldColumnMap[field]?.()).filter((col) => col !== void 0);
15746
15778
  }, [params.fields, fieldColumnMap, t, generateUrl, hasRole]);
15747
- return useMemo24(() => ({ data: tableData, columns }), [tableData, columns]);
15779
+ return useMemo25(() => ({ data: tableData, columns }), [tableData, columns]);
15748
15780
  }, "useCompanyTableStructure");
15749
15781
 
15750
15782
  // src/features/company/hooks/useSubscriptionStatus.ts
15751
- import { useMemo as useMemo25 } from "react";
15783
+ import { useMemo as useMemo26 } from "react";
15752
15784
  var TRIAL_DAYS = 14;
15753
15785
  var GRACE_DAYS = 3;
15754
15786
  var isAdministrator = /* @__PURE__ */ __name((currentUser) => {
@@ -15758,7 +15790,7 @@ var isAdministrator = /* @__PURE__ */ __name((currentUser) => {
15758
15790
  }, "isAdministrator");
15759
15791
  function useSubscriptionStatus() {
15760
15792
  const { company, currentUser } = useCurrentUserContext();
15761
- return useMemo25(() => {
15793
+ return useMemo26(() => {
15762
15794
  if (currentUser === null) {
15763
15795
  return {
15764
15796
  status: "loading",
@@ -15823,12 +15855,12 @@ __name(useSubscriptionStatus, "useSubscriptionStatus");
15823
15855
 
15824
15856
  // src/features/role/hooks/useRoleTableStructure.tsx
15825
15857
  import { useTranslations as useTranslations55 } from "next-intl";
15826
- import { useMemo as useMemo26 } from "react";
15858
+ import { useMemo as useMemo27 } from "react";
15827
15859
  import { Fragment as Fragment25, jsx as jsx173 } from "react/jsx-runtime";
15828
15860
  var useRoleTableStructure = /* @__PURE__ */ __name((params) => {
15829
15861
  const t = useTranslations55();
15830
15862
  const generateUrl = usePageUrlGenerator();
15831
- const tableData = useMemo26(() => {
15863
+ const tableData = useMemo27(() => {
15832
15864
  return params.data.map((role) => {
15833
15865
  const entry = {
15834
15866
  jsonApiData: role
@@ -15870,20 +15902,20 @@ var useRoleTableStructure = /* @__PURE__ */ __name((params) => {
15870
15902
  title: t(`common.date.create`)
15871
15903
  })
15872
15904
  };
15873
- const columns = useMemo26(() => {
15905
+ const columns = useMemo27(() => {
15874
15906
  return params.fields.map((field) => fieldColumnMap[field]?.()).filter((col) => col !== void 0);
15875
15907
  }, [params.fields, fieldColumnMap, t, generateUrl]);
15876
- return useMemo26(() => ({ data: tableData, columns }), [tableData, columns]);
15908
+ return useMemo27(() => ({ data: tableData, columns }), [tableData, columns]);
15877
15909
  }, "useRoleTableStructure");
15878
15910
 
15879
15911
  // src/features/content/hooks/useContentTableStructure.tsx
15880
15912
  import { useTranslations as useTranslations56 } from "next-intl";
15881
- import { useMemo as useMemo27 } from "react";
15913
+ import { useMemo as useMemo28 } from "react";
15882
15914
  import { Fragment as Fragment26, jsx as jsx174, jsxs as jsxs99 } from "react/jsx-runtime";
15883
15915
  var useContentTableStructure = /* @__PURE__ */ __name((params) => {
15884
15916
  const t = useTranslations56();
15885
15917
  const generateUrl = usePageUrlGenerator();
15886
- const tableData = useMemo27(() => {
15918
+ const tableData = useMemo28(() => {
15887
15919
  return params.data.map((content) => {
15888
15920
  const entry = {
15889
15921
  jsonApiData: content
@@ -15968,7 +16000,7 @@ var useContentTableStructure = /* @__PURE__ */ __name((params) => {
15968
16000
  title: t(`common.date.update`)
15969
16001
  })
15970
16002
  };
15971
- const columns = useMemo27(() => {
16003
+ const columns = useMemo28(() => {
15972
16004
  return params.fields.map((field) => {
15973
16005
  const localHandler = fieldColumnMap[field];
15974
16006
  if (localHandler) return localHandler();
@@ -15977,7 +16009,7 @@ var useContentTableStructure = /* @__PURE__ */ __name((params) => {
15977
16009
  return void 0;
15978
16010
  }).filter((col) => col !== void 0);
15979
16011
  }, [params.fields, fieldColumnMap, t, generateUrl, params.context?.customCells]);
15980
- return useMemo27(() => ({ data: tableData, columns }), [tableData, columns]);
16012
+ return useMemo28(() => ({ data: tableData, columns }), [tableData, columns]);
15981
16013
  }, "useContentTableStructure");
15982
16014
 
15983
16015
  // src/features/oauth/hooks/useOAuthClients.ts
@@ -16277,7 +16309,7 @@ registerTableGenerator("companies", useCompanyTableStructure);
16277
16309
  import { flexRender, getCoreRowModel, getExpandedRowModel, useReactTable } from "@tanstack/react-table";
16278
16310
  import { ChevronLeft, ChevronRight } from "lucide-react";
16279
16311
  import { useTranslations as useTranslations58 } from "next-intl";
16280
- import React28, { memo, useMemo as useMemo28, useState as useState59 } from "react";
16312
+ import React28, { memo, useMemo as useMemo29, useState as useState59 } from "react";
16281
16313
 
16282
16314
  // src/components/tables/ContentTableSearch.tsx
16283
16315
  import { RefreshCw, Search, X as X3 } from "lucide-react";
@@ -16399,7 +16431,7 @@ var ContentListTable = memo(/* @__PURE__ */ __name(function ContentListTable2(pr
16399
16431
  dataRetriever: data,
16400
16432
  context: props.context
16401
16433
  });
16402
- const columnVisibility = useMemo28(
16434
+ const columnVisibility = useMemo29(
16403
16435
  () => fields.reduce(
16404
16436
  (acc, columnId) => {
16405
16437
  acc[columnId] = true;
@@ -16424,7 +16456,7 @@ var ContentListTable = memo(/* @__PURE__ */ __name(function ContentListTable2(pr
16424
16456
  }
16425
16457
  });
16426
16458
  const rowModel = tableData ? table.getRowModel() : null;
16427
- const groupedRows = useMemo28(() => {
16459
+ const groupedRows = useMemo29(() => {
16428
16460
  if (!props.groupBy || !rowModel?.rows?.length) return null;
16429
16461
  const groupMap = /* @__PURE__ */ new Map();
16430
16462
  for (const row of rowModel.rows) {
@@ -16852,7 +16884,7 @@ __name(EntitySection, "EntitySection");
16852
16884
  import Image8 from "next/image";
16853
16885
 
16854
16886
  // src/features/auth/contexts/AuthContext.tsx
16855
- import { createContext as createContext21, useContext as useContext22, useMemo as useMemo29, useState as useState62 } from "react";
16887
+ import { createContext as createContext21, useContext as useContext22, useMemo as useMemo30, useState as useState62 } from "react";
16856
16888
 
16857
16889
  // src/features/auth/components/forms/Register.tsx
16858
16890
  import { zodResolver as zodResolver5 } from "@hookform/resolvers/zod";
@@ -17211,7 +17243,7 @@ var AuthContextProvider = /* @__PURE__ */ __name(({
17211
17243
  const [componentType, setComponentType] = useState62(initialComponentType);
17212
17244
  const [params, setParams] = useState62(initialParams);
17213
17245
  const [pendingTwoFactor, setPendingTwoFactor] = useState62();
17214
- const activeComponent = useMemo29(() => {
17246
+ const activeComponent = useMemo30(() => {
17215
17247
  if (componentType === void 0) return null;
17216
17248
  switch (componentType) {
17217
17249
  case 0 /* Login */:
@@ -18876,12 +18908,12 @@ __name(RelevantContentsList, "RelevantContentsList");
18876
18908
  // src/features/how-to/components/containers/HowToCommand.tsx
18877
18909
  import { ArrowRight, LifeBuoyIcon } from "lucide-react";
18878
18910
  import { useTranslations as useTranslations81 } from "next-intl";
18879
- import { useCallback as useCallback38, useEffect as useEffect61, useMemo as useMemo31, useRef as useRef34, useState as useState79 } from "react";
18911
+ import { useCallback as useCallback38, useEffect as useEffect61, useMemo as useMemo32, useRef as useRef34, useState as useState79 } from "react";
18880
18912
 
18881
18913
  // src/features/how-to/components/containers/HowToCommandViewer.tsx
18882
18914
  import { ArrowLeft, BookOpen, MessageSquare } from "lucide-react";
18883
18915
  import { useTranslations as useTranslations80 } from "next-intl";
18884
- import { useMemo as useMemo30 } from "react";
18916
+ import { useMemo as useMemo31 } from "react";
18885
18917
 
18886
18918
  // src/features/how-to/utils/blocknote.ts
18887
18919
  function extractTextFromContent(content) {
@@ -18953,8 +18985,8 @@ __name(extractHeadings, "extractHeadings");
18953
18985
  import { jsx as jsx210, jsxs as jsxs126 } from "react/jsx-runtime";
18954
18986
  function HowToCommandViewer({ howTo, onBack, onStartChat }) {
18955
18987
  const t = useTranslations80();
18956
- const readingTime = useMemo30(() => calculateReadingTime(howTo.description), [howTo.description]);
18957
- const headings = useMemo30(() => extractHeadings(howTo.description), [howTo.description]);
18988
+ const readingTime = useMemo31(() => calculateReadingTime(howTo.description), [howTo.description]);
18989
+ const headings = useMemo31(() => extractHeadings(howTo.description), [howTo.description]);
18958
18990
  return /* @__PURE__ */ jsxs126("div", { className: "flex h-full flex-col", children: [
18959
18991
  /* @__PURE__ */ jsxs126("div", { className: "flex items-center gap-3 border-b px-4 py-3", children: [
18960
18992
  /* @__PURE__ */ jsxs126(Button, { variant: "ghost", size: "sm", onClick: onBack, className: "h-8 px-2", children: [
@@ -19013,7 +19045,7 @@ function HowToCommand({ pathname, extraGroups, onStartChat }) {
19013
19045
  retrieverParams: {},
19014
19046
  module: Modules.HowTo
19015
19047
  });
19016
- const { relevantHowTos, otherHowTos } = useMemo31(() => {
19048
+ const { relevantHowTos, otherHowTos } = useMemo32(() => {
19017
19049
  if (!data.data) return { relevantHowTos: [], otherHowTos: [] };
19018
19050
  const relevant = [];
19019
19051
  const other = [];
@@ -19210,12 +19242,12 @@ import { useTranslations as useTranslations84 } from "next-intl";
19210
19242
 
19211
19243
  // src/features/how-to/hooks/useHowToTableStructure.tsx
19212
19244
  import { useTranslations as useTranslations83 } from "next-intl";
19213
- import { useMemo as useMemo32 } from "react";
19245
+ import { useMemo as useMemo33 } from "react";
19214
19246
  import { Fragment as Fragment42, jsx as jsx215 } from "react/jsx-runtime";
19215
19247
  var useHowToTableStructure = /* @__PURE__ */ __name((params) => {
19216
19248
  const t = useTranslations83();
19217
19249
  const generateUrl = usePageUrlGenerator();
19218
- const tableData = useMemo32(() => {
19250
+ const tableData = useMemo33(() => {
19219
19251
  return params.data.map((howTo) => {
19220
19252
  const entry = {
19221
19253
  jsonApiData: howTo
@@ -19269,10 +19301,10 @@ var useHowToTableStructure = /* @__PURE__ */ __name((params) => {
19269
19301
  title: t(`common.date.update`)
19270
19302
  })
19271
19303
  };
19272
- const columns = useMemo32(() => {
19304
+ const columns = useMemo33(() => {
19273
19305
  return params.fields.map((field) => fieldColumnMap[field]?.()).filter((col) => col !== void 0);
19274
19306
  }, [params.fields, fieldColumnMap, t, generateUrl]);
19275
- return useMemo32(() => ({ data: tableData, columns }), [tableData, columns]);
19307
+ return useMemo33(() => ({ data: tableData, columns }), [tableData, columns]);
19276
19308
  }, "useHowToTableStructure");
19277
19309
  registerTableGenerator("howtos", useHowToTableStructure);
19278
19310
 
@@ -19641,10 +19673,10 @@ import ReactMarkdown3 from "react-markdown";
19641
19673
  import remarkGfm3 from "remark-gfm";
19642
19674
 
19643
19675
  // src/features/assistant-message/components/parts/MessageSourcesContainer.tsx
19644
- import { useEffect as useEffect63, useMemo as useMemo34, useState as useState86 } from "react";
19676
+ import { useEffect as useEffect63, useMemo as useMemo35, useState as useState86 } from "react";
19645
19677
 
19646
19678
  // src/features/assistant-message/components/parts/MessageSourcesPanel.tsx
19647
- import { useMemo as useMemo33, useState as useState85 } from "react";
19679
+ import { useMemo as useMemo34, useState as useState85 } from "react";
19648
19680
  import { useTranslations as useTranslations94 } from "next-intl";
19649
19681
  import { ChevronDown as ChevronDown4, ChevronRight as ChevronRight2 } from "lucide-react";
19650
19682
 
@@ -19937,7 +19969,7 @@ __name(SuggestedQuestionsTab, "SuggestedQuestionsTab");
19937
19969
  import { jsx as jsx229, jsxs as jsxs139 } from "react/jsx-runtime";
19938
19970
  function MessageSourcesPanel({ message, isLatestAssistant, onSelectFollowUp, sources, users }) {
19939
19971
  const t = useTranslations94();
19940
- const visibleReferences = useMemo33(
19972
+ const visibleReferences = useMemo34(
19941
19973
  () => message.references.filter((ref) => {
19942
19974
  try {
19943
19975
  return !!ModuleRegistry.findByName(ref.type).pageUrl;
@@ -19950,7 +19982,7 @@ function MessageSourcesPanel({ message, isLatestAssistant, onSelectFollowUp, sou
19950
19982
  const refsCount = visibleReferences.length;
19951
19983
  const citationsCount = message.citations.length;
19952
19984
  const suggestionsCount = isLatestAssistant ? message.suggestedQuestions.length : 0;
19953
- const contentsCount = useMemo33(() => {
19985
+ const contentsCount = useMemo34(() => {
19954
19986
  const ids = /* @__PURE__ */ new Set();
19955
19987
  for (const c of message.citations) {
19956
19988
  if (!c.nodeId) continue;
@@ -20029,7 +20061,7 @@ var SourcesFetcher = class extends ClientAbstractService {
20029
20061
  }
20030
20062
  };
20031
20063
  function MessageSourcesContainer({ message, isLatestAssistant, onSelectFollowUp }) {
20032
- const groups = useMemo34(() => {
20064
+ const groups = useMemo35(() => {
20033
20065
  const map = /* @__PURE__ */ new Map();
20034
20066
  for (const chunk of message.citations) {
20035
20067
  if (!chunk.nodeType || !chunk.nodeId) continue;
@@ -20042,7 +20074,7 @@ function MessageSourcesContainer({ message, isLatestAssistant, onSelectFollowUp
20042
20074
  }
20043
20075
  return map;
20044
20076
  }, [message.citations]);
20045
- const groupsKey = useMemo34(() => {
20077
+ const groupsKey = useMemo35(() => {
20046
20078
  const parts = [];
20047
20079
  for (const [nodeType, ids] of groups) {
20048
20080
  parts.push(`${nodeType}:${Array.from(ids).sort().join(",")}`);
@@ -20084,12 +20116,12 @@ function MessageSourcesContainer({ message, isLatestAssistant, onSelectFollowUp
20084
20116
  cancelled = true;
20085
20117
  };
20086
20118
  }, [groupsKey, groups]);
20087
- const sources = useMemo34(() => {
20119
+ const sources = useMemo35(() => {
20088
20120
  const map = /* @__PURE__ */ new Map();
20089
20121
  for (const entity of resolved) map.set(entity.id, entity);
20090
20122
  return map;
20091
20123
  }, [resolved]);
20092
- const users = useMemo34(() => {
20124
+ const users = useMemo35(() => {
20093
20125
  const userMap = /* @__PURE__ */ new Map();
20094
20126
  for (const entity of resolved) {
20095
20127
  const author = entity._author ?? (() => {
@@ -20412,7 +20444,7 @@ __name(NotificationsListContainer, "NotificationsListContainer");
20412
20444
  // src/features/notification/components/modals/NotificationModal.tsx
20413
20445
  import { BellIcon } from "lucide-react";
20414
20446
  import { useTranslations as useTranslations99 } from "next-intl";
20415
- import { Fragment as Fragment48, useCallback as useCallback40, useEffect as useEffect65, useMemo as useMemo35, useRef as useRef37, useState as useState87 } from "react";
20447
+ import { Fragment as Fragment48, useCallback as useCallback40, useEffect as useEffect65, useMemo as useMemo36, useRef as useRef37, useState as useState87 } from "react";
20416
20448
  import { jsx as jsx239, jsxs as jsxs147 } from "react/jsx-runtime";
20417
20449
  function NotificationModalContent({ isOpen, setIsOpen }) {
20418
20450
  const _instanceId = useRef37(Math.random().toString(36).substr(2, 9));
@@ -20456,7 +20488,7 @@ function NotificationModalContent({ isOpen, setIsOpen }) {
20456
20488
  }
20457
20489
  return !breaker.isOpen;
20458
20490
  }, []);
20459
- const { unreadCount, unreadIds } = useMemo35(() => {
20491
+ const { unreadCount, unreadIds } = useMemo36(() => {
20460
20492
  const unreadNotifications2 = notifications.filter((notif) => !notif.isRead);
20461
20493
  return {
20462
20494
  unreadCount: unreadNotifications2.length,
@@ -22445,7 +22477,7 @@ __name(WaitlistList, "WaitlistList");
22445
22477
  // src/features/rbac/components/RbacContainer.tsx
22446
22478
  import { Loader2Icon as Loader2Icon4 } from "lucide-react";
22447
22479
  import { useTranslations as useTranslations112 } from "next-intl";
22448
- import { memo as memo2, useCallback as useCallback50, useEffect as useEffect73, useMemo as useMemo36, useRef as useRef40, useState as useState100 } from "react";
22480
+ import { memo as memo2, useCallback as useCallback50, useEffect as useEffect73, useMemo as useMemo37, useRef as useRef40, useState as useState100 } from "react";
22449
22481
 
22450
22482
  // src/features/rbac/components/RbacPermissionCell.tsx
22451
22483
  import { CheckIcon as CheckIcon9, MinusIcon as MinusIcon2, XIcon as XIcon12 } from "lucide-react";
@@ -22800,11 +22832,11 @@ function RbacContainer() {
22800
22832
  setSelectedModuleId(id);
22801
22833
  setActivePicker(null);
22802
22834
  }, []);
22803
- const sortedModuleIds = useMemo36(() => {
22835
+ const sortedModuleIds = useMemo37(() => {
22804
22836
  if (!matrix) return [];
22805
22837
  return Object.keys(matrix).sort((a, b) => (moduleNames?.[a] ?? a).localeCompare(moduleNames?.[b] ?? b));
22806
22838
  }, [matrix, moduleNames]);
22807
- const roleIds = useMemo36(() => {
22839
+ const roleIds = useMemo37(() => {
22808
22840
  if (roleNames) {
22809
22841
  return Object.keys(roleNames).sort((a, b) => (roleNames[a] ?? a).localeCompare(roleNames[b] ?? b));
22810
22842
  }
@@ -22822,14 +22854,14 @@ function RbacContainer() {
22822
22854
  setSelectedModuleId(sortedModuleIds[0]);
22823
22855
  }
22824
22856
  }, [selectedModuleId, sortedModuleIds]);
22825
- const activeValue = useMemo36(() => {
22857
+ const activeValue = useMemo37(() => {
22826
22858
  if (!activePicker || !matrix) return void 0;
22827
22859
  const block = matrix[activePicker.moduleId];
22828
22860
  if (!block) return void 0;
22829
22861
  const tokens = activePicker.rowKey === "default" ? block.default : block[activePicker.rowKey];
22830
22862
  return cellValue(tokens, activePicker.action);
22831
22863
  }, [activePicker, matrix]);
22832
- const activeSegments = useMemo36(() => {
22864
+ const activeSegments = useMemo37(() => {
22833
22865
  if (!activePicker) return [];
22834
22866
  return modulePaths[activePicker.moduleId] ?? [];
22835
22867
  }, [activePicker, modulePaths]);
@@ -22900,7 +22932,7 @@ __name(RbacContainer, "RbacContainer");
22900
22932
  // src/features/rbac/components/RbacByRoleContainer.tsx
22901
22933
  import { Loader2Icon as Loader2Icon5 } from "lucide-react";
22902
22934
  import { useTranslations as useTranslations113 } from "next-intl";
22903
- import { Fragment as Fragment56, memo as memo3, useCallback as useCallback51, useEffect as useEffect74, useMemo as useMemo37, useRef as useRef41, useState as useState101 } from "react";
22935
+ import { Fragment as Fragment56, memo as memo3, useCallback as useCallback51, useEffect as useEffect74, useMemo as useMemo38, useRef as useRef41, useState as useState101 } from "react";
22904
22936
  import { jsx as jsx271, jsxs as jsxs175 } from "react/jsx-runtime";
22905
22937
  function findToken2(tokens, action) {
22906
22938
  if (!tokens) return void 0;
@@ -22950,11 +22982,11 @@ function RbacByRoleContainer() {
22950
22982
  setSelectedRoleId(id);
22951
22983
  setActivePicker(null);
22952
22984
  }, []);
22953
- const sortedRoleIds = useMemo37(() => {
22985
+ const sortedRoleIds = useMemo38(() => {
22954
22986
  if (!roleNames) return [];
22955
22987
  return Object.keys(roleNames).sort((a, b) => (roleNames[a] ?? a).localeCompare(roleNames[b] ?? b));
22956
22988
  }, [roleNames]);
22957
- const sortedModuleIds = useMemo37(() => {
22989
+ const sortedModuleIds = useMemo38(() => {
22958
22990
  if (!matrix) return [];
22959
22991
  return Object.keys(matrix).sort((a, b) => (moduleNames?.[a] ?? a).localeCompare(moduleNames?.[b] ?? b));
22960
22992
  }, [matrix, moduleNames]);
@@ -22963,14 +22995,14 @@ function RbacByRoleContainer() {
22963
22995
  setSelectedRoleId(sortedRoleIds[0]);
22964
22996
  }
22965
22997
  }, [selectedRoleId, sortedRoleIds]);
22966
- const activeValue = useMemo37(() => {
22998
+ const activeValue = useMemo38(() => {
22967
22999
  if (!activePicker || !matrix) return void 0;
22968
23000
  const block = matrix[activePicker.moduleId];
22969
23001
  if (!block) return void 0;
22970
23002
  const tokens = activePicker.rowKey === "default" ? block.default : block[activePicker.rowKey];
22971
23003
  return cellValue2(tokens, activePicker.action);
22972
23004
  }, [activePicker, matrix]);
22973
- const activeSegments = useMemo37(() => {
23005
+ const activeSegments = useMemo38(() => {
22974
23006
  if (!activePicker) return [];
22975
23007
  return modulePaths[activePicker.moduleId] ?? [];
22976
23008
  }, [activePicker, modulePaths]);
@@ -23614,4 +23646,4 @@ export {
23614
23646
  useOAuthClients,
23615
23647
  useOAuthClient
23616
23648
  };
23617
- //# sourceMappingURL=chunk-4TM6GOT3.mjs.map
23649
+ //# sourceMappingURL=chunk-BBBQGJEG.mjs.map