@plumile/backoffice-react 0.1.146 → 0.1.150

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.
@@ -1,5 +1,3 @@
1
- /* empty css */
2
- /* empty css */
3
1
  /* empty css */
4
2
  //#region src/auth/login/loginPage.css.ts
5
3
  var e = "txvbqbfpn txvbqbh4x txvbqbheb", t = "txvbqbfpn txvbqbh4x txvbqb19uf", n = "txvbqb1bg3 txvbqb9j txvbqbo7v txvbqbny4", r = "txvbqbey txvbqb1bg3 txvbqbfpn txvbqbhdl txvbqbs00 txvbqbp6j", i = "txvbqb1b9r txvbqbk07 txvbqbfvs txvbqb2wi txvbqb1bk3", a = "txvbqbey txvbqbfpn txvbqbh7g txvbqbhdy txvbqblt7 txvbqbrza", o = "w8yhmy0 txvbqb1b4r txvbqb1tv txvbqb2rt txvbqb1bhb txvbqbv txvbqbhbf txvbqbwvi txvbqb3f txvbqb7h txvbqb76 txvbqb7t txvbqb1etp txvbqb1gct", s = "txvbqb10o0 txvbqb11ll txvbqb12j6 txvbqbxv9 txvbqbc7z txvbqbc27 txvbqbci3 txvbqbce4", c = "txvbqbfpn txvbqbh4x txvbqbheb", l = "txvbqb19uf", u = "txvbqbo7v txvbqbam txvbqbhbs txvbqb1bhb txvbqbmu1", d = "txvbqbrzn", f = "w8yhmy1 txvbqb1f2 txvbqb29r txvbqb2sj txvbqb1bhb txvbqb1b9n txvbqb7h txvbqb75 txvbqb7t";
@@ -1,3 +1,4 @@
1
+ /* empty css */
1
2
  /* empty css */
2
3
  //#region src/components/backoffice/billing/backofficeBillingUsageChart.css.ts
3
4
  var e = "txvbqbfpn txvbqbh4x txvbqbhdy", t = "txvbqbaz txvbqbbe txvbqbhbf txvbqb1bg1 txvbqbo7v", n = "txvbqb96 txvbqb1bg5 txvbqbo7v";
@@ -1,4 +1,3 @@
1
- /* empty css */
2
1
  /* empty css */
3
2
  //#region src/components/backoffice/detail/backofficeDetailRelationLink.css.ts
4
3
  var e = "_93gupm0 qbwcueg qbwcuee txvbqb2tz txvbqb1bg1 txvbqb3f txvbqb7g txvbqb76 txvbqb7t qbwcuef txvbqb1ct1 txvbqb1dsd qbwcue0 txvbqb1ffs txvbqb1ga0 txvbqb10mx txvbqb11ki txvbqb12hq txvbqbxtt txvbqb7h txvbqb75 txvbqbfpn txvbqblt7 txvbqbhdy txvbqb28o txvbqb2sj txvbqbik txvbqb1b4r txvbqbey txvbqbem txvbqbh4k txvbqbh4y txvbqb1ct4 txvbqb1dsg", t = "txvbqb9j txvbqbhb2 txvbqbv7x txvbqbws9", n = "txvbqbfqq txvbqbey txvbqbhd8 txvbqbh6d txvbqbv7x", r = "txvbqb96 txvbqb1bg3 txvbqbws9 txvbqb18e2", i = "txvbqbfqq txvbqbey txvbqbls4 txvbqb1bg5 txvbqb9j txvbqbmzg";
@@ -1 +1 @@
1
- {"version":3,"file":"EntityFilterValue.js","names":[],"sources":["../../../../../src/components/backoffice/filters/EntityFilterValue.tsx"],"sourcesContent":["import { Suspense, type JSX } from 'react';\nimport * as ReactRelay from 'react-relay';\nimport type { OperationType } from 'relay-runtime';\n\nimport type { BackofficePickerValueConfig } from '@plumile/backoffice-core/types.js';\n\nimport { useBackofficeReactTranslation } from '../../../i18n/useBackofficeReactTranslation.js';\nimport { useBackofficePickerEntityLoader } from '../../../provider/useBackofficeEntityLoader.js';\nimport { BackofficeErrorBoundary } from '../errors/BackofficeErrorBoundary.js';\n\nconst { useLazyLoadQuery } = ReactRelay;\n\ntype EntityFilterValueContentProps<RowRef, RowView> = {\n valueConfig: BackofficePickerValueConfig<RowRef, RowView>;\n id: string;\n children: EntityFilterValueTextChildren;\n};\n\nconst resolveTitle = (value: unknown): string | null => {\n if (value == null || typeof value !== 'object') {\n return null;\n }\n const { title } = value as { title?: unknown };\n if (typeof title !== 'string') {\n return null;\n }\n const trimmed = title.trim();\n if (trimmed === '') {\n return null;\n }\n return trimmed;\n};\n\nconst EntityFilterValueContent = <RowRef, RowView>({\n valueConfig,\n id,\n children,\n}: EntityFilterValueContentProps<RowRef, RowView>): JSX.Element => {\n const data = useLazyLoadQuery<OperationType>(valueConfig.query, { id });\n const rowRef = valueConfig.resolveRow(data);\n let row: RowView | null = null;\n if (rowRef != null) {\n row = valueConfig.toRow(rowRef);\n }\n const title = resolveTitle(row);\n let status: EntityFilterValueTextState['status'] = 'resolved';\n if (title == null) {\n status = 'unresolved';\n }\n\n return children(title, { status });\n};\n\nexport type EntityFilterValueTextState = {\n status: 'loading' | 'resolved' | 'unresolved' | 'unavailable' | 'error';\n};\n\nexport type EntityFilterValueTextChildren = (\n label: string | null,\n state?: EntityFilterValueTextState,\n) => JSX.Element;\n\nexport type EntityFilterValueTextProps = {\n entityId: string;\n id: string;\n children: EntityFilterValueTextChildren;\n};\n\nexport const EntityFilterValueText = ({\n entityId,\n id,\n children,\n}: EntityFilterValueTextProps): JSX.Element => {\n const resolvedId = id.trim();\n const pickerEntityState = useBackofficePickerEntityLoader(entityId, {\n enabled: resolvedId !== '',\n });\n\n if (resolvedId === '') {\n return children(null, { status: 'unavailable' });\n }\n\n let valueConfig: BackofficePickerValueConfig<unknown, unknown> | null = null;\n if (pickerEntityState.status === 'loaded') {\n valueConfig = pickerEntityState.module.config.picker.value ?? null;\n }\n\n const loadingFallback = children(null, { status: 'loading' });\n if (pickerEntityState.status === 'loading') {\n return loadingFallback;\n }\n\n let unavailableStatus: EntityFilterValueTextState['status'] = 'unavailable';\n if (pickerEntityState.status === 'error') {\n unavailableStatus = 'error';\n }\n const unavailableFallback = children(null, {\n status: unavailableStatus,\n });\n if (valueConfig == null) {\n return unavailableFallback;\n }\n\n return (\n <BackofficeErrorBoundary\n fallback={() => {\n return children(null, { status: 'error' });\n }}\n >\n <Suspense fallback={loadingFallback}>\n <EntityFilterValueContent valueConfig={valueConfig} id={id}>\n {children}\n </EntityFilterValueContent>\n </Suspense>\n </BackofficeErrorBoundary>\n );\n};\n\nexport type EntityFilterValueProps = {\n entityId: string;\n id: string;\n};\n\nexport const EntityFilterValue = ({\n entityId,\n id,\n}: EntityFilterValueProps): JSX.Element => {\n const { t } = useBackofficeReactTranslation();\n const resolvedId = id.trim();\n\n return (\n <EntityFilterValueText entityId={entityId} id={id}>\n {(label) => {\n let fallbackLabel = resolvedId;\n if (resolvedId === '') {\n fallbackLabel = t('filters.placeholders.unresolved');\n }\n return <span>{label ?? fallbackLabel}</span>;\n }}\n </EntityFilterValueText>\n );\n};\n\nexport default EntityFilterValue;\n"],"mappings":";;;;;;;AAUA,IAAM,EAAE,kBAAA,MAAqB,GAQvB,KAAgB,MAAkC;CACtD,IAAqB,OAAO,KAAU,aAAlC,GACF,OAAO;CAET,IAAM,EAAE,aAAU;CAClB,IAAI,OAAO,KAAU,UACnB,OAAO;CAET,IAAM,IAAU,EAAM,KAAK;CAI3B,OAHI,MAAY,KACP,OAEF;AACT,GAEM,KAA6C,EACjD,gBACA,OACA,kBACiE;CACjE,IAAM,IAAO,EAAgC,EAAY,OAAO,EAAE,MAAG,CAAC,GAChE,IAAS,EAAY,WAAW,CAAI,GACtC,IAAsB;CAC1B,AAAI,KAAU,SACZ,IAAM,EAAY,MAAM,CAAM;CAEhC,IAAM,IAAQ,EAAa,CAAG,GAC1B,IAA+C;CAKnD,OAJI,MACF,IAAS,eAGJ,EAAS,GAAO,EAAE,UAAO,CAAC;AACnC,GAiBa,KAAyB,EACpC,aACA,OACA,kBAC6C;CAC7C,IAAM,IAAa,EAAG,KAAK,GACrB,IAAoB,EAAgC,GAAU,EAClE,SAAS,MAAe,GAC1B,CAAC;CAED,IAAI,MAAe,IACjB,OAAO,EAAS,MAAM,EAAE,QAAQ,cAAc,CAAC;CAGjD,IAAI,IAAoE;CACxE,AAAI,EAAkB,WAAW,aAC/B,IAAc,EAAkB,OAAO,OAAO,OAAO,SAAS;CAGhE,IAAM,IAAkB,EAAS,MAAM,EAAE,QAAQ,UAAU,CAAC;CAC5D,IAAI,EAAkB,WAAW,WAC/B,OAAO;CAGT,IAAI,IAA0D;CAC9D,AAAI,EAAkB,WAAW,YAC/B,IAAoB;CAEtB,IAAM,IAAsB,EAAS,MAAM,EACzC,QAAQ,EACV,CAAC;CAKD,OAJI,KAAe,OACV,IAIP,kBAAC,GAAD;EACE,gBACS,EAAS,MAAM,EAAE,QAAQ,QAAQ,CAAC;YAG3C,kBAAC,GAAD;GAAU,UAAU;aAClB,kBAAC,GAAD;IAAuC;IAAiB;IACrD;GACuB,CAAA;EAClB,CAAA;CACa,CAAA;AAE7B,GAOa,KAAqB,EAChC,aACA,YACyC;CACzC,IAAM,EAAE,SAAM,EAA8B,GACtC,IAAa,EAAG,KAAK;CAE3B,OACE,kBAAC,GAAD;EAAiC;EAAc;aAC3C,MAAU;GACV,IAAI,IAAgB;GAIpB,OAHI,MAAe,OACjB,IAAgB,EAAE,iCAAiC,IAE9C,kBAAC,QAAD,EAAA,UAAO,KAAS,EAAoB,CAAA;EAC7C;CACqB,CAAA;AAE3B"}
1
+ {"version":3,"file":"EntityFilterValue.js","names":[],"sources":["../../../../../src/components/backoffice/filters/EntityFilterValue.tsx"],"sourcesContent":["import { Suspense, type JSX } from 'react';\nimport * as ReactRelay from 'react-relay';\nimport type { OperationType } from 'relay-runtime';\n\nimport type {\n BackofficeAliasedPickerValueResponse,\n BackofficePickerValueConfig,\n} from '@plumile/backoffice-core/types.js';\n\nimport { useBackofficeReactTranslation } from '../../../i18n/useBackofficeReactTranslation.js';\nimport { useBackofficePickerEntityLoader } from '../../../provider/useBackofficeEntityLoader.js';\nimport { BackofficeErrorBoundary } from '../errors/BackofficeErrorBoundary.js';\n\nconst { useLazyLoadQuery } = ReactRelay;\n\ntype EntityFilterValueContentProps<RowRef, RowView, ValueQueryData> = {\n valueConfig: BackofficePickerValueConfig<RowRef, RowView, ValueQueryData>;\n id: string;\n children: EntityFilterValueTextChildren;\n};\n\nconst resolveTitle = (value: unknown): string | null => {\n if (value == null || typeof value !== 'object') {\n return null;\n }\n const { title } = value as { title?: unknown };\n if (typeof title !== 'string') {\n return null;\n }\n const trimmed = title.trim();\n if (trimmed === '') {\n return null;\n }\n return trimmed;\n};\n\nconst EntityFilterValueContent = <RowRef, RowView, ValueQueryData>({\n valueConfig,\n id,\n children,\n}: EntityFilterValueContentProps<\n RowRef,\n RowView,\n ValueQueryData\n>): JSX.Element => {\n const data = useLazyLoadQuery<OperationType>(valueConfig.query, {\n id,\n }) as ValueQueryData;\n const rowRef = valueConfig.resolveRow(data);\n let row: RowView | null = null;\n if (rowRef != null) {\n row = valueConfig.toRow(rowRef);\n }\n const title = resolveTitle(row);\n let status: EntityFilterValueTextState['status'] = 'resolved';\n if (title == null) {\n status = 'unresolved';\n }\n\n return children(title, { status });\n};\n\nexport type EntityFilterValueTextState = {\n status: 'loading' | 'resolved' | 'unresolved' | 'unavailable' | 'error';\n};\n\nexport type EntityFilterValueTextChildren = (\n label: string | null,\n state?: EntityFilterValueTextState,\n) => JSX.Element;\n\nexport type EntityFilterValueTextProps = {\n entityId: string;\n id: string;\n children: EntityFilterValueTextChildren;\n};\n\nexport const EntityFilterValueText = ({\n entityId,\n id,\n children,\n}: EntityFilterValueTextProps): JSX.Element => {\n const resolvedId = id.trim();\n const pickerEntityState = useBackofficePickerEntityLoader(entityId, {\n enabled: resolvedId !== '',\n });\n\n if (resolvedId === '') {\n return children(null, { status: 'unavailable' });\n }\n\n let valueConfig: BackofficePickerValueConfig<\n unknown,\n unknown,\n BackofficeAliasedPickerValueResponse<string, unknown>\n > | null = null;\n if (pickerEntityState.status === 'loaded') {\n valueConfig = pickerEntityState.module.config.picker.value ?? null;\n }\n\n const loadingFallback = children(null, { status: 'loading' });\n if (pickerEntityState.status === 'loading') {\n return loadingFallback;\n }\n\n let unavailableStatus: EntityFilterValueTextState['status'] = 'unavailable';\n if (pickerEntityState.status === 'error') {\n unavailableStatus = 'error';\n }\n const unavailableFallback = children(null, {\n status: unavailableStatus,\n });\n if (valueConfig == null) {\n return unavailableFallback;\n }\n\n return (\n <BackofficeErrorBoundary\n fallback={() => {\n return children(null, { status: 'error' });\n }}\n >\n <Suspense fallback={loadingFallback}>\n <EntityFilterValueContent valueConfig={valueConfig} id={id}>\n {children}\n </EntityFilterValueContent>\n </Suspense>\n </BackofficeErrorBoundary>\n );\n};\n\nexport type EntityFilterValueProps = {\n entityId: string;\n id: string;\n};\n\nexport const EntityFilterValue = ({\n entityId,\n id,\n}: EntityFilterValueProps): JSX.Element => {\n const { t } = useBackofficeReactTranslation();\n const resolvedId = id.trim();\n\n return (\n <EntityFilterValueText entityId={entityId} id={id}>\n {(label) => {\n let fallbackLabel = resolvedId;\n if (resolvedId === '') {\n fallbackLabel = t('filters.placeholders.unresolved');\n }\n return <span>{label ?? fallbackLabel}</span>;\n }}\n </EntityFilterValueText>\n );\n};\n\nexport default EntityFilterValue;\n"],"mappings":";;;;;;;AAaA,IAAM,EAAE,kBAAA,MAAqB,GAQvB,KAAgB,MAAkC;CACtD,IAAqB,OAAO,KAAU,aAAlC,GACF,OAAO;CAET,IAAM,EAAE,aAAU;CAClB,IAAI,OAAO,KAAU,UACnB,OAAO;CAET,IAAM,IAAU,EAAM,KAAK;CAI3B,OAHI,MAAY,KACP,OAEF;AACT,GAEM,KAA6D,EACjE,gBACA,OACA,kBAKiB;CACjB,IAAM,IAAO,EAAgC,EAAY,OAAO,EAC9D,MACF,CAAC,GACK,IAAS,EAAY,WAAW,CAAI,GACtC,IAAsB;CAC1B,AAAI,KAAU,SACZ,IAAM,EAAY,MAAM,CAAM;CAEhC,IAAM,IAAQ,EAAa,CAAG,GAC1B,IAA+C;CAKnD,OAJI,MACF,IAAS,eAGJ,EAAS,GAAO,EAAE,UAAO,CAAC;AACnC,GAiBa,KAAyB,EACpC,aACA,OACA,kBAC6C;CAC7C,IAAM,IAAa,EAAG,KAAK,GACrB,IAAoB,EAAgC,GAAU,EAClE,SAAS,MAAe,GAC1B,CAAC;CAED,IAAI,MAAe,IACjB,OAAO,EAAS,MAAM,EAAE,QAAQ,cAAc,CAAC;CAGjD,IAAI,IAIO;CACX,AAAI,EAAkB,WAAW,aAC/B,IAAc,EAAkB,OAAO,OAAO,OAAO,SAAS;CAGhE,IAAM,IAAkB,EAAS,MAAM,EAAE,QAAQ,UAAU,CAAC;CAC5D,IAAI,EAAkB,WAAW,WAC/B,OAAO;CAGT,IAAI,IAA0D;CAC9D,AAAI,EAAkB,WAAW,YAC/B,IAAoB;CAEtB,IAAM,IAAsB,EAAS,MAAM,EACzC,QAAQ,EACV,CAAC;CAKD,OAJI,KAAe,OACV,IAIP,kBAAC,GAAD;EACE,gBACS,EAAS,MAAM,EAAE,QAAQ,QAAQ,CAAC;YAG3C,kBAAC,GAAD;GAAU,UAAU;aAClB,kBAAC,GAAD;IAAuC;IAAiB;IACrD;GACuB,CAAA;EAClB,CAAA;CACa,CAAA;AAE7B,GAOa,KAAqB,EAChC,aACA,YACyC;CACzC,IAAM,EAAE,SAAM,EAA8B,GACtC,IAAa,EAAG,KAAK;CAE3B,OACE,kBAAC,GAAD;EAAiC;EAAc;aAC3C,MAAU;GACV,IAAI,IAAgB;GAIpB,OAHI,MAAe,OACjB,IAAgB,EAAE,iCAAiC,IAE9C,kBAAC,QAAD,EAAA,UAAO,KAAS,EAAoB,CAAA;EAC7C;CACqB,CAAA;AAE3B"}
@@ -1,3 +1,4 @@
1
+ /* empty css */
1
2
  /* empty css */
2
3
  //#region src/components/backoffice/layout/backofficeSidebarActions.css.ts
3
4
  var e = "_1xws1b00 txvbqbfqq txvbqbey txvbqbls4 txvbqb19gc txvbqbjlr txvbqb1tv txvbqb2rt txvbqb2tz txvbqb1b4r txvbqbv txvbqbwvi txvbqb7h txvbqb76 txvbqb7t";
@@ -1,3 +1,4 @@
1
+ /* empty css */
1
2
  /* empty css */
2
3
  //#region src/components/backoffice/list/RowFlagsCell.css.ts
3
4
  var e = "txvbqb10m7 txvbqb11js txvbqb12h0 txvbqbxt3 txvbqbls4", t = "txvbqbfqq txvbqbey txvbqbls4 txvbqbi8n txvbqb19uf", n = "qbwcuex qbwcuer txvbqbfqq txvbqbey txvbqbls4 txvbqbh6d txvbqbo4m qbwcue11 qbwcuev txvbqb19h2 txvbqbjmh txvbqbvat txvbqbub2";
@@ -1,31 +1,14 @@
1
- import { useCallback as e, useEffect as t, useRef as n, useState as r } from "react";
1
+ import { useCallback as e } from "react";
2
+ import { useClipboardCopy as t } from "@plumile/ui/hooks/useClipboardCopy.js";
2
3
  //#region src/hooks/useCopyToClipboard.ts
3
- var i = "copy-to-clipboard-fallback";
4
- function a(e) {
5
- if (typeof document > "u") return;
6
- let t = document.getElementById(i);
7
- t ?? (t = document.createElement("textarea"), t.id = i, t.setAttribute("readonly", ""), t.style.position = "absolute", t.style.left = "-9999px", t.style.top = "0", t.style.opacity = "0", document.body.appendChild(t)), t.value = e, t.select(), document.execCommand("copy");
8
- }
9
- function o(i = 2e3) {
10
- let [o, s] = r(null), c = n(null);
11
- return t(() => () => {
12
- c.current != null && window.clearTimeout(c.current);
13
- }, []), {
14
- copiedKey: o,
15
- copy: e(async (e, t) => {
16
- let n = !1, r;
17
- if (typeof navigator < "u" && (r = navigator.clipboard), r != null) try {
18
- await r.writeText(e), n = !0;
19
- } catch {
20
- n = !1;
21
- }
22
- return n ||= (a(e), !0), t != null && (s(t), c.current != null && window.clearTimeout(c.current), c.current = window.setTimeout(() => {
23
- s(null), c.current = null;
24
- }, i)), n;
25
- }, [i])
4
+ function n(n = 2e3) {
5
+ let { copiedKey: r, copyText: i } = t(n);
6
+ return {
7
+ copiedKey: r,
8
+ copy: e(async (e, t) => i(e, t), [i])
26
9
  };
27
10
  }
28
11
  //#endregion
29
- export { o as default, o as useCopyToClipboard };
12
+ export { n as default, n as useCopyToClipboard };
30
13
 
31
14
  //# sourceMappingURL=useCopyToClipboard.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useCopyToClipboard.js","names":[],"sources":["../../../src/hooks/useCopyToClipboard.ts"],"sourcesContent":["import { useCallback, useEffect, useRef, useState } from 'react';\n\nconst FALLBACK_TEXTAREA_ID = 'copy-to-clipboard-fallback';\n\n/** Write to the clipboard via a hidden textarea when the Clipboard API is unavailable. */\nfunction writeWithFallback(value: string): void {\n if (typeof document === 'undefined') {\n return;\n }\n\n let textarea = document.getElementById(\n FALLBACK_TEXTAREA_ID,\n ) as HTMLTextAreaElement | null;\n\n if (textarea == null) {\n textarea = document.createElement('textarea');\n textarea.id = FALLBACK_TEXTAREA_ID;\n textarea.setAttribute('readonly', '');\n textarea.style.position = 'absolute';\n textarea.style.left = '-9999px';\n textarea.style.top = '0';\n textarea.style.opacity = '0';\n document.body.appendChild(textarea);\n }\n\n textarea.value = value;\n textarea.select();\n document.execCommand('copy');\n}\n\n/** Copy text with best-effort browser fallback and short-lived copied state. */\nexport function useCopyToClipboard(timeoutMs = 2000): {\n copiedKey: string | null;\n copy: (value: string, key?: string) => Promise<boolean>;\n} {\n const [copiedKey, setCopiedKey] = useState<string | null>(null);\n const timeoutRef = useRef<number | null>(null);\n\n useEffect(() => {\n return () => {\n if (timeoutRef.current != null) {\n window.clearTimeout(timeoutRef.current);\n }\n };\n }, []);\n\n const copy = useCallback(\n async (value: string, key?: string): Promise<boolean> => {\n let succeeded = false;\n\n let clipboard: Clipboard | undefined;\n if (typeof navigator !== 'undefined') {\n clipboard = navigator.clipboard;\n }\n\n if (clipboard != null) {\n try {\n await clipboard.writeText(value);\n succeeded = true;\n } catch {\n succeeded = false;\n }\n }\n\n if (!succeeded) {\n writeWithFallback(value);\n succeeded = true;\n }\n\n if (key != null) {\n setCopiedKey(key);\n if (timeoutRef.current != null) {\n window.clearTimeout(timeoutRef.current);\n }\n timeoutRef.current = window.setTimeout(() => {\n setCopiedKey(null);\n timeoutRef.current = null;\n }, timeoutMs);\n }\n\n return succeeded;\n },\n [timeoutMs],\n );\n\n return { copiedKey, copy };\n}\n\nexport default useCopyToClipboard;\n"],"mappings":";;AAEA,IAAM,IAAuB;AAG7B,SAAS,EAAkB,GAAqB;CAC9C,IAAI,OAAO,WAAa,KACtB;CAGF,IAAI,IAAW,SAAS,eACtB,CACF;CAeA,AAbI,MACF,IAAW,SAAS,cAAc,UAAU,GAC5C,EAAS,KAAK,GACd,EAAS,aAAa,YAAY,EAAE,GACpC,EAAS,MAAM,WAAW,YAC1B,EAAS,MAAM,OAAO,WACtB,EAAS,MAAM,MAAM,KACrB,EAAS,MAAM,UAAU,KACzB,SAAS,KAAK,YAAY,CAAQ,IAGpC,EAAS,QAAQ,GACjB,EAAS,OAAO,GAChB,SAAS,YAAY,MAAM;AAC7B;AAGA,SAAgB,EAAmB,IAAY,KAG7C;CACA,IAAM,CAAC,GAAW,KAAgB,EAAwB,IAAI,GACxD,IAAa,EAAsB,IAAI;CAiD7C,OA/CA,cACe;EACX,AAAI,EAAW,WAAW,QACxB,OAAO,aAAa,EAAW,OAAO;CAE1C,GACC,CAAC,CAAC,GAyCE;EAAE;EAAW,MAvCP,EACX,OAAO,GAAe,MAAmC;GACvD,IAAI,IAAY,IAEZ;GAKJ,IAJI,OAAO,YAAc,QACvB,IAAY,UAAU,YAGpB,KAAa,MACf,IAAI;IAEF,AADA,MAAM,EAAU,UAAU,CAAK,GAC/B,IAAY;GACd,QAAQ;IACN,IAAY;GACd;GAmBF,OAhBA,AAEE,OADA,EAAkB,CAAK,GACX,KAGV,KAAO,SACT,EAAa,CAAG,GACZ,EAAW,WAAW,QACxB,OAAO,aAAa,EAAW,OAAO,GAExC,EAAW,UAAU,OAAO,iBAAiB;IAE3C,AADA,EAAa,IAAI,GACjB,EAAW,UAAU;GACvB,GAAG,CAAS,IAGP;EACT,GACA,CAAC,CAAS,CAGQ;CAAK;AAC3B"}
1
+ {"version":3,"file":"useCopyToClipboard.js","names":[],"sources":["../../../src/hooks/useCopyToClipboard.ts"],"sourcesContent":["import { useCallback } from 'react';\n\nimport { useClipboardCopy } from '@plumile/ui/hooks/useClipboardCopy.js';\n\n/** Copy text with best-effort browser fallback and short-lived copied state. */\nexport function useCopyToClipboard(timeoutMs = 2000): {\n copiedKey: string | null;\n copy: (value: string, key?: string) => Promise<boolean>;\n} {\n const { copiedKey, copyText } = useClipboardCopy(timeoutMs);\n\n const copy = useCallback(\n async (value: string, key?: string): Promise<boolean> => {\n return copyText(value, key);\n },\n [copyText],\n );\n\n return { copiedKey, copy };\n}\n\nexport default useCopyToClipboard;\n"],"mappings":";;;AAKA,SAAgB,EAAmB,IAAY,KAG7C;CACA,IAAM,EAAE,cAAW,gBAAa,EAAiB,CAAS;CAS1D,OAAO;EAAE;EAAW,MAPP,EACX,OAAO,GAAe,MACb,EAAS,GAAO,CAAG,GAE5B,CAAC,CAAQ,CAGS;CAAK;AAC3B"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../../../../node_modules/relay-test-utils/index.js"],"sourcesContent":["/**\n * Relay v20.1.1\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nmodule.exports = require('./lib/index.js');\n"],"x_google_ignoreList":[0],"mappings":";;;;CASA,EAAO,UAAA,EAAA"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../../../node_modules/relay-test-utils/index.js"],"sourcesContent":["/**\n * Relay v21.0.0\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nmodule.exports = require('./lib/index.js');\n"],"x_google_ignoreList":[0],"mappings":";;;;CASA,EAAO,UAAA,EAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"EntityFilterValue.d.ts","sourceRoot":"","sources":["../../../../../src/components/backoffice/filters/EntityFilterValue.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,GAAG,EAAE,MAAM,OAAO,CAAC;AAqD3C,MAAM,MAAM,0BAA0B,GAAG;IACvC,MAAM,EAAE,SAAS,GAAG,UAAU,GAAG,YAAY,GAAG,aAAa,GAAG,OAAO,CAAC;CACzE,CAAC;AAEF,MAAM,MAAM,6BAA6B,GAAG,CAC1C,KAAK,EAAE,MAAM,GAAG,IAAI,EACpB,KAAK,CAAC,EAAE,0BAA0B,KAC/B,GAAG,CAAC,OAAO,CAAC;AAEjB,MAAM,MAAM,0BAA0B,GAAG;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,6BAA6B,CAAC;CACzC,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAAI,6BAInC,0BAA0B,KAAG,GAAG,CAAC,OA4CnC,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;CACZ,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAAI,mBAG/B,sBAAsB,KAAG,GAAG,CAAC,OAe/B,CAAC;AAEF,eAAe,iBAAiB,CAAC"}
1
+ {"version":3,"file":"EntityFilterValue.d.ts","sourceRoot":"","sources":["../../../../../src/components/backoffice/filters/EntityFilterValue.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,GAAG,EAAE,MAAM,OAAO,CAAC;AA8D3C,MAAM,MAAM,0BAA0B,GAAG;IACvC,MAAM,EAAE,SAAS,GAAG,UAAU,GAAG,YAAY,GAAG,aAAa,GAAG,OAAO,CAAC;CACzE,CAAC;AAEF,MAAM,MAAM,6BAA6B,GAAG,CAC1C,KAAK,EAAE,MAAM,GAAG,IAAI,EACpB,KAAK,CAAC,EAAE,0BAA0B,KAC/B,GAAG,CAAC,OAAO,CAAC;AAEjB,MAAM,MAAM,0BAA0B,GAAG;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,6BAA6B,CAAC;CACzC,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAAI,6BAInC,0BAA0B,KAAG,GAAG,CAAC,OAgDnC,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;CACZ,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAAI,mBAG/B,sBAAsB,KAAG,GAAG,CAAC,OAe/B,CAAC;AAEF,eAAe,iBAAiB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"useCopyToClipboard.d.ts","sourceRoot":"","sources":["../../../src/hooks/useCopyToClipboard.ts"],"names":[],"mappings":"AA+BA,wBAAgB,kBAAkB,CAAC,SAAS,SAAO,GAAG;IACpD,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CACzD,CAoDA;AAED,eAAe,kBAAkB,CAAC"}
1
+ {"version":3,"file":"useCopyToClipboard.d.ts","sourceRoot":"","sources":["../../../src/hooks/useCopyToClipboard.ts"],"names":[],"mappings":"AAKA,wBAAgB,kBAAkB,CAAC,SAAS,SAAO,GAAG;IACpD,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CACzD,CAWA;AAED,eAAe,kBAAkB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@plumile/backoffice-react",
3
- "version": "0.1.146",
3
+ "version": "0.1.150",
4
4
  "description": "React provider and pages for Kronex backoffice",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -175,39 +175,39 @@
175
175
  "i18next-browser-languagedetector": "8.2.1",
176
176
  "react-i18next": "^17.0.8",
177
177
  "react-qr-code": "^2.0.21",
178
- "relay-runtime": "^20.1.1",
178
+ "relay-runtime": "^21.0.0",
179
179
  "tslib": "^2.8.1"
180
180
  },
181
181
  "devDependencies": {
182
- "@plumile/auth": "^0.1.146",
183
- "@plumile/backoffice-core": "^0.1.146",
184
- "@plumile/filter-query": "^0.1.146",
185
- "@plumile/router": "^0.1.146",
186
- "@plumile/ui": "^0.1.146",
187
- "@types/react": "19.2.14",
182
+ "@plumile/auth": "^0.1.150",
183
+ "@plumile/backoffice-core": "^0.1.150",
184
+ "@plumile/filter-query": "^0.1.150",
185
+ "@plumile/router": "^0.1.150",
186
+ "@plumile/ui": "^0.1.150",
187
+ "@types/react": "19.2.15",
188
188
  "@types/react-dom": "19.2.3",
189
189
  "@types/relay-runtime": "20.1.1",
190
190
  "i18next": "26.2.0",
191
191
  "react": "19.2.6",
192
192
  "react-dom": "19.2.6",
193
- "react-relay": "20.1.1",
194
- "relay-test-utils": "20.1.1",
193
+ "react-relay": "21.0.0",
194
+ "relay-test-utils": "21.0.0",
195
195
  "rimraf": "6.1.3",
196
196
  "typescript": "6.0.3"
197
197
  },
198
198
  "peerDependencies": {
199
- "@plumile/auth": "^0.1.145",
200
- "@plumile/backoffice-core": "^0.1.145",
201
- "@plumile/filter-query": "^0.1.145",
202
- "@plumile/router": "^0.1.145",
203
- "@plumile/ui": "^0.1.145",
199
+ "@plumile/auth": "^0.1.147",
200
+ "@plumile/backoffice-core": "^0.1.147",
201
+ "@plumile/filter-query": "^0.1.147",
202
+ "@plumile/router": "^0.1.147",
203
+ "@plumile/ui": "^0.1.147",
204
204
  "i18next": "^26.2.0",
205
205
  "react": "^19.2.6",
206
206
  "react-dom": "^19.2.6",
207
207
  "react-i18next": "^17.0.8",
208
208
  "react-qr-code": "^2.0.21",
209
- "react-relay": "^20.1.1",
210
- "relay-runtime": "^20.1.1"
209
+ "react-relay": "^21.0.0",
210
+ "relay-runtime": "^21.0.0"
211
211
  },
212
212
  "files": [
213
213
  "lib",