@carlonicora/nextjs-jsonapi 3.23.0 → 3.24.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 (93) hide show
  1. package/dist/{AssistantMessageInterface-CuaMDs2i.d.ts → AssistantMessageInterface-1Kbz8RVs.d.ts} +34 -1
  2. package/dist/{AssistantMessageInterface-Du3ShThp.d.mts → AssistantMessageInterface-CoxJyuFM.d.mts} +34 -1
  3. package/dist/{BlockNoteEditor-BUSOUPQ7.js → BlockNoteEditor-PTD2V4CH.js} +19 -19
  4. package/dist/{BlockNoteEditor-BUSOUPQ7.js.map → BlockNoteEditor-PTD2V4CH.js.map} +1 -1
  5. package/dist/{BlockNoteEditor-W42IQTGL.mjs → BlockNoteEditor-Q2WEDMKJ.mjs} +4 -4
  6. package/dist/{BlockNoteViewer-FQ23TZ3J.mjs → BlockNoteViewer-WO6GTDSI.mjs} +2 -2
  7. package/dist/{BlockNoteViewer-MCX53AR4.js → BlockNoteViewer-WOXEJ6RM.js} +3 -3
  8. package/dist/{BlockNoteViewer-MCX53AR4.js.map → BlockNoteViewer-WOXEJ6RM.js.map} +1 -1
  9. package/dist/billing/index.js +401 -401
  10. package/dist/billing/index.mjs +3 -3
  11. package/dist/{chunk-O5MKEU7G.mjs → chunk-2O3SFHQ7.mjs} +36 -38
  12. package/dist/{chunk-O5MKEU7G.mjs.map → chunk-2O3SFHQ7.mjs.map} +1 -1
  13. package/dist/{chunk-FXWO5J2R.js → chunk-3D2MCVRZ.js} +7 -7
  14. package/dist/{chunk-FXWO5J2R.js.map → chunk-3D2MCVRZ.js.map} +1 -1
  15. package/dist/{chunk-VR65NRE4.js → chunk-3YJF7QY4.js} +1338 -1115
  16. package/dist/chunk-3YJF7QY4.js.map +1 -0
  17. package/dist/{chunk-GFLEFIAW.mjs → chunk-GJHKOG5L.mjs} +1399 -1176
  18. package/dist/chunk-GJHKOG5L.mjs.map +1 -0
  19. package/dist/{chunk-JZUBFAAY.mjs → chunk-HAI7G6MD.mjs} +2 -2
  20. package/dist/{chunk-YCHPWXHD.js → chunk-IV4DTYXN.js} +36 -38
  21. package/dist/chunk-IV4DTYXN.js.map +1 -0
  22. package/dist/client/index.d.mts +13 -2
  23. package/dist/client/index.d.ts +13 -2
  24. package/dist/client/index.js +4 -4
  25. package/dist/client/index.mjs +3 -3
  26. package/dist/components/index.d.mts +87 -28
  27. package/dist/components/index.d.ts +87 -28
  28. package/dist/components/index.js +8 -4
  29. package/dist/components/index.js.map +1 -1
  30. package/dist/components/index.mjs +7 -3
  31. package/dist/contexts/index.d.mts +11 -2
  32. package/dist/contexts/index.d.ts +11 -2
  33. package/dist/contexts/index.js +4 -4
  34. package/dist/contexts/index.mjs +3 -3
  35. package/dist/core/index.d.mts +27 -5
  36. package/dist/core/index.d.ts +27 -5
  37. package/dist/core/index.js +2 -2
  38. package/dist/core/index.mjs +1 -1
  39. package/dist/features/help/index.js +37 -37
  40. package/dist/features/help/index.mjs +3 -3
  41. package/dist/features/tokenusage/index.js +101 -101
  42. package/dist/features/tokenusage/index.mjs +3 -3
  43. package/dist/index.d.mts +2 -3
  44. package/dist/index.d.ts +2 -3
  45. package/dist/index.js +3 -3
  46. package/dist/index.mjs +2 -2
  47. package/dist/{oauth.interface-CD90ycYz.d.ts → oauth.interface-BZKZAPRw.d.ts} +8 -1
  48. package/dist/{oauth.interface-DRE3NAKc.d.mts → oauth.interface-nVwnzxJw.d.mts} +8 -1
  49. package/dist/server/index.js +3 -3
  50. package/dist/server/index.mjs +1 -1
  51. package/package.json +1 -1
  52. package/src/components/forms/__tests__/EditorSheet.test.tsx +5 -3
  53. package/src/core/utils/__tests__/translateResponse.test.ts +3 -1
  54. package/src/features/assistant/components/containers/AssistantContainer.tsx +105 -36
  55. package/src/features/assistant/components/containers/__tests__/AssistantContainer.spec.tsx +163 -1
  56. package/src/features/assistant/components/parts/AssistantComposer.tsx +38 -15
  57. package/src/features/assistant/components/parts/AssistantEmptyState.tsx +5 -3
  58. package/src/features/assistant/components/parts/AssistantSidebar.tsx +26 -7
  59. package/src/features/assistant/components/parts/__tests__/AssistantComposer.spec.tsx +8 -0
  60. package/src/features/assistant/components/parts/__tests__/AssistantSidebar.spec.tsx +7 -0
  61. package/src/features/assistant/contexts/AssistantContext.tsx +91 -7
  62. package/src/features/assistant/contexts/__tests__/AssistantContext.spec.tsx +196 -0
  63. package/src/features/assistant-action/components/AssistantContainerWithApprovals.tsx +23 -1
  64. package/src/features/assistant-message/components/EntityMentionLink.tsx +28 -0
  65. package/src/features/assistant-message/components/__tests__/EntityMentionLink.spec.tsx +58 -0
  66. package/src/features/assistant-message/components/index.ts +1 -0
  67. package/src/features/assistant-message/components/parts/tabs/ContentsTab.tsx +1 -1
  68. package/src/features/assistant-message/components/parts/tabs/ReferencesTab.tsx +2 -2
  69. package/src/features/auth/components/forms/__tests__/Logout.spec.tsx +3 -2
  70. package/src/features/oauth/components/OAuthClientForm.tsx +21 -4
  71. package/src/features/oauth/components/__tests__/OAuthClientForm.spec.tsx +63 -0
  72. package/src/features/oauth/components/consent/OAuthCompanySelector.tsx +54 -0
  73. package/src/features/oauth/components/consent/OAuthConsentActions.tsx +5 -2
  74. package/src/features/oauth/components/consent/OAuthConsentHeader.tsx +10 -6
  75. package/src/features/oauth/components/consent/OAuthConsentScreen.tsx +33 -13
  76. package/src/features/oauth/components/consent/OAuthScopeList.tsx +4 -1
  77. package/src/features/oauth/components/consent/__tests__/OAuthConsentHeader.spec.tsx +25 -0
  78. package/src/features/oauth/components/consent/__tests__/OAuthConsentScreen.spec.tsx +126 -0
  79. package/src/features/oauth/components/consent/index.ts +1 -0
  80. package/src/features/oauth/data/__tests__/oauth.service.spec.ts +103 -0
  81. package/src/features/oauth/data/oauth.service.ts +3 -13
  82. package/src/features/oauth/data/oauth.ts +30 -1
  83. package/src/features/oauth/hooks/useOAuthConsent.ts +34 -3
  84. package/src/features/oauth/interfaces/oauth.interface.ts +11 -25
  85. package/src/hooks/__tests__/useDataListRetriever.test.ts +1 -1
  86. package/dist/AssistantInterface-RvZzlcA_.d.ts +0 -36
  87. package/dist/AssistantInterface-jL56dyNc.d.mts +0 -36
  88. package/dist/chunk-GFLEFIAW.mjs.map +0 -1
  89. package/dist/chunk-VR65NRE4.js.map +0 -1
  90. package/dist/chunk-YCHPWXHD.js.map +0 -1
  91. /package/dist/{BlockNoteEditor-W42IQTGL.mjs.map → BlockNoteEditor-Q2WEDMKJ.mjs.map} +0 -0
  92. /package/dist/{BlockNoteViewer-FQ23TZ3J.mjs.map → BlockNoteViewer-WO6GTDSI.mjs.map} +0 -0
  93. /package/dist/{chunk-JZUBFAAY.mjs.map → chunk-HAI7G6MD.mjs.map} +0 -0
package/dist/index.d.ts CHANGED
@@ -6,7 +6,7 @@ export { A as ApiResponseInterface } from './ApiResponseInterface-CWLvSCvS.js';
6
6
  import { A as AbstractApiData } from './AbstractApiData-DtitRWPz.js';
7
7
  import { A as AbstractService } from './AbstractService-V3VGQMhL.js';
8
8
  export { H as HttpMethod, N as NextRef, P as PreviousRef, S as SelfRef, T as TotalRef, g as getGlobalErrorHandler, s as setGlobalErrorHandler } from './AbstractService-V3VGQMhL.js';
9
- export { c as AssistantMessageInput, d as AssistantMessageInterface, A as AssistantMessageRole, b as AssistantMessageType, B as BreadcrumbItemData, e as ChunkInterface, C as ChunkRelationshipMeta, H as HowToInput, a as HowToInterface } from './AssistantMessageInterface-CuaMDs2i.js';
9
+ export { A as AssistantInput, b as AssistantInterface, e as AssistantMessageInput, f as AssistantMessageInterface, c as AssistantMessageRole, d as AssistantMessageType, B as BreadcrumbItemData, g as ChunkInterface, C as ChunkRelationshipMeta, H as HowToInput, a as HowToInterface } from './AssistantMessageInterface-1Kbz8RVs.js';
10
10
  export { C as ContentFields, D as D3Link, a as D3Node, R as RoleFields, U as UserFields } from './content.fields-1AlHDtDb.js';
11
11
  export { ClassValue } from 'clsx';
12
12
  export { h as AiConnection, l as AiConnectionEnvDefaults, i as AiConnectionFields, n as AiConnectionInput, m as AiConnectionInterface, p as AiConnectionModule, o as AiConnectionService, j as AiProviderFieldDescriptor, k as AiProviderRegistry, A as AuthComponent, H as HandbookPageInterface, q as HandbookSectionInterface, P as PasskeyInterface, T as TotpAuthenticatorInterface, b as getIcon, a as getIconByModule, c as getIconByModuleName, g as getInitials, d as getLucideIcon, e as getLucideIconByModule, f as getLucideIconByModuleName } from './HandbookSectionInterface-OePKPbqN.js';
@@ -15,9 +15,8 @@ export { A as AuthInput, b as AuthInterface, a as AuthQuery } from './auth.inter
15
15
  export { A as AuthService, C as CompanyService, a as ContentService, F as FeatureService, N as NotificationService, P as PushService, R as RoleService, b as S3Input, c as S3Interface, S as S3Service, T as TwoFactorChallengeInterface, U as UserService } from './s3.service-DJHqEZAp.js';
16
16
  export { I as InvoiceStatus, M as MeterInterface, o as MeterSummaryInterface, P as PaymentMethodInterface, e as PriceRecurring, q as PromotionCodeValidationResult, c as ProrationLineItem, b as ProrationPreviewInterface, R as ReportUsageInput, S as StripeCustomerInterface, a as StripeInvoiceInterface, f as StripePriceInput, d as StripePriceInterface, h as StripeProductInput, g as StripeProductInterface, l as StripeSubscriptionCreateMeta, m as StripeSubscriptionCreateResponse, k as StripeSubscriptionInput, j as StripeSubscriptionInterface, n as StripeUsageInterface, i as SubscriptionStatus, p as UsageRecordInterface, U as UsageSummaryInterface } from './stripe-promotion-code.interface-C3qqh3mi.js';
17
17
  export { b as CompanyInput, c as CompanyInterface, a as ContentInput, C as ContentInterface, d as NotificationInput, N as NotificationInterface, R as RoleInput, e as RoleInterface, f as UserInput, U as UserInterface } from './notification.interface-CjzV_KII.js';
18
- export { A as AssistantInput, a as AssistantInterface } from './AssistantInterface-RvZzlcA_.js';
19
18
  export { F as FeatureInterface, M as ModuleInterface } from './feature.interface-BO25VLlx.js';
20
- export { A as AVAILABLE_OAUTH_SCOPES, D as DEFAULT_GRANT_TYPES, g as OAUTH_SCOPE_DISPLAY, b as OAuthClientCreateRequest, c as OAuthClientCreateResponse, a as OAuthClientInput, O as OAuthClientInterface, f as OAuthConsentInfo, d as OAuthConsentRequest, e as OAuthScopeInfo } from './oauth.interface-CD90ycYz.js';
19
+ export { A as AVAILABLE_OAUTH_SCOPES, D as DEFAULT_GRANT_TYPES, g as OAUTH_SCOPE_DISPLAY, b as OAuthClientCreateRequest, c as OAuthClientCreateResponse, a as OAuthClientInput, O as OAuthClientInterface, f as OAuthConsentInfo, d as OAuthConsentRequest, e as OAuthScopeInfo } from './oauth.interface-BZKZAPRw.js';
21
20
  export { b as TokenUsageAdminBreakdownModule, T as TokenUsageAdminSummaryModule, a as TokenUsageAdminTimelineModule, c as configureTokenUsage, g as getTokenUsageCurrency, t as tokenUsageModules } from './config-B6UB7j69.js';
22
21
  export { I as I18nConfig, f as configureI18n, c as configureJsonApi, g as getApiUrl, b as getAppUrl, a as getPublicApiUrl, e as getStripePublishableKey, d as getTrackablePages } from './config-Cd5xTEfZ.js';
23
22
  export { Q as QuestionnaireField, a as QuestionnaireFieldType, b as QuestionnaireOption, W as WaitlistConfig, c as configureWaitlist, g as getWaitlistConfig } from './waitlist.config-kPfjImle.js';
package/dist/index.js CHANGED
@@ -18,7 +18,7 @@
18
18
 
19
19
 
20
20
 
21
- var _chunkFXWO5J2Rjs = require('./chunk-FXWO5J2R.js');
21
+ var _chunk3D2MCVRZjs = require('./chunk-3D2MCVRZ.js');
22
22
 
23
23
 
24
24
 
@@ -244,7 +244,7 @@ var _chunkFXWO5J2Rjs = require('./chunk-FXWO5J2R.js');
244
244
 
245
245
 
246
246
 
247
- var _chunkYCHPWXHDjs = require('./chunk-YCHPWXHD.js');
247
+ var _chunkIV4DTYXNjs = require('./chunk-IV4DTYXN.js');
248
248
  require('./chunk-LXKSUWAV.js');
249
249
  require('./chunk-IBS6NI7D.js');
250
250
 
@@ -515,5 +515,5 @@ require('./chunk-7QVYU63E.js');
515
515
 
516
516
 
517
517
 
518
- exports.ACTION_TYPES = _chunkFXWO5J2Rjs.ACTION_TYPES; exports.AVAILABLE_OAUTH_SCOPES = _chunkYCHPWXHDjs.AVAILABLE_OAUTH_SCOPES; exports.AbstractApiData = _chunkYCHPWXHDjs.AbstractApiData; exports.AbstractService = _chunkYCHPWXHDjs.AbstractService; exports.Action = _chunkYCHPWXHDjs.Action; exports.AiConnection = _chunkYCHPWXHDjs.AiConnection; exports.AiConnectionFields = _chunkYCHPWXHDjs.AiConnectionFields; exports.AiConnectionModule = _chunkYCHPWXHDjs.AiConnectionModule; exports.AiConnectionService = _chunkYCHPWXHDjs.AiConnectionService; exports.Assistant = _chunkYCHPWXHDjs.Assistant; exports.AssistantAction = _chunkYCHPWXHDjs.AssistantAction; exports.AssistantActionModule = _chunkYCHPWXHDjs.AssistantActionModule; exports.AssistantActionService = _chunkYCHPWXHDjs.AssistantActionService; exports.AssistantMessage = _chunkYCHPWXHDjs.AssistantMessage; exports.AssistantMessageModule = _chunkYCHPWXHDjs.AssistantMessageModule; exports.AssistantMessageService = _chunkYCHPWXHDjs.AssistantMessageService; exports.AssistantModule = _chunkYCHPWXHDjs.AssistantModule; exports.AssistantService = _chunkYCHPWXHDjs.AssistantService; exports.AuditLog = _chunkYCHPWXHDjs.AuditLog; exports.AuditLogModule = _chunkYCHPWXHDjs.AuditLogModule; exports.AuditLogService = _chunkYCHPWXHDjs.AuditLogService; exports.Auth = _chunkYCHPWXHDjs.Auth; exports.AuthComponent = _chunkYCHPWXHDjs.AuthComponent; exports.AuthModule = _chunkYCHPWXHDjs.AuthModule; exports.AuthService = _chunkYCHPWXHDjs.AuthService; exports.AuthorModule = _chunkYCHPWXHDjs.AuthorModule; exports.BackupCodeVerify = _chunkYCHPWXHDjs.BackupCodeVerify; exports.BackupCodeVerifyModule = _chunkYCHPWXHDjs.BackupCodeVerifyModule; exports.Billing = _chunkYCHPWXHDjs.Billing; exports.BillingModule = _chunkYCHPWXHDjs.BillingModule; exports.BillingService = _chunkYCHPWXHDjs.BillingService; exports.BlockNoteDiffUtil = _chunkYCHPWXHDjs.BlockNoteDiffUtil; exports.BlockNoteWordDiffRendererUtil = _chunkYCHPWXHDjs.BlockNoteWordDiffRendererUtil; exports.COMPANY_ADMINISTRATOR_ROLE_ID = _chunkFXWO5J2Rjs.COMPANY_ADMINISTRATOR_ROLE_ID; exports.CURRENT_USER_STORAGE_KEY = _chunkYCHPWXHDjs.CURRENT_USER_STORAGE_KEY; exports.Chunk = _chunkYCHPWXHDjs.Chunk; exports.ChunkModule = _chunkYCHPWXHDjs.ChunkModule; exports.ClientAbstractService = _chunkYCHPWXHDjs.ClientAbstractService; exports.ClientHttpMethod = _chunkYCHPWXHDjs.ClientHttpMethod; exports.Company = _chunkYCHPWXHDjs.Company; exports.CompanyFields = _chunkYCHPWXHDjs.CompanyFields; exports.CompanyModule = _chunkYCHPWXHDjs.CompanyModule; exports.CompanyService = _chunkYCHPWXHDjs.CompanyService; exports.Content = _chunkYCHPWXHDjs.Content; exports.ContentFields = _chunkYCHPWXHDjs.ContentFields; exports.ContentModule = _chunkYCHPWXHDjs.ContentModule; exports.ContentService = _chunkYCHPWXHDjs.ContentService; exports.DEFAULT_GRANT_TYPES = _chunkYCHPWXHDjs.DEFAULT_GRANT_TYPES; exports.DataClass = _chunkLU7DJ4QFjs.DataClassRegistry; exports.DataClassRegistry = _chunkLU7DJ4QFjs.DataClassRegistry; exports.ENV = _chunkLU7DJ4QFjs.ENV; exports.EndpointCreator = _chunkYCHPWXHDjs.EndpointCreator; exports.EntityAiStatus = _chunkYCHPWXHDjs.EntityAiStatus; exports.Feature = _chunkYCHPWXHDjs.Feature; exports.FeatureModule = _chunkYCHPWXHDjs.FeatureModule; exports.FeatureService = _chunkYCHPWXHDjs.FeatureService; exports.HandbookPage = _chunkYCHPWXHDjs.HandbookPage; exports.HandbookPageFields = _chunkYCHPWXHDjs.HandbookPageFields; exports.HandbookPageModule = _chunkYCHPWXHDjs.HandbookPageModule; exports.HandbookPageService = _chunkYCHPWXHDjs.HandbookPageService; exports.HandbookSection = _chunkYCHPWXHDjs.HandbookSection; exports.HandbookSectionModule = _chunkYCHPWXHDjs.HandbookSectionModule; exports.HandbookSectionService = _chunkYCHPWXHDjs.HandbookSectionService; exports.HandbookThread = _chunkYCHPWXHDjs.HandbookThread; exports.HandbookThreadMessage = _chunkYCHPWXHDjs.HandbookThreadMessage; exports.HandbookThreadMessageModule = _chunkYCHPWXHDjs.HandbookThreadMessageModule; exports.HandbookThreadMessageService = _chunkYCHPWXHDjs.HandbookThreadMessageService; exports.HandbookThreadModule = _chunkYCHPWXHDjs.HandbookThreadModule; exports.HandbookThreadService = _chunkYCHPWXHDjs.HandbookThreadService; exports.HowTo = _chunkYCHPWXHDjs.HowTo; exports.HowToFields = _chunkYCHPWXHDjs.HowToFields; exports.HowToModule = _chunkYCHPWXHDjs.HowToModule; exports.HowToService = _chunkYCHPWXHDjs.HowToService; exports.HttpMethod = _chunkYCHPWXHDjs.HttpMethod; exports.InvoiceStatus = _chunkYCHPWXHDjs.InvoiceStatus; exports.JsonApiDataFactory = _chunkLU7DJ4QFjs.JsonApiDataFactory; exports.MOBILE_BREAKPOINT = _chunkYCHPWXHDjs.MOBILE_BREAKPOINT; exports.Module = _chunkYCHPWXHDjs.Module; exports.ModuleModule = _chunkYCHPWXHDjs.ModuleModule; exports.ModulePaths = _chunkYCHPWXHDjs.ModulePaths; exports.ModulePathsModule = _chunkYCHPWXHDjs.ModulePathsModule; exports.ModuleRegistrar = _chunkYCHPWXHDjs.ModuleRegistrar; exports.ModuleRegistry = _chunkYCHPWXHDjs.ModuleRegistry; exports.Modules = _chunkYCHPWXHDjs.Modules; exports.Notification = _chunkYCHPWXHDjs.Notification; exports.NotificationFields = _chunkYCHPWXHDjs.NotificationFields; exports.NotificationModule = _chunkYCHPWXHDjs.NotificationModule; exports.NotificationService = _chunkYCHPWXHDjs.NotificationService; exports.OAUTH_SCOPE_DISPLAY = _chunkYCHPWXHDjs.OAUTH_SCOPE_DISPLAY; exports.OAuthClient = _chunkYCHPWXHDjs.OAuthClient; exports.OAuthModule = _chunkYCHPWXHDjs.OAuthModule; exports.OAuthService = _chunkYCHPWXHDjs.OAuthService; exports.Passkey = _chunkYCHPWXHDjs.Passkey; exports.PasskeyAuthenticationOptions = _chunkYCHPWXHDjs.PasskeyAuthenticationOptions; exports.PasskeyAuthenticationOptionsModule = _chunkYCHPWXHDjs.PasskeyAuthenticationOptionsModule; exports.PasskeyModule = _chunkYCHPWXHDjs.PasskeyModule; exports.PasskeyRegistrationOptions = _chunkYCHPWXHDjs.PasskeyRegistrationOptions; exports.PasskeyRegistrationOptionsModule = _chunkYCHPWXHDjs.PasskeyRegistrationOptionsModule; exports.PasskeyRegistrationVerify = _chunkYCHPWXHDjs.PasskeyRegistrationVerify; exports.PasskeyRegistrationVerifyModule = _chunkYCHPWXHDjs.PasskeyRegistrationVerifyModule; exports.PasskeyRename = _chunkYCHPWXHDjs.PasskeyRename; exports.PasskeyRenameModule = _chunkYCHPWXHDjs.PasskeyRenameModule; exports.PasskeyVerifyLogin = _chunkYCHPWXHDjs.PasskeyVerifyLogin; exports.PasskeyVerifyLoginModule = _chunkYCHPWXHDjs.PasskeyVerifyLoginModule; exports.PaymentMethod = _chunkYCHPWXHDjs.PaymentMethod; exports.PermissionMapping = _chunkYCHPWXHDjs.PermissionMapping; exports.PermissionMappingModule = _chunkYCHPWXHDjs.PermissionMappingModule; exports.Push = _chunkYCHPWXHDjs.Push; exports.PushModule = _chunkYCHPWXHDjs.PushModule; exports.PushService = _chunkYCHPWXHDjs.PushService; exports.RbacMatrixModel = _chunkYCHPWXHDjs.RbacMatrixModel; exports.RbacMatrixModule = _chunkYCHPWXHDjs.RbacMatrixModule; exports.RbacService = _chunkFXWO5J2Rjs.RbacService; exports.ReferralModule = _chunkYCHPWXHDjs.ReferralModule; exports.ReferralService = _chunkYCHPWXHDjs.ReferralService; exports.ReferralStats = _chunkYCHPWXHDjs.ReferralStats; exports.ReferralStatsModule = _chunkYCHPWXHDjs.ReferralStatsModule; exports.RehydrationFactory = _chunkYCHPWXHDjs.RehydrationFactory; exports.Role = _chunkYCHPWXHDjs.Role; exports.RoleFields = _chunkYCHPWXHDjs.RoleFields; exports.RoleModule = _chunkYCHPWXHDjs.RoleModule; exports.RoleService = _chunkYCHPWXHDjs.RoleService; exports.S3 = _chunkYCHPWXHDjs.S3; exports.S3Module = _chunkYCHPWXHDjs.S3Module; exports.S3Service = _chunkYCHPWXHDjs.S3Service; exports.StripeCustomer = _chunkYCHPWXHDjs.StripeCustomer; exports.StripeCustomerModule = _chunkYCHPWXHDjs.StripeCustomerModule; exports.StripeCustomerService = _chunkYCHPWXHDjs.StripeCustomerService; exports.StripeInvoice = _chunkYCHPWXHDjs.StripeInvoice; exports.StripeInvoiceModule = _chunkYCHPWXHDjs.StripeInvoiceModule; exports.StripeInvoiceService = _chunkYCHPWXHDjs.StripeInvoiceService; exports.StripePaymentMethodModule = _chunkYCHPWXHDjs.StripePaymentMethodModule; exports.StripePrice = _chunkYCHPWXHDjs.StripePrice; exports.StripePriceFields = _chunkYCHPWXHDjs.StripePriceFields; exports.StripePriceModule = _chunkYCHPWXHDjs.StripePriceModule; exports.StripePriceService = _chunkYCHPWXHDjs.StripePriceService; exports.StripeProduct = _chunkYCHPWXHDjs.StripeProduct; exports.StripeProductFields = _chunkYCHPWXHDjs.StripeProductFields; exports.StripeProductModule = _chunkYCHPWXHDjs.StripeProductModule; exports.StripeProductService = _chunkYCHPWXHDjs.StripeProductService; exports.StripePromotionCode = _chunkYCHPWXHDjs.StripePromotionCode; exports.StripePromotionCodeModule = _chunkYCHPWXHDjs.StripePromotionCodeModule; exports.StripePromotionCodeService = _chunkYCHPWXHDjs.StripePromotionCodeService; exports.StripeSubscription = _chunkYCHPWXHDjs.StripeSubscription; exports.StripeSubscriptionModule = _chunkYCHPWXHDjs.StripeSubscriptionModule; exports.StripeSubscriptionService = _chunkYCHPWXHDjs.StripeSubscriptionService; exports.StripeUsage = _chunkYCHPWXHDjs.StripeUsage; exports.StripeUsageModule = _chunkYCHPWXHDjs.StripeUsageModule; exports.StripeUsageService = _chunkYCHPWXHDjs.StripeUsageService; exports.SubscriptionStatus = _chunkYCHPWXHDjs.SubscriptionStatus; exports.TableOptions = _chunkYCHPWXHDjs.TableOptions; exports.TokenUsageAdminBreakdownModule = _chunkYCHPWXHDjs.TokenUsageAdminBreakdownModule; exports.TokenUsageAdminSummaryModule = _chunkYCHPWXHDjs.TokenUsageAdminSummaryModule; exports.TokenUsageAdminTimelineModule = _chunkYCHPWXHDjs.TokenUsageAdminTimelineModule; exports.TotpAuthenticator = _chunkYCHPWXHDjs.TotpAuthenticator; exports.TotpAuthenticatorModule = _chunkYCHPWXHDjs.TotpAuthenticatorModule; exports.TotpSetup = _chunkYCHPWXHDjs.TotpSetup; exports.TotpSetupModule = _chunkYCHPWXHDjs.TotpSetupModule; exports.TotpVerify = _chunkYCHPWXHDjs.TotpVerify; exports.TotpVerifyLogin = _chunkYCHPWXHDjs.TotpVerifyLogin; exports.TotpVerifyLoginModule = _chunkYCHPWXHDjs.TotpVerifyLoginModule; exports.TotpVerifyModule = _chunkYCHPWXHDjs.TotpVerifyModule; exports.TwoFactorChallenge = _chunkYCHPWXHDjs.TwoFactorChallenge; exports.TwoFactorChallengeModule = _chunkYCHPWXHDjs.TwoFactorChallengeModule; exports.TwoFactorEnable = _chunkYCHPWXHDjs.TwoFactorEnable; exports.TwoFactorEnableModule = _chunkYCHPWXHDjs.TwoFactorEnableModule; exports.TwoFactorService = _chunkYCHPWXHDjs.TwoFactorService; exports.TwoFactorStatus = _chunkYCHPWXHDjs.TwoFactorStatus; exports.TwoFactorStatusModule = _chunkYCHPWXHDjs.TwoFactorStatusModule; exports.User = _chunkYCHPWXHDjs.User; exports.UserFields = _chunkYCHPWXHDjs.UserFields; exports.UserModule = _chunkYCHPWXHDjs.UserModule; exports.UserService = _chunkYCHPWXHDjs.UserService; exports.VIEWPORT_COOKIE_NAME = _chunkYCHPWXHDjs.VIEWPORT_COOKIE_NAME; exports.Waitlist = _chunkYCHPWXHDjs.Waitlist; exports.WaitlistModule = _chunkYCHPWXHDjs.WaitlistModule; exports.WaitlistService = _chunkYCHPWXHDjs.WaitlistService; exports.WaitlistStats = _chunkYCHPWXHDjs.WaitlistStats; exports.WaitlistStatsModule = _chunkYCHPWXHDjs.WaitlistStatsModule; exports.checkPermissions = _chunkYCHPWXHDjs.checkPermissions; exports.checkPermissionsFromServer = _chunkYCHPWXHDjs.checkPermissionsFromServer; exports.clearLastApiMeta = _chunkYCHPWXHDjs.clearLastApiMeta; exports.clearLastApiTotal = _chunkYCHPWXHDjs.clearLastApiTotal; exports.cn = _chunkYCHPWXHDjs.cn; exports.composeRefs = _chunkYCHPWXHDjs.composeRefs; exports.configureAuth = _chunkYCHPWXHDjs.configureAuth; exports.configureI18n = _chunkFXWO5J2Rjs.configureI18n; exports.configureJsonApi = _chunkFXWO5J2Rjs.configureJsonApi; exports.configureLogin = _chunkFXWO5J2Rjs.configureLogin; exports.configureReferral = _chunkFXWO5J2Rjs.configureReferral; exports.configureRoles = _chunkFXWO5J2Rjs.configureRoles; exports.configureTokenUsage = _chunkYCHPWXHDjs.configureTokenUsage; exports.configureWaitlist = _chunkFXWO5J2Rjs.configureWaitlist; exports.createJsonApiInclusion = _chunkYCHPWXHDjs.createJsonApiInclusion; exports.dismissToast = _chunkYCHPWXHDjs.dismissToast; exports.entityObjectSchema = _chunkYCHPWXHDjs.entityObjectSchema; exports.exists = _chunkYCHPWXHDjs.exists; exports.formatCodiceFiscale = _chunkYCHPWXHDjs.formatCodiceFiscale; exports.formatDate = _chunkYCHPWXHDjs.formatDate; exports.formatLocalDate = _chunkYCHPWXHDjs.formatLocalDate; exports.formatPartitaIva = _chunkYCHPWXHDjs.formatPartitaIva; exports.getApiUrl = _chunkFXWO5J2Rjs.getApiUrl; exports.getAppUrl = _chunkFXWO5J2Rjs.getAppUrl; exports.getBootstrapper = _chunkLU7DJ4QFjs.getBootstrapper; exports.getClientGlobalErrorHandler = _chunkYCHPWXHDjs.getClientGlobalErrorHandler; exports.getGlobalErrorHandler = _chunkYCHPWXHDjs.getGlobalErrorHandler; exports.getIcon = _chunkYCHPWXHDjs.getIcon; exports.getIconByModule = _chunkYCHPWXHDjs.getIconByModule; exports.getIconByModuleName = _chunkYCHPWXHDjs.getIconByModuleName; exports.getInitials = _chunkYCHPWXHDjs.getInitials; exports.getLastApiMeta = _chunkYCHPWXHDjs.getLastApiMeta; exports.getLastApiTotal = _chunkYCHPWXHDjs.getLastApiTotal; exports.getLucideIcon = _chunkYCHPWXHDjs.getLucideIcon; exports.getLucideIconByModule = _chunkYCHPWXHDjs.getLucideIconByModule; exports.getLucideIconByModuleName = _chunkYCHPWXHDjs.getLucideIconByModuleName; exports.getPublicApiUrl = _chunkFXWO5J2Rjs.getPublicApiUrl; exports.getReferralConfig = _chunkFXWO5J2Rjs.getReferralConfig; exports.getRoleId = _chunkFXWO5J2Rjs.getRoleId; exports.getStripePublishableKey = _chunkFXWO5J2Rjs.getStripePublishableKey; exports.getTableComponents = _chunkYCHPWXHDjs.getTableComponents; exports.getTableOptions = _chunkYCHPWXHDjs.getTableOptions; exports.getTokenHandler = _chunkYCHPWXHDjs.getTokenHandler; exports.getTokenUsageCurrency = _chunkYCHPWXHDjs.getTokenUsageCurrency; exports.getTrackablePages = _chunkFXWO5J2Rjs.getTrackablePages; exports.getValueFromPath = _chunkYCHPWXHDjs.getValueFromPath; exports.getWaitlistConfig = _chunkFXWO5J2Rjs.getWaitlistConfig; exports.handbookPageContent = _chunkYCHPWXHDjs.handbookPageContent; exports.handbookPageSummary = _chunkYCHPWXHDjs.handbookPageSummary; exports.handbookPageTitle = _chunkYCHPWXHDjs.handbookPageTitle; exports.handbookSectionSummary = _chunkYCHPWXHDjs.handbookSectionSummary; exports.handbookSectionTitle = _chunkYCHPWXHDjs.handbookSectionTitle; exports.hasBootstrapper = _chunkLU7DJ4QFjs.hasBootstrapper; exports.isReferralEnabled = _chunkFXWO5J2Rjs.isReferralEnabled; exports.isRemoteImageSrc = _chunkYCHPWXHDjs.isRemoteImageSrc; exports.isRolesConfigured = _chunkFXWO5J2Rjs.isRolesConfigured; exports.rehydrate = _chunkYCHPWXHDjs.rehydrate; exports.rehydrateList = _chunkYCHPWXHDjs.rehydrateList; exports.resetBootstrapStore = _chunkLU7DJ4QFjs.resetBootstrapStore; exports.setBootstrapper = _chunkLU7DJ4QFjs.setBootstrapper; exports.setClientGlobalErrorHandler = _chunkYCHPWXHDjs.setClientGlobalErrorHandler; exports.setGlobalErrorHandler = _chunkYCHPWXHDjs.setGlobalErrorHandler; exports.showCustomToast = _chunkYCHPWXHDjs.showCustomToast; exports.showError = _chunkYCHPWXHDjs.showError; exports.showToast = _chunkYCHPWXHDjs.showToast; exports.tokenUsageModules = _chunkYCHPWXHDjs.tokenUsageModules; exports.translateData = _chunkLU7DJ4QFjs.translateData; exports.translateResponse = _chunkLU7DJ4QFjs.translateResponse; exports.tryBootstrap = _chunkLU7DJ4QFjs.tryBootstrap; exports.useComposedRefs = _chunkYCHPWXHDjs.useComposedRefs; exports.useIsMobile = _chunkYCHPWXHDjs.useIsMobile; exports.userObjectSchema = _chunkYCHPWXHDjs.userObjectSchema; exports.validateCodiceFiscale = _chunkYCHPWXHDjs.validateCodiceFiscale; exports.validateItalianTaxCode = _chunkYCHPWXHDjs.validateItalianTaxCode; exports.validatePartitaIva = _chunkYCHPWXHDjs.validatePartitaIva;
518
+ exports.ACTION_TYPES = _chunk3D2MCVRZjs.ACTION_TYPES; exports.AVAILABLE_OAUTH_SCOPES = _chunkIV4DTYXNjs.AVAILABLE_OAUTH_SCOPES; exports.AbstractApiData = _chunkIV4DTYXNjs.AbstractApiData; exports.AbstractService = _chunkIV4DTYXNjs.AbstractService; exports.Action = _chunkIV4DTYXNjs.Action; exports.AiConnection = _chunkIV4DTYXNjs.AiConnection; exports.AiConnectionFields = _chunkIV4DTYXNjs.AiConnectionFields; exports.AiConnectionModule = _chunkIV4DTYXNjs.AiConnectionModule; exports.AiConnectionService = _chunkIV4DTYXNjs.AiConnectionService; exports.Assistant = _chunkIV4DTYXNjs.Assistant; exports.AssistantAction = _chunkIV4DTYXNjs.AssistantAction; exports.AssistantActionModule = _chunkIV4DTYXNjs.AssistantActionModule; exports.AssistantActionService = _chunkIV4DTYXNjs.AssistantActionService; exports.AssistantMessage = _chunkIV4DTYXNjs.AssistantMessage; exports.AssistantMessageModule = _chunkIV4DTYXNjs.AssistantMessageModule; exports.AssistantMessageService = _chunkIV4DTYXNjs.AssistantMessageService; exports.AssistantModule = _chunkIV4DTYXNjs.AssistantModule; exports.AssistantService = _chunkIV4DTYXNjs.AssistantService; exports.AuditLog = _chunkIV4DTYXNjs.AuditLog; exports.AuditLogModule = _chunkIV4DTYXNjs.AuditLogModule; exports.AuditLogService = _chunkIV4DTYXNjs.AuditLogService; exports.Auth = _chunkIV4DTYXNjs.Auth; exports.AuthComponent = _chunkIV4DTYXNjs.AuthComponent; exports.AuthModule = _chunkIV4DTYXNjs.AuthModule; exports.AuthService = _chunkIV4DTYXNjs.AuthService; exports.AuthorModule = _chunkIV4DTYXNjs.AuthorModule; exports.BackupCodeVerify = _chunkIV4DTYXNjs.BackupCodeVerify; exports.BackupCodeVerifyModule = _chunkIV4DTYXNjs.BackupCodeVerifyModule; exports.Billing = _chunkIV4DTYXNjs.Billing; exports.BillingModule = _chunkIV4DTYXNjs.BillingModule; exports.BillingService = _chunkIV4DTYXNjs.BillingService; exports.BlockNoteDiffUtil = _chunkIV4DTYXNjs.BlockNoteDiffUtil; exports.BlockNoteWordDiffRendererUtil = _chunkIV4DTYXNjs.BlockNoteWordDiffRendererUtil; exports.COMPANY_ADMINISTRATOR_ROLE_ID = _chunk3D2MCVRZjs.COMPANY_ADMINISTRATOR_ROLE_ID; exports.CURRENT_USER_STORAGE_KEY = _chunkIV4DTYXNjs.CURRENT_USER_STORAGE_KEY; exports.Chunk = _chunkIV4DTYXNjs.Chunk; exports.ChunkModule = _chunkIV4DTYXNjs.ChunkModule; exports.ClientAbstractService = _chunkIV4DTYXNjs.ClientAbstractService; exports.ClientHttpMethod = _chunkIV4DTYXNjs.ClientHttpMethod; exports.Company = _chunkIV4DTYXNjs.Company; exports.CompanyFields = _chunkIV4DTYXNjs.CompanyFields; exports.CompanyModule = _chunkIV4DTYXNjs.CompanyModule; exports.CompanyService = _chunkIV4DTYXNjs.CompanyService; exports.Content = _chunkIV4DTYXNjs.Content; exports.ContentFields = _chunkIV4DTYXNjs.ContentFields; exports.ContentModule = _chunkIV4DTYXNjs.ContentModule; exports.ContentService = _chunkIV4DTYXNjs.ContentService; exports.DEFAULT_GRANT_TYPES = _chunkIV4DTYXNjs.DEFAULT_GRANT_TYPES; exports.DataClass = _chunkLU7DJ4QFjs.DataClassRegistry; exports.DataClassRegistry = _chunkLU7DJ4QFjs.DataClassRegistry; exports.ENV = _chunkLU7DJ4QFjs.ENV; exports.EndpointCreator = _chunkIV4DTYXNjs.EndpointCreator; exports.EntityAiStatus = _chunkIV4DTYXNjs.EntityAiStatus; exports.Feature = _chunkIV4DTYXNjs.Feature; exports.FeatureModule = _chunkIV4DTYXNjs.FeatureModule; exports.FeatureService = _chunkIV4DTYXNjs.FeatureService; exports.HandbookPage = _chunkIV4DTYXNjs.HandbookPage; exports.HandbookPageFields = _chunkIV4DTYXNjs.HandbookPageFields; exports.HandbookPageModule = _chunkIV4DTYXNjs.HandbookPageModule; exports.HandbookPageService = _chunkIV4DTYXNjs.HandbookPageService; exports.HandbookSection = _chunkIV4DTYXNjs.HandbookSection; exports.HandbookSectionModule = _chunkIV4DTYXNjs.HandbookSectionModule; exports.HandbookSectionService = _chunkIV4DTYXNjs.HandbookSectionService; exports.HandbookThread = _chunkIV4DTYXNjs.HandbookThread; exports.HandbookThreadMessage = _chunkIV4DTYXNjs.HandbookThreadMessage; exports.HandbookThreadMessageModule = _chunkIV4DTYXNjs.HandbookThreadMessageModule; exports.HandbookThreadMessageService = _chunkIV4DTYXNjs.HandbookThreadMessageService; exports.HandbookThreadModule = _chunkIV4DTYXNjs.HandbookThreadModule; exports.HandbookThreadService = _chunkIV4DTYXNjs.HandbookThreadService; exports.HowTo = _chunkIV4DTYXNjs.HowTo; exports.HowToFields = _chunkIV4DTYXNjs.HowToFields; exports.HowToModule = _chunkIV4DTYXNjs.HowToModule; exports.HowToService = _chunkIV4DTYXNjs.HowToService; exports.HttpMethod = _chunkIV4DTYXNjs.HttpMethod; exports.InvoiceStatus = _chunkIV4DTYXNjs.InvoiceStatus; exports.JsonApiDataFactory = _chunkLU7DJ4QFjs.JsonApiDataFactory; exports.MOBILE_BREAKPOINT = _chunkIV4DTYXNjs.MOBILE_BREAKPOINT; exports.Module = _chunkIV4DTYXNjs.Module; exports.ModuleModule = _chunkIV4DTYXNjs.ModuleModule; exports.ModulePaths = _chunkIV4DTYXNjs.ModulePaths; exports.ModulePathsModule = _chunkIV4DTYXNjs.ModulePathsModule; exports.ModuleRegistrar = _chunkIV4DTYXNjs.ModuleRegistrar; exports.ModuleRegistry = _chunkIV4DTYXNjs.ModuleRegistry; exports.Modules = _chunkIV4DTYXNjs.Modules; exports.Notification = _chunkIV4DTYXNjs.Notification; exports.NotificationFields = _chunkIV4DTYXNjs.NotificationFields; exports.NotificationModule = _chunkIV4DTYXNjs.NotificationModule; exports.NotificationService = _chunkIV4DTYXNjs.NotificationService; exports.OAUTH_SCOPE_DISPLAY = _chunkIV4DTYXNjs.OAUTH_SCOPE_DISPLAY; exports.OAuthClient = _chunkIV4DTYXNjs.OAuthClient; exports.OAuthModule = _chunkIV4DTYXNjs.OAuthModule; exports.OAuthService = _chunkIV4DTYXNjs.OAuthService; exports.Passkey = _chunkIV4DTYXNjs.Passkey; exports.PasskeyAuthenticationOptions = _chunkIV4DTYXNjs.PasskeyAuthenticationOptions; exports.PasskeyAuthenticationOptionsModule = _chunkIV4DTYXNjs.PasskeyAuthenticationOptionsModule; exports.PasskeyModule = _chunkIV4DTYXNjs.PasskeyModule; exports.PasskeyRegistrationOptions = _chunkIV4DTYXNjs.PasskeyRegistrationOptions; exports.PasskeyRegistrationOptionsModule = _chunkIV4DTYXNjs.PasskeyRegistrationOptionsModule; exports.PasskeyRegistrationVerify = _chunkIV4DTYXNjs.PasskeyRegistrationVerify; exports.PasskeyRegistrationVerifyModule = _chunkIV4DTYXNjs.PasskeyRegistrationVerifyModule; exports.PasskeyRename = _chunkIV4DTYXNjs.PasskeyRename; exports.PasskeyRenameModule = _chunkIV4DTYXNjs.PasskeyRenameModule; exports.PasskeyVerifyLogin = _chunkIV4DTYXNjs.PasskeyVerifyLogin; exports.PasskeyVerifyLoginModule = _chunkIV4DTYXNjs.PasskeyVerifyLoginModule; exports.PaymentMethod = _chunkIV4DTYXNjs.PaymentMethod; exports.PermissionMapping = _chunkIV4DTYXNjs.PermissionMapping; exports.PermissionMappingModule = _chunkIV4DTYXNjs.PermissionMappingModule; exports.Push = _chunkIV4DTYXNjs.Push; exports.PushModule = _chunkIV4DTYXNjs.PushModule; exports.PushService = _chunkIV4DTYXNjs.PushService; exports.RbacMatrixModel = _chunkIV4DTYXNjs.RbacMatrixModel; exports.RbacMatrixModule = _chunkIV4DTYXNjs.RbacMatrixModule; exports.RbacService = _chunk3D2MCVRZjs.RbacService; exports.ReferralModule = _chunkIV4DTYXNjs.ReferralModule; exports.ReferralService = _chunkIV4DTYXNjs.ReferralService; exports.ReferralStats = _chunkIV4DTYXNjs.ReferralStats; exports.ReferralStatsModule = _chunkIV4DTYXNjs.ReferralStatsModule; exports.RehydrationFactory = _chunkIV4DTYXNjs.RehydrationFactory; exports.Role = _chunkIV4DTYXNjs.Role; exports.RoleFields = _chunkIV4DTYXNjs.RoleFields; exports.RoleModule = _chunkIV4DTYXNjs.RoleModule; exports.RoleService = _chunkIV4DTYXNjs.RoleService; exports.S3 = _chunkIV4DTYXNjs.S3; exports.S3Module = _chunkIV4DTYXNjs.S3Module; exports.S3Service = _chunkIV4DTYXNjs.S3Service; exports.StripeCustomer = _chunkIV4DTYXNjs.StripeCustomer; exports.StripeCustomerModule = _chunkIV4DTYXNjs.StripeCustomerModule; exports.StripeCustomerService = _chunkIV4DTYXNjs.StripeCustomerService; exports.StripeInvoice = _chunkIV4DTYXNjs.StripeInvoice; exports.StripeInvoiceModule = _chunkIV4DTYXNjs.StripeInvoiceModule; exports.StripeInvoiceService = _chunkIV4DTYXNjs.StripeInvoiceService; exports.StripePaymentMethodModule = _chunkIV4DTYXNjs.StripePaymentMethodModule; exports.StripePrice = _chunkIV4DTYXNjs.StripePrice; exports.StripePriceFields = _chunkIV4DTYXNjs.StripePriceFields; exports.StripePriceModule = _chunkIV4DTYXNjs.StripePriceModule; exports.StripePriceService = _chunkIV4DTYXNjs.StripePriceService; exports.StripeProduct = _chunkIV4DTYXNjs.StripeProduct; exports.StripeProductFields = _chunkIV4DTYXNjs.StripeProductFields; exports.StripeProductModule = _chunkIV4DTYXNjs.StripeProductModule; exports.StripeProductService = _chunkIV4DTYXNjs.StripeProductService; exports.StripePromotionCode = _chunkIV4DTYXNjs.StripePromotionCode; exports.StripePromotionCodeModule = _chunkIV4DTYXNjs.StripePromotionCodeModule; exports.StripePromotionCodeService = _chunkIV4DTYXNjs.StripePromotionCodeService; exports.StripeSubscription = _chunkIV4DTYXNjs.StripeSubscription; exports.StripeSubscriptionModule = _chunkIV4DTYXNjs.StripeSubscriptionModule; exports.StripeSubscriptionService = _chunkIV4DTYXNjs.StripeSubscriptionService; exports.StripeUsage = _chunkIV4DTYXNjs.StripeUsage; exports.StripeUsageModule = _chunkIV4DTYXNjs.StripeUsageModule; exports.StripeUsageService = _chunkIV4DTYXNjs.StripeUsageService; exports.SubscriptionStatus = _chunkIV4DTYXNjs.SubscriptionStatus; exports.TableOptions = _chunkIV4DTYXNjs.TableOptions; exports.TokenUsageAdminBreakdownModule = _chunkIV4DTYXNjs.TokenUsageAdminBreakdownModule; exports.TokenUsageAdminSummaryModule = _chunkIV4DTYXNjs.TokenUsageAdminSummaryModule; exports.TokenUsageAdminTimelineModule = _chunkIV4DTYXNjs.TokenUsageAdminTimelineModule; exports.TotpAuthenticator = _chunkIV4DTYXNjs.TotpAuthenticator; exports.TotpAuthenticatorModule = _chunkIV4DTYXNjs.TotpAuthenticatorModule; exports.TotpSetup = _chunkIV4DTYXNjs.TotpSetup; exports.TotpSetupModule = _chunkIV4DTYXNjs.TotpSetupModule; exports.TotpVerify = _chunkIV4DTYXNjs.TotpVerify; exports.TotpVerifyLogin = _chunkIV4DTYXNjs.TotpVerifyLogin; exports.TotpVerifyLoginModule = _chunkIV4DTYXNjs.TotpVerifyLoginModule; exports.TotpVerifyModule = _chunkIV4DTYXNjs.TotpVerifyModule; exports.TwoFactorChallenge = _chunkIV4DTYXNjs.TwoFactorChallenge; exports.TwoFactorChallengeModule = _chunkIV4DTYXNjs.TwoFactorChallengeModule; exports.TwoFactorEnable = _chunkIV4DTYXNjs.TwoFactorEnable; exports.TwoFactorEnableModule = _chunkIV4DTYXNjs.TwoFactorEnableModule; exports.TwoFactorService = _chunkIV4DTYXNjs.TwoFactorService; exports.TwoFactorStatus = _chunkIV4DTYXNjs.TwoFactorStatus; exports.TwoFactorStatusModule = _chunkIV4DTYXNjs.TwoFactorStatusModule; exports.User = _chunkIV4DTYXNjs.User; exports.UserFields = _chunkIV4DTYXNjs.UserFields; exports.UserModule = _chunkIV4DTYXNjs.UserModule; exports.UserService = _chunkIV4DTYXNjs.UserService; exports.VIEWPORT_COOKIE_NAME = _chunkIV4DTYXNjs.VIEWPORT_COOKIE_NAME; exports.Waitlist = _chunkIV4DTYXNjs.Waitlist; exports.WaitlistModule = _chunkIV4DTYXNjs.WaitlistModule; exports.WaitlistService = _chunkIV4DTYXNjs.WaitlistService; exports.WaitlistStats = _chunkIV4DTYXNjs.WaitlistStats; exports.WaitlistStatsModule = _chunkIV4DTYXNjs.WaitlistStatsModule; exports.checkPermissions = _chunkIV4DTYXNjs.checkPermissions; exports.checkPermissionsFromServer = _chunkIV4DTYXNjs.checkPermissionsFromServer; exports.clearLastApiMeta = _chunkIV4DTYXNjs.clearLastApiMeta; exports.clearLastApiTotal = _chunkIV4DTYXNjs.clearLastApiTotal; exports.cn = _chunkIV4DTYXNjs.cn; exports.composeRefs = _chunkIV4DTYXNjs.composeRefs; exports.configureAuth = _chunkIV4DTYXNjs.configureAuth; exports.configureI18n = _chunk3D2MCVRZjs.configureI18n; exports.configureJsonApi = _chunk3D2MCVRZjs.configureJsonApi; exports.configureLogin = _chunk3D2MCVRZjs.configureLogin; exports.configureReferral = _chunk3D2MCVRZjs.configureReferral; exports.configureRoles = _chunk3D2MCVRZjs.configureRoles; exports.configureTokenUsage = _chunkIV4DTYXNjs.configureTokenUsage; exports.configureWaitlist = _chunk3D2MCVRZjs.configureWaitlist; exports.createJsonApiInclusion = _chunkIV4DTYXNjs.createJsonApiInclusion; exports.dismissToast = _chunkIV4DTYXNjs.dismissToast; exports.entityObjectSchema = _chunkIV4DTYXNjs.entityObjectSchema; exports.exists = _chunkIV4DTYXNjs.exists; exports.formatCodiceFiscale = _chunkIV4DTYXNjs.formatCodiceFiscale; exports.formatDate = _chunkIV4DTYXNjs.formatDate; exports.formatLocalDate = _chunkIV4DTYXNjs.formatLocalDate; exports.formatPartitaIva = _chunkIV4DTYXNjs.formatPartitaIva; exports.getApiUrl = _chunk3D2MCVRZjs.getApiUrl; exports.getAppUrl = _chunk3D2MCVRZjs.getAppUrl; exports.getBootstrapper = _chunkLU7DJ4QFjs.getBootstrapper; exports.getClientGlobalErrorHandler = _chunkIV4DTYXNjs.getClientGlobalErrorHandler; exports.getGlobalErrorHandler = _chunkIV4DTYXNjs.getGlobalErrorHandler; exports.getIcon = _chunkIV4DTYXNjs.getIcon; exports.getIconByModule = _chunkIV4DTYXNjs.getIconByModule; exports.getIconByModuleName = _chunkIV4DTYXNjs.getIconByModuleName; exports.getInitials = _chunkIV4DTYXNjs.getInitials; exports.getLastApiMeta = _chunkIV4DTYXNjs.getLastApiMeta; exports.getLastApiTotal = _chunkIV4DTYXNjs.getLastApiTotal; exports.getLucideIcon = _chunkIV4DTYXNjs.getLucideIcon; exports.getLucideIconByModule = _chunkIV4DTYXNjs.getLucideIconByModule; exports.getLucideIconByModuleName = _chunkIV4DTYXNjs.getLucideIconByModuleName; exports.getPublicApiUrl = _chunk3D2MCVRZjs.getPublicApiUrl; exports.getReferralConfig = _chunk3D2MCVRZjs.getReferralConfig; exports.getRoleId = _chunk3D2MCVRZjs.getRoleId; exports.getStripePublishableKey = _chunk3D2MCVRZjs.getStripePublishableKey; exports.getTableComponents = _chunkIV4DTYXNjs.getTableComponents; exports.getTableOptions = _chunkIV4DTYXNjs.getTableOptions; exports.getTokenHandler = _chunkIV4DTYXNjs.getTokenHandler; exports.getTokenUsageCurrency = _chunkIV4DTYXNjs.getTokenUsageCurrency; exports.getTrackablePages = _chunk3D2MCVRZjs.getTrackablePages; exports.getValueFromPath = _chunkIV4DTYXNjs.getValueFromPath; exports.getWaitlistConfig = _chunk3D2MCVRZjs.getWaitlistConfig; exports.handbookPageContent = _chunkIV4DTYXNjs.handbookPageContent; exports.handbookPageSummary = _chunkIV4DTYXNjs.handbookPageSummary; exports.handbookPageTitle = _chunkIV4DTYXNjs.handbookPageTitle; exports.handbookSectionSummary = _chunkIV4DTYXNjs.handbookSectionSummary; exports.handbookSectionTitle = _chunkIV4DTYXNjs.handbookSectionTitle; exports.hasBootstrapper = _chunkLU7DJ4QFjs.hasBootstrapper; exports.isReferralEnabled = _chunk3D2MCVRZjs.isReferralEnabled; exports.isRemoteImageSrc = _chunkIV4DTYXNjs.isRemoteImageSrc; exports.isRolesConfigured = _chunk3D2MCVRZjs.isRolesConfigured; exports.rehydrate = _chunkIV4DTYXNjs.rehydrate; exports.rehydrateList = _chunkIV4DTYXNjs.rehydrateList; exports.resetBootstrapStore = _chunkLU7DJ4QFjs.resetBootstrapStore; exports.setBootstrapper = _chunkLU7DJ4QFjs.setBootstrapper; exports.setClientGlobalErrorHandler = _chunkIV4DTYXNjs.setClientGlobalErrorHandler; exports.setGlobalErrorHandler = _chunkIV4DTYXNjs.setGlobalErrorHandler; exports.showCustomToast = _chunkIV4DTYXNjs.showCustomToast; exports.showError = _chunkIV4DTYXNjs.showError; exports.showToast = _chunkIV4DTYXNjs.showToast; exports.tokenUsageModules = _chunkIV4DTYXNjs.tokenUsageModules; exports.translateData = _chunkLU7DJ4QFjs.translateData; exports.translateResponse = _chunkLU7DJ4QFjs.translateResponse; exports.tryBootstrap = _chunkLU7DJ4QFjs.tryBootstrap; exports.useComposedRefs = _chunkIV4DTYXNjs.useComposedRefs; exports.useIsMobile = _chunkIV4DTYXNjs.useIsMobile; exports.userObjectSchema = _chunkIV4DTYXNjs.userObjectSchema; exports.validateCodiceFiscale = _chunkIV4DTYXNjs.validateCodiceFiscale; exports.validateItalianTaxCode = _chunkIV4DTYXNjs.validateItalianTaxCode; exports.validatePartitaIva = _chunkIV4DTYXNjs.validatePartitaIva;
519
519
  //# sourceMappingURL=index.js.map
package/dist/index.mjs CHANGED
@@ -18,7 +18,7 @@ import {
18
18
  getWaitlistConfig,
19
19
  isReferralEnabled,
20
20
  isRolesConfigured
21
- } from "./chunk-JZUBFAAY.mjs";
21
+ } from "./chunk-HAI7G6MD.mjs";
22
22
  import {
23
23
  AVAILABLE_OAUTH_SCOPES,
24
24
  AbstractApiData,
@@ -244,7 +244,7 @@ import {
244
244
  validateCodiceFiscale,
245
245
  validateItalianTaxCode,
246
246
  validatePartitaIva
247
- } from "./chunk-O5MKEU7G.mjs";
247
+ } from "./chunk-2O3SFHQ7.mjs";
248
248
  import "./chunk-AUXK7QSA.mjs";
249
249
  import "./chunk-C7C7VY4F.mjs";
250
250
  import {
@@ -85,12 +85,14 @@ interface OAuthConsentRequest {
85
85
  codeChallenge?: string;
86
86
  /** PKCE method: 'S256' (recommended) or 'plain' */
87
87
  codeChallengeMethod?: string;
88
+ /** The studio (company) the issued tokens are bound to; sent as `company_id` on approve */
89
+ companyId?: string;
88
90
  }
89
91
  /**
90
92
  * Scope information for display in consent screen
91
93
  */
92
94
  interface OAuthScopeInfo {
93
- /** The scope identifier (e.g., 'photographs:read') */
95
+ /** The scope identifier (e.g., 'read', 'mcp') */
94
96
  scope: string;
95
97
  /** Human-readable scope name */
96
98
  name: string;
@@ -105,6 +107,11 @@ interface OAuthScopeInfo {
105
107
  interface OAuthConsentInfo {
106
108
  client: OAuthClientInterface;
107
109
  scopes: OAuthScopeInfo[];
110
+ /** The caller's companies, ordered by name; the user picks one when there is more than one */
111
+ companies?: Array<{
112
+ id: string;
113
+ name: string;
114
+ }>;
108
115
  }
109
116
  /**
110
117
  * Default scope display configuration
@@ -85,12 +85,14 @@ interface OAuthConsentRequest {
85
85
  codeChallenge?: string;
86
86
  /** PKCE method: 'S256' (recommended) or 'plain' */
87
87
  codeChallengeMethod?: string;
88
+ /** The studio (company) the issued tokens are bound to; sent as `company_id` on approve */
89
+ companyId?: string;
88
90
  }
89
91
  /**
90
92
  * Scope information for display in consent screen
91
93
  */
92
94
  interface OAuthScopeInfo {
93
- /** The scope identifier (e.g., 'photographs:read') */
95
+ /** The scope identifier (e.g., 'read', 'mcp') */
94
96
  scope: string;
95
97
  /** Human-readable scope name */
96
98
  name: string;
@@ -105,6 +107,11 @@ interface OAuthScopeInfo {
105
107
  interface OAuthConsentInfo {
106
108
  client: OAuthClientInterface;
107
109
  scopes: OAuthScopeInfo[];
110
+ /** The caller's companies, ordered by name; the user picks one when there is more than one */
111
+ companies?: Array<{
112
+ id: string;
113
+ name: string;
114
+ }>;
108
115
  }
109
116
  /**
110
117
  * Default scope display configuration
@@ -15,7 +15,7 @@ var _chunkIOLU4ASDjs = require('../chunk-IOLU4ASD.js');
15
15
 
16
16
 
17
17
 
18
- var _chunkYCHPWXHDjs = require('../chunk-YCHPWXHD.js');
18
+ var _chunkIV4DTYXNjs = require('../chunk-IV4DTYXN.js');
19
19
  require('../chunk-LXKSUWAV.js');
20
20
  require('../chunk-IBS6NI7D.js');
21
21
 
@@ -87,7 +87,7 @@ var ServerSession = class {
87
87
  if (!rawModules) return false;
88
88
  const modules = JSON.parse(_pako.ungzip.call(void 0, Buffer.from(rawModules, "base64"), { toText: true }));
89
89
  const selectedModule = modules.find((module) => module.id === params.module.moduleId);
90
- return _chunkYCHPWXHDjs.checkPermissionsFromServer.call(void 0, {
90
+ return _chunkIV4DTYXNjs.checkPermissionsFromServer.call(void 0, {
91
91
  module: params.module,
92
92
  action: params.action,
93
93
  data: params.data,
@@ -297,5 +297,5 @@ _chunk7QVYU63Ejs.__name.call(void 0, ServerJsonApiDelete, "ServerJsonApiDelete")
297
297
 
298
298
 
299
299
 
300
- exports.ServerAuthService = _chunkYCHPWXHDjs.AuthService; exports.ServerCompanyService = _chunkYCHPWXHDjs.CompanyService; exports.ServerContentService = _chunkYCHPWXHDjs.ContentService; exports.ServerFeatureService = _chunkYCHPWXHDjs.FeatureService; exports.ServerJsonApiDelete = ServerJsonApiDelete; exports.ServerJsonApiGet = ServerJsonApiGet; exports.ServerJsonApiPatch = ServerJsonApiPatch; exports.ServerJsonApiPost = ServerJsonApiPost; exports.ServerJsonApiPut = ServerJsonApiPut; exports.ServerNotificationService = _chunkYCHPWXHDjs.NotificationService; exports.ServerPushService = _chunkYCHPWXHDjs.PushService; exports.ServerRoleService = _chunkYCHPWXHDjs.RoleService; exports.ServerS3Service = _chunkYCHPWXHDjs.S3Service; exports.ServerSession = ServerSession; exports.ServerUserService = _chunkYCHPWXHDjs.UserService; exports.configureServerJsonApi = configureServerJsonApi; exports.getServerApiUrl = getServerApiUrl; exports.getServerAppUrl = getServerAppUrl; exports.getServerToken = _chunkYUO55Q5Ajs.getServerToken; exports.getServerTrackablePages = getServerTrackablePages; exports.invalidateCacheTag = invalidateCacheTag; exports.invalidateCacheTags = invalidateCacheTags; exports.serverRequest = _chunkIOLU4ASDjs.serverRequest;
300
+ exports.ServerAuthService = _chunkIV4DTYXNjs.AuthService; exports.ServerCompanyService = _chunkIV4DTYXNjs.CompanyService; exports.ServerContentService = _chunkIV4DTYXNjs.ContentService; exports.ServerFeatureService = _chunkIV4DTYXNjs.FeatureService; exports.ServerJsonApiDelete = ServerJsonApiDelete; exports.ServerJsonApiGet = ServerJsonApiGet; exports.ServerJsonApiPatch = ServerJsonApiPatch; exports.ServerJsonApiPost = ServerJsonApiPost; exports.ServerJsonApiPut = ServerJsonApiPut; exports.ServerNotificationService = _chunkIV4DTYXNjs.NotificationService; exports.ServerPushService = _chunkIV4DTYXNjs.PushService; exports.ServerRoleService = _chunkIV4DTYXNjs.RoleService; exports.ServerS3Service = _chunkIV4DTYXNjs.S3Service; exports.ServerSession = ServerSession; exports.ServerUserService = _chunkIV4DTYXNjs.UserService; exports.configureServerJsonApi = configureServerJsonApi; exports.getServerApiUrl = getServerApiUrl; exports.getServerAppUrl = getServerAppUrl; exports.getServerToken = _chunkYUO55Q5Ajs.getServerToken; exports.getServerTrackablePages = getServerTrackablePages; exports.invalidateCacheTag = invalidateCacheTag; exports.invalidateCacheTags = invalidateCacheTags; exports.serverRequest = _chunkIOLU4ASDjs.serverRequest;
301
301
  //# sourceMappingURL=index.js.map
@@ -15,7 +15,7 @@ import {
15
15
  S3Service,
16
16
  UserService,
17
17
  checkPermissionsFromServer
18
- } from "../chunk-O5MKEU7G.mjs";
18
+ } from "../chunk-2O3SFHQ7.mjs";
19
19
  import "../chunk-AUXK7QSA.mjs";
20
20
  import "../chunk-C7C7VY4F.mjs";
21
21
  import {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@carlonicora/nextjs-jsonapi",
3
- "version": "3.23.0",
3
+ "version": "3.24.0",
4
4
  "description": "Next.js JSON:API client with server/client support and caching",
5
5
  "author": "Carlo Nicora",
6
6
  "license": "GPL-3.0-or-later",
@@ -4,7 +4,7 @@ import userEvent from "@testing-library/user-event";
4
4
  import { useForm } from "react-hook-form";
5
5
  import { zodResolver } from "@hookform/resolvers/zod";
6
6
  import { z } from "zod";
7
- import { EditorSheet } from "../EditorSheet";
7
+ import { EditorSheet, EditorSheetProps } from "../EditorSheet";
8
8
 
9
9
  // Mock next-intl
10
10
  vi.mock("next-intl", () => ({
@@ -33,12 +33,14 @@ const schema = z.object({
33
33
  name: z.string().min(1),
34
34
  });
35
35
 
36
+ type TestValues = z.infer<typeof schema>;
37
+
36
38
  function TestEditor({
37
39
  onSubmit = vi.fn().mockResolvedValue({ id: "123" }),
38
40
  isEdit = false,
39
41
  ...props
40
- }: Partial<React.ComponentProps<typeof EditorSheet>> & { onSubmit?: any }) {
41
- const form = useForm({
42
+ }: Partial<EditorSheetProps<TestValues>> & { onSubmit?: any }) {
43
+ const form = useForm<TestValues>({
42
44
  resolver: zodResolver(schema),
43
45
  defaultValues: { name: "" },
44
46
  });
@@ -7,7 +7,9 @@ import { translateResponse } from "../translateResponse";
7
7
 
8
8
  class StubData implements Partial<ApiDataInterface> {
9
9
  id = "";
10
- rehydrate(): void {}
10
+ rehydrate(): ApiDataInterface {
11
+ return this as unknown as ApiDataInterface;
12
+ }
11
13
  }
12
14
 
13
15
  const stubModule = {
@@ -1,8 +1,13 @@
1
1
  "use client";
2
2
 
3
+ import { MessagesSquareIcon } from "lucide-react";
4
+ import { useTranslations } from "next-intl";
5
+ import { useMemo, type ReactNode } from "react";
3
6
  import { RoundPageContainer } from "../../../../components/containers/RoundPageContainer";
4
7
  import { Modules } from "../../../../core";
5
- import type { ApprovalActionRenderer } from "../../../assistant-message/components/MessageItem";
8
+ import { EntityMentionLink } from "../../../assistant-message/components/EntityMentionLink";
9
+ import type { ApprovalActionRenderer, MentionRenderer } from "../../../assistant-message/components/MessageItem";
10
+ import type { AssistantInterface } from "../../data/AssistantInterface";
6
11
  import { useAssistantContext } from "../../contexts/AssistantContext";
7
12
  import { AssistantSidebar } from "../parts/AssistantSidebar";
8
13
  import { AssistantEmptyState } from "../parts/AssistantEmptyState";
@@ -18,55 +23,119 @@ interface Props {
18
23
  * plain markdown bubble.
19
24
  */
20
25
  renderApprovalAction?: ApprovalActionRenderer;
26
+ /**
27
+ * Renderer for `mention://<type>/<id>` links in assistant answers. Defaults
28
+ * to `EntityMentionLink`, which links registered modules to their page.
29
+ */
30
+ renderMention?: MentionRenderer;
31
+ /** When true the container renders without the `RoundPageContainer` page chrome (e.g. inside a sheet). */
32
+ embedded?: boolean;
33
+ /** Rendered inside the composer (bottom-left), before the first message of a new thread. */
34
+ renderScopePicker?: () => ReactNode;
35
+ /** Rendered after each thread title in the sidebar. */
36
+ renderThreadBadge?: (thread: AssistantInterface) => ReactNode;
37
+ /** When false, the empty state hides the operator-mode toggle and threads use the default engine. Defaults to true. */
38
+ showOperatorToggle?: boolean;
21
39
  }
22
40
 
23
- export function AssistantContainer({ renderApprovalAction }: Props = {}) {
41
+ export function AssistantContainer({
42
+ renderApprovalAction,
43
+ renderMention,
44
+ embedded,
45
+ renderScopePicker,
46
+ renderThreadBadge,
47
+ showOperatorToggle = true,
48
+ }: Props = {}) {
49
+ const t = useTranslations();
24
50
  const ctx = useAssistantContext();
25
51
  const showThread = !!ctx.assistant || ctx.sending || ctx.messages.length > 0;
26
52
 
27
- return (
28
- <RoundPageContainer module={Modules.Assistant} fullWidth>
29
- <div className="bg-background flex h-full w-full overflow-hidden rounded-lg border">
53
+ // Memoised: a fresh element on every render fed into RoundPageContainer is
54
+ // the shape that produces React's "Maximum update depth exceeded".
55
+ const details = useMemo(
56
+ () => (
57
+ // The panel supplies its own padding and border; cancel both so the list
58
+ // reads as the panel body rather than a card inside it.
59
+ <div className="-m-4 flex h-full min-h-0 [&>aside]:w-full [&>aside]:border-e-0 [&>aside]:bg-transparent">
30
60
  <AssistantSidebar
31
61
  threads={ctx.threads}
32
62
  activeId={ctx.assistant?.id}
33
63
  onSelect={ctx.selectThread}
34
- onNew={ctx.startNew}
64
+ renderThreadBadge={renderThreadBadge}
35
65
  />
36
- <main className="flex flex-1 flex-col">
37
- {!showThread ? (
38
- <AssistantEmptyState
39
- onSend={ctx.sendMessage}
40
- operatorMode={ctx.operatorMode}
41
- onOperatorModeChange={ctx.setOperatorMode}
66
+ </div>
67
+ ),
68
+ [ctx.threads, ctx.assistant?.id, ctx.selectThread, renderThreadBadge],
69
+ );
70
+
71
+ const thread = (
72
+ <>
73
+ {!showThread ? (
74
+ <AssistantEmptyState
75
+ onSend={ctx.sendMessage}
76
+ operatorMode={ctx.operatorMode}
77
+ onOperatorModeChange={showOperatorToggle ? ctx.setOperatorMode : undefined}
78
+ composerLeading={renderScopePicker?.()}
79
+ />
80
+ ) : (
81
+ <>
82
+ {ctx.assistant ? (
83
+ <AssistantThreadHeader
84
+ assistant={ctx.assistant}
85
+ onRename={(title) => ctx.renameThread(ctx.assistant!.id, title)}
86
+ onDelete={() => ctx.deleteThread(ctx.assistant!.id)}
42
87
  />
43
88
  ) : (
44
- <>
45
- {ctx.assistant ? (
46
- <AssistantThreadHeader
47
- assistant={ctx.assistant}
48
- onRename={(title) => ctx.renameThread(ctx.assistant!.id, title)}
49
- onDelete={() => ctx.deleteThread(ctx.assistant!.id)}
50
- />
51
- ) : (
52
- <div className="flex items-center justify-between border-b px-5 py-3" aria-hidden>
53
- <div className="h-5" />
54
- </div>
55
- )}
56
- <AssistantThread
57
- messages={ctx.messages}
58
- sending={ctx.sending}
59
- status={ctx.status}
60
- onSelectFollowUp={ctx.sendMessage}
61
- failedMessageIds={ctx.failedMessageIds}
62
- onRetry={ctx.retrySend}
63
- renderApprovalAction={renderApprovalAction}
64
- />
65
- <AssistantComposer onSend={ctx.sendMessage} disabled={ctx.sending} />
66
- </>
89
+ <div className="flex items-center justify-between border-b px-5 py-3" aria-hidden>
90
+ <div className="h-5" />
91
+ </div>
67
92
  )}
68
- </main>
93
+ <AssistantThread
94
+ messages={ctx.messages}
95
+ sending={ctx.sending}
96
+ status={ctx.status}
97
+ onSelectFollowUp={ctx.sendMessage}
98
+ failedMessageIds={ctx.failedMessageIds}
99
+ onRetry={ctx.retrySend}
100
+ renderApprovalAction={renderApprovalAction}
101
+ renderMention={renderMention ?? EntityMentionLink}
102
+ />
103
+ <AssistantComposer onSend={ctx.sendMessage} disabled={ctx.sending} />
104
+ </>
105
+ )}
106
+ </>
107
+ );
108
+
109
+ if (embedded) {
110
+ return (
111
+ <div className="bg-background flex h-full w-full overflow-hidden rounded-lg border">
112
+ <AssistantSidebar
113
+ threads={ctx.threads}
114
+ activeId={ctx.assistant?.id}
115
+ onSelect={ctx.selectThread}
116
+ onNew={ctx.startNew}
117
+ renderThreadBadge={renderThreadBadge}
118
+ />
119
+ <main className="flex flex-1 flex-col">{thread}</main>
69
120
  </div>
121
+ );
122
+ }
123
+
124
+ // The page mirrors the conversations page: the thread list lives in the
125
+ // page's details panel, the new-thread action in the page header (set by
126
+ // AssistantProvider), and the conversation fills the card.
127
+ return (
128
+ <RoundPageContainer
129
+ module={Modules.Assistant}
130
+ id={ctx.assistant?.id}
131
+ fullWidth
132
+ forceHeader
133
+ defaultDetailsOpen
134
+ detailsTitle={t("features.assistant.list_title")}
135
+ detailsIcon={<MessagesSquareIcon />}
136
+ details={details}
137
+ >
138
+ <div className="flex h-full min-h-0 w-full flex-col overflow-hidden">{thread}</div>
70
139
  </RoundPageContainer>
71
140
  );
72
141
  }
@@ -3,7 +3,23 @@ vi.mock("../../../../../contexts/SocketContext", () => ({
3
3
  }));
4
4
 
5
5
  vi.mock("../../../../../components/containers/RoundPageContainer", () => ({
6
- RoundPageContainer: ({ children }: { children: React.ReactNode }) => <>{children}</>,
6
+ RoundPageContainer: ({
7
+ children,
8
+ details,
9
+ detailsTitle,
10
+ }: {
11
+ children: React.ReactNode;
12
+ details?: React.ReactNode;
13
+ detailsTitle?: React.ReactNode;
14
+ }) => (
15
+ <div data-testid="round-page-container">
16
+ {children}
17
+ <div data-testid="round-page-details">
18
+ {detailsTitle}
19
+ {details}
20
+ </div>
21
+ </div>
22
+ ),
7
23
  }));
8
24
 
9
25
  import { describe, it, expect, vi, beforeAll, beforeEach } from "vitest";
@@ -13,11 +29,40 @@ import { AssistantService } from "../../../data/AssistantService";
13
29
  import type { JsonApiHydratedDataInterface } from "../../../../../core";
14
30
  import { AssistantContainer } from "../AssistantContainer";
15
31
  import { ModuleRegistry } from "../../../../../core/registry/ModuleRegistry";
32
+ import { configureI18n } from "../../../../../i18n";
16
33
  import { DataClassRegistry } from "../../../../../core/registry/DataClassRegistry";
17
34
  import { Assistant } from "../../../data/Assistant";
18
35
  import { AssistantMessage } from "../../../../assistant-message/data/AssistantMessage";
19
36
 
20
37
  beforeAll(() => {
38
+ // The package Link resolves its inner component at runtime and throws if i18n
39
+ // was never configured (src/i18n/config.ts).
40
+ configureI18n({
41
+ useRouter: () => ({
42
+ push: vi.fn(),
43
+ replace: vi.fn(),
44
+ back: vi.fn(),
45
+ forward: vi.fn(),
46
+ refresh: vi.fn(),
47
+ prefetch: vi.fn(),
48
+ }),
49
+ useTranslations: () => (key: string) => key,
50
+ usePathname: () => "/",
51
+ Link: ({
52
+ href,
53
+ children,
54
+ prefetch: _prefetch,
55
+ ...rest
56
+ }: {
57
+ href: string;
58
+ children: React.ReactNode;
59
+ [key: string]: any;
60
+ }) => (
61
+ <a href={href} {...rest}>
62
+ {children}
63
+ </a>
64
+ ),
65
+ });
21
66
  Element.prototype.scrollIntoView = vi.fn();
22
67
  const assistantModule = { name: "assistants", model: Assistant } as any;
23
68
  const assistantMessageModule = { name: "assistant-messages", model: AssistantMessage } as any;
@@ -25,6 +70,7 @@ beforeAll(() => {
25
70
  DataClassRegistry.registerObjectClass(assistantMessageModule, AssistantMessage);
26
71
  ModuleRegistry.register("Assistant" as any, assistantModule as any);
27
72
  ModuleRegistry.register("AssistantMessage" as any, assistantMessageModule as any);
73
+ ModuleRegistry.register("Npc" as any, { name: "npcs", pageUrl: "/npcs" } as any);
28
74
  });
29
75
 
30
76
  beforeEach(() => {
@@ -48,6 +94,17 @@ function buildAssistantDehydrated({
48
94
  };
49
95
  }
50
96
 
97
+ function buildMessageDehydrated({ id, content }: { id: string; content: string }): JsonApiHydratedDataInterface {
98
+ return {
99
+ jsonApi: {
100
+ type: "assistant-messages",
101
+ id,
102
+ attributes: { role: "user", content, position: 1 },
103
+ },
104
+ included: [],
105
+ };
106
+ }
107
+
51
108
  describe("AssistantContainer", () => {
52
109
  it("shows empty state when no assistant is active", async () => {
53
110
  render(
@@ -98,4 +155,109 @@ describe("AssistantContainer", () => {
98
155
  // Status line is showing ("thinking…" translation key renders literally in tests).
99
156
  expect(screen.getByText("features.assistant.thinking")).toBeInTheDocument();
100
157
  });
158
+
159
+ it("passes renderMention through to messages", () => {
160
+ const active = buildAssistantDehydrated({ id: "a1", title: "T" });
161
+ const messages = [buildMessageDehydrated({ id: "m1", content: "Ask [X](mention://npcs/n1) about it." })];
162
+ render(
163
+ <AssistantProvider dehydratedAssistant={active} dehydratedMessages={messages}>
164
+ <AssistantContainer
165
+ renderMention={({ type, id, alias }) => <span data-testid="custom-mention">{`${type}:${id}:${alias}`}</span>}
166
+ />
167
+ </AssistantProvider>,
168
+ );
169
+ expect(screen.getByTestId("custom-mention")).toHaveTextContent("npcs:n1:X");
170
+ });
171
+
172
+ it("uses EntityMentionLink by default", () => {
173
+ const active = buildAssistantDehydrated({ id: "a1", title: "T" });
174
+ const messages = [buildMessageDehydrated({ id: "m1", content: "Ask [X](mention://npcs/n1) about it." })];
175
+ render(
176
+ <AssistantProvider dehydratedAssistant={active} dehydratedMessages={messages}>
177
+ <AssistantContainer />
178
+ </AssistantProvider>,
179
+ );
180
+ expect(screen.getByRole("link", { name: "X" })).toHaveAttribute("href", "/npcs/n1");
181
+ });
182
+
183
+ it("embedded renders without RoundPageContainer", async () => {
184
+ const { unmount } = render(
185
+ <AssistantProvider>
186
+ <AssistantContainer />
187
+ </AssistantProvider>,
188
+ );
189
+ expect(screen.getByTestId("round-page-container")).toBeInTheDocument();
190
+ unmount();
191
+
192
+ render(
193
+ <AssistantProvider>
194
+ <AssistantContainer embedded />
195
+ </AssistantProvider>,
196
+ );
197
+ await waitFor(() =>
198
+ expect(screen.getByRole("heading", { name: "features.assistant.empty_state.title" })).toBeInTheDocument(),
199
+ );
200
+ expect(screen.queryByTestId("round-page-container")).not.toBeInTheDocument();
201
+ });
202
+
203
+ it("renderScopePicker shows only before the first message", async () => {
204
+ AssistantService.create = vi.fn().mockImplementation(() => new Promise(() => {}));
205
+
206
+ render(
207
+ <AssistantProvider>
208
+ <AssistantContainer renderScopePicker={() => <div data-testid="scope-picker" />} />
209
+ </AssistantProvider>,
210
+ );
211
+ expect(screen.getByTestId("scope-picker")).toBeInTheDocument();
212
+
213
+ const textarea = await screen.findByRole("textbox");
214
+ const user = (await import("@testing-library/user-event")).default.setup();
215
+ await user.type(textarea, "first one");
216
+ await user.keyboard("{Enter}");
217
+
218
+ await waitFor(() => expect(screen.queryByTestId("scope-picker")).not.toBeInTheDocument());
219
+ });
220
+
221
+ it("shows the operator toggle by default", async () => {
222
+ render(
223
+ <AssistantProvider>
224
+ <AssistantContainer />
225
+ </AssistantProvider>,
226
+ );
227
+ await waitFor(() => expect(screen.getByText("features.assistant.operator_mode")).toBeInTheDocument());
228
+ });
229
+
230
+ it("showOperatorToggle={false} hides the operator toggle", async () => {
231
+ render(
232
+ <AssistantProvider>
233
+ <AssistantContainer showOperatorToggle={false} />
234
+ </AssistantProvider>,
235
+ );
236
+ await waitFor(() =>
237
+ expect(screen.getByRole("heading", { name: "features.assistant.empty_state.title" })).toBeInTheDocument(),
238
+ );
239
+ expect(screen.queryByText("features.assistant.operator_mode")).not.toBeInTheDocument();
240
+ });
241
+
242
+ it("page: thread list sits in the details panel, without its own new button", async () => {
243
+ AssistantService.findMany = vi.fn().mockResolvedValue([]);
244
+ render(
245
+ <AssistantProvider>
246
+ <AssistantContainer />
247
+ </AssistantProvider>,
248
+ );
249
+ const details = screen.getByTestId("round-page-details");
250
+ expect(details).toHaveTextContent("features.assistant.list_title");
251
+ await waitFor(() => expect(details).toHaveTextContent("features.assistant.empty_sidebar"));
252
+ expect(screen.queryByRole("button", { name: /features\.assistant\.new/ })).not.toBeInTheDocument();
253
+ });
254
+
255
+ it("embedded: keeps the sidebar with its new button", async () => {
256
+ render(
257
+ <AssistantProvider>
258
+ <AssistantContainer embedded />
259
+ </AssistantProvider>,
260
+ );
261
+ expect(screen.getByRole("button", { name: /features\.assistant\.new/ })).toBeInTheDocument();
262
+ });
101
263
  });