@abyss-project/commons-front-core 2.6.2 → 3.0.1

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 (120) hide show
  1. package/dist/{CookieConsentSettings.component-BUxrkECh.js → CookieConsentSettings.component-BLgzLD-Z.js} +687 -591
  2. package/dist/components/Avatars/ProjectAvatar/ProjectAvatar.component.d.ts +3 -0
  3. package/dist/components/Avatars/UserAvatar/UserAvatar.component.d.ts +3 -0
  4. package/dist/components/Cards/ProjectCard/ProjectCard.component.d.ts +1 -0
  5. package/dist/components/CommandPalette/AbyssCommandPalette.d.ts +9 -0
  6. package/dist/components/CommandPalette/types.d.ts +63 -0
  7. package/dist/components/CommandPalette/useCommandPaletteHotkey.d.ts +9 -0
  8. package/dist/components/CookieConsent/AbyssCookieConsentProvider.d.ts +9 -1
  9. package/dist/components/CookieConsent/CookieConsentBanner.component.d.ts +0 -1
  10. package/dist/components/CookieConsent/privacy-link.constant.d.ts +25 -0
  11. package/dist/components/Data/AbyssTable/AbyssTable.component.d.ts +16 -2
  12. package/dist/components/Data/AbyssTable/abyss-table.logic.d.ts +72 -0
  13. package/dist/components/Inputs/AbyssNumberField/AbyssNumberField.component.d.ts +18 -0
  14. package/dist/components/Inputs/AbyssNumberField/format.d.ts +28 -0
  15. package/dist/components/Inputs/CloudImport/CloudImport.component.d.ts +1 -0
  16. package/dist/components/Inputs/ColorPalette/ColorPalette.component.d.ts +2 -0
  17. package/dist/components/Inputs/ContextSelector/ContextSelector.component.d.ts +25 -0
  18. package/dist/components/Inputs/DatePeriodPicker/DatePeriodPicker.component.d.ts +32 -0
  19. package/dist/components/Inputs/DatePeriodPicker/date-period-picker.logic.d.ts +54 -0
  20. package/dist/components/Inputs/DatePeriodPicker/date-period-presets.util.d.ts +8 -0
  21. package/dist/components/Inputs/LanguageFlagLabel/LanguageFlagLabel.component.d.ts +13 -0
  22. package/dist/components/Inputs/LanguageFlagLabel/language-flags.d.ts +10 -0
  23. package/dist/components/Inputs/PasswordInput/PasswordInput.component.d.ts +16 -0
  24. package/dist/components/Inputs/ProjectLinkSelector/index.d.ts +1 -1
  25. package/dist/components/Layouts/AbyssBillingPlan/AbyssBillingPlan.component.d.ts +2 -0
  26. package/dist/components/Layouts/AbyssFamilyBanner/AbyssFamilyBanner.component.d.ts +12 -0
  27. package/dist/components/Layouts/AbyssLayoutProvider/index.d.ts +1 -1
  28. package/dist/components/Layouts/AbyssSidebar/index.d.ts +2 -2
  29. package/dist/components/Modals/AbyssModal/AbyssModal.component.d.ts +6 -0
  30. package/dist/components/Modals/QRCodeModal/QRCodeModal.component.d.ts +1 -0
  31. package/dist/components/Modals/UserSettingsModal/UserSettingsModal.component.d.ts +5 -0
  32. package/dist/components/Modals/UserSettingsModal/index.d.ts +1 -1
  33. package/dist/components/PdfEditor/hooks/use-pdf-document.d.ts +12 -0
  34. package/dist/components/PdfEditor/hooks/use-uploaded-docs.d.ts +9 -0
  35. package/dist/components/PdfEditor/operations/actions.d.ts +14 -0
  36. package/dist/components/PdfEditor/operations/compute-page-order.d.ts +11 -0
  37. package/dist/components/PdfEditor/operations/extract.d.ts +5 -0
  38. package/dist/components/PdfEditor/operations/pdf-data-url.d.ts +4 -0
  39. package/dist/components/PdfEditor/operations/rasterize.d.ts +17 -0
  40. package/dist/components/PdfEditor/operations/redact.d.ts +8 -0
  41. package/dist/components/PdfEditor/operations/rotate-coords.d.ts +25 -0
  42. package/dist/components/PdfEditor/signature/SignaturePicker.d.ts +3 -0
  43. package/dist/components/PdfEditor/signature/SignatureSaveButton.d.ts +3 -0
  44. package/dist/components/PdfEditor/signature/resolve-asset.d.ts +17 -0
  45. package/dist/components/PdfEditor/tools/RedactTool.d.ts +6 -0
  46. package/dist/components/PdfEditor/tools/Toolbar.d.ts +9 -0
  47. package/dist/components/PdfEditor/tools/tool-options-ui.d.ts +1 -0
  48. package/dist/components/PdfEditor/types.d.ts +85 -0
  49. package/dist/components/PdfEditor/viewer/PageOverlay.d.ts +10 -0
  50. package/dist/components/PdfEditor/viewer/PdfCanvas.d.ts +1 -0
  51. package/dist/components/PdfEditor/viewer/ViewerControls.d.ts +4 -0
  52. package/dist/components/QuotaGauge/AbyssQuotaGauge.component.d.ts +39 -0
  53. package/dist/components/QuotaGauge/bubble-placement.d.ts +40 -0
  54. package/dist/components/QuotaGauge/gauge-segments.d.ts +56 -0
  55. package/dist/components/QuotaOffer/AbyssQuotaOffer.component.d.ts +60 -0
  56. package/dist/components/QuotaOffer/quota-offer-state.d.ts +64 -0
  57. package/dist/components/QuotaReached/QuotaReachedDialog.component.d.ts +10 -0
  58. package/dist/components/QuotaReached/billing-quota-error.d.ts +7 -0
  59. package/dist/components/QuotaReached/quota-dialog.store.d.ts +10 -0
  60. package/dist/components/QuotaReached/quota-service-meta.d.ts +4 -0
  61. package/dist/components/Support/SupportCategorySelect.component.d.ts +3 -0
  62. package/dist/components/Support/SupportStatusTimeline.component.d.ts +2 -0
  63. package/dist/components/Support/index.d.ts +2 -2
  64. package/dist/components/Support/support-attachment.logic.d.ts +10 -0
  65. package/dist/components/Support/support-author.logic.d.ts +9 -0
  66. package/dist/components/Support/support-create-stepper.logic.d.ts +13 -0
  67. package/dist/components/Support/support-message-input.logic.d.ts +8 -0
  68. package/dist/components/Support/support-status-timeline.logic.d.ts +16 -0
  69. package/dist/components/Support/types.d.ts +55 -0
  70. package/dist/components/Utils/AbyssBackground/AbyssBackground.component.d.ts +3 -0
  71. package/dist/components/Utils/AbyssFamilyMenuSection/AbyssFamilyMenuSection.d.ts +9 -0
  72. package/dist/components/Utils/AbyssLayoutMenu/index.d.ts +1 -1
  73. package/dist/components/Utils/AbyssLayoutNotifications/AbyssLayoutNotifications.component.d.ts +4 -0
  74. package/dist/components/Utils/AbyssLayoutNotifications/index.d.ts +1 -1
  75. package/dist/components/Utils/ImportButton/ImportButton.component.d.ts +4 -0
  76. package/dist/components/Utils/Toast/AbyssToast.component.d.ts +6 -0
  77. package/dist/components/Utils/WaterParticles/WaterParticles.component.d.ts +8 -0
  78. package/dist/cookie-consent.js +1 -1
  79. package/dist/hooks/use-public-users.hook.d.ts +39 -0
  80. package/dist/hooks/use-rich-intl.hook.d.ts +13 -5
  81. package/dist/hooks/use-theme-transition.hook.d.ts +13 -0
  82. package/dist/{index-D_eg_k-b.js → index-13QCr6ei.js} +1 -1
  83. package/dist/{index-uIeKLdVL.js → index-B4s0xpO9.js} +3 -3
  84. package/dist/{index-3FLJ3SfU.js → index-BBH7n9Up.js} +4 -4
  85. package/dist/{index-C_WLdmTl.js → index-BI7XXRdP.js} +3 -3
  86. package/dist/{index-7xq1GVwh.js → index-BbuvDSp0.js} +2 -2
  87. package/dist/{index-XwxG8_UP.js → index-Bhok95RO.js} +2 -2
  88. package/dist/{index-DtSoIucr.js → index-BjbDo-BN.js} +14320 -11454
  89. package/dist/{index-BUU_BiL1.js → index-C2iksP8T.js} +2 -2
  90. package/dist/{index-BLCWSuQw.js → index-CKXa4BvM.js} +2 -2
  91. package/dist/{index-CIrG9_dY.js → index-Ci9slz4U.js} +2 -2
  92. package/dist/{index-C5qcmmpX.js → index-CoGr-vvT.js} +3 -3
  93. package/dist/{index-DcCIQbuV.js → index-Cw4n4Q97.js} +2 -2
  94. package/dist/{index-CtAqjScO.js → index-DKSA-U8A.js} +2 -2
  95. package/dist/{index-DHL1-xk6.js → index-DQ6hF6bv.js} +4 -4
  96. package/dist/{index-Da9DTuJn.js → index-DVDFaXUS.js} +2 -2
  97. package/dist/{index-DjyLPGQg.js → index-Dfs8HrMj.js} +2 -2
  98. package/dist/{index-BErplPpW.js → index-Dn5fa9DE.js} +3 -3
  99. package/dist/{index-Br1U0l5K.js → index-DqW8ipJ0.js} +2 -2
  100. package/dist/{index-DSaH4UP5.js → index-Dt86SHUY.js} +2 -2
  101. package/dist/{index-erzdx1Az.js → index-DucVTPTi.js} +2 -2
  102. package/dist/{index-BcogVLzo.js → index-TJMhsU_S.js} +2 -2
  103. package/dist/{index-CXjoTXWO.js → index-x_CknZJ4.js} +4 -4
  104. package/dist/index.js +2 -2
  105. package/dist/theme/augmentation.d.ts +6 -0
  106. package/dist/theme/index.d.ts +11 -4
  107. package/dist/theme/palettes/common.d.ts +13 -0
  108. package/dist/theme/palettes/dark.d.ts +1 -0
  109. package/dist/theme/palettes/light.d.ts +1 -0
  110. package/dist/theme/tokens/animations.d.ts +3 -0
  111. package/dist/theme/tokens/borders.d.ts +3 -0
  112. package/dist/theme/tokens/colors.d.ts +27 -0
  113. package/dist/theme/tokens/shadows.d.ts +8 -0
  114. package/dist/theme/tokens/transitions.d.ts +4 -0
  115. package/dist/theme/tokens/typography.d.ts +6 -0
  116. package/dist/utils/share-notification.utils.d.ts +9 -0
  117. package/dist/utils/space-display-name.utils.d.ts +8 -0
  118. package/package.json +14 -13
  119. package/tsconfig.json +26 -25
  120. package/vite.config.ts +1 -17
@@ -55,16 +55,24 @@ export interface SupportTicketListProps {
55
55
  alias?: string | null;
56
56
  profilePictureThumbnailId?: string | null;
57
57
  }>;
58
+ /** Organization lookup map for displaying org info in ticket rows */
58
59
  organizations?: Record<string, {
59
60
  name?: string | null;
60
61
  pictureThumbnailId?: string | null;
61
62
  }>;
63
+ /** Extra filter UI injected into the filter bar (e.g. org filter, user search for admin) */
62
64
  renderExtraFilters?: () => ReactNode;
65
+ /** Custom title override */
63
66
  title?: string;
67
+ /** Custom subtitle */
64
68
  subtitle?: string;
69
+ /** Hide the create button */
65
70
  hideCreateButton?: boolean;
71
+ /** URL builder for user profile pictures (required when isAdmin is true) */
66
72
  getProfilePictureUrl: (userId: string) => string;
73
+ /** URL builder for organization logos (required when isAdmin is true) */
67
74
  getOrgLogoUrl: (orgId: string) => string;
75
+ /** Available tags for filtering (admin only) */
68
76
  availableTags?: ISupportTicketTag[];
69
77
  }
70
78
  export interface SupportTicketCreateValues {
@@ -84,6 +92,9 @@ export interface SupportTicketCreateStepperValues extends SupportTicketCreateVal
84
92
  projectId?: string | null;
85
93
  userId?: string | null;
86
94
  organizationId?: string | null;
95
+ /** Files staged in the create stepper's attachment drop zone. The stepper
96
+ * only stages them locally — the host is responsible for creating the
97
+ * ticket then uploading each staged file via the attachment mutation. */
87
98
  attachments?: File[];
88
99
  }
89
100
  export interface SupportTicketCreateStepperProps {
@@ -91,7 +102,10 @@ export interface SupportTicketCreateStepperProps {
91
102
  isSubmitting?: boolean;
92
103
  isAdmin?: boolean;
93
104
  onCancel?: () => void;
105
+ /** Optional prefilled values — used when launching the stepper from a
106
+ * feature-specific "report issue" entry point (e.g. RCB feedback). */
94
107
  initialValues?: Partial<SupportTicketCreateStepperValues>;
108
+ /** Render prop for the entire "For Who?" step (admin only). Receives userId/orgId values and setters. */
95
109
  renderForWhoStep?: (userId: string | null, onUserChange: (userId: string | null) => void, orgId: string | null, onOrgChange: (orgId: string | null) => void) => ReactNode;
96
110
  renderProjectSelect?: (value: string | null, onChange: (projectId: string | null) => void) => ReactNode;
97
111
  }
@@ -123,6 +137,8 @@ export interface SupportMessageThreadProps {
123
137
  getProfilePictureUrl?: (userId: string) => string;
124
138
  getFileThumbnailUrl?: (id: string) => string;
125
139
  ticket?: ISupportTicket;
140
+ /** See SupportAttachmentsPanelProps — same render-prop contract, applied
141
+ * to each inline message attachment. */
126
142
  renderScanStatusBadge?: (attachment: ISupportTicketAttachment) => ReactNode;
127
143
  }
128
144
  export interface SupportMessageInputProps extends SupportCloudImportProps {
@@ -144,10 +160,27 @@ export interface SupportAttachmentsPanelProps extends SupportCloudImportProps {
144
160
  onUpload?: (file: File) => void;
145
161
  onDelete?: (attachmentId: string) => void;
146
162
  onDownload?: (attachment: ISupportTicketAttachment) => void;
163
+ /**
164
+ * Open a viewable attachment (image or PDF) in a new browser tab. Rendered
165
+ * as an "open" affordance only for viewable mime types; the host wraps it
166
+ * with the same scan-status guard as download.
167
+ */
147
168
  onOpenAttachment?: (attachment: ISupportTicketAttachment) => void;
169
+ /**
170
+ * Returns a viewable (presigned) URL for an image attachment, used to render
171
+ * an inline preview when the file has no separately-generated thumbnail.
172
+ * Host wires it to the attachment file-url endpoint; only called for images.
173
+ */
148
174
  getAttachmentPreviewUrl?: (attachment: ISupportTicketAttachment) => Promise<string | null>;
149
175
  isUploading?: boolean;
150
176
  maxAttachments?: number;
177
+ /**
178
+ * Render prop for the antivirus scan-status badge, injected by the host
179
+ * app (the shared `ScanStatusIndicator` lives in `apps/front`, which this
180
+ * package cannot depend on). Rendered next to each attachment's filename
181
+ * when the attachment's `scanStatus` warrants a badge (the host decides —
182
+ * this component just calls it unconditionally per row).
183
+ */
151
184
  renderScanStatusBadge?: (attachment: ISupportTicketAttachment) => ReactNode;
152
185
  }
153
186
  export interface SupportActivityLogProps {
@@ -200,9 +233,23 @@ export interface SupportSidebarProps extends SupportCloudImportProps {
200
233
  id: string;
201
234
  name: string;
202
235
  } | null;
236
+ /**
237
+ * Navigate to the requester's own page. Only a host that has one (the
238
+ * back-office) passes it; without it the requester stays plain text.
239
+ */
203
240
  onNavigateToUser?: (userId: string) => void;
241
+ /**
242
+ * Navigate to the organization's own page. Only a host that has one (the
243
+ * back-office) passes it; without it the organization stays plain text.
244
+ */
204
245
  onNavigateToOrganization?: (organizationId: string) => void;
246
+ /**
247
+ * Deep-link callback for the ticket's generic back-reference. The host
248
+ * builds the URL (e.g. AbyssExtract history) and navigates. Rendered only
249
+ * when ticket.contextType + ticket.contextId are set.
250
+ */
205
251
  onViewContext?: (contextType: string, contextId: string) => void;
252
+ /** See SupportAttachmentsPanelProps. */
206
253
  renderScanStatusBadge?: (attachment: ISupportTicketAttachment) => ReactNode;
207
254
  }
208
255
  export interface SupportTicketDetailProps extends SupportCloudImportProps {
@@ -250,9 +297,17 @@ export interface SupportTicketDetailProps extends SupportCloudImportProps {
250
297
  name: string;
251
298
  } | null;
252
299
  onUploadMessageAttachment?: (file: File) => void;
300
+ /** See SupportSidebarProps. */
253
301
  onNavigateToUser?: (userId: string) => void;
302
+ /** See SupportSidebarProps. */
254
303
  onNavigateToOrganization?: (organizationId: string) => void;
304
+ /**
305
+ * Deep-link callback for the ticket's generic back-reference. The host
306
+ * builds the URL (e.g. AbyssExtract history) and navigates. Rendered only
307
+ * when ticket.contextType + ticket.contextId are set.
308
+ */
255
309
  onViewContext?: (contextType: string, contextId: string) => void;
310
+ /** See SupportAttachmentsPanelProps. */
256
311
  renderScanStatusBadge?: (attachment: ISupportTicketAttachment) => ReactNode;
257
312
  }
258
313
  export interface SupportStatusBadgeProps {
@@ -1,8 +1,11 @@
1
1
  import { default as React } from 'react';
2
2
  export interface AbyssBackgroundProps {
3
3
  children?: React.ReactNode;
4
+ /** 'default' = standard app bg, 'subtle' = less glow, 'hero' = strong glow for landing */
4
5
  variant?: 'default' | 'subtle' | 'hero';
6
+ /** Render as fixed fullscreen (true) or relative container (false, default) */
5
7
  fixed?: boolean;
8
+ /** Extra sx for the wrapper */
6
9
  sx?: Record<string, any>;
7
10
  }
8
11
  declare const AbyssBackground: React.FC<AbyssBackgroundProps>;
@@ -1,5 +1,14 @@
1
1
  import { AbyssLayoutMenuSection } from '../AbyssLayoutMenu/AbyssLayoutMenu.component';
2
2
  import { CurrentFamilyInfo } from '../../Layouts/AbyssFamilyBanner/AbyssFamilyBanner.component';
3
+ /**
4
+ * Builds the AbyssLayoutMenu section for the family entry.
5
+ * When `abyssUrl` is provided, elements use `href` (cross-origin external link).
6
+ * Without it, they use `path` (react-router internal navigation on abyss-main).
7
+ *
8
+ * `labels` allows the host to pass translated strings so that an EN-configured
9
+ * satellite does not show hard-coded French text. FR strings are kept as the
10
+ * in-package fallback (matches `commons.menu.family` / `family.banner.no-family-cta`).
11
+ */
3
12
  export declare function buildAbyssFamilyMenuSection(currentFamily: CurrentFamilyInfo | null | undefined, abyssUrl: string | undefined, labels?: {
4
13
  title?: string;
5
14
  createCta?: string;
@@ -1,3 +1,3 @@
1
1
  export { default as AbyssLayoutMenu } from './AbyssLayoutMenu.component';
2
2
  export { AbyssMenuItem } from './AbyssMenuItem.component';
3
- export type { AbyssLayoutMenuSection, AbyssLayoutMenuElement, AbyssLayoutMenuUser } from './AbyssLayoutMenu.component';
3
+ export type { AbyssLayoutMenuSection, AbyssLayoutMenuElement, AbyssLayoutMenuUser, } from './AbyssLayoutMenu.component';
@@ -18,14 +18,18 @@ type Props = {
18
18
  actionButtonText: (notification: AbyssNotificationItem, user?: AbyssNotificationUser | null) => string | null;
19
19
  handleNotificationActionButton?: (notification: AbyssNotificationItem, user?: AbyssNotificationUser | null) => void;
20
20
  formatDate: (date: Date) => string;
21
+ /** Called on SSE message; return structured event or null to ignore */
21
22
  onSSEMessage?: (message: unknown) => SSENotificationEvent;
22
23
  sseUrl?: string;
23
24
  sid?: string;
24
25
  disableSSE?: boolean;
25
26
  enableSoundNotification?: boolean;
26
27
  onSoundToggle?: () => Promise<void>;
28
+ /** URL to an audio file for notifications (e.g. import NotificationSound from './notification.mp3') */
27
29
  notificationSoundUrl?: string;
30
+ /** Called when "see all" button is clicked (use instead of a router Link) */
28
31
  onAllNotificationsClick?: () => void;
32
+ /** Called when the settings icon is clicked — redirects to the notification preferences page */
29
33
  onPreferencesClick?: () => void;
30
34
  };
31
35
  declare const AbyssLayoutNotifications: React.FC<Props>;
@@ -1,4 +1,4 @@
1
1
  export { default as AbyssLayoutNotifications } from './AbyssLayoutNotifications.component';
2
2
  export { default as AbyssNotifications } from './AbyssNotifications.component';
3
- export type { AbyssNotificationItem, AbyssNotificationUser } from './AbyssNotifications.component';
3
+ export type { AbyssNotificationItem, AbyssNotificationUser, } from './AbyssNotifications.component';
4
4
  export type { SSENotificationEvent } from './AbyssLayoutNotifications.component';
@@ -10,6 +10,7 @@ type Props = {
10
10
  multiple?: boolean;
11
11
  maxSize?: number;
12
12
  accept?: string[];
13
+ /** User object — only used to determine if cloud is enabled */
13
14
  user?: {
14
15
  enabledService?: string[];
15
16
  } | null;
@@ -22,7 +23,10 @@ type Props = {
22
23
  fetchCloudRepository?: (cloudId: string) => Promise<IGetRepositoryCloudData>;
23
24
  onActivateService?: () => Promise<void>;
24
25
  onCreateCloud?: (name: string) => Promise<void>;
26
+ /** If true, show the cloud import option even without full cloud props */
25
27
  showCloudOption?: boolean;
28
+ /** Optional resolver injecting avatar + label per ISpace into the cloud
29
+ * picker (so it matches the host's avatar conventions). */
26
30
  getSpaceDisplay?: (space: ISpace) => {
27
31
  label: string;
28
32
  avatar?: React.ReactNode;
@@ -1,3 +1,9 @@
1
1
  import { default as React } from 'react';
2
+ /**
3
+ * AbyssToast — Injects theme-aware CSS overrides for react-toastify.
4
+ * Place this component inside your ThemeProvider, next to <ToastContainer />.
5
+ *
6
+ * Adapts to light/dark mode automatically via MUI theme tokens.
7
+ */
2
8
  declare const AbyssToast: React.FC;
3
9
  export default AbyssToast;
@@ -1,5 +1,13 @@
1
1
  import { default as React } from 'react';
2
2
  interface Props {
3
+ /**
4
+ * Confine the effect to the nearest positioned ancestor instead of the
5
+ * viewport. Required whenever the backdrop belongs to ONE panel of a split
6
+ * layout: the default `fixed` layer spans the whole window and its glow bleeds
7
+ * over the neighbouring column.
8
+ *
9
+ * The host element must be `position: relative` (and usually `overflow: hidden`).
10
+ */
3
11
  contained?: boolean;
4
12
  }
5
13
  declare const WaterParticles: React.FC<Props>;
@@ -1,4 +1,4 @@
1
- import { A as s, c as a, C as n, a as C, D as i, R as t, V as r, d as A, f as k, r as c, e as l, u as D, b as E, w as I } from "./CookieConsentSettings.component-BUxrkECh.js";
1
+ import { A as s, c as a, C as n, a as C, D as i, R as t, V as r, d as A, f as k, r as c, e as l, u as D, b as E, w as I } from "./CookieConsentSettings.component-BLgzLD-Z.js";
2
2
  export {
3
3
  s as AbyssCookieConsentProvider,
4
4
  a as COOKIE_NAME,
@@ -1,14 +1,53 @@
1
1
  import { QueryClient, UseQueryResult } from '@tanstack/react-query';
2
+ /**
3
+ * Public, lightweight user info shared across components/repos.
4
+ * Mirrors the shape returned by `sdk.user.getPublic`.
5
+ */
2
6
  export type PublicUser = {
3
7
  id: string;
4
8
  alias: string;
5
9
  profilePictureThumbnailId: string | null;
6
10
  emailVerifiedAt: Date | null;
7
11
  };
12
+ /** Shared react-query key — re-export so consumers can prime/invalidate manually if needed. */
8
13
  export declare const publicUserQueryKey: (userId: string) => readonly ["public-user", string];
14
+ /**
15
+ * Batched single-user fetcher. Multiple concurrent calls in a 50ms window
16
+ * collapse into one or more `getPublicUser` requests (one per chunk of
17
+ * MAX_ELEMENT_PUBLIC_USER ids). Returns null if the user isn't found in the
18
+ * response (deleted/never existed). Exported for unit testing the batch/chunk seam.
19
+ */
9
20
  export declare const fetchPublicUserBatched: (userId: string) => Promise<PublicUser | null>;
21
+ /**
22
+ * React Query hook that returns a single public user. Uses a per-id query key
23
+ * so the cache is shared across the entire app — multiple components asking
24
+ * for the same userId benefit from a single network request, and refetches
25
+ * are coordinated by react-query.
26
+ *
27
+ * const user = usePublicUser(someUserId);
28
+ */
10
29
  export declare const usePublicUser: (userId: string | null | undefined) => UseQueryResult<PublicUser | null, Error>;
30
+ /**
31
+ * React Query hook that returns a Record of public users by id. Internally uses
32
+ * `useQueries` so each id has its own cache entry — sharing perfectly with
33
+ * other components calling `usePublicUser`.
34
+ *
35
+ * const users = usePublicUsers([id1, id2, id3]);
36
+ * const alias = users[id1]?.alias;
37
+ */
11
38
  export declare const usePublicUsers: (userIds: readonly (string | null | undefined)[]) => Record<string, PublicUser>;
39
+ /**
40
+ * Imperatively prime the cache from data you already have (e.g. a search
41
+ * response). Subsequent `usePublicUser`/`usePublicUsers` calls hit the cache
42
+ * instead of triggering another `getPublicUser` round-trip.
43
+ */
12
44
  export declare const primePublicUsers: (queryClient: QueryClient, users: readonly PublicUser[]) => void;
45
+ /**
46
+ * Hook variant for `primePublicUsers` — useful inside components.
47
+ */
13
48
  export declare const usePrimePublicUsers: () => (users: readonly PublicUser[]) => void;
49
+ /**
50
+ * Imperatively invalidate one or more cached users (e.g. after the user
51
+ * updates their own profile).
52
+ */
14
53
  export declare const invalidatePublicUsers: (queryClient: QueryClient, userIds: readonly string[]) => void;
@@ -206,6 +206,10 @@ export declare const translations: {
206
206
  title: string;
207
207
  content: string;
208
208
  };
209
+ "external-identity-candidate-named": {
210
+ title: string;
211
+ content: string;
212
+ };
209
213
  "internal-ticket-section-without-agents": {
210
214
  title: string;
211
215
  content: string;
@@ -1662,6 +1666,10 @@ export declare const translations: {
1662
1666
  title: string;
1663
1667
  content: string;
1664
1668
  };
1669
+ "external-identity-candidate-named": {
1670
+ title: string;
1671
+ content: string;
1672
+ };
1665
1673
  "internal-ticket-section-without-agents": {
1666
1674
  title: string;
1667
1675
  content: string;
@@ -2922,11 +2930,11 @@ export declare const flattenTranslations: {
2922
2930
  type FlattenObjectKeys<T extends Record<string, unknown>, Key = keyof T> = Key extends string ? T[Key] extends Record<string, unknown> ? `${Key}.${FlattenObjectKeys<T[Key]>}` : `${Key}` : never;
2923
2931
  export type ExistingTranslationKey = FlattenObjectKeys<(typeof translations)[UserLanguage.FRENCH]>;
2924
2932
  export declare const RICH_TAGS: {
2925
- break: import("react").JSX.Element;
2926
- bold: (...chunks: ReactNode[]) => import("react").JSX.Element;
2927
- italic: (...chunks: ReactNode[]) => import("react").JSX.Element;
2928
- primary: (...chunks: ReactNode[]) => import("react").JSX.Element;
2929
- focus: (...chunks: ReactNode[]) => import("react").JSX.Element;
2933
+ break: import("react/jsx-runtime").JSX.Element;
2934
+ bold: (...chunks: ReactNode[]) => import("react/jsx-runtime").JSX.Element;
2935
+ italic: (...chunks: ReactNode[]) => import("react/jsx-runtime").JSX.Element;
2936
+ primary: (...chunks: ReactNode[]) => import("react/jsx-runtime").JSX.Element;
2937
+ focus: (...chunks: ReactNode[]) => import("react/jsx-runtime").JSX.Element;
2930
2938
  };
2931
2939
  export type ExistingMessageDescriptor = {
2932
2940
  [Key in keyof MessageDescriptor]: Key extends 'id' ? ExistingTranslationKey : MessageDescriptor['id'];
@@ -1,4 +1,17 @@
1
1
  import { default as React } from 'react';
2
+ /**
3
+ * Hook that provides a `triggerTransition` function to wrap theme changes
4
+ * with a circular reveal animation using the View Transitions API.
5
+ *
6
+ * Falls back to a direct call on unsupported browsers or when the user
7
+ * prefers reduced motion.
8
+ *
9
+ * @example
10
+ * const { triggerTransition } = useThemeTransition();
11
+ * <Button onClick={(e) => triggerTransition(() => setThemeMode('light'), e)}>
12
+ * Switch theme
13
+ * </Button>
14
+ */
2
15
  export declare function useThemeTransition(): {
3
16
  triggerTransition: (callback: () => void, event?: React.MouseEvent | MouseEvent) => void;
4
17
  };
@@ -1,4 +1,4 @@
1
- import { P as L, N as M, k as $, D as E, l as y, T as S, I as j } from "./index-DtSoIucr.js";
1
+ import { P as L, N as M, k as $, D as E, l as y, T as S, I as j } from "./index-BjbDo-BN.js";
2
2
  class v {
3
3
  /**
4
4
  @internal
@@ -1,6 +1,6 @@
1
- import { E as d, L as y, h as b, a as _, p as g, e as u, s as S, i as T, f as k, j as W, t } from "./index-DtSoIucr.js";
2
- import { html as j } from "./index-CXjoTXWO.js";
3
- import { L as X, E as p } from "./index-D_eg_k-b.js";
1
+ import { E as d, L as y, h as b, a as _, p as g, e as u, s as S, i as T, f as k, j as W, t } from "./index-BjbDo-BN.js";
2
+ import { html as j } from "./index-x_CknZJ4.js";
3
+ import { L as X, E as p } from "./index-13QCr6ei.js";
4
4
  const Y = 1, U = 2, G = 3, R = 179, z = 4, v = 180, x = 5, Z = 181, V = 6;
5
5
  function E(O) {
6
6
  return O >= 65 && O <= 90 || O >= 97 && O <= 122;
@@ -1,7 +1,7 @@
1
- import { a as p, L as u, p as n, s as l, t as e } from "./index-DtSoIucr.js";
2
- import { html as m } from "./index-CXjoTXWO.js";
3
- import { javascriptLanguage as b } from "./index-CIrG9_dY.js";
4
- import { L as S, a as r } from "./index-D_eg_k-b.js";
1
+ import { a as p, L as u, p as n, s as l, t as e } from "./index-BjbDo-BN.js";
2
+ import { html as m } from "./index-x_CknZJ4.js";
3
+ import { javascriptLanguage as b } from "./index-Ci9slz4U.js";
4
+ import { L as S, a as r } from "./index-13QCr6ei.js";
5
5
  const c = /* @__PURE__ */ S.deserialize({
6
6
  version: 14,
7
7
  states: "%pOVOWOOObQPOOOpOSO'#C_OOOO'#Cp'#CpQVOWOOQxQPOOO!TQQOOQ!YQPOOOOOO,58y,58yO!_OSO,58yOOOO-E6n-E6nO!dQQO'#CqQ{QPOOO!iQPOOQ{QPOOO!qQPOOOOOO1G.e1G.eOOQO,59],59]OOQO-E6o-E6oO!yOpO'#CiO#RO`O'#CiQOQPOOO#ZO#tO'#CmO#fO!bO'#CmOOQO,59T,59TO#qOpO,59TO#vO`O,59TOOOO'#Cr'#CrO#{O#tO,59XOOQO,59X,59XOOOO'#Cs'#CsO$WO!bO,59XOOQO1G.o1G.oOOOO-E6p-E6pOOQO1G.s1G.sOOOO-E6q-E6q",
@@ -1,6 +1,6 @@
1
- import { L as V, E as X } from "./index-D_eg_k-b.js";
2
- import { s as d, t as $, a as Z, L as R, p as s, i as t, f as y, c, j as U, g as l } from "./index-DtSoIucr.js";
3
- import { html as w } from "./index-CXjoTXWO.js";
1
+ import { L as V, E as X } from "./index-13QCr6ei.js";
2
+ import { s as d, t as $, a as Z, L as R, p as s, i as t, f as y, c, j as U, g as l } from "./index-BjbDo-BN.js";
3
+ import { html as w } from "./index-x_CknZJ4.js";
4
4
  const W = 1, p = 2, q = 275, u = 3, b = 276, _ = 277, f = 278, k = 4, m = 5, G = 6, x = 7, z = 8, h = 9, g = 10, v = 11, j = 12, E = 13, I = 14, N = 15, L = 16, F = 17, C = 18, H = 19, A = 20, K = 21, D = 22, B = 23, M = 24, J = 25, OO = 26, $O = 27, QO = 28, iO = 29, aO = 30, TO = 31, PO = 32, XO = 33, SO = 34, cO = 35, eO = 36, oO = 37, _O = 38, zO = 39, nO = 40, rO = 41, YO = 42, VO = 43, dO = 44, ZO = 45, RO = 46, sO = 47, tO = 48, yO = 49, UO = 50, lO = 51, wO = 52, WO = 53, pO = 54, qO = 55, uO = 56, bO = 57, fO = 58, kO = 59, mO = 60, GO = 61, xO = 62, e = 63, hO = 64, gO = 65, vO = 66, jO = {
5
5
  abstract: k,
6
6
  and: m,
@@ -1,5 +1,5 @@
1
- import { L as s, E as R, a as Y, C as x } from "./index-D_eg_k-b.js";
2
- import { s as w, t as O, a as d, n as X, L as k, b as h, d as f, i as u, f as y, c as l, j as g, m as j, g as U, e as G, o as b, I as Z } from "./index-DtSoIucr.js";
1
+ import { L as s, E as R, a as Y, C as x } from "./index-13QCr6ei.js";
2
+ import { s as w, t as O, a as d, n as X, L as k, b as h, d as f, i as u, f as y, c as l, j as g, m as j, g as U, e as G, o as b, I as Z } from "./index-BjbDo-BN.js";
3
3
  const _ = 177, q = 179, E = 184, v = 12, C = 13, D = 17, z = 20, F = 25, B = 53, N = 95, I = 142, L = 144, A = 145, J = 148, M = 10, H = 13, K = 32, OO = 9, $ = 47, QO = 41, eO = 125, aO = new R((Q, e) => {
4
4
  for (let n = 0, a = Q.next; (e.context && (a < 0 || a == M || a == H || a == $ && Q.peek(n + 1) == $) || a == QO || a == eO) && Q.acceptToken(_), !(a != K && a != OO); )
5
5
  a = Q.peek(++n);
@@ -1,5 +1,5 @@
1
- import { L as G, E as A, C as N } from "./index-D_eg_k-b.js";
2
- import { s as I, t as p, E as Y, a as j, L as U, e as k, h as Z, i as B, f as D, H as M } from "./index-DtSoIucr.js";
1
+ import { L as G, E as A, C as N } from "./index-13QCr6ei.js";
2
+ import { s as I, t as p, E as Y, a as j, L as U, e as k, h as Z, i as B, f as D, H as M } from "./index-BjbDo-BN.js";
3
3
  const h = 1, F = 2, L = 3, H = 4, K = 5, J = 36, ee = 37, te = 38, Oe = 11, oe = 13;
4
4
  function re(e) {
5
5
  return e == 45 || e == 46 || e == 58 || e >= 65 && e <= 90 || e == 95 || e >= 97 && e <= 122 || e >= 161;