@k2b/ui 0.16.0 → 0.18.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/dist/browser/chat/ChatComposer.js +261 -274
- package/dist/browser/chat/ChatComposer.js.map +1 -1
- package/dist/browser/chat/ChatPrimitives.js +9 -6
- package/dist/browser/chat/ChatPrimitives.js.map +1 -1
- package/dist/browser/content/FileView.js +62 -36
- package/dist/browser/content/FileView.js.map +1 -1
- package/dist/browser/content/MarkdownView.js +9 -3
- package/dist/browser/content/MarkdownView.js.map +1 -1
- package/dist/browser/content/VideoPlayer.js +279 -0
- package/dist/browser/content/VideoPlayer.js.map +1 -0
- package/dist/browser/content/file-view-preview.js +2 -2
- package/dist/browser/content/file-view-preview.js.map +1 -1
- package/dist/browser/content/index.js +2 -0
- package/dist/browser/content/index.js.map +1 -1
- package/dist/browser/content/markdown-links.js +178 -0
- package/dist/browser/content/markdown-links.js.map +1 -0
- package/dist/browser/inputs/FileDropTarget.js +129 -0
- package/dist/browser/inputs/FileDropTarget.js.map +1 -0
- package/dist/browser/inputs/FileInputs.js +37 -11
- package/dist/browser/inputs/FileInputs.js.map +1 -1
- package/dist/browser/inputs/file-drop.js +338 -0
- package/dist/browser/inputs/file-drop.js.map +1 -0
- package/dist/browser/inputs/index.js +1 -0
- package/dist/browser/inputs/index.js.map +1 -1
- package/dist/browser/inputs/markdown/MarkdownEditor.js +72 -78
- package/dist/browser/inputs/markdown/MarkdownEditor.js.map +1 -1
- package/dist/browser/intl/messages.js +97 -4
- package/dist/browser/intl/messages.js.map +1 -1
- package/dist/browser/layout/AppWorkspace.js +210 -44
- package/dist/browser/layout/AppWorkspace.js.map +1 -1
- package/dist/browser/layout/Navigation.js +278 -170
- package/dist/browser/layout/Navigation.js.map +1 -1
- package/dist/browser/layout/index.js.map +1 -1
- package/dist/browser/layout/navigation-model.js +3 -1
- package/dist/browser/layout/navigation-model.js.map +1 -1
- package/dist/browser/surfaces/NoticeCard.js +47 -44
- package/dist/browser/surfaces/NoticeCard.js.map +1 -1
- package/dist/ssr/chat/ChatComposer.js +59 -48
- package/dist/ssr/chat/ChatComposer.js.map +1 -1
- package/dist/ssr/chat/ChatPrimitives.js +9 -6
- package/dist/ssr/chat/ChatPrimitives.js.map +1 -1
- package/dist/ssr/content/FileView.js +30 -6
- package/dist/ssr/content/FileView.js.map +1 -1
- package/dist/ssr/content/MarkdownView.js +9 -3
- package/dist/ssr/content/MarkdownView.js.map +1 -1
- package/dist/ssr/content/VideoPlayer.js +208 -0
- package/dist/ssr/content/VideoPlayer.js.map +1 -0
- package/dist/ssr/content/file-view-preview.js +2 -2
- package/dist/ssr/content/file-view-preview.js.map +1 -1
- package/dist/ssr/content/index.js +2 -0
- package/dist/ssr/content/index.js.map +1 -1
- package/dist/ssr/content/markdown-links.js +178 -0
- package/dist/ssr/content/markdown-links.js.map +1 -0
- package/dist/ssr/inputs/FileDropTarget.js +103 -0
- package/dist/ssr/inputs/FileDropTarget.js.map +1 -0
- package/dist/ssr/inputs/FileInputs.js +32 -10
- package/dist/ssr/inputs/FileInputs.js.map +1 -1
- package/dist/ssr/inputs/file-drop.js +338 -0
- package/dist/ssr/inputs/file-drop.js.map +1 -0
- package/dist/ssr/inputs/index.js +1 -0
- package/dist/ssr/inputs/index.js.map +1 -1
- package/dist/ssr/inputs/markdown/MarkdownEditor.js +14 -2
- package/dist/ssr/inputs/markdown/MarkdownEditor.js.map +1 -1
- package/dist/ssr/intl/messages.js +97 -4
- package/dist/ssr/intl/messages.js.map +1 -1
- package/dist/ssr/layout/AppWorkspace.js +173 -27
- package/dist/ssr/layout/AppWorkspace.js.map +1 -1
- package/dist/ssr/layout/Navigation.js +175 -102
- package/dist/ssr/layout/Navigation.js.map +1 -1
- package/dist/ssr/layout/index.js.map +1 -1
- package/dist/ssr/layout/navigation-model.js +3 -1
- package/dist/ssr/layout/navigation-model.js.map +1 -1
- package/dist/ssr/surfaces/NoticeCard.js +17 -12
- package/dist/ssr/surfaces/NoticeCard.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/types/chat/ChatPrimitives.d.ts +1 -1
- package/dist/types/content/VideoPlayer.d.ts +41 -0
- package/dist/types/content/index.d.ts +2 -0
- package/dist/types/content/markdown-links.d.ts +66 -0
- package/dist/types/inputs/FileDropTarget.d.ts +23 -0
- package/dist/types/inputs/FileInputs.d.ts +2 -0
- package/dist/types/inputs/file-drop.d.ts +80 -0
- package/dist/types/inputs/index.d.ts +2 -0
- package/dist/types/intl/messages.d.ts +47 -0
- package/dist/types/layout/AppWorkspace.d.ts +21 -0
- package/dist/types/layout/index.d.ts +2 -2
- package/dist/types/layout/navigation-model.d.ts +29 -0
- package/package.json +1 -1
|
@@ -15,7 +15,7 @@ import { getNextElement as _$getNextElement } from "solid-js/web";
|
|
|
15
15
|
import { memo as _$memo } from "solid-js/web";
|
|
16
16
|
var _tmpl$ = /*#__PURE__*/_$template(`<i aria-hidden=true>`),
|
|
17
17
|
_tmpl$2 = /*#__PURE__*/_$template(`<div class=k2b-markdown-editor__placeholder aria-hidden=true>`),
|
|
18
|
-
_tmpl$3 = /*#__PURE__*/_$template(`<div class=k2b-markdown-editor__stats aria-hidden=true><span
|
|
18
|
+
_tmpl$3 = /*#__PURE__*/_$template(`<div class=k2b-markdown-editor__stats aria-hidden=true><span></span><span></span><span>`),
|
|
19
19
|
_tmpl$4 = /*#__PURE__*/_$template(`<div class=k2b-autocomplete__status role=status><i class="ti ti-loader-2 k2b-spin"aria-hidden=true></i>Loading suggestions`),
|
|
20
20
|
_tmpl$5 = /*#__PURE__*/_$template(`<div popover=manual class=k2b-autocomplete__options role=presentation><div class=k2b-autocomplete__listbox role=listbox><!$><!/><!$><!/><!$><!/>`),
|
|
21
21
|
_tmpl$6 = /*#__PURE__*/_$template(`<div class=k2b-markdown-editor role=group><!$><!/><div class=k2b-markdown-editor__surface><!$><!/><div class=k2b-markdown-editor__preview aria-hidden=true></div><textarea class=k2b-markdown-editor__input></textarea></div><!$><!/><!$><!/>`),
|
|
@@ -27,6 +27,7 @@ import { highlight } from "@k2b/stdlib";
|
|
|
27
27
|
import { createEffect, createMemo, createSignal, createUniqueId, For, onCleanup, onMount, Show, untrack } from "solid-js";
|
|
28
28
|
import { Tooltip } from "../../feedback/Tooltip";
|
|
29
29
|
import { createFieldMeta, Field, fieldControlAria } from "../../internal/field";
|
|
30
|
+
import { useLocale } from "../../intl/locale";
|
|
30
31
|
import { useUiMessages } from "../../intl/messages";
|
|
31
32
|
import { abbreviations as abbreviationsCompletion, buildSuggestContext, collectKnownLabels, createCompletionBehaviorState, detectQuery, displayLabel, renderWithOverlay, resolveSuggestions } from "../completion";
|
|
32
33
|
import { resolveMaybeAccessor } from "../field-contract";
|
|
@@ -36,6 +37,8 @@ import { isInCodeZone } from "./code-zone";
|
|
|
36
37
|
import Toolbar from "./Toolbar";
|
|
37
38
|
export function MarkdownEditor(props) {
|
|
38
39
|
const messages = useUiMessages();
|
|
40
|
+
const locale = useLocale();
|
|
41
|
+
const formatCount = value => new Intl.NumberFormat(locale()).format(value);
|
|
39
42
|
const meta = createFieldMeta(props.id);
|
|
40
43
|
let textarea;
|
|
41
44
|
let preview;
|
|
@@ -451,17 +454,17 @@ export function MarkdownEditor(props) {
|
|
|
451
454
|
},
|
|
452
455
|
get children() {
|
|
453
456
|
var _el$2 = _$getNextElement(_tmpl$6),
|
|
454
|
-
_el$
|
|
455
|
-
[_el$
|
|
456
|
-
_el$3 = _el$
|
|
457
|
+
_el$20 = _el$2.firstChild,
|
|
458
|
+
[_el$21, _co$5] = _$getNextMarker(_el$20.nextSibling),
|
|
459
|
+
_el$3 = _el$21.nextSibling,
|
|
457
460
|
_el$7 = _el$3.firstChild,
|
|
458
461
|
[_el$8, _co$] = _$getNextMarker(_el$7.nextSibling),
|
|
459
462
|
_el$5 = _el$8.nextSibling,
|
|
460
463
|
_el$6 = _el$5.nextSibling,
|
|
461
|
-
_el$
|
|
462
|
-
[_el$
|
|
463
|
-
_el$
|
|
464
|
-
[_el$
|
|
464
|
+
_el$22 = _el$3.nextSibling,
|
|
465
|
+
[_el$23, _co$6] = _$getNextMarker(_el$22.nextSibling),
|
|
466
|
+
_el$24 = _el$23.nextSibling,
|
|
467
|
+
[_el$25, _co$7] = _$getNextMarker(_el$24.nextSibling);
|
|
465
468
|
_el$2.$$keydown = event => {
|
|
466
469
|
if (props.onSave && (event.metaKey || event.ctrlKey) && event.key.toLowerCase() === "s") {
|
|
467
470
|
event.preventDefault();
|
|
@@ -507,7 +510,7 @@ export function MarkdownEditor(props) {
|
|
|
507
510
|
}
|
|
508
511
|
});
|
|
509
512
|
}
|
|
510
|
-
}), _el$
|
|
513
|
+
}), _el$21, _co$5);
|
|
511
514
|
_$insert(_el$3, _$createComponent(Show, {
|
|
512
515
|
get when() {
|
|
513
516
|
return _$memo(() => !!!localValue())() && props.placeholder;
|
|
@@ -582,92 +585,83 @@ export function MarkdownEditor(props) {
|
|
|
582
585
|
get children() {
|
|
583
586
|
var _el$9 = _$getNextElement(_tmpl$3),
|
|
584
587
|
_el$0 = _el$9.firstChild,
|
|
585
|
-
_el$
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
_el$21 = _el$23.nextSibling,
|
|
600
|
-
_el$24 = _el$21.nextSibling,
|
|
601
|
-
[_el$25, _co$7] = _$getNextMarker(_el$24.nextSibling);
|
|
602
|
-
_$insert(_el$0, () => stats().lines, _el$11, _co$2);
|
|
603
|
-
_$insert(_el$0, () => stats().lines === 1 ? "line" : "lines", _el$13, _co$3);
|
|
604
|
-
_$insert(_el$14, () => stats().words, _el$17, _co$4);
|
|
605
|
-
_$insert(_el$14, () => stats().words === 1 ? "word" : "words", _el$19, _co$5);
|
|
606
|
-
_$insert(_el$20, () => stats().chars, _el$23, _co$6);
|
|
607
|
-
_$insert(_el$20, () => stats().chars === 1 ? "char" : "chars", _el$25, _co$7);
|
|
588
|
+
_el$1 = _el$0.nextSibling,
|
|
589
|
+
_el$10 = _el$1.nextSibling;
|
|
590
|
+
_$insert(_el$0, () => messages().editorLines({
|
|
591
|
+
count: stats().lines,
|
|
592
|
+
value: formatCount(stats().lines)
|
|
593
|
+
}));
|
|
594
|
+
_$insert(_el$1, () => messages().editorWords({
|
|
595
|
+
count: stats().words,
|
|
596
|
+
value: formatCount(stats().words)
|
|
597
|
+
}));
|
|
598
|
+
_$insert(_el$10, () => messages().editorCharacters({
|
|
599
|
+
count: stats().chars,
|
|
600
|
+
value: formatCount(stats().chars)
|
|
601
|
+
}));
|
|
608
602
|
_$effect(() => _$setAttribute(_el$9, "data-empty", stats().chars === 0 ? "true" : undefined));
|
|
609
603
|
return _el$9;
|
|
610
604
|
}
|
|
611
|
-
}), _el$
|
|
605
|
+
}), _el$23, _co$6);
|
|
612
606
|
_$insert(_el$2, _$createComponent(Show, {
|
|
613
607
|
get when() {
|
|
614
608
|
return state() || loading() || completionError();
|
|
615
609
|
},
|
|
616
610
|
get children() {
|
|
617
|
-
var _el$
|
|
618
|
-
_el$
|
|
619
|
-
_el$
|
|
620
|
-
[_el$
|
|
621
|
-
_el$
|
|
622
|
-
[_el$
|
|
623
|
-
_el$
|
|
624
|
-
[_el$
|
|
611
|
+
var _el$11 = _$getNextElement(_tmpl$5),
|
|
612
|
+
_el$12 = _el$11.firstChild,
|
|
613
|
+
_el$14 = _el$12.firstChild,
|
|
614
|
+
[_el$15, _co$2] = _$getNextMarker(_el$14.nextSibling),
|
|
615
|
+
_el$16 = _el$15.nextSibling,
|
|
616
|
+
[_el$17, _co$3] = _$getNextMarker(_el$16.nextSibling),
|
|
617
|
+
_el$18 = _el$17.nextSibling,
|
|
618
|
+
[_el$19, _co$4] = _$getNextMarker(_el$18.nextSibling);
|
|
625
619
|
var _ref$2 = dropdown;
|
|
626
|
-
typeof _ref$2 === "function" ? _$use(_ref$2, _el$
|
|
627
|
-
_$setAttribute(_el$
|
|
628
|
-
_$insert(_el$
|
|
620
|
+
typeof _ref$2 === "function" ? _$use(_ref$2, _el$11) : dropdown = _el$11;
|
|
621
|
+
_$setAttribute(_el$12, "id", listboxId);
|
|
622
|
+
_$insert(_el$12, _$createComponent(Show, {
|
|
629
623
|
get when() {
|
|
630
624
|
return loading();
|
|
631
625
|
},
|
|
632
626
|
get children() {
|
|
633
627
|
return _$getNextElement(_tmpl$4);
|
|
634
628
|
}
|
|
635
|
-
}), _el$
|
|
636
|
-
_$insert(_el$
|
|
629
|
+
}), _el$15, _co$2);
|
|
630
|
+
_$insert(_el$12, _$createComponent(Show, {
|
|
637
631
|
get when() {
|
|
638
632
|
return completionError();
|
|
639
633
|
},
|
|
640
634
|
children: message => (() => {
|
|
641
|
-
var _el$
|
|
642
|
-
_el$
|
|
643
|
-
_el$
|
|
644
|
-
_el$
|
|
645
|
-
_$insert(_el$
|
|
646
|
-
_el$
|
|
647
|
-
_el$
|
|
648
|
-
_$insert(_el$
|
|
635
|
+
var _el$27 = _$getNextElement(_tmpl$8),
|
|
636
|
+
_el$28 = _el$27.firstChild,
|
|
637
|
+
_el$29 = _el$28.nextSibling,
|
|
638
|
+
_el$30 = _el$29.nextSibling;
|
|
639
|
+
_$insert(_el$29, message);
|
|
640
|
+
_el$30.$$click = retryCompletion;
|
|
641
|
+
_el$30.$$mousedown = event => event.preventDefault();
|
|
642
|
+
_$insert(_el$30, () => messages().retry);
|
|
649
643
|
_$runHydrationEvents();
|
|
650
|
-
return _el$
|
|
644
|
+
return _el$27;
|
|
651
645
|
})()
|
|
652
|
-
}), _el$
|
|
653
|
-
_$insert(_el$
|
|
646
|
+
}), _el$17, _co$3);
|
|
647
|
+
_$insert(_el$12, _$createComponent(For, {
|
|
654
648
|
get each() {
|
|
655
649
|
return state()?.suggestions ?? [];
|
|
656
650
|
},
|
|
657
651
|
children: (suggestion, index) => // biome-ignore lint/a11y/useKeyWithClickEvents: the owning textarea handles keyboard activation through aria-activedescendant.
|
|
658
652
|
(() => {
|
|
659
|
-
var _el$
|
|
660
|
-
_el$
|
|
661
|
-
_el$
|
|
662
|
-
[_el$
|
|
663
|
-
_el$
|
|
653
|
+
var _el$31 = _$getNextElement(_tmpl$9),
|
|
654
|
+
_el$32 = _el$31.firstChild,
|
|
655
|
+
_el$33 = _el$32.nextSibling,
|
|
656
|
+
[_el$34, _co$8] = _$getNextMarker(_el$33.nextSibling);
|
|
657
|
+
_el$31.$$click = () => {
|
|
664
658
|
activateSuggestion(index());
|
|
665
659
|
textarea?.focus();
|
|
666
660
|
};
|
|
667
|
-
_el$
|
|
661
|
+
_el$31.$$mousedown = event => {
|
|
668
662
|
event.preventDefault();
|
|
669
663
|
};
|
|
670
|
-
_el$
|
|
664
|
+
_el$31.addEventListener("mouseenter", () => {
|
|
671
665
|
const current = state();
|
|
672
666
|
if (current) {
|
|
673
667
|
setState({
|
|
@@ -676,44 +670,44 @@ export function MarkdownEditor(props) {
|
|
|
676
670
|
});
|
|
677
671
|
}
|
|
678
672
|
});
|
|
679
|
-
_$insert(_el$
|
|
680
|
-
_$insert(_el$
|
|
673
|
+
_$insert(_el$32, () => displayLabel(suggestion, state().context.completion));
|
|
674
|
+
_$insert(_el$31, _$createComponent(Show, {
|
|
681
675
|
get when() {
|
|
682
676
|
return suggestion.hint;
|
|
683
677
|
},
|
|
684
678
|
children: hint => (() => {
|
|
685
|
-
var _el$
|
|
686
|
-
_$insert(_el$
|
|
687
|
-
return _el$
|
|
679
|
+
var _el$35 = _$getNextElement(_tmpl$0);
|
|
680
|
+
_$insert(_el$35, hint);
|
|
681
|
+
return _el$35;
|
|
688
682
|
})()
|
|
689
|
-
}), _el$
|
|
683
|
+
}), _el$34, _co$8);
|
|
690
684
|
_$effect(_p$ => {
|
|
691
685
|
var _v$0 = optionId(index()),
|
|
692
686
|
_v$1 = index() === state()?.selectedIndex;
|
|
693
|
-
_v$0 !== _p$.e && _$setAttribute(_el$
|
|
694
|
-
_v$1 !== _p$.t && _$setAttribute(_el$
|
|
687
|
+
_v$0 !== _p$.e && _$setAttribute(_el$31, "id", _p$.e = _v$0);
|
|
688
|
+
_v$1 !== _p$.t && _$setAttribute(_el$31, "aria-selected", _p$.t = _v$1);
|
|
695
689
|
return _p$;
|
|
696
690
|
}, {
|
|
697
691
|
e: undefined,
|
|
698
692
|
t: undefined
|
|
699
693
|
});
|
|
700
694
|
_$runHydrationEvents();
|
|
701
|
-
return _el$
|
|
695
|
+
return _el$31;
|
|
702
696
|
})()
|
|
703
|
-
}), _el$
|
|
697
|
+
}), _el$19, _co$4);
|
|
704
698
|
_$effect(_p$ => {
|
|
705
699
|
var _v$ = messages().completionSuggestions,
|
|
706
700
|
_v$2 = messages().suggestions;
|
|
707
|
-
_v$ !== _p$.e && _$setAttribute(_el$
|
|
708
|
-
_v$2 !== _p$.t && _$setAttribute(_el$
|
|
701
|
+
_v$ !== _p$.e && _$setAttribute(_el$11, "aria-label", _p$.e = _v$);
|
|
702
|
+
_v$2 !== _p$.t && _$setAttribute(_el$12, "aria-label", _p$.t = _v$2);
|
|
709
703
|
return _p$;
|
|
710
704
|
}, {
|
|
711
705
|
e: undefined,
|
|
712
706
|
t: undefined
|
|
713
707
|
});
|
|
714
|
-
return _el$
|
|
708
|
+
return _el$11;
|
|
715
709
|
}
|
|
716
|
-
}), _el$
|
|
710
|
+
}), _el$25, _co$7);
|
|
717
711
|
_$effect(_p$ => {
|
|
718
712
|
var _v$3 = props.label ? meta.labelId : undefined,
|
|
719
713
|
_v$4 = !props.label ? props["aria-label"] : undefined,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["inputs/markdown/MarkdownEditor.tsx"],"sourcesContent":["import { highlight } from \"@k2b/stdlib\";\nimport { createEffect, createMemo, createSignal, createUniqueId, For, type JSX, onCleanup, onMount, Show, untrack } from \"solid-js\";\nimport { Tooltip } from \"../../feedback/Tooltip\";\nimport { createFieldMeta, Field, fieldControlAria } from \"../../internal/field\";\nimport { useUiMessages } from \"../../intl/messages\";\nimport {\n abbreviations as abbreviationsCompletion,\n buildSuggestContext,\n type Completion,\n collectKnownLabels,\n createCompletionBehaviorState,\n detectQuery,\n displayLabel,\n type QueryContext,\n renderWithOverlay,\n resolveSuggestions,\n type Suggestion,\n} from \"../completion\";\nimport type { ValueFieldProps } from \"../field-contract\";\nimport { resolveMaybeAccessor } from \"../field-contract\";\nimport { computeActiveFormats } from \"./active-formats\";\nimport { handleListContinuation, handleShortcut, handleSmartPaste } from \"./behaviors\";\nimport { isInCodeZone } from \"./code-zone\";\nimport Toolbar from \"./Toolbar\";\n\nexport type MarkdownEditorProps = ValueFieldProps<string> & {\n onSubmit?: () => void;\n placeholder?: string;\n lines?: number;\n noToolbar?: boolean;\n spellcheck?: boolean;\n name?: string;\n maxLength?: number;\n textareaRef?: (element: HTMLTextAreaElement) => void;\n abbreviations?: Record<string, string>;\n completions?: readonly Completion[];\n showStats?: boolean;\n variant?: \"default\" | \"paper\" | \"embedded\";\n fill?: boolean;\n /** Groups save and close at the end of the toolbar. The caller owns navigation and unsaved-change confirmation. */\n onClose?: () => void;\n onSave?: () => void;\n saveDisabled?: boolean;\n saving?: boolean;\n /** Shows a successful-save check. The caller clears it after a brief delay or the next edit. */\n saved?: boolean;\n toolbarTrailing?: JSX.Element;\n};\n\ntype CompletionState = {\n context: QueryContext;\n suggestions: readonly Suggestion[];\n selectedIndex: number;\n};\n\nexport function MarkdownEditor(props: MarkdownEditorProps): JSX.Element {\n const messages = useUiMessages();\n const meta = createFieldMeta(props.id);\n let textarea: HTMLTextAreaElement | undefined;\n let preview: HTMLDivElement | undefined;\n let dropdown: HTMLDivElement | undefined;\n let completionAbort: AbortController | null = null;\n let completionTimer: ReturnType<typeof setTimeout> | null = null;\n let overlayFrame: number | undefined;\n let overlayInitialized = false;\n let renderPendingOverlay: (() => void) | undefined;\n const completionBehavior = createCompletionBehaviorState();\n\n const [textareaSignal, setTextareaSignal] = createSignal<HTMLTextAreaElement | null>(null);\n const [activeFormats, setActiveFormats] = createSignal<Set<string>>(new Set());\n const [composing, setComposing] = createSignal(false);\n const [localValue, setLocalValue] = createSignal(resolveMaybeAccessor(props.value) ?? \"\");\n const error = () => resolveMaybeAccessor(props.error);\n const [state, setState] = createSignal<CompletionState | null>(null);\n const [loading, setLoading] = createSignal(false);\n const [completionError, setCompletionError] = createSignal<string | null>(null);\n const [dropdownOpen, setDropdownOpen] = createSignal(false);\n const completionId = createUniqueId();\n const listboxId = `${meta.controlId}-${completionId}-suggestions`;\n const optionId = (index: number): string => `${listboxId}-${index}`;\n const activeSuggestion = (): Suggestion | null => {\n const current = state();\n return current?.suggestions[current.selectedIndex] ?? null;\n };\n\n const mergedCompletions = createMemo<readonly Completion[] | undefined>(() => {\n const merged: Completion[] = [];\n if (props.abbreviations && Object.keys(props.abbreviations).length > 0) {\n merged.push(abbreviationsCompletion(props.abbreviations));\n }\n if (props.completions) merged.push(...props.completions);\n return merged.length > 0 ? merged : undefined;\n });\n const knownLabels = createMemo(() => collectKnownLabels(mergedCompletions()));\n\n createEffect(() => {\n const incoming = resolveMaybeAccessor(props.value);\n if (incoming !== undefined && incoming !== null && incoming !== untrack(localValue)) {\n setLocalValue(incoming);\n }\n });\n\n createEffect(() => {\n const target = localValue();\n if (!composing() && textarea && textarea.value !== target) {\n textarea.value = target;\n }\n });\n\n createEffect(() => {\n if (!preview) return;\n const value = localValue();\n const labels = knownLabels();\n const current = state();\n const active = activeSuggestion();\n const ghost =\n current && active\n ? {\n at: current.context.end,\n text: active.text.slice(current.context.text.length),\n }\n : undefined;\n const anchor = current && !ghost ? { at: current.context.end } : undefined;\n renderPendingOverlay = () => {\n if (!preview) return;\n preview.innerHTML = renderWithOverlay(value, (text) => highlight.markdown(text, { knownLabels: labels }), { ghost, anchor });\n if (textarea) {\n preview.scrollTop = textarea.scrollTop;\n preview.scrollLeft = textarea.scrollLeft;\n }\n if (dropdown?.matches(\":popover-open\")) positionDropdown();\n };\n if (!overlayInitialized) {\n overlayInitialized = true;\n renderPendingOverlay();\n renderPendingOverlay = undefined;\n return;\n }\n if (overlayFrame !== undefined) return;\n overlayFrame = requestAnimationFrame(() => {\n overlayFrame = undefined;\n const render = renderPendingOverlay;\n renderPendingOverlay = undefined;\n render?.();\n });\n });\n\n const updateActiveFormats = (): void => {\n if (textarea) setActiveFormats(computeActiveFormats(textarea));\n };\n\n const closeDropdown = (): void => {\n if (dropdown?.matches(\":popover-open\")) dropdown.hidePopover();\n setDropdownOpen(false);\n };\n\n const clearCompletion = (): void => {\n completionAbort?.abort();\n completionAbort = null;\n if (completionTimer) clearTimeout(completionTimer);\n completionTimer = null;\n setState(null);\n setLoading(false);\n setCompletionError(null);\n closeDropdown();\n };\n\n const positionDropdown = (): void => {\n if (!dropdown?.isConnected || !preview?.isConnected || !textarea?.isConnected) {\n return;\n }\n const anchor = preview.querySelector<HTMLElement>(\"[data-completion-anchor]\");\n const rect = anchor?.getBoundingClientRect() ?? textarea.getBoundingClientRect();\n const maxHeight = 260;\n const spaceBelow = window.innerHeight - rect.bottom;\n const openAbove = spaceBelow < maxHeight && rect.top > spaceBelow;\n if (openAbove) {\n dropdown.style.setProperty(\"top\", \"auto\", \"important\");\n dropdown.style.setProperty(\"bottom\", `${window.innerHeight - rect.top + 4}px`, \"important\");\n } else {\n dropdown.style.setProperty(\"top\", `${rect.bottom + 4}px`, \"important\");\n dropdown.style.setProperty(\"bottom\", \"auto\", \"important\");\n }\n if (!dropdown.matches(\":popover-open\")) dropdown.showPopover();\n // The list sizes to its suggestions in CSS; measured once shown, it is\n // clamped into the viewport before the next paint.\n const width = dropdown.getBoundingClientRect().width;\n const left = Math.min(rect.left, window.innerWidth - width - 8);\n dropdown.style.setProperty(\"left\", `${Math.max(8, left)}px`, \"important\");\n };\n\n const isAbortError = (error: unknown): boolean =>\n error instanceof DOMException\n ? error.name === \"AbortError\"\n : Boolean(error && typeof error === \"object\" && \"name\" in error && (error as { name: string }).name === \"AbortError\");\n\n const applySuggestionList = (context: QueryContext, suggestions: readonly Suggestion[]): void => {\n const value = localValue();\n const normalized = context.text.toLowerCase();\n const usable = suggestions.filter((suggestion) => {\n if (suggestion.textEdit) {\n const { start, end, text } = suggestion.textEdit;\n return (\n Number.isInteger(start) &&\n Number.isInteger(end) &&\n start >= 0 &&\n end >= start &&\n end <= value.length &&\n value.slice(start, end) !== text\n );\n }\n return suggestion.text.toLowerCase().startsWith(normalized) && suggestion.text.length > context.text.length;\n });\n if (usable.length === 0) {\n setState(null);\n closeDropdown();\n return;\n }\n const previous = activeSuggestion()?.text;\n const retained = previous ? usable.findIndex((suggestion) => suggestion.text === previous) : -1;\n setState({\n context,\n suggestions: usable,\n selectedIndex: retained >= 0 ? retained : 0,\n });\n if (context.completion.dropdown) {\n setDropdownOpen(true);\n queueMicrotask(positionDropdown);\n } else {\n closeDropdown();\n }\n };\n\n const runAsyncCompletion = async (context: QueryContext, promise: Promise<readonly Suggestion[]>, signal: AbortSignal): Promise<void> => {\n try {\n const suggestions = await promise;\n if (signal.aborted) return;\n setLoading(false);\n applySuggestionList(context, suggestions);\n } catch (error) {\n if (signal.aborted || isAbortError(error)) return;\n setLoading(false);\n setState(null);\n setCompletionError(error instanceof Error ? error.message : \"Suggestions could not be loaded\");\n setDropdownOpen(true);\n queueMicrotask(positionDropdown);\n }\n };\n\n const startCompletionResolution = (context: QueryContext, signal: AbortSignal): void => {\n if (signal.aborted || !textarea) return;\n setLoading(true);\n setCompletionError(null);\n setDropdownOpen(true);\n queueMicrotask(positionDropdown);\n try {\n const result = resolveSuggestions(context.completion, context.query, buildSuggestContext(textarea, context), signal);\n if (result.kind === \"sync\") {\n setLoading(false);\n applySuggestionList(context, result.data);\n } else {\n void runAsyncCompletion(context, result.promise, signal);\n }\n } catch (error) {\n if (signal.aborted || isAbortError(error)) return;\n setLoading(false);\n setState(null);\n setCompletionError(error instanceof Error ? error.message : \"Suggestions could not be loaded\");\n queueMicrotask(positionDropdown);\n }\n };\n\n const recomputeCompletion = (): void => {\n if (!textarea) return;\n const context = detectQuery(textarea, mergedCompletions(), {\n isExcluded: isInCodeZone,\n });\n if (!context) {\n clearCompletion();\n return;\n }\n completionAbort?.abort();\n if (completionTimer) clearTimeout(completionTimer);\n completionTimer = null;\n completionAbort = new AbortController();\n const current = state();\n if (\n current &&\n (current.context.start !== context.start ||\n current.context.end !== context.end ||\n current.context.text !== context.text ||\n current.context.completion !== context.completion)\n ) {\n setState(null);\n closeDropdown();\n }\n setCompletionError(null);\n const delay = Math.max(0, context.completion.debounceMs ?? 0);\n if (delay === 0) {\n startCompletionResolution(context, completionAbort.signal);\n } else {\n setLoading(false);\n if (!state()) closeDropdown();\n const signal = completionAbort.signal;\n completionTimer = setTimeout(() => {\n completionTimer = null;\n startCompletionResolution(context, signal);\n }, delay);\n }\n };\n\n const retryCompletion = (): void => {\n if (!textarea) return;\n const context = detectQuery(textarea, mergedCompletions(), {\n isExcluded: isInCodeZone,\n });\n if (!context) return clearCompletion();\n completionAbort?.abort();\n if (completionTimer) clearTimeout(completionTimer);\n completionTimer = null;\n completionAbort = new AbortController();\n startCompletionResolution(context, completionAbort.signal);\n };\n\n const activateSuggestion = (index = state()?.selectedIndex ?? -1): boolean => {\n const current = state();\n const active = current?.suggestions[index];\n if (!textarea || !current || !active) return false;\n if (!active.textEdit && active.text === current.context.text) {\n closeDropdown();\n setState(null);\n return false;\n }\n const applied = completionBehavior.applySuggestion(textarea, current.context, active);\n closeDropdown();\n setState(null);\n return applied;\n };\n\n const moveSelection = (direction: 1 | -1): void => {\n const current = state();\n if (!current || current.suggestions.length === 0) return;\n setState({\n ...current,\n selectedIndex: (current.selectedIndex + direction + current.suggestions.length) % current.suggestions.length,\n });\n };\n\n const stats = createMemo(() => {\n const value = localValue();\n return {\n lines: value.length === 0 ? 0 : value.split(\"\\n\").length,\n words: value.match(/\\S+/g)?.length ?? 0,\n chars: value.length,\n };\n });\n\n onMount(() => {\n if (textarea) setTextareaSignal(textarea);\n updateActiveFormats();\n const selectionChange = (): void => {\n if (document.activeElement === textarea) {\n updateActiveFormats();\n recomputeCompletion();\n }\n };\n // Reposition an OPEN popover only. Calling `positionDropdown` blindly\n // would `showPopover()` a dropdown that is deliberately closed (a\n // ghost-only completion keeps state without a dropdown).\n const reposition = (): void => {\n if (dropdown?.matches(\":popover-open\")) positionDropdown();\n };\n document.addEventListener(\"selectionchange\", selectionChange);\n window.addEventListener(\"resize\", reposition);\n onCleanup(() => {\n document.removeEventListener(\"selectionchange\", selectionChange);\n window.removeEventListener(\"resize\", reposition);\n if (dropdown?.matches(\":popover-open\")) dropdown.hidePopover();\n completionAbort?.abort();\n if (completionTimer) clearTimeout(completionTimer);\n if (overlayFrame !== undefined) cancelAnimationFrame(overlayFrame);\n overlayFrame = undefined;\n renderPendingOverlay = undefined;\n completionBehavior.reset();\n });\n });\n\n const onInput = (event: InputEvent & { currentTarget: HTMLTextAreaElement }): void => {\n if (\n completionBehavior.tryExpand(event.currentTarget, mergedCompletions(), {\n isExcluded: isInCodeZone,\n })\n ) {\n return;\n }\n setLocalValue(event.currentTarget.value);\n props.onValueChange?.(event.currentTarget.value);\n updateActiveFormats();\n recomputeCompletion();\n };\n\n const onKeyDown = (event: KeyboardEvent): void => {\n if (!textarea || event.isComposing) return;\n if (\n event.key === \"Backspace\" &&\n !event.metaKey &&\n !event.ctrlKey &&\n !event.altKey &&\n !event.shiftKey &&\n completionBehavior.tryRestore(textarea)\n ) {\n event.preventDefault();\n return;\n }\n const current = state();\n const dropdownCompletion = current?.context.completion.dropdown === true;\n if (current && dropdownCompletion && (event.key === \"ArrowDown\" || event.key === \"ArrowUp\")) {\n event.preventDefault();\n moveSelection(event.key === \"ArrowDown\" ? 1 : -1);\n return;\n }\n if (\n event.key === \"Enter\" &&\n !event.shiftKey &&\n !event.metaKey &&\n !event.ctrlKey &&\n !event.altKey &&\n current &&\n dropdownCompletion &&\n dropdownOpen()\n ) {\n event.preventDefault();\n activateSuggestion();\n return;\n }\n if (event.key === \"Tab\" && !event.shiftKey && !event.metaKey && !event.ctrlKey && !event.altKey && current) {\n event.preventDefault();\n activateSuggestion();\n return;\n }\n if (event.key === \"Escape\") {\n if (current) {\n event.preventDefault();\n closeDropdown();\n setState(null);\n return;\n }\n if ((mergedCompletions()?.length ?? 0) > 0) {\n event.preventDefault();\n textarea.blur();\n return;\n }\n }\n if (event.key === \"Enter\" && (event.metaKey || event.ctrlKey) && props.onSubmit) {\n event.preventDefault();\n props.onSubmit();\n return;\n }\n if (handleShortcut(event, textarea)) {\n event.preventDefault();\n return;\n }\n if (event.key === \"Enter\" && !event.shiftKey && !event.metaKey && !event.ctrlKey && !event.altKey && handleListContinuation(textarea)) {\n event.preventDefault();\n }\n };\n\n const saveControls = (): JSX.Element => (\n <>\n <Show when={props.onSave}>\n <Tooltip.Trigger\n type=\"button\"\n class=\"k2b-markdown-editor__tool\"\n content={messages().saveShortcut}\n aria-label={messages().save}\n tabIndex={-1}\n disabled={props.disabled || props.saveDisabled || props.saving}\n onMouseDown={(event) => event.preventDefault()}\n onClick={() => props.onSave?.()}\n >\n <i class={props.saving ? \"ti ti-loader-2 k2b-spin\" : props.saved ? \"ti ti-check\" : \"ti ti-device-floppy\"} aria-hidden=\"true\" />\n </Tooltip.Trigger>\n </Show>\n </>\n );\n\n return (\n <Field\n class={props.class}\n label={props.label}\n description={props.description}\n error={props.error}\n fill={props.fill}\n meta={meta}\n required={props.required}\n disabled={props.disabled}\n >\n <div\n class=\"k2b-markdown-editor\"\n role=\"group\"\n aria-labelledby={props.label ? meta.labelId : undefined}\n aria-label={!props.label ? props[\"aria-label\"] : undefined}\n data-disabled={props.disabled ? \"true\" : undefined}\n data-invalid={error() ? \"true\" : undefined}\n data-variant={props.variant === \"default\" ? undefined : props.variant}\n data-fill={props.fill ? \"true\" : undefined}\n style={{\n \"--k2b-editor-lines\": String(props.lines ?? 6),\n }}\n onKeyDown={(event) => {\n if (props.onSave && (event.metaKey || event.ctrlKey) && event.key.toLowerCase() === \"s\") {\n event.preventDefault();\n if (!props.disabled && !props.saveDisabled && !props.saving) props.onSave();\n }\n }}\n >\n <Show when={!props.noToolbar}>\n <Toolbar\n textarea={textareaSignal}\n activeFormats={activeFormats}\n disabled={props.disabled}\n trailing={\n <>\n {props.toolbarTrailing}\n {saveControls()}\n <Show when={props.onClose}>\n <Tooltip.Trigger\n type=\"button\"\n class=\"k2b-markdown-editor__tool\"\n content={messages().close}\n aria-label={messages().close}\n tabIndex={props.disabled ? 0 : -1}\n onClick={() => props.onClose?.()}\n >\n <i class=\"ti ti-x\" aria-hidden=\"true\" />\n </Tooltip.Trigger>\n </Show>\n </>\n }\n />\n </Show>\n <div class=\"k2b-markdown-editor__surface\">\n <Show when={!localValue() && props.placeholder}>\n <div class=\"k2b-markdown-editor__placeholder\" aria-hidden=\"true\">\n {props.placeholder}\n </div>\n </Show>\n <div ref={preview} class=\"k2b-markdown-editor__preview\" aria-hidden=\"true\" />\n <textarea\n ref={(element) => {\n textarea = element;\n props.textareaRef?.(element);\n }}\n id={meta.controlId}\n name={props.name}\n class=\"k2b-markdown-editor__input\"\n onInput={onInput}\n onChange={(event) => props.onValueCommit?.(event.currentTarget.value)}\n onKeyDown={onKeyDown}\n onPaste={(event) => {\n if (textarea && handleSmartPaste(event, textarea)) {\n event.preventDefault();\n }\n }}\n onScroll={(event) => {\n if (preview) {\n preview.scrollTop = event.currentTarget.scrollTop;\n preview.scrollLeft = event.currentTarget.scrollLeft;\n }\n }}\n onCompositionStart={() => setComposing(true)}\n onCompositionEnd={() => setComposing(false)}\n onBlur={(event) => {\n const next = event.relatedTarget as HTMLElement | null;\n if (next && dropdown?.contains(next)) return;\n completionBehavior.reset();\n clearCompletion();\n }}\n disabled={props.disabled}\n required={props.required}\n spellcheck={props.spellcheck ?? true}\n maxLength={props.maxLength}\n {...fieldControlAria(meta, props)}\n aria-haspopup=\"listbox\"\n aria-autocomplete=\"list\"\n aria-controls={dropdownOpen() ? listboxId : undefined}\n aria-activedescendant={dropdownOpen() && state() ? optionId(state()!.selectedIndex) : undefined}\n />\n </div>\n <Show when={(props.showStats ?? true) && !props.disabled}>\n <div class=\"k2b-markdown-editor__stats\" aria-hidden=\"true\" data-empty={stats().chars === 0 ? \"true\" : undefined}>\n <span>\n {stats().lines} {stats().lines === 1 ? \"line\" : \"lines\"}\n </span>\n <span>\n {stats().words} {stats().words === 1 ? \"word\" : \"words\"}\n </span>\n <span>\n {stats().chars} {stats().chars === 1 ? \"char\" : \"chars\"}\n </span>\n </div>\n </Show>\n <Show when={state() || loading() || completionError()}>\n <div\n ref={dropdown}\n popover=\"manual\"\n class=\"k2b-autocomplete__options\"\n role=\"presentation\"\n aria-label={messages().completionSuggestions}\n >\n <div id={listboxId} class=\"k2b-autocomplete__listbox\" role=\"listbox\" aria-label={messages().suggestions}>\n <Show when={loading()}>\n <div class=\"k2b-autocomplete__status\" role=\"status\">\n <i class=\"ti ti-loader-2 k2b-spin\" aria-hidden=\"true\" />\n Loading suggestions\n </div>\n </Show>\n <Show when={completionError()}>\n {(message) => (\n <div class=\"k2b-autocomplete__status\" data-error=\"true\" role=\"alert\">\n <i class=\"ti ti-alert-circle\" aria-hidden=\"true\" />\n <span>{message()}</span>\n <button type=\"button\" onMouseDown={(event) => event.preventDefault()} onClick={retryCompletion}>\n {messages().retry}\n </button>\n </div>\n )}\n </Show>\n <For each={state()?.suggestions ?? []}>\n {(suggestion, index) => (\n // biome-ignore lint/a11y/useKeyWithClickEvents: the owning textarea handles keyboard activation through aria-activedescendant.\n <div\n id={optionId(index())}\n class=\"k2b-autocomplete__option\"\n role=\"option\"\n aria-selected={index() === state()?.selectedIndex}\n onMouseEnter={() => {\n const current = state();\n if (current) {\n setState({ ...current, selectedIndex: index() });\n }\n }}\n onMouseDown={(event) => {\n event.preventDefault();\n }}\n onClick={() => {\n activateSuggestion(index());\n textarea?.focus();\n }}\n >\n <span>{displayLabel(suggestion, state()!.context.completion)}</span>\n <Show when={suggestion.hint}>{(hint) => <small>{hint()}</small>}</Show>\n </div>\n )}\n </For>\n </div>\n </div>\n </Show>\n </div>\n </Field>\n );\n}\n\nexport type { Completion, SuggestContext, Suggestion } from \"../completion\";\nexport { abbreviations } from \"../completion\";\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":[],"sources":["inputs/markdown/MarkdownEditor.tsx"],"sourcesContent":["import { highlight } from \"@k2b/stdlib\";\nimport { createEffect, createMemo, createSignal, createUniqueId, For, type JSX, onCleanup, onMount, Show, untrack } from \"solid-js\";\nimport { Tooltip } from \"../../feedback/Tooltip\";\nimport { createFieldMeta, Field, fieldControlAria } from \"../../internal/field\";\nimport { useLocale } from \"../../intl/locale\";\nimport { useUiMessages } from \"../../intl/messages\";\nimport {\n abbreviations as abbreviationsCompletion,\n buildSuggestContext,\n type Completion,\n collectKnownLabels,\n createCompletionBehaviorState,\n detectQuery,\n displayLabel,\n type QueryContext,\n renderWithOverlay,\n resolveSuggestions,\n type Suggestion,\n} from \"../completion\";\nimport type { ValueFieldProps } from \"../field-contract\";\nimport { resolveMaybeAccessor } from \"../field-contract\";\nimport { computeActiveFormats } from \"./active-formats\";\nimport { handleListContinuation, handleShortcut, handleSmartPaste } from \"./behaviors\";\nimport { isInCodeZone } from \"./code-zone\";\nimport Toolbar from \"./Toolbar\";\n\nexport type MarkdownEditorProps = ValueFieldProps<string> & {\n onSubmit?: () => void;\n placeholder?: string;\n lines?: number;\n noToolbar?: boolean;\n spellcheck?: boolean;\n name?: string;\n maxLength?: number;\n textareaRef?: (element: HTMLTextAreaElement) => void;\n abbreviations?: Record<string, string>;\n completions?: readonly Completion[];\n showStats?: boolean;\n variant?: \"default\" | \"paper\" | \"embedded\";\n fill?: boolean;\n /** Groups save and close at the end of the toolbar. The caller owns navigation and unsaved-change confirmation. */\n onClose?: () => void;\n onSave?: () => void;\n saveDisabled?: boolean;\n saving?: boolean;\n /** Shows a successful-save check. The caller clears it after a brief delay or the next edit. */\n saved?: boolean;\n toolbarTrailing?: JSX.Element;\n};\n\ntype CompletionState = {\n context: QueryContext;\n suggestions: readonly Suggestion[];\n selectedIndex: number;\n};\n\nexport function MarkdownEditor(props: MarkdownEditorProps): JSX.Element {\n const messages = useUiMessages();\n const locale = useLocale();\n const formatCount = (value: number) => new Intl.NumberFormat(locale()).format(value);\n const meta = createFieldMeta(props.id);\n let textarea: HTMLTextAreaElement | undefined;\n let preview: HTMLDivElement | undefined;\n let dropdown: HTMLDivElement | undefined;\n let completionAbort: AbortController | null = null;\n let completionTimer: ReturnType<typeof setTimeout> | null = null;\n let overlayFrame: number | undefined;\n let overlayInitialized = false;\n let renderPendingOverlay: (() => void) | undefined;\n const completionBehavior = createCompletionBehaviorState();\n\n const [textareaSignal, setTextareaSignal] = createSignal<HTMLTextAreaElement | null>(null);\n const [activeFormats, setActiveFormats] = createSignal<Set<string>>(new Set());\n const [composing, setComposing] = createSignal(false);\n const [localValue, setLocalValue] = createSignal(resolveMaybeAccessor(props.value) ?? \"\");\n const error = () => resolveMaybeAccessor(props.error);\n const [state, setState] = createSignal<CompletionState | null>(null);\n const [loading, setLoading] = createSignal(false);\n const [completionError, setCompletionError] = createSignal<string | null>(null);\n const [dropdownOpen, setDropdownOpen] = createSignal(false);\n const completionId = createUniqueId();\n const listboxId = `${meta.controlId}-${completionId}-suggestions`;\n const optionId = (index: number): string => `${listboxId}-${index}`;\n const activeSuggestion = (): Suggestion | null => {\n const current = state();\n return current?.suggestions[current.selectedIndex] ?? null;\n };\n\n const mergedCompletions = createMemo<readonly Completion[] | undefined>(() => {\n const merged: Completion[] = [];\n if (props.abbreviations && Object.keys(props.abbreviations).length > 0) {\n merged.push(abbreviationsCompletion(props.abbreviations));\n }\n if (props.completions) merged.push(...props.completions);\n return merged.length > 0 ? merged : undefined;\n });\n const knownLabels = createMemo(() => collectKnownLabels(mergedCompletions()));\n\n createEffect(() => {\n const incoming = resolveMaybeAccessor(props.value);\n if (incoming !== undefined && incoming !== null && incoming !== untrack(localValue)) {\n setLocalValue(incoming);\n }\n });\n\n createEffect(() => {\n const target = localValue();\n if (!composing() && textarea && textarea.value !== target) {\n textarea.value = target;\n }\n });\n\n createEffect(() => {\n if (!preview) return;\n const value = localValue();\n const labels = knownLabels();\n const current = state();\n const active = activeSuggestion();\n const ghost =\n current && active\n ? {\n at: current.context.end,\n text: active.text.slice(current.context.text.length),\n }\n : undefined;\n const anchor = current && !ghost ? { at: current.context.end } : undefined;\n renderPendingOverlay = () => {\n if (!preview) return;\n preview.innerHTML = renderWithOverlay(value, (text) => highlight.markdown(text, { knownLabels: labels }), { ghost, anchor });\n if (textarea) {\n preview.scrollTop = textarea.scrollTop;\n preview.scrollLeft = textarea.scrollLeft;\n }\n if (dropdown?.matches(\":popover-open\")) positionDropdown();\n };\n if (!overlayInitialized) {\n overlayInitialized = true;\n renderPendingOverlay();\n renderPendingOverlay = undefined;\n return;\n }\n if (overlayFrame !== undefined) return;\n overlayFrame = requestAnimationFrame(() => {\n overlayFrame = undefined;\n const render = renderPendingOverlay;\n renderPendingOverlay = undefined;\n render?.();\n });\n });\n\n const updateActiveFormats = (): void => {\n if (textarea) setActiveFormats(computeActiveFormats(textarea));\n };\n\n const closeDropdown = (): void => {\n if (dropdown?.matches(\":popover-open\")) dropdown.hidePopover();\n setDropdownOpen(false);\n };\n\n const clearCompletion = (): void => {\n completionAbort?.abort();\n completionAbort = null;\n if (completionTimer) clearTimeout(completionTimer);\n completionTimer = null;\n setState(null);\n setLoading(false);\n setCompletionError(null);\n closeDropdown();\n };\n\n const positionDropdown = (): void => {\n if (!dropdown?.isConnected || !preview?.isConnected || !textarea?.isConnected) {\n return;\n }\n const anchor = preview.querySelector<HTMLElement>(\"[data-completion-anchor]\");\n const rect = anchor?.getBoundingClientRect() ?? textarea.getBoundingClientRect();\n const maxHeight = 260;\n const spaceBelow = window.innerHeight - rect.bottom;\n const openAbove = spaceBelow < maxHeight && rect.top > spaceBelow;\n if (openAbove) {\n dropdown.style.setProperty(\"top\", \"auto\", \"important\");\n dropdown.style.setProperty(\"bottom\", `${window.innerHeight - rect.top + 4}px`, \"important\");\n } else {\n dropdown.style.setProperty(\"top\", `${rect.bottom + 4}px`, \"important\");\n dropdown.style.setProperty(\"bottom\", \"auto\", \"important\");\n }\n if (!dropdown.matches(\":popover-open\")) dropdown.showPopover();\n // The list sizes to its suggestions in CSS; measured once shown, it is\n // clamped into the viewport before the next paint.\n const width = dropdown.getBoundingClientRect().width;\n const left = Math.min(rect.left, window.innerWidth - width - 8);\n dropdown.style.setProperty(\"left\", `${Math.max(8, left)}px`, \"important\");\n };\n\n const isAbortError = (error: unknown): boolean =>\n error instanceof DOMException\n ? error.name === \"AbortError\"\n : Boolean(error && typeof error === \"object\" && \"name\" in error && (error as { name: string }).name === \"AbortError\");\n\n const applySuggestionList = (context: QueryContext, suggestions: readonly Suggestion[]): void => {\n const value = localValue();\n const normalized = context.text.toLowerCase();\n const usable = suggestions.filter((suggestion) => {\n if (suggestion.textEdit) {\n const { start, end, text } = suggestion.textEdit;\n return (\n Number.isInteger(start) &&\n Number.isInteger(end) &&\n start >= 0 &&\n end >= start &&\n end <= value.length &&\n value.slice(start, end) !== text\n );\n }\n return suggestion.text.toLowerCase().startsWith(normalized) && suggestion.text.length > context.text.length;\n });\n if (usable.length === 0) {\n setState(null);\n closeDropdown();\n return;\n }\n const previous = activeSuggestion()?.text;\n const retained = previous ? usable.findIndex((suggestion) => suggestion.text === previous) : -1;\n setState({\n context,\n suggestions: usable,\n selectedIndex: retained >= 0 ? retained : 0,\n });\n if (context.completion.dropdown) {\n setDropdownOpen(true);\n queueMicrotask(positionDropdown);\n } else {\n closeDropdown();\n }\n };\n\n const runAsyncCompletion = async (context: QueryContext, promise: Promise<readonly Suggestion[]>, signal: AbortSignal): Promise<void> => {\n try {\n const suggestions = await promise;\n if (signal.aborted) return;\n setLoading(false);\n applySuggestionList(context, suggestions);\n } catch (error) {\n if (signal.aborted || isAbortError(error)) return;\n setLoading(false);\n setState(null);\n setCompletionError(error instanceof Error ? error.message : \"Suggestions could not be loaded\");\n setDropdownOpen(true);\n queueMicrotask(positionDropdown);\n }\n };\n\n const startCompletionResolution = (context: QueryContext, signal: AbortSignal): void => {\n if (signal.aborted || !textarea) return;\n setLoading(true);\n setCompletionError(null);\n setDropdownOpen(true);\n queueMicrotask(positionDropdown);\n try {\n const result = resolveSuggestions(context.completion, context.query, buildSuggestContext(textarea, context), signal);\n if (result.kind === \"sync\") {\n setLoading(false);\n applySuggestionList(context, result.data);\n } else {\n void runAsyncCompletion(context, result.promise, signal);\n }\n } catch (error) {\n if (signal.aborted || isAbortError(error)) return;\n setLoading(false);\n setState(null);\n setCompletionError(error instanceof Error ? error.message : \"Suggestions could not be loaded\");\n queueMicrotask(positionDropdown);\n }\n };\n\n const recomputeCompletion = (): void => {\n if (!textarea) return;\n const context = detectQuery(textarea, mergedCompletions(), {\n isExcluded: isInCodeZone,\n });\n if (!context) {\n clearCompletion();\n return;\n }\n completionAbort?.abort();\n if (completionTimer) clearTimeout(completionTimer);\n completionTimer = null;\n completionAbort = new AbortController();\n const current = state();\n if (\n current &&\n (current.context.start !== context.start ||\n current.context.end !== context.end ||\n current.context.text !== context.text ||\n current.context.completion !== context.completion)\n ) {\n setState(null);\n closeDropdown();\n }\n setCompletionError(null);\n const delay = Math.max(0, context.completion.debounceMs ?? 0);\n if (delay === 0) {\n startCompletionResolution(context, completionAbort.signal);\n } else {\n setLoading(false);\n if (!state()) closeDropdown();\n const signal = completionAbort.signal;\n completionTimer = setTimeout(() => {\n completionTimer = null;\n startCompletionResolution(context, signal);\n }, delay);\n }\n };\n\n const retryCompletion = (): void => {\n if (!textarea) return;\n const context = detectQuery(textarea, mergedCompletions(), {\n isExcluded: isInCodeZone,\n });\n if (!context) return clearCompletion();\n completionAbort?.abort();\n if (completionTimer) clearTimeout(completionTimer);\n completionTimer = null;\n completionAbort = new AbortController();\n startCompletionResolution(context, completionAbort.signal);\n };\n\n const activateSuggestion = (index = state()?.selectedIndex ?? -1): boolean => {\n const current = state();\n const active = current?.suggestions[index];\n if (!textarea || !current || !active) return false;\n if (!active.textEdit && active.text === current.context.text) {\n closeDropdown();\n setState(null);\n return false;\n }\n const applied = completionBehavior.applySuggestion(textarea, current.context, active);\n closeDropdown();\n setState(null);\n return applied;\n };\n\n const moveSelection = (direction: 1 | -1): void => {\n const current = state();\n if (!current || current.suggestions.length === 0) return;\n setState({\n ...current,\n selectedIndex: (current.selectedIndex + direction + current.suggestions.length) % current.suggestions.length,\n });\n };\n\n const stats = createMemo(() => {\n const value = localValue();\n return {\n lines: value.length === 0 ? 0 : value.split(\"\\n\").length,\n words: value.match(/\\S+/g)?.length ?? 0,\n chars: value.length,\n };\n });\n\n onMount(() => {\n if (textarea) setTextareaSignal(textarea);\n updateActiveFormats();\n const selectionChange = (): void => {\n if (document.activeElement === textarea) {\n updateActiveFormats();\n recomputeCompletion();\n }\n };\n // Reposition an OPEN popover only. Calling `positionDropdown` blindly\n // would `showPopover()` a dropdown that is deliberately closed (a\n // ghost-only completion keeps state without a dropdown).\n const reposition = (): void => {\n if (dropdown?.matches(\":popover-open\")) positionDropdown();\n };\n document.addEventListener(\"selectionchange\", selectionChange);\n window.addEventListener(\"resize\", reposition);\n onCleanup(() => {\n document.removeEventListener(\"selectionchange\", selectionChange);\n window.removeEventListener(\"resize\", reposition);\n if (dropdown?.matches(\":popover-open\")) dropdown.hidePopover();\n completionAbort?.abort();\n if (completionTimer) clearTimeout(completionTimer);\n if (overlayFrame !== undefined) cancelAnimationFrame(overlayFrame);\n overlayFrame = undefined;\n renderPendingOverlay = undefined;\n completionBehavior.reset();\n });\n });\n\n const onInput = (event: InputEvent & { currentTarget: HTMLTextAreaElement }): void => {\n if (\n completionBehavior.tryExpand(event.currentTarget, mergedCompletions(), {\n isExcluded: isInCodeZone,\n })\n ) {\n return;\n }\n setLocalValue(event.currentTarget.value);\n props.onValueChange?.(event.currentTarget.value);\n updateActiveFormats();\n recomputeCompletion();\n };\n\n const onKeyDown = (event: KeyboardEvent): void => {\n if (!textarea || event.isComposing) return;\n if (\n event.key === \"Backspace\" &&\n !event.metaKey &&\n !event.ctrlKey &&\n !event.altKey &&\n !event.shiftKey &&\n completionBehavior.tryRestore(textarea)\n ) {\n event.preventDefault();\n return;\n }\n const current = state();\n const dropdownCompletion = current?.context.completion.dropdown === true;\n if (current && dropdownCompletion && (event.key === \"ArrowDown\" || event.key === \"ArrowUp\")) {\n event.preventDefault();\n moveSelection(event.key === \"ArrowDown\" ? 1 : -1);\n return;\n }\n if (\n event.key === \"Enter\" &&\n !event.shiftKey &&\n !event.metaKey &&\n !event.ctrlKey &&\n !event.altKey &&\n current &&\n dropdownCompletion &&\n dropdownOpen()\n ) {\n event.preventDefault();\n activateSuggestion();\n return;\n }\n if (event.key === \"Tab\" && !event.shiftKey && !event.metaKey && !event.ctrlKey && !event.altKey && current) {\n event.preventDefault();\n activateSuggestion();\n return;\n }\n if (event.key === \"Escape\") {\n if (current) {\n event.preventDefault();\n closeDropdown();\n setState(null);\n return;\n }\n if ((mergedCompletions()?.length ?? 0) > 0) {\n event.preventDefault();\n textarea.blur();\n return;\n }\n }\n if (event.key === \"Enter\" && (event.metaKey || event.ctrlKey) && props.onSubmit) {\n event.preventDefault();\n props.onSubmit();\n return;\n }\n if (handleShortcut(event, textarea)) {\n event.preventDefault();\n return;\n }\n if (event.key === \"Enter\" && !event.shiftKey && !event.metaKey && !event.ctrlKey && !event.altKey && handleListContinuation(textarea)) {\n event.preventDefault();\n }\n };\n\n const saveControls = (): JSX.Element => (\n <>\n <Show when={props.onSave}>\n <Tooltip.Trigger\n type=\"button\"\n class=\"k2b-markdown-editor__tool\"\n content={messages().saveShortcut}\n aria-label={messages().save}\n tabIndex={-1}\n disabled={props.disabled || props.saveDisabled || props.saving}\n onMouseDown={(event) => event.preventDefault()}\n onClick={() => props.onSave?.()}\n >\n <i class={props.saving ? \"ti ti-loader-2 k2b-spin\" : props.saved ? \"ti ti-check\" : \"ti ti-device-floppy\"} aria-hidden=\"true\" />\n </Tooltip.Trigger>\n </Show>\n </>\n );\n\n return (\n <Field\n class={props.class}\n label={props.label}\n description={props.description}\n error={props.error}\n fill={props.fill}\n meta={meta}\n required={props.required}\n disabled={props.disabled}\n >\n <div\n class=\"k2b-markdown-editor\"\n role=\"group\"\n aria-labelledby={props.label ? meta.labelId : undefined}\n aria-label={!props.label ? props[\"aria-label\"] : undefined}\n data-disabled={props.disabled ? \"true\" : undefined}\n data-invalid={error() ? \"true\" : undefined}\n data-variant={props.variant === \"default\" ? undefined : props.variant}\n data-fill={props.fill ? \"true\" : undefined}\n style={{\n \"--k2b-editor-lines\": String(props.lines ?? 6),\n }}\n onKeyDown={(event) => {\n if (props.onSave && (event.metaKey || event.ctrlKey) && event.key.toLowerCase() === \"s\") {\n event.preventDefault();\n if (!props.disabled && !props.saveDisabled && !props.saving) props.onSave();\n }\n }}\n >\n <Show when={!props.noToolbar}>\n <Toolbar\n textarea={textareaSignal}\n activeFormats={activeFormats}\n disabled={props.disabled}\n trailing={\n <>\n {props.toolbarTrailing}\n {saveControls()}\n <Show when={props.onClose}>\n <Tooltip.Trigger\n type=\"button\"\n class=\"k2b-markdown-editor__tool\"\n content={messages().close}\n aria-label={messages().close}\n tabIndex={props.disabled ? 0 : -1}\n onClick={() => props.onClose?.()}\n >\n <i class=\"ti ti-x\" aria-hidden=\"true\" />\n </Tooltip.Trigger>\n </Show>\n </>\n }\n />\n </Show>\n <div class=\"k2b-markdown-editor__surface\">\n <Show when={!localValue() && props.placeholder}>\n <div class=\"k2b-markdown-editor__placeholder\" aria-hidden=\"true\">\n {props.placeholder}\n </div>\n </Show>\n <div ref={preview} class=\"k2b-markdown-editor__preview\" aria-hidden=\"true\" />\n <textarea\n ref={(element) => {\n textarea = element;\n props.textareaRef?.(element);\n }}\n id={meta.controlId}\n name={props.name}\n class=\"k2b-markdown-editor__input\"\n onInput={onInput}\n onChange={(event) => props.onValueCommit?.(event.currentTarget.value)}\n onKeyDown={onKeyDown}\n onPaste={(event) => {\n if (textarea && handleSmartPaste(event, textarea)) {\n event.preventDefault();\n }\n }}\n onScroll={(event) => {\n if (preview) {\n preview.scrollTop = event.currentTarget.scrollTop;\n preview.scrollLeft = event.currentTarget.scrollLeft;\n }\n }}\n onCompositionStart={() => setComposing(true)}\n onCompositionEnd={() => setComposing(false)}\n onBlur={(event) => {\n const next = event.relatedTarget as HTMLElement | null;\n if (next && dropdown?.contains(next)) return;\n completionBehavior.reset();\n clearCompletion();\n }}\n disabled={props.disabled}\n required={props.required}\n spellcheck={props.spellcheck ?? true}\n maxLength={props.maxLength}\n {...fieldControlAria(meta, props)}\n aria-haspopup=\"listbox\"\n aria-autocomplete=\"list\"\n aria-controls={dropdownOpen() ? listboxId : undefined}\n aria-activedescendant={dropdownOpen() && state() ? optionId(state()!.selectedIndex) : undefined}\n />\n </div>\n <Show when={(props.showStats ?? true) && !props.disabled}>\n <div class=\"k2b-markdown-editor__stats\" aria-hidden=\"true\" data-empty={stats().chars === 0 ? \"true\" : undefined}>\n <span>{messages().editorLines({ count: stats().lines, value: formatCount(stats().lines) })}</span>\n <span>{messages().editorWords({ count: stats().words, value: formatCount(stats().words) })}</span>\n <span>{messages().editorCharacters({ count: stats().chars, value: formatCount(stats().chars) })}</span>\n </div>\n </Show>\n <Show when={state() || loading() || completionError()}>\n <div\n ref={dropdown}\n popover=\"manual\"\n class=\"k2b-autocomplete__options\"\n role=\"presentation\"\n aria-label={messages().completionSuggestions}\n >\n <div id={listboxId} class=\"k2b-autocomplete__listbox\" role=\"listbox\" aria-label={messages().suggestions}>\n <Show when={loading()}>\n <div class=\"k2b-autocomplete__status\" role=\"status\">\n <i class=\"ti ti-loader-2 k2b-spin\" aria-hidden=\"true\" />\n Loading suggestions\n </div>\n </Show>\n <Show when={completionError()}>\n {(message) => (\n <div class=\"k2b-autocomplete__status\" data-error=\"true\" role=\"alert\">\n <i class=\"ti ti-alert-circle\" aria-hidden=\"true\" />\n <span>{message()}</span>\n <button type=\"button\" onMouseDown={(event) => event.preventDefault()} onClick={retryCompletion}>\n {messages().retry}\n </button>\n </div>\n )}\n </Show>\n <For each={state()?.suggestions ?? []}>\n {(suggestion, index) => (\n // biome-ignore lint/a11y/useKeyWithClickEvents: the owning textarea handles keyboard activation through aria-activedescendant.\n <div\n id={optionId(index())}\n class=\"k2b-autocomplete__option\"\n role=\"option\"\n aria-selected={index() === state()?.selectedIndex}\n onMouseEnter={() => {\n const current = state();\n if (current) {\n setState({ ...current, selectedIndex: index() });\n }\n }}\n onMouseDown={(event) => {\n event.preventDefault();\n }}\n onClick={() => {\n activateSuggestion(index());\n textarea?.focus();\n }}\n >\n <span>{displayLabel(suggestion, state()!.context.completion)}</span>\n <Show when={suggestion.hint}>{(hint) => <small>{hint()}</small>}</Show>\n </div>\n )}\n </For>\n </div>\n </div>\n </Show>\n </div>\n </Field>\n );\n}\n\nexport type { Completion, SuggestContext, Suggestion } from \"../completion\";\nexport { abbreviations } from \"../completion\";\n"],"mappings":"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","ignoreList":[]}
|