@carlonicora/nextjs-jsonapi 1.129.1 → 1.130.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 (115) hide show
  1. package/dist/{BlockNoteEditor-RG2YQDMQ.js → BlockNoteEditor-AI5C4PBZ.js} +11 -11
  2. package/dist/BlockNoteEditor-AI5C4PBZ.js.map +1 -0
  3. package/dist/{BlockNoteEditor-WIAQJ5HM.mjs → BlockNoteEditor-KARBUMFE.mjs} +4 -4
  4. package/dist/BlockNoteEditor-KARBUMFE.mjs.map +1 -0
  5. package/dist/billing/index.js +398 -389
  6. package/dist/billing/index.js.map +1 -1
  7. package/dist/billing/index.mjs +131 -122
  8. package/dist/billing/index.mjs.map +1 -1
  9. package/dist/{chunk-YQTMNZQB.js → chunk-BHZVFSDR.js} +158 -89
  10. package/dist/chunk-BHZVFSDR.js.map +1 -0
  11. package/dist/{chunk-F54XZKPY.mjs → chunk-NXHNJCY2.mjs} +2119 -2050
  12. package/dist/chunk-NXHNJCY2.mjs.map +1 -0
  13. package/dist/client/index.js +2 -2
  14. package/dist/client/index.mjs +1 -1
  15. package/dist/components/index.d.mts +20 -2
  16. package/dist/components/index.d.ts +20 -2
  17. package/dist/components/index.js +8 -2
  18. package/dist/components/index.js.map +1 -1
  19. package/dist/components/index.mjs +7 -1
  20. package/dist/contexts/index.js +2 -2
  21. package/dist/contexts/index.mjs +1 -1
  22. package/dist/features/help/index.js +32 -31
  23. package/dist/features/help/index.js.map +1 -1
  24. package/dist/features/help/index.mjs +3 -2
  25. package/dist/features/help/index.mjs.map +1 -1
  26. package/package.json +1 -1
  27. package/src/components/containers/ReactMarkdownContainer.tsx +2 -2
  28. package/src/components/editors/BlockNoteDiffInlineContent.tsx +10 -10
  29. package/src/components/editors/BlockNoteEditor.tsx +2 -2
  30. package/src/components/forms/FormCheckbox.tsx +2 -2
  31. package/src/components/forms/FormFieldWrapper.tsx +1 -1
  32. package/src/components/forms/FormSlider.tsx +1 -1
  33. package/src/components/forms/GdprConsentCheckbox.tsx +1 -1
  34. package/src/components/hero/EntitySection.tsx +2 -1
  35. package/src/components/index.ts +1 -0
  36. package/src/components/typography/DetailField.tsx +35 -0
  37. package/src/components/typography/MicroLabel.tsx +21 -0
  38. package/src/components/typography/SectionHeader.tsx +18 -0
  39. package/src/components/typography/index.ts +6 -0
  40. package/src/features/assistant/components/parts/AssistantEmptyState.tsx +2 -1
  41. package/src/features/assistant/components/parts/AssistantSidebar.tsx +2 -1
  42. package/src/features/auth/components/buttons/GoogleSignInButton.tsx +1 -1
  43. package/src/features/auth/components/forms/Register.tsx +1 -1
  44. package/src/features/auth/components/forms/TwoFactorChallenge.tsx +3 -3
  45. package/src/features/auth/components/two-factor/BackupCodesDialog.tsx +1 -1
  46. package/src/features/auth/components/two-factor/TotpInput.tsx +2 -2
  47. package/src/features/auth/components/two-factor/TwoFactorSettings.tsx +3 -3
  48. package/src/features/billing/components/cards/BillingUsageSummaryCard.tsx +4 -4
  49. package/src/features/billing/components/cards/CustomerInfoCard.tsx +6 -6
  50. package/src/features/billing/components/cards/InvoicesSummaryCard.tsx +5 -5
  51. package/src/features/billing/components/cards/PaymentMethodSummaryCard.tsx +4 -4
  52. package/src/features/billing/components/cards/SubscriptionSummaryCard.tsx +4 -4
  53. package/src/features/billing/components/containers/BillingDashboardContainer.tsx +2 -2
  54. package/src/features/billing/components/widgets/BillingAlertBanner.tsx +8 -8
  55. package/src/features/billing/stripe-customer/components/containers/PaymentMethodsContainer.tsx +2 -2
  56. package/src/features/billing/stripe-customer/components/details/PaymentMethodCard.tsx +8 -2
  57. package/src/features/billing/stripe-customer/components/forms/PaymentMethodForm.tsx +1 -1
  58. package/src/features/billing/stripe-invoice/components/details/InvoiceDetails.tsx +16 -18
  59. package/src/features/billing/stripe-invoice/components/lists/InvoicesList.tsx +2 -2
  60. package/src/features/billing/stripe-invoice/components/widgets/InvoiceStatusBadge.tsx +8 -7
  61. package/src/features/billing/stripe-price/components/lists/PricesList.tsx +6 -13
  62. package/src/features/billing/stripe-product/components/containers/ProductsAdminContainer.tsx +3 -3
  63. package/src/features/billing/stripe-product/components/lists/ProductsList.tsx +4 -7
  64. package/src/features/billing/stripe-promotion-code/components/PromoCodeInput.tsx +6 -6
  65. package/src/features/billing/stripe-subscription/components/containers/SubscriptionsContainer.tsx +2 -2
  66. package/src/features/billing/stripe-subscription/components/details/SubscriptionDetails.tsx +10 -10
  67. package/src/features/billing/stripe-subscription/components/widgets/PricingCard.tsx +2 -2
  68. package/src/features/billing/stripe-subscription/components/widgets/ProductPricingRow.tsx +2 -1
  69. package/src/features/billing/stripe-subscription/components/widgets/ProrationPreview.tsx +1 -1
  70. package/src/features/billing/stripe-subscription/components/widgets/SubscriptionStatusBadge.tsx +12 -11
  71. package/src/features/billing/stripe-subscription/components/wizards/WizardStepPaymentMethod.tsx +2 -1
  72. package/src/features/billing/stripe-subscription/components/wizards/WizardStepReview.tsx +10 -13
  73. package/src/features/billing/stripe-usage/components/containers/UsageContainer.tsx +2 -2
  74. package/src/features/billing/stripe-usage/components/details/UsageSummaryCard.tsx +6 -6
  75. package/src/features/billing/stripe-usage/components/lists/UsageHistoryTable.tsx +3 -2
  76. package/src/features/company/components/details/CompanyContent.tsx +4 -7
  77. package/src/features/company/components/details/TokenStatusIndicator.tsx +5 -5
  78. package/src/features/company/components/forms/CompanyDeleter.tsx +1 -1
  79. package/src/features/company/components/forms/CompanyEditor.tsx +3 -2
  80. package/src/features/content/components/lists/ContentsList.tsx +2 -1
  81. package/src/features/feature/components/forms/FormFeatures.tsx +6 -1
  82. package/src/features/help/components/HelpTOC.tsx +2 -3
  83. package/src/features/how-to/components/containers/HowToCommand.tsx +3 -3
  84. package/src/features/how-to/components/containers/HowToCommandViewer.tsx +4 -1
  85. package/src/features/notification/components/containers/NotificationsListContainer.tsx +1 -1
  86. package/src/features/notification/components/modals/NotificationModal.tsx +2 -2
  87. package/src/features/oauth/components/OAuthClientCard.tsx +1 -1
  88. package/src/features/oauth/components/OAuthClientDetail.tsx +5 -9
  89. package/src/features/oauth/components/OAuthClientForm.tsx +3 -3
  90. package/src/features/oauth/components/OAuthClientList.tsx +5 -4
  91. package/src/features/oauth/components/OAuthClientSecretDisplay.tsx +3 -3
  92. package/src/features/oauth/components/OAuthRedirectUriInput.tsx +1 -1
  93. package/src/features/oauth/components/OAuthScopeSelector.tsx +2 -2
  94. package/src/features/oauth/components/consent/OAuthConsentHeader.tsx +1 -1
  95. package/src/features/oauth/components/consent/OAuthConsentScreen.tsx +1 -1
  96. package/src/features/oauth/components/consent/OAuthScopeList.tsx +2 -3
  97. package/src/features/rbac/components/RbacContainer.tsx +1 -1
  98. package/src/features/rbac/components/RbacPermissionCell.tsx +2 -2
  99. package/src/features/rbac/components/RbacPermissionPicker.tsx +3 -3
  100. package/src/features/referral/components/ReferralWidget.tsx +7 -6
  101. package/src/features/waitlist/components/forms/WaitlistForm.tsx +3 -2
  102. package/src/features/waitlist/components/forms/WaitlistQuestionnaireRenderer.tsx +1 -1
  103. package/src/features/waitlist/components/lists/WaitlistList.tsx +2 -1
  104. package/src/features/waitlist/components/sections/WaitlistConfirmation.tsx +3 -2
  105. package/src/features/waitlist/components/sections/WaitlistSuccessState.tsx +2 -1
  106. package/src/features/waitlist/hooks/useWaitlistTableStructure.tsx +1 -1
  107. package/src/shadcnui/custom/link.tsx +7 -1
  108. package/src/shadcnui/ui/alert.tsx +1 -1
  109. package/src/shadcnui/ui/badge.tsx +7 -0
  110. package/src/shadcnui/ui/button.tsx +1 -1
  111. package/src/shadcnui/ui/chart.tsx +1 -3
  112. package/dist/BlockNoteEditor-RG2YQDMQ.js.map +0 -1
  113. package/dist/BlockNoteEditor-WIAQJ5HM.mjs.map +0 -1
  114. package/dist/chunk-F54XZKPY.mjs.map +0 -1
  115. package/dist/chunk-YQTMNZQB.js.map +0 -1
@@ -21,7 +21,8 @@ var _chunkYBZVWLPHjs = require('../../chunk-YBZVWLPH.js');
21
21
 
22
22
 
23
23
 
24
- var _chunkYQTMNZQBjs = require('../../chunk-YQTMNZQB.js');
24
+
25
+ var _chunkBHZVFSDRjs = require('../../chunk-BHZVFSDR.js');
25
26
 
26
27
 
27
28
  var _chunkXTLTQQ7Xjs = require('../../chunk-XTLTQQ7X.js');
@@ -73,29 +74,29 @@ var _lucidereact = require('lucide-react');
73
74
 
74
75
 
75
76
  function HelpAssistantSheet({ open, onOpenChange }) {
76
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkYQTMNZQBjs.Sheet, { open, onOpenChange, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
77
- _chunkYQTMNZQBjs.SheetContent,
77
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkBHZVFSDRjs.Sheet, { open, onOpenChange, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
78
+ _chunkBHZVFSDRjs.SheetContent,
78
79
  {
79
80
  side: "right",
80
81
  className: "flex w-full flex-col data-[side=right]:sm:max-w-2xl data-[side=right]:lg:max-w-3xl",
81
- children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkYQTMNZQBjs.AssistantProvider, { manageUrl: false, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, HelpAssistantSheetBody, {}) })
82
+ children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkBHZVFSDRjs.AssistantProvider, { manageUrl: false, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, HelpAssistantSheetBody, {}) })
82
83
  }
83
84
  ) });
84
85
  }
85
86
  _chunk7QVYU63Ejs.__name.call(void 0, HelpAssistantSheet, "HelpAssistantSheet");
86
87
  function HelpAssistantSheetBody() {
87
88
  const t = _nextintl.useTranslations.call(void 0, );
88
- const ctx = _chunkYQTMNZQBjs.useAssistantContext.call(void 0, );
89
+ const ctx = _chunkBHZVFSDRjs.useAssistantContext.call(void 0, );
89
90
  const showThread = !!ctx.assistant || ctx.sending || ctx.messages.length > 0;
90
91
  const send = /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void 0, (content) => ctx.sendMessage(content, { howToMode: true }), "send");
91
92
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
92
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkYQTMNZQBjs.SheetHeader, { children: [
93
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkYQTMNZQBjs.SheetTitle, { children: t("help.askAi.sheet.title") }),
94
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkYQTMNZQBjs.SheetDescription, { children: t("help.askAi.sheet.subtitle") })
93
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkBHZVFSDRjs.SheetHeader, { children: [
94
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkBHZVFSDRjs.SheetTitle, { children: t("help.askAi.sheet.title") }),
95
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkBHZVFSDRjs.SheetDescription, { children: t("help.askAi.sheet.subtitle") })
95
96
  ] }),
96
- !showThread ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkYQTMNZQBjs.AssistantEmptyState, { onSend: send }) : /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
97
+ !showThread ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkBHZVFSDRjs.AssistantEmptyState, { onSend: send }) : /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
97
98
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
98
- _chunkYQTMNZQBjs.AssistantThread,
99
+ _chunkBHZVFSDRjs.AssistantThread,
99
100
  {
100
101
  messages: ctx.messages,
101
102
  sending: ctx.sending,
@@ -105,7 +106,7 @@ function HelpAssistantSheetBody() {
105
106
  onRetry: ctx.retrySend
106
107
  }
107
108
  ),
108
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkYQTMNZQBjs.AssistantComposer, { onSend: send, disabled: ctx.sending })
109
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkBHZVFSDRjs.AssistantComposer, { onSend: send, disabled: ctx.sending })
109
110
  ] })
110
111
  ] });
111
112
  }
@@ -115,20 +116,20 @@ _chunk7QVYU63Ejs.__name.call(void 0, HelpAssistantSheetBody, "HelpAssistantSheet
115
116
 
116
117
  function HelpAskAi() {
117
118
  const t = _nextintl.useTranslations.call(void 0, );
118
- const { currentUser } = _chunkYQTMNZQBjs.useCurrentUserContext.call(void 0, );
119
+ const { currentUser } = _chunkBHZVFSDRjs.useCurrentUserContext.call(void 0, );
119
120
  const [open, setOpen] = _react.useState.call(void 0, false);
120
121
  const disabled = !currentUser;
121
122
  if (disabled) {
122
- return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkYQTMNZQBjs.Tooltip, { children: [
123
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkYQTMNZQBjs.TooltipTrigger, { render: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkYQTMNZQBjs.Button, { variant: "outline", size: "sm", disabled: true }), children: [
123
+ return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkBHZVFSDRjs.Tooltip, { children: [
124
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkBHZVFSDRjs.TooltipTrigger, { render: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkBHZVFSDRjs.Button, { variant: "outline", size: "sm", disabled: true }), children: [
124
125
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.SparklesIcon, { className: "h-4 w-4" }),
125
126
  t("help.askAi.button")
126
127
  ] }),
127
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkYQTMNZQBjs.TooltipContent, { children: t("help.askAi.loginTooltip") })
128
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkBHZVFSDRjs.TooltipContent, { children: t("help.askAi.loginTooltip") })
128
129
  ] });
129
130
  }
130
131
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
131
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkYQTMNZQBjs.Button, { variant: "outline", size: "sm", onClick: () => setOpen(true), children: [
132
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkBHZVFSDRjs.Button, { variant: "outline", size: "sm", onClick: () => setOpen(true), children: [
132
133
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.SparklesIcon, { className: "h-4 w-4" }),
133
134
  t("help.askAi.button")
134
135
  ] }),
@@ -141,7 +142,7 @@ _chunk7QVYU63Ejs.__name.call(void 0, HelpAskAi, "HelpAskAi");
141
142
 
142
143
  function HelpHeader() {
143
144
  const t = _nextintl.useTranslations.call(void 0, );
144
- const { currentUser } = _chunkYQTMNZQBjs.useCurrentUserContext.call(void 0, );
145
+ const { currentUser } = _chunkBHZVFSDRjs.useCurrentUserContext.call(void 0, );
145
146
  const { brand } = useHelp();
146
147
  const logo = _optionalChain([brand, 'optionalAccess', _ => _.logo]);
147
148
  const label = _nullishCoalesce(_optionalChain([brand, 'optionalAccess', _2 => _2.label]), () => ( "Help"));
@@ -157,7 +158,7 @@ function HelpHeader() {
157
158
  ] }),
158
159
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex items-center gap-2", children: [
159
160
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, HelpAskAi, {}),
160
- currentUser ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkYQTMNZQBjs.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, _chunkYQTMNZQBjs.Button, { render: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _link2.default, { href: "/login" }), nativeButton: false, variant: "outline", size: "sm", children: t("help.header.login") })
161
+ currentUser ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkBHZVFSDRjs.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, _chunkBHZVFSDRjs.Button, { render: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _link2.default, { href: "/login" }), nativeButton: false, variant: "outline", size: "sm", children: t("help.header.login") })
161
162
  ] })
162
163
  ] });
163
164
  }
@@ -199,7 +200,7 @@ _chunk7QVYU63Ejs.__name.call(void 0, useHelpFilter, "useHelpFilter");
199
200
 
200
201
  function HelpSideNav() {
201
202
  const t = _nextintl.useTranslations.call(void 0, );
202
- const generateUrl = _chunkYQTMNZQBjs.usePageUrlGenerator.call(void 0, );
203
+ const generateUrl = _chunkBHZVFSDRjs.usePageUrlGenerator.call(void 0, );
203
204
  const pathname = _navigation.usePathname.call(void 0, );
204
205
  const [articles, setArticles] = _react.useState.call(void 0, []);
205
206
  _react.useEffect.call(void 0, () => {
@@ -280,7 +281,7 @@ _chunk7QVYU63Ejs.__name.call(void 0, HelpSideNav, "HelpSideNav");
280
281
  function HelpArticleBody(props) {
281
282
  const t = _nextintl.useTranslations.call(void 0, );
282
283
  const format = _nextintl.useFormatter.call(void 0, );
283
- const generateUrl = _chunkYQTMNZQBjs.usePageUrlGenerator.call(void 0, );
284
+ const generateUrl = _chunkBHZVFSDRjs.usePageUrlGenerator.call(void 0, );
284
285
  const { howToType, title, summary, updatedAt, prev, next, children } = props;
285
286
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "article", { className: "prose dark:prose-invert max-w-none", children: [
286
287
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "nav", { className: "text-muted-foreground mb-2 text-xs", children: [
@@ -337,7 +338,7 @@ function HelpTOC({ headings }) {
337
338
  }, [headings]);
338
339
  if (headings.length === 0) return null;
339
340
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "nav", { "aria-label": t("help.toc.title"), className: "hidden lg:block", children: [
340
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "text-muted-foreground mb-2 text-xs font-semibold tracking-wider uppercase", children: t("help.toc.title") }),
341
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkBHZVFSDRjs.MicroLabel, { className: "mb-2", children: t("help.toc.title") }),
341
342
  /* @__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,
342
343
  "a",
343
344
  {
@@ -358,7 +359,7 @@ _chunk7QVYU63Ejs.__name.call(void 0, HelpTOC, "HelpTOC");
358
359
 
359
360
  function HelpHint({ contextKey }) {
360
361
  const t = _nextintl.useTranslations.call(void 0, );
361
- const generateUrl = _chunkYQTMNZQBjs.usePageUrlGenerator.call(void 0, );
362
+ const generateUrl = _chunkBHZVFSDRjs.usePageUrlGenerator.call(void 0, );
362
363
  const [open, setOpen] = _react.useState.call(void 0, false);
363
364
  const [picked, setPicked] = _react.useState.call(void 0, null);
364
365
  const [articles, setArticles] = _react.useState.call(void 0, []);
@@ -376,7 +377,7 @@ function HelpHint({ contextKey }) {
376
377
  if (matches.length === 0) return null;
377
378
  const active = _nullishCoalesce(picked, () => ( (matches.length === 1 ? matches[0] : null)));
378
379
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
379
- _chunkYQTMNZQBjs.Sheet,
380
+ _chunkBHZVFSDRjs.Sheet,
380
381
  {
381
382
  open,
382
383
  onOpenChange: (o) => {
@@ -384,11 +385,11 @@ function HelpHint({ contextKey }) {
384
385
  if (!o) setPicked(null);
385
386
  },
386
387
  children: [
387
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkYQTMNZQBjs.SheetTrigger, { render: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkYQTMNZQBjs.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" }) }),
388
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkYQTMNZQBjs.SheetContent, { side: "right", className: "w-full max-w-md sm:max-w-lg", children: [
389
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkYQTMNZQBjs.SheetHeader, { children: [
390
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkYQTMNZQBjs.SheetTitle, { children: active ? active.name : t("help.hint.pickArticle") }),
391
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkYQTMNZQBjs.SheetDescription, { children: _nullishCoalesce(_optionalChain([active, 'optionalAccess', _4 => _4.summary]), () => ( "")) })
388
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkBHZVFSDRjs.SheetTrigger, { render: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkBHZVFSDRjs.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, _chunkBHZVFSDRjs.SheetContent, { side: "right", className: "w-full max-w-md sm:max-w-lg", children: [
390
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkBHZVFSDRjs.SheetHeader, { children: [
391
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkBHZVFSDRjs.SheetTitle, { children: active ? active.name : t("help.hint.pickArticle") }),
392
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkBHZVFSDRjs.SheetDescription, { children: _nullishCoalesce(_optionalChain([active, 'optionalAccess', _4 => _4.summary]), () => ( "")) })
392
393
  ] }),
393
394
  active ? /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "mt-4 space-y-3", children: [
394
395
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-muted-foreground text-sm", children: active.summary }),
@@ -420,7 +421,7 @@ _chunk7QVYU63Ejs.__name.call(void 0, HelpHint, "HelpHint");
420
421
 
421
422
  function HelpSearchResultRow({ result, onSelect }) {
422
423
  const t = _nextintl.useTranslations.call(void 0, );
423
- const generateUrl = _chunkYQTMNZQBjs.usePageUrlGenerator.call(void 0, );
424
+ const generateUrl = _chunkBHZVFSDRjs.usePageUrlGenerator.call(void 0, );
424
425
  const [article, setArticle] = _react.useState.call(void 0, null);
425
426
  _react.useEffect.call(void 0, () => {
426
427
  let active = true;
@@ -431,7 +432,7 @@ function HelpSearchResultRow({ result, onSelect }) {
431
432
  }, [result.id]);
432
433
  if (!article) {
433
434
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
434
- _chunkYQTMNZQBjs.CommandItem,
435
+ _chunkBHZVFSDRjs.CommandItem,
435
436
  {
436
437
  value: result.id,
437
438
  disabled: true,
@@ -440,7 +441,7 @@ function HelpSearchResultRow({ result, onSelect }) {
440
441
  }
441
442
  );
442
443
  }
443
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkYQTMNZQBjs.CommandItem, { value: result.id, onSelect, className: "cursor-pointer p-0", children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
444
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkBHZVFSDRjs.CommandItem, { value: result.id, onSelect, className: "cursor-pointer p-0", children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
444
445
  _link2.default,
445
446
  {
446
447
  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}` })} className=\"hover:underline\">\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}` })} className=\"hover:underline\">\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\";\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 <div className=\"text-muted-foreground mb-2 text-xs font-semibold tracking-wider uppercase\">\n {t(\"help.toc.title\")}\n </div>\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 { 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}` })} className=\"hover:underline\">\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}` })} className=\"hover:underline\">\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"]}
@@ -9,6 +9,7 @@ import {
9
9
  AssistantThread,
10
10
  Button,
11
11
  CommandItem,
12
+ MicroLabel,
12
13
  Sheet,
13
14
  SheetContent,
14
15
  SheetDescription,
@@ -21,7 +22,7 @@ import {
21
22
  useAssistantContext,
22
23
  useCurrentUserContext,
23
24
  usePageUrlGenerator
24
- } from "../../chunk-F54XZKPY.mjs";
25
+ } from "../../chunk-NXHNJCY2.mjs";
25
26
  import {
26
27
  _getStaticHelpContent
27
28
  } from "../../chunk-NATPK5ME.mjs";
@@ -337,7 +338,7 @@ function HelpTOC({ headings }) {
337
338
  }, [headings]);
338
339
  if (headings.length === 0) return null;
339
340
  return /* @__PURE__ */ jsxs6("nav", { "aria-label": t("help.toc.title"), className: "hidden lg:block", children: [
340
- /* @__PURE__ */ jsx7("div", { className: "text-muted-foreground mb-2 text-xs font-semibold tracking-wider uppercase", children: t("help.toc.title") }),
341
+ /* @__PURE__ */ jsx7(MicroLabel, { className: "mb-2", children: t("help.toc.title") }),
341
342
  /* @__PURE__ */ jsx7("ul", { className: "space-y-1 text-sm", children: headings.map((h) => /* @__PURE__ */ jsx7("li", { style: { paddingLeft: `${(h.depth - 2) * 0.75}rem` }, children: /* @__PURE__ */ jsx7(
342
343
  "a",
343
344
  {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../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"],"sourcesContent":["\"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}` })} className=\"hover:underline\">\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}` })} className=\"hover:underline\">\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\";\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 <div className=\"text-muted-foreground mb-2 text-xs font-semibold tracking-wider uppercase\">\n {t(\"help.toc.title\")}\n </div>\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"],"mappings":"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","names":["useTranslations","useTranslations","jsx","Fragment","jsx","jsxs","useTranslations","jsx","jsxs","useTranslations","useMemo","useState","useTranslations","Link","useState","useState","jsx","jsxs","useTranslations","useState","useMemo","Link","Link","useTranslations","jsx","jsxs","useTranslations","Link","useEffect","useState","useTranslations","jsx","jsxs","useTranslations","useState","useEffect","useEffect","useMemo","useState","useTranslations","Link","jsx","jsxs","useTranslations","useState","useEffect","active","useMemo","Link","Link","useTranslations","useEffect","useState","jsx","jsxs","useTranslations","useState","useEffect","Link"]}
1
+ {"version":3,"sources":["../../../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"],"sourcesContent":["\"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}` })} className=\"hover:underline\">\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}` })} className=\"hover:underline\">\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"],"mappings":"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","names":["useTranslations","useTranslations","jsx","Fragment","jsx","jsxs","useTranslations","jsx","jsxs","useTranslations","useMemo","useState","useTranslations","Link","useState","useState","jsx","jsxs","useTranslations","useState","useMemo","Link","Link","useTranslations","jsx","jsxs","useTranslations","Link","useEffect","useState","useTranslations","jsx","jsxs","useTranslations","useState","useEffect","useEffect","useMemo","useState","useTranslations","Link","jsx","jsxs","useTranslations","useState","useEffect","active","useMemo","Link","Link","useTranslations","useEffect","useState","jsx","jsxs","useTranslations","useState","useEffect","Link"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@carlonicora/nextjs-jsonapi",
3
- "version": "1.129.1",
3
+ "version": "1.130.0",
4
4
  "description": "Next.js JSON:API client with server/client support and caching",
5
5
  "author": "Carlo Nicora",
6
6
  "license": "GPL-3.0-or-later",