@hienlh/ppm 0.13.10 → 0.13.12

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.
Files changed (72) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/assets/skills/ppm/SKILL.md +1 -1
  3. package/assets/skills/ppm/references/cli-reference.md +4 -4
  4. package/assets/skills/ppm/references/http-api.md +1 -1
  5. package/bun.lock +2135 -0
  6. package/bunfig.toml +2 -0
  7. package/dist/web/assets/architecture-PBZL5I3N-DVlAZGlv.js +1 -0
  8. package/dist/web/assets/{audio-preview-DISP-2AE.js → audio-preview-BjoIjXlf.js} +1 -1
  9. package/dist/web/assets/chat-tab-Cq8xYO7K.js +12 -0
  10. package/dist/web/assets/{code-editor-BofKrbM8.js → code-editor-DZ1e_sz0.js} +2 -2
  11. package/dist/web/assets/{conflict-editor-kaAZUFD5.js → conflict-editor-WxMZDucw.js} +1 -1
  12. package/dist/web/assets/{database-viewer-P38Vxzkx.js → database-viewer-BRW8CMzC.js} +1 -1
  13. package/dist/web/assets/{diff-viewer-DlJfbgNJ.js → diff-viewer-BOTb0dkG.js} +1 -1
  14. package/dist/web/assets/{extension-webview-5s2MUx38.js → extension-webview-DgfgR787.js} +1 -1
  15. package/dist/web/assets/gitGraph-HDMCJU4V-b3n-Tgk6.js +1 -0
  16. package/dist/web/assets/{glide-data-grid-D5D1N3L7.js → glide-data-grid-DIvkBUKj.js} +1 -1
  17. package/dist/web/assets/{image-preview-C9osjEPa.js → image-preview-BlBVP277.js} +1 -1
  18. package/dist/web/assets/{index-CpcqiQOx.js → index-zP-OjEml.js} +4 -4
  19. package/dist/web/assets/info-3K5VOQVL-fJy9dGkV.js +1 -0
  20. package/dist/web/assets/keybindings-store-Djjc6tPj.js +1 -0
  21. package/dist/web/assets/{markdown-renderer-k3EA9XmF.js → markdown-renderer-CJMJ5Qq0.js} +3 -3
  22. package/dist/web/assets/packet-RMMSAZCW-DMi06dVb.js +1 -0
  23. package/dist/web/assets/{pdf-preview-DvgyxJX7.js → pdf-preview-D0JDPYYs.js} +1 -1
  24. package/dist/web/assets/pie-UPGHQEXC-BECm43s6.js +1 -0
  25. package/dist/web/assets/{port-forwarding-tab-CUkU6wac.js → port-forwarding-tab-DfaV6GPS.js} +1 -1
  26. package/dist/web/assets/{postgres-viewer-C1w0tqQw.js → postgres-viewer-DkVKzTKJ.js} +1 -1
  27. package/dist/web/assets/radar-KQ55EAFF-BwqCptkx.js +1 -0
  28. package/dist/web/assets/{settings-store-B-OmHo3J.js → settings-store-Dvk8Lvwm.js} +1 -1
  29. package/dist/web/assets/{settings-tab-D0zKyVwg.js → settings-tab-BFbe6ybw.js} +1 -1
  30. package/dist/web/assets/{sql-query-editor-46hLU7MI.js → sql-query-editor-BVn40O0T.js} +1 -1
  31. package/dist/web/assets/{sqlite-viewer-DrLi8P6y.js → sqlite-viewer-8oWf4JCB.js} +1 -1
  32. package/dist/web/assets/{terminal-tab-DqA3fEoQ.js → terminal-tab-D_C7amDZ.js} +1 -1
  33. package/dist/web/assets/treemap-KZPCXAKY-Da7U3Olf.js +1 -0
  34. package/dist/web/assets/{use-monaco-theme-DgzxiZS5.js → use-monaco-theme-SyJzNaNN.js} +1 -1
  35. package/dist/web/assets/{vendor-mermaid-CCmA_6Y0.js → vendor-mermaid-DsfY6y4f.js} +2 -2
  36. package/dist/web/assets/{video-preview-BU7tibc4.js → video-preview-BEuZs1dG.js} +1 -1
  37. package/dist/web/index.html +3 -3
  38. package/dist/web/sw.js +1 -1
  39. package/package.json +1 -1
  40. package/src/cli/commands/projects.ts +4 -0
  41. package/src/index.ts +0 -0
  42. package/src/services/config.service.ts +16 -7
  43. package/src/services/supervisor.ts +10 -3
  44. package/src/web/components/chat/chat-tab.tsx +4 -1
  45. package/src/web/components/chat/message-input.tsx +28 -14
  46. package/src/web/hooks/use-chat.ts +27 -20
  47. package/src/web/hooks/use-global-keybindings.ts +12 -0
  48. package/.opencode/.env.example +0 -98
  49. package/.opencode/skills/ads-management/scripts/.env.example +0 -13
  50. package/.opencode/skills/ai-multimodal/.env.example +0 -230
  51. package/.opencode/skills/cip-design/.env.example +0 -6
  52. package/.opencode/skills/devops/.env.example +0 -76
  53. package/.opencode/skills/docs-seeker/.env.example +0 -15
  54. package/.opencode/skills/elevenlabs/.env.example +0 -3
  55. package/.opencode/skills/marketing-dashboard/.env.example +0 -15
  56. package/.opencode/skills/marketing-dashboard/app/.env.example +0 -2
  57. package/.opencode/skills/marketing-dashboard/server/.env.example +0 -2
  58. package/.opencode/skills/mcp-management/scripts/dist/analyze-tools.js +0 -70
  59. package/.opencode/skills/mcp-management/scripts/dist/cli.js +0 -160
  60. package/.opencode/skills/mcp-management/scripts/dist/mcp-client.js +0 -183
  61. package/.opencode/skills/payment-integration/scripts/.env.example +0 -20
  62. package/.opencode/skills/sequential-thinking/.env.example +0 -8
  63. package/dist/web/assets/architecture-PBZL5I3N-By4Nv3Gj.js +0 -1
  64. package/dist/web/assets/chat-tab-lp_mVSG-.js +0 -12
  65. package/dist/web/assets/gitGraph-HDMCJU4V-BLXEKVf1.js +0 -1
  66. package/dist/web/assets/info-3K5VOQVL-CEkPcChg.js +0 -1
  67. package/dist/web/assets/keybindings-store-COxqSoML.js +0 -1
  68. package/dist/web/assets/packet-RMMSAZCW-DECxYTOi.js +0 -1
  69. package/dist/web/assets/pie-UPGHQEXC-cjpNfVG5.js +0 -1
  70. package/dist/web/assets/radar-KQ55EAFF-Dnpi068b.js +0 -1
  71. package/dist/web/assets/treemap-KZPCXAKY-DRyb1eiw.js +0 -1
  72. package/test.sql +0 -1
@@ -1,4 +1,4 @@
1
- import{a as e,i as t,n,o as r,r as i,t as a}from"./rolldown-runtime-FhOqtrmT.js";var o=`modulepreload`,s=function(e){return`/`+e},l={},u=function(e,t,n){let r=Promise.resolve();if(t&&t.length>0){let e=function(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))},i=document.getElementsByTagName(`link`),a=document.querySelector(`meta[property=csp-nonce]`),u=a?.nonce||a?.getAttribute(`nonce`);r=e(t.map(e=>{if(e=s(e,n),e in l)return;l[e]=!0;let t=e.endsWith(`.css`),r=t?`[rel="stylesheet"]`:``;if(n)for(let n=i.length-1;n>=0;n--){let r=i[n];if(r.href===e&&(!t||r.rel===`stylesheet`))return}else if(document.querySelector(`link[href="${e}"]${r}`))return;let a=document.createElement(`link`);if(a.rel=t?`stylesheet`:o,t||(a.as=`script`),a.crossOrigin=``,a.href=e,u&&a.setAttribute(`nonce`,u),document.head.appendChild(a),t)return new Promise((t,n)=>{a.addEventListener(`load`,t),a.addEventListener(`error`,()=>n(Error(`Unable to preload CSS for ${e}`)))})}))}function i(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return r.then(t=>{for(let e of t||[])e.status===`rejected`&&i(e.reason);return e().catch(i)})};function d(e){return typeof e==`object`&&!!e&&typeof e.$type==`string`}function f(e){return typeof e==`object`&&!!e&&typeof e.$refText==`string`&&`ref`in e}function p(e){return typeof e==`object`&&!!e&&typeof e.$refText==`string`&&`items`in e}function m(e){return typeof e==`object`&&!!e&&typeof e.name==`string`&&typeof e.type==`string`&&typeof e.path==`string`}function h(e){return typeof e==`object`&&!!e&&typeof e.info==`object`&&typeof e.message==`string`}var g=class{constructor(){this.subtypes={},this.allSubtypes={}}getAllTypes(){return Object.keys(this.types)}getReferenceType(e){let t=this.types[e.container.$type];if(!t)throw Error(`Type ${e.container.$type||`undefined`} not found.`);let n=t.properties[e.property]?.referenceType;if(!n)throw Error(`Property ${e.property||`undefined`} of type ${e.container.$type} is not a reference.`);return n}getTypeMetaData(e){return this.types[e]||{name:e,properties:{},superTypes:[]}}isInstance(e,t){return d(e)&&this.isSubtype(e.$type,t)}isSubtype(e,t){if(e===t)return!0;let n=this.subtypes[e];n||=this.subtypes[e]={};let r=n[t];if(r!==void 0)return r;{let r=this.types[e],i=r?r.superTypes.some(e=>this.isSubtype(e,t)):!1;return n[t]=i,i}}getAllSubTypes(e){let t=this.allSubtypes[e];if(t)return t;{let t=this.getAllTypes(),n=[];for(let r of t)this.isSubtype(r,e)&&n.push(r);return this.allSubtypes[e]=n,n}}};function _(e){return typeof e==`object`&&!!e&&Array.isArray(e.content)}function v(e){return typeof e==`object`&&!!e&&typeof e.tokenType==`object`}function y(e){return _(e)&&typeof e.fullText==`string`}var b=class e{constructor(e,t){this.startFn=e,this.nextFn=t}iterator(){let e={state:this.startFn(),next:()=>this.nextFn(e.state),[Symbol.iterator]:()=>e};return e}[Symbol.iterator](){return this.iterator()}isEmpty(){return!!this.iterator().next().done}count(){let e=this.iterator(),t=0,n=e.next();for(;!n.done;)t++,n=e.next();return t}toArray(){let e=[],t=this.iterator(),n;do n=t.next(),n.value!==void 0&&e.push(n.value);while(!n.done);return e}toSet(){return new Set(this)}toMap(e,t){let n=this.map(n=>[e?e(n):n,t?t(n):n]);return new Map(n)}toString(){return this.join()}concat(t){return new e(()=>({first:this.startFn(),firstDone:!1,iterator:t[Symbol.iterator]()}),e=>{let t;if(!e.firstDone){do if(t=this.nextFn(e.first),!t.done)return t;while(!t.done);e.firstDone=!0}do if(t=e.iterator.next(),!t.done)return t;while(!t.done);return w})}join(e=`,`){let t=this.iterator(),n=``,r,i=!1;do r=t.next(),r.done||(i&&(n+=e),n+=x(r.value)),i=!0;while(!r.done);return n}indexOf(e,t=0){let n=this.iterator(),r=0,i=n.next();for(;!i.done;){if(r>=t&&i.value===e)return r;i=n.next(),r++}return-1}every(e){let t=this.iterator(),n=t.next();for(;!n.done;){if(!e(n.value))return!1;n=t.next()}return!0}some(e){let t=this.iterator(),n=t.next();for(;!n.done;){if(e(n.value))return!0;n=t.next()}return!1}forEach(e){let t=this.iterator(),n=0,r=t.next();for(;!r.done;)e(r.value,n),r=t.next(),n++}map(t){return new e(this.startFn,e=>{let{done:n,value:r}=this.nextFn(e);return n?w:{done:!1,value:t(r)}})}filter(t){return new e(this.startFn,e=>{let n;do if(n=this.nextFn(e),!n.done&&t(n.value))return n;while(!n.done);return w})}nonNullable(){return this.filter(e=>e!=null)}reduce(e,t){let n=this.iterator(),r=t,i=n.next();for(;!i.done;)r=r===void 0?i.value:e(r,i.value),i=n.next();return r}reduceRight(e,t){return this.recursiveReduce(this.iterator(),e,t)}recursiveReduce(e,t,n){let r=e.next();if(r.done)return n;let i=this.recursiveReduce(e,t,n);return i===void 0?r.value:t(i,r.value)}find(e){let t=this.iterator(),n=t.next();for(;!n.done;){if(e(n.value))return n.value;n=t.next()}}findIndex(e){let t=this.iterator(),n=0,r=t.next();for(;!r.done;){if(e(r.value))return n;r=t.next(),n++}return-1}includes(e){let t=this.iterator(),n=t.next();for(;!n.done;){if(n.value===e)return!0;n=t.next()}return!1}flatMap(t){return new e(()=>({this:this.startFn()}),e=>{do{if(e.iterator){let t=e.iterator.next();if(t.done)e.iterator=void 0;else return t}let{done:n,value:r}=this.nextFn(e.this);if(!n){let n=t(r);if(S(n))e.iterator=n[Symbol.iterator]();else return{done:!1,value:n}}}while(e.iterator);return w})}flat(t){if(t===void 0&&(t=1),t<=0)return this;let n=t>1?this.flat(t-1):this;return new e(()=>({this:n.startFn()}),e=>{do{if(e.iterator){let t=e.iterator.next();if(t.done)e.iterator=void 0;else return t}let{done:t,value:r}=n.nextFn(e.this);if(!t)if(S(r))e.iterator=r[Symbol.iterator]();else return{done:!1,value:r}}while(e.iterator);return w})}head(){let e=this.iterator().next();if(!e.done)return e.value}tail(t=1){return new e(()=>{let e=this.startFn();for(let n=0;n<t;n++)if(this.nextFn(e).done)return e;return e},this.nextFn)}limit(t){return new e(()=>({size:0,state:this.startFn()}),e=>(e.size++,e.size>t?w:this.nextFn(e.state)))}distinct(t){return new e(()=>({set:new Set,internalState:this.startFn()}),e=>{let n;do if(n=this.nextFn(e.internalState),!n.done){let r=t?t(n.value):n.value;if(!e.set.has(r))return e.set.add(r),n}while(!n.done);return w})}exclude(e,t){let n=new Set;for(let r of e){let e=t?t(r):r;n.add(e)}return this.filter(e=>{let r=t?t(e):e;return!n.has(r)})}};function x(e){return typeof e==`string`?e:e===void 0?`undefined`:typeof e.toString==`function`?e.toString():Object.prototype.toString.call(e)}function S(e){return!!e&&typeof e[Symbol.iterator]==`function`}var C=new b(()=>void 0,()=>w),w=Object.freeze({done:!0,value:void 0});function T(...e){if(e.length===1){let t=e[0];if(t instanceof b)return t;if(S(t))return new b(()=>t[Symbol.iterator](),e=>e.next());if(typeof t.length==`number`)return new b(()=>({index:0}),e=>e.index<t.length?{done:!1,value:t[e.index++]}:w)}return e.length>1?new b(()=>({collIndex:0,arrIndex:0}),t=>{do{if(t.iterator){let e=t.iterator.next();if(!e.done)return e;t.iterator=void 0}if(t.array){if(t.arrIndex<t.array.length)return{done:!1,value:t.array[t.arrIndex++]};t.array=void 0,t.arrIndex=0}if(t.collIndex<e.length){let n=e[t.collIndex++];S(n)?t.iterator=n[Symbol.iterator]():n&&typeof n.length==`number`&&(t.array=n)}}while(t.iterator||t.array||t.collIndex<e.length);return w}):C}var E=class extends b{constructor(e,t,n){super(()=>({iterators:n?.includeRoot?[[e][Symbol.iterator]()]:[t(e)[Symbol.iterator]()],pruned:!1}),e=>{for(e.pruned&&=(e.iterators.pop(),!1);e.iterators.length>0;){let n=e.iterators[e.iterators.length-1].next();if(n.done)e.iterators.pop();else return e.iterators.push(t(n.value)[Symbol.iterator]()),n}return w})}iterator(){let e={state:this.startFn(),next:()=>this.nextFn(e.state),prune:()=>{e.state.pruned=!0},[Symbol.iterator]:()=>e};return e}},D;(function(e){function t(e){return e.reduce((e,t)=>e+t,0)}e.sum=t;function n(e){return e.reduce((e,t)=>e*t,0)}e.product=n;function r(e){return e.reduce((e,t)=>Math.min(e,t))}e.min=r;function i(e){return e.reduce((e,t)=>Math.max(e,t))}e.max=i})(D||={});function O(e,t={}){for(let[n,r]of Object.entries(e))n.startsWith(`$`)||(Array.isArray(r)?r.forEach((r,i)=>{d(r)&&(r.$container=e,r.$containerProperty=n,r.$containerIndex=i,t.deep&&O(r,t))}):d(r)&&(r.$container=e,r.$containerProperty=n,t.deep&&O(r,t)))}function k(e,t){let n=e;for(;n;){if(t(n))return n;n=n.$container}}function A(e){let t=j(e).$document;if(!t)throw Error(`AST node has no document.`);return t}function j(e){for(;e.$container;)e=e.$container;return e}function M(e){return f(e)?e.ref?[e.ref]:[]:p(e)?e.items.map(e=>e.ref):[]}function N(e,t){if(!e)throw Error(`Node must be an AstNode.`);let n=t?.range;return new b(()=>({keys:Object.keys(e),keyIndex:0,arrayIndex:0}),t=>{for(;t.keyIndex<t.keys.length;){let r=t.keys[t.keyIndex];if(!r.startsWith(`$`)){let i=e[r];if(d(i)){if(t.keyIndex++,I(i,n))return{done:!1,value:i}}else if(Array.isArray(i)){for(;t.arrayIndex<i.length;){let e=i[t.arrayIndex++];if(d(e)&&I(e,n))return{done:!1,value:e}}t.arrayIndex=0}}t.keyIndex++}return w})}function P(e,t){if(!e)throw Error(`Root node must be an AstNode.`);return new E(e,e=>N(e,t))}function F(e,t){if(!e)throw Error(`Root node must be an AstNode.`);return t?.range&&!I(e,t.range)?new E(e,()=>[]):new E(e,e=>N(e,t),{includeRoot:!0})}function I(e,t){if(!t)return!0;let n=e.$cstNode?.range;return n?Ot(n,t):!1}function L(e){return new b(()=>({keys:Object.keys(e),keyIndex:0,arrayIndex:0}),t=>{for(;t.keyIndex<t.keys.length;){let n=t.keys[t.keyIndex];if(!n.startsWith(`$`)){let r=e[n];if(f(r)||p(r))return t.keyIndex++,{done:!1,value:{reference:r,container:e,property:n}};if(Array.isArray(r)){for(;t.arrayIndex<r.length;){let i=t.arrayIndex++,a=r[i];if(f(a)||p(r))return{done:!1,value:{reference:a,container:e,property:n,index:i}}}t.arrayIndex=0}}t.keyIndex++}return w})}function R(e,t){let n=e.getTypeMetaData(t.$type),r=t;for(let e of Object.values(n.properties))e.defaultValue!==void 0&&r[e.name]===void 0&&(r[e.name]=z(e.defaultValue))}function z(e){return Array.isArray(e)?[...e.map(z)]:e}var B={$type:`AbstractElement`,cardinality:`cardinality`};function V(e){return St.isInstance(e,B.$type)}var H={$type:`AbstractParserRule`};function ee(e){return St.isInstance(e,H.$type)}var te={$type:`AbstractRule`},U={$type:`AbstractType`},ne={$type:`Action`,cardinality:`cardinality`,feature:`feature`,inferredType:`inferredType`,operator:`operator`,type:`type`};function re(e){return St.isInstance(e,ne.$type)}var W={$type:`Alternatives`,cardinality:`cardinality`,elements:`elements`};function G(e){return St.isInstance(e,W.$type)}var K={$type:`ArrayLiteral`,elements:`elements`},ie={$type:`ArrayType`,elementType:`elementType`},ae={$type:`Assignment`,cardinality:`cardinality`,feature:`feature`,operator:`operator`,predicate:`predicate`,terminal:`terminal`};function oe(e){return St.isInstance(e,ae.$type)}var se={$type:`BooleanLiteral`,true:`true`};function ce(e){return St.isInstance(e,se.$type)}var le={$type:`CharacterRange`,cardinality:`cardinality`,left:`left`,lookahead:`lookahead`,parenthesized:`parenthesized`,right:`right`};function ue(e){return St.isInstance(e,le.$type)}var de={$type:`Condition`},fe={$type:`Conjunction`,left:`left`,right:`right`};function pe(e){return St.isInstance(e,fe.$type)}var me={$type:`CrossReference`,cardinality:`cardinality`,deprecatedSyntax:`deprecatedSyntax`,isMulti:`isMulti`,terminal:`terminal`,type:`type`};function he(e){return St.isInstance(e,me.$type)}var ge={$type:`Disjunction`,left:`left`,right:`right`};function _e(e){return St.isInstance(e,ge.$type)}var ve={$type:`EndOfFile`,cardinality:`cardinality`};function ye(e){return St.isInstance(e,ve.$type)}var be={$type:`Grammar`,imports:`imports`,interfaces:`interfaces`,isDeclared:`isDeclared`,name:`name`,rules:`rules`,types:`types`},xe={$type:`GrammarImport`,path:`path`},Se={$type:`Group`,cardinality:`cardinality`,elements:`elements`,guardCondition:`guardCondition`,predicate:`predicate`};function Ce(e){return St.isInstance(e,Se.$type)}var we={$type:`InferredType`,name:`name`};function Te(e){return St.isInstance(e,we.$type)}var Ee={$type:`InfixRule`,call:`call`,dataType:`dataType`,inferredType:`inferredType`,name:`name`,operators:`operators`,parameters:`parameters`,returnType:`returnType`};function De(e){return St.isInstance(e,Ee.$type)}var Oe={$type:`InfixRuleOperatorList`,associativity:`associativity`,operators:`operators`},ke={$type:`InfixRuleOperators`,precedences:`precedences`},Ae={$type:`Interface`,attributes:`attributes`,name:`name`,superTypes:`superTypes`};function je(e){return St.isInstance(e,Ae.$type)}var Me={$type:`Keyword`,cardinality:`cardinality`,predicate:`predicate`,value:`value`};function Ne(e){return St.isInstance(e,Me.$type)}var Pe={$type:`NamedArgument`,calledByName:`calledByName`,parameter:`parameter`,value:`value`},Fe={$type:`NegatedToken`,cardinality:`cardinality`,lookahead:`lookahead`,parenthesized:`parenthesized`,terminal:`terminal`};function Ie(e){return St.isInstance(e,Fe.$type)}var Le={$type:`Negation`,value:`value`};function Re(e){return St.isInstance(e,Le.$type)}var ze={$type:`NumberLiteral`,value:`value`},Be={$type:`Parameter`,name:`name`},Ve={$type:`ParameterReference`,parameter:`parameter`};function He(e){return St.isInstance(e,Ve.$type)}var Ue={$type:`ParserRule`,dataType:`dataType`,definition:`definition`,entry:`entry`,fragment:`fragment`,inferredType:`inferredType`,name:`name`,parameters:`parameters`,returnType:`returnType`};function We(e){return St.isInstance(e,Ue.$type)}var Ge={$type:`ReferenceType`,isMulti:`isMulti`,referenceType:`referenceType`},Ke={$type:`RegexToken`,cardinality:`cardinality`,lookahead:`lookahead`,parenthesized:`parenthesized`,regex:`regex`};function qe(e){return St.isInstance(e,Ke.$type)}var Je={$type:`ReturnType`,name:`name`};function Ye(e){return St.isInstance(e,Je.$type)}var Xe={$type:`RuleCall`,arguments:`arguments`,cardinality:`cardinality`,predicate:`predicate`,rule:`rule`};function Ze(e){return St.isInstance(e,Xe.$type)}var Qe={$type:`SimpleType`,primitiveType:`primitiveType`,stringType:`stringType`,typeRef:`typeRef`};function $e(e){return St.isInstance(e,Qe.$type)}var et={$type:`StringLiteral`,value:`value`},tt={$type:`TerminalAlternatives`,cardinality:`cardinality`,elements:`elements`,lookahead:`lookahead`,parenthesized:`parenthesized`};function nt(e){return St.isInstance(e,tt.$type)}var rt={$type:`TerminalElement`,cardinality:`cardinality`,lookahead:`lookahead`,parenthesized:`parenthesized`},it={$type:`TerminalGroup`,cardinality:`cardinality`,elements:`elements`,lookahead:`lookahead`,parenthesized:`parenthesized`};function at(e){return St.isInstance(e,it.$type)}var ot={$type:`TerminalRule`,definition:`definition`,fragment:`fragment`,hidden:`hidden`,name:`name`,type:`type`};function st(e){return St.isInstance(e,ot.$type)}var ct={$type:`TerminalRuleCall`,cardinality:`cardinality`,lookahead:`lookahead`,parenthesized:`parenthesized`,rule:`rule`};function lt(e){return St.isInstance(e,ct.$type)}var ut={$type:`Type`,name:`name`,type:`type`};function dt(e){return St.isInstance(e,ut.$type)}var ft={$type:`TypeAttribute`,defaultValue:`defaultValue`,isOptional:`isOptional`,name:`name`,type:`type`},pt={$type:`TypeDefinition`},mt={$type:`UnionType`,types:`types`},ht={$type:`UnorderedGroup`,cardinality:`cardinality`,elements:`elements`};function gt(e){return St.isInstance(e,ht.$type)}var _t={$type:`UntilToken`,cardinality:`cardinality`,lookahead:`lookahead`,parenthesized:`parenthesized`,terminal:`terminal`};function eee(e){return St.isInstance(e,_t.$type)}var vt={$type:`ValueLiteral`},yt={$type:`Wildcard`,cardinality:`cardinality`,lookahead:`lookahead`,parenthesized:`parenthesized`};function bt(e){return St.isInstance(e,yt.$type)}var xt=class extends g{constructor(){super(...arguments),this.types={AbstractElement:{name:B.$type,properties:{cardinality:{name:B.cardinality}},superTypes:[]},AbstractParserRule:{name:H.$type,properties:{},superTypes:[te.$type,U.$type]},AbstractRule:{name:te.$type,properties:{},superTypes:[]},AbstractType:{name:U.$type,properties:{},superTypes:[]},Action:{name:ne.$type,properties:{cardinality:{name:ne.cardinality},feature:{name:ne.feature},inferredType:{name:ne.inferredType},operator:{name:ne.operator},type:{name:ne.type,referenceType:U.$type}},superTypes:[B.$type]},Alternatives:{name:W.$type,properties:{cardinality:{name:W.cardinality},elements:{name:W.elements,defaultValue:[]}},superTypes:[B.$type]},ArrayLiteral:{name:K.$type,properties:{elements:{name:K.elements,defaultValue:[]}},superTypes:[vt.$type]},ArrayType:{name:ie.$type,properties:{elementType:{name:ie.elementType}},superTypes:[pt.$type]},Assignment:{name:ae.$type,properties:{cardinality:{name:ae.cardinality},feature:{name:ae.feature},operator:{name:ae.operator},predicate:{name:ae.predicate},terminal:{name:ae.terminal}},superTypes:[B.$type]},BooleanLiteral:{name:se.$type,properties:{true:{name:se.true,defaultValue:!1}},superTypes:[de.$type,vt.$type]},CharacterRange:{name:le.$type,properties:{cardinality:{name:le.cardinality},left:{name:le.left},lookahead:{name:le.lookahead},parenthesized:{name:le.parenthesized,defaultValue:!1},right:{name:le.right}},superTypes:[rt.$type]},Condition:{name:de.$type,properties:{},superTypes:[]},Conjunction:{name:fe.$type,properties:{left:{name:fe.left},right:{name:fe.right}},superTypes:[de.$type]},CrossReference:{name:me.$type,properties:{cardinality:{name:me.cardinality},deprecatedSyntax:{name:me.deprecatedSyntax,defaultValue:!1},isMulti:{name:me.isMulti,defaultValue:!1},terminal:{name:me.terminal},type:{name:me.type,referenceType:U.$type}},superTypes:[B.$type]},Disjunction:{name:ge.$type,properties:{left:{name:ge.left},right:{name:ge.right}},superTypes:[de.$type]},EndOfFile:{name:ve.$type,properties:{cardinality:{name:ve.cardinality}},superTypes:[B.$type]},Grammar:{name:be.$type,properties:{imports:{name:be.imports,defaultValue:[]},interfaces:{name:be.interfaces,defaultValue:[]},isDeclared:{name:be.isDeclared,defaultValue:!1},name:{name:be.name},rules:{name:be.rules,defaultValue:[]},types:{name:be.types,defaultValue:[]}},superTypes:[]},GrammarImport:{name:xe.$type,properties:{path:{name:xe.path}},superTypes:[]},Group:{name:Se.$type,properties:{cardinality:{name:Se.cardinality},elements:{name:Se.elements,defaultValue:[]},guardCondition:{name:Se.guardCondition},predicate:{name:Se.predicate}},superTypes:[B.$type]},InferredType:{name:we.$type,properties:{name:{name:we.name}},superTypes:[U.$type]},InfixRule:{name:Ee.$type,properties:{call:{name:Ee.call},dataType:{name:Ee.dataType},inferredType:{name:Ee.inferredType},name:{name:Ee.name},operators:{name:Ee.operators},parameters:{name:Ee.parameters,defaultValue:[]},returnType:{name:Ee.returnType,referenceType:U.$type}},superTypes:[H.$type]},InfixRuleOperatorList:{name:Oe.$type,properties:{associativity:{name:Oe.associativity},operators:{name:Oe.operators,defaultValue:[]}},superTypes:[]},InfixRuleOperators:{name:ke.$type,properties:{precedences:{name:ke.precedences,defaultValue:[]}},superTypes:[]},Interface:{name:Ae.$type,properties:{attributes:{name:Ae.attributes,defaultValue:[]},name:{name:Ae.name},superTypes:{name:Ae.superTypes,defaultValue:[],referenceType:U.$type}},superTypes:[U.$type]},Keyword:{name:Me.$type,properties:{cardinality:{name:Me.cardinality},predicate:{name:Me.predicate},value:{name:Me.value}},superTypes:[B.$type]},NamedArgument:{name:Pe.$type,properties:{calledByName:{name:Pe.calledByName,defaultValue:!1},parameter:{name:Pe.parameter,referenceType:Be.$type},value:{name:Pe.value}},superTypes:[]},NegatedToken:{name:Fe.$type,properties:{cardinality:{name:Fe.cardinality},lookahead:{name:Fe.lookahead},parenthesized:{name:Fe.parenthesized,defaultValue:!1},terminal:{name:Fe.terminal}},superTypes:[rt.$type]},Negation:{name:Le.$type,properties:{value:{name:Le.value}},superTypes:[de.$type]},NumberLiteral:{name:ze.$type,properties:{value:{name:ze.value}},superTypes:[vt.$type]},Parameter:{name:Be.$type,properties:{name:{name:Be.name}},superTypes:[]},ParameterReference:{name:Ve.$type,properties:{parameter:{name:Ve.parameter,referenceType:Be.$type}},superTypes:[de.$type]},ParserRule:{name:Ue.$type,properties:{dataType:{name:Ue.dataType},definition:{name:Ue.definition},entry:{name:Ue.entry,defaultValue:!1},fragment:{name:Ue.fragment,defaultValue:!1},inferredType:{name:Ue.inferredType},name:{name:Ue.name},parameters:{name:Ue.parameters,defaultValue:[]},returnType:{name:Ue.returnType,referenceType:U.$type}},superTypes:[H.$type]},ReferenceType:{name:Ge.$type,properties:{isMulti:{name:Ge.isMulti,defaultValue:!1},referenceType:{name:Ge.referenceType}},superTypes:[pt.$type]},RegexToken:{name:Ke.$type,properties:{cardinality:{name:Ke.cardinality},lookahead:{name:Ke.lookahead},parenthesized:{name:Ke.parenthesized,defaultValue:!1},regex:{name:Ke.regex}},superTypes:[rt.$type]},ReturnType:{name:Je.$type,properties:{name:{name:Je.name}},superTypes:[]},RuleCall:{name:Xe.$type,properties:{arguments:{name:Xe.arguments,defaultValue:[]},cardinality:{name:Xe.cardinality},predicate:{name:Xe.predicate},rule:{name:Xe.rule,referenceType:te.$type}},superTypes:[B.$type]},SimpleType:{name:Qe.$type,properties:{primitiveType:{name:Qe.primitiveType},stringType:{name:Qe.stringType},typeRef:{name:Qe.typeRef,referenceType:U.$type}},superTypes:[pt.$type]},StringLiteral:{name:et.$type,properties:{value:{name:et.value}},superTypes:[vt.$type]},TerminalAlternatives:{name:tt.$type,properties:{cardinality:{name:tt.cardinality},elements:{name:tt.elements,defaultValue:[]},lookahead:{name:tt.lookahead},parenthesized:{name:tt.parenthesized,defaultValue:!1}},superTypes:[rt.$type]},TerminalElement:{name:rt.$type,properties:{cardinality:{name:rt.cardinality},lookahead:{name:rt.lookahead},parenthesized:{name:rt.parenthesized,defaultValue:!1}},superTypes:[B.$type]},TerminalGroup:{name:it.$type,properties:{cardinality:{name:it.cardinality},elements:{name:it.elements,defaultValue:[]},lookahead:{name:it.lookahead},parenthesized:{name:it.parenthesized,defaultValue:!1}},superTypes:[rt.$type]},TerminalRule:{name:ot.$type,properties:{definition:{name:ot.definition},fragment:{name:ot.fragment,defaultValue:!1},hidden:{name:ot.hidden,defaultValue:!1},name:{name:ot.name},type:{name:ot.type}},superTypes:[te.$type]},TerminalRuleCall:{name:ct.$type,properties:{cardinality:{name:ct.cardinality},lookahead:{name:ct.lookahead},parenthesized:{name:ct.parenthesized,defaultValue:!1},rule:{name:ct.rule,referenceType:ot.$type}},superTypes:[rt.$type]},Type:{name:ut.$type,properties:{name:{name:ut.name},type:{name:ut.type}},superTypes:[U.$type]},TypeAttribute:{name:ft.$type,properties:{defaultValue:{name:ft.defaultValue},isOptional:{name:ft.isOptional,defaultValue:!1},name:{name:ft.name},type:{name:ft.type}},superTypes:[]},TypeDefinition:{name:pt.$type,properties:{},superTypes:[]},UnionType:{name:mt.$type,properties:{types:{name:mt.types,defaultValue:[]}},superTypes:[pt.$type]},UnorderedGroup:{name:ht.$type,properties:{cardinality:{name:ht.cardinality},elements:{name:ht.elements,defaultValue:[]}},superTypes:[B.$type]},UntilToken:{name:_t.$type,properties:{cardinality:{name:_t.cardinality},lookahead:{name:_t.lookahead},parenthesized:{name:_t.parenthesized,defaultValue:!1},terminal:{name:_t.terminal}},superTypes:[rt.$type]},ValueLiteral:{name:vt.$type,properties:{},superTypes:[]},Wildcard:{name:yt.$type,properties:{cardinality:{name:yt.cardinality},lookahead:{name:yt.lookahead},parenthesized:{name:yt.parenthesized,defaultValue:!1}},superTypes:[rt.$type]}}}},St=new xt;function Ct(e){return new E(e,e=>_(e)?e.content:[],{includeRoot:!0})}function tee(e,t){for(;e.container;)if(e=e.container,e===t)return!0;return!1}function wt(e){return{start:{character:e.startColumn-1,line:e.startLine-1},end:{character:e.endColumn,line:e.endLine-1}}}function Tt(e){if(!e)return;let{offset:t,end:n,range:r}=e;return{range:r,offset:t,end:n,length:n-t}}var Et;(function(e){e[e.Before=0]=`Before`,e[e.After=1]=`After`,e[e.OverlapFront=2]=`OverlapFront`,e[e.OverlapBack=3]=`OverlapBack`,e[e.Inside=4]=`Inside`,e[e.Outside=5]=`Outside`})(Et||={});function Dt(e,t){if(e.end.line<t.start.line||e.end.line===t.start.line&&e.end.character<=t.start.character)return Et.Before;if(e.start.line>t.end.line||e.start.line===t.end.line&&e.start.character>=t.end.character)return Et.After;let n=e.start.line>t.start.line||e.start.line===t.start.line&&e.start.character>=t.start.character,r=e.end.line<t.end.line||e.end.line===t.end.line&&e.end.character<=t.end.character;return n&&r?Et.Inside:n?Et.OverlapBack:r?Et.OverlapFront:Et.Outside}function Ot(e,t){return Dt(e,t)>Et.After}var nee=/^[\w\p{L}]$/u;function ree(e,t){if(e){let n=iee(e,!0);if(n&&kt(n,t))return n;if(y(e)){let n=e.content.findIndex(e=>!e.hidden);for(let r=n-1;r>=0;r--){let n=e.content[r];if(kt(n,t))return n}}}}function kt(e,t){return v(e)&&t.includes(e.tokenType.name)}function iee(e,t=!0){for(;e.container;){let n=e.container,r=n.content.indexOf(e);for(;r>0;){r--;let e=n.content[r];if(t||!e.hidden)return e}e=n}}var At=class extends Error{constructor(e,t){super(e?`${t} at ${e.range.start.line}:${e.range.start.character}`:t)}};function jt(e,t=`Error: Got unexpected value.`){throw Error(t)}function Mt(e){return e.charCodeAt(0)}function Nt(e,t){Array.isArray(e)?e.forEach(function(e){t.push(e)}):t.push(e)}function Pt(e,t){if(e[t]===!0)throw`duplicate flag `+t;e[t],e[t]=!0}function Ft(e){if(e===void 0)throw Error(`Internal Error - Should never get here!`);return!0}function It(){throw Error(`Internal Error - Should never get here!`)}function Lt(e){return e.type===`Character`}var Rt=[];for(let e=Mt(`0`);e<=Mt(`9`);e++)Rt.push(e);var zt=[Mt(`_`)].concat(Rt);for(let e=Mt(`a`);e<=Mt(`z`);e++)zt.push(e);for(let e=Mt(`A`);e<=Mt(`Z`);e++)zt.push(e);var Bt=[Mt(` `),Mt(`\f`),Mt(`
1
+ import{a as e,i as t,n,o as r,r as i,t as a}from"./rolldown-runtime-FhOqtrmT.js";var o=`modulepreload`,s=function(e){return`/`+e},l={},u=function(e,t,n){let r=Promise.resolve();if(t&&t.length>0){let e=document.getElementsByTagName(`link`),i=document.querySelector(`meta[property=csp-nonce]`),a=i?.nonce||i?.getAttribute(`nonce`);function u(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}r=u(t.map(t=>{if(t=s(t,n),t in l)return;l[t]=!0;let r=t.endsWith(`.css`),i=r?`[rel="stylesheet"]`:``;if(n)for(let n=e.length-1;n>=0;n--){let i=e[n];if(i.href===t&&(!r||i.rel===`stylesheet`))return}else if(document.querySelector(`link[href="${t}"]${i}`))return;let u=document.createElement(`link`);if(u.rel=r?`stylesheet`:o,r||(u.as=`script`),u.crossOrigin=``,u.href=t,a&&u.setAttribute(`nonce`,a),document.head.appendChild(u),r)return new Promise((e,n)=>{u.addEventListener(`load`,e),u.addEventListener(`error`,()=>n(Error(`Unable to preload CSS for ${t}`)))})}))}function i(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return r.then(t=>{for(let e of t||[])e.status===`rejected`&&i(e.reason);return e().catch(i)})};function d(e){return typeof e==`object`&&!!e&&typeof e.$type==`string`}function f(e){return typeof e==`object`&&!!e&&typeof e.$refText==`string`&&`ref`in e}function p(e){return typeof e==`object`&&!!e&&typeof e.$refText==`string`&&`items`in e}function m(e){return typeof e==`object`&&!!e&&typeof e.name==`string`&&typeof e.type==`string`&&typeof e.path==`string`}function h(e){return typeof e==`object`&&!!e&&typeof e.info==`object`&&typeof e.message==`string`}var g=class{constructor(){this.subtypes={},this.allSubtypes={}}getAllTypes(){return Object.keys(this.types)}getReferenceType(e){let t=this.types[e.container.$type];if(!t)throw Error(`Type ${e.container.$type||`undefined`} not found.`);let n=t.properties[e.property]?.referenceType;if(!n)throw Error(`Property ${e.property||`undefined`} of type ${e.container.$type} is not a reference.`);return n}getTypeMetaData(e){return this.types[e]||{name:e,properties:{},superTypes:[]}}isInstance(e,t){return d(e)&&this.isSubtype(e.$type,t)}isSubtype(e,t){if(e===t)return!0;let n=this.subtypes[e];n||=this.subtypes[e]={};let r=n[t];if(r!==void 0)return r;{let r=this.types[e],i=r?r.superTypes.some(e=>this.isSubtype(e,t)):!1;return n[t]=i,i}}getAllSubTypes(e){let t=this.allSubtypes[e];if(t)return t;{let t=this.getAllTypes(),n=[];for(let r of t)this.isSubtype(r,e)&&n.push(r);return this.allSubtypes[e]=n,n}}};function _(e){return typeof e==`object`&&!!e&&Array.isArray(e.content)}function v(e){return typeof e==`object`&&!!e&&typeof e.tokenType==`object`}function y(e){return _(e)&&typeof e.fullText==`string`}var b=class e{constructor(e,t){this.startFn=e,this.nextFn=t}iterator(){let e={state:this.startFn(),next:()=>this.nextFn(e.state),[Symbol.iterator]:()=>e};return e}[Symbol.iterator](){return this.iterator()}isEmpty(){return!!this.iterator().next().done}count(){let e=this.iterator(),t=0,n=e.next();for(;!n.done;)t++,n=e.next();return t}toArray(){let e=[],t=this.iterator(),n;do n=t.next(),n.value!==void 0&&e.push(n.value);while(!n.done);return e}toSet(){return new Set(this)}toMap(e,t){let n=this.map(n=>[e?e(n):n,t?t(n):n]);return new Map(n)}toString(){return this.join()}concat(t){return new e(()=>({first:this.startFn(),firstDone:!1,iterator:t[Symbol.iterator]()}),e=>{let t;if(!e.firstDone){do if(t=this.nextFn(e.first),!t.done)return t;while(!t.done);e.firstDone=!0}do if(t=e.iterator.next(),!t.done)return t;while(!t.done);return w})}join(e=`,`){let t=this.iterator(),n=``,r,i=!1;do r=t.next(),r.done||(i&&(n+=e),n+=x(r.value)),i=!0;while(!r.done);return n}indexOf(e,t=0){let n=this.iterator(),r=0,i=n.next();for(;!i.done;){if(r>=t&&i.value===e)return r;i=n.next(),r++}return-1}every(e){let t=this.iterator(),n=t.next();for(;!n.done;){if(!e(n.value))return!1;n=t.next()}return!0}some(e){let t=this.iterator(),n=t.next();for(;!n.done;){if(e(n.value))return!0;n=t.next()}return!1}forEach(e){let t=this.iterator(),n=0,r=t.next();for(;!r.done;)e(r.value,n),r=t.next(),n++}map(t){return new e(this.startFn,e=>{let{done:n,value:r}=this.nextFn(e);return n?w:{done:!1,value:t(r)}})}filter(t){return new e(this.startFn,e=>{let n;do if(n=this.nextFn(e),!n.done&&t(n.value))return n;while(!n.done);return w})}nonNullable(){return this.filter(e=>e!=null)}reduce(e,t){let n=this.iterator(),r=t,i=n.next();for(;!i.done;)r=r===void 0?i.value:e(r,i.value),i=n.next();return r}reduceRight(e,t){return this.recursiveReduce(this.iterator(),e,t)}recursiveReduce(e,t,n){let r=e.next();if(r.done)return n;let i=this.recursiveReduce(e,t,n);return i===void 0?r.value:t(i,r.value)}find(e){let t=this.iterator(),n=t.next();for(;!n.done;){if(e(n.value))return n.value;n=t.next()}}findIndex(e){let t=this.iterator(),n=0,r=t.next();for(;!r.done;){if(e(r.value))return n;r=t.next(),n++}return-1}includes(e){let t=this.iterator(),n=t.next();for(;!n.done;){if(n.value===e)return!0;n=t.next()}return!1}flatMap(t){return new e(()=>({this:this.startFn()}),e=>{do{if(e.iterator){let t=e.iterator.next();if(t.done)e.iterator=void 0;else return t}let{done:n,value:r}=this.nextFn(e.this);if(!n){let n=t(r);if(S(n))e.iterator=n[Symbol.iterator]();else return{done:!1,value:n}}}while(e.iterator);return w})}flat(t){if(t===void 0&&(t=1),t<=0)return this;let n=t>1?this.flat(t-1):this;return new e(()=>({this:n.startFn()}),e=>{do{if(e.iterator){let t=e.iterator.next();if(t.done)e.iterator=void 0;else return t}let{done:t,value:r}=n.nextFn(e.this);if(!t)if(S(r))e.iterator=r[Symbol.iterator]();else return{done:!1,value:r}}while(e.iterator);return w})}head(){let e=this.iterator().next();if(!e.done)return e.value}tail(t=1){return new e(()=>{let e=this.startFn();for(let n=0;n<t;n++)if(this.nextFn(e).done)return e;return e},this.nextFn)}limit(t){return new e(()=>({size:0,state:this.startFn()}),e=>(e.size++,e.size>t?w:this.nextFn(e.state)))}distinct(t){return new e(()=>({set:new Set,internalState:this.startFn()}),e=>{let n;do if(n=this.nextFn(e.internalState),!n.done){let r=t?t(n.value):n.value;if(!e.set.has(r))return e.set.add(r),n}while(!n.done);return w})}exclude(e,t){let n=new Set;for(let r of e){let e=t?t(r):r;n.add(e)}return this.filter(e=>{let r=t?t(e):e;return!n.has(r)})}};function x(e){return typeof e==`string`?e:e===void 0?`undefined`:typeof e.toString==`function`?e.toString():Object.prototype.toString.call(e)}function S(e){return!!e&&typeof e[Symbol.iterator]==`function`}var C=new b(()=>void 0,()=>w),w=Object.freeze({done:!0,value:void 0});function T(...e){if(e.length===1){let t=e[0];if(t instanceof b)return t;if(S(t))return new b(()=>t[Symbol.iterator](),e=>e.next());if(typeof t.length==`number`)return new b(()=>({index:0}),e=>e.index<t.length?{done:!1,value:t[e.index++]}:w)}return e.length>1?new b(()=>({collIndex:0,arrIndex:0}),t=>{do{if(t.iterator){let e=t.iterator.next();if(!e.done)return e;t.iterator=void 0}if(t.array){if(t.arrIndex<t.array.length)return{done:!1,value:t.array[t.arrIndex++]};t.array=void 0,t.arrIndex=0}if(t.collIndex<e.length){let n=e[t.collIndex++];S(n)?t.iterator=n[Symbol.iterator]():n&&typeof n.length==`number`&&(t.array=n)}}while(t.iterator||t.array||t.collIndex<e.length);return w}):C}var E=class extends b{constructor(e,t,n){super(()=>({iterators:n?.includeRoot?[[e][Symbol.iterator]()]:[t(e)[Symbol.iterator]()],pruned:!1}),e=>{for(e.pruned&&=(e.iterators.pop(),!1);e.iterators.length>0;){let n=e.iterators[e.iterators.length-1].next();if(n.done)e.iterators.pop();else return e.iterators.push(t(n.value)[Symbol.iterator]()),n}return w})}iterator(){let e={state:this.startFn(),next:()=>this.nextFn(e.state),prune:()=>{e.state.pruned=!0},[Symbol.iterator]:()=>e};return e}},D;(function(e){function t(e){return e.reduce((e,t)=>e+t,0)}e.sum=t;function n(e){return e.reduce((e,t)=>e*t,0)}e.product=n;function r(e){return e.reduce((e,t)=>Math.min(e,t))}e.min=r;function i(e){return e.reduce((e,t)=>Math.max(e,t))}e.max=i})(D||={});function O(e,t={}){for(let[n,r]of Object.entries(e))n.startsWith(`$`)||(Array.isArray(r)?r.forEach((r,i)=>{d(r)&&(r.$container=e,r.$containerProperty=n,r.$containerIndex=i,t.deep&&O(r,t))}):d(r)&&(r.$container=e,r.$containerProperty=n,t.deep&&O(r,t)))}function k(e,t){let n=e;for(;n;){if(t(n))return n;n=n.$container}}function A(e){let t=j(e).$document;if(!t)throw Error(`AST node has no document.`);return t}function j(e){for(;e.$container;)e=e.$container;return e}function M(e){return f(e)?e.ref?[e.ref]:[]:p(e)?e.items.map(e=>e.ref):[]}function N(e,t){if(!e)throw Error(`Node must be an AstNode.`);let n=t?.range;return new b(()=>({keys:Object.keys(e),keyIndex:0,arrayIndex:0}),t=>{for(;t.keyIndex<t.keys.length;){let r=t.keys[t.keyIndex];if(!r.startsWith(`$`)){let i=e[r];if(d(i)){if(t.keyIndex++,I(i,n))return{done:!1,value:i}}else if(Array.isArray(i)){for(;t.arrayIndex<i.length;){let e=i[t.arrayIndex++];if(d(e)&&I(e,n))return{done:!1,value:e}}t.arrayIndex=0}}t.keyIndex++}return w})}function P(e,t){if(!e)throw Error(`Root node must be an AstNode.`);return new E(e,e=>N(e,t))}function F(e,t){if(!e)throw Error(`Root node must be an AstNode.`);return t?.range&&!I(e,t.range)?new E(e,()=>[]):new E(e,e=>N(e,t),{includeRoot:!0})}function I(e,t){if(!t)return!0;let n=e.$cstNode?.range;return n?Ot(n,t):!1}function L(e){return new b(()=>({keys:Object.keys(e),keyIndex:0,arrayIndex:0}),t=>{for(;t.keyIndex<t.keys.length;){let n=t.keys[t.keyIndex];if(!n.startsWith(`$`)){let r=e[n];if(f(r)||p(r))return t.keyIndex++,{done:!1,value:{reference:r,container:e,property:n}};if(Array.isArray(r)){for(;t.arrayIndex<r.length;){let i=t.arrayIndex++,a=r[i];if(f(a)||p(r))return{done:!1,value:{reference:a,container:e,property:n,index:i}}}t.arrayIndex=0}}t.keyIndex++}return w})}function R(e,t){let n=e.getTypeMetaData(t.$type),r=t;for(let e of Object.values(n.properties))e.defaultValue!==void 0&&r[e.name]===void 0&&(r[e.name]=z(e.defaultValue))}function z(e){return Array.isArray(e)?[...e.map(z)]:e}var B={$type:`AbstractElement`,cardinality:`cardinality`};function V(e){return St.isInstance(e,B.$type)}var H={$type:`AbstractParserRule`};function ee(e){return St.isInstance(e,H.$type)}var te={$type:`AbstractRule`},U={$type:`AbstractType`},ne={$type:`Action`,cardinality:`cardinality`,feature:`feature`,inferredType:`inferredType`,operator:`operator`,type:`type`};function re(e){return St.isInstance(e,ne.$type)}var W={$type:`Alternatives`,cardinality:`cardinality`,elements:`elements`};function G(e){return St.isInstance(e,W.$type)}var K={$type:`ArrayLiteral`,elements:`elements`},ie={$type:`ArrayType`,elementType:`elementType`},ae={$type:`Assignment`,cardinality:`cardinality`,feature:`feature`,operator:`operator`,predicate:`predicate`,terminal:`terminal`};function oe(e){return St.isInstance(e,ae.$type)}var se={$type:`BooleanLiteral`,true:`true`};function ce(e){return St.isInstance(e,se.$type)}var le={$type:`CharacterRange`,cardinality:`cardinality`,left:`left`,lookahead:`lookahead`,parenthesized:`parenthesized`,right:`right`};function ue(e){return St.isInstance(e,le.$type)}var de={$type:`Condition`},fe={$type:`Conjunction`,left:`left`,right:`right`};function pe(e){return St.isInstance(e,fe.$type)}var me={$type:`CrossReference`,cardinality:`cardinality`,deprecatedSyntax:`deprecatedSyntax`,isMulti:`isMulti`,terminal:`terminal`,type:`type`};function he(e){return St.isInstance(e,me.$type)}var ge={$type:`Disjunction`,left:`left`,right:`right`};function _e(e){return St.isInstance(e,ge.$type)}var ve={$type:`EndOfFile`,cardinality:`cardinality`};function ye(e){return St.isInstance(e,ve.$type)}var be={$type:`Grammar`,imports:`imports`,interfaces:`interfaces`,isDeclared:`isDeclared`,name:`name`,rules:`rules`,types:`types`},xe={$type:`GrammarImport`,path:`path`},Se={$type:`Group`,cardinality:`cardinality`,elements:`elements`,guardCondition:`guardCondition`,predicate:`predicate`};function Ce(e){return St.isInstance(e,Se.$type)}var we={$type:`InferredType`,name:`name`};function Te(e){return St.isInstance(e,we.$type)}var Ee={$type:`InfixRule`,call:`call`,dataType:`dataType`,inferredType:`inferredType`,name:`name`,operators:`operators`,parameters:`parameters`,returnType:`returnType`};function De(e){return St.isInstance(e,Ee.$type)}var Oe={$type:`InfixRuleOperatorList`,associativity:`associativity`,operators:`operators`},ke={$type:`InfixRuleOperators`,precedences:`precedences`},Ae={$type:`Interface`,attributes:`attributes`,name:`name`,superTypes:`superTypes`};function je(e){return St.isInstance(e,Ae.$type)}var Me={$type:`Keyword`,cardinality:`cardinality`,predicate:`predicate`,value:`value`};function Ne(e){return St.isInstance(e,Me.$type)}var Pe={$type:`NamedArgument`,calledByName:`calledByName`,parameter:`parameter`,value:`value`},Fe={$type:`NegatedToken`,cardinality:`cardinality`,lookahead:`lookahead`,parenthesized:`parenthesized`,terminal:`terminal`};function Ie(e){return St.isInstance(e,Fe.$type)}var Le={$type:`Negation`,value:`value`};function Re(e){return St.isInstance(e,Le.$type)}var ze={$type:`NumberLiteral`,value:`value`},Be={$type:`Parameter`,name:`name`},Ve={$type:`ParameterReference`,parameter:`parameter`};function He(e){return St.isInstance(e,Ve.$type)}var Ue={$type:`ParserRule`,dataType:`dataType`,definition:`definition`,entry:`entry`,fragment:`fragment`,inferredType:`inferredType`,name:`name`,parameters:`parameters`,returnType:`returnType`};function We(e){return St.isInstance(e,Ue.$type)}var Ge={$type:`ReferenceType`,isMulti:`isMulti`,referenceType:`referenceType`},Ke={$type:`RegexToken`,cardinality:`cardinality`,lookahead:`lookahead`,parenthesized:`parenthesized`,regex:`regex`};function qe(e){return St.isInstance(e,Ke.$type)}var Je={$type:`ReturnType`,name:`name`};function Ye(e){return St.isInstance(e,Je.$type)}var Xe={$type:`RuleCall`,arguments:`arguments`,cardinality:`cardinality`,predicate:`predicate`,rule:`rule`};function Ze(e){return St.isInstance(e,Xe.$type)}var Qe={$type:`SimpleType`,primitiveType:`primitiveType`,stringType:`stringType`,typeRef:`typeRef`};function $e(e){return St.isInstance(e,Qe.$type)}var et={$type:`StringLiteral`,value:`value`},tt={$type:`TerminalAlternatives`,cardinality:`cardinality`,elements:`elements`,lookahead:`lookahead`,parenthesized:`parenthesized`};function nt(e){return St.isInstance(e,tt.$type)}var rt={$type:`TerminalElement`,cardinality:`cardinality`,lookahead:`lookahead`,parenthesized:`parenthesized`},it={$type:`TerminalGroup`,cardinality:`cardinality`,elements:`elements`,lookahead:`lookahead`,parenthesized:`parenthesized`};function at(e){return St.isInstance(e,it.$type)}var ot={$type:`TerminalRule`,definition:`definition`,fragment:`fragment`,hidden:`hidden`,name:`name`,type:`type`};function st(e){return St.isInstance(e,ot.$type)}var ct={$type:`TerminalRuleCall`,cardinality:`cardinality`,lookahead:`lookahead`,parenthesized:`parenthesized`,rule:`rule`};function lt(e){return St.isInstance(e,ct.$type)}var ut={$type:`Type`,name:`name`,type:`type`};function dt(e){return St.isInstance(e,ut.$type)}var ft={$type:`TypeAttribute`,defaultValue:`defaultValue`,isOptional:`isOptional`,name:`name`,type:`type`},pt={$type:`TypeDefinition`},mt={$type:`UnionType`,types:`types`},ht={$type:`UnorderedGroup`,cardinality:`cardinality`,elements:`elements`};function gt(e){return St.isInstance(e,ht.$type)}var _t={$type:`UntilToken`,cardinality:`cardinality`,lookahead:`lookahead`,parenthesized:`parenthesized`,terminal:`terminal`};function eee(e){return St.isInstance(e,_t.$type)}var vt={$type:`ValueLiteral`},yt={$type:`Wildcard`,cardinality:`cardinality`,lookahead:`lookahead`,parenthesized:`parenthesized`};function bt(e){return St.isInstance(e,yt.$type)}var xt=class extends g{constructor(){super(...arguments),this.types={AbstractElement:{name:B.$type,properties:{cardinality:{name:B.cardinality}},superTypes:[]},AbstractParserRule:{name:H.$type,properties:{},superTypes:[te.$type,U.$type]},AbstractRule:{name:te.$type,properties:{},superTypes:[]},AbstractType:{name:U.$type,properties:{},superTypes:[]},Action:{name:ne.$type,properties:{cardinality:{name:ne.cardinality},feature:{name:ne.feature},inferredType:{name:ne.inferredType},operator:{name:ne.operator},type:{name:ne.type,referenceType:U.$type}},superTypes:[B.$type]},Alternatives:{name:W.$type,properties:{cardinality:{name:W.cardinality},elements:{name:W.elements,defaultValue:[]}},superTypes:[B.$type]},ArrayLiteral:{name:K.$type,properties:{elements:{name:K.elements,defaultValue:[]}},superTypes:[vt.$type]},ArrayType:{name:ie.$type,properties:{elementType:{name:ie.elementType}},superTypes:[pt.$type]},Assignment:{name:ae.$type,properties:{cardinality:{name:ae.cardinality},feature:{name:ae.feature},operator:{name:ae.operator},predicate:{name:ae.predicate},terminal:{name:ae.terminal}},superTypes:[B.$type]},BooleanLiteral:{name:se.$type,properties:{true:{name:se.true,defaultValue:!1}},superTypes:[de.$type,vt.$type]},CharacterRange:{name:le.$type,properties:{cardinality:{name:le.cardinality},left:{name:le.left},lookahead:{name:le.lookahead},parenthesized:{name:le.parenthesized,defaultValue:!1},right:{name:le.right}},superTypes:[rt.$type]},Condition:{name:de.$type,properties:{},superTypes:[]},Conjunction:{name:fe.$type,properties:{left:{name:fe.left},right:{name:fe.right}},superTypes:[de.$type]},CrossReference:{name:me.$type,properties:{cardinality:{name:me.cardinality},deprecatedSyntax:{name:me.deprecatedSyntax,defaultValue:!1},isMulti:{name:me.isMulti,defaultValue:!1},terminal:{name:me.terminal},type:{name:me.type,referenceType:U.$type}},superTypes:[B.$type]},Disjunction:{name:ge.$type,properties:{left:{name:ge.left},right:{name:ge.right}},superTypes:[de.$type]},EndOfFile:{name:ve.$type,properties:{cardinality:{name:ve.cardinality}},superTypes:[B.$type]},Grammar:{name:be.$type,properties:{imports:{name:be.imports,defaultValue:[]},interfaces:{name:be.interfaces,defaultValue:[]},isDeclared:{name:be.isDeclared,defaultValue:!1},name:{name:be.name},rules:{name:be.rules,defaultValue:[]},types:{name:be.types,defaultValue:[]}},superTypes:[]},GrammarImport:{name:xe.$type,properties:{path:{name:xe.path}},superTypes:[]},Group:{name:Se.$type,properties:{cardinality:{name:Se.cardinality},elements:{name:Se.elements,defaultValue:[]},guardCondition:{name:Se.guardCondition},predicate:{name:Se.predicate}},superTypes:[B.$type]},InferredType:{name:we.$type,properties:{name:{name:we.name}},superTypes:[U.$type]},InfixRule:{name:Ee.$type,properties:{call:{name:Ee.call},dataType:{name:Ee.dataType},inferredType:{name:Ee.inferredType},name:{name:Ee.name},operators:{name:Ee.operators},parameters:{name:Ee.parameters,defaultValue:[]},returnType:{name:Ee.returnType,referenceType:U.$type}},superTypes:[H.$type]},InfixRuleOperatorList:{name:Oe.$type,properties:{associativity:{name:Oe.associativity},operators:{name:Oe.operators,defaultValue:[]}},superTypes:[]},InfixRuleOperators:{name:ke.$type,properties:{precedences:{name:ke.precedences,defaultValue:[]}},superTypes:[]},Interface:{name:Ae.$type,properties:{attributes:{name:Ae.attributes,defaultValue:[]},name:{name:Ae.name},superTypes:{name:Ae.superTypes,defaultValue:[],referenceType:U.$type}},superTypes:[U.$type]},Keyword:{name:Me.$type,properties:{cardinality:{name:Me.cardinality},predicate:{name:Me.predicate},value:{name:Me.value}},superTypes:[B.$type]},NamedArgument:{name:Pe.$type,properties:{calledByName:{name:Pe.calledByName,defaultValue:!1},parameter:{name:Pe.parameter,referenceType:Be.$type},value:{name:Pe.value}},superTypes:[]},NegatedToken:{name:Fe.$type,properties:{cardinality:{name:Fe.cardinality},lookahead:{name:Fe.lookahead},parenthesized:{name:Fe.parenthesized,defaultValue:!1},terminal:{name:Fe.terminal}},superTypes:[rt.$type]},Negation:{name:Le.$type,properties:{value:{name:Le.value}},superTypes:[de.$type]},NumberLiteral:{name:ze.$type,properties:{value:{name:ze.value}},superTypes:[vt.$type]},Parameter:{name:Be.$type,properties:{name:{name:Be.name}},superTypes:[]},ParameterReference:{name:Ve.$type,properties:{parameter:{name:Ve.parameter,referenceType:Be.$type}},superTypes:[de.$type]},ParserRule:{name:Ue.$type,properties:{dataType:{name:Ue.dataType},definition:{name:Ue.definition},entry:{name:Ue.entry,defaultValue:!1},fragment:{name:Ue.fragment,defaultValue:!1},inferredType:{name:Ue.inferredType},name:{name:Ue.name},parameters:{name:Ue.parameters,defaultValue:[]},returnType:{name:Ue.returnType,referenceType:U.$type}},superTypes:[H.$type]},ReferenceType:{name:Ge.$type,properties:{isMulti:{name:Ge.isMulti,defaultValue:!1},referenceType:{name:Ge.referenceType}},superTypes:[pt.$type]},RegexToken:{name:Ke.$type,properties:{cardinality:{name:Ke.cardinality},lookahead:{name:Ke.lookahead},parenthesized:{name:Ke.parenthesized,defaultValue:!1},regex:{name:Ke.regex}},superTypes:[rt.$type]},ReturnType:{name:Je.$type,properties:{name:{name:Je.name}},superTypes:[]},RuleCall:{name:Xe.$type,properties:{arguments:{name:Xe.arguments,defaultValue:[]},cardinality:{name:Xe.cardinality},predicate:{name:Xe.predicate},rule:{name:Xe.rule,referenceType:te.$type}},superTypes:[B.$type]},SimpleType:{name:Qe.$type,properties:{primitiveType:{name:Qe.primitiveType},stringType:{name:Qe.stringType},typeRef:{name:Qe.typeRef,referenceType:U.$type}},superTypes:[pt.$type]},StringLiteral:{name:et.$type,properties:{value:{name:et.value}},superTypes:[vt.$type]},TerminalAlternatives:{name:tt.$type,properties:{cardinality:{name:tt.cardinality},elements:{name:tt.elements,defaultValue:[]},lookahead:{name:tt.lookahead},parenthesized:{name:tt.parenthesized,defaultValue:!1}},superTypes:[rt.$type]},TerminalElement:{name:rt.$type,properties:{cardinality:{name:rt.cardinality},lookahead:{name:rt.lookahead},parenthesized:{name:rt.parenthesized,defaultValue:!1}},superTypes:[B.$type]},TerminalGroup:{name:it.$type,properties:{cardinality:{name:it.cardinality},elements:{name:it.elements,defaultValue:[]},lookahead:{name:it.lookahead},parenthesized:{name:it.parenthesized,defaultValue:!1}},superTypes:[rt.$type]},TerminalRule:{name:ot.$type,properties:{definition:{name:ot.definition},fragment:{name:ot.fragment,defaultValue:!1},hidden:{name:ot.hidden,defaultValue:!1},name:{name:ot.name},type:{name:ot.type}},superTypes:[te.$type]},TerminalRuleCall:{name:ct.$type,properties:{cardinality:{name:ct.cardinality},lookahead:{name:ct.lookahead},parenthesized:{name:ct.parenthesized,defaultValue:!1},rule:{name:ct.rule,referenceType:ot.$type}},superTypes:[rt.$type]},Type:{name:ut.$type,properties:{name:{name:ut.name},type:{name:ut.type}},superTypes:[U.$type]},TypeAttribute:{name:ft.$type,properties:{defaultValue:{name:ft.defaultValue},isOptional:{name:ft.isOptional,defaultValue:!1},name:{name:ft.name},type:{name:ft.type}},superTypes:[]},TypeDefinition:{name:pt.$type,properties:{},superTypes:[]},UnionType:{name:mt.$type,properties:{types:{name:mt.types,defaultValue:[]}},superTypes:[pt.$type]},UnorderedGroup:{name:ht.$type,properties:{cardinality:{name:ht.cardinality},elements:{name:ht.elements,defaultValue:[]}},superTypes:[B.$type]},UntilToken:{name:_t.$type,properties:{cardinality:{name:_t.cardinality},lookahead:{name:_t.lookahead},parenthesized:{name:_t.parenthesized,defaultValue:!1},terminal:{name:_t.terminal}},superTypes:[rt.$type]},ValueLiteral:{name:vt.$type,properties:{},superTypes:[]},Wildcard:{name:yt.$type,properties:{cardinality:{name:yt.cardinality},lookahead:{name:yt.lookahead},parenthesized:{name:yt.parenthesized,defaultValue:!1}},superTypes:[rt.$type]}}}},St=new xt;function Ct(e){return new E(e,e=>_(e)?e.content:[],{includeRoot:!0})}function tee(e,t){for(;e.container;)if(e=e.container,e===t)return!0;return!1}function wt(e){return{start:{character:e.startColumn-1,line:e.startLine-1},end:{character:e.endColumn,line:e.endLine-1}}}function Tt(e){if(!e)return;let{offset:t,end:n,range:r}=e;return{range:r,offset:t,end:n,length:n-t}}var Et;(function(e){e[e.Before=0]=`Before`,e[e.After=1]=`After`,e[e.OverlapFront=2]=`OverlapFront`,e[e.OverlapBack=3]=`OverlapBack`,e[e.Inside=4]=`Inside`,e[e.Outside=5]=`Outside`})(Et||={});function Dt(e,t){if(e.end.line<t.start.line||e.end.line===t.start.line&&e.end.character<=t.start.character)return Et.Before;if(e.start.line>t.end.line||e.start.line===t.end.line&&e.start.character>=t.end.character)return Et.After;let n=e.start.line>t.start.line||e.start.line===t.start.line&&e.start.character>=t.start.character,r=e.end.line<t.end.line||e.end.line===t.end.line&&e.end.character<=t.end.character;return n&&r?Et.Inside:n?Et.OverlapBack:r?Et.OverlapFront:Et.Outside}function Ot(e,t){return Dt(e,t)>Et.After}var nee=/^[\w\p{L}]$/u;function ree(e,t){if(e){let n=iee(e,!0);if(n&&kt(n,t))return n;if(y(e)){let n=e.content.findIndex(e=>!e.hidden);for(let r=n-1;r>=0;r--){let n=e.content[r];if(kt(n,t))return n}}}}function kt(e,t){return v(e)&&t.includes(e.tokenType.name)}function iee(e,t=!0){for(;e.container;){let n=e.container,r=n.content.indexOf(e);for(;r>0;){r--;let e=n.content[r];if(t||!e.hidden)return e}e=n}}var At=class extends Error{constructor(e,t){super(e?`${t} at ${e.range.start.line}:${e.range.start.character}`:t)}};function jt(e,t=`Error: Got unexpected value.`){throw Error(t)}function Mt(e){return e.charCodeAt(0)}function Nt(e,t){Array.isArray(e)?e.forEach(function(e){t.push(e)}):t.push(e)}function Pt(e,t){if(e[t]===!0)throw`duplicate flag `+t;e[t],e[t]=!0}function Ft(e){if(e===void 0)throw Error(`Internal Error - Should never get here!`);return!0}function It(){throw Error(`Internal Error - Should never get here!`)}function Lt(e){return e.type===`Character`}var Rt=[];for(let e=Mt(`0`);e<=Mt(`9`);e++)Rt.push(e);var zt=[Mt(`_`)].concat(Rt);for(let e=Mt(`a`);e<=Mt(`z`);e++)zt.push(e);for(let e=Mt(`A`);e<=Mt(`Z`);e++)zt.push(e);var Bt=[Mt(` `),Mt(`\f`),Mt(`
2
2
  `),Mt(`\r`),Mt(` `),Mt(`\v`),Mt(` `),Mt(`\xA0`),Mt(` `),Mt(` `),Mt(` `),Mt(` `),Mt(` `),Mt(` `),Mt(` `),Mt(` `),Mt(` `),Mt(` `),Mt(` `),Mt(` `),Mt(`\u2028`),Mt(`\u2029`),Mt(` `),Mt(` `),Mt(` `),Mt(``)],aee=/[0-9a-fA-F]/,Vt=/[0-9]/,oee=/[1-9]/,Ht=class{constructor(){this.idx=0,this.input=``,this.groupIdx=0}saveState(){return{idx:this.idx,input:this.input,groupIdx:this.groupIdx}}restoreState(e){this.idx=e.idx,this.input=e.input,this.groupIdx=e.groupIdx}pattern(e){this.idx=0,this.input=e,this.groupIdx=0,this.consumeChar(`/`);let t=this.disjunction();this.consumeChar(`/`);let n={type:`Flags`,loc:{begin:this.idx,end:e.length},global:!1,ignoreCase:!1,multiLine:!1,unicode:!1,sticky:!1};for(;this.isRegExpFlag();)switch(this.popChar()){case`g`:Pt(n,`global`);break;case`i`:Pt(n,`ignoreCase`);break;case`m`:Pt(n,`multiLine`);break;case`u`:Pt(n,`unicode`);break;case`y`:Pt(n,`sticky`);break}if(this.idx!==this.input.length)throw Error(`Redundant input: `+this.input.substring(this.idx));return{type:`Pattern`,flags:n,value:t,loc:this.loc(0)}}disjunction(){let e=[],t=this.idx;for(e.push(this.alternative());this.peekChar()===`|`;)this.consumeChar(`|`),e.push(this.alternative());return{type:`Disjunction`,value:e,loc:this.loc(t)}}alternative(){let e=[],t=this.idx;for(;this.isTerm();)e.push(this.term());return{type:`Alternative`,value:e,loc:this.loc(t)}}term(){return this.isAssertion()?this.assertion():this.atom()}assertion(){let e=this.idx;switch(this.popChar()){case`^`:return{type:`StartAnchor`,loc:this.loc(e)};case`$`:return{type:`EndAnchor`,loc:this.loc(e)};case`\\`:switch(this.popChar()){case`b`:return{type:`WordBoundary`,loc:this.loc(e)};case`B`:return{type:`NonWordBoundary`,loc:this.loc(e)}}throw Error(`Invalid Assertion Escape`);case`(`:this.consumeChar(`?`);let t;switch(this.popChar()){case`=`:t=`Lookahead`;break;case`!`:t=`NegativeLookahead`;break;case`<`:switch(this.popChar()){case`=`:t=`Lookbehind`;break;case`!`:t=`NegativeLookbehind`}break}Ft(t);let n=this.disjunction();return this.consumeChar(`)`),{type:t,value:n,loc:this.loc(e)}}return It()}quantifier(e=!1){let t,n=this.idx;switch(this.popChar()){case`*`:t={atLeast:0,atMost:1/0};break;case`+`:t={atLeast:1,atMost:1/0};break;case`?`:t={atLeast:0,atMost:1};break;case`{`:let n=this.integerIncludingZero();switch(this.popChar()){case`}`:t={atLeast:n,atMost:n};break;case`,`:let e;this.isDigit()?(e=this.integerIncludingZero(),t={atLeast:n,atMost:e}):t={atLeast:n,atMost:1/0},this.consumeChar(`}`);break}if(e===!0&&t===void 0)return;Ft(t);break}if(!(e===!0&&t===void 0)&&Ft(t))return this.peekChar(0)===`?`?(this.consumeChar(`?`),t.greedy=!1):t.greedy=!0,t.type=`Quantifier`,t.loc=this.loc(n),t}atom(){let e,t=this.idx;switch(this.peekChar()){case`.`:e=this.dotAll();break;case`\\`:e=this.atomEscape();break;case`[`:e=this.characterClass();break;case`(`:e=this.group();break}return e===void 0&&this.isPatternCharacter()&&(e=this.patternCharacter()),Ft(e)?(e.loc=this.loc(t),this.isQuantifier()&&(e.quantifier=this.quantifier()),e):It()}dotAll(){return this.consumeChar(`.`),{type:`Set`,complement:!0,value:[Mt(`
3
3
  `),Mt(`\r`),Mt(`\u2028`),Mt(`\u2029`)]}}atomEscape(){switch(this.consumeChar(`\\`),this.peekChar()){case`1`:case`2`:case`3`:case`4`:case`5`:case`6`:case`7`:case`8`:case`9`:return this.decimalEscapeAtom();case`d`:case`D`:case`s`:case`S`:case`w`:case`W`:return this.characterClassEscape();case`f`:case`n`:case`r`:case`t`:case`v`:return this.controlEscapeAtom();case`c`:return this.controlLetterEscapeAtom();case`0`:return this.nulCharacterAtom();case`x`:return this.hexEscapeSequenceAtom();case`u`:return this.regExpUnicodeEscapeSequenceAtom();default:return this.identityEscapeAtom()}}decimalEscapeAtom(){return{type:`GroupBackReference`,value:this.positiveInteger()}}characterClassEscape(){let e,t=!1;switch(this.popChar()){case`d`:e=Rt;break;case`D`:e=Rt,t=!0;break;case`s`:e=Bt;break;case`S`:e=Bt,t=!0;break;case`w`:e=zt;break;case`W`:e=zt,t=!0;break}return Ft(e)?{type:`Set`,value:e,complement:t}:It()}controlEscapeAtom(){let e;switch(this.popChar()){case`f`:e=Mt(`\f`);break;case`n`:e=Mt(`
4
4
  `);break;case`r`:e=Mt(`\r`);break;case`t`:e=Mt(` `);break;case`v`:e=Mt(`\v`);break}return Ft(e)?{type:`Character`,value:e}:It()}controlLetterEscapeAtom(){this.consumeChar(`c`);let e=this.popChar();if(/[a-zA-Z]/.test(e)===!1)throw Error(`Invalid `);return{type:`Character`,value:e.toUpperCase().charCodeAt(0)-64}}nulCharacterAtom(){return this.consumeChar(`0`),{type:`Character`,value:Mt(`\0`)}}hexEscapeSequenceAtom(){return this.consumeChar(`x`),this.parseHexDigits(2)}regExpUnicodeEscapeSequenceAtom(){return this.consumeChar(`u`),this.parseHexDigits(4)}identityEscapeAtom(){return{type:`Character`,value:Mt(this.popChar())}}classPatternCharacterAtom(){switch(this.peekChar()){case`
@@ -240,7 +240,7 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error
240
240
  `))}Y(Rk,`preprocessMarkdown`);function zk(e){return e.split(/\\n|\n|<br\s*\/?>/gi).map(e=>e.trim().match(/<[^>]+>|[^\s<>]+/g)?.map(e=>({content:e,type:`normal`}))??[])}Y(zk,`nonMarkdownToLines`);function Bk(e,t={}){let n=Rk(e,t),r=Ak.lexer(n),i=[[]],a=0;function o(e,t=`normal`){e.type===`text`?e.text.split(`
241
241
  `).forEach((e,n)=>{n!==0&&(a++,i.push([])),e.split(` `).forEach(e=>{e=e.replace(/&#39;/g,`'`),e&&i[a].push({content:e,type:t})})}):e.type===`strong`||e.type===`em`?e.tokens.forEach(t=>{o(t,e.type)}):e.type===`html`&&i[a].push({content:e.text,type:`normal`})}return Y(o,`processNode`),r.forEach(e=>{e.type===`paragraph`?e.tokens?.forEach(e=>{o(e)}):e.type===`html`?i[a].push({content:e.text,type:`normal`}):i[a].push({content:e.raw,type:`normal`})}),i}Y(Bk,`markdownToLines`);function Vk(e){return e?`<p>${e.replace(/\\n|\n/g,`<br />`)}</p>`:``}Y(Vk,`nonMarkdownToHTML`);function Hk(e,{markdownAutoWrap:t}={}){let n=Ak.lexer(e);function r(e){return e.type===`text`?t===!1?e.text.replace(/\n */g,`<br/>`).replace(/ /g,`&nbsp;`):e.text.replace(/\n */g,`<br/>`):e.type===`strong`?`<strong>${e.tokens?.map(r).join(``)}</strong>`:e.type===`em`?`<em>${e.tokens?.map(r).join(``)}</em>`:e.type===`paragraph`?`<p>${e.tokens?.map(r).join(``)}</p>`:e.type===`space`?``:e.type===`html`?`${e.text}`:e.type===`escape`?e.text:(X.warn(`Unsupported markdown: ${e.type}`),e.raw)}return Y(r,`output`),n.map(r).join(``)}Y(Hk,`markdownToHTML`);function Uk(e){return Intl.Segmenter?[...new Intl.Segmenter().segment(e)].map(e=>e.segment):[...e]}Y(Uk,`splitTextToChars`);function Wk(e,t){return Gk(e,[],Uk(t.content),t.type)}Y(Wk,`splitWordToFitWidth`);function Gk(e,t,n,r){if(n.length===0)return[{content:t.join(``),type:r},{content:``,type:r}];let[i,...a]=n,o=[...t,i];return e([{content:o.join(``),type:r}])?Gk(e,o,a,r):(t.length===0&&i&&(t.push(i),n.shift()),[{content:t.join(``),type:r},{content:n.join(``),type:r}])}Y(Gk,`splitWordToFitWidthRecursion`);function Kk(e,t){if(e.some(({content:e})=>e.includes(`
242
242
  `)))throw Error(`splitLineToFitWidth does not support newlines in the line`);return qk(e,t)}Y(Kk,`splitLineToFitWidth`);function qk(e,t,n=[],r=[]){if(e.length===0)return r.length>0&&n.push(r),n.length>0?n:[];let i=``;e[0].content===` `&&(i=` `,e.shift());let a=e.shift()??{content:` `,type:`normal`},o=[...r];if(i!==``&&o.push({content:i,type:`normal`}),o.push(a),t(o))return qk(e,t,n,o);if(r.length>0)n.push(r),e.unshift(a);else if(a.content){let[r,i]=Wk(t,a);n.push([r]),i.content&&e.unshift(i)}return qk(e,t,n)}Y(qk,`splitLineToFitWidthRecursion`);function Jk(e,t){t&&e.attr(`style`,t)}Y(Jk,`applyStyle`);var Yk=16384;async function Xk(e,t,n,r,i=!1,a=Sv()){let o=e.append(`foreignObject`);o.attr(`width`,`${Math.min(10*n,Yk)}px`),o.attr(`height`,`${Math.min(10*n,Yk)}px`);let s=o.append(`xhtml:div`),l=Bv(t.label)?await Hv(t.label.replace(Uv.lineBreakRegex,`
243
- `),a):Nv(t.label,a),u=t.isNode?`nodeLabel`:`edgeLabel`,d=s.append(`span`);d.html(l),Jk(d,t.labelStyle),d.attr(`class`,`${u} ${r}`),Jk(s,t.labelStyle),s.style(`display`,`table-cell`),s.style(`white-space`,`nowrap`),s.style(`line-height`,`1.5`),n!==1/0&&(s.style(`max-width`,n+`px`),s.style(`text-align`,`center`)),s.attr(`xmlns`,`http://www.w3.org/1999/xhtml`),i&&s.attr(`class`,`labelBkg`);let f=s.node().getBoundingClientRect();return f.width===n&&(s.style(`display`,`table`),s.style(`white-space`,`break-spaces`),s.style(`width`,n+`px`),f=s.node().getBoundingClientRect()),o.node()}Y(Xk,`addHtmlSpan`);function Zk(e,t,n,r=!1){let i=e.append(`tspan`).attr(`class`,`text-outer-tspan`).attr(`x`,0).attr(`y`,t*n-.1+`em`).attr(`dy`,n+`em`);return r&&i.attr(`text-anchor`,`middle`),i}Y(Zk,`createTspan`);function Qk(e,t,n){let r=e.append(`text`),i=Zk(r,1,t);tA(i,n);let a=i.node().getComputedTextLength();return r.remove(),a}Y(Qk,`computeWidthOfText`);function $k(e,t,n){let r=e.append(`text`),i=Zk(r,1,t);tA(i,[{content:n,type:`normal`}]);let a=i.node()?.getBoundingClientRect();return a&&r.remove(),a}Y($k,`computeDimensionOfText`);function eA(e,t,n,r=!1,i=!1){let a=1.1,o=t.append(`g`),s=o.insert(`rect`).attr(`class`,`background`).attr(`style`,`stroke: none`),l=o.append(`text`).attr(`y`,`-10.1`);i&&l.attr(`text-anchor`,`middle`);let u=0;for(let t of n){let n=Y(t=>Qk(o,a,t)<=e,`checkWidth`),r=n(t)?[t]:Kk(t,n);for(let e of r)tA(Zk(l,u,a,i),e),u++}if(r){let e=l.node().getBBox();return s.attr(`x`,e.x-2).attr(`y`,e.y-2).attr(`width`,e.width+4).attr(`height`,e.height+4),o.node()}else return l.node()}Y(eA,`createFormattedText`);function tA(e,t){e.text(``),t.forEach((t,n)=>{let r=e.append(`tspan`).attr(`font-style`,t.type===`em`?`italic`:`normal`).attr(`class`,`text-inner-tspan`).attr(`font-weight`,t.type===`strong`?`bold`:`normal`);n===0?r.text(t.content):r.text(` `+t.content)})}Y(tA,`updateTextContentAndStyles`);async function nA(e,t={}){let n=[];e.replace(/(fa[bklrs]?):fa-([\w-]+)/g,(e,r,i)=>(n.push((async()=>{let n=`${r}:${i}`;return await Npe(n)?await Lk(n,void 0,{class:`label-icon`}):`<i class='${Nv(e,t).replace(`:`,` `)}'></i>`})()),e));let r=await Promise.all(n);return e.replace(/(fa[bklrs]?):fa-([\w-]+)/g,()=>r.shift()??``)}Y(nA,`replaceIconSubstring`);var rA=Y(async(e,t=``,{style:n=``,isTitle:r=!1,classes:i=``,useHtmlLabels:a=!0,markdown:o=!0,isNode:s=!0,width:l=200,addSvgBackground:u=!1}={},d)=>{if(X.debug(`XYZ createText`,t,n,r,i,a,s,`addSvgBackground: `,u),a){let r=await nA(OO(o?Hk(t,d):Vk(t)),d),a=t.replace(/\\\\/g,`\\`);return await Xk(e,{isNode:s,label:Bv(t)?a:r,labelStyle:n.replace(`fill:`,`color:`)},l,i,u,d)}else{let i=t.replace(/<br\s*\/?>/g,`<br/>`),a=eA(l,e,o?Bk(i.replace(`<br>`,`<br/>`),d):zk(i),t?u:!1,!s);if(s){/stroke:/.exec(n)&&(n=n.replace(`stroke:`,`lineColor:`));let e=n.replace(/stroke:[^;]+;?/g,``).replace(/stroke-width:[^;]+;?/g,``).replace(/fill:[^;]+;?/g,``).replace(/color:/g,`fill:`);bx(a).attr(`style`,e)}else{let e=n.replace(/stroke:[^;]+;?/g,``).replace(/stroke-width:[^;]+;?/g,``).replace(/fill:[^;]+;?/g,``).replace(/background:/g,`fill:`);bx(a).select(`rect`).attr(`style`,e.replace(/background:/g,`fill:`));let t=n.replace(/stroke:[^;]+;?/g,``).replace(/stroke-width:[^;]+;?/g,``).replace(/fill:[^;]+;?/g,``).replace(/color:/g,`fill:`);bx(a).select(`text`).attr(`style`,t)}return r?bx(a).selectAll(`tspan.text-outer-tspan`).classed(`title-row`,!0):bx(a).selectAll(`tspan.text-outer-tspan`).classed(`row`,!0),a}},`createText`);function iA(e,t){e.accDescr&&t.setAccDescription?.(e.accDescr),e.accTitle&&t.setAccTitle?.(e.accTitle),e.title&&t.setDiagramTitle?.(e.title)}Y(iA,`populateCommonDb`);var aA={},Ppe={info:Ih(async()=>{let{createInfoServices:e}=await u(async()=>{let{createInfoServices:e}=await import(`./info-3K5VOQVL-CEkPcChg.js`);return{createInfoServices:e}},[]);aA.info=e().Info.parser.LangiumParser},`info`),packet:Ih(async()=>{let{createPacketServices:e}=await u(async()=>{let{createPacketServices:e}=await import(`./packet-RMMSAZCW-DECxYTOi.js`);return{createPacketServices:e}},[]);aA.packet=e().Packet.parser.LangiumParser},`packet`),pie:Ih(async()=>{let{createPieServices:e}=await u(async()=>{let{createPieServices:e}=await import(`./pie-UPGHQEXC-cjpNfVG5.js`);return{createPieServices:e}},[]);aA.pie=e().Pie.parser.LangiumParser},`pie`),architecture:Ih(async()=>{let{createArchitectureServices:e}=await u(async()=>{let{createArchitectureServices:e}=await import(`./architecture-PBZL5I3N-By4Nv3Gj.js`);return{createArchitectureServices:e}},[]);aA.architecture=e().Architecture.parser.LangiumParser},`architecture`),gitGraph:Ih(async()=>{let{createGitGraphServices:e}=await u(async()=>{let{createGitGraphServices:e}=await import(`./gitGraph-HDMCJU4V-BLXEKVf1.js`);return{createGitGraphServices:e}},[]);aA.gitGraph=e().GitGraph.parser.LangiumParser},`gitGraph`),radar:Ih(async()=>{let{createRadarServices:e}=await u(async()=>{let{createRadarServices:e}=await import(`./radar-KQ55EAFF-Dnpi068b.js`);return{createRadarServices:e}},[]);aA.radar=e().Radar.parser.LangiumParser},`radar`),treemap:Ih(async()=>{let{createTreemapServices:e}=await u(async()=>{let{createTreemapServices:e}=await import(`./treemap-KZPCXAKY-DRyb1eiw.js`);return{createTreemapServices:e}},[]);aA.treemap=e().Treemap.parser.LangiumParser},`treemap`)};async function oA(e,t){let n=Ppe[e];if(!n)throw Error(`Unknown diagram type: ${e}`);aA[e]||await n();let r=aA[e].parse(t);if(r.lexerErrors.length>0||r.parserErrors.length>0)throw new Fpe(r);return r.value}Ih(oA,`parse`);var Fpe=class extends Error{constructor(e){let t=e.lexerErrors.map(e=>`Lexer error on line ${e.line!==void 0&&!isNaN(e.line)?e.line:`?`}, column ${e.column!==void 0&&!isNaN(e.column)?e.column:`?`}: ${e.message}`).join(`
243
+ `),a):Nv(t.label,a),u=t.isNode?`nodeLabel`:`edgeLabel`,d=s.append(`span`);d.html(l),Jk(d,t.labelStyle),d.attr(`class`,`${u} ${r}`),Jk(s,t.labelStyle),s.style(`display`,`table-cell`),s.style(`white-space`,`nowrap`),s.style(`line-height`,`1.5`),n!==1/0&&(s.style(`max-width`,n+`px`),s.style(`text-align`,`center`)),s.attr(`xmlns`,`http://www.w3.org/1999/xhtml`),i&&s.attr(`class`,`labelBkg`);let f=s.node().getBoundingClientRect();return f.width===n&&(s.style(`display`,`table`),s.style(`white-space`,`break-spaces`),s.style(`width`,n+`px`),f=s.node().getBoundingClientRect()),o.node()}Y(Xk,`addHtmlSpan`);function Zk(e,t,n,r=!1){let i=e.append(`tspan`).attr(`class`,`text-outer-tspan`).attr(`x`,0).attr(`y`,t*n-.1+`em`).attr(`dy`,n+`em`);return r&&i.attr(`text-anchor`,`middle`),i}Y(Zk,`createTspan`);function Qk(e,t,n){let r=e.append(`text`),i=Zk(r,1,t);tA(i,n);let a=i.node().getComputedTextLength();return r.remove(),a}Y(Qk,`computeWidthOfText`);function $k(e,t,n){let r=e.append(`text`),i=Zk(r,1,t);tA(i,[{content:n,type:`normal`}]);let a=i.node()?.getBoundingClientRect();return a&&r.remove(),a}Y($k,`computeDimensionOfText`);function eA(e,t,n,r=!1,i=!1){let a=1.1,o=t.append(`g`),s=o.insert(`rect`).attr(`class`,`background`).attr(`style`,`stroke: none`),l=o.append(`text`).attr(`y`,`-10.1`);i&&l.attr(`text-anchor`,`middle`);let u=0;for(let t of n){let n=Y(t=>Qk(o,a,t)<=e,`checkWidth`),r=n(t)?[t]:Kk(t,n);for(let e of r)tA(Zk(l,u,a,i),e),u++}if(r){let e=l.node().getBBox();return s.attr(`x`,e.x-2).attr(`y`,e.y-2).attr(`width`,e.width+4).attr(`height`,e.height+4),o.node()}else return l.node()}Y(eA,`createFormattedText`);function tA(e,t){e.text(``),t.forEach((t,n)=>{let r=e.append(`tspan`).attr(`font-style`,t.type===`em`?`italic`:`normal`).attr(`class`,`text-inner-tspan`).attr(`font-weight`,t.type===`strong`?`bold`:`normal`);n===0?r.text(t.content):r.text(` `+t.content)})}Y(tA,`updateTextContentAndStyles`);async function nA(e,t={}){let n=[];e.replace(/(fa[bklrs]?):fa-([\w-]+)/g,(e,r,i)=>(n.push((async()=>{let n=`${r}:${i}`;return await Npe(n)?await Lk(n,void 0,{class:`label-icon`}):`<i class='${Nv(e,t).replace(`:`,` `)}'></i>`})()),e));let r=await Promise.all(n);return e.replace(/(fa[bklrs]?):fa-([\w-]+)/g,()=>r.shift()??``)}Y(nA,`replaceIconSubstring`);var rA=Y(async(e,t=``,{style:n=``,isTitle:r=!1,classes:i=``,useHtmlLabels:a=!0,markdown:o=!0,isNode:s=!0,width:l=200,addSvgBackground:u=!1}={},d)=>{if(X.debug(`XYZ createText`,t,n,r,i,a,s,`addSvgBackground: `,u),a){let r=await nA(OO(o?Hk(t,d):Vk(t)),d),a=t.replace(/\\\\/g,`\\`);return await Xk(e,{isNode:s,label:Bv(t)?a:r,labelStyle:n.replace(`fill:`,`color:`)},l,i,u,d)}else{let i=t.replace(/<br\s*\/?>/g,`<br/>`),a=eA(l,e,o?Bk(i.replace(`<br>`,`<br/>`),d):zk(i),t?u:!1,!s);if(s){/stroke:/.exec(n)&&(n=n.replace(`stroke:`,`lineColor:`));let e=n.replace(/stroke:[^;]+;?/g,``).replace(/stroke-width:[^;]+;?/g,``).replace(/fill:[^;]+;?/g,``).replace(/color:/g,`fill:`);bx(a).attr(`style`,e)}else{let e=n.replace(/stroke:[^;]+;?/g,``).replace(/stroke-width:[^;]+;?/g,``).replace(/fill:[^;]+;?/g,``).replace(/background:/g,`fill:`);bx(a).select(`rect`).attr(`style`,e.replace(/background:/g,`fill:`));let t=n.replace(/stroke:[^;]+;?/g,``).replace(/stroke-width:[^;]+;?/g,``).replace(/fill:[^;]+;?/g,``).replace(/color:/g,`fill:`);bx(a).select(`text`).attr(`style`,t)}return r?bx(a).selectAll(`tspan.text-outer-tspan`).classed(`title-row`,!0):bx(a).selectAll(`tspan.text-outer-tspan`).classed(`row`,!0),a}},`createText`);function iA(e,t){e.accDescr&&t.setAccDescription?.(e.accDescr),e.accTitle&&t.setAccTitle?.(e.accTitle),e.title&&t.setDiagramTitle?.(e.title)}Y(iA,`populateCommonDb`);var aA={},Ppe={info:Ih(async()=>{let{createInfoServices:e}=await u(async()=>{let{createInfoServices:e}=await import(`./info-3K5VOQVL-fJy9dGkV.js`);return{createInfoServices:e}},[]);aA.info=e().Info.parser.LangiumParser},`info`),packet:Ih(async()=>{let{createPacketServices:e}=await u(async()=>{let{createPacketServices:e}=await import(`./packet-RMMSAZCW-DMi06dVb.js`);return{createPacketServices:e}},[]);aA.packet=e().Packet.parser.LangiumParser},`packet`),pie:Ih(async()=>{let{createPieServices:e}=await u(async()=>{let{createPieServices:e}=await import(`./pie-UPGHQEXC-BECm43s6.js`);return{createPieServices:e}},[]);aA.pie=e().Pie.parser.LangiumParser},`pie`),architecture:Ih(async()=>{let{createArchitectureServices:e}=await u(async()=>{let{createArchitectureServices:e}=await import(`./architecture-PBZL5I3N-DVlAZGlv.js`);return{createArchitectureServices:e}},[]);aA.architecture=e().Architecture.parser.LangiumParser},`architecture`),gitGraph:Ih(async()=>{let{createGitGraphServices:e}=await u(async()=>{let{createGitGraphServices:e}=await import(`./gitGraph-HDMCJU4V-b3n-Tgk6.js`);return{createGitGraphServices:e}},[]);aA.gitGraph=e().GitGraph.parser.LangiumParser},`gitGraph`),radar:Ih(async()=>{let{createRadarServices:e}=await u(async()=>{let{createRadarServices:e}=await import(`./radar-KQ55EAFF-BwqCptkx.js`);return{createRadarServices:e}},[]);aA.radar=e().Radar.parser.LangiumParser},`radar`),treemap:Ih(async()=>{let{createTreemapServices:e}=await u(async()=>{let{createTreemapServices:e}=await import(`./treemap-KZPCXAKY-Da7U3Olf.js`);return{createTreemapServices:e}},[]);aA.treemap=e().Treemap.parser.LangiumParser},`treemap`)};async function oA(e,t){let n=Ppe[e];if(!n)throw Error(`Unknown diagram type: ${e}`);aA[e]||await n();let r=aA[e].parse(t);if(r.lexerErrors.length>0||r.parserErrors.length>0)throw new Fpe(r);return r.value}Ih(oA,`parse`);var Fpe=class extends Error{constructor(e){let t=e.lexerErrors.map(e=>`Lexer error on line ${e.line!==void 0&&!isNaN(e.line)?e.line:`?`}, column ${e.column!==void 0&&!isNaN(e.column)?e.column:`?`}: ${e.message}`).join(`
244
244
  `),n=e.parserErrors.map(e=>`Parse error on line ${e.token.startLine!==void 0&&!isNaN(e.token.startLine)?e.token.startLine:`?`}, column ${e.token.startColumn!==void 0&&!isNaN(e.token.startColumn)?e.token.startColumn:`?`}: ${e.message}`).join(`
245
245
  `);super(`Parsing failed: ${t} ${n}`),this.result=e}static{Ih(this,`MermaidParseError`)}};function sA(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function Ipe(e){if(Array.isArray(e))return e}function Lpe(e){if(Array.isArray(e))return sA(e)}function cA(e,t){if(!(e instanceof t))throw TypeError(`Cannot call a class as a function`)}function Rpe(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,`value`in r&&(r.writable=!0),Object.defineProperty(e,mA(r.key),r)}}function lA(e,t,n){return t&&Rpe(e.prototype,t),Object.defineProperty(e,`prototype`,{writable:!1}),e}function uA(e,t){var n=typeof Symbol<`u`&&e[Symbol.iterator]||e[`@@iterator`];if(!n){if(Array.isArray(e)||(n=gA(e))||t){n&&(e=n);var r=0,i=function(){};return{s:i,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:i}}throw TypeError(`Invalid attempt to iterate non-iterable instance.
246
246
  In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var a,o=!0,s=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return o=e.done,e},e:function(e){s=!0,a=e},f:function(){try{o||n.return==null||n.return()}finally{if(s)throw a}}}}function dA(e,t,n){return(t=mA(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function zpe(e){if(typeof Symbol<`u`&&e[Symbol.iterator]!=null||e[`@@iterator`]!=null)return Array.from(e)}function Bpe(e,t){var n=e==null?null:typeof Symbol<`u`&&e[Symbol.iterator]||e[`@@iterator`];if(n!=null){var r,i,a,o,s=[],l=!0,u=!1;try{if(a=(n=n.call(e)).next,t===0){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=a.call(n)).done)&&(s.push(r.value),s.length!==t);l=!0);}catch(e){u=!0,i=e}finally{try{if(!l&&n.return!=null&&(o=n.return(),Object(o)!==o))return}finally{if(u)throw i}}return s}}function Vpe(){throw TypeError(`Invalid attempt to destructure non-iterable instance.
@@ -1 +1 @@
1
- import{b as e}from"./vendor-markdown-0Mxgxy0L.js";import{t}from"./file-exclamation-point-Baz81y5z.js";import"./api-client-Dvzcc_EO.js";import{G as n}from"./index-CpcqiQOx.js";import{t as r}from"./use-blob-url-e9uTXjv5.js";var i=e();function a({filePath:e,projectName:a}){let{blobUrl:o,error:s}=r(e,a);return s?(0,i.jsxs)(`div`,{className:`flex flex-col items-center justify-center h-full gap-3 text-text-secondary`,children:[(0,i.jsx)(t,{className:`size-10 text-text-subtle`}),(0,i.jsx)(`p`,{className:`text-sm`,children:`Failed to load video.`})]}):o?(0,i.jsx)(`div`,{className:`flex items-center justify-center h-full p-4 bg-surface overflow-auto`,children:(0,i.jsx)(`video`,{src:o,controls:!0,className:`max-w-full max-h-full`})}):(0,i.jsx)(`div`,{className:`flex items-center justify-center h-full`,children:(0,i.jsx)(n,{className:`size-5 animate-spin text-text-subtle`})})}export{a as VideoPreview};
1
+ import{b as e}from"./vendor-markdown-0Mxgxy0L.js";import{t}from"./file-exclamation-point-Baz81y5z.js";import"./api-client-Dvzcc_EO.js";import{G as n}from"./index-zP-OjEml.js";import{t as r}from"./use-blob-url-e9uTXjv5.js";var i=e();function a({filePath:e,projectName:a}){let{blobUrl:o,error:s}=r(e,a);return s?(0,i.jsxs)(`div`,{className:`flex flex-col items-center justify-center h-full gap-3 text-text-secondary`,children:[(0,i.jsx)(t,{className:`size-10 text-text-subtle`}),(0,i.jsx)(`p`,{className:`text-sm`,children:`Failed to load video.`})]}):o?(0,i.jsx)(`div`,{className:`flex items-center justify-center h-full p-4 bg-surface overflow-auto`,children:(0,i.jsx)(`video`,{src:o,controls:!0,className:`max-w-full max-h-full`})}):(0,i.jsx)(`div`,{className:`flex items-center justify-center h-full`,children:(0,i.jsx)(n,{className:`size-5 animate-spin text-text-subtle`})})}export{a as VideoPreview};
@@ -39,9 +39,9 @@
39
39
  <link rel="preconnect" href="https://fonts.googleapis.com" />
40
40
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
41
41
  <link href="https://fonts.googleapis.com/css2?family=Geist+Mono:wght@400;500;600;700&family=Geist:wght@400;500;600;700&display=swap" rel="stylesheet" />
42
- <script type="module" crossorigin src="/assets/index-CpcqiQOx.js"></script>
42
+ <script type="module" crossorigin src="/assets/index-zP-OjEml.js"></script>
43
43
  <link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-FhOqtrmT.js">
44
- <link rel="modulepreload" crossorigin href="/assets/vendor-mermaid-CCmA_6Y0.js">
44
+ <link rel="modulepreload" crossorigin href="/assets/vendor-mermaid-DsfY6y4f.js">
45
45
  <link rel="modulepreload" crossorigin href="/assets/vendor-markdown-0Mxgxy0L.js">
46
46
  <link rel="modulepreload" crossorigin href="/assets/vendor-ui-B-89Uj8i.js">
47
47
  <link rel="modulepreload" crossorigin href="/assets/utils-CTg5uAYR.js">
@@ -50,7 +50,7 @@
50
50
  <link rel="modulepreload" crossorigin href="/assets/input-ozrR2DAV.js">
51
51
  <link rel="modulepreload" crossorigin href="/assets/react-GqWghJ-L.js">
52
52
  <link rel="modulepreload" crossorigin href="/assets/api-client-Dvzcc_EO.js">
53
- <link rel="modulepreload" crossorigin href="/assets/settings-store-B-OmHo3J.js">
53
+ <link rel="modulepreload" crossorigin href="/assets/settings-store-Dvk8Lvwm.js">
54
54
  <link rel="modulepreload" crossorigin href="/assets/scroll-area-7H-Q_k8c.js">
55
55
  <link rel="modulepreload" crossorigin href="/assets/dist-CaKCIxem.js">
56
56
  <link rel="modulepreload" crossorigin href="/assets/refresh-cw-LlbZDJpO.js">
package/dist/web/sw.js CHANGED
@@ -1 +1 @@
1
- try{self[`workbox:core:7.3.0`]&&_()}catch{}var e=(e,...t)=>{let n=e;return t.length>0&&(n+=` :: ${JSON.stringify(t)}`),n},t=class extends Error{constructor(t,n){let r=e(t,n);super(r),this.name=t,this.details=n}},n={googleAnalytics:`googleAnalytics`,precache:`precache-v2`,prefix:`workbox`,runtime:`runtime`,suffix:typeof registration<`u`?registration.scope:``},r=e=>[n.prefix,e,n.suffix].filter(e=>e&&e.length>0).join(`-`),i=e=>{for(let t of Object.keys(n))e(t)},a={updateDetails:e=>{i(t=>{typeof e[t]==`string`&&(n[t]=e[t])})},getGoogleAnalyticsName:e=>e||r(n.googleAnalytics),getPrecacheName:e=>e||r(n.precache),getPrefix:()=>n.prefix,getRuntimeName:e=>e||r(n.runtime),getSuffix:()=>n.suffix};function o(e,t){let n=t();return e.waitUntil(n),n}try{self[`workbox:precaching:7.3.0`]&&_()}catch{}var s=`__WB_REVISION__`;function c(e){if(!e)throw new t(`add-to-cache-list-unexpected-type`,{entry:e});if(typeof e==`string`){let t=new URL(e,location.href);return{cacheKey:t.href,url:t.href}}let{revision:n,url:r}=e;if(!r)throw new t(`add-to-cache-list-unexpected-type`,{entry:e});if(!n){let e=new URL(r,location.href);return{cacheKey:e.href,url:e.href}}let i=new URL(r,location.href),a=new URL(r,location.href);return i.searchParams.set(s,n),{cacheKey:i.href,url:a.href}}var l=class{constructor(){this.updatedURLs=[],this.notUpdatedURLs=[],this.handlerWillStart=async({request:e,state:t})=>{t&&(t.originalRequest=e)},this.cachedResponseWillBeUsed=async({event:e,state:t,cachedResponse:n})=>{if(e.type===`install`&&t&&t.originalRequest&&t.originalRequest instanceof Request){let e=t.originalRequest.url;n?this.notUpdatedURLs.push(e):this.updatedURLs.push(e)}return n}}},u=class{constructor({precacheController:e}){this.cacheKeyWillBeUsed=async({request:e,params:t})=>{let n=t?.cacheKey||this._precacheController.getCacheKeyForURL(e.url);return n?new Request(n,{headers:e.headers}):e},this._precacheController=e}},d;function f(){if(d===void 0){let e=new Response(``);if(`body`in e)try{new Response(e.body),d=!0}catch{d=!1}d=!1}return d}async function p(e,n){let r=null;if(e.url&&(r=new URL(e.url).origin),r!==self.location.origin)throw new t(`cross-origin-copy-response`,{origin:r});let i=e.clone(),a={headers:new Headers(i.headers),status:i.status,statusText:i.statusText},o=n?n(a):a,s=f()?i.body:await i.blob();return new Response(s,o)}var m=e=>new URL(String(e),location.href).href.replace(RegExp(`^${location.origin}`),``);function h(e,t){let n=new URL(e);for(let e of t)n.searchParams.delete(e);return n.href}async function g(e,t,n,r){let i=h(t.url,n);if(t.url===i)return e.match(t,r);let a=Object.assign(Object.assign({},r),{ignoreSearch:!0}),o=await e.keys(t,a);for(let t of o)if(i===h(t.url,n))return e.match(t,r)}var v=class{constructor(){this.promise=new Promise((e,t)=>{this.resolve=e,this.reject=t})}},y=new Set;async function b(){for(let e of y)await e()}function x(e){return new Promise(t=>setTimeout(t,e))}try{self[`workbox:strategies:7.3.0`]&&_()}catch{}function S(e){return typeof e==`string`?new Request(e):e}var C=class{constructor(e,t){this._cacheKeys={},Object.assign(this,t),this.event=t.event,this._strategy=e,this._handlerDeferred=new v,this._extendLifetimePromises=[],this._plugins=[...e.plugins],this._pluginStateMap=new Map;for(let e of this._plugins)this._pluginStateMap.set(e,{});this.event.waitUntil(this._handlerDeferred.promise)}async fetch(e){let{event:n}=this,r=S(e);if(r.mode===`navigate`&&n instanceof FetchEvent&&n.preloadResponse){let e=await n.preloadResponse;if(e)return e}let i=this.hasCallback(`fetchDidFail`)?r.clone():null;try{for(let e of this.iterateCallbacks(`requestWillFetch`))r=await e({request:r.clone(),event:n})}catch(e){if(e instanceof Error)throw new t(`plugin-error-request-will-fetch`,{thrownErrorMessage:e.message})}let a=r.clone();try{let e;e=await fetch(r,r.mode===`navigate`?void 0:this._strategy.fetchOptions);for(let t of this.iterateCallbacks(`fetchDidSucceed`))e=await t({event:n,request:a,response:e});return e}catch(e){throw i&&await this.runCallbacks(`fetchDidFail`,{error:e,event:n,originalRequest:i.clone(),request:a.clone()}),e}}async fetchAndCachePut(e){let t=await this.fetch(e),n=t.clone();return this.waitUntil(this.cachePut(e,n)),t}async cacheMatch(e){let t=S(e),n,{cacheName:r,matchOptions:i}=this._strategy,a=await this.getCacheKey(t,`read`),o=Object.assign(Object.assign({},i),{cacheName:r});n=await caches.match(a,o);for(let e of this.iterateCallbacks(`cachedResponseWillBeUsed`))n=await e({cacheName:r,matchOptions:i,cachedResponse:n,request:a,event:this.event})||void 0;return n}async cachePut(e,n){let r=S(e);await x(0);let i=await this.getCacheKey(r,`write`);if(!n)throw new t(`cache-put-with-no-response`,{url:m(i.url)});let a=await this._ensureResponseSafeToCache(n);if(!a)return!1;let{cacheName:o,matchOptions:s}=this._strategy,c=await self.caches.open(o),l=this.hasCallback(`cacheDidUpdate`),u=l?await g(c,i.clone(),[`__WB_REVISION__`],s):null;try{await c.put(i,l?a.clone():a)}catch(e){if(e instanceof Error)throw e.name===`QuotaExceededError`&&await b(),e}for(let e of this.iterateCallbacks(`cacheDidUpdate`))await e({cacheName:o,oldResponse:u,newResponse:a.clone(),request:i,event:this.event});return!0}async getCacheKey(e,t){let n=`${e.url} | ${t}`;if(!this._cacheKeys[n]){let r=e;for(let e of this.iterateCallbacks(`cacheKeyWillBeUsed`))r=S(await e({mode:t,request:r,event:this.event,params:this.params}));this._cacheKeys[n]=r}return this._cacheKeys[n]}hasCallback(e){for(let t of this._strategy.plugins)if(e in t)return!0;return!1}async runCallbacks(e,t){for(let n of this.iterateCallbacks(e))await n(t)}*iterateCallbacks(e){for(let t of this._strategy.plugins)if(typeof t[e]==`function`){let n=this._pluginStateMap.get(t);yield r=>{let i=Object.assign(Object.assign({},r),{state:n});return t[e](i)}}}waitUntil(e){return this._extendLifetimePromises.push(e),e}async doneWaiting(){for(;this._extendLifetimePromises.length;){let e=this._extendLifetimePromises.splice(0),t=(await Promise.allSettled(e)).find(e=>e.status===`rejected`);if(t)throw t.reason}}destroy(){this._handlerDeferred.resolve(null)}async _ensureResponseSafeToCache(e){let t=e,n=!1;for(let e of this.iterateCallbacks(`cacheWillUpdate`))if(t=await e({request:this.request,response:t,event:this.event})||void 0,n=!0,!t)break;return n||t&&t.status!==200&&(t=void 0),t}},w=class{constructor(e={}){this.cacheName=a.getRuntimeName(e.cacheName),this.plugins=e.plugins||[],this.fetchOptions=e.fetchOptions,this.matchOptions=e.matchOptions}handle(e){let[t]=this.handleAll(e);return t}handleAll(e){e instanceof FetchEvent&&(e={event:e,request:e.request});let t=e.event,n=typeof e.request==`string`?new Request(e.request):e.request,r=`params`in e?e.params:void 0,i=new C(this,{event:t,request:n,params:r}),a=this._getResponse(i,n,t);return[a,this._awaitComplete(a,i,n,t)]}async _getResponse(e,n,r){await e.runCallbacks(`handlerWillStart`,{event:r,request:n});let i;try{if(i=await this._handle(n,e),!i||i.type===`error`)throw new t(`no-response`,{url:n.url})}catch(t){if(t instanceof Error){for(let a of e.iterateCallbacks(`handlerDidError`))if(i=await a({error:t,event:r,request:n}),i)break}if(!i)throw t}for(let t of e.iterateCallbacks(`handlerWillRespond`))i=await t({event:r,request:n,response:i});return i}async _awaitComplete(e,t,n,r){let i,a;try{i=await e}catch{}try{await t.runCallbacks(`handlerDidRespond`,{event:r,request:n,response:i}),await t.doneWaiting()}catch(e){e instanceof Error&&(a=e)}if(await t.runCallbacks(`handlerDidComplete`,{event:r,request:n,response:i,error:a}),t.destroy(),a)throw a}},T=class e extends w{constructor(t={}){t.cacheName=a.getPrecacheName(t.cacheName),super(t),this._fallbackToNetwork=t.fallbackToNetwork!==!1,this.plugins.push(e.copyRedirectedCacheableResponsesPlugin)}async _handle(e,t){return await t.cacheMatch(e)||(t.event&&t.event.type===`install`?await this._handleInstall(e,t):await this._handleFetch(e,t))}async _handleFetch(e,n){let r,i=n.params||{};if(this._fallbackToNetwork){let t=i.integrity,a=e.integrity,o=!a||a===t;r=await n.fetch(new Request(e,{integrity:e.mode===`no-cors`?void 0:a||t})),t&&o&&e.mode!==`no-cors`&&(this._useDefaultCacheabilityPluginIfNeeded(),await n.cachePut(e,r.clone()))}else throw new t(`missing-precache-entry`,{cacheName:this.cacheName,url:e.url});return r}async _handleInstall(e,n){this._useDefaultCacheabilityPluginIfNeeded();let r=await n.fetch(e);if(!await n.cachePut(e,r.clone()))throw new t(`bad-precaching-response`,{url:e.url,status:r.status});return r}_useDefaultCacheabilityPluginIfNeeded(){let t=null,n=0;for(let[r,i]of this.plugins.entries())i!==e.copyRedirectedCacheableResponsesPlugin&&(i===e.defaultPrecacheCacheabilityPlugin&&(t=r),i.cacheWillUpdate&&n++);n===0?this.plugins.push(e.defaultPrecacheCacheabilityPlugin):n>1&&t!==null&&this.plugins.splice(t,1)}};T.defaultPrecacheCacheabilityPlugin={async cacheWillUpdate({response:e}){return!e||e.status>=400?null:e}},T.copyRedirectedCacheableResponsesPlugin={async cacheWillUpdate({response:e}){return e.redirected?await p(e):e}};var E=class{constructor({cacheName:e,plugins:t=[],fallbackToNetwork:n=!0}={}){this._urlsToCacheKeys=new Map,this._urlsToCacheModes=new Map,this._cacheKeysToIntegrities=new Map,this._strategy=new T({cacheName:a.getPrecacheName(e),plugins:[...t,new u({precacheController:this})],fallbackToNetwork:n}),this.install=this.install.bind(this),this.activate=this.activate.bind(this)}get strategy(){return this._strategy}precache(e){this.addToCacheList(e),this._installAndActiveListenersAdded||=(self.addEventListener(`install`,this.install),self.addEventListener(`activate`,this.activate),!0)}addToCacheList(e){let n=[];for(let r of e){typeof r==`string`?n.push(r):r&&r.revision===void 0&&n.push(r.url);let{cacheKey:e,url:i}=c(r),a=typeof r!=`string`&&r.revision?`reload`:`default`;if(this._urlsToCacheKeys.has(i)&&this._urlsToCacheKeys.get(i)!==e)throw new t(`add-to-cache-list-conflicting-entries`,{firstEntry:this._urlsToCacheKeys.get(i),secondEntry:e});if(typeof r!=`string`&&r.integrity){if(this._cacheKeysToIntegrities.has(e)&&this._cacheKeysToIntegrities.get(e)!==r.integrity)throw new t(`add-to-cache-list-conflicting-integrities`,{url:i});this._cacheKeysToIntegrities.set(e,r.integrity)}if(this._urlsToCacheKeys.set(i,e),this._urlsToCacheModes.set(i,a),n.length>0){let e=`Workbox is precaching URLs without revision info: ${n.join(`, `)}\nThis is generally NOT safe. Learn more at https://bit.ly/wb-precache`;console.warn(e)}}}install(e){return o(e,async()=>{let t=new l;this.strategy.plugins.push(t);for(let[t,n]of this._urlsToCacheKeys){let r=this._cacheKeysToIntegrities.get(n),i=this._urlsToCacheModes.get(t),a=new Request(t,{integrity:r,cache:i,credentials:`same-origin`});await Promise.all(this.strategy.handleAll({params:{cacheKey:n},request:a,event:e}))}let{updatedURLs:n,notUpdatedURLs:r}=t;return{updatedURLs:n,notUpdatedURLs:r}})}activate(e){return o(e,async()=>{let e=await self.caches.open(this.strategy.cacheName),t=await e.keys(),n=new Set(this._urlsToCacheKeys.values()),r=[];for(let i of t)n.has(i.url)||(await e.delete(i),r.push(i.url));return{deletedURLs:r}})}getURLsToCacheKeys(){return this._urlsToCacheKeys}getCachedURLs(){return[...this._urlsToCacheKeys.keys()]}getCacheKeyForURL(e){let t=new URL(e,location.href);return this._urlsToCacheKeys.get(t.href)}getIntegrityForCacheKey(e){return this._cacheKeysToIntegrities.get(e)}async matchPrecache(e){let t=e instanceof Request?e.url:e,n=this.getCacheKeyForURL(t);if(n)return(await self.caches.open(this.strategy.cacheName)).match(n)}createHandlerBoundToURL(e){let n=this.getCacheKeyForURL(e);if(!n)throw new t(`non-precached-url`,{url:e});return t=>(t.request=new Request(e),t.params=Object.assign({cacheKey:n},t.params),this.strategy.handle(t))}},D,O=()=>(D||=new E,D);try{self[`workbox:routing:7.3.0`]&&_()}catch{}var k=e=>e&&typeof e==`object`?e:{handle:e},A=class{constructor(e,t,n=`GET`){this.handler=k(t),this.match=e,this.method=n}setCatchHandler(e){this.catchHandler=k(e)}},j=class extends A{constructor(e,t,n){super(({url:t})=>{let n=e.exec(t.href);if(n&&!(t.origin!==location.origin&&n.index!==0))return n.slice(1)},t,n)}},M=class{constructor(){this._routes=new Map,this._defaultHandlerMap=new Map}get routes(){return this._routes}addFetchListener(){self.addEventListener(`fetch`,(e=>{let{request:t}=e,n=this.handleRequest({request:t,event:e});n&&e.respondWith(n)}))}addCacheListener(){self.addEventListener(`message`,(e=>{if(e.data&&e.data.type===`CACHE_URLS`){let{payload:t}=e.data,n=Promise.all(t.urlsToCache.map(t=>{typeof t==`string`&&(t=[t]);let n=new Request(...t);return this.handleRequest({request:n,event:e})}));e.waitUntil(n),e.ports&&e.ports[0]&&n.then(()=>e.ports[0].postMessage(!0))}}))}handleRequest({request:e,event:t}){let n=new URL(e.url,location.href);if(!n.protocol.startsWith(`http`))return;let r=n.origin===location.origin,{params:i,route:a}=this.findMatchingRoute({event:t,request:e,sameOrigin:r,url:n}),o=a&&a.handler,s=e.method;if(!o&&this._defaultHandlerMap.has(s)&&(o=this._defaultHandlerMap.get(s)),!o)return;let c;try{c=o.handle({url:n,request:e,event:t,params:i})}catch(e){c=Promise.reject(e)}let l=a&&a.catchHandler;return c instanceof Promise&&(this._catchHandler||l)&&(c=c.catch(async r=>{if(l)try{return await l.handle({url:n,request:e,event:t,params:i})}catch(e){e instanceof Error&&(r=e)}if(this._catchHandler)return this._catchHandler.handle({url:n,request:e,event:t});throw r})),c}findMatchingRoute({url:e,sameOrigin:t,request:n,event:r}){let i=this._routes.get(n.method)||[];for(let a of i){let i,o=a.match({url:e,sameOrigin:t,request:n,event:r});if(o)return i=o,(Array.isArray(i)&&i.length===0||o.constructor===Object&&Object.keys(o).length===0||typeof o==`boolean`)&&(i=void 0),{route:a,params:i}}return{}}setDefaultHandler(e,t=`GET`){this._defaultHandlerMap.set(t,k(e))}setCatchHandler(e){this._catchHandler=k(e)}registerRoute(e){this._routes.has(e.method)||this._routes.set(e.method,[]),this._routes.get(e.method).push(e)}unregisterRoute(e){if(!this._routes.has(e.method))throw new t(`unregister-route-but-not-found-with-method`,{method:e.method});let n=this._routes.get(e.method).indexOf(e);if(n>-1)this._routes.get(e.method).splice(n,1);else throw new t(`unregister-route-route-not-registered`)}},N,P=()=>(N||(N=new M,N.addFetchListener(),N.addCacheListener()),N);function F(e,n,r){let i;if(typeof e==`string`){let t=new URL(e,location.href);i=new A(({url:e})=>e.href===t.href,n,r)}else if(e instanceof RegExp)i=new j(e,n,r);else if(typeof e==`function`)i=new A(e,n,r);else if(e instanceof A)i=e;else throw new t(`unsupported-route-type`,{moduleName:`workbox-routing`,funcName:`registerRoute`,paramName:`capture`});return P().registerRoute(i),i}function I(e,t=[]){for(let n of[...e.searchParams.keys()])t.some(e=>e.test(n))&&e.searchParams.delete(n);return e}function*L(e,{ignoreURLParametersMatching:t=[/^utm_/,/^fbclid$/],directoryIndex:n=`index.html`,cleanURLs:r=!0,urlManipulation:i}={}){let a=new URL(e,location.href);a.hash=``,yield a.href;let o=I(a,t);if(yield o.href,n&&o.pathname.endsWith(`/`)){let e=new URL(o.href);e.pathname+=n,yield e.href}if(r){let e=new URL(o.href);e.pathname+=`.html`,yield e.href}if(i){let e=i({url:a});for(let t of e)yield t.href}}var R=class extends A{constructor(e,t){super(({request:n})=>{let r=e.getURLsToCacheKeys();for(let i of L(n.url,t)){let t=r.get(i);if(t)return{cacheKey:t,integrity:e.getIntegrityForCacheKey(t)}}},e.strategy)}};function z(e){F(new R(O(),e))}function B(e){O().precache(e)}function V(e,t){B(e),z(t)}V([{"revision":"1872c500de691dce40960bb85481de07","url":"registerSW.js"},{"revision":"a0fb34fc84eb148d51812cd62669f20d","url":"icon-192.svg"},{"revision":"754be60fd595e9b890e646393f190464","url":"index.html"},{"revision":"a0fb34fc84eb148d51812cd62669f20d","url":"icon-512.svg"},{"revision":null,"url":"assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2"},{"revision":null,"url":"assets/KaTeX_AMS-Regular-BQhdFMY1.woff2"},{"revision":null,"url":"assets/use-blob-url-e9uTXjv5.js"},{"revision":null,"url":"assets/vendor-xterm-CU2c3f0A.js"},{"revision":null,"url":"assets/settings-store-B-OmHo3J.js"},{"revision":null,"url":"assets/KaTeX_Main-Regular-B22Nviop.woff2"},{"revision":null,"url":"assets/refresh-cw-LlbZDJpO.js"},{"revision":null,"url":"assets/pdf-preview-DvgyxJX7.js"},{"revision":null,"url":"assets/react-GqWghJ-L.js"},{"revision":null,"url":"assets/file-exclamation-point-Baz81y5z.js"},{"revision":null,"url":"assets/markdown-renderer-k3EA9XmF.js"},{"revision":null,"url":"assets/github.min-D2BCvnWf.css"},{"revision":null,"url":"assets/database-DOWH9-Vv.js"},{"revision":null,"url":"assets/postgres-viewer-C1w0tqQw.js"},{"revision":null,"url":"assets/katex-BuytEdO1.js"},{"revision":null,"url":"assets/conflict-editor-kaAZUFD5.js"},{"revision":null,"url":"assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2"},{"revision":null,"url":"assets/glide-data-grid-nthEL3fk.css"},{"revision":null,"url":"assets/pie-UPGHQEXC-cjpNfVG5.js"},{"revision":null,"url":"assets/code-editor-BofKrbM8.js"},{"revision":null,"url":"assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2"},{"revision":null,"url":"assets/packet-RMMSAZCW-DECxYTOi.js"},{"revision":null,"url":"assets/api-settings-D0_eiIYv.js"},{"revision":null,"url":"assets/vendor-markdown-0Mxgxy0L.js"},{"revision":null,"url":"assets/ai-settings-section-ysK_Eixc.js"},{"revision":null,"url":"assets/database-viewer-P38Vxzkx.js"},{"revision":null,"url":"assets/api-client-Dvzcc_EO.js"},{"revision":null,"url":"assets/KaTeX_Main-Italic-NWA7e6Wa.woff2"},{"revision":null,"url":"assets/data-grid-overlay-editor-BjjuE4-G.js"},{"revision":null,"url":"assets/video-preview-BU7tibc4.js"},{"revision":null,"url":"assets/csv-preview-7TsYBQI6.js"},{"revision":null,"url":"assets/tab-store-0rGchMXr.js"},{"revision":null,"url":"assets/port-forwarding-tab-CUkU6wac.js"},{"revision":null,"url":"assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2"},{"revision":null,"url":"assets/sql-query-editor-46hLU7MI.js"},{"revision":null,"url":"assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2"},{"revision":null,"url":"assets/sqlite-viewer-DrLi8P6y.js"},{"revision":null,"url":"assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2"},{"revision":null,"url":"assets/x-CG-_0yIW.js"},{"revision":null,"url":"assets/csv-parser-Dly5nqE1.js"},{"revision":null,"url":"assets/index-CpcqiQOx.js"},{"revision":null,"url":"assets/rolldown-runtime-FhOqtrmT.js"},{"revision":null,"url":"assets/data-grid-types-BTQHYBUh.js"},{"revision":null,"url":"assets/dist-DGSkE2Ml.js"},{"revision":null,"url":"assets/code-DGBecc50.js"},{"revision":null,"url":"assets/KaTeX_Math-Italic-t53AETM-.woff2"},{"revision":null,"url":"assets/github-dark-dimmed.min-BrpRStFV.css"},{"revision":null,"url":"assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2"},{"revision":null,"url":"assets/KaTeX_Script-Regular-D3wIWfF6.woff2"},{"revision":null,"url":"assets/glide-data-grid-D5D1N3L7.js"},{"revision":null,"url":"assets/text-wrap-BV-R4Vvy.js"},{"revision":null,"url":"assets/arrow-up-Rcw6_KKu.js"},{"revision":null,"url":"assets/vendor-mermaid-CCmA_6Y0.js"},{"revision":null,"url":"assets/file-store-BrbCNyLm.js"},{"revision":null,"url":"assets/sparkles-fWUT5Vzq.js"},{"revision":null,"url":"assets/dist-0kPgRaVx.js"},{"revision":null,"url":"assets/index-COOnLKGB.css"},{"revision":null,"url":"assets/treemap-KZPCXAKY-DRyb1eiw.js"},{"revision":null,"url":"assets/utils-CTg5uAYR.js"},{"revision":null,"url":"assets/KaTeX_Main-Bold-Cx986IdX.woff2"},{"revision":null,"url":"assets/KaTeX_Size2-Regular-Dy4dx90m.woff2"},{"revision":null,"url":"assets/chat-tab-lp_mVSG-.js"},{"revision":null,"url":"assets/image-preview-C9osjEPa.js"},{"revision":null,"url":"assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2"},{"revision":null,"url":"assets/KaTeX_Size1-Regular-mCD8mA8B.woff2"},{"revision":null,"url":"assets/esm-zjerHxpO.js"},{"revision":null,"url":"assets/use-monaco-theme-DgzxiZS5.js"},{"revision":null,"url":"assets/scroll-area-7H-Q_k8c.js"},{"revision":null,"url":"assets/architecture-PBZL5I3N-By4Nv3Gj.js"},{"revision":null,"url":"assets/createLucideIcon-BjHrJDVb.js"},{"revision":null,"url":"assets/radar-KQ55EAFF-Dnpi068b.js"},{"revision":null,"url":"assets/dist-CaKCIxem.js"},{"revision":null,"url":"assets/chevron-right-DnHIvvcy.js"},{"revision":null,"url":"assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2"},{"revision":null,"url":"assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2"},{"revision":null,"url":"assets/table-tf7pRkME.js"},{"revision":null,"url":"assets/gitGraph-HDMCJU4V-BLXEKVf1.js"},{"revision":null,"url":"assets/number-overlay-editor-BoRxunFN.js"},{"revision":null,"url":"assets/vendor-ui-B-89Uj8i.js"},{"revision":null,"url":"assets/terminal-tab-DqA3fEoQ.js"},{"revision":null,"url":"assets/extension-webview-5s2MUx38.js"},{"revision":null,"url":"assets/input-ozrR2DAV.js"},{"revision":null,"url":"assets/vendor-xterm-BrP-ENHg.css"},{"revision":null,"url":"assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2"},{"revision":null,"url":"assets/info-3K5VOQVL-CEkPcChg.js"},{"revision":null,"url":"assets/settings-tab-D0zKyVwg.js"},{"revision":null,"url":"assets/lib-DQHnkzGy.js"},{"revision":null,"url":"assets/keybindings-store-COxqSoML.js"},{"revision":null,"url":"assets/audio-preview-DISP-2AE.js"},{"revision":null,"url":"assets/diff-viewer-DlJfbgNJ.js"},{"revision":"d0f94ce046cf8cf09605ee7664dac557","url":"monacoeditorwork/html.worker.bundle.js"},{"revision":"a424156a79b9c1b907db93aa3180585a","url":"monacoeditorwork/editor.worker.bundle.js"},{"revision":"b3a7f967560c9816492a1567b3f7f0dc","url":"monacoeditorwork/css.worker.bundle.js"},{"revision":"a5d8a1acfc29c2a4c882a54ffc93def3","url":"monacoeditorwork/json.worker.bundle.js"},{"revision":"948e060affb598c339be40d69e1f6f9c","url":"monacoeditorwork/ts.worker.bundle.js"},{"revision":"79c8870653c8f419f2e3323085e1f4be","url":"manifest.webmanifest"}]),self.addEventListener(`push`,e=>{e.waitUntil(self.clients.matchAll({type:`window`,includeUncontrolled:!0}).then(t=>{if(t.some(e=>e.visibilityState===`visible`))return;let n=e.data?.json()??{title:`PPM`,body:`Chat completed`};return self.registration.showNotification(n.title,{body:n.body,icon:`/icon-192.png`,badge:`/icon-192.png`,tag:`ppm-chat-done`,silent:!1,data:{url:self.location.origin}})}))}),self.addEventListener(`notificationclick`,e=>{e.notification.close(),e.waitUntil(self.clients.matchAll({type:`window`,includeUncontrolled:!0}).then(t=>{for(let e of t)if(e.url.includes(self.location.origin)&&`focus`in e)return e.focus();return self.clients.openWindow(e.notification.data?.url||`/`)}))});
1
+ try{self[`workbox:core:7.3.0`]&&_()}catch{}var e=(e,...t)=>{let n=e;return t.length>0&&(n+=` :: ${JSON.stringify(t)}`),n},t=class extends Error{constructor(t,n){let r=e(t,n);super(r),this.name=t,this.details=n}},n={googleAnalytics:`googleAnalytics`,precache:`precache-v2`,prefix:`workbox`,runtime:`runtime`,suffix:typeof registration<`u`?registration.scope:``},r=e=>[n.prefix,e,n.suffix].filter(e=>e&&e.length>0).join(`-`),i=e=>{for(let t of Object.keys(n))e(t)},a={updateDetails:e=>{i(t=>{typeof e[t]==`string`&&(n[t]=e[t])})},getGoogleAnalyticsName:e=>e||r(n.googleAnalytics),getPrecacheName:e=>e||r(n.precache),getPrefix:()=>n.prefix,getRuntimeName:e=>e||r(n.runtime),getSuffix:()=>n.suffix};function o(e,t){let n=t();return e.waitUntil(n),n}try{self[`workbox:precaching:7.3.0`]&&_()}catch{}var s=`__WB_REVISION__`;function c(e){if(!e)throw new t(`add-to-cache-list-unexpected-type`,{entry:e});if(typeof e==`string`){let t=new URL(e,location.href);return{cacheKey:t.href,url:t.href}}let{revision:n,url:r}=e;if(!r)throw new t(`add-to-cache-list-unexpected-type`,{entry:e});if(!n){let e=new URL(r,location.href);return{cacheKey:e.href,url:e.href}}let i=new URL(r,location.href),a=new URL(r,location.href);return i.searchParams.set(s,n),{cacheKey:i.href,url:a.href}}var l=class{constructor(){this.updatedURLs=[],this.notUpdatedURLs=[],this.handlerWillStart=async({request:e,state:t})=>{t&&(t.originalRequest=e)},this.cachedResponseWillBeUsed=async({event:e,state:t,cachedResponse:n})=>{if(e.type===`install`&&t&&t.originalRequest&&t.originalRequest instanceof Request){let e=t.originalRequest.url;n?this.notUpdatedURLs.push(e):this.updatedURLs.push(e)}return n}}},u=class{constructor({precacheController:e}){this.cacheKeyWillBeUsed=async({request:e,params:t})=>{let n=t?.cacheKey||this._precacheController.getCacheKeyForURL(e.url);return n?new Request(n,{headers:e.headers}):e},this._precacheController=e}},d;function f(){if(d===void 0){let e=new Response(``);if(`body`in e)try{new Response(e.body),d=!0}catch{d=!1}d=!1}return d}async function p(e,n){let r=null;if(e.url&&(r=new URL(e.url).origin),r!==self.location.origin)throw new t(`cross-origin-copy-response`,{origin:r});let i=e.clone(),a={headers:new Headers(i.headers),status:i.status,statusText:i.statusText},o=n?n(a):a,s=f()?i.body:await i.blob();return new Response(s,o)}var m=e=>new URL(String(e),location.href).href.replace(RegExp(`^${location.origin}`),``);function h(e,t){let n=new URL(e);for(let e of t)n.searchParams.delete(e);return n.href}async function g(e,t,n,r){let i=h(t.url,n);if(t.url===i)return e.match(t,r);let a=Object.assign(Object.assign({},r),{ignoreSearch:!0}),o=await e.keys(t,a);for(let t of o)if(i===h(t.url,n))return e.match(t,r)}var v=class{constructor(){this.promise=new Promise((e,t)=>{this.resolve=e,this.reject=t})}},y=new Set;async function b(){for(let e of y)await e()}function x(e){return new Promise(t=>setTimeout(t,e))}try{self[`workbox:strategies:7.3.0`]&&_()}catch{}function S(e){return typeof e==`string`?new Request(e):e}var C=class{constructor(e,t){this._cacheKeys={},Object.assign(this,t),this.event=t.event,this._strategy=e,this._handlerDeferred=new v,this._extendLifetimePromises=[],this._plugins=[...e.plugins],this._pluginStateMap=new Map;for(let e of this._plugins)this._pluginStateMap.set(e,{});this.event.waitUntil(this._handlerDeferred.promise)}async fetch(e){let{event:n}=this,r=S(e);if(r.mode===`navigate`&&n instanceof FetchEvent&&n.preloadResponse){let e=await n.preloadResponse;if(e)return e}let i=this.hasCallback(`fetchDidFail`)?r.clone():null;try{for(let e of this.iterateCallbacks(`requestWillFetch`))r=await e({request:r.clone(),event:n})}catch(e){if(e instanceof Error)throw new t(`plugin-error-request-will-fetch`,{thrownErrorMessage:e.message})}let a=r.clone();try{let e;e=await fetch(r,r.mode===`navigate`?void 0:this._strategy.fetchOptions);for(let t of this.iterateCallbacks(`fetchDidSucceed`))e=await t({event:n,request:a,response:e});return e}catch(e){throw i&&await this.runCallbacks(`fetchDidFail`,{error:e,event:n,originalRequest:i.clone(),request:a.clone()}),e}}async fetchAndCachePut(e){let t=await this.fetch(e),n=t.clone();return this.waitUntil(this.cachePut(e,n)),t}async cacheMatch(e){let t=S(e),n,{cacheName:r,matchOptions:i}=this._strategy,a=await this.getCacheKey(t,`read`),o=Object.assign(Object.assign({},i),{cacheName:r});n=await caches.match(a,o);for(let e of this.iterateCallbacks(`cachedResponseWillBeUsed`))n=await e({cacheName:r,matchOptions:i,cachedResponse:n,request:a,event:this.event})||void 0;return n}async cachePut(e,n){let r=S(e);await x(0);let i=await this.getCacheKey(r,`write`);if(!n)throw new t(`cache-put-with-no-response`,{url:m(i.url)});let a=await this._ensureResponseSafeToCache(n);if(!a)return!1;let{cacheName:o,matchOptions:s}=this._strategy,c=await self.caches.open(o),l=this.hasCallback(`cacheDidUpdate`),u=l?await g(c,i.clone(),[`__WB_REVISION__`],s):null;try{await c.put(i,l?a.clone():a)}catch(e){if(e instanceof Error)throw e.name===`QuotaExceededError`&&await b(),e}for(let e of this.iterateCallbacks(`cacheDidUpdate`))await e({cacheName:o,oldResponse:u,newResponse:a.clone(),request:i,event:this.event});return!0}async getCacheKey(e,t){let n=`${e.url} | ${t}`;if(!this._cacheKeys[n]){let r=e;for(let e of this.iterateCallbacks(`cacheKeyWillBeUsed`))r=S(await e({mode:t,request:r,event:this.event,params:this.params}));this._cacheKeys[n]=r}return this._cacheKeys[n]}hasCallback(e){for(let t of this._strategy.plugins)if(e in t)return!0;return!1}async runCallbacks(e,t){for(let n of this.iterateCallbacks(e))await n(t)}*iterateCallbacks(e){for(let t of this._strategy.plugins)if(typeof t[e]==`function`){let n=this._pluginStateMap.get(t);yield r=>{let i=Object.assign(Object.assign({},r),{state:n});return t[e](i)}}}waitUntil(e){return this._extendLifetimePromises.push(e),e}async doneWaiting(){for(;this._extendLifetimePromises.length;){let e=this._extendLifetimePromises.splice(0),t=(await Promise.allSettled(e)).find(e=>e.status===`rejected`);if(t)throw t.reason}}destroy(){this._handlerDeferred.resolve(null)}async _ensureResponseSafeToCache(e){let t=e,n=!1;for(let e of this.iterateCallbacks(`cacheWillUpdate`))if(t=await e({request:this.request,response:t,event:this.event})||void 0,n=!0,!t)break;return n||t&&t.status!==200&&(t=void 0),t}},w=class{constructor(e={}){this.cacheName=a.getRuntimeName(e.cacheName),this.plugins=e.plugins||[],this.fetchOptions=e.fetchOptions,this.matchOptions=e.matchOptions}handle(e){let[t]=this.handleAll(e);return t}handleAll(e){e instanceof FetchEvent&&(e={event:e,request:e.request});let t=e.event,n=typeof e.request==`string`?new Request(e.request):e.request,r=`params`in e?e.params:void 0,i=new C(this,{event:t,request:n,params:r}),a=this._getResponse(i,n,t);return[a,this._awaitComplete(a,i,n,t)]}async _getResponse(e,n,r){await e.runCallbacks(`handlerWillStart`,{event:r,request:n});let i;try{if(i=await this._handle(n,e),!i||i.type===`error`)throw new t(`no-response`,{url:n.url})}catch(t){if(t instanceof Error){for(let a of e.iterateCallbacks(`handlerDidError`))if(i=await a({error:t,event:r,request:n}),i)break}if(!i)throw t}for(let t of e.iterateCallbacks(`handlerWillRespond`))i=await t({event:r,request:n,response:i});return i}async _awaitComplete(e,t,n,r){let i,a;try{i=await e}catch{}try{await t.runCallbacks(`handlerDidRespond`,{event:r,request:n,response:i}),await t.doneWaiting()}catch(e){e instanceof Error&&(a=e)}if(await t.runCallbacks(`handlerDidComplete`,{event:r,request:n,response:i,error:a}),t.destroy(),a)throw a}},T=class e extends w{constructor(t={}){t.cacheName=a.getPrecacheName(t.cacheName),super(t),this._fallbackToNetwork=t.fallbackToNetwork!==!1,this.plugins.push(e.copyRedirectedCacheableResponsesPlugin)}async _handle(e,t){return await t.cacheMatch(e)||(t.event&&t.event.type===`install`?await this._handleInstall(e,t):await this._handleFetch(e,t))}async _handleFetch(e,n){let r,i=n.params||{};if(this._fallbackToNetwork){let t=i.integrity,a=e.integrity,o=!a||a===t;r=await n.fetch(new Request(e,{integrity:e.mode===`no-cors`?void 0:a||t})),t&&o&&e.mode!==`no-cors`&&(this._useDefaultCacheabilityPluginIfNeeded(),await n.cachePut(e,r.clone()))}else throw new t(`missing-precache-entry`,{cacheName:this.cacheName,url:e.url});return r}async _handleInstall(e,n){this._useDefaultCacheabilityPluginIfNeeded();let r=await n.fetch(e);if(!await n.cachePut(e,r.clone()))throw new t(`bad-precaching-response`,{url:e.url,status:r.status});return r}_useDefaultCacheabilityPluginIfNeeded(){let t=null,n=0;for(let[r,i]of this.plugins.entries())i!==e.copyRedirectedCacheableResponsesPlugin&&(i===e.defaultPrecacheCacheabilityPlugin&&(t=r),i.cacheWillUpdate&&n++);n===0?this.plugins.push(e.defaultPrecacheCacheabilityPlugin):n>1&&t!==null&&this.plugins.splice(t,1)}};T.defaultPrecacheCacheabilityPlugin={async cacheWillUpdate({response:e}){return!e||e.status>=400?null:e}},T.copyRedirectedCacheableResponsesPlugin={async cacheWillUpdate({response:e}){return e.redirected?await p(e):e}};var E=class{constructor({cacheName:e,plugins:t=[],fallbackToNetwork:n=!0}={}){this._urlsToCacheKeys=new Map,this._urlsToCacheModes=new Map,this._cacheKeysToIntegrities=new Map,this._strategy=new T({cacheName:a.getPrecacheName(e),plugins:[...t,new u({precacheController:this})],fallbackToNetwork:n}),this.install=this.install.bind(this),this.activate=this.activate.bind(this)}get strategy(){return this._strategy}precache(e){this.addToCacheList(e),this._installAndActiveListenersAdded||=(self.addEventListener(`install`,this.install),self.addEventListener(`activate`,this.activate),!0)}addToCacheList(e){let n=[];for(let r of e){typeof r==`string`?n.push(r):r&&r.revision===void 0&&n.push(r.url);let{cacheKey:e,url:i}=c(r),a=typeof r!=`string`&&r.revision?`reload`:`default`;if(this._urlsToCacheKeys.has(i)&&this._urlsToCacheKeys.get(i)!==e)throw new t(`add-to-cache-list-conflicting-entries`,{firstEntry:this._urlsToCacheKeys.get(i),secondEntry:e});if(typeof r!=`string`&&r.integrity){if(this._cacheKeysToIntegrities.has(e)&&this._cacheKeysToIntegrities.get(e)!==r.integrity)throw new t(`add-to-cache-list-conflicting-integrities`,{url:i});this._cacheKeysToIntegrities.set(e,r.integrity)}if(this._urlsToCacheKeys.set(i,e),this._urlsToCacheModes.set(i,a),n.length>0){let e=`Workbox is precaching URLs without revision info: ${n.join(`, `)}\nThis is generally NOT safe. Learn more at https://bit.ly/wb-precache`;console.warn(e)}}}install(e){return o(e,async()=>{let t=new l;this.strategy.plugins.push(t);for(let[t,n]of this._urlsToCacheKeys){let r=this._cacheKeysToIntegrities.get(n),i=this._urlsToCacheModes.get(t),a=new Request(t,{integrity:r,cache:i,credentials:`same-origin`});await Promise.all(this.strategy.handleAll({params:{cacheKey:n},request:a,event:e}))}let{updatedURLs:n,notUpdatedURLs:r}=t;return{updatedURLs:n,notUpdatedURLs:r}})}activate(e){return o(e,async()=>{let e=await self.caches.open(this.strategy.cacheName),t=await e.keys(),n=new Set(this._urlsToCacheKeys.values()),r=[];for(let i of t)n.has(i.url)||(await e.delete(i),r.push(i.url));return{deletedURLs:r}})}getURLsToCacheKeys(){return this._urlsToCacheKeys}getCachedURLs(){return[...this._urlsToCacheKeys.keys()]}getCacheKeyForURL(e){let t=new URL(e,location.href);return this._urlsToCacheKeys.get(t.href)}getIntegrityForCacheKey(e){return this._cacheKeysToIntegrities.get(e)}async matchPrecache(e){let t=e instanceof Request?e.url:e,n=this.getCacheKeyForURL(t);if(n)return(await self.caches.open(this.strategy.cacheName)).match(n)}createHandlerBoundToURL(e){let n=this.getCacheKeyForURL(e);if(!n)throw new t(`non-precached-url`,{url:e});return t=>(t.request=new Request(e),t.params=Object.assign({cacheKey:n},t.params),this.strategy.handle(t))}},D,O=()=>(D||=new E,D);try{self[`workbox:routing:7.3.0`]&&_()}catch{}var k=e=>e&&typeof e==`object`?e:{handle:e},A=class{constructor(e,t,n=`GET`){this.handler=k(t),this.match=e,this.method=n}setCatchHandler(e){this.catchHandler=k(e)}},j=class extends A{constructor(e,t,n){super(({url:t})=>{let n=e.exec(t.href);if(n&&!(t.origin!==location.origin&&n.index!==0))return n.slice(1)},t,n)}},M=class{constructor(){this._routes=new Map,this._defaultHandlerMap=new Map}get routes(){return this._routes}addFetchListener(){self.addEventListener(`fetch`,(e=>{let{request:t}=e,n=this.handleRequest({request:t,event:e});n&&e.respondWith(n)}))}addCacheListener(){self.addEventListener(`message`,(e=>{if(e.data&&e.data.type===`CACHE_URLS`){let{payload:t}=e.data,n=Promise.all(t.urlsToCache.map(t=>{typeof t==`string`&&(t=[t]);let n=new Request(...t);return this.handleRequest({request:n,event:e})}));e.waitUntil(n),e.ports&&e.ports[0]&&n.then(()=>e.ports[0].postMessage(!0))}}))}handleRequest({request:e,event:t}){let n=new URL(e.url,location.href);if(!n.protocol.startsWith(`http`))return;let r=n.origin===location.origin,{params:i,route:a}=this.findMatchingRoute({event:t,request:e,sameOrigin:r,url:n}),o=a&&a.handler,s=e.method;if(!o&&this._defaultHandlerMap.has(s)&&(o=this._defaultHandlerMap.get(s)),!o)return;let c;try{c=o.handle({url:n,request:e,event:t,params:i})}catch(e){c=Promise.reject(e)}let l=a&&a.catchHandler;return c instanceof Promise&&(this._catchHandler||l)&&(c=c.catch(async r=>{if(l)try{return await l.handle({url:n,request:e,event:t,params:i})}catch(e){e instanceof Error&&(r=e)}if(this._catchHandler)return this._catchHandler.handle({url:n,request:e,event:t});throw r})),c}findMatchingRoute({url:e,sameOrigin:t,request:n,event:r}){let i=this._routes.get(n.method)||[];for(let a of i){let i,o=a.match({url:e,sameOrigin:t,request:n,event:r});if(o)return i=o,(Array.isArray(i)&&i.length===0||o.constructor===Object&&Object.keys(o).length===0||typeof o==`boolean`)&&(i=void 0),{route:a,params:i}}return{}}setDefaultHandler(e,t=`GET`){this._defaultHandlerMap.set(t,k(e))}setCatchHandler(e){this._catchHandler=k(e)}registerRoute(e){this._routes.has(e.method)||this._routes.set(e.method,[]),this._routes.get(e.method).push(e)}unregisterRoute(e){if(!this._routes.has(e.method))throw new t(`unregister-route-but-not-found-with-method`,{method:e.method});let n=this._routes.get(e.method).indexOf(e);if(n>-1)this._routes.get(e.method).splice(n,1);else throw new t(`unregister-route-route-not-registered`)}},N,P=()=>(N||(N=new M,N.addFetchListener(),N.addCacheListener()),N);function F(e,n,r){let i;if(typeof e==`string`){let t=new URL(e,location.href);i=new A(({url:e})=>e.href===t.href,n,r)}else if(e instanceof RegExp)i=new j(e,n,r);else if(typeof e==`function`)i=new A(e,n,r);else if(e instanceof A)i=e;else throw new t(`unsupported-route-type`,{moduleName:`workbox-routing`,funcName:`registerRoute`,paramName:`capture`});return P().registerRoute(i),i}function I(e,t=[]){for(let n of[...e.searchParams.keys()])t.some(e=>e.test(n))&&e.searchParams.delete(n);return e}function*L(e,{ignoreURLParametersMatching:t=[/^utm_/,/^fbclid$/],directoryIndex:n=`index.html`,cleanURLs:r=!0,urlManipulation:i}={}){let a=new URL(e,location.href);a.hash=``,yield a.href;let o=I(a,t);if(yield o.href,n&&o.pathname.endsWith(`/`)){let e=new URL(o.href);e.pathname+=n,yield e.href}if(r){let e=new URL(o.href);e.pathname+=`.html`,yield e.href}if(i){let e=i({url:a});for(let t of e)yield t.href}}var R=class extends A{constructor(e,t){super(({request:n})=>{let r=e.getURLsToCacheKeys();for(let i of L(n.url,t)){let t=r.get(i);if(t)return{cacheKey:t,integrity:e.getIntegrityForCacheKey(t)}}},e.strategy)}};function z(e){F(new R(O(),e))}function B(e){O().precache(e)}function V(e,t){B(e),z(t)}V([{"revision":"1872c500de691dce40960bb85481de07","url":"registerSW.js"},{"revision":"4c6743a279cfd1eb8f2d8173bb57cad6","url":"index.html"},{"revision":"a0fb34fc84eb148d51812cd62669f20d","url":"icon-512.svg"},{"revision":"a0fb34fc84eb148d51812cd62669f20d","url":"icon-192.svg"},{"revision":"948e060affb598c339be40d69e1f6f9c","url":"monacoeditorwork/ts.worker.bundle.js"},{"revision":"a5d8a1acfc29c2a4c882a54ffc93def3","url":"monacoeditorwork/json.worker.bundle.js"},{"revision":"d0f94ce046cf8cf09605ee7664dac557","url":"monacoeditorwork/html.worker.bundle.js"},{"revision":"a424156a79b9c1b907db93aa3180585a","url":"monacoeditorwork/editor.worker.bundle.js"},{"revision":"b3a7f967560c9816492a1567b3f7f0dc","url":"monacoeditorwork/css.worker.bundle.js"},{"revision":null,"url":"assets/x-CG-_0yIW.js"},{"revision":null,"url":"assets/video-preview-BEuZs1dG.js"},{"revision":null,"url":"assets/vendor-xterm-CU2c3f0A.js"},{"revision":null,"url":"assets/vendor-xterm-BrP-ENHg.css"},{"revision":null,"url":"assets/vendor-ui-B-89Uj8i.js"},{"revision":null,"url":"assets/vendor-mermaid-DsfY6y4f.js"},{"revision":null,"url":"assets/vendor-markdown-0Mxgxy0L.js"},{"revision":null,"url":"assets/utils-CTg5uAYR.js"},{"revision":null,"url":"assets/use-monaco-theme-SyJzNaNN.js"},{"revision":null,"url":"assets/use-blob-url-e9uTXjv5.js"},{"revision":null,"url":"assets/treemap-KZPCXAKY-Da7U3Olf.js"},{"revision":null,"url":"assets/text-wrap-BV-R4Vvy.js"},{"revision":null,"url":"assets/terminal-tab-D_C7amDZ.js"},{"revision":null,"url":"assets/table-tf7pRkME.js"},{"revision":null,"url":"assets/tab-store-0rGchMXr.js"},{"revision":null,"url":"assets/sqlite-viewer-8oWf4JCB.js"},{"revision":null,"url":"assets/sql-query-editor-BVn40O0T.js"},{"revision":null,"url":"assets/sparkles-fWUT5Vzq.js"},{"revision":null,"url":"assets/settings-tab-BFbe6ybw.js"},{"revision":null,"url":"assets/settings-store-Dvk8Lvwm.js"},{"revision":null,"url":"assets/scroll-area-7H-Q_k8c.js"},{"revision":null,"url":"assets/rolldown-runtime-FhOqtrmT.js"},{"revision":null,"url":"assets/refresh-cw-LlbZDJpO.js"},{"revision":null,"url":"assets/react-GqWghJ-L.js"},{"revision":null,"url":"assets/radar-KQ55EAFF-BwqCptkx.js"},{"revision":null,"url":"assets/postgres-viewer-DkVKzTKJ.js"},{"revision":null,"url":"assets/port-forwarding-tab-DfaV6GPS.js"},{"revision":null,"url":"assets/pie-UPGHQEXC-BECm43s6.js"},{"revision":null,"url":"assets/pdf-preview-D0JDPYYs.js"},{"revision":null,"url":"assets/packet-RMMSAZCW-DMi06dVb.js"},{"revision":null,"url":"assets/number-overlay-editor-BoRxunFN.js"},{"revision":null,"url":"assets/markdown-renderer-CJMJ5Qq0.js"},{"revision":null,"url":"assets/lib-DQHnkzGy.js"},{"revision":null,"url":"assets/keybindings-store-Djjc6tPj.js"},{"revision":null,"url":"assets/katex-BuytEdO1.js"},{"revision":null,"url":"assets/input-ozrR2DAV.js"},{"revision":null,"url":"assets/info-3K5VOQVL-fJy9dGkV.js"},{"revision":null,"url":"assets/index-zP-OjEml.js"},{"revision":null,"url":"assets/index-COOnLKGB.css"},{"revision":null,"url":"assets/image-preview-BlBVP277.js"},{"revision":null,"url":"assets/glide-data-grid-nthEL3fk.css"},{"revision":null,"url":"assets/glide-data-grid-DIvkBUKj.js"},{"revision":null,"url":"assets/github.min-D2BCvnWf.css"},{"revision":null,"url":"assets/github-dark-dimmed.min-BrpRStFV.css"},{"revision":null,"url":"assets/gitGraph-HDMCJU4V-b3n-Tgk6.js"},{"revision":null,"url":"assets/file-store-BrbCNyLm.js"},{"revision":null,"url":"assets/file-exclamation-point-Baz81y5z.js"},{"revision":null,"url":"assets/extension-webview-DgfgR787.js"},{"revision":null,"url":"assets/esm-zjerHxpO.js"},{"revision":null,"url":"assets/dist-DGSkE2Ml.js"},{"revision":null,"url":"assets/dist-CaKCIxem.js"},{"revision":null,"url":"assets/dist-0kPgRaVx.js"},{"revision":null,"url":"assets/diff-viewer-BOTb0dkG.js"},{"revision":null,"url":"assets/database-viewer-BRW8CMzC.js"},{"revision":null,"url":"assets/database-DOWH9-Vv.js"},{"revision":null,"url":"assets/data-grid-types-BTQHYBUh.js"},{"revision":null,"url":"assets/data-grid-overlay-editor-BjjuE4-G.js"},{"revision":null,"url":"assets/csv-preview-7TsYBQI6.js"},{"revision":null,"url":"assets/csv-parser-Dly5nqE1.js"},{"revision":null,"url":"assets/createLucideIcon-BjHrJDVb.js"},{"revision":null,"url":"assets/conflict-editor-WxMZDucw.js"},{"revision":null,"url":"assets/code-editor-DZ1e_sz0.js"},{"revision":null,"url":"assets/code-DGBecc50.js"},{"revision":null,"url":"assets/chevron-right-DnHIvvcy.js"},{"revision":null,"url":"assets/chat-tab-Cq8xYO7K.js"},{"revision":null,"url":"assets/audio-preview-BjoIjXlf.js"},{"revision":null,"url":"assets/arrow-up-Rcw6_KKu.js"},{"revision":null,"url":"assets/architecture-PBZL5I3N-DVlAZGlv.js"},{"revision":null,"url":"assets/api-settings-D0_eiIYv.js"},{"revision":null,"url":"assets/api-client-Dvzcc_EO.js"},{"revision":null,"url":"assets/ai-settings-section-ysK_Eixc.js"},{"revision":null,"url":"assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2"},{"revision":null,"url":"assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2"},{"revision":null,"url":"assets/KaTeX_Size2-Regular-Dy4dx90m.woff2"},{"revision":null,"url":"assets/KaTeX_Size1-Regular-mCD8mA8B.woff2"},{"revision":null,"url":"assets/KaTeX_Script-Regular-D3wIWfF6.woff2"},{"revision":null,"url":"assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2"},{"revision":null,"url":"assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2"},{"revision":null,"url":"assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2"},{"revision":null,"url":"assets/KaTeX_Math-Italic-t53AETM-.woff2"},{"revision":null,"url":"assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2"},{"revision":null,"url":"assets/KaTeX_Main-Regular-B22Nviop.woff2"},{"revision":null,"url":"assets/KaTeX_Main-Italic-NWA7e6Wa.woff2"},{"revision":null,"url":"assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2"},{"revision":null,"url":"assets/KaTeX_Main-Bold-Cx986IdX.woff2"},{"revision":null,"url":"assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2"},{"revision":null,"url":"assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2"},{"revision":null,"url":"assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2"},{"revision":null,"url":"assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2"},{"revision":null,"url":"assets/KaTeX_AMS-Regular-BQhdFMY1.woff2"},{"revision":"79c8870653c8f419f2e3323085e1f4be","url":"manifest.webmanifest"}]),self.addEventListener(`push`,e=>{e.waitUntil(self.clients.matchAll({type:`window`,includeUncontrolled:!0}).then(t=>{if(t.some(e=>e.visibilityState===`visible`))return;let n=e.data?.json()??{title:`PPM`,body:`Chat completed`};return self.registration.showNotification(n.title,{body:n.body,icon:`/icon-192.png`,badge:`/icon-192.png`,tag:`ppm-chat-done`,silent:!1,data:{url:self.location.origin}})}))}),self.addEventListener(`notificationclick`,e=>{e.notification.close(),e.waitUntil(self.clients.matchAll({type:`window`,includeUncontrolled:!0}).then(t=>{for(let e of t)if(e.url.includes(self.location.origin)&&`focus`in e)return e.focus();return self.clients.openWindow(e.notification.data?.url||`/`)}))});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hienlh/ppm",
3
- "version": "0.13.10",
3
+ "version": "0.13.12",
4
4
  "description": "Personal Project Manager — mobile-first web IDE with AI assistance",
5
5
  "author": "hienlh",
6
6
  "license": "MIT",
@@ -76,6 +76,8 @@ export function registerProjectsCommands(program: Command): void {
76
76
  .action(async (projectPath: string, options: { name?: string }) => {
77
77
  try {
78
78
  const { projectService } = await import("../../services/project.service.ts");
79
+ const { configService } = await import("../../services/config.service.ts");
80
+ configService.load();
79
81
  const entry = projectService.add(projectPath, options.name);
80
82
  console.log(`${C.green}Added project:${C.reset} ${entry.name} → ${entry.path}`);
81
83
  } catch (err) {
@@ -90,6 +92,8 @@ export function registerProjectsCommands(program: Command): void {
90
92
  .action(async (nameOrPath: string) => {
91
93
  try {
92
94
  const { projectService } = await import("../../services/project.service.ts");
95
+ const { configService } = await import("../../services/config.service.ts");
96
+ configService.load();
93
97
  projectService.remove(nameOrPath);
94
98
  console.log(`${C.green}Removed project:${C.reset} ${nameOrPath}`);
95
99
  } catch (err) {
package/src/index.ts CHANGED
File without changes
@@ -160,13 +160,22 @@ class ConfigService {
160
160
 
161
161
  private syncProjectsToDb(projects: ProjectConfig[]): void {
162
162
  const db = getDb();
163
- db.exec("DELETE FROM projects");
164
- const stmt = db.query(
165
- "INSERT INTO projects (path, name, color, sort_order) VALUES (?, ?, ?, ?)",
166
- );
167
- for (let i = 0; i < projects.length; i++) {
168
- const p = projects[i]!;
169
- stmt.run(p.path, p.name, p.color ?? null, i);
163
+ // Wrap in a transaction so a mid-operation SIGKILL cannot leave the table empty
164
+ // (DELETE committed but INSERTs never ran would permanently wipe all projects).
165
+ db.exec("BEGIN");
166
+ try {
167
+ db.exec("DELETE FROM projects");
168
+ const stmt = db.query(
169
+ "INSERT INTO projects (path, name, color, sort_order) VALUES (?, ?, ?, ?)",
170
+ );
171
+ for (let i = 0; i < projects.length; i++) {
172
+ const p = projects[i]!;
173
+ stmt.run(p.path, p.name, p.color ?? null, i);
174
+ }
175
+ db.exec("COMMIT");
176
+ } catch (e) {
177
+ db.exec("ROLLBACK");
178
+ throw e;
170
179
  }
171
180
  }
172
181
  }
@@ -554,12 +554,14 @@ async function notifyStateChange(from: string, to: string, reason: string) {
554
554
  async function connectCloud(opts: { port: number }, serverArgs: string[], logFd: number): Promise<boolean> {
555
555
  try {
556
556
  const { getCloudDevice, saveCloudDevice } = await import("./cloud.service.ts");
557
- const { configService } = await import("./config.service.ts");
558
557
  const device = getCloudDevice();
559
558
  if (!device) return false; // not linked to cloud
560
559
 
561
560
  const { connect, onCommand } = await import("./cloud-ws.service.ts");
562
561
  const { VERSION } = await import("../version.ts");
562
+ // Import getConfigValue for fresh SQLite reads — supervisor's in-memory configService
563
+ // is a separate process singleton and won't see changes made by the server process.
564
+ const { getConfigValue } = await import("./db.service.ts");
563
565
  const startTime = Date.now();
564
566
 
565
567
  connect({
@@ -570,8 +572,13 @@ async function connectCloud(opts: { port: number }, serverArgs: string[], logFd:
570
572
  const status = readStatus();
571
573
  // Re-read device file each heartbeat to pick up name changes
572
574
  const currentDevice = getCloudDevice();
573
- // Sync device name from config if user changed it in settings
574
- const configName = configService.get("device_name") as string;
575
+ // Read device_name fresh from SQLite configService.get() is stale in the supervisor
576
+ // process (server process writes to SQLite but can't update supervisor's in-memory cache).
577
+ let configName = "";
578
+ try {
579
+ const raw = getConfigValue("device_name");
580
+ if (raw) configName = JSON.parse(raw) || "";
581
+ } catch {}
575
582
  if (configName && currentDevice && configName !== currentDevice.name) {
576
583
  currentDevice.name = configName;
577
584
  saveCloudDevice(currentDevice);
@@ -288,6 +288,9 @@ export function ChatTab({ metadata, tabId }: ChatTabProps) {
288
288
  setSlashFilter("");
289
289
  }, []);
290
290
 
291
+ // Stable callback: clear external paths once consumed (avoids inline lambda breaking MessageInput memo)
292
+ const handleExternalPathsConsumed = useCallback(() => setExternalPaths(null), []);
293
+
291
294
  // --- Disambiguation picker handler (OS drag resolve with multiple matches) ---
292
295
  const handleDisambiguate = useCallback((matches: FileNode[]) => {
293
296
  setDisambiguateItems(matches);
@@ -470,7 +473,7 @@ export function ChatTab({ metadata, tabId }: ChatTabProps) {
470
473
  fileSelected={fileSelected}
471
474
  externalFiles={externalFiles}
472
475
  externalPaths={externalPaths}
473
- onExternalPathsConsumed={() => setExternalPaths(null)}
476
+ onExternalPathsConsumed={handleExternalPathsConsumed}
474
477
  onDisambiguate={handleDisambiguate}
475
478
  permissionMode={permissionMode}
476
479
  onModeChange={setPermissionMode}
@@ -107,9 +107,9 @@ export const MessageInput = memo(function MessageInput({
107
107
  typeof CSS === "undefined" || !CSS.supports("field-sizing", "content"),
108
108
  );
109
109
 
110
- // File index from store replaces /files/tree?depth=5 fetch
111
- const fileIndex = useFileStore((s) => s.fileIndex);
112
- const indexStatus = useFileStore((s) => s.indexStatus);
110
+ // File index: subscribe imperatively to avoid re-renders on every file store update.
111
+ // The component only needs fileIndex for the effect below (populating fileItemsRef),
112
+ // not for rendering — so we use Zustand's subscribe() instead of selector hooks.
113
113
 
114
114
  /** Write value to both textareas + ref + update hasText state */
115
115
  const writeTextareas = useCallback((newValue: string) => {
@@ -208,18 +208,32 @@ export const MessageInput = memo(function MessageInput({
208
208
  return () => window.removeEventListener("ppm:slash-items-refresh", handler);
209
209
  }, [fetchSlashItems]);
210
210
 
211
- // Sync file picker items from store index — no network call needed
211
+ // Sync file picker items from store index — subscribe imperatively to avoid re-renders.
212
+ // Reads fileIndex on mount + whenever fileIndex/indexStatus changes in the store.
212
213
  useEffect(() => {
213
- if (!projectName) {
214
- fileItemsRef.current = [];
215
- onFileItemsLoaded?.([]);
216
- return;
217
- }
218
- // Convert FileEntry[] to FileNode[] — type field is now present on FileEntry
219
- const nodes: FileNode[] = fileIndex.map((e) => ({ name: e.name, path: e.path, type: e.type }));
220
- fileItemsRef.current = nodes;
221
- onFileItemsLoaded?.(nodes);
222
- }, [projectName, fileIndex, indexStatus]); // eslint-disable-line react-hooks/exhaustive-deps
214
+ const syncFromStore = () => {
215
+ if (!projectName) {
216
+ fileItemsRef.current = [];
217
+ onFileItemsLoaded?.([]);
218
+ return;
219
+ }
220
+ const { fileIndex } = useFileStore.getState();
221
+ const nodes: FileNode[] = fileIndex.map((e) => ({ name: e.name, path: e.path, type: e.type }));
222
+ fileItemsRef.current = nodes;
223
+ onFileItemsLoaded?.(nodes);
224
+ };
225
+ syncFromStore();
226
+ // Track previous values to only sync on relevant changes
227
+ let prevIdx = useFileStore.getState().fileIndex;
228
+ let prevStatus = useFileStore.getState().indexStatus;
229
+ return useFileStore.subscribe((state) => {
230
+ if (state.fileIndex !== prevIdx || state.indexStatus !== prevStatus) {
231
+ prevIdx = state.fileIndex;
232
+ prevStatus = state.indexStatus;
233
+ syncFromStore();
234
+ }
235
+ });
236
+ }, [projectName]); // eslint-disable-line react-hooks/exhaustive-deps
223
237
 
224
238
  // Handle parent selecting a slash item
225
239
  useEffect(() => {
@@ -1,4 +1,4 @@
1
- import { useState, useCallback, useRef, useEffect, useMemo } from "react";
1
+ import { useState, useCallback, useRef, useEffect, useMemo, startTransition } from "react";
2
2
  import { useWebSocket } from "./use-websocket";
3
3
  import { api, getAuthToken, projectUrl } from "@/lib/api-client";
4
4
  import { flattenWithExpansions, prefixPreCompactIds } from "@/lib/flatten-expansions";
@@ -172,32 +172,39 @@ export function useChat(sessionId: string | null, providerId = "claude", project
172
172
  return true;
173
173
  }, []);
174
174
 
175
- /** Flush refs into React state (called from rAF or directly) */
175
+ /** Flush refs into React state (called from throttled timer or directly) */
176
176
  const flushMessages = useCallback(() => {
177
177
  syncRafRef.current = 0;
178
178
  const content = streamingContentRef.current;
179
179
  const events = [...streamingEventsRef.current];
180
180
  const account = streamingAccountRef.current;
181
- setMessages((prev) => {
182
- const last = prev[prev.length - 1];
183
- if (last?.role === "assistant" && !last.id.startsWith("final-")) {
184
- return [...prev.slice(0, -1), { ...last, content, events, ...account }];
185
- }
186
- return [...prev, {
187
- id: `streaming-${Date.now()}`,
188
- role: "assistant" as const,
189
- content,
190
- events,
191
- timestamp: new Date().toISOString(),
192
- ...account,
193
- }];
181
+ // startTransition marks streaming updates as low-priority so React
182
+ // yields to user interactions (text selection, copy, scroll) first.
183
+ startTransition(() => {
184
+ setMessages((prev) => {
185
+ const last = prev[prev.length - 1];
186
+ if (last?.role === "assistant" && !last.id.startsWith("final-")) {
187
+ return [...prev.slice(0, -1), { ...last, content, events, ...account }];
188
+ }
189
+ return [...prev, {
190
+ id: `streaming-${Date.now()}`,
191
+ role: "assistant" as const,
192
+ content,
193
+ events,
194
+ timestamp: new Date().toISOString(),
195
+ ...account,
196
+ }];
197
+ });
194
198
  });
195
199
  }, []);
196
200
 
197
- /** Throttled sync — batches rapid WS events into one render per animation frame */
201
+ /** Throttled sync — batches rapid WS events into one render per ~100ms.
202
+ * Previously used rAF (~16ms / 60fps) which blocked the main thread with
203
+ * frequent ReactMarkdown re-parses, causing lag during text selection/copy.
204
+ * 100ms (10fps) keeps streaming smooth while leaving idle time for interactions. */
198
205
  const syncMessages = useCallback(() => {
199
206
  if (!syncRafRef.current) {
200
- syncRafRef.current = requestAnimationFrame(flushMessages);
207
+ syncRafRef.current = window.setTimeout(flushMessages, 100) as unknown as number;
201
208
  }
202
209
  }, [flushMessages]);
203
210
 
@@ -414,7 +421,7 @@ export function useChat(sessionId: string | null, providerId = "claude", project
414
421
  playNotificationSound("done");
415
422
  }
416
423
  // Cancel any pending throttled sync — done handler writes final state directly
417
- if (syncRafRef.current) { cancelAnimationFrame(syncRafRef.current); syncRafRef.current = 0; }
424
+ if (syncRafRef.current) { clearTimeout(syncRafRef.current); syncRafRef.current = 0; }
418
425
  // Finalize the streaming message — preserve SDK UUID for fork/rewind
419
426
  const finalContent = streamingContentRef.current;
420
427
  const finalEvents = [...streamingEventsRef.current];
@@ -624,7 +631,7 @@ export function useChat(sessionId: string | null, providerId = "claude", project
624
631
  streamingContentRef.current = "";
625
632
  streamingEventsRef.current = [];
626
633
  bashOutputRef.current.clear();
627
- if (syncRafRef.current) { cancelAnimationFrame(syncRafRef.current); syncRafRef.current = 0; }
634
+ if (syncRafRef.current) { clearTimeout(syncRafRef.current); syncRafRef.current = 0; }
628
635
  setIsConnected(false);
629
636
  // Reset team state
630
637
  teamActivityRef.current = { teamNames: new Set(), messages: [] };
@@ -669,7 +676,7 @@ export function useChat(sessionId: string | null, providerId = "claude", project
669
676
 
670
677
  if (isFollowUp) {
671
678
  // Cancel pending throttled sync before finalizing
672
- if (syncRafRef.current) { cancelAnimationFrame(syncRafRef.current); syncRafRef.current = 0; }
679
+ if (syncRafRef.current) { clearTimeout(syncRafRef.current); syncRafRef.current = 0; }
673
680
  // Streaming follow-up: finalize current assistant message, then send
674
681
  const finalContent = streamingContentRef.current;
675
682
  const finalEvents = [...streamingEventsRef.current];