@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.
- package/dist/AssistantInterface-BYgI5z1-.d.mts +12 -0
- package/dist/AssistantInterface-DfDcz0gJ.d.ts +12 -0
- package/dist/AssistantMessageInterface-D0Kwf8CR.d.mts +36 -0
- package/dist/AssistantMessageInterface-DS_tyJTV.d.ts +36 -0
- package/dist/{BlockNoteEditor-UB7T7V67.js → BlockNoteEditor-2G5UYALC.js} +14 -14
- package/dist/{BlockNoteEditor-UB7T7V67.js.map → BlockNoteEditor-2G5UYALC.js.map} +1 -1
- package/dist/{BlockNoteEditor-7HAAXN3H.mjs → BlockNoteEditor-JXK3JGKJ.mjs} +4 -4
- package/dist/billing/index.js +346 -346
- package/dist/billing/index.mjs +3 -3
- package/dist/{chunk-FKLP4NED.js → chunk-FDJQRIMY.js} +320 -18
- package/dist/chunk-FDJQRIMY.js.map +1 -0
- package/dist/{chunk-XI35ALWY.mjs → chunk-I65SSQ5Z.mjs} +303 -1
- package/dist/chunk-I65SSQ5Z.mjs.map +1 -0
- package/dist/{chunk-F44ET4AC.mjs → chunk-NB6TIKHK.mjs} +2087 -1463
- package/dist/chunk-NB6TIKHK.mjs.map +1 -0
- package/dist/{chunk-JOJZRGZL.mjs → chunk-NZOUEN67.mjs} +2 -2
- package/dist/{chunk-OTZEXASK.js → chunk-X4YDETTD.js} +11 -11
- package/dist/{chunk-OTZEXASK.js.map → chunk-X4YDETTD.js.map} +1 -1
- package/dist/{chunk-CV7UOUKQ.js → chunk-ZEDB6JVB.js} +1356 -732
- package/dist/chunk-ZEDB6JVB.js.map +1 -0
- package/dist/client/index.js +4 -4
- package/dist/client/index.mjs +3 -3
- package/dist/components/index.d.mts +21 -2
- package/dist/components/index.d.ts +21 -2
- package/dist/components/index.js +10 -4
- package/dist/components/index.js.map +1 -1
- package/dist/components/index.mjs +9 -3
- package/dist/contexts/index.d.mts +26 -2
- package/dist/contexts/index.d.ts +26 -2
- package/dist/contexts/index.js +8 -4
- package/dist/contexts/index.js.map +1 -1
- package/dist/contexts/index.mjs +7 -3
- package/dist/core/index.d.mts +110 -3
- package/dist/core/index.d.ts +110 -3
- package/dist/core/index.js +14 -2
- package/dist/core/index.js.map +1 -1
- package/dist/core/index.mjs +13 -1
- package/dist/index.d.mts +3 -2
- package/dist/index.d.ts +3 -2
- package/dist/index.js +15 -3
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +14 -2
- package/dist/server/index.js +3 -3
- package/dist/server/index.mjs +1 -1
- package/package.json +1 -1
- package/src/components/index.ts +2 -0
- package/src/contexts/index.ts +1 -0
- package/src/core/index.ts +4 -0
- package/src/core/registry/ModuleRegistry.ts +9 -0
- package/src/features/assistant/AssistantModule.ts +19 -0
- package/src/features/assistant/components/containers/AssistantContainer.tsx +56 -0
- package/src/features/assistant/components/containers/__tests__/AssistantContainer.spec.tsx +101 -0
- package/src/features/assistant/components/index.ts +1 -0
- package/src/features/assistant/components/parts/AssistantComposer.tsx +56 -0
- package/src/features/assistant/components/parts/AssistantEmptyState.tsx +47 -0
- package/src/features/assistant/components/parts/AssistantSidebar.tsx +64 -0
- package/src/features/assistant/components/parts/AssistantStatusLine.tsx +19 -0
- package/src/features/assistant/components/parts/AssistantThread.tsx +36 -0
- package/src/features/assistant/components/parts/AssistantThreadHeader.tsx +91 -0
- package/src/features/assistant/components/parts/__tests__/AssistantComposer.spec.tsx +32 -0
- package/src/features/assistant/components/parts/__tests__/AssistantEmptyState.spec.tsx +27 -0
- package/src/features/assistant/components/parts/__tests__/AssistantSidebar.spec.tsx +58 -0
- package/src/features/assistant/components/parts/__tests__/AssistantStatusLine.spec.tsx +19 -0
- package/src/features/assistant/components/parts/__tests__/AssistantThread.spec.tsx +39 -0
- package/src/features/assistant/components/parts/__tests__/AssistantThreadHeader.spec.tsx +67 -0
- package/src/features/assistant/contexts/AssistantContext.tsx +255 -0
- package/src/features/assistant/contexts/__tests__/AssistantContext.spec.tsx +375 -0
- package/src/features/assistant/data/Assistant.ts +37 -0
- package/src/features/assistant/data/AssistantInterface.ts +11 -0
- package/src/features/assistant/data/AssistantService.ts +79 -0
- package/src/features/assistant/data/index.ts +3 -0
- package/src/features/assistant/index.ts +2 -0
- package/src/features/assistant/utils/__tests__/groupThreadsByBucket.spec.ts +24 -0
- package/src/features/assistant/utils/__tests__/resolveReferenceableModules.spec.ts +92 -0
- package/src/features/assistant/utils/groupThreadsByBucket.ts +26 -0
- package/src/features/assistant/utils/resolveReferenceableModules.ts +14 -0
- package/src/features/assistant-message/AssistantMessageModule.ts +28 -0
- package/src/features/assistant-message/components/MessageItem.tsx +60 -0
- package/src/features/assistant-message/components/MessageList.tsx +38 -0
- package/src/features/assistant-message/components/__tests__/MessageItem.spec.tsx +108 -0
- package/src/features/assistant-message/components/index.ts +2 -0
- package/src/features/assistant-message/components/parts/ReferenceBadges.tsx +46 -0
- package/src/features/assistant-message/components/parts/SuggestedFollowUps.tsx +52 -0
- package/src/features/assistant-message/components/parts/__tests__/ReferenceBadges.spec.tsx +59 -0
- package/src/features/assistant-message/components/parts/__tests__/SuggestedFollowUps.spec.tsx +29 -0
- package/src/features/assistant-message/data/AssistantMessage.ts +95 -0
- package/src/features/assistant-message/data/AssistantMessageInterface.ts +21 -0
- package/src/features/assistant-message/data/AssistantMessageService.ts +40 -0
- package/src/features/assistant-message/data/__tests__/AssistantMessage.spec.ts +158 -0
- package/src/features/assistant-message/data/index.ts +3 -0
- package/src/features/assistant-message/index.ts +2 -0
- package/src/features/user/contexts/CurrentUserContext.tsx +5 -13
- package/src/features/user/contexts/__tests__/CurrentUserContext.spec.tsx +141 -0
- package/src/index.ts +4 -0
- package/dist/HowToInterface-BKhnkzBp.d.ts +0 -17
- package/dist/HowToInterface-Cj8OuQFf.d.mts +0 -17
- package/dist/chunk-CV7UOUKQ.js.map +0 -1
- package/dist/chunk-F44ET4AC.mjs.map +0 -1
- package/dist/chunk-FKLP4NED.js.map +0 -1
- package/dist/chunk-XI35ALWY.mjs.map +0 -1
- /package/dist/{BlockNoteEditor-7HAAXN3H.mjs.map → BlockNoteEditor-JXK3JGKJ.mjs.map} +0 -0
- /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
|
|
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
|
-
|
|
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,
|
|
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-
|
|
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-
|
|
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,
|
package/dist/server/index.js
CHANGED
|
@@ -15,7 +15,7 @@ var _chunk3ZPK4QOBjs = require('../chunk-3ZPK4QOB.js');
|
|
|
15
15
|
|
|
16
16
|
|
|
17
17
|
|
|
18
|
-
var
|
|
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
|
|
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 =
|
|
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
|
package/dist/server/index.mjs
CHANGED
package/package.json
CHANGED
package/src/components/index.ts
CHANGED
|
@@ -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";
|
package/src/contexts/index.ts
CHANGED
|
@@ -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
|
+
}
|