@carlonicora/nextjs-jsonapi 1.108.0 → 1.109.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 (166) hide show
  1. package/dist/{AssistantInterface-BYgI5z1-.d.mts → AssistantInterface-B1c8FhGA.d.mts} +2 -0
  2. package/dist/{AssistantInterface-DfDcz0gJ.d.ts → AssistantInterface-BBUHxOCd.d.ts} +2 -0
  3. package/dist/{AssistantMessageInterface-BpEhx2pC.d.ts → AssistantMessageInterface-Cs1yb-gF.d.ts} +3 -1
  4. package/dist/{AssistantMessageInterface-DJ3Me16Y.d.mts → AssistantMessageInterface-DQ3mH5L8.d.mts} +3 -1
  5. package/dist/{AuthComponent-B6DIk8Vf.d.ts → AuthComponent-Cd7lcYif.d.ts} +1 -1
  6. package/dist/{AuthComponent-BKI0ZbtD.d.mts → AuthComponent-DdxCFgUZ.d.mts} +1 -1
  7. package/dist/{BlockNoteEditor-2AXSTGGG.js → BlockNoteEditor-3XYBZLWO.js} +20 -19
  8. package/dist/BlockNoteEditor-3XYBZLWO.js.map +1 -0
  9. package/dist/{BlockNoteEditor-XVIBGXHF.mjs → BlockNoteEditor-EBFZG7AL.mjs} +5 -4
  10. package/dist/{BlockNoteEditor-XVIBGXHF.mjs.map → BlockNoteEditor-EBFZG7AL.mjs.map} +1 -1
  11. package/dist/{auth.interface-BBUgMZzs.d.ts → auth.interface-8b601idJ.d.ts} +1 -1
  12. package/dist/{auth.interface-XYEREOD6.d.mts → auth.interface-CXBF8Mhi.d.mts} +1 -1
  13. package/dist/billing/index.js +347 -346
  14. package/dist/billing/index.js.map +1 -1
  15. package/dist/billing/index.mjs +4 -3
  16. package/dist/billing/index.mjs.map +1 -1
  17. package/dist/chunk-3J7RQBF3.js +123 -0
  18. package/dist/chunk-3J7RQBF3.js.map +1 -0
  19. package/dist/{chunk-VLDLERJN.js → chunk-7E3O52U5.js} +15 -8
  20. package/dist/chunk-7E3O52U5.js.map +1 -0
  21. package/dist/{chunk-RXXZGPC3.js → chunk-CFI4WZ5R.js} +159 -113
  22. package/dist/chunk-CFI4WZ5R.js.map +1 -0
  23. package/dist/chunk-CQID6RCF.mjs +38 -0
  24. package/dist/chunk-CQID6RCF.mjs.map +1 -0
  25. package/dist/{chunk-56XBGQGU.mjs → chunk-CRTVAQEK.mjs} +42 -27
  26. package/dist/chunk-CRTVAQEK.mjs.map +1 -0
  27. package/dist/{chunk-N3NVIPSU.mjs → chunk-MSNNAHDB.mjs} +129 -83
  28. package/dist/{chunk-N3NVIPSU.mjs.map → chunk-MSNNAHDB.mjs.map} +1 -1
  29. package/dist/chunk-MZTKPPET.mjs +123 -0
  30. package/dist/chunk-MZTKPPET.mjs.map +1 -0
  31. package/dist/{chunk-HC3JFN3C.js → chunk-UHO3KUUH.js} +838 -823
  32. package/dist/chunk-UHO3KUUH.js.map +1 -0
  33. package/dist/{chunk-CFECWLHH.mjs → chunk-UOYIWJEJ.mjs} +10 -3
  34. package/dist/chunk-UOYIWJEJ.mjs.map +1 -0
  35. package/dist/chunk-YQQHAFBS.js +38 -0
  36. package/dist/chunk-YQQHAFBS.js.map +1 -0
  37. package/dist/client/index.d.mts +8 -16
  38. package/dist/client/index.d.ts +8 -16
  39. package/dist/client/index.js +5 -4
  40. package/dist/client/index.js.map +1 -1
  41. package/dist/client/index.mjs +4 -3
  42. package/dist/components/index.d.mts +6 -5
  43. package/dist/components/index.d.ts +6 -5
  44. package/dist/components/index.js +5 -4
  45. package/dist/components/index.js.map +1 -1
  46. package/dist/components/index.mjs +4 -3
  47. package/dist/{config-CLQynoaa.d.ts → config-CN23v3eJ.d.ts} +4 -1
  48. package/dist/{config-k61pe_o2.d.mts → config-gh88Qn4h.d.mts} +4 -1
  49. package/dist/contexts/index.d.mts +18 -7
  50. package/dist/contexts/index.d.ts +18 -7
  51. package/dist/contexts/index.js +5 -4
  52. package/dist/contexts/index.js.map +1 -1
  53. package/dist/contexts/index.mjs +4 -3
  54. package/dist/core/index.d.mts +44 -11
  55. package/dist/core/index.d.ts +44 -11
  56. package/dist/core/index.js +2 -2
  57. package/dist/core/index.mjs +1 -1
  58. package/dist/features/help/index.css +29 -0
  59. package/dist/features/help/index.css.map +1 -0
  60. package/dist/features/help/index.d.mts +115 -0
  61. package/dist/features/help/index.d.ts +115 -0
  62. package/dist/features/help/index.js +532 -0
  63. package/dist/features/help/index.js.map +1 -0
  64. package/dist/features/help/index.mjs +532 -0
  65. package/dist/features/help/index.mjs.map +1 -0
  66. package/dist/features/help/server/createHelpAssetRouteHandler.d.mts +11 -0
  67. package/dist/features/help/server/createHelpAssetRouteHandler.d.ts +11 -0
  68. package/dist/features/help/server/createHelpAssetRouteHandler.js +43 -0
  69. package/dist/features/help/server/createHelpAssetRouteHandler.js.map +1 -0
  70. package/dist/features/help/server/createHelpAssetRouteHandler.mjs +43 -0
  71. package/dist/features/help/server/createHelpAssetRouteHandler.mjs.map +1 -0
  72. package/dist/features/help/server.d.mts +71 -0
  73. package/dist/features/help/server.d.ts +71 -0
  74. package/dist/features/help/server.js +123 -0
  75. package/dist/features/help/server.js.map +1 -0
  76. package/dist/features/help/server.mjs +123 -0
  77. package/dist/features/help/server.mjs.map +1 -0
  78. package/dist/help-content-config.interface-B9L02u9i.d.mts +50 -0
  79. package/dist/help-content-config.interface-B9L02u9i.d.ts +50 -0
  80. package/dist/index.d.mts +10 -8
  81. package/dist/index.d.ts +10 -8
  82. package/dist/index.js +4 -3
  83. package/dist/index.js.map +1 -1
  84. package/dist/index.mjs +3 -2
  85. package/dist/{notification.interface-aLEJbA_g.d.ts → notification.interface-C1T1C2ee.d.ts} +1 -100
  86. package/dist/{notification.interface-DLZGtV7Z.d.mts → notification.interface-DIxR23eS.d.mts} +1 -100
  87. package/dist/{s3.service-CVgLWaDc.d.mts → s3.service-0BTClOYO.d.mts} +2 -2
  88. package/dist/{s3.service-SLlX0Zbz.d.ts → s3.service-CT27Fm1s.d.ts} +2 -2
  89. package/dist/server/index.d.mts +4 -3
  90. package/dist/server/index.d.ts +4 -3
  91. package/dist/server/index.js +3 -3
  92. package/dist/server/index.mjs +1 -1
  93. package/dist/types-CQSjy7et.d.mts +101 -0
  94. package/dist/types-DHOxe8rc.d.ts +101 -0
  95. package/dist/usePageUrlGenerator-tjq2mlDV.d.ts +14 -0
  96. package/dist/usePageUrlGenerator-uOnyJ6j2.d.mts +14 -0
  97. package/dist/{useSocket-BkxHHujj.d.mts → useSocket-B1fMIr17.d.mts} +1 -1
  98. package/dist/{useSocket-CMDjWFYm.d.ts → useSocket-BdJTBXKv.d.ts} +1 -1
  99. package/package.json +20 -1
  100. package/src/client/config.ts +9 -1
  101. package/src/core/registry/helpStore.ts +45 -0
  102. package/src/features/assistant/contexts/AssistantContext.tsx +35 -19
  103. package/src/features/assistant/contexts/__tests__/AssistantContext.spec.tsx +66 -6
  104. package/src/features/assistant/data/Assistant.ts +2 -0
  105. package/src/features/assistant/data/AssistantInterface.ts +2 -0
  106. package/src/features/assistant/data/AssistantService.ts +18 -8
  107. package/src/features/assistant-message/components/parts/MessageSourcesPanel.tsx +6 -4
  108. package/src/features/assistant-message/components/parts/tabs/ContentsTab.tsx +5 -1
  109. package/src/features/assistant-message/components/parts/tabs/ReferencesTab.tsx +2 -1
  110. package/src/features/assistant-message/data/AssistantMessage.ts +27 -1
  111. package/src/features/assistant-message/data/AssistantMessageInterface.ts +1 -0
  112. package/src/features/assistant-message/data/__tests__/AssistantMessage.spec.ts +7 -3
  113. package/src/features/help/components/HelpArticleBody.tsx +54 -0
  114. package/src/features/help/components/HelpAskAi.tsx +36 -0
  115. package/src/features/help/components/HelpAssistantSheet.tsx +53 -0
  116. package/src/features/help/components/HelpHeader.tsx +40 -0
  117. package/src/features/help/components/HelpHint.tsx +77 -0
  118. package/src/features/help/components/HelpSearchResultRow.tsx +51 -0
  119. package/src/features/help/components/HelpSideNav.tsx +84 -0
  120. package/src/features/help/components/HelpTOC.tsx +49 -0
  121. package/src/features/help/components/__tests__/HelpAskAi.spec.tsx +68 -0
  122. package/src/features/help/components/__tests__/HelpAssistantSheet.spec.tsx +36 -0
  123. package/src/features/help/components/__tests__/HelpHint.spec.tsx +50 -0
  124. package/src/features/help/components/__tests__/HelpSearchResultRow.spec.tsx +59 -0
  125. package/src/features/help/components/__tests__/HelpSideNav.spec.tsx +52 -0
  126. package/src/features/help/components/mdx/Callout.tsx +21 -0
  127. package/src/features/help/components/mdx/EntityRef.tsx +18 -0
  128. package/src/features/help/components/mdx/KeyBinding.tsx +6 -0
  129. package/src/features/help/components/mdx/Related.tsx +33 -0
  130. package/src/features/help/components/mdx/Screenshot.tsx +9 -0
  131. package/src/features/help/components/mdx/Steps.tsx +21 -0
  132. package/src/features/help/components/mdx/Video.tsx +8 -0
  133. package/src/features/help/components/mdx/mdx-server-components.ts +23 -0
  134. package/src/features/help/components/mdx/mdxComponents.ts +9 -0
  135. package/src/features/help/contexts/HelpContext.spec.tsx +28 -0
  136. package/src/features/help/contexts/HelpContext.tsx +24 -0
  137. package/src/features/help/hooks/useHelp.ts +1 -0
  138. package/src/features/help/hooks/useHelpArticle.ts +7 -0
  139. package/src/features/help/hooks/useHelpFilter.ts +27 -0
  140. package/src/features/help/hooks/useHelpManifest.ts +5 -0
  141. package/src/features/help/i18n-keys.ts +34 -0
  142. package/src/features/help/index.ts +27 -0
  143. package/src/features/help/interfaces/help-content-config.interface.ts +17 -0
  144. package/src/features/help/server/__tests__/createHelpAssetRouteHandler.spec.ts +43 -0
  145. package/src/features/help/server/createHelpAssetRouteHandler.ts +35 -0
  146. package/src/features/help/server/generateHelpArticleMetadata.ts +18 -0
  147. package/src/features/help/server/generateHelpArticleStaticParams.ts +7 -0
  148. package/src/features/help/server/generateHelpModeStaticParams.ts +5 -0
  149. package/src/features/help/server/getHelpContent.ts +17 -0
  150. package/src/features/help/server/index.ts +8 -0
  151. package/src/features/help/server/serializeHelpArticle.tsx +46 -0
  152. package/src/features/help/server-entry.ts +20 -0
  153. package/src/features/help/types/help-article.types.ts +37 -0
  154. package/src/features/help/utils/__tests__/helpNavigation.spec.ts +70 -0
  155. package/src/features/help/utils/articleUrl.ts +13 -0
  156. package/src/features/help/utils/helpNavigation.ts +29 -0
  157. package/src/features/how-to/HowToModule.ts +1 -1
  158. package/src/features/how-to/data/HowTo.ts +21 -3
  159. package/src/features/how-to/data/HowToInterface.ts +1 -0
  160. package/src/index.ts +4 -0
  161. package/dist/BlockNoteEditor-2AXSTGGG.js.map +0 -1
  162. package/dist/chunk-56XBGQGU.mjs.map +0 -1
  163. package/dist/chunk-CFECWLHH.mjs.map +0 -1
  164. package/dist/chunk-HC3JFN3C.js.map +0 -1
  165. package/dist/chunk-RXXZGPC3.js.map +0 -1
  166. package/dist/chunk-VLDLERJN.js.map +0 -1
@@ -0,0 +1,123 @@
1
+ import {
2
+ Modules
3
+ } from "./chunk-MSNNAHDB.mjs";
4
+ import {
5
+ __name
6
+ } from "./chunk-PAWJFY3S.mjs";
7
+
8
+ // src/features/help/types/help-article.types.ts
9
+ var HELP_MODES = ["tutorial", "how-to", "reference", "explanation"];
10
+
11
+ // src/features/help/utils/helpNavigation.ts
12
+ function buildHelpNav(manifest) {
13
+ return HELP_MODES.map((mode) => ({
14
+ mode,
15
+ articles: manifest.filter((a) => a.mode === mode && !a.draft).sort((a, b) => a.order - b.order)
16
+ }));
17
+ }
18
+ __name(buildHelpNav, "buildHelpNav");
19
+ function findHelpArticle(manifest, mode, slug) {
20
+ return manifest.find((a) => a.mode === mode && a.slug === slug);
21
+ }
22
+ __name(findHelpArticle, "findHelpArticle");
23
+ function prevNextWithinMode(manifest, current) {
24
+ const siblings = manifest.filter((a) => a.mode === current.mode && !a.draft).sort((a, b) => a.order - b.order);
25
+ const idx = siblings.findIndex((a) => a.slug === current.slug);
26
+ return {
27
+ prev: idx > 0 ? siblings[idx - 1] : null,
28
+ next: idx >= 0 && idx < siblings.length - 1 ? siblings[idx + 1] : null
29
+ };
30
+ }
31
+ __name(prevNextWithinMode, "prevNextWithinMode");
32
+
33
+ // src/features/help/components/mdx/Callout.tsx
34
+ import { InfoIcon, AlertTriangleIcon, LightbulbIcon, XCircleIcon } from "lucide-react";
35
+ import { jsx, jsxs } from "react/jsx-runtime";
36
+ var STYLES = {
37
+ info: { icon: InfoIcon, ring: "ring-blue-500/30 bg-blue-500/5" },
38
+ warning: { icon: AlertTriangleIcon, ring: "ring-amber-500/30 bg-amber-500/5" },
39
+ tip: { icon: LightbulbIcon, ring: "ring-emerald-500/30 bg-emerald-500/5" },
40
+ danger: { icon: XCircleIcon, ring: "ring-rose-500/30 bg-rose-500/5" }
41
+ };
42
+ function Callout({ type = "info", children }) {
43
+ const { icon: Icon, ring } = STYLES[type];
44
+ return /* @__PURE__ */ jsxs("div", { className: `my-4 flex gap-3 rounded-md ring-1 p-3 ${ring}`, children: [
45
+ /* @__PURE__ */ jsx(Icon, { className: "mt-0.5 h-4 w-4 shrink-0" }),
46
+ /* @__PURE__ */ jsx("div", { className: "text-sm leading-relaxed", children })
47
+ ] });
48
+ }
49
+ __name(Callout, "Callout");
50
+
51
+ // src/features/help/components/mdx/Steps.tsx
52
+ import { Children } from "react";
53
+ import { Fragment, jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
54
+ function Steps({ children }) {
55
+ const items = Children.toArray(children);
56
+ return /* @__PURE__ */ jsx2("ol", { className: "my-4 list-none space-y-3 pl-0", children: items.map((child, i) => /* @__PURE__ */ jsxs2("li", { className: "flex gap-3", children: [
57
+ /* @__PURE__ */ jsx2("span", { className: "bg-muted text-muted-foreground flex h-6 w-6 shrink-0 items-center justify-center rounded-full text-xs", children: i + 1 }),
58
+ /* @__PURE__ */ jsx2("div", { className: "flex-1 [&>p:first-child]:mt-0", children: child })
59
+ ] }, i)) });
60
+ }
61
+ __name(Steps, "Steps");
62
+ function Step({ children }) {
63
+ return /* @__PURE__ */ jsx2(Fragment, { children });
64
+ }
65
+ __name(Step, "Step");
66
+
67
+ // src/features/help/components/mdx/Screenshot.tsx
68
+ import { jsx as jsx3, jsxs as jsxs3 } from "react/jsx-runtime";
69
+ function Screenshot({ src, alt, caption }) {
70
+ const url = src.startsWith("/") ? src : `/help-assets/${src}`;
71
+ return /* @__PURE__ */ jsxs3("figure", { className: "my-4", children: [
72
+ /* @__PURE__ */ jsx3("img", { src: url, alt: alt ?? caption ?? "", className: "rounded-md ring-1 ring-border" }),
73
+ caption ? /* @__PURE__ */ jsx3("figcaption", { className: "text-muted-foreground mt-1 text-xs", children: caption }) : null
74
+ ] });
75
+ }
76
+ __name(Screenshot, "Screenshot");
77
+
78
+ // src/features/help/components/mdx/EntityRef.tsx
79
+ import { jsx as jsx4, jsxs as jsxs4 } from "react/jsx-runtime";
80
+ function EntityRef({ type, children }) {
81
+ let Icon = null;
82
+ try {
83
+ const m = Modules.findByName(type);
84
+ Icon = m.icon ?? null;
85
+ } catch {
86
+ Icon = null;
87
+ }
88
+ return /* @__PURE__ */ jsxs4("span", { className: "bg-muted text-foreground/90 inline-flex items-center gap-1 rounded px-1.5 py-0.5 align-middle text-xs", children: [
89
+ Icon ? /* @__PURE__ */ jsx4(Icon, { className: "h-3 w-3" }) : null,
90
+ children
91
+ ] });
92
+ }
93
+ __name(EntityRef, "EntityRef");
94
+
95
+ // src/features/help/components/mdx/KeyBinding.tsx
96
+ import { jsx as jsx5 } from "react/jsx-runtime";
97
+ function KeyBinding({ children }) {
98
+ return /* @__PURE__ */ jsx5("kbd", { className: "bg-muted text-muted-foreground rounded border px-1.5 py-0.5 text-xs font-medium", children });
99
+ }
100
+ __name(KeyBinding, "KeyBinding");
101
+
102
+ // src/features/help/components/mdx/Video.tsx
103
+ import { jsx as jsx6 } from "react/jsx-runtime";
104
+ function Video({ src, poster }) {
105
+ const url = src.startsWith("/") ? src : `/help-assets/${src}`;
106
+ return /* @__PURE__ */ jsx6("video", { controls: true, preload: "metadata", poster, className: "my-4 w-full rounded-md ring-1 ring-border", children: /* @__PURE__ */ jsx6("source", { src: url }) });
107
+ }
108
+ __name(Video, "Video");
109
+
110
+ export {
111
+ HELP_MODES,
112
+ buildHelpNav,
113
+ findHelpArticle,
114
+ prevNextWithinMode,
115
+ Callout,
116
+ Steps,
117
+ Step,
118
+ Screenshot,
119
+ EntityRef,
120
+ KeyBinding,
121
+ Video
122
+ };
123
+ //# sourceMappingURL=chunk-MZTKPPET.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/features/help/types/help-article.types.ts","../src/features/help/utils/helpNavigation.ts","../src/features/help/components/mdx/Callout.tsx","../src/features/help/components/mdx/Steps.tsx","../src/features/help/components/mdx/Screenshot.tsx","../src/features/help/components/mdx/EntityRef.tsx","../src/features/help/components/mdx/KeyBinding.tsx","../src/features/help/components/mdx/Video.tsx"],"sourcesContent":["/**\n * Local copy of the help-article types to keep this published frontend library\n * decoupled from `@carlonicora/nestjs-neo4jsonapi`. Must stay in sync with\n * `packages/nestjs-neo4jsonapi/src/foundations/help-content-sync/interfaces/help-article.interface.ts`.\n */\n\nexport const HELP_MODES = [\"tutorial\", \"how-to\", \"reference\", \"explanation\"] as const;\nexport type HelpMode = (typeof HELP_MODES)[number];\n\nexport interface HelpHeading {\n depth: 2 | 3;\n slug: string;\n text: string;\n}\n\nexport interface HelpArticle {\n id: string;\n slug: string;\n mode: HelpMode;\n title: string;\n summary: string;\n order: number;\n tags: readonly string[];\n contextualKeys: readonly string[];\n aiIndexed: boolean;\n draft: boolean;\n contentHash: string;\n path: string;\n headings: readonly HelpHeading[];\n relatedSlugs: readonly string[];\n lastUpdated: string;\n}\n\nexport interface HelpRedirect {\n from: string;\n to: string;\n}\n","import { HELP_MODES, type HelpArticle, type HelpMode } from \"../types/help-article.types\";\n\nexport interface HelpNavGroup {\n mode: HelpMode;\n articles: HelpArticle[];\n}\n\nexport function buildHelpNav(manifest: readonly HelpArticle[]): HelpNavGroup[] {\n return HELP_MODES.map((mode) => ({\n mode,\n articles: manifest.filter((a) => a.mode === mode && !a.draft).sort((a, b) => a.order - b.order),\n }));\n}\n\nexport function findHelpArticle(manifest: readonly HelpArticle[], mode: string, slug: string): HelpArticle | undefined {\n return manifest.find((a) => a.mode === mode && a.slug === slug);\n}\n\nexport function prevNextWithinMode(\n manifest: readonly HelpArticle[],\n current: HelpArticle,\n): { prev: HelpArticle | null; next: HelpArticle | null } {\n const siblings = manifest.filter((a) => a.mode === current.mode && !a.draft).sort((a, b) => a.order - b.order);\n const idx = siblings.findIndex((a) => a.slug === current.slug);\n return {\n prev: idx > 0 ? siblings[idx - 1] : null,\n next: idx >= 0 && idx < siblings.length - 1 ? siblings[idx + 1] : null,\n };\n}\n","import { InfoIcon, AlertTriangleIcon, LightbulbIcon, XCircleIcon, LucideIcon } from \"lucide-react\";\nimport { ReactNode } from \"react\";\n\ntype CalloutType = \"info\" | \"warning\" | \"tip\" | \"danger\";\n\nconst STYLES: Record<CalloutType, { icon: LucideIcon; ring: string }> = {\n info: { icon: InfoIcon, ring: \"ring-blue-500/30 bg-blue-500/5\" },\n warning: { icon: AlertTriangleIcon, ring: \"ring-amber-500/30 bg-amber-500/5\" },\n tip: { icon: LightbulbIcon, ring: \"ring-emerald-500/30 bg-emerald-500/5\" },\n danger: { icon: XCircleIcon, ring: \"ring-rose-500/30 bg-rose-500/5\" },\n};\n\nexport function Callout({ type = \"info\", children }: { type?: CalloutType; children: ReactNode }) {\n const { icon: Icon, ring } = STYLES[type];\n return (\n <div className={`my-4 flex gap-3 rounded-md ring-1 p-3 ${ring}`}>\n <Icon className=\"mt-0.5 h-4 w-4 shrink-0\" />\n <div className=\"text-sm leading-relaxed\">{children}</div>\n </div>\n );\n}\n","import { ReactNode, Children } from \"react\";\n\nexport function Steps({ children }: { children: ReactNode }) {\n const items = Children.toArray(children);\n return (\n <ol className=\"my-4 list-none space-y-3 pl-0\">\n {items.map((child, i) => (\n <li key={i} className=\"flex gap-3\">\n <span className=\"bg-muted text-muted-foreground flex h-6 w-6 shrink-0 items-center justify-center rounded-full text-xs\">\n {i + 1}\n </span>\n <div className=\"flex-1 [&>p:first-child]:mt-0\">{child}</div>\n </li>\n ))}\n </ol>\n );\n}\n\nexport function Step({ children }: { children: ReactNode }) {\n return <>{children}</>;\n}\n","export function Screenshot({ src, alt, caption }: { src: string; alt?: string; caption?: string }) {\n const url = src.startsWith(\"/\") ? src : `/help-assets/${src}`;\n return (\n <figure className=\"my-4\">\n <img src={url} alt={alt ?? caption ?? \"\"} className=\"rounded-md ring-1 ring-border\" />\n {caption ? <figcaption className=\"text-muted-foreground mt-1 text-xs\">{caption}</figcaption> : null}\n </figure>\n );\n}\n","import { Modules } from \"../../../../core\";\nimport { ReactNode } from \"react\";\n\nexport function EntityRef({ type, children }: { type: string; children: ReactNode }) {\n let Icon: React.ComponentType<{ className?: string }> | null = null;\n try {\n const m = Modules.findByName(type);\n Icon = m.icon ?? null;\n } catch {\n Icon = null;\n }\n return (\n <span className=\"bg-muted text-foreground/90 inline-flex items-center gap-1 rounded px-1.5 py-0.5 align-middle text-xs\">\n {Icon ? <Icon className=\"h-3 w-3\" /> : null}\n {children}\n </span>\n );\n}\n","import { ReactNode } from \"react\";\nexport function KeyBinding({ children }: { children: ReactNode }) {\n return (\n <kbd className=\"bg-muted text-muted-foreground rounded border px-1.5 py-0.5 text-xs font-medium\">{children}</kbd>\n );\n}\n","export function Video({ src, poster }: { src: string; poster?: string }) {\n const url = src.startsWith(\"/\") ? src : `/help-assets/${src}`;\n return (\n <video controls preload=\"metadata\" poster={poster} className=\"my-4 w-full rounded-md ring-1 ring-border\">\n <source src={url} />\n </video>\n );\n}\n"],"mappings":"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","names":["jsx","jsxs","jsx","jsxs","jsx","jsxs","jsx","jsx"]}