@carlonicora/nextjs-jsonapi 1.141.2 → 1.142.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 (68) hide show
  1. package/dist/{AssistantMessageInterface-DH1QwtC_.d.mts → AssistantMessageInterface-Ce8FcllX.d.mts} +1 -1
  2. package/dist/{AssistantMessageInterface-giWvsOrX.d.ts → AssistantMessageInterface-Dh0BpbP2.d.ts} +1 -1
  3. package/dist/{BlockNoteEditor-3V7LHCFY.mjs → BlockNoteEditor-35DDJH3M.mjs} +4 -4
  4. package/dist/{BlockNoteEditor-S6LWQDMF.js → BlockNoteEditor-XXTBZ7DD.js} +19 -19
  5. package/dist/{BlockNoteEditor-S6LWQDMF.js.map → BlockNoteEditor-XXTBZ7DD.js.map} +1 -1
  6. package/dist/{auth.interface-yivTb46w.d.ts → auth.interface-COmBjh89.d.ts} +1 -1
  7. package/dist/{auth.interface-r3XKYOrQ.d.mts → auth.interface-CkmZqat3.d.mts} +1 -1
  8. package/dist/billing/index.js +357 -357
  9. package/dist/billing/index.mjs +3 -3
  10. package/dist/{chunk-AGKZCRG2.js → chunk-5SFFHIEE.js} +18 -18
  11. package/dist/{chunk-AGKZCRG2.js.map → chunk-5SFFHIEE.js.map} +1 -1
  12. package/dist/{chunk-S4G7IXZZ.js → chunk-7CR4YB7Y.js} +753 -753
  13. package/dist/chunk-7CR4YB7Y.js.map +1 -0
  14. package/dist/{chunk-SE2YSAER.js → chunk-C6UXEPNY.js} +7 -7
  15. package/dist/{chunk-SE2YSAER.js.map → chunk-C6UXEPNY.js.map} +1 -1
  16. package/dist/{chunk-7ZEETAQV.mjs → chunk-FZ5SPJEU.mjs} +29 -29
  17. package/dist/chunk-FZ5SPJEU.mjs.map +1 -0
  18. package/dist/{chunk-5GVY2M5X.mjs → chunk-KZHHKPQZ.mjs} +18 -18
  19. package/dist/chunk-KZHHKPQZ.mjs.map +1 -0
  20. package/dist/{chunk-KXTTYXJ6.mjs → chunk-ZV2GZKFR.mjs} +2 -2
  21. package/dist/client/index.d.mts +2 -2
  22. package/dist/client/index.d.ts +2 -2
  23. package/dist/client/index.js +4 -4
  24. package/dist/client/index.mjs +3 -3
  25. package/dist/components/index.d.mts +3 -3
  26. package/dist/components/index.d.ts +3 -3
  27. package/dist/components/index.js +4 -4
  28. package/dist/components/index.mjs +3 -3
  29. package/dist/contexts/index.d.mts +3 -3
  30. package/dist/contexts/index.d.ts +3 -3
  31. package/dist/contexts/index.js +4 -4
  32. package/dist/contexts/index.mjs +3 -3
  33. package/dist/core/index.d.mts +13 -13
  34. package/dist/core/index.d.ts +13 -13
  35. package/dist/core/index.js +2 -2
  36. package/dist/core/index.mjs +1 -1
  37. package/dist/features/help/index.js +38 -37
  38. package/dist/features/help/index.js.map +1 -1
  39. package/dist/features/help/index.mjs +5 -4
  40. package/dist/features/help/index.mjs.map +1 -1
  41. package/dist/index.d.mts +5 -5
  42. package/dist/index.d.ts +5 -5
  43. package/dist/index.js +3 -3
  44. package/dist/index.mjs +2 -2
  45. package/dist/{notification.interface-LKFmZndR.d.ts → notification.interface--27exGde.d.ts} +6 -6
  46. package/dist/{notification.interface-B3kNUTZs.d.mts → notification.interface-CG1vqoxg.d.mts} +6 -6
  47. package/dist/{s3.service-CXKV_OT-.d.mts → s3.service-DYflLXCt.d.mts} +2 -2
  48. package/dist/{s3.service-BrmeMjtk.d.ts → s3.service-Dmfxpn-k.d.ts} +2 -2
  49. package/dist/server/index.d.mts +3 -3
  50. package/dist/server/index.d.ts +3 -3
  51. package/dist/server/index.js +3 -3
  52. package/dist/server/index.mjs +1 -1
  53. package/dist/{useSocket-BsbaGPqE.d.ts → useSocket-DgGAQW6h.d.ts} +1 -1
  54. package/dist/{useSocket-BSjn1Rlb.d.mts → useSocket-M3YY0aTS.d.mts} +1 -1
  55. package/package.json +1 -1
  56. package/src/features/company/components/details/TokenStatusIndicator.tsx +9 -9
  57. package/src/features/company/components/forms/CompanyEditor.tsx +1 -1
  58. package/src/features/company/data/company.interface.ts +6 -6
  59. package/src/features/company/data/company.ts +17 -17
  60. package/src/features/help/components/HelpHeader.tsx +10 -5
  61. package/src/features/help/components/__tests__/HelpHeader.spec.tsx +59 -0
  62. package/src/features/user/contexts/CurrentUserContext.tsx +18 -18
  63. package/src/features/user/contexts/__tests__/CurrentUserContext.spec.tsx +21 -21
  64. package/dist/chunk-5GVY2M5X.mjs.map +0 -1
  65. package/dist/chunk-7ZEETAQV.mjs.map +0 -1
  66. package/dist/chunk-S4G7IXZZ.js.map +0 -1
  67. /package/dist/{BlockNoteEditor-3V7LHCFY.mjs.map → BlockNoteEditor-35DDJH3M.mjs.map} +0 -0
  68. /package/dist/{chunk-KXTTYXJ6.mjs.map → chunk-ZV2GZKFR.mjs.map} +0 -0
@@ -182,7 +182,7 @@
182
182
 
183
183
 
184
184
 
185
- var _chunkAGKZCRG2js = require('../chunk-AGKZCRG2.js');
185
+ var _chunk5SFFHIEEjs = require('../chunk-5SFFHIEE.js');
186
186
  require('../chunk-LXKSUWAV.js');
187
187
  require('../chunk-IBS6NI7D.js');
188
188
 
@@ -391,5 +391,5 @@ require('../chunk-7QVYU63E.js');
391
391
 
392
392
 
393
393
 
394
- exports.AVAILABLE_OAUTH_SCOPES = _chunkAGKZCRG2js.AVAILABLE_OAUTH_SCOPES; exports.AbstractApiData = _chunkAGKZCRG2js.AbstractApiData; exports.AbstractService = _chunkAGKZCRG2js.AbstractService; exports.Action = _chunkAGKZCRG2js.Action; exports.Assistant = _chunkAGKZCRG2js.Assistant; exports.AssistantMessage = _chunkAGKZCRG2js.AssistantMessage; exports.AssistantMessageModule = _chunkAGKZCRG2js.AssistantMessageModule; exports.AssistantMessageService = _chunkAGKZCRG2js.AssistantMessageService; exports.AssistantModule = _chunkAGKZCRG2js.AssistantModule; exports.AssistantService = _chunkAGKZCRG2js.AssistantService; exports.AuditLog = _chunkAGKZCRG2js.AuditLog; exports.AuditLogModule = _chunkAGKZCRG2js.AuditLogModule; exports.AuditLogService = _chunkAGKZCRG2js.AuditLogService; exports.Auth = _chunkAGKZCRG2js.Auth; exports.AuthComponent = _chunkAGKZCRG2js.AuthComponent; exports.AuthModule = _chunkAGKZCRG2js.AuthModule; exports.AuthService = _chunkAGKZCRG2js.AuthService; exports.AuthorModule = _chunkAGKZCRG2js.AuthorModule; exports.BackupCodeVerify = _chunkAGKZCRG2js.BackupCodeVerify; exports.BackupCodeVerifyModule = _chunkAGKZCRG2js.BackupCodeVerifyModule; exports.Billing = _chunkAGKZCRG2js.Billing; exports.BillingModule = _chunkAGKZCRG2js.BillingModule; exports.BillingService = _chunkAGKZCRG2js.BillingService; exports.BlockNoteDiffUtil = _chunkAGKZCRG2js.BlockNoteDiffUtil; exports.BlockNoteWordDiffRendererUtil = _chunkAGKZCRG2js.BlockNoteWordDiffRendererUtil; exports.Chunk = _chunkAGKZCRG2js.Chunk; exports.ChunkModule = _chunkAGKZCRG2js.ChunkModule; exports.ClientAbstractService = _chunkAGKZCRG2js.ClientAbstractService; exports.ClientHttpMethod = _chunkAGKZCRG2js.ClientHttpMethod; exports.Company = _chunkAGKZCRG2js.Company; exports.CompanyFields = _chunkAGKZCRG2js.CompanyFields; exports.CompanyModule = _chunkAGKZCRG2js.CompanyModule; exports.CompanyService = _chunkAGKZCRG2js.CompanyService; exports.Content = _chunkAGKZCRG2js.Content; exports.ContentFields = _chunkAGKZCRG2js.ContentFields; exports.ContentModule = _chunkAGKZCRG2js.ContentModule; exports.ContentService = _chunkAGKZCRG2js.ContentService; exports.DEFAULT_GRANT_TYPES = _chunkAGKZCRG2js.DEFAULT_GRANT_TYPES; exports.DataClass = _chunkQWCAOLBDjs.DataClassRegistry; exports.DataClassRegistry = _chunkQWCAOLBDjs.DataClassRegistry; exports.EndpointCreator = _chunkAGKZCRG2js.EndpointCreator; exports.Feature = _chunkAGKZCRG2js.Feature; exports.FeatureModule = _chunkAGKZCRG2js.FeatureModule; exports.FeatureService = _chunkAGKZCRG2js.FeatureService; exports.HowTo = _chunkAGKZCRG2js.HowTo; exports.HowToFields = _chunkAGKZCRG2js.HowToFields; exports.HowToModule = _chunkAGKZCRG2js.HowToModule; exports.HowToService = _chunkAGKZCRG2js.HowToService; exports.HttpMethod = _chunkAGKZCRG2js.HttpMethod; exports.InvoiceStatus = _chunkAGKZCRG2js.InvoiceStatus; exports.JsonApiDataFactory = _chunkQWCAOLBDjs.JsonApiDataFactory; exports.MOBILE_BREAKPOINT = _chunkAGKZCRG2js.MOBILE_BREAKPOINT; exports.Module = _chunkAGKZCRG2js.Module; exports.ModuleModule = _chunkAGKZCRG2js.ModuleModule; exports.ModulePathsModule = _chunkAGKZCRG2js.ModulePathsModule; exports.ModuleRegistrar = _chunkAGKZCRG2js.ModuleRegistrar; exports.ModuleRegistry = _chunkAGKZCRG2js.ModuleRegistry; exports.Modules = _chunkAGKZCRG2js.Modules; exports.Notification = _chunkAGKZCRG2js.Notification; exports.NotificationFields = _chunkAGKZCRG2js.NotificationFields; exports.NotificationModule = _chunkAGKZCRG2js.NotificationModule; exports.NotificationService = _chunkAGKZCRG2js.NotificationService; exports.OAUTH_SCOPE_DISPLAY = _chunkAGKZCRG2js.OAUTH_SCOPE_DISPLAY; exports.OAuthClient = _chunkAGKZCRG2js.OAuthClient; exports.OAuthModule = _chunkAGKZCRG2js.OAuthModule; exports.OAuthService = _chunkAGKZCRG2js.OAuthService; exports.Passkey = _chunkAGKZCRG2js.Passkey; exports.PasskeyAuthenticationOptions = _chunkAGKZCRG2js.PasskeyAuthenticationOptions; exports.PasskeyAuthenticationOptionsModule = _chunkAGKZCRG2js.PasskeyAuthenticationOptionsModule; exports.PasskeyModule = _chunkAGKZCRG2js.PasskeyModule; exports.PasskeyRegistrationOptions = _chunkAGKZCRG2js.PasskeyRegistrationOptions; exports.PasskeyRegistrationOptionsModule = _chunkAGKZCRG2js.PasskeyRegistrationOptionsModule; exports.PasskeyRegistrationVerify = _chunkAGKZCRG2js.PasskeyRegistrationVerify; exports.PasskeyRegistrationVerifyModule = _chunkAGKZCRG2js.PasskeyRegistrationVerifyModule; exports.PasskeyRename = _chunkAGKZCRG2js.PasskeyRename; exports.PasskeyRenameModule = _chunkAGKZCRG2js.PasskeyRenameModule; exports.PasskeyVerifyLogin = _chunkAGKZCRG2js.PasskeyVerifyLogin; exports.PasskeyVerifyLoginModule = _chunkAGKZCRG2js.PasskeyVerifyLoginModule; exports.PaymentMethod = _chunkAGKZCRG2js.PaymentMethod; exports.PermissionMappingModule = _chunkAGKZCRG2js.PermissionMappingModule; exports.Push = _chunkAGKZCRG2js.Push; exports.PushModule = _chunkAGKZCRG2js.PushModule; exports.PushService = _chunkAGKZCRG2js.PushService; exports.RbacMatrixModule = _chunkAGKZCRG2js.RbacMatrixModule; exports.ReferralModule = _chunkAGKZCRG2js.ReferralModule; exports.ReferralService = _chunkAGKZCRG2js.ReferralService; exports.ReferralStats = _chunkAGKZCRG2js.ReferralStats; exports.ReferralStatsModule = _chunkAGKZCRG2js.ReferralStatsModule; exports.RehydrationFactory = _chunkAGKZCRG2js.RehydrationFactory; exports.Role = _chunkAGKZCRG2js.Role; exports.RoleFields = _chunkAGKZCRG2js.RoleFields; exports.RoleModule = _chunkAGKZCRG2js.RoleModule; exports.RoleService = _chunkAGKZCRG2js.RoleService; exports.S3 = _chunkAGKZCRG2js.S3; exports.S3Module = _chunkAGKZCRG2js.S3Module; exports.S3Service = _chunkAGKZCRG2js.S3Service; exports.StripeCustomer = _chunkAGKZCRG2js.StripeCustomer; exports.StripeCustomerModule = _chunkAGKZCRG2js.StripeCustomerModule; exports.StripeCustomerService = _chunkAGKZCRG2js.StripeCustomerService; exports.StripeInvoice = _chunkAGKZCRG2js.StripeInvoice; exports.StripeInvoiceModule = _chunkAGKZCRG2js.StripeInvoiceModule; exports.StripeInvoiceService = _chunkAGKZCRG2js.StripeInvoiceService; exports.StripePaymentMethodModule = _chunkAGKZCRG2js.StripePaymentMethodModule; exports.StripePrice = _chunkAGKZCRG2js.StripePrice; exports.StripePriceModule = _chunkAGKZCRG2js.StripePriceModule; exports.StripePriceService = _chunkAGKZCRG2js.StripePriceService; exports.StripeProduct = _chunkAGKZCRG2js.StripeProduct; exports.StripeProductModule = _chunkAGKZCRG2js.StripeProductModule; exports.StripeProductService = _chunkAGKZCRG2js.StripeProductService; exports.StripePromotionCode = _chunkAGKZCRG2js.StripePromotionCode; exports.StripePromotionCodeModule = _chunkAGKZCRG2js.StripePromotionCodeModule; exports.StripePromotionCodeService = _chunkAGKZCRG2js.StripePromotionCodeService; exports.StripeSubscription = _chunkAGKZCRG2js.StripeSubscription; exports.StripeSubscriptionModule = _chunkAGKZCRG2js.StripeSubscriptionModule; exports.StripeSubscriptionService = _chunkAGKZCRG2js.StripeSubscriptionService; exports.StripeUsage = _chunkAGKZCRG2js.StripeUsage; exports.StripeUsageModule = _chunkAGKZCRG2js.StripeUsageModule; exports.StripeUsageService = _chunkAGKZCRG2js.StripeUsageService; exports.SubscriptionStatus = _chunkAGKZCRG2js.SubscriptionStatus; exports.TableOptions = _chunkAGKZCRG2js.TableOptions; exports.TotpAuthenticator = _chunkAGKZCRG2js.TotpAuthenticator; exports.TotpAuthenticatorModule = _chunkAGKZCRG2js.TotpAuthenticatorModule; exports.TotpSetup = _chunkAGKZCRG2js.TotpSetup; exports.TotpSetupModule = _chunkAGKZCRG2js.TotpSetupModule; exports.TotpVerify = _chunkAGKZCRG2js.TotpVerify; exports.TotpVerifyLogin = _chunkAGKZCRG2js.TotpVerifyLogin; exports.TotpVerifyLoginModule = _chunkAGKZCRG2js.TotpVerifyLoginModule; exports.TotpVerifyModule = _chunkAGKZCRG2js.TotpVerifyModule; exports.TwoFactorChallenge = _chunkAGKZCRG2js.TwoFactorChallenge; exports.TwoFactorChallengeModule = _chunkAGKZCRG2js.TwoFactorChallengeModule; exports.TwoFactorEnable = _chunkAGKZCRG2js.TwoFactorEnable; exports.TwoFactorEnableModule = _chunkAGKZCRG2js.TwoFactorEnableModule; exports.TwoFactorService = _chunkAGKZCRG2js.TwoFactorService; exports.TwoFactorStatus = _chunkAGKZCRG2js.TwoFactorStatus; exports.TwoFactorStatusModule = _chunkAGKZCRG2js.TwoFactorStatusModule; exports.User = _chunkAGKZCRG2js.User; exports.UserFields = _chunkAGKZCRG2js.UserFields; exports.UserModule = _chunkAGKZCRG2js.UserModule; exports.UserService = _chunkAGKZCRG2js.UserService; exports.VIEWPORT_COOKIE_NAME = _chunkAGKZCRG2js.VIEWPORT_COOKIE_NAME; exports.Waitlist = _chunkAGKZCRG2js.Waitlist; exports.WaitlistModule = _chunkAGKZCRG2js.WaitlistModule; exports.WaitlistService = _chunkAGKZCRG2js.WaitlistService; exports.WaitlistStats = _chunkAGKZCRG2js.WaitlistStats; exports.WaitlistStatsModule = _chunkAGKZCRG2js.WaitlistStatsModule; exports.checkPermissions = _chunkAGKZCRG2js.checkPermissions; exports.checkPermissionsFromServer = _chunkAGKZCRG2js.checkPermissionsFromServer; exports.clearLastApiMeta = _chunkAGKZCRG2js.clearLastApiMeta; exports.clearLastApiTotal = _chunkAGKZCRG2js.clearLastApiTotal; exports.cn = _chunkAGKZCRG2js.cn; exports.composeRefs = _chunkAGKZCRG2js.composeRefs; exports.createJsonApiInclusion = _chunkAGKZCRG2js.createJsonApiInclusion; exports.dismissToast = _chunkAGKZCRG2js.dismissToast; exports.entityObjectSchema = _chunkAGKZCRG2js.entityObjectSchema; exports.exists = _chunkAGKZCRG2js.exists; exports.formatCodiceFiscale = _chunkAGKZCRG2js.formatCodiceFiscale; exports.formatDate = _chunkAGKZCRG2js.formatDate; exports.formatLocalDate = _chunkAGKZCRG2js.formatLocalDate; exports.formatPartitaIva = _chunkAGKZCRG2js.formatPartitaIva; exports.getBootstrapper = _chunkQWCAOLBDjs.getBootstrapper; exports.getClientGlobalErrorHandler = _chunkAGKZCRG2js.getClientGlobalErrorHandler; exports.getGlobalErrorHandler = _chunkAGKZCRG2js.getGlobalErrorHandler; exports.getIcon = _chunkAGKZCRG2js.getIcon; exports.getIconByModule = _chunkAGKZCRG2js.getIconByModule; exports.getIconByModuleName = _chunkAGKZCRG2js.getIconByModuleName; exports.getInitials = _chunkAGKZCRG2js.getInitials; exports.getLastApiMeta = _chunkAGKZCRG2js.getLastApiMeta; exports.getLastApiTotal = _chunkAGKZCRG2js.getLastApiTotal; exports.getLucideIcon = _chunkAGKZCRG2js.getLucideIcon; exports.getLucideIconByModule = _chunkAGKZCRG2js.getLucideIconByModule; exports.getLucideIconByModuleName = _chunkAGKZCRG2js.getLucideIconByModuleName; exports.getTableComponents = _chunkAGKZCRG2js.getTableComponents; exports.getTableOptions = _chunkAGKZCRG2js.getTableOptions; exports.getValueFromPath = _chunkAGKZCRG2js.getValueFromPath; exports.hasBootstrapper = _chunkQWCAOLBDjs.hasBootstrapper; exports.rehydrate = _chunkAGKZCRG2js.rehydrate; exports.rehydrateList = _chunkAGKZCRG2js.rehydrateList; exports.resetBootstrapStore = _chunkQWCAOLBDjs.resetBootstrapStore; exports.setBootstrapper = _chunkQWCAOLBDjs.setBootstrapper; exports.setClientGlobalErrorHandler = _chunkAGKZCRG2js.setClientGlobalErrorHandler; exports.setGlobalErrorHandler = _chunkAGKZCRG2js.setGlobalErrorHandler; exports.showCustomToast = _chunkAGKZCRG2js.showCustomToast; exports.showError = _chunkAGKZCRG2js.showError; exports.showToast = _chunkAGKZCRG2js.showToast; exports.translateData = _chunkQWCAOLBDjs.translateData; exports.translateResponse = _chunkQWCAOLBDjs.translateResponse; exports.tryBootstrap = _chunkQWCAOLBDjs.tryBootstrap; exports.useComposedRefs = _chunkAGKZCRG2js.useComposedRefs; exports.useIsMobile = _chunkAGKZCRG2js.useIsMobile; exports.userObjectSchema = _chunkAGKZCRG2js.userObjectSchema; exports.validateCodiceFiscale = _chunkAGKZCRG2js.validateCodiceFiscale; exports.validateItalianTaxCode = _chunkAGKZCRG2js.validateItalianTaxCode; exports.validatePartitaIva = _chunkAGKZCRG2js.validatePartitaIva;
394
+ exports.AVAILABLE_OAUTH_SCOPES = _chunk5SFFHIEEjs.AVAILABLE_OAUTH_SCOPES; exports.AbstractApiData = _chunk5SFFHIEEjs.AbstractApiData; exports.AbstractService = _chunk5SFFHIEEjs.AbstractService; exports.Action = _chunk5SFFHIEEjs.Action; exports.Assistant = _chunk5SFFHIEEjs.Assistant; exports.AssistantMessage = _chunk5SFFHIEEjs.AssistantMessage; exports.AssistantMessageModule = _chunk5SFFHIEEjs.AssistantMessageModule; exports.AssistantMessageService = _chunk5SFFHIEEjs.AssistantMessageService; exports.AssistantModule = _chunk5SFFHIEEjs.AssistantModule; exports.AssistantService = _chunk5SFFHIEEjs.AssistantService; exports.AuditLog = _chunk5SFFHIEEjs.AuditLog; exports.AuditLogModule = _chunk5SFFHIEEjs.AuditLogModule; exports.AuditLogService = _chunk5SFFHIEEjs.AuditLogService; exports.Auth = _chunk5SFFHIEEjs.Auth; exports.AuthComponent = _chunk5SFFHIEEjs.AuthComponent; exports.AuthModule = _chunk5SFFHIEEjs.AuthModule; exports.AuthService = _chunk5SFFHIEEjs.AuthService; exports.AuthorModule = _chunk5SFFHIEEjs.AuthorModule; exports.BackupCodeVerify = _chunk5SFFHIEEjs.BackupCodeVerify; exports.BackupCodeVerifyModule = _chunk5SFFHIEEjs.BackupCodeVerifyModule; exports.Billing = _chunk5SFFHIEEjs.Billing; exports.BillingModule = _chunk5SFFHIEEjs.BillingModule; exports.BillingService = _chunk5SFFHIEEjs.BillingService; exports.BlockNoteDiffUtil = _chunk5SFFHIEEjs.BlockNoteDiffUtil; exports.BlockNoteWordDiffRendererUtil = _chunk5SFFHIEEjs.BlockNoteWordDiffRendererUtil; exports.Chunk = _chunk5SFFHIEEjs.Chunk; exports.ChunkModule = _chunk5SFFHIEEjs.ChunkModule; exports.ClientAbstractService = _chunk5SFFHIEEjs.ClientAbstractService; exports.ClientHttpMethod = _chunk5SFFHIEEjs.ClientHttpMethod; exports.Company = _chunk5SFFHIEEjs.Company; exports.CompanyFields = _chunk5SFFHIEEjs.CompanyFields; exports.CompanyModule = _chunk5SFFHIEEjs.CompanyModule; exports.CompanyService = _chunk5SFFHIEEjs.CompanyService; exports.Content = _chunk5SFFHIEEjs.Content; exports.ContentFields = _chunk5SFFHIEEjs.ContentFields; exports.ContentModule = _chunk5SFFHIEEjs.ContentModule; exports.ContentService = _chunk5SFFHIEEjs.ContentService; exports.DEFAULT_GRANT_TYPES = _chunk5SFFHIEEjs.DEFAULT_GRANT_TYPES; exports.DataClass = _chunkQWCAOLBDjs.DataClassRegistry; exports.DataClassRegistry = _chunkQWCAOLBDjs.DataClassRegistry; exports.EndpointCreator = _chunk5SFFHIEEjs.EndpointCreator; exports.Feature = _chunk5SFFHIEEjs.Feature; exports.FeatureModule = _chunk5SFFHIEEjs.FeatureModule; exports.FeatureService = _chunk5SFFHIEEjs.FeatureService; exports.HowTo = _chunk5SFFHIEEjs.HowTo; exports.HowToFields = _chunk5SFFHIEEjs.HowToFields; exports.HowToModule = _chunk5SFFHIEEjs.HowToModule; exports.HowToService = _chunk5SFFHIEEjs.HowToService; exports.HttpMethod = _chunk5SFFHIEEjs.HttpMethod; exports.InvoiceStatus = _chunk5SFFHIEEjs.InvoiceStatus; exports.JsonApiDataFactory = _chunkQWCAOLBDjs.JsonApiDataFactory; exports.MOBILE_BREAKPOINT = _chunk5SFFHIEEjs.MOBILE_BREAKPOINT; exports.Module = _chunk5SFFHIEEjs.Module; exports.ModuleModule = _chunk5SFFHIEEjs.ModuleModule; exports.ModulePathsModule = _chunk5SFFHIEEjs.ModulePathsModule; exports.ModuleRegistrar = _chunk5SFFHIEEjs.ModuleRegistrar; exports.ModuleRegistry = _chunk5SFFHIEEjs.ModuleRegistry; exports.Modules = _chunk5SFFHIEEjs.Modules; exports.Notification = _chunk5SFFHIEEjs.Notification; exports.NotificationFields = _chunk5SFFHIEEjs.NotificationFields; exports.NotificationModule = _chunk5SFFHIEEjs.NotificationModule; exports.NotificationService = _chunk5SFFHIEEjs.NotificationService; exports.OAUTH_SCOPE_DISPLAY = _chunk5SFFHIEEjs.OAUTH_SCOPE_DISPLAY; exports.OAuthClient = _chunk5SFFHIEEjs.OAuthClient; exports.OAuthModule = _chunk5SFFHIEEjs.OAuthModule; exports.OAuthService = _chunk5SFFHIEEjs.OAuthService; exports.Passkey = _chunk5SFFHIEEjs.Passkey; exports.PasskeyAuthenticationOptions = _chunk5SFFHIEEjs.PasskeyAuthenticationOptions; exports.PasskeyAuthenticationOptionsModule = _chunk5SFFHIEEjs.PasskeyAuthenticationOptionsModule; exports.PasskeyModule = _chunk5SFFHIEEjs.PasskeyModule; exports.PasskeyRegistrationOptions = _chunk5SFFHIEEjs.PasskeyRegistrationOptions; exports.PasskeyRegistrationOptionsModule = _chunk5SFFHIEEjs.PasskeyRegistrationOptionsModule; exports.PasskeyRegistrationVerify = _chunk5SFFHIEEjs.PasskeyRegistrationVerify; exports.PasskeyRegistrationVerifyModule = _chunk5SFFHIEEjs.PasskeyRegistrationVerifyModule; exports.PasskeyRename = _chunk5SFFHIEEjs.PasskeyRename; exports.PasskeyRenameModule = _chunk5SFFHIEEjs.PasskeyRenameModule; exports.PasskeyVerifyLogin = _chunk5SFFHIEEjs.PasskeyVerifyLogin; exports.PasskeyVerifyLoginModule = _chunk5SFFHIEEjs.PasskeyVerifyLoginModule; exports.PaymentMethod = _chunk5SFFHIEEjs.PaymentMethod; exports.PermissionMappingModule = _chunk5SFFHIEEjs.PermissionMappingModule; exports.Push = _chunk5SFFHIEEjs.Push; exports.PushModule = _chunk5SFFHIEEjs.PushModule; exports.PushService = _chunk5SFFHIEEjs.PushService; exports.RbacMatrixModule = _chunk5SFFHIEEjs.RbacMatrixModule; exports.ReferralModule = _chunk5SFFHIEEjs.ReferralModule; exports.ReferralService = _chunk5SFFHIEEjs.ReferralService; exports.ReferralStats = _chunk5SFFHIEEjs.ReferralStats; exports.ReferralStatsModule = _chunk5SFFHIEEjs.ReferralStatsModule; exports.RehydrationFactory = _chunk5SFFHIEEjs.RehydrationFactory; exports.Role = _chunk5SFFHIEEjs.Role; exports.RoleFields = _chunk5SFFHIEEjs.RoleFields; exports.RoleModule = _chunk5SFFHIEEjs.RoleModule; exports.RoleService = _chunk5SFFHIEEjs.RoleService; exports.S3 = _chunk5SFFHIEEjs.S3; exports.S3Module = _chunk5SFFHIEEjs.S3Module; exports.S3Service = _chunk5SFFHIEEjs.S3Service; exports.StripeCustomer = _chunk5SFFHIEEjs.StripeCustomer; exports.StripeCustomerModule = _chunk5SFFHIEEjs.StripeCustomerModule; exports.StripeCustomerService = _chunk5SFFHIEEjs.StripeCustomerService; exports.StripeInvoice = _chunk5SFFHIEEjs.StripeInvoice; exports.StripeInvoiceModule = _chunk5SFFHIEEjs.StripeInvoiceModule; exports.StripeInvoiceService = _chunk5SFFHIEEjs.StripeInvoiceService; exports.StripePaymentMethodModule = _chunk5SFFHIEEjs.StripePaymentMethodModule; exports.StripePrice = _chunk5SFFHIEEjs.StripePrice; exports.StripePriceModule = _chunk5SFFHIEEjs.StripePriceModule; exports.StripePriceService = _chunk5SFFHIEEjs.StripePriceService; exports.StripeProduct = _chunk5SFFHIEEjs.StripeProduct; exports.StripeProductModule = _chunk5SFFHIEEjs.StripeProductModule; exports.StripeProductService = _chunk5SFFHIEEjs.StripeProductService; exports.StripePromotionCode = _chunk5SFFHIEEjs.StripePromotionCode; exports.StripePromotionCodeModule = _chunk5SFFHIEEjs.StripePromotionCodeModule; exports.StripePromotionCodeService = _chunk5SFFHIEEjs.StripePromotionCodeService; exports.StripeSubscription = _chunk5SFFHIEEjs.StripeSubscription; exports.StripeSubscriptionModule = _chunk5SFFHIEEjs.StripeSubscriptionModule; exports.StripeSubscriptionService = _chunk5SFFHIEEjs.StripeSubscriptionService; exports.StripeUsage = _chunk5SFFHIEEjs.StripeUsage; exports.StripeUsageModule = _chunk5SFFHIEEjs.StripeUsageModule; exports.StripeUsageService = _chunk5SFFHIEEjs.StripeUsageService; exports.SubscriptionStatus = _chunk5SFFHIEEjs.SubscriptionStatus; exports.TableOptions = _chunk5SFFHIEEjs.TableOptions; exports.TotpAuthenticator = _chunk5SFFHIEEjs.TotpAuthenticator; exports.TotpAuthenticatorModule = _chunk5SFFHIEEjs.TotpAuthenticatorModule; exports.TotpSetup = _chunk5SFFHIEEjs.TotpSetup; exports.TotpSetupModule = _chunk5SFFHIEEjs.TotpSetupModule; exports.TotpVerify = _chunk5SFFHIEEjs.TotpVerify; exports.TotpVerifyLogin = _chunk5SFFHIEEjs.TotpVerifyLogin; exports.TotpVerifyLoginModule = _chunk5SFFHIEEjs.TotpVerifyLoginModule; exports.TotpVerifyModule = _chunk5SFFHIEEjs.TotpVerifyModule; exports.TwoFactorChallenge = _chunk5SFFHIEEjs.TwoFactorChallenge; exports.TwoFactorChallengeModule = _chunk5SFFHIEEjs.TwoFactorChallengeModule; exports.TwoFactorEnable = _chunk5SFFHIEEjs.TwoFactorEnable; exports.TwoFactorEnableModule = _chunk5SFFHIEEjs.TwoFactorEnableModule; exports.TwoFactorService = _chunk5SFFHIEEjs.TwoFactorService; exports.TwoFactorStatus = _chunk5SFFHIEEjs.TwoFactorStatus; exports.TwoFactorStatusModule = _chunk5SFFHIEEjs.TwoFactorStatusModule; exports.User = _chunk5SFFHIEEjs.User; exports.UserFields = _chunk5SFFHIEEjs.UserFields; exports.UserModule = _chunk5SFFHIEEjs.UserModule; exports.UserService = _chunk5SFFHIEEjs.UserService; exports.VIEWPORT_COOKIE_NAME = _chunk5SFFHIEEjs.VIEWPORT_COOKIE_NAME; exports.Waitlist = _chunk5SFFHIEEjs.Waitlist; exports.WaitlistModule = _chunk5SFFHIEEjs.WaitlistModule; exports.WaitlistService = _chunk5SFFHIEEjs.WaitlistService; exports.WaitlistStats = _chunk5SFFHIEEjs.WaitlistStats; exports.WaitlistStatsModule = _chunk5SFFHIEEjs.WaitlistStatsModule; exports.checkPermissions = _chunk5SFFHIEEjs.checkPermissions; exports.checkPermissionsFromServer = _chunk5SFFHIEEjs.checkPermissionsFromServer; exports.clearLastApiMeta = _chunk5SFFHIEEjs.clearLastApiMeta; exports.clearLastApiTotal = _chunk5SFFHIEEjs.clearLastApiTotal; exports.cn = _chunk5SFFHIEEjs.cn; exports.composeRefs = _chunk5SFFHIEEjs.composeRefs; exports.createJsonApiInclusion = _chunk5SFFHIEEjs.createJsonApiInclusion; exports.dismissToast = _chunk5SFFHIEEjs.dismissToast; exports.entityObjectSchema = _chunk5SFFHIEEjs.entityObjectSchema; exports.exists = _chunk5SFFHIEEjs.exists; exports.formatCodiceFiscale = _chunk5SFFHIEEjs.formatCodiceFiscale; exports.formatDate = _chunk5SFFHIEEjs.formatDate; exports.formatLocalDate = _chunk5SFFHIEEjs.formatLocalDate; exports.formatPartitaIva = _chunk5SFFHIEEjs.formatPartitaIva; exports.getBootstrapper = _chunkQWCAOLBDjs.getBootstrapper; exports.getClientGlobalErrorHandler = _chunk5SFFHIEEjs.getClientGlobalErrorHandler; exports.getGlobalErrorHandler = _chunk5SFFHIEEjs.getGlobalErrorHandler; exports.getIcon = _chunk5SFFHIEEjs.getIcon; exports.getIconByModule = _chunk5SFFHIEEjs.getIconByModule; exports.getIconByModuleName = _chunk5SFFHIEEjs.getIconByModuleName; exports.getInitials = _chunk5SFFHIEEjs.getInitials; exports.getLastApiMeta = _chunk5SFFHIEEjs.getLastApiMeta; exports.getLastApiTotal = _chunk5SFFHIEEjs.getLastApiTotal; exports.getLucideIcon = _chunk5SFFHIEEjs.getLucideIcon; exports.getLucideIconByModule = _chunk5SFFHIEEjs.getLucideIconByModule; exports.getLucideIconByModuleName = _chunk5SFFHIEEjs.getLucideIconByModuleName; exports.getTableComponents = _chunk5SFFHIEEjs.getTableComponents; exports.getTableOptions = _chunk5SFFHIEEjs.getTableOptions; exports.getValueFromPath = _chunk5SFFHIEEjs.getValueFromPath; exports.hasBootstrapper = _chunkQWCAOLBDjs.hasBootstrapper; exports.rehydrate = _chunk5SFFHIEEjs.rehydrate; exports.rehydrateList = _chunk5SFFHIEEjs.rehydrateList; exports.resetBootstrapStore = _chunkQWCAOLBDjs.resetBootstrapStore; exports.setBootstrapper = _chunkQWCAOLBDjs.setBootstrapper; exports.setClientGlobalErrorHandler = _chunk5SFFHIEEjs.setClientGlobalErrorHandler; exports.setGlobalErrorHandler = _chunk5SFFHIEEjs.setGlobalErrorHandler; exports.showCustomToast = _chunk5SFFHIEEjs.showCustomToast; exports.showError = _chunk5SFFHIEEjs.showError; exports.showToast = _chunk5SFFHIEEjs.showToast; exports.translateData = _chunkQWCAOLBDjs.translateData; exports.translateResponse = _chunkQWCAOLBDjs.translateResponse; exports.tryBootstrap = _chunkQWCAOLBDjs.tryBootstrap; exports.useComposedRefs = _chunk5SFFHIEEjs.useComposedRefs; exports.useIsMobile = _chunk5SFFHIEEjs.useIsMobile; exports.userObjectSchema = _chunk5SFFHIEEjs.userObjectSchema; exports.validateCodiceFiscale = _chunk5SFFHIEEjs.validateCodiceFiscale; exports.validateItalianTaxCode = _chunk5SFFHIEEjs.validateItalianTaxCode; exports.validatePartitaIva = _chunk5SFFHIEEjs.validatePartitaIva;
395
395
  //# sourceMappingURL=index.js.map
@@ -182,7 +182,7 @@ import {
182
182
  validateCodiceFiscale,
183
183
  validateItalianTaxCode,
184
184
  validatePartitaIva
185
- } from "../chunk-5GVY2M5X.mjs";
185
+ } from "../chunk-KZHHKPQZ.mjs";
186
186
  import "../chunk-AUXK7QSA.mjs";
187
187
  import "../chunk-C7C7VY4F.mjs";
188
188
  import {
@@ -22,13 +22,14 @@ var _chunkYBZVWLPHjs = require('../../chunk-YBZVWLPH.js');
22
22
 
23
23
 
24
24
 
25
- var _chunkS4G7IXZZjs = require('../../chunk-S4G7IXZZ.js');
26
25
 
26
+ var _chunk7CR4YB7Yjs = require('../../chunk-7CR4YB7Y.js');
27
27
 
28
- var _chunkSE2YSAERjs = require('../../chunk-SE2YSAER.js');
29
28
 
29
+ var _chunkC6UXEPNYjs = require('../../chunk-C6UXEPNY.js');
30
30
 
31
- var _chunkAGKZCRG2js = require('../../chunk-AGKZCRG2.js');
31
+
32
+ var _chunk5SFFHIEEjs = require('../../chunk-5SFFHIEE.js');
32
33
  require('../../chunk-LXKSUWAV.js');
33
34
  require('../../chunk-IBS6NI7D.js');
34
35
  require('../../chunk-QWCAOLBD.js');
@@ -42,7 +43,7 @@ var _react = require('react');
42
43
  var _jsxruntime = require('react/jsx-runtime');
43
44
  var HelpContext = _react.createContext.call(void 0, null);
44
45
  function HelpProvider({ children }) {
45
- const cfg = _chunkSE2YSAERjs._getStaticHelpContent.call(void 0, );
46
+ const cfg = _chunkC6UXEPNYjs._getStaticHelpContent.call(void 0, );
46
47
  if (!cfg) {
47
48
  throw new Error(
48
49
  "Help content not configured \u2014 call configureJsonApi({ helpContent: {...} }) before importing help components."
@@ -74,29 +75,29 @@ var _lucidereact = require('lucide-react');
74
75
 
75
76
 
76
77
  function HelpAssistantSheet({ open, onOpenChange }) {
77
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkS4G7IXZZjs.Sheet, { open, onOpenChange, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
78
- _chunkS4G7IXZZjs.SheetContent,
78
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk7CR4YB7Yjs.Sheet, { open, onOpenChange, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
79
+ _chunk7CR4YB7Yjs.SheetContent,
79
80
  {
80
81
  side: "right",
81
82
  className: "flex w-full flex-col data-[side=right]:sm:max-w-2xl data-[side=right]:lg:max-w-3xl",
82
- children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkS4G7IXZZjs.AssistantProvider, { manageUrl: false, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, HelpAssistantSheetBody, {}) })
83
+ children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk7CR4YB7Yjs.AssistantProvider, { manageUrl: false, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, HelpAssistantSheetBody, {}) })
83
84
  }
84
85
  ) });
85
86
  }
86
87
  _chunk7QVYU63Ejs.__name.call(void 0, HelpAssistantSheet, "HelpAssistantSheet");
87
88
  function HelpAssistantSheetBody() {
88
89
  const t = _nextintl.useTranslations.call(void 0, );
89
- const ctx = _chunkS4G7IXZZjs.useAssistantContext.call(void 0, );
90
+ const ctx = _chunk7CR4YB7Yjs.useAssistantContext.call(void 0, );
90
91
  const showThread = !!ctx.assistant || ctx.sending || ctx.messages.length > 0;
91
92
  const send = /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void 0, (content) => ctx.sendMessage(content, { howToMode: true }), "send");
92
93
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
93
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkS4G7IXZZjs.SheetHeader, { children: [
94
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkS4G7IXZZjs.SheetTitle, { children: t("help.askAi.sheet.title") }),
95
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkS4G7IXZZjs.SheetDescription, { children: t("help.askAi.sheet.subtitle") })
94
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk7CR4YB7Yjs.SheetHeader, { children: [
95
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk7CR4YB7Yjs.SheetTitle, { children: t("help.askAi.sheet.title") }),
96
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk7CR4YB7Yjs.SheetDescription, { children: t("help.askAi.sheet.subtitle") })
96
97
  ] }),
97
- !showThread ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkS4G7IXZZjs.AssistantEmptyState, { onSend: send }) : /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
98
+ !showThread ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk7CR4YB7Yjs.AssistantEmptyState, { onSend: send }) : /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
98
99
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
99
- _chunkS4G7IXZZjs.AssistantThread,
100
+ _chunk7CR4YB7Yjs.AssistantThread,
100
101
  {
101
102
  messages: ctx.messages,
102
103
  sending: ctx.sending,
@@ -106,7 +107,7 @@ function HelpAssistantSheetBody() {
106
107
  onRetry: ctx.retrySend
107
108
  }
108
109
  ),
109
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkS4G7IXZZjs.AssistantComposer, { onSend: send, disabled: ctx.sending })
110
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk7CR4YB7Yjs.AssistantComposer, { onSend: send, disabled: ctx.sending })
110
111
  ] })
111
112
  ] });
112
113
  }
@@ -116,20 +117,20 @@ _chunk7QVYU63Ejs.__name.call(void 0, HelpAssistantSheetBody, "HelpAssistantSheet
116
117
 
117
118
  function HelpAskAi() {
118
119
  const t = _nextintl.useTranslations.call(void 0, );
119
- const { currentUser } = _chunkS4G7IXZZjs.useCurrentUserContext.call(void 0, );
120
+ const { currentUser } = _chunk7CR4YB7Yjs.useCurrentUserContext.call(void 0, );
120
121
  const [open, setOpen] = _react.useState.call(void 0, false);
121
122
  const disabled = !currentUser;
122
123
  if (disabled) {
123
- return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkS4G7IXZZjs.Tooltip, { children: [
124
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkS4G7IXZZjs.TooltipTrigger, { render: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkS4G7IXZZjs.Button, { variant: "outline", size: "sm", disabled: true }), children: [
124
+ return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk7CR4YB7Yjs.Tooltip, { children: [
125
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk7CR4YB7Yjs.TooltipTrigger, { render: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk7CR4YB7Yjs.Button, { variant: "outline", size: "sm", disabled: true }), children: [
125
126
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.SparklesIcon, { className: "h-4 w-4" }),
126
127
  t("help.askAi.button")
127
128
  ] }),
128
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkS4G7IXZZjs.TooltipContent, { children: t("help.askAi.loginTooltip") })
129
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk7CR4YB7Yjs.TooltipContent, { children: t("help.askAi.loginTooltip") })
129
130
  ] });
130
131
  }
131
132
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
132
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkS4G7IXZZjs.Button, { variant: "outline", size: "sm", onClick: () => setOpen(true), children: [
133
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk7CR4YB7Yjs.Button, { variant: "outline", size: "sm", onClick: () => setOpen(true), children: [
133
134
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.SparklesIcon, { className: "h-4 w-4" }),
134
135
  t("help.askAi.button")
135
136
  ] }),
@@ -142,7 +143,7 @@ _chunk7QVYU63Ejs.__name.call(void 0, HelpAskAi, "HelpAskAi");
142
143
 
143
144
  function HelpHeader() {
144
145
  const t = _nextintl.useTranslations.call(void 0, );
145
- const { currentUser } = _chunkS4G7IXZZjs.useCurrentUserContext.call(void 0, );
146
+ const { currentUser } = _chunk7CR4YB7Yjs.useCurrentUserContext.call(void 0, );
146
147
  const { brand } = useHelp();
147
148
  const logo = _optionalChain([brand, 'optionalAccess', _ => _.logo]);
148
149
  const label = _nullishCoalesce(_optionalChain([brand, 'optionalAccess', _2 => _2.label]), () => ( "Help"));
@@ -158,7 +159,7 @@ function HelpHeader() {
158
159
  ] }),
159
160
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex items-center gap-2", children: [
160
161
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, HelpAskAi, {}),
161
- currentUser ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkS4G7IXZZjs.Button, { render: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _link2.default, { href: appHref }), nativeButton: false, variant: "outline", size: "sm", children: t("help.header.openApp") }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkS4G7IXZZjs.Button, { render: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _link2.default, { href: "/login" }), nativeButton: false, variant: "outline", size: "sm", children: t("help.header.login") })
162
+ currentUser ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _link2.default, { href: appHref, className: _chunk7CR4YB7Yjs.buttonVariants.call(void 0, { variant: "outline", size: "sm" }), children: t("help.header.openApp") }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _link2.default, { href: "/login", className: _chunk7CR4YB7Yjs.buttonVariants.call(void 0, { variant: "outline", size: "sm" }), children: t("help.header.login") })
162
163
  ] })
163
164
  ] });
164
165
  }
@@ -200,12 +201,12 @@ _chunk7QVYU63Ejs.__name.call(void 0, useHelpFilter, "useHelpFilter");
200
201
 
201
202
  function HelpSideNav() {
202
203
  const t = _nextintl.useTranslations.call(void 0, );
203
- const generateUrl = _chunkS4G7IXZZjs.usePageUrlGenerator.call(void 0, );
204
+ const generateUrl = _chunk7CR4YB7Yjs.usePageUrlGenerator.call(void 0, );
204
205
  const pathname = _navigation.usePathname.call(void 0, );
205
206
  const [articles, setArticles] = _react.useState.call(void 0, []);
206
207
  _react.useEffect.call(void 0, () => {
207
208
  let active = true;
208
- _chunkAGKZCRG2js.HowToService.findPublished().then((list) => active && setArticles(list)).catch(() => active && setArticles([]));
209
+ _chunk5SFFHIEEjs.HowToService.findPublished().then((list) => active && setArticles(list)).catch(() => active && setArticles([]));
209
210
  return () => {
210
211
  active = false;
211
212
  };
@@ -281,7 +282,7 @@ _chunk7QVYU63Ejs.__name.call(void 0, HelpSideNav, "HelpSideNav");
281
282
  function HelpArticleBody(props) {
282
283
  const t = _nextintl.useTranslations.call(void 0, );
283
284
  const format = _nextintl.useFormatter.call(void 0, );
284
- const generateUrl = _chunkS4G7IXZZjs.usePageUrlGenerator.call(void 0, );
285
+ const generateUrl = _chunk7CR4YB7Yjs.usePageUrlGenerator.call(void 0, );
285
286
  const { howToType, title, summary, updatedAt, prev, next, children } = props;
286
287
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "article", { className: "prose dark:prose-invert max-w-none", children: [
287
288
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "nav", { className: "text-muted-foreground mb-2 text-xs", children: [
@@ -338,7 +339,7 @@ function HelpTOC({ headings }) {
338
339
  }, [headings]);
339
340
  if (headings.length === 0) return null;
340
341
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "nav", { "aria-label": t("help.toc.title"), className: "hidden lg:block", children: [
341
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkS4G7IXZZjs.MicroLabel, { className: "mb-2", children: t("help.toc.title") }),
342
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk7CR4YB7Yjs.MicroLabel, { className: "mb-2", children: t("help.toc.title") }),
342
343
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "ul", { className: "space-y-1 text-sm", children: headings.map((h) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "li", { style: { paddingLeft: `${(h.depth - 2) * 0.75}rem` }, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
343
344
  "a",
344
345
  {
@@ -359,13 +360,13 @@ _chunk7QVYU63Ejs.__name.call(void 0, HelpTOC, "HelpTOC");
359
360
 
360
361
  function HelpHint({ contextKey }) {
361
362
  const t = _nextintl.useTranslations.call(void 0, );
362
- const generateUrl = _chunkS4G7IXZZjs.usePageUrlGenerator.call(void 0, );
363
+ const generateUrl = _chunk7CR4YB7Yjs.usePageUrlGenerator.call(void 0, );
363
364
  const [open, setOpen] = _react.useState.call(void 0, false);
364
365
  const [picked, setPicked] = _react.useState.call(void 0, null);
365
366
  const [articles, setArticles] = _react.useState.call(void 0, []);
366
367
  _react.useEffect.call(void 0, () => {
367
368
  let active2 = true;
368
- _chunkAGKZCRG2js.HowToService.findPublished().then((list) => active2 && setArticles(list)).catch(() => active2 && setArticles([]));
369
+ _chunk5SFFHIEEjs.HowToService.findPublished().then((list) => active2 && setArticles(list)).catch(() => active2 && setArticles([]));
369
370
  return () => {
370
371
  active2 = false;
371
372
  };
@@ -377,7 +378,7 @@ function HelpHint({ contextKey }) {
377
378
  if (matches.length === 0) return null;
378
379
  const active = _nullishCoalesce(picked, () => ( (matches.length === 1 ? matches[0] : null)));
379
380
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
380
- _chunkS4G7IXZZjs.Sheet,
381
+ _chunk7CR4YB7Yjs.Sheet,
381
382
  {
382
383
  open,
383
384
  onOpenChange: (o) => {
@@ -385,11 +386,11 @@ function HelpHint({ contextKey }) {
385
386
  if (!o) setPicked(null);
386
387
  },
387
388
  children: [
388
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkS4G7IXZZjs.SheetTrigger, { render: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkS4G7IXZZjs.Button, { variant: "ghost", size: "icon-sm", "aria-label": t("help.hint.trigger") }), children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.HelpCircleIcon, { className: "h-4 w-4" }) }),
389
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkS4G7IXZZjs.SheetContent, { side: "right", className: "w-full max-w-md sm:max-w-lg", children: [
390
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkS4G7IXZZjs.SheetHeader, { children: [
391
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkS4G7IXZZjs.SheetTitle, { children: active ? active.name : t("help.hint.pickArticle") }),
392
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkS4G7IXZZjs.SheetDescription, { children: _nullishCoalesce(_optionalChain([active, 'optionalAccess', _4 => _4.summary]), () => ( "")) })
389
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk7CR4YB7Yjs.SheetTrigger, { render: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk7CR4YB7Yjs.Button, { variant: "ghost", size: "icon-sm", "aria-label": t("help.hint.trigger") }), children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.HelpCircleIcon, { className: "h-4 w-4" }) }),
390
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk7CR4YB7Yjs.SheetContent, { side: "right", className: "w-full max-w-md sm:max-w-lg", children: [
391
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk7CR4YB7Yjs.SheetHeader, { children: [
392
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk7CR4YB7Yjs.SheetTitle, { children: active ? active.name : t("help.hint.pickArticle") }),
393
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk7CR4YB7Yjs.SheetDescription, { children: _nullishCoalesce(_optionalChain([active, 'optionalAccess', _4 => _4.summary]), () => ( "")) })
393
394
  ] }),
394
395
  active ? /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "mt-4 space-y-3", children: [
395
396
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-muted-foreground text-sm", children: active.summary }),
@@ -421,18 +422,18 @@ _chunk7QVYU63Ejs.__name.call(void 0, HelpHint, "HelpHint");
421
422
 
422
423
  function HelpSearchResultRow({ result, onSelect }) {
423
424
  const t = _nextintl.useTranslations.call(void 0, );
424
- const generateUrl = _chunkS4G7IXZZjs.usePageUrlGenerator.call(void 0, );
425
+ const generateUrl = _chunk7CR4YB7Yjs.usePageUrlGenerator.call(void 0, );
425
426
  const [article, setArticle] = _react.useState.call(void 0, null);
426
427
  _react.useEffect.call(void 0, () => {
427
428
  let active = true;
428
- _chunkAGKZCRG2js.HowToService.findOne({ id: result.id }).then((a) => active && setArticle(a)).catch(() => active && setArticle(null));
429
+ _chunk5SFFHIEEjs.HowToService.findOne({ id: result.id }).then((a) => active && setArticle(a)).catch(() => active && setArticle(null));
429
430
  return () => {
430
431
  active = false;
431
432
  };
432
433
  }, [result.id]);
433
434
  if (!article) {
434
435
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
435
- _chunkS4G7IXZZjs.CommandItem,
436
+ _chunk7CR4YB7Yjs.CommandItem,
436
437
  {
437
438
  value: result.id,
438
439
  disabled: true,
@@ -441,7 +442,7 @@ function HelpSearchResultRow({ result, onSelect }) {
441
442
  }
442
443
  );
443
444
  }
444
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkS4G7IXZZjs.CommandItem, { value: result.id, onSelect, className: "cursor-pointer p-0", children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
445
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk7CR4YB7Yjs.CommandItem, { value: result.id, onSelect, className: "cursor-pointer p-0", children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
445
446
  _link2.default,
446
447
  {
447
448
  href: generateUrl({ page: `/help/${article.howToType}/${article.slug}` }),
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/runner/work/nextjs-jsonapi/nextjs-jsonapi/dist/features/help/index.js","../../../src/features/help/contexts/HelpContext.tsx","../../../src/features/help/components/HelpHeader.tsx","../../../src/features/help/components/HelpAskAi.tsx","../../../src/features/help/components/HelpAssistantSheet.tsx","../../../src/features/help/components/HelpSideNav.tsx","../../../src/features/help/hooks/useHelpFilter.ts","../../../src/features/help/components/HelpArticleBody.tsx","../../../src/features/help/components/HelpTOC.tsx","../../../src/features/help/components/HelpHint.tsx","../../../src/features/help/components/HelpSearchResultRow.tsx","../../../src/features/help/utils/articleUrl.ts","../../../src/features/help/i18n-keys.ts"],"names":["jsx","useTranslations","jsxs","Fragment","useState","useMemo","Link","active"],"mappings":"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","file":"/home/runner/work/nextjs-jsonapi/nextjs-jsonapi/dist/features/help/index.js","sourcesContent":[null,"\"use client\";\nimport { createContext, useContext, ReactNode } from \"react\";\nimport { _getStaticHelpContent } from \"../../../core/registry/helpStore\";\nimport type { HelpContentConfig } from \"../interfaces/help-content-config.interface\";\n\nconst HelpContext = createContext<HelpContentConfig | null>(null);\n\nexport function HelpProvider({ children }: { children: ReactNode }) {\n const cfg = _getStaticHelpContent<HelpContentConfig>();\n if (!cfg) {\n throw new Error(\n \"Help content not configured — call configureJsonApi({ helpContent: {...} }) before importing help components.\",\n );\n }\n return <HelpContext.Provider value={cfg}>{children}</HelpContext.Provider>;\n}\n\nexport function useHelp(): HelpContentConfig {\n const ctx = useContext(HelpContext);\n if (!ctx) {\n throw new Error(\"useHelp() called outside <HelpProvider>. Wrap your help route group with <HelpProvider>.\");\n }\n return ctx;\n}\n","\"use client\";\nimport Link from \"next/link\";\nimport Image from \"next/image\";\nimport { useTranslations } from \"next-intl\";\nimport { useCurrentUserContext } from \"../../user/contexts/CurrentUserContext\";\nimport { Button } from \"../../../shadcnui\";\nimport { useHelp } from \"../contexts/HelpContext\";\nimport { HelpAskAi } from \"./HelpAskAi\";\n\nexport function HelpHeader() {\n const t = useTranslations();\n const { currentUser } = useCurrentUserContext();\n const { brand } = useHelp();\n const logo = brand?.logo;\n const label = brand?.label ?? \"Help\";\n const appHref = brand?.appHref ?? \"/\";\n\n return (\n <header className=\"border-border bg-background flex items-center justify-between border-b px-4 py-3\">\n <Link href=\"/help\" className=\"flex items-center gap-2\">\n {logo ? <Image src={logo} alt={label} width={28} height={28} /> : null}\n <span className=\"text-base font-semibold\">\n {label} · {t(\"help.footerLink\")}\n </span>\n </Link>\n <div className=\"flex items-center gap-2\">\n <HelpAskAi />\n {currentUser ? (\n <Button render={<Link href={appHref} />} nativeButton={false} variant=\"outline\" size=\"sm\">\n {t(\"help.header.openApp\")}\n </Button>\n ) : (\n <Button render={<Link href=\"/login\" />} nativeButton={false} variant=\"outline\" size=\"sm\">\n {t(\"help.header.login\")}\n </Button>\n )}\n </div>\n </header>\n );\n}\n","\"use client\";\nimport { useState } from \"react\";\nimport { SparklesIcon } from \"lucide-react\";\nimport { useTranslations } from \"next-intl\";\nimport { useCurrentUserContext } from \"../../user/contexts/CurrentUserContext\";\nimport { Button, Tooltip, TooltipTrigger, TooltipContent } from \"../../../shadcnui\";\nimport { HelpAssistantSheet } from \"./HelpAssistantSheet\";\n\nexport function HelpAskAi() {\n const t = useTranslations();\n const { currentUser } = useCurrentUserContext();\n const [open, setOpen] = useState(false);\n const disabled = !currentUser;\n\n if (disabled) {\n return (\n <Tooltip>\n <TooltipTrigger render={<Button variant=\"outline\" size=\"sm\" disabled />}>\n <SparklesIcon className=\"h-4 w-4\" />\n {t(\"help.askAi.button\")}\n </TooltipTrigger>\n <TooltipContent>{t(\"help.askAi.loginTooltip\")}</TooltipContent>\n </Tooltip>\n );\n }\n\n return (\n <>\n <Button variant=\"outline\" size=\"sm\" onClick={() => setOpen(true)}>\n <SparklesIcon className=\"h-4 w-4\" />\n {t(\"help.askAi.button\")}\n </Button>\n <HelpAssistantSheet open={open} onOpenChange={setOpen} />\n </>\n );\n}\n","\"use client\";\nimport { useTranslations } from \"next-intl\";\nimport { Sheet, SheetContent, SheetHeader, SheetTitle, SheetDescription } from \"../../../shadcnui\";\nimport { AssistantProvider, useAssistantContext } from \"../../assistant/contexts/AssistantContext\";\nimport { AssistantThread } from \"../../assistant/components/parts/AssistantThread\";\nimport { AssistantComposer } from \"../../assistant/components/parts/AssistantComposer\";\nimport { AssistantEmptyState } from \"../../assistant/components/parts/AssistantEmptyState\";\n\nexport function HelpAssistantSheet({ open, onOpenChange }: { open: boolean; onOpenChange: (o: boolean) => void }) {\n return (\n <Sheet open={open} onOpenChange={onOpenChange}>\n <SheetContent\n side=\"right\"\n className=\"flex w-full flex-col data-[side=right]:sm:max-w-2xl data-[side=right]:lg:max-w-3xl\"\n >\n <AssistantProvider manageUrl={false}>\n <HelpAssistantSheetBody />\n </AssistantProvider>\n </SheetContent>\n </Sheet>\n );\n}\n\nfunction HelpAssistantSheetBody() {\n const t = useTranslations();\n const ctx = useAssistantContext();\n const showThread = !!ctx.assistant || ctx.sending || ctx.messages.length > 0;\n const send = (content: string) => ctx.sendMessage(content, { howToMode: true });\n\n return (\n <>\n <SheetHeader>\n <SheetTitle>{t(\"help.askAi.sheet.title\")}</SheetTitle>\n <SheetDescription>{t(\"help.askAi.sheet.subtitle\")}</SheetDescription>\n </SheetHeader>\n {!showThread ? (\n <AssistantEmptyState onSend={send} />\n ) : (\n <>\n <AssistantThread\n messages={ctx.messages}\n sending={ctx.sending}\n status={ctx.status}\n onSelectFollowUp={send}\n failedMessageIds={ctx.failedMessageIds}\n onRetry={ctx.retrySend}\n />\n <AssistantComposer onSend={send} disabled={ctx.sending} />\n </>\n )}\n </>\n );\n}\n","\"use client\";\n\nimport { useEffect, useMemo, useState } from \"react\";\nimport { useTranslations } from \"next-intl\";\nimport Link from \"next/link\";\nimport { usePathname } from \"next/navigation\";\nimport { HELP_MODES } from \"../types/help-article.types\";\nimport { usePageUrlGenerator } from \"../../../client\";\nimport { useHelpFilter } from \"../hooks/useHelpFilter\";\nimport { HowToService } from \"../../how-to/data/HowToService\";\nimport type { HowToInterface } from \"../../how-to/data/HowToInterface\";\n\nexport function HelpSideNav() {\n const t = useTranslations();\n const generateUrl = usePageUrlGenerator();\n const pathname = usePathname();\n const [articles, setArticles] = useState<HowToInterface[]>([]);\n\n useEffect(() => {\n let active = true;\n HowToService.findPublished()\n .then((list) => active && setArticles(list))\n .catch(() => active && setArticles([]));\n return () => {\n active = false;\n };\n }, []);\n\n // useHelpFilter indexes by title/summary/tags — map HowTo getters into the shape it expects.\n const indexable = useMemo(\n () =>\n articles.map((a) => ({\n id: a.id,\n title: a.name,\n summary: a.summary ?? \"\",\n tags: a.tags,\n mode: a.howToType ?? \"\",\n slug: a.slug ?? \"\",\n })),\n [articles],\n );\n const { query, setQuery, filtered } = useHelpFilter(indexable as any);\n const filtering = query.trim().length > 0;\n\n const groups = useMemo(\n () =>\n HELP_MODES.map((mode) => ({\n mode,\n articles: articles\n .filter((a) => a.howToType === mode && !a.draft)\n .sort((x, y) => (x.order ?? 0) - (y.order ?? 0)),\n })),\n [articles],\n );\n\n const isActive = (mode: string, slug: string) => pathname.endsWith(`/help/${mode}/${slug}`);\n\n return (\n <nav aria-label=\"Help navigation\" className=\"flex h-full flex-col gap-3 overflow-y-auto p-4\">\n <input\n type=\"search\"\n value={query}\n onChange={(e) => setQuery(e.target.value)}\n placeholder={t(\"help.sideNav.filterPlaceholder\")}\n className=\"border-input bg-background w-full rounded-md border px-3 py-2 text-sm\"\n />\n {filtering ? (\n (filtered as any[]).length === 0 ? (\n <p className=\"text-muted-foreground text-sm\">{t(\"help.sideNav.noMatches\")}</p>\n ) : (\n <ul className=\"space-y-1\">\n {(filtered as any[]).map((a) => (\n <li key={a.id}>\n <Link\n href={generateUrl({ page: `/help/${a.mode}/${a.slug}` })}\n className={\n \"hover:bg-muted block rounded px-2 py-1 text-sm \" +\n (isActive(a.mode, a.slug) ? \"bg-muted font-medium\" : \"\")\n }\n >\n {a.title}\n </Link>\n </li>\n ))}\n </ul>\n )\n ) : (\n groups.map((group) => {\n if (group.articles.length === 0) return null;\n return (\n <div key={group.mode}>\n <Link\n href={generateUrl({ page: `/help/${group.mode}` })}\n className=\"text-muted-foreground hover:text-foreground mb-1 block text-xs font-semibold tracking-wider uppercase\"\n >\n {t(`help.modes.${group.mode}`)}\n </Link>\n <ul className=\"space-y-0.5\">\n {group.articles.map((a) => (\n <li key={a.id}>\n <Link\n href={generateUrl({ page: `/help/${a.howToType}/${a.slug}` })}\n className={\n \"hover:bg-muted block rounded px-2 py-1 text-sm \" +\n (isActive(a.howToType ?? \"\", a.slug ?? \"\") ? \"bg-muted font-medium\" : \"\")\n }\n >\n {a.name}\n </Link>\n </li>\n ))}\n </ul>\n </div>\n );\n })\n )}\n </nav>\n );\n}\n","\"use client\";\nimport { useMemo, useState } from \"react\";\nimport Fuse from \"fuse.js\";\nimport type { HelpArticle } from \"../types/help-article.types\";\n\nexport function useHelpFilter(articles: readonly HelpArticle[]) {\n const [query, setQuery] = useState(\"\");\n const fuse = useMemo(\n () =>\n new Fuse([...articles], {\n keys: [\n { name: \"title\", weight: 0.5 },\n { name: \"summary\", weight: 0.3 },\n { name: \"tags\", weight: 0.1 },\n { name: \"headings.text\", weight: 0.1 },\n ],\n threshold: 0.4,\n ignoreLocation: true,\n }),\n [articles],\n );\n const filtered = useMemo(() => {\n if (!query.trim()) return [...articles];\n return fuse.search(query).map((r) => r.item);\n }, [query, articles, fuse]);\n return { query, setQuery, filtered };\n}\n","\"use client\";\n\nimport { ReactNode } from \"react\";\nimport Link from \"next/link\";\nimport { useFormatter, useTranslations } from \"next-intl\";\nimport { usePageUrlGenerator } from \"../../../client\";\n\ntype Sibling = { howToType: string; slug: string; title: string };\n\nexport function HelpArticleBody(props: {\n howToType: string;\n title: string;\n summary?: string;\n updatedAt?: string;\n prev?: Sibling | null;\n next?: Sibling | null;\n children: ReactNode;\n}) {\n const t = useTranslations();\n const format = useFormatter();\n const generateUrl = usePageUrlGenerator();\n const { howToType, title, summary, updatedAt, prev, next, children } = props;\n\n return (\n <article className=\"prose dark:prose-invert max-w-none\">\n <nav className=\"text-muted-foreground mb-2 text-xs\">\n <Link href={generateUrl({ page: \"/help\" })}>Help</Link>\n {\" · \"}\n <Link href={generateUrl({ page: `/help/${howToType}` })}>{t(`help.modes.${howToType}`)}</Link>\n </nav>\n <h1>{title}</h1>\n {summary ? <p className=\"text-muted-foreground !mt-0 text-base\">{summary}</p> : null}\n {children}\n <hr className=\"my-6\" />\n {updatedAt ? (\n <div className=\"text-muted-foreground text-xs\">\n <span>\n {t(\"help.article.lastUpdated\", {\n date: format.dateTime(new Date(updatedAt), { dateStyle: \"short\" }),\n })}\n </span>\n </div>\n ) : null}\n <div className=\"mt-4 flex justify-between text-sm\">\n {prev ? (\n <Link href={generateUrl({ page: `/help/${prev.howToType}/${prev.slug}` })}>\n ← {t(\"help.article.previous\")}: {prev.title}\n </Link>\n ) : (\n <span />\n )}\n {next ? (\n <Link href={generateUrl({ page: `/help/${next.howToType}/${next.slug}` })}>\n {t(\"help.article.next\")}: {next.title} →\n </Link>\n ) : (\n <span />\n )}\n </div>\n </article>\n );\n}\n","\"use client\";\nimport { useEffect, useState } from \"react\";\nimport { useTranslations } from \"next-intl\";\nimport type { HelpHeading } from \"../types/help-article.types\";\nimport { MicroLabel } from \"../../../components/typography\";\n\nexport function HelpTOC({ headings }: { headings: readonly HelpHeading[] }) {\n const t = useTranslations();\n const [active, setActive] = useState<string | null>(null);\n\n useEffect(() => {\n const observer = new IntersectionObserver(\n (entries) => {\n for (const e of entries) {\n if (e.isIntersecting) setActive(e.target.id);\n }\n },\n { rootMargin: \"0px 0px -70% 0px\", threshold: 0 },\n );\n headings.forEach((h) => {\n const el = document.getElementById(h.slug);\n if (el) observer.observe(el);\n });\n return () => observer.disconnect();\n }, [headings]);\n\n if (headings.length === 0) return null;\n return (\n <nav aria-label={t(\"help.toc.title\")} className=\"hidden lg:block\">\n <MicroLabel className=\"mb-2\">{t(\"help.toc.title\")}</MicroLabel>\n <ul className=\"space-y-1 text-sm\">\n {headings.map((h) => (\n <li key={h.slug} style={{ paddingLeft: `${(h.depth - 2) * 0.75}rem` }}>\n <a\n href={`#${h.slug}`}\n className={\n \"block truncate hover:text-foreground \" +\n (active === h.slug ? \"text-foreground font-medium\" : \"text-muted-foreground\")\n }\n >\n {h.text}\n </a>\n </li>\n ))}\n </ul>\n </nav>\n );\n}\n","\"use client\";\nimport { useEffect, useMemo, useState } from \"react\";\nimport { useTranslations } from \"next-intl\";\nimport Link from \"next/link\";\nimport { HelpCircleIcon } from \"lucide-react\";\nimport {\n Button,\n Sheet,\n SheetContent,\n SheetTrigger,\n SheetHeader,\n SheetTitle,\n SheetDescription,\n} from \"../../../shadcnui\";\nimport { usePageUrlGenerator } from \"../../../client\";\nimport { HowToService } from \"../../how-to/data/HowToService\";\nimport type { HowToInterface } from \"../../how-to/data/HowToInterface\";\n\nexport function HelpHint({ contextKey }: { contextKey: string }) {\n const t = useTranslations();\n const generateUrl = usePageUrlGenerator();\n const [open, setOpen] = useState(false);\n const [picked, setPicked] = useState<HowToInterface | null>(null);\n\n const [articles, setArticles] = useState<HowToInterface[]>([]);\n useEffect(() => {\n let active = true;\n HowToService.findPublished()\n .then((list) => active && setArticles(list))\n .catch(() => active && setArticles([]));\n return () => {\n active = false;\n };\n }, []);\n\n const matches = useMemo(\n () => articles.filter((a) => a.contextualKeys.includes(contextKey) && !a.draft),\n [articles, contextKey],\n );\n\n if (matches.length === 0) return null;\n const active = picked ?? (matches.length === 1 ? matches[0] : null);\n\n return (\n <Sheet\n open={open}\n onOpenChange={(o) => {\n setOpen(o);\n if (!o) setPicked(null);\n }}\n >\n <SheetTrigger render={<Button variant=\"ghost\" size=\"icon-sm\" aria-label={t(\"help.hint.trigger\")} />}>\n <HelpCircleIcon className=\"h-4 w-4\" />\n </SheetTrigger>\n <SheetContent side=\"right\" className=\"w-full max-w-md sm:max-w-lg\">\n <SheetHeader>\n <SheetTitle>{active ? active.name : t(\"help.hint.pickArticle\")}</SheetTitle>\n <SheetDescription>{active?.summary ?? \"\"}</SheetDescription>\n </SheetHeader>\n {active ? (\n <div className=\"mt-4 space-y-3\">\n <p className=\"text-muted-foreground text-sm\">{active.summary}</p>\n <Link href={generateUrl({ page: `/help/${active.howToType}/${active.slug}` })} className=\"text-sm\">\n {t(\"help.hint.viewArticle\")}\n </Link>\n </div>\n ) : (\n <ul className=\"mt-4 space-y-1\">\n {matches.map((a) => (\n <li key={a.id}>\n <button\n type=\"button\"\n onClick={() => setPicked(a)}\n className=\"hover:bg-muted block w-full rounded px-2 py-1 text-left text-sm\"\n >\n <div className=\"font-medium\">{a.name}</div>\n <div className=\"text-muted-foreground text-xs\">{a.summary}</div>\n </button>\n </li>\n ))}\n </ul>\n )}\n </SheetContent>\n </Sheet>\n );\n}\n","\"use client\";\nimport Link from \"next/link\";\nimport { useTranslations } from \"next-intl\";\nimport { useEffect, useState } from \"react\";\nimport { LifeBuoyIcon, ArrowUpRightIcon } from \"lucide-react\";\nimport { CommandItem } from \"../../../shadcnui\";\nimport { usePageUrlGenerator } from \"../../../client\";\nimport { HowToService } from \"../../how-to/data/HowToService\";\nimport type { HowToInterface } from \"../../how-to/data/HowToInterface\";\n\nexport interface HelpSearchResultRowProps {\n result: { id: string; name: string; entityType: string };\n onSelect?: () => void;\n}\n\nexport function HelpSearchResultRow({ result, onSelect }: HelpSearchResultRowProps) {\n const t = useTranslations();\n const generateUrl = usePageUrlGenerator();\n const [article, setArticle] = useState<HowToInterface | null>(null);\n useEffect(() => {\n let active = true;\n HowToService.findOne({ id: result.id })\n .then((a) => active && setArticle(a))\n .catch(() => active && setArticle(null));\n return () => {\n active = false;\n };\n }, [result.id]);\n\n if (!article) {\n return (\n <CommandItem\n value={result.id}\n disabled\n className=\"text-muted-foreground cursor-not-allowed px-3 py-1.5 text-sm italic\"\n >\n {t(\"help.search.removed\")}\n </CommandItem>\n );\n }\n\n return (\n <CommandItem value={result.id} onSelect={onSelect} className=\"cursor-pointer p-0\">\n <Link\n href={generateUrl({ page: `/help/${article.howToType}/${article.slug}` })}\n className=\"hover:bg-muted flex w-full items-center gap-3 rounded px-3 py-2\"\n >\n <div className=\"bg-muted text-muted-foreground flex h-10 w-10 shrink-0 items-center justify-center rounded-full\">\n <LifeBuoyIcon className=\"h-5 w-5\" />\n </div>\n <div className=\"flex min-w-0 flex-1 flex-col\">\n <span className=\"text-foreground truncate text-sm font-semibold\">{article.name}</span>\n <span className=\"text-muted-foreground truncate text-xs\">\n {t(`help.modes.${article.howToType}`)} · {article.summary}\n </span>\n </div>\n <ArrowUpRightIcon className=\"text-muted-foreground h-5 w-5 shrink-0\" />\n </Link>\n </CommandItem>\n );\n}\n","import type { HelpMode } from \"../types/help-article.types\";\nimport type { usePageUrlGenerator } from \"../../../client\";\n\nexport function articleUrl(\n generateUrl: ReturnType<typeof usePageUrlGenerator>,\n article: { mode: HelpMode; slug: string },\n): string {\n return generateUrl({ page: `/help/${article.mode}/${article.slug}` });\n}\n\nexport function modeUrl(generateUrl: ReturnType<typeof usePageUrlGenerator>, mode: HelpMode): string {\n return generateUrl({ page: `/help/${mode}` });\n}\n","/**\n * The fixed namespace of i18n keys this feature reads via useTranslations/getTranslations.\n * Consuming apps must define each entry in their messages/<locale>.json.\n */\nexport const HELP_I18N_KEYS = [\n \"help.modes.tutorial\",\n \"help.modes.how-to\",\n \"help.modes.reference\",\n \"help.modes.explanation\",\n \"help.sideNav.filterPlaceholder\",\n \"help.sideNav.noMatches\",\n \"help.toc.title\",\n \"help.article.lastUpdated\",\n \"help.article.previous\",\n \"help.article.next\",\n \"help.article.related\",\n \"help.askAi.button\",\n \"help.askAi.loginTooltip\",\n \"help.askAi.sheet.title\",\n \"help.askAi.sheet.subtitle\",\n \"help.header.search\",\n \"help.header.login\",\n \"help.header.openApp\",\n \"help.hint.trigger\",\n \"help.hint.viewArticle\",\n \"help.hint.pickArticle\",\n \"help.landing.heading\",\n \"help.landing.subheading\",\n \"help.landing.featuredTutorials\",\n \"help.landing.browseByMode\",\n \"help.modeIndex.empty\",\n \"help.search.removed\",\n \"help.footerLink\",\n] as const;\n"]}
1
+ {"version":3,"sources":["/home/runner/work/nextjs-jsonapi/nextjs-jsonapi/dist/features/help/index.js","../../../src/features/help/contexts/HelpContext.tsx","../../../src/features/help/components/HelpHeader.tsx","../../../src/features/help/components/HelpAskAi.tsx","../../../src/features/help/components/HelpAssistantSheet.tsx","../../../src/features/help/components/HelpSideNav.tsx","../../../src/features/help/hooks/useHelpFilter.ts","../../../src/features/help/components/HelpArticleBody.tsx","../../../src/features/help/components/HelpTOC.tsx","../../../src/features/help/components/HelpHint.tsx","../../../src/features/help/components/HelpSearchResultRow.tsx","../../../src/features/help/utils/articleUrl.ts","../../../src/features/help/i18n-keys.ts"],"names":["jsx","useTranslations","jsxs","Fragment","useState","useMemo","Link","active"],"mappings":"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","file":"/home/runner/work/nextjs-jsonapi/nextjs-jsonapi/dist/features/help/index.js","sourcesContent":[null,"\"use client\";\nimport { createContext, useContext, ReactNode } from \"react\";\nimport { _getStaticHelpContent } from \"../../../core/registry/helpStore\";\nimport type { HelpContentConfig } from \"../interfaces/help-content-config.interface\";\n\nconst HelpContext = createContext<HelpContentConfig | null>(null);\n\nexport function HelpProvider({ children }: { children: ReactNode }) {\n const cfg = _getStaticHelpContent<HelpContentConfig>();\n if (!cfg) {\n throw new Error(\n \"Help content not configured — call configureJsonApi({ helpContent: {...} }) before importing help components.\",\n );\n }\n return <HelpContext.Provider value={cfg}>{children}</HelpContext.Provider>;\n}\n\nexport function useHelp(): HelpContentConfig {\n const ctx = useContext(HelpContext);\n if (!ctx) {\n throw new Error(\"useHelp() called outside <HelpProvider>. Wrap your help route group with <HelpProvider>.\");\n }\n return ctx;\n}\n","\"use client\";\nimport Link from \"next/link\";\nimport Image from \"next/image\";\nimport { useTranslations } from \"next-intl\";\nimport { useCurrentUserContext } from \"../../user/contexts/CurrentUserContext\";\nimport { buttonVariants } from \"../../../shadcnui\";\nimport { useHelp } from \"../contexts/HelpContext\";\nimport { HelpAskAi } from \"./HelpAskAi\";\n\nexport function HelpHeader() {\n const t = useTranslations();\n const { currentUser } = useCurrentUserContext();\n const { brand } = useHelp();\n const logo = brand?.logo;\n const label = brand?.label ?? \"Help\";\n const appHref = brand?.appHref ?? \"/\";\n\n return (\n <header className=\"border-border bg-background flex items-center justify-between border-b px-4 py-3\">\n <Link href=\"/help\" className=\"flex items-center gap-2\">\n {logo ? <Image src={logo} alt={label} width={28} height={28} /> : null}\n <span className=\"text-base font-semibold\">\n {label} · {t(\"help.footerLink\")}\n </span>\n </Link>\n <div className=\"flex items-center gap-2\">\n <HelpAskAi />\n {/* Styled Links, not <Button render={<Link/>} nativeButton={false}>. Base UI's\n Button primitive warns when rendered as a non-button, and nativeButton={false}\n silences that by stamping role=\"button\" onto the anchor — so a control that\n navigates would announce as a button. Both of these navigate, so they stay\n real links and only borrow the button styling. */}\n {currentUser ? (\n <Link href={appHref} className={buttonVariants({ variant: \"outline\", size: \"sm\" })}>\n {t(\"help.header.openApp\")}\n </Link>\n ) : (\n <Link href=\"/login\" className={buttonVariants({ variant: \"outline\", size: \"sm\" })}>\n {t(\"help.header.login\")}\n </Link>\n )}\n </div>\n </header>\n );\n}\n","\"use client\";\nimport { useState } from \"react\";\nimport { SparklesIcon } from \"lucide-react\";\nimport { useTranslations } from \"next-intl\";\nimport { useCurrentUserContext } from \"../../user/contexts/CurrentUserContext\";\nimport { Button, Tooltip, TooltipTrigger, TooltipContent } from \"../../../shadcnui\";\nimport { HelpAssistantSheet } from \"./HelpAssistantSheet\";\n\nexport function HelpAskAi() {\n const t = useTranslations();\n const { currentUser } = useCurrentUserContext();\n const [open, setOpen] = useState(false);\n const disabled = !currentUser;\n\n if (disabled) {\n return (\n <Tooltip>\n <TooltipTrigger render={<Button variant=\"outline\" size=\"sm\" disabled />}>\n <SparklesIcon className=\"h-4 w-4\" />\n {t(\"help.askAi.button\")}\n </TooltipTrigger>\n <TooltipContent>{t(\"help.askAi.loginTooltip\")}</TooltipContent>\n </Tooltip>\n );\n }\n\n return (\n <>\n <Button variant=\"outline\" size=\"sm\" onClick={() => setOpen(true)}>\n <SparklesIcon className=\"h-4 w-4\" />\n {t(\"help.askAi.button\")}\n </Button>\n <HelpAssistantSheet open={open} onOpenChange={setOpen} />\n </>\n );\n}\n","\"use client\";\nimport { useTranslations } from \"next-intl\";\nimport { Sheet, SheetContent, SheetHeader, SheetTitle, SheetDescription } from \"../../../shadcnui\";\nimport { AssistantProvider, useAssistantContext } from \"../../assistant/contexts/AssistantContext\";\nimport { AssistantThread } from \"../../assistant/components/parts/AssistantThread\";\nimport { AssistantComposer } from \"../../assistant/components/parts/AssistantComposer\";\nimport { AssistantEmptyState } from \"../../assistant/components/parts/AssistantEmptyState\";\n\nexport function HelpAssistantSheet({ open, onOpenChange }: { open: boolean; onOpenChange: (o: boolean) => void }) {\n return (\n <Sheet open={open} onOpenChange={onOpenChange}>\n <SheetContent\n side=\"right\"\n className=\"flex w-full flex-col data-[side=right]:sm:max-w-2xl data-[side=right]:lg:max-w-3xl\"\n >\n <AssistantProvider manageUrl={false}>\n <HelpAssistantSheetBody />\n </AssistantProvider>\n </SheetContent>\n </Sheet>\n );\n}\n\nfunction HelpAssistantSheetBody() {\n const t = useTranslations();\n const ctx = useAssistantContext();\n const showThread = !!ctx.assistant || ctx.sending || ctx.messages.length > 0;\n const send = (content: string) => ctx.sendMessage(content, { howToMode: true });\n\n return (\n <>\n <SheetHeader>\n <SheetTitle>{t(\"help.askAi.sheet.title\")}</SheetTitle>\n <SheetDescription>{t(\"help.askAi.sheet.subtitle\")}</SheetDescription>\n </SheetHeader>\n {!showThread ? (\n <AssistantEmptyState onSend={send} />\n ) : (\n <>\n <AssistantThread\n messages={ctx.messages}\n sending={ctx.sending}\n status={ctx.status}\n onSelectFollowUp={send}\n failedMessageIds={ctx.failedMessageIds}\n onRetry={ctx.retrySend}\n />\n <AssistantComposer onSend={send} disabled={ctx.sending} />\n </>\n )}\n </>\n );\n}\n","\"use client\";\n\nimport { useEffect, useMemo, useState } from \"react\";\nimport { useTranslations } from \"next-intl\";\nimport Link from \"next/link\";\nimport { usePathname } from \"next/navigation\";\nimport { HELP_MODES } from \"../types/help-article.types\";\nimport { usePageUrlGenerator } from \"../../../client\";\nimport { useHelpFilter } from \"../hooks/useHelpFilter\";\nimport { HowToService } from \"../../how-to/data/HowToService\";\nimport type { HowToInterface } from \"../../how-to/data/HowToInterface\";\n\nexport function HelpSideNav() {\n const t = useTranslations();\n const generateUrl = usePageUrlGenerator();\n const pathname = usePathname();\n const [articles, setArticles] = useState<HowToInterface[]>([]);\n\n useEffect(() => {\n let active = true;\n HowToService.findPublished()\n .then((list) => active && setArticles(list))\n .catch(() => active && setArticles([]));\n return () => {\n active = false;\n };\n }, []);\n\n // useHelpFilter indexes by title/summary/tags — map HowTo getters into the shape it expects.\n const indexable = useMemo(\n () =>\n articles.map((a) => ({\n id: a.id,\n title: a.name,\n summary: a.summary ?? \"\",\n tags: a.tags,\n mode: a.howToType ?? \"\",\n slug: a.slug ?? \"\",\n })),\n [articles],\n );\n const { query, setQuery, filtered } = useHelpFilter(indexable as any);\n const filtering = query.trim().length > 0;\n\n const groups = useMemo(\n () =>\n HELP_MODES.map((mode) => ({\n mode,\n articles: articles\n .filter((a) => a.howToType === mode && !a.draft)\n .sort((x, y) => (x.order ?? 0) - (y.order ?? 0)),\n })),\n [articles],\n );\n\n const isActive = (mode: string, slug: string) => pathname.endsWith(`/help/${mode}/${slug}`);\n\n return (\n <nav aria-label=\"Help navigation\" className=\"flex h-full flex-col gap-3 overflow-y-auto p-4\">\n <input\n type=\"search\"\n value={query}\n onChange={(e) => setQuery(e.target.value)}\n placeholder={t(\"help.sideNav.filterPlaceholder\")}\n className=\"border-input bg-background w-full rounded-md border px-3 py-2 text-sm\"\n />\n {filtering ? (\n (filtered as any[]).length === 0 ? (\n <p className=\"text-muted-foreground text-sm\">{t(\"help.sideNav.noMatches\")}</p>\n ) : (\n <ul className=\"space-y-1\">\n {(filtered as any[]).map((a) => (\n <li key={a.id}>\n <Link\n href={generateUrl({ page: `/help/${a.mode}/${a.slug}` })}\n className={\n \"hover:bg-muted block rounded px-2 py-1 text-sm \" +\n (isActive(a.mode, a.slug) ? \"bg-muted font-medium\" : \"\")\n }\n >\n {a.title}\n </Link>\n </li>\n ))}\n </ul>\n )\n ) : (\n groups.map((group) => {\n if (group.articles.length === 0) return null;\n return (\n <div key={group.mode}>\n <Link\n href={generateUrl({ page: `/help/${group.mode}` })}\n className=\"text-muted-foreground hover:text-foreground mb-1 block text-xs font-semibold tracking-wider uppercase\"\n >\n {t(`help.modes.${group.mode}`)}\n </Link>\n <ul className=\"space-y-0.5\">\n {group.articles.map((a) => (\n <li key={a.id}>\n <Link\n href={generateUrl({ page: `/help/${a.howToType}/${a.slug}` })}\n className={\n \"hover:bg-muted block rounded px-2 py-1 text-sm \" +\n (isActive(a.howToType ?? \"\", a.slug ?? \"\") ? \"bg-muted font-medium\" : \"\")\n }\n >\n {a.name}\n </Link>\n </li>\n ))}\n </ul>\n </div>\n );\n })\n )}\n </nav>\n );\n}\n","\"use client\";\nimport { useMemo, useState } from \"react\";\nimport Fuse from \"fuse.js\";\nimport type { HelpArticle } from \"../types/help-article.types\";\n\nexport function useHelpFilter(articles: readonly HelpArticle[]) {\n const [query, setQuery] = useState(\"\");\n const fuse = useMemo(\n () =>\n new Fuse([...articles], {\n keys: [\n { name: \"title\", weight: 0.5 },\n { name: \"summary\", weight: 0.3 },\n { name: \"tags\", weight: 0.1 },\n { name: \"headings.text\", weight: 0.1 },\n ],\n threshold: 0.4,\n ignoreLocation: true,\n }),\n [articles],\n );\n const filtered = useMemo(() => {\n if (!query.trim()) return [...articles];\n return fuse.search(query).map((r) => r.item);\n }, [query, articles, fuse]);\n return { query, setQuery, filtered };\n}\n","\"use client\";\n\nimport { ReactNode } from \"react\";\nimport Link from \"next/link\";\nimport { useFormatter, useTranslations } from \"next-intl\";\nimport { usePageUrlGenerator } from \"../../../client\";\n\ntype Sibling = { howToType: string; slug: string; title: string };\n\nexport function HelpArticleBody(props: {\n howToType: string;\n title: string;\n summary?: string;\n updatedAt?: string;\n prev?: Sibling | null;\n next?: Sibling | null;\n children: ReactNode;\n}) {\n const t = useTranslations();\n const format = useFormatter();\n const generateUrl = usePageUrlGenerator();\n const { howToType, title, summary, updatedAt, prev, next, children } = props;\n\n return (\n <article className=\"prose dark:prose-invert max-w-none\">\n <nav className=\"text-muted-foreground mb-2 text-xs\">\n <Link href={generateUrl({ page: \"/help\" })}>Help</Link>\n {\" · \"}\n <Link href={generateUrl({ page: `/help/${howToType}` })}>{t(`help.modes.${howToType}`)}</Link>\n </nav>\n <h1>{title}</h1>\n {summary ? <p className=\"text-muted-foreground !mt-0 text-base\">{summary}</p> : null}\n {children}\n <hr className=\"my-6\" />\n {updatedAt ? (\n <div className=\"text-muted-foreground text-xs\">\n <span>\n {t(\"help.article.lastUpdated\", {\n date: format.dateTime(new Date(updatedAt), { dateStyle: \"short\" }),\n })}\n </span>\n </div>\n ) : null}\n <div className=\"mt-4 flex justify-between text-sm\">\n {prev ? (\n <Link href={generateUrl({ page: `/help/${prev.howToType}/${prev.slug}` })}>\n ← {t(\"help.article.previous\")}: {prev.title}\n </Link>\n ) : (\n <span />\n )}\n {next ? (\n <Link href={generateUrl({ page: `/help/${next.howToType}/${next.slug}` })}>\n {t(\"help.article.next\")}: {next.title} →\n </Link>\n ) : (\n <span />\n )}\n </div>\n </article>\n );\n}\n","\"use client\";\nimport { useEffect, useState } from \"react\";\nimport { useTranslations } from \"next-intl\";\nimport type { HelpHeading } from \"../types/help-article.types\";\nimport { MicroLabel } from \"../../../components/typography\";\n\nexport function HelpTOC({ headings }: { headings: readonly HelpHeading[] }) {\n const t = useTranslations();\n const [active, setActive] = useState<string | null>(null);\n\n useEffect(() => {\n const observer = new IntersectionObserver(\n (entries) => {\n for (const e of entries) {\n if (e.isIntersecting) setActive(e.target.id);\n }\n },\n { rootMargin: \"0px 0px -70% 0px\", threshold: 0 },\n );\n headings.forEach((h) => {\n const el = document.getElementById(h.slug);\n if (el) observer.observe(el);\n });\n return () => observer.disconnect();\n }, [headings]);\n\n if (headings.length === 0) return null;\n return (\n <nav aria-label={t(\"help.toc.title\")} className=\"hidden lg:block\">\n <MicroLabel className=\"mb-2\">{t(\"help.toc.title\")}</MicroLabel>\n <ul className=\"space-y-1 text-sm\">\n {headings.map((h) => (\n <li key={h.slug} style={{ paddingLeft: `${(h.depth - 2) * 0.75}rem` }}>\n <a\n href={`#${h.slug}`}\n className={\n \"block truncate hover:text-foreground \" +\n (active === h.slug ? \"text-foreground font-medium\" : \"text-muted-foreground\")\n }\n >\n {h.text}\n </a>\n </li>\n ))}\n </ul>\n </nav>\n );\n}\n","\"use client\";\nimport { useEffect, useMemo, useState } from \"react\";\nimport { useTranslations } from \"next-intl\";\nimport Link from \"next/link\";\nimport { HelpCircleIcon } from \"lucide-react\";\nimport {\n Button,\n Sheet,\n SheetContent,\n SheetTrigger,\n SheetHeader,\n SheetTitle,\n SheetDescription,\n} from \"../../../shadcnui\";\nimport { usePageUrlGenerator } from \"../../../client\";\nimport { HowToService } from \"../../how-to/data/HowToService\";\nimport type { HowToInterface } from \"../../how-to/data/HowToInterface\";\n\nexport function HelpHint({ contextKey }: { contextKey: string }) {\n const t = useTranslations();\n const generateUrl = usePageUrlGenerator();\n const [open, setOpen] = useState(false);\n const [picked, setPicked] = useState<HowToInterface | null>(null);\n\n const [articles, setArticles] = useState<HowToInterface[]>([]);\n useEffect(() => {\n let active = true;\n HowToService.findPublished()\n .then((list) => active && setArticles(list))\n .catch(() => active && setArticles([]));\n return () => {\n active = false;\n };\n }, []);\n\n const matches = useMemo(\n () => articles.filter((a) => a.contextualKeys.includes(contextKey) && !a.draft),\n [articles, contextKey],\n );\n\n if (matches.length === 0) return null;\n const active = picked ?? (matches.length === 1 ? matches[0] : null);\n\n return (\n <Sheet\n open={open}\n onOpenChange={(o) => {\n setOpen(o);\n if (!o) setPicked(null);\n }}\n >\n <SheetTrigger render={<Button variant=\"ghost\" size=\"icon-sm\" aria-label={t(\"help.hint.trigger\")} />}>\n <HelpCircleIcon className=\"h-4 w-4\" />\n </SheetTrigger>\n <SheetContent side=\"right\" className=\"w-full max-w-md sm:max-w-lg\">\n <SheetHeader>\n <SheetTitle>{active ? active.name : t(\"help.hint.pickArticle\")}</SheetTitle>\n <SheetDescription>{active?.summary ?? \"\"}</SheetDescription>\n </SheetHeader>\n {active ? (\n <div className=\"mt-4 space-y-3\">\n <p className=\"text-muted-foreground text-sm\">{active.summary}</p>\n <Link href={generateUrl({ page: `/help/${active.howToType}/${active.slug}` })} className=\"text-sm\">\n {t(\"help.hint.viewArticle\")}\n </Link>\n </div>\n ) : (\n <ul className=\"mt-4 space-y-1\">\n {matches.map((a) => (\n <li key={a.id}>\n <button\n type=\"button\"\n onClick={() => setPicked(a)}\n className=\"hover:bg-muted block w-full rounded px-2 py-1 text-left text-sm\"\n >\n <div className=\"font-medium\">{a.name}</div>\n <div className=\"text-muted-foreground text-xs\">{a.summary}</div>\n </button>\n </li>\n ))}\n </ul>\n )}\n </SheetContent>\n </Sheet>\n );\n}\n","\"use client\";\nimport Link from \"next/link\";\nimport { useTranslations } from \"next-intl\";\nimport { useEffect, useState } from \"react\";\nimport { LifeBuoyIcon, ArrowUpRightIcon } from \"lucide-react\";\nimport { CommandItem } from \"../../../shadcnui\";\nimport { usePageUrlGenerator } from \"../../../client\";\nimport { HowToService } from \"../../how-to/data/HowToService\";\nimport type { HowToInterface } from \"../../how-to/data/HowToInterface\";\n\nexport interface HelpSearchResultRowProps {\n result: { id: string; name: string; entityType: string };\n onSelect?: () => void;\n}\n\nexport function HelpSearchResultRow({ result, onSelect }: HelpSearchResultRowProps) {\n const t = useTranslations();\n const generateUrl = usePageUrlGenerator();\n const [article, setArticle] = useState<HowToInterface | null>(null);\n useEffect(() => {\n let active = true;\n HowToService.findOne({ id: result.id })\n .then((a) => active && setArticle(a))\n .catch(() => active && setArticle(null));\n return () => {\n active = false;\n };\n }, [result.id]);\n\n if (!article) {\n return (\n <CommandItem\n value={result.id}\n disabled\n className=\"text-muted-foreground cursor-not-allowed px-3 py-1.5 text-sm italic\"\n >\n {t(\"help.search.removed\")}\n </CommandItem>\n );\n }\n\n return (\n <CommandItem value={result.id} onSelect={onSelect} className=\"cursor-pointer p-0\">\n <Link\n href={generateUrl({ page: `/help/${article.howToType}/${article.slug}` })}\n className=\"hover:bg-muted flex w-full items-center gap-3 rounded px-3 py-2\"\n >\n <div className=\"bg-muted text-muted-foreground flex h-10 w-10 shrink-0 items-center justify-center rounded-full\">\n <LifeBuoyIcon className=\"h-5 w-5\" />\n </div>\n <div className=\"flex min-w-0 flex-1 flex-col\">\n <span className=\"text-foreground truncate text-sm font-semibold\">{article.name}</span>\n <span className=\"text-muted-foreground truncate text-xs\">\n {t(`help.modes.${article.howToType}`)} · {article.summary}\n </span>\n </div>\n <ArrowUpRightIcon className=\"text-muted-foreground h-5 w-5 shrink-0\" />\n </Link>\n </CommandItem>\n );\n}\n","import type { HelpMode } from \"../types/help-article.types\";\nimport type { usePageUrlGenerator } from \"../../../client\";\n\nexport function articleUrl(\n generateUrl: ReturnType<typeof usePageUrlGenerator>,\n article: { mode: HelpMode; slug: string },\n): string {\n return generateUrl({ page: `/help/${article.mode}/${article.slug}` });\n}\n\nexport function modeUrl(generateUrl: ReturnType<typeof usePageUrlGenerator>, mode: HelpMode): string {\n return generateUrl({ page: `/help/${mode}` });\n}\n","/**\n * The fixed namespace of i18n keys this feature reads via useTranslations/getTranslations.\n * Consuming apps must define each entry in their messages/<locale>.json.\n */\nexport const HELP_I18N_KEYS = [\n \"help.modes.tutorial\",\n \"help.modes.how-to\",\n \"help.modes.reference\",\n \"help.modes.explanation\",\n \"help.sideNav.filterPlaceholder\",\n \"help.sideNav.noMatches\",\n \"help.toc.title\",\n \"help.article.lastUpdated\",\n \"help.article.previous\",\n \"help.article.next\",\n \"help.article.related\",\n \"help.askAi.button\",\n \"help.askAi.loginTooltip\",\n \"help.askAi.sheet.title\",\n \"help.askAi.sheet.subtitle\",\n \"help.header.search\",\n \"help.header.login\",\n \"help.header.openApp\",\n \"help.hint.trigger\",\n \"help.hint.viewArticle\",\n \"help.hint.pickArticle\",\n \"help.landing.heading\",\n \"help.landing.subheading\",\n \"help.landing.featuredTutorials\",\n \"help.landing.browseByMode\",\n \"help.modeIndex.empty\",\n \"help.search.removed\",\n \"help.footerLink\",\n] as const;\n"]}
@@ -19,16 +19,17 @@ import {
19
19
  Tooltip,
20
20
  TooltipContent,
21
21
  TooltipTrigger,
22
+ buttonVariants,
22
23
  useAssistantContext,
23
24
  useCurrentUserContext,
24
25
  usePageUrlGenerator
25
- } from "../../chunk-7ZEETAQV.mjs";
26
+ } from "../../chunk-FZ5SPJEU.mjs";
26
27
  import {
27
28
  _getStaticHelpContent
28
- } from "../../chunk-KXTTYXJ6.mjs";
29
+ } from "../../chunk-ZV2GZKFR.mjs";
29
30
  import {
30
31
  HowToService
31
- } from "../../chunk-5GVY2M5X.mjs";
32
+ } from "../../chunk-KZHHKPQZ.mjs";
32
33
  import "../../chunk-AUXK7QSA.mjs";
33
34
  import "../../chunk-C7C7VY4F.mjs";
34
35
  import "../../chunk-Z2CB63VG.mjs";
@@ -158,7 +159,7 @@ function HelpHeader() {
158
159
  ] }),
159
160
  /* @__PURE__ */ jsxs3("div", { className: "flex items-center gap-2", children: [
160
161
  /* @__PURE__ */ jsx4(HelpAskAi, {}),
161
- currentUser ? /* @__PURE__ */ jsx4(Button, { render: /* @__PURE__ */ jsx4(Link, { href: appHref }), nativeButton: false, variant: "outline", size: "sm", children: t("help.header.openApp") }) : /* @__PURE__ */ jsx4(Button, { render: /* @__PURE__ */ jsx4(Link, { href: "/login" }), nativeButton: false, variant: "outline", size: "sm", children: t("help.header.login") })
162
+ currentUser ? /* @__PURE__ */ jsx4(Link, { href: appHref, className: buttonVariants({ variant: "outline", size: "sm" }), children: t("help.header.openApp") }) : /* @__PURE__ */ jsx4(Link, { href: "/login", className: buttonVariants({ variant: "outline", size: "sm" }), children: t("help.header.login") })
162
163
  ] })
163
164
  ] });
164
165
  }