hazo_ihelp 2.0.1

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 (156) hide show
  1. package/config/hazo_ihelp_config.ini +9 -0
  2. package/config/hazo_ihelp_config.ini.sample +23 -0
  3. package/dist/api/create_config_handler.d.ts +27 -0
  4. package/dist/api/create_config_handler.d.ts.map +1 -0
  5. package/dist/api/create_config_handler.js +122 -0
  6. package/dist/api/create_config_handler.js.map +1 -0
  7. package/dist/api/create_ihelp_handler.d.ts +60 -0
  8. package/dist/api/create_ihelp_handler.d.ts.map +1 -0
  9. package/dist/api/create_ihelp_handler.js +378 -0
  10. package/dist/api/create_ihelp_handler.js.map +1 -0
  11. package/dist/api/image_upload_handler.d.ts +29 -0
  12. package/dist/api/image_upload_handler.d.ts.map +1 -0
  13. package/dist/api/image_upload_handler.js +149 -0
  14. package/dist/api/image_upload_handler.js.map +1 -0
  15. package/dist/api/index.d.ts +6 -0
  16. package/dist/api/index.d.ts.map +1 -0
  17. package/dist/api/index.js +4 -0
  18. package/dist/api/index.js.map +1 -0
  19. package/dist/components/editor/editor_collapsible_section.d.ts +11 -0
  20. package/dist/components/editor/editor_collapsible_section.d.ts.map +1 -0
  21. package/dist/components/editor/editor_collapsible_section.js +10 -0
  22. package/dist/components/editor/editor_collapsible_section.js.map +1 -0
  23. package/dist/components/editor/editor_context_keys_section.d.ts +13 -0
  24. package/dist/components/editor/editor_context_keys_section.d.ts.map +1 -0
  25. package/dist/components/editor/editor_context_keys_section.js +99 -0
  26. package/dist/components/editor/editor_context_keys_section.js.map +1 -0
  27. package/dist/components/editor/editor_form.d.ts +27 -0
  28. package/dist/components/editor/editor_form.d.ts.map +1 -0
  29. package/dist/components/editor/editor_form.js +25 -0
  30. package/dist/components/editor/editor_form.js.map +1 -0
  31. package/dist/components/editor/editor_import_export.d.ts +18 -0
  32. package/dist/components/editor/editor_import_export.d.ts.map +1 -0
  33. package/dist/components/editor/editor_import_export.js +117 -0
  34. package/dist/components/editor/editor_import_export.js.map +1 -0
  35. package/dist/components/editor/editor_tags_section.d.ts +10 -0
  36. package/dist/components/editor/editor_tags_section.d.ts.map +1 -0
  37. package/dist/components/editor/editor_tags_section.js +33 -0
  38. package/dist/components/editor/editor_tags_section.js.map +1 -0
  39. package/dist/components/editor/editor_topic_list.d.ts +14 -0
  40. package/dist/components/editor/editor_topic_list.d.ts.map +1 -0
  41. package/dist/components/editor/editor_topic_list.js +58 -0
  42. package/dist/components/editor/editor_topic_list.js.map +1 -0
  43. package/dist/components/editor/editor_topic_list_item.d.ts +10 -0
  44. package/dist/components/editor/editor_topic_list_item.d.ts.map +1 -0
  45. package/dist/components/editor/editor_topic_list_item.js +10 -0
  46. package/dist/components/editor/editor_topic_list_item.js.map +1 -0
  47. package/dist/components/ihelp_detail_panel.d.ts +16 -0
  48. package/dist/components/ihelp_detail_panel.d.ts.map +1 -0
  49. package/dist/components/ihelp_detail_panel.js +46 -0
  50. package/dist/components/ihelp_detail_panel.js.map +1 -0
  51. package/dist/components/ihelp_editor.d.ts +3 -0
  52. package/dist/components/ihelp_editor.d.ts.map +1 -0
  53. package/dist/components/ihelp_editor.js +169 -0
  54. package/dist/components/ihelp_editor.js.map +1 -0
  55. package/dist/components/ihelp_icon.d.ts +7 -0
  56. package/dist/components/ihelp_icon.d.ts.map +1 -0
  57. package/dist/components/ihelp_icon.js +14 -0
  58. package/dist/components/ihelp_icon.js.map +1 -0
  59. package/dist/components/ihelp_provider.d.ts +21 -0
  60. package/dist/components/ihelp_provider.d.ts.map +1 -0
  61. package/dist/components/ihelp_provider.js +83 -0
  62. package/dist/components/ihelp_provider.js.map +1 -0
  63. package/dist/components/ihelp_rich_editor.d.ts +15 -0
  64. package/dist/components/ihelp_rich_editor.d.ts.map +1 -0
  65. package/dist/components/ihelp_rich_editor.js +182 -0
  66. package/dist/components/ihelp_rich_editor.js.map +1 -0
  67. package/dist/components/ihelp_search_dialog.d.ts +3 -0
  68. package/dist/components/ihelp_search_dialog.d.ts.map +1 -0
  69. package/dist/components/ihelp_search_dialog.js +454 -0
  70. package/dist/components/ihelp_search_dialog.js.map +1 -0
  71. package/dist/components/index.d.ts +7 -0
  72. package/dist/components/index.d.ts.map +1 -0
  73. package/dist/components/index.js +7 -0
  74. package/dist/components/index.js.map +1 -0
  75. package/dist/components/resizable_image.d.ts +17 -0
  76. package/dist/components/resizable_image.d.ts.map +1 -0
  77. package/dist/components/resizable_image.js +170 -0
  78. package/dist/components/resizable_image.js.map +1 -0
  79. package/dist/components/ui/badge.d.ts +9 -0
  80. package/dist/components/ui/badge.d.ts.map +1 -0
  81. package/dist/components/ui/badge.js +17 -0
  82. package/dist/components/ui/badge.js.map +1 -0
  83. package/dist/components/ui/button.d.ts +10 -0
  84. package/dist/components/ui/button.d.ts.map +1 -0
  85. package/dist/components/ui/button.js +50 -0
  86. package/dist/components/ui/button.js.map +1 -0
  87. package/dist/components/ui/dialog.d.ts +20 -0
  88. package/dist/components/ui/dialog.d.ts.map +1 -0
  89. package/dist/components/ui/dialog.js +26 -0
  90. package/dist/components/ui/dialog.js.map +1 -0
  91. package/dist/components/ui/input.d.ts +6 -0
  92. package/dist/components/ui/input.d.ts.map +1 -0
  93. package/dist/components/ui/input.js +12 -0
  94. package/dist/components/ui/input.js.map +1 -0
  95. package/dist/components/ui/label.d.ts +6 -0
  96. package/dist/components/ui/label.d.ts.map +1 -0
  97. package/dist/components/ui/label.js +12 -0
  98. package/dist/components/ui/label.js.map +1 -0
  99. package/dist/components/ui/popover.d.ts +7 -0
  100. package/dist/components/ui/popover.d.ts.map +1 -0
  101. package/dist/components/ui/popover.js +13 -0
  102. package/dist/components/ui/popover.js.map +1 -0
  103. package/dist/components/ui/select.d.ts +14 -0
  104. package/dist/components/ui/select.d.ts.map +1 -0
  105. package/dist/components/ui/select.js +29 -0
  106. package/dist/components/ui/select.js.map +1 -0
  107. package/dist/components/ui/switch.d.ts +5 -0
  108. package/dist/components/ui/switch.d.ts.map +1 -0
  109. package/dist/components/ui/switch.js +11 -0
  110. package/dist/components/ui/switch.js.map +1 -0
  111. package/dist/components/ui/textarea.d.ts +6 -0
  112. package/dist/components/ui/textarea.d.ts.map +1 -0
  113. package/dist/components/ui/textarea.js +12 -0
  114. package/dist/components/ui/textarea.js.map +1 -0
  115. package/dist/config/parse_config.d.ts +10 -0
  116. package/dist/config/parse_config.d.ts.map +1 -0
  117. package/dist/config/parse_config.js +76 -0
  118. package/dist/config/parse_config.js.map +1 -0
  119. package/dist/hooks/index.d.ts +6 -0
  120. package/dist/hooks/index.d.ts.map +1 -0
  121. package/dist/hooks/index.js +5 -0
  122. package/dist/hooks/index.js.map +1 -0
  123. package/dist/hooks/use_ihelp.d.ts +3 -0
  124. package/dist/hooks/use_ihelp.d.ts.map +1 -0
  125. package/dist/hooks/use_ihelp.js +52 -0
  126. package/dist/hooks/use_ihelp.js.map +1 -0
  127. package/dist/hooks/use_ihelp_config.d.ts +19 -0
  128. package/dist/hooks/use_ihelp_config.d.ts.map +1 -0
  129. package/dist/hooks/use_ihelp_config.js +62 -0
  130. package/dist/hooks/use_ihelp_config.js.map +1 -0
  131. package/dist/hooks/use_ihelp_editor.d.ts +3 -0
  132. package/dist/hooks/use_ihelp_editor.d.ts.map +1 -0
  133. package/dist/hooks/use_ihelp_editor.js +93 -0
  134. package/dist/hooks/use_ihelp_editor.js.map +1 -0
  135. package/dist/hooks/use_ihelp_search.d.ts +3 -0
  136. package/dist/hooks/use_ihelp_search.d.ts.map +1 -0
  137. package/dist/hooks/use_ihelp_search.js +68 -0
  138. package/dist/hooks/use_ihelp_search.js.map +1 -0
  139. package/dist/index.client.d.ts +13 -0
  140. package/dist/index.client.d.ts.map +1 -0
  141. package/dist/index.client.js +15 -0
  142. package/dist/index.client.js.map +1 -0
  143. package/dist/index.d.ts +12 -0
  144. package/dist/index.d.ts.map +1 -0
  145. package/dist/index.js +12 -0
  146. package/dist/index.js.map +1 -0
  147. package/dist/types/index.d.ts +595 -0
  148. package/dist/types/index.d.ts.map +1 -0
  149. package/dist/types/index.js +8 -0
  150. package/dist/types/index.js.map +1 -0
  151. package/dist/utils/cn.d.ts +3 -0
  152. package/dist/utils/cn.d.ts.map +1 -0
  153. package/dist/utils/cn.js +6 -0
  154. package/dist/utils/cn.js.map +1 -0
  155. package/migrations/001_create_ihelp_tables.sql +58 -0
  156. package/package.json +108 -0
@@ -0,0 +1,454 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useState, useEffect, useMemo, useCallback } from 'react';
4
+ import { Search, ChevronLeft, FolderTree, ChevronRight } from 'lucide-react';
5
+ import { cn } from '../utils/cn.js';
6
+ import { Badge } from './ui/badge.js';
7
+ import { Input } from './ui/input.js';
8
+ import { IhelpDetailPanel } from './ihelp_detail_panel.js';
9
+ import { useIhelpContext } from './ihelp_provider.js';
10
+ import { use_ihelp } from '../hooks/use_ihelp.js';
11
+ import { Dialog, DialogContent, DialogTitle, } from './ui/dialog.js';
12
+ // ---------------------------------------------------------------------------
13
+ // Internal: Scoped scrollbar styles (injected once)
14
+ // ---------------------------------------------------------------------------
15
+ const SCROLLBAR_STYLE_ID = 'ihelp-scrollbar-css';
16
+ function ensureScrollbarStyles() {
17
+ if (typeof document === 'undefined')
18
+ return;
19
+ if (document.getElementById(SCROLLBAR_STYLE_ID))
20
+ return;
21
+ const style = document.createElement('style');
22
+ style.id = SCROLLBAR_STYLE_ID;
23
+ style.textContent = `
24
+ .ihelp-dialog ::-webkit-scrollbar { width: 6px; }
25
+ .ihelp-dialog ::-webkit-scrollbar-track { background: transparent; }
26
+ .ihelp-dialog ::-webkit-scrollbar-thumb {
27
+ background: rgba(255,255,255,0.12);
28
+ border-radius: 3px;
29
+ }
30
+ .ihelp-dialog ::-webkit-scrollbar-thumb:hover {
31
+ background: rgba(255,255,255,0.22);
32
+ }
33
+ .ihelp-dialog { scrollbar-color: rgba(255,255,255,0.12) transparent; scrollbar-width: thin; }
34
+ `;
35
+ document.head.appendChild(style);
36
+ }
37
+ // ---------------------------------------------------------------------------
38
+ // Internal: Build CSS custom property style object from theme
39
+ // ---------------------------------------------------------------------------
40
+ /**
41
+ * Build a style object that sets both real CSS properties (backgroundColor,
42
+ * color) and custom property tokens (--ihelp-*) so child elements can
43
+ * reference them. The real properties guarantee the background renders
44
+ * even when the host dialog doesn't forward inline styles.
45
+ */
46
+ function themeToStyle(theme) {
47
+ if (!theme)
48
+ return undefined;
49
+ const s = {};
50
+ // CSS custom properties for child consumption
51
+ if (theme.background)
52
+ s['--ihelp-bg'] = theme.background;
53
+ if (theme.foreground)
54
+ s['--ihelp-fg'] = theme.foreground;
55
+ if (theme.muted_foreground)
56
+ s['--ihelp-muted'] = theme.muted_foreground;
57
+ if (theme.border)
58
+ s['--ihelp-border'] = theme.border;
59
+ if (theme.accent)
60
+ s['--ihelp-accent'] = theme.accent;
61
+ if (theme.accent_foreground)
62
+ s['--ihelp-accent-fg'] = theme.accent_foreground;
63
+ if (theme.primary)
64
+ s['--ihelp-primary'] = theme.primary;
65
+ if (theme.primary_foreground)
66
+ s['--ihelp-primary-fg'] = theme.primary_foreground;
67
+ // Real CSS properties so the background actually renders
68
+ if (theme.background)
69
+ s['backgroundColor'] = theme.background;
70
+ if (theme.foreground)
71
+ s['color'] = theme.foreground;
72
+ return Object.keys(s).length > 0 ? s : undefined;
73
+ }
74
+ /** Default labels used when none are provided. */
75
+ const DEFAULT_LABELS = {
76
+ search_placeholder: 'Search help topics...',
77
+ dialog_title: 'Help',
78
+ more_info_prefix: 'More Info:',
79
+ related_topics: 'Related topics',
80
+ loading: 'Loading...',
81
+ no_results: 'No results found',
82
+ no_topics: 'No topics available',
83
+ select_prompt: 'Select a topic to view details',
84
+ browse_all: 'Browse all topics',
85
+ showing_help_for: 'Showing help for:',
86
+ };
87
+ // Try to load HazoUiDialog at runtime (optional peer dependency).
88
+ // Resolution is deferred to useEffect to avoid SSR/client mismatch.
89
+ let _hazoUiResolved = false;
90
+ let _HazoUiDialogComponent = null;
91
+ let _hazoUiPromise = null;
92
+ function getHazoUiPromise() {
93
+ if (!_hazoUiPromise) {
94
+ _hazoUiPromise = import('hazo_ui').then((mod) => { _HazoUiDialogComponent = mod.HazoUiDialog; _hazoUiResolved = true; }, () => { _hazoUiResolved = true; /* hazo_ui not installed — use fallback */ });
95
+ }
96
+ return _hazoUiPromise;
97
+ }
98
+ // ---------------------------------------------------------------------------
99
+ // Internal: Topic Card
100
+ // ---------------------------------------------------------------------------
101
+ /**
102
+ * Render a tag label in a friendlier way for non-expert users.
103
+ * Strips jargon symbols and abbreviations, using the variant to
104
+ * provide visual context instead.
105
+ */
106
+ function friendlyTagLabel(label) {
107
+ return label
108
+ .replace(/[≤<>]/g, ' ') // strip math symbols
109
+ .replace(/\s+/g, ' ') // collapse whitespace
110
+ .trim();
111
+ }
112
+ /** Variant icon prefix for tags — simple unicode, no jargon */
113
+ const TAG_ICONS = {
114
+ success: '✓',
115
+ warning: '!',
116
+ info: 'ⓘ',
117
+ default: '•',
118
+ };
119
+ function TopicCard({ topic, is_selected, onSelect, hide_category = false, compact = false, }) {
120
+ // Compact mode: child topics render as a slim row instead of a full card
121
+ if (compact) {
122
+ return (_jsxs("button", { type: "button", onClick: () => onSelect(topic.id), className: cn('w-full flex items-center gap-2 text-left rounded-lg px-3 py-[7px] transition-all duration-150 border-l-2', is_selected
123
+ ? 'border-l-[var(--ihelp-primary,#38bdf8)] bg-[var(--ihelp-primary,#38bdf8)]/[0.08] text-[var(--ihelp-fg,var(--foreground))] font-medium'
124
+ : 'border-l-transparent text-[var(--ihelp-fg,var(--foreground))]/70 hover:bg-white/[0.04] hover:text-[var(--ihelp-fg,var(--foreground))]'), children: [_jsx("span", { className: "text-[12px] truncate flex-1", children: topic.title }), topic.tags.length > 0 && (_jsx("span", { className: "flex gap-1 shrink-0", children: topic.tags.slice(0, 2).map((tag) => (_jsx("span", { className: cn('text-[9px] font-semibold px-[5px] py-[1px] rounded-full', tag.variant === 'success' && 'text-emerald-400 bg-emerald-500/10', tag.variant === 'warning' && 'text-amber-400 bg-amber-500/10', tag.variant === 'info' && 'text-sky-400 bg-sky-500/10', (!tag.variant || tag.variant === 'default') && 'text-slate-400 bg-white/[0.06]'), title: tag.label, children: TAG_ICONS[tag.variant || 'default'] }, tag.id))) }))] }));
125
+ }
126
+ return (_jsxs("button", { type: "button", onClick: () => onSelect(topic.id), className: cn('w-full text-left rounded-xl border px-4 py-3 transition-all duration-200', is_selected
127
+ ? 'border-[var(--ihelp-primary,#38bdf8)]/50 bg-white/[0.07] shadow-[inset_0_0_0_1px_rgba(56,189,248,0.15),0_0_20px_-5px_rgba(56,189,248,0.25)]'
128
+ : 'border-transparent bg-white/[0.03] hover:bg-white/[0.06] hover:border-white/[0.08]'), children: [!hide_category && topic.category && (_jsx("p", { className: "text-[10px] text-[var(--ihelp-muted,var(--muted-foreground))]/60 mb-1 tracking-wider uppercase", children: topic.category })), _jsx("p", { className: "font-bold text-[13px] leading-snug text-[var(--ihelp-fg,var(--foreground))]", children: topic.title }), topic.description && (_jsx("p", { className: "text-[11px] text-[var(--ihelp-muted,var(--muted-foreground))]/80 mt-1 line-clamp-2 leading-relaxed", children: topic.description })), topic.tags.length > 0 && (_jsx("div", { className: "flex flex-wrap gap-1.5 mt-2.5", children: topic.tags.map((tag) => (_jsxs(Badge, { variant: tag.variant, className: "text-[10px] px-1.5 py-0", children: [TAG_ICONS[tag.variant || 'default'], " ", friendlyTagLabel(tag.label)] }, tag.id))) }))] }));
129
+ }
130
+ /**
131
+ * Build a two-level tree: Category → root topics → child topics.
132
+ *
133
+ * Categories with a single root topic that has no children are flattened
134
+ * to avoid unnecessary nesting.
135
+ */
136
+ function buildTree(topics) {
137
+ const map = new Map();
138
+ // Create tree nodes
139
+ for (const t of topics) {
140
+ map.set(t.id, { ...t, tree_children: [] });
141
+ }
142
+ // Link parent → children (within the topic data)
143
+ for (const node of map.values()) {
144
+ if (node.parent_id && map.has(node.parent_id)) {
145
+ map.get(node.parent_id).tree_children.push(node);
146
+ }
147
+ }
148
+ // Collect root topics (no parent or parent not in dataset)
149
+ const root_topics = [];
150
+ for (const node of map.values()) {
151
+ if (!node.parent_id || !map.has(node.parent_id)) {
152
+ root_topics.push(node);
153
+ }
154
+ }
155
+ // Group root topics by category
156
+ const by_category = new Map();
157
+ for (const node of root_topics) {
158
+ const cat = node.category || 'General';
159
+ if (!by_category.has(cat))
160
+ by_category.set(cat, []);
161
+ by_category.get(cat).push(node);
162
+ }
163
+ // Build final tree: each category becomes a virtual group node
164
+ const result = [];
165
+ for (const [cat, nodes] of by_category) {
166
+ // Single root with no children → no need for category wrapper
167
+ if (nodes.length === 1 && nodes[0].tree_children.length === 0) {
168
+ result.push(nodes[0]);
169
+ continue;
170
+ }
171
+ // Create synthetic category group node
172
+ const group = {
173
+ id: `__cat__${cat}`,
174
+ parent_id: null,
175
+ scope_id: null,
176
+ category: cat,
177
+ title: cat,
178
+ description: null,
179
+ content: null,
180
+ icon: null,
181
+ sort_order: nodes[0].sort_order,
182
+ is_published: true,
183
+ created_at: '',
184
+ changed_at: null,
185
+ tags: [],
186
+ context_keys: [],
187
+ tree_children: nodes,
188
+ is_category_group: true,
189
+ };
190
+ result.push(group);
191
+ }
192
+ return result;
193
+ }
194
+ function TopicTreeItem({ node, depth, selected_id, onSelect, }) {
195
+ const has_children = node.tree_children.length > 0;
196
+ const is_group = !!node.is_category_group;
197
+ /** Recursively check if any descendant is selected */
198
+ function hasSelectedDescendant(n) {
199
+ return n.tree_children.some((c) => c.id === selected_id || hasSelectedDescendant(c));
200
+ }
201
+ /** Count all real (non-group) leaf & branch topics in the subtree */
202
+ function countTopics(n) {
203
+ if (n.tree_children.length === 0)
204
+ return 1;
205
+ return n.tree_children.reduce((sum, c) => sum + countTopics(c), is_group ? 0 : 1);
206
+ }
207
+ const has_selected_child = has_children && hasSelectedDescendant(node);
208
+ const [expanded, setExpanded] = useState(depth < 1 || has_selected_child);
209
+ // Category group nodes and root-level parents → accordion header
210
+ if (has_children && (is_group || depth === 0)) {
211
+ return (_jsxs("div", { className: "mb-0.5", children: [_jsxs("button", { type: "button", onClick: () => {
212
+ setExpanded((prev) => !prev);
213
+ // Only select real topics, not synthetic category groups
214
+ if (!is_group)
215
+ onSelect(node.id);
216
+ }, className: cn('w-full flex items-center gap-2 text-left rounded-lg px-3 py-2 transition-all duration-150', 'hover:bg-white/[0.04]', expanded
217
+ ? 'text-[var(--ihelp-fg,var(--foreground))]'
218
+ : 'text-[var(--ihelp-fg,var(--foreground))]/80'), children: [_jsx(ChevronRight, { className: cn('h-3 w-3 shrink-0 text-[var(--ihelp-muted,var(--muted-foreground))]/50 transition-transform duration-200', expanded && 'rotate-90') }), _jsx("span", { className: "text-[12px] font-semibold tracking-wide flex-1 truncate", children: node.title }), _jsx("span", { className: "text-[10px] font-semibold text-[var(--ihelp-muted,var(--muted-foreground))]/40 bg-white/[0.05] px-[6px] py-[1px] rounded-full", children: countTopics(node) })] }), expanded && (_jsx("div", { className: "pl-2 mt-0.5 mb-1 ml-[14px] border-l border-white/[0.04] flex flex-col gap-px", children: node.tree_children.map((child) => (_jsx(TopicTreeItem, { node: child, depth: depth + 1, selected_id: selected_id, onSelect: onSelect }, child.id))) }))] }));
219
+ }
220
+ // Nested parents (depth > 0 with children) — simpler collapsible
221
+ if (has_children) {
222
+ return (_jsxs("div", { children: [_jsxs("button", { type: "button", onClick: () => {
223
+ setExpanded((prev) => !prev);
224
+ onSelect(node.id);
225
+ }, className: cn('w-full flex items-center gap-1.5 text-left rounded-md px-2.5 py-1.5 text-[12px] transition-all duration-150', 'text-[var(--ihelp-fg,var(--foreground))]/80', 'hover:bg-white/[0.04] hover:text-[var(--ihelp-fg,var(--foreground))]', selected_id === node.id && 'bg-white/[0.06] text-[var(--ihelp-fg,var(--foreground))] font-medium'), children: [_jsx(ChevronRight, { className: cn('h-2.5 w-2.5 shrink-0 text-[var(--ihelp-muted,var(--muted-foreground))]/40 transition-transform duration-200', expanded && 'rotate-90') }), _jsx("span", { className: "truncate font-medium", children: node.title })] }), expanded && (_jsx("div", { className: "pl-2 ml-3 border-l border-white/[0.03] flex flex-col gap-px", children: node.tree_children.map((child) => (_jsx(TopicTreeItem, { node: child, depth: depth + 1, selected_id: selected_id, onSelect: onSelect }, child.id))) }))] }));
226
+ }
227
+ // Leaf nodes — compact row with left accent on selection
228
+ return (_jsx("button", { type: "button", onClick: () => onSelect(node.id), className: cn('w-full flex items-center gap-1.5 text-left rounded-md px-3 py-[7px] text-[12px] transition-all duration-150', 'border-l-2', selected_id === node.id
229
+ ? 'border-l-[var(--ihelp-primary,#38bdf8)] bg-[var(--ihelp-primary,#38bdf8)]/[0.08] text-[var(--ihelp-fg,var(--foreground))] font-medium'
230
+ : 'border-l-transparent text-[var(--ihelp-fg,var(--foreground))]/70 hover:bg-white/[0.04] hover:text-[var(--ihelp-fg,var(--foreground))]'), children: _jsx("span", { className: "truncate", children: node.title }) }));
231
+ }
232
+ // ---------------------------------------------------------------------------
233
+ // Internal: Group topics by category
234
+ // ---------------------------------------------------------------------------
235
+ function groupByCategory(topics) {
236
+ const groups = new Map();
237
+ for (const t of topics) {
238
+ const key = t.category || 'General';
239
+ if (!groups.has(key))
240
+ groups.set(key, []);
241
+ groups.get(key).push(t);
242
+ }
243
+ return groups;
244
+ }
245
+ // ---------------------------------------------------------------------------
246
+ // Internal: Category Accordion (A + C hybrid)
247
+ // ---------------------------------------------------------------------------
248
+ /**
249
+ * Build a parent→children map from a flat list of topics.
250
+ * Root topics (no parent_id, or parent not in the list) become group leaders.
251
+ */
252
+ function groupByParent(topics) {
253
+ const id_set = new Set(topics.map((t) => t.id));
254
+ const children = new Map();
255
+ const roots = [];
256
+ for (const t of topics) {
257
+ if (t.parent_id && id_set.has(t.parent_id)) {
258
+ if (!children.has(t.parent_id))
259
+ children.set(t.parent_id, []);
260
+ children.get(t.parent_id).push(t);
261
+ }
262
+ else {
263
+ roots.push(t);
264
+ }
265
+ }
266
+ return { roots, children };
267
+ }
268
+ function CategoryAccordion({ category, topics, selected_topic_id, onSelect, default_open = true, }) {
269
+ const has_selection = topics.some((t) => t.id === selected_topic_id);
270
+ const [open, setOpen] = useState(default_open || has_selection);
271
+ const { roots, children } = useMemo(() => groupByParent(topics), [topics]);
272
+ // Auto-expand when a topic in this group becomes selected
273
+ useEffect(() => {
274
+ if (has_selection && !open)
275
+ setOpen(true);
276
+ }, [has_selection]); // eslint-disable-line react-hooks/exhaustive-deps
277
+ return (_jsxs("div", { children: [_jsxs("button", { type: "button", onClick: () => setOpen((prev) => !prev), className: cn('w-full flex items-center gap-2 text-left rounded-lg px-3 py-2 transition-all duration-150', 'hover:bg-white/[0.04]', open ? 'text-[var(--ihelp-fg,var(--foreground))]' : 'text-[var(--ihelp-fg,var(--foreground))]/80'), children: [_jsx(ChevronRight, { className: cn('h-3 w-3 shrink-0 text-[var(--ihelp-muted,var(--muted-foreground))]/50 transition-transform duration-200', open && 'rotate-90') }), _jsx("span", { className: "text-[12px] font-semibold tracking-wide flex-1", children: category }), _jsx("span", { className: "text-[10px] font-semibold text-[var(--ihelp-muted,var(--muted-foreground))]/40 bg-white/[0.05] px-[6px] py-[1px] rounded-full", children: topics.length })] }), open && (_jsx("div", { className: "pl-2 mt-1 mb-2 ml-[14px] border-l border-white/[0.04] flex flex-col gap-1.5", children: roots.map((topic) => {
278
+ const subs = children.get(topic.id);
279
+ return (_jsxs("div", { children: [_jsx(TopicCard, { topic: topic, is_selected: selected_topic_id === topic.id, onSelect: onSelect, hide_category: true }), subs && subs.length > 0 && (_jsx("div", { className: "ml-3 mt-1 mb-1 pl-2 border-l border-white/[0.03] flex flex-col gap-px", children: subs.map((child) => (_jsx(TopicCard, { topic: child, is_selected: selected_topic_id === child.id, onSelect: onSelect, hide_category: true, compact: true }, child.id))) }))] }, topic.id));
280
+ }) }))] }));
281
+ }
282
+ // ---------------------------------------------------------------------------
283
+ // Internal: Dialog body content (shared between HazoUiDialog and fallback)
284
+ // ---------------------------------------------------------------------------
285
+ function SearchDialogBody({ search, nav_stack, current_nav, selected_topic_id, setSelectedTopicId, push_nav, pop_nav, context_result, tree, selected_topic, handleSearchChange, handleNavigate, toggleBrowse, asset_base_url, provider_scope_id, theme, labels: labels_prop, }) {
286
+ const labels = { ...DEFAULT_LABELS, ...labels_prop };
287
+ // Inject scoped scrollbar CSS once
288
+ useEffect(() => { ensureScrollbarStyles(); }, []);
289
+ // Detect OS for shortcut hint (only on client to avoid hydration mismatch)
290
+ const [shortcut_hint, setShortcutHint] = useState('');
291
+ useEffect(() => {
292
+ const is_mac = /Mac|iPhone|iPad/.test(navigator.userAgent);
293
+ setShortcutHint(is_mac ? '\u2318K' : 'Ctrl+K');
294
+ }, []);
295
+ // Topics to show in the left pane
296
+ const left_topics = useMemo(() => {
297
+ if (!current_nav)
298
+ return [];
299
+ switch (current_nav.view) {
300
+ case 'context_home':
301
+ // Fall back to all topics if the context query returned nothing
302
+ return context_result.topics.length > 0
303
+ ? context_result.topics
304
+ : search.all_topics;
305
+ case 'search':
306
+ return search.results;
307
+ case 'browse':
308
+ return search.all_topics;
309
+ default:
310
+ return [];
311
+ }
312
+ }, [current_nav, context_result.topics, search.results, search.all_topics]);
313
+ // Auto-select the first topic when topics load and nothing is selected
314
+ useEffect(() => {
315
+ if (selected_topic_id)
316
+ return;
317
+ if (current_nav?.view === 'browse' && tree.length > 0) {
318
+ setSelectedTopicId(tree[0].id);
319
+ }
320
+ else if (left_topics.length > 0) {
321
+ setSelectedTopicId(left_topics[0].id);
322
+ }
323
+ }, [left_topics, tree, selected_topic_id, current_nav, setSelectedTopicId]);
324
+ const theme_style = themeToStyle(theme);
325
+ return (_jsxs("div", { className: "ihelp-dialog flex h-full min-h-0 flex-1", style: theme_style, children: [_jsxs("div", { className: "w-[42%] border-r border-white/[0.06] flex flex-col shrink-0", style: { backgroundColor: 'rgba(0,0,0,0.12)' }, children: [_jsxs("div", { className: "flex items-center gap-2 px-3 py-3 shrink-0 border-b border-white/[0.06]", children: [nav_stack.length > 1 && (_jsx("button", { type: "button", onClick: pop_nav, className: "h-7 w-7 shrink-0 rounded-md flex items-center justify-center text-[var(--ihelp-muted,var(--muted-foreground))] hover:text-[var(--ihelp-fg,var(--foreground))] hover:bg-white/[0.06] transition-colors", children: _jsx(ChevronLeft, { className: "h-4 w-4" }) })), _jsxs("div", { className: "relative flex-1 min-w-0", children: [_jsx(Search, { className: "absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-[var(--ihelp-muted,var(--muted-foreground))]" }), _jsx(Input, { placeholder: `${labels.search_placeholder} ${shortcut_hint}`, value: search.query, onChange: (e) => handleSearchChange(e.target.value), className: "pl-10 h-10 rounded-lg !border !border-white/[0.08] !bg-transparent shadow-none focus-visible:ring-1 focus-visible:ring-[var(--ihelp-primary,#38bdf8)]/40 focus-visible:border-[var(--ihelp-primary,#38bdf8)]/30 !text-[var(--ihelp-fg,inherit)] placeholder:!text-[var(--ihelp-muted,var(--muted-foreground))] transition-all" })] }), _jsx("button", { type: "button", onClick: toggleBrowse, className: cn('h-8 w-8 shrink-0 rounded-md flex items-center justify-center transition-colors', current_nav?.view === 'browse'
326
+ ? 'bg-[var(--ihelp-primary,#38bdf8)]/15 text-[var(--ihelp-primary,#38bdf8)]'
327
+ : 'text-[var(--ihelp-muted,var(--muted-foreground))] hover:text-[var(--ihelp-fg,var(--foreground))] hover:bg-white/[0.06]'), title: labels.browse_all, children: _jsx(FolderTree, { className: "h-4 w-4" }) })] }), current_nav?.view === 'context_home' && (_jsx("div", { className: "shrink-0 px-3 py-1.5 border-b border-white/[0.06]", children: _jsxs("p", { className: "text-[11px] text-[var(--ihelp-primary,#38bdf8)] font-medium tracking-wide", children: [labels.showing_help_for, " ", _jsx("span", { className: "font-semibold", children: current_nav.context_key?.replace(/\./g, ' \u203A ') ?? '' })] }) })), _jsx("div", { className: "flex-1 overflow-y-auto px-3 py-2 flex flex-col gap-1", children: (search.loading || (current_nav?.view === 'context_home' && context_result.loading)) ? (_jsx("div", { className: "flex items-center justify-center py-12", children: _jsxs("div", { className: "flex flex-col items-center gap-2", children: [_jsx("div", { className: "h-5 w-5 border-2 border-[var(--ihelp-primary,#38bdf8)]/30 border-t-[var(--ihelp-primary,#38bdf8)] rounded-full animate-spin" }), _jsx("p", { className: "text-xs text-[var(--ihelp-muted,var(--muted-foreground))]/60", children: labels.loading })] }) })) : current_nav?.view === 'browse' ? (tree.length === 0 ? (_jsx("p", { className: "text-sm text-[var(--ihelp-muted,var(--muted-foreground))]/60 p-4 text-center", children: labels.no_topics })) : (tree.map((node) => (_jsx(TopicTreeItem, { node: node, depth: 0, selected_id: selected_topic_id, onSelect: (id) => setSelectedTopicId(id) }, node.id))))) : left_topics.length === 0 ? (_jsx("p", { className: "text-sm text-[var(--ihelp-muted,var(--muted-foreground))]/60 p-4 text-center", children: search.query ? labels.no_results : labels.no_topics })) : ((() => {
328
+ const grouped = groupByCategory(left_topics);
329
+ const entries = Array.from(grouped.entries());
330
+ // Single category: show cards directly without accordion
331
+ if (entries.length === 1) {
332
+ return (_jsx("div", { className: "flex flex-col gap-1.5", children: entries[0][1].map((topic) => (_jsx(TopicCard, { topic: topic, is_selected: selected_topic_id === topic.id, onSelect: (id) => setSelectedTopicId(id) }, topic.id))) }));
333
+ }
334
+ // Multiple categories: use accordion
335
+ return entries.map(([category, topics], idx) => (_jsx(CategoryAccordion, { category: category, topics: topics, selected_topic_id: selected_topic_id, onSelect: (id) => setSelectedTopicId(id), default_open: idx === 0 }, category)));
336
+ })()) })] }), _jsx("div", { className: "flex-1 overflow-y-auto p-5", style: {
337
+ backgroundImage: 'linear-gradient(155deg, rgba(80,200,255,0.22) 0%, rgba(60,160,210,0.13) 40%, rgba(140,190,220,0.08) 100%)',
338
+ backgroundColor: 'rgba(255,255,255,0.09)',
339
+ }, children: selected_topic ? (_jsx(IhelpDetailPanel, { topic: selected_topic, onNavigate: handleNavigate, asset_base_url: asset_base_url, provider_scope_id: provider_scope_id, labels: labels })) : (_jsx("div", { className: "flex items-center justify-center h-full text-sm text-[var(--ihelp-muted,var(--muted-foreground))]", children: labels.select_prompt })) })] }));
340
+ }
341
+ // ---------------------------------------------------------------------------
342
+ // IhelpSearchDialog
343
+ // ---------------------------------------------------------------------------
344
+ export function IhelpSearchDialog({ open, onOpenChange, initial_context_key, className, }) {
345
+ const ctx = useIhelpContext();
346
+ const { search } = ctx;
347
+ // Navigation stack
348
+ const [nav_stack, setNavStack] = useState([]);
349
+ const [selected_topic_id, setSelectedTopicId] = useState(null);
350
+ // Context-scoped topics (only fetched when context_key is provided)
351
+ const context_key_for_fetch = initial_context_key ?? '__none__';
352
+ const context_result = use_ihelp(context_key_for_fetch, ctx.api_base_url, ctx.scope_id);
353
+ // Reset state when dialog opens
354
+ useEffect(() => {
355
+ if (open) {
356
+ setSelectedTopicId(null);
357
+ search.set_query('');
358
+ if (initial_context_key) {
359
+ setNavStack([{ view: 'context_home', context_key: initial_context_key }]);
360
+ }
361
+ else {
362
+ setNavStack([{ view: 'browse' }]);
363
+ }
364
+ }
365
+ }, [open, initial_context_key]); // eslint-disable-line react-hooks/exhaustive-deps
366
+ // Current nav state
367
+ const current_nav = nav_stack.length > 0 ? nav_stack[nav_stack.length - 1] : null;
368
+ // Push a new state onto the stack
369
+ const push_nav = useCallback((state) => {
370
+ setNavStack((prev) => [...prev, state]);
371
+ }, []);
372
+ // Pop back
373
+ const pop_nav = useCallback(() => {
374
+ setNavStack((prev) => {
375
+ if (prev.length <= 1)
376
+ return prev;
377
+ return prev.slice(0, -1);
378
+ });
379
+ setSelectedTopicId(null);
380
+ }, []);
381
+ // Resolve selected topic from all_topics
382
+ const selected_topic = useMemo(() => {
383
+ if (!selected_topic_id)
384
+ return null;
385
+ return search.all_topics.find((t) => t.id === selected_topic_id) ?? null;
386
+ }, [selected_topic_id, search.all_topics]);
387
+ // Build tree for browse view
388
+ const tree = useMemo(() => buildTree(search.all_topics), [search.all_topics]);
389
+ // Handle search input change
390
+ const handleSearchChange = useCallback((value) => {
391
+ search.set_query(value);
392
+ if (value.trim()) {
393
+ if (current_nav?.view !== 'search') {
394
+ push_nav({ view: 'search', query: value });
395
+ }
396
+ }
397
+ else if (current_nav?.view === 'search') {
398
+ pop_nav();
399
+ }
400
+ }, [current_nav, push_nav, pop_nav, search]);
401
+ // Handle topic selection from detail panel child navigation
402
+ const handleNavigate = useCallback((topic_id) => {
403
+ setSelectedTopicId(topic_id);
404
+ }, []);
405
+ // Toggle browse
406
+ const toggleBrowse = useCallback(() => {
407
+ if (current_nav?.view === 'browse') {
408
+ pop_nav();
409
+ }
410
+ else {
411
+ push_nav({ view: 'browse' });
412
+ }
413
+ }, [current_nav, push_nav, pop_nav]);
414
+ const bodyProps = {
415
+ search,
416
+ nav_stack,
417
+ current_nav,
418
+ selected_topic_id,
419
+ setSelectedTopicId,
420
+ push_nav,
421
+ pop_nav,
422
+ context_result,
423
+ tree,
424
+ selected_topic,
425
+ handleSearchChange,
426
+ handleNavigate,
427
+ toggleBrowse,
428
+ asset_base_url: ctx.asset_base_url,
429
+ provider_scope_id: ctx.scope_id,
430
+ theme: ctx.theme,
431
+ labels: ctx.labels,
432
+ };
433
+ // Resolve HazoUiDialog (async loaded optional dep — client-only)
434
+ const [HazoDialog, setHazoDialog] = useState(null);
435
+ useEffect(() => {
436
+ if (_hazoUiResolved) {
437
+ if (_HazoUiDialogComponent)
438
+ setHazoDialog(() => _HazoUiDialogComponent);
439
+ return;
440
+ }
441
+ getHazoUiPromise().then(() => {
442
+ if (_HazoUiDialogComponent)
443
+ setHazoDialog(() => _HazoUiDialogComponent);
444
+ });
445
+ }, []);
446
+ const theme_style = themeToStyle(ctx.theme);
447
+ // Use HazoUiDialog if available, otherwise fallback to built-in dialog
448
+ if (HazoDialog) {
449
+ return (_jsx(HazoDialog, { open: open, onOpenChange: onOpenChange, title: "Help", sizeWidth: "min(95vw, 1100px)", sizeHeight: "min(85vh, 640px)", fixedSize: true, showCancelButton: false, actionButtonText: "", footerContent: null, openAnimation: "fade", closeAnimation: "fade", className: className, contentClassName: "!p-0 !overflow-hidden", headerClassName: "!hidden", footerClassName: "!hidden", bodyBackgroundColor: ctx.theme?.background, footerBackgroundColor: ctx.theme?.background, style: ctx.theme?.background ? { backgroundColor: ctx.theme.background, color: ctx.theme.foreground } : undefined, children: _jsx(SearchDialogBody, { ...bodyProps }) }));
450
+ }
451
+ // Fallback: use the built-in shadcn Dialog
452
+ return (_jsx(Dialog, { open: open, onOpenChange: onOpenChange, children: _jsxs(DialogContent, { className: cn('max-w-[1100px] w-[95vw] h-[640px] p-0 gap-0 flex flex-col overflow-hidden !rounded-2xl !border-white/10 !bg-transparent', className), style: theme_style, children: [_jsx(DialogTitle, { className: "sr-only", children: "Help search" }), _jsx(SearchDialogBody, { ...bodyProps })] }) }));
453
+ }
454
+ //# sourceMappingURL=ihelp_search_dialog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ihelp_search_dialog.js","sourceRoot":"","sources":["../../src/components/ihelp_search_dialog.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export { IhelpProvider, useIhelpContext } from './ihelp_provider.js';
2
+ export { IhelpIcon } from './ihelp_icon.js';
3
+ export { IhelpDetailPanel } from './ihelp_detail_panel.js';
4
+ export { IhelpSearchDialog } from './ihelp_search_dialog.js';
5
+ export { IhelpRichEditor } from './ihelp_rich_editor.js';
6
+ export { IhelpEditor } from './ihelp_editor.js';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACrE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,7 @@
1
+ export { IhelpProvider, useIhelpContext } from './ihelp_provider.js';
2
+ export { IhelpIcon } from './ihelp_icon.js';
3
+ export { IhelpDetailPanel } from './ihelp_detail_panel.js';
4
+ export { IhelpSearchDialog } from './ihelp_search_dialog.js';
5
+ export { IhelpRichEditor } from './ihelp_rich_editor.js';
6
+ export { IhelpEditor } from './ihelp_editor.js';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACrE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { Node } from '@tiptap/core';
2
+ declare module '@tiptap/core' {
3
+ interface Commands<ReturnType> {
4
+ resizableImage: {
5
+ setImage: (options: {
6
+ src: string;
7
+ alt?: string;
8
+ title?: string;
9
+ width?: number;
10
+ height?: number;
11
+ align?: string;
12
+ }) => ReturnType;
13
+ };
14
+ }
15
+ }
16
+ export declare const ResizableImage: Node<any, any>;
17
+ //# sourceMappingURL=resizable_image.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resizable_image.d.ts","sourceRoot":"","sources":["../../src/components/resizable_image.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,IAAI,EAAsC,MAAM,cAAc,CAAC;AAGxE,OAAO,QAAQ,cAAc,CAAC;IAC5B,UAAU,QAAQ,CAAC,UAAU;QAC3B,cAAc,EAAE;YACd,QAAQ,EAAE,CAAC,OAAO,EAAE;gBAAE,GAAG,EAAE,MAAM,CAAC;gBAAC,GAAG,CAAC,EAAE,MAAM,CAAC;gBAAC,KAAK,CAAC,EAAE,MAAM,CAAC;gBAAC,KAAK,CAAC,EAAE,MAAM,CAAC;gBAAC,MAAM,CAAC,EAAE,MAAM,CAAC;gBAAC,KAAK,CAAC,EAAE,MAAM,CAAA;aAAE,KAAK,UAAU,CAAC;SACnI,CAAC;KACH;CACF;AA+LD,eAAO,MAAM,cAAc,gBA0DzB,CAAC"}