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.
- package/config/hazo_ihelp_config.ini +9 -0
- package/config/hazo_ihelp_config.ini.sample +23 -0
- package/dist/api/create_config_handler.d.ts +27 -0
- package/dist/api/create_config_handler.d.ts.map +1 -0
- package/dist/api/create_config_handler.js +122 -0
- package/dist/api/create_config_handler.js.map +1 -0
- package/dist/api/create_ihelp_handler.d.ts +60 -0
- package/dist/api/create_ihelp_handler.d.ts.map +1 -0
- package/dist/api/create_ihelp_handler.js +378 -0
- package/dist/api/create_ihelp_handler.js.map +1 -0
- package/dist/api/image_upload_handler.d.ts +29 -0
- package/dist/api/image_upload_handler.d.ts.map +1 -0
- package/dist/api/image_upload_handler.js +149 -0
- package/dist/api/image_upload_handler.js.map +1 -0
- package/dist/api/index.d.ts +6 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/index.js +4 -0
- package/dist/api/index.js.map +1 -0
- package/dist/components/editor/editor_collapsible_section.d.ts +11 -0
- package/dist/components/editor/editor_collapsible_section.d.ts.map +1 -0
- package/dist/components/editor/editor_collapsible_section.js +10 -0
- package/dist/components/editor/editor_collapsible_section.js.map +1 -0
- package/dist/components/editor/editor_context_keys_section.d.ts +13 -0
- package/dist/components/editor/editor_context_keys_section.d.ts.map +1 -0
- package/dist/components/editor/editor_context_keys_section.js +99 -0
- package/dist/components/editor/editor_context_keys_section.js.map +1 -0
- package/dist/components/editor/editor_form.d.ts +27 -0
- package/dist/components/editor/editor_form.d.ts.map +1 -0
- package/dist/components/editor/editor_form.js +25 -0
- package/dist/components/editor/editor_form.js.map +1 -0
- package/dist/components/editor/editor_import_export.d.ts +18 -0
- package/dist/components/editor/editor_import_export.d.ts.map +1 -0
- package/dist/components/editor/editor_import_export.js +117 -0
- package/dist/components/editor/editor_import_export.js.map +1 -0
- package/dist/components/editor/editor_tags_section.d.ts +10 -0
- package/dist/components/editor/editor_tags_section.d.ts.map +1 -0
- package/dist/components/editor/editor_tags_section.js +33 -0
- package/dist/components/editor/editor_tags_section.js.map +1 -0
- package/dist/components/editor/editor_topic_list.d.ts +14 -0
- package/dist/components/editor/editor_topic_list.d.ts.map +1 -0
- package/dist/components/editor/editor_topic_list.js +58 -0
- package/dist/components/editor/editor_topic_list.js.map +1 -0
- package/dist/components/editor/editor_topic_list_item.d.ts +10 -0
- package/dist/components/editor/editor_topic_list_item.d.ts.map +1 -0
- package/dist/components/editor/editor_topic_list_item.js +10 -0
- package/dist/components/editor/editor_topic_list_item.js.map +1 -0
- package/dist/components/ihelp_detail_panel.d.ts +16 -0
- package/dist/components/ihelp_detail_panel.d.ts.map +1 -0
- package/dist/components/ihelp_detail_panel.js +46 -0
- package/dist/components/ihelp_detail_panel.js.map +1 -0
- package/dist/components/ihelp_editor.d.ts +3 -0
- package/dist/components/ihelp_editor.d.ts.map +1 -0
- package/dist/components/ihelp_editor.js +169 -0
- package/dist/components/ihelp_editor.js.map +1 -0
- package/dist/components/ihelp_icon.d.ts +7 -0
- package/dist/components/ihelp_icon.d.ts.map +1 -0
- package/dist/components/ihelp_icon.js +14 -0
- package/dist/components/ihelp_icon.js.map +1 -0
- package/dist/components/ihelp_provider.d.ts +21 -0
- package/dist/components/ihelp_provider.d.ts.map +1 -0
- package/dist/components/ihelp_provider.js +83 -0
- package/dist/components/ihelp_provider.js.map +1 -0
- package/dist/components/ihelp_rich_editor.d.ts +15 -0
- package/dist/components/ihelp_rich_editor.d.ts.map +1 -0
- package/dist/components/ihelp_rich_editor.js +182 -0
- package/dist/components/ihelp_rich_editor.js.map +1 -0
- package/dist/components/ihelp_search_dialog.d.ts +3 -0
- package/dist/components/ihelp_search_dialog.d.ts.map +1 -0
- package/dist/components/ihelp_search_dialog.js +454 -0
- package/dist/components/ihelp_search_dialog.js.map +1 -0
- package/dist/components/index.d.ts +7 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/index.js +7 -0
- package/dist/components/index.js.map +1 -0
- package/dist/components/resizable_image.d.ts +17 -0
- package/dist/components/resizable_image.d.ts.map +1 -0
- package/dist/components/resizable_image.js +170 -0
- package/dist/components/resizable_image.js.map +1 -0
- package/dist/components/ui/badge.d.ts +9 -0
- package/dist/components/ui/badge.d.ts.map +1 -0
- package/dist/components/ui/badge.js +17 -0
- package/dist/components/ui/badge.js.map +1 -0
- package/dist/components/ui/button.d.ts +10 -0
- package/dist/components/ui/button.d.ts.map +1 -0
- package/dist/components/ui/button.js +50 -0
- package/dist/components/ui/button.js.map +1 -0
- package/dist/components/ui/dialog.d.ts +20 -0
- package/dist/components/ui/dialog.d.ts.map +1 -0
- package/dist/components/ui/dialog.js +26 -0
- package/dist/components/ui/dialog.js.map +1 -0
- package/dist/components/ui/input.d.ts +6 -0
- package/dist/components/ui/input.d.ts.map +1 -0
- package/dist/components/ui/input.js +12 -0
- package/dist/components/ui/input.js.map +1 -0
- package/dist/components/ui/label.d.ts +6 -0
- package/dist/components/ui/label.d.ts.map +1 -0
- package/dist/components/ui/label.js +12 -0
- package/dist/components/ui/label.js.map +1 -0
- package/dist/components/ui/popover.d.ts +7 -0
- package/dist/components/ui/popover.d.ts.map +1 -0
- package/dist/components/ui/popover.js +13 -0
- package/dist/components/ui/popover.js.map +1 -0
- package/dist/components/ui/select.d.ts +14 -0
- package/dist/components/ui/select.d.ts.map +1 -0
- package/dist/components/ui/select.js +29 -0
- package/dist/components/ui/select.js.map +1 -0
- package/dist/components/ui/switch.d.ts +5 -0
- package/dist/components/ui/switch.d.ts.map +1 -0
- package/dist/components/ui/switch.js +11 -0
- package/dist/components/ui/switch.js.map +1 -0
- package/dist/components/ui/textarea.d.ts +6 -0
- package/dist/components/ui/textarea.d.ts.map +1 -0
- package/dist/components/ui/textarea.js +12 -0
- package/dist/components/ui/textarea.js.map +1 -0
- package/dist/config/parse_config.d.ts +10 -0
- package/dist/config/parse_config.d.ts.map +1 -0
- package/dist/config/parse_config.js +76 -0
- package/dist/config/parse_config.js.map +1 -0
- package/dist/hooks/index.d.ts +6 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +5 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/use_ihelp.d.ts +3 -0
- package/dist/hooks/use_ihelp.d.ts.map +1 -0
- package/dist/hooks/use_ihelp.js +52 -0
- package/dist/hooks/use_ihelp.js.map +1 -0
- package/dist/hooks/use_ihelp_config.d.ts +19 -0
- package/dist/hooks/use_ihelp_config.d.ts.map +1 -0
- package/dist/hooks/use_ihelp_config.js +62 -0
- package/dist/hooks/use_ihelp_config.js.map +1 -0
- package/dist/hooks/use_ihelp_editor.d.ts +3 -0
- package/dist/hooks/use_ihelp_editor.d.ts.map +1 -0
- package/dist/hooks/use_ihelp_editor.js +93 -0
- package/dist/hooks/use_ihelp_editor.js.map +1 -0
- package/dist/hooks/use_ihelp_search.d.ts +3 -0
- package/dist/hooks/use_ihelp_search.d.ts.map +1 -0
- package/dist/hooks/use_ihelp_search.js +68 -0
- package/dist/hooks/use_ihelp_search.js.map +1 -0
- package/dist/index.client.d.ts +13 -0
- package/dist/index.client.d.ts.map +1 -0
- package/dist/index.client.js +15 -0
- package/dist/index.client.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -0
- package/dist/types/index.d.ts +595 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +8 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/cn.d.ts +3 -0
- package/dist/utils/cn.d.ts.map +1 -0
- package/dist/utils/cn.js +6 -0
- package/dist/utils/cn.js.map +1 -0
- package/migrations/001_create_ihelp_tables.sql +58 -0
- package/package.json +108 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"editor_import_export.js","sourceRoot":"","sources":["../../../src/components/editor/editor_import_export.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { IhelpTagInput } from '../../types/index.js';
|
|
2
|
+
interface EditorTagsSectionProps {
|
|
3
|
+
tags: IhelpTagInput[];
|
|
4
|
+
defaultOpen?: boolean;
|
|
5
|
+
onAdd: (tag: IhelpTagInput) => void;
|
|
6
|
+
onRemove: (index: number) => void;
|
|
7
|
+
}
|
|
8
|
+
export declare function EditorTagsSection({ tags, defaultOpen, onAdd, onRemove }: EditorTagsSectionProps): import("react/jsx-runtime").JSX.Element;
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=editor_tags_section.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"editor_tags_section.d.ts","sourceRoot":"","sources":["../../../src/components/editor/editor_tags_section.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAO1D,UAAU,sBAAsB;IAC9B,IAAI,EAAE,aAAa,EAAE,CAAC;IACtB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,KAAK,EAAE,CAAC,GAAG,EAAE,aAAa,KAAK,IAAI,CAAC;IACpC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACnC;AAED,wBAAgB,iBAAiB,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,sBAAsB,2CAsF/F"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useState, useCallback } from 'react';
|
|
4
|
+
import { Tag, X } from 'lucide-react';
|
|
5
|
+
import { Badge } from '../ui/badge.js';
|
|
6
|
+
import { Button } from '../ui/button.js';
|
|
7
|
+
import { Input } from '../ui/input.js';
|
|
8
|
+
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '../ui/select.js';
|
|
9
|
+
import { CollapsibleSection } from './editor_collapsible_section.js';
|
|
10
|
+
export function EditorTagsSection({ tags, defaultOpen, onAdd, onRemove }) {
|
|
11
|
+
const [label, set_label] = useState('');
|
|
12
|
+
const [variant, set_variant] = useState('default');
|
|
13
|
+
const [icon, set_icon] = useState('');
|
|
14
|
+
const handle_add = useCallback(() => {
|
|
15
|
+
if (!label.trim())
|
|
16
|
+
return;
|
|
17
|
+
onAdd({
|
|
18
|
+
label: label.trim(),
|
|
19
|
+
variant,
|
|
20
|
+
icon: icon.trim() || null,
|
|
21
|
+
});
|
|
22
|
+
set_label('');
|
|
23
|
+
set_icon('');
|
|
24
|
+
set_variant('default');
|
|
25
|
+
}, [label, variant, icon, onAdd]);
|
|
26
|
+
return (_jsx(CollapsibleSection, { icon: _jsx(Tag, { className: "h-3.5 w-3.5" }), label: "Tags", badge: tags.length > 0 ? String(tags.length) : undefined, defaultOpen: defaultOpen, children: _jsxs("div", { className: "space-y-3", children: [tags.length > 0 && (_jsx("div", { className: "flex flex-wrap gap-1.5", children: tags.map((tag, idx) => (_jsxs(Badge, { variant: tag.variant ?? 'default', children: [tag.label, _jsx("button", { type: "button", className: "ml-1 rounded-full hover:bg-black/10", onClick: () => onRemove(idx), title: "Remove tag", children: _jsx(X, { className: "h-3 w-3" }) })] }, idx))) })), _jsxs("div", { className: "flex items-end gap-2", children: [_jsx(Input, { value: label, onChange: (e) => set_label(e.target.value), placeholder: "Tag label", className: "h-8 flex-1 text-xs", onKeyDown: (e) => {
|
|
27
|
+
if (e.key === 'Enter') {
|
|
28
|
+
e.preventDefault();
|
|
29
|
+
handle_add();
|
|
30
|
+
}
|
|
31
|
+
} }), _jsxs(Select, { value: variant ?? 'default', onValueChange: (v) => set_variant(v), children: [_jsx(SelectTrigger, { className: "h-8 w-28 text-xs", children: _jsx(SelectValue, {}) }), _jsxs(SelectContent, { children: [_jsx(SelectItem, { value: "default", children: "Default" }), _jsx(SelectItem, { value: "success", children: "Success" }), _jsx(SelectItem, { value: "warning", children: "Warning" }), _jsx(SelectItem, { value: "info", children: "Info" })] })] }), _jsx(Input, { value: icon, onChange: (e) => set_icon(e.target.value), placeholder: "Icon", className: "h-8 w-20 text-xs" }), _jsx(Button, { type: "button", size: "sm", variant: "outline", className: "h-8", onClick: handle_add, disabled: !label.trim(), children: "Add" })] })] }) }));
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=editor_tags_section.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"editor_tags_section.js","sourceRoot":"","sources":["../../../src/components/editor/editor_tags_section.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { IhelpTopic } from '../../types/index.js';
|
|
2
|
+
interface EditorTopicListProps {
|
|
3
|
+
topics: IhelpTopic[];
|
|
4
|
+
loading: boolean;
|
|
5
|
+
error: string | null;
|
|
6
|
+
selected_id: string | null;
|
|
7
|
+
onSelect: (id: string) => void;
|
|
8
|
+
onNew: () => void;
|
|
9
|
+
onExport: () => void;
|
|
10
|
+
onImport: () => void;
|
|
11
|
+
}
|
|
12
|
+
export declare function EditorTopicList({ topics, loading, error, selected_id, onSelect, onNew, onExport, onImport, }: EditorTopicListProps): import("react/jsx-runtime").JSX.Element;
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=editor_topic_list.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"editor_topic_list.d.ts","sourceRoot":"","sources":["../../../src/components/editor/editor_topic_list.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAOvD,UAAU,oBAAoB;IAC5B,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,wBAAgB,eAAe,CAAC,EAC9B,MAAM,EACN,OAAO,EACP,KAAK,EACL,WAAW,EACX,QAAQ,EACR,KAAK,EACL,QAAQ,EACR,QAAQ,GACT,EAAE,oBAAoB,2CA2ItB"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useState, useMemo, useCallback, useRef, useEffect } from 'react';
|
|
4
|
+
import { Plus, Search, MoreVertical } from 'lucide-react';
|
|
5
|
+
import { Button } from '../ui/button.js';
|
|
6
|
+
import { Input } from '../ui/input.js';
|
|
7
|
+
import { TopicListItem } from './editor_topic_list_item.js';
|
|
8
|
+
import { ImportExportButtons } from './editor_import_export.js';
|
|
9
|
+
export function EditorTopicList({ topics, loading, error, selected_id, onSelect, onNew, onExport, onImport, }) {
|
|
10
|
+
const [filter, set_filter] = useState('');
|
|
11
|
+
const [menu_open, set_menu_open] = useState(false);
|
|
12
|
+
const menu_ref = useRef(null);
|
|
13
|
+
// Close menu on outside click
|
|
14
|
+
useEffect(() => {
|
|
15
|
+
if (!menu_open)
|
|
16
|
+
return;
|
|
17
|
+
const handle = (e) => {
|
|
18
|
+
if (menu_ref.current && !menu_ref.current.contains(e.target)) {
|
|
19
|
+
set_menu_open(false);
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
document.addEventListener('mousedown', handle);
|
|
23
|
+
return () => document.removeEventListener('mousedown', handle);
|
|
24
|
+
}, [menu_open]);
|
|
25
|
+
const grouped_topics = useMemo(() => {
|
|
26
|
+
const lc = filter.toLowerCase();
|
|
27
|
+
const filtered = lc
|
|
28
|
+
? topics.filter((t) => t.title.toLowerCase().includes(lc) ||
|
|
29
|
+
t.category.toLowerCase().includes(lc))
|
|
30
|
+
: topics;
|
|
31
|
+
const groups = {};
|
|
32
|
+
for (const t of filtered) {
|
|
33
|
+
const cat = t.category || 'Uncategorised';
|
|
34
|
+
if (!groups[cat])
|
|
35
|
+
groups[cat] = [];
|
|
36
|
+
groups[cat].push(t);
|
|
37
|
+
}
|
|
38
|
+
for (const cat of Object.keys(groups)) {
|
|
39
|
+
groups[cat].sort((a, b) => a.sort_order - b.sort_order);
|
|
40
|
+
}
|
|
41
|
+
return groups;
|
|
42
|
+
}, [topics, filter]);
|
|
43
|
+
const get_depth = useCallback((topic) => {
|
|
44
|
+
let depth = 0;
|
|
45
|
+
let pid = topic.parent_id;
|
|
46
|
+
while (pid) {
|
|
47
|
+
depth++;
|
|
48
|
+
const parent = topics.find((t) => t.id === pid);
|
|
49
|
+
pid = parent?.parent_id ?? null;
|
|
50
|
+
}
|
|
51
|
+
return depth;
|
|
52
|
+
}, [topics]);
|
|
53
|
+
const topic_count = topics.length;
|
|
54
|
+
return (_jsxs("div", { className: "flex w-[320px] min-w-[260px] max-w-[380px] flex-col border-r bg-muted/20", children: [_jsxs("div", { className: "flex items-center gap-2 border-b px-3 py-3", children: [_jsxs("div", { className: "relative flex-1", children: [_jsx(Search, { className: "absolute left-2.5 top-2.5 h-4 w-4 text-muted-foreground" }), _jsx(Input, { placeholder: "Filter topics...", value: filter, onChange: (e) => set_filter(e.target.value), className: "h-9 pl-8 text-sm" })] }), _jsxs(Button, { size: "sm", onClick: onNew, title: "New Topic", className: "h-9 shrink-0", children: [_jsx(Plus, { className: "mr-1 h-4 w-4" }), "New"] }), _jsxs("div", { className: "relative", ref: menu_ref, children: [_jsx(Button, { size: "sm", variant: "ghost", className: "h-9 w-9 shrink-0 p-0", onClick: () => set_menu_open((v) => !v), title: "More actions", children: _jsx(MoreVertical, { className: "h-4 w-4" }) }), menu_open && (_jsx("div", { className: "absolute right-0 top-full z-20 mt-1 w-44 rounded-md border bg-background p-1 shadow-lg", children: _jsx(ImportExportButtons, { onExport: () => { onExport(); set_menu_open(false); }, onImport: () => { onImport(); set_menu_open(false); } }) }))] })] }), _jsx("div", { className: "flex items-center justify-between border-b px-3 py-1.5", children: _jsxs("span", { className: "text-[11px] font-medium text-muted-foreground", children: [topic_count, " topic", topic_count !== 1 ? 's' : ''] }) }), _jsxs("div", { className: "flex-1 overflow-y-auto", children: [loading && (_jsx("p", { className: "p-4 text-center text-sm text-muted-foreground", children: "Loading topics..." })), error && (_jsx("p", { className: "p-4 text-center text-sm text-destructive", children: error })), !loading && !error && Object.keys(grouped_topics).length === 0 && (_jsx("p", { className: "p-4 text-center text-sm text-muted-foreground", children: filter ? 'No matching topics.' : 'No topics yet. Click "New" to create one.' })), Object.entries(grouped_topics)
|
|
55
|
+
.sort(([a], [b]) => a.localeCompare(b))
|
|
56
|
+
.map(([category, cat_topics]) => (_jsxs("div", { children: [_jsx("div", { className: "sticky top-0 z-10 bg-muted/40 backdrop-blur-sm px-3 py-1.5", children: _jsx("p", { className: "text-[11px] font-bold uppercase tracking-widest text-muted-foreground", children: category }) }), _jsx("div", { className: "px-1 pb-1", children: cat_topics.map((topic) => (_jsx(TopicListItem, { topic: topic, depth: get_depth(topic), selected: topic.id === selected_id, onSelect: onSelect }, topic.id))) })] }, category)))] })] }));
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=editor_topic_list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"editor_topic_list.js","sourceRoot":"","sources":["../../../src/components/editor/editor_topic_list.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { IhelpTopic } from '../../types/index.js';
|
|
2
|
+
interface TopicListItemProps {
|
|
3
|
+
topic: IhelpTopic;
|
|
4
|
+
depth: number;
|
|
5
|
+
selected: boolean;
|
|
6
|
+
onSelect: (id: string) => void;
|
|
7
|
+
}
|
|
8
|
+
export declare function TopicListItem({ topic, depth, selected, onSelect }: TopicListItemProps): import("react/jsx-runtime").JSX.Element;
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=editor_topic_list_item.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"editor_topic_list_item.d.ts","sourceRoot":"","sources":["../../../src/components/editor/editor_topic_list_item.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAGvD,UAAU,kBAAkB;IAC1B,KAAK,EAAE,UAAU,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;CAChC;AAED,wBAAgB,aAAa,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,kBAAkB,2CAuBrF"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { CheckCircle } from 'lucide-react';
|
|
4
|
+
import { cn } from '../../utils/cn.js';
|
|
5
|
+
export function TopicListItem({ topic, depth, selected, onSelect }) {
|
|
6
|
+
return (_jsxs("button", { type: "button", onClick: () => onSelect(topic.id), className: cn('group flex w-full items-center gap-2.5 rounded-md px-3 py-2 text-left text-sm transition-all duration-150', selected
|
|
7
|
+
? 'bg-accent text-accent-foreground border-l-2 border-primary pl-[10px]'
|
|
8
|
+
: 'border-l-2 border-transparent hover:bg-muted/60'), style: { paddingLeft: `${(selected ? 10 : 12) + depth * 16}px` }, children: [topic.is_published ? (_jsx(CheckCircle, { className: "h-3.5 w-3.5 shrink-0 text-emerald-500" })) : (_jsx("span", { className: "inline-flex h-3.5 shrink-0 items-center rounded bg-muted px-1 text-[9px] font-bold uppercase tracking-wider text-muted-foreground", children: "Draft" })), _jsx("span", { className: "truncate", children: topic.title })] }));
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=editor_topic_list_item.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"editor_topic_list_item.js","sourceRoot":"","sources":["../../../src/components/editor/editor_topic_list_item.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAGb,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,OAAO,EAAE,EAAE,EAAE,MAAM,mBAAmB,CAAC;AASvC,MAAM,UAAU,aAAa,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAsB;IACpF,OAAO,CACL,kBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,EACjC,SAAS,EAAE,EAAE,CACX,2GAA2G,EAC3G,QAAQ;YACN,CAAC,CAAC,sEAAsE;YACxE,CAAC,CAAC,iDAAiD,CACtD,EACD,KAAK,EAAE,EAAE,WAAW,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,GAAG,EAAE,IAAI,EAAE,aAE/D,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CACpB,KAAC,WAAW,IAAC,SAAS,EAAC,uCAAuC,GAAG,CAClE,CAAC,CAAC,CAAC,CACF,eAAM,SAAS,EAAC,mIAAmI,sBAE5I,CACR,EACD,eAAM,SAAS,EAAC,UAAU,YAAE,KAAK,CAAC,KAAK,GAAQ,IACxC,CACV,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { IhelpDetailPanelProps, IhelpLabels } from '../types/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Rich detail view for a single help topic.
|
|
4
|
+
*
|
|
5
|
+
* Renders a polished, readable layout with:
|
|
6
|
+
* - "More Info:" header with title
|
|
7
|
+
* - Tag badges
|
|
8
|
+
* - Rich HTML content styled with Tailwind Typography (prose)
|
|
9
|
+
* - Child topic links
|
|
10
|
+
*/
|
|
11
|
+
export declare function IhelpDetailPanel({ topic, onNavigate, className, asset_base_url, provider_scope_id, labels, }: IhelpDetailPanelProps & {
|
|
12
|
+
asset_base_url?: string;
|
|
13
|
+
provider_scope_id?: string | null;
|
|
14
|
+
labels?: Partial<IhelpLabels>;
|
|
15
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
16
|
+
//# sourceMappingURL=ihelp_detail_panel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ihelp_detail_panel.d.ts","sourceRoot":"","sources":["../../src/components/ihelp_detail_panel.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,qBAAqB,EAAE,WAAW,EAAc,MAAM,mBAAmB,CAAC;AAgCxF;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,KAAK,EACL,UAAU,EACV,SAAS,EACT,cAAc,EACd,iBAAiB,EACjB,MAAM,GACP,EAAE,qBAAqB,GAAG;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,MAAM,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;CAC/B,2CAiFA"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import { useMemo } from 'react';
|
|
4
|
+
import { cn } from '../utils/cn.js';
|
|
5
|
+
import { Badge } from './ui/badge.js';
|
|
6
|
+
/**
|
|
7
|
+
* Resolve image src attributes in HTML content.
|
|
8
|
+
*
|
|
9
|
+
* Images in help content use relative paths like `img/diagram.png`.
|
|
10
|
+
* This function rewrites them to the full URL based on the asset base
|
|
11
|
+
* and scope directory:
|
|
12
|
+
* - Scoped topic: {asset_base_url}/{scope_id}/img/diagram.png
|
|
13
|
+
* - Global topic: {asset_base_url}/global/img/diagram.png
|
|
14
|
+
*/
|
|
15
|
+
function resolveImageUrls(html, asset_base_url, topic_scope_id) {
|
|
16
|
+
if (!asset_base_url)
|
|
17
|
+
return html;
|
|
18
|
+
const scope_dir = topic_scope_id ?? 'global';
|
|
19
|
+
const base = asset_base_url.replace(/\/+$/, '');
|
|
20
|
+
return html.replace(/(<img\s[^>]*\bsrc=")([^"]+)(")/gi, (_match, before, src, after) => {
|
|
21
|
+
if (/^(https?:\/\/|\/\/|data:|\/)/i.test(src)) {
|
|
22
|
+
return `${before}${src}${after}`;
|
|
23
|
+
}
|
|
24
|
+
return `${before}${base}/${scope_dir}/${src}${after}`;
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Rich detail view for a single help topic.
|
|
29
|
+
*
|
|
30
|
+
* Renders a polished, readable layout with:
|
|
31
|
+
* - "More Info:" header with title
|
|
32
|
+
* - Tag badges
|
|
33
|
+
* - Rich HTML content styled with Tailwind Typography (prose)
|
|
34
|
+
* - Child topic links
|
|
35
|
+
*/
|
|
36
|
+
export function IhelpDetailPanel({ topic, onNavigate, className, asset_base_url, provider_scope_id, labels, }) {
|
|
37
|
+
const more_info_prefix = labels?.more_info_prefix ?? 'More Info:';
|
|
38
|
+
const related_topics_label = labels?.related_topics ?? 'Related topics';
|
|
39
|
+
const resolved_content = useMemo(() => {
|
|
40
|
+
if (!topic.content)
|
|
41
|
+
return '';
|
|
42
|
+
return resolveImageUrls(topic.content, asset_base_url, topic.scope_id);
|
|
43
|
+
}, [topic.content, asset_base_url, topic.scope_id]);
|
|
44
|
+
return (_jsxs("div", { className: cn('flex flex-col', className), children: [_jsxs("div", { className: "mb-4", children: [topic.category && (_jsxs("p", { className: "text-[10px] text-[var(--ihelp-muted,var(--muted-foreground))]/70 uppercase tracking-[0.15em] font-semibold mb-1.5", children: [more_info_prefix, " ", topic.category] })), _jsx("h2", { className: "text-lg font-bold leading-tight text-[var(--ihelp-fg,var(--foreground))]", children: topic.title }), topic.description && (_jsx("p", { className: "text-sm text-[var(--ihelp-muted,var(--muted-foreground))] mt-1.5 leading-relaxed", children: topic.description }))] }), topic.tags.length > 0 && (_jsx("div", { className: "flex flex-wrap gap-2 mb-4", children: topic.tags.map((tag) => (_jsx(Badge, { variant: tag.variant, children: tag.label }, tag.id))) })), _jsx("hr", { className: "border-white/[0.06] mb-5" }), resolved_content && (_jsx("div", { className: cn("ihelp-content", "prose prose-sm max-w-none", "text-[var(--ihelp-fg,var(--foreground))]", "prose-headings:text-[var(--ihelp-fg,var(--foreground))]", "prose-strong:text-[var(--ihelp-fg,var(--foreground))]", "prose-a:text-[var(--ihelp-primary,#38bdf8)] prose-a:no-underline hover:prose-a:underline", "prose-h3:text-[15px] prose-h3:font-bold prose-h3:mt-5 prose-h3:mb-2", "prose-h4:text-sm prose-h4:font-semibold prose-h4:mt-5 prose-h4:mb-2 prose-h4:text-[var(--ihelp-muted,var(--muted-foreground))]/80", "prose-p:my-2 prose-p:leading-relaxed", "prose-ul:my-2 prose-ul:pl-5", "prose-ol:my-2 prose-ol:pl-5", "prose-li:my-0.5 prose-li:leading-relaxed prose-li:marker:text-[var(--ihelp-muted,var(--muted-foreground))]/50", "prose-img:rounded-lg prose-img:shadow-sm prose-img:my-3 prose-img:mx-auto prose-img:max-w-[180px] prose-img:max-h-[140px] prose-img:object-contain prose-img:inline-block", "prose-code:text-xs prose-code:bg-white/[0.06] prose-code:text-[var(--ihelp-primary,#38bdf8)] prose-code:px-1.5 prose-code:py-0.5 prose-code:rounded"), dangerouslySetInnerHTML: { __html: resolved_content } })), topic.children && topic.children.length > 0 && (_jsxs("div", { className: "mt-6 pt-4 border-t border-white/[0.06]", children: [_jsx("p", { className: "text-[10px] font-semibold text-[var(--ihelp-muted,var(--muted-foreground))]/70 uppercase tracking-[0.15em] mb-2.5", children: related_topics_label }), _jsx("div", { className: "flex flex-col gap-1.5", children: topic.children.map((child) => (_jsx("button", { type: "button", onClick: () => onNavigate?.(child.id), className: "text-left text-sm text-[var(--ihelp-primary,#38bdf8)] hover:underline transition-colors", children: child.title }, child.id))) })] }))] }));
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=ihelp_detail_panel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ihelp_detail_panel.js","sourceRoot":"","sources":["../../src/components/ihelp_detail_panel.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ihelp_editor.d.ts","sourceRoot":"","sources":["../../src/components/ihelp_editor.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,gBAAgB,EAAgE,MAAM,mBAAmB,CAAC;AAkDxH,wBAAgB,WAAW,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,cAAc,EAAE,EAAE,gBAAgB,2CAiNhG"}
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
+
import { useState, useMemo, useCallback } from 'react';
|
|
4
|
+
import { use_ihelp_editor } from '../hooks/use_ihelp_editor.js';
|
|
5
|
+
import { use_ihelp_config } from '../hooks/use_ihelp_config.js';
|
|
6
|
+
import { cn } from '../utils/cn.js';
|
|
7
|
+
import { EditorTopicList } from './editor/editor_topic_list.js';
|
|
8
|
+
import { EditorForm } from './editor/editor_form.js';
|
|
9
|
+
import { ImportDialog, use_export_topics } from './editor/editor_import_export.js';
|
|
10
|
+
// ---------------------------------------------------------------------------
|
|
11
|
+
// Helpers
|
|
12
|
+
// ---------------------------------------------------------------------------
|
|
13
|
+
const EMPTY_FORM = {
|
|
14
|
+
title: '',
|
|
15
|
+
category: '',
|
|
16
|
+
parent_id: null,
|
|
17
|
+
description: '',
|
|
18
|
+
content: '',
|
|
19
|
+
icon: '',
|
|
20
|
+
sort_order: 0,
|
|
21
|
+
is_published: false,
|
|
22
|
+
scope_id: null,
|
|
23
|
+
};
|
|
24
|
+
function topic_to_form(t) {
|
|
25
|
+
return {
|
|
26
|
+
title: t.title,
|
|
27
|
+
category: t.category,
|
|
28
|
+
parent_id: t.parent_id,
|
|
29
|
+
description: t.description ?? '',
|
|
30
|
+
content: t.content ?? '',
|
|
31
|
+
icon: t.icon ?? '',
|
|
32
|
+
sort_order: t.sort_order,
|
|
33
|
+
is_published: t.is_published,
|
|
34
|
+
scope_id: t.scope_id,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
function tags_from_topic(t) {
|
|
38
|
+
return t.tags.map((tag) => ({
|
|
39
|
+
label: tag.label,
|
|
40
|
+
variant: tag.variant,
|
|
41
|
+
icon: tag.icon,
|
|
42
|
+
}));
|
|
43
|
+
}
|
|
44
|
+
// ---------------------------------------------------------------------------
|
|
45
|
+
// IhelpEditor
|
|
46
|
+
// ---------------------------------------------------------------------------
|
|
47
|
+
export function IhelpEditor({ scope_id, className, upload_url, config_api_url }) {
|
|
48
|
+
const { topics, loading, error, create_topic, update_topic, delete_topic, refetch, } = use_ihelp_editor('/api/ihelp', scope_id);
|
|
49
|
+
// -- config: available context keys ----------------------------------------
|
|
50
|
+
const { value: available_context_keys_raw, loading: ctx_keys_loading, save: save_context_keys, } = use_ihelp_config('context_keys', config_api_url || '/api/ihelp/config', scope_id);
|
|
51
|
+
const available_context_keys = available_context_keys_raw ?? [];
|
|
52
|
+
const handle_manage_context_keys = useCallback(async (keys) => {
|
|
53
|
+
try {
|
|
54
|
+
await save_context_keys(keys);
|
|
55
|
+
}
|
|
56
|
+
catch { /* error shown via hook */ }
|
|
57
|
+
}, [save_context_keys]);
|
|
58
|
+
// -- selection & form state -----------------------------------------------
|
|
59
|
+
const [selected_id, set_selected_id] = useState(null);
|
|
60
|
+
const [form, set_form] = useState({ ...EMPTY_FORM });
|
|
61
|
+
const [form_tags, set_form_tags] = useState([]);
|
|
62
|
+
const [form_context_keys, set_form_context_keys] = useState([]);
|
|
63
|
+
const [is_new, set_is_new] = useState(false);
|
|
64
|
+
const [saving, set_saving] = useState(false);
|
|
65
|
+
const [save_error, set_save_error] = useState(null);
|
|
66
|
+
// -- import/export state --------------------------------------------------
|
|
67
|
+
const [import_open, set_import_open] = useState(false);
|
|
68
|
+
// -- derived data ---------------------------------------------------------
|
|
69
|
+
const categories = useMemo(() => {
|
|
70
|
+
const set = new Set();
|
|
71
|
+
topics.forEach((t) => { if (t.category)
|
|
72
|
+
set.add(t.category); });
|
|
73
|
+
return Array.from(set).sort();
|
|
74
|
+
}, [topics]);
|
|
75
|
+
// -- export ---------------------------------------------------------------
|
|
76
|
+
const handle_export = use_export_topics(topics);
|
|
77
|
+
// -- handlers -------------------------------------------------------------
|
|
78
|
+
const handle_select = useCallback((id) => {
|
|
79
|
+
const topic = topics.find((t) => t.id === id);
|
|
80
|
+
if (!topic)
|
|
81
|
+
return;
|
|
82
|
+
set_selected_id(id);
|
|
83
|
+
set_is_new(false);
|
|
84
|
+
set_form(topic_to_form(topic));
|
|
85
|
+
set_form_tags(tags_from_topic(topic));
|
|
86
|
+
set_form_context_keys([...topic.context_keys]);
|
|
87
|
+
set_save_error(null);
|
|
88
|
+
}, [topics]);
|
|
89
|
+
const handle_new = useCallback(() => {
|
|
90
|
+
set_selected_id(null);
|
|
91
|
+
set_is_new(true);
|
|
92
|
+
set_form({ ...EMPTY_FORM, scope_id: scope_id ?? null });
|
|
93
|
+
set_form_tags([]);
|
|
94
|
+
set_form_context_keys([]);
|
|
95
|
+
set_save_error(null);
|
|
96
|
+
}, [scope_id]);
|
|
97
|
+
const handle_save = useCallback(async () => {
|
|
98
|
+
set_saving(true);
|
|
99
|
+
set_save_error(null);
|
|
100
|
+
try {
|
|
101
|
+
const payload = {
|
|
102
|
+
...form,
|
|
103
|
+
tags: form_tags,
|
|
104
|
+
context_keys: form_context_keys,
|
|
105
|
+
description: form.description || null,
|
|
106
|
+
content: form.content || null,
|
|
107
|
+
icon: form.icon || null,
|
|
108
|
+
};
|
|
109
|
+
if (is_new) {
|
|
110
|
+
const created = await create_topic(payload);
|
|
111
|
+
set_selected_id(created.id);
|
|
112
|
+
set_is_new(false);
|
|
113
|
+
}
|
|
114
|
+
else if (selected_id) {
|
|
115
|
+
await update_topic(selected_id, payload);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
catch (err) {
|
|
119
|
+
set_save_error(err instanceof Error ? err.message : String(err));
|
|
120
|
+
}
|
|
121
|
+
finally {
|
|
122
|
+
set_saving(false);
|
|
123
|
+
}
|
|
124
|
+
}, [form, form_tags, form_context_keys, is_new, selected_id, create_topic, update_topic]);
|
|
125
|
+
const handle_delete = useCallback(async () => {
|
|
126
|
+
if (!selected_id)
|
|
127
|
+
return;
|
|
128
|
+
const confirmed = window.confirm('Are you sure you want to delete this topic? This cannot be undone.');
|
|
129
|
+
if (!confirmed)
|
|
130
|
+
return;
|
|
131
|
+
set_saving(true);
|
|
132
|
+
set_save_error(null);
|
|
133
|
+
try {
|
|
134
|
+
await delete_topic(selected_id);
|
|
135
|
+
set_selected_id(null);
|
|
136
|
+
set_is_new(false);
|
|
137
|
+
set_form({ ...EMPTY_FORM });
|
|
138
|
+
set_form_tags([]);
|
|
139
|
+
set_form_context_keys([]);
|
|
140
|
+
}
|
|
141
|
+
catch (err) {
|
|
142
|
+
set_save_error(err instanceof Error ? err.message : String(err));
|
|
143
|
+
}
|
|
144
|
+
finally {
|
|
145
|
+
set_saving(false);
|
|
146
|
+
}
|
|
147
|
+
}, [selected_id, delete_topic]);
|
|
148
|
+
const update_field = useCallback((key, value) => {
|
|
149
|
+
set_form((prev) => ({ ...prev, [key]: value }));
|
|
150
|
+
}, []);
|
|
151
|
+
// -- tag helpers ----------------------------------------------------------
|
|
152
|
+
const add_tag = useCallback((tag) => {
|
|
153
|
+
set_form_tags((prev) => [...prev, tag]);
|
|
154
|
+
}, []);
|
|
155
|
+
const remove_tag = useCallback((index) => {
|
|
156
|
+
set_form_tags((prev) => prev.filter((_, i) => i !== index));
|
|
157
|
+
}, []);
|
|
158
|
+
// -- context key helpers --------------------------------------------------
|
|
159
|
+
const add_context_key = useCallback((key) => {
|
|
160
|
+
set_form_context_keys((prev) => (prev.includes(key) ? prev : [...prev, key]));
|
|
161
|
+
}, []);
|
|
162
|
+
const remove_context_key = useCallback((index) => {
|
|
163
|
+
set_form_context_keys((prev) => prev.filter((_, i) => i !== index));
|
|
164
|
+
}, []);
|
|
165
|
+
// -- render ---------------------------------------------------------------
|
|
166
|
+
const show_form = is_new || selected_id !== null;
|
|
167
|
+
return (_jsxs(_Fragment, { children: [_jsxs("div", { className: cn('flex h-full min-h-[500px] rounded-lg border bg-background', className), children: [_jsx(EditorTopicList, { topics: topics, loading: loading, error: error, selected_id: selected_id, onSelect: handle_select, onNew: handle_new, onExport: handle_export, onImport: () => set_import_open(true) }), _jsx("div", { className: "flex flex-1 flex-col", children: !show_form ? (_jsx("div", { className: "flex flex-1 items-center justify-center", children: _jsx("p", { className: "text-sm text-muted-foreground", children: "Select a topic to edit or click \"New\" to create one." }) })) : (_jsx(EditorForm, { form: form, form_tags: form_tags, form_context_keys: form_context_keys, is_new: is_new, saving: saving, save_error: save_error, selected_id: selected_id, topics: topics, categories: categories, onUpdateField: update_field, onAddTag: add_tag, onRemoveTag: remove_tag, onAddContextKey: add_context_key, onRemoveContextKey: remove_context_key, available_context_keys: available_context_keys, available_context_keys_loading: ctx_keys_loading, onManageContextKeys: handle_manage_context_keys, onSave: handle_save, onDelete: handle_delete, upload_url: upload_url, scope_id: scope_id })) })] }), _jsx(ImportDialog, { open: import_open, onOpenChange: set_import_open, existing_topics: topics, create_topic: create_topic, update_topic: update_topic, refetch: refetch })] }));
|
|
168
|
+
}
|
|
169
|
+
//# sourceMappingURL=ihelp_editor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ihelp_editor.js","sourceRoot":"","sources":["../../src/components/ihelp_editor.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { IhelpIconProps } from '../types/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Small blue "i" icon that opens the help search dialog scoped to the
|
|
4
|
+
* given context_key.
|
|
5
|
+
*/
|
|
6
|
+
export declare function IhelpIcon({ context_key, size, className }: IhelpIconProps): import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
//# sourceMappingURL=ihelp_icon.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ihelp_icon.d.ts","sourceRoot":"","sources":["../../src/components/ihelp_icon.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD;;;GAGG;AACH,wBAAgB,SAAS,CAAC,EAAE,WAAW,EAAE,IAAS,EAAE,SAAS,EAAE,EAAE,cAAc,2CAmB9E"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import { Info } from 'lucide-react';
|
|
4
|
+
import { cn } from '../utils/cn.js';
|
|
5
|
+
import { useIhelpContext } from './ihelp_provider.js';
|
|
6
|
+
/**
|
|
7
|
+
* Small blue "i" icon that opens the help search dialog scoped to the
|
|
8
|
+
* given context_key.
|
|
9
|
+
*/
|
|
10
|
+
export function IhelpIcon({ context_key, size = 16, className }) {
|
|
11
|
+
const { open_search } = useIhelpContext();
|
|
12
|
+
return (_jsx("button", { type: "button", "aria-label": "Open help", onClick: () => open_search(context_key), className: cn('inline-flex items-center justify-center rounded-full', 'text-blue-600 hover:text-blue-800 hover:bg-blue-100', 'transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-400 focus-visible:ring-offset-1', className), style: { width: size + 8, height: size + 8 }, children: _jsx(Info, { size: size }) }));
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=ihelp_icon.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ihelp_icon.js","sourceRoot":"","sources":["../../src/components/ihelp_icon.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAGb,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AACpC,OAAO,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAGtD;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,EAAE,WAAW,EAAE,IAAI,GAAG,EAAE,EAAE,SAAS,EAAkB;IAC7E,MAAM,EAAE,WAAW,EAAE,GAAG,eAAe,EAAE,CAAC;IAE1C,OAAO,CACL,iBACE,IAAI,EAAC,QAAQ,gBACF,WAAW,EACtB,OAAO,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,WAAW,CAAC,EACvC,SAAS,EAAE,EAAE,CACX,sDAAsD,EACtD,qDAAqD,EACrD,2HAA2H,EAC3H,SAAS,CACV,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,GAAG,CAAC,EAAE,MAAM,EAAE,IAAI,GAAG,CAAC,EAAE,YAE5C,KAAC,IAAI,IAAC,IAAI,EAAE,IAAI,GAAI,GACb,CACV,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { IhelpProviderProps, IhelpTheme, IhelpLabels, UseIhelpSearchResult } from '../types/index.js';
|
|
2
|
+
interface IhelpContextValue {
|
|
3
|
+
api_base_url: string;
|
|
4
|
+
scope_id: string | null | undefined;
|
|
5
|
+
asset_base_url: string | undefined;
|
|
6
|
+
theme: IhelpTheme | undefined;
|
|
7
|
+
labels: IhelpLabels | undefined;
|
|
8
|
+
search_open: boolean;
|
|
9
|
+
open_search: (context_key?: string) => void;
|
|
10
|
+
close_search: () => void;
|
|
11
|
+
search: UseIhelpSearchResult;
|
|
12
|
+
/** The context_key that was passed when the dialog was last opened. */
|
|
13
|
+
initial_context_key: string | undefined;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Hook to consume the ihelp context. Must be called inside <IhelpProvider>.
|
|
17
|
+
*/
|
|
18
|
+
export declare function useIhelpContext(): IhelpContextValue;
|
|
19
|
+
export declare function IhelpProvider({ children, api_base_url, scope_id, search_shortcut, enable_shortcuts, asset_base_url, theme, labels, }: IhelpProviderProps): import("react/jsx-runtime").JSX.Element;
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=ihelp_provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ihelp_provider.d.ts","sourceRoot":"","sources":["../../src/components/ihelp_provider.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAE,UAAU,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAQ3G,UAAU,iBAAiB;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACpC,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,KAAK,EAAE,UAAU,GAAG,SAAS,CAAC;IAC9B,MAAM,EAAE,WAAW,GAAG,SAAS,CAAC;IAChC,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,CAAC,WAAW,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,MAAM,EAAE,oBAAoB,CAAC;IAC7B,uEAAuE;IACvE,mBAAmB,EAAE,MAAM,GAAG,SAAS,CAAC;CACzC;AAID;;GAEG;AACH,wBAAgB,eAAe,IAAI,iBAAiB,CAMnD;AAMD,wBAAgB,aAAa,CAAC,EAC5B,QAAQ,EACR,YAA2B,EAC3B,QAAQ,EACR,eAAyB,EACzB,gBAAuB,EACvB,cAAc,EACd,KAAK,EACL,MAAM,GACP,EAAE,kBAAkB,2CAgFpB"}
|