@cascivo/editor 0.2.4 → 0.2.6

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/index.js CHANGED
@@ -1,45 +1,53 @@
1
1
  "use client";
2
- import { cn as e, useControllableSignal as t, useSignal as n, useSignalEffect as r, useSignals as i } from "@cascivo/core";
3
- import { builtin as a, t as o } from "@cascivo/i18n";
4
- import { forwardRef as s, useImperativeHandle as c, useRef as l } from "react";
5
- import { jsx as u, jsxs as d } from "react/jsx-runtime";
2
+ import { cn as e, useAnchorPosition as t, useControllableSignal as n, useId as r, useSignal as i, useSignalEffect as a, useSignals as o } from "@cascivo/core";
3
+ import { builtin as s, t as c } from "@cascivo/i18n";
4
+ import { forwardRef as l, useImperativeHandle as u, useRef as d } from "react";
5
+ import { jsx as f, jsxs as p } from "react/jsx-runtime";
6
6
  //#region src/engine/tokenize.ts
7
- var f = /* @__PURE__ */ new Map(), p = "\0", ee = 0;
8
- function m(e, t, n) {
9
- let r = `${e.name}${p}${n}${p}${t}`, i = f.get(r);
7
+ var ee = /* @__PURE__ */ new Map(), m = "\0", te = 0;
8
+ function h(e, t, n) {
9
+ let r = `${e.name}${m}${n}${m}${t}`, i = ee.get(r);
10
10
  if (i) return i;
11
- ee++;
11
+ te++;
12
12
  let { tokens: a, state: o } = e.tokenizeLine(t, n), s = {
13
13
  tokens: a,
14
14
  endState: o
15
15
  };
16
- return f.set(r, s), s;
16
+ return ee.set(r, s), s;
17
17
  }
18
- function h(e, t) {
18
+ function g(e, t) {
19
19
  let n = t.split("\n"), r = [], i = e.initialState;
20
20
  for (let t of n) {
21
- let n = m(e, t, i);
21
+ let n = h(e, t, i);
22
22
  r.push(n.tokens), i = n.endState;
23
23
  }
24
24
  return r;
25
25
  }
26
- function te(e, t, n, r, i) {
26
+ function ne(e, t, n, r, i) {
27
27
  let a = Math.max(0, Math.min(n, t.length)), o = Math.max(a, Math.min(r, t.length)), s = i.startStateOf(t, a), c = [];
28
28
  for (let n = a; n < o; n++) {
29
- let r = m(e, t[n], s);
29
+ let r = h(e, t[n], s);
30
30
  c.push(r.tokens), i.setEndState(n, r.endState), s = r.endState;
31
31
  }
32
32
  return c;
33
33
  }
34
+ function re(e, t, n, r, i) {
35
+ let a = Math.max(0, Math.min(n, t.length)), o = Math.max(a, Math.min(r, t.length)), s = i, c = [];
36
+ for (let n = a; n < o; n++) {
37
+ let r = h(e, t[n], s);
38
+ c.push(r.tokens), s = r.endState;
39
+ }
40
+ return c;
41
+ }
34
42
  //#endregion
35
43
  //#region src/engine/line-state.ts
36
- function ne(e) {
44
+ function ie(e) {
37
45
  let t = [], n = (n, r) => {
38
46
  let i = Math.min(r, n.length - 1), a = t.length;
39
47
  if (a > i) return;
40
48
  let o = a === 0 ? e.initialState : t[a - 1];
41
49
  for (; a <= i; a++) {
42
- let r = m(e, n[a], o);
50
+ let r = h(e, n[a], o);
43
51
  t[a] = r.endState, o = r.endState;
44
52
  }
45
53
  };
@@ -61,7 +69,7 @@ function ne(e) {
61
69
  }
62
70
  //#endregion
63
71
  //#region src/engine/registry.ts
64
- var g = /* @__PURE__ */ new Map(), _ = {
72
+ var _ = /* @__PURE__ */ new Map(), v = {
65
73
  name: "plaintext",
66
74
  initialState: "default",
67
75
  tokenizeLine: (e) => ({
@@ -72,23 +80,23 @@ var g = /* @__PURE__ */ new Map(), _ = {
72
80
  state: "default"
73
81
  })
74
82
  };
75
- g.set(_.name, _);
76
- function v(e) {
77
- g.set(e.name, e);
83
+ _.set(v.name, v);
84
+ function y(e) {
85
+ _.set(e.name, e);
78
86
  }
79
- function re(e) {
87
+ function ae(e) {
80
88
  if (e !== void 0) {
81
- let t = g.get(e);
89
+ let t = _.get(e);
82
90
  if (t) return t;
83
91
  }
84
- return g.get("plaintext");
92
+ return _.get("plaintext");
85
93
  }
86
- function y() {
87
- return [...g.keys()];
94
+ function b() {
95
+ return [..._.keys()];
88
96
  }
89
97
  //#endregion
90
98
  //#region src/grammars/rules.ts
91
- function b(e) {
99
+ function x(e) {
92
100
  let t = {};
93
101
  for (let [n, r] of Object.entries(e.states)) t[n] = r.map((e) => {
94
102
  let t = `${e.match.flags.replace(/[gy]/g, "")}y`, n = {
@@ -131,7 +139,7 @@ function b(e) {
131
139
  }
132
140
  //#endregion
133
141
  //#region src/grammars/plaintext.ts
134
- var x = {
142
+ var oe = {
135
143
  name: "plaintext",
136
144
  initialState: "default",
137
145
  tokenizeLine: (e) => ({
@@ -142,10 +150,10 @@ var x = {
142
150
  state: "default"
143
151
  })
144
152
  };
145
- v(x);
153
+ y(oe);
146
154
  //#endregion
147
155
  //#region src/grammars/json.ts
148
- var S = b({
156
+ var se = x({
149
157
  name: "json",
150
158
  states: { default: [
151
159
  {
@@ -174,14 +182,14 @@ var S = b({
174
182
  }
175
183
  ] }
176
184
  });
177
- v(S);
185
+ y(se);
178
186
  //#endregion
179
187
  //#region src/grammars/clike.ts
180
- var C = /* @__PURE__ */ "async.await.break.case.catch.class.const.continue.debugger.default.delete.do.else.export.extends.finally.for.function.if.import.in.instanceof.let.new.of.return.static.super.switch.this.throw.try.typeof.var.void.while.with.yield.as.from.get.set".split(".");
181
- function w(e) {
188
+ var ce = /* @__PURE__ */ "async.await.break.case.catch.class.const.continue.debugger.default.delete.do.else.export.extends.finally.for.function.if.import.in.instanceof.let.new.of.return.static.super.switch.this.throw.try.typeof.var.void.while.with.yield.as.from.get.set".split(".");
189
+ function le(e) {
182
190
  return RegExp(`(?:${e.join("|")})\\b`);
183
191
  }
184
- function T(e, t, n = []) {
192
+ function S(e, t, n = []) {
185
193
  let r = [
186
194
  {
187
195
  match: /\/\/.*/,
@@ -215,10 +223,10 @@ function T(e, t, n = []) {
215
223
  }
216
224
  ];
217
225
  return n.length > 0 && r.push({
218
- match: w(n),
226
+ match: le(n),
219
227
  kind: "type"
220
228
  }), r.push({
221
- match: w(t),
229
+ match: le(t),
222
230
  kind: "keyword"
223
231
  }, {
224
232
  match: /[A-Za-z_$][\w$]*(?=\s*\()/,
@@ -235,7 +243,7 @@ function T(e, t, n = []) {
235
243
  }, {
236
244
  match: /[{}()[\];,.:]/,
237
245
  kind: "punctuation"
238
- }), b({
246
+ }), x({
239
247
  name: e,
240
248
  states: {
241
249
  default: r,
@@ -282,9 +290,9 @@ function T(e, t, n = []) {
282
290
  }
283
291
  //#endregion
284
292
  //#region src/grammars/javascript.ts
285
- var ie = T("javascript", C);
286
- v(ie);
287
- var ae = T("typescript", C, [
293
+ var ue = S("javascript", ce);
294
+ y(ue);
295
+ var de = S("typescript", ce, [
288
296
  "interface",
289
297
  "type",
290
298
  "enum",
@@ -310,10 +318,10 @@ var ae = T("typescript", C, [
310
318
  "never",
311
319
  "object"
312
320
  ]);
313
- v(ae);
321
+ y(de);
314
322
  //#endregion
315
323
  //#region src/grammars/css.ts
316
- var oe = b({
324
+ var C = x({
317
325
  name: "css",
318
326
  states: {
319
327
  default: [
@@ -380,10 +388,10 @@ var oe = b({
380
388
  ]
381
389
  }
382
390
  });
383
- v(oe);
391
+ y(C);
384
392
  //#endregion
385
393
  //#region src/grammars/html.ts
386
- var se = b({
394
+ var fe = x({
387
395
  name: "html",
388
396
  states: {
389
397
  default: [
@@ -442,10 +450,10 @@ var se = b({
442
450
  ]
443
451
  }
444
452
  });
445
- v(se);
453
+ y(fe);
446
454
  //#endregion
447
455
  //#region src/grammars/markdown.ts
448
- var ce = b({
456
+ var pe = x({
449
457
  name: "markdown",
450
458
  states: {
451
459
  default: [
@@ -518,10 +526,10 @@ var ce = b({
518
526
  }]
519
527
  }
520
528
  });
521
- v(ce);
529
+ y(pe);
522
530
  //#endregion
523
531
  //#region src/grammars/bash.ts
524
- var le = b({
532
+ var me = x({
525
533
  name: "bash",
526
534
  states: { default: [
527
535
  {
@@ -558,8 +566,8 @@ var le = b({
558
566
  }
559
567
  ] }
560
568
  });
561
- v(le);
562
- var E = {
569
+ y(me);
570
+ var w = {
563
571
  root: "_root_1m6ns_2",
564
572
  gutter: "_gutter_1m6ns_17",
565
573
  gutterLine: "_gutterLine_1m6ns_28",
@@ -588,77 +596,77 @@ var E = {
588
596
  };
589
597
  //#endregion
590
598
  //#region src/editor/view.tsx
591
- function ue(e, t) {
599
+ function he(e, t) {
592
600
  let n = "";
593
601
  for (let r of t) e >= r.start && e < r.end && (n = n ? `${n} ${r.className}` : r.className);
594
602
  return n;
595
603
  }
596
- function de(t, n, r, i) {
604
+ function ge(t, n, r, i) {
597
605
  let a = n + t.value.length, o = new Set([n, a]);
598
606
  for (let e of r) e.start > n && e.start < a && o.add(e.start), e.end > n && e.end < a && o.add(e.end);
599
607
  if (o.size === 2) {
600
- let a = ue(n, r);
601
- return /* @__PURE__ */ u("span", {
602
- className: a ? e(E[t.kind], a) : E[t.kind],
608
+ let a = he(n, r);
609
+ return /* @__PURE__ */ f("span", {
610
+ className: a ? e(w[t.kind], a) : w[t.kind],
603
611
  children: t.value
604
612
  }, i);
605
613
  }
606
614
  let s = [...o].sort((e, t) => e - t), c = [];
607
615
  for (let i = 0; i < s.length - 1; i++) {
608
- let a = s[i], o = s[i + 1], l = ue(a, r);
609
- c.push(/* @__PURE__ */ u("span", {
610
- className: l ? e(E[t.kind], l) : E[t.kind],
616
+ let a = s[i], o = s[i + 1], l = he(a, r);
617
+ c.push(/* @__PURE__ */ f("span", {
618
+ className: l ? e(w[t.kind], l) : w[t.kind],
611
619
  children: t.value.slice(a - n, o - n)
612
620
  }, a));
613
621
  }
614
- return /* @__PURE__ */ u("span", { children: c }, i);
622
+ return /* @__PURE__ */ f("span", { children: c }, i);
615
623
  }
616
- function fe(e, t = 0, n = t + e.length, r) {
624
+ function _e(e, t = 0, n = t + e.length, r) {
617
625
  let i = [];
618
626
  for (let a = t; a < n; a++) {
619
627
  let n = e[a - t], o = r?.filter((e) => e.line === a);
620
- i.push(/* @__PURE__ */ u("span", {
621
- className: E.line,
628
+ i.push(/* @__PURE__ */ f("span", {
629
+ className: w.line,
622
630
  children: n.length === 0 ? "​" : o && o.length > 0 ? (() => {
623
631
  let e = 0;
624
632
  return n.map((t, n) => {
625
- let r = de(t, e, o, n);
633
+ let r = ge(t, e, o, n);
626
634
  return e += t.value.length, r;
627
635
  });
628
- })() : n.map((e, t) => /* @__PURE__ */ u("span", {
629
- className: E[e.kind],
636
+ })() : n.map((e, t) => /* @__PURE__ */ f("span", {
637
+ className: w[e.kind],
630
638
  children: e.value
631
639
  }, t))
632
640
  }, a));
633
641
  }
634
642
  return i;
635
643
  }
636
- function pe({ count: e, className: t, gutterRef: n, start: r = 0, end: i = e, topPad: a = 0, bottomPad: o = 0, activeLine: s = !1 }) {
644
+ function ve({ count: e, className: t, gutterRef: n, start: r = 0, end: i = e, topPad: a = 0, bottomPad: o = 0, activeLine: s = !1 }) {
637
645
  let c = [];
638
- for (let e = r + 1; e <= i; e++) c.push(/* @__PURE__ */ u("span", {
639
- className: E.gutterLine,
646
+ for (let e = r + 1; e <= i; e++) c.push(/* @__PURE__ */ f("span", {
647
+ className: w.gutterLine,
640
648
  children: e
641
649
  }, e));
642
- return /* @__PURE__ */ d("div", {
650
+ return /* @__PURE__ */ p("div", {
643
651
  ref: n,
644
652
  className: t,
645
653
  "aria-hidden": "true",
646
654
  children: [
647
- s && /* @__PURE__ */ u("div", { className: E.gutterActive }),
648
- a > 0 && /* @__PURE__ */ u("div", { style: { blockSize: a } }),
655
+ s && /* @__PURE__ */ f("div", { className: w.gutterActive }),
656
+ a > 0 && /* @__PURE__ */ f("div", { style: { blockSize: a } }),
649
657
  c,
650
- o > 0 && /* @__PURE__ */ u("div", { style: { blockSize: o } })
658
+ o > 0 && /* @__PURE__ */ f("div", { style: { blockSize: o } })
651
659
  ]
652
660
  });
653
661
  }
654
- var D = {
662
+ var T = {
655
663
  root: "_root_18xci_2",
656
664
  textarea: "_textarea_18xci_18",
657
665
  gutter: "_gutter_18xci_23",
658
666
  codeArea: "_codeArea_18xci_36",
659
667
  pre: "_pre_18xci_43",
660
668
  currentLine: "_currentLine_18xci_58"
661
- }, O = {
669
+ }, E = {
662
670
  panel: "_panel_hawkv_2",
663
671
  row: "_row_hawkv_20",
664
672
  input: "_input_hawkv_26",
@@ -669,32 +677,32 @@ var D = {
669
677
  };
670
678
  //#endregion
671
679
  //#region src/editor/code-editor/find-panel.tsx
672
- function me(t) {
673
- i();
674
- let n = t.matchCount === 0 ? o(a.editor.noMatches) : o(a.editor.findCount, {
680
+ function ye(t) {
681
+ o();
682
+ let n = t.matchCount === 0 ? c(s.editor.noMatches) : c(s.editor.findCount, {
675
683
  current: t.currentIndex + 1,
676
684
  total: t.matchCount
677
685
  });
678
- return /* @__PURE__ */ d("div", {
679
- className: O.panel,
686
+ return /* @__PURE__ */ p("div", {
687
+ className: E.panel,
680
688
  role: "search",
681
- "aria-label": o(a.editor.find),
682
- children: [/* @__PURE__ */ d("div", {
683
- className: O.row,
689
+ "aria-label": c(s.editor.find),
690
+ children: [/* @__PURE__ */ p("div", {
691
+ className: E.row,
684
692
  children: [
685
- /* @__PURE__ */ u("button", {
693
+ /* @__PURE__ */ f("button", {
686
694
  type: "button",
687
- className: O.toggle,
688
- "aria-label": o(a.editor.toggleReplace),
695
+ className: E.toggle,
696
+ "aria-label": c(s.editor.toggleReplace),
689
697
  "aria-expanded": t.replaceMode,
690
698
  onClick: t.onToggleReplace,
691
699
  children: t.replaceMode ? "▾" : "▸"
692
700
  }),
693
- /* @__PURE__ */ u("input", {
694
- className: O.input,
701
+ /* @__PURE__ */ f("input", {
702
+ className: E.input,
695
703
  value: t.query,
696
- placeholder: o(a.editor.findPlaceholder),
697
- "aria-label": o(a.editor.find),
704
+ placeholder: c(s.editor.findPlaceholder),
705
+ "aria-label": c(s.editor.find),
698
706
  autoFocus: !0,
699
707
  autoComplete: "off",
700
708
  spellCheck: !1,
@@ -703,49 +711,49 @@ function me(t) {
703
711
  e.key === "Enter" ? (e.preventDefault(), e.shiftKey ? t.onPrev() : t.onNext()) : e.key === "Escape" && (e.preventDefault(), t.onClose());
704
712
  }
705
713
  }),
706
- /* @__PURE__ */ u("span", {
707
- className: O.count,
714
+ /* @__PURE__ */ f("span", {
715
+ className: E.count,
708
716
  "aria-live": "polite",
709
717
  children: n
710
718
  }),
711
- /* @__PURE__ */ u("button", {
719
+ /* @__PURE__ */ f("button", {
712
720
  type: "button",
713
- className: O.button,
714
- "aria-label": o(a.editor.previous),
721
+ className: E.button,
722
+ "aria-label": c(s.editor.previous),
715
723
  onClick: t.onPrev,
716
724
  children: "‹"
717
725
  }),
718
- /* @__PURE__ */ u("button", {
726
+ /* @__PURE__ */ f("button", {
719
727
  type: "button",
720
- className: O.button,
721
- "aria-label": o(a.editor.next),
728
+ className: E.button,
729
+ "aria-label": c(s.editor.next),
722
730
  onClick: t.onNext,
723
731
  children: "›"
724
732
  }),
725
- /* @__PURE__ */ u("button", {
733
+ /* @__PURE__ */ f("button", {
726
734
  type: "button",
727
- className: e(O.button, t.caseSensitive && O.active),
735
+ className: e(E.button, t.caseSensitive && E.active),
728
736
  "aria-pressed": t.caseSensitive,
729
- "aria-label": o(a.editor.matchCase),
737
+ "aria-label": c(s.editor.matchCase),
730
738
  onClick: t.onToggleCase,
731
739
  children: "Aa"
732
740
  }),
733
- /* @__PURE__ */ u("button", {
741
+ /* @__PURE__ */ f("button", {
734
742
  type: "button",
735
- className: O.button,
736
- "aria-label": o(a.editor.close),
743
+ className: E.button,
744
+ "aria-label": c(s.editor.close),
737
745
  onClick: t.onClose,
738
746
  children: "×"
739
747
  })
740
748
  ]
741
- }), t.replaceMode && /* @__PURE__ */ d("div", {
742
- className: O.row,
749
+ }), t.replaceMode && /* @__PURE__ */ p("div", {
750
+ className: E.row,
743
751
  children: [
744
- /* @__PURE__ */ u("input", {
745
- className: O.input,
752
+ /* @__PURE__ */ f("input", {
753
+ className: E.input,
746
754
  value: t.replaceQuery,
747
- placeholder: o(a.editor.replacePlaceholder),
748
- "aria-label": o(a.editor.replace),
755
+ placeholder: c(s.editor.replacePlaceholder),
756
+ "aria-label": c(s.editor.replace),
749
757
  autoComplete: "off",
750
758
  spellCheck: !1,
751
759
  onChange: (e) => t.onReplaceChange(e.currentTarget.value),
@@ -753,17 +761,17 @@ function me(t) {
753
761
  e.key === "Escape" ? (e.preventDefault(), t.onClose()) : e.key === "Enter" && (e.preventDefault(), t.onReplace());
754
762
  }
755
763
  }),
756
- /* @__PURE__ */ u("button", {
764
+ /* @__PURE__ */ f("button", {
757
765
  type: "button",
758
- className: O.button,
766
+ className: E.button,
759
767
  onClick: t.onReplace,
760
- children: o(a.editor.replaceOne)
768
+ children: c(s.editor.replaceOne)
761
769
  }),
762
- /* @__PURE__ */ u("button", {
770
+ /* @__PURE__ */ f("button", {
763
771
  type: "button",
764
- className: O.button,
772
+ className: E.button,
765
773
  onClick: t.onReplaceAll,
766
- children: o(a.editor.replaceAll)
774
+ children: c(s.editor.replaceAll)
767
775
  })
768
776
  ]
769
777
  })]
@@ -771,25 +779,25 @@ function me(t) {
771
779
  }
772
780
  //#endregion
773
781
  //#region src/editor/code-editor/find.ts
774
- var he = /\w/;
775
- function k(e) {
776
- return e !== void 0 && he.test(e);
782
+ var D = /\w/;
783
+ function be(e) {
784
+ return e !== void 0 && D.test(e);
777
785
  }
778
- function ge(e, t, n = {}) {
786
+ function xe(e, t, n = {}) {
779
787
  if (t.length === 0) return [];
780
788
  let r = n.caseSensitive ? e : e.toLowerCase(), i = n.caseSensitive ? t : t.toLowerCase(), a = [], o = 0;
781
789
  for (;;) {
782
790
  let t = r.indexOf(i, o);
783
791
  if (t === -1) break;
784
792
  let s = t + i.length;
785
- (!n.wholeWord || !k(e[t - 1]) && !k(e[s])) && a.push({
793
+ (!n.wholeWord || !be(e[t - 1]) && !be(e[s])) && a.push({
786
794
  start: t,
787
795
  end: s
788
796
  }), o = s > t ? s : t + 1;
789
797
  }
790
798
  return a;
791
799
  }
792
- function _e(e, t) {
800
+ function Se(e, t) {
793
801
  let n = 0, r = 0;
794
802
  for (let i = 0; i < t && i < e.length; i++) e[i] === "\n" && (n++, r = i + 1);
795
803
  return {
@@ -797,9 +805,9 @@ function _e(e, t) {
797
805
  col: t - r
798
806
  };
799
807
  }
800
- function ve(e, t, n, r) {
808
+ function Ce(e, t, n, r) {
801
809
  return t.map((t, i) => {
802
- let { line: a, col: o } = _e(e, t.start);
810
+ let { line: a, col: o } = Se(e, t.start);
803
811
  return {
804
812
  line: a,
805
813
  start: o,
@@ -808,7 +816,7 @@ function ve(e, t, n, r) {
808
816
  };
809
817
  });
810
818
  }
811
- function ye(e, t, n) {
819
+ function we(e, t, n) {
812
820
  let r = e;
813
821
  for (let e = t.length - 1; e >= 0; e--) {
814
822
  let i = t[e];
@@ -818,16 +826,16 @@ function ye(e, t, n) {
818
826
  }
819
827
  //#endregion
820
828
  //#region src/editor/code-editor/brackets.ts
821
- var A = {
829
+ var O = {
822
830
  "(": ")",
823
831
  "[": "]",
824
832
  "{": "}"
825
- }, j = {
833
+ }, k = {
826
834
  ")": "(",
827
835
  "]": "[",
828
836
  "}": "}"
829
837
  };
830
- function M(e, t, n, r) {
838
+ function A(e, t, n, r) {
831
839
  let i = 0;
832
840
  for (let a = t; a < e.length; a++) {
833
841
  let t = e[a];
@@ -836,7 +844,7 @@ function M(e, t, n, r) {
836
844
  }
837
845
  return -1;
838
846
  }
839
- function N(e, t, n, r) {
847
+ function j(e, t, n, r) {
840
848
  let i = 0;
841
849
  for (let a = t; a >= 0; a--) {
842
850
  let t = e[a];
@@ -845,41 +853,41 @@ function N(e, t, n, r) {
845
853
  }
846
854
  return -1;
847
855
  }
848
- function be(e, t) {
856
+ function Te(e, t) {
849
857
  let n = e[t];
850
- if (n && n in A) {
851
- let r = M(e, t, n, A[n]);
858
+ if (n && n in O) {
859
+ let r = A(e, t, n, O[n]);
852
860
  if (r !== -1) return {
853
861
  open: t,
854
862
  close: r
855
863
  };
856
864
  }
857
865
  let r = e[t - 1];
858
- if (r && r in j) {
859
- let n = N(e, t - 1, j[r], r);
866
+ if (r && r in k) {
867
+ let n = j(e, t - 1, k[r], r);
860
868
  if (n !== -1) return {
861
869
  open: n,
862
870
  close: t - 1
863
871
  };
864
872
  }
865
- if (r && r in A) {
866
- let n = M(e, t - 1, r, A[r]);
873
+ if (r && r in O) {
874
+ let n = A(e, t - 1, r, O[r]);
867
875
  if (n !== -1) return {
868
876
  open: t - 1,
869
877
  close: n
870
878
  };
871
879
  }
872
- if (n && n in j) {
873
- let r = N(e, t, j[n], n);
880
+ if (n && n in k) {
881
+ let r = j(e, t, k[n], n);
874
882
  if (r !== -1) return {
875
883
  open: r,
876
884
  close: t
877
885
  };
878
886
  }
879
887
  }
880
- function xe(e, t, n) {
888
+ function Ee(e, t, n) {
881
889
  return [t.open, t.close].map((t) => {
882
- let { line: r, col: i } = _e(e, t);
890
+ let { line: r, col: i } = Se(e, t);
883
891
  return {
884
892
  line: r,
885
893
  start: i,
@@ -890,7 +898,7 @@ function xe(e, t, n) {
890
898
  }
891
899
  //#endregion
892
900
  //#region src/editor/code-editor/history.ts
893
- function Se(e = 200) {
901
+ function De(e = 200) {
894
902
  let t = [], n = -1, r = !1;
895
903
  return {
896
904
  record(i, a) {
@@ -916,23 +924,23 @@ function Se(e = 200) {
916
924
  }
917
925
  //#endregion
918
926
  //#region src/editor/code-editor/keymap.ts
919
- var P = typeof navigator < "u" && /Mac|iPhone|iPad|iPod/.test(navigator.platform || navigator.userAgent || "");
920
- function F(e) {
927
+ var Oe = typeof navigator < "u" && /Mac|iPhone|iPad|iPod/.test(navigator.platform || navigator.userAgent || "");
928
+ function ke(e) {
921
929
  let t = [];
922
- (P ? e.metaKey : e.ctrlKey) && t.push("Mod"), e.altKey && t.push("Alt"), e.shiftKey && t.push("Shift");
930
+ (Oe ? e.metaKey : e.ctrlKey) && t.push("Mod"), e.altKey && t.push("Alt"), e.shiftKey && t.push("Shift");
923
931
  let n = e.key;
924
932
  return n.length === 1 && (n = n.toLowerCase()), t.push(n), t.join("-");
925
933
  }
926
- function Ce(e, t) {
934
+ function Ae(e, t) {
927
935
  let n = new Map(Object.entries(e));
928
936
  if (t) for (let [e, r] of Object.entries(t)) n.set(e, r);
929
937
  return n;
930
938
  }
931
- function we(e, t) {
932
- let n = e.get(F(t.event));
939
+ function je(e, t) {
940
+ let n = e.get(ke(t.event));
933
941
  return n ? n(t) : !1;
934
942
  }
935
- function Te(e) {
943
+ function Me(e) {
936
944
  let t = () => e.insertSpaces ? " ".repeat(e.tabSize) : " ";
937
945
  return {
938
946
  indent: ({ textarea: e, setText: n }) => {
@@ -952,7 +960,7 @@ function Te(e) {
952
960
  }
953
961
  //#endregion
954
962
  //#region src/editor/code-editor/sync.ts
955
- function Ee(e, t) {
963
+ function Ne(e, t) {
956
964
  if (e === t) return {
957
965
  from: e.length,
958
966
  to: e.length,
@@ -968,278 +976,507 @@ function Ee(e, t) {
968
976
  insert: t.slice(r, a)
969
977
  };
970
978
  }
971
- function I(e, t) {
979
+ function M(e, t) {
972
980
  return e <= t.from ? e : e >= t.to ? e + (t.insert.length - (t.to - t.from)) : t.from + t.insert.length;
973
981
  }
974
- function De(e, t, n) {
982
+ function Pe(e, t, n) {
975
983
  return {
976
- start: I(e, n),
977
- end: I(t, n)
984
+ start: M(e, n),
985
+ end: M(t, n)
978
986
  };
979
987
  }
980
- var L = s(function({ value: s, defaultValue: f, onValueChange: p, language: ee = "plaintext", lineNumbers: m = !0, tabSize: h = 2, insertSpaces: g = !0, wrap: _ = !1, virtualize: v, readOnly: y = !1, disabled: b = !1, spellCheck: x = !1, label: S, onSave: C, keymap: w, decorations: T, theme: ie, bracketMatching: ae = !1, className: oe, style: se, onKeyDown: ce, ...le }, ue) {
981
- i();
982
- let de = l(C);
983
- de.current = C;
984
- let [O, he] = t({
985
- value: s,
986
- defaultValue: f ?? "",
987
- onChange: p
988
- }), k = l(null), A = l(null), j = l(null), M = l(null), N = l(null);
989
- N.current === null && (N.current = Se(), N.current.reset({
990
- text: O.value,
988
+ //#endregion
989
+ //#region src/editor/code-editor/caret.ts
990
+ function N(e, t) {
991
+ let n = 0;
992
+ for (let r of e) r === " " ? n += t - n % t : n += 1;
993
+ return n;
994
+ }
995
+ function Fe(e, t, n) {
996
+ let { line: r, col: i } = Se(e, t), a = N(e.slice(t - i, t), n.tabSize);
997
+ return {
998
+ top: r * n.lineHeight - n.scrollTop + n.padTop,
999
+ left: a * n.charWidth - n.scrollLeft + n.padLeft
1000
+ };
1001
+ }
1002
+ function Ie(e, t) {
1003
+ if (typeof document > "u") return null;
1004
+ let n = document.createTreeWalker(e, NodeFilter.SHOW_TEXT), r = 0, i = n.nextNode();
1005
+ for (; i;) {
1006
+ let e = i.textContent?.length ?? 0;
1007
+ if (t <= r + e) {
1008
+ let e = document.createRange();
1009
+ e.setStart(i, Math.max(0, t - r)), e.collapse(!0);
1010
+ let n = e.getClientRects();
1011
+ return n.length > 0 ? n[0] : e.getBoundingClientRect();
1012
+ }
1013
+ r += e, i = n.nextNode();
1014
+ }
1015
+ return null;
1016
+ }
1017
+ function Le(e) {
1018
+ if (typeof document > "u") return 0;
1019
+ let t = getComputedStyle(e), n = document.createElement("span");
1020
+ n.style.position = "absolute", n.style.visibility = "hidden", n.style.whiteSpace = "pre", n.style.font = t.font, n.style.letterSpacing = t.letterSpacing, n.style.tabSize = t.tabSize, n.textContent = "0".repeat(10), document.body.appendChild(n);
1021
+ let r = n.getBoundingClientRect().width / 10;
1022
+ return n.remove(), r;
1023
+ }
1024
+ //#endregion
1025
+ //#region src/editor/code-editor/slash-trigger.ts
1026
+ function Re(e, t) {
1027
+ for (let n = t - 1; n >= 0; n--) {
1028
+ let r = e[n];
1029
+ if (r === "/") {
1030
+ let r = e[n - 1];
1031
+ return r === void 0 || /\s/.test(r) ? {
1032
+ start: n,
1033
+ query: e.slice(n + 1, t)
1034
+ } : null;
1035
+ }
1036
+ if (r === void 0 || /\s/.test(r)) return null;
1037
+ }
1038
+ return null;
1039
+ }
1040
+ function ze(e, t) {
1041
+ if (t === "") return [...e];
1042
+ let n = t.toLowerCase();
1043
+ return e.filter((e) => e.label.toLowerCase().includes(n) || (e.keywords?.some((e) => e.toLowerCase().includes(n)) ?? !1));
1044
+ }
1045
+ var P = {
1046
+ menu: "_menu_zkolh_2",
1047
+ option: "_option_zkolh_24",
1048
+ active: "_active_zkolh_35",
1049
+ label: "_label_zkolh_39",
1050
+ hint: "_hint_zkolh_44",
1051
+ empty: "_empty_zkolh_50"
1052
+ }, Be = l(function({ id: t, items: n, activeIndex: r, onSelect: i, onHover: a, style: l }, u) {
1053
+ return o(), /* @__PURE__ */ f("ul", {
1054
+ ref: u,
1055
+ id: t,
1056
+ className: P.menu,
1057
+ role: "listbox",
1058
+ "aria-label": c(s.editor.commandMenu),
1059
+ style: l,
1060
+ children: n.length === 0 ? /* @__PURE__ */ f("li", {
1061
+ className: P.empty,
1062
+ role: "presentation",
1063
+ children: c(s.editor.commandMenuEmpty)
1064
+ }) : n.map((n, o) => /* @__PURE__ */ p("li", {
1065
+ id: `${t}-opt-${o}`,
1066
+ role: "option",
1067
+ "aria-selected": o === r,
1068
+ className: e(P.option, o === r && P.active),
1069
+ onMouseEnter: () => a(o),
1070
+ onMouseDown: (e) => {
1071
+ e.preventDefault(), i(o);
1072
+ },
1073
+ children: [/* @__PURE__ */ f("span", {
1074
+ className: P.label,
1075
+ children: n.label
1076
+ }), n.hint !== void 0 && /* @__PURE__ */ f("span", {
1077
+ className: P.hint,
1078
+ children: n.hint
1079
+ })]
1080
+ }, n.id))
1081
+ });
1082
+ }), Ve = 2e3, F = l(function({ value: l, defaultValue: ee, onValueChange: m, language: te = "plaintext", lineNumbers: h = !0, tabSize: g = 2, insertSpaces: _ = !0, wrap: v = !1, virtualize: y, readOnly: b = !1, disabled: x = !1, spellCheck: oe = !1, label: se, onSave: ce, keymap: le, decorations: S, theme: ue, bracketMatching: de = !1, commands: C, className: fe, style: pe, onKeyDown: me, ...he }, ge) {
1083
+ o();
1084
+ let E = d(ce);
1085
+ E.current = ce;
1086
+ let [D, be] = n({
1087
+ value: l,
1088
+ defaultValue: ee ?? "",
1089
+ onChange: m
1090
+ }), O = d(null), k = d(null), A = d(null), j = d(null), Oe = d([]), ke = d(null);
1091
+ ke.current === null && (ke.current = De(), ke.current.reset({
1092
+ text: D.value,
991
1093
  selectionStart: 0,
992
1094
  selectionEnd: 0
993
1095
  }));
994
- let P = N.current, F = l(null), I = l(void 0), L = l(O.value), R = l(void 0), z = l(!1), B = l({
1096
+ let M = ke.current, N = d(null), P = d(void 0), F = d(D.value), He = d(void 0), I = d(!1), L = d({
995
1097
  start: 0,
996
1098
  end: 0
997
- }), V = (e, t, n) => {
998
- R.current = e, L.current = e, P.record({
1099
+ }), R = (e, t, n) => {
1100
+ He.current = e, F.current = e, M.record({
999
1101
  text: e,
1000
1102
  selectionStart: t.start,
1001
1103
  selectionEnd: t.end
1002
- }, { coalesce: n }), he(e);
1003
- }, Oe = (e) => {
1004
- let t = M.current;
1005
- V(e, t ? {
1104
+ }, { coalesce: n }), be(e);
1105
+ }, Ue = (e) => {
1106
+ let t = j.current;
1107
+ R(e, t ? {
1006
1108
  start: t.selectionStart,
1007
1109
  end: t.selectionEnd
1008
- } : B.current, !1);
1009
- }, ke = (e) => {
1010
- let t = M.current;
1110
+ } : L.current, !1);
1111
+ }, We = (e) => {
1112
+ let t = j.current;
1011
1113
  if (!t) return;
1012
- z.current = !0, t.value = e.text, t.setSelectionRange(e.selectionStart, e.selectionEnd), he(e.text), R.current = e.text, L.current = e.text, B.current = {
1114
+ I.current = !0, t.value = e.text, t.setSelectionRange(e.selectionStart, e.selectionEnd), be(e.text), He.current = e.text, F.current = e.text, L.current = {
1013
1115
  start: e.selectionStart,
1014
1116
  end: e.selectionEnd
1015
- }, Ie.value = e.selectionStart;
1117
+ }, U.value = e.selectionStart;
1016
1118
  let n = e.text.slice(0, e.selectionStart).split("\n").length - 1;
1017
- k.current?.style.setProperty("--cascivo-editor-caret-line", String(n)), z.current = !1;
1018
- }, Ae = () => {
1019
- let e = P.undo();
1020
- e && ke(e);
1021
- }, je = () => {
1022
- let e = P.redo();
1023
- e && ke(e);
1024
- }, H = n(O.value), Me = n(0), Ne = n(0), Pe = n(0), U = n(!1), Fe = n(""), W = n(""), G = n(!1), K = n(!1), q = n(0), Ie = n(0);
1025
- r(() => {
1026
- let e = O.value;
1119
+ O.current?.style.setProperty("--cascivo-editor-caret-line", String(n)), I.current = !1;
1120
+ }, Ge = () => {
1121
+ let e = M.undo();
1122
+ e && We(e);
1123
+ }, Ke = () => {
1124
+ let e = M.redo();
1125
+ e && We(e);
1126
+ }, z = i(D.value), qe = i(0), Je = i(0), B = i(0), V = i(!1), Ye = i(""), Xe = i(""), Ze = i(!1), Qe = i(!1), H = i(0), U = i(0), $e = i(0), W = i(!1), et = i(0), tt = i(""), G = i(0), nt = i(-1), rt = i(0), it = d(null), at = d(null), ot = r("slash-menu");
1127
+ a(() => {
1128
+ let e = D.value;
1027
1129
  if (typeof requestAnimationFrame != "function") {
1028
- H.value = e;
1130
+ z.value = e;
1029
1131
  return;
1030
1132
  }
1031
1133
  let t = requestAnimationFrame(() => {
1032
- H.value = e;
1134
+ z.value = e;
1033
1135
  });
1034
1136
  return () => cancelAnimationFrame(t);
1035
- }), r(() => {
1036
- let e = O.value;
1037
- if (z.current || e === L.current) return;
1038
- if (e === R.current) {
1039
- L.current = e;
1137
+ }), a(() => {
1138
+ let e = D.value;
1139
+ if (I.current || e === F.current) return;
1140
+ if (e === He.current) {
1141
+ F.current = e;
1040
1142
  return;
1041
1143
  }
1042
- let t = M.current, n = Ee(L.current, e), r = De(B.current.start, B.current.end, n);
1043
- t && (z.current = !0, t.value !== e && (t.value = e), t.setSelectionRange(r.start, r.end), z.current = !1), B.current = r, P.reset({
1144
+ let t = j.current, n = Ne(F.current, e), r = Pe(L.current.start, L.current.end, n);
1145
+ t && (I.current = !0, t.value !== e && (t.value = e), t.setSelectionRange(r.start, r.end), I.current = !1), L.current = r, M.reset({
1044
1146
  text: e,
1045
1147
  selectionStart: r.start,
1046
1148
  selectionEnd: r.end
1047
- }), L.current = e;
1048
- }), r(() => {
1049
- let e = M.current;
1149
+ }), F.current = e;
1150
+ }), a(() => {
1151
+ let e = j.current;
1050
1152
  if (!e) return;
1051
1153
  let t = () => {
1052
1154
  let t = Number.parseFloat(getComputedStyle(e).lineHeight);
1053
- Pe.value = Number.isFinite(t) && t > 0 ? t : 0, Ne.value = e.clientHeight;
1155
+ B.value = Number.isFinite(t) && t > 0 ? t : 0, Je.value = e.clientHeight;
1156
+ let n = Le(e);
1157
+ n > 0 && (rt.value = n);
1054
1158
  }, n = () => {
1055
- Me.value = e.scrollTop, Ne.value = e.clientHeight, A.current && (A.current.scrollTop = e.scrollTop, A.current.scrollLeft = e.scrollLeft), j.current && (j.current.scrollTop = e.scrollTop);
1159
+ qe.value = e.scrollTop, Je.value = e.clientHeight, k.current && (k.current.scrollTop = e.scrollTop, k.current.scrollLeft = e.scrollLeft), A.current && (A.current.scrollTop = e.scrollTop);
1056
1160
  }, r = () => {
1057
1161
  let t = e.value.slice(0, e.selectionStart).split("\n").length - 1;
1058
- k.current?.style.setProperty("--cascivo-editor-caret-line", String(t)), B.current = {
1162
+ O.current?.style.setProperty("--cascivo-editor-caret-line", String(t)), L.current = {
1059
1163
  start: e.selectionStart,
1060
1164
  end: e.selectionEnd
1061
- }, Ie.value = e.selectionStart;
1165
+ }, U.value = e.selectionStart;
1062
1166
  }, i = () => {
1063
1167
  document.activeElement === e && r();
1168
+ }, a = 0, o = -1, s = () => {
1169
+ n(), e.scrollTop === o ? a = 0 : (o = e.scrollTop, a = requestAnimationFrame(s));
1170
+ }, c = () => {
1171
+ n(), a === 0 && typeof requestAnimationFrame == "function" && (o = -1, a = requestAnimationFrame(s));
1064
1172
  };
1065
- return t(), r(), e.addEventListener("scroll", n), e.addEventListener("keyup", r), e.addEventListener("click", r), e.addEventListener("input", r), document.addEventListener("selectionchange", i), () => {
1066
- e.removeEventListener("scroll", n), e.removeEventListener("keyup", r), e.removeEventListener("click", r), e.removeEventListener("input", r), document.removeEventListener("selectionchange", i);
1173
+ t(), r(), e.addEventListener("scroll", c), e.addEventListener("keyup", r), e.addEventListener("click", r), e.addEventListener("input", r), document.addEventListener("selectionchange", i);
1174
+ let l;
1175
+ typeof ResizeObserver < "u" && (l = new ResizeObserver(() => {
1176
+ t(), n();
1177
+ }), l.observe(e));
1178
+ let u = !1, d = document.fonts;
1179
+ return d?.ready && d.ready.then(() => {
1180
+ u || t();
1181
+ }).catch(() => {}), () => {
1182
+ u = !0, a !== 0 && typeof cancelAnimationFrame == "function" && cancelAnimationFrame(a), l?.disconnect(), e.removeEventListener("scroll", c), e.removeEventListener("keyup", r), e.removeEventListener("click", r), e.removeEventListener("input", r), document.removeEventListener("selectionchange", i);
1067
1183
  };
1184
+ }), a(() => {
1185
+ let e = U.value, t = D.value;
1186
+ if (!C || C.length === 0 || b || x) {
1187
+ W.value &&= !1;
1188
+ return;
1189
+ }
1190
+ let n = Re(t, e);
1191
+ if (!n) {
1192
+ nt.value = -1, W.value &&= !1;
1193
+ return;
1194
+ }
1195
+ if (n.start === nt.value) {
1196
+ W.value &&= !1;
1197
+ return;
1198
+ }
1199
+ W.value || (G.value = 0), W.value = !0, et.value = n.start, tt.value = n.query;
1200
+ }), a(() => {
1201
+ if (!W.value) return;
1202
+ let e = it.current, t = j.current;
1203
+ if (!e || !t) return;
1204
+ let n = et.value, r = e.offsetParent, i, a, o = k.current, s = (v || D.value.includes(" ")) && o ? Ie(o, n) : null;
1205
+ if (s && r) {
1206
+ let e = r.getBoundingClientRect();
1207
+ i = s.bottom - e.top, a = s.left - e.left;
1208
+ } else {
1209
+ let e = getComputedStyle(t), r = Fe(D.value, n, {
1210
+ charWidth: rt.value,
1211
+ lineHeight: B.value,
1212
+ scrollTop: t.scrollTop,
1213
+ scrollLeft: t.scrollLeft,
1214
+ padTop: Number.parseFloat(e.paddingTop) || 0,
1215
+ padLeft: Number.parseFloat(e.paddingLeft) || 0,
1216
+ tabSize: g
1217
+ });
1218
+ i = r.top + B.value, a = r.left;
1219
+ }
1220
+ e.style.top = `${i}px`, e.style.left = `${a}px`;
1068
1221
  });
1069
- let Le = re(ee);
1070
- (F.current === null || F.current.grammar !== Le) && (F.current = ne(Le), I.current = void 0);
1071
- let Re = F.current, ze = H.value.split("\n"), J = ze.length, Be = H.value, Y = I.current;
1072
- if (Be !== Y) {
1073
- let e = Y === void 0 ? 0 : (() => {
1074
- let e = Ee(Y, Be);
1075
- return Y.slice(0, e.from).split("\n").length - 1;
1222
+ let K = ae(te);
1223
+ (N.current === null || N.current.grammar !== K) && (N.current = ie(K), P.current = void 0);
1224
+ let q = N.current, st = z.value.split("\n"), J = st.length;
1225
+ Oe.current = st;
1226
+ let ct = z.value, lt = P.current;
1227
+ if (ct !== lt) {
1228
+ let e = lt === void 0 ? 0 : (() => {
1229
+ let e = Ne(lt, ct);
1230
+ return lt.slice(0, e.from).split("\n").length - 1;
1076
1231
  })();
1077
- Re.invalidateFrom(e), I.current = Be;
1232
+ q.invalidateFrom(e), P.current = ct;
1078
1233
  }
1079
- let X = Pe.value, Ve = (v ?? J > 1e3) && !_ && X > 0, Z = 0, Q = J;
1080
- if (Ve) {
1081
- Z = Math.max(0, Math.floor(Me.value / X) - 12);
1082
- let e = Math.ceil(Ne.value / X);
1083
- Q = Math.min(J, Z + e + 24);
1084
- }
1085
- let He = te(Le, ze, Z, Q, Re), Ue = Z * X, We = (J - Q) * X, $ = U.value ? ge(H.value, Fe.value, { caseSensitive: G.value }) : [];
1086
- q.value >= $.length && (q.value = Math.max(0, $.length - 1));
1087
- let Ge = $.length > 0 ? ve(H.value, $, q.value, {
1088
- match: E.match,
1089
- current: E.matchCurrent
1090
- }) : [], Ke = typeof T == "function" ? T(H.value) : T ?? [], qe = [];
1091
- if (ae) {
1092
- let e = be(H.value, Ie.value);
1093
- e && (qe = xe(H.value, e, E.bracketMatch));
1234
+ let ut = B.value > 0, Y = ut ? B.value : 20, dt = (y ?? J > 1e3) && !v, X = 0, Z = J;
1235
+ if (dt) if (ut) {
1236
+ X = Math.max(0, Math.floor(qe.value / Y) - 12);
1237
+ let e = Math.ceil(Je.value / Y);
1238
+ Z = Math.min(J, X + e + 24);
1239
+ } else Z = Math.min(J, 200);
1240
+ let ft = dt && X > q.length ? X - q.length : 0, pt = !dt || X === 0 || q.length >= X || ft <= 2e3, mt;
1241
+ pt ? mt = ne(K, st, X, Z, q) : ($e.value, mt = re(K, st, X, Z, K.initialState));
1242
+ let ht = X * Y, gt = (J - Z) * Y;
1243
+ a(() => {
1244
+ z.value, $e.value;
1245
+ let e = B.value, t = Oe.current, n = t.length;
1246
+ if (!((y ?? n > 1e3) && !v && e > 0)) return;
1247
+ let r = Math.max(0, Math.floor(qe.value / e) - 12);
1248
+ if (r === 0 || q.length >= r || q.length >= n) return;
1249
+ let i = () => {
1250
+ q.ensure(t, Math.min(r - 1, q.length + Ve)), $e.value++;
1251
+ };
1252
+ if (typeof requestAnimationFrame != "function") {
1253
+ i();
1254
+ return;
1255
+ }
1256
+ let a = requestAnimationFrame(i);
1257
+ return () => cancelAnimationFrame(a);
1258
+ });
1259
+ let Q = V.value ? xe(z.value, Ye.value, { caseSensitive: Ze.value }) : [];
1260
+ H.value >= Q.length && (H.value = Math.max(0, Q.length - 1));
1261
+ let _t = Q.length > 0 ? Ce(z.value, Q, H.value, {
1262
+ match: w.match,
1263
+ current: w.matchCurrent
1264
+ }) : [], vt = typeof S == "function" ? S(z.value) : S ?? [], yt = [];
1265
+ if (de) {
1266
+ let e = Te(z.value, U.value);
1267
+ e && (yt = Ee(z.value, e, w.bracketMatch));
1094
1268
  }
1095
- let Je = [
1096
- ...Ke,
1097
- ...qe,
1098
- ...Ge
1099
- ], Ye = Je.length > 0 ? Je : void 0, Xe = (e) => {
1100
- let t = $[e], n = M.current;
1101
- if (!(!t || !n) && (n.focus(), n.setSelectionRange(t.start, t.end), B.current = {
1269
+ let bt = [
1270
+ ...vt,
1271
+ ...yt,
1272
+ ..._t
1273
+ ], xt = bt.length > 0 ? bt : void 0, St = (e) => {
1274
+ let t = Q[e], n = j.current;
1275
+ if (!(!t || !n) && (n.focus(), n.setSelectionRange(t.start, t.end), L.current = {
1102
1276
  start: t.start,
1103
1277
  end: t.end
1104
- }, X > 0)) {
1105
- let { line: e } = _e(n.value, t.start), r = e * X;
1106
- (r < n.scrollTop || r > n.scrollTop + n.clientHeight - X) && (n.scrollTop = Math.max(0, r - n.clientHeight / 2));
1278
+ }, Y > 0)) {
1279
+ let { line: e } = Se(n.value, t.start), r = e * Y;
1280
+ (r < n.scrollTop || r > n.scrollTop + n.clientHeight - Y) && (n.scrollTop = Math.max(0, r - n.clientHeight / 2));
1107
1281
  }
1108
- }, Ze = () => {
1109
- $.length !== 0 && (q.value = (q.value + 1) % $.length, Xe(q.value));
1110
- }, Qe = () => {
1111
- $.length !== 0 && (q.value = (q.value - 1 + $.length) % $.length, Xe(q.value));
1112
- }, $e = () => {
1113
- let e = $[q.value], t = M.current;
1114
- !e || !t || y || b || (t.setRangeText(W.value, e.start, e.end, "end"), V(t.value, {
1282
+ }, Ct = () => {
1283
+ Q.length !== 0 && (H.value = (H.value + 1) % Q.length, St(H.value));
1284
+ }, wt = () => {
1285
+ Q.length !== 0 && (H.value = (H.value - 1 + Q.length) % Q.length, St(H.value));
1286
+ }, Tt = () => {
1287
+ let e = Q[H.value], t = j.current;
1288
+ !e || !t || b || x || (t.setRangeText(Xe.value, e.start, e.end, "end"), R(t.value, {
1115
1289
  start: t.selectionStart,
1116
1290
  end: t.selectionEnd
1117
1291
  }, !1));
1118
- }, et = () => {
1119
- if ($.length === 0 || y || b) return;
1120
- let e = ye(H.value, $, W.value), t = M.current;
1121
- t && (t.value = e), V(e, {
1292
+ }, Et = () => {
1293
+ if (Q.length === 0 || b || x) return;
1294
+ let e = we(z.value, Q, Xe.value), t = j.current;
1295
+ t && (t.value = e), R(e, {
1122
1296
  start: t?.selectionStart ?? 0,
1123
1297
  end: t?.selectionEnd ?? 0
1124
1298
  }, !1);
1125
- }, tt = (e) => {
1126
- K.value = e, U.value = !0;
1127
- }, nt = () => {
1128
- U.value = !1, M.current?.focus();
1129
- };
1130
- c(ue, () => ({
1299
+ }, Dt = (e) => {
1300
+ Qe.value = e, V.value = !0;
1301
+ }, Ot = () => {
1302
+ V.value = !1, j.current?.focus();
1303
+ }, $ = W.value ? ze(C ?? [], tt.value) : [];
1304
+ G.value >= $.length && (G.value = Math.max(0, $.length - 1));
1305
+ let kt = $.map((e) => ({
1306
+ id: e.id,
1307
+ label: e.label,
1308
+ ...e.hint !== void 0 && { hint: e.hint }
1309
+ })), { anchorStyle: At, floatingStyle: jt } = t({
1310
+ anchorRef: it,
1311
+ floatingRef: at,
1312
+ placement: "bottom-start",
1313
+ enabled: W
1314
+ }), Mt = {
1131
1315
  applyEdit: ({ from: e, to: t }, n) => {
1132
- let r = M.current;
1133
- r && (r.setRangeText(n, e, t, "end"), V(r.value, {
1316
+ let r = j.current;
1317
+ r && (r.setRangeText(n, e, t, "end"), R(r.value, {
1134
1318
  start: r.selectionStart,
1135
1319
  end: r.selectionEnd
1136
1320
  }, !1));
1137
1321
  },
1138
1322
  getSelection: () => {
1139
- let e = M.current;
1323
+ let e = j.current;
1140
1324
  return e ? {
1141
1325
  start: e.selectionStart,
1142
1326
  end: e.selectionEnd
1143
- } : { ...B.current };
1327
+ } : { ...L.current };
1144
1328
  },
1145
- focus: () => M.current?.focus(),
1146
- undo: Ae,
1147
- redo: je,
1148
- openFind: () => tt(!1)
1149
- }));
1150
- let rt = (e) => {
1151
- let t = e.currentTarget, n = !y && !b, r = {};
1329
+ focus: () => j.current?.focus(),
1330
+ undo: Ge,
1331
+ redo: Ke,
1332
+ openFind: () => Dt(!1),
1333
+ openCommandMenu: () => {
1334
+ let e = j.current;
1335
+ !e || !C || C.length === 0 || b || x || (e.focus(), e.setRangeText("/", e.selectionStart, e.selectionEnd, "end"), R(e.value, {
1336
+ start: e.selectionStart,
1337
+ end: e.selectionEnd
1338
+ }, !1), U.value = e.selectionStart, L.current = {
1339
+ start: e.selectionStart,
1340
+ end: e.selectionEnd
1341
+ });
1342
+ }
1343
+ };
1344
+ u(ge, () => Mt);
1345
+ let Nt = (e) => {
1346
+ let t = $[e], n = j.current;
1347
+ if (!t || !n || b || x) return;
1348
+ let r = et.value, i = n.selectionStart;
1349
+ n.setRangeText(t.insert ?? "", r, i, "end"), R(n.value, {
1350
+ start: n.selectionStart,
1351
+ end: n.selectionEnd
1352
+ }, !1), U.value = n.selectionStart, L.current = {
1353
+ start: n.selectionStart,
1354
+ end: n.selectionEnd
1355
+ }, W.value = !1, G.value = 0, n.focus(), t.run?.(Mt);
1356
+ }, Pt = (e) => {
1357
+ let t = e.currentTarget, n = !b && !x, r = {};
1152
1358
  if (n) {
1153
- let { indent: e, dedent: t } = Te({
1154
- tabSize: h,
1155
- insertSpaces: g
1359
+ let { indent: e, dedent: t } = Me({
1360
+ tabSize: g,
1361
+ insertSpaces: _
1156
1362
  });
1157
- r.Tab = e, r["Shift-Tab"] = t, r["Mod-z"] = () => (Ae(), !0);
1158
- let n = () => (je(), !0);
1363
+ r.Tab = e, r["Shift-Tab"] = t, r["Mod-z"] = () => (Ge(), !0);
1364
+ let n = () => (Ke(), !0);
1159
1365
  r["Mod-Shift-z"] = n, r["Mod-y"] = n;
1160
1366
  }
1161
- r["Mod-f"] = () => (tt(!1), !0), r["Mod-Alt-f"] = () => (tt(!0), !0), r["Mod-s"] = () => {
1162
- let e = de.current;
1163
- return e ? (e(O.value), !0) : !1;
1164
- }, U.value && (r.Escape = () => (nt(), !0)), we(Ce(r, w), {
1367
+ if (r["Mod-f"] = () => (Dt(!1), !0), r["Mod-Alt-f"] = () => (Dt(!0), !0), r["Mod-s"] = () => {
1368
+ let e = E.current;
1369
+ return e ? (e(D.value), !0) : !1;
1370
+ }, V.value && (r.Escape = () => (Ot(), !0)), W.value) {
1371
+ let e = (e) => () => {
1372
+ let t = $.length;
1373
+ return t > 0 && (G.value = (G.value + e + t) % t), !0;
1374
+ };
1375
+ r.ArrowDown = e(1), r.ArrowUp = e(-1);
1376
+ let t = () => ($.length > 0 && Nt(G.value), !0);
1377
+ r.Enter = t, r.Tab = t, r.Escape = () => (nt.value = et.value, W.value = !1, !0);
1378
+ }
1379
+ je(Ae(r, le), {
1165
1380
  textarea: t,
1166
1381
  event: e,
1167
- setText: Oe
1168
- }) && e.preventDefault(), ce?.(e);
1169
- }, it = {
1170
- "--cascivo-editor-tab-size": h,
1171
- ...ie,
1172
- ...se
1382
+ setText: Ue
1383
+ }) && e.preventDefault(), me?.(e);
1384
+ }, Ft = {
1385
+ "--cascivo-editor-tab-size": g,
1386
+ ...ue,
1387
+ ...pe
1173
1388
  };
1174
- return /* @__PURE__ */ d("div", {
1175
- ref: k,
1176
- className: e(D.root, oe),
1177
- "data-wrap": _,
1178
- "data-line-numbers": m,
1179
- style: it,
1180
- children: [m && /* @__PURE__ */ u(pe, {
1389
+ return /* @__PURE__ */ p("div", {
1390
+ ref: O,
1391
+ className: e(T.root, fe),
1392
+ "data-wrap": v,
1393
+ "data-line-numbers": h,
1394
+ style: Ft,
1395
+ children: [h && /* @__PURE__ */ f(ve, {
1181
1396
  count: J,
1182
- className: D.gutter,
1183
- gutterRef: j,
1184
- start: Z,
1185
- end: Q,
1186
- topPad: Ue,
1187
- bottomPad: We,
1397
+ className: T.gutter,
1398
+ gutterRef: A,
1399
+ start: X,
1400
+ end: Z,
1401
+ topPad: ht,
1402
+ bottomPad: gt,
1188
1403
  activeLine: !0
1189
- }), /* @__PURE__ */ d("div", {
1190
- className: D.codeArea,
1404
+ }), /* @__PURE__ */ p("div", {
1405
+ className: T.codeArea,
1191
1406
  children: [
1192
- /* @__PURE__ */ d("pre", {
1193
- ref: A,
1194
- className: D.pre,
1407
+ /* @__PURE__ */ p("pre", {
1408
+ ref: k,
1409
+ className: T.pre,
1195
1410
  "aria-hidden": "true",
1196
1411
  children: [
1197
- /* @__PURE__ */ u("div", { className: D.currentLine }),
1198
- Ue > 0 && /* @__PURE__ */ u("div", { style: { blockSize: Ue } }),
1199
- /* @__PURE__ */ u("code", { children: fe(He, Z, Q, Ye) }),
1200
- We > 0 && /* @__PURE__ */ u("div", { style: { blockSize: We } })
1412
+ /* @__PURE__ */ f("div", { className: T.currentLine }),
1413
+ ht > 0 && /* @__PURE__ */ f("div", { style: { blockSize: ht } }),
1414
+ /* @__PURE__ */ f("code", { children: _e(mt, X, Z, xt) }),
1415
+ gt > 0 && /* @__PURE__ */ f("div", { style: { blockSize: gt } })
1201
1416
  ]
1202
1417
  }),
1203
- /* @__PURE__ */ u("textarea", {
1204
- ref: M,
1205
- className: D.textarea,
1206
- value: O.value,
1418
+ /* @__PURE__ */ f("textarea", {
1419
+ ref: j,
1420
+ className: T.textarea,
1421
+ value: D.value,
1207
1422
  onChange: (e) => {
1208
- let t = e.currentTarget, n = t.value, r = Math.abs(n.length - L.current.length) === 1;
1209
- V(n, {
1423
+ let t = e.currentTarget, n = t.value, r = Math.abs(n.length - F.current.length) === 1;
1424
+ R(n, {
1210
1425
  start: t.selectionStart,
1211
1426
  end: t.selectionEnd
1212
1427
  }, r);
1213
1428
  },
1214
- onKeyDown: rt,
1215
- readOnly: y,
1216
- disabled: b,
1217
- spellCheck: x,
1218
- "aria-label": S ?? o(a.editor.label),
1429
+ onKeyDown: Pt,
1430
+ readOnly: b,
1431
+ disabled: x,
1432
+ spellCheck: oe,
1433
+ "aria-label": se ?? c(s.editor.label),
1434
+ "aria-expanded": W.value,
1435
+ "aria-controls": W.value ? ot : void 0,
1436
+ "aria-activedescendant": W.value ? `${ot}-opt-${G.value}` : void 0,
1219
1437
  autoCapitalize: "off",
1220
1438
  autoCorrect: "off",
1221
1439
  autoComplete: "off",
1222
- wrap: _ ? "soft" : "off",
1223
- ...le
1440
+ wrap: v ? "soft" : "off",
1441
+ ...he
1442
+ }),
1443
+ /* @__PURE__ */ f("div", {
1444
+ ref: it,
1445
+ "aria-hidden": "true",
1446
+ style: {
1447
+ position: "absolute",
1448
+ inlineSize: 0,
1449
+ blockSize: 0,
1450
+ ...At
1451
+ }
1452
+ }),
1453
+ W.value && /* @__PURE__ */ f(Be, {
1454
+ ref: at,
1455
+ id: ot,
1456
+ items: kt,
1457
+ activeIndex: G.value,
1458
+ onSelect: Nt,
1459
+ onHover: (e) => G.value = e,
1460
+ style: jt
1224
1461
  }),
1225
- U.value && /* @__PURE__ */ u(me, {
1226
- query: Fe.value,
1227
- replaceQuery: W.value,
1228
- replaceMode: K.value,
1229
- caseSensitive: G.value,
1230
- matchCount: $.length,
1231
- currentIndex: $.length > 0 ? q.value : -1,
1462
+ V.value && /* @__PURE__ */ f(ye, {
1463
+ query: Ye.value,
1464
+ replaceQuery: Xe.value,
1465
+ replaceMode: Qe.value,
1466
+ caseSensitive: Ze.value,
1467
+ matchCount: Q.length,
1468
+ currentIndex: Q.length > 0 ? H.value : -1,
1232
1469
  onQueryChange: (e) => {
1233
- Fe.value = e, q.value = 0;
1470
+ Ye.value = e, H.value = 0;
1234
1471
  },
1235
- onReplaceChange: (e) => W.value = e,
1236
- onNext: Ze,
1237
- onPrev: Qe,
1238
- onReplace: $e,
1239
- onReplaceAll: et,
1240
- onToggleCase: () => G.value = !G.value,
1241
- onToggleReplace: () => K.value = !K.value,
1242
- onClose: nt
1472
+ onReplaceChange: (e) => Xe.value = e,
1473
+ onNext: Ct,
1474
+ onPrev: wt,
1475
+ onReplace: Tt,
1476
+ onReplaceAll: Et,
1477
+ onToggleCase: () => Ze.value = !Ze.value,
1478
+ onToggleReplace: () => Qe.value = !Qe.value,
1479
+ onClose: Ot
1243
1480
  })
1244
1481
  ]
1245
1482
  })]
@@ -1247,32 +1484,32 @@ var L = s(function({ value: s, defaultValue: f, onValueChange: p, language: ee =
1247
1484
  });
1248
1485
  //#endregion
1249
1486
  //#region src/editor/highlight/highlight.tsx
1250
- function R({ value: t, language: n = "plaintext", lineNumbers: r = !1, wrap: a = !1, tabSize: o = 2, label: s, className: c, preRef: l, gutterRef: f, style: p, ...ee }) {
1251
- i();
1252
- let m = re(n), h = t.split("\n"), g = te(m, h, 0, h.length, ne(m)), _ = {
1253
- "--cascivo-editor-tab-size": o,
1254
- ...p
1487
+ function He({ value: t, language: n = "plaintext", lineNumbers: r = !1, wrap: i = !1, tabSize: a = 2, label: s, className: c, preRef: l, gutterRef: u, style: d, ...ee }) {
1488
+ o();
1489
+ let m = ae(n), te = t.split("\n"), h = ne(m, te, 0, te.length, ie(m)), g = {
1490
+ "--cascivo-editor-tab-size": a,
1491
+ ...d
1255
1492
  };
1256
- return /* @__PURE__ */ d("div", {
1257
- className: e(E.root, c),
1258
- "data-wrap": a,
1493
+ return /* @__PURE__ */ p("div", {
1494
+ className: e(w.root, c),
1495
+ "data-wrap": i,
1259
1496
  "data-line-numbers": r,
1260
- style: _,
1497
+ style: g,
1261
1498
  "aria-label": s,
1262
1499
  ...ee,
1263
- children: [r && /* @__PURE__ */ u(pe, {
1264
- count: g.length,
1265
- className: E.gutter,
1266
- gutterRef: f
1267
- }), /* @__PURE__ */ u("pre", {
1500
+ children: [r && /* @__PURE__ */ f(ve, {
1501
+ count: h.length,
1502
+ className: w.gutter,
1503
+ gutterRef: u
1504
+ }), /* @__PURE__ */ f("pre", {
1268
1505
  ref: l,
1269
- className: E.pre,
1270
- children: /* @__PURE__ */ u("code", {
1271
- className: E.code,
1272
- children: fe(g)
1506
+ className: w.pre,
1507
+ children: /* @__PURE__ */ f("code", {
1508
+ className: w.code,
1509
+ children: _e(h)
1273
1510
  })
1274
1511
  })]
1275
1512
  });
1276
1513
  }
1277
1514
  //#endregion
1278
- export { L as CodeEditor, R as Highlight, le as bash, ne as createLineStateIndex, b as createRuleGrammar, oe as css, re as getGrammar, se as html, ie as javascript, S as json, y as listGrammars, ce as markdown, x as plaintext, v as registerGrammar, m as tokenize, h as tokenizeDocument, te as tokenizeRange, ae as typescript };
1515
+ export { F as CodeEditor, He as Highlight, me as bash, ie as createLineStateIndex, x as createRuleGrammar, C as css, ae as getGrammar, fe as html, ue as javascript, se as json, b as listGrammars, pe as markdown, oe as plaintext, y as registerGrammar, h as tokenize, g as tokenizeDocument, ne as tokenizeRange, de as typescript };