@cascivo/editor 1.1.0 → 1.2.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/index.js +8 -8
- package/dist/node/index.js +8 -8
- package/package.json +3 -3
package/dist/index.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import './editor.css';
|
|
3
|
-
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";import{builtin as s,t as c}from"@cascivo/i18n";import{forwardRef as l,useImperativeHandle as
|
|
4
|
-
`),r=[],i=e.initialState;for(let t of n){let n=
|
|
3
|
+
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";import{builtin as s,t as c}from"@cascivo/i18n";import{forwardRef as l,useImperativeHandle as ee,useRef as u}from"react";import{jsx as d,jsxs as f}from"react/jsx-runtime";var p=new Map,te=`\0`,ne=0;function tokenize(e,t,n){let r=`${e.name}${te}${n}${te}${t}`,i=p.get(r);if(i)return i;ne++;let{tokens:a,state:o}=e.tokenizeLine(t,n),s={tokens:a,endState:o};return p.set(r,s),s}function tokenizeDocument(e,t){let n=t.split(`
|
|
4
|
+
`),r=[],i=e.initialState;for(let t of n){let n=tokenize(e,t,i);r.push(n.tokens),i=n.endState}return r}function tokenizeRange(e,t,n,r,i){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=[];for(let n=a;n<o;n++){let r=tokenize(e,t[n],s);c.push(r.tokens),i.setEndState(n,r.endState),s=r.endState}return c}function tokenizeWindowFrom(e,t,n,r,i){let a=Math.max(0,Math.min(n,t.length)),o=Math.max(a,Math.min(r,t.length)),s=i,c=[];for(let n=a;n<o;n++){let r=tokenize(e,t[n],s);c.push(r.tokens),s=r.endState}return c}function createLineStateIndex(e){let t=[],ensure=(n,r)=>{let i=Math.min(r,n.length-1),a=t.length;if(a>i)return;let o=a===0?e.initialState:t[a-1];for(;a<=i;a++){let r=tokenize(e,n[a],o);t[a]=r.endState,o=r.endState}};return{grammar:e,get length(){return t.length},ensure,startStateOf:(n,r)=>r<=0?e.initialState:(ensure(n,r-1),t[r-1]),setEndState:(e,n)=>{t[e]=n},invalidateFrom:e=>{let n=Math.max(0,e);n<t.length&&(t.length=n)}}}var m=new Map,h={name:`plaintext`,initialState:`default`,tokenizeLine:e=>({tokens:e.length>0?[{kind:`plain`,value:e}]:[],state:`default`})};m.set(h.name,h);function registerGrammar(e){m.set(e.name,e)}function getGrammar(e){if(e!==void 0){let t=m.get(e);if(t)return t}return m.get(`plaintext`)}function listGrammars(){return[...m.keys()]}function createRuleGrammar(e){let t={};for(let[n,r]of Object.entries(e.states))t[n]=r.map(e=>{let t=`${e.match.flags.replace(/[gy]/g,``)}y`,n={re:new RegExp(e.match.source,t),kind:e.kind};return e.push!==void 0&&(n.push=e.push),e.pop!==void 0&&(n.pop=e.pop),n});return{name:e.name,initialState:`default`,tokenizeLine(e,n){let r=t[n]?n:`default`,i=[],a=-1,o=0,flushPlain=t=>{a>=0&&(i.push({kind:`plain`,value:e.slice(a,t)}),a=-1)};for(;o<e.length;){let n=t[r],s=!1;for(let a of n){a.re.lastIndex=o;let n=a.re.exec(e);if(n!==null&&n.index===o&&n[0].length>0){flushPlain(o),i.push({kind:a.kind,value:n[0]}),o+=n[0].length,a.pop?r=`default`:a.push&&t[a.push]&&(r=a.push),s=!0;break}}s||(a<0&&(a=o),o++)}return flushPlain(e.length),{tokens:i,state:r}}}}var g={name:`plaintext`,initialState:`default`,tokenizeLine:e=>({tokens:e.length>0?[{kind:`plain`,value:e}]:[],state:`default`})};registerGrammar(g);var _=createRuleGrammar({name:`json`,states:{default:[{match:/"(?:[^"\\]|\\.)*"(?=\s*:)/,kind:`property`},{match:/"(?:[^"\\]|\\.)*"/,kind:`string`},{match:/\b(?:true|false|null)\b/,kind:`boolean`},{match:/-?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?/,kind:`number`},{match:/[{}[\],]/,kind:`punctuation`},{match:/:/,kind:`operator`}]}});registerGrammar(_);var re=`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(`.`);function words(e){return RegExp(`(?:${e.join(`|`)})\\b`)}function createCLikeGrammar(e,t,n=[]){let r=[{match:/\/\/.*/,kind:`comment`},{match:/\/\*/,kind:`comment`,push:`block`},{match:/`/,kind:`string`,push:`template`},{match:/'(?:[^'\\]|\\.)*'/,kind:`string`},{match:/"(?:[^"\\]|\\.)*"/,kind:`string`},{match:/0[xX][0-9a-fA-F]+|0[bB][01]+|0[oO][0-7]+|(?:\d[\d_]*\.?\d*|\.\d+)(?:[eE][+-]?\d+)?n?/,kind:`number`},{match:/\b(?:true|false|null|undefined|NaN|Infinity)\b/,kind:`boolean`}];return n.length>0&&r.push({match:words(n),kind:`type`}),r.push({match:words(t),kind:`keyword`},{match:/[A-Za-z_$][\w$]*(?=\s*\()/,kind:`function`},{match:/[A-Z][\w$]*/,kind:`type`},{match:/[A-Za-z_$][\w$]*/,kind:`variable`},{match:/[+\-*/%=<>!&|^~?]+/,kind:`operator`},{match:/[{}()[\];,.:]/,kind:`punctuation`}),createRuleGrammar({name:e,states:{default:r,block:[{match:/\*\//,kind:`comment`,pop:!0},{match:/[^*]+/,kind:`comment`},{match:/\*/,kind:`comment`}],template:[{match:/\\./,kind:`string`},{match:/`/,kind:`string`,pop:!0},{match:/\$\{/,kind:`punctuation`},{match:/[^`\\$]+/,kind:`string`},{match:/\$/,kind:`string`}]}})}var v=createCLikeGrammar(`javascript`,re);registerGrammar(v);var y=createCLikeGrammar(`typescript`,re,[`interface`,`type`,`enum`,`implements`,`namespace`,`declare`,`abstract`,`readonly`,`public`,`private`,`protected`,`keyof`,`infer`,`satisfies`,`is`,`asserts`,`override`,`string`,`number`,`boolean`,`any`,`unknown`,`never`,`object`]);registerGrammar(y);var ie=createRuleGrammar({name:`css`,states:{default:[{match:/\/\*/,kind:`comment`,push:`block`},{match:/@[\w-]+/,kind:`keyword`},{match:/"(?:[^"\\]|\\.)*"|'(?:[^'\\]|\\.)*'/,kind:`string`},{match:/#[0-9a-fA-F]{3,8}\b/,kind:`number`},{match:/-?\d+(?:\.\d+)?(?:px|rem|em|%|vh|vw|s|ms|deg|fr|ch|ex)?/,kind:`number`},{match:/--[\w-]+/,kind:`variable`},{match:/[.#][\w-]+/,kind:`tag`},{match:/&|::?[\w-]+/,kind:`tag`},{match:/[\w-]+(?=\s*:)/,kind:`property`},{match:/[\w-]+(?=\s*\()/,kind:`function`},{match:/[{}();,:]/,kind:`punctuation`}],block:[{match:/\*\//,kind:`comment`,pop:!0},{match:/[^*]+/,kind:`comment`},{match:/\*/,kind:`comment`}]}});registerGrammar(ie);var ae=createRuleGrammar({name:`html`,states:{default:[{match:/<!--/,kind:`comment`,push:`comment`},{match:/<!?\/?[A-Za-z][\w-]*/,kind:`tag`,push:`tag`},{match:/&[a-zA-Z#0-9]+;/,kind:`boolean`}],comment:[{match:/-->/,kind:`comment`,pop:!0},{match:/[^-]+/,kind:`comment`},{match:/-/,kind:`comment`}],tag:[{match:/\/?>/,kind:`tag`,pop:!0},{match:/"(?:[^"\\]|\\.)*"|'[^']*'/,kind:`string`},{match:/[\w-]+(?=\s*=)/,kind:`attr`},{match:/=/,kind:`operator`},{match:/[\w-]+/,kind:`attr`}]}});registerGrammar(ae);var oe=createRuleGrammar({name:`markdown`,states:{default:[{match:/^```.*/,kind:`keyword`,push:`fence`},{match:/^~~~.*/,kind:`keyword`,push:`fenceTilde`},{match:/^\s*([-*_])(?:[ \t]*\1){2,}[ \t]*$/,kind:`comment`},{match:/^#{1,6}\s.*/,kind:`keyword`},{match:/^\s*[-*+]\s+\[[ xX]\]/,kind:`boolean`},{match:/^\s*(?:[-*+]|\d+\.)\s/,kind:`operator`},{match:/^\s*>\s?.*/,kind:`comment`},{match:/`[^`]+`/,kind:`string`},{match:/~~[^~]+~~/,kind:`comment`},{match:/\*\*[^*]+\*\*|__[^_]+__/,kind:`keyword`},{match:/\*[^*\s][^*]*\*|_[^_\s][^_]*_/,kind:`type`},{match:/!?\[[^\]]*\]\([^)]*\)/,kind:`function`}],fence:[{match:/^```.*/,kind:`keyword`,pop:!0},{match:/.+/,kind:`string`}],fenceTilde:[{match:/^~~~.*/,kind:`keyword`,pop:!0},{match:/.+/,kind:`string`}]}});registerGrammar(oe);var b=createRuleGrammar({name:`bash`,states:{default:[{match:/#.*/,kind:`comment`},{match:/"(?:[^"\\]|\\.)*"/,kind:`string`},{match:/'[^']*'/,kind:`string`},{match:/\b(?:if|then|else|elif|fi|for|while|until|do|done|case|esac|in|function|select|return|exit|break|continue|local|export|readonly|declare|echo|cd|source|set|unset)\b/,kind:`keyword`},{match:/\$\{[^}]*\}|\$[A-Za-z_]\w*|\$[0-9@*#?$!]/,kind:`variable`},{match:/-?\b\d+\b/,kind:`number`},{match:/[A-Za-z_][\w-]*(?=\s*\(\s*\))/,kind:`function`},{match:/[|&;<>()]+|&&|\|\||=/,kind:`operator`}]}});registerGrammar(b);var x={builds:0,lookups:0,arrayReads:0,arraySplits:0};function createLineIndex(e){x.builds++;let t=64,n=new Int32Array(t),r=1;for(let i=e.indexOf(`
|
|
5
5
|
`);i!==-1;i=e.indexOf(`
|
|
6
|
-
`,i+1)){if(r===t){t*=2;let e=new Int32Array(t);e.set(n),n=e}n[r++]=i+1}let
|
|
7
|
-
`)),
|
|
6
|
+
`,i+1)){if(r===t){t*=2;let e=new Int32Array(t);e.set(n),n=e}n[r++]=i+1}let lineAt=e=>{x.lookups++;let t=0,i=r-1;for(;t<i;){let r=t+i+1>>1;n[r]<=e?t=r:i=r-1}return t},i;return{text:e,count:r,startOf:e=>n[Math.max(0,Math.min(e,r-1))],lineAt,locate:e=>{let t=lineAt(e);return{line:t,col:e-n[t]}},toArray:()=>(x.arrayReads++,i===void 0&&(x.arraySplits++,i=e.split(`
|
|
7
|
+
`)),i)}}function createLineIndexCache(){let e,t;return n=>{if(e?.text===n)return e;if(t?.text===n){let n=t;return t=e,e=n,n}return t=e,e=createLineIndex(n),e}}var S={root:`_root_1m6ns_2`,gutter:`_gutter_1m6ns_17`,gutterLine:`_gutterLine_1m6ns_28`,gutterActive:`_gutterActive_1m6ns_35`,pre:`_pre_1m6ns_45`,code:`_code_1m6ns_57`,line:`_line_1m6ns_62`,plain:`_plain_1m6ns_77`,keyword:`_keyword_1m6ns_80`,string:`_string_1m6ns_83`,number:`_number_1m6ns_86`,comment:`_comment_1m6ns_89`,function:`_function_1m6ns_93`,type:`_type_1m6ns_96`,operator:`_operator_1m6ns_99`,punctuation:`_punctuation_1m6ns_102`,variable:`_variable_1m6ns_105`,tag:`_tag_1m6ns_108`,attr:`_attr_1m6ns_111`,regexp:`_regexp_1m6ns_114`,boolean:`_boolean_1m6ns_117`,property:`_property_1m6ns_120`,match:`_match_1m6ns_125`,matchCurrent:`_matchCurrent_1m6ns_129`,bracketMatch:`_bracketMatch_1m6ns_133`};function classesAt(e,t){let n=``;for(let r of t)e>=r.start&&e<r.end&&(n=n?`${n} ${r.className}`:r.className);return n}function renderToken(t,n,r,i){let a=n+t.value.length,o=new Set([n,a]);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);if(o.size===2){let a=classesAt(n,r);return d(`span`,{className:a?e(S[t.kind],a):S[t.kind],children:t.value},i)}let s=[...o].sort((e,t)=>e-t),c=[];for(let i=0;i<s.length-1;i++){let a=s[i],o=s[i+1],l=classesAt(a,r);c.push(d(`span`,{className:l?e(S[t.kind],l):S[t.kind],children:t.value.slice(a-n,o-n)},a))}return d(`span`,{children:c},i)}function renderRows(e,t=0,n=t+e.length,r){let i=[];for(let a=t;a<n;a++){let n=e[a-t],o=r?.filter(e=>e.line===a);i.push(d(`span`,{className:S.line,children:n.length===0?``:o&&o.length>0?(()=>{let e=0;return n.map((t,n)=>{let r=renderToken(t,e,o,n);return e+=t.value.length,r})})():n.map((e,t)=>d(`span`,{className:S[e.kind],children:e.value},t))},a))}return i}function Gutter({count:e,className:t,gutterRef:n,start:r=0,end:i=e,topPad:a=0,bottomPad:o=0,activeLine:s=!1}){let c=[];for(let e=r+1;e<=i;e++)c.push(d(`span`,{className:S.gutterLine,children:e},e));return f(`div`,{ref:n,className:t,"aria-hidden":`true`,children:[s&&d(`div`,{className:S.gutterActive}),a>0&&d(`div`,{style:{blockSize:a}}),c,o>0&&d(`div`,{style:{blockSize:o}})]})}var C={root:`_root_18xci_2`,textarea:`_textarea_18xci_18`,gutter:`_gutter_18xci_23`,codeArea:`_codeArea_18xci_36`,pre:`_pre_18xci_43`,currentLine:`_currentLine_18xci_58`},w={panel:`_panel_hawkv_2`,row:`_row_hawkv_20`,input:`_input_hawkv_26`,count:`_count_hawkv_44`,button:`_button_hawkv_52`,toggle:`_toggle_hawkv_53`,active:`_active_hawkv_80`};function FindPanel(t){o();let n=t.matchCount===0?c(s.editor.noMatches):c(s.editor.findCount,{current:t.currentIndex+1,total:t.matchCount});return f(`div`,{className:w.panel,role:`search`,"aria-label":c(s.editor.find),children:[f(`div`,{className:w.row,children:[d(`button`,{type:`button`,className:w.toggle,"aria-label":c(s.editor.toggleReplace),"aria-expanded":t.replaceMode,onClick:t.onToggleReplace,children:t.replaceMode?`▾`:`▸`}),d(`input`,{className:w.input,value:t.query,placeholder:c(s.editor.findPlaceholder),"aria-label":c(s.editor.find),autoFocus:!0,autoComplete:`off`,spellCheck:!1,onChange:e=>t.onQueryChange(e.currentTarget.value),onKeyDown:e=>{e.key===`Enter`?(e.preventDefault(),e.shiftKey?t.onPrev():t.onNext()):e.key===`Escape`&&(e.preventDefault(),t.onClose())}}),d(`span`,{className:w.count,"aria-live":`polite`,children:n}),d(`button`,{type:`button`,className:w.button,"aria-label":c(s.editor.previous),onClick:t.onPrev,children:`‹`}),d(`button`,{type:`button`,className:w.button,"aria-label":c(s.editor.next),onClick:t.onNext,children:`›`}),d(`button`,{type:`button`,className:e(w.button,t.caseSensitive&&w.active),"aria-pressed":t.caseSensitive,"aria-label":c(s.editor.matchCase),onClick:t.onToggleCase,children:`Aa`}),d(`button`,{type:`button`,className:w.button,"aria-label":c(s.editor.close),onClick:t.onClose,children:`×`})]}),t.replaceMode&&f(`div`,{className:w.row,children:[d(`input`,{className:w.input,value:t.replaceQuery,placeholder:c(s.editor.replacePlaceholder),"aria-label":c(s.editor.replace),autoComplete:`off`,spellCheck:!1,onChange:e=>t.onReplaceChange(e.currentTarget.value),onKeyDown:e=>{e.key===`Escape`?(e.preventDefault(),t.onClose()):e.key===`Enter`&&(e.preventDefault(),t.onReplace())}}),d(`button`,{type:`button`,className:w.button,onClick:t.onReplace,children:c(s.editor.replaceOne)}),d(`button`,{type:`button`,className:w.button,onClick:t.onReplaceAll,children:c(s.editor.replaceAll)})]})]})}var se=/\w/;function isWordChar(e){return e!==void 0&&se.test(e)}function scan(e,t,n={}){if(t.length===0)return[];let r=n.caseSensitive?e:e.toLowerCase(),i=n.caseSensitive?t:t.toLowerCase(),a=[],o=0;for(;;){let t=r.indexOf(i,o);if(t===-1)break;let s=t+i.length;(!n.wholeWord||!isWordChar(e[t-1])&&!isWordChar(e[s]))&&a.push({start:t,end:s}),o=s>t?s:t+1}return a}function offsetToLineCol(e,t){let n=0,r=0;for(let i=e.indexOf(`
|
|
8
8
|
`);i!==-1&&i<t;i=e.indexOf(`
|
|
9
|
-
`,i+1))n++,r=i+1;return{line:n,col:t-r}}function
|
|
10
|
-
`,
|
|
11
|
-
`,r-1)+1,s=a.slice(o,i).replace(RegExp(`^(?:\\t| {1,${e.tabSize}})`,`gm`),``);return t.setRangeText(s,o,i,`select`),n(t.value),!0}}}function F(e,t){let n=0;for(let r of e)r===` `?n+=t-n%t:n+=1;return n}function Ue(e,t,n){let{line:r,col:i}=Ee(e,t),a=F(e.slice(t-i,t),n.tabSize);return{top:r*n.lineHeight-n.scrollTop+n.padTop,left:a*n.charWidth-n.scrollLeft+n.padLeft}}function We(e,t){if(typeof document>`u`)return null;let n=document.createTreeWalker(e,NodeFilter.SHOW_TEXT),r=0,i=n.nextNode();for(;i;){let e=i.textContent?.length??0;if(t<=r+e){let e=document.createRange();e.setStart(i,Math.max(0,t-r)),e.collapse(!0);let n=e.getClientRects();return n.length>0?n[0]:e.getBoundingClientRect()}r+=e,i=n.nextNode()}return null}function Ge(e){if(typeof document>`u`)return 0;let t=getComputedStyle(e),n=document.createElement(`span`);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);let r=n.getBoundingClientRect().width/10;return n.remove(),r}function Ke(e,t){for(let n=t-1;n>=0;n--){let r=e[n];if(r===`/`){let r=e[n-1];return r===void 0||/\s/.test(r)?{start:n,query:e.slice(n+1,t)}:null}if(r===void 0||/\s/.test(r))return null}return null}function qe(e,t){if(t===``)return[...e];let n=t.toLowerCase();return e.filter(e=>e.label.toLowerCase().includes(n)||(e.keywords?.some(e=>e.toLowerCase().includes(n))??!1))}var I={menu:`_menu_zkolh_2`,option:`_option_zkolh_24`,active:`_active_zkolh_35`,label:`_label_zkolh_39`,hint:`_hint_zkolh_44`,empty:`_empty_zkolh_50`},Je=l(function({id:t,items:n,activeIndex:r,onSelect:i,onHover:a,style:l},u){return o(),f(`ul`,{ref:u,id:t,className:I.menu,role:`listbox`,"aria-label":c(s.editor.commandMenu),style:l,children:n.length===0?f(`li`,{className:I.empty,role:`presentation`,children:c(s.editor.commandMenuEmpty)}):n.map((n,o)=>p(`li`,{id:`${t}-opt-${o}`,role:`option`,"aria-selected":o===r,className:e(I.option,o===r&&I.active),onMouseEnter:()=>a(o),onMouseDown:e=>{e.preventDefault(),i(o)},children:[f(`span`,{className:I.label,children:n.label}),n.hint!==void 0&&f(`span`,{className:I.hint,children:n.hint})]},n.id))})}),Ye=2e3,L=l(function({value:l,defaultValue:ee,onValueChange:te,language:ne=`plaintext`,lineNumbers:m=!0,tabSize:h=2,insertSpaces:g=!0,wrap:_=!1,virtualize:v,readOnly:y=!1,disabled:b=!1,spellCheck:se=!1,label:ce,ariaLabel:le,onSave:ue,keymap:de,decorations:x,theme:fe,bracketMatching:pe=!1,commands:S,className:me,style:he,onKeyDown:ge,..._e},ye){o();let be=d(ue);be.current=ue;let[T,we]=n({value:l,defaultValue:ee??``,onChange:te}),Te=d(null);Te.current??=ve();let E=Te.current,Ee=d(null);Ee.current??=Ae();let je=Ee.current,D=d(null),O=d(null),k=d(null),A=d(null),Fe=d([]),j=d(null);j.current===null&&(j.current=Re(),j.current.reset({text:T.value,selectionStart:0,selectionEnd:0}));let M=j.current,N=d(null),Le=d(void 0),P=d(T.value),ze=d(void 0),F=d(!1),I=d({start:0,end:0}),L=(e,t,n)=>{ze.current=e,P.current=e,M.record({text:e,selectionStart:t.start,selectionEnd:t.end},{coalesce:n}),we(e)},Xe=e=>{let t=A.current;L(e,t?{start:t.selectionStart,end:t.selectionEnd}:I.current,!1)},Ze=e=>{let t=A.current;if(!t)return;F.current=!0,t.value=e.text,t.setSelectionRange(e.selectionStart,e.selectionEnd),we(e.text),ze.current=e.text,P.current=e.text,I.current={start:e.selectionStart,end:e.selectionEnd},H.value=e.selectionStart;let n=E(e.text).lineAt(e.selectionStart);D.current?.style.setProperty(`--cascivo-editor-caret-line`,String(n)),F.current=!1},Qe=()=>{let e=M.undo();e&&Ze(e)},$e=()=>{let e=M.redo();e&&Ze(e)},R=i(T.value),et=i(0),tt=i(0),z=i(0),B=i(!1),nt=i(``),rt=i(``),it=i(!1),at=i(!1),V=i(0),H=i(0),ot=i(0),U=i(!1),st=i(0),ct=i(``),W=i(0),lt=i(-1),ut=i(0),dt=d(null),ft=d(null),pt=r(`slash-menu`);a(()=>{let e=T.value;if(typeof requestAnimationFrame!=`function`){R.value=e;return}let t=requestAnimationFrame(()=>{R.value=e});return()=>cancelAnimationFrame(t)}),a(()=>{let e=T.value;if(F.current||e===P.current)return;if(e===ze.current){P.current=e;return}let t=A.current,n=Pe(P.current,e),r=Ie(I.current.start,I.current.end,n);t&&(F.current=!0,t.value!==e&&(t.value=e),t.setSelectionRange(r.start,r.end),F.current=!1),I.current=r,M.reset({text:e,selectionStart:r.start,selectionEnd:r.end}),P.current=e}),a(()=>{let e=A.current;if(!e)return;let t=()=>{let t=Number.parseFloat(getComputedStyle(e).lineHeight);z.value=Number.isFinite(t)&&t>0?t:0,tt.value=e.clientHeight;let n=Ge(e);n>0&&(ut.value=n)},n=()=>{et.value=e.scrollTop,tt.value=e.clientHeight,O.current&&(O.current.scrollTop=e.scrollTop,O.current.scrollLeft=e.scrollLeft),k.current&&(k.current.scrollTop=e.scrollTop)},r=()=>{let t=E(e.value).lineAt(e.selectionStart);D.current?.style.setProperty(`--cascivo-editor-caret-line`,String(t)),I.current={start:e.selectionStart,end:e.selectionEnd},H.value=e.selectionStart},i=()=>{document.activeElement===e&&r()},a=0,o=-1,s=()=>{n(),e.scrollTop===o?a=0:(o=e.scrollTop,a=requestAnimationFrame(s))},c=()=>{n(),a===0&&typeof requestAnimationFrame==`function`&&(o=-1,a=requestAnimationFrame(s))};t(),r(),e.addEventListener(`scroll`,c),e.addEventListener(`keyup`,r),e.addEventListener(`click`,r),e.addEventListener(`input`,r),document.addEventListener(`selectionchange`,i);let l;typeof ResizeObserver<`u`&&(l=new ResizeObserver(()=>{t(),n()}),l.observe(e));let u=!1,d=document.fonts;return d?.ready&&d.ready.then(()=>{u||t()}).catch(()=>{}),()=>{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)}}),a(()=>{let e=H.value,t=T.value;if(!S||S.length===0||y||b){U.value&&=!1;return}let n=Ke(t,e);if(!n){lt.value=-1,U.value&&=!1;return}if(n.start===lt.value){U.value&&=!1;return}U.value||(W.value=0),U.value=!0,st.value=n.start,ct.value=n.query}),a(()=>{if(!U.value)return;let e=dt.current,t=A.current;if(!e||!t)return;let n=st.value,r=e.offsetParent,i,a,o=O.current,s=(_||T.value.includes(` `))&&o?We(o,n):null;if(s&&r){let e=r.getBoundingClientRect();i=s.bottom-e.top,a=s.left-e.left}else{let e=getComputedStyle(t),r=Ue(T.value,n,{charWidth:ut.value,lineHeight:z.value,scrollTop:t.scrollTop,scrollLeft:t.scrollLeft,padTop:Number.parseFloat(e.paddingTop)||0,padLeft:Number.parseFloat(e.paddingLeft)||0,tabSize:h});i=r.top+z.value,a=r.left}e.style.top=`${i}px`,e.style.left=`${a}px`});let G=oe(ne);(N.current===null||N.current.grammar!==G)&&(N.current=ae(G),Le.current=void 0);let K=N.current,q=E(R.value),mt=q.toArray(),J=q.count;Fe.current=mt;let ht=R.value,gt=Le.current;if(ht!==gt){let e=gt===void 0?0:q.lineAt(Pe(gt,ht).from);K.invalidateFrom(e),Le.current=ht}let _t=z.value>0,Y=_t?z.value:20,vt=(v??J>1e3)&&!_,X=0,Z=J;if(vt)if(_t){X=Math.max(0,Math.floor(et.value/Y)-12);let e=Math.ceil(tt.value/Y);Z=Math.min(J,X+e+24)}else Z=Math.min(J,200);let yt=vt&&X>K.length?X-K.length:0,bt=!vt||X===0||K.length>=X||yt<=2e3,xt;bt?xt=re(G,mt,X,Z,K):(ot.value,xt=ie(G,mt,X,Z,G.initialState));let St=X*Y,Ct=(J-Z)*Y;a(()=>{R.value,ot.value;let e=z.value,t=Fe.current,n=t.length;if(!((v??n>1e3)&&!_&&e>0))return;let r=Math.max(0,Math.floor(et.value/e)-12);if(r===0||K.length>=r||K.length>=n)return;let i=()=>{K.ensure(t,Math.min(r-1,K.length+Ye)),ot.value++};if(typeof requestAnimationFrame!=`function`){i();return}let a=requestAnimationFrame(i);return()=>cancelAnimationFrame(a)});let Q=B.value?je(R.value,nt.value,it.value):[];V.value>=Q.length&&(V.value=Math.max(0,Q.length-1));let wt=[];if(Q.length>0){let e=Oe(Q,q.startOf(X)),t=Z>=J?Q.length:Oe(Q,q.startOf(Z));wt=De(q,Q.slice(e,t),V.value-e,{match:C.match,current:C.matchCurrent})}let Tt=typeof x==`function`?x(R.value):x??[],Et=[];if(pe){let e=Me(R.value,H.value);e&&(Et=Ne(q,e,C.bracketMatch))}let Dt=[...Tt,...Et,...wt],Ot=Dt.length>0?Dt:void 0,kt=e=>{let t=Q[e],n=A.current;if(!(!t||!n)&&(n.focus(),n.setSelectionRange(t.start,t.end),I.current={start:t.start,end:t.end},Y>0)){let e=E(n.value).lineAt(t.start)*Y;(e<n.scrollTop||e>n.scrollTop+n.clientHeight-Y)&&(n.scrollTop=Math.max(0,e-n.clientHeight/2))}},At=()=>{Q.length!==0&&(V.value=(V.value+1)%Q.length,kt(V.value))},jt=()=>{Q.length!==0&&(V.value=(V.value-1+Q.length)%Q.length,kt(V.value))},Mt=()=>{let e=Q[V.value],t=A.current;!e||!t||y||b||(t.setRangeText(rt.value,e.start,e.end,`end`),L(t.value,{start:t.selectionStart,end:t.selectionEnd},!1))},Nt=()=>{if(Q.length===0||y||b)return;let e=ke(R.value,Q,rt.value),t=A.current;t&&(t.value=e),L(e,{start:t?.selectionStart??0,end:t?.selectionEnd??0},!1)},Pt=e=>{at.value=e,B.value=!0},Ft=()=>{B.value=!1,A.current?.focus()},$=U.value?qe(S??[],ct.value):[];W.value>=$.length&&(W.value=Math.max(0,$.length-1));let It=$.map(e=>({id:e.id,label:e.label,...e.hint!==void 0&&{hint:e.hint}})),{anchorStyle:Lt,floatingStyle:Rt}=t({anchorRef:dt,floatingRef:ft,placement:`bottom-start`,enabled:U}),zt={applyEdit:({from:e,to:t},n)=>{let r=A.current;r&&(r.setRangeText(n,e,t,`end`),L(r.value,{start:r.selectionStart,end:r.selectionEnd},!1))},getSelection:()=>{let e=A.current;return e?{start:e.selectionStart,end:e.selectionEnd}:{...I.current}},focus:()=>A.current?.focus(),undo:Qe,redo:$e,openFind:()=>Pt(!1),openCommandMenu:()=>{let e=A.current;!e||!S||S.length===0||y||b||(e.focus(),e.setRangeText(`/`,e.selectionStart,e.selectionEnd,`end`),L(e.value,{start:e.selectionStart,end:e.selectionEnd},!1),H.value=e.selectionStart,I.current={start:e.selectionStart,end:e.selectionEnd})}};u(ye,()=>zt);let Bt=e=>{let t=$[e],n=A.current;if(!t||!n||y||b)return;let r=st.value,i=n.selectionStart;n.setRangeText(t.insert??``,r,i,`end`),L(n.value,{start:n.selectionStart,end:n.selectionEnd},!1),H.value=n.selectionStart,I.current={start:n.selectionStart,end:n.selectionEnd},U.value=!1,W.value=0,n.focus(),t.run?.(zt)},Vt=e=>{let t=e.currentTarget,n=!y&&!b,r={};if(n){let{indent:e,dedent:t}=He({tabSize:h,insertSpaces:g});r.Tab=e,r[`Shift-Tab`]=t,r[`Mod-z`]=()=>(Qe(),!0);let n=()=>($e(),!0);r[`Mod-Shift-z`]=n,r[`Mod-y`]=n}if(r[`Mod-f`]=()=>(Pt(!1),!0),r[`Mod-Alt-f`]=()=>(Pt(!0),!0),r[`Mod-s`]=()=>{let e=be.current;return e?(e(T.value),!0):!1},B.value&&(r.Escape=()=>(Ft(),!0)),U.value){let e=e=>()=>{let t=$.length;return t>0&&(W.value=(W.value+e+t)%t),!0};r.ArrowDown=e(1),r.ArrowUp=e(-1);let t=()=>($.length>0&&Bt(W.value),!0);r.Enter=t,r.Tab=t,r.Escape=()=>(lt.value=st.value,U.value=!1,!0)}Ve(Be(r,de),{textarea:t,event:e,setText:Xe})&&e.preventDefault(),ge?.(e)},Ht={"--cascivo-editor-tab-size":h,...fe,...he};return p(`div`,{ref:D,className:e(w.root,me),"data-wrap":_,"data-line-numbers":m,style:Ht,children:[m&&f(Se,{count:J,className:w.gutter,gutterRef:k,start:X,end:Z,topPad:St,bottomPad:Ct,activeLine:!0}),p(`div`,{className:w.codeArea,children:[p(`pre`,{ref:O,className:w.pre,"aria-hidden":`true`,children:[f(`div`,{className:w.currentLine}),St>0&&f(`div`,{style:{blockSize:St}}),f(`code`,{children:xe(xt,X,Z,Ot)}),Ct>0&&f(`div`,{style:{blockSize:Ct}})]}),f(`textarea`,{ref:A,className:w.textarea,value:T.value,onChange:e=>{let t=e.currentTarget,n=t.value,r=Math.abs(n.length-P.current.length)===1;L(n,{start:t.selectionStart,end:t.selectionEnd},r)},onKeyDown:Vt,readOnly:y,disabled:b,spellCheck:se,role:`combobox`,"aria-label":le??ce??c(s.editor.label),"aria-expanded":U.value,"aria-controls":U.value?pt:void 0,"aria-activedescendant":U.value?`${pt}-opt-${W.value}`:void 0,autoCapitalize:`off`,autoCorrect:`off`,autoComplete:`off`,wrap:_?`soft`:`off`,..._e}),f(`div`,{ref:dt,"aria-hidden":`true`,style:{position:`absolute`,inlineSize:0,blockSize:0,...Lt}}),U.value&&f(Je,{ref:ft,id:pt,items:It,activeIndex:W.value,onSelect:Bt,onHover:e=>W.value=e,style:Rt}),B.value&&f(Ce,{query:nt.value,replaceQuery:rt.value,replaceMode:at.value,caseSensitive:it.value,matchCount:Q.length,currentIndex:Q.length>0?V.value:-1,onQueryChange:e=>{nt.value=e,V.value=0},onReplaceChange:e=>rt.value=e,onNext:At,onPrev:jt,onReplace:Mt,onReplaceAll:Nt,onToggleCase:()=>it.value=!it.value,onToggleReplace:()=>at.value=!at.value,onClose:Ft})]})]})});function Xe({value:t,language:n=`plaintext`,lineNumbers:r=!1,wrap:i=!1,tabSize:a=2,label:s,ariaLabel:c,className:l,preRef:u,gutterRef:d,style:ee,...te}){o();let ne=oe(n),m=t.split(`
|
|
12
|
-
`),h=
|
|
9
|
+
`,i+1))n++,r=i+1;return{line:n,col:t-r}}function toDecorations(e,t,n,r){return t.map((t,i)=>{let{line:a,col:o}=e.locate(t.start);return{line:a,start:o,end:o+(t.end-t.start),className:i===n?r.current:r.match}})}function firstMatchFrom(e,t){let n=0,r=e.length;for(;n<r;){let i=n+r>>1;e[i].start<t?n=i+1:r=i}return n}function replaceAll(e,t,n){let r=e;for(let e=t.length-1;e>=0;e--){let i=t[e];r=r.slice(0,i.start)+n+r.slice(i.end)}return r}function createScanCache(){let e,t,n=[];return(r,i,a)=>{let o=`${a?`S`:`i`}${i}`;return r===t&&o===e?n:(t=r,e=o,n=scan(r,i,{caseSensitive:a}),n)}}var T={"(":`)`,"[":`]`,"{":`}`},E={")":`(`,"]":`[`,"}":`}`};function scanForward(e,t,n,r){let i=0;for(let a=t;a<e.length;a++){let t=e[a];if(t===n)i++;else if(t===r&&--i===0)return a}return-1}function scanBackward(e,t,n,r){let i=0;for(let a=t;a>=0;a--){let t=e[a];if(t===r)i++;else if(t===n&&--i===0)return a}return-1}function matchBracket(e,t){let n=e[t];if(n&&n in T){let r=scanForward(e,t,n,T[n]);if(r!==-1)return{open:t,close:r}}let r=e[t-1];if(r&&r in E){let n=scanBackward(e,t-1,E[r],r);if(n!==-1)return{open:n,close:t-1}}if(r&&r in T){let n=scanForward(e,t-1,r,T[r]);if(n!==-1)return{open:t-1,close:n}}if(n&&n in E){let r=scanBackward(e,t,E[n],n);if(r!==-1)return{open:r,close:t}}}function toBracketDecorations(e,t,n){return[t.open,t.close].map(t=>{let{line:r,col:i}=e.locate(t);return{line:r,start:i,end:i+1,className:n}})}var D=1024;function diff(e,t){if(e===t)return{from:e.length,to:e.length,insert:``};let n=Math.min(e.length,t.length),r=0;for(;r+D<=n&&e.slice(r,r+D)===t.slice(r,r+D);)r+=D;for(;r<n&&e[r]===t[r];)r++;let i=e.length,a=t.length;for(;i-D>=r&&a-D>=r&&e.slice(i-D,i)===t.slice(a-D,a);)i-=D,a-=D;for(;i>r&&a>r&&e[i-1]===t[a-1];)i--,a--;return{from:r,to:i,insert:t.slice(r,a)}}function rebaseOffset(e,t){return e<=t.from?e:e>=t.to?e+(t.insert.length-(t.to-t.from)):t.from+t.insert.length}function rebaseSelection(e,t,n){return{start:rebaseOffset(e,n),end:rebaseOffset(t,n)}}function detach(e){return e.length===0?e:structuredClone(e)}function makeStep(e,t,n){let r=diff(e,t.text);return{from:r.from,removed:detach(e.slice(r.from,r.to)),inserted:detach(r.insert),before:n,after:{start:t.selectionStart,end:t.selectionEnd}}}function unapply(e,t){return e.slice(0,t.from)+t.removed+e.slice(t.from+t.inserted.length)}function apply(e,t){return e.slice(0,t.from)+t.inserted+e.slice(t.from+t.removed.length)}function createHistory(e=200){let t=Math.max(1,e-1),n=[],r=0,i=``,a={start:0,end:0},o=!1,snapshot=()=>({text:i,selectionStart:a.start,selectionEnd:a.end});return{record(e,s){let c=s?.coalesce??!1;r<n.length&&(n=n.slice(0,r));let l=n[r-1];c&&o&&l?n[r-1]=makeStep(unapply(i,l),e,l.before):(n.push(makeStep(i,e,a)),r=n.length,n.length>t&&(n.shift(),r--)),i=e.text,a={start:e.selectionStart,end:e.selectionEnd},o=c},undo(){if(r===0)return;let e=n[--r];return i=unapply(i,e),a=e.before,o=!1,snapshot()},redo(){if(r>=n.length)return;let e=n[r++];return i=apply(i,e),a=e.after,o=!1,snapshot()},reset(e){n=[],r=0,i=e.text,a={start:e.selectionStart,end:e.selectionEnd},o=!1},canUndo(){return r>0},canRedo(){return r<n.length}}}var ce=typeof navigator<`u`&&/Mac|iPhone|iPad|iPod/.test(navigator.platform||navigator.userAgent||``);function chordOf(e){let t=[];(ce?e.metaKey:e.ctrlKey)&&t.push(`Mod`),e.altKey&&t.push(`Alt`),e.shiftKey&&t.push(`Shift`);let n=e.key;return n.length===1&&(n=n.toLowerCase()),t.push(n),t.join(`-`)}function mergeKeymap(e,t){let n=new Map(Object.entries(e));if(t)for(let[e,r]of Object.entries(t))n.set(e,r);return n}function dispatch(e,t){let n=e.get(chordOf(t.event));return n?n(t):!1}function createIndentCommands(e){let indentText=()=>e.insertSpaces?` `.repeat(e.tabSize):` `;return{indent:({textarea:e,setText:t})=>{let{selectionStart:n,selectionEnd:r,value:i}=e,a=i.lastIndexOf(`
|
|
10
|
+
`,n-1)+1;if(n===r)e.setRangeText(indentText(),n,r,`end`);else{let t=i.slice(a,r).replace(/^/gm,indentText());e.setRangeText(t,a,r,`select`)}return t(e.value),!0},dedent:({textarea:t,setText:n})=>{let{selectionStart:r,selectionEnd:i,value:a}=t,o=a.lastIndexOf(`
|
|
11
|
+
`,r-1)+1,s=a.slice(o,i).replace(RegExp(`^(?:\\t| {1,${e.tabSize}})`,`gm`),``);return t.setRangeText(s,o,i,`select`),n(t.value),!0}}}function visualColumn(e,t){let n=0;for(let r of e)r===` `?n+=t-n%t:n+=1;return n}function caretCoords(e,t,n){let{line:r,col:i}=offsetToLineCol(e,t),a=visualColumn(e.slice(t-i,t),n.tabSize);return{top:r*n.lineHeight-n.scrollTop+n.padTop,left:a*n.charWidth-n.scrollLeft+n.padLeft}}function caretRectFromPre(e,t){if(typeof document>`u`)return null;let n=document.createTreeWalker(e,NodeFilter.SHOW_TEXT),r=0,i=n.nextNode();for(;i;){let e=i.textContent?.length??0;if(t<=r+e){let e=document.createRange();e.setStart(i,Math.max(0,t-r)),e.collapse(!0);let n=e.getClientRects();return n.length>0?n[0]:e.getBoundingClientRect()}r+=e,i=n.nextNode()}return null}function measureCharWidth(e){if(typeof document>`u`)return 0;let t=getComputedStyle(e),n=document.createElement(`span`);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);let r=n.getBoundingClientRect().width/10;return n.remove(),r}function detectTrigger(e,t){for(let n=t-1;n>=0;n--){let r=e[n];if(r===`/`){let r=e[n-1];return r===void 0||/\s/.test(r)?{start:n,query:e.slice(n+1,t)}:null}if(r===void 0||/\s/.test(r))return null}return null}function filterCommands(e,t){if(t===``)return[...e];let n=t.toLowerCase();return e.filter(e=>e.label.toLowerCase().includes(n)||(e.keywords?.some(e=>e.toLowerCase().includes(n))??!1))}var O={menu:`_menu_zkolh_2`,option:`_option_zkolh_24`,active:`_active_zkolh_35`,label:`_label_zkolh_39`,hint:`_hint_zkolh_44`,empty:`_empty_zkolh_50`},le=l(function({id:t,items:n,activeIndex:r,onSelect:i,onHover:a,style:l},ee){return o(),d(`ul`,{ref:ee,id:t,className:O.menu,role:`listbox`,"aria-label":c(s.editor.commandMenu),style:l,children:n.length===0?d(`li`,{className:O.empty,role:`presentation`,children:c(s.editor.commandMenuEmpty)}):n.map((n,o)=>f(`li`,{id:`${t}-opt-${o}`,role:`option`,"aria-selected":o===r,className:e(O.option,o===r&&O.active),onMouseEnter:()=>a(o),onMouseDown:e=>{e.preventDefault(),i(o)},children:[d(`span`,{className:O.label,children:n.label}),n.hint!==void 0&&d(`span`,{className:O.hint,children:n.hint})]},n.id))})}),ue=2e3,de=l(function({value:l,defaultValue:p,onValueChange:te,language:ne=`plaintext`,lineNumbers:m=!0,tabSize:h=2,insertSpaces:g=!0,wrap:_=!1,virtualize:re,readOnly:v=!1,disabled:y=!1,spellCheck:ie=!1,label:ae,ariaLabel:oe,onSave:b,keymap:x,decorations:w,theme:se,bracketMatching:T=!1,commands:E,className:D,style:ce,onKeyDown:O,...de},fe){o();let pe=u(b);pe.current=b;let[k,me]=n({value:l,defaultValue:p??``,onChange:te}),he=u(null);he.current??=createLineIndexCache();let ge=he.current,_e=u(null);_e.current??=createScanCache();let ve=_e.current,ye=u(null),A=u(null),be=u(null),j=u(null),xe=u([]),M=u(null);M.current===null&&(M.current=createHistory(),M.current.reset({text:k.value,selectionStart:0,selectionEnd:0}));let N=M.current,P=u(null),Se=u(void 0),F=u(k.value),Ce=u(void 0),I=u(!1),L=u({start:0,end:0}),commit=(e,t,n)=>{Ce.current=e,F.current=e,N.record({text:e,selectionStart:t.start,selectionEnd:t.end},{coalesce:n}),me(e)},commitFromCommand=e=>{let t=j.current;commit(e,t?{start:t.selectionStart,end:t.selectionEnd}:L.current,!1)},applySnapshot=e=>{let t=j.current;if(!t)return;I.current=!0,t.value=e.text,t.setSelectionRange(e.selectionStart,e.selectionEnd),me(e.text),Ce.current=e.text,F.current=e.text,L.current={start:e.selectionStart,end:e.selectionEnd},H.value=e.selectionStart;let n=ge(e.text).lineAt(e.selectionStart);ye.current?.style.setProperty(`--cascivo-editor-caret-line`,String(n)),I.current=!1},doUndo=()=>{let e=N.undo();e&&applySnapshot(e)},doRedo=()=>{let e=N.redo();e&&applySnapshot(e)},R=i(k.value),we=i(0),Te=i(0),z=i(0),B=i(!1),Ee=i(``),De=i(``),Oe=i(!1),ke=i(!1),V=i(0),H=i(0),Ae=i(0),U=i(!1),je=i(0),Me=i(``),W=i(0),Ne=i(-1),Pe=i(0),Fe=u(null),Ie=u(null),Le=r(`slash-menu`);a(()=>{let e=k.value;if(typeof requestAnimationFrame!=`function`){R.value=e;return}let t=requestAnimationFrame(()=>{R.value=e});return()=>cancelAnimationFrame(t)}),a(()=>{let e=k.value;if(I.current||e===F.current)return;if(e===Ce.current){F.current=e;return}let t=j.current,n=diff(F.current,e),r=rebaseSelection(L.current.start,L.current.end,n);t&&(I.current=!0,t.value!==e&&(t.value=e),t.setSelectionRange(r.start,r.end),I.current=!1),L.current=r,N.reset({text:e,selectionStart:r.start,selectionEnd:r.end}),F.current=e}),a(()=>{let e=j.current;if(!e)return;let measure=()=>{let t=Number.parseFloat(getComputedStyle(e).lineHeight);z.value=Number.isFinite(t)&&t>0?t:0,Te.value=e.clientHeight;let n=measureCharWidth(e);n>0&&(Pe.value=n)},syncScroll=()=>{we.value=e.scrollTop,Te.value=e.clientHeight,A.current&&(A.current.scrollTop=e.scrollTop,A.current.scrollLeft=e.scrollLeft),be.current&&(be.current.scrollTop=e.scrollTop)},syncCaret=()=>{let t=ge(e.value).lineAt(e.selectionStart);ye.current?.style.setProperty(`--cascivo-editor-caret-line`,String(t)),L.current={start:e.selectionStart,end:e.selectionEnd},H.value=e.selectionStart},syncCaretIfActive=()=>{document.activeElement===e&&syncCaret()},t=0,n=-1,sampleFrame=()=>{syncScroll(),e.scrollTop===n?t=0:(n=e.scrollTop,t=requestAnimationFrame(sampleFrame))},onScroll=()=>{syncScroll(),t===0&&typeof requestAnimationFrame==`function`&&(n=-1,t=requestAnimationFrame(sampleFrame))};measure(),syncCaret(),e.addEventListener(`scroll`,onScroll),e.addEventListener(`keyup`,syncCaret),e.addEventListener(`click`,syncCaret),e.addEventListener(`input`,syncCaret),document.addEventListener(`selectionchange`,syncCaretIfActive);let r;typeof ResizeObserver<`u`&&(r=new ResizeObserver(()=>{measure(),syncScroll()}),r.observe(e));let i=!1,a=document.fonts;return a?.ready&&a.ready.then(()=>{i||measure()}).catch(()=>{}),()=>{i=!0,t!==0&&typeof cancelAnimationFrame==`function`&&cancelAnimationFrame(t),r?.disconnect(),e.removeEventListener(`scroll`,onScroll),e.removeEventListener(`keyup`,syncCaret),e.removeEventListener(`click`,syncCaret),e.removeEventListener(`input`,syncCaret),document.removeEventListener(`selectionchange`,syncCaretIfActive)}}),a(()=>{let e=H.value,t=k.value;if(!E||E.length===0||v||y){U.value&&=!1;return}let n=detectTrigger(t,e);if(!n){Ne.value=-1,U.value&&=!1;return}if(n.start===Ne.value){U.value&&=!1;return}U.value||(W.value=0),U.value=!0,je.value=n.start,Me.value=n.query}),a(()=>{if(!U.value)return;let e=Fe.current,t=j.current;if(!e||!t)return;let n=je.value,r=e.offsetParent,i,a,o=A.current,s=(_||k.value.includes(` `))&&o?caretRectFromPre(o,n):null;if(s&&r){let e=r.getBoundingClientRect();i=s.bottom-e.top,a=s.left-e.left}else{let e=getComputedStyle(t),r=caretCoords(k.value,n,{charWidth:Pe.value,lineHeight:z.value,scrollTop:t.scrollTop,scrollLeft:t.scrollLeft,padTop:Number.parseFloat(e.paddingTop)||0,padLeft:Number.parseFloat(e.paddingLeft)||0,tabSize:h});i=r.top+z.value,a=r.left}e.style.top=`${i}px`,e.style.left=`${a}px`});let G=getGrammar(ne);(P.current===null||P.current.grammar!==G)&&(P.current=createLineStateIndex(G),Se.current=void 0);let K=P.current,q=ge(R.value),Re=q.toArray(),J=q.count;xe.current=Re;let ze=R.value,Be=Se.current;if(ze!==Be){let e=Be===void 0?0:q.lineAt(diff(Be,ze).from);K.invalidateFrom(e),Se.current=ze}let Ve=z.value>0,Y=Ve?z.value:20,He=(re??J>1e3)&&!_,X=0,Z=J;if(He)if(Ve){X=Math.max(0,Math.floor(we.value/Y)-12);let e=Math.ceil(Te.value/Y);Z=Math.min(J,X+e+24)}else Z=Math.min(J,200);let Ue=He&&X>K.length?X-K.length:0,We=!He||X===0||K.length>=X||Ue<=2e3,Ge;We?Ge=tokenizeRange(G,Re,X,Z,K):(Ae.value,Ge=tokenizeWindowFrom(G,Re,X,Z,G.initialState));let Ke=X*Y,qe=(J-Z)*Y;a(()=>{R.value,Ae.value;let e=z.value,t=xe.current,n=t.length;if(!((re??n>1e3)&&!_&&e>0))return;let r=Math.max(0,Math.floor(we.value/e)-12);if(r===0||K.length>=r||K.length>=n)return;let advance=()=>{K.ensure(t,Math.min(r-1,K.length+ue)),Ae.value++};if(typeof requestAnimationFrame!=`function`){advance();return}let i=requestAnimationFrame(advance);return()=>cancelAnimationFrame(i)});let Q=B.value?ve(R.value,Ee.value,Oe.value):[];V.value>=Q.length&&(V.value=Math.max(0,Q.length-1));let Je=[];if(Q.length>0){let e=firstMatchFrom(Q,q.startOf(X)),t=Z>=J?Q.length:firstMatchFrom(Q,q.startOf(Z));Je=toDecorations(q,Q.slice(e,t),V.value-e,{match:S.match,current:S.matchCurrent})}let Ye=typeof w==`function`?w(R.value):w??[],Xe=[];if(T){let e=matchBracket(R.value,H.value);e&&(Xe=toBracketDecorations(q,e,S.bracketMatch))}let Ze=[...Ye,...Xe,...Je],Qe=Ze.length>0?Ze:void 0,selectMatch=e=>{let t=Q[e],n=j.current;if(!(!t||!n)&&(n.focus(),n.setSelectionRange(t.start,t.end),L.current={start:t.start,end:t.end},Y>0)){let e=ge(n.value).lineAt(t.start)*Y;(e<n.scrollTop||e>n.scrollTop+n.clientHeight-Y)&&(n.scrollTop=Math.max(0,e-n.clientHeight/2))}},findNext=()=>{Q.length!==0&&(V.value=(V.value+1)%Q.length,selectMatch(V.value))},findPrev=()=>{Q.length!==0&&(V.value=(V.value-1+Q.length)%Q.length,selectMatch(V.value))},replaceCurrent=()=>{let e=Q[V.value],t=j.current;!e||!t||v||y||(t.setRangeText(De.value,e.start,e.end,`end`),commit(t.value,{start:t.selectionStart,end:t.selectionEnd},!1))},replaceAllNow=()=>{if(Q.length===0||v||y)return;let e=replaceAll(R.value,Q,De.value),t=j.current;t&&(t.value=e),commit(e,{start:t?.selectionStart??0,end:t?.selectionEnd??0},!1)},openFind=e=>{ke.value=e,B.value=!0},closeFind=()=>{B.value=!1,j.current?.focus()},$=U.value?filterCommands(E??[],Me.value):[];W.value>=$.length&&(W.value=Math.max(0,$.length-1));let $e=$.map(e=>({id:e.id,label:e.label,...e.hint!==void 0&&{hint:e.hint}})),{anchorStyle:et,floatingStyle:tt}=t({anchorRef:Fe,floatingRef:Ie,placement:`bottom-start`,enabled:U}),nt={applyEdit:({from:e,to:t},n)=>{let r=j.current;r&&(r.setRangeText(n,e,t,`end`),commit(r.value,{start:r.selectionStart,end:r.selectionEnd},!1))},getSelection:()=>{let e=j.current;return e?{start:e.selectionStart,end:e.selectionEnd}:{...L.current}},focus:()=>j.current?.focus(),undo:doUndo,redo:doRedo,openFind:()=>openFind(!1),openCommandMenu:()=>{let e=j.current;!e||!E||E.length===0||v||y||(e.focus(),e.setRangeText(`/`,e.selectionStart,e.selectionEnd,`end`),commit(e.value,{start:e.selectionStart,end:e.selectionEnd},!1),H.value=e.selectionStart,L.current={start:e.selectionStart,end:e.selectionEnd})}};ee(fe,()=>nt);let selectCommand=e=>{let t=$[e],n=j.current;if(!t||!n||v||y)return;let r=je.value,i=n.selectionStart;n.setRangeText(t.insert??``,r,i,`end`),commit(n.value,{start:n.selectionStart,end:n.selectionEnd},!1),H.value=n.selectionStart,L.current={start:n.selectionStart,end:n.selectionEnd},U.value=!1,W.value=0,n.focus(),t.run?.(nt)},handleKeyDown=e=>{let t=e.currentTarget,n=!v&&!y,r={};if(n){let{indent:e,dedent:t}=createIndentCommands({tabSize:h,insertSpaces:g});r.Tab=e,r[`Shift-Tab`]=t,r[`Mod-z`]=()=>(doUndo(),!0);let redo=()=>(doRedo(),!0);r[`Mod-Shift-z`]=redo,r[`Mod-y`]=redo}if(r[`Mod-f`]=()=>(openFind(!1),!0),r[`Mod-Alt-f`]=()=>(openFind(!0),!0),r[`Mod-s`]=()=>{let e=pe.current;return e?(e(k.value),!0):!1},B.value&&(r.Escape=()=>(closeFind(),!0)),U.value){let move=e=>()=>{let t=$.length;return t>0&&(W.value=(W.value+e+t)%t),!0};r.ArrowDown=move(1),r.ArrowUp=move(-1);let choose=()=>($.length>0&&selectCommand(W.value),!0);r.Enter=choose,r.Tab=choose,r.Escape=()=>(Ne.value=je.value,U.value=!1,!0)}dispatch(mergeKeymap(r,x),{textarea:t,event:e,setText:commitFromCommand})&&e.preventDefault(),O?.(e)},rt={"--cascivo-editor-tab-size":h,...se,...ce};return f(`div`,{ref:ye,className:e(C.root,D),"data-wrap":_,"data-line-numbers":m,style:rt,children:[m&&d(Gutter,{count:J,className:C.gutter,gutterRef:be,start:X,end:Z,topPad:Ke,bottomPad:qe,activeLine:!0}),f(`div`,{className:C.codeArea,children:[f(`pre`,{ref:A,className:C.pre,"aria-hidden":`true`,children:[d(`div`,{className:C.currentLine}),Ke>0&&d(`div`,{style:{blockSize:Ke}}),d(`code`,{children:renderRows(Ge,X,Z,Qe)}),qe>0&&d(`div`,{style:{blockSize:qe}})]}),d(`textarea`,{ref:j,className:C.textarea,value:k.value,onChange:e=>{let t=e.currentTarget,n=t.value,r=Math.abs(n.length-F.current.length)===1;commit(n,{start:t.selectionStart,end:t.selectionEnd},r)},onKeyDown:handleKeyDown,readOnly:v,disabled:y,spellCheck:ie,role:`combobox`,"aria-label":oe??ae??c(s.editor.label),"aria-expanded":U.value,"aria-controls":U.value?Le:void 0,"aria-activedescendant":U.value?`${Le}-opt-${W.value}`:void 0,autoCapitalize:`off`,autoCorrect:`off`,autoComplete:`off`,wrap:_?`soft`:`off`,...de}),d(`div`,{ref:Fe,"aria-hidden":`true`,style:{position:`absolute`,inlineSize:0,blockSize:0,...et}}),U.value&&d(le,{ref:Ie,id:Le,items:$e,activeIndex:W.value,onSelect:selectCommand,onHover:e=>W.value=e,style:tt}),B.value&&d(FindPanel,{query:Ee.value,replaceQuery:De.value,replaceMode:ke.value,caseSensitive:Oe.value,matchCount:Q.length,currentIndex:Q.length>0?V.value:-1,onQueryChange:e=>{Ee.value=e,V.value=0},onReplaceChange:e=>De.value=e,onNext:findNext,onPrev:findPrev,onReplace:replaceCurrent,onReplaceAll:replaceAllNow,onToggleCase:()=>Oe.value=!Oe.value,onToggleReplace:()=>ke.value=!ke.value,onClose:closeFind})]})]})});function Highlight({value:t,language:n=`plaintext`,lineNumbers:r=!1,wrap:i=!1,tabSize:a=2,label:s,ariaLabel:c,className:l,preRef:ee,gutterRef:u,style:p,...te}){o();let ne=getGrammar(n),m=t.split(`
|
|
12
|
+
`),h=tokenizeRange(ne,m,0,m.length,createLineStateIndex(ne)),g={"--cascivo-editor-tab-size":a,...p};return f(`div`,{className:e(S.root,l),"data-wrap":i,"data-line-numbers":r,style:g,"aria-label":c??s,...te,children:[r&&d(Gutter,{count:h.length,className:S.gutter,gutterRef:u}),d(`pre`,{ref:ee,className:S.pre,children:d(`code`,{className:S.code,children:renderRows(h)})})]})}export{de as CodeEditor,Highlight,b as bash,createLineStateIndex,createRuleGrammar,ie as css,getGrammar,ae as html,v as javascript,_ as json,listGrammars,oe as markdown,g as plaintext,registerGrammar,tokenize,tokenizeDocument,tokenizeRange,y as typescript};
|
package/dist/node/index.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
"use client";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";import{builtin as s,t as c}from"@cascivo/i18n";import{forwardRef as l,useImperativeHandle as
|
|
2
|
-
`),r=[],i=e.initialState;for(let t of n){let n=
|
|
1
|
+
"use client";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";import{builtin as s,t as c}from"@cascivo/i18n";import{forwardRef as l,useImperativeHandle as ee,useRef as u}from"react";import{jsx as d,jsxs as f}from"react/jsx-runtime";var p=new Map,te=`\0`,ne=0;function tokenize(e,t,n){let r=`${e.name}${te}${n}${te}${t}`,i=p.get(r);if(i)return i;ne++;let{tokens:a,state:o}=e.tokenizeLine(t,n),s={tokens:a,endState:o};return p.set(r,s),s}function tokenizeDocument(e,t){let n=t.split(`
|
|
2
|
+
`),r=[],i=e.initialState;for(let t of n){let n=tokenize(e,t,i);r.push(n.tokens),i=n.endState}return r}function tokenizeRange(e,t,n,r,i){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=[];for(let n=a;n<o;n++){let r=tokenize(e,t[n],s);c.push(r.tokens),i.setEndState(n,r.endState),s=r.endState}return c}function tokenizeWindowFrom(e,t,n,r,i){let a=Math.max(0,Math.min(n,t.length)),o=Math.max(a,Math.min(r,t.length)),s=i,c=[];for(let n=a;n<o;n++){let r=tokenize(e,t[n],s);c.push(r.tokens),s=r.endState}return c}function createLineStateIndex(e){let t=[],ensure=(n,r)=>{let i=Math.min(r,n.length-1),a=t.length;if(a>i)return;let o=a===0?e.initialState:t[a-1];for(;a<=i;a++){let r=tokenize(e,n[a],o);t[a]=r.endState,o=r.endState}};return{grammar:e,get length(){return t.length},ensure,startStateOf:(n,r)=>r<=0?e.initialState:(ensure(n,r-1),t[r-1]),setEndState:(e,n)=>{t[e]=n},invalidateFrom:e=>{let n=Math.max(0,e);n<t.length&&(t.length=n)}}}var m=new Map,h={name:`plaintext`,initialState:`default`,tokenizeLine:e=>({tokens:e.length>0?[{kind:`plain`,value:e}]:[],state:`default`})};m.set(h.name,h);function registerGrammar(e){m.set(e.name,e)}function getGrammar(e){if(e!==void 0){let t=m.get(e);if(t)return t}return m.get(`plaintext`)}function listGrammars(){return[...m.keys()]}function createRuleGrammar(e){let t={};for(let[n,r]of Object.entries(e.states))t[n]=r.map(e=>{let t=`${e.match.flags.replace(/[gy]/g,``)}y`,n={re:new RegExp(e.match.source,t),kind:e.kind};return e.push!==void 0&&(n.push=e.push),e.pop!==void 0&&(n.pop=e.pop),n});return{name:e.name,initialState:`default`,tokenizeLine(e,n){let r=t[n]?n:`default`,i=[],a=-1,o=0,flushPlain=t=>{a>=0&&(i.push({kind:`plain`,value:e.slice(a,t)}),a=-1)};for(;o<e.length;){let n=t[r],s=!1;for(let a of n){a.re.lastIndex=o;let n=a.re.exec(e);if(n!==null&&n.index===o&&n[0].length>0){flushPlain(o),i.push({kind:a.kind,value:n[0]}),o+=n[0].length,a.pop?r=`default`:a.push&&t[a.push]&&(r=a.push),s=!0;break}}s||(a<0&&(a=o),o++)}return flushPlain(e.length),{tokens:i,state:r}}}}var g={name:`plaintext`,initialState:`default`,tokenizeLine:e=>({tokens:e.length>0?[{kind:`plain`,value:e}]:[],state:`default`})};registerGrammar(g);var _=createRuleGrammar({name:`json`,states:{default:[{match:/"(?:[^"\\]|\\.)*"(?=\s*:)/,kind:`property`},{match:/"(?:[^"\\]|\\.)*"/,kind:`string`},{match:/\b(?:true|false|null)\b/,kind:`boolean`},{match:/-?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?/,kind:`number`},{match:/[{}[\],]/,kind:`punctuation`},{match:/:/,kind:`operator`}]}});registerGrammar(_);var re=`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(`.`);function words(e){return RegExp(`(?:${e.join(`|`)})\\b`)}function createCLikeGrammar(e,t,n=[]){let r=[{match:/\/\/.*/,kind:`comment`},{match:/\/\*/,kind:`comment`,push:`block`},{match:/`/,kind:`string`,push:`template`},{match:/'(?:[^'\\]|\\.)*'/,kind:`string`},{match:/"(?:[^"\\]|\\.)*"/,kind:`string`},{match:/0[xX][0-9a-fA-F]+|0[bB][01]+|0[oO][0-7]+|(?:\d[\d_]*\.?\d*|\.\d+)(?:[eE][+-]?\d+)?n?/,kind:`number`},{match:/\b(?:true|false|null|undefined|NaN|Infinity)\b/,kind:`boolean`}];return n.length>0&&r.push({match:words(n),kind:`type`}),r.push({match:words(t),kind:`keyword`},{match:/[A-Za-z_$][\w$]*(?=\s*\()/,kind:`function`},{match:/[A-Z][\w$]*/,kind:`type`},{match:/[A-Za-z_$][\w$]*/,kind:`variable`},{match:/[+\-*/%=<>!&|^~?]+/,kind:`operator`},{match:/[{}()[\];,.:]/,kind:`punctuation`}),createRuleGrammar({name:e,states:{default:r,block:[{match:/\*\//,kind:`comment`,pop:!0},{match:/[^*]+/,kind:`comment`},{match:/\*/,kind:`comment`}],template:[{match:/\\./,kind:`string`},{match:/`/,kind:`string`,pop:!0},{match:/\$\{/,kind:`punctuation`},{match:/[^`\\$]+/,kind:`string`},{match:/\$/,kind:`string`}]}})}var v=createCLikeGrammar(`javascript`,re);registerGrammar(v);var y=createCLikeGrammar(`typescript`,re,[`interface`,`type`,`enum`,`implements`,`namespace`,`declare`,`abstract`,`readonly`,`public`,`private`,`protected`,`keyof`,`infer`,`satisfies`,`is`,`asserts`,`override`,`string`,`number`,`boolean`,`any`,`unknown`,`never`,`object`]);registerGrammar(y);var ie=createRuleGrammar({name:`css`,states:{default:[{match:/\/\*/,kind:`comment`,push:`block`},{match:/@[\w-]+/,kind:`keyword`},{match:/"(?:[^"\\]|\\.)*"|'(?:[^'\\]|\\.)*'/,kind:`string`},{match:/#[0-9a-fA-F]{3,8}\b/,kind:`number`},{match:/-?\d+(?:\.\d+)?(?:px|rem|em|%|vh|vw|s|ms|deg|fr|ch|ex)?/,kind:`number`},{match:/--[\w-]+/,kind:`variable`},{match:/[.#][\w-]+/,kind:`tag`},{match:/&|::?[\w-]+/,kind:`tag`},{match:/[\w-]+(?=\s*:)/,kind:`property`},{match:/[\w-]+(?=\s*\()/,kind:`function`},{match:/[{}();,:]/,kind:`punctuation`}],block:[{match:/\*\//,kind:`comment`,pop:!0},{match:/[^*]+/,kind:`comment`},{match:/\*/,kind:`comment`}]}});registerGrammar(ie);var ae=createRuleGrammar({name:`html`,states:{default:[{match:/<!--/,kind:`comment`,push:`comment`},{match:/<!?\/?[A-Za-z][\w-]*/,kind:`tag`,push:`tag`},{match:/&[a-zA-Z#0-9]+;/,kind:`boolean`}],comment:[{match:/-->/,kind:`comment`,pop:!0},{match:/[^-]+/,kind:`comment`},{match:/-/,kind:`comment`}],tag:[{match:/\/?>/,kind:`tag`,pop:!0},{match:/"(?:[^"\\]|\\.)*"|'[^']*'/,kind:`string`},{match:/[\w-]+(?=\s*=)/,kind:`attr`},{match:/=/,kind:`operator`},{match:/[\w-]+/,kind:`attr`}]}});registerGrammar(ae);var oe=createRuleGrammar({name:`markdown`,states:{default:[{match:/^```.*/,kind:`keyword`,push:`fence`},{match:/^~~~.*/,kind:`keyword`,push:`fenceTilde`},{match:/^\s*([-*_])(?:[ \t]*\1){2,}[ \t]*$/,kind:`comment`},{match:/^#{1,6}\s.*/,kind:`keyword`},{match:/^\s*[-*+]\s+\[[ xX]\]/,kind:`boolean`},{match:/^\s*(?:[-*+]|\d+\.)\s/,kind:`operator`},{match:/^\s*>\s?.*/,kind:`comment`},{match:/`[^`]+`/,kind:`string`},{match:/~~[^~]+~~/,kind:`comment`},{match:/\*\*[^*]+\*\*|__[^_]+__/,kind:`keyword`},{match:/\*[^*\s][^*]*\*|_[^_\s][^_]*_/,kind:`type`},{match:/!?\[[^\]]*\]\([^)]*\)/,kind:`function`}],fence:[{match:/^```.*/,kind:`keyword`,pop:!0},{match:/.+/,kind:`string`}],fenceTilde:[{match:/^~~~.*/,kind:`keyword`,pop:!0},{match:/.+/,kind:`string`}]}});registerGrammar(oe);var b=createRuleGrammar({name:`bash`,states:{default:[{match:/#.*/,kind:`comment`},{match:/"(?:[^"\\]|\\.)*"/,kind:`string`},{match:/'[^']*'/,kind:`string`},{match:/\b(?:if|then|else|elif|fi|for|while|until|do|done|case|esac|in|function|select|return|exit|break|continue|local|export|readonly|declare|echo|cd|source|set|unset)\b/,kind:`keyword`},{match:/\$\{[^}]*\}|\$[A-Za-z_]\w*|\$[0-9@*#?$!]/,kind:`variable`},{match:/-?\b\d+\b/,kind:`number`},{match:/[A-Za-z_][\w-]*(?=\s*\(\s*\))/,kind:`function`},{match:/[|&;<>()]+|&&|\|\||=/,kind:`operator`}]}});registerGrammar(b);var x={builds:0,lookups:0,arrayReads:0,arraySplits:0};function createLineIndex(e){x.builds++;let t=64,n=new Int32Array(t),r=1;for(let i=e.indexOf(`
|
|
3
3
|
`);i!==-1;i=e.indexOf(`
|
|
4
|
-
`,i+1)){if(r===t){t*=2;let e=new Int32Array(t);e.set(n),n=e}n[r++]=i+1}let
|
|
5
|
-
`)),
|
|
4
|
+
`,i+1)){if(r===t){t*=2;let e=new Int32Array(t);e.set(n),n=e}n[r++]=i+1}let lineAt=e=>{x.lookups++;let t=0,i=r-1;for(;t<i;){let r=t+i+1>>1;n[r]<=e?t=r:i=r-1}return t},i;return{text:e,count:r,startOf:e=>n[Math.max(0,Math.min(e,r-1))],lineAt,locate:e=>{let t=lineAt(e);return{line:t,col:e-n[t]}},toArray:()=>(x.arrayReads++,i===void 0&&(x.arraySplits++,i=e.split(`
|
|
5
|
+
`)),i)}}function createLineIndexCache(){let e,t;return n=>{if(e?.text===n)return e;if(t?.text===n){let n=t;return t=e,e=n,n}return t=e,e=createLineIndex(n),e}}var S={root:`_root_1m6ns_2`,gutter:`_gutter_1m6ns_17`,gutterLine:`_gutterLine_1m6ns_28`,gutterActive:`_gutterActive_1m6ns_35`,pre:`_pre_1m6ns_45`,code:`_code_1m6ns_57`,line:`_line_1m6ns_62`,plain:`_plain_1m6ns_77`,keyword:`_keyword_1m6ns_80`,string:`_string_1m6ns_83`,number:`_number_1m6ns_86`,comment:`_comment_1m6ns_89`,function:`_function_1m6ns_93`,type:`_type_1m6ns_96`,operator:`_operator_1m6ns_99`,punctuation:`_punctuation_1m6ns_102`,variable:`_variable_1m6ns_105`,tag:`_tag_1m6ns_108`,attr:`_attr_1m6ns_111`,regexp:`_regexp_1m6ns_114`,boolean:`_boolean_1m6ns_117`,property:`_property_1m6ns_120`,match:`_match_1m6ns_125`,matchCurrent:`_matchCurrent_1m6ns_129`,bracketMatch:`_bracketMatch_1m6ns_133`};function classesAt(e,t){let n=``;for(let r of t)e>=r.start&&e<r.end&&(n=n?`${n} ${r.className}`:r.className);return n}function renderToken(t,n,r,i){let a=n+t.value.length,o=new Set([n,a]);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);if(o.size===2){let a=classesAt(n,r);return d(`span`,{className:a?e(S[t.kind],a):S[t.kind],children:t.value},i)}let s=[...o].sort((e,t)=>e-t),c=[];for(let i=0;i<s.length-1;i++){let a=s[i],o=s[i+1],l=classesAt(a,r);c.push(d(`span`,{className:l?e(S[t.kind],l):S[t.kind],children:t.value.slice(a-n,o-n)},a))}return d(`span`,{children:c},i)}function renderRows(e,t=0,n=t+e.length,r){let i=[];for(let a=t;a<n;a++){let n=e[a-t],o=r?.filter(e=>e.line===a);i.push(d(`span`,{className:S.line,children:n.length===0?``:o&&o.length>0?(()=>{let e=0;return n.map((t,n)=>{let r=renderToken(t,e,o,n);return e+=t.value.length,r})})():n.map((e,t)=>d(`span`,{className:S[e.kind],children:e.value},t))},a))}return i}function Gutter({count:e,className:t,gutterRef:n,start:r=0,end:i=e,topPad:a=0,bottomPad:o=0,activeLine:s=!1}){let c=[];for(let e=r+1;e<=i;e++)c.push(d(`span`,{className:S.gutterLine,children:e},e));return f(`div`,{ref:n,className:t,"aria-hidden":`true`,children:[s&&d(`div`,{className:S.gutterActive}),a>0&&d(`div`,{style:{blockSize:a}}),c,o>0&&d(`div`,{style:{blockSize:o}})]})}var C={root:`_root_18xci_2`,textarea:`_textarea_18xci_18`,gutter:`_gutter_18xci_23`,codeArea:`_codeArea_18xci_36`,pre:`_pre_18xci_43`,currentLine:`_currentLine_18xci_58`},w={panel:`_panel_hawkv_2`,row:`_row_hawkv_20`,input:`_input_hawkv_26`,count:`_count_hawkv_44`,button:`_button_hawkv_52`,toggle:`_toggle_hawkv_53`,active:`_active_hawkv_80`};function FindPanel(t){o();let n=t.matchCount===0?c(s.editor.noMatches):c(s.editor.findCount,{current:t.currentIndex+1,total:t.matchCount});return f(`div`,{className:w.panel,role:`search`,"aria-label":c(s.editor.find),children:[f(`div`,{className:w.row,children:[d(`button`,{type:`button`,className:w.toggle,"aria-label":c(s.editor.toggleReplace),"aria-expanded":t.replaceMode,onClick:t.onToggleReplace,children:t.replaceMode?`▾`:`▸`}),d(`input`,{className:w.input,value:t.query,placeholder:c(s.editor.findPlaceholder),"aria-label":c(s.editor.find),autoFocus:!0,autoComplete:`off`,spellCheck:!1,onChange:e=>t.onQueryChange(e.currentTarget.value),onKeyDown:e=>{e.key===`Enter`?(e.preventDefault(),e.shiftKey?t.onPrev():t.onNext()):e.key===`Escape`&&(e.preventDefault(),t.onClose())}}),d(`span`,{className:w.count,"aria-live":`polite`,children:n}),d(`button`,{type:`button`,className:w.button,"aria-label":c(s.editor.previous),onClick:t.onPrev,children:`‹`}),d(`button`,{type:`button`,className:w.button,"aria-label":c(s.editor.next),onClick:t.onNext,children:`›`}),d(`button`,{type:`button`,className:e(w.button,t.caseSensitive&&w.active),"aria-pressed":t.caseSensitive,"aria-label":c(s.editor.matchCase),onClick:t.onToggleCase,children:`Aa`}),d(`button`,{type:`button`,className:w.button,"aria-label":c(s.editor.close),onClick:t.onClose,children:`×`})]}),t.replaceMode&&f(`div`,{className:w.row,children:[d(`input`,{className:w.input,value:t.replaceQuery,placeholder:c(s.editor.replacePlaceholder),"aria-label":c(s.editor.replace),autoComplete:`off`,spellCheck:!1,onChange:e=>t.onReplaceChange(e.currentTarget.value),onKeyDown:e=>{e.key===`Escape`?(e.preventDefault(),t.onClose()):e.key===`Enter`&&(e.preventDefault(),t.onReplace())}}),d(`button`,{type:`button`,className:w.button,onClick:t.onReplace,children:c(s.editor.replaceOne)}),d(`button`,{type:`button`,className:w.button,onClick:t.onReplaceAll,children:c(s.editor.replaceAll)})]})]})}var se=/\w/;function isWordChar(e){return e!==void 0&&se.test(e)}function scan(e,t,n={}){if(t.length===0)return[];let r=n.caseSensitive?e:e.toLowerCase(),i=n.caseSensitive?t:t.toLowerCase(),a=[],o=0;for(;;){let t=r.indexOf(i,o);if(t===-1)break;let s=t+i.length;(!n.wholeWord||!isWordChar(e[t-1])&&!isWordChar(e[s]))&&a.push({start:t,end:s}),o=s>t?s:t+1}return a}function offsetToLineCol(e,t){let n=0,r=0;for(let i=e.indexOf(`
|
|
6
6
|
`);i!==-1&&i<t;i=e.indexOf(`
|
|
7
|
-
`,i+1))n++,r=i+1;return{line:n,col:t-r}}function
|
|
8
|
-
`,
|
|
9
|
-
`,r-1)+1,s=a.slice(o,i).replace(RegExp(`^(?:\\t| {1,${e.tabSize}})`,`gm`),``);return t.setRangeText(s,o,i,`select`),n(t.value),!0}}}function F(e,t){let n=0;for(let r of e)r===` `?n+=t-n%t:n+=1;return n}function Ue(e,t,n){let{line:r,col:i}=Ee(e,t),a=F(e.slice(t-i,t),n.tabSize);return{top:r*n.lineHeight-n.scrollTop+n.padTop,left:a*n.charWidth-n.scrollLeft+n.padLeft}}function We(e,t){if(typeof document>`u`)return null;let n=document.createTreeWalker(e,NodeFilter.SHOW_TEXT),r=0,i=n.nextNode();for(;i;){let e=i.textContent?.length??0;if(t<=r+e){let e=document.createRange();e.setStart(i,Math.max(0,t-r)),e.collapse(!0);let n=e.getClientRects();return n.length>0?n[0]:e.getBoundingClientRect()}r+=e,i=n.nextNode()}return null}function Ge(e){if(typeof document>`u`)return 0;let t=getComputedStyle(e),n=document.createElement(`span`);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);let r=n.getBoundingClientRect().width/10;return n.remove(),r}function Ke(e,t){for(let n=t-1;n>=0;n--){let r=e[n];if(r===`/`){let r=e[n-1];return r===void 0||/\s/.test(r)?{start:n,query:e.slice(n+1,t)}:null}if(r===void 0||/\s/.test(r))return null}return null}function qe(e,t){if(t===``)return[...e];let n=t.toLowerCase();return e.filter(e=>e.label.toLowerCase().includes(n)||(e.keywords?.some(e=>e.toLowerCase().includes(n))??!1))}var I={menu:`_menu_zkolh_2`,option:`_option_zkolh_24`,active:`_active_zkolh_35`,label:`_label_zkolh_39`,hint:`_hint_zkolh_44`,empty:`_empty_zkolh_50`},Je=l(function({id:t,items:n,activeIndex:r,onSelect:i,onHover:a,style:l},u){return o(),f(`ul`,{ref:u,id:t,className:I.menu,role:`listbox`,"aria-label":c(s.editor.commandMenu),style:l,children:n.length===0?f(`li`,{className:I.empty,role:`presentation`,children:c(s.editor.commandMenuEmpty)}):n.map((n,o)=>p(`li`,{id:`${t}-opt-${o}`,role:`option`,"aria-selected":o===r,className:e(I.option,o===r&&I.active),onMouseEnter:()=>a(o),onMouseDown:e=>{e.preventDefault(),i(o)},children:[f(`span`,{className:I.label,children:n.label}),n.hint!==void 0&&f(`span`,{className:I.hint,children:n.hint})]},n.id))})}),Ye=2e3,L=l(function({value:l,defaultValue:ee,onValueChange:te,language:ne=`plaintext`,lineNumbers:m=!0,tabSize:h=2,insertSpaces:g=!0,wrap:_=!1,virtualize:v,readOnly:y=!1,disabled:b=!1,spellCheck:se=!1,label:ce,ariaLabel:le,onSave:ue,keymap:de,decorations:x,theme:fe,bracketMatching:pe=!1,commands:S,className:me,style:he,onKeyDown:ge,..._e},ye){o();let be=d(ue);be.current=ue;let[T,we]=n({value:l,defaultValue:ee??``,onChange:te}),Te=d(null);Te.current??=ve();let E=Te.current,Ee=d(null);Ee.current??=Ae();let je=Ee.current,D=d(null),O=d(null),k=d(null),A=d(null),Fe=d([]),j=d(null);j.current===null&&(j.current=Re(),j.current.reset({text:T.value,selectionStart:0,selectionEnd:0}));let M=j.current,N=d(null),Le=d(void 0),P=d(T.value),ze=d(void 0),F=d(!1),I=d({start:0,end:0}),L=(e,t,n)=>{ze.current=e,P.current=e,M.record({text:e,selectionStart:t.start,selectionEnd:t.end},{coalesce:n}),we(e)},Xe=e=>{let t=A.current;L(e,t?{start:t.selectionStart,end:t.selectionEnd}:I.current,!1)},Ze=e=>{let t=A.current;if(!t)return;F.current=!0,t.value=e.text,t.setSelectionRange(e.selectionStart,e.selectionEnd),we(e.text),ze.current=e.text,P.current=e.text,I.current={start:e.selectionStart,end:e.selectionEnd},H.value=e.selectionStart;let n=E(e.text).lineAt(e.selectionStart);D.current?.style.setProperty(`--cascivo-editor-caret-line`,String(n)),F.current=!1},Qe=()=>{let e=M.undo();e&&Ze(e)},$e=()=>{let e=M.redo();e&&Ze(e)},R=i(T.value),et=i(0),tt=i(0),z=i(0),B=i(!1),nt=i(``),rt=i(``),it=i(!1),at=i(!1),V=i(0),H=i(0),ot=i(0),U=i(!1),st=i(0),ct=i(``),W=i(0),lt=i(-1),ut=i(0),dt=d(null),ft=d(null),pt=r(`slash-menu`);a(()=>{let e=T.value;if(typeof requestAnimationFrame!=`function`){R.value=e;return}let t=requestAnimationFrame(()=>{R.value=e});return()=>cancelAnimationFrame(t)}),a(()=>{let e=T.value;if(F.current||e===P.current)return;if(e===ze.current){P.current=e;return}let t=A.current,n=Pe(P.current,e),r=Ie(I.current.start,I.current.end,n);t&&(F.current=!0,t.value!==e&&(t.value=e),t.setSelectionRange(r.start,r.end),F.current=!1),I.current=r,M.reset({text:e,selectionStart:r.start,selectionEnd:r.end}),P.current=e}),a(()=>{let e=A.current;if(!e)return;let t=()=>{let t=Number.parseFloat(getComputedStyle(e).lineHeight);z.value=Number.isFinite(t)&&t>0?t:0,tt.value=e.clientHeight;let n=Ge(e);n>0&&(ut.value=n)},n=()=>{et.value=e.scrollTop,tt.value=e.clientHeight,O.current&&(O.current.scrollTop=e.scrollTop,O.current.scrollLeft=e.scrollLeft),k.current&&(k.current.scrollTop=e.scrollTop)},r=()=>{let t=E(e.value).lineAt(e.selectionStart);D.current?.style.setProperty(`--cascivo-editor-caret-line`,String(t)),I.current={start:e.selectionStart,end:e.selectionEnd},H.value=e.selectionStart},i=()=>{document.activeElement===e&&r()},a=0,o=-1,s=()=>{n(),e.scrollTop===o?a=0:(o=e.scrollTop,a=requestAnimationFrame(s))},c=()=>{n(),a===0&&typeof requestAnimationFrame==`function`&&(o=-1,a=requestAnimationFrame(s))};t(),r(),e.addEventListener(`scroll`,c),e.addEventListener(`keyup`,r),e.addEventListener(`click`,r),e.addEventListener(`input`,r),document.addEventListener(`selectionchange`,i);let l;typeof ResizeObserver<`u`&&(l=new ResizeObserver(()=>{t(),n()}),l.observe(e));let u=!1,d=document.fonts;return d?.ready&&d.ready.then(()=>{u||t()}).catch(()=>{}),()=>{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)}}),a(()=>{let e=H.value,t=T.value;if(!S||S.length===0||y||b){U.value&&=!1;return}let n=Ke(t,e);if(!n){lt.value=-1,U.value&&=!1;return}if(n.start===lt.value){U.value&&=!1;return}U.value||(W.value=0),U.value=!0,st.value=n.start,ct.value=n.query}),a(()=>{if(!U.value)return;let e=dt.current,t=A.current;if(!e||!t)return;let n=st.value,r=e.offsetParent,i,a,o=O.current,s=(_||T.value.includes(` `))&&o?We(o,n):null;if(s&&r){let e=r.getBoundingClientRect();i=s.bottom-e.top,a=s.left-e.left}else{let e=getComputedStyle(t),r=Ue(T.value,n,{charWidth:ut.value,lineHeight:z.value,scrollTop:t.scrollTop,scrollLeft:t.scrollLeft,padTop:Number.parseFloat(e.paddingTop)||0,padLeft:Number.parseFloat(e.paddingLeft)||0,tabSize:h});i=r.top+z.value,a=r.left}e.style.top=`${i}px`,e.style.left=`${a}px`});let G=oe(ne);(N.current===null||N.current.grammar!==G)&&(N.current=ae(G),Le.current=void 0);let K=N.current,q=E(R.value),mt=q.toArray(),J=q.count;Fe.current=mt;let ht=R.value,gt=Le.current;if(ht!==gt){let e=gt===void 0?0:q.lineAt(Pe(gt,ht).from);K.invalidateFrom(e),Le.current=ht}let _t=z.value>0,Y=_t?z.value:20,vt=(v??J>1e3)&&!_,X=0,Z=J;if(vt)if(_t){X=Math.max(0,Math.floor(et.value/Y)-12);let e=Math.ceil(tt.value/Y);Z=Math.min(J,X+e+24)}else Z=Math.min(J,200);let yt=vt&&X>K.length?X-K.length:0,bt=!vt||X===0||K.length>=X||yt<=2e3,xt;bt?xt=re(G,mt,X,Z,K):(ot.value,xt=ie(G,mt,X,Z,G.initialState));let St=X*Y,Ct=(J-Z)*Y;a(()=>{R.value,ot.value;let e=z.value,t=Fe.current,n=t.length;if(!((v??n>1e3)&&!_&&e>0))return;let r=Math.max(0,Math.floor(et.value/e)-12);if(r===0||K.length>=r||K.length>=n)return;let i=()=>{K.ensure(t,Math.min(r-1,K.length+Ye)),ot.value++};if(typeof requestAnimationFrame!=`function`){i();return}let a=requestAnimationFrame(i);return()=>cancelAnimationFrame(a)});let Q=B.value?je(R.value,nt.value,it.value):[];V.value>=Q.length&&(V.value=Math.max(0,Q.length-1));let wt=[];if(Q.length>0){let e=Oe(Q,q.startOf(X)),t=Z>=J?Q.length:Oe(Q,q.startOf(Z));wt=De(q,Q.slice(e,t),V.value-e,{match:C.match,current:C.matchCurrent})}let Tt=typeof x==`function`?x(R.value):x??[],Et=[];if(pe){let e=Me(R.value,H.value);e&&(Et=Ne(q,e,C.bracketMatch))}let Dt=[...Tt,...Et,...wt],Ot=Dt.length>0?Dt:void 0,kt=e=>{let t=Q[e],n=A.current;if(!(!t||!n)&&(n.focus(),n.setSelectionRange(t.start,t.end),I.current={start:t.start,end:t.end},Y>0)){let e=E(n.value).lineAt(t.start)*Y;(e<n.scrollTop||e>n.scrollTop+n.clientHeight-Y)&&(n.scrollTop=Math.max(0,e-n.clientHeight/2))}},At=()=>{Q.length!==0&&(V.value=(V.value+1)%Q.length,kt(V.value))},jt=()=>{Q.length!==0&&(V.value=(V.value-1+Q.length)%Q.length,kt(V.value))},Mt=()=>{let e=Q[V.value],t=A.current;!e||!t||y||b||(t.setRangeText(rt.value,e.start,e.end,`end`),L(t.value,{start:t.selectionStart,end:t.selectionEnd},!1))},Nt=()=>{if(Q.length===0||y||b)return;let e=ke(R.value,Q,rt.value),t=A.current;t&&(t.value=e),L(e,{start:t?.selectionStart??0,end:t?.selectionEnd??0},!1)},Pt=e=>{at.value=e,B.value=!0},Ft=()=>{B.value=!1,A.current?.focus()},$=U.value?qe(S??[],ct.value):[];W.value>=$.length&&(W.value=Math.max(0,$.length-1));let It=$.map(e=>({id:e.id,label:e.label,...e.hint!==void 0&&{hint:e.hint}})),{anchorStyle:Lt,floatingStyle:Rt}=t({anchorRef:dt,floatingRef:ft,placement:`bottom-start`,enabled:U}),zt={applyEdit:({from:e,to:t},n)=>{let r=A.current;r&&(r.setRangeText(n,e,t,`end`),L(r.value,{start:r.selectionStart,end:r.selectionEnd},!1))},getSelection:()=>{let e=A.current;return e?{start:e.selectionStart,end:e.selectionEnd}:{...I.current}},focus:()=>A.current?.focus(),undo:Qe,redo:$e,openFind:()=>Pt(!1),openCommandMenu:()=>{let e=A.current;!e||!S||S.length===0||y||b||(e.focus(),e.setRangeText(`/`,e.selectionStart,e.selectionEnd,`end`),L(e.value,{start:e.selectionStart,end:e.selectionEnd},!1),H.value=e.selectionStart,I.current={start:e.selectionStart,end:e.selectionEnd})}};u(ye,()=>zt);let Bt=e=>{let t=$[e],n=A.current;if(!t||!n||y||b)return;let r=st.value,i=n.selectionStart;n.setRangeText(t.insert??``,r,i,`end`),L(n.value,{start:n.selectionStart,end:n.selectionEnd},!1),H.value=n.selectionStart,I.current={start:n.selectionStart,end:n.selectionEnd},U.value=!1,W.value=0,n.focus(),t.run?.(zt)},Vt=e=>{let t=e.currentTarget,n=!y&&!b,r={};if(n){let{indent:e,dedent:t}=He({tabSize:h,insertSpaces:g});r.Tab=e,r[`Shift-Tab`]=t,r[`Mod-z`]=()=>(Qe(),!0);let n=()=>($e(),!0);r[`Mod-Shift-z`]=n,r[`Mod-y`]=n}if(r[`Mod-f`]=()=>(Pt(!1),!0),r[`Mod-Alt-f`]=()=>(Pt(!0),!0),r[`Mod-s`]=()=>{let e=be.current;return e?(e(T.value),!0):!1},B.value&&(r.Escape=()=>(Ft(),!0)),U.value){let e=e=>()=>{let t=$.length;return t>0&&(W.value=(W.value+e+t)%t),!0};r.ArrowDown=e(1),r.ArrowUp=e(-1);let t=()=>($.length>0&&Bt(W.value),!0);r.Enter=t,r.Tab=t,r.Escape=()=>(lt.value=st.value,U.value=!1,!0)}Ve(Be(r,de),{textarea:t,event:e,setText:Xe})&&e.preventDefault(),ge?.(e)},Ht={"--cascivo-editor-tab-size":h,...fe,...he};return p(`div`,{ref:D,className:e(w.root,me),"data-wrap":_,"data-line-numbers":m,style:Ht,children:[m&&f(Se,{count:J,className:w.gutter,gutterRef:k,start:X,end:Z,topPad:St,bottomPad:Ct,activeLine:!0}),p(`div`,{className:w.codeArea,children:[p(`pre`,{ref:O,className:w.pre,"aria-hidden":`true`,children:[f(`div`,{className:w.currentLine}),St>0&&f(`div`,{style:{blockSize:St}}),f(`code`,{children:xe(xt,X,Z,Ot)}),Ct>0&&f(`div`,{style:{blockSize:Ct}})]}),f(`textarea`,{ref:A,className:w.textarea,value:T.value,onChange:e=>{let t=e.currentTarget,n=t.value,r=Math.abs(n.length-P.current.length)===1;L(n,{start:t.selectionStart,end:t.selectionEnd},r)},onKeyDown:Vt,readOnly:y,disabled:b,spellCheck:se,role:`combobox`,"aria-label":le??ce??c(s.editor.label),"aria-expanded":U.value,"aria-controls":U.value?pt:void 0,"aria-activedescendant":U.value?`${pt}-opt-${W.value}`:void 0,autoCapitalize:`off`,autoCorrect:`off`,autoComplete:`off`,wrap:_?`soft`:`off`,..._e}),f(`div`,{ref:dt,"aria-hidden":`true`,style:{position:`absolute`,inlineSize:0,blockSize:0,...Lt}}),U.value&&f(Je,{ref:ft,id:pt,items:It,activeIndex:W.value,onSelect:Bt,onHover:e=>W.value=e,style:Rt}),B.value&&f(Ce,{query:nt.value,replaceQuery:rt.value,replaceMode:at.value,caseSensitive:it.value,matchCount:Q.length,currentIndex:Q.length>0?V.value:-1,onQueryChange:e=>{nt.value=e,V.value=0},onReplaceChange:e=>rt.value=e,onNext:At,onPrev:jt,onReplace:Mt,onReplaceAll:Nt,onToggleCase:()=>it.value=!it.value,onToggleReplace:()=>at.value=!at.value,onClose:Ft})]})]})});function Xe({value:t,language:n=`plaintext`,lineNumbers:r=!1,wrap:i=!1,tabSize:a=2,label:s,ariaLabel:c,className:l,preRef:u,gutterRef:d,style:ee,...te}){o();let ne=oe(n),m=t.split(`
|
|
10
|
-
`),h=
|
|
7
|
+
`,i+1))n++,r=i+1;return{line:n,col:t-r}}function toDecorations(e,t,n,r){return t.map((t,i)=>{let{line:a,col:o}=e.locate(t.start);return{line:a,start:o,end:o+(t.end-t.start),className:i===n?r.current:r.match}})}function firstMatchFrom(e,t){let n=0,r=e.length;for(;n<r;){let i=n+r>>1;e[i].start<t?n=i+1:r=i}return n}function replaceAll(e,t,n){let r=e;for(let e=t.length-1;e>=0;e--){let i=t[e];r=r.slice(0,i.start)+n+r.slice(i.end)}return r}function createScanCache(){let e,t,n=[];return(r,i,a)=>{let o=`${a?`S`:`i`}${i}`;return r===t&&o===e?n:(t=r,e=o,n=scan(r,i,{caseSensitive:a}),n)}}var T={"(":`)`,"[":`]`,"{":`}`},E={")":`(`,"]":`[`,"}":`}`};function scanForward(e,t,n,r){let i=0;for(let a=t;a<e.length;a++){let t=e[a];if(t===n)i++;else if(t===r&&--i===0)return a}return-1}function scanBackward(e,t,n,r){let i=0;for(let a=t;a>=0;a--){let t=e[a];if(t===r)i++;else if(t===n&&--i===0)return a}return-1}function matchBracket(e,t){let n=e[t];if(n&&n in T){let r=scanForward(e,t,n,T[n]);if(r!==-1)return{open:t,close:r}}let r=e[t-1];if(r&&r in E){let n=scanBackward(e,t-1,E[r],r);if(n!==-1)return{open:n,close:t-1}}if(r&&r in T){let n=scanForward(e,t-1,r,T[r]);if(n!==-1)return{open:t-1,close:n}}if(n&&n in E){let r=scanBackward(e,t,E[n],n);if(r!==-1)return{open:r,close:t}}}function toBracketDecorations(e,t,n){return[t.open,t.close].map(t=>{let{line:r,col:i}=e.locate(t);return{line:r,start:i,end:i+1,className:n}})}var D=1024;function diff(e,t){if(e===t)return{from:e.length,to:e.length,insert:``};let n=Math.min(e.length,t.length),r=0;for(;r+D<=n&&e.slice(r,r+D)===t.slice(r,r+D);)r+=D;for(;r<n&&e[r]===t[r];)r++;let i=e.length,a=t.length;for(;i-D>=r&&a-D>=r&&e.slice(i-D,i)===t.slice(a-D,a);)i-=D,a-=D;for(;i>r&&a>r&&e[i-1]===t[a-1];)i--,a--;return{from:r,to:i,insert:t.slice(r,a)}}function rebaseOffset(e,t){return e<=t.from?e:e>=t.to?e+(t.insert.length-(t.to-t.from)):t.from+t.insert.length}function rebaseSelection(e,t,n){return{start:rebaseOffset(e,n),end:rebaseOffset(t,n)}}function detach(e){return e.length===0?e:structuredClone(e)}function makeStep(e,t,n){let r=diff(e,t.text);return{from:r.from,removed:detach(e.slice(r.from,r.to)),inserted:detach(r.insert),before:n,after:{start:t.selectionStart,end:t.selectionEnd}}}function unapply(e,t){return e.slice(0,t.from)+t.removed+e.slice(t.from+t.inserted.length)}function apply(e,t){return e.slice(0,t.from)+t.inserted+e.slice(t.from+t.removed.length)}function createHistory(e=200){let t=Math.max(1,e-1),n=[],r=0,i=``,a={start:0,end:0},o=!1,snapshot=()=>({text:i,selectionStart:a.start,selectionEnd:a.end});return{record(e,s){let c=s?.coalesce??!1;r<n.length&&(n=n.slice(0,r));let l=n[r-1];c&&o&&l?n[r-1]=makeStep(unapply(i,l),e,l.before):(n.push(makeStep(i,e,a)),r=n.length,n.length>t&&(n.shift(),r--)),i=e.text,a={start:e.selectionStart,end:e.selectionEnd},o=c},undo(){if(r===0)return;let e=n[--r];return i=unapply(i,e),a=e.before,o=!1,snapshot()},redo(){if(r>=n.length)return;let e=n[r++];return i=apply(i,e),a=e.after,o=!1,snapshot()},reset(e){n=[],r=0,i=e.text,a={start:e.selectionStart,end:e.selectionEnd},o=!1},canUndo(){return r>0},canRedo(){return r<n.length}}}var ce=typeof navigator<`u`&&/Mac|iPhone|iPad|iPod/.test(navigator.platform||navigator.userAgent||``);function chordOf(e){let t=[];(ce?e.metaKey:e.ctrlKey)&&t.push(`Mod`),e.altKey&&t.push(`Alt`),e.shiftKey&&t.push(`Shift`);let n=e.key;return n.length===1&&(n=n.toLowerCase()),t.push(n),t.join(`-`)}function mergeKeymap(e,t){let n=new Map(Object.entries(e));if(t)for(let[e,r]of Object.entries(t))n.set(e,r);return n}function dispatch(e,t){let n=e.get(chordOf(t.event));return n?n(t):!1}function createIndentCommands(e){let indentText=()=>e.insertSpaces?` `.repeat(e.tabSize):` `;return{indent:({textarea:e,setText:t})=>{let{selectionStart:n,selectionEnd:r,value:i}=e,a=i.lastIndexOf(`
|
|
8
|
+
`,n-1)+1;if(n===r)e.setRangeText(indentText(),n,r,`end`);else{let t=i.slice(a,r).replace(/^/gm,indentText());e.setRangeText(t,a,r,`select`)}return t(e.value),!0},dedent:({textarea:t,setText:n})=>{let{selectionStart:r,selectionEnd:i,value:a}=t,o=a.lastIndexOf(`
|
|
9
|
+
`,r-1)+1,s=a.slice(o,i).replace(RegExp(`^(?:\\t| {1,${e.tabSize}})`,`gm`),``);return t.setRangeText(s,o,i,`select`),n(t.value),!0}}}function visualColumn(e,t){let n=0;for(let r of e)r===` `?n+=t-n%t:n+=1;return n}function caretCoords(e,t,n){let{line:r,col:i}=offsetToLineCol(e,t),a=visualColumn(e.slice(t-i,t),n.tabSize);return{top:r*n.lineHeight-n.scrollTop+n.padTop,left:a*n.charWidth-n.scrollLeft+n.padLeft}}function caretRectFromPre(e,t){if(typeof document>`u`)return null;let n=document.createTreeWalker(e,NodeFilter.SHOW_TEXT),r=0,i=n.nextNode();for(;i;){let e=i.textContent?.length??0;if(t<=r+e){let e=document.createRange();e.setStart(i,Math.max(0,t-r)),e.collapse(!0);let n=e.getClientRects();return n.length>0?n[0]:e.getBoundingClientRect()}r+=e,i=n.nextNode()}return null}function measureCharWidth(e){if(typeof document>`u`)return 0;let t=getComputedStyle(e),n=document.createElement(`span`);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);let r=n.getBoundingClientRect().width/10;return n.remove(),r}function detectTrigger(e,t){for(let n=t-1;n>=0;n--){let r=e[n];if(r===`/`){let r=e[n-1];return r===void 0||/\s/.test(r)?{start:n,query:e.slice(n+1,t)}:null}if(r===void 0||/\s/.test(r))return null}return null}function filterCommands(e,t){if(t===``)return[...e];let n=t.toLowerCase();return e.filter(e=>e.label.toLowerCase().includes(n)||(e.keywords?.some(e=>e.toLowerCase().includes(n))??!1))}var O={menu:`_menu_zkolh_2`,option:`_option_zkolh_24`,active:`_active_zkolh_35`,label:`_label_zkolh_39`,hint:`_hint_zkolh_44`,empty:`_empty_zkolh_50`},le=l(function({id:t,items:n,activeIndex:r,onSelect:i,onHover:a,style:l},ee){return o(),d(`ul`,{ref:ee,id:t,className:O.menu,role:`listbox`,"aria-label":c(s.editor.commandMenu),style:l,children:n.length===0?d(`li`,{className:O.empty,role:`presentation`,children:c(s.editor.commandMenuEmpty)}):n.map((n,o)=>f(`li`,{id:`${t}-opt-${o}`,role:`option`,"aria-selected":o===r,className:e(O.option,o===r&&O.active),onMouseEnter:()=>a(o),onMouseDown:e=>{e.preventDefault(),i(o)},children:[d(`span`,{className:O.label,children:n.label}),n.hint!==void 0&&d(`span`,{className:O.hint,children:n.hint})]},n.id))})}),ue=2e3,de=l(function({value:l,defaultValue:p,onValueChange:te,language:ne=`plaintext`,lineNumbers:m=!0,tabSize:h=2,insertSpaces:g=!0,wrap:_=!1,virtualize:re,readOnly:v=!1,disabled:y=!1,spellCheck:ie=!1,label:ae,ariaLabel:oe,onSave:b,keymap:x,decorations:w,theme:se,bracketMatching:T=!1,commands:E,className:D,style:ce,onKeyDown:O,...de},fe){o();let pe=u(b);pe.current=b;let[k,me]=n({value:l,defaultValue:p??``,onChange:te}),he=u(null);he.current??=createLineIndexCache();let ge=he.current,_e=u(null);_e.current??=createScanCache();let ve=_e.current,ye=u(null),A=u(null),be=u(null),j=u(null),xe=u([]),M=u(null);M.current===null&&(M.current=createHistory(),M.current.reset({text:k.value,selectionStart:0,selectionEnd:0}));let N=M.current,P=u(null),Se=u(void 0),F=u(k.value),Ce=u(void 0),I=u(!1),L=u({start:0,end:0}),commit=(e,t,n)=>{Ce.current=e,F.current=e,N.record({text:e,selectionStart:t.start,selectionEnd:t.end},{coalesce:n}),me(e)},commitFromCommand=e=>{let t=j.current;commit(e,t?{start:t.selectionStart,end:t.selectionEnd}:L.current,!1)},applySnapshot=e=>{let t=j.current;if(!t)return;I.current=!0,t.value=e.text,t.setSelectionRange(e.selectionStart,e.selectionEnd),me(e.text),Ce.current=e.text,F.current=e.text,L.current={start:e.selectionStart,end:e.selectionEnd},H.value=e.selectionStart;let n=ge(e.text).lineAt(e.selectionStart);ye.current?.style.setProperty(`--cascivo-editor-caret-line`,String(n)),I.current=!1},doUndo=()=>{let e=N.undo();e&&applySnapshot(e)},doRedo=()=>{let e=N.redo();e&&applySnapshot(e)},R=i(k.value),we=i(0),Te=i(0),z=i(0),B=i(!1),Ee=i(``),De=i(``),Oe=i(!1),ke=i(!1),V=i(0),H=i(0),Ae=i(0),U=i(!1),je=i(0),Me=i(``),W=i(0),Ne=i(-1),Pe=i(0),Fe=u(null),Ie=u(null),Le=r(`slash-menu`);a(()=>{let e=k.value;if(typeof requestAnimationFrame!=`function`){R.value=e;return}let t=requestAnimationFrame(()=>{R.value=e});return()=>cancelAnimationFrame(t)}),a(()=>{let e=k.value;if(I.current||e===F.current)return;if(e===Ce.current){F.current=e;return}let t=j.current,n=diff(F.current,e),r=rebaseSelection(L.current.start,L.current.end,n);t&&(I.current=!0,t.value!==e&&(t.value=e),t.setSelectionRange(r.start,r.end),I.current=!1),L.current=r,N.reset({text:e,selectionStart:r.start,selectionEnd:r.end}),F.current=e}),a(()=>{let e=j.current;if(!e)return;let measure=()=>{let t=Number.parseFloat(getComputedStyle(e).lineHeight);z.value=Number.isFinite(t)&&t>0?t:0,Te.value=e.clientHeight;let n=measureCharWidth(e);n>0&&(Pe.value=n)},syncScroll=()=>{we.value=e.scrollTop,Te.value=e.clientHeight,A.current&&(A.current.scrollTop=e.scrollTop,A.current.scrollLeft=e.scrollLeft),be.current&&(be.current.scrollTop=e.scrollTop)},syncCaret=()=>{let t=ge(e.value).lineAt(e.selectionStart);ye.current?.style.setProperty(`--cascivo-editor-caret-line`,String(t)),L.current={start:e.selectionStart,end:e.selectionEnd},H.value=e.selectionStart},syncCaretIfActive=()=>{document.activeElement===e&&syncCaret()},t=0,n=-1,sampleFrame=()=>{syncScroll(),e.scrollTop===n?t=0:(n=e.scrollTop,t=requestAnimationFrame(sampleFrame))},onScroll=()=>{syncScroll(),t===0&&typeof requestAnimationFrame==`function`&&(n=-1,t=requestAnimationFrame(sampleFrame))};measure(),syncCaret(),e.addEventListener(`scroll`,onScroll),e.addEventListener(`keyup`,syncCaret),e.addEventListener(`click`,syncCaret),e.addEventListener(`input`,syncCaret),document.addEventListener(`selectionchange`,syncCaretIfActive);let r;typeof ResizeObserver<`u`&&(r=new ResizeObserver(()=>{measure(),syncScroll()}),r.observe(e));let i=!1,a=document.fonts;return a?.ready&&a.ready.then(()=>{i||measure()}).catch(()=>{}),()=>{i=!0,t!==0&&typeof cancelAnimationFrame==`function`&&cancelAnimationFrame(t),r?.disconnect(),e.removeEventListener(`scroll`,onScroll),e.removeEventListener(`keyup`,syncCaret),e.removeEventListener(`click`,syncCaret),e.removeEventListener(`input`,syncCaret),document.removeEventListener(`selectionchange`,syncCaretIfActive)}}),a(()=>{let e=H.value,t=k.value;if(!E||E.length===0||v||y){U.value&&=!1;return}let n=detectTrigger(t,e);if(!n){Ne.value=-1,U.value&&=!1;return}if(n.start===Ne.value){U.value&&=!1;return}U.value||(W.value=0),U.value=!0,je.value=n.start,Me.value=n.query}),a(()=>{if(!U.value)return;let e=Fe.current,t=j.current;if(!e||!t)return;let n=je.value,r=e.offsetParent,i,a,o=A.current,s=(_||k.value.includes(` `))&&o?caretRectFromPre(o,n):null;if(s&&r){let e=r.getBoundingClientRect();i=s.bottom-e.top,a=s.left-e.left}else{let e=getComputedStyle(t),r=caretCoords(k.value,n,{charWidth:Pe.value,lineHeight:z.value,scrollTop:t.scrollTop,scrollLeft:t.scrollLeft,padTop:Number.parseFloat(e.paddingTop)||0,padLeft:Number.parseFloat(e.paddingLeft)||0,tabSize:h});i=r.top+z.value,a=r.left}e.style.top=`${i}px`,e.style.left=`${a}px`});let G=getGrammar(ne);(P.current===null||P.current.grammar!==G)&&(P.current=createLineStateIndex(G),Se.current=void 0);let K=P.current,q=ge(R.value),Re=q.toArray(),J=q.count;xe.current=Re;let ze=R.value,Be=Se.current;if(ze!==Be){let e=Be===void 0?0:q.lineAt(diff(Be,ze).from);K.invalidateFrom(e),Se.current=ze}let Ve=z.value>0,Y=Ve?z.value:20,He=(re??J>1e3)&&!_,X=0,Z=J;if(He)if(Ve){X=Math.max(0,Math.floor(we.value/Y)-12);let e=Math.ceil(Te.value/Y);Z=Math.min(J,X+e+24)}else Z=Math.min(J,200);let Ue=He&&X>K.length?X-K.length:0,We=!He||X===0||K.length>=X||Ue<=2e3,Ge;We?Ge=tokenizeRange(G,Re,X,Z,K):(Ae.value,Ge=tokenizeWindowFrom(G,Re,X,Z,G.initialState));let Ke=X*Y,qe=(J-Z)*Y;a(()=>{R.value,Ae.value;let e=z.value,t=xe.current,n=t.length;if(!((re??n>1e3)&&!_&&e>0))return;let r=Math.max(0,Math.floor(we.value/e)-12);if(r===0||K.length>=r||K.length>=n)return;let advance=()=>{K.ensure(t,Math.min(r-1,K.length+ue)),Ae.value++};if(typeof requestAnimationFrame!=`function`){advance();return}let i=requestAnimationFrame(advance);return()=>cancelAnimationFrame(i)});let Q=B.value?ve(R.value,Ee.value,Oe.value):[];V.value>=Q.length&&(V.value=Math.max(0,Q.length-1));let Je=[];if(Q.length>0){let e=firstMatchFrom(Q,q.startOf(X)),t=Z>=J?Q.length:firstMatchFrom(Q,q.startOf(Z));Je=toDecorations(q,Q.slice(e,t),V.value-e,{match:S.match,current:S.matchCurrent})}let Ye=typeof w==`function`?w(R.value):w??[],Xe=[];if(T){let e=matchBracket(R.value,H.value);e&&(Xe=toBracketDecorations(q,e,S.bracketMatch))}let Ze=[...Ye,...Xe,...Je],Qe=Ze.length>0?Ze:void 0,selectMatch=e=>{let t=Q[e],n=j.current;if(!(!t||!n)&&(n.focus(),n.setSelectionRange(t.start,t.end),L.current={start:t.start,end:t.end},Y>0)){let e=ge(n.value).lineAt(t.start)*Y;(e<n.scrollTop||e>n.scrollTop+n.clientHeight-Y)&&(n.scrollTop=Math.max(0,e-n.clientHeight/2))}},findNext=()=>{Q.length!==0&&(V.value=(V.value+1)%Q.length,selectMatch(V.value))},findPrev=()=>{Q.length!==0&&(V.value=(V.value-1+Q.length)%Q.length,selectMatch(V.value))},replaceCurrent=()=>{let e=Q[V.value],t=j.current;!e||!t||v||y||(t.setRangeText(De.value,e.start,e.end,`end`),commit(t.value,{start:t.selectionStart,end:t.selectionEnd},!1))},replaceAllNow=()=>{if(Q.length===0||v||y)return;let e=replaceAll(R.value,Q,De.value),t=j.current;t&&(t.value=e),commit(e,{start:t?.selectionStart??0,end:t?.selectionEnd??0},!1)},openFind=e=>{ke.value=e,B.value=!0},closeFind=()=>{B.value=!1,j.current?.focus()},$=U.value?filterCommands(E??[],Me.value):[];W.value>=$.length&&(W.value=Math.max(0,$.length-1));let $e=$.map(e=>({id:e.id,label:e.label,...e.hint!==void 0&&{hint:e.hint}})),{anchorStyle:et,floatingStyle:tt}=t({anchorRef:Fe,floatingRef:Ie,placement:`bottom-start`,enabled:U}),nt={applyEdit:({from:e,to:t},n)=>{let r=j.current;r&&(r.setRangeText(n,e,t,`end`),commit(r.value,{start:r.selectionStart,end:r.selectionEnd},!1))},getSelection:()=>{let e=j.current;return e?{start:e.selectionStart,end:e.selectionEnd}:{...L.current}},focus:()=>j.current?.focus(),undo:doUndo,redo:doRedo,openFind:()=>openFind(!1),openCommandMenu:()=>{let e=j.current;!e||!E||E.length===0||v||y||(e.focus(),e.setRangeText(`/`,e.selectionStart,e.selectionEnd,`end`),commit(e.value,{start:e.selectionStart,end:e.selectionEnd},!1),H.value=e.selectionStart,L.current={start:e.selectionStart,end:e.selectionEnd})}};ee(fe,()=>nt);let selectCommand=e=>{let t=$[e],n=j.current;if(!t||!n||v||y)return;let r=je.value,i=n.selectionStart;n.setRangeText(t.insert??``,r,i,`end`),commit(n.value,{start:n.selectionStart,end:n.selectionEnd},!1),H.value=n.selectionStart,L.current={start:n.selectionStart,end:n.selectionEnd},U.value=!1,W.value=0,n.focus(),t.run?.(nt)},handleKeyDown=e=>{let t=e.currentTarget,n=!v&&!y,r={};if(n){let{indent:e,dedent:t}=createIndentCommands({tabSize:h,insertSpaces:g});r.Tab=e,r[`Shift-Tab`]=t,r[`Mod-z`]=()=>(doUndo(),!0);let redo=()=>(doRedo(),!0);r[`Mod-Shift-z`]=redo,r[`Mod-y`]=redo}if(r[`Mod-f`]=()=>(openFind(!1),!0),r[`Mod-Alt-f`]=()=>(openFind(!0),!0),r[`Mod-s`]=()=>{let e=pe.current;return e?(e(k.value),!0):!1},B.value&&(r.Escape=()=>(closeFind(),!0)),U.value){let move=e=>()=>{let t=$.length;return t>0&&(W.value=(W.value+e+t)%t),!0};r.ArrowDown=move(1),r.ArrowUp=move(-1);let choose=()=>($.length>0&&selectCommand(W.value),!0);r.Enter=choose,r.Tab=choose,r.Escape=()=>(Ne.value=je.value,U.value=!1,!0)}dispatch(mergeKeymap(r,x),{textarea:t,event:e,setText:commitFromCommand})&&e.preventDefault(),O?.(e)},rt={"--cascivo-editor-tab-size":h,...se,...ce};return f(`div`,{ref:ye,className:e(C.root,D),"data-wrap":_,"data-line-numbers":m,style:rt,children:[m&&d(Gutter,{count:J,className:C.gutter,gutterRef:be,start:X,end:Z,topPad:Ke,bottomPad:qe,activeLine:!0}),f(`div`,{className:C.codeArea,children:[f(`pre`,{ref:A,className:C.pre,"aria-hidden":`true`,children:[d(`div`,{className:C.currentLine}),Ke>0&&d(`div`,{style:{blockSize:Ke}}),d(`code`,{children:renderRows(Ge,X,Z,Qe)}),qe>0&&d(`div`,{style:{blockSize:qe}})]}),d(`textarea`,{ref:j,className:C.textarea,value:k.value,onChange:e=>{let t=e.currentTarget,n=t.value,r=Math.abs(n.length-F.current.length)===1;commit(n,{start:t.selectionStart,end:t.selectionEnd},r)},onKeyDown:handleKeyDown,readOnly:v,disabled:y,spellCheck:ie,role:`combobox`,"aria-label":oe??ae??c(s.editor.label),"aria-expanded":U.value,"aria-controls":U.value?Le:void 0,"aria-activedescendant":U.value?`${Le}-opt-${W.value}`:void 0,autoCapitalize:`off`,autoCorrect:`off`,autoComplete:`off`,wrap:_?`soft`:`off`,...de}),d(`div`,{ref:Fe,"aria-hidden":`true`,style:{position:`absolute`,inlineSize:0,blockSize:0,...et}}),U.value&&d(le,{ref:Ie,id:Le,items:$e,activeIndex:W.value,onSelect:selectCommand,onHover:e=>W.value=e,style:tt}),B.value&&d(FindPanel,{query:Ee.value,replaceQuery:De.value,replaceMode:ke.value,caseSensitive:Oe.value,matchCount:Q.length,currentIndex:Q.length>0?V.value:-1,onQueryChange:e=>{Ee.value=e,V.value=0},onReplaceChange:e=>De.value=e,onNext:findNext,onPrev:findPrev,onReplace:replaceCurrent,onReplaceAll:replaceAllNow,onToggleCase:()=>Oe.value=!Oe.value,onToggleReplace:()=>ke.value=!ke.value,onClose:closeFind})]})]})});function Highlight({value:t,language:n=`plaintext`,lineNumbers:r=!1,wrap:i=!1,tabSize:a=2,label:s,ariaLabel:c,className:l,preRef:ee,gutterRef:u,style:p,...te}){o();let ne=getGrammar(n),m=t.split(`
|
|
10
|
+
`),h=tokenizeRange(ne,m,0,m.length,createLineStateIndex(ne)),g={"--cascivo-editor-tab-size":a,...p};return f(`div`,{className:e(S.root,l),"data-wrap":i,"data-line-numbers":r,style:g,"aria-label":c??s,...te,children:[r&&d(Gutter,{count:h.length,className:S.gutter,gutterRef:u}),d(`pre`,{ref:ee,className:S.pre,children:d(`code`,{className:S.code,children:renderRows(h)})})]})}export{de as CodeEditor,Highlight,b as bash,createLineStateIndex,createRuleGrammar,ie as css,getGrammar,ae as html,v as javascript,_ as json,listGrammars,oe as markdown,g as plaintext,registerGrammar,tokenize,tokenizeDocument,tokenizeRange,y as typescript};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cascivo/editor",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Lightweight CSS-native code editor — native textarea overlay + owned zero-dependency tokenizer",
|
|
6
6
|
"keywords": [
|
|
@@ -45,8 +45,8 @@
|
|
|
45
45
|
"provenance": true
|
|
46
46
|
},
|
|
47
47
|
"dependencies": {
|
|
48
|
-
"@cascivo/core": "^1.
|
|
49
|
-
"@cascivo/i18n": "^1.
|
|
48
|
+
"@cascivo/core": "^1.2.0",
|
|
49
|
+
"@cascivo/i18n": "^1.2.0"
|
|
50
50
|
},
|
|
51
51
|
"devDependencies": {
|
|
52
52
|
"@testing-library/jest-dom": "^6.9.1",
|