@plumile/backoffice-react 0.2.11 → 0.2.12

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 (73) hide show
  1. package/README.md +3 -0
  2. package/lib/esm/auth/authRefreshNotice.css.js +1 -1
  3. package/lib/esm/auth/login/OidcButtons.js +16 -15
  4. package/lib/esm/auth/login/OidcButtons.js.map +1 -1
  5. package/lib/esm/auth/login/loginPage.css.js +1 -1
  6. package/lib/esm/auth/pages/AcceptInvitationScreen.js +7 -9
  7. package/lib/esm/auth/pages/AcceptInvitationScreen.js.map +1 -1
  8. package/lib/esm/auth/pages/PasswordResetCompleteScreen.js +7 -9
  9. package/lib/esm/auth/pages/PasswordResetCompleteScreen.js.map +1 -1
  10. package/lib/esm/auth/pages/PasswordResetRequestScreen.js +1 -1
  11. package/lib/esm/auth/pages/PasswordResetRequestScreen.js.map +1 -1
  12. package/lib/esm/components/backoffice/actions/BackofficeEntityActionFormDialog.js +1 -1
  13. package/lib/esm/components/backoffice/actions/backofficeEntityActionFormDialog.css.js +1 -1
  14. package/lib/esm/components/backoffice/billing/BackofficeBillingUsageChart.js +1 -1
  15. package/lib/esm/components/backoffice/billing/backofficeBillingUsageChart.css.js +1 -1
  16. package/lib/esm/components/backoffice/detail/BackofficeEntitySummaryHeader.js +6 -6
  17. package/lib/esm/components/backoffice/detail/BackofficeRelationsSummaryGrid.js +1 -1
  18. package/lib/esm/components/backoffice/detail/BackofficeUsageCostBreakdown.js +13 -13
  19. package/lib/esm/components/backoffice/detail/backofficeDetailBadgeRow.css.js +1 -1
  20. package/lib/esm/components/backoffice/detail/backofficeDetailErrorList.css.js +1 -1
  21. package/lib/esm/components/backoffice/detail/backofficeDetailLayout.css.js +1 -1
  22. package/lib/esm/components/backoffice/detail/backofficeDetailRelationList.css.js +1 -1
  23. package/lib/esm/components/backoffice/detail/backofficeEntitySummaryHeader.css.js +1 -1
  24. package/lib/esm/components/backoffice/detail/backofficeRelationsSummaryGrid.css.js +1 -1
  25. package/lib/esm/components/backoffice/detail/backofficeUsageCostBreakdown.css.js +1 -1
  26. package/lib/esm/components/backoffice/filters/EntityIdFilterField.js +1 -1
  27. package/lib/esm/components/backoffice/filters/backofficeFilterAction.css.js +1 -1
  28. package/lib/esm/components/backoffice/filters/deferredFilterSearchInput.css.js +1 -1
  29. package/lib/esm/components/backoffice/filters/deferredFilterSearchInput.css.js.map +1 -1
  30. package/lib/esm/components/backoffice/filters/entityIdFilterField.css.js +1 -1
  31. package/lib/esm/components/backoffice/hub/BackofficeHubTemplate.js +5 -5
  32. package/lib/esm/components/backoffice/hub/backofficeHubTemplate.css.js +1 -1
  33. package/lib/esm/components/backoffice/layout/backofficeSidebarActions.css.js +1 -1
  34. package/lib/esm/components/backoffice/layout/breadcrumb/BackofficeTopbarBreadcrumb.js +2 -2
  35. package/lib/esm/components/backoffice/layout/breadcrumb/backofficeTopbarBreadcrumb.css.js +1 -1
  36. package/lib/esm/components/backoffice/links/BackofficeLinkContent.js +1 -1
  37. package/lib/esm/components/backoffice/links/backofficeLink.css.js +1 -1
  38. package/lib/esm/components/backoffice/list/RowFlagsCell.css.js +1 -1
  39. package/lib/esm/components/backoffice/overview/backofficeOverviewLayout.css.js +1 -1
  40. package/lib/esm/components/backoffice/pickers/entityIdPickerDialog.css.js +1 -1
  41. package/lib/esm/components/backoffice/refs/backofficeRelatedCountLink.css.js +1 -1
  42. package/lib/esm/components/backoffice/routing/backofficeContentBoundary.css.js +1 -1
  43. package/lib/esm/components/backoffice/routing/backofficeContentError.css.js +1 -1
  44. package/lib/esm/components/backoffice/routing/backofficeContentFallback.css.js +1 -1
  45. package/lib/esm/components/backoffice/scaffolds/backofficeEntityListScaffold.css.js +1 -1
  46. package/lib/esm/components/backoffice/scaffolds/backofficeTabbedDetailShell.css.js +1 -1
  47. package/lib/esm/components/backoffice/shared/backofficeFilterableCell.css.js +5 -5
  48. package/lib/esm/components/backoffice/shared/backofficeInlineFilterRow.css.js +1 -1
  49. package/lib/esm/components/backoffice/tools/BackofficeToolsDocPanel.js +1 -1
  50. package/lib/esm/components/backoffice/tools/BackofficeToolsErrorFallback.js +2 -1
  51. package/lib/esm/components/backoffice/tools/BackofficeToolsErrorFallback.js.map +1 -1
  52. package/lib/esm/components/backoffice/tools/backofficeToolsDocPanel.css.js +1 -1
  53. package/lib/esm/components/backoffice/tools/backofficeToolsForm.css.js +1 -1
  54. package/lib/esm/components/backoffice/tools/backofficeToolsJsonForm.css.js +1 -1
  55. package/lib/esm/hooks/useBackofficeSidebarPins.js +1 -1
  56. package/lib/esm/hooks/useBackofficeSidebarPins.js.map +1 -1
  57. package/lib/esm/hooks/useSidebarGroupCollapse.js +1 -1
  58. package/lib/esm/hooks/useSidebarGroupCollapse.js.map +1 -1
  59. package/lib/esm/pages/BackofficeEntityDetailLayoutPage.js +1 -1
  60. package/lib/esm/pages/BackofficeLayoutPage.js +2 -2
  61. package/lib/esm/pages/BackofficeLayoutPage.js.map +1 -1
  62. package/lib/esm/pages/backofficeDashboardPage.css.js +1 -1
  63. package/lib/esm/pages/backofficeEntityDetailPage.css.js +1 -1
  64. package/lib/esm/pages/backofficeEntityListPage.css.js +1 -1
  65. package/lib/esm/storybook/backofficeDashboardPageStory.css.js +1 -1
  66. package/lib/esm/storybook/relay/RelayStory.css.js +1 -1
  67. package/lib/esm/style.css +1 -1
  68. package/lib/types/auth/login/OidcButtons.d.ts.map +1 -1
  69. package/lib/types/auth/pages/AcceptInvitationScreen.d.ts.map +1 -1
  70. package/lib/types/auth/pages/PasswordResetCompleteScreen.d.ts.map +1 -1
  71. package/lib/types/components/backoffice/filters/deferredFilterSearchInput.css.d.ts.map +1 -1
  72. package/lib/types/components/backoffice/tools/BackofficeToolsErrorFallback.d.ts.map +1 -1
  73. package/package.json +11 -11
@@ -1,6 +1,6 @@
1
1
  /* empty css */
2
2
  //#region src/components/backoffice/filters/entityIdFilterField.css.ts
3
- var e = "txvbqb5lr txvbqb2nn txvbqbl6b txvbqbd73 txvbqbe1d", t = "oa1uye0 txvbqb5m1 txvbqb2nn txvbqb1cl txvbqbe1d txvbqbn3 txvbqble txvbqbmx txvbqbiy txvbqba9 txvbqbe6 txvbqbiqt txvbqbk49 txvbqb7m txvbqb78 txvbqb7y", n = "oa1uye1 txvbqb6 txvbqb5m1 txvbqb8o1 txvbqbe1d txvbqbl9n txvbqb2lt txvbqbv txvbqbk9 txvbqb8n txvbqbe6 txvbqbf4t", r = "txvbqb5lr txvbqb6m5 txvbqb8o1 txvbqb7fb txvbqbe1d txvbqbl9n txvbqbd73", i = "txvbqb1cl txvbqbe1d txvbqb5lr txvbqb2nn txvbqbf3z", a = "txvbqb5l7 txvbqbe8 txvbqb6n9 txvbqb1d4 txvbqbe1d txvbqbf3z txvbqb2lw txvbqb2mf", o = "txvbqb5l7 txvbqbe1d txvbqbf3z txvbqb2lw txvbqb2mf txvbqb6nj txvbqb1d5", s = "txvbqb5l7 txvbqbe1d txvbqbf3z txvbqb2lw txvbqb2mf txvbqbe8 txvbqb6nj", c = "oa1uye3 oa1uye2 txvbqb6 txvbqb5ml txvbqb2nn txvbqbgh txvbqb8o1 txvbqbkz3 txvbqb7tr txvbqbf4t txvbqbn1 txvbqbk9 txvbqb8n txvbqbe8 txvbqbv txvbqb7n txvbqb76 txvbqb7y", l = "txvbqbky9 txvbqb7sx";
3
+ var e = "txvbqb5m2 txvbqb2ny txvbqbl6w txvbqbd7o txvbqbe1y", t = "oa1uye0 txvbqb5mc txvbqb2ny txvbqb1cw txvbqbe1y txvbqbne txvbqblp txvbqbn8 txvbqbj9 txvbqbak txvbqbeh txvbqbire txvbqbk4u txvbqb7x txvbqb7j txvbqb89", n = "oa1uye1 txvbqb6 txvbqb5mc txvbqb8om txvbqbe1y txvbqbla8 txvbqb2m4 txvbqbv txvbqbkk txvbqb8y txvbqbeh txvbqbf5e", r = "txvbqb5m2 txvbqb6mq txvbqb8om txvbqb7fw txvbqbe1y txvbqbla8 txvbqbd7o", i = "txvbqb1cw txvbqbe1y txvbqb5m2 txvbqb2ny txvbqbf4k", a = "txvbqb5li txvbqbej txvbqb6nu txvbqb1df txvbqbe1y txvbqbf4k txvbqb2m7 txvbqb2mq", o = "txvbqb5li txvbqbe1y txvbqbf4k txvbqb2m7 txvbqb2mq txvbqb6o4 txvbqb1dg", s = "txvbqb5li txvbqbe1y txvbqbf4k txvbqb2m7 txvbqb2mq txvbqbej txvbqb6o4", c = "oa1uye3 oa1uye2 txvbqb6 txvbqb5mw txvbqb2ny txvbqbgs txvbqb8om txvbqbkzo txvbqb7uc txvbqbf5e txvbqbnc txvbqbkk txvbqb8y txvbqbej txvbqbv txvbqb7y txvbqb7h txvbqb89", l = "txvbqbkyu txvbqb7ti";
4
4
  //#endregion
5
5
  export { l as actionIcon, c as clearButton, e as container, r as content, a as labelText, n as pickerButton, t as pickerControl, s as placeholder, i as valueBox, o as valueText };
6
6
 
@@ -22,7 +22,7 @@ var _ = /* @__PURE__ */ d(g, {
22
22
  children: [/* @__PURE__ */ f("div", {
23
23
  className: r,
24
24
  children: [e.icon != null && /* @__PURE__ */ d("span", {
25
- className: "txvbqb5ml txvbqb2nn txvbqb8o1 txvbqbkzd txvbqb7u1 txvbqbn1 txvbqbab txvbqble txvbqbmx txvbqbiz txvbqbe7 txvbqb1cr txvbqbb75",
25
+ className: "txvbqb5mw txvbqb2ny txvbqb8om txvbqbkzy txvbqb7um txvbqbnc txvbqbam txvbqblp txvbqbn8 txvbqbja txvbqbei txvbqb1d2 txvbqbb7q",
26
26
  "aria-hidden": "true",
27
27
  children: e.icon
28
28
  }), /* @__PURE__ */ f("span", {
@@ -31,7 +31,7 @@ var _ = /* @__PURE__ */ d(g, {
31
31
  className: a,
32
32
  children: e.title
33
33
  }), e.description != null && /* @__PURE__ */ d("span", {
34
- className: "txvbqbe8 txvbqb6nj",
34
+ className: "txvbqbej txvbqb6o4",
35
35
  children: e.description
36
36
  })]
37
37
  })]
@@ -55,11 +55,11 @@ var _ = /* @__PURE__ */ d(g, {
55
55
  children: e.label
56
56
  }),
57
57
  n && /* @__PURE__ */ d("span", {
58
- className: "txvbqbe8 txvbqb6nj txvbqb1rn txvbqb206",
58
+ className: "txvbqbej txvbqb6o4 txvbqb1ry txvbqb20h",
59
59
  children: e.description
60
60
  }),
61
61
  r && /* @__PURE__ */ d("span", {
62
- className: "txvbqbe8 txvbqb6n9 txvbqb1d4 txvbqb6a txvbqb1o1",
62
+ className: "txvbqbej txvbqb6nu txvbqb1df txvbqb6k txvbqb1oc",
63
63
  children: e.metaLabel
64
64
  })
65
65
  ]
@@ -71,7 +71,7 @@ var _ = /* @__PURE__ */ d(g, {
71
71
  }), /* @__PURE__ */ f("div", {
72
72
  className: e,
73
73
  children: [v != null && /* @__PURE__ */ d("div", {
74
- className: "txvbqbd2d",
74
+ className: "txvbqbd2y",
75
75
  children: /* @__PURE__ */ d(h, {
76
76
  value: v.value,
77
77
  onChange: v.onChange,
@@ -1,6 +1,6 @@
1
1
  /* empty css */
2
2
  //#region src/components/backoffice/hub/backofficeHubTemplate.css.ts
3
- var e = "txvbqb5lr txvbqb6m5 txvbqb6sj", t = "txvbqbd2d", n = "txvbqb5lr txvbqb6m5 txvbqb6st", r = "txvbqb5lr txvbqb6m5 txvbqb6rz", i = "txvbqb5lr txvbqb2nd txvbqb6rz", a = "txvbqb5ml txvbqb2nn txvbqb8o1 txvbqbkzd txvbqb7u1 txvbqbn1 txvbqbab txvbqble txvbqbmx txvbqbiz txvbqbe7 txvbqb1cr txvbqbb75", o = "txvbqb5lr txvbqb6m5 txvbqb6rf txvbqbe1d", s = "txvbqb6o3 txvbqb1d5 txvbqbe6 txvbqb1rt", c = "txvbqbe8 txvbqb6nj", l = "txvbqb5m1 txvbqb7qz txvbqb6rz", u = "u4nszr0 txvbqb5lr txvbqb2nd txvbqb6rz txvbqbf5n txvbqbn1 txvbqble txvbqbmx txvbqbiz txvbqba9 txvbqbe6 txvbqb3f txvbqbe1d txvbqb7m txvbqb78 txvbqb7y qbwcue2", d = "txvbqb5ml txvbqb2nn txvbqb8o1 txvbqbkzn txvbqb7ub txvbqbn1 txvbqbab txvbqbe7 txvbqb1cr", f = "txvbqb5lr txvbqb6m5 txvbqb6rf txvbqbe1d", p = "txvbqb1d5 txvbqbe6 txvbqb206", m = "txvbqbe8 txvbqb6nj txvbqb1rn txvbqb206", h = "txvbqbe8 txvbqb6n9 txvbqb1d4 txvbqb6a txvbqb1o1";
3
+ var e = "txvbqb5m2 txvbqb6mq txvbqb6t4", t = "txvbqbd2y", n = "txvbqb5m2 txvbqb6mq txvbqb6te", r = "txvbqb5m2 txvbqb6mq txvbqb6sk", i = "txvbqb5m2 txvbqb2no txvbqb6sk", a = "txvbqb5mw txvbqb2ny txvbqb8om txvbqbkzy txvbqb7um txvbqbnc txvbqbam txvbqblp txvbqbn8 txvbqbja txvbqbei txvbqb1d2 txvbqbb7q", o = "txvbqb5m2 txvbqb6mq txvbqb6s0 txvbqbe1y", s = "txvbqb6oo txvbqb1dg txvbqbeh txvbqb1s4", c = "txvbqbej txvbqb6o4", l = "txvbqb5mc txvbqb7rk txvbqb6sk", u = "u4nszr0 txvbqb5m2 txvbqb2no txvbqb6sk txvbqbf68 txvbqbnc txvbqblp txvbqbn8 txvbqbja txvbqbak txvbqbeh txvbqb3p txvbqbe1y txvbqb7x txvbqb7j txvbqb89 qbwcue2", d = "txvbqb5mw txvbqb2ny txvbqb8om txvbqbl08 txvbqb7uw txvbqbnc txvbqbam txvbqbei txvbqb1d2", f = "txvbqb5m2 txvbqb6mq txvbqb6s0 txvbqbe1y", p = "txvbqb1dg txvbqbeh txvbqb20h", m = "txvbqbej txvbqb6o4 txvbqb1ry txvbqb20h", h = "txvbqbej txvbqb6nu txvbqb1df txvbqb6k txvbqb1oc";
4
4
  //#endregion
5
5
  export { e as content, l as grid, r as group, c as groupDescription, i as groupHeader, o as groupHeading, a as groupIcon, s as groupTitle, n as groups, u as item, f as itemContent, m as itemDescription, d as itemIcon, h as itemMeta, p as itemTitle, t as search };
6
6
 
@@ -1,6 +1,6 @@
1
1
  /* empty css */
2
2
  //#region src/components/backoffice/layout/backofficeSidebarActions.css.ts
3
- var e = "_1xws1b00 txvbqb5ml txvbqb2nn txvbqb8o1 txvbqbkyt txvbqb7th txvbqbk9 txvbqbmv txvbqbn1 txvbqb8n txvbqbv txvbqbf4t txvbqb7n txvbqb78 txvbqb7y";
3
+ var e = "_1xws1b00 txvbqb5mw txvbqb2ny txvbqb8om txvbqbkze txvbqb7u2 txvbqbkk txvbqbn6 txvbqbnc txvbqb8y txvbqbv txvbqbf5e txvbqb7y txvbqb7j txvbqb89";
4
4
  //#endregion
5
5
  export { e as actionButton };
6
6
 
@@ -31,13 +31,13 @@ var g = (e) => {
31
31
  children: [/* @__PURE__ */ p("li", {
32
32
  className: o,
33
33
  children: [x && /* @__PURE__ */ f("span", {
34
- className: "_80s44h2 _80s44h1 qbwcueu qbwcues txvbqb5ml txvbqb2nn txvbqb8o1 txvbqbk9 txvbqbmv txvbqbn1 txvbqb8n txvbqbe7 txvbqbv txvbqbf4t txvbqb7n txvbqb78 txvbqb7y qbwcuet txvbqbmcq txvbqbo82 qbwcuec txvbqbor4 txvbqboxk qbwcue5 qbwcue4 txvbqboz8 txvbqbptg qbwcue3 qbwcue18 qbwcue12 txvbqb1cr txvbqb1rk qbwcue1c qbwcue16 txvbqbkzd txvbqb7u1 txvbqbe3l txvbqbdc3 txvbqb3f txvbqbab txvbqbe6",
34
+ className: "_80s44h2 _80s44h1 qbwcueu qbwcues txvbqb5mw txvbqb2ny txvbqb8om txvbqbkk txvbqbn6 txvbqbnc txvbqb8y txvbqbei txvbqbv txvbqbf5e txvbqb7y txvbqb7j txvbqb89 qbwcuet txvbqbmdb txvbqbo8n qbwcuec txvbqborp txvbqboy5 qbwcue5 qbwcue4 txvbqbozt txvbqbpu1 qbwcue3 qbwcue18 qbwcue12 txvbqb1d2 txvbqb1rv qbwcue1c qbwcue16 txvbqbkzy txvbqb7um txvbqbe46 txvbqbdco txvbqb3p txvbqbam txvbqbeh",
35
35
  "aria-current": "page",
36
36
  title: b,
37
37
  children: w
38
38
  }), !x && /* @__PURE__ */ f(m, {
39
39
  to: y,
40
- className: "_80s44h1 qbwcueu qbwcues txvbqb5ml txvbqb2nn txvbqb8o1 txvbqbk9 txvbqbmv txvbqbn1 txvbqb8n txvbqbe7 txvbqbv txvbqbf4t txvbqb7n txvbqb78 txvbqb7y qbwcuet txvbqbmcq txvbqbo82 qbwcuec txvbqbor4 txvbqboxk qbwcue5 qbwcue4 txvbqboz8 txvbqbptg qbwcue3 qbwcue18 qbwcue12 txvbqb1cr txvbqb1rk qbwcue1c qbwcue16 txvbqbkzd txvbqb7u1 txvbqbe3l txvbqbdc3 txvbqb3f",
40
+ className: "_80s44h1 qbwcueu qbwcues txvbqb5mw txvbqb2ny txvbqb8om txvbqbkk txvbqbn6 txvbqbnc txvbqb8y txvbqbei txvbqbv txvbqbf5e txvbqb7y txvbqb7j txvbqb89 qbwcuet txvbqbmdb txvbqbo8n qbwcuec txvbqborp txvbqboy5 qbwcue5 qbwcue4 txvbqbozt txvbqbpu1 qbwcue3 qbwcue18 qbwcue12 txvbqb1d2 txvbqb1rv qbwcue1c qbwcue16 txvbqbkzy txvbqb7um txvbqbe46 txvbqbdco txvbqb3p",
41
41
  "aria-label": b,
42
42
  title: b,
43
43
  preloadOnHover: "code-and-data",
@@ -1,6 +1,6 @@
1
1
  /* empty css */
2
2
  //#region src/components/backoffice/layout/breadcrumb/backofficeTopbarBreadcrumb.css.ts
3
- var e = "txvbqb5lr txvbqb2nn txvbqbl9n txvbqbe1d txvbqbd73", t = "_80s44h0 txvbqb5lr txvbqb2nn txvbqb6rp txvbqb1rt txvbqbf4t txvbqb1rq txvbqb1cu txvbqbe1d txvbqbd73", n = "txvbqb5ml txvbqb2nn txvbqb6rp txvbqbe1d", r = "txvbqbe7 txvbqb1rn", i = "_80s44h1 qbwcueu qbwcues txvbqb5ml txvbqb2nn txvbqb8o1 txvbqbk9 txvbqbmv txvbqbn1 txvbqb8n txvbqbe7 txvbqbv txvbqbf4t txvbqb7n txvbqb78 txvbqb7y qbwcuet txvbqbmcq txvbqbo82 qbwcuec txvbqbor4 txvbqboxk qbwcue5 qbwcue4 txvbqboz8 txvbqbptg qbwcue3 qbwcue18 qbwcue12 txvbqb1cr txvbqb1rk qbwcue1c qbwcue16 txvbqbkzd txvbqb7u1 txvbqbe3l txvbqbdc3 txvbqb3f", a = "_80s44h2 _80s44h1 qbwcueu qbwcues txvbqb5ml txvbqb2nn txvbqb8o1 txvbqbk9 txvbqbmv txvbqbn1 txvbqb8n txvbqbe7 txvbqbv txvbqbf4t txvbqb7n txvbqb78 txvbqb7y qbwcuet txvbqbmcq txvbqbo82 qbwcuec txvbqbor4 txvbqboxk qbwcue5 qbwcue4 txvbqboz8 txvbqbptg qbwcue3 qbwcue18 qbwcue12 txvbqb1cr txvbqb1rk qbwcue1c qbwcue16 txvbqbkzd txvbqb7u1 txvbqbe3l txvbqbdc3 txvbqb3f txvbqbab txvbqbe6", o = "_4k5f061 _4k5f060 txvbqbk9 txvbqbmv txvbqb1j txvbqb84l txvbqb1t1 txvbqbf3z txvbqbf4t txvbqbk5n txvbqbk71 txvbqb1iq txvbqbl9x", s = "_80s44h3 qbwcue10 qbwcuey txvbqb5ml txvbqb2nn txvbqb6rf txvbqbe6 txvbqb3f txvbqb7n txvbqb76 txvbqb7y qbwcuez txvbqbpw9 qbwcue5 qbwcue4 txvbqboz8 txvbqbptg qbwcue3 txvbqbe7 txvbqb1rn txvbqbe1d txvbqbd73 txvbqb206", c = "txvbqbe6 txvbqb1rn txvbqb1d5 txvbqbe1d txvbqbd73 txvbqb206";
3
+ var e = "txvbqb5m2 txvbqb2ny txvbqbla8 txvbqbe1y txvbqbd7o", t = "_80s44h0 txvbqb5m2 txvbqb2ny txvbqb6sa txvbqb1s4 txvbqbf5e txvbqb1s1 txvbqb1d5 txvbqbe1y txvbqbd7o", n = "txvbqb5mw txvbqb2ny txvbqb6sa txvbqbe1y", r = "txvbqbei txvbqb1ry", i = "_80s44h1 qbwcueu qbwcues txvbqb5mw txvbqb2ny txvbqb8om txvbqbkk txvbqbn6 txvbqbnc txvbqb8y txvbqbei txvbqbv txvbqbf5e txvbqb7y txvbqb7j txvbqb89 qbwcuet txvbqbmdb txvbqbo8n qbwcuec txvbqborp txvbqboy5 qbwcue5 qbwcue4 txvbqbozt txvbqbpu1 qbwcue3 qbwcue18 qbwcue12 txvbqb1d2 txvbqb1rv qbwcue1c qbwcue16 txvbqbkzy txvbqb7um txvbqbe46 txvbqbdco txvbqb3p", a = "_80s44h2 _80s44h1 qbwcueu qbwcues txvbqb5mw txvbqb2ny txvbqb8om txvbqbkk txvbqbn6 txvbqbnc txvbqb8y txvbqbei txvbqbv txvbqbf5e txvbqb7y txvbqb7j txvbqb89 qbwcuet txvbqbmdb txvbqbo8n qbwcuec txvbqborp txvbqboy5 qbwcue5 qbwcue4 txvbqbozt txvbqbpu1 qbwcue3 qbwcue18 qbwcue12 txvbqb1d2 txvbqb1rv qbwcue1c qbwcue16 txvbqbkzy txvbqb7um txvbqbe46 txvbqbdco txvbqb3p txvbqbam txvbqbeh", o = "_4k5f061 _4k5f060 txvbqbkk txvbqbn6 txvbqb1t txvbqb856 txvbqb1tc txvbqbf4k txvbqbf5e txvbqbk68 txvbqbk7m txvbqb1j1 txvbqblai", s = "_80s44h3 qbwcue10 qbwcuey txvbqb5mw txvbqb2ny txvbqb6s0 txvbqbeh txvbqb3p txvbqb7y txvbqb7h txvbqb89 qbwcuez txvbqbpwu qbwcue5 qbwcue4 txvbqbozt txvbqbpu1 qbwcue3 txvbqbei txvbqb1ry txvbqbe1y txvbqbd7o txvbqb20h", c = "txvbqbeh txvbqb1ry txvbqb1dg txvbqbe1y txvbqbd7o txvbqb20h";
4
4
  //#endregion
5
5
  export { c as current, a as homeCurrent, o as homeLabel, i as homeLink, n as item, s as link, t as list, e as nav, r as separator };
6
6
 
@@ -5,7 +5,7 @@ var i = ({ icon: i, label: a, showIcon: o = !0, endAdornment: s }) => /* @__PURE
5
5
  className: e,
6
6
  children: [
7
7
  o && i != null && /* @__PURE__ */ n("span", {
8
- className: "txvbqb5ml txvbqb2nn txvbqb8o1 txvbqbcb txvbqb1co txvbqblmz txvbqb8hn",
8
+ className: "txvbqb5mw txvbqb2ny txvbqb8om txvbqbcm txvbqb1cz txvbqblnk txvbqb8i8",
9
9
  "aria-hidden": "true",
10
10
  children: /* @__PURE__ */ n(i, {
11
11
  width: 14,
@@ -1,5 +1,5 @@
1
1
  //#region src/components/backoffice/links/backofficeLink.css.ts
2
- var e = "txvbqb5ml txvbqb2nn txvbqb6rf", t = "txvbqb5ml txvbqb2nn txvbqb8o1 txvbqbcb txvbqb1co txvbqblmz txvbqb8hn", n = "txvbqbe1d";
2
+ var e = "txvbqb5mw txvbqb2ny txvbqb6s0", t = "txvbqb5mw txvbqb2ny txvbqb8om txvbqbcm txvbqb1cz txvbqblnk txvbqb8i8", n = "txvbqbe1y";
3
3
  //#endregion
4
4
  export { e as content, t as icon, n as label };
5
5
 
@@ -1,5 +1,5 @@
1
1
  //#region src/components/backoffice/list/RowFlagsCell.css.ts
2
- var e = "txvbqb8o1 txvbqbiq9 txvbqbjft", t = "txvbqb5ml txvbqb2nn txvbqb8o1 txvbqb7fl txvbqbl9n", n = "qbwcue18 qbwcue12 txvbqb5ml txvbqb2nn txvbqb8o1 txvbqb1cr txvbqb1rk qbwcue1c qbwcue16 txvbqbkzd txvbqb7u1 txvbqbe3l txvbqbdc3";
2
+ var e = "txvbqb8om txvbqbiqu txvbqbjge", t = "txvbqb5mw txvbqb2ny txvbqb8om txvbqb7g6 txvbqbla8", n = "qbwcue18 qbwcue12 txvbqb5mw txvbqb2ny txvbqb8om txvbqb1d2 txvbqb1rv qbwcue1c qbwcue16 txvbqbkzy txvbqb7um txvbqbe46 txvbqbdco";
3
3
  //#endregion
4
4
  export { t as container, n as flag, e as rowFlagsColumnCell };
5
5
 
@@ -1,6 +1,6 @@
1
1
  /* empty css */
2
2
  //#region src/components/backoffice/overview/backofficeOverviewLayout.css.ts
3
- var e = "txvbqb5lr txvbqb6m5 txvbqb6st txvbqbl9n txvbqbe1d", t = "txvbqb5lr txvbqb6m5 txvbqb6s9", n = "_1f81p5z0 txvbqb5m1 txvbqb7gz txvbqb6st txvbqb2nd", r = "txvbqb5lr txvbqb6m5 txvbqb6st", i = "txvbqb5lr txvbqb6m5 txvbqb6st";
3
+ var e = "txvbqb5m2 txvbqb6mq txvbqb6te txvbqbla8 txvbqbe1y", t = "txvbqb5m2 txvbqb6mq txvbqb6su", n = "_1f81p5z0 txvbqb5mc txvbqb7hk txvbqb6te txvbqb2no", r = "txvbqb5m2 txvbqb6mq txvbqb6te", i = "txvbqb5m2 txvbqb6mq txvbqb6te";
4
4
  //#endregion
5
5
  export { i as aside, e as container, n as content, r as primary, t as summary };
6
6
 
@@ -1,5 +1,5 @@
1
1
  //#region src/components/backoffice/pickers/entityIdPickerDialog.css.ts
2
- var e = "txvbqbe7 txvbqb6nj txvbqb2lu txvbqbjgn txvbqbipz", t = "txvbqb5lr txvbqb2nn txvbqb8o1 txvbqb6rp txvbqbjgx txvbqbiqt txvbqbe7", n = "txvbqb6nj txvbqbe7";
2
+ var e = "txvbqbei txvbqb6o4 txvbqb2m5 txvbqbjh8 txvbqbiqk", t = "txvbqb5m2 txvbqb2ny txvbqb8om txvbqb6sa txvbqbjhi txvbqbire txvbqbei", n = "txvbqb6o4 txvbqbei";
3
3
  //#endregion
4
4
  export { n as loadingLabel, t as loadingState, e as searchRequiredMessage };
5
5
 
@@ -1,6 +1,6 @@
1
1
  /* empty css */
2
2
  //#region src/components/backoffice/refs/backofficeRelatedCountLink.css.ts
3
- var e = "qbwcuex qbwcuev txvbqb5ml txvbqb2nn txvbqb8o1 txvbqb6rf txvbqbe3v txvbqbiqj txvbqbjg3 txvbqbe6 txvbqbaa txvbqbiz txvbqbmx txvbqblh txvbqbn8 txvbqb1d5 txvbqb1rk txvbqb3f txvbqb7m txvbqb76 txvbqb7y qbwcuew txvbqbod5 txvbqbmc9 txvbqbncx txvbqbnm1 qbwcue5 qbwcue4 txvbqboz8 txvbqbptg qbwcue3", t = "txvbqbe1x txvbqb2lu txvbqb1cw", n = "txvbqb5ml txvbqb2nn txvbqb8o1 txvbqbky9 txvbqb7sx txvbqbe8", r = "kk18lv0 txvbqb1cr txvbqbe7 txvbqb6nj txvbqb1rk txvbqb7n txvbqb76 txvbqb7y";
3
+ var e = "qbwcuex qbwcuev txvbqb5mw txvbqb2ny txvbqb8om txvbqb6s0 txvbqbe4g txvbqbir4 txvbqbjgo txvbqbeh txvbqbal txvbqbja txvbqbn8 txvbqbls txvbqbnj txvbqb1dg txvbqb1rv txvbqb3p txvbqb7x txvbqb7h txvbqb89 qbwcuew txvbqbodq txvbqbmcu txvbqbndi txvbqbnmm qbwcue5 qbwcue4 txvbqbozt txvbqbpu1 qbwcue3", t = "txvbqbe2i txvbqb2m5 txvbqb1d7", n = "txvbqb5mw txvbqb2ny txvbqb8om txvbqbkyu txvbqb7ti txvbqbej", r = "kk18lv0 txvbqb1d2 txvbqbei txvbqb6o4 txvbqb1rv txvbqb7y txvbqb7h txvbqb89";
4
4
  //#endregion
5
5
  export { t as count, n as countLoading, r as icon, e as link };
6
6
 
@@ -1,5 +1,5 @@
1
1
  //#region src/components/backoffice/routing/backofficeContentBoundary.css.ts
2
- var e = "txvbqb5lr txvbqb6m5 txvbqbdm3 txvbqbl9n txvbqbe1d";
2
+ var e = "txvbqb5m2 txvbqb6mq txvbqbdmo txvbqbla8 txvbqbe1y";
3
3
  //#endregion
4
4
  export { e as root };
5
5
 
@@ -1,5 +1,5 @@
1
1
  //#region src/components/backoffice/routing/backofficeContentError.css.ts
2
- var e = "txvbqb5lr txvbqb6m5 txvbqbl9n", t = "txvbqbj0";
2
+ var e = "txvbqb5m2 txvbqb6mq txvbqbla8", t = "txvbqbjb";
3
3
  //#endregion
4
4
  export { t as banner, e as root };
5
5
 
@@ -1,5 +1,5 @@
1
1
  //#region src/components/backoffice/routing/backofficeContentFallback.css.ts
2
- var e = "txvbqb5lr txvbqb6m5 txvbqb6s9 txvbqbl9n txvbqbdm3", t = "txvbqbd7x", n = "txvbqb5m1 txvbqb6s9 txvbqb7qp", r = "txvbqb5lr txvbqb6m5 txvbqb6rz txvbqbf5x txvbqbdhd txvbqbn3 txvbqble txvbqbmx txvbqbiz txvbqbab";
2
+ var e = "txvbqb5m2 txvbqb6mq txvbqb6su txvbqbla8 txvbqbdmo", t = "txvbqbd8i", n = "txvbqb5mc txvbqb6su txvbqb7ra", r = "txvbqb5m2 txvbqb6mq txvbqb6sk txvbqbf6i txvbqbdhy txvbqbne txvbqblp txvbqbn8 txvbqbja txvbqbam";
3
3
  //#endregion
4
4
  export { r as card, e as container, n as grid, t as title };
5
5
 
@@ -1,5 +1,5 @@
1
1
  //#region src/components/backoffice/scaffolds/backofficeEntityListScaffold.css.ts
2
- var e = "txvbqb5lr txvbqb1cu txvbqb2nn txvbqb6rp", t = "txvbqbl9n txvbqbl6d txvbqbd73", n = "txvbqb5lr txvbqb6m5 txvbqb6rp txvbqbl9n", r = "txvbqb5lr txvbqb1cu txvbqb2nn txvbqb6rf txvbqbe1d", i = "txvbqb5lr txvbqb6m5 txvbqb6rz", a = "txvbqb5lr txvbqb6m5 txvbqb84b txvbqbd9v", o = "txvbqb5lr txvbqb2nn txvbqb6rp txvbqbgg txvbqbiqj txvbqbjg3 txvbqb8q9 txvbqblh txvbqbmx txvbqbiz txvbqbn1 txvbqba9 txvbqbe7 txvbqb6nj txvbqb1rl", s = "txvbqb6nt txvbqb1d5 txvbqbe6";
2
+ var e = "txvbqb5m2 txvbqb1d5 txvbqb2ny txvbqb6sa", t = "txvbqbla8 txvbqbl6y txvbqbd7o", n = "txvbqb5m2 txvbqb6mq txvbqb6sa txvbqbla8", r = "txvbqb5m2 txvbqb1d5 txvbqb2ny txvbqb6s0 txvbqbe1y", i = "txvbqb5m2 txvbqb6mq txvbqb6sk", a = "txvbqb5m2 txvbqb6mq txvbqb84w txvbqbdag", o = "txvbqb5m2 txvbqb2ny txvbqb6sa txvbqbgr txvbqbir4 txvbqbjgo txvbqb8qu txvbqbls txvbqbn8 txvbqbja txvbqbnc txvbqbak txvbqbei txvbqb6o4 txvbqb1rw", s = "txvbqb6oe txvbqb1dg txvbqbeh";
3
3
  //#endregion
4
4
  export { e as controlsRow, i as embeddedContainer, s as embeddedHeader, n as entityIdListFilter, r as entityIdListTags, t as filterInput, o as refreshingIndicator, a as tableHost };
5
5
 
@@ -1,5 +1,5 @@
1
1
  //#region src/components/backoffice/scaffolds/backofficeTabbedDetailShell.css.ts
2
- var e = "txvbqb5lr", t = "txvbqb5lr txvbqb6m5 txvbqb6s9";
2
+ var e = "txvbqb5m2", t = "txvbqb5m2 txvbqb6mq txvbqb6su";
3
3
  //#endregion
4
4
  export { t as tabBody, e as tabs };
5
5
 
@@ -1,15 +1,15 @@
1
1
  /* empty css */
2
2
  import { c as e } from "../../../node_modules/@vanilla-extract/recipes/dist/createRuntimeFn-62c9670f.esm.js";
3
3
  //#region src/components/backoffice/shared/backofficeFilterableCell.css.ts
4
- var t = "_1q232kj0 txvbqb2nn txvbqb19v txvbqbd73 txvbqbe1d txvbqb84", n = "txvbqb5ml txvbqb2nn txvbqb8o1", r = "txvbqb5ml txvbqb2nn txvbqb6rf txvbqbe1d txvbqbd73", i = e({
5
- defaultClassName: "_1q232kj1 txvbqbe1d txvbqbd73",
4
+ var t = "_1q232kj0 txvbqb2ny txvbqb1a6 txvbqbd7o txvbqbe1y txvbqb8f", n = "txvbqb5mw txvbqb2ny txvbqb8om", r = "txvbqb5mw txvbqb2ny txvbqb6s0 txvbqbe1y txvbqbd7o", i = e({
5
+ defaultClassName: "_1q232kj1 txvbqbe1y txvbqbd7o",
6
6
  variantClassNames: { wrap: {
7
- false: "_1q232kj2 txvbqbf3z txvbqb2lw txvbqb2mf",
8
- true: "_1q232kj3 txvbqb2mg txvbqb2m1"
7
+ false: "_1q232kj2 txvbqbf4k txvbqb2m7 txvbqb2mq",
8
+ true: "_1q232kj3 txvbqb2mr txvbqb2mc"
9
9
  } },
10
10
  defaultVariants: { wrap: !1 },
11
11
  compoundVariants: []
12
- }), a = "_1q232kj4 qbwcue10 qbwcuey txvbqb5ml txvbqb2nn txvbqb6rf txvbqbe6 txvbqb3f txvbqb7n txvbqb76 txvbqb7y qbwcuez txvbqbpw9 qbwcue5 qbwcue4 txvbqboz8 txvbqbptg qbwcue3 txvbqbe1d txvbqbd73 txvbqbet txvbqb1d5 txvbqbo81", o = "txvbqb1cr txvbqbe7 txvbqblmz txvbqb8hn";
12
+ }), a = "_1q232kj4 qbwcue10 qbwcuey txvbqb5mw txvbqb2ny txvbqb6s0 txvbqbeh txvbqb3p txvbqb7y txvbqb7h txvbqb89 qbwcuez txvbqbpwu qbwcue5 qbwcue4 txvbqbozt txvbqbpu1 qbwcue3 txvbqbe1y txvbqbd7o txvbqbf4 txvbqb1dg txvbqbo8m", o = "txvbqb1d2 txvbqbei txvbqblnk txvbqb8i8";
13
13
  //#endregion
14
14
  export { n as actionSlot, t as container, r as contentSlot, o as detailIcon, a as detailLink, i as text };
15
15
 
@@ -1,5 +1,5 @@
1
1
  //#region src/components/backoffice/shared/backofficeInlineFilterRow.css.ts
2
- var e = "txvbqb5ml txvbqb2nn txvbqb6rf txvbqb1ct txvbqbd73 txvbqbe1d txvbqbf3z", t = "txvbqb5ml txvbqb2nn txvbqb8o1 txvbqb1cr", n = "txvbqbe1d txvbqbd73 txvbqbf3z txvbqb2lw txvbqb2mf";
2
+ var e = "txvbqb5mw txvbqb2ny txvbqb6s0 txvbqb1d4 txvbqbd7o txvbqbe1y txvbqbf4k", t = "txvbqb5mw txvbqb2ny txvbqb8om txvbqb1d2", n = "txvbqbe1y txvbqbd7o txvbqbf4k txvbqb2m7 txvbqb2mq";
3
3
  //#endregion
4
4
  export { t as actionSlot, e as container, n as valueSlot };
5
5
 
@@ -27,7 +27,7 @@ var f = ({ title: f, content: p, language: m, badgeLabel: h, defaultOpen: g = !1
27
27
  className: c(n, { [r]: v })
28
28
  })]
29
29
  }), v && /* @__PURE__ */ l("div", {
30
- className: "txvbqb571 txvbqbmx txvbqbps txvbqbaa txvbqbe1d txvbqb20c txvbqbf5n",
30
+ className: "txvbqb57c txvbqbn8 txvbqbq3 txvbqbal txvbqbe1y txvbqb20n txvbqbf68",
31
31
  id: b,
32
32
  children: /* @__PURE__ */ l(s, {
33
33
  code: _,
@@ -1,4 +1,5 @@
1
- import { Fragment as e, jsx as t, jsxs as n } from "react/jsx-runtime";
1
+ import { Stack as e } from "@plumile/ui";
2
+ import { jsx as t, jsxs as n } from "react/jsx-runtime";
2
3
  import { useTranslation as r } from "react-i18next";
3
4
  import { Button as i } from "@plumile/ui/button";
4
5
  import { BackofficeDetailSection as a } from "@plumile/ui/backoffice/molecules/backoffice_detail_section/BackofficeDetailSection.js";
@@ -1 +1 @@
1
- {"version":3,"file":"BackofficeToolsErrorFallback.js","names":[],"sources":["../../../../../src/components/backoffice/tools/BackofficeToolsErrorFallback.tsx"],"sourcesContent":["import { type JSX } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport { Button } from '@plumile/ui/button';\nimport { BackofficeDetailSection } from '@plumile/ui/backoffice/molecules/backoffice_detail_section/BackofficeDetailSection.js';\nimport { BackofficePayloadViewer } from '@plumile/ui/backoffice/molecules/backoffice_payload_viewer/BackofficePayloadViewer.js';\n\nexport type BackofficeToolsErrorFallbackProps = {\n error: unknown;\n onRetry: () => void;\n};\n\nconst resolveErrorDetails = (error: unknown): string | null => {\n if (error instanceof Error) {\n if (error.stack != null && error.stack.trim() !== '') {\n return error.stack;\n }\n if (error.name !== '' && error.message !== '') {\n return `${error.name}: ${error.message}`;\n }\n if (error.message !== '') {\n return error.message;\n }\n return null;\n }\n\n if (typeof error === 'string') {\n return error;\n }\n\n try {\n return JSON.stringify(error, null, 2);\n } catch {\n return String(error);\n }\n};\n\nexport const BackofficeToolsErrorFallback = ({\n error,\n onRetry,\n}: BackofficeToolsErrorFallbackProps): JSX.Element => {\n const { t } = useTranslation('backofficeReact');\n let message = t('tools.errors.unknown');\n if (error instanceof Error) {\n message = error.message;\n }\n const details = resolveErrorDetails(error);\n let detailsContent: string | null = null;\n if (details != null) {\n const trimmed = details.trim();\n if (trimmed !== '' && trimmed !== message) {\n detailsContent = `\\`\\`\\`\\n${trimmed}\\n\\`\\`\\``;\n }\n }\n\n return (\n <>\n <BackofficeDetailSection\n title={t('tools.errors.title')}\n description={t('tools.errors.description')}\n items={[\n {\n id: 'error',\n label: t('tools.errors.label'),\n size: 'fluid',\n value: message,\n },\n ]}\n >\n <Button\n type=\"button\"\n variant=\"soft\"\n size=\"small\"\n onClick={onRetry}\n tone=\"neutral\"\n >\n {t('common.actions.retry')}\n </Button>\n </BackofficeDetailSection>\n {detailsContent != null && (\n <BackofficeDetailSection title={t('tools.errors.details')}>\n <BackofficePayloadViewer content={detailsContent} format=\"markdown\" />\n </BackofficeDetailSection>\n )}\n </>\n );\n};\n\nexport default BackofficeToolsErrorFallback;\n"],"mappings":";;;;;;AAYA,IAAM,KAAuB,MAAkC;CAC7D,IAAI,aAAiB,OAUnB,OATI,EAAM,SAAS,QAAQ,EAAM,MAAM,KAAK,MAAM,KACzC,EAAM,QAEX,EAAM,SAAS,MAAM,EAAM,YAAY,KAClC,GAAG,EAAM,KAAK,IAAI,EAAM,YAE7B,EAAM,YAAY,KAGf,OAFE,EAAM;CAKjB,IAAI,OAAO,KAAU,UACnB,OAAO;CAGT,IAAI;EACF,OAAO,KAAK,UAAU,GAAO,MAAM,CAAC;CACtC,QAAQ;EACN,OAAO,OAAO,CAAK;CACrB;AACF,GAEa,KAAgC,EAC3C,UACA,iBACoD;CACpD,IAAM,EAAE,SAAM,EAAe,iBAAiB,GAC1C,IAAU,EAAE,sBAAsB;CACtC,AAAI,aAAiB,UACnB,IAAU,EAAM;CAElB,IAAM,IAAU,EAAoB,CAAK,GACrC,IAAgC;CACpC,IAAI,KAAW,MAAM;EACnB,IAAM,IAAU,EAAQ,KAAK;EAC7B,AAAI,MAAY,MAAM,MAAY,MAChC,IAAiB,WAAW,EAAQ;CAExC;CAEA,OACE,kBAAA,GAAA,EAAA,UAAA,CACE,kBAAC,GAAD;EACE,OAAO,EAAE,oBAAoB;EAC7B,aAAa,EAAE,0BAA0B;EACzC,OAAO,CACL;GACE,IAAI;GACJ,OAAO,EAAE,oBAAoB;GAC7B,MAAM;GACN,OAAO;EACT,CACF;EAEA,UAAA,kBAAC,GAAD;GACE,MAAK;GACL,SAAQ;GACR,MAAK;GACL,SAAS;GACT,MAAK;GAEJ,UAAA,EAAE,sBAAsB;EACnB,CAAA;CACe,CAAA,GACxB,KAAkB,QACjB,kBAAC,GAAD;EAAyB,OAAO,EAAE,sBAAsB;EACtD,UAAA,kBAAC,GAAD;GAAyB,SAAS;GAAgB,QAAO;EAAY,CAAA;CAC9C,CAAA,CAE3B,EAAA,CAAA;AAEN"}
1
+ {"version":3,"file":"BackofficeToolsErrorFallback.js","names":[],"sources":["../../../../../src/components/backoffice/tools/BackofficeToolsErrorFallback.tsx"],"sourcesContent":["import { type JSX } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport { Button } from '@plumile/ui/button';\nimport { Stack } from '@plumile/ui';\nimport { BackofficeDetailSection } from '@plumile/ui/backoffice/molecules/backoffice_detail_section/BackofficeDetailSection.js';\nimport { BackofficePayloadViewer } from '@plumile/ui/backoffice/molecules/backoffice_payload_viewer/BackofficePayloadViewer.js';\n\nexport type BackofficeToolsErrorFallbackProps = {\n error: unknown;\n onRetry: () => void;\n};\n\nconst resolveErrorDetails = (error: unknown): string | null => {\n if (error instanceof Error) {\n if (error.stack != null && error.stack.trim() !== '') {\n return error.stack;\n }\n if (error.name !== '' && error.message !== '') {\n return `${error.name}: ${error.message}`;\n }\n if (error.message !== '') {\n return error.message;\n }\n return null;\n }\n\n if (typeof error === 'string') {\n return error;\n }\n\n try {\n return JSON.stringify(error, null, 2);\n } catch {\n return String(error);\n }\n};\n\nexport const BackofficeToolsErrorFallback = ({\n error,\n onRetry,\n}: BackofficeToolsErrorFallbackProps): JSX.Element => {\n const { t } = useTranslation('backofficeReact');\n let message = t('tools.errors.unknown');\n if (error instanceof Error) {\n message = error.message;\n }\n const details = resolveErrorDetails(error);\n let detailsContent: string | null = null;\n if (details != null) {\n const trimmed = details.trim();\n if (trimmed !== '' && trimmed !== message) {\n detailsContent = `\\`\\`\\`\\n${trimmed}\\n\\`\\`\\``;\n }\n }\n\n return (\n <Stack>\n <BackofficeDetailSection\n title={t('tools.errors.title')}\n description={t('tools.errors.description')}\n items={[\n {\n id: 'error',\n label: t('tools.errors.label'),\n size: 'fluid',\n value: message,\n },\n ]}\n >\n <Button\n type=\"button\"\n variant=\"soft\"\n size=\"small\"\n onClick={onRetry}\n tone=\"neutral\"\n >\n {t('common.actions.retry')}\n </Button>\n </BackofficeDetailSection>\n {detailsContent != null && (\n <BackofficeDetailSection title={t('tools.errors.details')}>\n <BackofficePayloadViewer content={detailsContent} format=\"markdown\" />\n </BackofficeDetailSection>\n )}\n </Stack>\n );\n};\n\nexport default BackofficeToolsErrorFallback;\n"],"mappings":";;;;;;;AAaA,IAAM,KAAuB,MAAkC;CAC7D,IAAI,aAAiB,OAUnB,OATI,EAAM,SAAS,QAAQ,EAAM,MAAM,KAAK,MAAM,KACzC,EAAM,QAEX,EAAM,SAAS,MAAM,EAAM,YAAY,KAClC,GAAG,EAAM,KAAK,IAAI,EAAM,YAE7B,EAAM,YAAY,KAGf,OAFE,EAAM;CAKjB,IAAI,OAAO,KAAU,UACnB,OAAO;CAGT,IAAI;EACF,OAAO,KAAK,UAAU,GAAO,MAAM,CAAC;CACtC,QAAQ;EACN,OAAO,OAAO,CAAK;CACrB;AACF,GAEa,KAAgC,EAC3C,UACA,iBACoD;CACpD,IAAM,EAAE,SAAM,EAAe,iBAAiB,GAC1C,IAAU,EAAE,sBAAsB;CACtC,AAAI,aAAiB,UACnB,IAAU,EAAM;CAElB,IAAM,IAAU,EAAoB,CAAK,GACrC,IAAgC;CACpC,IAAI,KAAW,MAAM;EACnB,IAAM,IAAU,EAAQ,KAAK;EAC7B,AAAI,MAAY,MAAM,MAAY,MAChC,IAAiB,WAAW,EAAQ;CAExC;CAEA,OACE,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD;EACE,OAAO,EAAE,oBAAoB;EAC7B,aAAa,EAAE,0BAA0B;EACzC,OAAO,CACL;GACE,IAAI;GACJ,OAAO,EAAE,oBAAoB;GAC7B,MAAM;GACN,OAAO;EACT,CACF;EAEA,UAAA,kBAAC,GAAD;GACE,MAAK;GACL,SAAQ;GACR,MAAK;GACL,SAAS;GACT,MAAK;GAEJ,UAAA,EAAE,sBAAsB;EACnB,CAAA;CACe,CAAA,GACxB,KAAkB,QACjB,kBAAC,GAAD;EAAyB,OAAO,EAAE,sBAAsB;EACtD,UAAA,kBAAC,GAAD;GAAyB,SAAS;GAAgB,QAAO;EAAY,CAAA;CAC9C,CAAA,CAEtB,EAAA,CAAA;AAEX"}
@@ -1,6 +1,6 @@
1
1
  /* empty css */
2
2
  //#region src/components/backoffice/tools/backofficeToolsDocPanel.css.ts
3
- var e = "txvbqb5lr txvbqb6m5 txvbqb6rz", t = "txvbqble txvbqbmx txvbqbiy txvbqbn2 txvbqba9 txvbqbe1d txvbqbf3z", n = "_8o9eh80 txvbqbl9n txvbqb5lr txvbqb2nn txvbqb8ov txvbqb6rp txvbqbjgn txvbqbir3 txvbqb8n txvbqbk9 txvbqbmv txvbqbe6 txvbqbv txvbqb2lt", r = "txvbqb6nt txvbqb1d5", i = "txvbqbe7 txvbqb7u txvbqb76 txvbqb7y", a = "txvbqb30", o = "txvbqb571 txvbqbmx txvbqbps txvbqbaa txvbqbe1d txvbqb20c txvbqbf5n";
3
+ var e = "txvbqb5m2 txvbqb6mq txvbqb6sk", t = "txvbqblp txvbqbn8 txvbqbj9 txvbqbnd txvbqbak txvbqbe1y txvbqbf4k", n = "_8o9eh80 txvbqbla8 txvbqb5m2 txvbqb2ny txvbqb8pg txvbqb6sa txvbqbjh8 txvbqbiro txvbqb8y txvbqbkk txvbqbn6 txvbqbeh txvbqbv txvbqb2m4", r = "txvbqb6oe txvbqb1dg", i = "txvbqbei txvbqb85 txvbqb7h txvbqb89", a = "txvbqb3a", o = "txvbqb57c txvbqbn8 txvbqbq3 txvbqbal txvbqbe1y txvbqb20n txvbqbf68";
4
4
  //#endregion
5
5
  export { o as content, t as panel, e as panelGroup, n as trigger, i as triggerIcon, a as triggerIconOpen, r as triggerTitle };
6
6
 
@@ -1,5 +1,5 @@
1
1
  //#region src/components/backoffice/tools/backofficeToolsForm.css.ts
2
- var e = "txvbqb5lr txvbqb6m5 txvbqb6rz", t = "txvbqb5lr txvbqb8p5 txvbqb8oc", n = "txvbqb5lr txvbqb2nn txvbqb8ov txvbqb1cu txvbqb6rp", r = "txvbqb5lr txvbqb6m5 txvbqb6rz", i = "txvbqb5m1 txvbqb6s9 txvbqb7qf", a = "txvbqb5lr txvbqb8o1 txvbqbjh7";
2
+ var e = "txvbqb5m2 txvbqb6mq txvbqb6sk", t = "txvbqb5m2 txvbqb8pq txvbqb8ox", n = "txvbqb5m2 txvbqb2ny txvbqb8pg txvbqb1d5 txvbqb6sa", r = "txvbqb5m2 txvbqb6mq txvbqb6sk", i = "txvbqb5mc txvbqb6su txvbqb7r0", a = "txvbqb5m2 txvbqb8om txvbqbjhs";
3
3
  //#endregion
4
4
  export { t as actions, e as form, n as inputHeader, i as keyValueGrid, a as loadingState, r as outputStack };
5
5
 
@@ -1,5 +1,5 @@
1
1
  //#region src/components/backoffice/tools/backofficeToolsJsonForm.css.ts
2
- var e = "txvbqb5lr txvbqb6m5 txvbqb6s9", t = "txvbqb5lr txvbqb8p5 txvbqb8oc", n = "txvbqb5lr txvbqb2nn txvbqb8ov txvbqb1cu txvbqb6rp";
2
+ var e = "txvbqb5m2 txvbqb6mq txvbqb6su", t = "txvbqb5m2 txvbqb8pq txvbqb8ox", n = "txvbqb5m2 txvbqb2ny txvbqb8pg txvbqb1d5 txvbqb6sa";
3
3
  //#endregion
4
4
  export { t as actions, e as form, n as inputHeader };
5
5
 
@@ -52,7 +52,7 @@ var i = "backoffice.sidebar.pins.v1", a = (e) => {
52
52
  u,
53
53
  f
54
54
  ]), t(() => {
55
- if (!(!l || typeof window > "u")) try {
55
+ if (l && typeof window < "u") try {
56
56
  window.localStorage.setItem(u, JSON.stringify(p));
57
57
  } catch {}
58
58
  }, [
@@ -1 +1 @@
1
- {"version":3,"file":"useBackofficeSidebarPins.js","names":[],"sources":["../../../src/hooks/useBackofficeSidebarPins.ts"],"sourcesContent":["import { useCallback, useEffect, useMemo, useState } from 'react';\n\nconst DEFAULT_STORAGE_KEY = 'backoffice.sidebar.pins.v1';\n\ntype PinsPayload = unknown;\n\nconst readPinsFromStorage = (storageKey: string): string[] => {\n if (typeof window === 'undefined') {\n return [];\n }\n try {\n const raw = window.localStorage.getItem(storageKey);\n if (raw == null) {\n return [];\n }\n const parsed = JSON.parse(raw) as PinsPayload;\n if (!Array.isArray(parsed)) {\n return [];\n }\n return parsed.filter((entry): entry is string => {\n return typeof entry === 'string';\n });\n } catch {\n return [];\n }\n};\n\nconst normalizePins = (\n pins: readonly string[],\n validIds: Set<string>,\n): string[] => {\n const output: string[] = [];\n const seen = new Set<string>();\n pins.forEach((entry) => {\n if (!validIds.has(entry)) {\n return;\n }\n if (seen.has(entry)) {\n return;\n }\n seen.add(entry);\n output.push(entry);\n });\n return output;\n};\n\nconst reorderPins = (\n pins: readonly string[],\n fromId: string,\n toId: string,\n): readonly string[] => {\n if (fromId === toId) {\n return pins;\n }\n const fromIndex = pins.indexOf(fromId);\n const toIndex = pins.indexOf(toId);\n if (fromIndex === -1 || toIndex === -1 || fromIndex === toIndex) {\n return pins;\n }\n const next = [...pins];\n next.splice(fromIndex, 1);\n next.splice(toIndex, 0, fromId);\n return next;\n};\n\nexport type SidebarPinsState = {\n pins: readonly string[];\n isPinned: (id: string) => boolean;\n pin: (id: string) => void;\n unpin: (id: string) => void;\n toggle: (id: string) => void;\n reorder: (fromId: string, toId: string) => void;\n};\n\nexport type UseBackofficeSidebarPinsInput = {\n enabled?: boolean;\n storageKey?: string;\n visibleEntityIds: readonly string[];\n};\n\nexport const useBackofficeSidebarPins = (\n input: UseBackofficeSidebarPinsInput,\n): SidebarPinsState => {\n const {\n enabled = true,\n storageKey = DEFAULT_STORAGE_KEY,\n visibleEntityIds,\n } = input;\n const validIds = useMemo(() => {\n return new Set(visibleEntityIds);\n }, [visibleEntityIds]);\n\n const [pins, setPins] = useState<string[]>(() => {\n if (!enabled) {\n return [];\n }\n const stored = readPinsFromStorage(storageKey);\n return normalizePins(stored, validIds);\n });\n\n useEffect(() => {\n if (!enabled) {\n setPins([]);\n return;\n }\n setPins((prev) => {\n const normalized = normalizePins(prev, validIds);\n if (normalized.length === prev.length) {\n let unchanged = true;\n for (let index = 0; index < normalized.length; index += 1) {\n if (normalized[index] !== prev[index]) {\n unchanged = false;\n break;\n }\n }\n if (unchanged) {\n return prev;\n }\n }\n return normalized;\n });\n }, [enabled, validIds]);\n\n useEffect(() => {\n if (!enabled) {\n setPins([]);\n return;\n }\n const stored = readPinsFromStorage(storageKey);\n setPins(normalizePins(stored, validIds));\n }, [enabled, storageKey, validIds]);\n\n useEffect(() => {\n if (!enabled || typeof window === 'undefined') {\n return;\n }\n try {\n window.localStorage.setItem(storageKey, JSON.stringify(pins));\n } catch {\n // Ignore storage errors in non-browser or restricted environments.\n }\n }, [enabled, pins, storageKey]);\n\n const pinsSet = useMemo(() => {\n return new Set(pins);\n }, [pins]);\n\n const pin = useCallback(\n (id: string) => {\n if (!enabled) {\n return;\n }\n if (!validIds.has(id)) {\n return;\n }\n setPins((prev) => {\n if (prev.includes(id)) {\n return prev;\n }\n return [...prev, id];\n });\n },\n [enabled, validIds],\n );\n\n const unpin = useCallback(\n (id: string) => {\n if (!enabled) {\n return;\n }\n setPins((prev) => {\n return prev.filter((entry) => {\n return entry !== id;\n });\n });\n },\n [enabled],\n );\n\n const toggle = useCallback(\n (id: string) => {\n if (pinsSet.has(id)) {\n unpin(id);\n } else {\n pin(id);\n }\n },\n [pin, pinsSet, unpin],\n );\n\n const reorder = useCallback(\n (fromId: string, toId: string) => {\n if (!enabled) {\n return;\n }\n setPins((prev) => {\n return reorderPins(prev, fromId, toId) as string[];\n });\n },\n [enabled],\n );\n\n const isPinned = useCallback(\n (id: string) => {\n return pinsSet.has(id);\n },\n [pinsSet],\n );\n\n return {\n pins,\n isPinned,\n pin,\n unpin,\n toggle,\n reorder,\n };\n};\n\nexport const __test = {\n normalizePins,\n readPinsFromStorage,\n reorderPins,\n};\n\nexport default useBackofficeSidebarPins;\n"],"mappings":"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"}
1
+ {"version":3,"file":"useBackofficeSidebarPins.js","names":[],"sources":["../../../src/hooks/useBackofficeSidebarPins.ts"],"sourcesContent":["import { useCallback, useEffect, useMemo, useState } from 'react';\n\nconst DEFAULT_STORAGE_KEY = 'backoffice.sidebar.pins.v1';\n\ntype PinsPayload = unknown;\n\nconst readPinsFromStorage = (storageKey: string): string[] => {\n if (typeof window === 'undefined') {\n return [];\n }\n try {\n const raw = window.localStorage.getItem(storageKey);\n if (raw == null) {\n return [];\n }\n const parsed = JSON.parse(raw) as PinsPayload;\n if (!Array.isArray(parsed)) {\n return [];\n }\n return parsed.filter((entry): entry is string => {\n return typeof entry === 'string';\n });\n } catch {\n return [];\n }\n};\n\nconst normalizePins = (\n pins: readonly string[],\n validIds: Set<string>,\n): string[] => {\n const output: string[] = [];\n const seen = new Set<string>();\n pins.forEach((entry) => {\n if (!validIds.has(entry)) {\n return;\n }\n if (seen.has(entry)) {\n return;\n }\n seen.add(entry);\n output.push(entry);\n });\n return output;\n};\n\nconst reorderPins = (\n pins: readonly string[],\n fromId: string,\n toId: string,\n): readonly string[] => {\n if (fromId === toId) {\n return pins;\n }\n const fromIndex = pins.indexOf(fromId);\n const toIndex = pins.indexOf(toId);\n if (fromIndex === -1 || toIndex === -1 || fromIndex === toIndex) {\n return pins;\n }\n const next = [...pins];\n next.splice(fromIndex, 1);\n next.splice(toIndex, 0, fromId);\n return next;\n};\n\nexport type SidebarPinsState = {\n pins: readonly string[];\n isPinned: (id: string) => boolean;\n pin: (id: string) => void;\n unpin: (id: string) => void;\n toggle: (id: string) => void;\n reorder: (fromId: string, toId: string) => void;\n};\n\nexport type UseBackofficeSidebarPinsInput = {\n enabled?: boolean;\n storageKey?: string;\n visibleEntityIds: readonly string[];\n};\n\nexport const useBackofficeSidebarPins = (\n input: UseBackofficeSidebarPinsInput,\n): SidebarPinsState => {\n const {\n enabled = true,\n storageKey = DEFAULT_STORAGE_KEY,\n visibleEntityIds,\n } = input;\n const validIds = useMemo(() => {\n return new Set(visibleEntityIds);\n }, [visibleEntityIds]);\n\n const [pins, setPins] = useState<string[]>(() => {\n if (!enabled) {\n return [];\n }\n const stored = readPinsFromStorage(storageKey);\n return normalizePins(stored, validIds);\n });\n\n useEffect(() => {\n if (!enabled) {\n setPins([]);\n return;\n }\n setPins((prev) => {\n const normalized = normalizePins(prev, validIds);\n if (normalized.length === prev.length) {\n let unchanged = true;\n for (let index = 0; index < normalized.length; index += 1) {\n if (normalized[index] !== prev[index]) {\n unchanged = false;\n break;\n }\n }\n if (unchanged) {\n return prev;\n }\n }\n return normalized;\n });\n }, [enabled, validIds]);\n\n useEffect(() => {\n if (!enabled) {\n setPins([]);\n return;\n }\n const stored = readPinsFromStorage(storageKey);\n setPins(normalizePins(stored, validIds));\n }, [enabled, storageKey, validIds]);\n\n useEffect(() => {\n if (!enabled || typeof window === 'undefined') {\n return;\n }\n try {\n window.localStorage.setItem(storageKey, JSON.stringify(pins));\n } catch {\n // Ignore storage errors in non-browser or restricted environments.\n }\n }, [enabled, pins, storageKey]);\n\n const pinsSet = useMemo(() => {\n return new Set(pins);\n }, [pins]);\n\n const pin = useCallback(\n (id: string) => {\n if (!enabled) {\n return;\n }\n if (!validIds.has(id)) {\n return;\n }\n setPins((prev) => {\n if (prev.includes(id)) {\n return prev;\n }\n return [...prev, id];\n });\n },\n [enabled, validIds],\n );\n\n const unpin = useCallback(\n (id: string) => {\n if (!enabled) {\n return;\n }\n setPins((prev) => {\n return prev.filter((entry) => {\n return entry !== id;\n });\n });\n },\n [enabled],\n );\n\n const toggle = useCallback(\n (id: string) => {\n if (pinsSet.has(id)) {\n unpin(id);\n } else {\n pin(id);\n }\n },\n [pin, pinsSet, unpin],\n );\n\n const reorder = useCallback(\n (fromId: string, toId: string) => {\n if (!enabled) {\n return;\n }\n setPins((prev) => {\n return reorderPins(prev, fromId, toId) as string[];\n });\n },\n [enabled],\n );\n\n const isPinned = useCallback(\n (id: string) => {\n return pinsSet.has(id);\n },\n [pinsSet],\n );\n\n return {\n pins,\n isPinned,\n pin,\n unpin,\n toggle,\n reorder,\n };\n};\n\nexport const __test = {\n normalizePins,\n readPinsFromStorage,\n reorderPins,\n};\n\nexport default useBackofficeSidebarPins;\n"],"mappings":"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"}
@@ -43,7 +43,7 @@ var i = (e) => {
43
43
  c,
44
44
  f
45
45
  ]), t(() => {
46
- if (!(!u || d == null || typeof window > "u")) try {
46
+ if (u && d != null && typeof window < "u") try {
47
47
  window.localStorage.setItem(d, JSON.stringify(p));
48
48
  } catch {}
49
49
  }, [
@@ -1 +1 @@
1
- {"version":3,"file":"useSidebarGroupCollapse.js","names":[],"sources":["../../../src/hooks/useSidebarGroupCollapse.ts"],"sourcesContent":["import { useCallback, useEffect, useMemo, useState } from 'react';\n\nexport type SidebarGroupCollapseState = Record<string, boolean | undefined>;\n\nexport type UseSidebarGroupCollapseInput = {\n groupIds: readonly string[];\n activeGroupId?: string | null;\n defaultCollapsedByGroupId?: Record<string, boolean | undefined>;\n storageKey?: string;\n persist?: boolean;\n};\n\nconst readStoredState = (\n storageKey: string | undefined,\n): SidebarGroupCollapseState | null => {\n if (storageKey == null || typeof window === 'undefined') {\n return null;\n }\n try {\n const raw = window.localStorage.getItem(storageKey);\n if (raw == null) {\n return null;\n }\n const parsed = JSON.parse(raw) as unknown;\n if (parsed == null || typeof parsed !== 'object') {\n return null;\n }\n const output: SidebarGroupCollapseState = {};\n Object.entries(parsed as Record<string, unknown>).forEach(\n ([key, value]) => {\n if (typeof value === 'boolean') {\n output[key] = value;\n }\n },\n );\n return output;\n } catch {\n return null;\n }\n};\n\nconst buildInitialState = (\n groupIds: readonly string[],\n activeGroupId?: string | null,\n defaultCollapsedByGroupId?: Record<string, boolean | undefined>,\n): SidebarGroupCollapseState => {\n const state: SidebarGroupCollapseState = {};\n groupIds.forEach((groupId) => {\n state[groupId] = defaultCollapsedByGroupId?.[groupId] ?? true;\n });\n if (activeGroupId != null && groupIds.includes(activeGroupId)) {\n state[activeGroupId] = false;\n }\n return state;\n};\n\nexport const useSidebarGroupCollapse = (\n input: UseSidebarGroupCollapseInput,\n): {\n collapsedByGroupId: SidebarGroupCollapseState;\n setCollapsed: (groupId: string, collapsed: boolean) => void;\n} => {\n const {\n activeGroupId,\n defaultCollapsedByGroupId,\n groupIds,\n persist = false,\n storageKey,\n } = input;\n\n const groupIdList = useMemo(() => {\n return [...groupIds];\n }, [groupIds]);\n\n const [collapsedByGroupId, setCollapsedByGroupId] =\n useState<SidebarGroupCollapseState>(() => {\n if (persist) {\n const stored = readStoredState(storageKey);\n if (stored != null) {\n return {\n ...buildInitialState(\n groupIdList,\n activeGroupId,\n defaultCollapsedByGroupId,\n ),\n ...stored,\n };\n }\n }\n return buildInitialState(\n groupIdList,\n activeGroupId,\n defaultCollapsedByGroupId,\n );\n });\n\n useEffect(() => {\n setCollapsedByGroupId((prev) => {\n const next: SidebarGroupCollapseState = {};\n\n groupIdList.forEach((groupId) => {\n const existing = prev[groupId];\n next[groupId] =\n existing ?? defaultCollapsedByGroupId?.[groupId] ?? true;\n });\n\n if (activeGroupId != null && groupIdList.includes(activeGroupId)) {\n next[activeGroupId] = false;\n }\n\n return next;\n });\n }, [activeGroupId, defaultCollapsedByGroupId, groupIdList]);\n\n useEffect(() => {\n if (!persist || storageKey == null || typeof window === 'undefined') {\n return;\n }\n try {\n window.localStorage.setItem(\n storageKey,\n JSON.stringify(collapsedByGroupId),\n );\n } catch {\n // Ignore storage quota / privacy mode failures.\n }\n }, [collapsedByGroupId, persist, storageKey]);\n\n useEffect(() => {\n if (activeGroupId == null) {\n return;\n }\n setCollapsedByGroupId((prev) => {\n if (prev[activeGroupId] === false) {\n return prev;\n }\n return {\n ...prev,\n [activeGroupId]: false,\n };\n });\n }, [activeGroupId]);\n\n const setCollapsed = useCallback((groupId: string, collapsed: boolean) => {\n setCollapsedByGroupId((prev) => {\n if (prev[groupId] === collapsed) {\n return prev;\n }\n return {\n ...prev,\n [groupId]: collapsed,\n };\n });\n }, []);\n\n return {\n collapsedByGroupId,\n setCollapsed,\n };\n};\n\nexport default useSidebarGroupCollapse;\n"],"mappings":";;AAYA,IAAM,KACJ,MACqC;CACrC,IAAI,KAAc,QAAQ,OAAO,SAAW,KAC1C,OAAO;CAET,IAAI;EACF,IAAM,IAAM,OAAO,aAAa,QAAQ,CAAU;EAClD,IAAI,KAAO,MACT,OAAO;EAET,IAAM,IAAS,KAAK,MAAM,CAAG;EAC7B,IAAsB,OAAO,KAAW,aAApC,GACF,OAAO;EAET,IAAM,IAAoC,CAAC;EAQ3C,OAPA,OAAO,QAAQ,CAAiC,CAAC,CAAC,SAC/C,CAAC,GAAK,OAAW;GAChB,AAAI,OAAO,KAAU,cACnB,EAAO,KAAO;EAElB,CACF,GACO;CACT,QAAQ;EACN,OAAO;CACT;AACF,GAEM,KACJ,GACA,GACA,MAC8B;CAC9B,IAAM,IAAmC,CAAC;CAO1C,OANA,EAAS,SAAS,MAAY;EAC5B,EAAM,KAAW,IAA4B,MAAY;CAC3D,CAAC,GACG,KAAiB,QAAQ,EAAS,SAAS,CAAa,MAC1D,EAAM,KAAiB,KAElB;AACT,GAEa,KACX,MAIG;CACH,IAAM,EACJ,kBACA,8BACA,aACA,aAAU,IACV,kBACE,GAEE,IAAc,QACX,CAAC,GAAG,CAAQ,GAClB,CAAC,CAAQ,CAAC,GAEP,CAAC,GAAoB,KACzB,QAA0C;EACxC,IAAI,GAAS;GACX,IAAM,IAAS,EAAgB,CAAU;GACzC,IAAI,KAAU,MACZ,OAAO;IACL,GAAG,EACD,GACA,GACA,CACF;IACA,GAAG;GACL;EAEJ;EACA,OAAO,EACL,GACA,GACA,CACF;CACF,CAAC;CA6DH,OA3DA,QAAgB;EACd,GAAuB,MAAS;GAC9B,IAAM,IAAkC,CAAC;GAYzC,OAVA,EAAY,SAAS,MAAY;IAC/B,IAAM,IAAW,EAAK;IACtB,EAAK,KACH,KAAY,IAA4B,MAAY;GACxD,CAAC,GAEG,KAAiB,QAAQ,EAAY,SAAS,CAAa,MAC7D,EAAK,KAAiB,KAGjB;EACT,CAAC;CACH,GAAG;EAAC;EAAe;EAA2B;CAAW,CAAC,GAE1D,QAAgB;EACV,OAAC,KAAW,KAAc,QAAQ,OAAO,SAAW,MAGxD,IAAI;GACF,OAAO,aAAa,QAClB,GACA,KAAK,UAAU,CAAkB,CACnC;EACF,QAAQ,CAER;CACF,GAAG;EAAC;EAAoB;EAAS;CAAU,CAAC,GAE5C,QAAgB;EACV,KAAiB,QAGrB,GAAuB,MACjB,EAAK,OAAmB,KACnB,IAEF;GACL,GAAG;IACF,IAAgB;EACnB,CACD;CACH,GAAG,CAAC,CAAa,CAAC,GAcX;EACL;EACA,cAdmB,GAAa,GAAiB,MAAuB;GACxE,GAAuB,MACjB,EAAK,OAAa,IACb,IAEF;IACL,GAAG;KACF,IAAU;GACb,CACD;EACH,GAAG,CAAC,CAIF;CACF;AACF"}
1
+ {"version":3,"file":"useSidebarGroupCollapse.js","names":[],"sources":["../../../src/hooks/useSidebarGroupCollapse.ts"],"sourcesContent":["import { useCallback, useEffect, useMemo, useState } from 'react';\n\nexport type SidebarGroupCollapseState = Record<string, boolean | undefined>;\n\nexport type UseSidebarGroupCollapseInput = {\n groupIds: readonly string[];\n activeGroupId?: string | null;\n defaultCollapsedByGroupId?: Record<string, boolean | undefined>;\n storageKey?: string;\n persist?: boolean;\n};\n\nconst readStoredState = (\n storageKey: string | undefined,\n): SidebarGroupCollapseState | null => {\n if (storageKey == null || typeof window === 'undefined') {\n return null;\n }\n try {\n const raw = window.localStorage.getItem(storageKey);\n if (raw == null) {\n return null;\n }\n const parsed = JSON.parse(raw) as unknown;\n if (parsed == null || typeof parsed !== 'object') {\n return null;\n }\n const output: SidebarGroupCollapseState = {};\n Object.entries(parsed as Record<string, unknown>).forEach(\n ([key, value]) => {\n if (typeof value === 'boolean') {\n output[key] = value;\n }\n },\n );\n return output;\n } catch {\n return null;\n }\n};\n\nconst buildInitialState = (\n groupIds: readonly string[],\n activeGroupId?: string | null,\n defaultCollapsedByGroupId?: Record<string, boolean | undefined>,\n): SidebarGroupCollapseState => {\n const state: SidebarGroupCollapseState = {};\n groupIds.forEach((groupId) => {\n state[groupId] = defaultCollapsedByGroupId?.[groupId] ?? true;\n });\n if (activeGroupId != null && groupIds.includes(activeGroupId)) {\n state[activeGroupId] = false;\n }\n return state;\n};\n\nexport const useSidebarGroupCollapse = (\n input: UseSidebarGroupCollapseInput,\n): {\n collapsedByGroupId: SidebarGroupCollapseState;\n setCollapsed: (groupId: string, collapsed: boolean) => void;\n} => {\n const {\n activeGroupId,\n defaultCollapsedByGroupId,\n groupIds,\n persist = false,\n storageKey,\n } = input;\n\n const groupIdList = useMemo(() => {\n return [...groupIds];\n }, [groupIds]);\n\n const [collapsedByGroupId, setCollapsedByGroupId] =\n useState<SidebarGroupCollapseState>(() => {\n if (persist) {\n const stored = readStoredState(storageKey);\n if (stored != null) {\n return {\n ...buildInitialState(\n groupIdList,\n activeGroupId,\n defaultCollapsedByGroupId,\n ),\n ...stored,\n };\n }\n }\n return buildInitialState(\n groupIdList,\n activeGroupId,\n defaultCollapsedByGroupId,\n );\n });\n\n useEffect(() => {\n setCollapsedByGroupId((prev) => {\n const next: SidebarGroupCollapseState = {};\n\n groupIdList.forEach((groupId) => {\n const existing = prev[groupId];\n next[groupId] =\n existing ?? defaultCollapsedByGroupId?.[groupId] ?? true;\n });\n\n if (activeGroupId != null && groupIdList.includes(activeGroupId)) {\n next[activeGroupId] = false;\n }\n\n return next;\n });\n }, [activeGroupId, defaultCollapsedByGroupId, groupIdList]);\n\n useEffect(() => {\n if (!persist || storageKey == null || typeof window === 'undefined') {\n return;\n }\n try {\n window.localStorage.setItem(\n storageKey,\n JSON.stringify(collapsedByGroupId),\n );\n } catch {\n // Ignore storage quota / privacy mode failures.\n }\n }, [collapsedByGroupId, persist, storageKey]);\n\n useEffect(() => {\n if (activeGroupId == null) {\n return;\n }\n setCollapsedByGroupId((prev) => {\n if (prev[activeGroupId] === false) {\n return prev;\n }\n return {\n ...prev,\n [activeGroupId]: false,\n };\n });\n }, [activeGroupId]);\n\n const setCollapsed = useCallback((groupId: string, collapsed: boolean) => {\n setCollapsedByGroupId((prev) => {\n if (prev[groupId] === collapsed) {\n return prev;\n }\n return {\n ...prev,\n [groupId]: collapsed,\n };\n });\n }, []);\n\n return {\n collapsedByGroupId,\n setCollapsed,\n };\n};\n\nexport default useSidebarGroupCollapse;\n"],"mappings":";;AAYA,IAAM,KACJ,MACqC;CACrC,IAAI,KAAc,QAAQ,OAAO,SAAW,KAC1C,OAAO;CAET,IAAI;EACF,IAAM,IAAM,OAAO,aAAa,QAAQ,CAAU;EAClD,IAAI,KAAO,MACT,OAAO;EAET,IAAM,IAAS,KAAK,MAAM,CAAG;EAC7B,IAAsB,OAAO,KAAW,aAApC,GACF,OAAO;EAET,IAAM,IAAoC,CAAC;EAQ3C,OAPA,OAAO,QAAQ,CAAiC,CAAC,CAAC,SAC/C,CAAC,GAAK,OAAW;GAChB,AAAI,OAAO,KAAU,cACnB,EAAO,KAAO;EAElB,CACF,GACO;CACT,QAAQ;EACN,OAAO;CACT;AACF,GAEM,KACJ,GACA,GACA,MAC8B;CAC9B,IAAM,IAAmC,CAAC;CAO1C,OANA,EAAS,SAAS,MAAY;EAC5B,EAAM,KAAW,IAA4B,MAAY;CAC3D,CAAC,GACG,KAAiB,QAAQ,EAAS,SAAS,CAAa,MAC1D,EAAM,KAAiB,KAElB;AACT,GAEa,KACX,MAIG;CACH,IAAM,EACJ,kBACA,8BACA,aACA,aAAU,IACV,kBACE,GAEE,IAAc,QACX,CAAC,GAAG,CAAQ,GAClB,CAAC,CAAQ,CAAC,GAEP,CAAC,GAAoB,KACzB,QAA0C;EACxC,IAAI,GAAS;GACX,IAAM,IAAS,EAAgB,CAAU;GACzC,IAAI,KAAU,MACZ,OAAO;IACL,GAAG,EACD,GACA,GACA,CACF;IACA,GAAG;GACL;EAEJ;EACA,OAAO,EACL,GACA,GACA,CACF;CACF,CAAC;CA6DH,OA3DA,QAAgB;EACd,GAAuB,MAAS;GAC9B,IAAM,IAAkC,CAAC;GAYzC,OAVA,EAAY,SAAS,MAAY;IAC/B,IAAM,IAAW,EAAK;IACtB,EAAK,KACH,KAAY,IAA4B,MAAY;GACxD,CAAC,GAEG,KAAiB,QAAQ,EAAY,SAAS,CAAa,MAC7D,EAAK,KAAiB,KAGjB;EACT,CAAC;CACH,GAAG;EAAC;EAAe;EAA2B;CAAW,CAAC,GAE1D,QAAgB;EACV,IAAC,KAAW,KAAc,QAAQ,OAAO,SAAW,KAGxD,IAAI;GACF,OAAO,aAAa,QAClB,GACA,KAAK,UAAU,CAAkB,CACnC;EACF,QAAQ,CAER;CACF,GAAG;EAAC;EAAoB;EAAS;CAAU,CAAC,GAE5C,QAAgB;EACV,KAAiB,QAGrB,GAAuB,MACjB,EAAK,OAAmB,KACnB,IAEF;GACL,GAAG;IACF,IAAgB;EACnB,CACD;CACH,GAAG,CAAC,CAAa,CAAC,GAcX;EACL;EACA,cAdmB,GAAa,GAAiB,MAAuB;GACxE,GAAuB,MACjB,EAAK,OAAa,IACb,IAEF;IACL,GAAG;KACF,IAAU;GACb,CACD;EACH,GAAG,CAAC,CAIF;CACF;AACF"}
@@ -112,7 +112,7 @@ var { usePreloadedQuery: N } = E, P = (e) => e.trim().replace(/^\/+|\/+$/g, ""),
112
112
  (q.subtitleItems != null || q.status != null || q.badges != null) && (X = /* @__PURE__ */ w("div", {
113
113
  className: u,
114
114
  children: [q.subtitleItems, (q.status != null || q.badges != null) && /* @__PURE__ */ w("div", {
115
- className: "txvbqb5lr txvbqb2nn txvbqb6rp txvbqb1cu",
115
+ className: "txvbqb5m2 txvbqb2ny txvbqb6sa txvbqb1d5",
116
116
  children: [q.status, q.badges]
117
117
  })]
118
118
  }));
@@ -35,7 +35,7 @@ var _e = "plumile:backoffice:recent-items", ve = "plumile:backoffice:sidebar", y
35
35
  return [];
36
36
  }
37
37
  }, p = (e, t) => {
38
- if (!(typeof window > "u")) try {
38
+ if (typeof window < "u") try {
39
39
  window.localStorage.setItem(e, JSON.stringify(t));
40
40
  } catch {}
41
41
  }, m = ({ children: f, permissions: m, authStatus: h, activeGroupId: g }) => {
@@ -48,7 +48,7 @@ var _e = "plumile:backoffice:recent-items", ve = "plumile:backoffice:sidebar", y
48
48
  }
49
49
  }), [j, M] = l(!1), [N, P] = l(null), F = E?.recentItems, I = F?.enabled === !0, L = F?.storageKey ?? _e, R = F?.maxItems ?? 8, [z, Se] = l(() => I ? ye(L) : []);
50
50
  s(() => {
51
- if (!(!k || typeof window > "u")) try {
51
+ if (k && typeof window < "u") try {
52
52
  window.localStorage.setItem(`${O}:collapsed`, String(A));
53
53
  } catch {}
54
54
  }, [
@@ -1 +1 @@
1
- {"version":3,"file":"BackofficeLayoutPage.js","names":[],"sources":["../../../src/pages/BackofficeLayoutPage.tsx"],"sourcesContent":["import {\n useEffect,\n useMemo,\n type JSX,\n type ReactNode,\n useCallback,\n useContext,\n useState,\n} from 'react';\nimport { useTranslation } from 'react-i18next';\nimport {\n commitMutation,\n usePreloadedQuery,\n type PreloadedQuery,\n} from 'react-relay';\nimport type {\n GraphQLTaggedNode,\n MutationParameters,\n OperationType,\n} from 'relay-runtime';\nimport RoutingContext from '@plumile/router/routing/RoutingContext.js';\nimport useLocation from '@plumile/router/routing/useLocation.js';\nimport { resetRelayStore } from '@plumile/relay/environment.js';\n\nimport {\n AdminShellLayout,\n ToastProvider,\n SidebarProfileMenu,\n} from '@plumile/ui';\n\nimport { GlobalSearchInput } from '@plumile/ui/backoffice/molecules/global_search_input/GlobalSearchInput.js';\n\nimport { useBackofficeReactTranslation } from '../i18n/useBackofficeReactTranslation.js';\nimport { useBackofficeConfig } from '../provider/BackofficeConfigContext.js';\nimport type { LogoutResponse, LogoutVariables } from '../hooks/useAuth.js';\nimport { useBackofficeSidebarPins } from '../hooks/useBackofficeSidebarPins.js';\nimport { useSidebarGroupCollapse } from '../hooks/useSidebarGroupCollapse.js';\nimport { buildSidebarSections } from '../components/backoffice/layout/buildSidebarSections.js';\nimport { BackofficeContentBoundary } from '../components/backoffice/routing/BackofficeContentBoundary.js';\nimport {\n resolveActiveEntityId,\n resolveSidebarGroups,\n resolveVisibleEntityIds,\n} from '../components/backoffice/layout/sidebarUtils.js';\nimport { BackofficeTopbarPortalContextProvider } from '../components/backoffice/layout/breadcrumb/BackofficeTopbarPortalContext.js';\nimport { BackofficePermissionsProvider } from '../components/backoffice/layout/BackofficePermissionsContext.js';\nimport {\n mapViewerToSidebarProfileView,\n type BackofficeViewerIdentity,\n} from '../components/backoffice/layout/mapViewerToSidebarProfileView.js';\nimport { useRelayEnvironment } from '../relay/useRelayEnvironment.js';\nimport { getBackofficeLoginPath } from '../router/backofficeAuthPaths.js';\nimport type { BackofficeSidebarRecentItem } from '../provider/types.js';\n\nexport type BackofficeLayoutPageProps = {\n children: ReactNode;\n permissionsQuery?: GraphQLTaggedNode;\n prepared?: PreloadedQuery<OperationType> | null;\n authStatus?: {\n isLoggedIn?: boolean | null;\n me?: BackofficeViewerIdentity | null;\n } | null;\n activeGroupId?: string | null;\n};\n\ntype LayoutShellProps = {\n children: ReactNode;\n permissions: unknown;\n authStatus?: {\n isLoggedIn?: boolean | null;\n me?: BackofficeViewerIdentity | null;\n } | null;\n activeGroupId?: string | null;\n};\n\nconst DEFAULT_RECENT_ITEMS_STORAGE_KEY = 'plumile:backoffice:recent-items';\nconst DEFAULT_SIDEBAR_PREFS_STORAGE_KEY = 'plumile:backoffice:sidebar';\n\nconst readRecentItems = (\n storageKey: string,\n): readonly BackofficeSidebarRecentItem[] => {\n if (typeof window === 'undefined') {\n return [];\n }\n try {\n const raw = window.localStorage.getItem(storageKey);\n if (raw == null) {\n return [];\n }\n const parsed = JSON.parse(raw) as unknown;\n if (!Array.isArray(parsed)) {\n return [];\n }\n return parsed.filter((item): item is BackofficeSidebarRecentItem => {\n if (item == null || typeof item !== 'object') {\n return false;\n }\n const candidate = item as Partial<BackofficeSidebarRecentItem>;\n return (\n (candidate.kind === 'entity' || candidate.kind === 'tool') &&\n typeof candidate.id === 'string' &&\n typeof candidate.label === 'string' &&\n typeof candidate.href === 'string' &&\n typeof candidate.visitedAt === 'number'\n );\n });\n } catch {\n return [];\n }\n};\n\nconst writeRecentItems = (\n storageKey: string,\n items: readonly BackofficeSidebarRecentItem[],\n): void => {\n if (typeof window === 'undefined') {\n return;\n }\n try {\n window.localStorage.setItem(storageKey, JSON.stringify(items));\n } catch {\n // Ignore storage quota / privacy mode failures.\n }\n};\n\nconst BackofficeLayoutShell = ({\n children,\n permissions,\n authStatus,\n activeGroupId,\n}: LayoutShellProps): JSX.Element => {\n const { t: tApp } = useTranslation();\n const { t } = useBackofficeReactTranslation();\n const { pathname } = useLocation();\n const routing = useContext(RoutingContext);\n const relayEnvironment = useRelayEnvironment();\n const {\n auth: authConfig,\n basePath,\n dashboards,\n entities,\n sidebar,\n } = useBackofficeConfig();\n const [sidebarQuery, setSidebarQuery] = useState('');\n const sidebarPreferencesStorageKey =\n sidebar?.preferences?.storageKey ?? DEFAULT_SIDEBAR_PREFS_STORAGE_KEY;\n const persistSidebarCollapsed =\n sidebar?.preferences?.persistCollapsed === true;\n const [isSidebarCollapsed, setIsSidebarCollapsed] = useState(() => {\n if (!persistSidebarCollapsed || typeof window === 'undefined') {\n return false;\n }\n try {\n return (\n window.localStorage.getItem(\n `${sidebarPreferencesStorageKey}:collapsed`,\n ) === 'true'\n );\n } catch {\n return false;\n }\n });\n const [isSigningOut, setIsSigningOut] = useState(false);\n const [topbarTarget, setTopbarTarget] = useState<HTMLDivElement | null>(null);\n const recentItemsConfig = sidebar?.recentItems;\n const recentItemsEnabled = recentItemsConfig?.enabled === true;\n const recentItemsStorageKey =\n recentItemsConfig?.storageKey ?? DEFAULT_RECENT_ITEMS_STORAGE_KEY;\n const recentItemsMaxItems = recentItemsConfig?.maxItems ?? 8;\n const [recentItems, setRecentItems] = useState<\n readonly BackofficeSidebarRecentItem[]\n >(() => {\n if (!recentItemsEnabled) {\n return [];\n }\n return readRecentItems(recentItemsStorageKey);\n });\n\n useEffect(() => {\n if (!persistSidebarCollapsed || typeof window === 'undefined') {\n return;\n }\n try {\n window.localStorage.setItem(\n `${sidebarPreferencesStorageKey}:collapsed`,\n String(isSidebarCollapsed),\n );\n } catch {\n // Ignore storage quota / privacy mode failures.\n }\n }, [\n isSidebarCollapsed,\n persistSidebarCollapsed,\n sidebarPreferencesStorageKey,\n ]);\n\n const groups = useMemo(() => {\n return resolveSidebarGroups(entities, sidebar);\n }, [entities, sidebar]);\n\n const groupIds = useMemo(() => {\n return Object.keys(groups);\n }, [groups]);\n\n const defaultCollapsedByGroupId = useMemo(() => {\n return Object.fromEntries(\n Object.entries(groups).map(([groupId, group]) => {\n return [groupId, group.behavior?.defaultCollapsed ?? true];\n }),\n );\n }, [groups]);\n\n const visibleEntityIds = useMemo(() => {\n return resolveVisibleEntityIds(groups, entities, sidebar, permissions);\n }, [entities, groups, permissions, sidebar]);\n\n const activeEntityId = useMemo(() => {\n return resolveActiveEntityId(pathname, entities);\n }, [entities, pathname]);\n\n useEffect(() => {\n if (!recentItemsEnabled || activeEntityId == null) {\n return;\n }\n const config = entities[activeEntityId];\n if (config == null) {\n return;\n }\n if (config.kind !== 'tool' && !config.hasList) {\n return;\n }\n const href = config.routes.list;\n let kind: BackofficeSidebarRecentItem['kind'] = 'entity';\n if (config.kind === 'tool') {\n kind = 'tool';\n }\n const item: BackofficeSidebarRecentItem = {\n kind,\n id: activeEntityId,\n label: config.label(tApp),\n href,\n visitedAt: Date.now(),\n };\n setRecentItems((prev) => {\n const next = [\n item,\n ...prev.filter((entry) => {\n return entry.id !== item.id || entry.kind !== item.kind;\n }),\n ].slice(0, recentItemsMaxItems);\n writeRecentItems(recentItemsStorageKey, next);\n return next;\n });\n }, [\n activeEntityId,\n entities,\n recentItemsEnabled,\n recentItemsMaxItems,\n recentItemsStorageKey,\n tApp,\n ]);\n\n const pinningEnabled = sidebar?.pinnedItems?.enabled === true;\n\n const {\n pins,\n toggle: togglePin,\n reorder: reorderPin,\n } = useBackofficeSidebarPins({\n enabled: pinningEnabled,\n storageKey: sidebar?.pinnedItems?.storageKey,\n visibleEntityIds,\n });\n\n let sidebarPinnedEntityIds: readonly string[] | undefined;\n let sidebarTogglePin: ((entityId: string) => void) | undefined;\n let sidebarReorderPin: ((fromId: string, toId: string) => void) | undefined;\n if (pinningEnabled) {\n sidebarPinnedEntityIds = pins;\n sidebarTogglePin = togglePin;\n sidebarReorderPin = reorderPin;\n }\n\n let groupCollapseStorageKey: string | undefined;\n if (sidebar?.preferences?.storageKey != null) {\n groupCollapseStorageKey = `${sidebar.preferences.storageKey}:groups`;\n }\n\n const { collapsedByGroupId, setCollapsed } = useSidebarGroupCollapse({\n groupIds,\n activeGroupId,\n defaultCollapsedByGroupId,\n persist: sidebar?.preferences?.persistGroups === true,\n storageKey: groupCollapseStorageKey,\n });\n\n const sections = useMemo(() => {\n return buildSidebarSections({\n basePath,\n pathname,\n entities,\n dashboards,\n sidebar,\n permissions,\n searchQuery: sidebarQuery,\n tApp,\n t,\n pinnedEntityIds: sidebarPinnedEntityIds,\n recentItems,\n onTogglePin: sidebarTogglePin,\n onReorderPin: sidebarReorderPin,\n collapsedByGroupId,\n onGroupCollapsedChange: setCollapsed,\n sidebarCollapsed: false,\n });\n }, [\n basePath,\n collapsedByGroupId,\n entities,\n dashboards,\n pathname,\n permissions,\n recentItems,\n setCollapsed,\n sidebar,\n sidebarPinnedEntityIds,\n sidebarQuery,\n sidebarReorderPin,\n sidebarTogglePin,\n t,\n tApp,\n ]);\n\n const mobileSections = useMemo(() => {\n return buildSidebarSections({\n basePath,\n pathname,\n entities,\n dashboards,\n sidebar,\n permissions,\n searchQuery: sidebarQuery,\n tApp,\n t,\n pinnedEntityIds: sidebarPinnedEntityIds,\n recentItems,\n onTogglePin: sidebarTogglePin,\n onReorderPin: sidebarReorderPin,\n collapsedByGroupId,\n onGroupCollapsedChange: setCollapsed,\n sidebarCollapsed: false,\n });\n }, [\n basePath,\n collapsedByGroupId,\n entities,\n dashboards,\n pathname,\n permissions,\n recentItems,\n setCollapsed,\n sidebar,\n sidebarPinnedEntityIds,\n sidebarQuery,\n sidebarReorderPin,\n sidebarTogglePin,\n t,\n tApp,\n ]);\n\n const handleSignOut = useCallback(() => {\n if (isSigningOut) {\n return;\n }\n\n type LogoutMutation = MutationParameters & {\n response: LogoutResponse;\n variables: LogoutVariables;\n };\n\n setIsSigningOut(true);\n\n const runSignOut = async (): Promise<void> => {\n try {\n const config = await authConfig.logout.load();\n await new Promise<void>((resolve, reject) => {\n commitMutation<LogoutMutation>(relayEnvironment, {\n mutation: config.logoutMutation,\n variables: {},\n onCompleted: () => {\n resolve();\n },\n onError: (error) => {\n reject(error);\n },\n });\n });\n localStorage.removeItem('auth_token');\n localStorage.removeItem('remember_me');\n resetRelayStore();\n routing?.history.push({ pathname: getBackofficeLoginPath(basePath) });\n } finally {\n setIsSigningOut(false);\n }\n };\n\n runSignOut().catch(() => {\n /* noop */\n });\n }, [authConfig.logout, basePath, isSigningOut, relayEnvironment, routing]);\n\n const viewer = authStatus?.me ?? null;\n const sidebarProfile = useMemo(() => {\n return mapViewerToSidebarProfileView({\n viewer,\n unknownUserLabel: t('sidebar.profile.unknownUser'),\n });\n }, [t, viewer]);\n\n const sidebarFooter = (\n <SidebarProfileMenu\n viewer={sidebarProfile}\n sectionTitle={t('sidebar.profile.title')}\n labels={{\n menuAriaLabel: t('sidebar.profile.menuAriaLabel'),\n triggerAriaLabel: `${t('sidebar.profile.menuAriaLabel')}: ${sidebarProfile.displayName}`,\n }}\n items={[\n {\n kind: 'action',\n id: 'sign-out',\n label: t('sidebar.profile.actions.signOut'),\n onSelect: handleSignOut,\n disabled: isSigningOut,\n tone: 'danger',\n },\n ]}\n />\n );\n\n const mobileSidebarFooter = (\n <SidebarProfileMenu\n viewer={sidebarProfile}\n sectionTitle={t('sidebar.profile.title')}\n labels={{\n menuAriaLabel: t('sidebar.profile.menuAriaLabel'),\n triggerAriaLabel: `${t('sidebar.profile.menuAriaLabel')}: ${sidebarProfile.displayName}`,\n }}\n items={[\n {\n kind: 'action',\n id: 'sign-out',\n label: t('sidebar.profile.actions.signOut'),\n onSelect: handleSignOut,\n disabled: isSigningOut,\n tone: 'danger',\n },\n ]}\n />\n );\n\n let contentNode: JSX.Element | null = null;\n if (topbarTarget != null) {\n contentNode = (\n <BackofficeContentBoundary>{children}</BackofficeContentBoundary>\n );\n }\n\n const sidebarSearchNode = (\n <GlobalSearchInput\n value={sidebarQuery}\n onChange={setSidebarQuery}\n placeholder={t('sidebar.search.placeholder')}\n ariaLabel={t('sidebar.search.placeholder')}\n />\n );\n\n return (\n <ToastProvider>\n <AdminShellLayout\n sidebar={{\n sections,\n search: sidebarSearchNode,\n footer: sidebarFooter,\n collapsed: isSidebarCollapsed,\n onCollapsedChange: setIsSidebarCollapsed,\n collapseLabel: t('sidebar.actions.collapseSidebar'),\n expandLabel: t('sidebar.actions.expandSidebar'),\n navigationLabel: t('sidebar.navigationAriaLabel'),\n }}\n mobileSidebar={{\n sections: mobileSections,\n search: sidebarSearchNode,\n footer: mobileSidebarFooter,\n hideCollapseToggle: true,\n navigationLabel: t('sidebar.navigationAriaLabel'),\n }}\n topbar={{\n breadcrumb: <div ref={setTopbarTarget} />,\n }}\n containedScrollLabel={t('sidebar.contentAriaLabel')}\n contentScrollMode=\"contained\"\n >\n <BackofficePermissionsProvider permissions={permissions}>\n <BackofficeTopbarPortalContextProvider\n value={{\n target: topbarTarget,\n dashboardHref: basePath,\n dashboardLabel: t('sidebar.items.dashboard'),\n }}\n >\n {contentNode}\n </BackofficeTopbarPortalContextProvider>\n </BackofficePermissionsProvider>\n </AdminShellLayout>\n </ToastProvider>\n );\n};\n\ntype LayoutWithPermissionsProps = {\n children: ReactNode;\n permissionsQuery: GraphQLTaggedNode;\n prepared: PreloadedQuery<OperationType>;\n authStatus?: {\n isLoggedIn?: boolean | null;\n me?: BackofficeViewerIdentity | null;\n } | null;\n activeGroupId?: string | null;\n};\n\nconst LayoutWithPermissions = ({\n children,\n permissionsQuery,\n prepared,\n authStatus,\n activeGroupId,\n}: LayoutWithPermissionsProps): JSX.Element => {\n const permissions = usePreloadedQuery(permissionsQuery, prepared);\n\n return (\n <BackofficeLayoutShell\n permissions={permissions}\n authStatus={authStatus}\n activeGroupId={activeGroupId}\n >\n {children}\n </BackofficeLayoutShell>\n );\n};\n\nexport const BackofficeLayoutPage = ({\n children,\n permissionsQuery,\n prepared,\n authStatus,\n activeGroupId,\n}: BackofficeLayoutPageProps): JSX.Element => {\n if (permissionsQuery != null && prepared != null) {\n return (\n <LayoutWithPermissions\n permissionsQuery={permissionsQuery}\n prepared={prepared}\n authStatus={authStatus}\n activeGroupId={activeGroupId}\n >\n {children}\n </LayoutWithPermissions>\n );\n }\n\n return (\n <BackofficeLayoutShell\n permissions={null}\n authStatus={authStatus}\n activeGroupId={activeGroupId}\n >\n {children}\n </BackofficeLayoutShell>\n );\n};\n\nexport default BackofficeLayoutPage;\n"],"mappings":"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"}
1
+ {"version":3,"file":"BackofficeLayoutPage.js","names":[],"sources":["../../../src/pages/BackofficeLayoutPage.tsx"],"sourcesContent":["import {\n useEffect,\n useMemo,\n type JSX,\n type ReactNode,\n useCallback,\n useContext,\n useState,\n} from 'react';\nimport { useTranslation } from 'react-i18next';\nimport {\n commitMutation,\n usePreloadedQuery,\n type PreloadedQuery,\n} from 'react-relay';\nimport type {\n GraphQLTaggedNode,\n MutationParameters,\n OperationType,\n} from 'relay-runtime';\nimport RoutingContext from '@plumile/router/routing/RoutingContext.js';\nimport useLocation from '@plumile/router/routing/useLocation.js';\nimport { resetRelayStore } from '@plumile/relay/environment.js';\n\nimport {\n AdminShellLayout,\n ToastProvider,\n SidebarProfileMenu,\n} from '@plumile/ui';\n\nimport { GlobalSearchInput } from '@plumile/ui/backoffice/molecules/global_search_input/GlobalSearchInput.js';\n\nimport { useBackofficeReactTranslation } from '../i18n/useBackofficeReactTranslation.js';\nimport { useBackofficeConfig } from '../provider/BackofficeConfigContext.js';\nimport type { LogoutResponse, LogoutVariables } from '../hooks/useAuth.js';\nimport { useBackofficeSidebarPins } from '../hooks/useBackofficeSidebarPins.js';\nimport { useSidebarGroupCollapse } from '../hooks/useSidebarGroupCollapse.js';\nimport { buildSidebarSections } from '../components/backoffice/layout/buildSidebarSections.js';\nimport { BackofficeContentBoundary } from '../components/backoffice/routing/BackofficeContentBoundary.js';\nimport {\n resolveActiveEntityId,\n resolveSidebarGroups,\n resolveVisibleEntityIds,\n} from '../components/backoffice/layout/sidebarUtils.js';\nimport { BackofficeTopbarPortalContextProvider } from '../components/backoffice/layout/breadcrumb/BackofficeTopbarPortalContext.js';\nimport { BackofficePermissionsProvider } from '../components/backoffice/layout/BackofficePermissionsContext.js';\nimport {\n mapViewerToSidebarProfileView,\n type BackofficeViewerIdentity,\n} from '../components/backoffice/layout/mapViewerToSidebarProfileView.js';\nimport { useRelayEnvironment } from '../relay/useRelayEnvironment.js';\nimport { getBackofficeLoginPath } from '../router/backofficeAuthPaths.js';\nimport type { BackofficeSidebarRecentItem } from '../provider/types.js';\n\nexport type BackofficeLayoutPageProps = {\n children: ReactNode;\n permissionsQuery?: GraphQLTaggedNode;\n prepared?: PreloadedQuery<OperationType> | null;\n authStatus?: {\n isLoggedIn?: boolean | null;\n me?: BackofficeViewerIdentity | null;\n } | null;\n activeGroupId?: string | null;\n};\n\ntype LayoutShellProps = {\n children: ReactNode;\n permissions: unknown;\n authStatus?: {\n isLoggedIn?: boolean | null;\n me?: BackofficeViewerIdentity | null;\n } | null;\n activeGroupId?: string | null;\n};\n\nconst DEFAULT_RECENT_ITEMS_STORAGE_KEY = 'plumile:backoffice:recent-items';\nconst DEFAULT_SIDEBAR_PREFS_STORAGE_KEY = 'plumile:backoffice:sidebar';\n\nconst readRecentItems = (\n storageKey: string,\n): readonly BackofficeSidebarRecentItem[] => {\n if (typeof window === 'undefined') {\n return [];\n }\n try {\n const raw = window.localStorage.getItem(storageKey);\n if (raw == null) {\n return [];\n }\n const parsed = JSON.parse(raw) as unknown;\n if (!Array.isArray(parsed)) {\n return [];\n }\n return parsed.filter((item): item is BackofficeSidebarRecentItem => {\n if (item == null || typeof item !== 'object') {\n return false;\n }\n const candidate = item as Partial<BackofficeSidebarRecentItem>;\n return (\n (candidate.kind === 'entity' || candidate.kind === 'tool') &&\n typeof candidate.id === 'string' &&\n typeof candidate.label === 'string' &&\n typeof candidate.href === 'string' &&\n typeof candidate.visitedAt === 'number'\n );\n });\n } catch {\n return [];\n }\n};\n\nconst writeRecentItems = (\n storageKey: string,\n items: readonly BackofficeSidebarRecentItem[],\n): void => {\n if (typeof window === 'undefined') {\n return;\n }\n try {\n window.localStorage.setItem(storageKey, JSON.stringify(items));\n } catch {\n // Ignore storage quota / privacy mode failures.\n }\n};\n\nconst BackofficeLayoutShell = ({\n children,\n permissions,\n authStatus,\n activeGroupId,\n}: LayoutShellProps): JSX.Element => {\n const { t: tApp } = useTranslation();\n const { t } = useBackofficeReactTranslation();\n const { pathname } = useLocation();\n const routing = useContext(RoutingContext);\n const relayEnvironment = useRelayEnvironment();\n const {\n auth: authConfig,\n basePath,\n dashboards,\n entities,\n sidebar,\n } = useBackofficeConfig();\n const [sidebarQuery, setSidebarQuery] = useState('');\n const sidebarPreferencesStorageKey =\n sidebar?.preferences?.storageKey ?? DEFAULT_SIDEBAR_PREFS_STORAGE_KEY;\n const persistSidebarCollapsed =\n sidebar?.preferences?.persistCollapsed === true;\n const [isSidebarCollapsed, setIsSidebarCollapsed] = useState(() => {\n if (!persistSidebarCollapsed || typeof window === 'undefined') {\n return false;\n }\n try {\n return (\n window.localStorage.getItem(\n `${sidebarPreferencesStorageKey}:collapsed`,\n ) === 'true'\n );\n } catch {\n return false;\n }\n });\n const [isSigningOut, setIsSigningOut] = useState(false);\n const [topbarTarget, setTopbarTarget] = useState<HTMLDivElement | null>(null);\n const recentItemsConfig = sidebar?.recentItems;\n const recentItemsEnabled = recentItemsConfig?.enabled === true;\n const recentItemsStorageKey =\n recentItemsConfig?.storageKey ?? DEFAULT_RECENT_ITEMS_STORAGE_KEY;\n const recentItemsMaxItems = recentItemsConfig?.maxItems ?? 8;\n const [recentItems, setRecentItems] = useState<\n readonly BackofficeSidebarRecentItem[]\n >(() => {\n if (!recentItemsEnabled) {\n return [];\n }\n return readRecentItems(recentItemsStorageKey);\n });\n\n useEffect(() => {\n if (!persistSidebarCollapsed || typeof window === 'undefined') {\n return;\n }\n try {\n window.localStorage.setItem(\n `${sidebarPreferencesStorageKey}:collapsed`,\n String(isSidebarCollapsed),\n );\n } catch {\n // Ignore storage quota / privacy mode failures.\n }\n }, [\n isSidebarCollapsed,\n persistSidebarCollapsed,\n sidebarPreferencesStorageKey,\n ]);\n\n const groups = useMemo(() => {\n return resolveSidebarGroups(entities, sidebar);\n }, [entities, sidebar]);\n\n const groupIds = useMemo(() => {\n return Object.keys(groups);\n }, [groups]);\n\n const defaultCollapsedByGroupId = useMemo(() => {\n return Object.fromEntries(\n Object.entries(groups).map(([groupId, group]) => {\n return [groupId, group.behavior?.defaultCollapsed ?? true];\n }),\n );\n }, [groups]);\n\n const visibleEntityIds = useMemo(() => {\n return resolveVisibleEntityIds(groups, entities, sidebar, permissions);\n }, [entities, groups, permissions, sidebar]);\n\n const activeEntityId = useMemo(() => {\n return resolveActiveEntityId(pathname, entities);\n }, [entities, pathname]);\n\n useEffect(() => {\n if (!recentItemsEnabled || activeEntityId == null) {\n return;\n }\n const config = entities[activeEntityId];\n if (config == null) {\n return;\n }\n if (config.kind !== 'tool' && !config.hasList) {\n return;\n }\n const href = config.routes.list;\n let kind: BackofficeSidebarRecentItem['kind'] = 'entity';\n if (config.kind === 'tool') {\n kind = 'tool';\n }\n const item: BackofficeSidebarRecentItem = {\n kind,\n id: activeEntityId,\n label: config.label(tApp),\n href,\n visitedAt: Date.now(),\n };\n setRecentItems((prev) => {\n const next = [\n item,\n ...prev.filter((entry) => {\n return entry.id !== item.id || entry.kind !== item.kind;\n }),\n ].slice(0, recentItemsMaxItems);\n writeRecentItems(recentItemsStorageKey, next);\n return next;\n });\n }, [\n activeEntityId,\n entities,\n recentItemsEnabled,\n recentItemsMaxItems,\n recentItemsStorageKey,\n tApp,\n ]);\n\n const pinningEnabled = sidebar?.pinnedItems?.enabled === true;\n\n const {\n pins,\n toggle: togglePin,\n reorder: reorderPin,\n } = useBackofficeSidebarPins({\n enabled: pinningEnabled,\n storageKey: sidebar?.pinnedItems?.storageKey,\n visibleEntityIds,\n });\n\n let sidebarPinnedEntityIds: readonly string[] | undefined;\n let sidebarTogglePin: ((entityId: string) => void) | undefined;\n let sidebarReorderPin: ((fromId: string, toId: string) => void) | undefined;\n if (pinningEnabled) {\n sidebarPinnedEntityIds = pins;\n sidebarTogglePin = togglePin;\n sidebarReorderPin = reorderPin;\n }\n\n let groupCollapseStorageKey: string | undefined;\n if (sidebar?.preferences?.storageKey != null) {\n groupCollapseStorageKey = `${sidebar.preferences.storageKey}:groups`;\n }\n\n const { collapsedByGroupId, setCollapsed } = useSidebarGroupCollapse({\n groupIds,\n activeGroupId,\n defaultCollapsedByGroupId,\n persist: sidebar?.preferences?.persistGroups === true,\n storageKey: groupCollapseStorageKey,\n });\n\n const sections = useMemo(() => {\n return buildSidebarSections({\n basePath,\n pathname,\n entities,\n dashboards,\n sidebar,\n permissions,\n searchQuery: sidebarQuery,\n tApp,\n t,\n pinnedEntityIds: sidebarPinnedEntityIds,\n recentItems,\n onTogglePin: sidebarTogglePin,\n onReorderPin: sidebarReorderPin,\n collapsedByGroupId,\n onGroupCollapsedChange: setCollapsed,\n sidebarCollapsed: false,\n });\n }, [\n basePath,\n collapsedByGroupId,\n entities,\n dashboards,\n pathname,\n permissions,\n recentItems,\n setCollapsed,\n sidebar,\n sidebarPinnedEntityIds,\n sidebarQuery,\n sidebarReorderPin,\n sidebarTogglePin,\n t,\n tApp,\n ]);\n\n const mobileSections = useMemo(() => {\n return buildSidebarSections({\n basePath,\n pathname,\n entities,\n dashboards,\n sidebar,\n permissions,\n searchQuery: sidebarQuery,\n tApp,\n t,\n pinnedEntityIds: sidebarPinnedEntityIds,\n recentItems,\n onTogglePin: sidebarTogglePin,\n onReorderPin: sidebarReorderPin,\n collapsedByGroupId,\n onGroupCollapsedChange: setCollapsed,\n sidebarCollapsed: false,\n });\n }, [\n basePath,\n collapsedByGroupId,\n entities,\n dashboards,\n pathname,\n permissions,\n recentItems,\n setCollapsed,\n sidebar,\n sidebarPinnedEntityIds,\n sidebarQuery,\n sidebarReorderPin,\n sidebarTogglePin,\n t,\n tApp,\n ]);\n\n const handleSignOut = useCallback(() => {\n if (isSigningOut) {\n return;\n }\n\n type LogoutMutation = MutationParameters & {\n response: LogoutResponse;\n variables: LogoutVariables;\n };\n\n setIsSigningOut(true);\n\n const runSignOut = async (): Promise<void> => {\n try {\n const config = await authConfig.logout.load();\n await new Promise<void>((resolve, reject) => {\n commitMutation<LogoutMutation>(relayEnvironment, {\n mutation: config.logoutMutation,\n variables: {},\n onCompleted: () => {\n resolve();\n },\n onError: (error) => {\n reject(error);\n },\n });\n });\n localStorage.removeItem('auth_token');\n localStorage.removeItem('remember_me');\n resetRelayStore();\n routing?.history.push({ pathname: getBackofficeLoginPath(basePath) });\n } finally {\n setIsSigningOut(false);\n }\n };\n\n runSignOut().catch(() => {\n /* noop */\n });\n }, [authConfig.logout, basePath, isSigningOut, relayEnvironment, routing]);\n\n const viewer = authStatus?.me ?? null;\n const sidebarProfile = useMemo(() => {\n return mapViewerToSidebarProfileView({\n viewer,\n unknownUserLabel: t('sidebar.profile.unknownUser'),\n });\n }, [t, viewer]);\n\n const sidebarFooter = (\n <SidebarProfileMenu\n viewer={sidebarProfile}\n sectionTitle={t('sidebar.profile.title')}\n labels={{\n menuAriaLabel: t('sidebar.profile.menuAriaLabel'),\n triggerAriaLabel: `${t('sidebar.profile.menuAriaLabel')}: ${sidebarProfile.displayName}`,\n }}\n items={[\n {\n kind: 'action',\n id: 'sign-out',\n label: t('sidebar.profile.actions.signOut'),\n onSelect: handleSignOut,\n disabled: isSigningOut,\n tone: 'danger',\n },\n ]}\n />\n );\n\n const mobileSidebarFooter = (\n <SidebarProfileMenu\n viewer={sidebarProfile}\n sectionTitle={t('sidebar.profile.title')}\n labels={{\n menuAriaLabel: t('sidebar.profile.menuAriaLabel'),\n triggerAriaLabel: `${t('sidebar.profile.menuAriaLabel')}: ${sidebarProfile.displayName}`,\n }}\n items={[\n {\n kind: 'action',\n id: 'sign-out',\n label: t('sidebar.profile.actions.signOut'),\n onSelect: handleSignOut,\n disabled: isSigningOut,\n tone: 'danger',\n },\n ]}\n />\n );\n\n let contentNode: JSX.Element | null = null;\n if (topbarTarget != null) {\n contentNode = (\n <BackofficeContentBoundary>{children}</BackofficeContentBoundary>\n );\n }\n\n const sidebarSearchNode = (\n <GlobalSearchInput\n value={sidebarQuery}\n onChange={setSidebarQuery}\n placeholder={t('sidebar.search.placeholder')}\n ariaLabel={t('sidebar.search.placeholder')}\n />\n );\n\n return (\n <ToastProvider>\n <AdminShellLayout\n sidebar={{\n sections,\n search: sidebarSearchNode,\n footer: sidebarFooter,\n collapsed: isSidebarCollapsed,\n onCollapsedChange: setIsSidebarCollapsed,\n collapseLabel: t('sidebar.actions.collapseSidebar'),\n expandLabel: t('sidebar.actions.expandSidebar'),\n navigationLabel: t('sidebar.navigationAriaLabel'),\n }}\n mobileSidebar={{\n sections: mobileSections,\n search: sidebarSearchNode,\n footer: mobileSidebarFooter,\n hideCollapseToggle: true,\n navigationLabel: t('sidebar.navigationAriaLabel'),\n }}\n topbar={{\n breadcrumb: <div ref={setTopbarTarget} />,\n }}\n containedScrollLabel={t('sidebar.contentAriaLabel')}\n contentScrollMode=\"contained\"\n >\n <BackofficePermissionsProvider permissions={permissions}>\n <BackofficeTopbarPortalContextProvider\n value={{\n target: topbarTarget,\n dashboardHref: basePath,\n dashboardLabel: t('sidebar.items.dashboard'),\n }}\n >\n {contentNode}\n </BackofficeTopbarPortalContextProvider>\n </BackofficePermissionsProvider>\n </AdminShellLayout>\n </ToastProvider>\n );\n};\n\ntype LayoutWithPermissionsProps = {\n children: ReactNode;\n permissionsQuery: GraphQLTaggedNode;\n prepared: PreloadedQuery<OperationType>;\n authStatus?: {\n isLoggedIn?: boolean | null;\n me?: BackofficeViewerIdentity | null;\n } | null;\n activeGroupId?: string | null;\n};\n\nconst LayoutWithPermissions = ({\n children,\n permissionsQuery,\n prepared,\n authStatus,\n activeGroupId,\n}: LayoutWithPermissionsProps): JSX.Element => {\n const permissions = usePreloadedQuery(permissionsQuery, prepared);\n\n return (\n <BackofficeLayoutShell\n permissions={permissions}\n authStatus={authStatus}\n activeGroupId={activeGroupId}\n >\n {children}\n </BackofficeLayoutShell>\n );\n};\n\nexport const BackofficeLayoutPage = ({\n children,\n permissionsQuery,\n prepared,\n authStatus,\n activeGroupId,\n}: BackofficeLayoutPageProps): JSX.Element => {\n if (permissionsQuery != null && prepared != null) {\n return (\n <LayoutWithPermissions\n permissionsQuery={permissionsQuery}\n prepared={prepared}\n authStatus={authStatus}\n activeGroupId={activeGroupId}\n >\n {children}\n </LayoutWithPermissions>\n );\n }\n\n return (\n <BackofficeLayoutShell\n permissions={null}\n authStatus={authStatus}\n activeGroupId={activeGroupId}\n >\n {children}\n </BackofficeLayoutShell>\n );\n};\n\nexport default BackofficeLayoutPage;\n"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  //#region src/pages/backofficeDashboardPage.css.ts
2
- var e = "txvbqb5lr txvbqb6m5 txvbqb6rp", t = "txvbqb5lr txvbqb2nn txvbqb6rp txvbqbe8 txvbqb6nj", n = "txvbqb6ox txvbqb1d6 txvbqb1oe";
2
+ var e = "txvbqb5m2 txvbqb6mq txvbqb6sa", t = "txvbqb5m2 txvbqb2ny txvbqb6sa txvbqbej txvbqb6o4", n = "txvbqb6pi txvbqb1dh txvbqb1op";
3
3
  //#endregion
4
4
  export { t as loadingBody, e as tileBody, n as tileCount };
5
5
 
@@ -1,5 +1,5 @@
1
1
  //#region src/pages/backofficeEntityDetailPage.css.ts
2
- var e = "txvbqb5lr txvbqb2nn txvbqb8ob txvbqb6rp txvbqb1cu txvbqbe1d", t = "txvbqb5lr txvbqb2nn txvbqb8ob txvbqb6rp txvbqb1cu", n = "txvbqb5lr txvbqb2nn txvbqbgl3 txvbqb3el txvbqb3qv txvbqbmx txvbqbx6", r = "txvbqb5lr txvbqb6m5 txvbqb6rz", i = "txvbqb5lr txvbqb2nn txvbqb6rp txvbqb1cu", a = "txvbqb5lr txvbqb6m5 txvbqb6rp", o = "txvbqb5ml txvbqb2nn txvbqb8o1 txvbqbky9 txvbqb7sx txvbqbe8";
2
+ var e = "txvbqb5m2 txvbqb2ny txvbqb8ow txvbqb6sa txvbqb1d5 txvbqbe1y", t = "txvbqb5m2 txvbqb2ny txvbqb8ow txvbqb6sa txvbqb1d5", n = "txvbqb5m2 txvbqb2ny txvbqbglo txvbqb3ew txvbqb3r6 txvbqbn8 txvbqbxh", r = "txvbqb5m2 txvbqb6mq txvbqb6sk", i = "txvbqb5m2 txvbqb2ny txvbqb6sa txvbqb1d5", a = "txvbqb5m2 txvbqb6mq txvbqb6sa", o = "txvbqb5mw txvbqb2ny txvbqb8om txvbqbkyu txvbqb7ti txvbqbej";
3
3
  //#endregion
4
4
  export { t as headerActionGroup, e as headerActions, r as headerBlock, i as headerMeta, a as headerMetaList, n as headerRelationGroup, o as relationCountLoading };
5
5