@carlonicora/nextjs-jsonapi 1.77.3 → 1.78.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 (102) hide show
  1. package/dist/AssistantInterface-BYgI5z1-.d.mts +12 -0
  2. package/dist/AssistantInterface-DfDcz0gJ.d.ts +12 -0
  3. package/dist/AssistantMessageInterface-D0Kwf8CR.d.mts +36 -0
  4. package/dist/AssistantMessageInterface-DS_tyJTV.d.ts +36 -0
  5. package/dist/{BlockNoteEditor-UB7T7V67.js → BlockNoteEditor-2G5UYALC.js} +14 -14
  6. package/dist/{BlockNoteEditor-UB7T7V67.js.map → BlockNoteEditor-2G5UYALC.js.map} +1 -1
  7. package/dist/{BlockNoteEditor-7HAAXN3H.mjs → BlockNoteEditor-JXK3JGKJ.mjs} +4 -4
  8. package/dist/billing/index.js +346 -346
  9. package/dist/billing/index.mjs +3 -3
  10. package/dist/{chunk-FKLP4NED.js → chunk-FDJQRIMY.js} +320 -18
  11. package/dist/chunk-FDJQRIMY.js.map +1 -0
  12. package/dist/{chunk-XI35ALWY.mjs → chunk-I65SSQ5Z.mjs} +303 -1
  13. package/dist/chunk-I65SSQ5Z.mjs.map +1 -0
  14. package/dist/{chunk-F44ET4AC.mjs → chunk-NB6TIKHK.mjs} +2087 -1463
  15. package/dist/chunk-NB6TIKHK.mjs.map +1 -0
  16. package/dist/{chunk-JOJZRGZL.mjs → chunk-NZOUEN67.mjs} +2 -2
  17. package/dist/{chunk-OTZEXASK.js → chunk-X4YDETTD.js} +11 -11
  18. package/dist/{chunk-OTZEXASK.js.map → chunk-X4YDETTD.js.map} +1 -1
  19. package/dist/{chunk-CV7UOUKQ.js → chunk-ZEDB6JVB.js} +1356 -732
  20. package/dist/chunk-ZEDB6JVB.js.map +1 -0
  21. package/dist/client/index.js +4 -4
  22. package/dist/client/index.mjs +3 -3
  23. package/dist/components/index.d.mts +21 -2
  24. package/dist/components/index.d.ts +21 -2
  25. package/dist/components/index.js +10 -4
  26. package/dist/components/index.js.map +1 -1
  27. package/dist/components/index.mjs +9 -3
  28. package/dist/contexts/index.d.mts +26 -2
  29. package/dist/contexts/index.d.ts +26 -2
  30. package/dist/contexts/index.js +8 -4
  31. package/dist/contexts/index.js.map +1 -1
  32. package/dist/contexts/index.mjs +7 -3
  33. package/dist/core/index.d.mts +110 -3
  34. package/dist/core/index.d.ts +110 -3
  35. package/dist/core/index.js +14 -2
  36. package/dist/core/index.js.map +1 -1
  37. package/dist/core/index.mjs +13 -1
  38. package/dist/index.d.mts +3 -2
  39. package/dist/index.d.ts +3 -2
  40. package/dist/index.js +15 -3
  41. package/dist/index.js.map +1 -1
  42. package/dist/index.mjs +14 -2
  43. package/dist/server/index.js +3 -3
  44. package/dist/server/index.mjs +1 -1
  45. package/package.json +1 -1
  46. package/src/components/index.ts +2 -0
  47. package/src/contexts/index.ts +1 -0
  48. package/src/core/index.ts +4 -0
  49. package/src/core/registry/ModuleRegistry.ts +9 -0
  50. package/src/features/assistant/AssistantModule.ts +19 -0
  51. package/src/features/assistant/components/containers/AssistantContainer.tsx +56 -0
  52. package/src/features/assistant/components/containers/__tests__/AssistantContainer.spec.tsx +101 -0
  53. package/src/features/assistant/components/index.ts +1 -0
  54. package/src/features/assistant/components/parts/AssistantComposer.tsx +56 -0
  55. package/src/features/assistant/components/parts/AssistantEmptyState.tsx +47 -0
  56. package/src/features/assistant/components/parts/AssistantSidebar.tsx +64 -0
  57. package/src/features/assistant/components/parts/AssistantStatusLine.tsx +19 -0
  58. package/src/features/assistant/components/parts/AssistantThread.tsx +36 -0
  59. package/src/features/assistant/components/parts/AssistantThreadHeader.tsx +91 -0
  60. package/src/features/assistant/components/parts/__tests__/AssistantComposer.spec.tsx +32 -0
  61. package/src/features/assistant/components/parts/__tests__/AssistantEmptyState.spec.tsx +27 -0
  62. package/src/features/assistant/components/parts/__tests__/AssistantSidebar.spec.tsx +58 -0
  63. package/src/features/assistant/components/parts/__tests__/AssistantStatusLine.spec.tsx +19 -0
  64. package/src/features/assistant/components/parts/__tests__/AssistantThread.spec.tsx +39 -0
  65. package/src/features/assistant/components/parts/__tests__/AssistantThreadHeader.spec.tsx +67 -0
  66. package/src/features/assistant/contexts/AssistantContext.tsx +255 -0
  67. package/src/features/assistant/contexts/__tests__/AssistantContext.spec.tsx +375 -0
  68. package/src/features/assistant/data/Assistant.ts +37 -0
  69. package/src/features/assistant/data/AssistantInterface.ts +11 -0
  70. package/src/features/assistant/data/AssistantService.ts +79 -0
  71. package/src/features/assistant/data/index.ts +3 -0
  72. package/src/features/assistant/index.ts +2 -0
  73. package/src/features/assistant/utils/__tests__/groupThreadsByBucket.spec.ts +24 -0
  74. package/src/features/assistant/utils/__tests__/resolveReferenceableModules.spec.ts +92 -0
  75. package/src/features/assistant/utils/groupThreadsByBucket.ts +26 -0
  76. package/src/features/assistant/utils/resolveReferenceableModules.ts +14 -0
  77. package/src/features/assistant-message/AssistantMessageModule.ts +28 -0
  78. package/src/features/assistant-message/components/MessageItem.tsx +60 -0
  79. package/src/features/assistant-message/components/MessageList.tsx +38 -0
  80. package/src/features/assistant-message/components/__tests__/MessageItem.spec.tsx +108 -0
  81. package/src/features/assistant-message/components/index.ts +2 -0
  82. package/src/features/assistant-message/components/parts/ReferenceBadges.tsx +46 -0
  83. package/src/features/assistant-message/components/parts/SuggestedFollowUps.tsx +52 -0
  84. package/src/features/assistant-message/components/parts/__tests__/ReferenceBadges.spec.tsx +59 -0
  85. package/src/features/assistant-message/components/parts/__tests__/SuggestedFollowUps.spec.tsx +29 -0
  86. package/src/features/assistant-message/data/AssistantMessage.ts +95 -0
  87. package/src/features/assistant-message/data/AssistantMessageInterface.ts +21 -0
  88. package/src/features/assistant-message/data/AssistantMessageService.ts +40 -0
  89. package/src/features/assistant-message/data/__tests__/AssistantMessage.spec.ts +158 -0
  90. package/src/features/assistant-message/data/index.ts +3 -0
  91. package/src/features/assistant-message/index.ts +2 -0
  92. package/src/features/user/contexts/CurrentUserContext.tsx +5 -13
  93. package/src/features/user/contexts/__tests__/CurrentUserContext.spec.tsx +141 -0
  94. package/src/index.ts +4 -0
  95. package/dist/HowToInterface-BKhnkzBp.d.ts +0 -17
  96. package/dist/HowToInterface-Cj8OuQFf.d.mts +0 -17
  97. package/dist/chunk-CV7UOUKQ.js.map +0 -1
  98. package/dist/chunk-F44ET4AC.mjs.map +0 -1
  99. package/dist/chunk-FKLP4NED.js.map +0 -1
  100. package/dist/chunk-XI35ALWY.mjs.map +0 -1
  101. /package/dist/{BlockNoteEditor-7HAAXN3H.mjs.map → BlockNoteEditor-JXK3JGKJ.mjs.map} +0 -0
  102. /package/dist/{chunk-JOJZRGZL.mjs.map → chunk-NZOUEN67.mjs.map} +0 -0
package/dist/index.js CHANGED
@@ -17,7 +17,7 @@
17
17
 
18
18
 
19
19
 
20
- var _chunkOTZEXASKjs = require('./chunk-OTZEXASK.js');
20
+ var _chunkX4YDETTDjs = require('./chunk-X4YDETTD.js');
21
21
 
22
22
 
23
23
 
@@ -187,7 +187,13 @@ var _chunkOTZEXASKjs = require('./chunk-OTZEXASK.js');
187
187
 
188
188
 
189
189
 
190
- var _chunkFKLP4NEDjs = require('./chunk-FKLP4NED.js');
190
+
191
+
192
+
193
+
194
+
195
+
196
+ var _chunkFDJQRIMYjs = require('./chunk-FDJQRIMY.js');
191
197
  require('./chunk-LXKSUWAV.js');
192
198
  require('./chunk-IBS6NI7D.js');
193
199
 
@@ -399,5 +405,11 @@ require('./chunk-7QVYU63E.js');
399
405
 
400
406
 
401
407
 
402
- exports.ACTION_TYPES = _chunkOTZEXASKjs.ACTION_TYPES; exports.AVAILABLE_OAUTH_SCOPES = _chunkFKLP4NEDjs.AVAILABLE_OAUTH_SCOPES; exports.AbstractApiData = _chunkFKLP4NEDjs.AbstractApiData; exports.AbstractService = _chunkFKLP4NEDjs.AbstractService; exports.Action = _chunkFKLP4NEDjs.Action; exports.AuditLog = _chunkFKLP4NEDjs.AuditLog; exports.AuditLogModule = _chunkFKLP4NEDjs.AuditLogModule; exports.AuditLogService = _chunkFKLP4NEDjs.AuditLogService; exports.Auth = _chunkFKLP4NEDjs.Auth; exports.AuthComponent = _chunkFKLP4NEDjs.AuthComponent; exports.AuthModule = _chunkFKLP4NEDjs.AuthModule; exports.AuthService = _chunkFKLP4NEDjs.AuthService; exports.AuthorModule = _chunkFKLP4NEDjs.AuthorModule; exports.BackupCodeVerify = _chunkFKLP4NEDjs.BackupCodeVerify; exports.BackupCodeVerifyModule = _chunkFKLP4NEDjs.BackupCodeVerifyModule; exports.Billing = _chunkFKLP4NEDjs.Billing; exports.BillingModule = _chunkFKLP4NEDjs.BillingModule; exports.BillingService = _chunkFKLP4NEDjs.BillingService; exports.BlockNoteDiffUtil = _chunkFKLP4NEDjs.BlockNoteDiffUtil; exports.BlockNoteWordDiffRendererUtil = _chunkFKLP4NEDjs.BlockNoteWordDiffRendererUtil; exports.COMPANY_ADMINISTRATOR_ROLE_ID = _chunkOTZEXASKjs.COMPANY_ADMINISTRATOR_ROLE_ID; exports.ClientAbstractService = _chunkFKLP4NEDjs.ClientAbstractService; exports.ClientHttpMethod = _chunkFKLP4NEDjs.ClientHttpMethod; exports.Company = _chunkFKLP4NEDjs.Company; exports.CompanyFields = _chunkFKLP4NEDjs.CompanyFields; exports.CompanyModule = _chunkFKLP4NEDjs.CompanyModule; exports.CompanyService = _chunkFKLP4NEDjs.CompanyService; exports.Content = _chunkFKLP4NEDjs.Content; exports.ContentFields = _chunkFKLP4NEDjs.ContentFields; exports.ContentModule = _chunkFKLP4NEDjs.ContentModule; exports.ContentService = _chunkFKLP4NEDjs.ContentService; exports.DEFAULT_GRANT_TYPES = _chunkFKLP4NEDjs.DEFAULT_GRANT_TYPES; exports.DataClass = _chunk4MN547K7js.DataClassRegistry; exports.DataClassRegistry = _chunk4MN547K7js.DataClassRegistry; exports.EndpointCreator = _chunkFKLP4NEDjs.EndpointCreator; exports.Feature = _chunkFKLP4NEDjs.Feature; exports.FeatureModule = _chunkFKLP4NEDjs.FeatureModule; exports.FeatureService = _chunkFKLP4NEDjs.FeatureService; exports.HowTo = _chunkFKLP4NEDjs.HowTo; exports.HowToFields = _chunkFKLP4NEDjs.HowToFields; exports.HowToModule = _chunkFKLP4NEDjs.HowToModule; exports.HowToService = _chunkFKLP4NEDjs.HowToService; exports.HttpMethod = _chunkFKLP4NEDjs.HttpMethod; exports.InvoiceStatus = _chunkFKLP4NEDjs.InvoiceStatus; exports.JsonApiDataFactory = _chunk4MN547K7js.JsonApiDataFactory; exports.Module = _chunkFKLP4NEDjs.Module; exports.ModuleModule = _chunkFKLP4NEDjs.ModuleModule; exports.ModulePaths = _chunkFKLP4NEDjs.ModulePaths; exports.ModulePathsModule = _chunkFKLP4NEDjs.ModulePathsModule; exports.ModuleRegistrar = _chunkFKLP4NEDjs.ModuleRegistrar; exports.ModuleRegistry = _chunkFKLP4NEDjs.ModuleRegistry; exports.Modules = _chunkFKLP4NEDjs.Modules; exports.Notification = _chunkFKLP4NEDjs.Notification; exports.NotificationFields = _chunkFKLP4NEDjs.NotificationFields; exports.NotificationModule = _chunkFKLP4NEDjs.NotificationModule; exports.NotificationService = _chunkFKLP4NEDjs.NotificationService; exports.OAUTH_SCOPE_DISPLAY = _chunkFKLP4NEDjs.OAUTH_SCOPE_DISPLAY; exports.OAuthClient = _chunkFKLP4NEDjs.OAuthClient; exports.OAuthModule = _chunkFKLP4NEDjs.OAuthModule; exports.OAuthService = _chunkFKLP4NEDjs.OAuthService; exports.Passkey = _chunkFKLP4NEDjs.Passkey; exports.PasskeyAuthenticationOptions = _chunkFKLP4NEDjs.PasskeyAuthenticationOptions; exports.PasskeyAuthenticationOptionsModule = _chunkFKLP4NEDjs.PasskeyAuthenticationOptionsModule; exports.PasskeyModule = _chunkFKLP4NEDjs.PasskeyModule; exports.PasskeyRegistrationOptions = _chunkFKLP4NEDjs.PasskeyRegistrationOptions; exports.PasskeyRegistrationOptionsModule = _chunkFKLP4NEDjs.PasskeyRegistrationOptionsModule; exports.PasskeyRegistrationVerify = _chunkFKLP4NEDjs.PasskeyRegistrationVerify; exports.PasskeyRegistrationVerifyModule = _chunkFKLP4NEDjs.PasskeyRegistrationVerifyModule; exports.PasskeyRename = _chunkFKLP4NEDjs.PasskeyRename; exports.PasskeyRenameModule = _chunkFKLP4NEDjs.PasskeyRenameModule; exports.PasskeyVerifyLogin = _chunkFKLP4NEDjs.PasskeyVerifyLogin; exports.PasskeyVerifyLoginModule = _chunkFKLP4NEDjs.PasskeyVerifyLoginModule; exports.PaymentMethod = _chunkFKLP4NEDjs.PaymentMethod; exports.PermissionMapping = _chunkFKLP4NEDjs.PermissionMapping; exports.PermissionMappingModule = _chunkFKLP4NEDjs.PermissionMappingModule; exports.Push = _chunkFKLP4NEDjs.Push; exports.PushModule = _chunkFKLP4NEDjs.PushModule; exports.PushService = _chunkFKLP4NEDjs.PushService; exports.RbacService = _chunkOTZEXASKjs.RbacService; exports.ReferralModule = _chunkFKLP4NEDjs.ReferralModule; exports.ReferralService = _chunkFKLP4NEDjs.ReferralService; exports.ReferralStats = _chunkFKLP4NEDjs.ReferralStats; exports.ReferralStatsModule = _chunkFKLP4NEDjs.ReferralStatsModule; exports.RehydrationFactory = _chunkFKLP4NEDjs.RehydrationFactory; exports.Role = _chunkFKLP4NEDjs.Role; exports.RoleFields = _chunkFKLP4NEDjs.RoleFields; exports.RoleModule = _chunkFKLP4NEDjs.RoleModule; exports.RoleService = _chunkFKLP4NEDjs.RoleService; exports.S3 = _chunkFKLP4NEDjs.S3; exports.S3Module = _chunkFKLP4NEDjs.S3Module; exports.S3Service = _chunkFKLP4NEDjs.S3Service; exports.StripeCustomer = _chunkFKLP4NEDjs.StripeCustomer; exports.StripeCustomerModule = _chunkFKLP4NEDjs.StripeCustomerModule; exports.StripeCustomerService = _chunkFKLP4NEDjs.StripeCustomerService; exports.StripeInvoice = _chunkFKLP4NEDjs.StripeInvoice; exports.StripeInvoiceModule = _chunkFKLP4NEDjs.StripeInvoiceModule; exports.StripeInvoiceService = _chunkFKLP4NEDjs.StripeInvoiceService; exports.StripePaymentMethodModule = _chunkFKLP4NEDjs.StripePaymentMethodModule; exports.StripePrice = _chunkFKLP4NEDjs.StripePrice; exports.StripePriceModule = _chunkFKLP4NEDjs.StripePriceModule; exports.StripePriceService = _chunkFKLP4NEDjs.StripePriceService; exports.StripeProduct = _chunkFKLP4NEDjs.StripeProduct; exports.StripeProductModule = _chunkFKLP4NEDjs.StripeProductModule; exports.StripeProductService = _chunkFKLP4NEDjs.StripeProductService; exports.StripePromotionCode = _chunkFKLP4NEDjs.StripePromotionCode; exports.StripePromotionCodeModule = _chunkFKLP4NEDjs.StripePromotionCodeModule; exports.StripePromotionCodeService = _chunkFKLP4NEDjs.StripePromotionCodeService; exports.StripeSubscription = _chunkFKLP4NEDjs.StripeSubscription; exports.StripeSubscriptionModule = _chunkFKLP4NEDjs.StripeSubscriptionModule; exports.StripeSubscriptionService = _chunkFKLP4NEDjs.StripeSubscriptionService; exports.StripeUsage = _chunkFKLP4NEDjs.StripeUsage; exports.StripeUsageModule = _chunkFKLP4NEDjs.StripeUsageModule; exports.StripeUsageService = _chunkFKLP4NEDjs.StripeUsageService; exports.SubscriptionStatus = _chunkFKLP4NEDjs.SubscriptionStatus; exports.TableOptions = _chunkFKLP4NEDjs.TableOptions; exports.TotpAuthenticator = _chunkFKLP4NEDjs.TotpAuthenticator; exports.TotpAuthenticatorModule = _chunkFKLP4NEDjs.TotpAuthenticatorModule; exports.TotpSetup = _chunkFKLP4NEDjs.TotpSetup; exports.TotpSetupModule = _chunkFKLP4NEDjs.TotpSetupModule; exports.TotpVerify = _chunkFKLP4NEDjs.TotpVerify; exports.TotpVerifyLogin = _chunkFKLP4NEDjs.TotpVerifyLogin; exports.TotpVerifyLoginModule = _chunkFKLP4NEDjs.TotpVerifyLoginModule; exports.TotpVerifyModule = _chunkFKLP4NEDjs.TotpVerifyModule; exports.TwoFactorChallenge = _chunkFKLP4NEDjs.TwoFactorChallenge; exports.TwoFactorChallengeModule = _chunkFKLP4NEDjs.TwoFactorChallengeModule; exports.TwoFactorEnable = _chunkFKLP4NEDjs.TwoFactorEnable; exports.TwoFactorEnableModule = _chunkFKLP4NEDjs.TwoFactorEnableModule; exports.TwoFactorService = _chunkFKLP4NEDjs.TwoFactorService; exports.TwoFactorStatus = _chunkFKLP4NEDjs.TwoFactorStatus; exports.TwoFactorStatusModule = _chunkFKLP4NEDjs.TwoFactorStatusModule; exports.User = _chunkFKLP4NEDjs.User; exports.UserFields = _chunkFKLP4NEDjs.UserFields; exports.UserModule = _chunkFKLP4NEDjs.UserModule; exports.UserService = _chunkFKLP4NEDjs.UserService; exports.Waitlist = _chunkFKLP4NEDjs.Waitlist; exports.WaitlistModule = _chunkFKLP4NEDjs.WaitlistModule; exports.WaitlistService = _chunkFKLP4NEDjs.WaitlistService; exports.WaitlistStats = _chunkFKLP4NEDjs.WaitlistStats; exports.WaitlistStatsModule = _chunkFKLP4NEDjs.WaitlistStatsModule; exports.checkPermissions = _chunkFKLP4NEDjs.checkPermissions; exports.checkPermissionsFromServer = _chunkFKLP4NEDjs.checkPermissionsFromServer; exports.clearLastApiTotal = _chunkFKLP4NEDjs.clearLastApiTotal; exports.cn = _chunkFKLP4NEDjs.cn; exports.composeRefs = _chunkFKLP4NEDjs.composeRefs; exports.configureAuth = _chunkFKLP4NEDjs.configureAuth; exports.configureI18n = _chunkOTZEXASKjs.configureI18n; exports.configureJsonApi = _chunkOTZEXASKjs.configureJsonApi; exports.configureLogin = _chunkOTZEXASKjs.configureLogin; exports.configureReferral = _chunkOTZEXASKjs.configureReferral; exports.configureRoles = _chunkOTZEXASKjs.configureRoles; exports.configureWaitlist = _chunkOTZEXASKjs.configureWaitlist; exports.createJsonApiInclusion = _chunkFKLP4NEDjs.createJsonApiInclusion; exports.dismissToast = _chunkFKLP4NEDjs.dismissToast; exports.entityObjectSchema = _chunkFKLP4NEDjs.entityObjectSchema; exports.exists = _chunkFKLP4NEDjs.exists; exports.formatDate = _chunkFKLP4NEDjs.formatDate; exports.getApiUrl = _chunkOTZEXASKjs.getApiUrl; exports.getAppUrl = _chunkOTZEXASKjs.getAppUrl; exports.getBootstrapper = _chunk4MN547K7js.getBootstrapper; exports.getClientGlobalErrorHandler = _chunkFKLP4NEDjs.getClientGlobalErrorHandler; exports.getGlobalErrorHandler = _chunkFKLP4NEDjs.getGlobalErrorHandler; exports.getIcon = _chunkFKLP4NEDjs.getIcon; exports.getIconByModule = _chunkFKLP4NEDjs.getIconByModule; exports.getIconByModuleName = _chunkFKLP4NEDjs.getIconByModuleName; exports.getInitials = _chunkFKLP4NEDjs.getInitials; exports.getLastApiTotal = _chunkFKLP4NEDjs.getLastApiTotal; exports.getLucideIcon = _chunkFKLP4NEDjs.getLucideIcon; exports.getLucideIconByModule = _chunkFKLP4NEDjs.getLucideIconByModule; exports.getLucideIconByModuleName = _chunkFKLP4NEDjs.getLucideIconByModuleName; exports.getReferralConfig = _chunkOTZEXASKjs.getReferralConfig; exports.getRoleId = _chunkOTZEXASKjs.getRoleId; exports.getStripePublishableKey = _chunkOTZEXASKjs.getStripePublishableKey; exports.getTableComponents = _chunkFKLP4NEDjs.getTableComponents; exports.getTableOptions = _chunkFKLP4NEDjs.getTableOptions; exports.getTokenHandler = _chunkFKLP4NEDjs.getTokenHandler; exports.getTrackablePages = _chunkOTZEXASKjs.getTrackablePages; exports.getValueFromPath = _chunkFKLP4NEDjs.getValueFromPath; exports.getWaitlistConfig = _chunkOTZEXASKjs.getWaitlistConfig; exports.hasBootstrapper = _chunk4MN547K7js.hasBootstrapper; exports.isReferralEnabled = _chunkOTZEXASKjs.isReferralEnabled; exports.isRolesConfigured = _chunkOTZEXASKjs.isRolesConfigured; exports.rehydrate = _chunkFKLP4NEDjs.rehydrate; exports.rehydrateList = _chunkFKLP4NEDjs.rehydrateList; exports.resetBootstrapStore = _chunk4MN547K7js.resetBootstrapStore; exports.setBootstrapper = _chunk4MN547K7js.setBootstrapper; exports.setClientGlobalErrorHandler = _chunkFKLP4NEDjs.setClientGlobalErrorHandler; exports.setGlobalErrorHandler = _chunkFKLP4NEDjs.setGlobalErrorHandler; exports.showCustomToast = _chunkFKLP4NEDjs.showCustomToast; exports.showError = _chunkFKLP4NEDjs.showError; exports.showToast = _chunkFKLP4NEDjs.showToast; exports.translateData = _chunk4MN547K7js.translateData; exports.translateResponse = _chunk4MN547K7js.translateResponse; exports.tryBootstrap = _chunk4MN547K7js.tryBootstrap; exports.useComposedRefs = _chunkFKLP4NEDjs.useComposedRefs; exports.useIsMobile = _chunkFKLP4NEDjs.useIsMobile; exports.userObjectSchema = _chunkFKLP4NEDjs.userObjectSchema;
408
+
409
+
410
+
411
+
412
+
413
+
414
+ exports.ACTION_TYPES = _chunkX4YDETTDjs.ACTION_TYPES; exports.AVAILABLE_OAUTH_SCOPES = _chunkFDJQRIMYjs.AVAILABLE_OAUTH_SCOPES; exports.AbstractApiData = _chunkFDJQRIMYjs.AbstractApiData; exports.AbstractService = _chunkFDJQRIMYjs.AbstractService; exports.Action = _chunkFDJQRIMYjs.Action; exports.Assistant = _chunkFDJQRIMYjs.Assistant; exports.AssistantMessage = _chunkFDJQRIMYjs.AssistantMessage; exports.AssistantMessageModule = _chunkFDJQRIMYjs.AssistantMessageModule; exports.AssistantMessageService = _chunkFDJQRIMYjs.AssistantMessageService; exports.AssistantModule = _chunkFDJQRIMYjs.AssistantModule; exports.AssistantService = _chunkFDJQRIMYjs.AssistantService; exports.AuditLog = _chunkFDJQRIMYjs.AuditLog; exports.AuditLogModule = _chunkFDJQRIMYjs.AuditLogModule; exports.AuditLogService = _chunkFDJQRIMYjs.AuditLogService; exports.Auth = _chunkFDJQRIMYjs.Auth; exports.AuthComponent = _chunkFDJQRIMYjs.AuthComponent; exports.AuthModule = _chunkFDJQRIMYjs.AuthModule; exports.AuthService = _chunkFDJQRIMYjs.AuthService; exports.AuthorModule = _chunkFDJQRIMYjs.AuthorModule; exports.BackupCodeVerify = _chunkFDJQRIMYjs.BackupCodeVerify; exports.BackupCodeVerifyModule = _chunkFDJQRIMYjs.BackupCodeVerifyModule; exports.Billing = _chunkFDJQRIMYjs.Billing; exports.BillingModule = _chunkFDJQRIMYjs.BillingModule; exports.BillingService = _chunkFDJQRIMYjs.BillingService; exports.BlockNoteDiffUtil = _chunkFDJQRIMYjs.BlockNoteDiffUtil; exports.BlockNoteWordDiffRendererUtil = _chunkFDJQRIMYjs.BlockNoteWordDiffRendererUtil; exports.COMPANY_ADMINISTRATOR_ROLE_ID = _chunkX4YDETTDjs.COMPANY_ADMINISTRATOR_ROLE_ID; exports.ClientAbstractService = _chunkFDJQRIMYjs.ClientAbstractService; exports.ClientHttpMethod = _chunkFDJQRIMYjs.ClientHttpMethod; exports.Company = _chunkFDJQRIMYjs.Company; exports.CompanyFields = _chunkFDJQRIMYjs.CompanyFields; exports.CompanyModule = _chunkFDJQRIMYjs.CompanyModule; exports.CompanyService = _chunkFDJQRIMYjs.CompanyService; exports.Content = _chunkFDJQRIMYjs.Content; exports.ContentFields = _chunkFDJQRIMYjs.ContentFields; exports.ContentModule = _chunkFDJQRIMYjs.ContentModule; exports.ContentService = _chunkFDJQRIMYjs.ContentService; exports.DEFAULT_GRANT_TYPES = _chunkFDJQRIMYjs.DEFAULT_GRANT_TYPES; exports.DataClass = _chunk4MN547K7js.DataClassRegistry; exports.DataClassRegistry = _chunk4MN547K7js.DataClassRegistry; exports.EndpointCreator = _chunkFDJQRIMYjs.EndpointCreator; exports.Feature = _chunkFDJQRIMYjs.Feature; exports.FeatureModule = _chunkFDJQRIMYjs.FeatureModule; exports.FeatureService = _chunkFDJQRIMYjs.FeatureService; exports.HowTo = _chunkFDJQRIMYjs.HowTo; exports.HowToFields = _chunkFDJQRIMYjs.HowToFields; exports.HowToModule = _chunkFDJQRIMYjs.HowToModule; exports.HowToService = _chunkFDJQRIMYjs.HowToService; exports.HttpMethod = _chunkFDJQRIMYjs.HttpMethod; exports.InvoiceStatus = _chunkFDJQRIMYjs.InvoiceStatus; exports.JsonApiDataFactory = _chunk4MN547K7js.JsonApiDataFactory; exports.Module = _chunkFDJQRIMYjs.Module; exports.ModuleModule = _chunkFDJQRIMYjs.ModuleModule; exports.ModulePaths = _chunkFDJQRIMYjs.ModulePaths; exports.ModulePathsModule = _chunkFDJQRIMYjs.ModulePathsModule; exports.ModuleRegistrar = _chunkFDJQRIMYjs.ModuleRegistrar; exports.ModuleRegistry = _chunkFDJQRIMYjs.ModuleRegistry; exports.Modules = _chunkFDJQRIMYjs.Modules; exports.Notification = _chunkFDJQRIMYjs.Notification; exports.NotificationFields = _chunkFDJQRIMYjs.NotificationFields; exports.NotificationModule = _chunkFDJQRIMYjs.NotificationModule; exports.NotificationService = _chunkFDJQRIMYjs.NotificationService; exports.OAUTH_SCOPE_DISPLAY = _chunkFDJQRIMYjs.OAUTH_SCOPE_DISPLAY; exports.OAuthClient = _chunkFDJQRIMYjs.OAuthClient; exports.OAuthModule = _chunkFDJQRIMYjs.OAuthModule; exports.OAuthService = _chunkFDJQRIMYjs.OAuthService; exports.Passkey = _chunkFDJQRIMYjs.Passkey; exports.PasskeyAuthenticationOptions = _chunkFDJQRIMYjs.PasskeyAuthenticationOptions; exports.PasskeyAuthenticationOptionsModule = _chunkFDJQRIMYjs.PasskeyAuthenticationOptionsModule; exports.PasskeyModule = _chunkFDJQRIMYjs.PasskeyModule; exports.PasskeyRegistrationOptions = _chunkFDJQRIMYjs.PasskeyRegistrationOptions; exports.PasskeyRegistrationOptionsModule = _chunkFDJQRIMYjs.PasskeyRegistrationOptionsModule; exports.PasskeyRegistrationVerify = _chunkFDJQRIMYjs.PasskeyRegistrationVerify; exports.PasskeyRegistrationVerifyModule = _chunkFDJQRIMYjs.PasskeyRegistrationVerifyModule; exports.PasskeyRename = _chunkFDJQRIMYjs.PasskeyRename; exports.PasskeyRenameModule = _chunkFDJQRIMYjs.PasskeyRenameModule; exports.PasskeyVerifyLogin = _chunkFDJQRIMYjs.PasskeyVerifyLogin; exports.PasskeyVerifyLoginModule = _chunkFDJQRIMYjs.PasskeyVerifyLoginModule; exports.PaymentMethod = _chunkFDJQRIMYjs.PaymentMethod; exports.PermissionMapping = _chunkFDJQRIMYjs.PermissionMapping; exports.PermissionMappingModule = _chunkFDJQRIMYjs.PermissionMappingModule; exports.Push = _chunkFDJQRIMYjs.Push; exports.PushModule = _chunkFDJQRIMYjs.PushModule; exports.PushService = _chunkFDJQRIMYjs.PushService; exports.RbacService = _chunkX4YDETTDjs.RbacService; exports.ReferralModule = _chunkFDJQRIMYjs.ReferralModule; exports.ReferralService = _chunkFDJQRIMYjs.ReferralService; exports.ReferralStats = _chunkFDJQRIMYjs.ReferralStats; exports.ReferralStatsModule = _chunkFDJQRIMYjs.ReferralStatsModule; exports.RehydrationFactory = _chunkFDJQRIMYjs.RehydrationFactory; exports.Role = _chunkFDJQRIMYjs.Role; exports.RoleFields = _chunkFDJQRIMYjs.RoleFields; exports.RoleModule = _chunkFDJQRIMYjs.RoleModule; exports.RoleService = _chunkFDJQRIMYjs.RoleService; exports.S3 = _chunkFDJQRIMYjs.S3; exports.S3Module = _chunkFDJQRIMYjs.S3Module; exports.S3Service = _chunkFDJQRIMYjs.S3Service; exports.StripeCustomer = _chunkFDJQRIMYjs.StripeCustomer; exports.StripeCustomerModule = _chunkFDJQRIMYjs.StripeCustomerModule; exports.StripeCustomerService = _chunkFDJQRIMYjs.StripeCustomerService; exports.StripeInvoice = _chunkFDJQRIMYjs.StripeInvoice; exports.StripeInvoiceModule = _chunkFDJQRIMYjs.StripeInvoiceModule; exports.StripeInvoiceService = _chunkFDJQRIMYjs.StripeInvoiceService; exports.StripePaymentMethodModule = _chunkFDJQRIMYjs.StripePaymentMethodModule; exports.StripePrice = _chunkFDJQRIMYjs.StripePrice; exports.StripePriceModule = _chunkFDJQRIMYjs.StripePriceModule; exports.StripePriceService = _chunkFDJQRIMYjs.StripePriceService; exports.StripeProduct = _chunkFDJQRIMYjs.StripeProduct; exports.StripeProductModule = _chunkFDJQRIMYjs.StripeProductModule; exports.StripeProductService = _chunkFDJQRIMYjs.StripeProductService; exports.StripePromotionCode = _chunkFDJQRIMYjs.StripePromotionCode; exports.StripePromotionCodeModule = _chunkFDJQRIMYjs.StripePromotionCodeModule; exports.StripePromotionCodeService = _chunkFDJQRIMYjs.StripePromotionCodeService; exports.StripeSubscription = _chunkFDJQRIMYjs.StripeSubscription; exports.StripeSubscriptionModule = _chunkFDJQRIMYjs.StripeSubscriptionModule; exports.StripeSubscriptionService = _chunkFDJQRIMYjs.StripeSubscriptionService; exports.StripeUsage = _chunkFDJQRIMYjs.StripeUsage; exports.StripeUsageModule = _chunkFDJQRIMYjs.StripeUsageModule; exports.StripeUsageService = _chunkFDJQRIMYjs.StripeUsageService; exports.SubscriptionStatus = _chunkFDJQRIMYjs.SubscriptionStatus; exports.TableOptions = _chunkFDJQRIMYjs.TableOptions; exports.TotpAuthenticator = _chunkFDJQRIMYjs.TotpAuthenticator; exports.TotpAuthenticatorModule = _chunkFDJQRIMYjs.TotpAuthenticatorModule; exports.TotpSetup = _chunkFDJQRIMYjs.TotpSetup; exports.TotpSetupModule = _chunkFDJQRIMYjs.TotpSetupModule; exports.TotpVerify = _chunkFDJQRIMYjs.TotpVerify; exports.TotpVerifyLogin = _chunkFDJQRIMYjs.TotpVerifyLogin; exports.TotpVerifyLoginModule = _chunkFDJQRIMYjs.TotpVerifyLoginModule; exports.TotpVerifyModule = _chunkFDJQRIMYjs.TotpVerifyModule; exports.TwoFactorChallenge = _chunkFDJQRIMYjs.TwoFactorChallenge; exports.TwoFactorChallengeModule = _chunkFDJQRIMYjs.TwoFactorChallengeModule; exports.TwoFactorEnable = _chunkFDJQRIMYjs.TwoFactorEnable; exports.TwoFactorEnableModule = _chunkFDJQRIMYjs.TwoFactorEnableModule; exports.TwoFactorService = _chunkFDJQRIMYjs.TwoFactorService; exports.TwoFactorStatus = _chunkFDJQRIMYjs.TwoFactorStatus; exports.TwoFactorStatusModule = _chunkFDJQRIMYjs.TwoFactorStatusModule; exports.User = _chunkFDJQRIMYjs.User; exports.UserFields = _chunkFDJQRIMYjs.UserFields; exports.UserModule = _chunkFDJQRIMYjs.UserModule; exports.UserService = _chunkFDJQRIMYjs.UserService; exports.Waitlist = _chunkFDJQRIMYjs.Waitlist; exports.WaitlistModule = _chunkFDJQRIMYjs.WaitlistModule; exports.WaitlistService = _chunkFDJQRIMYjs.WaitlistService; exports.WaitlistStats = _chunkFDJQRIMYjs.WaitlistStats; exports.WaitlistStatsModule = _chunkFDJQRIMYjs.WaitlistStatsModule; exports.checkPermissions = _chunkFDJQRIMYjs.checkPermissions; exports.checkPermissionsFromServer = _chunkFDJQRIMYjs.checkPermissionsFromServer; exports.clearLastApiTotal = _chunkFDJQRIMYjs.clearLastApiTotal; exports.cn = _chunkFDJQRIMYjs.cn; exports.composeRefs = _chunkFDJQRIMYjs.composeRefs; exports.configureAuth = _chunkFDJQRIMYjs.configureAuth; exports.configureI18n = _chunkX4YDETTDjs.configureI18n; exports.configureJsonApi = _chunkX4YDETTDjs.configureJsonApi; exports.configureLogin = _chunkX4YDETTDjs.configureLogin; exports.configureReferral = _chunkX4YDETTDjs.configureReferral; exports.configureRoles = _chunkX4YDETTDjs.configureRoles; exports.configureWaitlist = _chunkX4YDETTDjs.configureWaitlist; exports.createJsonApiInclusion = _chunkFDJQRIMYjs.createJsonApiInclusion; exports.dismissToast = _chunkFDJQRIMYjs.dismissToast; exports.entityObjectSchema = _chunkFDJQRIMYjs.entityObjectSchema; exports.exists = _chunkFDJQRIMYjs.exists; exports.formatDate = _chunkFDJQRIMYjs.formatDate; exports.getApiUrl = _chunkX4YDETTDjs.getApiUrl; exports.getAppUrl = _chunkX4YDETTDjs.getAppUrl; exports.getBootstrapper = _chunk4MN547K7js.getBootstrapper; exports.getClientGlobalErrorHandler = _chunkFDJQRIMYjs.getClientGlobalErrorHandler; exports.getGlobalErrorHandler = _chunkFDJQRIMYjs.getGlobalErrorHandler; exports.getIcon = _chunkFDJQRIMYjs.getIcon; exports.getIconByModule = _chunkFDJQRIMYjs.getIconByModule; exports.getIconByModuleName = _chunkFDJQRIMYjs.getIconByModuleName; exports.getInitials = _chunkFDJQRIMYjs.getInitials; exports.getLastApiTotal = _chunkFDJQRIMYjs.getLastApiTotal; exports.getLucideIcon = _chunkFDJQRIMYjs.getLucideIcon; exports.getLucideIconByModule = _chunkFDJQRIMYjs.getLucideIconByModule; exports.getLucideIconByModuleName = _chunkFDJQRIMYjs.getLucideIconByModuleName; exports.getReferralConfig = _chunkX4YDETTDjs.getReferralConfig; exports.getRoleId = _chunkX4YDETTDjs.getRoleId; exports.getStripePublishableKey = _chunkX4YDETTDjs.getStripePublishableKey; exports.getTableComponents = _chunkFDJQRIMYjs.getTableComponents; exports.getTableOptions = _chunkFDJQRIMYjs.getTableOptions; exports.getTokenHandler = _chunkFDJQRIMYjs.getTokenHandler; exports.getTrackablePages = _chunkX4YDETTDjs.getTrackablePages; exports.getValueFromPath = _chunkFDJQRIMYjs.getValueFromPath; exports.getWaitlistConfig = _chunkX4YDETTDjs.getWaitlistConfig; exports.hasBootstrapper = _chunk4MN547K7js.hasBootstrapper; exports.isReferralEnabled = _chunkX4YDETTDjs.isReferralEnabled; exports.isRolesConfigured = _chunkX4YDETTDjs.isRolesConfigured; exports.rehydrate = _chunkFDJQRIMYjs.rehydrate; exports.rehydrateList = _chunkFDJQRIMYjs.rehydrateList; exports.resetBootstrapStore = _chunk4MN547K7js.resetBootstrapStore; exports.setBootstrapper = _chunk4MN547K7js.setBootstrapper; exports.setClientGlobalErrorHandler = _chunkFDJQRIMYjs.setClientGlobalErrorHandler; exports.setGlobalErrorHandler = _chunkFDJQRIMYjs.setGlobalErrorHandler; exports.showCustomToast = _chunkFDJQRIMYjs.showCustomToast; exports.showError = _chunkFDJQRIMYjs.showError; exports.showToast = _chunkFDJQRIMYjs.showToast; exports.translateData = _chunk4MN547K7js.translateData; exports.translateResponse = _chunk4MN547K7js.translateResponse; exports.tryBootstrap = _chunk4MN547K7js.tryBootstrap; exports.useComposedRefs = _chunkFDJQRIMYjs.useComposedRefs; exports.useIsMobile = _chunkFDJQRIMYjs.useIsMobile; exports.userObjectSchema = _chunkFDJQRIMYjs.userObjectSchema;
403
415
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/runner/work/nextjs-jsonapi/nextjs-jsonapi/dist/index.js"],"names":[],"mappings":"AAAA;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,sDAA4B;AAC5B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,sDAA4B;AAC5B,+BAA4B;AAC5B,+BAA4B;AAC5B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,sDAA4B;AAC5B,+BAA4B;AAC5B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,2jXAAC","file":"/home/runner/work/nextjs-jsonapi/nextjs-jsonapi/dist/index.js"}
1
+ {"version":3,"sources":["/home/runner/work/nextjs-jsonapi/nextjs-jsonapi/dist/index.js"],"names":[],"mappings":"AAAA;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,sDAA4B;AAC5B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,sDAA4B;AAC5B,+BAA4B;AAC5B,+BAA4B;AAC5B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,sDAA4B;AAC5B,+BAA4B;AAC5B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,y7XAAC","file":"/home/runner/work/nextjs-jsonapi/nextjs-jsonapi/dist/index.js"}
package/dist/index.mjs CHANGED
@@ -17,12 +17,18 @@ import {
17
17
  getWaitlistConfig,
18
18
  isReferralEnabled,
19
19
  isRolesConfigured
20
- } from "./chunk-JOJZRGZL.mjs";
20
+ } from "./chunk-NZOUEN67.mjs";
21
21
  import {
22
22
  AVAILABLE_OAUTH_SCOPES,
23
23
  AbstractApiData,
24
24
  AbstractService,
25
25
  Action,
26
+ Assistant,
27
+ AssistantMessage,
28
+ AssistantMessageModule,
29
+ AssistantMessageService,
30
+ AssistantModule,
31
+ AssistantService,
26
32
  AuditLog,
27
33
  AuditLogModule,
28
34
  AuditLogService,
@@ -187,7 +193,7 @@ import {
187
193
  useComposedRefs,
188
194
  useIsMobile,
189
195
  userObjectSchema
190
- } from "./chunk-XI35ALWY.mjs";
196
+ } from "./chunk-I65SSQ5Z.mjs";
191
197
  import "./chunk-AUXK7QSA.mjs";
192
198
  import "./chunk-C7C7VY4F.mjs";
193
199
  import {
@@ -208,6 +214,12 @@ export {
208
214
  AbstractApiData,
209
215
  AbstractService,
210
216
  Action,
217
+ Assistant,
218
+ AssistantMessage,
219
+ AssistantMessageModule,
220
+ AssistantMessageService,
221
+ AssistantModule,
222
+ AssistantService,
211
223
  AuditLog,
212
224
  AuditLogModule,
213
225
  AuditLogService,
@@ -15,7 +15,7 @@ var _chunk3ZPK4QOBjs = require('../chunk-3ZPK4QOB.js');
15
15
 
16
16
 
17
17
 
18
- var _chunkFKLP4NEDjs = require('../chunk-FKLP4NED.js');
18
+ var _chunkFDJQRIMYjs = require('../chunk-FDJQRIMY.js');
19
19
  require('../chunk-LXKSUWAV.js');
20
20
  require('../chunk-IBS6NI7D.js');
21
21
 
@@ -86,7 +86,7 @@ var ServerSession = class {
86
86
  if (!rawModules) return false;
87
87
  const modules = JSON.parse(_pako2.default.ungzip(Buffer.from(rawModules, "base64"), { to: "string" }));
88
88
  const selectedModule = modules.find((module) => module.id === params.module.moduleId);
89
- return _chunkFKLP4NEDjs.checkPermissionsFromServer.call(void 0, {
89
+ return _chunkFDJQRIMYjs.checkPermissionsFromServer.call(void 0, {
90
90
  module: params.module,
91
91
  action: params.action,
92
92
  data: params.data,
@@ -296,5 +296,5 @@ _chunk7QVYU63Ejs.__name.call(void 0, ServerJsonApiDelete, "ServerJsonApiDelete")
296
296
 
297
297
 
298
298
 
299
- exports.ServerAuthService = _chunkFKLP4NEDjs.AuthService; exports.ServerCompanyService = _chunkFKLP4NEDjs.CompanyService; exports.ServerContentService = _chunkFKLP4NEDjs.ContentService; exports.ServerFeatureService = _chunkFKLP4NEDjs.FeatureService; exports.ServerJsonApiDelete = ServerJsonApiDelete; exports.ServerJsonApiGet = ServerJsonApiGet; exports.ServerJsonApiPatch = ServerJsonApiPatch; exports.ServerJsonApiPost = ServerJsonApiPost; exports.ServerJsonApiPut = ServerJsonApiPut; exports.ServerNotificationService = _chunkFKLP4NEDjs.NotificationService; exports.ServerPushService = _chunkFKLP4NEDjs.PushService; exports.ServerRoleService = _chunkFKLP4NEDjs.RoleService; exports.ServerS3Service = _chunkFKLP4NEDjs.S3Service; exports.ServerSession = ServerSession; exports.ServerUserService = _chunkFKLP4NEDjs.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 = _chunk3ZPK4QOBjs.serverRequest;
299
+ exports.ServerAuthService = _chunkFDJQRIMYjs.AuthService; exports.ServerCompanyService = _chunkFDJQRIMYjs.CompanyService; exports.ServerContentService = _chunkFDJQRIMYjs.ContentService; exports.ServerFeatureService = _chunkFDJQRIMYjs.FeatureService; exports.ServerJsonApiDelete = ServerJsonApiDelete; exports.ServerJsonApiGet = ServerJsonApiGet; exports.ServerJsonApiPatch = ServerJsonApiPatch; exports.ServerJsonApiPost = ServerJsonApiPost; exports.ServerJsonApiPut = ServerJsonApiPut; exports.ServerNotificationService = _chunkFDJQRIMYjs.NotificationService; exports.ServerPushService = _chunkFDJQRIMYjs.PushService; exports.ServerRoleService = _chunkFDJQRIMYjs.RoleService; exports.ServerS3Service = _chunkFDJQRIMYjs.S3Service; exports.ServerSession = ServerSession; exports.ServerUserService = _chunkFDJQRIMYjs.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 = _chunk3ZPK4QOBjs.serverRequest;
300
300
  //# sourceMappingURL=index.js.map
@@ -15,7 +15,7 @@ import {
15
15
  S3Service,
16
16
  UserService,
17
17
  checkPermissionsFromServer
18
- } from "../chunk-XI35ALWY.mjs";
18
+ } from "../chunk-I65SSQ5Z.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": "1.77.3",
3
+ "version": "1.78.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",
@@ -20,6 +20,8 @@ export * from "../features/auth/components";
20
20
  export * from "../features/company/components";
21
21
  export * from "../features/content/components";
22
22
  export * from "../features/how-to/components";
23
+ export * from "../features/assistant/components";
24
+ export * from "../features/assistant-message/components";
23
25
  export * from "../features/feature/components";
24
26
  export * from "../features/notification/components";
25
27
  export * from "../features/onboarding/components";
@@ -4,6 +4,7 @@ export * from "../features/onboarding/contexts";
4
4
  export * from "../features/role/contexts/RoleContext";
5
5
  export * from "../features/user/contexts";
6
6
  export * from "../features/how-to/contexts/HowToContext";
7
+ export * from "../features/assistant/contexts/AssistantContext";
7
8
  export * from "./CommonContext";
8
9
  export * from "./HeaderChildrenContext";
9
10
  export * from "./HeaderLeftContentContext";
package/src/core/index.ts CHANGED
@@ -61,6 +61,10 @@ export * from "../features/content/content.module";
61
61
  export * from "../features/content/data";
62
62
  export * from "../features/how-to/HowToModule";
63
63
  export * from "../features/how-to/data";
64
+ export * from "../features/assistant/AssistantModule";
65
+ export * from "../features/assistant/data";
66
+ export * from "../features/assistant-message/AssistantMessageModule";
67
+ export * from "../features/assistant-message/data";
64
68
  export * from "../features/feature/data";
65
69
  export * from "../features/feature/feature.module";
66
70
  export * from "../features/module";
@@ -16,6 +16,8 @@ export interface FoundationModuleDefinitions {
16
16
  Module: ModuleWithPermissions;
17
17
  Content: ModuleWithPermissions;
18
18
  HowTo: ModuleWithPermissions;
19
+ Assistant: ModuleWithPermissions;
20
+ AssistantMessage: ModuleWithPermissions;
19
21
  // Billing modules - READ: all users, UPDATE: CompanyAdministrator, ADMIN: Administrator
20
22
  Billing: ModuleWithPermissions;
21
23
  StripeCustomer: ModuleWithPermissions;
@@ -171,6 +173,13 @@ class ModuleRegistryClass {
171
173
 
172
174
  return response;
173
175
  }
176
+
177
+ getAll(): ApiRequestDataTypeInterface[] {
178
+ if (this._modules.size === 0) {
179
+ tryBootstrap();
180
+ }
181
+ return Array.from(this._modules.values());
182
+ }
174
183
  }
175
184
 
176
185
  export const ModuleRegistry = new ModuleRegistryClass();
@@ -0,0 +1,19 @@
1
+ import { BotIcon } from "lucide-react";
2
+ import { createJsonApiInclusion } from "../../core";
3
+ import { ModuleFactory } from "../../permissions";
4
+ import { Assistant } from "./data/Assistant";
5
+
6
+ export const AssistantModule = (factory: ModuleFactory) =>
7
+ factory({
8
+ pageUrl: "/assistants",
9
+ name: "assistants",
10
+ model: Assistant,
11
+ moduleId: "2b39fd68-6a41-4f73-a2d0-4c8e8e3f9a42",
12
+ icon: BotIcon,
13
+ identifier: ["title"],
14
+ inclusions: {
15
+ lists: {
16
+ fields: [createJsonApiInclusion("assistants", [`title`])],
17
+ },
18
+ },
19
+ });
@@ -0,0 +1,56 @@
1
+ "use client";
2
+
3
+ import { RoundPageContainer } from "../../../../components/containers/RoundPageContainer";
4
+ import { Modules } from "../../../../core";
5
+ import { useAssistantContext } from "../../contexts/AssistantContext";
6
+ import { AssistantSidebar } from "../parts/AssistantSidebar";
7
+ import { AssistantEmptyState } from "../parts/AssistantEmptyState";
8
+ import { AssistantThreadHeader } from "../parts/AssistantThreadHeader";
9
+ import { AssistantThread } from "../parts/AssistantThread";
10
+ import { AssistantComposer } from "../parts/AssistantComposer";
11
+
12
+ export function AssistantContainer() {
13
+ const ctx = useAssistantContext();
14
+ const showThread = !!ctx.assistant || ctx.sending || ctx.messages.length > 0;
15
+
16
+ return (
17
+ <RoundPageContainer module={Modules.Assistant} fullWidth>
18
+ <div className="bg-background flex h-full w-full overflow-hidden rounded-lg border">
19
+ <AssistantSidebar
20
+ threads={ctx.threads}
21
+ activeId={ctx.assistant?.id}
22
+ onSelect={ctx.selectThread}
23
+ onNew={ctx.startNew}
24
+ />
25
+ <main className="flex flex-1 flex-col">
26
+ {!showThread ? (
27
+ <AssistantEmptyState onSend={ctx.sendMessage} />
28
+ ) : (
29
+ <>
30
+ {ctx.assistant ? (
31
+ <AssistantThreadHeader
32
+ assistant={ctx.assistant}
33
+ onRename={(title) => ctx.renameThread(ctx.assistant!.id, title)}
34
+ onDelete={() => ctx.deleteThread(ctx.assistant!.id)}
35
+ />
36
+ ) : (
37
+ <div className="flex items-center justify-between border-b px-5 py-3" aria-hidden>
38
+ <div className="h-5" />
39
+ </div>
40
+ )}
41
+ <AssistantThread
42
+ messages={ctx.messages}
43
+ sending={ctx.sending}
44
+ status={ctx.status}
45
+ onSelectFollowUp={ctx.sendMessage}
46
+ failedMessageIds={ctx.failedMessageIds}
47
+ onRetry={ctx.retrySend}
48
+ />
49
+ <AssistantComposer onSend={ctx.sendMessage} disabled={ctx.sending} />
50
+ </>
51
+ )}
52
+ </main>
53
+ </div>
54
+ </RoundPageContainer>
55
+ );
56
+ }
@@ -0,0 +1,101 @@
1
+ vi.mock("../../../../../contexts/SocketContext", () => ({
2
+ useSocketContext: () => ({ socket: null, isConnected: false }),
3
+ }));
4
+
5
+ vi.mock("../../../../../components/containers/RoundPageContainer", () => ({
6
+ RoundPageContainer: ({ children }: { children: React.ReactNode }) => <>{children}</>,
7
+ }));
8
+
9
+ import { describe, it, expect, vi, beforeAll, beforeEach } from "vitest";
10
+ import { render, screen, waitFor } from "@testing-library/react";
11
+ import { AssistantProvider } from "../../../contexts/AssistantContext";
12
+ import { AssistantService } from "../../../data/AssistantService";
13
+ import type { JsonApiHydratedDataInterface } from "../../../../../core";
14
+ import { AssistantContainer } from "../AssistantContainer";
15
+ import { ModuleRegistry } from "../../../../../core/registry/ModuleRegistry";
16
+ import { DataClassRegistry } from "../../../../../core/registry/DataClassRegistry";
17
+ import { Assistant } from "../../../data/Assistant";
18
+ import { AssistantMessage } from "../../../../assistant-message/data/AssistantMessage";
19
+
20
+ beforeAll(() => {
21
+ Element.prototype.scrollIntoView = vi.fn();
22
+ const assistantModule = { name: "assistants", model: Assistant } as any;
23
+ const assistantMessageModule = { name: "assistant-messages", model: AssistantMessage } as any;
24
+ DataClassRegistry.registerObjectClass(assistantModule, Assistant);
25
+ DataClassRegistry.registerObjectClass(assistantMessageModule, AssistantMessage);
26
+ ModuleRegistry.register("Assistant" as any, assistantModule as any);
27
+ ModuleRegistry.register("AssistantMessage" as any, assistantMessageModule as any);
28
+ });
29
+
30
+ beforeEach(() => {
31
+ AssistantService.findMany = vi.fn().mockResolvedValue([]);
32
+ });
33
+
34
+ function buildAssistantDehydrated({
35
+ id,
36
+ title = "Stub",
37
+ }: {
38
+ id: string;
39
+ title?: string;
40
+ }): JsonApiHydratedDataInterface {
41
+ return {
42
+ jsonApi: {
43
+ type: "assistants",
44
+ id,
45
+ attributes: { title, messageCount: 0 },
46
+ },
47
+ included: [],
48
+ };
49
+ }
50
+
51
+ describe("AssistantContainer", () => {
52
+ it("shows empty state when no assistant is active", async () => {
53
+ render(
54
+ <AssistantProvider>
55
+ <AssistantContainer />
56
+ </AssistantProvider>,
57
+ );
58
+ // AssistantEmptyState renders heading with translation key
59
+ await waitFor(() =>
60
+ expect(screen.getByRole("heading", { name: "features.assistant.empty_state.title" })).toBeInTheDocument(),
61
+ );
62
+ });
63
+
64
+ it("shows thread header + composer when an assistant is active", async () => {
65
+ const active = buildAssistantDehydrated({ id: "a1", title: "T" });
66
+ render(
67
+ <AssistantProvider dehydratedAssistant={active}>
68
+ <AssistantContainer />
69
+ </AssistantProvider>,
70
+ );
71
+ // Header shows the assistant title
72
+ expect(screen.getByText("T")).toBeInTheDocument();
73
+ // Composer has a textarea
74
+ expect(screen.getByRole("textbox")).toBeInTheDocument();
75
+ });
76
+
77
+ it("shows thread view (not empty state) when sending a first message before assistant resolves", async () => {
78
+ // Keep `AssistantService.create` pending so the assistant is never set.
79
+ AssistantService.create = vi.fn().mockImplementation(() => new Promise(() => {}));
80
+
81
+ render(
82
+ <AssistantProvider>
83
+ <AssistantContainer />
84
+ </AssistantProvider>,
85
+ );
86
+
87
+ // Kick off a send via the composer. The AssistantEmptyState renders its own composer.
88
+ const textarea = await screen.findByRole("textbox");
89
+ const user = (await import("@testing-library/user-event")).default.setup();
90
+ await user.type(textarea, "first one");
91
+ await user.keyboard("{Enter}");
92
+
93
+ // Empty-state title disappears; optimistic user bubble visible.
94
+ await waitFor(() => {
95
+ expect(screen.queryByRole("heading", { name: "features.assistant.empty_state.title" })).not.toBeInTheDocument();
96
+ });
97
+ expect(screen.getByText("first one")).toBeInTheDocument();
98
+ // Status line is showing ("thinking…" translation key renders literally in tests).
99
+ expect(screen.getByText("features.assistant.thinking")).toBeInTheDocument();
100
+ });
101
+ });
@@ -0,0 +1 @@
1
+ export * from "./containers/AssistantContainer";
@@ -0,0 +1,56 @@
1
+ "use client";
2
+
3
+ import { useState, type KeyboardEvent } from "react";
4
+ import { useTranslations } from "next-intl";
5
+ import { ArrowUp } from "lucide-react";
6
+ import { Button, Textarea } from "../../../../shadcnui";
7
+
8
+ interface Props {
9
+ onSend: (content: string) => Promise<void>;
10
+ disabled?: boolean;
11
+ value?: string;
12
+ onValueChange?: (v: string) => void;
13
+ }
14
+
15
+ export function AssistantComposer({ onSend, disabled, value: controlled, onValueChange }: Props) {
16
+ const t = useTranslations();
17
+ const [internal, setInternal] = useState("");
18
+ const value = controlled ?? internal;
19
+ const setValue = onValueChange ?? setInternal;
20
+
21
+ const canSend = value.trim().length > 0 && !disabled;
22
+
23
+ const submit = async () => {
24
+ if (!canSend) return;
25
+ const payload = value.trim();
26
+ setValue("");
27
+ await onSend(payload);
28
+ };
29
+
30
+ const onKeyDown = (e: KeyboardEvent<HTMLTextAreaElement>) => {
31
+ if (e.key === "Enter" && !e.shiftKey) {
32
+ e.preventDefault();
33
+ void submit();
34
+ }
35
+ };
36
+
37
+ return (
38
+ <div className="flex flex-col gap-1 border-t p-4">
39
+ <div className="bg-muted/30 flex items-end gap-2 rounded-lg border p-2">
40
+ <Textarea
41
+ value={value}
42
+ onChange={(e) => setValue(e.target.value)}
43
+ onKeyDown={onKeyDown}
44
+ placeholder={t("features.assistant.composer_placeholder")}
45
+ disabled={disabled}
46
+ rows={2}
47
+ className="min-h-[48px] resize-none border-0 bg-transparent focus-visible:ring-0"
48
+ />
49
+ <Button onClick={submit} disabled={!canSend} size="sm" className="h-8">
50
+ <ArrowUp className="mr-1 h-4 w-4" /> {t("ui.buttons.save")}
51
+ </Button>
52
+ </div>
53
+ <div className="text-muted-foreground text-right text-xs">{t("features.assistant.keyboard_hint")}</div>
54
+ </div>
55
+ );
56
+ }
@@ -0,0 +1,47 @@
1
+ "use client";
2
+
3
+ import { useState } from "react";
4
+ import { useTranslations } from "next-intl";
5
+ import { Sparkles } from "lucide-react";
6
+ import { AssistantComposer } from "./AssistantComposer";
7
+
8
+ interface Props {
9
+ onSend: (content: string) => Promise<void>;
10
+ }
11
+
12
+ const STARTER_KEYS = ["a", "b", "c", "d"] as const;
13
+
14
+ export function AssistantEmptyState({ onSend }: Props) {
15
+ const t = useTranslations();
16
+ const [draft, setDraft] = useState("");
17
+
18
+ return (
19
+ <div className="flex h-full w-full items-center justify-center p-10">
20
+ <div className="flex w-full max-w-2xl flex-col gap-6">
21
+ <div className="text-center">
22
+ <div className="mx-auto mb-3 flex h-10 w-10 items-center justify-center rounded-full bg-gradient-to-br from-blue-400 to-violet-500 text-white">
23
+ <Sparkles className="h-5 w-5" />
24
+ </div>
25
+ <h3 className="text-foreground text-xl font-semibold">{t("features.assistant.empty_state.title")}</h3>
26
+ <p className="text-muted-foreground mt-1 text-sm">{t("features.assistant.empty_state.subtitle")}</p>
27
+ </div>
28
+ <AssistantComposer value={draft} onValueChange={setDraft} onSend={onSend} />
29
+ <div className="grid grid-cols-2 gap-2">
30
+ {STARTER_KEYS.map((k) => {
31
+ const text = t(`features.assistant.starters.${k}`);
32
+ return (
33
+ <button
34
+ key={k}
35
+ type="button"
36
+ className="border-border bg-muted/30 hover:bg-muted rounded-lg border p-3 text-left text-sm"
37
+ onClick={() => setDraft(text)}
38
+ >
39
+ {text}
40
+ </button>
41
+ );
42
+ })}
43
+ </div>
44
+ </div>
45
+ </div>
46
+ );
47
+ }
@@ -0,0 +1,64 @@
1
+ "use client";
2
+
3
+ import { useTranslations } from "next-intl";
4
+ import { Plus } from "lucide-react";
5
+ import { Button } from "../../../../shadcnui";
6
+ import type { AssistantInterface } from "../../data/AssistantInterface";
7
+ import { groupThreadsByBucket } from "../../utils/groupThreadsByBucket";
8
+
9
+ interface Props {
10
+ threads: AssistantInterface[];
11
+ activeId?: string;
12
+ onSelect: (id: string) => void;
13
+ onNew: () => void;
14
+ }
15
+
16
+ export function AssistantSidebar({ threads, activeId, onSelect, onNew }: Props) {
17
+ const t = useTranslations();
18
+ const groups = groupThreadsByBucket(threads);
19
+
20
+ const renderSection = (label: string, items: AssistantInterface[]) => {
21
+ if (items.length === 0) return null;
22
+ return (
23
+ <div className="mb-2">
24
+ <div className="text-muted-foreground px-2 py-1 text-[10px] font-semibold uppercase tracking-wider">
25
+ {label}
26
+ </div>
27
+ {items.map((thread) => (
28
+ <button
29
+ key={thread.id}
30
+ type="button"
31
+ onClick={() => onSelect(thread.id)}
32
+ className={
33
+ "block w-full truncate rounded-md px-2 py-1.5 text-left text-sm " +
34
+ (activeId === thread.id ? "bg-primary/10 text-primary" : "hover:bg-muted text-foreground")
35
+ }
36
+ >
37
+ {thread.title}
38
+ </button>
39
+ ))}
40
+ </div>
41
+ );
42
+ };
43
+
44
+ return (
45
+ <aside className="bg-muted/30 flex w-64 flex-col border-r">
46
+ <div className="border-b p-3">
47
+ <Button onClick={onNew} className="w-full" size="sm">
48
+ <Plus className="mr-1 h-4 w-4" /> {t("features.assistant.new")}
49
+ </Button>
50
+ </div>
51
+ <div className="flex-1 overflow-y-auto p-2">
52
+ {threads.length === 0 ? (
53
+ <div className="text-muted-foreground mt-6 text-center text-xs">{t("features.assistant.empty_sidebar")}</div>
54
+ ) : (
55
+ <>
56
+ {renderSection(t("features.assistant.bucket_today"), groups.today)}
57
+ {renderSection(t("features.assistant.bucket_week"), groups.thisWeek)}
58
+ {renderSection(t("features.assistant.bucket_earlier"), groups.earlier)}
59
+ </>
60
+ )}
61
+ </div>
62
+ </aside>
63
+ );
64
+ }
@@ -0,0 +1,19 @@
1
+ "use client";
2
+
3
+ import { useTranslations } from "next-intl";
4
+ import { Loader2 } from "lucide-react";
5
+
6
+ interface Props {
7
+ status?: string;
8
+ }
9
+
10
+ export function AssistantStatusLine({ status }: Props) {
11
+ const t = useTranslations();
12
+ const text = status ?? t("features.assistant.thinking");
13
+ return (
14
+ <div className="text-muted-foreground flex items-center gap-2 px-4 py-2 text-sm">
15
+ <Loader2 className="h-4 w-4 animate-spin" />
16
+ <span>{text}</span>
17
+ </div>
18
+ );
19
+ }
@@ -0,0 +1,36 @@
1
+ "use client";
2
+
3
+ import { useEffect, useRef } from "react";
4
+ import type { AssistantMessageInterface } from "../../../assistant-message/data/AssistantMessageInterface";
5
+ import { MessageList } from "../../../assistant-message/components/MessageList";
6
+ import { AssistantStatusLine } from "./AssistantStatusLine";
7
+
8
+ interface Props {
9
+ messages: AssistantMessageInterface[];
10
+ sending: boolean;
11
+ status?: string;
12
+ onSelectFollowUp: (q: string) => void;
13
+ failedMessageIds?: Set<string>;
14
+ onRetry?: (tempId: string) => void;
15
+ }
16
+
17
+ export function AssistantThread({ messages, sending, status, onSelectFollowUp, failedMessageIds, onRetry }: Props) {
18
+ const endRef = useRef<HTMLDivElement>(null);
19
+
20
+ useEffect(() => {
21
+ endRef.current?.scrollIntoView({ behavior: "smooth" });
22
+ }, [messages.length, sending]);
23
+
24
+ return (
25
+ <div className="flex-1 overflow-y-auto px-6 py-5">
26
+ <MessageList
27
+ messages={messages}
28
+ onSelectFollowUp={onSelectFollowUp}
29
+ failedMessageIds={failedMessageIds}
30
+ onRetry={onRetry}
31
+ />
32
+ {sending && <AssistantStatusLine status={status} />}
33
+ <div ref={endRef} />
34
+ </div>
35
+ );
36
+ }