@abyss-project/commons-front-core 3.0.0 → 3.1.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 (125) hide show
  1. package/dist/{CookieConsentSettings.component-CgiQCgFX.js → CookieConsentSettings.component-CSf_M5Gx.js} +505 -443
  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/CompanySearchAutocomplete/CompanySearchAutocomplete.d.ts +25 -0
  9. package/dist/components/CompanySearchAutocomplete/CompanySearchAutocomplete.error.spec.d.ts +1 -0
  10. package/dist/components/CompanySearchAutocomplete/index.d.ts +2 -0
  11. package/dist/components/CookieConsent/AbyssCookieConsentProvider.d.ts +9 -0
  12. package/dist/components/CookieConsent/privacy-link.constant.d.ts +25 -0
  13. package/dist/components/Data/AbyssTable/AbyssTable.component.d.ts +16 -2
  14. package/dist/components/Data/AbyssTable/abyss-table.logic.d.ts +72 -0
  15. package/dist/components/Inputs/AbyssNumberField/AbyssNumberField.component.d.ts +18 -0
  16. package/dist/components/Inputs/AbyssNumberField/format.d.ts +28 -0
  17. package/dist/components/Inputs/CloudImport/CloudImport.component.d.ts +1 -0
  18. package/dist/components/Inputs/ColorPalette/ColorPalette.component.d.ts +2 -0
  19. package/dist/components/Inputs/ContextSelector/ContextSelector.component.d.ts +25 -0
  20. package/dist/components/Inputs/DatePeriodPicker/DatePeriodPicker.component.d.ts +32 -0
  21. package/dist/components/Inputs/DatePeriodPicker/date-period-picker.logic.d.ts +54 -0
  22. package/dist/components/Inputs/DatePeriodPicker/date-period-presets.util.d.ts +8 -0
  23. package/dist/components/Inputs/LanguageFlagLabel/LanguageFlagLabel.component.d.ts +13 -0
  24. package/dist/components/Inputs/LanguageFlagLabel/language-flags.d.ts +10 -0
  25. package/dist/components/Inputs/PasswordInput/PasswordInput.component.d.ts +16 -0
  26. package/dist/components/Inputs/ProjectLinkSelector/index.d.ts +1 -1
  27. package/dist/components/Layouts/AbyssBillingPlan/AbyssBillingPlan.component.d.ts +2 -0
  28. package/dist/components/Layouts/AbyssFamilyBanner/AbyssFamilyBanner.component.d.ts +12 -0
  29. package/dist/components/Layouts/AbyssLayoutProvider/index.d.ts +1 -1
  30. package/dist/components/Layouts/AbyssSidebar/index.d.ts +2 -2
  31. package/dist/components/Modals/AbyssModal/AbyssModal.component.d.ts +6 -0
  32. package/dist/components/Modals/QRCodeModal/QRCodeModal.component.d.ts +1 -0
  33. package/dist/components/Modals/UserSettingsModal/UserSettingsModal.component.d.ts +5 -0
  34. package/dist/components/Modals/UserSettingsModal/index.d.ts +1 -1
  35. package/dist/components/PdfEditor/hooks/use-pdf-document.d.ts +12 -0
  36. package/dist/components/PdfEditor/hooks/use-uploaded-docs.d.ts +9 -0
  37. package/dist/components/PdfEditor/operations/actions.d.ts +14 -0
  38. package/dist/components/PdfEditor/operations/compute-page-order.d.ts +11 -0
  39. package/dist/components/PdfEditor/operations/extract.d.ts +5 -0
  40. package/dist/components/PdfEditor/operations/pdf-data-url.d.ts +4 -0
  41. package/dist/components/PdfEditor/operations/rasterize.d.ts +17 -0
  42. package/dist/components/PdfEditor/operations/redact.d.ts +8 -0
  43. package/dist/components/PdfEditor/operations/rotate-coords.d.ts +25 -0
  44. package/dist/components/PdfEditor/signature/SignaturePicker.d.ts +3 -0
  45. package/dist/components/PdfEditor/signature/SignatureSaveButton.d.ts +3 -0
  46. package/dist/components/PdfEditor/signature/resolve-asset.d.ts +17 -0
  47. package/dist/components/PdfEditor/tools/RedactTool.d.ts +6 -0
  48. package/dist/components/PdfEditor/tools/Toolbar.d.ts +9 -0
  49. package/dist/components/PdfEditor/tools/tool-options-ui.d.ts +1 -0
  50. package/dist/components/PdfEditor/types.d.ts +85 -0
  51. package/dist/components/PdfEditor/viewer/PageOverlay.d.ts +10 -0
  52. package/dist/components/PdfEditor/viewer/PdfCanvas.d.ts +1 -0
  53. package/dist/components/PdfEditor/viewer/ViewerControls.d.ts +4 -0
  54. package/dist/components/QuotaGauge/AbyssQuotaGauge.component.d.ts +39 -0
  55. package/dist/components/QuotaGauge/bubble-placement.d.ts +40 -0
  56. package/dist/components/QuotaGauge/gauge-segments.d.ts +56 -0
  57. package/dist/components/QuotaOffer/AbyssQuotaOffer.component.d.ts +60 -0
  58. package/dist/components/QuotaOffer/quota-offer-state.d.ts +64 -0
  59. package/dist/components/QuotaReached/QuotaReachedDialog.component.d.ts +10 -0
  60. package/dist/components/QuotaReached/billing-quota-error.d.ts +7 -0
  61. package/dist/components/QuotaReached/quota-dialog.store.d.ts +10 -0
  62. package/dist/components/QuotaReached/quota-service-meta.d.ts +4 -0
  63. package/dist/components/Support/SupportCategorySelect.component.d.ts +3 -0
  64. package/dist/components/Support/SupportStatusTimeline.component.d.ts +2 -0
  65. package/dist/components/Support/index.d.ts +2 -2
  66. package/dist/components/Support/support-attachment.logic.d.ts +10 -0
  67. package/dist/components/Support/support-author.logic.d.ts +9 -0
  68. package/dist/components/Support/support-create-stepper.logic.d.ts +13 -0
  69. package/dist/components/Support/support-message-input.logic.d.ts +8 -0
  70. package/dist/components/Support/support-status-timeline.logic.d.ts +16 -0
  71. package/dist/components/Support/types.d.ts +55 -0
  72. package/dist/components/Utils/AbyssBackground/AbyssBackground.component.d.ts +3 -0
  73. package/dist/components/Utils/AbyssFamilyMenuSection/AbyssFamilyMenuSection.d.ts +9 -0
  74. package/dist/components/Utils/AbyssLayoutMenu/index.d.ts +1 -1
  75. package/dist/components/Utils/AbyssLayoutNotifications/AbyssLayoutNotifications.component.d.ts +4 -0
  76. package/dist/components/Utils/AbyssLayoutNotifications/index.d.ts +1 -1
  77. package/dist/components/Utils/ImportButton/ImportButton.component.d.ts +4 -0
  78. package/dist/components/Utils/Toast/AbyssToast.component.d.ts +6 -0
  79. package/dist/components/Utils/WaterParticles/WaterParticles.component.d.ts +8 -0
  80. package/dist/components/index.d.ts +1 -0
  81. package/dist/cookie-consent.js +1 -1
  82. package/dist/hooks/use-public-users.hook.d.ts +39 -0
  83. package/dist/hooks/use-rich-intl.hook.d.ts +27 -5
  84. package/dist/hooks/use-theme-transition.hook.d.ts +13 -0
  85. package/dist/{index-D2ot8DZ4.js → index-6vOdokCY.js} +2 -2
  86. package/dist/{index-cYFrJDdQ.js → index-AUELqW5Y.js} +4 -4
  87. package/dist/{index-DXDfaFmT.js → index-AwC_8lIT.js} +4 -4
  88. package/dist/{index-BN-71mBQ.js → index-B7EugME7.js} +2 -2
  89. package/dist/{index-0WPkkm3C.js → index-BOqcEEHH.js} +3 -3
  90. package/dist/{index-Ctm2mN4b.js → index-BSRrH_Gr.js} +2 -2
  91. package/dist/{index-DpeaEf87.js → index-BToZYvup.js} +2 -2
  92. package/dist/{index-CgqzFzYH.js → index-BlCa_Vlr.js} +2 -2
  93. package/dist/{index-FF8J68dM.js → index-BoYupKIh.js} +23908 -20833
  94. package/dist/{index-2gSMCEyX.js → index-BtiGEZHC.js} +3 -3
  95. package/dist/{index-d9VwJ6nR.js → index-C2a_Y6jF.js} +2 -2
  96. package/dist/{index-C7bGgD6e.js → index-CCphPqf4.js} +2 -2
  97. package/dist/{index-CdpydxgB.js → index-CD9GifGt.js} +2 -2
  98. package/dist/{index-BSa7pbNq.js → index-CDWityvJ.js} +3 -3
  99. package/dist/{index-CAqpnDEx.js → index-CFVsaKv5.js} +4 -4
  100. package/dist/{index-C1NWZqnA.js → index-CtSA_KxY.js} +2 -2
  101. package/dist/{index-C02uLNDS.js → index-D7WU-N9n.js} +2 -2
  102. package/dist/{index-D5IIOkfu.js → index-DUGpZohv.js} +2 -2
  103. package/dist/{index-BqjTmumL.js → index-DrHXb1cg.js} +2 -2
  104. package/dist/{index-B9n8aGer.js → index-GhkzA3Z-.js} +2 -2
  105. package/dist/{index-CXNLGqpN.js → index-RBcLmJfD.js} +1 -1
  106. package/dist/{index-DQgswKg1.js → index-iw6ikhdy.js} +3 -3
  107. package/dist/index.js +185 -184
  108. package/dist/theme/augmentation.d.ts +6 -0
  109. package/dist/theme/index.d.ts +11 -4
  110. package/dist/theme/palettes/common.d.ts +13 -0
  111. package/dist/theme/palettes/dark.d.ts +1 -0
  112. package/dist/theme/palettes/light.d.ts +1 -0
  113. package/dist/theme/tokens/animations.d.ts +3 -0
  114. package/dist/theme/tokens/borders.d.ts +3 -0
  115. package/dist/theme/tokens/colors.d.ts +27 -0
  116. package/dist/theme/tokens/shadows.d.ts +8 -0
  117. package/dist/theme/tokens/transitions.d.ts +4 -0
  118. package/dist/theme/tokens/typography.d.ts +6 -0
  119. package/dist/translations/en.d.ts +3 -0
  120. package/dist/translations/fr.d.ts +3 -0
  121. package/dist/utils/share-notification.utils.d.ts +9 -0
  122. package/dist/utils/space-display-name.utils.d.ts +8 -0
  123. package/package.json +14 -13
  124. package/tsconfig.json +26 -25
  125. package/vite.config.ts +1 -17
@@ -2,6 +2,8 @@ import { default as React } from 'react';
2
2
  import { SupportTicketStatus } from '@abyss-project/main';
3
3
  interface SupportStatusTimelineProps {
4
4
  status: SupportTicketStatus;
5
+ /** Exact current-status label, rendered verbatim above the rail so divergent
6
+ * states (waiting/escalated/archived) stay precise. */
5
7
  currentStatusLabel: string;
6
8
  }
7
9
  export declare const SupportStatusTimeline: React.FC<SupportStatusTimelineProps>;
@@ -10,9 +10,9 @@ export { SupportActivityLog } from './SupportActivityLog.component';
10
10
  export { SupportAttachmentsPanel } from './SupportAttachmentsPanel.component';
11
11
  export { SupportSidebar } from './SupportSidebar.component';
12
12
  export { SupportTicketDetail } from './SupportTicketDetail.component';
13
- export { SupportCategoryChip, getCategoryGroup, getCategoryConfig } from './SupportCategoryChip.component';
13
+ export { SupportCategoryChip, getCategoryGroup, getCategoryConfig, } from './SupportCategoryChip.component';
14
14
  export { SupportCategorySelect } from './SupportCategorySelect.component';
15
15
  export { SupportTopBar } from './SupportTopBar.component';
16
16
  export { SupportCategoryGroupCards } from './SupportCategoryGroupCards.component';
17
17
  export { SupportTicketCreateStepper } from './SupportTicketCreateStepper.component';
18
- export { AbyssServiceSelect, AbyssServiceSingleSelect, AbyssServiceChip, SERVICE_CONFIG as ABYSS_SERVICE_CONFIG, getServiceConfig } from './AbyssServiceSelect.component';
18
+ export { AbyssServiceSelect, AbyssServiceSingleSelect, AbyssServiceChip, SERVICE_CONFIG as ABYSS_SERVICE_CONFIG, getServiceConfig, } from './AbyssServiceSelect.component';
@@ -1,2 +1,12 @@
1
+ /**
2
+ * Pure helpers for support ticket attachment presentation. Kept separate from
3
+ * the React component so the "can this be opened inline?" decision is unit
4
+ * testable in the node-env runner.
5
+ */
6
+ /** True when the mime type renders as an image. */
1
7
  export declare const isImageAttachment: (mimeType: string) => boolean;
8
+ /**
9
+ * True when the attachment can be opened in a new browser tab and rendered
10
+ * inline — images and PDFs. Other types only offer download.
11
+ */
2
12
  export declare const isViewableAttachment: (mimeType: string) => boolean;
@@ -1,3 +1,12 @@
1
+ /**
2
+ * Resolves the display alias for a support ticket/message author.
3
+ *
4
+ * Never has access to the raw userId — by construction the caller cannot
5
+ * pass a UUID through this function, so it can never leak one. When neither
6
+ * the batched public-user alias nor the entity's own alias is usable
7
+ * (missing, empty, or whitespace-only), it returns `null` so the caller
8
+ * falls back to a translated "unknown user" label instead of the id.
9
+ */
1
10
  export interface AuthorIdentitySource {
2
11
  alias?: string | null;
3
12
  }
@@ -1,2 +1,15 @@
1
+ /**
2
+ * Pure logic for the support create stepper's form-submission guard.
3
+ *
4
+ * The stepper is a single <form>, so an Enter press in a single-line field
5
+ * triggers implicit form submission. Without a guard that would create the
6
+ * ticket immediately, skipping the remaining steps (priority + attachments).
7
+ * The form's onSubmit consults this to decide whether an Enter/submit should
8
+ * actually create the ticket or just advance to the next step.
9
+ */
1
10
  export type SupportCreateSubmitIntent = 'submit' | 'advance';
11
+ /**
12
+ * Decide what a form-submit event means for the create stepper: only the last
13
+ * step actually creates the ticket; any earlier step advances instead.
14
+ */
2
15
  export declare const resolveCreateSubmitIntent: (isLastStep: boolean) => SupportCreateSubmitIntent;
@@ -1,3 +1,11 @@
1
+ /**
2
+ * Decides whether a keydown event on the support message input should
3
+ * trigger sending the message.
4
+ *
5
+ * Plain Enter never sends — it lets the multiline TextField insert a
6
+ * newline naturally. Sending only fires on Enter combined with Ctrl or
7
+ * Cmd (meta), mirroring the common "Ctrl/Cmd+Enter to send" convention.
8
+ */
1
9
  export interface SendOnKeyDownEvent {
2
10
  key: string;
3
11
  ctrlKey: boolean;
@@ -1,9 +1,25 @@
1
1
  import { SupportTicketStatus } from '@abyss-project/main';
2
+ /**
3
+ * Pure lifecycle-timeline logic for a support ticket's status. Kept separate
4
+ * from the React component so the phase mapping and the divergent-state accent
5
+ * can be unit-tested in the node-env test runner (no DOM).
6
+ */
2
7
  export type SupportTimelinePhaseKey = 'open' | 'in-progress' | 'resolved' | 'closed';
8
+ /**
9
+ * The four canonical lifecycle phases, in order. Divergent statuses
10
+ * (WAITING, ESCALATED) collapse onto the "in-progress" phase; ARCHIVED onto
11
+ * "closed". The exact status is surfaced verbatim elsewhere, so collapsing
12
+ * them loses no information.
13
+ */
3
14
  export declare const SUPPORT_TIMELINE_STEPS: ReadonlyArray<{
4
15
  key: SupportTimelinePhaseKey;
5
16
  statuses: readonly SupportTicketStatus[];
6
17
  }>;
18
+ /**
19
+ * Index (0-3) of the active phase for a given status. Unknown/unmapped values
20
+ * fall back to the first phase rather than -1, so the rail always renders.
21
+ */
7
22
  export declare const supportStatusStepIndex: (status: SupportTicketStatus) => number;
23
+ /** Semantic accent kind for the active node, driven by the exact status. */
8
24
  export type SupportTimelineAccentKind = 'error' | 'warning' | 'muted' | 'brand';
9
25
  export declare const supportStatusAccentKind: (status: SupportTicketStatus) => SupportTimelineAccentKind;
@@ -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>;
@@ -4,6 +4,7 @@ export * from './Cards';
4
4
  export * from './Charts';
5
5
  export * from './Chips';
6
6
  export * from './CommandPalette';
7
+ export * from './CompanySearchAutocomplete';
7
8
  export * from './CookieConsent';
8
9
  export * from './Data';
9
10
  export * from './InfoBox';
@@ -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-CgiQCgFX.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-CSf_M5Gx.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;
@@ -226,6 +230,10 @@ export declare const translations: {
226
230
  title: string;
227
231
  content: string;
228
232
  };
233
+ "internal-ticket-follower-added": {
234
+ title: string;
235
+ content: string;
236
+ };
229
237
  };
230
238
  };
231
239
  };
@@ -1212,6 +1220,9 @@ export declare const translations: {
1212
1220
  'open-button-tooltip': string;
1213
1221
  };
1214
1222
  };
1223
+ 'company-search-autocomplete': {
1224
+ error: string;
1225
+ };
1215
1226
  family: {
1216
1227
  banner: {
1217
1228
  'no-family': string;
@@ -1662,6 +1673,10 @@ export declare const translations: {
1662
1673
  title: string;
1663
1674
  content: string;
1664
1675
  };
1676
+ "external-identity-candidate-named": {
1677
+ title: string;
1678
+ content: string;
1679
+ };
1665
1680
  "internal-ticket-section-without-agents": {
1666
1681
  title: string;
1667
1682
  content: string;
@@ -1682,6 +1697,10 @@ export declare const translations: {
1682
1697
  title: string;
1683
1698
  content: string;
1684
1699
  };
1700
+ "internal-ticket-follower-added": {
1701
+ title: string;
1702
+ content: string;
1703
+ };
1685
1704
  };
1686
1705
  };
1687
1706
  };
@@ -2668,6 +2687,9 @@ export declare const translations: {
2668
2687
  'open-button-tooltip': string;
2669
2688
  };
2670
2689
  };
2690
+ 'company-search-autocomplete': {
2691
+ error: string;
2692
+ };
2671
2693
  support: {
2672
2694
  status: {
2673
2695
  OPEN: string;
@@ -2922,11 +2944,11 @@ export declare const flattenTranslations: {
2922
2944
  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
2945
  export type ExistingTranslationKey = FlattenObjectKeys<(typeof translations)[UserLanguage.FRENCH]>;
2924
2946
  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;
2947
+ break: import("react/jsx-runtime").JSX.Element;
2948
+ bold: (...chunks: ReactNode[]) => import("react/jsx-runtime").JSX.Element;
2949
+ italic: (...chunks: ReactNode[]) => import("react/jsx-runtime").JSX.Element;
2950
+ primary: (...chunks: ReactNode[]) => import("react/jsx-runtime").JSX.Element;
2951
+ focus: (...chunks: ReactNode[]) => import("react/jsx-runtime").JSX.Element;
2930
2952
  };
2931
2953
  export type ExistingMessageDescriptor = {
2932
2954
  [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,5 +1,5 @@
1
- import { L as G, E as A, C as N } from "./index-CXNLGqpN.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-FF8J68dM.js";
1
+ import { L as G, E as A, C as N } from "./index-RBcLmJfD.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-BoYupKIh.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;
@@ -1,7 +1,7 @@
1
- import { L as be, E as $, C as Pe } from "./index-CXNLGqpN.js";
2
- import { p as xe, s as Te, t as h, E as Ve, a as we, L as ye, e as K, h as ve, i as Xe, f as ke, H as $e } from "./index-FF8J68dM.js";
3
- import { cssLanguage as J, css as _e } from "./index-DpeaEf87.js";
4
- import { typescriptLanguage as qe, jsxLanguage as Ce, tsxLanguage as Qe, javascriptLanguage as R, javascript as Ae } from "./index-B9n8aGer.js";
1
+ import { L as be, E as $, C as Pe } from "./index-RBcLmJfD.js";
2
+ import { p as xe, s as Te, t as h, E as Ve, a as we, L as ye, e as K, h as ve, i as Xe, f as ke, H as $e } from "./index-BoYupKIh.js";
3
+ import { cssLanguage as J, css as _e } from "./index-BToZYvup.js";
4
+ import { typescriptLanguage as qe, jsxLanguage as Ce, tsxLanguage as Qe, javascriptLanguage as R, javascript as Ae } from "./index-GhkzA3Z-.js";
5
5
  const Ye = 54, Me = 1, Re = 55, Ee = 2, Ze = 56, Be = 3, z = 4, ze = 5, X = 6, ee = 7, te = 8, ae = 9, le = 10, We = 11, De = 12, Ne = 13, _ = 57, Ge = 14, W = 58, re = 20, Ie = 22, ne = 23, je = 24, Y = 26, se = 27, Ue = 28, Le = 31, Fe = 34, He = 36, Ke = 37, Je = 0, et = 1, tt = {
6
6
  area: !0,
7
7
  base: !0,
@@ -1,7 +1,7 @@
1
- import { a as p, L as u, p as n, s as l, t as e } from "./index-FF8J68dM.js";
2
- import { html as m } from "./index-cYFrJDdQ.js";
3
- import { javascriptLanguage as b } from "./index-B9n8aGer.js";
4
- import { L as S, a as r } from "./index-CXNLGqpN.js";
1
+ import { a as p, L as u, p as n, s as l, t as e } from "./index-BoYupKIh.js";
2
+ import { html as m } from "./index-AUELqW5Y.js";
3
+ import { javascriptLanguage as b } from "./index-GhkzA3Z-.js";
4
+ import { L as S, a as r } from "./index-RBcLmJfD.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,5 +1,5 @@
1
- import { L as s } from "./index-CXNLGqpN.js";
2
- import { s as n, t as r, a as o, L as P, i as Q, f as i, c as a, g as c } from "./index-FF8J68dM.js";
1
+ import { L as s } from "./index-RBcLmJfD.js";
2
+ import { s as n, t as r, a as o, L as P, i as Q, f as i, c as a, g as c } from "./index-BoYupKIh.js";
3
3
  const g = n({
4
4
  String: r.string,
5
5
  Number: r.number,
@@ -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-FF8J68dM.js";
2
- import { html as j } from "./index-cYFrJDdQ.js";
3
- import { L as X, E as p } from "./index-CXNLGqpN.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-BoYupKIh.js";
2
+ import { html as j } from "./index-AUELqW5Y.js";
3
+ import { L as X, E as p } from "./index-RBcLmJfD.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,5 +1,5 @@
1
- import { a as O, L as r, i as b, f as s, s as a, j as t, g as P, t as e } from "./index-FF8J68dM.js";
2
- import { L as n } from "./index-CXNLGqpN.js";
1
+ import { a as O, L as r, i as b, f as s, s as a, j as t, g as P, t as e } from "./index-BoYupKIh.js";
2
+ import { L as n } from "./index-RBcLmJfD.js";
3
3
  const S = { __proto__: null, anyref: 34, dataref: 34, eqref: 34, externref: 34, i31ref: 34, funcref: 34, i8: 34, i16: 34, i32: 34, i64: 34, f32: 34, f64: 34 }, i = /* @__PURE__ */ n.deserialize({
4
4
  version: 14,
5
5
  states: "!^Q]QPOOOqQPO'#CbOOQO'#Cd'#CdOOQO'#Cl'#ClOOQO'#Ch'#ChQ]QPOOOOQO,58|,58|OxQPO,58|OOQO-E6f-E6fOOQO1G.h1G.h",
@@ -1,5 +1,5 @@
1
- import { L as w, E as p, a as Y } from "./index-CXNLGqpN.js";
2
- import { s as x, t as r, a as q, L as j, e as G, i as R, f as T, c as E, g as _, o as C, I as U } from "./index-FF8J68dM.js";
1
+ import { L as w, E as p, a as Y } from "./index-RBcLmJfD.js";
2
+ import { s as x, t as r, a as q, L as j, e as G, i as R, f as T, c as E, g as _, o as C, I as U } from "./index-BoYupKIh.js";
3
3
  const V = 122, g = 1, Z = 123, W = 124, b = 2, N = 125, I = 3, F = 4, X = [
4
4
  9,
5
5
  10,
@@ -1,5 +1,5 @@
1
- import { L as D, E as h, C as L } from "./index-CXNLGqpN.js";
2
- import { s as H, t as n, b as B, a as K, L as M, e as OO, i as eO, f as iO, j as f, g as aO, o as nO, I as rO, d as QO, n as d } from "./index-FF8J68dM.js";
1
+ import { L as D, E as h, C as L } from "./index-RBcLmJfD.js";
2
+ import { s as H, t as n, b as B, a as K, L as M, e as OO, i as eO, f as iO, j as f, g as aO, o as nO, I as rO, d as QO, n as d } from "./index-BoYupKIh.js";
3
3
  const tO = 1, Z = 194, j = 195, oO = 196, x = 197, dO = 198, sO = 199, lO = 200, TO = 2, E = 3, u = 201, SO = 24, pO = 25, qO = 49, gO = 50, PO = 55, mO = 56, $O = 57, hO = 59, cO = 60, fO = 61, XO = 62, yO = 63, zO = 65, WO = 238, vO = 71, RO = 241, kO = 242, _O = 243, xO = 244, uO = 245, UO = 246, bO = 247, VO = 248, Y = 72, GO = 249, wO = 250, ZO = 251, jO = 252, EO = 253, YO = 254, FO = 255, CO = 256, JO = 73, AO = 77, IO = 263, NO = 112, DO = 130, LO = 151, HO = 152, BO = 155, p = 10, q = 13, k = 32, c = 9, _ = 35, KO = 40, MO = 46, R = 123, U = 125, F = 39, C = 34, b = 92, Oe = 111, ee = 120, ie = 78, ae = 117, ne = 85, re = /* @__PURE__ */ new Set([
4
4
  pO,
5
5
  qO,