@plumile/backoffice-react 0.1.68 → 0.1.69

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 (59) hide show
  1. package/lib/esm/components/backoffice/columns/buildDataTableColumns.js +7 -8
  2. package/lib/esm/components/backoffice/columns/buildDataTableColumns.js.map +1 -1
  3. package/lib/esm/components/backoffice/detail/BackofficeDetailBadgeRow.js +1 -1
  4. package/lib/esm/components/backoffice/detail/BackofficeDetailBadgeRow.js.map +1 -1
  5. package/lib/esm/components/backoffice/detail/BackofficeDetailField.js +4 -4
  6. package/lib/esm/components/backoffice/detail/BackofficeDetailField.js.map +1 -1
  7. package/lib/esm/components/backoffice/detail/BackofficeDetailFlagTag.js +1 -1
  8. package/lib/esm/components/backoffice/detail/BackofficeDetailFlagTag.js.map +1 -1
  9. package/lib/esm/components/backoffice/detail/BackofficeDetailRelationListBlock.js +26 -26
  10. package/lib/esm/components/backoffice/detail/BackofficeDetailRelationListBlock.js.map +1 -1
  11. package/lib/esm/components/backoffice/detail/BackofficeDetailTaggedValue.js +1 -1
  12. package/lib/esm/components/backoffice/detail/BackofficeDetailTaggedValue.js.map +1 -1
  13. package/lib/esm/components/backoffice/layout/buildSidebarSections.js.map +1 -1
  14. package/lib/esm/components/backoffice/layout/mapViewerToSidebarProfileView.js.map +1 -1
  15. package/lib/esm/components/backoffice/pickers/EntityIdPickerDialog.js +17 -18
  16. package/lib/esm/components/backoffice/pickers/EntityIdPickerDialog.js.map +1 -1
  17. package/lib/esm/components/backoffice/pickers/shared/EntityPickerList.js +7 -8
  18. package/lib/esm/components/backoffice/pickers/shared/EntityPickerList.js.map +1 -1
  19. package/lib/esm/components/backoffice/routing/BackofficeContentError.js +1 -2
  20. package/lib/esm/components/backoffice/routing/BackofficeContentError.js.map +1 -1
  21. package/lib/esm/components/backoffice/routing/BackofficeContentFallback.js +1 -1
  22. package/lib/esm/components/backoffice/routing/BackofficeContentFallback.js.map +1 -1
  23. package/lib/esm/components/backoffice/routing/BackofficeRouteFallback.js +1 -1
  24. package/lib/esm/components/backoffice/routing/BackofficeRouteFallback.js.map +1 -1
  25. package/lib/esm/components/backoffice/scaffolds/BackofficeEntityListScaffold.js +4 -11
  26. package/lib/esm/components/backoffice/scaffolds/BackofficeEntityListScaffold.js.map +1 -1
  27. package/lib/esm/components/backoffice/scaffolds/BackofficeTabbedDetailShell.js +3 -4
  28. package/lib/esm/components/backoffice/scaffolds/BackofficeTabbedDetailShell.js.map +1 -1
  29. package/lib/esm/components/backoffice/tools/BackofficeToolsQueryBoundary.js +4 -4
  30. package/lib/esm/components/backoffice/tools/BackofficeToolsQueryBoundary.js.map +1 -1
  31. package/lib/esm/pages/BackofficeDashboardPage.js +31 -32
  32. package/lib/esm/pages/BackofficeDashboardPage.js.map +1 -1
  33. package/lib/esm/pages/BackofficeEntityDetailPage.js +167 -172
  34. package/lib/esm/pages/BackofficeEntityDetailPage.js.map +1 -1
  35. package/lib/esm/pages/BackofficeLayoutPage.js +30 -34
  36. package/lib/esm/pages/BackofficeLayoutPage.js.map +1 -1
  37. package/lib/esm/pages/BackofficeToolsOperationPage.js +26 -27
  38. package/lib/esm/pages/BackofficeToolsOperationPage.js.map +1 -1
  39. package/lib/esm/pages/detail/buildTabsItems.js.map +1 -1
  40. package/lib/types/components/backoffice/columns/buildDataTableColumns.d.ts.map +1 -1
  41. package/lib/types/components/backoffice/detail/BackofficeDetailFlagTag.d.ts +1 -1
  42. package/lib/types/components/backoffice/detail/BackofficeDetailFlagTag.d.ts.map +1 -1
  43. package/lib/types/components/backoffice/layout/buildSidebarSections.d.ts +2 -2
  44. package/lib/types/components/backoffice/layout/buildSidebarSections.d.ts.map +1 -1
  45. package/lib/types/components/backoffice/layout/mapViewerToSidebarProfileView.d.ts +1 -1
  46. package/lib/types/components/backoffice/layout/mapViewerToSidebarProfileView.d.ts.map +1 -1
  47. package/lib/types/components/backoffice/pickers/EntityIdPickerDialog.d.ts.map +1 -1
  48. package/lib/types/components/backoffice/pickers/shared/EntityPickerList.d.ts.map +1 -1
  49. package/lib/types/components/backoffice/routing/BackofficeContentError.d.ts.map +1 -1
  50. package/lib/types/components/backoffice/scaffolds/BackofficeEntityListScaffold.d.ts.map +1 -1
  51. package/lib/types/components/backoffice/scaffolds/BackofficeTabbedDetailShell.d.ts +1 -1
  52. package/lib/types/components/backoffice/scaffolds/BackofficeTabbedDetailShell.d.ts.map +1 -1
  53. package/lib/types/pages/BackofficeDashboardPage.d.ts.map +1 -1
  54. package/lib/types/pages/BackofficeEntityDetailPage.d.ts.map +1 -1
  55. package/lib/types/pages/BackofficeLayoutPage.d.ts.map +1 -1
  56. package/lib/types/pages/BackofficeToolsOperationPage.d.ts.map +1 -1
  57. package/lib/types/pages/detail/buildTabsItems.d.ts +1 -1
  58. package/lib/types/pages/detail/buildTabsItems.d.ts.map +1 -1
  59. package/package.json +5 -5
@@ -19,20 +19,19 @@ import { BackofficeToolsQueryBoundary as _ } from "../components/backoffice/tool
19
19
  import { actions as v, form as y, inputHeader as b, keyValueGrid as x, outputStack as S } from "../components/backoffice/tools/backofficeToolsForm.css.js";
20
20
  import { Fragment as C, jsx as w, jsxs as T } from "react/jsx-runtime";
21
21
  import { useTranslation as E } from "react-i18next";
22
- import { Button as D, DataTable as O, SimpleSelect as k } from "@plumile/ui";
23
- import { useCallback as ee, useEffect as A, useMemo as j, useRef as te, useState as M } from "react";
24
- import * as N from "react-relay";
25
- import { Label as P } from "@plumile/ui/atomic/atoms/label/Label.js";
26
- import { Textarea as F } from "@plumile/ui/atomic/atoms/textarea/Textarea.js";
27
- import { CheckboxField as I } from "@plumile/ui/atomic/molecules/checkbox_field/CheckboxField.js";
28
- import { Form as L } from "@plumile/ui/atomic/molecules/form/Form.js";
29
- import { FormErrorBanner as R } from "@plumile/ui/atomic/molecules/form/FormErrorBanner.js";
30
- import { FormGroup as z } from "@plumile/ui/atomic/molecules/form/FormGroup.js";
31
- import { HighlightCode as B } from "@plumile/ui/atomic/molecules/highlight/HighlightCode.js";
32
- import { LazyBackofficeJsonViewer as V } from "@plumile/ui/backoffice/molecules/backoffice_json_viewer/LazyBackofficeJsonViewer.js";
22
+ import { Button as D, DataTable as O, LazyBackofficeJsonViewer as k, SimpleSelect as ee } from "@plumile/ui";
23
+ import { useCallback as te, useEffect as A, useMemo as j, useRef as M, useState as N } from "react";
24
+ import * as P from "react-relay";
25
+ import { Label as F } from "@plumile/ui/atomic/atoms/label/Label.js";
26
+ import { Textarea as I } from "@plumile/ui/atomic/atoms/textarea/Textarea.js";
27
+ import { CheckboxField as L } from "@plumile/ui/atomic/molecules/checkbox_field/CheckboxField.js";
28
+ import { Form as R } from "@plumile/ui/atomic/molecules/form/Form.js";
29
+ import { FormErrorBanner as z } from "@plumile/ui/atomic/molecules/form/FormErrorBanner.js";
30
+ import { FormGroup as B } from "@plumile/ui/atomic/molecules/form/FormGroup.js";
31
+ import { HighlightCode as V } from "@plumile/ui/atomic/molecules/highlight/HighlightCode.js";
33
32
  import { BackofficeToolValidationError as H } from "@plumile/backoffice-core/types.js";
34
33
  //#region src/pages/BackofficeToolsOperationPage.tsx
35
- var { useLazyLoadQuery: U } = N, W = (e, t) => e(t), G = (e, t) => typeof e == "function" ? e(t) : e ?? null, K = (e) => {
34
+ var { useLazyLoadQuery: U } = P, W = (e, t) => e(t), G = (e, t) => typeof e == "function" ? e(t) : e ?? null, K = (e) => {
36
35
  let t = {};
37
36
  return e?.forEach((e) => {
38
37
  e.kind === "boolean" ? t[e.id] = e.defaultValue ?? !1 : t[e.id] = e.defaultValue ?? "";
@@ -126,7 +125,7 @@ var { useLazyLoadQuery: U } = N, W = (e, t) => e(t), G = (e, t) => typeof e == "
126
125
  }, `table-${t}`);
127
126
  }
128
127
  if (e.kind === "code") {
129
- let n = e.label == null ? f : W(e.label, l), a = e.description == null ? void 0 : W(e.description, l), o = e.value(r), c = /* @__PURE__ */ w(B, {
128
+ let n = e.label == null ? f : W(e.label, l), a = e.description == null ? void 0 : W(e.description, l), o = e.value(r), c = /* @__PURE__ */ w(V, {
130
129
  badgeLabel: n,
131
130
  copyCode: o,
132
131
  fallbackCodeText: o
@@ -138,7 +137,7 @@ var { useLazyLoadQuery: U } = N, W = (e, t) => e(t), G = (e, t) => typeof e == "
138
137
  }, `code-${t}`);
139
138
  }
140
139
  if (e.kind === "json") {
141
- let n = e.label == null ? f : W(e.label, l), a = e.description == null ? void 0 : W(e.description, l), o = /* @__PURE__ */ w(V, {
140
+ let n = e.label == null ? f : W(e.label, l), a = e.description == null ? void 0 : W(e.description, l), o = /* @__PURE__ */ w(k, {
142
141
  value: e.value(r),
143
142
  title: n
144
143
  }, `json-${t}`);
@@ -206,7 +205,7 @@ var { useLazyLoadQuery: U } = N, W = (e, t) => e(t), G = (e, t) => typeof e == "
206
205
  data: a
207
206
  }) : null : /* @__PURE__ */ w(C, { children: t.render(a) });
208
207
  }, Q = ({ operation: t }) => {
209
- let { t: r } = E(), { t: a } = e(), { initiativeId: o, projectId: c } = h(), [u, d] = M(j(() => K(t.inputs), [t.inputs])), [f, p] = M(null), [m, g] = M(0), [x, S] = M(null), [O, N] = M(!1), [B, V] = M(null), U = te({
208
+ let { t: r } = E(), { t: a } = e(), { initiativeId: o, projectId: c } = h(), [u, d] = N(j(() => K(t.inputs), [t.inputs])), [f, p] = N(null), [m, g] = N(0), [x, S] = N(null), [O, k] = N(!1), [P, V] = N(null), U = M({
210
209
  initiativeId: o,
211
210
  projectId: c
212
211
  }), G = j(() => ({
@@ -253,7 +252,7 @@ var { useLazyLoadQuery: U } = N, W = (e, t) => e(t), G = (e, t) => typeof e == "
253
252
  };
254
253
  });
255
254
  }, [o, c]);
256
- let q = ee(() => {
255
+ let q = te(() => {
257
256
  if (p(null), o == null || o.trim() === "") {
258
257
  p(a("tools.errors.missingScope"));
259
258
  return;
@@ -275,7 +274,7 @@ var { useLazyLoadQuery: U } = N, W = (e, t) => e(t), G = (e, t) => typeof e == "
275
274
  e instanceof Error ? p(e.message) : p(a("tools.errors.unknown"));
276
275
  return;
277
276
  }
278
- S(e), N(!0), g((e) => e + 1);
277
+ S(e), k(!0), g((e) => e + 1);
279
278
  }, [
280
279
  o,
281
280
  u,
@@ -283,11 +282,11 @@ var { useLazyLoadQuery: U } = N, W = (e, t) => e(t), G = (e, t) => typeof e == "
283
282
  c,
284
283
  a,
285
284
  r
286
- ]), J = j(() => B == null || t.inputs == null ? null : t.inputs.find((e) => e.id === B && e.kind === "entityId") ?? null, [B, t.inputs]), Y = (e) => {
285
+ ]), J = j(() => P == null || t.inputs == null ? null : t.inputs.find((e) => e.id === P && e.kind === "entityId") ?? null, [P, t.inputs]), Y = (e) => {
287
286
  let t = W(e.label, r), i = u[e.id];
288
287
  if (e.kind === "text") {
289
288
  let n = typeof i == "string" ? i : "", a = e.placeholder == null ? void 0 : W(e.placeholder, r);
290
- return /* @__PURE__ */ T(z, { children: [/* @__PURE__ */ w(P, { children: t }), /* @__PURE__ */ w(F, {
289
+ return /* @__PURE__ */ T(B, { children: [/* @__PURE__ */ w(F, { children: t }), /* @__PURE__ */ w(I, {
291
290
  value: n,
292
291
  placeholder: a,
293
292
  onChange: (t) => {
@@ -302,9 +301,9 @@ var { useLazyLoadQuery: U } = N, W = (e, t) => e(t), G = (e, t) => typeof e == "
302
301
  }
303
302
  if (e.kind === "json") {
304
303
  let n = typeof i == "string" ? i : "", o = e.placeholder == null ? void 0 : W(e.placeholder, r), s = typeof e.defaultValue == "string" ? e.defaultValue : "", c = s.trim() !== "", l = a("tools.forms.actions.insertExample");
305
- return /* @__PURE__ */ T(z, { children: [/* @__PURE__ */ T("div", {
304
+ return /* @__PURE__ */ T(B, { children: [/* @__PURE__ */ T("div", {
306
305
  className: b,
307
- children: [/* @__PURE__ */ w(P, { children: t }), c && /* @__PURE__ */ w(D, {
306
+ children: [/* @__PURE__ */ w(F, { children: t }), c && /* @__PURE__ */ w(D, {
308
307
  type: "button",
309
308
  variant: "text",
310
309
  size: "small",
@@ -316,7 +315,7 @@ var { useLazyLoadQuery: U } = N, W = (e, t) => e(t), G = (e, t) => typeof e == "
316
315
  },
317
316
  children: l
318
317
  })]
319
- }), /* @__PURE__ */ w(F, {
318
+ }), /* @__PURE__ */ w(I, {
320
319
  value: n,
321
320
  placeholder: o,
322
321
  onChange: (t) => {
@@ -335,7 +334,7 @@ var { useLazyLoadQuery: U } = N, W = (e, t) => e(t), G = (e, t) => typeof e == "
335
334
  value: e.value,
336
335
  label: W(e.label, r)
337
336
  }));
338
- return /* @__PURE__ */ T(z, { children: [/* @__PURE__ */ w(P, { children: t }), /* @__PURE__ */ w(k, {
337
+ return /* @__PURE__ */ T(B, { children: [/* @__PURE__ */ w(F, { children: t }), /* @__PURE__ */ w(ee, {
339
338
  options: a,
340
339
  value: n,
341
340
  onChange: (t) => {
@@ -347,7 +346,7 @@ var { useLazyLoadQuery: U } = N, W = (e, t) => e(t), G = (e, t) => typeof e == "
347
346
  placeholder: t
348
347
  })] }, e.id);
349
348
  }
350
- if (e.kind === "boolean") return /* @__PURE__ */ w(z, { children: /* @__PURE__ */ w(I, {
349
+ if (e.kind === "boolean") return /* @__PURE__ */ w(B, { children: /* @__PURE__ */ w(L, {
351
350
  label: t,
352
351
  checked: typeof i == "boolean" ? i : !1,
353
352
  onChange: (t) => {
@@ -372,7 +371,7 @@ var { useLazyLoadQuery: U } = N, W = (e, t) => e(t), G = (e, t) => typeof e == "
372
371
  }));
373
372
  }
374
373
  });
375
- return /* @__PURE__ */ T(z, { children: [/* @__PURE__ */ w(P, { children: t }), r.trim() === "" ? a() : /* @__PURE__ */ w(l, {
374
+ return /* @__PURE__ */ T(B, { children: [/* @__PURE__ */ w(F, { children: t }), r.trim() === "" ? a() : /* @__PURE__ */ w(l, {
376
375
  entityId: e.entity,
377
376
  id: r,
378
377
  children: (e) => a(e)
@@ -389,11 +388,11 @@ var { useLazyLoadQuery: U } = N, W = (e, t) => e(t), G = (e, t) => typeof e == "
389
388
  }) })), /* @__PURE__ */ T(C, { children: [/* @__PURE__ */ T(s, {
390
389
  title: W(t.title, r),
391
390
  description: t.subtitle == null ? void 0 : W(t.subtitle, r),
392
- children: [/* @__PURE__ */ T(L, {
391
+ children: [/* @__PURE__ */ T(R, {
393
392
  onSubmit: X,
394
393
  className: y,
395
394
  children: [
396
- /* @__PURE__ */ w(R, { message: f }),
395
+ /* @__PURE__ */ w(z, { message: f }),
397
396
  Z,
398
397
  /* @__PURE__ */ w("div", {
399
398
  className: v,
@@ -1 +1 @@
1
- {"version":3,"file":"BackofficeToolsOperationPage.js","names":[],"sources":["../../../src/pages/BackofficeToolsOperationPage.tsx"],"sourcesContent":["/* eslint-disable no-ternary */\n/* eslint-disable @typescript-eslint/no-base-to-string */\nimport {\n type JSX,\n type ReactNode,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport type { TFunction } from 'i18next';\nimport { useTranslation } from 'react-i18next';\nimport * as ReactRelay from 'react-relay';\nimport type { OperationType } from 'relay-runtime';\nimport {\n type BackofficeToolInputSpec,\n type BackofficeToolOperation,\n type BackofficeToolOutputSpec,\n type BackofficeValueLabel,\n type I18nLabel,\n BackofficeToolValidationError,\n} from '@plumile/backoffice-core/types.js';\nimport { Textarea } from '@plumile/ui/atomic/atoms/textarea/Textarea.js';\nimport { Label } from '@plumile/ui/atomic/atoms/label/Label.js';\nimport { CheckboxField } from '@plumile/ui/atomic/molecules/checkbox_field/CheckboxField.js';\nimport { Form } from '@plumile/ui/atomic/molecules/form/Form.js';\nimport { FormGroup } from '@plumile/ui/atomic/molecules/form/FormGroup.js';\nimport { FormErrorBanner } from '@plumile/ui/atomic/molecules/form/FormErrorBanner.js';\nimport { Button, SimpleSelect, DataTable } from '@plumile/ui';\nimport { HighlightCode } from '@plumile/ui/atomic/molecules/highlight/HighlightCode.js';\nimport { LazyBackofficeJsonViewer } from '@plumile/ui/backoffice/molecules/backoffice_json_viewer/LazyBackofficeJsonViewer.js';\n\nimport { BackofficeDetailField } from '../components/backoffice/detail/BackofficeDetailField.js';\nimport { BackofficeDetailPayload } from '../components/backoffice/detail/BackofficeDetailPayload.js';\nimport { BackofficeDetailSection } from '../components/backoffice/detail/BackofficeDetailSection.js';\nimport { buildDataTableColumns } from '../components/backoffice/columns/buildDataTableColumns.js';\nimport { BackofficeErrorBoundary } from '../components/backoffice/errors/BackofficeErrorBoundary.js';\nimport { EntityFilterValueText } from '../components/backoffice/filters/EntityFilterValue.js';\nimport { EntityIdFilterField } from '../components/backoffice/filters/EntityIdFilterField.js';\nimport { EntityIdPickerDialog } from '../components/backoffice/pickers/EntityIdPickerDialog.js';\nimport { BackofficeToolsErrorFallback } from '../components/backoffice/tools/BackofficeToolsErrorFallback.js';\nimport { BackofficeToolsDocPanel } from '../components/backoffice/tools/BackofficeToolsDocPanel.js';\nimport { BackofficeToolsQueryBoundary } from '../components/backoffice/tools/BackofficeToolsQueryBoundary.js';\nimport { BackofficeToolsPageLayout } from '../components/backoffice/tools/BackofficeToolsPageLayout.js';\nimport { useBackofficeToolsParams } from '../components/backoffice/tools/BackofficeToolsParamsContext.js';\nimport { useBackofficeReactTranslation } from '../i18n/useBackofficeReactTranslation.js';\nimport { useBackofficeConfig } from '../provider/BackofficeConfigContext.js';\nimport { BackofficeRightPageLayout } from '../components/backoffice/layout/breadcrumb/BackofficeRightPageLayout.js';\nimport { buildToolBreadcrumb } from '../components/backoffice/layout/breadcrumb/buildBreadcrumbs.js';\n\nimport * as styles from '../components/backoffice/tools/backofficeToolsForm.css.js';\nimport * as docPanelStyles from '../components/backoffice/tools/backofficeToolsDocPanel.css.js';\n\nconst { useLazyLoadQuery } = ReactRelay;\n\nconst resolveLabel = (label: I18nLabel, tApp: TFunction): string => {\n return label(tApp);\n};\n\nconst resolveValueLabel = (\n value: BackofficeValueLabel | null | undefined,\n tApp: TFunction,\n): string | number | null => {\n if (typeof value === 'function') {\n return value(tApp);\n }\n if (value == null) {\n return null;\n }\n return value;\n};\n\ntype ToolInputValues = Record<string, unknown>;\ntype EntityIdInputSpec = Extract<BackofficeToolInputSpec, { kind: 'entityId' }>;\n\ntype BuildToolVariablesInput = {\n operation: BackofficeToolOperation;\n inputValues: ToolInputValues;\n initiativeId: string | null;\n projectId: string | null;\n run: boolean;\n};\n\nconst buildInitialInputValues = (\n inputs?: readonly BackofficeToolInputSpec[],\n): ToolInputValues => {\n const output: ToolInputValues = {};\n inputs?.forEach((input) => {\n if (input.kind === 'boolean') {\n output[input.id] = input.defaultValue ?? false;\n } else {\n output[input.id] = input.defaultValue ?? '';\n }\n });\n return output;\n};\n\nconst cleanInputValues = (values: ToolInputValues): ToolInputValues => {\n const output: ToolInputValues = {};\n Object.entries(values).forEach(([key, value]) => {\n if (value == null) {\n return;\n }\n if (typeof value === 'string') {\n const trimmed = value.trim();\n if (trimmed === '') {\n return;\n }\n output[key] = trimmed;\n return;\n }\n output[key] = value;\n });\n return output;\n};\n\nconst buildToolVariables = ({\n operation,\n inputValues,\n initiativeId,\n projectId,\n run,\n}: BuildToolVariablesInput): Record<string, unknown> => {\n const cleanedInput = cleanInputValues(inputValues);\n\n const hasProjectField = Object.prototype.hasOwnProperty.call(\n inputValues,\n 'projectId',\n );\n const hasProjectEntity =\n operation.inputs?.some((input) => {\n return input.kind === 'entityId' && input.entity === 'projects';\n }) ?? false;\n if (\n (hasProjectField || hasProjectEntity) &&\n projectId != null &&\n projectId.trim() !== ''\n ) {\n const existing = cleanedInput.projectId;\n if (existing == null || String(existing).trim() === '') {\n cleanedInput.projectId = projectId;\n }\n }\n\n const defaultVariables = {\n scope: {\n initiativeId: initiativeId ?? '',\n },\n input: cleanedInput,\n run,\n };\n\n if (operation.buildVariables == null) {\n return defaultVariables;\n }\n\n const custom = operation.buildVariables(cleanedInput, {\n scope: {\n initiativeId,\n projectId,\n },\n run,\n });\n return {\n ...defaultVariables,\n ...custom,\n };\n};\n\nconst shouldShowProjectPicker = (\n operation: BackofficeToolOperation,\n): boolean => {\n if (operation.showProjectPicker != null) {\n return operation.showProjectPicker;\n }\n const { inputs } = operation;\n if (inputs == null) {\n return false;\n }\n return inputs.some((input) => {\n if (input.kind === 'entityId' && input.entity === 'projects') {\n return true;\n }\n return input.id === 'projectId';\n });\n};\n\nconst parseInputJson = (value: string): Record<string, unknown> | null => {\n try {\n const parsed: unknown = JSON.parse(value);\n if (parsed == null || typeof parsed !== 'object' || Array.isArray(parsed)) {\n return null;\n }\n return parsed as Record<string, unknown>;\n } catch {\n return null;\n }\n};\n\nconst applyPickerUpdatesToJson = (\n currentValue: string,\n updates: Record<string, string>,\n): string | null => {\n const parsed = parseInputJson(currentValue);\n if (parsed == null) {\n return null;\n }\n\n let next = parsed;\n\n Object.entries(updates).forEach(([key, nextValue]) => {\n if (!Object.prototype.hasOwnProperty.call(parsed, key)) {\n return;\n }\n if (parsed[key] === nextValue) {\n return;\n }\n if (next === parsed) {\n next = { ...parsed };\n }\n next[key] = nextValue;\n });\n\n const nextJson = JSON.stringify(next, null, 2);\n if (nextJson === currentValue) {\n return null;\n }\n\n return nextJson;\n};\n\ntype OutputRendererProps = {\n outputs: readonly BackofficeToolOutputSpec[];\n data: unknown;\n wrapDefault?: boolean;\n};\n\nconst resolveRowId = (row: unknown, index: number): string => {\n if (row != null && typeof row === 'object') {\n const record = row as Record<string, unknown>;\n const maybeId = record.id;\n if (typeof maybeId === 'string' && maybeId.trim() !== '') {\n return maybeId;\n }\n const maybeKey = record.key;\n if (typeof maybeKey === 'string' && maybeKey.trim() !== '') {\n return maybeKey;\n }\n }\n return String(index);\n};\n\nconst OutputRenderer = ({\n outputs,\n data,\n wrapDefault = false,\n}: OutputRendererProps): JSX.Element => {\n const { t: tApp } = useTranslation();\n const { t } = useBackofficeReactTranslation();\n const { entities } = useBackofficeConfig();\n const defaultTitle = t('tools.output');\n\n const nodes = outputs.map((output, index) => {\n if (output.kind === 'table') {\n const title =\n output.label != null ? resolveLabel(output.label, tApp) : defaultTitle;\n const description =\n output.description != null\n ? resolveLabel(output.description, tApp)\n : undefined;\n const columns = buildDataTableColumns(output.columns, {\n tApp,\n t,\n resolveEntityHref: (entityId, refId) => {\n const entity = entities[entityId];\n if (entity == null) {\n return null;\n }\n return entity.routes.detail(refId);\n },\n });\n const resolvedRows = output.rows(data);\n const rows = Array.isArray(resolvedRows) ? resolvedRows : [];\n const tableNode = (\n <DataTable\n key={`table-${index}`}\n columns={columns}\n rows={rows}\n getRowId={resolveRowId}\n />\n );\n if (wrapDefault) {\n return tableNode;\n }\n return (\n <BackofficeDetailSection\n key={`table-${index}`}\n title={title}\n description={description}\n >\n {tableNode}\n </BackofficeDetailSection>\n );\n }\n\n if (output.kind === 'code') {\n const title =\n output.label != null ? resolveLabel(output.label, tApp) : defaultTitle;\n const description =\n output.description != null\n ? resolveLabel(output.description, tApp)\n : undefined;\n const value = output.value(data);\n const codeNode = (\n <HighlightCode\n key={`code-${index}`}\n badgeLabel={title}\n copyCode={value}\n fallbackCodeText={value}\n />\n );\n if (wrapDefault) {\n return codeNode;\n }\n return (\n <BackofficeDetailSection\n key={`code-${index}`}\n title={title}\n description={description}\n >\n {codeNode}\n </BackofficeDetailSection>\n );\n }\n\n if (output.kind === 'json') {\n const title =\n output.label != null ? resolveLabel(output.label, tApp) : defaultTitle;\n const description =\n output.description != null\n ? resolveLabel(output.description, tApp)\n : undefined;\n const value = output.value(data);\n const jsonNode = (\n <LazyBackofficeJsonViewer\n key={`json-${index}`}\n value={value}\n title={title}\n />\n );\n if (wrapDefault || description == null) {\n return jsonNode;\n }\n return (\n <BackofficeDetailSection\n key={`json-${index}`}\n title={title}\n description={description}\n >\n {jsonNode}\n </BackofficeDetailSection>\n );\n }\n\n if (output.kind === 'keyValue') {\n const title =\n output.label != null ? resolveLabel(output.label, tApp) : defaultTitle;\n const description =\n output.description != null\n ? resolveLabel(output.description, tApp)\n : undefined;\n const items = output.items.map((item) => {\n const label = resolveLabel(item.label, tApp);\n const value = resolveValueLabel(item.value(data), tApp);\n return {\n id: label,\n label,\n size: 'm' as const,\n value,\n };\n });\n const gridNode = (\n <div key={`kv-${index}`} className={styles.keyValueGrid}>\n {items.map((item) => {\n return (\n <BackofficeDetailField\n key={item.id}\n id={item.id}\n label={item.label}\n size={item.size}\n value={item.value}\n />\n );\n })}\n </div>\n );\n if (wrapDefault) {\n return gridNode;\n }\n return (\n <BackofficeDetailSection\n key={`kv-${index}`}\n title={title}\n description={description}\n >\n {gridNode}\n </BackofficeDetailSection>\n );\n }\n\n if (output.kind === 'payload') {\n const title = resolveLabel(output.label, tApp);\n const description =\n output.description != null\n ? resolveLabel(output.description, tApp)\n : undefined;\n return (\n <BackofficeDetailPayload\n key={`payload-${index}`}\n title={title}\n description={description}\n content={output.value(data)}\n format={output.format}\n />\n );\n }\n\n const customNode = output.render(data) as ReactNode;\n if (wrapDefault) {\n return <div key={`custom-${index}`}>{customNode}</div>;\n }\n if (output.label != null) {\n const title = resolveLabel(output.label, tApp);\n return (\n <BackofficeDetailSection key={`custom-${index}`} title={title}>\n {customNode}\n </BackofficeDetailSection>\n );\n }\n return <div key={`custom-${index}`}>{customNode}</div>;\n });\n\n return <div className={styles.outputStack}>{nodes}</div>;\n};\n\ntype OperationOutputProps = {\n operation: BackofficeToolOperation;\n variables: Record<string, unknown>;\n fetchKey: number;\n};\n\nconst OperationOutput = ({\n operation,\n variables,\n fetchKey,\n}: OperationOutputProps): JSX.Element | null => {\n const { t } = useBackofficeReactTranslation();\n\n const data = useLazyLoadQuery<OperationType>(\n operation.query,\n variables as never,\n {\n fetchKey,\n fetchPolicy: 'store-or-network',\n },\n );\n\n if (operation.render != null) {\n const content = operation.render(data) as ReactNode;\n return <>{content}</>;\n }\n\n if (operation.outputs != null && operation.outputs.length > 0) {\n const shouldWrapDefault = operation.outputs.every((output) => {\n if (output.kind === 'payload') {\n return false;\n }\n const hasDescription =\n 'description' in output && output.description != null;\n return output.label == null && !hasDescription;\n });\n\n if (shouldWrapDefault) {\n return (\n <BackofficeDetailSection title={t('tools.output')}>\n <OutputRenderer outputs={operation.outputs} data={data} wrapDefault />\n </BackofficeDetailSection>\n );\n }\n\n return <OutputRenderer outputs={operation.outputs} data={data} />;\n }\n\n return null;\n};\n\ntype OperationContentProps = {\n operation: BackofficeToolOperation;\n};\n\nconst OperationContent = ({\n operation,\n}: OperationContentProps): JSX.Element => {\n const { t: tApp } = useTranslation();\n const { t } = useBackofficeReactTranslation();\n const { initiativeId, projectId } = useBackofficeToolsParams();\n\n const initialInputs = useMemo(() => {\n return buildInitialInputValues(operation.inputs);\n }, [operation.inputs]);\n\n const [inputValues, setInputValues] =\n useState<ToolInputValues>(initialInputs);\n const [formError, setFormError] = useState<string | null>(null);\n const [fetchKey, setFetchKey] = useState(0);\n const [submittedVariables, setSubmittedVariables] = useState<Record<\n string,\n unknown\n > | null>(null);\n const [hasRun, setHasRun] = useState(false);\n const [activePickerId, setActivePickerId] = useState<string | null>(null);\n const previousPickerValuesRef = useRef({\n initiativeId,\n projectId,\n });\n\n const pickerScope = useMemo(() => {\n return {\n initiativeId,\n projectId,\n };\n }, [initiativeId, projectId]);\n\n useEffect(() => {\n if (operation.inputs == null) {\n return;\n }\n const hasInitiativeInput = operation.inputs.some((input) => {\n return input.id === 'initiativeId';\n });\n const hasProjectInput = operation.inputs.some((input) => {\n return input.id === 'projectId';\n });\n if (!hasInitiativeInput && !hasProjectInput) {\n return;\n }\n\n setInputValues((current) => {\n let updated = current;\n if (\n hasInitiativeInput &&\n initiativeId != null &&\n initiativeId.trim() !== ''\n ) {\n const existing = current.initiativeId;\n if (typeof existing !== 'string' || existing.trim() === '') {\n updated = { ...updated, initiativeId };\n }\n }\n\n if (hasProjectInput && projectId != null && projectId.trim() !== '') {\n const existing = current.projectId;\n if (typeof existing !== 'string' || existing.trim() === '') {\n updated = { ...updated, projectId };\n }\n }\n\n return updated;\n });\n }, [initiativeId, operation.inputs, projectId]);\n\n useEffect(() => {\n const previous = previousPickerValuesRef.current;\n const updates: Record<string, string> = {};\n\n if (previous.initiativeId !== initiativeId) {\n updates.initiativeId = initiativeId ?? '';\n }\n if (previous.projectId !== projectId) {\n updates.projectId = projectId ?? '';\n }\n\n previousPickerValuesRef.current = { initiativeId, projectId };\n\n if (Object.keys(updates).length === 0) {\n return;\n }\n\n setInputValues((current) => {\n const raw = current.inputJson;\n if (typeof raw !== 'string' || raw.trim() === '') {\n return current;\n }\n const nextJson = applyPickerUpdatesToJson(raw, updates);\n if (nextJson == null) {\n return current;\n }\n return { ...current, inputJson: nextJson };\n });\n }, [initiativeId, projectId]);\n\n const handleSubmit = useCallback(() => {\n setFormError(null);\n\n if (initiativeId == null || initiativeId.trim() === '') {\n setFormError(t('tools.errors.missingScope'));\n return;\n }\n\n let nextVariables: Record<string, unknown>;\n try {\n nextVariables = buildToolVariables({\n operation,\n inputValues,\n initiativeId,\n projectId,\n run: true,\n });\n } catch (error) {\n if (error instanceof BackofficeToolValidationError) {\n setFormError(resolveLabel(error.label, tApp));\n return;\n }\n if (error instanceof Error) {\n setFormError(error.message);\n } else {\n setFormError(t('tools.errors.unknown'));\n }\n return;\n }\n\n setSubmittedVariables(nextVariables);\n setHasRun(true);\n setFetchKey((value) => {\n return value + 1;\n });\n }, [initiativeId, inputValues, operation, projectId, t, tApp]);\n\n const activePicker = useMemo(() => {\n if (activePickerId == null || operation.inputs == null) {\n return null;\n }\n const input = operation.inputs.find((item): item is EntityIdInputSpec => {\n return item.id === activePickerId && item.kind === 'entityId';\n });\n return input ?? null;\n }, [activePickerId, operation.inputs]);\n\n const renderInputField = (input: BackofficeToolInputSpec): JSX.Element => {\n const label = resolveLabel(input.label, tApp);\n const value = inputValues[input.id];\n\n if (input.kind === 'text') {\n const resolvedValue = typeof value === 'string' ? value : '';\n const placeholder =\n input.placeholder != null\n ? resolveLabel(input.placeholder, tApp)\n : undefined;\n return (\n <FormGroup key={input.id}>\n <Label>{label}</Label>\n <Textarea\n value={resolvedValue}\n placeholder={placeholder}\n onChange={(event) => {\n setFormError(null);\n setInputValues((current) => {\n return { ...current, [input.id]: event.target.value };\n });\n }}\n rows={4}\n fullWidth\n />\n </FormGroup>\n );\n }\n\n if (input.kind === 'json') {\n const resolvedValue = typeof value === 'string' ? value : '';\n const placeholder =\n input.placeholder != null\n ? resolveLabel(input.placeholder, tApp)\n : undefined;\n const exampleValue =\n typeof input.defaultValue === 'string' ? input.defaultValue : '';\n const canInsertExample = exampleValue.trim() !== '';\n const insertLabel = t('tools.forms.actions.insertExample');\n\n return (\n <FormGroup key={input.id}>\n <div className={styles.inputHeader}>\n <Label>{label}</Label>\n {canInsertExample && (\n <Button\n type=\"button\"\n variant=\"text\"\n size=\"small\"\n onClick={() => {\n setFormError(null);\n setInputValues((current) => {\n return { ...current, [input.id]: exampleValue };\n });\n }}\n >\n {insertLabel}\n </Button>\n )}\n </div>\n <Textarea\n value={resolvedValue}\n placeholder={placeholder}\n onChange={(event) => {\n setFormError(null);\n setInputValues((current) => {\n return { ...current, [input.id]: event.target.value };\n });\n }}\n rows={6}\n fullWidth\n />\n </FormGroup>\n );\n }\n\n if (input.kind === 'enum') {\n const resolvedValue = typeof value === 'string' ? value : '';\n const options = input.options.map((option) => {\n return {\n id: option.value,\n value: option.value,\n label: resolveLabel(option.label, tApp),\n };\n });\n return (\n <FormGroup key={input.id}>\n <Label>{label}</Label>\n <SimpleSelect\n options={options}\n value={resolvedValue}\n onChange={(nextValue) => {\n setFormError(null);\n setInputValues((current) => {\n return { ...current, [input.id]: nextValue };\n });\n }}\n placeholder={label}\n />\n </FormGroup>\n );\n }\n\n if (input.kind === 'boolean') {\n const resolvedValue = typeof value === 'boolean' ? value : false;\n return (\n <FormGroup key={input.id}>\n <CheckboxField\n label={label}\n checked={resolvedValue}\n onChange={(event) => {\n setFormError(null);\n setInputValues((current) => {\n return { ...current, [input.id]: event.target.checked };\n });\n }}\n />\n </FormGroup>\n );\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (input.kind === 'entityId') {\n const resolvedValue = typeof value === 'string' ? value : '';\n const renderField = (displayValue: string | null = null) => {\n const normalizedDisplayValue = displayValue?.trim() ?? '';\n return (\n <EntityIdFilterField\n label={label}\n value={resolvedValue}\n displayValue={normalizedDisplayValue}\n onPick={() => {\n setActivePickerId(input.id);\n }}\n onClear={() => {\n setFormError(null);\n setInputValues((current) => {\n return { ...current, [input.id]: '' };\n });\n }}\n />\n );\n };\n\n return (\n <FormGroup key={input.id}>\n <Label>{label}</Label>\n {resolvedValue.trim() === '' ? (\n renderField()\n ) : (\n <EntityFilterValueText entityId={input.entity} id={resolvedValue}>\n {(resolvedLabel) => {\n return renderField(resolvedLabel);\n }}\n </EntityFilterValueText>\n )}\n </FormGroup>\n );\n }\n\n return <></>;\n };\n\n const handleSubmitEvent = (event: React.FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n handleSubmit();\n };\n\n const formInputs = operation.inputs?.map((input) => {\n return renderInputField(input);\n });\n const isRunDisabled = initiativeId == null || initiativeId.trim() === '';\n let outputNode: ReactNode = null;\n if (hasRun && submittedVariables != null) {\n outputNode = (\n <BackofficeToolsQueryBoundary>\n <OperationOutput\n operation={operation}\n variables={submittedVariables}\n fetchKey={fetchKey}\n />\n </BackofficeToolsQueryBoundary>\n );\n }\n\n return (\n <>\n <BackofficeDetailSection\n title={resolveLabel(operation.title, tApp)}\n description={\n operation.subtitle != null\n ? resolveLabel(operation.subtitle, tApp)\n : undefined\n }\n >\n <Form onSubmit={handleSubmitEvent} className={styles.form}>\n <FormErrorBanner message={formError} />\n {formInputs}\n <div className={styles.actions}>\n <Button\n type=\"submit\"\n variant=\"primary\"\n size=\"small\"\n disabled={isRunDisabled}\n >\n {t('tools.forms.actions.run')}\n </Button>\n </div>\n </Form>\n {activePicker != null && (\n <EntityIdPickerDialog\n isOpen\n entity={activePicker.entity}\n title={resolveLabel(activePicker.label, tApp)}\n scope={pickerScope}\n onClose={() => {\n setActivePickerId(null);\n }}\n onSelectId={(id) => {\n setFormError(null);\n setInputValues((current) => {\n return { ...current, [activePicker.id]: id };\n });\n setActivePickerId(null);\n }}\n />\n )}\n </BackofficeDetailSection>\n {outputNode}\n </>\n );\n};\n\nexport type BackofficeToolsOperationPageProps = {\n operation: BackofficeToolOperation;\n toolId?: string;\n};\n\nexport const BackofficeToolsOperationPage = ({\n operation,\n toolId,\n}: BackofficeToolsOperationPageProps): JSX.Element => {\n const { t: tApp } = useTranslation();\n const { t } = useBackofficeReactTranslation();\n\n const title = resolveLabel(operation.title, tApp);\n const subtitle =\n operation.subtitle != null\n ? resolveLabel(operation.subtitle, tApp)\n : undefined;\n const breadcrumb = buildToolBreadcrumb({ title });\n const showProjectPicker = shouldShowProjectPicker(operation);\n const toolIdLabel = t('tools.meta.idLabel');\n const inputTypeTitle = t('tools.docs.inputTypeTitle');\n const inputExampleTitle = t('tools.docs.inputExampleTitle');\n\n const inputTypeSDL =\n typeof operation.inputTypeSDL === 'string'\n ? operation.inputTypeSDL.trim()\n : '';\n const jsonExample = (() => {\n if (operation.inputs == null) {\n return null;\n }\n const jsonInput = operation.inputs.find((input) => {\n return input.kind === 'json';\n });\n if (jsonInput == null || typeof jsonInput.defaultValue !== 'string') {\n return null;\n }\n const trimmed = jsonInput.defaultValue.trim();\n if (trimmed === '') {\n return null;\n }\n return jsonInput.defaultValue;\n })();\n\n const docPanels: ReactNode[] = [];\n if (inputTypeSDL !== '') {\n docPanels.push(\n <BackofficeToolsDocPanel\n key=\"input-type\"\n title={inputTypeTitle}\n content={inputTypeSDL}\n language=\"graphql\"\n defaultOpen\n />,\n );\n }\n if (jsonExample != null) {\n docPanels.push(\n <BackofficeToolsDocPanel\n key=\"input-example\"\n title={inputExampleTitle}\n content={jsonExample}\n language=\"json\"\n />,\n );\n }\n\n const docPanel =\n docPanels.length > 0 ? (\n <div className={docPanelStyles.panelGroup}>{docPanels}</div>\n ) : undefined;\n\n return (\n <BackofficeRightPageLayout breadcrumb={breadcrumb}>\n <BackofficeToolsPageLayout\n title={title}\n subtitle={subtitle}\n toolId={toolId}\n toolIdLabel={toolIdLabel}\n showProjectPicker={showProjectPicker}\n docPanel={docPanel}\n >\n <BackofficeErrorBoundary\n fallback={({ error, reset }) => {\n return (\n <BackofficeToolsErrorFallback error={error} onRetry={reset} />\n );\n }}\n >\n <OperationContent operation={operation} />\n </BackofficeErrorBoundary>\n </BackofficeToolsPageLayout>\n </BackofficeRightPageLayout>\n );\n};\n\nexport default BackofficeToolsOperationPage;\n"],"mappings":"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"}
1
+ {"version":3,"file":"BackofficeToolsOperationPage.js","names":[],"sources":["../../../src/pages/BackofficeToolsOperationPage.tsx"],"sourcesContent":["/* eslint-disable no-ternary */\n/* eslint-disable @typescript-eslint/no-base-to-string */\nimport {\n type JSX,\n type ReactNode,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport type { TFunction } from 'i18next';\nimport { useTranslation } from 'react-i18next';\nimport * as ReactRelay from 'react-relay';\nimport type { OperationType } from 'relay-runtime';\nimport {\n type BackofficeToolInputSpec,\n type BackofficeToolOperation,\n type BackofficeToolOutputSpec,\n type BackofficeValueLabel,\n type I18nLabel,\n BackofficeToolValidationError,\n} from '@plumile/backoffice-core/types.js';\nimport { Textarea } from '@plumile/ui/atomic/atoms/textarea/Textarea.js';\nimport { Label } from '@plumile/ui/atomic/atoms/label/Label.js';\nimport { CheckboxField } from '@plumile/ui/atomic/molecules/checkbox_field/CheckboxField.js';\nimport { Form } from '@plumile/ui/atomic/molecules/form/Form.js';\nimport { FormGroup } from '@plumile/ui/atomic/molecules/form/FormGroup.js';\nimport { FormErrorBanner } from '@plumile/ui/atomic/molecules/form/FormErrorBanner.js';\nimport {\n Button,\n DataTable,\n LazyBackofficeJsonViewer,\n SimpleSelect,\n} from '@plumile/ui';\nimport { HighlightCode } from '@plumile/ui/atomic/molecules/highlight/HighlightCode.js';\n\nimport { BackofficeDetailField } from '../components/backoffice/detail/BackofficeDetailField.js';\nimport { BackofficeDetailPayload } from '../components/backoffice/detail/BackofficeDetailPayload.js';\nimport { BackofficeDetailSection } from '../components/backoffice/detail/BackofficeDetailSection.js';\nimport { buildDataTableColumns } from '../components/backoffice/columns/buildDataTableColumns.js';\nimport { BackofficeErrorBoundary } from '../components/backoffice/errors/BackofficeErrorBoundary.js';\nimport { EntityFilterValueText } from '../components/backoffice/filters/EntityFilterValue.js';\nimport { EntityIdFilterField } from '../components/backoffice/filters/EntityIdFilterField.js';\nimport { EntityIdPickerDialog } from '../components/backoffice/pickers/EntityIdPickerDialog.js';\nimport { BackofficeToolsErrorFallback } from '../components/backoffice/tools/BackofficeToolsErrorFallback.js';\nimport { BackofficeToolsDocPanel } from '../components/backoffice/tools/BackofficeToolsDocPanel.js';\nimport { BackofficeToolsQueryBoundary } from '../components/backoffice/tools/BackofficeToolsQueryBoundary.js';\nimport { BackofficeToolsPageLayout } from '../components/backoffice/tools/BackofficeToolsPageLayout.js';\nimport { useBackofficeToolsParams } from '../components/backoffice/tools/BackofficeToolsParamsContext.js';\nimport { useBackofficeReactTranslation } from '../i18n/useBackofficeReactTranslation.js';\nimport { useBackofficeConfig } from '../provider/BackofficeConfigContext.js';\nimport { BackofficeRightPageLayout } from '../components/backoffice/layout/breadcrumb/BackofficeRightPageLayout.js';\nimport { buildToolBreadcrumb } from '../components/backoffice/layout/breadcrumb/buildBreadcrumbs.js';\n\nimport * as styles from '../components/backoffice/tools/backofficeToolsForm.css.js';\nimport * as docPanelStyles from '../components/backoffice/tools/backofficeToolsDocPanel.css.js';\n\nconst { useLazyLoadQuery } = ReactRelay;\n\nconst resolveLabel = (label: I18nLabel, tApp: TFunction): string => {\n return label(tApp);\n};\n\nconst resolveValueLabel = (\n value: BackofficeValueLabel | null | undefined,\n tApp: TFunction,\n): string | number | null => {\n if (typeof value === 'function') {\n return value(tApp);\n }\n if (value == null) {\n return null;\n }\n return value;\n};\n\ntype ToolInputValues = Record<string, unknown>;\ntype EntityIdInputSpec = Extract<BackofficeToolInputSpec, { kind: 'entityId' }>;\n\ntype BuildToolVariablesInput = {\n operation: BackofficeToolOperation;\n inputValues: ToolInputValues;\n initiativeId: string | null;\n projectId: string | null;\n run: boolean;\n};\n\nconst buildInitialInputValues = (\n inputs?: readonly BackofficeToolInputSpec[],\n): ToolInputValues => {\n const output: ToolInputValues = {};\n inputs?.forEach((input) => {\n if (input.kind === 'boolean') {\n output[input.id] = input.defaultValue ?? false;\n } else {\n output[input.id] = input.defaultValue ?? '';\n }\n });\n return output;\n};\n\nconst cleanInputValues = (values: ToolInputValues): ToolInputValues => {\n const output: ToolInputValues = {};\n Object.entries(values).forEach(([key, value]) => {\n if (value == null) {\n return;\n }\n if (typeof value === 'string') {\n const trimmed = value.trim();\n if (trimmed === '') {\n return;\n }\n output[key] = trimmed;\n return;\n }\n output[key] = value;\n });\n return output;\n};\n\nconst buildToolVariables = ({\n operation,\n inputValues,\n initiativeId,\n projectId,\n run,\n}: BuildToolVariablesInput): Record<string, unknown> => {\n const cleanedInput = cleanInputValues(inputValues);\n\n const hasProjectField = Object.prototype.hasOwnProperty.call(\n inputValues,\n 'projectId',\n );\n const hasProjectEntity =\n operation.inputs?.some((input) => {\n return input.kind === 'entityId' && input.entity === 'projects';\n }) ?? false;\n if (\n (hasProjectField || hasProjectEntity) &&\n projectId != null &&\n projectId.trim() !== ''\n ) {\n const existing = cleanedInput.projectId;\n if (existing == null || String(existing).trim() === '') {\n cleanedInput.projectId = projectId;\n }\n }\n\n const defaultVariables = {\n scope: {\n initiativeId: initiativeId ?? '',\n },\n input: cleanedInput,\n run,\n };\n\n if (operation.buildVariables == null) {\n return defaultVariables;\n }\n\n const custom = operation.buildVariables(cleanedInput, {\n scope: {\n initiativeId,\n projectId,\n },\n run,\n });\n return {\n ...defaultVariables,\n ...custom,\n };\n};\n\nconst shouldShowProjectPicker = (\n operation: BackofficeToolOperation,\n): boolean => {\n if (operation.showProjectPicker != null) {\n return operation.showProjectPicker;\n }\n const { inputs } = operation;\n if (inputs == null) {\n return false;\n }\n return inputs.some((input) => {\n if (input.kind === 'entityId' && input.entity === 'projects') {\n return true;\n }\n return input.id === 'projectId';\n });\n};\n\nconst parseInputJson = (value: string): Record<string, unknown> | null => {\n try {\n const parsed: unknown = JSON.parse(value);\n if (parsed == null || typeof parsed !== 'object' || Array.isArray(parsed)) {\n return null;\n }\n return parsed as Record<string, unknown>;\n } catch {\n return null;\n }\n};\n\nconst applyPickerUpdatesToJson = (\n currentValue: string,\n updates: Record<string, string>,\n): string | null => {\n const parsed = parseInputJson(currentValue);\n if (parsed == null) {\n return null;\n }\n\n let next = parsed;\n\n Object.entries(updates).forEach(([key, nextValue]) => {\n if (!Object.prototype.hasOwnProperty.call(parsed, key)) {\n return;\n }\n if (parsed[key] === nextValue) {\n return;\n }\n if (next === parsed) {\n next = { ...parsed };\n }\n next[key] = nextValue;\n });\n\n const nextJson = JSON.stringify(next, null, 2);\n if (nextJson === currentValue) {\n return null;\n }\n\n return nextJson;\n};\n\ntype OutputRendererProps = {\n outputs: readonly BackofficeToolOutputSpec[];\n data: unknown;\n wrapDefault?: boolean;\n};\n\nconst resolveRowId = (row: unknown, index: number): string => {\n if (row != null && typeof row === 'object') {\n const record = row as Record<string, unknown>;\n const maybeId = record.id;\n if (typeof maybeId === 'string' && maybeId.trim() !== '') {\n return maybeId;\n }\n const maybeKey = record.key;\n if (typeof maybeKey === 'string' && maybeKey.trim() !== '') {\n return maybeKey;\n }\n }\n return String(index);\n};\n\nconst OutputRenderer = ({\n outputs,\n data,\n wrapDefault = false,\n}: OutputRendererProps): JSX.Element => {\n const { t: tApp } = useTranslation();\n const { t } = useBackofficeReactTranslation();\n const { entities } = useBackofficeConfig();\n const defaultTitle = t('tools.output');\n\n const nodes = outputs.map((output, index) => {\n if (output.kind === 'table') {\n const title =\n output.label != null ? resolveLabel(output.label, tApp) : defaultTitle;\n const description =\n output.description != null\n ? resolveLabel(output.description, tApp)\n : undefined;\n const columns = buildDataTableColumns(output.columns, {\n tApp,\n t,\n resolveEntityHref: (entityId, refId) => {\n const entity = entities[entityId];\n if (entity == null) {\n return null;\n }\n return entity.routes.detail(refId);\n },\n });\n const resolvedRows = output.rows(data);\n const rows = Array.isArray(resolvedRows) ? resolvedRows : [];\n const tableNode = (\n <DataTable\n key={`table-${index}`}\n columns={columns}\n rows={rows}\n getRowId={resolveRowId}\n />\n );\n if (wrapDefault) {\n return tableNode;\n }\n return (\n <BackofficeDetailSection\n key={`table-${index}`}\n title={title}\n description={description}\n >\n {tableNode}\n </BackofficeDetailSection>\n );\n }\n\n if (output.kind === 'code') {\n const title =\n output.label != null ? resolveLabel(output.label, tApp) : defaultTitle;\n const description =\n output.description != null\n ? resolveLabel(output.description, tApp)\n : undefined;\n const value = output.value(data);\n const codeNode = (\n <HighlightCode\n key={`code-${index}`}\n badgeLabel={title}\n copyCode={value}\n fallbackCodeText={value}\n />\n );\n if (wrapDefault) {\n return codeNode;\n }\n return (\n <BackofficeDetailSection\n key={`code-${index}`}\n title={title}\n description={description}\n >\n {codeNode}\n </BackofficeDetailSection>\n );\n }\n\n if (output.kind === 'json') {\n const title =\n output.label != null ? resolveLabel(output.label, tApp) : defaultTitle;\n const description =\n output.description != null\n ? resolveLabel(output.description, tApp)\n : undefined;\n const value = output.value(data);\n const jsonNode = (\n <LazyBackofficeJsonViewer\n key={`json-${index}`}\n value={value}\n title={title}\n />\n );\n if (wrapDefault || description == null) {\n return jsonNode;\n }\n return (\n <BackofficeDetailSection\n key={`json-${index}`}\n title={title}\n description={description}\n >\n {jsonNode}\n </BackofficeDetailSection>\n );\n }\n\n if (output.kind === 'keyValue') {\n const title =\n output.label != null ? resolveLabel(output.label, tApp) : defaultTitle;\n const description =\n output.description != null\n ? resolveLabel(output.description, tApp)\n : undefined;\n const items = output.items.map((item) => {\n const label = resolveLabel(item.label, tApp);\n const value = resolveValueLabel(item.value(data), tApp);\n return {\n id: label,\n label,\n size: 'm' as const,\n value,\n };\n });\n const gridNode = (\n <div key={`kv-${index}`} className={styles.keyValueGrid}>\n {items.map((item) => {\n return (\n <BackofficeDetailField\n key={item.id}\n id={item.id}\n label={item.label}\n size={item.size}\n value={item.value}\n />\n );\n })}\n </div>\n );\n if (wrapDefault) {\n return gridNode;\n }\n return (\n <BackofficeDetailSection\n key={`kv-${index}`}\n title={title}\n description={description}\n >\n {gridNode}\n </BackofficeDetailSection>\n );\n }\n\n if (output.kind === 'payload') {\n const title = resolveLabel(output.label, tApp);\n const description =\n output.description != null\n ? resolveLabel(output.description, tApp)\n : undefined;\n return (\n <BackofficeDetailPayload\n key={`payload-${index}`}\n title={title}\n description={description}\n content={output.value(data)}\n format={output.format}\n />\n );\n }\n\n const customNode = output.render(data) as ReactNode;\n if (wrapDefault) {\n return <div key={`custom-${index}`}>{customNode}</div>;\n }\n if (output.label != null) {\n const title = resolveLabel(output.label, tApp);\n return (\n <BackofficeDetailSection key={`custom-${index}`} title={title}>\n {customNode}\n </BackofficeDetailSection>\n );\n }\n return <div key={`custom-${index}`}>{customNode}</div>;\n });\n\n return <div className={styles.outputStack}>{nodes}</div>;\n};\n\ntype OperationOutputProps = {\n operation: BackofficeToolOperation;\n variables: Record<string, unknown>;\n fetchKey: number;\n};\n\nconst OperationOutput = ({\n operation,\n variables,\n fetchKey,\n}: OperationOutputProps): JSX.Element | null => {\n const { t } = useBackofficeReactTranslation();\n\n const data = useLazyLoadQuery<OperationType>(\n operation.query,\n variables as never,\n {\n fetchKey,\n fetchPolicy: 'store-or-network',\n },\n );\n\n if (operation.render != null) {\n const content = operation.render(data) as ReactNode;\n return <>{content}</>;\n }\n\n if (operation.outputs != null && operation.outputs.length > 0) {\n const shouldWrapDefault = operation.outputs.every((output) => {\n if (output.kind === 'payload') {\n return false;\n }\n const hasDescription =\n 'description' in output && output.description != null;\n return output.label == null && !hasDescription;\n });\n\n if (shouldWrapDefault) {\n return (\n <BackofficeDetailSection title={t('tools.output')}>\n <OutputRenderer outputs={operation.outputs} data={data} wrapDefault />\n </BackofficeDetailSection>\n );\n }\n\n return <OutputRenderer outputs={operation.outputs} data={data} />;\n }\n\n return null;\n};\n\ntype OperationContentProps = {\n operation: BackofficeToolOperation;\n};\n\nconst OperationContent = ({\n operation,\n}: OperationContentProps): JSX.Element => {\n const { t: tApp } = useTranslation();\n const { t } = useBackofficeReactTranslation();\n const { initiativeId, projectId } = useBackofficeToolsParams();\n\n const initialInputs = useMemo(() => {\n return buildInitialInputValues(operation.inputs);\n }, [operation.inputs]);\n\n const [inputValues, setInputValues] =\n useState<ToolInputValues>(initialInputs);\n const [formError, setFormError] = useState<string | null>(null);\n const [fetchKey, setFetchKey] = useState(0);\n const [submittedVariables, setSubmittedVariables] = useState<Record<\n string,\n unknown\n > | null>(null);\n const [hasRun, setHasRun] = useState(false);\n const [activePickerId, setActivePickerId] = useState<string | null>(null);\n const previousPickerValuesRef = useRef({\n initiativeId,\n projectId,\n });\n\n const pickerScope = useMemo(() => {\n return {\n initiativeId,\n projectId,\n };\n }, [initiativeId, projectId]);\n\n useEffect(() => {\n if (operation.inputs == null) {\n return;\n }\n const hasInitiativeInput = operation.inputs.some((input) => {\n return input.id === 'initiativeId';\n });\n const hasProjectInput = operation.inputs.some((input) => {\n return input.id === 'projectId';\n });\n if (!hasInitiativeInput && !hasProjectInput) {\n return;\n }\n\n setInputValues((current) => {\n let updated = current;\n if (\n hasInitiativeInput &&\n initiativeId != null &&\n initiativeId.trim() !== ''\n ) {\n const existing = current.initiativeId;\n if (typeof existing !== 'string' || existing.trim() === '') {\n updated = { ...updated, initiativeId };\n }\n }\n\n if (hasProjectInput && projectId != null && projectId.trim() !== '') {\n const existing = current.projectId;\n if (typeof existing !== 'string' || existing.trim() === '') {\n updated = { ...updated, projectId };\n }\n }\n\n return updated;\n });\n }, [initiativeId, operation.inputs, projectId]);\n\n useEffect(() => {\n const previous = previousPickerValuesRef.current;\n const updates: Record<string, string> = {};\n\n if (previous.initiativeId !== initiativeId) {\n updates.initiativeId = initiativeId ?? '';\n }\n if (previous.projectId !== projectId) {\n updates.projectId = projectId ?? '';\n }\n\n previousPickerValuesRef.current = { initiativeId, projectId };\n\n if (Object.keys(updates).length === 0) {\n return;\n }\n\n setInputValues((current) => {\n const raw = current.inputJson;\n if (typeof raw !== 'string' || raw.trim() === '') {\n return current;\n }\n const nextJson = applyPickerUpdatesToJson(raw, updates);\n if (nextJson == null) {\n return current;\n }\n return { ...current, inputJson: nextJson };\n });\n }, [initiativeId, projectId]);\n\n const handleSubmit = useCallback(() => {\n setFormError(null);\n\n if (initiativeId == null || initiativeId.trim() === '') {\n setFormError(t('tools.errors.missingScope'));\n return;\n }\n\n let nextVariables: Record<string, unknown>;\n try {\n nextVariables = buildToolVariables({\n operation,\n inputValues,\n initiativeId,\n projectId,\n run: true,\n });\n } catch (error) {\n if (error instanceof BackofficeToolValidationError) {\n setFormError(resolveLabel(error.label, tApp));\n return;\n }\n if (error instanceof Error) {\n setFormError(error.message);\n } else {\n setFormError(t('tools.errors.unknown'));\n }\n return;\n }\n\n setSubmittedVariables(nextVariables);\n setHasRun(true);\n setFetchKey((value) => {\n return value + 1;\n });\n }, [initiativeId, inputValues, operation, projectId, t, tApp]);\n\n const activePicker = useMemo(() => {\n if (activePickerId == null || operation.inputs == null) {\n return null;\n }\n const input = operation.inputs.find((item): item is EntityIdInputSpec => {\n return item.id === activePickerId && item.kind === 'entityId';\n });\n return input ?? null;\n }, [activePickerId, operation.inputs]);\n\n const renderInputField = (input: BackofficeToolInputSpec): JSX.Element => {\n const label = resolveLabel(input.label, tApp);\n const value = inputValues[input.id];\n\n if (input.kind === 'text') {\n const resolvedValue = typeof value === 'string' ? value : '';\n const placeholder =\n input.placeholder != null\n ? resolveLabel(input.placeholder, tApp)\n : undefined;\n return (\n <FormGroup key={input.id}>\n <Label>{label}</Label>\n <Textarea\n value={resolvedValue}\n placeholder={placeholder}\n onChange={(event) => {\n setFormError(null);\n setInputValues((current) => {\n return { ...current, [input.id]: event.target.value };\n });\n }}\n rows={4}\n fullWidth\n />\n </FormGroup>\n );\n }\n\n if (input.kind === 'json') {\n const resolvedValue = typeof value === 'string' ? value : '';\n const placeholder =\n input.placeholder != null\n ? resolveLabel(input.placeholder, tApp)\n : undefined;\n const exampleValue =\n typeof input.defaultValue === 'string' ? input.defaultValue : '';\n const canInsertExample = exampleValue.trim() !== '';\n const insertLabel = t('tools.forms.actions.insertExample');\n\n return (\n <FormGroup key={input.id}>\n <div className={styles.inputHeader}>\n <Label>{label}</Label>\n {canInsertExample && (\n <Button\n type=\"button\"\n variant=\"text\"\n size=\"small\"\n onClick={() => {\n setFormError(null);\n setInputValues((current) => {\n return { ...current, [input.id]: exampleValue };\n });\n }}\n >\n {insertLabel}\n </Button>\n )}\n </div>\n <Textarea\n value={resolvedValue}\n placeholder={placeholder}\n onChange={(event) => {\n setFormError(null);\n setInputValues((current) => {\n return { ...current, [input.id]: event.target.value };\n });\n }}\n rows={6}\n fullWidth\n />\n </FormGroup>\n );\n }\n\n if (input.kind === 'enum') {\n const resolvedValue = typeof value === 'string' ? value : '';\n const options = input.options.map((option) => {\n return {\n id: option.value,\n value: option.value,\n label: resolveLabel(option.label, tApp),\n };\n });\n return (\n <FormGroup key={input.id}>\n <Label>{label}</Label>\n <SimpleSelect\n options={options}\n value={resolvedValue}\n onChange={(nextValue) => {\n setFormError(null);\n setInputValues((current) => {\n return { ...current, [input.id]: nextValue };\n });\n }}\n placeholder={label}\n />\n </FormGroup>\n );\n }\n\n if (input.kind === 'boolean') {\n const resolvedValue = typeof value === 'boolean' ? value : false;\n return (\n <FormGroup key={input.id}>\n <CheckboxField\n label={label}\n checked={resolvedValue}\n onChange={(event) => {\n setFormError(null);\n setInputValues((current) => {\n return { ...current, [input.id]: event.target.checked };\n });\n }}\n />\n </FormGroup>\n );\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (input.kind === 'entityId') {\n const resolvedValue = typeof value === 'string' ? value : '';\n const renderField = (displayValue: string | null = null) => {\n const normalizedDisplayValue = displayValue?.trim() ?? '';\n return (\n <EntityIdFilterField\n label={label}\n value={resolvedValue}\n displayValue={normalizedDisplayValue}\n onPick={() => {\n setActivePickerId(input.id);\n }}\n onClear={() => {\n setFormError(null);\n setInputValues((current) => {\n return { ...current, [input.id]: '' };\n });\n }}\n />\n );\n };\n\n return (\n <FormGroup key={input.id}>\n <Label>{label}</Label>\n {resolvedValue.trim() === '' ? (\n renderField()\n ) : (\n <EntityFilterValueText entityId={input.entity} id={resolvedValue}>\n {(resolvedLabel) => {\n return renderField(resolvedLabel);\n }}\n </EntityFilterValueText>\n )}\n </FormGroup>\n );\n }\n\n return <></>;\n };\n\n const handleSubmitEvent = (event: React.FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n handleSubmit();\n };\n\n const formInputs = operation.inputs?.map((input) => {\n return renderInputField(input);\n });\n const isRunDisabled = initiativeId == null || initiativeId.trim() === '';\n let outputNode: ReactNode = null;\n if (hasRun && submittedVariables != null) {\n outputNode = (\n <BackofficeToolsQueryBoundary>\n <OperationOutput\n operation={operation}\n variables={submittedVariables}\n fetchKey={fetchKey}\n />\n </BackofficeToolsQueryBoundary>\n );\n }\n\n return (\n <>\n <BackofficeDetailSection\n title={resolveLabel(operation.title, tApp)}\n description={\n operation.subtitle != null\n ? resolveLabel(operation.subtitle, tApp)\n : undefined\n }\n >\n <Form onSubmit={handleSubmitEvent} className={styles.form}>\n <FormErrorBanner message={formError} />\n {formInputs}\n <div className={styles.actions}>\n <Button\n type=\"submit\"\n variant=\"primary\"\n size=\"small\"\n disabled={isRunDisabled}\n >\n {t('tools.forms.actions.run')}\n </Button>\n </div>\n </Form>\n {activePicker != null && (\n <EntityIdPickerDialog\n isOpen\n entity={activePicker.entity}\n title={resolveLabel(activePicker.label, tApp)}\n scope={pickerScope}\n onClose={() => {\n setActivePickerId(null);\n }}\n onSelectId={(id) => {\n setFormError(null);\n setInputValues((current) => {\n return { ...current, [activePicker.id]: id };\n });\n setActivePickerId(null);\n }}\n />\n )}\n </BackofficeDetailSection>\n {outputNode}\n </>\n );\n};\n\nexport type BackofficeToolsOperationPageProps = {\n operation: BackofficeToolOperation;\n toolId?: string;\n};\n\nexport const BackofficeToolsOperationPage = ({\n operation,\n toolId,\n}: BackofficeToolsOperationPageProps): JSX.Element => {\n const { t: tApp } = useTranslation();\n const { t } = useBackofficeReactTranslation();\n\n const title = resolveLabel(operation.title, tApp);\n const subtitle =\n operation.subtitle != null\n ? resolveLabel(operation.subtitle, tApp)\n : undefined;\n const breadcrumb = buildToolBreadcrumb({ title });\n const showProjectPicker = shouldShowProjectPicker(operation);\n const toolIdLabel = t('tools.meta.idLabel');\n const inputTypeTitle = t('tools.docs.inputTypeTitle');\n const inputExampleTitle = t('tools.docs.inputExampleTitle');\n\n const inputTypeSDL =\n typeof operation.inputTypeSDL === 'string'\n ? operation.inputTypeSDL.trim()\n : '';\n const jsonExample = (() => {\n if (operation.inputs == null) {\n return null;\n }\n const jsonInput = operation.inputs.find((input) => {\n return input.kind === 'json';\n });\n if (jsonInput == null || typeof jsonInput.defaultValue !== 'string') {\n return null;\n }\n const trimmed = jsonInput.defaultValue.trim();\n if (trimmed === '') {\n return null;\n }\n return jsonInput.defaultValue;\n })();\n\n const docPanels: ReactNode[] = [];\n if (inputTypeSDL !== '') {\n docPanels.push(\n <BackofficeToolsDocPanel\n key=\"input-type\"\n title={inputTypeTitle}\n content={inputTypeSDL}\n language=\"graphql\"\n defaultOpen\n />,\n );\n }\n if (jsonExample != null) {\n docPanels.push(\n <BackofficeToolsDocPanel\n key=\"input-example\"\n title={inputExampleTitle}\n content={jsonExample}\n language=\"json\"\n />,\n );\n }\n\n const docPanel =\n docPanels.length > 0 ? (\n <div className={docPanelStyles.panelGroup}>{docPanels}</div>\n ) : undefined;\n\n return (\n <BackofficeRightPageLayout breadcrumb={breadcrumb}>\n <BackofficeToolsPageLayout\n title={title}\n subtitle={subtitle}\n toolId={toolId}\n toolIdLabel={toolIdLabel}\n showProjectPicker={showProjectPicker}\n docPanel={docPanel}\n >\n <BackofficeErrorBoundary\n fallback={({ error, reset }) => {\n return (\n <BackofficeToolsErrorFallback error={error} onRetry={reset} />\n );\n }}\n >\n <OperationContent operation={operation} />\n </BackofficeErrorBoundary>\n </BackofficeToolsPageLayout>\n </BackofficeRightPageLayout>\n );\n};\n\nexport default BackofficeToolsOperationPage;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0DA,IAAM,EAAE,wBAAqB,GAEvB,KAAgB,GAAkB,MAC/B,EAAM,EAAK,EAGd,KACJ,GACA,MAEI,OAAO,KAAU,aACZ,EAAM,EAAK,GAEhB,KACK,MAgBL,KACJ,MACoB;CACpB,IAAM,IAA0B,EAAE;AAQlC,QAPA,GAAQ,SAAS,MAAU;AACzB,EAAI,EAAM,SAAS,YACjB,EAAO,EAAM,MAAM,EAAM,gBAAgB,KAEzC,EAAO,EAAM,MAAM,EAAM,gBAAgB;GAE3C,EACK;GAGH,KAAoB,MAA6C;CACrE,IAAM,IAA0B,EAAE;AAelC,QAdA,OAAO,QAAQ,EAAO,CAAC,SAAS,CAAC,GAAK,OAAW;AAC3C,WAAS,MAGb;OAAI,OAAO,KAAU,UAAU;IAC7B,IAAM,IAAU,EAAM,MAAM;AAC5B,QAAI,MAAY,GACd;AAEF,MAAO,KAAO;AACd;;AAEF,KAAO,KAAO;;GACd,EACK;GAGH,MAAsB,EAC1B,cACA,gBACA,iBACA,cACA,aACsD;CACtD,IAAM,IAAe,EAAiB,EAAY,EAE5C,IAAkB,OAAO,UAAU,eAAe,KACtD,GACA,YACD,EACK,IACJ,EAAU,QAAQ,MAAM,MACf,EAAM,SAAS,cAAc,EAAM,WAAW,WACrD,IAAI;AACR,MACG,KAAmB,MACpB,KAAa,QACb,EAAU,MAAM,KAAK,IACrB;EACA,IAAM,IAAW,EAAa;AAC9B,GAAI,KAAY,QAAQ,OAAO,EAAS,CAAC,MAAM,KAAK,QAClD,EAAa,YAAY;;CAI7B,IAAM,IAAmB;EACvB,OAAO,EACL,cAAc,KAAgB,IAC/B;EACD,OAAO;EACP;EACD;AAED,KAAI,EAAU,kBAAkB,KAC9B,QAAO;CAGT,IAAM,IAAS,EAAU,eAAe,GAAc;EACpD,OAAO;GACL;GACA;GACD;EACD;EACD,CAAC;AACF,QAAO;EACL,GAAG;EACH,GAAG;EACJ;GAGG,KACJ,MACY;AACZ,KAAI,EAAU,qBAAqB,KACjC,QAAO,EAAU;CAEnB,IAAM,EAAE,cAAW;AAInB,QAHI,KAAU,OACL,KAEF,EAAO,MAAM,MACd,EAAM,SAAS,cAAc,EAAM,WAAW,aACzC,KAEF,EAAM,OAAO,YACpB;GAGE,KAAkB,MAAkD;AACxE,KAAI;EACF,IAAM,IAAkB,KAAK,MAAM,EAAM;AAIzC,SAHsB,OAAO,KAAW,aAApC,KAAgD,MAAM,QAAQ,EAAO,GAChE,OAEF;SACD;AACN,SAAO;;GAIL,MACJ,GACA,MACkB;CAClB,IAAM,IAAS,EAAe,EAAa;AAC3C,KAAI,KAAU,KACZ,QAAO;CAGT,IAAI,IAAO;AAEX,QAAO,QAAQ,EAAQ,CAAC,SAAS,CAAC,GAAK,OAAe;AAC/C,SAAO,UAAU,eAAe,KAAK,GAAQ,EAAI,IAGlD,EAAO,OAAS,MAGhB,MAAS,MACX,IAAO,EAAE,GAAG,GAAQ,GAEtB,EAAK,KAAO;GACZ;CAEF,IAAM,IAAW,KAAK,UAAU,GAAM,MAAM,EAAE;AAK9C,QAJI,MAAa,IACR,OAGF;GASH,KAAgB,GAAc,MAA0B;AAC5D,KAAmB,OAAO,KAAQ,YAA9B,GAAwC;EAC1C,IAAM,IAAS,GACT,IAAU,EAAO;AACvB,MAAI,OAAO,KAAY,YAAY,EAAQ,MAAM,KAAK,GACpD,QAAO;EAET,IAAM,IAAW,EAAO;AACxB,MAAI,OAAO,KAAa,YAAY,EAAS,MAAM,KAAK,GACtD,QAAO;;AAGX,QAAO,OAAO,EAAM;GAGhB,KAAkB,EACtB,YACA,SACA,iBAAc,SACwB;CACtC,IAAM,EAAE,GAAG,MAAS,GAAgB,EAC9B,EAAE,SAAM,GAA+B,EACvC,EAAE,gBAAa,GAAqB,EACpC,IAAe,EAAE,eAAe;AAsLtC,QAAO,kBAAC,OAAD;EAAK,WAAW;YApLT,EAAQ,KAAK,GAAQ,MAAU;AAC3C,OAAI,EAAO,SAAS,SAAS;IAC3B,IAAM,IACJ,EAAO,SAAS,OAA0C,IAAnC,EAAa,EAAO,OAAO,EAAK,EACnD,IACJ,EAAO,eAAe,OAElB,KAAA,IADA,EAAa,EAAO,aAAa,EAAK,EAEtC,IAAU,EAAsB,EAAO,SAAS;KACpD;KACA;KACA,oBAAoB,GAAU,MAAU;MACtC,IAAM,IAAS,EAAS;AAIxB,aAHI,KAAU,OACL,OAEF,EAAO,OAAO,OAAO,EAAM;;KAErC,CAAC,EACI,IAAe,EAAO,KAAK,EAAK,EAEhC,IACJ,kBAAC,GAAD;KAEW;KACH,MALG,MAAM,QAAQ,EAAa,GAAG,IAAe,EAAE;KAMxD,UAAU;KACV,EAJK,SAAS,IAId;AAKJ,WAHI,IACK,IAGP,kBAAC,GAAD;KAES;KACM;eAEZ;KACuB,EALnB,SAAS,IAKU;;AAI9B,OAAI,EAAO,SAAS,QAAQ;IAC1B,IAAM,IACJ,EAAO,SAAS,OAA0C,IAAnC,EAAa,EAAO,OAAO,EAAK,EACnD,IACJ,EAAO,eAAe,OAElB,KAAA,IADA,EAAa,EAAO,aAAa,EAAK,EAEtC,IAAQ,EAAO,MAAM,EAAK,EAC1B,IACJ,kBAAC,GAAD;KAEE,YAAY;KACZ,UAAU;KACV,kBAAkB;KAClB,EAJK,QAAQ,IAIb;AAKJ,WAHI,IACK,IAGP,kBAAC,GAAD;KAES;KACM;eAEZ;KACuB,EALnB,QAAQ,IAKW;;AAI9B,OAAI,EAAO,SAAS,QAAQ;IAC1B,IAAM,IACJ,EAAO,SAAS,OAA0C,IAAnC,EAAa,EAAO,OAAO,EAAK,EACnD,IACJ,EAAO,eAAe,OAElB,KAAA,IADA,EAAa,EAAO,aAAa,EAAK,EAGtC,IACJ,kBAAC,GAAD;KAES,OAJG,EAAO,MAAM,EAAK;KAKrB;KACP,EAHK,QAAQ,IAGb;AAKJ,WAHI,KAAe,KAAe,OACzB,IAGP,kBAAC,GAAD;KAES;KACM;eAEZ;KACuB,EALnB,QAAQ,IAKW;;AAI9B,OAAI,EAAO,SAAS,YAAY;IAC9B,IAAM,IACJ,EAAO,SAAS,OAA0C,IAAnC,EAAa,EAAO,OAAO,EAAK,EACnD,IACJ,EAAO,eAAe,OAElB,KAAA,IADA,EAAa,EAAO,aAAa,EAAK,EAYtC,IACJ,kBAAC,OAAD;KAAyB,WAAW;eAXxB,EAAO,MAAM,KAAK,MAAS;MACvC,IAAM,IAAQ,EAAa,EAAK,OAAO,EAAK;AAE5C,aAAO;OACL,IAAI;OACJ;OACA,MAAM;OACN,OALY,EAAkB,EAAK,MAAM,EAAK,EAAE,EAAK;OAMtD;OACD,CAGS,KAAK,MAER,kBAAC,GAAD;MAEE,IAAI,EAAK;MACT,OAAO,EAAK;MACZ,MAAM,EAAK;MACX,OAAO,EAAK;MACZ,EALK,EAAK,GAKV,CAEJ;KACE,EAZI,MAAM,IAYV;AAKR,WAHI,IACK,IAGP,kBAAC,GAAD;KAES;KACM;eAEZ;KACuB,EALnB,MAAM,IAKa;;AAI9B,OAAI,EAAO,SAAS,UAMlB,QACE,kBAAC,GAAD;IAES,OARG,EAAa,EAAO,OAAO,EAAK;IAS7B,aAPf,EAAO,eAAe,OAElB,KAAA,IADA,EAAa,EAAO,aAAa,EAAK;IAOxC,SAAS,EAAO,MAAM,EAAK;IAC3B,QAAQ,EAAO;IACf,EALK,WAAW,IAKhB;GAIN,IAAM,IAAa,EAAO,OAAO,EAAK;AAYtC,UAXI,KAGA,EAAO,SAAS,OAFX,kBAAC,OAAD,EAAA,UAA8B,GAAiB,EAArC,UAAU,IAA2B,GAKpD,kBAAC,GAAD;IAAwD,OAF5C,EAAa,EAAO,OAAO,EAAK;cAGzC;IACuB,EAFI,UAAU,IAEd;IAI9B;EAEsD,CAAA;GASpD,MAAmB,EACvB,cACA,cACA,kBAC8C;CAC9C,IAAM,EAAE,SAAM,GAA+B,EAEvC,IAAO,EACX,EAAU,OACV,GACA;EACE;EACA,aAAa;EACd,CACF;AA4BD,QA1BI,EAAU,UAAU,OAKpB,EAAU,WAAW,QAAQ,EAAU,QAAQ,SAAS,IAChC,EAAU,QAAQ,OAAO,MAAW;AAC5D,MAAI,EAAO,SAAS,UAClB,QAAO;EAET,IAAM,IACJ,iBAAiB,KAAU,EAAO,eAAe;AACnD,SAAO,EAAO,SAAS,QAAQ,CAAC;GAChC,GAIE,kBAAC,GAAD;EAAyB,OAAO,EAAE,eAAe;YAC/C,kBAAC,GAAD;GAAgB,SAAS,EAAU;GAAe;GAAM,aAAA;GAAc,CAAA;EAC9C,CAAA,GAIvB,kBAAC,GAAD;EAAgB,SAAS,EAAU;EAAe;EAAQ,CAAA,GAG5D,OAxBE,kBAAA,GAAA,EAAA,UADS,EAAU,OAAO,EAAK,EACjB,CAAA;GA+BnB,KAAoB,EACxB,mBACwC;CACxC,IAAM,EAAE,GAAG,MAAS,GAAgB,EAC9B,EAAE,SAAM,GAA+B,EACvC,EAAE,iBAAc,iBAAc,GAA0B,EAMxD,CAAC,GAAa,KAClB,EALoB,QACb,EAAwB,EAAU,OAAO,EAC/C,CAAC,EAAU,OAAO,CAAC,CAGoB,EACpC,CAAC,GAAW,KAAgB,EAAwB,KAAK,EACzD,CAAC,GAAU,KAAe,EAAS,EAAE,EACrC,CAAC,GAAoB,KAAyB,EAG1C,KAAK,EACT,CAAC,GAAQ,KAAa,EAAS,GAAM,EACrC,CAAC,GAAgB,KAAqB,EAAwB,KAAK,EACnE,IAA0B,EAAO;EACrC;EACA;EACD,CAAC,EAEI,IAAc,SACX;EACL;EACA;EACD,GACA,CAAC,GAAc,EAAU,CAAC;AAwC7B,CAtCA,QAAgB;AACd,MAAI,EAAU,UAAU,KACtB;EAEF,IAAM,IAAqB,EAAU,OAAO,MAAM,MACzC,EAAM,OAAO,eACpB,EACI,IAAkB,EAAU,OAAO,MAAM,MACtC,EAAM,OAAO,YACpB;AACE,GAAC,KAAsB,CAAC,KAI5B,GAAgB,MAAY;GAC1B,IAAI,IAAU;AACd,OACE,KACA,KAAgB,QAChB,EAAa,MAAM,KAAK,IACxB;IACA,IAAM,IAAW,EAAQ;AACzB,KAAI,OAAO,KAAa,YAAY,EAAS,MAAM,KAAK,QACtD,IAAU;KAAE,GAAG;KAAS;KAAc;;AAI1C,OAAI,KAAmB,KAAa,QAAQ,EAAU,MAAM,KAAK,IAAI;IACnE,IAAM,IAAW,EAAQ;AACzB,KAAI,OAAO,KAAa,YAAY,EAAS,MAAM,KAAK,QACtD,IAAU;KAAE,GAAG;KAAS;KAAW;;AAIvC,UAAO;IACP;IACD;EAAC;EAAc,EAAU;EAAQ;EAAU,CAAC,EAE/C,QAAgB;EACd,IAAM,IAAW,EAAwB,SACnC,IAAkC,EAAE;AAE1C,EAAI,EAAS,iBAAiB,MAC5B,EAAQ,eAAe,KAAgB,KAErC,EAAS,cAAc,MACzB,EAAQ,YAAY,KAAa,KAGnC,EAAwB,UAAU;GAAE;GAAc;GAAW,EAEzD,OAAO,KAAK,EAAQ,CAAC,WAAW,KAIpC,GAAgB,MAAY;GAC1B,IAAM,IAAM,EAAQ;AACpB,OAAI,OAAO,KAAQ,YAAY,EAAI,MAAM,KAAK,GAC5C,QAAO;GAET,IAAM,IAAW,GAAyB,GAAK,EAAQ;AAIvD,UAHI,KAAY,OACP,IAEF;IAAE,GAAG;IAAS,WAAW;IAAU;IAC1C;IACD,CAAC,GAAc,EAAU,CAAC;CAE7B,IAAM,IAAe,SAAkB;AAGrC,MAFA,EAAa,KAAK,EAEd,KAAgB,QAAQ,EAAa,MAAM,KAAK,IAAI;AACtD,KAAa,EAAE,4BAA4B,CAAC;AAC5C;;EAGF,IAAI;AACJ,MAAI;AACF,OAAgB,GAAmB;IACjC;IACA;IACA;IACA;IACA,KAAK;IACN,CAAC;WACK,GAAO;AACd,OAAI,aAAiB,GAA+B;AAClD,MAAa,EAAa,EAAM,OAAO,EAAK,CAAC;AAC7C;;AAEF,GAAI,aAAiB,QACnB,EAAa,EAAM,QAAQ,GAE3B,EAAa,EAAE,uBAAuB,CAAC;AAEzC;;AAKF,EAFA,EAAsB,EAAc,EACpC,EAAU,GAAK,EACf,GAAa,MACJ,IAAQ,EACf;IACD;EAAC;EAAc;EAAa;EAAW;EAAW;EAAG;EAAK,CAAC,EAExD,IAAe,QACf,KAAkB,QAAQ,EAAU,UAAU,OACzC,OAEK,EAAU,OAAO,MAAM,MAC5B,EAAK,OAAO,KAAkB,EAAK,SAAS,WACnD,IACc,MACf,CAAC,GAAgB,EAAU,OAAO,CAAC,EAEhC,KAAoB,MAAgD;EACxE,IAAM,IAAQ,EAAa,EAAM,OAAO,EAAK,EACvC,IAAQ,EAAY,EAAM;AAEhC,MAAI,EAAM,SAAS,QAAQ;GACzB,IAAM,IAAgB,OAAO,KAAU,WAAW,IAAQ,IACpD,IACJ,EAAM,eAAe,OAEjB,KAAA,IADA,EAAa,EAAM,aAAa,EAAK;AAE3C,UACE,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD,EAAA,UAAQ,GAAc,CAAA,EACtB,kBAAC,GAAD;IACE,OAAO;IACM;IACb,WAAW,MAAU;AAEnB,KADA,EAAa,KAAK,EAClB,GAAgB,OACP;MAAE,GAAG;OAAU,EAAM,KAAK,EAAM,OAAO;MAAO,EACrD;;IAEJ,MAAM;IACN,WAAA;IACA,CAAA,CACQ,EAAA,EAdI,EAAM,GAcV;;AAIhB,MAAI,EAAM,SAAS,QAAQ;GACzB,IAAM,IAAgB,OAAO,KAAU,WAAW,IAAQ,IACpD,IACJ,EAAM,eAAe,OAEjB,KAAA,IADA,EAAa,EAAM,aAAa,EAAK,EAErC,IACJ,OAAO,EAAM,gBAAiB,WAAW,EAAM,eAAe,IAC1D,IAAmB,EAAa,MAAM,KAAK,IAC3C,IAAc,EAAE,oCAAoC;AAE1D,UACE,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,OAAD;IAAK,WAAW;cAAhB,CACE,kBAAC,GAAD,EAAA,UAAQ,GAAc,CAAA,EACrB,KACC,kBAAC,GAAD;KACE,MAAK;KACL,SAAQ;KACR,MAAK;KACL,eAAe;AAEb,MADA,EAAa,KAAK,EAClB,GAAgB,OACP;OAAE,GAAG;QAAU,EAAM,KAAK;OAAc,EAC/C;;eAGH;KACM,CAAA,CAEP;OACN,kBAAC,GAAD;IACE,OAAO;IACM;IACb,WAAW,MAAU;AAEnB,KADA,EAAa,KAAK,EAClB,GAAgB,OACP;MAAE,GAAG;OAAU,EAAM,KAAK,EAAM,OAAO;MAAO,EACrD;;IAEJ,MAAM;IACN,WAAA;IACA,CAAA,CACQ,EAAA,EA/BI,EAAM,GA+BV;;AAIhB,MAAI,EAAM,SAAS,QAAQ;GACzB,IAAM,IAAgB,OAAO,KAAU,WAAW,IAAQ,IACpD,IAAU,EAAM,QAAQ,KAAK,OAC1B;IACL,IAAI,EAAO;IACX,OAAO,EAAO;IACd,OAAO,EAAa,EAAO,OAAO,EAAK;IACxC,EACD;AACF,UACE,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD,EAAA,UAAQ,GAAc,CAAA,EACtB,kBAAC,IAAD;IACW;IACT,OAAO;IACP,WAAW,MAAc;AAEvB,KADA,EAAa,KAAK,EAClB,GAAgB,OACP;MAAE,GAAG;OAAU,EAAM,KAAK;MAAW,EAC5C;;IAEJ,aAAa;IACb,CAAA,CACQ,EAAA,EAbI,EAAM,GAaV;;AAIhB,MAAI,EAAM,SAAS,UAEjB,QACE,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD;GACS;GACP,SALgB,OAAO,KAAU,YAAY,IAAQ;GAMrD,WAAW,MAAU;AAEnB,IADA,EAAa,KAAK,EAClB,GAAgB,OACP;KAAE,GAAG;MAAU,EAAM,KAAK,EAAM,OAAO;KAAS,EACvD;;GAEJ,CAAA,EACQ,EAXI,EAAM,GAWV;AAKhB,MAAI,EAAM,SAAS,YAAY;GAC7B,IAAM,IAAgB,OAAO,KAAU,WAAW,IAAQ,IACpD,KAAe,IAA8B,SAG/C,kBAAC,GAAD;IACS;IACP,OAAO;IACP,cAL2B,GAAc,MAAM,IAAI;IAMnD,cAAc;AACZ,OAAkB,EAAM,GAAG;;IAE7B,eAAe;AAEb,KADA,EAAa,KAAK,EAClB,GAAgB,OACP;MAAE,GAAG;OAAU,EAAM,KAAK;MAAI,EACrC;;IAEJ,CAAA;AAIN,UACE,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD,EAAA,UAAQ,GAAc,CAAA,EACrB,EAAc,MAAM,KAAK,KACxB,GAAa,GAEb,kBAAC,GAAD;IAAuB,UAAU,EAAM;IAAQ,IAAI;eAC/C,MACO,EAAY,EAAc;IAEb,CAAA,CAEhB,EAAA,EAXI,EAAM,GAWV;;AAIhB,SAAO,kBAAA,GAAA,EAAK,CAAA;IAGR,KAAqB,MAA4C;AAErE,EADA,EAAM,gBAAgB,EACtB,GAAc;IAGV,IAAa,EAAU,QAAQ,KAAK,MACjC,EAAiB,EAAM,CAC9B,EACI,IAAgB,KAAgB,QAAQ,EAAa,MAAM,KAAK,IAClE,IAAwB;AAa5B,QAZI,KAAU,KAAsB,SAClC,IACE,kBAAC,GAAD,EAAA,UACE,kBAAC,IAAD;EACa;EACX,WAAW;EACD;EACV,CAAA,EAC2B,CAAA,GAKjC,kBAAA,GAAA,EAAA,UAAA,CACE,kBAAC,GAAD;EACE,OAAO,EAAa,EAAU,OAAO,EAAK;EAC1C,aACE,EAAU,YAAY,OAElB,KAAA,IADA,EAAa,EAAU,UAAU,EAAK;YAJ9C,CAQE,kBAAC,GAAD;GAAM,UAAU;GAAmB,WAAW;aAA9C;IACE,kBAAC,GAAD,EAAiB,SAAS,GAAa,CAAA;IACtC;IACD,kBAAC,OAAD;KAAK,WAAW;eACd,kBAAC,GAAD;MACE,MAAK;MACL,SAAQ;MACR,MAAK;MACL,UAAU;gBAET,EAAE,0BAA0B;MACtB,CAAA;KACL,CAAA;IACD;MACN,KAAgB,QACf,kBAAC,GAAD;GACE,QAAA;GACA,QAAQ,EAAa;GACrB,OAAO,EAAa,EAAa,OAAO,EAAK;GAC7C,OAAO;GACP,eAAe;AACb,MAAkB,KAAK;;GAEzB,aAAa,MAAO;AAKlB,IAJA,EAAa,KAAK,EAClB,GAAgB,OACP;KAAE,GAAG;MAAU,EAAa,KAAK;KAAI,EAC5C,EACF,EAAkB,KAAK;;GAEzB,CAAA,CAEoB;KACzB,EACA,EAAA,CAAA;GASM,KAAgC,EAC3C,cACA,gBACoD;CACpD,IAAM,EAAE,GAAG,MAAS,GAAgB,EAC9B,EAAE,SAAM,GAA+B,EAEvC,IAAQ,EAAa,EAAU,OAAO,EAAK,EAC3C,IACJ,EAAU,YAAY,OAElB,KAAA,IADA,EAAa,EAAU,UAAU,EAAK,EAEtC,IAAa,EAAoB,EAAE,UAAO,CAAC,EAC3C,IAAoB,EAAwB,EAAU,EACtD,IAAc,EAAE,qBAAqB,EACrC,IAAiB,EAAE,4BAA4B,EAC/C,IAAoB,EAAE,+BAA+B,EAErD,IACJ,OAAO,EAAU,gBAAiB,WAC9B,EAAU,aAAa,MAAM,GAC7B,IACA,WAAqB;AACzB,MAAI,EAAU,UAAU,KACtB,QAAO;EAET,IAAM,IAAY,EAAU,OAAO,MAAM,MAChC,EAAM,SAAS,OACtB;AAQF,SAPI,KAAa,QAAQ,OAAO,EAAU,gBAAiB,YAG3C,EAAU,aAAa,MAAM,KAC7B,KACP,OAEF,EAAU;KACf,EAEE,IAAyB,EAAE;AA4BjC,QA3BI,MAAiB,MACnB,EAAU,KACR,kBAAC,GAAD;EAEE,OAAO;EACP,SAAS;EACT,UAAS;EACT,aAAA;EACA,EALI,aAKJ,CACH,EAEC,KAAe,QACjB,EAAU,KACR,kBAAC,GAAD;EAEE,OAAO;EACP,SAAS;EACT,UAAS;EACT,EAJI,gBAIJ,CACH,EASD,kBAAC,GAAD;EAAuC;YACrC,kBAAC,GAAD;GACS;GACG;GACF;GACK;GACM;GACT,UAZd,EAAU,SAAS,IACjB,kBAAC,OAAD;IAAK,WAAW;cAA4B;IAAgB,CAAA,GAC1D,KAAA;aAYA,kBAAC,GAAD;IACE,WAAW,EAAE,UAAO,eAEhB,kBAAC,GAAD;KAAqC;KAAO,SAAS;KAAS,CAAA;cAIlE,kBAAC,GAAD,EAA6B,cAAa,CAAA;IAClB,CAAA;GACA,CAAA;EACF,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"buildTabsItems.js","names":[],"sources":["../../../../src/pages/detail/buildTabsItems.ts"],"sourcesContent":["import type { BackofficeDetailPageRouteSpec } from '@plumile/backoffice-core/types.js';\nimport type { BackofficeTabItem } from '@plumile/ui/backoffice/molecules/backoffice_tabs/BackofficeTabs.js';\nimport type { TFunction } from 'i18next';\n\ntype DetailPage<Node> = BackofficeDetailPageRouteSpec<Node>;\n\nexport const buildTabsItems = <Node>(input: {\n pages: readonly DetailPage<Node>[];\n id: string;\n tApp: TFunction;\n detailPageHref: (id: string, pageId: string) => string;\n}): readonly BackofficeTabItem[] => {\n return input.pages.map((page) => {\n return {\n id: page.id,\n label: page.label(input.tApp),\n to: input.detailPageHref(input.id, page.id),\n };\n });\n};\n"],"mappings":";AAMA,IAAa,KAAwB,MAM5B,EAAM,MAAM,KAAK,OACf;CACL,IAAI,EAAK;CACT,OAAO,EAAK,MAAM,EAAM,KAAK;CAC7B,IAAI,EAAM,eAAe,EAAM,IAAI,EAAK,GAAG;CAC5C,EACD"}
1
+ {"version":3,"file":"buildTabsItems.js","names":[],"sources":["../../../../src/pages/detail/buildTabsItems.ts"],"sourcesContent":["import type { BackofficeDetailPageRouteSpec } from '@plumile/backoffice-core/types.js';\nimport type { BackofficeTabItem } from '@plumile/ui';\nimport type { TFunction } from 'i18next';\n\ntype DetailPage<Node> = BackofficeDetailPageRouteSpec<Node>;\n\nexport const buildTabsItems = <Node>(input: {\n pages: readonly DetailPage<Node>[];\n id: string;\n tApp: TFunction;\n detailPageHref: (id: string, pageId: string) => string;\n}): readonly BackofficeTabItem[] => {\n return input.pages.map((page) => {\n return {\n id: page.id,\n label: page.label(input.tApp),\n to: input.detailPageHref(input.id, page.id),\n };\n });\n};\n"],"mappings":";AAMA,IAAa,KAAwB,MAM5B,EAAM,MAAM,KAAK,OACf;CACL,IAAI,EAAK;CACT,OAAO,EAAK,MAAM,EAAM,KAAK;CAC7B,IAAI,EAAM,eAAe,EAAM,IAAI,EAAK,GAAG;CAC5C,EACD"}
@@ -1 +1 @@
1
- {"version":3,"file":"buildDataTableColumns.d.ts","sourceRoot":"","sources":["../../../../../src/components/backoffice/columns/buildDataTableColumns.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,oBAAoB,EACpB,mBAAmB,EAEpB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAGzC,OAAO,EAAiB,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAmBlE,MAAM,MAAM,4BAA4B,GAAG;IACzC,IAAI,EAAE,SAAS,CAAC;IAChB,CAAC,EAAE,SAAS,CAAC;IACb,iBAAiB,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;CACxE,CAAC;AAEF,MAAM,MAAM,8BAA8B,CAAC,GAAG,IAAI,eAAe,CAAC,GAAG,CAAC,GAAG;IACvE,IAAI,EAAE,mBAAmB,CAAC;CAC3B,CAAC;AAKF,wBAAgB,qBAAqB,CAAC,GAAG,EACvC,OAAO,EAAE,SAAS,oBAAoB,CAAC,GAAG,CAAC,EAAE,EAC7C,OAAO,EAAE,4BAA4B,GACpC,SAAS,8BAA8B,CAAC,GAAG,CAAC,EAAE,CA0EhD"}
1
+ {"version":3,"file":"buildDataTableColumns.d.ts","sourceRoot":"","sources":["../../../../../src/components/backoffice/columns/buildDataTableColumns.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,oBAAoB,EACpB,mBAAmB,EAEpB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEzC,OAAO,EAAsB,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAmBvE,MAAM,MAAM,4BAA4B,GAAG;IACzC,IAAI,EAAE,SAAS,CAAC;IAChB,CAAC,EAAE,SAAS,CAAC;IACb,iBAAiB,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;CACxE,CAAC;AAEF,MAAM,MAAM,8BAA8B,CAAC,GAAG,IAAI,eAAe,CAAC,GAAG,CAAC,GAAG;IACvE,IAAI,EAAE,mBAAmB,CAAC;CAC3B,CAAC;AAKF,wBAAgB,qBAAqB,CAAC,GAAG,EACvC,OAAO,EAAE,SAAS,oBAAoB,CAAC,GAAG,CAAC,EAAE,EAC7C,OAAO,EAAE,4BAA4B,GACpC,SAAS,8BAA8B,CAAC,GAAG,CAAC,EAAE,CA0EhD"}
@@ -1,5 +1,5 @@
1
1
  import { type JSX, type ReactNode } from 'react';
2
- import { type TagTone } from '@plumile/ui/backoffice/atoms/tag/Tag.js';
2
+ import { type TagTone } from '@plumile/ui';
3
3
  export type BackofficeDetailFlagTagProps = {
4
4
  tone: TagTone;
5
5
  icon?: ReactNode;
@@ -1 +1 @@
1
- {"version":3,"file":"BackofficeDetailFlagTag.d.ts","sourceRoot":"","sources":["../../../../../src/components/backoffice/detail/BackofficeDetailFlagTag.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,GAAG,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAEjD,OAAO,EAAO,KAAK,OAAO,EAAE,MAAM,yCAAyC,CAAC;AAI5E,MAAM,MAAM,4BAA4B,GAAG;IACzC,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAAI,wBAIrC,4BAA4B,KAAG,GAAG,CAAC,OAerC,CAAC;AAEF,eAAe,uBAAuB,CAAC"}
1
+ {"version":3,"file":"BackofficeDetailFlagTag.d.ts","sourceRoot":"","sources":["../../../../../src/components/backoffice/detail/BackofficeDetailFlagTag.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,GAAG,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAEjD,OAAO,EAAO,KAAK,OAAO,EAAE,MAAM,aAAa,CAAC;AAIhD,MAAM,MAAM,4BAA4B,GAAG;IACzC,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAAI,wBAIrC,4BAA4B,KAAG,GAAG,CAAC,OAerC,CAAC;AAEF,eAAe,uBAAuB,CAAC"}
@@ -1,7 +1,7 @@
1
1
  import type { TFunction } from 'i18next';
2
2
  import type { BackofficeEntityManifestMap } from '@plumile/backoffice-core/types.js';
3
3
  import type { BackofficeSidebarConfig } from '../../../provider/types.js';
4
- import type { BackofficeSidebarSection } from '@plumile/ui/backoffice/organisms/backoffice_sidebar/BackofficeSidebar.js';
4
+ import type { AdminSidebarSection } from '@plumile/ui';
5
5
  import type { SidebarGroupCollapseState } from '../../../hooks/useSidebarGroupCollapse.js';
6
6
  export type BuildSidebarSectionsInput = {
7
7
  basePath: string;
@@ -18,5 +18,5 @@ export type BuildSidebarSectionsInput = {
18
18
  collapsedByGroupId?: SidebarGroupCollapseState;
19
19
  onGroupCollapsedChange?: (groupId: string, collapsed: boolean) => void;
20
20
  };
21
- export declare function buildSidebarSections(input: BuildSidebarSectionsInput): readonly BackofficeSidebarSection[];
21
+ export declare function buildSidebarSections(input: BuildSidebarSectionsInput): readonly AdminSidebarSection[];
22
22
  //# sourceMappingURL=buildSidebarSections.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"buildSidebarSections.d.ts","sourceRoot":"","sources":["../../../../../src/components/backoffice/layout/buildSidebarSections.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEzC,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,mCAAmC,CAAC;AACrF,OAAO,KAAK,EACV,uBAAuB,EAGxB,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,0EAA0E,CAAC;AAOzH,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,2CAA2C,CAAC;AAmB3F,MAAM,MAAM,yBAAyB,GAAG;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,2BAA2B,CAAC;IACtC,OAAO,CAAC,EAAE,uBAAuB,CAAC;IAClC,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,SAAS,CAAC;IAChB,CAAC,EAAE,SAAS,CAAC;IACb,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACtD,kBAAkB,CAAC,EAAE,yBAAyB,CAAC;IAC/C,sBAAsB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,KAAK,IAAI,CAAC;CACxE,CAAC;AAKF,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,yBAAyB,GAC/B,SAAS,wBAAwB,EAAE,CAoSrC"}
1
+ {"version":3,"file":"buildSidebarSections.d.ts","sourceRoot":"","sources":["../../../../../src/components/backoffice/layout/buildSidebarSections.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEzC,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,mCAAmC,CAAC;AACrF,OAAO,KAAK,EACV,uBAAuB,EAGxB,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,mBAAmB,EAAyB,MAAM,aAAa,CAAC;AAM9E,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,2CAA2C,CAAC;AAmB3F,MAAM,MAAM,yBAAyB,GAAG;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,2BAA2B,CAAC;IACtC,OAAO,CAAC,EAAE,uBAAuB,CAAC;IAClC,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,SAAS,CAAC;IAChB,CAAC,EAAE,SAAS,CAAC;IACb,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACtD,kBAAkB,CAAC,EAAE,yBAAyB,CAAC;IAC/C,sBAAsB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,KAAK,IAAI,CAAC;CACxE,CAAC;AAKF,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,yBAAyB,GAC/B,SAAS,mBAAmB,EAAE,CAoShC"}
@@ -1,4 +1,4 @@
1
- import type { BackofficeSidebarProfileViewer } from '@plumile/ui/backoffice/molecules/sidebar_profile_menu/BackofficeSidebarProfileMenu.js';
1
+ import type { BackofficeSidebarProfileViewer } from '@plumile/ui';
2
2
  export type BackofficeViewerIdentity = {
3
3
  id: string;
4
4
  firstName: string;
@@ -1 +1 @@
1
- {"version":3,"file":"mapViewerToSidebarProfileView.d.ts","sourceRoot":"","sources":["../../../../../src/components/backoffice/layout/mapViewerToSidebarProfileView.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,uFAAuF,CAAC;AAE5I,MAAM,MAAM,wBAAwB,GAAG;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,KAAK,kCAAkC,GAAG;IACxC,MAAM,EAAE,wBAAwB,GAAG,IAAI,GAAG,SAAS,CAAC;IACpD,gBAAgB,EAAE,MAAM,CAAC;CAC1B,CAAC;AAMF,eAAO,MAAM,6BAA6B,GAAI,+BAG3C,kCAAkC,KAAG,8BAgCvC,CAAC;AAEF,eAAe,6BAA6B,CAAC"}
1
+ {"version":3,"file":"mapViewerToSidebarProfileView.d.ts","sourceRoot":"","sources":["../../../../../src/components/backoffice/layout/mapViewerToSidebarProfileView.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,aAAa,CAAC;AAElE,MAAM,MAAM,wBAAwB,GAAG;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,KAAK,kCAAkC,GAAG;IACxC,MAAM,EAAE,wBAAwB,GAAG,IAAI,GAAG,SAAS,CAAC;IACpD,gBAAgB,EAAE,MAAM,CAAC;CAC1B,CAAC;AAMF,eAAO,MAAM,6BAA6B,GAAI,+BAG3C,kCAAkC,KAAG,8BAgCvC,CAAC;AAEF,eAAe,6BAA6B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"EntityIdPickerDialog.d.ts","sourceRoot":"","sources":["../../../../../src/components/backoffice/pickers/EntityIdPickerDialog.tsx"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,GAAG,EACT,MAAM,OAAO,CAAC;AAQf,OAAO,KAAK,EAEV,qBAAqB,EAEtB,MAAM,mCAAmC,CAAC;AAa3C,MAAM,MAAM,yBAAyB,GAAG;IACtC,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,qBAAqB,CAAC;IAC9B,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,UAAU,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;CAClC,CAAC;AA+EF,eAAO,MAAM,oBAAoB,GAAI,wDAOlC,yBAAyB,KAAG,GAAG,CAAC,OAAO,GAAG,IA2H5C,CAAC;AAEF,YAAY,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAE/E,eAAe,oBAAoB,CAAC"}
1
+ {"version":3,"file":"EntityIdPickerDialog.d.ts","sourceRoot":"","sources":["../../../../../src/components/backoffice/pickers/EntityIdPickerDialog.tsx"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,GAAG,EACT,MAAM,OAAO,CAAC;AAOf,OAAO,KAAK,EAEV,qBAAqB,EAEtB,MAAM,mCAAmC,CAAC;AAa3C,MAAM,MAAM,yBAAyB,GAAG;IACtC,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,qBAAqB,CAAC;IAC9B,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,UAAU,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;CAClC,CAAC;AA+EF,eAAO,MAAM,oBAAoB,GAAI,wDAOlC,yBAAyB,KAAG,GAAG,CAAC,OAAO,GAAG,IA2H5C,CAAC;AAEF,YAAY,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAE/E,eAAe,oBAAoB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"EntityPickerList.d.ts","sourceRoot":"","sources":["../../../../../../src/components/backoffice/pickers/shared/EntityPickerList.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,GAAG,EAAE,MAAM,OAAO,CAAC;AAMjC,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAE5D,MAAM,MAAM,qBAAqB,GAAG;IAClC,KAAK,EAAE,SAAS,wBAAwB,EAAE,CAAC;IAC3C,UAAU,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,UAAU,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC;CAC1B,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,oCAI9B,qBAAqB,KAAG,GAAG,CAAC,OA+B9B,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
1
+ {"version":3,"file":"EntityPickerList.d.ts","sourceRoot":"","sources":["../../../../../../src/components/backoffice/pickers/shared/EntityPickerList.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,GAAG,EAAE,MAAM,OAAO,CAAC;AAKjC,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAE5D,MAAM,MAAM,qBAAqB,GAAG;IAClC,KAAK,EAAE,SAAS,wBAAwB,EAAE,CAAC;IAC3C,UAAU,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,UAAU,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC;CAC1B,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,oCAI9B,qBAAqB,KAAG,GAAG,CAAC,OA+B9B,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"BackofficeContentError.d.ts","sourceRoot":"","sources":["../../../../../src/components/backoffice/routing/BackofficeContentError.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,GAAG,EAAE,MAAM,OAAO,CAAC;AAQjC,KAAK,2BAA2B,GAAG;IACjC,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,CAAC;AAoBF,eAAO,MAAM,sBAAsB,GAAI,qBAGpC,2BAA2B,KAAG,GAAG,CAAC,OAwBpC,CAAC;AAEF,eAAe,sBAAsB,CAAC"}
1
+ {"version":3,"file":"BackofficeContentError.d.ts","sourceRoot":"","sources":["../../../../../src/components/backoffice/routing/BackofficeContentError.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,GAAG,EAAE,MAAM,OAAO,CAAC;AAOjC,KAAK,2BAA2B,GAAG;IACjC,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,CAAC;AAoBF,eAAO,MAAM,sBAAsB,GAAI,qBAGpC,2BAA2B,KAAG,GAAG,CAAC,OAwBpC,CAAC;AAEF,eAAe,sBAAsB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"BackofficeEntityListScaffold.d.ts","sourceRoot":"","sources":["../../../../../src/components/backoffice/scaffolds/BackofficeEntityListScaffold.tsx"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,GAAG,EACR,KAAK,SAAS,EAIf,MAAM,OAAO,CAAC;AAGf,OAAO,EAQL,KAAK,eAAe,EACpB,KAAK,QAAQ,EACd,MAAM,aAAa,CAAC;AAgBrB,OAAO,KAAK,EAEV,mBAAmB,EAEnB,iCAAiC,EAElC,MAAM,mCAAmC,CAAC;AAuG3C,KAAK,KAAK,CACR,OAAO,EACP,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACrC,IAAI,SAAS,MAAM,IACjB;IACF,MAAM,EAAE,iCAAiC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACvD,KAAK,EAAE,mBAAmB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACxC,SAAS,EAAE,CAAC,IAAI,EAAE,mBAAmB,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,CAAC;IAC5D,MAAM,CAAC,EAAE;QACP,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,aAAa,CAAC,EAAE,SAAS,CAAC;IAC1B,IAAI,EAAE,SAAS,OAAO,EAAE,CAAC;IACzB,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC5B,OAAO,EAAE,SAAS,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC;IAC7C,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,WAAW,EAAE,OAAO,CAAC;IACrB,aAAa,EAAE,OAAO,CAAC;IACvB,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,UAAU,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC;IACzB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC;IAC9B,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,CAAC;AAEF,eAAO,MAAM,4BAA4B,GACvC,OAAO,EACP,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACrC,IAAI,SAAS,MAAM,EAEnB,OAAO,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,KACjC,GAAG,CAAC,OAAO,GAAG,IA6sBhB,CAAC;AAEF,eAAe,4BAA4B,CAAC"}
1
+ {"version":3,"file":"BackofficeEntityListScaffold.d.ts","sourceRoot":"","sources":["../../../../../src/components/backoffice/scaffolds/BackofficeEntityListScaffold.tsx"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,GAAG,EACR,KAAK,SAAS,EAIf,MAAM,OAAO,CAAC;AAGf,OAAO,EAgBL,KAAK,eAAe,EACpB,KAAK,QAAQ,EACd,MAAM,aAAa,CAAC;AAMrB,OAAO,KAAK,EAEV,mBAAmB,EAEnB,iCAAiC,EAElC,MAAM,mCAAmC,CAAC;AAuG3C,KAAK,KAAK,CACR,OAAO,EACP,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACrC,IAAI,SAAS,MAAM,IACjB;IACF,MAAM,EAAE,iCAAiC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACvD,KAAK,EAAE,mBAAmB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACxC,SAAS,EAAE,CAAC,IAAI,EAAE,mBAAmB,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,CAAC;IAC5D,MAAM,CAAC,EAAE;QACP,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,aAAa,CAAC,EAAE,SAAS,CAAC;IAC1B,IAAI,EAAE,SAAS,OAAO,EAAE,CAAC;IACzB,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC5B,OAAO,EAAE,SAAS,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC;IAC7C,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,WAAW,EAAE,OAAO,CAAC;IACrB,aAAa,EAAE,OAAO,CAAC;IACvB,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,UAAU,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC;IACzB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC;IAC9B,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,CAAC;AAEF,eAAO,MAAM,4BAA4B,GACvC,OAAO,EACP,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACrC,IAAI,SAAS,MAAM,EAEnB,OAAO,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,KACjC,GAAG,CAAC,OAAO,GAAG,IA6sBhB,CAAC;AAEF,eAAe,4BAA4B,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { type JSX, type ReactNode } from 'react';
2
- import { type BackofficeTabItem } from '@plumile/ui/backoffice/molecules/backoffice_tabs/BackofficeTabs.js';
2
+ import { type BackofficeTabItem } from '@plumile/ui';
3
3
  export type BackofficeTabbedDetailShellProps = {
4
4
  headerNode: ReactNode;
5
5
  tabs?: readonly BackofficeTabItem[];
@@ -1 +1 @@
1
- {"version":3,"file":"BackofficeTabbedDetailShell.d.ts","sourceRoot":"","sources":["../../../../../src/components/backoffice/scaffolds/BackofficeTabbedDetailShell.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,GAAG,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAGjD,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,oEAAoE,CAAC;AAI5E,MAAM,MAAM,gCAAgC,GAAG;IAC7C,UAAU,EAAE,SAAS,CAAC;IACtB,IAAI,CAAC,EAAE,SAAS,iBAAiB,EAAE,CAAC;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,SAAS,CAAC;CACrB,CAAC;AAEF,eAAO,MAAM,2BAA2B,GAAI,2CAKzC,gCAAgC,KAAG,GAAG,CAAC,OAkBzC,CAAC;AAEF,eAAe,2BAA2B,CAAC"}
1
+ {"version":3,"file":"BackofficeTabbedDetailShell.d.ts","sourceRoot":"","sources":["../../../../../src/components/backoffice/scaffolds/BackofficeTabbedDetailShell.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,GAAG,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAEjD,OAAO,EAGL,KAAK,iBAAiB,EACvB,MAAM,aAAa,CAAC;AAIrB,MAAM,MAAM,gCAAgC,GAAG;IAC7C,UAAU,EAAE,SAAS,CAAC;IACtB,IAAI,CAAC,EAAE,SAAS,iBAAiB,EAAE,CAAC;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,SAAS,CAAC;CACrB,CAAC;AAEF,eAAO,MAAM,2BAA2B,GAAI,2CAKzC,gCAAgC,KAAG,GAAG,CAAC,OAkBzC,CAAC;AAEF,eAAe,2BAA2B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"BackofficeDashboardPage.d.ts","sourceRoot":"","sources":["../../../src/pages/BackofficeDashboardPage.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,GAAG,EAAY,MAAM,OAAO,CAAC;AAkR3C,eAAO,MAAM,uBAAuB,QAAO,GAAG,CAAC,OAkE9C,CAAC;AAEF,eAAe,uBAAuB,CAAC"}
1
+ {"version":3,"file":"BackofficeDashboardPage.d.ts","sourceRoot":"","sources":["../../../src/pages/BackofficeDashboardPage.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,GAAG,EAAY,MAAM,OAAO,CAAC;AAiR3C,eAAO,MAAM,uBAAuB,QAAO,GAAG,CAAC,OAkE9C,CAAC;AAEF,eAAe,uBAAuB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"BackofficeEntityDetailPage.d.ts","sourceRoot":"","sources":["../../../src/pages/BackofficeEntityDetailPage.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,GAAG,EAAiD,MAAM,OAAO,CAAC;AAGhF,OAAO,EAEL,KAAK,cAAc,EAGpB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAanD,OAAO,KAAK,EAaV,6CAA6C,EAE7C,2CAA2C,EAG5C,MAAM,mCAAmC,CAAC;AAgE3C,MAAM,MAAM,+BAA+B,GAAG;IAC5C,MAAM,EAAE,6CAA6C,CAAC;IACtD,QAAQ,EAAE;QACR,EAAE,EAAE,MAAM,CAAC;QACX,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,2CAA2C,CAAC;QACxD,SAAS,EAAE,cAAc,CAAC,aAAa,CAAC,CAAC;QACzC,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;CACH,CAAC;AAg9CF,eAAO,MAAM,0BAA0B,GAAI,uBAGxC,+BAA+B,KAAG,GAAG,CAAC,OA0BxC,CAAC;AAEF,eAAe,0BAA0B,CAAC"}
1
+ {"version":3,"file":"BackofficeEntityDetailPage.d.ts","sourceRoot":"","sources":["../../../src/pages/BackofficeEntityDetailPage.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,GAAG,EAAiD,MAAM,OAAO,CAAC;AAGhF,OAAO,EAEL,KAAK,cAAc,EAGpB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAanD,OAAO,KAAK,EAaV,6CAA6C,EAE7C,2CAA2C,EAG5C,MAAM,mCAAmC,CAAC;AA8D3C,MAAM,MAAM,+BAA+B,GAAG;IAC5C,MAAM,EAAE,6CAA6C,CAAC;IACtD,QAAQ,EAAE;QACR,EAAE,EAAE,MAAM,CAAC;QACX,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,2CAA2C,CAAC;QACxD,SAAS,EAAE,cAAc,CAAC,aAAa,CAAC,CAAC;QACzC,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;CACH,CAAC;AAg9CF,eAAO,MAAM,0BAA0B,GAAI,uBAGxC,+BAA+B,KAAG,GAAG,CAAC,OA0BxC,CAAC;AAEF,eAAe,0BAA0B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"BackofficeLayoutPage.d.ts","sourceRoot":"","sources":["../../../src/pages/BackofficeLayoutPage.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,GAAG,EACR,KAAK,SAAS,EAIf,MAAM,OAAO,CAAC;AAEf,OAAO,EAGL,KAAK,cAAc,EACpB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EACV,iBAAiB,EAEjB,aAAa,EACd,MAAM,eAAe,CAAC;AAqBvB,OAAO,EAEL,KAAK,wBAAwB,EAC9B,MAAM,kEAAkE,CAAC;AAK1E,MAAM,MAAM,yBAAyB,GAAG;IACtC,QAAQ,EAAE,SAAS,CAAC;IACpB,gBAAgB,CAAC,EAAE,iBAAiB,CAAC;IACrC,QAAQ,CAAC,EAAE,cAAc,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC;IAChD,UAAU,CAAC,EAAE;QACX,UAAU,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;QAC5B,EAAE,CAAC,EAAE,wBAAwB,GAAG,IAAI,CAAC;KACtC,GAAG,IAAI,CAAC;IACT,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B,CAAC;AAoOF,eAAO,MAAM,oBAAoB,GAAI,sEAMlC,yBAAyB,KAAG,GAAG,CAAC,OAuBlC,CAAC;AAEF,eAAe,oBAAoB,CAAC"}
1
+ {"version":3,"file":"BackofficeLayoutPage.d.ts","sourceRoot":"","sources":["../../../src/pages/BackofficeLayoutPage.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,GAAG,EACR,KAAK,SAAS,EAIf,MAAM,OAAO,CAAC;AAEf,OAAO,EAGL,KAAK,cAAc,EACpB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EACV,iBAAiB,EAEjB,aAAa,EACd,MAAM,eAAe,CAAC;AAuBvB,OAAO,EAEL,KAAK,wBAAwB,EAC9B,MAAM,kEAAkE,CAAC;AAK1E,MAAM,MAAM,yBAAyB,GAAG;IACtC,QAAQ,EAAE,SAAS,CAAC;IACpB,gBAAgB,CAAC,EAAE,iBAAiB,CAAC;IACrC,QAAQ,CAAC,EAAE,cAAc,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC;IAChD,UAAU,CAAC,EAAE;QACX,UAAU,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;QAC5B,EAAE,CAAC,EAAE,wBAAwB,GAAG,IAAI,CAAC;KACtC,GAAG,IAAI,CAAC;IACT,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B,CAAC;AAoOF,eAAO,MAAM,oBAAoB,GAAI,sEAMlC,yBAAyB,KAAG,GAAG,CAAC,OAuBlC,CAAC;AAEF,eAAe,oBAAoB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"BackofficeToolsOperationPage.d.ts","sourceRoot":"","sources":["../../../src/pages/BackofficeToolsOperationPage.tsx"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,GAAG,EAOT,MAAM,OAAO,CAAC;AAKf,OAAO,EAEL,KAAK,uBAAuB,EAK7B,MAAM,mCAAmC,CAAC;AA41B3C,MAAM,MAAM,iCAAiC,GAAG;IAC9C,SAAS,EAAE,uBAAuB,CAAC;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,eAAO,MAAM,4BAA4B,GAAI,wBAG1C,iCAAiC,KAAG,GAAG,CAAC,OAsF1C,CAAC;AAEF,eAAe,4BAA4B,CAAC"}
1
+ {"version":3,"file":"BackofficeToolsOperationPage.d.ts","sourceRoot":"","sources":["../../../src/pages/BackofficeToolsOperationPage.tsx"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,GAAG,EAOT,MAAM,OAAO,CAAC;AAKf,OAAO,EAEL,KAAK,uBAAuB,EAK7B,MAAM,mCAAmC,CAAC;AAg2B3C,MAAM,MAAM,iCAAiC,GAAG;IAC9C,SAAS,EAAE,uBAAuB,CAAC;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,eAAO,MAAM,4BAA4B,GAAI,wBAG1C,iCAAiC,KAAG,GAAG,CAAC,OAsF1C,CAAC;AAEF,eAAe,4BAA4B,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import type { BackofficeDetailPageRouteSpec } from '@plumile/backoffice-core/types.js';
2
- import type { BackofficeTabItem } from '@plumile/ui/backoffice/molecules/backoffice_tabs/BackofficeTabs.js';
2
+ import type { BackofficeTabItem } from '@plumile/ui';
3
3
  import type { TFunction } from 'i18next';
4
4
  type DetailPage<Node> = BackofficeDetailPageRouteSpec<Node>;
5
5
  export declare const buildTabsItems: <Node>(input: {
@@ -1 +1 @@
1
- {"version":3,"file":"buildTabsItems.d.ts","sourceRoot":"","sources":["../../../../src/pages/detail/buildTabsItems.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,mCAAmC,CAAC;AACvF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oEAAoE,CAAC;AAC5G,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEzC,KAAK,UAAU,CAAC,IAAI,IAAI,6BAA6B,CAAC,IAAI,CAAC,CAAC;AAE5D,eAAO,MAAM,cAAc,GAAI,IAAI,EAAE,OAAO;IAC1C,KAAK,EAAE,SAAS,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,SAAS,CAAC;IAChB,cAAc,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC;CACxD,KAAG,SAAS,iBAAiB,EAQ7B,CAAC"}
1
+ {"version":3,"file":"buildTabsItems.d.ts","sourceRoot":"","sources":["../../../../src/pages/detail/buildTabsItems.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,mCAAmC,CAAC;AACvF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEzC,KAAK,UAAU,CAAC,IAAI,IAAI,6BAA6B,CAAC,IAAI,CAAC,CAAC;AAE5D,eAAO,MAAM,cAAc,GAAI,IAAI,EAAE,OAAO;IAC1C,KAAK,EAAE,SAAS,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,SAAS,CAAC;IAChB,cAAc,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC;CACxD,KAAG,SAAS,iBAAiB,EAQ7B,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@plumile/backoffice-react",
3
- "version": "0.1.68",
3
+ "version": "0.1.69",
4
4
  "description": "React provider and pages for Plumile backoffice",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -158,10 +158,10 @@
158
158
  "npm": ">=8.0.0"
159
159
  },
160
160
  "dependencies": {
161
- "@plumile/backoffice-core": "^0.1.68",
162
- "@plumile/filter-query": "^0.1.68",
163
- "@plumile/router": "^0.1.68",
164
- "@plumile/ui": "^0.1.68",
161
+ "@plumile/backoffice-core": "^0.1.69",
162
+ "@plumile/filter-query": "^0.1.69",
163
+ "@plumile/router": "^0.1.69",
164
+ "@plumile/ui": "^0.1.69",
165
165
  "graphql-ws": "6.0.7",
166
166
  "i18next": "^25.8.18",
167
167
  "i18next-browser-languagedetector": "8.2.1",