@bysages/solid 0.4.4 → 0.5.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.
- package/README.md +2 -2
- package/dist/ai-NX47X8sz.mjs +365 -0
- package/dist/ai-prompt-input-CEnnpkgi.mjs +486 -0
- package/dist/{ai-response-CJ-uEAgj.mjs → ai-response-BM_DVIDY.mjs} +25 -27
- package/dist/{chevron-BHQrYKPM.mjs → chevron-DGKPHc2O.mjs} +2 -3
- package/dist/components/accordion/index.d.mts +1 -2
- package/dist/components/accordion/index.mjs +9 -16
- package/dist/components/affix/index.d.mts +1 -3
- package/dist/components/affix/index.mjs +19 -18
- package/dist/components/ai/index.d.mts +95 -2
- package/dist/components/ai/index.mjs +7 -69
- package/dist/components/ai-action/index.d.mts +0 -2
- package/dist/components/ai-action/index.mjs +4 -5
- package/dist/components/ai-attachments/index.d.mts +0 -2
- package/dist/components/ai-attachments/index.mjs +39 -52
- package/dist/components/ai-message/index.d.mts +2 -15
- package/dist/components/ai-message/index.mjs +18 -15
- package/dist/components/ai-prompt-input/index.d.mts +19 -15
- package/dist/components/ai-prompt-input/index.mjs +1 -168
- package/dist/components/ai-reasoning/index.d.mts +0 -2
- package/dist/components/ai-reasoning/index.mjs +8 -13
- package/dist/components/ai-response/index.d.mts +1 -3
- package/dist/components/ai-response/index.mjs +1 -2
- package/dist/components/ai-source/index.d.mts +0 -2
- package/dist/components/ai-source/index.mjs +25 -26
- package/dist/components/ai-suggestion/index.d.mts +0 -2
- package/dist/components/ai-suggestion/index.mjs +3 -4
- package/dist/components/ai-tool/index.d.mts +2 -25
- package/dist/components/ai-tool/index.mjs +75 -40
- package/dist/components/alert/index.d.mts +1 -2
- package/dist/components/alert/index.mjs +38 -33
- package/dist/components/angle-slider/index.d.mts +1 -2
- package/dist/components/angle-slider/index.mjs +6 -9
- package/dist/components/aspect-ratio/index.d.mts +1 -3
- package/dist/components/aspect-ratio/index.mjs +18 -17
- package/dist/components/autocomplete/index.d.mts +1 -2
- package/dist/components/autocomplete/index.mjs +6 -8
- package/dist/components/avatar/index.d.mts +1 -2
- package/dist/components/avatar/index.mjs +6 -7
- package/dist/components/avatar-group/index.d.mts +1 -3
- package/dist/components/avatar-group/index.mjs +15 -14
- package/dist/components/back-top/index.d.mts +1 -3
- package/dist/components/back-top/index.mjs +29 -34
- package/dist/components/badge/index.d.mts +1 -3
- package/dist/components/badge/index.mjs +18 -17
- package/dist/components/banner/index.d.mts +1 -2
- package/dist/components/banner/index.mjs +32 -31
- package/dist/components/bento/index.d.mts +1 -3
- package/dist/components/bento/index.mjs +30 -31
- package/dist/components/block-ui/index.d.mts +1 -3
- package/dist/components/block-ui/index.mjs +30 -33
- package/dist/components/breadcrumb/index.d.mts +1 -2
- package/dist/components/breadcrumb/index.mjs +8 -13
- package/dist/components/browser/index.d.mts +1 -3
- package/dist/components/browser/index.mjs +50 -51
- package/dist/components/button/index.d.mts +1 -3
- package/dist/components/button/index.mjs +31 -30
- package/dist/components/button-group/index.d.mts +1 -3
- package/dist/components/button-group/index.mjs +21 -20
- package/dist/components/calendar/index.d.mts +0 -2
- package/dist/components/calendar/index.mjs +73 -116
- package/dist/components/card/index.d.mts +1 -3
- package/dist/components/card/index.mjs +3 -4
- package/dist/components/carousel/index.d.mts +1 -2
- package/dist/components/carousel/index.mjs +6 -7
- package/dist/components/cascade-select/index.d.mts +1 -3
- package/dist/components/cascade-select/index.mjs +127 -167
- package/dist/components/checkbox/index.d.mts +1 -2
- package/dist/components/checkbox/index.mjs +7 -10
- package/dist/components/checkbox-group/index.d.mts +1 -2
- package/dist/components/checkbox-group/index.mjs +9 -12
- package/dist/components/chip/index.d.mts +1 -3
- package/dist/components/chip/index.mjs +22 -25
- package/dist/components/client-only/index.d.mts +0 -2
- package/dist/components/client-only/index.mjs +2 -3
- package/dist/components/clipboard/index.d.mts +1 -2
- package/dist/components/clipboard/index.mjs +10 -17
- package/dist/components/collapsible/index.d.mts +1 -2
- package/dist/components/collapsible/index.mjs +7 -14
- package/dist/components/collection/index.mjs +1 -2
- package/dist/components/color-picker/index.d.mts +1 -2
- package/dist/components/color-picker/index.mjs +10 -14
- package/dist/components/combobox/index.d.mts +1 -2
- package/dist/components/combobox/index.mjs +9 -14
- package/dist/components/command/index.d.mts +1 -2
- package/dist/components/command/index.mjs +63 -80
- package/dist/components/comment/index.d.mts +1 -3
- package/dist/components/comment/index.mjs +64 -80
- package/dist/components/config-provider/index.d.mts +1 -3
- package/dist/components/config-provider/index.mjs +10 -13
- package/dist/components/container/index.d.mts +1 -3
- package/dist/components/container/index.mjs +18 -17
- package/dist/components/data-view/index.d.mts +1 -3
- package/dist/components/data-view/index.mjs +81 -90
- package/dist/components/date-input/index.d.mts +1 -2
- package/dist/components/date-input/index.mjs +6 -9
- package/dist/components/date-picker/index.d.mts +1 -2
- package/dist/components/date-picker/index.mjs +11 -16
- package/dist/components/deferred-content/index.d.mts +1 -3
- package/dist/components/deferred-content/index.mjs +24 -25
- package/dist/components/descriptions/index.d.mts +1 -2
- package/dist/components/descriptions/index.mjs +40 -39
- package/dist/components/dialog/index.d.mts +11 -2
- package/dist/components/dialog/index.mjs +78 -40
- package/dist/components/dock/index.d.mts +1 -3
- package/dist/components/dock/index.mjs +29 -30
- package/dist/components/download-trigger/index.d.mts +0 -2
- package/dist/components/download-trigger/index.mjs +2 -3
- package/dist/components/drawer/index.d.mts +1 -2
- package/dist/components/drawer/index.mjs +9 -18
- package/dist/components/dynamic-input/index.d.mts +1 -3
- package/dist/components/dynamic-input/index.mjs +73 -77
- package/dist/components/editable/index.d.mts +1 -2
- package/dist/components/editable/index.mjs +7 -10
- package/dist/components/ellipsis/index.d.mts +1 -3
- package/dist/components/ellipsis/index.mjs +21 -20
- package/dist/components/empty/index.d.mts +1 -3
- package/dist/components/empty/index.mjs +3 -4
- package/dist/components/field/index.d.mts +1 -2
- package/dist/components/field/index.mjs +4 -5
- package/dist/components/fieldset/index.d.mts +1 -2
- package/dist/components/fieldset/index.mjs +6 -9
- package/dist/components/file-upload/index.d.mts +1 -2
- package/dist/components/file-upload/index.mjs +6 -7
- package/dist/components/float-button/index.d.mts +1 -2
- package/dist/components/float-button/index.mjs +41 -43
- package/dist/components/floating-panel/index.d.mts +1 -2
- package/dist/components/floating-panel/index.mjs +10 -21
- package/dist/components/focus-trap/index.d.mts +0 -2
- package/dist/components/focus-trap/index.mjs +2 -3
- package/dist/components/form/index.d.mts +0 -2
- package/dist/components/form/index.mjs +42 -58
- package/dist/components/format/index.d.mts +1 -3
- package/dist/components/format/index.mjs +1 -2
- package/dist/components/frame/index.d.mts +1 -2
- package/dist/components/frame/index.mjs +3 -4
- package/dist/components/grid/index.d.mts +1 -3
- package/dist/components/grid/index.mjs +23 -22
- package/dist/components/highlight/index.d.mts +1 -3
- package/dist/components/highlight/index.mjs +2 -3
- package/dist/components/hover-card/index.d.mts +1 -2
- package/dist/components/hover-card/index.mjs +12 -27
- package/dist/components/icon/index.d.mts +1 -3
- package/dist/components/icon/index.mjs +35 -36
- package/dist/components/image/index.d.mts +1 -3
- package/dist/components/image/index.mjs +48 -52
- package/dist/components/image-cropper/index.d.mts +1 -2
- package/dist/components/image-cropper/index.mjs +5 -6
- package/dist/components/image-viewer/index.d.mts +1 -1
- package/dist/components/image-viewer/index.mjs +1 -2
- package/dist/components/input/index.d.mts +1 -3
- package/dist/components/input/index.mjs +1 -2
- package/dist/components/input-group/index.d.mts +1 -2
- package/dist/components/input-group/index.mjs +19 -16
- package/dist/components/json-tree-view/index.d.mts +1 -2
- package/dist/components/json-tree-view/index.mjs +5 -6
- package/dist/components/kbd/index.d.mts +1 -3
- package/dist/components/kbd/index.mjs +12 -11
- package/dist/components/layout/index.d.mts +1 -2
- package/dist/components/layout/index.mjs +92 -84
- package/dist/components/link/index.d.mts +1 -3
- package/dist/components/link/index.mjs +15 -15
- package/dist/components/list/index.d.mts +1 -2
- package/dist/components/list/index.mjs +57 -61
- package/dist/components/listbox/index.d.mts +1 -2
- package/dist/components/listbox/index.mjs +8 -11
- package/dist/components/marquee/index.d.mts +1 -2
- package/dist/components/marquee/index.mjs +7 -8
- package/dist/components/masonry/index.d.mts +1 -3
- package/dist/components/masonry/index.mjs +19 -18
- package/dist/components/media-player/index.d.mts +1 -1
- package/dist/components/media-player/index.mjs +1 -2
- package/dist/components/mentions/index.d.mts +2 -2
- package/dist/components/mentions/index.mjs +1 -3
- package/dist/components/menu/index.d.mts +1 -2
- package/dist/components/menu/index.mjs +8 -17
- package/dist/components/menubar/index.d.mts +1 -2
- package/dist/components/menubar/index.mjs +66 -72
- package/dist/components/meter/index.d.mts +1 -2
- package/dist/components/meter/index.mjs +42 -43
- package/dist/components/navigation-menu/index.d.mts +1 -2
- package/dist/components/navigation-menu/index.mjs +7 -12
- package/dist/components/number-input/index.d.mts +1 -2
- package/dist/components/number-input/index.mjs +7 -10
- package/dist/components/order-list/index.d.mts +1 -3
- package/dist/components/order-list/index.mjs +86 -101
- package/dist/components/page-header/index.d.mts +1 -3
- package/dist/components/page-header/index.mjs +3 -4
- package/dist/components/pagination/index.d.mts +1 -2
- package/dist/components/pagination/index.mjs +31 -42
- package/dist/components/password-input/index.d.mts +1 -2
- package/dist/components/password-input/index.mjs +6 -7
- package/dist/components/pin-input/index.d.mts +1 -2
- package/dist/components/pin-input/index.mjs +6 -9
- package/dist/components/popconfirm/index.d.mts +2 -3
- package/dist/components/popconfirm/index.mjs +15 -23
- package/dist/components/popover/index.d.mts +2 -26
- package/dist/components/popover/index.mjs +10 -21
- package/dist/components/presence/index.d.mts +0 -2
- package/dist/components/presence/index.mjs +2 -3
- package/dist/components/progress/index.d.mts +1 -2
- package/dist/components/progress/index.mjs +14 -26
- package/dist/components/progress-group/index.d.mts +1 -3
- package/dist/components/progress-group/index.mjs +60 -68
- package/dist/components/qr-code/index.d.mts +1 -2
- package/dist/components/qr-code/index.mjs +5 -8
- package/dist/components/radio-group/index.d.mts +1 -2
- package/dist/components/radio-group/index.mjs +6 -9
- package/dist/components/rating-group/index.d.mts +1 -2
- package/dist/components/rating-group/index.mjs +7 -10
- package/dist/components/result/index.d.mts +1 -2
- package/dist/components/result/index.mjs +28 -29
- package/dist/components/scroll-area/index.d.mts +8 -3
- package/dist/components/scroll-area/index.mjs +19 -11
- package/dist/components/segment-group/index.d.mts +1 -2
- package/dist/components/segment-group/index.mjs +5 -8
- package/dist/components/select/index.d.mts +1 -1
- package/dist/components/select/index.mjs +1 -2
- package/dist/components/separator/index.d.mts +1 -3
- package/dist/components/separator/index.mjs +21 -20
- package/dist/components/signature-pad/index.d.mts +1 -2
- package/dist/components/signature-pad/index.mjs +7 -10
- package/dist/components/skeleton/index.d.mts +1 -3
- package/dist/components/skeleton/index.mjs +12 -11
- package/dist/components/slider/index.d.mts +1 -2
- package/dist/components/slider/index.mjs +6 -9
- package/dist/components/spinner/index.d.mts +1 -3
- package/dist/components/spinner/index.mjs +20 -19
- package/dist/components/split-button/index.d.mts +1 -2
- package/dist/components/split-button/index.mjs +92 -94
- package/dist/components/splitter/index.d.mts +1 -2
- package/dist/components/splitter/index.mjs +5 -8
- package/dist/components/spotlight/index.d.mts +1 -3
- package/dist/components/spotlight/index.mjs +22 -23
- package/dist/components/stack/index.d.mts +1 -3
- package/dist/components/stack/index.mjs +24 -23
- package/dist/components/stat/index.d.mts +1 -2
- package/dist/components/stat/index.mjs +15 -14
- package/dist/components/steps/index.d.mts +0 -2
- package/dist/components/steps/index.mjs +10 -17
- package/dist/components/swap/index.d.mts +1 -2
- package/dist/components/swap/index.mjs +5 -6
- package/dist/components/switch/index.d.mts +1 -2
- package/dist/components/switch/index.mjs +6 -9
- package/dist/components/table/index.d.mts +0 -2
- package/dist/components/table/index.mjs +233 -320
- package/dist/components/tabs/index.d.mts +8 -12
- package/dist/components/tabs/index.mjs +83 -34
- package/dist/components/tag/index.d.mts +1 -2
- package/dist/components/tag/index.mjs +46 -70
- package/dist/components/tags-input/index.d.mts +1 -2
- package/dist/components/tags-input/index.mjs +7 -10
- package/dist/components/terminal/index.d.mts +3 -3
- package/dist/components/terminal/index.mjs +61 -56
- package/dist/components/textarea/index.d.mts +1 -3
- package/dist/components/textarea/index.mjs +10 -11
- package/dist/components/timeline/index.d.mts +1 -2
- package/dist/components/timeline/index.mjs +15 -14
- package/dist/components/timer/index.d.mts +1 -2
- package/dist/components/timer/index.mjs +5 -6
- package/dist/components/toast/index.d.mts +0 -2
- package/dist/components/toast/index.mjs +5 -6
- package/dist/components/toc/index.d.mts +1 -1
- package/dist/components/toc/index.mjs +1 -2
- package/dist/components/toggle/index.d.mts +1 -2
- package/dist/components/toggle/index.mjs +5 -6
- package/dist/components/toggle-group/index.d.mts +1 -2
- package/dist/components/toggle-group/index.mjs +11 -16
- package/dist/components/toolbar/index.d.mts +1 -3
- package/dist/components/toolbar/index.mjs +27 -31
- package/dist/components/tooltip/index.d.mts +1 -2
- package/dist/components/tooltip/index.mjs +7 -16
- package/dist/components/tour/index.d.mts +0 -2
- package/dist/components/tour/index.mjs +11 -16
- package/dist/components/transfer/index.d.mts +1 -2
- package/dist/components/transfer/index.mjs +115 -126
- package/dist/components/tree-select/index.d.mts +2 -3
- package/dist/components/tree-select/index.mjs +24 -33
- package/dist/components/tree-view/index.d.mts +10 -4
- package/dist/components/tree-view/index.mjs +32 -23
- package/dist/components/typography/index.d.mts +2 -3
- package/dist/components/typography/index.mjs +4 -4
- package/dist/components/user/index.d.mts +1 -3
- package/dist/components/user/index.mjs +40 -57
- package/dist/components/virtual-list/index.d.mts +1 -3
- package/dist/components/virtual-list/index.mjs +39 -45
- package/dist/components/watermark/index.d.mts +1 -3
- package/dist/components/watermark/index.mjs +15 -22
- package/dist/{element-dGIhOTJ6.mjs → element-liigPBUh.mjs} +1 -2
- package/dist/{family-Cmd8HEyK.mjs → family-B5HtE0on.mjs} +1 -2
- package/dist/generative/index.d.mts +0 -2
- package/dist/generative/index.mjs +28 -53
- package/dist/{icon-DTqmJCd5.mjs → icon-DQqYA2fO.mjs} +11 -17
- package/dist/{id-2ygNzPHF.mjs → id-DGvz-2rQ.mjs} +1 -2
- package/dist/{image-viewer-19s75Hz_.mjs → image-viewer-TEia4PaY.mjs} +73 -101
- package/dist/{index-BU5U5w04.d.mts → index-B4WyTngM.d.mts} +0 -4
- package/dist/index-BRvSfkKs.d.mts +25 -0
- package/dist/{index-DhripUtf.d.mts → index-CTsFsYdA.d.mts} +0 -4
- package/dist/index-CutrHCzU.d.mts +153 -0
- package/dist/{index-wW28BYf1.d.mts → index-CwmZdzxT.d.mts} +0 -8
- package/dist/index-DK7YgaAU.d.mts +37 -0
- package/dist/index-Dms00480.d.mts +115 -0
- package/dist/{index-ID48LCMU.d.mts → index-Dv6mwzIr.d.mts} +3 -7
- package/dist/index.d.mts +13 -13
- package/dist/index.mjs +12 -12
- package/dist/{input-BL3N3L8g.mjs → input-2xfPP-7Z.mjs} +11 -13
- package/dist/{media-player-yF7KVUxM.mjs → media-player-LHnTiSiN.mjs} +248 -259
- package/dist/mentions-CvY9IGzc.mjs +438 -0
- package/dist/{select-DI7pFspF.mjs → select-NaNlrYUT.mjs} +72 -96
- package/dist/{toc-DRHr8_eD.mjs → toc-RnPG3w7q.mjs} +5 -7
- package/dist/{use-component-messages-C4SCVYjD.mjs → use-component-messages-DS9ppb4C.mjs} +1 -2
- package/package.json +13 -13
- package/dist/index-DEArHiFI.d.mts +0 -104
- package/dist/index-DVc1L_zt.d.mts +0 -10435
- package/dist/mentions-DKUG7eHt.mjs +0 -279
|
@@ -0,0 +1,486 @@
|
|
|
1
|
+
import { n as withSelfRoot } from "./family-B5HtE0on.mjs";
|
|
2
|
+
import { n as iconHtml, r as iconNode } from "./icon-DQqYA2fO.mjs";
|
|
3
|
+
import { t as useElementId } from "./id-DGvz-2rQ.mjs";
|
|
4
|
+
import { Button } from "./components/button/index.mjs";
|
|
5
|
+
import { n as useComponentMessages } from "./use-component-messages-DS9ppb4C.mjs";
|
|
6
|
+
import { Field } from "./components/field/index.mjs";
|
|
7
|
+
import { n as MentionsVessel, r as useMentions } from "./mentions-CvY9IGzc.mjs";
|
|
8
|
+
import { createComponent, delegateEvents, effect, insert, mergeProps, setAttribute, spread, template, use } from "solid-js/web";
|
|
9
|
+
import { injectComponentStyle } from "@bysages/core/styling";
|
|
10
|
+
import { Show, createSignal, splitProps } from "solid-js";
|
|
11
|
+
// src/components/ai-prompt-input/editor.ts
|
|
12
|
+
const triggerList = (triggers) => {
|
|
13
|
+
return (triggers == null ? ["@"] : Array.isArray(triggers) ? triggers : [triggers]).filter((trigger) => trigger.length > 0);
|
|
14
|
+
};
|
|
15
|
+
const tokensFor = (value, entries, triggers) => {
|
|
16
|
+
const tokens = [];
|
|
17
|
+
const add = (pattern, entry, trigger) => {
|
|
18
|
+
if (!pattern || !value.includes(pattern)) return;
|
|
19
|
+
tokens.push({
|
|
20
|
+
pattern,
|
|
21
|
+
entry,
|
|
22
|
+
trigger
|
|
23
|
+
});
|
|
24
|
+
};
|
|
25
|
+
entries.forEach((entry) => {
|
|
26
|
+
triggers.forEach((trigger) => {
|
|
27
|
+
add(trigger + entry.label, entry, trigger);
|
|
28
|
+
const inserted = entry.insertText?.trim();
|
|
29
|
+
if (inserted?.startsWith(trigger)) add(inserted, entry, trigger);
|
|
30
|
+
});
|
|
31
|
+
});
|
|
32
|
+
return tokens.sort((left, right) => {
|
|
33
|
+
return value.indexOf(left.pattern) - value.indexOf(right.pattern) || right.pattern.length - left.pattern.length;
|
|
34
|
+
});
|
|
35
|
+
};
|
|
36
|
+
const readToken = (node) => ({
|
|
37
|
+
pattern: `${node.dataset.promptTrigger ?? "@"}${node.dataset.promptLabel ?? ""}`,
|
|
38
|
+
trigger: node.dataset.promptTrigger ?? "@",
|
|
39
|
+
entry: {
|
|
40
|
+
id: node.dataset.promptId,
|
|
41
|
+
label: node.dataset.promptLabel ?? "",
|
|
42
|
+
value: node.dataset.promptValue ?? "",
|
|
43
|
+
icon: node.dataset.promptIcon,
|
|
44
|
+
kind: node.dataset.promptKind
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
const readNode = (node) => {
|
|
48
|
+
if (node.nodeType === Node.TEXT_NODE) return node.textContent ?? "";
|
|
49
|
+
if (!(node instanceof HTMLElement)) return "";
|
|
50
|
+
if (node.tagName === "BR") return "\n";
|
|
51
|
+
if (node.dataset.promptToken === "") return readToken(node).pattern;
|
|
52
|
+
const block = node.tagName === "DIV" || node.tagName === "P";
|
|
53
|
+
const children = Array.from(node.childNodes).map(readNode).join("");
|
|
54
|
+
return block && children ? `${children}\n` : children;
|
|
55
|
+
};
|
|
56
|
+
const serializeEditor = (root) => Array.from(root.childNodes).map(readNode).join("").replace(/\n$/, "");
|
|
57
|
+
const readCaret = (root) => {
|
|
58
|
+
const selection = window.getSelection();
|
|
59
|
+
if (document.activeElement !== root || !selection || selection.rangeCount === 0) return serializeEditor(root).length;
|
|
60
|
+
const selected = selection.getRangeAt(selection.rangeCount - 1);
|
|
61
|
+
const range = document.createRange();
|
|
62
|
+
range.selectNodeContents(root);
|
|
63
|
+
range.setEnd(selected.endContainer, selected.endOffset);
|
|
64
|
+
return range.toString().length;
|
|
65
|
+
};
|
|
66
|
+
const caretPosition = (root, offset) => {
|
|
67
|
+
const walker = document.createTreeWalker(root, NodeFilter.SHOW_TEXT);
|
|
68
|
+
let remaining = offset;
|
|
69
|
+
let node = walker.nextNode();
|
|
70
|
+
let last = null;
|
|
71
|
+
while (node) {
|
|
72
|
+
const text = node;
|
|
73
|
+
if (remaining <= text.data.length) return {
|
|
74
|
+
container: text,
|
|
75
|
+
offset: remaining
|
|
76
|
+
};
|
|
77
|
+
remaining -= text.data.length;
|
|
78
|
+
last = text;
|
|
79
|
+
node = walker.nextNode();
|
|
80
|
+
}
|
|
81
|
+
return last ? {
|
|
82
|
+
container: last,
|
|
83
|
+
offset: last.data.length
|
|
84
|
+
} : {
|
|
85
|
+
container: root,
|
|
86
|
+
offset: root.childNodes.length
|
|
87
|
+
};
|
|
88
|
+
};
|
|
89
|
+
const tokenNode = (model) => {
|
|
90
|
+
const node = document.createElement("span");
|
|
91
|
+
node.contentEditable = "false";
|
|
92
|
+
node.dataset.promptToken = "";
|
|
93
|
+
node.setAttribute("data-scope", "ai");
|
|
94
|
+
node.setAttribute("data-part", "prompt-mention");
|
|
95
|
+
node.dataset.promptTrigger = model.trigger;
|
|
96
|
+
node.dataset.promptLabel = model.entry.label;
|
|
97
|
+
node.dataset.promptValue = model.entry.value;
|
|
98
|
+
if (model.entry.kind != null) node.dataset.promptKind = model.entry.kind;
|
|
99
|
+
if (model.entry.id) node.dataset.promptId = model.entry.id;
|
|
100
|
+
if (model.entry.icon) node.dataset.promptIcon = model.entry.icon;
|
|
101
|
+
node.title = `${model.trigger}${model.entry.label}`;
|
|
102
|
+
const trigger = document.createElement("span");
|
|
103
|
+
trigger.textContent = model.trigger;
|
|
104
|
+
trigger.setAttribute("data-scope", "ai");
|
|
105
|
+
trigger.setAttribute("data-part", "mention-trigger");
|
|
106
|
+
node.append(trigger);
|
|
107
|
+
if (model.entry.icon) {
|
|
108
|
+
const icon = document.createElement("span");
|
|
109
|
+
icon.setAttribute("data-scope", "ai");
|
|
110
|
+
icon.setAttribute("data-part", "mention-icon");
|
|
111
|
+
icon.innerHTML = iconHtml(model.entry.icon, {
|
|
112
|
+
"data-scope": "icon",
|
|
113
|
+
"data-part": "root",
|
|
114
|
+
"data-size": "inherit"
|
|
115
|
+
});
|
|
116
|
+
node.append(icon);
|
|
117
|
+
}
|
|
118
|
+
const label = document.createElement("span");
|
|
119
|
+
label.textContent = model.entry.label;
|
|
120
|
+
label.setAttribute("data-scope", "ai");
|
|
121
|
+
label.setAttribute("data-part", "mention-label");
|
|
122
|
+
node.append(label);
|
|
123
|
+
return node;
|
|
124
|
+
};
|
|
125
|
+
const renderEditor = (root, value, entries, triggers) => {
|
|
126
|
+
const fragment = document.createDocumentFragment();
|
|
127
|
+
let cursor = 0;
|
|
128
|
+
tokensFor(value, entries, triggerList(triggers)).forEach((model) => {
|
|
129
|
+
const start = value.indexOf(model.pattern, cursor);
|
|
130
|
+
if (start === -1) return;
|
|
131
|
+
if (start > cursor) fragment.append(value.slice(cursor, start));
|
|
132
|
+
fragment.append(tokenNode(model));
|
|
133
|
+
cursor = start + model.pattern.length;
|
|
134
|
+
});
|
|
135
|
+
if (cursor < value.length) fragment.append(value.slice(cursor));
|
|
136
|
+
root.replaceChildren(fragment);
|
|
137
|
+
root.toggleAttribute("data-empty", root.childNodes.length === 0);
|
|
138
|
+
};
|
|
139
|
+
/** Insert a mention as a rich token. The hidden trigger text keeps the
|
|
140
|
+
* browser selection and the serialized plain text in step. */
|
|
141
|
+
const insertEditorToken = (root, entry, trigger, start, end) => {
|
|
142
|
+
const hasTailSpace = /^\s/.test(serializeEditor(root).slice(end));
|
|
143
|
+
const range = document.createRange();
|
|
144
|
+
const from = caretPosition(root, start);
|
|
145
|
+
const to = caretPosition(root, end);
|
|
146
|
+
range.setStart(from.container, from.offset);
|
|
147
|
+
range.setEnd(to.container, to.offset);
|
|
148
|
+
range.deleteContents();
|
|
149
|
+
const node = tokenNode({
|
|
150
|
+
pattern: trigger + entry.label,
|
|
151
|
+
entry,
|
|
152
|
+
trigger
|
|
153
|
+
});
|
|
154
|
+
range.insertNode(node);
|
|
155
|
+
let tail = null;
|
|
156
|
+
if (!hasTailSpace) {
|
|
157
|
+
tail = document.createTextNode(" ");
|
|
158
|
+
node.after(tail);
|
|
159
|
+
}
|
|
160
|
+
root.focus();
|
|
161
|
+
const selection = window.getSelection();
|
|
162
|
+
const followingText = (() => {
|
|
163
|
+
let current = node.nextSibling;
|
|
164
|
+
while (current) {
|
|
165
|
+
if (current.nodeType === Node.TEXT_NODE) return current;
|
|
166
|
+
const text = document.createTreeWalker(current, NodeFilter.SHOW_TEXT).nextNode();
|
|
167
|
+
if (text) return text;
|
|
168
|
+
current = current.nextSibling;
|
|
169
|
+
}
|
|
170
|
+
return null;
|
|
171
|
+
})();
|
|
172
|
+
const target = tail ?? followingText;
|
|
173
|
+
if (selection && target) {
|
|
174
|
+
const caret = document.createRange();
|
|
175
|
+
if (tail) caret.selectNodeContents(tail);
|
|
176
|
+
else caret.setStart(target, 0);
|
|
177
|
+
caret.collapse(true);
|
|
178
|
+
selection.removeAllRanges();
|
|
179
|
+
selection.addRange(caret);
|
|
180
|
+
}
|
|
181
|
+
return serializeEditor(root);
|
|
182
|
+
};
|
|
183
|
+
const setEditorCaret = (root, offset) => {
|
|
184
|
+
const position = caretPosition(root, offset);
|
|
185
|
+
const selection = window.getSelection();
|
|
186
|
+
if (!selection) return;
|
|
187
|
+
const range = document.createRange();
|
|
188
|
+
range.setStart(position.container, position.offset);
|
|
189
|
+
range.collapse(true);
|
|
190
|
+
selection.removeAllRanges();
|
|
191
|
+
selection.addRange(range);
|
|
192
|
+
};
|
|
193
|
+
const insertLineBreak = (root) => {
|
|
194
|
+
document.execCommand("insertLineBreak");
|
|
195
|
+
return serializeEditor(root);
|
|
196
|
+
};
|
|
197
|
+
// src/components/ai-prompt-input/index.tsx
|
|
198
|
+
var _tmpl$ = /*#__PURE__*/ template(`<div data-scope=ai>`);
|
|
199
|
+
var _tmpl$2 = /*#__PURE__*/ template(`<div role=combobox aria-autocomplete=list data-scope=ai data-part=prompt-editor>`);
|
|
200
|
+
var _tmpl$3 = /*#__PURE__*/ template(`<div data-scope=ai data-part=prompt-footer><div data-scope=ai data-part=prompt-end>`);
|
|
201
|
+
var _tmpl$4 = /*#__PURE__*/ template(`<form><div data-scope=ai data-part=prompt-main>`);
|
|
202
|
+
function arrowUpIcon() {
|
|
203
|
+
return iconNode("arrow-up", {
|
|
204
|
+
width: "14",
|
|
205
|
+
height: "14"
|
|
206
|
+
});
|
|
207
|
+
}
|
|
208
|
+
function stopIcon() {
|
|
209
|
+
return iconNode("square", {
|
|
210
|
+
width: "14",
|
|
211
|
+
height: "14"
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
/** The prompt vessel: the shared field textarea — self-growing on the
|
|
215
|
+
* machine's autoresize — with the submit seal riding its last line.
|
|
216
|
+
* With mentions it becomes a rich token editor while the value stays
|
|
217
|
+
* ordinary composer text. */
|
|
218
|
+
const PromptInput = withSelfRoot(function PromptInput(props) {
|
|
219
|
+
injectComponentStyle("ai");
|
|
220
|
+
const [own, rest] = splitProps(props, [
|
|
221
|
+
"value",
|
|
222
|
+
"onValueChange",
|
|
223
|
+
"onSubmit",
|
|
224
|
+
"onStop",
|
|
225
|
+
"placeholder",
|
|
226
|
+
"disabled",
|
|
227
|
+
"busy",
|
|
228
|
+
"header",
|
|
229
|
+
"leading",
|
|
230
|
+
"trailing",
|
|
231
|
+
"footer",
|
|
232
|
+
"footerEnd",
|
|
233
|
+
"mentions",
|
|
234
|
+
"onSelect"
|
|
235
|
+
]);
|
|
236
|
+
const messages = useComponentMessages();
|
|
237
|
+
const hostId = useElementId("ai-prompt", () => rest.id);
|
|
238
|
+
const mentionsId = () => `${hostId()}:mentions`;
|
|
239
|
+
const [fieldEl, setFieldEl] = createSignal(null);
|
|
240
|
+
const [editorEl, setEditorEl] = createSignal(null);
|
|
241
|
+
const mentionsActive = () => own.mentions != null;
|
|
242
|
+
const mentions = useMentions(() => ({
|
|
243
|
+
items: own.mentions?.items ?? [],
|
|
244
|
+
trigger: own.mentions?.trigger,
|
|
245
|
+
triggers: own.mentions?.triggers,
|
|
246
|
+
commitKeys: own.mentions?.commitKeys ?? [
|
|
247
|
+
"Enter",
|
|
248
|
+
" ",
|
|
249
|
+
"Tab"
|
|
250
|
+
]
|
|
251
|
+
}), fieldEl, {
|
|
252
|
+
getCaret: () => own.mentions ? readCaret(editorEl()) : void 0,
|
|
253
|
+
getText: () => own.mentions ? serializeEditor(editorEl()) : fieldEl()?.value ?? own.value ?? "",
|
|
254
|
+
setText: (next) => own.onValueChange?.(next),
|
|
255
|
+
select: (entry) => {
|
|
256
|
+
own.onSelect?.(entry);
|
|
257
|
+
return own.mentions?.insertOnSelect !== false || own.mentions?.clearQueryOnSelect !== false;
|
|
258
|
+
},
|
|
259
|
+
commit: (entry) => insertChoice(entry)
|
|
260
|
+
});
|
|
261
|
+
const bindEditor = (node) => {
|
|
262
|
+
setEditorEl(node);
|
|
263
|
+
renderEditor(node, own.value ?? "", own.mentions?.items ?? [], own.mentions?.triggers);
|
|
264
|
+
node.toggleAttribute("data-empty", !own.value);
|
|
265
|
+
};
|
|
266
|
+
const publishEditor = () => {
|
|
267
|
+
const editor = editorEl();
|
|
268
|
+
if (!editor) return;
|
|
269
|
+
const next = serializeEditor(editor);
|
|
270
|
+
editor.toggleAttribute("data-empty", !next);
|
|
271
|
+
own.onValueChange?.(next);
|
|
272
|
+
};
|
|
273
|
+
const insertChoice = (entry) => {
|
|
274
|
+
const editor = editorEl();
|
|
275
|
+
const clearQuery = own.mentions?.insertOnSelect === false && own.mentions?.clearQueryOnSelect !== false;
|
|
276
|
+
if (!editor || entry.disabled || own.mentions?.insertOnSelect === false && !clearQuery) {
|
|
277
|
+
mentions.close();
|
|
278
|
+
return;
|
|
279
|
+
}
|
|
280
|
+
if (clearQuery) {
|
|
281
|
+
const text = serializeEditor(editor);
|
|
282
|
+
const next = text.slice(0, mentions.anchorIndex()) + text.slice(mentions.caretIndex());
|
|
283
|
+
renderEditor(editor, next, own.mentions?.items ?? [], own.mentions?.triggers);
|
|
284
|
+
editor.toggleAttribute("data-empty", !next);
|
|
285
|
+
editor.focus();
|
|
286
|
+
setEditorCaret(editor, mentions.anchorIndex());
|
|
287
|
+
own.onValueChange?.(next);
|
|
288
|
+
mentions.close();
|
|
289
|
+
return;
|
|
290
|
+
}
|
|
291
|
+
own.onSelect?.(entry);
|
|
292
|
+
const next = insertEditorToken(editor, entry, mentions.activeTrigger(), mentions.anchorIndex(), mentions.caretIndex());
|
|
293
|
+
editor.toggleAttribute("data-empty", !next);
|
|
294
|
+
own.onValueChange?.(next);
|
|
295
|
+
mentions.close();
|
|
296
|
+
};
|
|
297
|
+
const send = () => {
|
|
298
|
+
const value = (own.value ?? "").trim();
|
|
299
|
+
if (!value || own.disabled || own.busy) return;
|
|
300
|
+
own.onSubmit?.(value);
|
|
301
|
+
own.onValueChange?.("");
|
|
302
|
+
};
|
|
303
|
+
const row = (part, content) => content != null ? (() => {
|
|
304
|
+
var _el$ = _tmpl$();
|
|
305
|
+
setAttribute(_el$, "data-part", part);
|
|
306
|
+
insert(_el$, content);
|
|
307
|
+
return _el$;
|
|
308
|
+
})() : null;
|
|
309
|
+
const seal = () => own.busy ? createComponent(Button, {
|
|
310
|
+
variant: "solid",
|
|
311
|
+
size: "sm",
|
|
312
|
+
square: true,
|
|
313
|
+
type: "button",
|
|
314
|
+
get ["aria-label"]() {
|
|
315
|
+
return messages().ai.stop;
|
|
316
|
+
},
|
|
317
|
+
get disabled() {
|
|
318
|
+
return own.disabled;
|
|
319
|
+
},
|
|
320
|
+
onClick: () => own.onStop?.(),
|
|
321
|
+
get children() {
|
|
322
|
+
return stopIcon();
|
|
323
|
+
}
|
|
324
|
+
}) : createComponent(Button, {
|
|
325
|
+
variant: "solid",
|
|
326
|
+
size: "sm",
|
|
327
|
+
square: true,
|
|
328
|
+
type: "submit",
|
|
329
|
+
get ["aria-label"]() {
|
|
330
|
+
return messages().ai.send;
|
|
331
|
+
},
|
|
332
|
+
get disabled() {
|
|
333
|
+
return own.disabled || !(own.value ?? "").trim();
|
|
334
|
+
},
|
|
335
|
+
get children() {
|
|
336
|
+
return arrowUpIcon();
|
|
337
|
+
}
|
|
338
|
+
});
|
|
339
|
+
const editorKeydown = (event) => {
|
|
340
|
+
if (event.isComposing || event.keyCode === 229) return;
|
|
341
|
+
if (event.key === "Enter" && event.shiftKey) {
|
|
342
|
+
event.preventDefault();
|
|
343
|
+
const editor = editorEl();
|
|
344
|
+
if (!editor) return;
|
|
345
|
+
own.onValueChange?.(insertLineBreak(editor));
|
|
346
|
+
return;
|
|
347
|
+
}
|
|
348
|
+
if (mentions.onKeydown(event)) return;
|
|
349
|
+
if (event.key === "Enter") {
|
|
350
|
+
event.preventDefault();
|
|
351
|
+
send();
|
|
352
|
+
}
|
|
353
|
+
};
|
|
354
|
+
const hasFooter = () => own.footer != null;
|
|
355
|
+
return (() => {
|
|
356
|
+
var _el$2 = _tmpl$4(), _el$3 = _el$2.firstChild;
|
|
357
|
+
spread(_el$2, mergeProps(rest, {
|
|
358
|
+
"data-scope": "ai",
|
|
359
|
+
"data-part": "prompt",
|
|
360
|
+
"onSubmit": (event) => {
|
|
361
|
+
event.preventDefault();
|
|
362
|
+
send();
|
|
363
|
+
}
|
|
364
|
+
}), false, true);
|
|
365
|
+
insert(_el$2, () => row("prompt-header", own.header), _el$3);
|
|
366
|
+
insert(_el$3, () => row("prompt-leading", own.leading), null);
|
|
367
|
+
insert(_el$3, createComponent(Show, {
|
|
368
|
+
get when() {
|
|
369
|
+
return mentionsActive();
|
|
370
|
+
},
|
|
371
|
+
get fallback() {
|
|
372
|
+
return createComponent(Field.Root, { get children() {
|
|
373
|
+
return createComponent(Field.Textarea, {
|
|
374
|
+
ref: setFieldEl,
|
|
375
|
+
autoresize: true,
|
|
376
|
+
rows: 1,
|
|
377
|
+
get value() {
|
|
378
|
+
return own.value ?? "";
|
|
379
|
+
},
|
|
380
|
+
get placeholder() {
|
|
381
|
+
return own.placeholder ?? messages().ai.conversation;
|
|
382
|
+
},
|
|
383
|
+
get ["aria-label"]() {
|
|
384
|
+
return messages().ai.conversation;
|
|
385
|
+
},
|
|
386
|
+
get disabled() {
|
|
387
|
+
return own.disabled;
|
|
388
|
+
},
|
|
389
|
+
onInput: () => mentions.onInput(),
|
|
390
|
+
onKeyDown: (event) => {
|
|
391
|
+
if (event.isComposing || event.keyCode === 229) return;
|
|
392
|
+
if (mentions.onKeydown(event)) return;
|
|
393
|
+
if (event.key === "Enter" && !event.shiftKey) {
|
|
394
|
+
event.preventDefault();
|
|
395
|
+
send();
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
});
|
|
399
|
+
} });
|
|
400
|
+
},
|
|
401
|
+
get children() {
|
|
402
|
+
var _el$4 = _tmpl$2();
|
|
403
|
+
_el$4.$$keydown = editorKeydown;
|
|
404
|
+
_el$4.$$input = () => {
|
|
405
|
+
publishEditor();
|
|
406
|
+
if (!own.disabled) mentions.onInput();
|
|
407
|
+
};
|
|
408
|
+
use(bindEditor, _el$4);
|
|
409
|
+
effect((_p$) => {
|
|
410
|
+
var _v$ = !own.disabled, _v$2 = own.disabled ? void 0 : 0, _v$3 = messages().ai.conversation, _v$4 = mentions.open(), _v$5 = mentions.open() ? `${mentionsId()}:popup` : void 0, _v$6 = own.disabled || void 0, _v$7 = !(own.value ?? "") ? "" : void 0, _v$8 = own.placeholder ?? messages().ai.conversation, _v$9 = own.disabled || void 0;
|
|
411
|
+
_v$ !== _p$.e && setAttribute(_el$4, "contenteditable", _p$.e = _v$);
|
|
412
|
+
_v$2 !== _p$.t && setAttribute(_el$4, "tabindex", _p$.t = _v$2);
|
|
413
|
+
_v$3 !== _p$.a && setAttribute(_el$4, "aria-label", _p$.a = _v$3);
|
|
414
|
+
_v$4 !== _p$.o && setAttribute(_el$4, "aria-expanded", _p$.o = _v$4);
|
|
415
|
+
_v$5 !== _p$.i && setAttribute(_el$4, "aria-controls", _p$.i = _v$5);
|
|
416
|
+
_v$6 !== _p$.n && setAttribute(_el$4, "aria-disabled", _p$.n = _v$6);
|
|
417
|
+
_v$7 !== _p$.s && setAttribute(_el$4, "data-empty", _p$.s = _v$7);
|
|
418
|
+
_v$8 !== _p$.h && setAttribute(_el$4, "data-placeholder", _p$.h = _v$8);
|
|
419
|
+
_v$9 !== _p$.r && setAttribute(_el$4, "data-disabled", _p$.r = _v$9);
|
|
420
|
+
return _p$;
|
|
421
|
+
}, {
|
|
422
|
+
e: void 0,
|
|
423
|
+
t: void 0,
|
|
424
|
+
a: void 0,
|
|
425
|
+
o: void 0,
|
|
426
|
+
i: void 0,
|
|
427
|
+
n: void 0,
|
|
428
|
+
s: void 0,
|
|
429
|
+
h: void 0,
|
|
430
|
+
r: void 0
|
|
431
|
+
});
|
|
432
|
+
return _el$4;
|
|
433
|
+
}
|
|
434
|
+
}), null);
|
|
435
|
+
insert(_el$3, createComponent(Show, {
|
|
436
|
+
get when() {
|
|
437
|
+
return mentionsActive();
|
|
438
|
+
},
|
|
439
|
+
get children() {
|
|
440
|
+
return createComponent(MentionsVessel, {
|
|
441
|
+
get id() {
|
|
442
|
+
return mentionsId();
|
|
443
|
+
},
|
|
444
|
+
get open() {
|
|
445
|
+
return mentions.open();
|
|
446
|
+
},
|
|
447
|
+
get matches() {
|
|
448
|
+
return mentions.matches();
|
|
449
|
+
},
|
|
450
|
+
get active() {
|
|
451
|
+
return mentions.active();
|
|
452
|
+
},
|
|
453
|
+
get anchor() {
|
|
454
|
+
return editorEl();
|
|
455
|
+
},
|
|
456
|
+
get placement() {
|
|
457
|
+
return own.mentions?.placement ?? "top-start";
|
|
458
|
+
},
|
|
459
|
+
onInsert: insertChoice,
|
|
460
|
+
get onActiveChange() {
|
|
461
|
+
return mentions.setActive;
|
|
462
|
+
},
|
|
463
|
+
onOpenChange: (open) => {
|
|
464
|
+
if (!open) mentions.close();
|
|
465
|
+
}
|
|
466
|
+
});
|
|
467
|
+
}
|
|
468
|
+
}), null);
|
|
469
|
+
insert(_el$3, () => row("prompt-trailing", hasFooter() ? own.trailing : own.trailing ?? seal()), null);
|
|
470
|
+
insert(_el$2, createComponent(Show, {
|
|
471
|
+
get when() {
|
|
472
|
+
return hasFooter();
|
|
473
|
+
},
|
|
474
|
+
get children() {
|
|
475
|
+
var _el$5 = _tmpl$3(), _el$6 = _el$5.firstChild;
|
|
476
|
+
insert(_el$5, () => own.footer, _el$6);
|
|
477
|
+
insert(_el$6, () => own.footerEnd, null);
|
|
478
|
+
insert(_el$6, seal, null);
|
|
479
|
+
return _el$5;
|
|
480
|
+
}
|
|
481
|
+
}), null);
|
|
482
|
+
return _el$2;
|
|
483
|
+
})();
|
|
484
|
+
});
|
|
485
|
+
delegateEvents(["input", "keydown"]);
|
|
486
|
+
export { PromptInput as t };
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { n as withSelfRoot } from "./family-
|
|
2
|
-
import { n as iconHtml } from "./icon-
|
|
3
|
-
import { n as useComponentMessages } from "./use-component-messages-
|
|
4
|
-
import {
|
|
1
|
+
import { n as withSelfRoot } from "./family-B5HtE0on.mjs";
|
|
2
|
+
import { n as iconHtml } from "./icon-DQqYA2fO.mjs";
|
|
3
|
+
import { n as useComponentMessages } from "./use-component-messages-DS9ppb4C.mjs";
|
|
4
|
+
import { mergeProps, spread, template, use } from "solid-js/web";
|
|
5
5
|
import { injectComponentStyle } from "@bysages/core/styling";
|
|
6
6
|
import { createEffect, createMemo, onMount, splitProps } from "solid-js";
|
|
7
|
-
import {
|
|
8
|
-
|
|
7
|
+
import { renderMarkdown } from "@bysages/core/markdown";
|
|
8
|
+
// src/components/ai-response/code-copy.ts
|
|
9
9
|
/** The two icons a copy affordance needs: the stamp and its
|
|
10
10
|
* confirmation. Inline SVG keeps the enhancement framework-agnostic —
|
|
11
11
|
* it lives beside the renderer's generated code HTML. */
|
|
@@ -67,8 +67,7 @@ async function clickCodeCopy(event, copyLabel, copiedLabel) {
|
|
|
67
67
|
button.setAttribute("aria-label", copyLabel);
|
|
68
68
|
}, REVERT_MS);
|
|
69
69
|
}
|
|
70
|
-
|
|
71
|
-
//#region src/components/ai-response/tables.ts
|
|
70
|
+
// src/components/ai-response/tables.ts
|
|
72
71
|
/** Wide tables ride a scrolling lane instead of bursting the column.
|
|
73
72
|
* The lane is a plain div: the table-as-scroll-container form is what
|
|
74
73
|
* ate the mouse wheel over plain tables. Idempotent, so it can run
|
|
@@ -106,14 +105,14 @@ function wrapResponseTables(root) {
|
|
|
106
105
|
watchLane(lane);
|
|
107
106
|
}
|
|
108
107
|
}
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
var _tmpl$ = /* @__PURE__ */ template(`<div>`);
|
|
108
|
+
// src/components/ai-response/index.tsx
|
|
109
|
+
var _tmpl$ = /*#__PURE__*/ template(`<div>`);
|
|
112
110
|
/** Markdown set on the paper. Rendering goes through
|
|
113
|
-
* `@
|
|
111
|
+
* `@bysages/core/markdown`, whose defaults leave raw HTML and executable
|
|
114
112
|
* links inert — streaming-safe by construction. */
|
|
115
113
|
const Response = withSelfRoot(function Response(props) {
|
|
116
114
|
injectComponentStyle("ai");
|
|
115
|
+
injectComponentStyle("markdown");
|
|
117
116
|
const [own, rest] = splitProps(props, [
|
|
118
117
|
"content",
|
|
119
118
|
"highlighter",
|
|
@@ -121,7 +120,7 @@ const Response = withSelfRoot(function Response(props) {
|
|
|
121
120
|
"copiedLabel"
|
|
122
121
|
]);
|
|
123
122
|
const messages = useComponentMessages();
|
|
124
|
-
const html = createMemo(() =>
|
|
123
|
+
const html = createMemo(() => renderMarkdown(own.content, own.highlighter ? { highlighter: own.highlighter } : void 0));
|
|
125
124
|
let root;
|
|
126
125
|
onMount(() => createEffect(() => {
|
|
127
126
|
html();
|
|
@@ -131,19 +130,18 @@ const Response = withSelfRoot(function Response(props) {
|
|
|
131
130
|
const onClick = (event) => {
|
|
132
131
|
clickCodeCopy(event, own.copyLabel ?? messages().ai.copyCode, own.copiedLabel ?? messages().ai.copied);
|
|
133
132
|
};
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
|
|
133
|
+
return (() => {
|
|
134
|
+
var _el$ = _tmpl$();
|
|
135
|
+
use((el) => root = el, _el$);
|
|
136
|
+
spread(_el$, mergeProps(rest, {
|
|
137
|
+
"data-scope": "ai",
|
|
138
|
+
"data-part": "response",
|
|
139
|
+
"onClick": onClick,
|
|
140
|
+
get innerHTML() {
|
|
141
|
+
return html();
|
|
142
|
+
}
|
|
143
|
+
}), false, false);
|
|
144
|
+
return _el$;
|
|
145
|
+
})();
|
|
147
146
|
});
|
|
148
|
-
//#endregion
|
|
149
147
|
export { Response as t };
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import { r as iconNode } from "./icon-
|
|
2
|
-
|
|
1
|
+
import { r as iconNode } from "./icon-DQqYA2fO.mjs";
|
|
2
|
+
// src/components/ai/chevron.tsx
|
|
3
3
|
/** The folding chevron the shared indicator turns. */
|
|
4
4
|
function chevron() {
|
|
5
5
|
return iconNode("chevron-right");
|
|
6
6
|
}
|
|
7
|
-
//#endregion
|
|
8
7
|
export { chevron as t };
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { Accordion as Accordion$1, AccordionRootProps } from "@ark-ui/solid/accordion";
|
|
2
|
-
//#region src/components/accordion/index.d.ts
|
|
3
2
|
/** Ark's Accordion, dressed in the paper-and-ink system: a ruled sheet
|
|
4
3
|
* folded by quiet rows, unfolding with a spring-chevoned dissolve. The
|
|
5
4
|
* API is Ark's own — Root, Item, ItemTrigger, ItemContent, ItemIndicator. */
|
|
@@ -24,4 +23,4 @@ type AccordionParts = Omit<typeof Accordion$1, "Root"> & {
|
|
|
24
23
|
Root: typeof AccordionRoot;
|
|
25
24
|
};
|
|
26
25
|
export declare const Accordion: typeof AccordionFacade & AccordionParts;
|
|
27
|
-
|
|
26
|
+
export {};
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { t as defineFamily } from "../../family-
|
|
2
|
-
import { r as iconNode } from "../../icon-
|
|
3
|
-
import { t as useElementId } from "../../id-
|
|
4
|
-
import { createComponent, insert, memo, mergeProps, template } from "
|
|
1
|
+
import { t as defineFamily } from "../../family-B5HtE0on.mjs";
|
|
2
|
+
import { r as iconNode } from "../../icon-DQqYA2fO.mjs";
|
|
3
|
+
import { t as useElementId } from "../../id-DGvz-2rQ.mjs";
|
|
4
|
+
import { createComponent, insert, memo, mergeProps, template } from "solid-js/web";
|
|
5
5
|
import { Accordion as Accordion$1 } from "@ark-ui/solid/accordion";
|
|
6
6
|
import { injectComponentStyle } from "@bysages/core/styling";
|
|
7
7
|
import { For } from "solid-js";
|
|
8
|
-
|
|
9
|
-
var _tmpl$ =
|
|
8
|
+
// src/components/accordion/index.tsx
|
|
9
|
+
var _tmpl$ = /*#__PURE__*/ template(`<p>`);
|
|
10
10
|
/** Ark's Accordion, dressed in the paper-and-ink system: a ruled sheet
|
|
11
11
|
* folded by quiet rows, unfolding with a spring-chevoned dissolve. The
|
|
12
12
|
* API is Ark's own — Root, Item, ItemTrigger, ItemContent, ItemIndicator. */
|
|
@@ -34,9 +34,7 @@ function AccordionFacade(props) {
|
|
|
34
34
|
get defaultValue() {
|
|
35
35
|
return props.defaultValue;
|
|
36
36
|
}
|
|
37
|
-
}, () => {
|
|
38
|
-
return props.value === void 0 ? {} : { value: props.value };
|
|
39
|
-
}, {
|
|
37
|
+
}, () => props.value === void 0 ? {} : { value: props.value }, {
|
|
40
38
|
onValueChange: (details) => props.onValueChange?.(details.value),
|
|
41
39
|
get children() {
|
|
42
40
|
return createComponent(For, {
|
|
@@ -49,16 +47,12 @@ function AccordionFacade(props) {
|
|
|
49
47
|
},
|
|
50
48
|
get children() {
|
|
51
49
|
return [createComponent(Accordion$1.ItemTrigger, { get children() {
|
|
52
|
-
return [memo(() => {
|
|
53
|
-
return item.title;
|
|
54
|
-
}), createComponent(Accordion$1.ItemIndicator, { get children() {
|
|
50
|
+
return [memo(() => item.title), createComponent(Accordion$1.ItemIndicator, { get children() {
|
|
55
51
|
return iconNode("chevron-down");
|
|
56
52
|
} })];
|
|
57
53
|
} }), createComponent(Accordion$1.ItemContent, { get children() {
|
|
58
54
|
var _el$ = _tmpl$();
|
|
59
|
-
insert(_el$, () =>
|
|
60
|
-
return item.content;
|
|
61
|
-
});
|
|
55
|
+
insert(_el$, () => item.content);
|
|
62
56
|
return _el$;
|
|
63
57
|
} })];
|
|
64
58
|
}
|
|
@@ -72,5 +66,4 @@ const Accordion = defineFamily(AccordionFacade, {
|
|
|
72
66
|
Root: AccordionRoot
|
|
73
67
|
});
|
|
74
68
|
injectComponentStyle("accordion");
|
|
75
|
-
//#endregion
|
|
76
69
|
export { Accordion };
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { JSX } from "solid-js";
|
|
2
|
-
//#region src/components/affix/index.d.ts
|
|
3
2
|
export interface AffixProps extends JSX.HTMLAttributes<HTMLDivElement> {
|
|
4
3
|
/** Where the content pins when it reaches the top of the scrolling
|
|
5
4
|
* ancestor — the height of any fixed header it must clear. */
|
|
@@ -18,5 +17,4 @@ export interface AffixProps extends JSX.HTMLAttributes<HTMLDivElement> {
|
|
|
18
17
|
*/
|
|
19
18
|
export declare const Affix: ((props: AffixProps) => JSX.Element) & {
|
|
20
19
|
Root: (props: AffixProps) => JSX.Element;
|
|
21
|
-
};
|
|
22
|
-
//#endregion
|
|
20
|
+
};
|