@abyss-project/commons-front-core 9.6.0 → 10.0.0

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 (56) hide show
  1. package/README.md +5 -1
  2. package/dist/{AbyssCookieConsentProvider-D-HRRYCd.js → AbyssCookieConsentProvider-BypueFP-.js} +26 -4
  3. package/dist/{CookieConsentSettings.component-iG_abYsq.js → CookieConsentSettings.component-CYmew9vg.js} +1 -1
  4. package/dist/auth/client/web-bridge.d.ts +6 -0
  5. package/dist/auth/components/AuthFlow/AuthFlow.component.d.ts +9 -2
  6. package/dist/auth/components/AuthFlow/auth-flow.types.d.ts +5 -0
  7. package/dist/auth/components/AuthFlow/steps/EmailStep.component.d.ts +4 -1
  8. package/dist/auth/components/index.d.ts +1 -0
  9. package/dist/auth/components/shared/auth-errors.d.ts +1 -0
  10. package/dist/auth/components/shared/auth-errors.spec.d.ts +1 -0
  11. package/dist/auth-client.js +1 -1
  12. package/dist/components/inputs/DropZone/DropZone.d.ts +6 -1
  13. package/dist/components/layers/ProductTour/product-tour-geometry.d.ts +2 -0
  14. package/dist/components/structure/AccountMenu/AccountMenu.d.ts +2 -1
  15. package/dist/components/structure/AppShell/app-shell.types.d.ts +5 -0
  16. package/dist/cookie-consent.js +2 -2
  17. package/dist/{design-theme-Cz9YXXYF.js → design-theme-uRG0VfEo.js} +1546 -1544
  18. package/dist/hooks/use-rich-intl.hook.d.ts +70 -0
  19. package/dist/{index-Bx3HHL-R.js → index-1XaO6yqN.js} +2 -2
  20. package/dist/{index-CfMACXTF.js → index-B-gziyiQ.js} +2 -2
  21. package/dist/{index-122nruW2.js → index-B-o5nMSp.js} +2 -2
  22. package/dist/{index-hmLJVQI5.js → index-B2hC6MII.js} +2 -2
  23. package/dist/{index-ClFFE5ao.js → index-BGFuwS_Q.js} +2 -2
  24. package/dist/{index-D4RSXnjv.js → index-BWlJEtPU.js} +2 -2
  25. package/dist/{index-C4zd0qai.js → index-BXr7rmpX.js} +3 -3
  26. package/dist/{index-DIW1zdfO.js → index-BlOn2KR_.js} +2 -2
  27. package/dist/{index-BGjmUj-Y.js → index-BqwZB633.js} +4 -4
  28. package/dist/{index-71ZKDT76.js → index-Bzvs4paS.js} +4 -4
  29. package/dist/{index-y2047KCu.js → index-C7vs9FFj.js} +2 -2
  30. package/dist/{index-D-Sa8nQo.js → index-Cn4VznqA.js} +3 -3
  31. package/dist/{index-D5lR_Znk.js → index-CxRoV826.js} +2 -2
  32. package/dist/{index-Dodsh0PI.js → index-D6SwHpGJ.js} +3 -3
  33. package/dist/{index-BmNsW-7e.js → index-DMm4DUwE.js} +4 -4
  34. package/dist/{index-uctTt51v.js → index-DSxaBHTZ.js} +2 -2
  35. package/dist/{index-DNe1tEo2.js → index-DXsaB2jy.js} +6496 -6481
  36. package/dist/{index-B1LNfIcu.js → index-D_FaSb6y.js} +2 -2
  37. package/dist/{index-ri1JKKHf.js → index-QOUuevuY.js} +2 -2
  38. package/dist/{index-DP-wuPBm.js → index-cCCQwSgM.js} +2 -2
  39. package/dist/{index-CtIh_DWT.js → index-eDLp-yzn.js} +3 -3
  40. package/dist/{index-XQsb7DVh.js → index-oTUDJjQw.js} +1 -1
  41. package/dist/index.js +5218 -5092
  42. package/dist/legacy/components/Layouts/AbyssThemeToggle/AbyssThemeToggle.component.d.ts +2 -1
  43. package/dist/legacy/components/Layouts/AbyssThemeToggle/AbyssThemeToggle.component.spec.d.ts +1 -0
  44. package/dist/legacy.js +12 -12
  45. package/dist/rum/AbyssRumProvider.d.ts +5 -2
  46. package/dist/rum/abyss-rum-report.context.d.ts +14 -0
  47. package/dist/rum/index.d.ts +1 -0
  48. package/dist/rum/report-locale.d.ts +3 -0
  49. package/dist/rum/report-locale.spec.d.ts +1 -0
  50. package/dist/rum/track-key-action.d.ts +7 -0
  51. package/dist/rum/track-key-action.spec.d.ts +1 -0
  52. package/dist/translations/en.d.ts +11 -0
  53. package/dist/translations/fr.d.ts +11 -0
  54. package/dist/{use-auth.hook-oRxzI95f.js → use-auth.hook-D8vfSYRv.js} +101 -101
  55. package/package.json +9 -9
  56. package/test-results/catalog/.last-run.json +0 -4
package/README.md CHANGED
@@ -27,7 +27,7 @@ Voir la [documentation produit](https://docs.abyss-project.fr/abyss-project) pou
27
27
 
28
28
  ## RUM
29
29
 
30
- Le RUM navigateur d'un front (SDK `@abyss-project/monitor-browser`, peer `^1.2.0`) se démarre par `AbyssRumProvider`, monté **sous** `AbyssCookieConsentProvider` et, quand le front en a un, sous `AuthProvider` :
30
+ Le RUM navigateur d'un front (SDK `@abyss-project/monitor-browser`, peer `^1.3.2` ; `setContact` et `setTheme` demandent la version publiée par #285 F) se démarre par `AbyssRumProvider`, monté **sous** `AbyssCookieConsentProvider`, sous le `ThemeProvider` MUI et, quand le front en a un, sous `AuthProvider` :
31
31
 
32
32
  ```tsx
33
33
  <AbyssErrorBoundary appName="abyss-cloud">
@@ -47,6 +47,10 @@ Le RUM navigateur d'un front (SDK `@abyss-project/monitor-browser`, peer `^1.2.0
47
47
  - **Acteur.** Sous `AuthProvider`, l'acteur de la session est l'id de l'utilisateur connecté, `null` à la déconnexion, inchangé pendant le chargement de la session. Sans `AuthProvider`, aucun acteur.
48
48
  - **`feedbackTicket`** (`intakeSlug`, `internalTicketSectionId`, `appName`, `sessionUrl(sessionId, offsetMs)`, `locale?()`) : chaque retour utilisateur enregistré par Monitor devient un ticket Internal Tickets, par l'intake public d'abyss-console (`fileInternalTicketIntake`, peer `@abyss-project/console` `^12.4.0`, configuré par `AbyssConsoleCore.setConfig` du front). Titre `[<appName>] Retour utilisateur` ; description : le message, l'e-mail, la route et le lien vers la session. Le déclarant est l'e-mail saisi, sinon celui de l'utilisateur connecté ; un retour anonyme sans e-mail ne crée aucun ticket et reste dans Monitor. Un échec de création est journalisé (`console.warn`) et avalé. `locale()` est relue à chaque retour : sa sous-étiquette primaire (`en-GB` → `en`) part comme `locale` de l'intake, la langue des courriels de suivi ; une langue que l'intake ne parle pas (hors `UserLanguage`) n'est pas envoyée.
49
49
  - **`onFeedbackSent`** : rappel du front, appelé pour chaque retour enregistré, après le ticket (créé, sauté ou en échec).
50
+ - **Contact (#285 F §7).** Sous `AuthProvider`, `AbyssRum.setContact({ email, name })` reçoit l'e-mail et l'alias de l'utilisateur connecté, `null` à la déconnexion, rien pendant le chargement de la session. Le SDK le garde en mémoire, jamais dans la télémétrie : il pré-remplit « Réponse à … » du signalement et ne part qu'avec un retour. Avec `config={null}`, aucun contact n'est donné.
51
+ - **Thème (#285 F §6.4).** Monté sous le `ThemeProvider` MUI du front, le provider passe à `AbyssRum.setTheme` l'accent (`palette.primary.main`), le rayon (`shape.borderRadius`, borné à 0–48 px) et le mode (`palette.mode`) ; un changement de mode est suivi. Les variables CSS `--abyss-monitor-accent` et `--abyss-monitor-radius` de la page, et l'apparence enregistrée sur une demande de retour, priment.
52
+ - **« Signaler un problème » (#285 F §7).** Avec une `config` non nulle, le provider offre le signalement du SDK aux menus de compte du core placés dessous : `AccountMenu` (après les entrées de l'hôte) et le `AbyssLayoutMenu` legacy (après Facturation) montrent l'entrée « Signaler un problème » / « Report a problem », qui ferme le menu et appelle `AbyssRum.showReportDialog({ locale })` dans la langue du front (`en*` → `RumReportLocale.EN`, sinon `RumReportLocale.FR`). Sans provider ou avec `config={null}`, l'entrée n'existe pas. Elle n'apparaît que tant que `AbyssRum.isReportAvailable()` est vrai — SDK démarré, configuration de l'environnement reçue avec les retours activés (réglage « Retours utilisateurs » dans Monitor) — et le provider la réévalue à chaque `AbyssRum.onConfigChange` : absente avant la réponse de configuration et quand les retours sont coupés.
53
+ - **Actions clés (#285 F).** `trackKeyAction(AbyssKeyActionEvent.X)` enregistre, au point de succès d'une action du front, une action RUM nommée d'après l'événement du catalogue (`board.card.completed`) : une demande de retour déclenchée par une action s'y règle. Sans RUM démarré, l'appel ne fait rien et ne lève jamais.
50
54
  - **Erreurs de rendu.** `AbyssErrorBoundary` envoie l'erreur qu'il attrape à `AbyssRum.captureError(error, { source: 'error-boundary' })` ; sans RUM démarré, l'appel ne fait rien.
51
55
 
52
56
  ### Construire les options : `buildAbyssRumProviderConfig`
@@ -35,6 +35,7 @@ const Ms = (p) => p, Ks = {
35
35
  TOOLS_SHORT_LINK_COUNT: "Liens courts",
36
36
  TOOLS_SHORTLINK_RESOLUTIONS_MONTH: "Clics liens courts",
37
37
  MONITOR_WEBHOOK_INVOCATIONS_MONTH: "Webhooks Monitor / mois",
38
+ CONSOLE_WORKFLOW_CREDITS_MONTH: "Crédits d'automatisation Console",
38
39
  RUM_SESSIONS_MONTH: "Sessions navigateur Monitor / mois",
39
40
  REHYDRATION_CONCURRENT_JOBS: "Réhydratations simultanées",
40
41
  REHYDRATION_ACTIVE_GB: "Logs réhydratés (Go)",
@@ -92,6 +93,7 @@ const Ms = (p) => p, Ks = {
92
93
  TOOLS_SHORT_LINK_COUNT: "Short links",
93
94
  TOOLS_SHORTLINK_RESOLUTIONS_MONTH: "Short link clicks",
94
95
  MONITOR_WEBHOOK_INVOCATIONS_MONTH: "Monitor webhooks / month",
96
+ CONSOLE_WORKFLOW_CREDITS_MONTH: "Console automation credits",
95
97
  RUM_SESSIONS_MONTH: "Monitor browser sessions / month",
96
98
  REHYDRATION_CONCURRENT_JOBS: "Concurrent rehydrations",
97
99
  REHYDRATION_ACTIVE_GB: "Rehydrated logs (GB)",
@@ -443,6 +445,7 @@ const fm = {
443
445
  ABYSS_PLATFORM: "Plateforme",
444
446
  ABYSS_STORAGE: "Stockage",
445
447
  ABYSS_MONITOR: "Monitoring",
448
+ ABYSS_CONSOLE: "Automatisation",
446
449
  ABYSS_CLOUD: "Cloud",
447
450
  ABYSS_CRYPT: "Chiffrement",
448
451
  ABYSS_FORM: "Formulaires",
@@ -511,7 +514,8 @@ const fm = {
511
514
  settings: "Paramètres",
512
515
  billing: "Facturation",
513
516
  logout: "Déconnexion",
514
- family: "Famille"
517
+ family: "Famille",
518
+ "report-problem": "Signaler un problème"
515
519
  },
516
520
  scope: {
517
521
  personal: "Personnel",
@@ -1017,6 +1021,7 @@ const fm = {
1017
1021
  service: {
1018
1022
  ABYSS_PLATFORM: "Plateforme",
1019
1023
  ABYSS_MONITOR: "Abyss Monitor",
1024
+ ABYSS_CONSOLE: "Abyss Console",
1020
1025
  ABYSS_STORAGE: "Abyss Storage",
1021
1026
  ABYSS_CLOUD: "Abyss Cloud",
1022
1027
  ABYSS_CRYPT: "Abyss Crypt",
@@ -1424,6 +1429,10 @@ const fm = {
1424
1429
  email: {
1425
1430
  title: "Connexion à Abyss",
1426
1431
  lede: "Saisissez votre adresse e-mail : nous vous connectons, ou nous créons votre compte.",
1432
+ "back-office": {
1433
+ title: "Connexion au back-office",
1434
+ lede: "Réservé aux comptes administrateurs. Saisissez votre adresse e-mail."
1435
+ },
1427
1436
  label: "Adresse e-mail",
1428
1437
  submit: "Continuer",
1429
1438
  passkey: "Se connecter avec une passkey",
@@ -1531,6 +1540,7 @@ const fm = {
1531
1540
  "email-change-unavailable": "Cette adresse ne peut pas être utilisée.",
1532
1541
  "reauth-cancelled": "Action annulée : elle demande de confirmer votre identité.",
1533
1542
  "session-revoked": "Votre session a pris fin. Reconnectez-vous.",
1543
+ "admin-required": "Cet accès est réservé aux administrateurs.",
1534
1544
  "ceremony-cancelled": "Opération annulée.",
1535
1545
  "ceremony-unsupported": "Cette méthode n’est pas disponible sur cet appareil.",
1536
1546
  "ceremony-no-credential": "Aucune passkey de ce compte sur cet appareil.",
@@ -1584,6 +1594,7 @@ const fm = {
1584
1594
  current: "Cet appareil",
1585
1595
  platforms: {
1586
1596
  web: "Navigateur",
1597
+ admin: "Back-office",
1587
1598
  ios: "iPhone / iPad",
1588
1599
  android: "Android"
1589
1600
  },
@@ -1839,7 +1850,8 @@ const fm = {
1839
1850
  "account-menu": {
1840
1851
  trigger: "Compte de {name}",
1841
1852
  "dark-mode": "Thème sombre",
1842
- logout: "Se déconnecter"
1853
+ logout: "Se déconnecter",
1854
+ "report-problem": "Signaler un problème"
1843
1855
  },
1844
1856
  "page-header": {
1845
1857
  breadcrumbs: "Fil d’Ariane"
@@ -2373,6 +2385,7 @@ const fm = {
2373
2385
  ABYSS_PLATFORM: "Platform",
2374
2386
  ABYSS_STORAGE: "Storage",
2375
2387
  ABYSS_MONITOR: "Monitoring",
2388
+ ABYSS_CONSOLE: "Automation",
2376
2389
  ABYSS_CLOUD: "Cloud",
2377
2390
  ABYSS_CRYPT: "Encryption",
2378
2391
  ABYSS_FORM: "Forms",
@@ -2441,7 +2454,8 @@ const fm = {
2441
2454
  settings: "Settings",
2442
2455
  billing: "Billing",
2443
2456
  logout: "Log out",
2444
- family: "Family"
2457
+ family: "Family",
2458
+ "report-problem": "Report a problem"
2445
2459
  },
2446
2460
  scope: {
2447
2461
  personal: "Personal",
@@ -2947,6 +2961,7 @@ const fm = {
2947
2961
  service: {
2948
2962
  ABYSS_PLATFORM: "Platform",
2949
2963
  ABYSS_MONITOR: "Abyss Monitor",
2964
+ ABYSS_CONSOLE: "Abyss Console",
2950
2965
  ABYSS_STORAGE: "Abyss Storage",
2951
2966
  ABYSS_CLOUD: "Abyss Cloud",
2952
2967
  ABYSS_CRYPT: "Abyss Crypt",
@@ -3354,6 +3369,10 @@ const fm = {
3354
3369
  email: {
3355
3370
  title: "Sign in to Abyss",
3356
3371
  lede: "Enter your email address: we sign you in, or create your account.",
3372
+ "back-office": {
3373
+ title: "Back office sign-in",
3374
+ lede: "For administrator accounts only. Enter your email address."
3375
+ },
3357
3376
  label: "Email address",
3358
3377
  submit: "Continue",
3359
3378
  passkey: "Sign in with a passkey",
@@ -3461,6 +3480,7 @@ const fm = {
3461
3480
  "email-change-unavailable": "This address cannot be used.",
3462
3481
  "reauth-cancelled": "Action cancelled: it requires confirming it is you.",
3463
3482
  "session-revoked": "Your session has ended. Sign in again.",
3483
+ "admin-required": "This access is reserved for administrators.",
3464
3484
  "ceremony-cancelled": "Cancelled.",
3465
3485
  "ceremony-unsupported": "This method is not available on this device.",
3466
3486
  "ceremony-no-credential": "No passkey of this account on this device.",
@@ -3514,6 +3534,7 @@ const fm = {
3514
3534
  current: "This device",
3515
3535
  platforms: {
3516
3536
  web: "Browser",
3537
+ admin: "Back office",
3517
3538
  ios: "iPhone / iPad",
3518
3539
  android: "Android"
3519
3540
  },
@@ -3769,7 +3790,8 @@ const fm = {
3769
3790
  "account-menu": {
3770
3791
  trigger: "Account: {name}",
3771
3792
  "dark-mode": "Dark theme",
3772
- logout: "Log out"
3793
+ logout: "Log out",
3794
+ "report-problem": "Report a problem"
3773
3795
  },
3774
3796
  "page-header": {
3775
3797
  breadcrumbs: "Breadcrumb"
@@ -1,7 +1,7 @@
1
1
  import { jsx as e, jsxs as a } from "react/jsx-runtime";
2
2
  import { useState as m, useEffect as C } from "react";
3
3
  import { Card as v, CardContent as b, Stack as u, Typography as o, FormControlLabel as l, Box as r, Checkbox as d, Button as M } from "@mui/material";
4
- import { g as R, u as x } from "./AbyssCookieConsentProvider-D-HRRYCd.js";
4
+ import { g as R, u as x } from "./AbyssCookieConsentProvider-BypueFP-.js";
5
5
  const B = () => {
6
6
  const t = R(), { consent: i, save: y } = x(), [h, g] = m((i == null ? void 0 : i.analytics) ?? !1), [k, f] = m((i == null ? void 0 : i.marketing) ?? !1), c = i == null ? void 0 : i.analytics, n = i == null ? void 0 : i.marketing;
7
7
  return C(() => {
@@ -1,3 +1,4 @@
1
+ import { SessionPlatform } from '@abyss-project/main';
1
2
  import { AuthBridge } from './auth-bridge';
2
3
  export declare const GOOGLE_IDENTITY_SCRIPT_URL = "https://accounts.google.com/gsi/client";
3
4
  export declare const APPLE_ID_SCRIPT_URL = "https://appleid.cdn-apple.com/appleauth/static/jsapi/appleid/1.0/en_US/appleid.auth.js";
@@ -13,6 +14,11 @@ export interface WebBridgeConfig {
13
14
  appleServiceId?: string;
14
15
  /** Return URL declared on the Services ID; required by Apple JS even in popup mode. */
15
16
  appleRedirectUri?: string;
17
+ /**
18
+ * The browser platform of the sessions this bridge opens: `WEB` (default), or `ADMIN` for the
19
+ * back-office, whose sessions the server tells apart from the web ones.
20
+ */
21
+ platform?: SessionPlatform.WEB | SessionPlatform.ADMIN;
16
22
  }
17
23
  /** The bridge of every web front: WebAuthn, Google Identity Services, Sign in with Apple JS. */
18
24
  export declare const createWebBridge: (config: WebBridgeConfig) => AuthBridge;
@@ -1,6 +1,6 @@
1
1
  import { IAuthResult } from '@abyss-project/main';
2
2
  import { AuthFlowProviders } from '../AuthProviderButtons/AuthProviderButtons.component';
3
- import { AuthFlowContext, AuthFlowLegal, AuthFlowResult } from './auth-flow.types';
3
+ import { AuthFlowContext, AuthFlowLegal, AuthFlowResult, AuthFlowVariant } from './auth-flow.types';
4
4
  export type AuthFlowProps = {
5
5
  initialEmail?: string;
6
6
  /**
@@ -12,6 +12,13 @@ export type AuthFlowProps = {
12
12
  * that token (the e-mail shown is never an editable field, there or here).
13
13
  */
14
14
  initialResult?: IAuthResult;
15
+ /**
16
+ * `false` for a front that has no sign-up (the back-office): a `SIGNUP_REQUIRED` result never
17
+ * opens the sign-up step, the current step shows the `admin-required` error instead.
18
+ */
19
+ allowSignup?: boolean;
20
+ /** `BACK_OFFICE` only changes the title and the lede of the e-mail step. */
21
+ variant?: AuthFlowVariant;
15
22
  context: AuthFlowContext;
16
23
  providers: AuthFlowProviders;
17
24
  /**
@@ -27,4 +34,4 @@ export type AuthFlowProps = {
27
34
  * mandatory MFA set-up for an administrator; passkey proposal. Must be rendered inside
28
35
  * `<AuthProvider>`: every session goes through its client.
29
36
  */
30
- export declare const AuthFlow: ({ initialEmail, initialResult, context, providers, onAuthenticated, legal, }: AuthFlowProps) => import("react/jsx-runtime").JSX.Element;
37
+ export declare const AuthFlow: ({ initialEmail, initialResult, allowSignup, variant, context, providers, onAuthenticated, legal, }: AuthFlowProps) => import("react/jsx-runtime").JSX.Element;
@@ -22,6 +22,11 @@ export interface AuthFlowResult {
22
22
  /** Always `false` once the flow ends: an enrolment it required was completed inside it. */
23
23
  mfaEnrollmentRequired: boolean;
24
24
  }
25
+ /** The wording of the e-mail step: the usual sign-in, or the back-office's. */
26
+ export declare enum AuthFlowVariant {
27
+ APP = "app",
28
+ BACK_OFFICE = "back-office"
29
+ }
25
30
  export declare enum AuthFlowStepKind {
26
31
  EMAIL = "email",
27
32
  CODE = "code",
@@ -1,7 +1,10 @@
1
1
  import { ReactNode } from 'react';
2
2
  import { AuthErrorKind } from '../../shared/auth-errors';
3
+ import { AuthFlowVariant } from '../auth-flow.types';
3
4
  export declare const isEmailLike: (value: string) => boolean;
4
5
  export type EmailStepProps = {
6
+ /** `BACK_OFFICE` swaps the title and the lede; the form is the same. */
7
+ variant: AuthFlowVariant;
5
8
  email: string;
6
9
  onEmailChange: (email: string) => void;
7
10
  onSubmit: () => void;
@@ -19,4 +22,4 @@ export type EmailStepProps = {
19
22
  /** Google / Apple (and Discord / Slack on the web) above the form. */
20
23
  providers?: ReactNode;
21
24
  };
22
- export declare const EmailStep: ({ email, onEmailChange, onSubmit, busy, error, passkeySupported, onStartConditionalPasskey, onPasskey, providers, }: EmailStepProps) => import("react/jsx-runtime").JSX.Element;
25
+ export declare const EmailStep: ({ variant, email, onEmailChange, onSubmit, busy, error, passkeySupported, onStartConditionalPasskey, onPasskey, providers, }: EmailStepProps) => import("react/jsx-runtime").JSX.Element;
@@ -3,6 +3,7 @@ export type { AuthFlowProps } from './AuthFlow/AuthFlow.component';
3
3
  export { AuthHeroLayout, AuthHeroLayoutVariant, } from './AuthHeroLayout/AuthHeroLayout.component';
4
4
  export type { AuthHeroLayoutProps } from './AuthHeroLayout/AuthHeroLayout.component';
5
5
  export { useAuthHero } from './AuthHeroLayout/auth-hero.context';
6
+ export { AuthFlowVariant } from './AuthFlow/auth-flow.types';
6
7
  export type { AuthFlowContext, AuthFlowLegal, AuthFlowResult, } from './AuthFlow/auth-flow.types';
7
8
  export { AuthProviderButtons, AuthProviderKind, } from './AuthProviderButtons/AuthProviderButtons.component';
8
9
  export type { AuthFlowProviders, AuthProviderButtonsProps, } from './AuthProviderButtons/AuthProviderButtons.component';
@@ -22,6 +22,7 @@ export declare enum AuthErrorKind {
22
22
  EMAIL_CHANGE_UNAVAILABLE = "email-change-unavailable",
23
23
  REAUTH_CANCELLED = "reauth-cancelled",
24
24
  SESSION_REVOKED = "session-revoked",
25
+ ADMIN_REQUIRED = "admin-required",
25
26
  CEREMONY_CANCELLED = "ceremony-cancelled",
26
27
  CEREMONY_UNSUPPORTED = "ceremony-unsupported",
27
28
  CEREMONY_NO_CREDENTIAL = "ceremony-no-credential",
@@ -0,0 +1 @@
1
+ export {};
@@ -1,4 +1,4 @@
1
- import { q as e, t as R, u as r, A as E, G as t, L as _, a as o, k as A, j as S, m as T, n as L, g as u, h as i, R as c, U as d, p as h, f as n, b as g, d as I, o as G, s as M, c as O, i as b, l as C, r as P, e as N, v as U } from "./use-auth.hook-oRxzI95f.js";
1
+ import { q as e, t as R, u as r, A as E, G as t, L as _, a as o, k as A, j as S, m as T, n as L, g as u, h as i, R as c, U as d, p as h, f as n, b as g, d as I, o as G, s as M, c as O, i as b, l as C, r as P, e as N, v as U } from "./use-auth.hook-D8vfSYRv.js";
2
2
  import { a as H, A as Y, R as l, b as F, c as y, s as f } from "./token-storage-CbWrBeIP.js";
3
3
  export {
4
4
  e as APPLE_ID_SCRIPT_URL,
@@ -10,6 +10,11 @@ export interface DropZoneProps {
10
10
  accept?: Accept;
11
11
  /** Largest accepted file, in bytes; shown under the zone. */
12
12
  maxSize?: number;
13
+ /**
14
+ * The line under the zone, in place of the default « Taille maximale par fichier : … » that
15
+ * `maxSize` writes: the host's own wording of the limit. Without `maxSize`, shown all the same.
16
+ */
17
+ caption?: string;
13
18
  /** Title above the zone, which names it. */
14
19
  title?: string;
15
20
  /**
@@ -20,4 +25,4 @@ export interface DropZoneProps {
20
25
  /** Replaces the icon and the prompt inside the zone (a preview of the current file, say). */
21
26
  children?: ReactNode;
22
27
  }
23
- export declare function DropZone({ onDrop, multiple, accept, maxSize, title, cloudImport, children, }: DropZoneProps): import("react/jsx-runtime").JSX.Element;
28
+ export declare function DropZone({ onDrop, multiple, accept, maxSize, caption, title, cloudImport, children, }: DropZoneProps): import("react/jsx-runtime").JSX.Element;
@@ -39,6 +39,8 @@ export declare const placeBubble: (target: TourRect, bubble: TourSize, viewport:
39
39
  export declare const centerBubble: (bubble: TourSize, viewport: TourSize, margin: number) => Pick<BubblePlacement, "top" | "left">;
40
40
  /** The rectangle `rect` grown by `by` px on every side. */
41
41
  export declare const inflateRect: (rect: TourRect, by: number) => TourRect;
42
+ /** The part of `rect` that lies `inset` px or more inside the viewport. */
43
+ export declare const clampRect: (rect: TourRect, viewport: TourSize, inset: number) => TourRect;
42
44
  export declare const toTourRect: (rect: DOMRectReadOnly) => TourRect;
43
45
  export declare const sameRect: (a: TourRect | null, b: TourRect | null) => boolean;
44
46
  export declare const sameSize: (a: TourSize, b: TourSize) => boolean;
@@ -22,6 +22,7 @@ export interface AccountMenuProps {
22
22
  }
23
23
  /**
24
24
  * The account entry of the top bar: the viewer's avatar opens a menu with their name and email,
25
- * the host's entries (account, settings, billing…), the dark theme switch and the logout.
25
+ * the host's entries (account, settings, billing…), « Report a problem » under an installed
26
+ * `AbyssRumProvider`, the dark theme switch and the logout.
26
27
  */
27
28
  export declare function AccountMenu({ user, themeMode, onThemeModeChange, items, onLogout, }: AccountMenuProps): import("react/jsx-runtime").JSX.Element;
@@ -39,6 +39,11 @@ export interface NavItem {
39
39
  * drawer, absent from the rail.
40
40
  */
41
41
  action?: NavItemAction;
42
+ /**
43
+ * A sub-entry of the product entry above it: drawn without its icon, indented under it, in the
44
+ * sidebar and the drawer, and absent from the rail. `icon` stays required but is not rendered.
45
+ */
46
+ nested?: boolean;
42
47
  }
43
48
  export interface NavSection {
44
49
  id: string;
@@ -1,5 +1,5 @@
1
- import { A as e, c as a, C as n, D as C, R as i, V as t, d as r, f as A, r as k, e as c, u as l, b, a as f, w as u } from "./AbyssCookieConsentProvider-D-HRRYCd.js";
2
- import { C as E } from "./CookieConsentSettings.component-iG_abYsq.js";
1
+ import { A as e, c as a, C as n, D as C, R as i, V as t, d as r, f as A, r as k, e as c, u as l, b, a as f, w as u } from "./AbyssCookieConsentProvider-BypueFP-.js";
2
+ import { C as E } from "./CookieConsentSettings.component-CYmew9vg.js";
3
3
  export {
4
4
  e as AbyssCookieConsentProvider,
5
5
  a as COOKIE_NAME,