@plumile/backoffice-react 0.2.11 → 0.2.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. package/README.md +3 -0
  2. package/lib/esm/auth/authRefreshNotice.css.js +1 -1
  3. package/lib/esm/auth/login/OidcButtons.js +16 -15
  4. package/lib/esm/auth/login/OidcButtons.js.map +1 -1
  5. package/lib/esm/auth/login/loginPage.css.js +1 -1
  6. package/lib/esm/auth/pages/AcceptInvitationScreen.js +7 -9
  7. package/lib/esm/auth/pages/AcceptInvitationScreen.js.map +1 -1
  8. package/lib/esm/auth/pages/PasswordResetCompleteScreen.js +7 -9
  9. package/lib/esm/auth/pages/PasswordResetCompleteScreen.js.map +1 -1
  10. package/lib/esm/auth/pages/PasswordResetRequestScreen.js +1 -1
  11. package/lib/esm/auth/pages/PasswordResetRequestScreen.js.map +1 -1
  12. package/lib/esm/components/backoffice/actions/BackofficeEntityActionFormDialog.js +1 -1
  13. package/lib/esm/components/backoffice/actions/backofficeEntityActionFormDialog.css.js +1 -1
  14. package/lib/esm/components/backoffice/billing/BackofficeBillingUsageChart.js +1 -1
  15. package/lib/esm/components/backoffice/billing/backofficeBillingUsageChart.css.js +1 -1
  16. package/lib/esm/components/backoffice/detail/BackofficeEntitySummaryHeader.js +6 -6
  17. package/lib/esm/components/backoffice/detail/BackofficeRelationsSummaryGrid.js +1 -1
  18. package/lib/esm/components/backoffice/detail/BackofficeUsageCostBreakdown.js +13 -13
  19. package/lib/esm/components/backoffice/detail/backofficeDetailBadgeRow.css.js +1 -1
  20. package/lib/esm/components/backoffice/detail/backofficeDetailErrorList.css.js +1 -1
  21. package/lib/esm/components/backoffice/detail/backofficeDetailLayout.css.js +1 -1
  22. package/lib/esm/components/backoffice/detail/backofficeDetailRelationList.css.js +1 -1
  23. package/lib/esm/components/backoffice/detail/backofficeEntitySummaryHeader.css.js +1 -1
  24. package/lib/esm/components/backoffice/detail/backofficeRelationsSummaryGrid.css.js +1 -1
  25. package/lib/esm/components/backoffice/detail/backofficeUsageCostBreakdown.css.js +1 -1
  26. package/lib/esm/components/backoffice/filters/EntityIdFilterField.js +1 -1
  27. package/lib/esm/components/backoffice/filters/backofficeFilterAction.css.js +1 -1
  28. package/lib/esm/components/backoffice/filters/deferredFilterSearchInput.css.js +1 -1
  29. package/lib/esm/components/backoffice/filters/deferredFilterSearchInput.css.js.map +1 -1
  30. package/lib/esm/components/backoffice/filters/entityIdFilterField.css.js +1 -1
  31. package/lib/esm/components/backoffice/hub/BackofficeHubTemplate.js +5 -5
  32. package/lib/esm/components/backoffice/hub/backofficeHubTemplate.css.js +1 -1
  33. package/lib/esm/components/backoffice/layout/backofficeSidebarActions.css.js +1 -1
  34. package/lib/esm/components/backoffice/layout/breadcrumb/BackofficeTopbarBreadcrumb.js +2 -2
  35. package/lib/esm/components/backoffice/layout/breadcrumb/backofficeTopbarBreadcrumb.css.js +1 -1
  36. package/lib/esm/components/backoffice/links/BackofficeLinkContent.js +1 -1
  37. package/lib/esm/components/backoffice/links/backofficeLink.css.js +1 -1
  38. package/lib/esm/components/backoffice/list/RowFlagsCell.css.js +1 -1
  39. package/lib/esm/components/backoffice/overview/backofficeOverviewLayout.css.js +1 -1
  40. package/lib/esm/components/backoffice/pickers/entityIdPickerDialog.css.js +1 -1
  41. package/lib/esm/components/backoffice/refs/backofficeRelatedCountLink.css.js +1 -1
  42. package/lib/esm/components/backoffice/routing/backofficeContentBoundary.css.js +1 -1
  43. package/lib/esm/components/backoffice/routing/backofficeContentError.css.js +1 -1
  44. package/lib/esm/components/backoffice/routing/backofficeContentFallback.css.js +1 -1
  45. package/lib/esm/components/backoffice/scaffolds/backofficeEntityListScaffold.css.js +1 -1
  46. package/lib/esm/components/backoffice/scaffolds/backofficeTabbedDetailShell.css.js +1 -1
  47. package/lib/esm/components/backoffice/shared/backofficeFilterableCell.css.js +5 -5
  48. package/lib/esm/components/backoffice/shared/backofficeInlineFilterRow.css.js +1 -1
  49. package/lib/esm/components/backoffice/tools/BackofficeToolsDocPanel.js +1 -1
  50. package/lib/esm/components/backoffice/tools/BackofficeToolsErrorFallback.js +2 -1
  51. package/lib/esm/components/backoffice/tools/BackofficeToolsErrorFallback.js.map +1 -1
  52. package/lib/esm/components/backoffice/tools/backofficeToolsDocPanel.css.js +1 -1
  53. package/lib/esm/components/backoffice/tools/backofficeToolsForm.css.js +1 -1
  54. package/lib/esm/components/backoffice/tools/backofficeToolsJsonForm.css.js +1 -1
  55. package/lib/esm/hooks/useBackofficeSidebarPins.js +1 -1
  56. package/lib/esm/hooks/useBackofficeSidebarPins.js.map +1 -1
  57. package/lib/esm/hooks/useSidebarGroupCollapse.js +1 -1
  58. package/lib/esm/hooks/useSidebarGroupCollapse.js.map +1 -1
  59. package/lib/esm/pages/BackofficeEntityDetailLayoutPage.js +1 -1
  60. package/lib/esm/pages/BackofficeLayoutPage.js +2 -2
  61. package/lib/esm/pages/BackofficeLayoutPage.js.map +1 -1
  62. package/lib/esm/pages/backofficeDashboardPage.css.js +1 -1
  63. package/lib/esm/pages/backofficeEntityDetailPage.css.js +1 -1
  64. package/lib/esm/pages/backofficeEntityListPage.css.js +1 -1
  65. package/lib/esm/storybook/backofficeDashboardPageStory.css.js +1 -1
  66. package/lib/esm/storybook/relay/RelayStory.css.js +1 -1
  67. package/lib/esm/style.css +1 -1
  68. package/lib/types/auth/login/OidcButtons.d.ts.map +1 -1
  69. package/lib/types/auth/pages/AcceptInvitationScreen.d.ts.map +1 -1
  70. package/lib/types/auth/pages/PasswordResetCompleteScreen.d.ts.map +1 -1
  71. package/lib/types/components/backoffice/filters/deferredFilterSearchInput.css.d.ts.map +1 -1
  72. package/lib/types/components/backoffice/tools/BackofficeToolsErrorFallback.d.ts.map +1 -1
  73. package/package.json +11 -11
package/README.md CHANGED
@@ -66,6 +66,9 @@ packages.
66
66
  - `AcceptInvitationScreen`
67
67
  - `PasswordResetRequestScreen`
68
68
  - `PasswordResetCompleteScreen`
69
+ - Invitation acceptance and password reset use the shared `PasswordField`
70
+ reveal/hide controls while retaining new-password autocomplete and the
71
+ screen-owned password validation.
69
72
  - `VerifyEmailScreen`
70
73
  - `createUseAuth`
71
74
  - `AuthRefreshNotice` keeps the backoffice session-refresh subscription and
@@ -1,6 +1,6 @@
1
1
  /* empty css */
2
2
  //#region src/auth/authRefreshNotice.css.ts
3
- var e = "tc0xii0 txvbqbk67 txvbqb2mc txvbqb1iu txvbqb1lg txvbqb16f txvbqbbwf txvbqbcav txvbqb191";
3
+ var e = "tc0xii0 txvbqbk6s txvbqb2mn txvbqb1j5 txvbqb1lr txvbqb16q txvbqbbx0 txvbqbcbg txvbqb19c";
4
4
  //#endregion
5
5
  export { e as root };
6
6
 
@@ -1,22 +1,23 @@
1
- import { brandGhostButton as e, stack as t } from "./loginPage.css.js";
2
- import { useBackofficeReactTranslation as n } from "../../i18n/useBackofficeReactTranslation.js";
3
- import { jsx as r } from "react/jsx-runtime";
4
- import { Button as i } from "@plumile/ui/button";
1
+ import { brandGhostButton as e, footer as t, stack as n } from "./loginPage.css.js";
2
+ import { useBackofficeReactTranslation as r } from "../../i18n/useBackofficeReactTranslation.js";
3
+ import { cx as i } from "@plumile/ui/theme";
4
+ import { jsx as a } from "react/jsx-runtime";
5
+ import { Button as o } from "@plumile/ui/button";
5
6
  //#region src/auth/login/OidcButtons.tsx
6
- var a = "/auth/oidc/start", o = ({ providers: o }) => {
7
- let { t: s } = n();
8
- return o.length === 0 ? null : /* @__PURE__ */ r("div", {
9
- className: t,
10
- children: o.map((t) => {
11
- let n = s("auth.oidc.buttons.generic");
12
- t === "GOOGLE" ? n = s("auth.oidc.buttons.google") : t === "APPLE" && (n = s("auth.oidc.buttons.apple"));
13
- let o = t.toLowerCase();
14
- return /* @__PURE__ */ r(i, {
7
+ var s = "/auth/oidc/start", c = ({ providers: c }) => {
8
+ let { t: l } = r();
9
+ return c.length === 0 ? null : /* @__PURE__ */ a("div", {
10
+ className: i(n, t),
11
+ children: c.map((t) => {
12
+ let n = l("auth.oidc.buttons.generic");
13
+ t === "GOOGLE" ? n = l("auth.oidc.buttons.google") : t === "APPLE" && (n = l("auth.oidc.buttons.apple"));
14
+ let r = t.toLowerCase();
15
+ return /* @__PURE__ */ a(o, {
15
16
  type: "button",
16
17
  variant: "soft",
17
18
  className: e,
18
19
  onClick: () => {
19
- window.location.assign(`${a}?provider=${o}`);
20
+ window.location.assign(`${s}?provider=${r}`);
20
21
  },
21
22
  tone: "neutral",
22
23
  children: n
@@ -25,6 +26,6 @@ var a = "/auth/oidc/start", o = ({ providers: o }) => {
25
26
  });
26
27
  };
27
28
  //#endregion
28
- export { o as OidcButtons };
29
+ export { c as OidcButtons };
29
30
 
30
31
  //# sourceMappingURL=OidcButtons.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"OidcButtons.js","names":[],"sources":["../../../../src/auth/login/OidcButtons.tsx"],"sourcesContent":["import { type JSX } from 'react';\n\nimport { Button } from '@plumile/ui/button';\n\nimport type { OidcProviderKind } from '../../modules/sharedSchemaTypes.js';\nimport { useBackofficeReactTranslation } from '../../i18n/useBackofficeReactTranslation.js';\n\nimport * as styles from './loginPage.css.js';\n\nconst OIDC_START_PATH = '/auth/oidc/start';\n\ntype Props = {\n providers: readonly OidcProviderKind[];\n};\n\nexport const OidcButtons = ({ providers }: Props): JSX.Element | null => {\n const { t } = useBackofficeReactTranslation();\n\n if (providers.length === 0) {\n return null;\n }\n\n return (\n <div className={styles.stack}>\n {providers.map((provider) => {\n let label = t('auth.oidc.buttons.generic');\n if (provider === 'GOOGLE') {\n label = t('auth.oidc.buttons.google');\n } else if (provider === 'APPLE') {\n label = t('auth.oidc.buttons.apple');\n }\n const providerName = provider.toLowerCase();\n return (\n <Button\n key={provider}\n type=\"button\"\n variant=\"soft\"\n className={styles.brandGhostButton}\n onClick={() => {\n window.location.assign(\n `${OIDC_START_PATH}?provider=${providerName}`,\n );\n }}\n tone=\"neutral\"\n >\n {label}\n </Button>\n );\n })}\n </div>\n );\n};\n"],"mappings":";;;;;AASA,IAAM,IAAkB,oBAMX,KAAe,EAAE,mBAA2C;CACvE,IAAM,EAAE,SAAM,EAA8B;CAM5C,OAJI,EAAU,WAAW,IAChB,OAIP,kBAAC,OAAD;EAAK,WAAW;EACb,UAAA,EAAU,KAAK,MAAa;GAC3B,IAAI,IAAQ,EAAE,2BAA2B;GACzC,AAAI,MAAa,WACf,IAAQ,EAAE,0BAA0B,IAC3B,MAAa,YACtB,IAAQ,EAAE,yBAAyB;GAErC,IAAM,IAAe,EAAS,YAAY;GAC1C,OACE,kBAAC,GAAD;IAEE,MAAK;IACL,SAAQ;IACR,WAAW;IACX,eAAe;KACb,OAAO,SAAS,OACd,GAAG,EAAgB,YAAY,GACjC;IACF;IACA,MAAK;IAEJ,UAAA;GACK,GAZD,CAYC;EAEZ,CAAC;CACE,CAAA;AAET"}
1
+ {"version":3,"file":"OidcButtons.js","names":[],"sources":["../../../../src/auth/login/OidcButtons.tsx"],"sourcesContent":["import { type JSX } from 'react';\n\nimport { Button } from '@plumile/ui/button';\nimport { cx } from '@plumile/ui/theme';\n\nimport type { OidcProviderKind } from '../../modules/sharedSchemaTypes.js';\nimport { useBackofficeReactTranslation } from '../../i18n/useBackofficeReactTranslation.js';\n\nimport * as styles from './loginPage.css.js';\n\nconst OIDC_START_PATH = '/auth/oidc/start';\n\ntype Props = {\n providers: readonly OidcProviderKind[];\n};\n\nexport const OidcButtons = ({ providers }: Props): JSX.Element | null => {\n const { t } = useBackofficeReactTranslation();\n\n if (providers.length === 0) {\n return null;\n }\n\n return (\n <div className={cx(styles.stack, styles.footer)}>\n {providers.map((provider) => {\n let label = t('auth.oidc.buttons.generic');\n if (provider === 'GOOGLE') {\n label = t('auth.oidc.buttons.google');\n } else if (provider === 'APPLE') {\n label = t('auth.oidc.buttons.apple');\n }\n const providerName = provider.toLowerCase();\n return (\n <Button\n key={provider}\n type=\"button\"\n variant=\"soft\"\n className={styles.brandGhostButton}\n onClick={() => {\n window.location.assign(\n `${OIDC_START_PATH}?provider=${providerName}`,\n );\n }}\n tone=\"neutral\"\n >\n {label}\n </Button>\n );\n })}\n </div>\n );\n};\n"],"mappings":";;;;;;AAUA,IAAM,IAAkB,oBAMX,KAAe,EAAE,mBAA2C;CACvE,IAAM,EAAE,SAAM,EAA8B;CAM5C,OAJI,EAAU,WAAW,IAChB,OAIP,kBAAC,OAAD;EAAK,WAAW,EAAG,GAAc,CAAa;EAC3C,UAAA,EAAU,KAAK,MAAa;GAC3B,IAAI,IAAQ,EAAE,2BAA2B;GACzC,AAAI,MAAa,WACf,IAAQ,EAAE,0BAA0B,IAC3B,MAAa,YACtB,IAAQ,EAAE,yBAAyB;GAErC,IAAM,IAAe,EAAS,YAAY;GAC1C,OACE,kBAAC,GAAD;IAEE,MAAK;IACL,SAAQ;IACR,WAAW;IACX,eAAe;KACb,OAAO,SAAS,OACd,GAAG,EAAgB,YAAY,GACjC;IACF;IACA,MAAK;IAEJ,UAAA;GACK,GAZD,CAYC;EAEZ,CAAC;CACE,CAAA;AAET"}
@@ -1,6 +1,6 @@
1
1
  /* empty css */
2
2
  //#region src/auth/login/loginPage.css.ts
3
- var e = "txvbqb5lr txvbqb6m5 txvbqb6s9", t = "txvbqb5lr txvbqb6m5 txvbqbl9n", n = "txvbqbe7 txvbqb6nj txvbqb1rt txvbqb1r2", r = "txvbqb2nn txvbqbe7 txvbqb5lr txvbqb6rp txvbqbawl txvbqb8qj", i = "txvbqbb5 txvbqb84l txvbqb1cl txvbqbn8 txvbqbg5", a = "txvbqb2nn txvbqb5lr txvbqb1cu txvbqb6rz txvbqb8ov txvbqbaw1", o = "w8yhmy0 txvbqb8n txvbqbk9 txvbqbmv txvbqbet txvbqbv txvbqb1d5 txvbqbf4t txvbqb3f txvbqb7n txvbqb78 txvbqb7y txvbqbod5 txvbqbpw9", s = "txvbqb12r txvbqb12b txvbqb13j txvbqb138 txvbqbirn txvbqbjhh", c = "txvbqb5lr txvbqb6m5 txvbqb6s9", l = "txvbqbl9n", u = "txvbqb1rt txvbqb6od txvbqb1d6 txvbqbet txvbqb1nz", d = "txvbqbawb", f = "w8yhmy1 txvbqbj4 txvbqblh txvbqbmx txvbqbet txvbqbb3 txvbqb7n txvbqb76 txvbqb7y";
3
+ var e = "txvbqb5m2 txvbqb6mq txvbqb6su", t = "txvbqb5m2 txvbqb6mq txvbqbla8", n = "txvbqbei txvbqb6o4 txvbqb1s4 txvbqb1rd", r = "txvbqb2ny txvbqbei txvbqb5m2 txvbqb6sa txvbqbax6 txvbqb8r4", i = "txvbqbbg txvbqb856 txvbqb1cw txvbqbnj txvbqbgg", a = "txvbqb2ny txvbqb5m2 txvbqb1d5 txvbqb6sk txvbqb8pg txvbqbawm", o = "w8yhmy0 txvbqb8y txvbqbkk txvbqbn6 txvbqbf4 txvbqbv txvbqb1dg txvbqbf5e txvbqb3p txvbqb7y txvbqb7j txvbqb89 txvbqbodq txvbqbpwu", s = "txvbqb132 txvbqb12m txvbqb13u txvbqb13j txvbqbis8 txvbqbji2", c = "txvbqb5m2 txvbqb6mq txvbqb6su", l = "txvbqbla8", u = "txvbqb1s4 txvbqb6oy txvbqb1dh txvbqbf4 txvbqb1oa", d = "txvbqbaww", f = "w8yhmy1 txvbqbjf txvbqbls txvbqbn8 txvbqbf4 txvbqbbe txvbqb7y txvbqb7h txvbqb89";
4
4
  //#endregion
5
5
  export { a as actionsRow, c as block, f as brandGhostButton, r as divider, i as dividerLine, d as footer, t as formSurface, l as fullWidth, n as helper, o as inlineLink, s as panel, u as panelTitle, e as stack };
6
6
 
@@ -3,7 +3,7 @@ import { AuthPanel as n } from "../login/AuthPanel.js";
3
3
  import { useBackofficeReactTranslation as r } from "../../i18n/useBackofficeReactTranslation.js";
4
4
  import { MfaChallengeForm as i } from "../login/MfaChallengeForm.js";
5
5
  import { useCallback as a, useMemo as o, useState as s } from "react";
6
- import { AuthLayout as c, Form as l, FormError as u, FormField as d } from "@plumile/ui";
6
+ import { AuthLayout as c, Form as l, FormError as u, PasswordField as d } from "@plumile/ui";
7
7
  import { jsx as f, jsxs as p } from "react/jsx-runtime";
8
8
  import { Button as m } from "@plumile/ui/button";
9
9
  //#region src/auth/pages/AcceptInvitationScreen.tsx
@@ -78,12 +78,11 @@ var h = ({ auth: h, onSuccessRedirect: g, onBackToLogin: _, token: v }) => {
78
78
  k != null && j == null ? /* @__PURE__ */ f(u, { children: k }) : null,
79
79
  /* @__PURE__ */ f(d, {
80
80
  label: y("auth.acceptInvitation.form.passwordLabel"),
81
- error: j === "password" ? k : null,
81
+ error: j === "password" ? k ?? void 0 : void 0,
82
82
  name: "password",
83
- type: "password",
84
83
  value: C,
85
- onChange: (e) => {
86
- w(e.target.value), A(null), M(null), x === "error" && S("idle");
84
+ onValueChange: (e) => {
85
+ w(e), A(null), M(null), x === "error" && S("idle");
87
86
  },
88
87
  placeholder: y("auth.acceptInvitation.form.passwordPlaceholder"),
89
88
  autoComplete: "new-password",
@@ -91,12 +90,11 @@ var h = ({ auth: h, onSuccessRedirect: g, onBackToLogin: _, token: v }) => {
91
90
  }),
92
91
  /* @__PURE__ */ f(d, {
93
92
  label: y("auth.acceptInvitation.form.confirmLabel"),
94
- error: j === "passwordConfirmation" ? k : null,
93
+ error: j === "passwordConfirmation" ? k ?? void 0 : void 0,
95
94
  name: "password-confirmation",
96
- type: "password",
97
95
  value: T,
98
- onChange: (e) => {
99
- E(e.target.value), A(null), M(null), x === "error" && S("idle");
96
+ onValueChange: (e) => {
97
+ E(e), A(null), M(null), x === "error" && S("idle");
100
98
  },
101
99
  placeholder: y("auth.acceptInvitation.form.confirmPlaceholder"),
102
100
  autoComplete: "new-password",
@@ -1 +1 @@
1
- {"version":3,"file":"AcceptInvitationScreen.js","names":[],"sources":["../../../../src/auth/pages/AcceptInvitationScreen.tsx"],"sourcesContent":["import {\n useCallback,\n useMemo,\n useState,\n type FormEvent,\n type JSX,\n} from 'react';\nimport { useBackofficeReactTranslation } from '../../i18n/useBackofficeReactTranslation.js';\n\nimport { Button } from '@plumile/ui/button';\nimport { FormError, FormField, Form, AuthLayout } from '@plumile/ui';\n\nimport type { UseAuthReturn } from '../../hooks/useAuth.js';\nimport { MfaChallengeForm } from '../login/MfaChallengeForm.js';\nimport { AuthPanel } from '../login/AuthPanel.js';\nimport * as styles from '../login/loginPage.css.js';\n\ntype AcceptanceState = 'pending' | 'mfa' | 'completed' | 'error' | 'idle';\ntype InvitationErrorField = 'password' | 'passwordConfirmation' | null;\n\ntype Props = {\n auth: UseAuthReturn;\n onSuccessRedirect: () => void;\n onBackToLogin: () => void;\n token?: string;\n};\n\nexport const AcceptInvitationScreen = ({\n auth,\n onSuccessRedirect,\n onBackToLogin,\n token,\n}: Props): JSX.Element => {\n const { t } = useBackofficeReactTranslation();\n const { acceptInvitation } = auth;\n const [status, setStatus] = useState<AcceptanceState>('idle');\n const [password, setPassword] = useState('');\n const [passwordConfirmation, setPasswordConfirmation] = useState('');\n const [isSubmitting, setIsSubmitting] = useState(false);\n const [errorMessage, setErrorMessage] = useState<string | null>(null);\n const [errorField, setErrorField] = useState<InvitationErrorField>(null);\n\n const resolvedToken = useMemo(() => {\n if (token != null) {\n return token;\n }\n if (typeof window === 'undefined') {\n return '';\n }\n const params = new URLSearchParams(window.location.search);\n return params.get('token') ?? '';\n }, [token]);\n\n const handleSubmit = useCallback(\n (event: FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n setErrorField(null);\n if (resolvedToken === '') {\n setErrorMessage(t('auth.acceptInvitation.errors.missingToken'));\n setStatus('error');\n return;\n }\n\n if (password === '') {\n setErrorMessage(\n t('auth.acceptInvitation.errors.passwordPolicyViolation'),\n );\n setErrorField('password');\n setStatus('error');\n return;\n }\n\n if (passwordConfirmation === '') {\n setErrorMessage(t('auth.acceptInvitation.errors.passwordMismatch'));\n setErrorField('passwordConfirmation');\n setStatus('error');\n return;\n }\n\n if (password !== passwordConfirmation) {\n setErrorMessage(t('auth.acceptInvitation.errors.passwordMismatch'));\n setErrorField('passwordConfirmation');\n setStatus('error');\n return;\n }\n\n setStatus('pending');\n setErrorMessage(null);\n setIsSubmitting(true);\n\n // eslint-disable-next-line no-void\n void acceptInvitation({\n token: resolvedToken,\n password,\n passwordConfirmation,\n })\n .then((result) => {\n if (result === 'mfa-required') {\n setStatus('mfa');\n return;\n }\n setStatus('completed');\n onSuccessRedirect();\n })\n .catch(() => {\n setStatus('error');\n setErrorMessage(t('auth.acceptInvitation.errors.default'));\n })\n .finally(() => {\n setIsSubmitting(false);\n });\n },\n [\n acceptInvitation,\n onSuccessRedirect,\n password,\n passwordConfirmation,\n resolvedToken,\n t,\n ],\n );\n\n const handleMfaSuccess = useCallback(() => {\n setStatus('completed');\n onSuccessRedirect();\n }, [onSuccessRedirect]);\n\n const handleRetry = useCallback(() => {\n setStatus('idle');\n setErrorMessage(null);\n setErrorField(null);\n setIsSubmitting(false);\n }, []);\n\n if (status === 'mfa') {\n return (\n <AuthLayout\n title={t('auth.acceptInvitation.mfaTitle')}\n subtitle={t('auth.acceptInvitation.mfaSubtitle')}\n >\n <MfaChallengeForm\n auth={auth}\n onSuccess={handleMfaSuccess}\n onBack={() => {\n auth.reset();\n handleRetry();\n }}\n />\n </AuthLayout>\n );\n }\n\n let content: JSX.Element;\n if (status === 'completed') {\n content = (\n <AuthPanel>\n <p className={styles.helper}>\n {t('auth.acceptInvitation.status.success')}\n </p>\n </AuthPanel>\n );\n } else {\n content = (\n <AuthPanel description={t('auth.acceptInvitation.subtitle')}>\n <Form\n className={styles.formSurface}\n onSubmit={handleSubmit}\n noValidate\n initialFocus=\"first-form-control\"\n >\n {errorMessage != null && errorField == null ? (\n <FormError>{errorMessage}</FormError>\n ) : null}\n <FormField\n label={t('auth.acceptInvitation.form.passwordLabel')}\n error={errorField === 'password' ? errorMessage : null}\n name=\"password\"\n type=\"password\"\n value={password}\n onChange={(event) => {\n setPassword(event.target.value);\n setErrorMessage(null);\n setErrorField(null);\n if (status === 'error') {\n setStatus('idle');\n }\n }}\n placeholder={t('auth.acceptInvitation.form.passwordPlaceholder')}\n autoComplete=\"new-password\"\n required\n />\n <FormField\n label={t('auth.acceptInvitation.form.confirmLabel')}\n error={errorField === 'passwordConfirmation' ? errorMessage : null}\n name=\"password-confirmation\"\n type=\"password\"\n value={passwordConfirmation}\n onChange={(event) => {\n setPasswordConfirmation(event.target.value);\n setErrorMessage(null);\n setErrorField(null);\n if (status === 'error') {\n setStatus('idle');\n }\n }}\n placeholder={t('auth.acceptInvitation.form.confirmPlaceholder')}\n autoComplete=\"new-password\"\n required\n />\n <Button type=\"submit\" loading={isSubmitting}>\n {status === 'pending'\n ? t('auth.acceptInvitation.status.workingButton')\n : t('auth.acceptInvitation.form.submit')}\n </Button>\n <Button\n type=\"button\"\n variant=\"soft\"\n onClick={onBackToLogin}\n tone=\"neutral\"\n >\n {t('auth.acceptInvitation.actions.backToLogin')}\n </Button>\n </Form>\n </AuthPanel>\n );\n }\n\n return (\n <AuthLayout title={t('auth.acceptInvitation.title')}>{content}</AuthLayout>\n );\n};\n"],"mappings":";;;;;;;;;AA2BA,IAAa,KAA0B,EACrC,SACA,sBACA,kBACA,eACwB;CACxB,IAAM,EAAE,SAAM,EAA8B,GACtC,EAAE,wBAAqB,GACvB,CAAC,GAAQ,KAAa,EAA0B,MAAM,GACtD,CAAC,GAAU,KAAe,EAAS,EAAE,GACrC,CAAC,GAAsB,KAA2B,EAAS,EAAE,GAC7D,CAAC,GAAc,KAAmB,EAAS,EAAK,GAChD,CAAC,GAAc,KAAmB,EAAwB,IAAI,GAC9D,CAAC,GAAY,KAAiB,EAA+B,IAAI,GAEjE,IAAgB,QAChB,MAGA,OAAO,SAAW,MACb,KAGF,IADY,gBAAgB,OAAO,SAAS,MAC5C,CAAA,CAAO,IAAI,OAAO,KAAK,KAC7B,CAAC,CAAK,CAAC,GAEJ,IAAe,GAClB,MAAsC;EAGrC,IAFA,EAAM,eAAe,GACrB,EAAc,IAAI,GACd,MAAkB,IAAI;GAExB,AADA,EAAgB,EAAE,2CAA2C,CAAC,GAC9D,EAAU,OAAO;GACjB;EACF;EAEA,IAAI,MAAa,IAAI;GAKnB,AAJA,EACE,EAAE,sDAAsD,CAC1D,GACA,EAAc,UAAU,GACxB,EAAU,OAAO;GACjB;EACF;EAEA,IAAI,MAAyB,IAAI;GAG/B,AAFA,EAAgB,EAAE,+CAA+C,CAAC,GAClE,EAAc,sBAAsB,GACpC,EAAU,OAAO;GACjB;EACF;EAEA,IAAI,MAAa,GAAsB;GAGrC,AAFA,EAAgB,EAAE,+CAA+C,CAAC,GAClE,EAAc,sBAAsB,GACpC,EAAU,OAAO;GACjB;EACF;EAOA,AALA,EAAU,SAAS,GACnB,EAAgB,IAAI,GACpB,EAAgB,EAAI,GAGpB,EAAsB;GACpB,OAAO;GACP;GACA;EACF,CAAC,CAAC,CACC,MAAM,MAAW;GAChB,IAAI,MAAW,gBAAgB;IAC7B,EAAU,KAAK;IACf;GACF;GAEA,AADA,EAAU,WAAW,GACrB,EAAkB;EACpB,CAAC,CAAC,CACD,YAAY;GAEX,AADA,EAAU,OAAO,GACjB,EAAgB,EAAE,sCAAsC,CAAC;EAC3D,CAAC,CAAC,CACD,cAAc;GACb,EAAgB,EAAK;EACvB,CAAC;CACL,GACA;EACE;EACA;EACA;EACA;EACA;EACA;CACF,CACF,GAEM,IAAmB,QAAkB;EAEzC,AADA,EAAU,WAAW,GACrB,EAAkB;CACpB,GAAG,CAAC,CAAiB,CAAC,GAEhB,IAAc,QAAkB;EAIpC,AAHA,EAAU,MAAM,GAChB,EAAgB,IAAI,GACpB,EAAc,IAAI,GAClB,EAAgB,EAAK;CACvB,GAAG,CAAC,CAAC;CAEL,IAAI,MAAW,OACb,OACE,kBAAC,GAAD;EACE,OAAO,EAAE,gCAAgC;EACzC,UAAU,EAAE,mCAAmC;EAE/C,UAAA,kBAAC,GAAD;GACQ;GACN,WAAW;GACX,cAAc;IAEZ,AADA,EAAK,MAAM,GACX,EAAY;GACd;EACD,CAAA;CACS,CAAA;CAIhB,IAAI;CA2EJ,OA1EA,AASE,IATE,MAAW,cAEX,kBAAC,GAAD,EAAA,UACE,kBAAC,KAAD;EAAG,WAAW;EACX,UAAA,EAAE,sCAAsC;CACxC,CAAA,EACM,CAAA,IAIX,kBAAC,GAAD;EAAW,aAAa,EAAE,gCAAgC;EACxD,UAAA,kBAAC,GAAD;GACE,WAAW;GACX,UAAU;GACV,YAAA;GACA,cAAa;GAJf,UAAA;IAMG,KAAgB,QAAQ,KAAc,OACrC,kBAAC,GAAD,EAAA,UAAY,EAAwB,CAAA,IAClC;IACJ,kBAAC,GAAD;KACE,OAAO,EAAE,0CAA0C;KACnD,OAAO,MAAe,aAAa,IAAe;KAClD,MAAK;KACL,MAAK;KACL,OAAO;KACP,WAAW,MAAU;MAInB,AAHA,EAAY,EAAM,OAAO,KAAK,GAC9B,EAAgB,IAAI,GACpB,EAAc,IAAI,GACd,MAAW,WACb,EAAU,MAAM;KAEpB;KACA,aAAa,EAAE,gDAAgD;KAC/D,cAAa;KACb,UAAA;IACD,CAAA;IACD,kBAAC,GAAD;KACE,OAAO,EAAE,yCAAyC;KAClD,OAAO,MAAe,yBAAyB,IAAe;KAC9D,MAAK;KACL,MAAK;KACL,OAAO;KACP,WAAW,MAAU;MAInB,AAHA,EAAwB,EAAM,OAAO,KAAK,GAC1C,EAAgB,IAAI,GACpB,EAAc,IAAI,GACd,MAAW,WACb,EAAU,MAAM;KAEpB;KACA,aAAa,EAAE,+CAA+C;KAC9D,cAAa;KACb,UAAA;IACD,CAAA;IACD,kBAAC,GAAD;KAAQ,MAAK;KAAS,SAAS;KAC5B,UACG,EADH,MAAW,YACN,+CACA,mCAAmC;IACnC,CAAA;IACR,kBAAC,GAAD;KACE,MAAK;KACL,SAAQ;KACR,SAAS;KACT,MAAK;KAEJ,UAAA,EAAE,2CAA2C;IACxC,CAAA;GACJ;;CACG,CAAA,GAKb,kBAAC,GAAD;EAAY,OAAO,EAAE,6BAA6B;EAAI,UAAA;CAAoB,CAAA;AAE9E"}
1
+ {"version":3,"file":"AcceptInvitationScreen.js","names":[],"sources":["../../../../src/auth/pages/AcceptInvitationScreen.tsx"],"sourcesContent":["import {\n useCallback,\n useMemo,\n useState,\n type FormEvent,\n type JSX,\n} from 'react';\nimport { useBackofficeReactTranslation } from '../../i18n/useBackofficeReactTranslation.js';\n\nimport { Button } from '@plumile/ui/button';\nimport { FormError, PasswordField, Form, AuthLayout } from '@plumile/ui';\n\nimport type { UseAuthReturn } from '../../hooks/useAuth.js';\nimport { MfaChallengeForm } from '../login/MfaChallengeForm.js';\nimport { AuthPanel } from '../login/AuthPanel.js';\nimport * as styles from '../login/loginPage.css.js';\n\ntype AcceptanceState = 'pending' | 'mfa' | 'completed' | 'error' | 'idle';\ntype InvitationErrorField = 'password' | 'passwordConfirmation' | null;\n\ntype Props = {\n auth: UseAuthReturn;\n onSuccessRedirect: () => void;\n onBackToLogin: () => void;\n token?: string;\n};\n\nexport const AcceptInvitationScreen = ({\n auth,\n onSuccessRedirect,\n onBackToLogin,\n token,\n}: Props): JSX.Element => {\n const { t } = useBackofficeReactTranslation();\n const { acceptInvitation } = auth;\n const [status, setStatus] = useState<AcceptanceState>('idle');\n const [password, setPassword] = useState('');\n const [passwordConfirmation, setPasswordConfirmation] = useState('');\n const [isSubmitting, setIsSubmitting] = useState(false);\n const [errorMessage, setErrorMessage] = useState<string | null>(null);\n const [errorField, setErrorField] = useState<InvitationErrorField>(null);\n\n const resolvedToken = useMemo(() => {\n if (token != null) {\n return token;\n }\n if (typeof window === 'undefined') {\n return '';\n }\n const params = new URLSearchParams(window.location.search);\n return params.get('token') ?? '';\n }, [token]);\n\n const handleSubmit = useCallback(\n (event: FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n setErrorField(null);\n if (resolvedToken === '') {\n setErrorMessage(t('auth.acceptInvitation.errors.missingToken'));\n setStatus('error');\n return;\n }\n\n if (password === '') {\n setErrorMessage(\n t('auth.acceptInvitation.errors.passwordPolicyViolation'),\n );\n setErrorField('password');\n setStatus('error');\n return;\n }\n\n if (passwordConfirmation === '') {\n setErrorMessage(t('auth.acceptInvitation.errors.passwordMismatch'));\n setErrorField('passwordConfirmation');\n setStatus('error');\n return;\n }\n\n if (password !== passwordConfirmation) {\n setErrorMessage(t('auth.acceptInvitation.errors.passwordMismatch'));\n setErrorField('passwordConfirmation');\n setStatus('error');\n return;\n }\n\n setStatus('pending');\n setErrorMessage(null);\n setIsSubmitting(true);\n\n // eslint-disable-next-line no-void\n void acceptInvitation({\n token: resolvedToken,\n password,\n passwordConfirmation,\n })\n .then((result) => {\n if (result === 'mfa-required') {\n setStatus('mfa');\n return;\n }\n setStatus('completed');\n onSuccessRedirect();\n })\n .catch(() => {\n setStatus('error');\n setErrorMessage(t('auth.acceptInvitation.errors.default'));\n })\n .finally(() => {\n setIsSubmitting(false);\n });\n },\n [\n acceptInvitation,\n onSuccessRedirect,\n password,\n passwordConfirmation,\n resolvedToken,\n t,\n ],\n );\n\n const handleMfaSuccess = useCallback(() => {\n setStatus('completed');\n onSuccessRedirect();\n }, [onSuccessRedirect]);\n\n const handleRetry = useCallback(() => {\n setStatus('idle');\n setErrorMessage(null);\n setErrorField(null);\n setIsSubmitting(false);\n }, []);\n\n if (status === 'mfa') {\n return (\n <AuthLayout\n title={t('auth.acceptInvitation.mfaTitle')}\n subtitle={t('auth.acceptInvitation.mfaSubtitle')}\n >\n <MfaChallengeForm\n auth={auth}\n onSuccess={handleMfaSuccess}\n onBack={() => {\n auth.reset();\n handleRetry();\n }}\n />\n </AuthLayout>\n );\n }\n\n let content: JSX.Element;\n if (status === 'completed') {\n content = (\n <AuthPanel>\n <p className={styles.helper}>\n {t('auth.acceptInvitation.status.success')}\n </p>\n </AuthPanel>\n );\n } else {\n content = (\n <AuthPanel description={t('auth.acceptInvitation.subtitle')}>\n <Form\n className={styles.formSurface}\n onSubmit={handleSubmit}\n noValidate\n initialFocus=\"first-form-control\"\n >\n {errorMessage != null && errorField == null ? (\n <FormError>{errorMessage}</FormError>\n ) : null}\n <PasswordField\n label={t('auth.acceptInvitation.form.passwordLabel')}\n error={\n errorField === 'password'\n ? (errorMessage ?? undefined)\n : undefined\n }\n name=\"password\"\n value={password}\n onValueChange={(value) => {\n setPassword(value);\n setErrorMessage(null);\n setErrorField(null);\n if (status === 'error') {\n setStatus('idle');\n }\n }}\n placeholder={t('auth.acceptInvitation.form.passwordPlaceholder')}\n autoComplete=\"new-password\"\n required\n />\n <PasswordField\n label={t('auth.acceptInvitation.form.confirmLabel')}\n error={\n errorField === 'passwordConfirmation'\n ? (errorMessage ?? undefined)\n : undefined\n }\n name=\"password-confirmation\"\n value={passwordConfirmation}\n onValueChange={(value) => {\n setPasswordConfirmation(value);\n setErrorMessage(null);\n setErrorField(null);\n if (status === 'error') {\n setStatus('idle');\n }\n }}\n placeholder={t('auth.acceptInvitation.form.confirmPlaceholder')}\n autoComplete=\"new-password\"\n required\n />\n <Button type=\"submit\" loading={isSubmitting}>\n {status === 'pending'\n ? t('auth.acceptInvitation.status.workingButton')\n : t('auth.acceptInvitation.form.submit')}\n </Button>\n <Button\n type=\"button\"\n variant=\"soft\"\n onClick={onBackToLogin}\n tone=\"neutral\"\n >\n {t('auth.acceptInvitation.actions.backToLogin')}\n </Button>\n </Form>\n </AuthPanel>\n );\n }\n\n return (\n <AuthLayout title={t('auth.acceptInvitation.title')}>{content}</AuthLayout>\n );\n};\n"],"mappings":"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"}
@@ -2,7 +2,7 @@ import { brandGhostButton as e, formSurface as t, helper as n } from "../login/l
2
2
  import { AuthPanel as r } from "../login/AuthPanel.js";
3
3
  import { useBackofficeReactTranslation as i } from "../../i18n/useBackofficeReactTranslation.js";
4
4
  import { useCallback as a, useMemo as o, useState as s } from "react";
5
- import { AuthLayout as c, Form as l, FormError as u, FormField as d } from "@plumile/ui";
5
+ import { AuthLayout as c, Form as l, FormError as u, PasswordField as d } from "@plumile/ui";
6
6
  import { jsx as f, jsxs as p } from "react/jsx-runtime";
7
7
  import { Button as m } from "@plumile/ui/button";
8
8
  //#region src/auth/pages/PasswordResetCompleteScreen.tsx
@@ -66,12 +66,11 @@ var h = 8, g = ({ onBackToLogin: g, onCompletePasswordReset: _, token: v }) => {
66
66
  E != null && O == null ? /* @__PURE__ */ f(u, { children: E }) : null,
67
67
  /* @__PURE__ */ f(d, {
68
68
  label: y("auth.passwordResetComplete.form.passwordLabel"),
69
- error: O === "password" ? E : null,
69
+ error: O === "password" ? E ?? void 0 : void 0,
70
70
  name: "new-password",
71
- type: "password",
72
71
  value: b,
73
- onChange: (e) => {
74
- x(e.target.value), D(null), k(null);
72
+ onValueChange: (e) => {
73
+ x(e), D(null), k(null);
75
74
  },
76
75
  placeholder: y("auth.passwordResetComplete.form.passwordPlaceholder"),
77
76
  autoComplete: "new-password",
@@ -79,12 +78,11 @@ var h = 8, g = ({ onBackToLogin: g, onCompletePasswordReset: _, token: v }) => {
79
78
  }),
80
79
  /* @__PURE__ */ f(d, {
81
80
  label: y("auth.passwordResetComplete.form.confirmLabel"),
82
- error: O === "passwordConfirm" ? E : null,
81
+ error: O === "passwordConfirm" ? E ?? void 0 : void 0,
83
82
  name: "confirm-password",
84
- type: "password",
85
83
  value: S,
86
- onChange: (e) => {
87
- C(e.target.value), D(null), k(null);
84
+ onValueChange: (e) => {
85
+ C(e), D(null), k(null);
88
86
  },
89
87
  placeholder: y("auth.passwordResetComplete.form.confirmPlaceholder"),
90
88
  autoComplete: "new-password",
@@ -1 +1 @@
1
- {"version":3,"file":"PasswordResetCompleteScreen.js","names":[],"sources":["../../../../src/auth/pages/PasswordResetCompleteScreen.tsx"],"sourcesContent":["import {\n useCallback,\n useMemo,\n useState,\n type FormEvent,\n type JSX,\n} from 'react';\nimport { useBackofficeReactTranslation } from '../../i18n/useBackofficeReactTranslation.js';\n\nimport { Button } from '@plumile/ui/button';\nimport { FormError, FormField, Form, AuthLayout } from '@plumile/ui';\n\nimport * as styles from '../login/loginPage.css.js';\nimport { AuthPanel } from '../login/AuthPanel.js';\n\nconst MIN_PASSWORD_LENGTH = 8;\ntype PasswordResetErrorField = 'password' | 'passwordConfirm' | null;\n\ntype Props = {\n onBackToLogin: () => void;\n onCompletePasswordReset: (input: {\n newPassword: string;\n token: string;\n }) => Promise<boolean>;\n token?: string;\n};\n\nexport const PasswordResetCompleteScreen = ({\n onBackToLogin,\n onCompletePasswordReset,\n token,\n}: Props): JSX.Element => {\n const { t } = useBackofficeReactTranslation();\n const [password, setPassword] = useState('');\n const [passwordConfirm, setPasswordConfirm] = useState('');\n const [status, setStatus] = useState<'idle' | 'completed'>('idle');\n const [error, setError] = useState<string | null>(null);\n const [errorField, setErrorField] = useState<PasswordResetErrorField>(null);\n const [isSubmitting, setIsSubmitting] = useState(false);\n\n const resolvedToken = useMemo(() => {\n if (token != null) {\n return token;\n }\n if (typeof window === 'undefined') {\n return '';\n }\n const params = new URLSearchParams(window.location.search);\n return params.get('token') ?? '';\n }, [token]);\n\n const handleSubmit = useCallback(\n (event: FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n setError(null);\n setErrorField(null);\n\n if (resolvedToken === '') {\n setError(t('auth.passwordResetComplete.errors.missingToken'));\n return;\n }\n\n if (password.length < MIN_PASSWORD_LENGTH) {\n setError(\n t('auth.passwordResetComplete.errors.minLength', {\n minLength: MIN_PASSWORD_LENGTH,\n }),\n );\n setErrorField('password');\n return;\n }\n\n if (password !== passwordConfirm) {\n setError(t('auth.passwordResetComplete.errors.mismatch'));\n setErrorField('passwordConfirm');\n return;\n }\n\n setIsSubmitting(true);\n\n const completePasswordReset = async (): Promise<void> => {\n try {\n const success = await onCompletePasswordReset({\n newPassword: password,\n token: resolvedToken,\n });\n if (success) {\n setStatus('completed');\n } else {\n setError(t('auth.passwordResetComplete.errors.invalid'));\n }\n } catch (mutationError) {\n setError(\n mutationError instanceof Error\n ? mutationError.message\n : t('auth.passwordResetComplete.errors.invalid'),\n );\n } finally {\n setIsSubmitting(false);\n }\n };\n\n completePasswordReset().catch(() => {\n return undefined;\n });\n },\n [onCompletePasswordReset, password, passwordConfirm, resolvedToken, t],\n );\n\n let content: JSX.Element;\n if (status === 'completed') {\n content = (\n <AuthPanel\n title={t('auth.passwordResetComplete.success.title')}\n description={t('auth.passwordResetComplete.success.description')}\n footer={\n <Button\n type=\"button\"\n variant=\"soft\"\n className={styles.brandGhostButton}\n onClick={onBackToLogin}\n tone=\"neutral\"\n >\n {t('auth.passwordResetComplete.success.action')}\n </Button>\n }\n >\n <p className={styles.helper}>\n {t('auth.passwordResetComplete.success.helper')}\n </p>\n </AuthPanel>\n );\n } else {\n content = (\n <AuthPanel\n title={t('auth.passwordResetComplete.form.title')}\n description={t('auth.passwordResetComplete.form.description')}\n >\n <Form\n className={styles.formSurface}\n onSubmit={handleSubmit}\n noValidate\n initialFocus=\"first-form-control\"\n >\n {error != null && errorField == null ? (\n <FormError>{error}</FormError>\n ) : null}\n <FormField\n label={t('auth.passwordResetComplete.form.passwordLabel')}\n error={errorField === 'password' ? error : null}\n name=\"new-password\"\n type=\"password\"\n value={password}\n onChange={(event) => {\n setPassword(event.target.value);\n setError(null);\n setErrorField(null);\n }}\n placeholder={t(\n 'auth.passwordResetComplete.form.passwordPlaceholder',\n )}\n autoComplete=\"new-password\"\n required\n />\n <FormField\n label={t('auth.passwordResetComplete.form.confirmLabel')}\n error={errorField === 'passwordConfirm' ? error : null}\n name=\"confirm-password\"\n type=\"password\"\n value={passwordConfirm}\n onChange={(event) => {\n setPasswordConfirm(event.target.value);\n setError(null);\n setErrorField(null);\n }}\n placeholder={t(\n 'auth.passwordResetComplete.form.confirmPlaceholder',\n )}\n autoComplete=\"new-password\"\n required\n />\n <Button type=\"submit\" loading={isSubmitting}>\n {t('auth.passwordResetComplete.form.submit')}\n </Button>\n </Form>\n </AuthPanel>\n );\n }\n\n return (\n <AuthLayout\n title={t('auth.passwordResetComplete.title')}\n subtitle={t('auth.passwordResetComplete.subtitle')}\n >\n {content}\n </AuthLayout>\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"PasswordResetCompleteScreen.js","names":[],"sources":["../../../../src/auth/pages/PasswordResetCompleteScreen.tsx"],"sourcesContent":["import {\n useCallback,\n useMemo,\n useState,\n type FormEvent,\n type JSX,\n} from 'react';\nimport { useBackofficeReactTranslation } from '../../i18n/useBackofficeReactTranslation.js';\n\nimport { Button } from '@plumile/ui/button';\nimport { FormError, PasswordField, Form, AuthLayout } from '@plumile/ui';\n\nimport * as styles from '../login/loginPage.css.js';\nimport { AuthPanel } from '../login/AuthPanel.js';\n\nconst MIN_PASSWORD_LENGTH = 8;\ntype PasswordResetErrorField = 'password' | 'passwordConfirm' | null;\n\ntype Props = {\n onBackToLogin: () => void;\n onCompletePasswordReset: (input: {\n newPassword: string;\n token: string;\n }) => Promise<boolean>;\n token?: string;\n};\n\nexport const PasswordResetCompleteScreen = ({\n onBackToLogin,\n onCompletePasswordReset,\n token,\n}: Props): JSX.Element => {\n const { t } = useBackofficeReactTranslation();\n const [password, setPassword] = useState('');\n const [passwordConfirm, setPasswordConfirm] = useState('');\n const [status, setStatus] = useState<'idle' | 'completed'>('idle');\n const [error, setError] = useState<string | null>(null);\n const [errorField, setErrorField] = useState<PasswordResetErrorField>(null);\n const [isSubmitting, setIsSubmitting] = useState(false);\n\n const resolvedToken = useMemo(() => {\n if (token != null) {\n return token;\n }\n if (typeof window === 'undefined') {\n return '';\n }\n const params = new URLSearchParams(window.location.search);\n return params.get('token') ?? '';\n }, [token]);\n\n const handleSubmit = useCallback(\n (event: FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n setError(null);\n setErrorField(null);\n\n if (resolvedToken === '') {\n setError(t('auth.passwordResetComplete.errors.missingToken'));\n return;\n }\n\n if (password.length < MIN_PASSWORD_LENGTH) {\n setError(\n t('auth.passwordResetComplete.errors.minLength', {\n minLength: MIN_PASSWORD_LENGTH,\n }),\n );\n setErrorField('password');\n return;\n }\n\n if (password !== passwordConfirm) {\n setError(t('auth.passwordResetComplete.errors.mismatch'));\n setErrorField('passwordConfirm');\n return;\n }\n\n setIsSubmitting(true);\n\n const completePasswordReset = async (): Promise<void> => {\n try {\n const success = await onCompletePasswordReset({\n newPassword: password,\n token: resolvedToken,\n });\n if (success) {\n setStatus('completed');\n } else {\n setError(t('auth.passwordResetComplete.errors.invalid'));\n }\n } catch (mutationError) {\n setError(\n mutationError instanceof Error\n ? mutationError.message\n : t('auth.passwordResetComplete.errors.invalid'),\n );\n } finally {\n setIsSubmitting(false);\n }\n };\n\n completePasswordReset().catch(() => {\n return undefined;\n });\n },\n [onCompletePasswordReset, password, passwordConfirm, resolvedToken, t],\n );\n\n let content: JSX.Element;\n if (status === 'completed') {\n content = (\n <AuthPanel\n title={t('auth.passwordResetComplete.success.title')}\n description={t('auth.passwordResetComplete.success.description')}\n footer={\n <Button\n type=\"button\"\n variant=\"soft\"\n className={styles.brandGhostButton}\n onClick={onBackToLogin}\n tone=\"neutral\"\n >\n {t('auth.passwordResetComplete.success.action')}\n </Button>\n }\n >\n <p className={styles.helper}>\n {t('auth.passwordResetComplete.success.helper')}\n </p>\n </AuthPanel>\n );\n } else {\n content = (\n <AuthPanel\n title={t('auth.passwordResetComplete.form.title')}\n description={t('auth.passwordResetComplete.form.description')}\n >\n <Form\n className={styles.formSurface}\n onSubmit={handleSubmit}\n noValidate\n initialFocus=\"first-form-control\"\n >\n {error != null && errorField == null ? (\n <FormError>{error}</FormError>\n ) : null}\n <PasswordField\n label={t('auth.passwordResetComplete.form.passwordLabel')}\n error={errorField === 'password' ? (error ?? undefined) : undefined}\n name=\"new-password\"\n value={password}\n onValueChange={(value) => {\n setPassword(value);\n setError(null);\n setErrorField(null);\n }}\n placeholder={t(\n 'auth.passwordResetComplete.form.passwordPlaceholder',\n )}\n autoComplete=\"new-password\"\n required\n />\n <PasswordField\n label={t('auth.passwordResetComplete.form.confirmLabel')}\n error={\n errorField === 'passwordConfirm'\n ? (error ?? undefined)\n : undefined\n }\n name=\"confirm-password\"\n value={passwordConfirm}\n onValueChange={(value) => {\n setPasswordConfirm(value);\n setError(null);\n setErrorField(null);\n }}\n placeholder={t(\n 'auth.passwordResetComplete.form.confirmPlaceholder',\n )}\n autoComplete=\"new-password\"\n required\n />\n <Button type=\"submit\" loading={isSubmitting}>\n {t('auth.passwordResetComplete.form.submit')}\n </Button>\n </Form>\n </AuthPanel>\n );\n }\n\n return (\n <AuthLayout\n title={t('auth.passwordResetComplete.title')}\n subtitle={t('auth.passwordResetComplete.subtitle')}\n >\n {content}\n </AuthLayout>\n );\n};\n"],"mappings":"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"}
@@ -10,7 +10,7 @@ var m = ({ onStartPasswordReset: m }) => {
10
10
  let { i18n: h, t: g } = r(), [_, v] = o(""), [y, b] = o("idle"), [x, S] = o(null), [C, w] = o(!1), [T, E] = o(!1), D = a(() => {
11
11
  let e = h.language.trim();
12
12
  if (e !== "") return e;
13
- if (!(typeof navigator > "u")) return navigator.language;
13
+ if (typeof navigator < "u") return navigator.language;
14
14
  }, [h.language]), O = i((e) => {
15
15
  if (e.preventDefault(), S(null), w(!1), _.trim() === "") {
16
16
  S(g("auth.passwordResetRequest.errors.emailRequired")), w(!0);
@@ -1 +1 @@
1
- {"version":3,"file":"PasswordResetRequestScreen.js","names":[],"sources":["../../../../src/auth/pages/PasswordResetRequestScreen.tsx"],"sourcesContent":["import {\n useCallback,\n useMemo,\n useState,\n type FormEvent,\n type JSX,\n} from 'react';\nimport { useBackofficeReactTranslation } from '../../i18n/useBackofficeReactTranslation.js';\n\nimport { Button } from '@plumile/ui/button';\nimport { FormError, FormField, Form, AuthLayout } from '@plumile/ui';\n\nimport * as styles from '../login/loginPage.css.js';\nimport { AuthPanel } from '../login/AuthPanel.js';\n\ntype Props = {\n onStartPasswordReset: (input: {\n email: string;\n locale?: string;\n }) => Promise<boolean>;\n};\n\nexport const PasswordResetRequestScreen = ({\n onStartPasswordReset,\n}: Props): JSX.Element => {\n const { i18n, t } = useBackofficeReactTranslation();\n const [email, setEmail] = useState('');\n const [status, setStatus] = useState<'idle' | 'sent'>('idle');\n const [error, setError] = useState<string | null>(null);\n const [hasEmailError, setHasEmailError] = useState(false);\n const [isSubmitting, setIsSubmitting] = useState(false);\n\n const locale = useMemo(() => {\n const language = i18n.language.trim();\n if (language !== '') {\n return language;\n }\n if (typeof navigator === 'undefined') {\n return undefined;\n }\n return navigator.language;\n }, [i18n.language]);\n\n const handleSubmit = useCallback(\n (event: FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n setError(null);\n setHasEmailError(false);\n\n if (email.trim() === '') {\n setError(t('auth.passwordResetRequest.errors.emailRequired'));\n setHasEmailError(true);\n return;\n }\n\n const emailInput = event.currentTarget.elements.namedItem('email');\n if (\n emailInput instanceof HTMLInputElement &&\n !emailInput.validity.valid\n ) {\n setError(t('auth.passwordResetRequest.errors.invalidEmail'));\n setHasEmailError(true);\n return;\n }\n\n setIsSubmitting(true);\n onStartPasswordReset({\n email: email.trim(),\n locale,\n })\n .then((success) => {\n if (success) {\n setStatus('sent');\n } else {\n setError(t('auth.passwordResetRequest.errors.startFailed'));\n }\n })\n .catch((mutationError) => {\n setError(\n mutationError instanceof Error\n ? mutationError.message\n : t('auth.passwordResetRequest.errors.startFailed'),\n );\n })\n .finally(() => {\n setIsSubmitting(false);\n });\n },\n [email, locale, onStartPasswordReset, t],\n );\n\n let content: JSX.Element;\n if (status === 'sent') {\n content = (\n <AuthPanel\n title={t('auth.passwordResetRequest.sent.title')}\n description={t('auth.passwordResetRequest.sent.description', { email })}\n footer={\n <Button\n type=\"button\"\n variant=\"soft\"\n onClick={() => {\n setStatus('idle');\n }}\n tone=\"neutral\"\n >\n {t('auth.passwordResetRequest.sent.action')}\n </Button>\n }\n >\n <p className={styles.helper}>\n {t('auth.passwordResetRequest.sent.helper')}\n </p>\n </AuthPanel>\n );\n } else {\n content = (\n <AuthPanel description={t('auth.passwordResetRequest.form.description')}>\n <Form\n className={styles.formSurface}\n onSubmit={handleSubmit}\n noValidate\n initialFocus=\"first-form-control\"\n >\n {error != null && !hasEmailError ? (\n <FormError>{error}</FormError>\n ) : null}\n <FormField\n label={t('auth.passwordResetRequest.form.emailLabel')}\n error={hasEmailError ? error : null}\n name=\"email\"\n type=\"email\"\n value={email}\n onChange={(event) => {\n setEmail(event.target.value);\n setError(null);\n setHasEmailError(false);\n }}\n placeholder={t('auth.passwordResetRequest.form.emailPlaceholder')}\n autoComplete=\"email\"\n required\n />\n <Button type=\"submit\" loading={isSubmitting}>\n {t('auth.passwordResetRequest.form.submit')}\n </Button>\n </Form>\n </AuthPanel>\n );\n }\n\n return (\n <AuthLayout title={t('auth.passwordResetRequest.title')}>\n {content}\n </AuthLayout>\n );\n};\n"],"mappings":";;;;;;;;AAsBA,IAAa,KAA8B,EACzC,8BACwB;CACxB,IAAM,EAAE,SAAM,SAAM,EAA8B,GAC5C,CAAC,GAAO,KAAY,EAAS,EAAE,GAC/B,CAAC,GAAQ,KAAa,EAA0B,MAAM,GACtD,CAAC,GAAO,KAAY,EAAwB,IAAI,GAChD,CAAC,GAAe,KAAoB,EAAS,EAAK,GAClD,CAAC,GAAc,KAAmB,EAAS,EAAK,GAEhD,IAAS,QAAc;EAC3B,IAAM,IAAW,EAAK,SAAS,KAAK;EACpC,IAAI,MAAa,IACf,OAAO;EAEL,aAAO,YAAc,MAGzB,OAAO,UAAU;CACnB,GAAG,CAAC,EAAK,QAAQ,CAAC,GAEZ,IAAe,GAClB,MAAsC;EAKrC,IAJA,EAAM,eAAe,GACrB,EAAS,IAAI,GACb,EAAiB,EAAK,GAElB,EAAM,KAAK,MAAM,IAAI;GAEvB,AADA,EAAS,EAAE,gDAAgD,CAAC,GAC5D,EAAiB,EAAI;GACrB;EACF;EAEA,IAAM,IAAa,EAAM,cAAc,SAAS,UAAU,OAAO;EACjE,IACE,aAAsB,oBACtB,CAAC,EAAW,SAAS,OACrB;GAEA,AADA,EAAS,EAAE,+CAA+C,CAAC,GAC3D,EAAiB,EAAI;GACrB;EACF;EAGA,AADA,EAAgB,EAAI,GACpB,EAAqB;GACnB,OAAO,EAAM,KAAK;GAClB;EACF,CAAC,CAAC,CACC,MAAM,MAAY;GACjB,AAAI,IACF,EAAU,MAAM,IAEhB,EAAS,EAAE,8CAA8C,CAAC;EAE9D,CAAC,CAAC,CACD,OAAO,MAAkB;GACxB,EACE,aAAyB,QACrB,EAAc,UACd,EAAE,8CAA8C,CACtD;EACF,CAAC,CAAC,CACD,cAAc;GACb,EAAgB,EAAK;EACvB,CAAC;CACL,GACA;EAAC;EAAO;EAAQ;EAAsB;CAAC,CACzC,GAEI;CA2DJ,OA1DA,AAwBE,IAxBE,MAAW,SAEX,kBAAC,GAAD;EACE,OAAO,EAAE,sCAAsC;EAC/C,aAAa,EAAE,8CAA8C,EAAE,SAAM,CAAC;EACtE,QACE,kBAAC,GAAD;GACE,MAAK;GACL,SAAQ;GACR,eAAe;IACb,EAAU,MAAM;GAClB;GACA,MAAK;GAEJ,UAAA,EAAE,uCAAuC;EACpC,CAAA;EAGV,UAAA,kBAAC,KAAD;GAAG,WAAW;GACX,UAAA,EAAE,uCAAuC;EACzC,CAAA;CACM,CAAA,IAIX,kBAAC,GAAD;EAAW,aAAa,EAAE,4CAA4C;EACpE,UAAA,kBAAC,GAAD;GACE,WAAW;GACX,UAAU;GACV,YAAA;GACA,cAAa;GAJf,UAAA;IAMG,KAAS,QAAQ,CAAC,IACjB,kBAAC,GAAD,EAAA,UAAY,EAAiB,CAAA,IAC3B;IACJ,kBAAC,GAAD;KACE,OAAO,EAAE,2CAA2C;KACpD,OAAO,IAAgB,IAAQ;KAC/B,MAAK;KACL,MAAK;KACL,OAAO;KACP,WAAW,MAAU;MAGnB,AAFA,EAAS,EAAM,OAAO,KAAK,GAC3B,EAAS,IAAI,GACb,EAAiB,EAAK;KACxB;KACA,aAAa,EAAE,iDAAiD;KAChE,cAAa;KACb,UAAA;IACD,CAAA;IACD,kBAAC,GAAD;KAAQ,MAAK;KAAS,SAAS;KAC5B,UAAA,EAAE,uCAAuC;IACpC,CAAA;GACJ;;CACG,CAAA,GAKb,kBAAC,GAAD;EAAY,OAAO,EAAE,iCAAiC;EACnD,UAAA;CACS,CAAA;AAEhB"}
1
+ {"version":3,"file":"PasswordResetRequestScreen.js","names":[],"sources":["../../../../src/auth/pages/PasswordResetRequestScreen.tsx"],"sourcesContent":["import {\n useCallback,\n useMemo,\n useState,\n type FormEvent,\n type JSX,\n} from 'react';\nimport { useBackofficeReactTranslation } from '../../i18n/useBackofficeReactTranslation.js';\n\nimport { Button } from '@plumile/ui/button';\nimport { FormError, FormField, Form, AuthLayout } from '@plumile/ui';\n\nimport * as styles from '../login/loginPage.css.js';\nimport { AuthPanel } from '../login/AuthPanel.js';\n\ntype Props = {\n onStartPasswordReset: (input: {\n email: string;\n locale?: string;\n }) => Promise<boolean>;\n};\n\nexport const PasswordResetRequestScreen = ({\n onStartPasswordReset,\n}: Props): JSX.Element => {\n const { i18n, t } = useBackofficeReactTranslation();\n const [email, setEmail] = useState('');\n const [status, setStatus] = useState<'idle' | 'sent'>('idle');\n const [error, setError] = useState<string | null>(null);\n const [hasEmailError, setHasEmailError] = useState(false);\n const [isSubmitting, setIsSubmitting] = useState(false);\n\n const locale = useMemo(() => {\n const language = i18n.language.trim();\n if (language !== '') {\n return language;\n }\n if (typeof navigator === 'undefined') {\n return undefined;\n }\n return navigator.language;\n }, [i18n.language]);\n\n const handleSubmit = useCallback(\n (event: FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n setError(null);\n setHasEmailError(false);\n\n if (email.trim() === '') {\n setError(t('auth.passwordResetRequest.errors.emailRequired'));\n setHasEmailError(true);\n return;\n }\n\n const emailInput = event.currentTarget.elements.namedItem('email');\n if (\n emailInput instanceof HTMLInputElement &&\n !emailInput.validity.valid\n ) {\n setError(t('auth.passwordResetRequest.errors.invalidEmail'));\n setHasEmailError(true);\n return;\n }\n\n setIsSubmitting(true);\n onStartPasswordReset({\n email: email.trim(),\n locale,\n })\n .then((success) => {\n if (success) {\n setStatus('sent');\n } else {\n setError(t('auth.passwordResetRequest.errors.startFailed'));\n }\n })\n .catch((mutationError) => {\n setError(\n mutationError instanceof Error\n ? mutationError.message\n : t('auth.passwordResetRequest.errors.startFailed'),\n );\n })\n .finally(() => {\n setIsSubmitting(false);\n });\n },\n [email, locale, onStartPasswordReset, t],\n );\n\n let content: JSX.Element;\n if (status === 'sent') {\n content = (\n <AuthPanel\n title={t('auth.passwordResetRequest.sent.title')}\n description={t('auth.passwordResetRequest.sent.description', { email })}\n footer={\n <Button\n type=\"button\"\n variant=\"soft\"\n onClick={() => {\n setStatus('idle');\n }}\n tone=\"neutral\"\n >\n {t('auth.passwordResetRequest.sent.action')}\n </Button>\n }\n >\n <p className={styles.helper}>\n {t('auth.passwordResetRequest.sent.helper')}\n </p>\n </AuthPanel>\n );\n } else {\n content = (\n <AuthPanel description={t('auth.passwordResetRequest.form.description')}>\n <Form\n className={styles.formSurface}\n onSubmit={handleSubmit}\n noValidate\n initialFocus=\"first-form-control\"\n >\n {error != null && !hasEmailError ? (\n <FormError>{error}</FormError>\n ) : null}\n <FormField\n label={t('auth.passwordResetRequest.form.emailLabel')}\n error={hasEmailError ? error : null}\n name=\"email\"\n type=\"email\"\n value={email}\n onChange={(event) => {\n setEmail(event.target.value);\n setError(null);\n setHasEmailError(false);\n }}\n placeholder={t('auth.passwordResetRequest.form.emailPlaceholder')}\n autoComplete=\"email\"\n required\n />\n <Button type=\"submit\" loading={isSubmitting}>\n {t('auth.passwordResetRequest.form.submit')}\n </Button>\n </Form>\n </AuthPanel>\n );\n }\n\n return (\n <AuthLayout title={t('auth.passwordResetRequest.title')}>\n {content}\n </AuthLayout>\n );\n};\n"],"mappings":";;;;;;;;AAsBA,IAAa,KAA8B,EACzC,8BACwB;CACxB,IAAM,EAAE,SAAM,SAAM,EAA8B,GAC5C,CAAC,GAAO,KAAY,EAAS,EAAE,GAC/B,CAAC,GAAQ,KAAa,EAA0B,MAAM,GACtD,CAAC,GAAO,KAAY,EAAwB,IAAI,GAChD,CAAC,GAAe,KAAoB,EAAS,EAAK,GAClD,CAAC,GAAc,KAAmB,EAAS,EAAK,GAEhD,IAAS,QAAc;EAC3B,IAAM,IAAW,EAAK,SAAS,KAAK;EACpC,IAAI,MAAa,IACf,OAAO;EAEL,WAAO,YAAc,KAGzB,OAAO,UAAU;CACnB,GAAG,CAAC,EAAK,QAAQ,CAAC,GAEZ,IAAe,GAClB,MAAsC;EAKrC,IAJA,EAAM,eAAe,GACrB,EAAS,IAAI,GACb,EAAiB,EAAK,GAElB,EAAM,KAAK,MAAM,IAAI;GAEvB,AADA,EAAS,EAAE,gDAAgD,CAAC,GAC5D,EAAiB,EAAI;GACrB;EACF;EAEA,IAAM,IAAa,EAAM,cAAc,SAAS,UAAU,OAAO;EACjE,IACE,aAAsB,oBACtB,CAAC,EAAW,SAAS,OACrB;GAEA,AADA,EAAS,EAAE,+CAA+C,CAAC,GAC3D,EAAiB,EAAI;GACrB;EACF;EAGA,AADA,EAAgB,EAAI,GACpB,EAAqB;GACnB,OAAO,EAAM,KAAK;GAClB;EACF,CAAC,CAAC,CACC,MAAM,MAAY;GACjB,AAAI,IACF,EAAU,MAAM,IAEhB,EAAS,EAAE,8CAA8C,CAAC;EAE9D,CAAC,CAAC,CACD,OAAO,MAAkB;GACxB,EACE,aAAyB,QACrB,EAAc,UACd,EAAE,8CAA8C,CACtD;EACF,CAAC,CAAC,CACD,cAAc;GACb,EAAgB,EAAK;EACvB,CAAC;CACL,GACA;EAAC;EAAO;EAAQ;EAAsB;CAAC,CACzC,GAEI;CA2DJ,OA1DA,AAwBE,IAxBE,MAAW,SAEX,kBAAC,GAAD;EACE,OAAO,EAAE,sCAAsC;EAC/C,aAAa,EAAE,8CAA8C,EAAE,SAAM,CAAC;EACtE,QACE,kBAAC,GAAD;GACE,MAAK;GACL,SAAQ;GACR,eAAe;IACb,EAAU,MAAM;GAClB;GACA,MAAK;GAEJ,UAAA,EAAE,uCAAuC;EACpC,CAAA;EAGV,UAAA,kBAAC,KAAD;GAAG,WAAW;GACX,UAAA,EAAE,uCAAuC;EACzC,CAAA;CACM,CAAA,IAIX,kBAAC,GAAD;EAAW,aAAa,EAAE,4CAA4C;EACpE,UAAA,kBAAC,GAAD;GACE,WAAW;GACX,UAAU;GACV,YAAA;GACA,cAAa;GAJf,UAAA;IAMG,KAAS,QAAQ,CAAC,IACjB,kBAAC,GAAD,EAAA,UAAY,EAAiB,CAAA,IAC3B;IACJ,kBAAC,GAAD;KACE,OAAO,EAAE,2CAA2C;KACpD,OAAO,IAAgB,IAAQ;KAC/B,MAAK;KACL,MAAK;KACL,OAAO;KACP,WAAW,MAAU;MAGnB,AAFA,EAAS,EAAM,OAAO,KAAK,GAC3B,EAAS,IAAI,GACb,EAAiB,EAAK;KACxB;KACA,aAAa,EAAE,iDAAiD;KAChE,cAAa;KACb,UAAA;IACD,CAAA;IACD,kBAAC,GAAD;KAAQ,MAAK;KAAS,SAAS;KAC5B,UAAA,EAAE,uCAAuC;IACpC,CAAA;GACJ;;CACG,CAAA,GAKb,kBAAC,GAAD;EAAY,OAAO,EAAE,iCAAiC;EACnD,UAAA;CACS,CAAA;AAEhB"}
@@ -564,7 +564,7 @@ var { commitMutation: me, useRelayEnvironment: he } = b, x = (e, t) => e(t), S =
564
564
  })
565
565
  }) }),
566
566
  $ && /* @__PURE__ */ v("div", {
567
- className: "txvbqb5lr txvbqb6m5 txvbqb6rp",
567
+ className: "txvbqb5m2 txvbqb6mq txvbqb6sa",
568
568
  children: [z != null && Q != null && /* @__PURE__ */ _(oe, {
569
569
  badgeLabel: Q,
570
570
  copyCode: z,
@@ -1,5 +1,5 @@
1
1
  //#region src/components/backoffice/actions/backofficeEntityActionFormDialog.css.ts
2
- var e = "txvbqb5lr txvbqb6m5 txvbqb6rz", t = "txvbqb5lr txvbqb8ob txvbqb1cu txvbqb6rp", n = "txvbqbk9 txvbqb1rt txvbqbe1d txvbqbf4t", r = "txvbqb6nj txvbqb1d4 txvbqbe6 txvbqbf4t", i = "txvbqb9ft txvbqbff", a = "txvbqb5lr txvbqb6m5 txvbqb6rp", o = "txvbqb5lr txvbqb6m5 txvbqb6rp", s = "txvbqb6n9 txvbqbff", c = "txvbqb6n9 txvbqbdv", l = "txvbqb5ml txvbqb2nn txvbqb6rp txvbqbiqt txvbqbjgd txvbqbn1 txvbqbac txvbqble txvbqbmx txvbqbiz txvbqbe7 txvbqb6nj txvbqb190";
2
+ var e = "txvbqb5m2 txvbqb6mq txvbqb6sk", t = "txvbqb5m2 txvbqb8ow txvbqb1d5 txvbqb6sa", n = "txvbqbkk txvbqb1s4 txvbqbe1y txvbqbf5e", r = "txvbqb6o4 txvbqb1df txvbqbeh txvbqbf5e", i = "txvbqb9ge txvbqbfq", a = "txvbqb5m2 txvbqb6mq txvbqb6sa", o = "txvbqb5m2 txvbqb6mq txvbqb6sa", s = "txvbqb6nu txvbqbfq", c = "txvbqb6nu txvbqbe6", l = "txvbqb5mw txvbqb2ny txvbqb6sa txvbqbire txvbqbjgy txvbqbnc txvbqban txvbqblp txvbqbn8 txvbqbja txvbqbei txvbqb6o4 txvbqb19b";
3
3
  //#endregion
4
4
  export { t as actions, a as checkboxGroup, c as fieldDescription, s as fieldError, n as fieldset, e as form, l as lazyFallback, r as legend, i as requiredMark, o as resultSection };
5
5
 
@@ -34,7 +34,7 @@ var u = "–", d = (e, t, n) => new Intl.NumberFormat(n, {
34
34
  children: E(x)
35
35
  }),
36
36
  _ != null && b != null && /* @__PURE__ */ l("p", {
37
- className: "txvbqb6n9 txvbqbe8 txvbqb1rt",
37
+ className: "txvbqb6nu txvbqbej txvbqb1s4",
38
38
  children: [
39
39
  y,
40
40
  " ",
@@ -1,5 +1,5 @@
1
1
  //#region src/components/backoffice/billing/backofficeBillingUsageChart.css.ts
2
- var e = "txvbqb5lr txvbqb6m5 txvbqb6rz", t = "txvbqb6on txvbqb6oz txvbqb1d5 txvbqbe6 txvbqb1rt", n = "txvbqb6n9 txvbqbe8 txvbqb1rt";
2
+ var e = "txvbqb5m2 txvbqb6mq txvbqb6sk", t = "txvbqb6p8 txvbqb6pk txvbqb1dg txvbqbeh txvbqb1s4", n = "txvbqb6nu txvbqbej txvbqb1s4";
3
3
  //#endregion
4
4
  export { n as rangeText, e as root, t as totalValue };
5
5
 
@@ -41,15 +41,15 @@ var f = (e) => {
41
41
  h != null && /* @__PURE__ */ o(d, { status: h })
42
42
  ]
43
43
  }), m != null && /* @__PURE__ */ o("div", {
44
- className: "txvbqb6nj txvbqbe7 txvbqb206",
44
+ className: "txvbqb6o4 txvbqbei txvbqb20h",
45
45
  children: m
46
46
  })]
47
47
  }), b.length > 0 && /* @__PURE__ */ o("div", {
48
- className: "txvbqb5lr txvbqb2nn txvbqb8ob txvbqb6rp txvbqb1cu",
48
+ className: "txvbqb5m2 txvbqb2ny txvbqb8ow txvbqb6sa txvbqb1d5",
49
49
  children: b.map(f)
50
50
  })]
51
51
  }), g != null && g.length > 0 && /* @__PURE__ */ o("div", {
52
- className: "txvbqb5m1 txvbqb6rz txvbqb7pv",
52
+ className: "txvbqb5mc txvbqb6sk txvbqb7qg",
53
53
  children: g.map((e) => {
54
54
  let t = e.value;
55
55
  return e.copyValue != null && e.copyValue !== "" && (t = /* @__PURE__ */ o(u, {
@@ -59,12 +59,12 @@ var f = (e) => {
59
59
  copyLabel: y("common.actions.copy"),
60
60
  copiedLabel: y("common.actions.copied")
61
61
  })), /* @__PURE__ */ s("div", {
62
- className: "txvbqb5lr txvbqb6m5 txvbqb6rf txvbqbe1d",
62
+ className: "txvbqb5m2 txvbqb6mq txvbqb6s0 txvbqbe1y",
63
63
  children: [/* @__PURE__ */ o("span", {
64
- className: "txvbqb6n9 txvbqb6a txvbqb1o5 txvbqbe7",
64
+ className: "txvbqb6nu txvbqb6k txvbqb1og txvbqbei",
65
65
  children: e.label
66
66
  }), /* @__PURE__ */ o("span", {
67
- className: "txvbqb6nj txvbqbe6 txvbqb206",
67
+ className: "txvbqb6o4 txvbqbeh txvbqb20h",
68
68
  children: t
69
69
  })]
70
70
  }, e.id);
@@ -21,7 +21,7 @@ var u = ({ title: u, items: d }) => {
21
21
  children: n
22
22
  }),
23
23
  e.description != null && /* @__PURE__ */ o("span", {
24
- className: "txvbqb6nj txvbqbe7 txvbqb206",
24
+ className: "txvbqb6o4 txvbqbei txvbqb20h",
25
25
  children: e.description
26
26
  })
27
27
  ] });
@@ -42,52 +42,52 @@ var c = ({ title: c, rows: l, totals: u, emptyLabel: d, columnLabels: f }) => {
42
42
  return /* @__PURE__ */ a(n, { ...t }, e.id);
43
43
  })
44
44
  }), l.length > 0 && /* @__PURE__ */ o("div", {
45
- className: "txvbqb5m1 txvbqb6rp",
45
+ className: "txvbqb5mc txvbqb6sa",
46
46
  children: [/* @__PURE__ */ o("div", {
47
- className: "_13200uy0 txvbqb5m1 txvbqb6rz txvbqb2nn",
47
+ className: "_13200uy0 txvbqb5mc txvbqb6sk txvbqb2ny",
48
48
  children: [
49
49
  /* @__PURE__ */ a("span", {
50
- className: "txvbqb6n9 txvbqb6a txvbqb1o5 txvbqbe7",
50
+ className: "txvbqb6nu txvbqb6k txvbqb1og txvbqbei",
51
51
  children: h.name
52
52
  }),
53
53
  /* @__PURE__ */ a("span", {
54
- className: "txvbqb6n9 txvbqb6a txvbqb1o5 txvbqbe7",
54
+ className: "txvbqb6nu txvbqb6k txvbqb1og txvbqbei",
55
55
  children: h.rawCost
56
56
  }),
57
57
  /* @__PURE__ */ a("span", {
58
- className: "txvbqb6n9 txvbqb6a txvbqb1o5 txvbqbe7",
58
+ className: "txvbqb6nu txvbqb6k txvbqb1og txvbqbei",
59
59
  children: h.markup
60
60
  }),
61
61
  /* @__PURE__ */ a("span", {
62
- className: "txvbqb6n9 txvbqb6a txvbqb1o5 txvbqbe7",
62
+ className: "txvbqb6nu txvbqb6k txvbqb1og txvbqbei",
63
63
  children: h.charged
64
64
  }),
65
65
  /* @__PURE__ */ a("span", {
66
- className: "txvbqb6n9 txvbqb6a txvbqb1o5 txvbqbe7",
66
+ className: "txvbqb6nu txvbqb6k txvbqb1og txvbqbei",
67
67
  children: h.events
68
68
  })
69
69
  ]
70
70
  }), l.map((e) => /* @__PURE__ */ o("div", {
71
- className: "_13200uy0 txvbqb5m1 txvbqb6rz txvbqb2nn",
71
+ className: "_13200uy0 txvbqb5mc txvbqb6sk txvbqb2ny",
72
72
  children: [
73
73
  /* @__PURE__ */ a("span", {
74
- className: i("txvbqb6nj txvbqbe6 txvbqb206", "txvbqb1d4"),
74
+ className: i("txvbqb6o4 txvbqbeh txvbqb20h", "txvbqb1df"),
75
75
  children: e.label
76
76
  }),
77
77
  /* @__PURE__ */ a("span", {
78
- className: "txvbqb6nj txvbqbe6 txvbqb206",
78
+ className: "txvbqb6o4 txvbqbeh txvbqb20h",
79
79
  children: e.rawCost ?? m
80
80
  }),
81
81
  /* @__PURE__ */ a("span", {
82
- className: "txvbqb6nj txvbqbe6 txvbqb206",
82
+ className: "txvbqb6o4 txvbqbeh txvbqb20h",
83
83
  children: e.markup ?? m
84
84
  }),
85
85
  /* @__PURE__ */ a("span", {
86
- className: "txvbqb6nj txvbqbe6 txvbqb206",
86
+ className: "txvbqb6o4 txvbqbeh txvbqb20h",
87
87
  children: e.charged ?? m
88
88
  }),
89
89
  /* @__PURE__ */ a("span", {
90
- className: "txvbqb6nj txvbqbe6 txvbqb206",
90
+ className: "txvbqb6o4 txvbqbeh txvbqb20h",
91
91
  children: e.eventsCount ?? e.quantity ?? m
92
92
  })
93
93
  ]
@@ -1,5 +1,5 @@
1
1
  //#region src/components/backoffice/detail/backofficeDetailBadgeRow.css.ts
2
- var e = "txvbqb5lr txvbqb1cu txvbqb6rp txvbqb2nn";
2
+ var e = "txvbqb5m2 txvbqb1d5 txvbqb6sa txvbqb2ny";
3
3
  //#endregion
4
4
  export { e as row };
5
5
 
@@ -1,5 +1,5 @@
1
1
  //#region src/components/backoffice/detail/backofficeDetailErrorList.css.ts
2
- var e = "txvbqb5lr txvbqb6m5 txvbqb6s9", t = "txvbqb5lr txvbqb6m5 txvbqb6rp txvbqbf5n txvbqbn3", n = "txvbqble txvbqbmx txvbqbiz txvbqbab", r = "txvbqb5lr txvbqb6m5 txvbqb6rf", i = "txvbqb1cz txvbqb6nj txvbqbe8", a = "txvbqb1d5", o = "txvbqb6nj";
2
+ var e = "txvbqb5m2 txvbqb6mq txvbqb6su", t = "txvbqb5m2 txvbqb6mq txvbqb6sa txvbqbf68 txvbqbne", n = "txvbqblp txvbqbn8 txvbqbja txvbqbam", r = "txvbqb5m2 txvbqb6mq txvbqb6s0", i = "txvbqb1da txvbqb6o4 txvbqbej", a = "txvbqb1dg", o = "txvbqb6o4";
3
3
  //#endregion
4
4
  export { i as code, o as details, r as header, t as item, n as itemSurface, e as list, a as message };
5
5
 
@@ -1,5 +1,5 @@
1
1
  //#region src/components/backoffice/detail/backofficeDetailLayout.css.ts
2
- var e = "txvbqb5m1 txvbqb7kl txvbqb7ky txvbqb6s9 txvbqb2nd txvbqbe1d", t = "txvbqb5lr txvbqb6m5 txvbqb6s9 txvbqbe1d", n = "txvbqb5lr txvbqb6m5 txvbqb6s9 txvbqbe1d", r = "txvbqb5lr txvbqb6m5 txvbqb6s9";
2
+ var e = "txvbqb5mc txvbqb7l6 txvbqb7lj txvbqb6su txvbqb2no txvbqbe1y", t = "txvbqb5m2 txvbqb6mq txvbqb6su txvbqbe1y", n = "txvbqb5m2 txvbqb6mq txvbqb6su txvbqbe1y", r = "txvbqb5m2 txvbqb6mq txvbqb6su";
3
3
  //#endregion
4
4
  export { e as layout, t as primary, n as secondary, r as stacked };
5
5
 
@@ -1,5 +1,5 @@
1
1
  //#region src/components/backoffice/detail/backofficeDetailRelationList.css.ts
2
- var e = "txvbqb5lr txvbqb6m5 txvbqb6rz";
2
+ var e = "txvbqb5m2 txvbqb6mq txvbqb6sk";
3
3
  //#endregion
4
4
  export { e as list };
5
5
 
@@ -1,5 +1,5 @@
1
1
  //#region src/components/backoffice/detail/backofficeEntitySummaryHeader.css.ts
2
- var e = "txvbqb5lr txvbqb6m5 txvbqb6s9 txvbqbf5x txvbqbn2 txvbqba9 txvbqble txvbqbmx txvbqbj1", t = "txvbqb5lr txvbqb8ov txvbqb2nd txvbqb6s9 txvbqb1cu", n = "txvbqb5lr txvbqb6m5 txvbqb6rp txvbqbe1d", r = "txvbqb5lr txvbqb2nn txvbqb6rp txvbqb1cu", i = "txvbqb6on txvbqb1rl txvbqb1d5 txvbqbe6 txvbqb206", a = "txvbqb6nj txvbqbe7 txvbqb206", o = "txvbqb5lr txvbqb2nn txvbqb8ob txvbqb6rp txvbqb1cu", s = "txvbqb5m1 txvbqb6rz txvbqb7pv", c = "txvbqb5lr txvbqb6m5 txvbqb6rf txvbqbe1d", l = "txvbqb6n9 txvbqb6a txvbqb1o5 txvbqbe7", u = "txvbqb6nj txvbqbe6 txvbqb206";
2
+ var e = "txvbqb5m2 txvbqb6mq txvbqb6su txvbqbf6i txvbqbnd txvbqbak txvbqblp txvbqbn8 txvbqbjc", t = "txvbqb5m2 txvbqb8pg txvbqb2no txvbqb6su txvbqb1d5", n = "txvbqb5m2 txvbqb6mq txvbqb6sa txvbqbe1y", r = "txvbqb5m2 txvbqb2ny txvbqb6sa txvbqb1d5", i = "txvbqb6p8 txvbqb1rw txvbqb1dg txvbqbeh txvbqb20h", a = "txvbqb6o4 txvbqbei txvbqb20h", o = "txvbqb5m2 txvbqb2ny txvbqb8ow txvbqb6sa txvbqb1d5", s = "txvbqb5mc txvbqb6sk txvbqb7qg", c = "txvbqb5m2 txvbqb6mq txvbqb6s0 txvbqbe1y", l = "txvbqb6nu txvbqb6k txvbqb1og txvbqbei", u = "txvbqb6o4 txvbqbeh txvbqb20h";
3
3
  //#endregion
4
4
  export { o as actions, n as identity, s as meta, c as metaItem, l as metaLabel, u as metaValue, e as root, a as subtitle, i as title, r as titleRow, t as top };
5
5
 
@@ -1,5 +1,5 @@
1
1
  //#region src/components/backoffice/detail/backofficeRelationsSummaryGrid.css.ts
2
- var e = "txvbqb5m1 txvbqb6rz txvbqb7pv", t = "txvbqb5lr txvbqb6m5 txvbqb6rf txvbqbf5n txvbqbn1 txvbqba9 txvbqble txvbqbmx txvbqbj1 txvbqbe1d", n = "txvbqb6n9 txvbqb6a txvbqb1o5 txvbqbe7", r = "txvbqb6od txvbqb1d5 txvbqbe6", i = "txvbqb6nj txvbqbe7 txvbqb206";
2
+ var e = "txvbqb5mc txvbqb6sk txvbqb7qg", t = "txvbqb5m2 txvbqb6mq txvbqb6s0 txvbqbf68 txvbqbnc txvbqbak txvbqblp txvbqbn8 txvbqbjc txvbqbe1y", n = "txvbqb6nu txvbqb6k txvbqb1og txvbqbei", r = "txvbqb6oy txvbqb1dg txvbqbeh", i = "txvbqb6o4 txvbqbei txvbqb20h";
3
3
  //#endregion
4
4
  export { r as count, i as description, e as grid, t as item, n as label };
5
5
 
@@ -1,6 +1,6 @@
1
1
  /* empty css */
2
2
  //#region src/components/backoffice/detail/backofficeUsageCostBreakdown.css.ts
3
- var e = "txvbqb5lr txvbqb6m5 txvbqb6rz", t = "txvbqb5m1 txvbqb6rp", n = "_13200uy0 txvbqb5m1 txvbqb6rz txvbqb2nn", r = "txvbqb6n9 txvbqb6a txvbqb1o5 txvbqbe7", i = "txvbqb6nj txvbqbe6 txvbqb206", a = "txvbqb1d4";
3
+ var e = "txvbqb5m2 txvbqb6mq txvbqb6sk", t = "txvbqb5mc txvbqb6sa", n = "_13200uy0 txvbqb5mc txvbqb6sk txvbqb2ny", r = "txvbqb6nu txvbqb6k txvbqb1og txvbqbei", i = "txvbqb6o4 txvbqbeh txvbqb20h", a = "txvbqb1df";
4
4
  //#endregion
5
5
  export { i as cell, e as content, r as header, a as label, n as row, t as table };
6
6
 
@@ -70,7 +70,7 @@ var h = (h) => {
70
70
  return /* @__PURE__ */ u("div", {
71
71
  className: r,
72
72
  children: z ?? /* @__PURE__ */ u("div", {
73
- className: "txvbqb1cl txvbqbe1d txvbqb5lr txvbqb2nn txvbqbf3z",
73
+ className: "txvbqb1cw txvbqbe1y txvbqb5m2 txvbqb2ny txvbqbf4k",
74
74
  children: P
75
75
  })
76
76
  });
@@ -1,5 +1,5 @@
1
1
  //#region src/components/backoffice/filters/backofficeFilterAction.css.ts
2
- var e = "hwnq700 txvbqb5ml txvbqb2nn txvbqb8o1 txvbqb1cr txvbqbkz3 txvbqb7tr txvbqbf4t txvbqbn1 txvbqble txvbqbmx txvbqbiz txvbqbab txvbqbet txvbqbv txvbqb3f txvbqb7n txvbqb76 txvbqb7y txvbqbo81 txvbqbmix txvbqbncx qbwcue5 qbwcue4 txvbqboz8 txvbqbptg qbwcue3", t = "txvbqbky9 txvbqb7sx";
2
+ var e = "hwnq700 txvbqb5mw txvbqb2ny txvbqb8om txvbqb1d2 txvbqbkzo txvbqb7uc txvbqbf5e txvbqbnc txvbqblp txvbqbn8 txvbqbja txvbqbam txvbqbf4 txvbqbv txvbqb3p txvbqb7y txvbqb7h txvbqb89 txvbqbo8m txvbqbmji txvbqbndi qbwcue5 qbwcue4 txvbqbozt txvbqbpu1 qbwcue3", t = "txvbqbkyu txvbqb7ti";
3
3
  //#endregion
4
4
  export { e as action, t as icon };
5
5
 
@@ -1,6 +1,6 @@
1
1
  /* empty css */
2
2
  //#region src/components/backoffice/filters/deferredFilterSearchInput.css.ts
3
- var e = "txvbqbl9n", t = "ds2thc0 txvbqb5ml txvbqb2nn txvbqb7fb", n = "ds2thc1 txvbqb6 txvbqb5ml txvbqb2nn txvbqb8o1 txvbqbkz3 txvbqb7tr txvbqbf4t txvbqbn1 txvbqbk9 txvbqb8n txvbqbe8 txvbqbv txvbqb7n txvbqb76 txvbqb7y", r = "txvbqb5ml txvbqbkz3 txvbqb7tr txvbqb1cr";
3
+ var e = "txvbqbla8", t = "txvbqb5mw txvbqb2ny txvbqb7fw txvbqbe64", n = "ds2thc0 txvbqb6 txvbqb5mw txvbqb2ny txvbqb8om txvbqbkzo txvbqb7uc txvbqbf5e txvbqbnc txvbqbkk txvbqb8y txvbqbej txvbqbv txvbqb7y txvbqb7h txvbqb89", r = "txvbqb5mw txvbqbkzo txvbqb7uc txvbqb1d2";
4
4
  //#endregion
5
5
  export { n as actionButton, r as actionButtonSpacer, t as actions, e as container };
6
6
 
@@ -1 +1 @@
1
- {"version":3,"file":"deferredFilterSearchInput.css.js","names":[],"sources":["../../../../../src/components/backoffice/filters/deferredFilterSearchInput.css.ts"],"sourcesContent":["import { style } from '@vanilla-extract/css';\nimport { sprinkles, vars } from '@plumile/ui/theme';\n\nexport const container = sprinkles({\n width: 'full',\n});\n\nexport const actions = style([\n sprinkles({\n display: 'inline-flex',\n alignItems: 'center',\n gap: 0.5,\n }),\n {\n minWidth: '3.75rem',\n },\n]);\n\nexport const actionButton = style([\n sprinkles({\n appearance: 'none',\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: 7,\n height: 7,\n padding: 0,\n borderRadius: 'md',\n borderWidth: 0,\n backgroundColor: 'transparent',\n color: 'textMuted',\n cursor: 'pointer',\n transitionProperty: 'colors',\n transitionDuration: 120,\n transitionTimingFunction: 'ease',\n }),\n {\n selectors: {\n '&:hover:not(:disabled)': {\n color: vars.colors.text,\n backgroundColor: vars.colors.surfaceMuted,\n },\n '&:focus-visible': {\n outline: `2px solid ${vars.colors.primary}`,\n outlineOffset: '2px',\n },\n '&:disabled': {\n cursor: 'not-allowed',\n opacity: 0.45,\n },\n },\n },\n]);\n\nexport const actionButtonSpacer = sprinkles({\n display: 'inline-flex',\n width: 7,\n height: 7,\n flexShrink: 0,\n});\n"],"mappings":""}
1
+ {"version":3,"file":"deferredFilterSearchInput.css.js","names":[],"sources":["../../../../../src/components/backoffice/filters/deferredFilterSearchInput.css.ts"],"sourcesContent":["import { style } from '@vanilla-extract/css';\nimport { sprinkles, vars } from '@plumile/ui/theme';\n\nexport const container = sprinkles({\n width: 'full',\n});\n\nexport const actions = sprinkles({\n display: 'inline-flex',\n alignItems: 'center',\n gap: 0.5,\n minWidth: 15,\n});\n\nexport const actionButton = style([\n sprinkles({\n appearance: 'none',\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: 7,\n height: 7,\n padding: 0,\n borderRadius: 'md',\n borderWidth: 0,\n backgroundColor: 'transparent',\n color: 'textMuted',\n cursor: 'pointer',\n transitionProperty: 'colors',\n transitionDuration: 120,\n transitionTimingFunction: 'ease',\n }),\n {\n selectors: {\n '&:hover:not(:disabled)': {\n color: vars.colors.text,\n backgroundColor: vars.colors.surfaceMuted,\n },\n '&:focus-visible': {\n outline: `2px solid ${vars.colors.primary}`,\n outlineOffset: '2px',\n },\n '&:disabled': {\n cursor: 'not-allowed',\n opacity: 0.45,\n },\n },\n },\n]);\n\nexport const actionButtonSpacer = sprinkles({\n display: 'inline-flex',\n width: 7,\n height: 7,\n flexShrink: 0,\n});\n"],"mappings":""}