@kekonic/diagrams-studio 1.0.0-rc.10

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 (39) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +47 -0
  3. package/dist/browser/assets/SourceEditor-CVJmi6AX.js +23 -0
  4. package/dist/browser/assets/codicon-DF1abBS2.ttf +0 -0
  5. package/dist/browser/assets/dist-gV3Je5I4.js +52 -0
  6. package/dist/browser/assets/editor-bEjdOiDy.css +1 -0
  7. package/dist/browser/assets/editor.api-Cj6q1WDf.js +430 -0
  8. package/dist/browser/assets/editor.worker-BmdWdrHZ.js +33 -0
  9. package/dist/browser/assets/elk-B5tw4IVJ.js +25 -0
  10. package/dist/browser/assets/format-B3CctFKU.js +479 -0
  11. package/dist/browser/assets/format-BCE_sElR.css +1 -0
  12. package/dist/browser/assets/github-dark-C-LZuMrd.js +1 -0
  13. package/dist/browser/assets/github-light-EUqPIrTm.js +1 -0
  14. package/dist/browser/assets/ibm-plex-mono-latin-400-normal-CvHOgSBP.woff +0 -0
  15. package/dist/browser/assets/ibm-plex-mono-latin-400-normal-DMJ8VG8y.woff2 +0 -0
  16. package/dist/browser/assets/ibm-plex-mono-latin-500-normal-CB9ihrfo.woff +0 -0
  17. package/dist/browser/assets/ibm-plex-mono-latin-500-normal-DSY6xOcd.woff2 +0 -0
  18. package/dist/browser/assets/ibm-plex-sans-latin-400-normal-CDDApCn2.woff2 +0 -0
  19. package/dist/browser/assets/ibm-plex-sans-latin-400-normal-CYLoc0-x.woff +0 -0
  20. package/dist/browser/assets/ibm-plex-sans-latin-500-normal-6ng42L7E.woff2 +0 -0
  21. package/dist/browser/assets/ibm-plex-sans-latin-500-normal-BgVn5rGT.woff +0 -0
  22. package/dist/browser/assets/ibm-plex-sans-latin-600-normal-Cu4Hd6ag.woff +0 -0
  23. package/dist/browser/assets/ibm-plex-sans-latin-600-normal-CuJfVYMP.woff2 +0 -0
  24. package/dist/browser/assets/index-CWVmUaAY.css +1 -0
  25. package/dist/browser/assets/index-KMDzz6hs.js +3092 -0
  26. package/dist/browser/assets/inter-latin-500-normal-BL9OpVg8.woff +0 -0
  27. package/dist/browser/assets/inter-latin-500-normal-DPWUe_Rm.js +1 -0
  28. package/dist/browser/assets/kekonic-diagrams-symbol-DLqXST9D.svg +38 -0
  29. package/dist/browser/assets/language-jwV6PbsO.js +11 -0
  30. package/dist/browser/assets/monaco-features-BReLWANr.js +28 -0
  31. package/dist/browser/assets/monaco-features-CRQ1X1Hr.css +1 -0
  32. package/dist/browser/assets/rolldown-runtime-COiEfhsA.js +1 -0
  33. package/dist/browser/assets/wasm-BnjxR4X6.js +1 -0
  34. package/dist/browser/favicon.svg +38 -0
  35. package/dist/browser/index.html +17 -0
  36. package/dist/index.d.mts +185 -0
  37. package/dist/index.mjs +465 -0
  38. package/dist/index.mjs.map +1 -0
  39. package/package.json +71 -0
@@ -0,0 +1 @@
1
+ var e=new URL(`inter-latin-500-normal-BL9OpVg8.woff`,import.meta.url).href;export{e as default};
@@ -0,0 +1,38 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
3
+ <svg viewBox="0 0 1210 902" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" role="img" aria-label="Kekonic Diagrams" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;">
4
+ <g transform="matrix(1,0,0,1,-145.088,-495.377)">
5
+ <g transform="matrix(7.20783,0,0,7.20783,-1216.78,-7742.15)">
6
+ <g transform="matrix(2.27143,0,0,1.57118,-931.526,-217.453)">
7
+ <path d="M528.386,906.853C528.773,904.654 529.314,902.63 530.01,900.779C531.573,896.624 533.641,893.471 536.212,891.32C538.784,889.17 541.582,888.095 544.608,888.095C546.877,888.095 548.78,888.478 550.318,889.243C551.856,890.008 553.104,890.974 554.062,892.141C555.02,893.307 555.751,894.546 556.255,895.858L557.617,895.858L557.617,867.32L567.147,867.32L567.147,943.86L557.768,943.86L557.768,937.299L556.407,937.299C555.549,939.34 554.226,941.199 552.436,942.876C550.646,944.552 548.036,945.391 544.608,945.391C541.633,945.391 538.847,944.315 536.25,942.165C533.653,940.014 531.573,936.862 530.01,932.707C528.715,929.263 527.956,925.218 527.734,920.572L537.338,920.572C537.676,924.234 538.612,927.13 540.145,929.262C542.112,931.996 544.557,933.363 547.482,933.363C550.406,933.363 552.852,931.996 554.818,929.262C556.785,926.529 557.768,922.538 557.768,917.289L557.768,916.196C557.768,910.947 556.797,906.956 554.856,904.223C552.915,901.489 550.457,900.123 547.482,900.123C544.557,900.123 542.112,901.489 540.145,904.223C539.587,904.998 539.109,905.875 538.709,906.853L528.386,906.853Z" style="fill:rgb(110,53,175);"/>
8
+ </g>
9
+ <g transform="matrix(-2.11443,2.58943e-16,-5.53129e-17,-0.451664,1252.82,1394.47)">
10
+ <rect x="492.915" y="414.095" width="10.236" height="142.97" style="fill:rgb(233,100,145);"/>
11
+ </g>
12
+ <g transform="matrix(1,0,0,1,-5.39611,757.628)">
13
+ <path d="M249.989,478.454L277.03,507.663L249.122,507.663L223.323,478.454L249.989,478.454Z" style="fill:rgb(236,174,98);"/>
14
+ </g>
15
+ <g transform="matrix(1,0,0,1,-5.39611,757.628)">
16
+ <rect x="194.339" y="478.454" width="21.707" height="29.21" style="fill:rgb(236,174,98);"/>
17
+ </g>
18
+ <g transform="matrix(-2.11443,2.58943e-16,-1.84376e-17,-0.150555,1306.55,1248.25)">
19
+ <rect x="492.915" y="414.095" width="10.236" height="142.97" style="fill:rgb(161,60,195);"/>
20
+ </g>
21
+ <g transform="matrix(-2.11443,2.58943e-16,-1.84376e-17,-0.150555,1252.82,1226.73)">
22
+ <rect x="492.915" y="414.095" width="10.236" height="142.97" style="fill:rgb(110,54,175);"/>
23
+ </g>
24
+ <g transform="matrix(-2.11443,2.58943e-16,-1.84376e-17,-0.150555,1284.91,1269.78)">
25
+ <rect x="492.915" y="414.095" width="10.236" height="142.97" style="fill:rgb(233,100,145);"/>
26
+ </g>
27
+ <g transform="matrix(-2.11443,2.58943e-16,-1.84376e-17,-0.150555,1252.82,1248.25)">
28
+ <rect x="492.915" y="414.095" width="10.236" height="142.97" style="fill:rgb(161,61,195);"/>
29
+ </g>
30
+ <g transform="matrix(7.23205,0,0,1.38699,-2029.04,575.635)">
31
+ <path d="M317.507,471.017C317.493,469.931 317.486,468.815 317.486,467.67L317.486,465.689C317.486,461.98 317.561,458.576 317.712,455.476L320.954,455.476C320.637,458.273 320.479,461.801 320.479,466.06L320.479,467.299C320.479,468.607 320.494,469.847 320.524,471.017L317.507,471.017Z" style="fill:rgb(233,100,145);"/>
32
+ </g>
33
+ <g transform="matrix(7.23205,0,0,1.38699,-2029.04,575.635)">
34
+ <path d="M317.507,471.017L306.688,471.017L306.688,455.476L317.712,455.476C317.561,458.576 317.486,461.98 317.486,465.689L317.486,467.67C317.486,468.815 317.493,469.931 317.507,471.017Z" style="fill:rgb(236,174,98);"/>
35
+ </g>
36
+ </g>
37
+ </g>
38
+ </svg>
@@ -0,0 +1,11 @@
1
+ import{E as e,N as t,P as n,Q as r,S as i,_ as a,a as o,b as s,f as c,g as l,x as u}from"./index-KMDzz6hs.js";var d=`diagram.state.sequence.model.view.include.exclude.group.boundary.zone.swimlane.database.style.animation.direction.density.layout.edges.render.presentation.activate.deactivate.create.destroy.note.autonumber.alt.else.opt.loop.par`.split(`.`),f=[{name:`label`,description:`Visible label for the element.`},{name:`subtitle`,description:`Secondary text shown beneath the label.`},{name:`description`,description:`Longer body text under the title (C4 description).`},{name:`technology`,description:`Runtime or platform tag shown on architecture nodes.`},{name:`icon`,description:`Built-in or collection-qualified icon identifier.`},{name:`shape`,description:`Geometry used to draw the node.`,values:e},{name:`columns`,description:`ERD table column declarations.`},{name:`fields`,description:`Nested document fields, including required and partition roles.`},{name:`idPattern`,description:`Physical document id template, such as {employeeId}:{shiftId}.`},{name:`partition`,description:`Partition or shard key field for the database profile.`},{name:`profile`,description:`Database product whose constraint pack to apply.`,values:s},{name:`partitioned`,description:`Whether this database colocates documents by a partition key.`},{name:`audience`,description:`Declared read audience. CouchDB checks it against the database boundary.`},{name:`on`,description:`Document an access path, index, or invariant concerns.`},{name:`scope`,description:`direct, partition, or global for access; partitioned or global for an index.`},{name:`using`,description:`Index that serves an access path.`},{name:`keys`,description:`Fields an index covers, in order.`},{name:`spans`,description:`Documents an invariant reads.`},{name:`reads`,description:`Whether an invariant reads one document or many.`,values:[`one`,`many`]},{name:`enforcement`,description:`Where an invariant is enforced.`,values:[`document`,`partition`,`transaction`,`application`]},{name:`consistency`,description:`Freshness the access path requires.`},{name:`returns`,description:`Expected access result cardinality, such as one or many.`},{name:`partial`,description:`Selector that limits which documents enter an index.`},{name:`cardinality`,description:`ERD relationship multiplicity drawn as crow's-foot markers, e.g. 1:N or 0..1:1.`},{name:`identifying`,description:`ERD identifying relationship (solid) versus non-identifying (dashed).`,values:[`true`,`false`]},{name:`note`,description:`Short note on a table, node, or column.`},{name:`direction`,description:`Diagram reading direction.`,values:[`LR`,`RL`,`TD`,`BT`]},{name:`density`,description:`Layout spacing policy.`,values:[`compact`,`normal`,`spacious`]},{name:`route`,description:`Edge path style after layout. Metro/rounded/orthogonal paint the orthogonal corridor; straight uses a port-to-port chord when clear; bezier is an obstacle-aware cubic along that corridor.`,values:[`straight`,`bezier`,`orthogonal`,`rounded`,`metro`]},{name:`stroke`,description:`Authored stroke color or theme-token reference.`},{name:`fill`,description:`Authored fill color or theme-token reference.`},{name:`arrange`,description:`Group content arrangement.`,values:[`flow`,`pack`,`stack`,`row`,`grid`]},{name:`align`,description:`Group content alignment.`,values:[`stretch`,`start`,`center`,`end`]},{name:`gap`,description:`Explicit group gap.`},{name:`row`,description:`Grid row placement.`},{name:`column`,description:`Grid column placement.`},{name:`rowSpan`,description:`Number of grid rows occupied.`},{name:`colSpan`,description:`Number of grid columns occupied.`}],p={kinds:i,kindDetails:u,shapes:e,edgeOperators:n,icons:r(),styles:o,themeTokens:Object.keys(c(`dark`)).sort(),properties:f},m=/[A-Za-z_][\w-]*/gu,h=/[A-Za-z_][\w-]*/u,g=class{constructor(){this.protocolVersion=1,this.#e=new Map,this.#t=new Map}#e;#t;updateDocument(e,n,r=1){let i=this.#e.get(e);if(i&&r<i.version)return _(i);let o=t(n),s=a(o),c={uri:e,source:n,version:r,diagnostics:v([...o.diagnostics,...s.diagnostics]),ast:o,symbols:y(n,o),references:x(n)};return this.#e.set(e,c),_(c)}applyDocumentChanges(e,t,n){let r=this.#i(e);if(t<r.version)return _(r);let i=r.source;for(let e of n){if(!e.range){i=e.text;continue}let t=D(i,e.range.start),n=D(i,e.range.end);if(n<t)throw Error(`KDiagram document change range ends before it starts`);i=`${i.slice(0,t)}${e.text}${i.slice(n)}`}return this.updateDocument(e,i,t)}closeDocument(e){this.#e.delete(e)}getDocument(e){let t=this.#e.get(e);return t?_(t):void 0}diagnostics(e){return[...this.#i(e).diagnostics]}format(e){let t=this.#i(e),n=l(t.source);return n===t.source?[]:[{range:k(t.source),newText:n}]}complete(e,t){let n=this.#i(e),r=D(n.source,t),i=n.source.slice(Math.max(0,r-160),r),a=[...this.#t.values()].flatMap(e=>Object.keys(e.kinds??{})),o=[...this.#t.values()].flatMap(e=>e.properties??[]);if(/\bicon\s*:\s*[\w:-]*$/u.test(i))return p.icons.map(e=>({label:e,kind:`icon`,detail:`Built-in icon`}));if(/\bshape\s*:\s*[\w-]*$/u.test(i))return p.shapes.map(e=>({label:e,kind:`value`,detail:`Built-in shape`}));if(/\bis\s+[\w-]*$/u.test(i)){let e=n.symbols.filter(e=>e.kind===`style`).map(e=>e.name);return M([...p.styles,...e]).map(e=>({label:e,kind:`style`}))}if(/var\(\s*--[\w-]*$/u.test(i))return p.themeTokens.map(e=>({label:e,kind:`theme-token`}));let s=/\b([A-Za-z][\w-]*)\s*:\s*[\w-]*$/u.exec(i)?.[1];if(s){let e=[...p.properties,...o].find(e=>e.name===s);if(e?.values)return e.values.map(t=>({label:t,kind:`value`,detail:e.description}));if(s===`columns`)return C(n);if(s===`theme`)return[`dark`,`light`].map(e=>({label:e,kind:`value`}))}if(/^\s*[A-Za-z_][\w-]*\s*:\s*[\w-]*$/u.test(A(n.source,r)))return M([...p.kinds,...a]).map(e=>({label:e,kind:`kind`,detail:this.#r(e)}));if(/\{[^{}]*$/u.test(i))return N([...p.properties,...o]).map(e=>({label:e.name,kind:`property`,detail:e.description,insertText:`${e.name}: `}));let c=n.symbols.filter(e=>e.kind===`node`||e.kind===`group`);return[...d.map(e=>({label:e,kind:`keyword`})),...c.map(e=>({label:e.name,kind:`reference`,detail:e.detail}))]}hover(e,t){let n=this.#i(e),r=w(n.source,D(n.source,t));if(!r)return;let i=n.symbols.find(e=>e.name===r.value);if(i)return{range:r.range,markdown:`**${i.name}** \nKDiagram ${i.kind}${i.detail?` · ${i.detail}`:``}`};let a=p.kindDetails[r.value];if(a)return{range:r.range,markdown:`**${r.value}** · ${a.subtitle} \nShape: \`${a.shape}\` · Category: ${a.category}`,preview:{kind:r.value,shape:a.shape}};for(let e of this.#t.values()){let t=e.kinds?.[r.value];if(t)return{range:r.range,markdown:`**${r.value}** · ${t.description}${t.shape?` \nShape: \`${t.shape}\``:``}`,preview:t.shape?{kind:r.value,shape:t.shape}:void 0}}let o=this.#n().find(e=>e.name===r.value);if(o)return{range:r.range,markdown:`**${o.name}** \n${o.description}`};if(p.themeTokens.includes(r.value.startsWith(`--`)?r.value:`--${r.value}`))return{range:r.range,markdown:`Theme token \`${r.value}\``}}definition(e,t){let n=this.#i(e),r=w(n.source,D(n.source,t));if(r)for(let e of[n,...this.#e.values()]){let t=e.symbols.find(e=>e.name===r.value);if(t)return{uri:e.uri,range:t.selectionRange}}}references(e,t,n=!0){let r=this.#i(e),i=w(r.source,D(r.source,t));if(!i)return[];let a=[];for(let e of this.#e.values()){let t=e.symbols.find(e=>e.name===i.value)?.selectionRange;a.push(...(e.references.get(i.value)??[]).filter(e=>n||!j(e,t)).map(t=>({uri:e.uri,range:t})))}return a}rename(e,t,n){return this.renameWorkspace(e,t,n).filter(t=>t.uri===e).map(({range:e,newText:t})=>({range:e,newText:t}))}renameWorkspace(e,t,n){if(!/^[A-Za-z_][\w-]*$/u.test(n))throw Error(`Invalid KDiagram identifier: ${n}`);let r=this.#i(e),i=w(r.source,D(r.source,t));return!i||![...this.#e.values()].some(e=>e.symbols.some(e=>e.name===i.value))?[]:[...this.#e.values()].flatMap(e=>(e.references.get(i.value)??[]).map(t=>({uri:e.uri,range:t,newText:n})))}documentSymbols(e){return this.#i(e).symbols.map(({name:e,kind:t,range:n})=>({name:e,kind:t,range:n}))}foldingRanges(e){let t=this.#i(e).source,n=[],r=[],i=1,a=!1,o=!1;for(let e=0;e<t.length;e++){let s=t[e],c=t[e+1];if(s===`
2
+ `)i++,o=!1;else if(!a&&!o&&s===`/`&&c===`/`)o=!0,e++;else if(!o&&(s===`"`&&t[e-1]!==`\\`&&(a=!a),!a&&(s===`{`&&n.push({line:i}),s===`}`))){let e=n.pop();e&&i>e.line&&r.push({startLine:e.line,endLine:i})}}return r}semanticTokens(e){let t=this.#i(e).source,n=[];for(let r of t.matchAll(/"(?:[^"\\]|\\.)*"|(?:-->|->|=>|~>|\.>|-x>|<->|<-)|\b\d+(?:\.\d+)?\b|[A-Za-z_][\w-]*/gu)){let i=r[0],a=r.index,o=E(t,a),s=`variable`;i.startsWith(`"`)?s=`string`:/^\d/u.test(i)?s=`number`:p.edgeOperators.includes(i)?s=`operator`:d.includes(i)?s=`keyword`:this.#r(i)?s=`type`:this.#n().some(e=>e.name===i)&&/^\s*:/u.test(t.slice(a+i.length))?s=`property`:this.#i(e).symbols.some(e=>e.kind===`style`&&e.name===i)&&(s=`class`),n.push({line:o.line,column:o.column,length:i.length,type:s})}return n}codeActions(e){let t=this.#i(e),n=[],r=this.format(e);r.length&&n.push({title:`Format KDiagram document`,kind:`source.format`,edits:r});for(let e of t.diagnostics){let t=/Did you mean (?:“|")([^”"]+)(?:”|")\?/u.exec(e.hint??``)?.[1];t&&n.push({title:`Replace with ‘${t}’`,kind:`quickfix`,edits:[{range:e.range,newText:t}],diagnosticCode:e.code})}for(let e of t.source.matchAll(/\broomy\b/gu))n.push({title:`Migrate deprecated density ‘roomy’ to ‘spacious’`,kind:`source.migrate`,edits:[{range:O(t.source,e.index,e.index+e[0].length),newText:`spacious`}]});return n}registerExtension(e){let t=e.protocolVersion;if(t!==1)throw Error(`Unsupported language extension protocol: ${t}`);if(!e.id.trim())throw Error(`Language extension id is required`);return this.#t.set(e.id,e),()=>{this.#t.delete(e.id)}}#n(){return N([...p.properties,...[...this.#t.values()].flatMap(e=>e.properties??[])])}#r(e){let t=p.kindDetails[e];if(t)return`${t.subtitle} · ${t.category} · ${t.shape}`;for(let t of this.#t.values()){let n=t.kinds?.[e];if(n)return n.description}}#i(e){let t=this.#e.get(e);if(!t)throw Error(`Unknown KDiagram document: ${e}`);return t}};function _(e){return{uri:e.uri,source:e.source,version:e.version,diagnostics:[...e.diagnostics]}}function v(e){let t=new Set;return e.filter(e=>{let n=`${e.code}:${e.message}:${e.range.start.offset}:${e.range.end.offset}`;return!t.has(n)&&(t.add(n),!0)})}function y(e,t){let n=[];for(let r of t.body){let t=r.name??(r.type===`Sequence`?`Sequence`:r.type===`Model`?`Model`:r.diagramKind===`state`?`State`:`Diagram`);if(n.push({name:t,kind:`diagram`,range:r.range,selectionRange:T(e,r.range,r.name??r.type.toLowerCase())}),r.type===`Model`){b(e,r.statements,n);for(let t of r.views)n.push({name:t.name,kind:`diagram`,range:t.range,selectionRange:T(e,t.range,t.name),detail:`view`}),b(e,t.statements,n)}else b(e,r.statements,n)}return n}function b(e,t,n){for(let r of t)switch(r.type){case`Node`:n.push({name:r.id,kind:`node`,range:r.range,selectionRange:T(e,r.range,r.id),detail:r.kind});break;case`Group`:r.id&&n.push({name:r.id,kind:`group`,range:r.range,selectionRange:T(e,r.range,r.id),detail:r.groupKind}),b(e,r.statements,n);break;case`Style`:n.push({name:r.name,kind:`style`,range:r.range,selectionRange:T(e,r.range,r.name),detail:r.target});break;case`AnimationBlock`:n.push({name:r.name,kind:`animation`,range:r.range,selectionRange:T(e,r.range,r.name)});break;case`SequenceCreate`:n.push({name:r.node.id,kind:`node`,range:r.range,selectionRange:T(e,r.range,r.node.id),detail:r.node.kind});break;case`SequenceFragment`:for(let t of r.operands)b(e,t.statements,n)}}function x(e){let t=new Map;for(let n of S(e)){let r=t.get(n[0])??[],i=n.index;r.push(O(e,i,i+n[0].length)),t.set(n[0],r)}return t}function S(e){let t=e.split(``),n=!1,r=!1,i=!1;for(let a=0;a<e.length;a++){let o=e[a],s=e[a+1];r?o===`
3
+ `?r=!1:t[a]=` `:i?(t[a]=o===`
4
+ `?`
5
+ `:` `,o===`*`&&s===`/`&&(t[a+1]=` `,i=!1,a++)):!n&&o===`/`&&s===`/`?(t[a]=t[a+1]=` `,r=!0,a++):!n&&o===`/`&&s===`*`?(t[a]=t[a+1]=` `,i=!0,a++):o===`"`&&e[a-1]!==`\\`?(n=!n,t[a]=` `):n&&(t[a]=o===`
6
+ `?`
7
+ `:` `)}return[...t.join(``).matchAll(m)]}function C(e){let t=new Set;for(let n of e.source.matchAll(/\b(?:pk|fk|uk)?\s*([A-Za-z_][\w-]*)\s*:/gu))t.add(n[1]);return[...t].sort().map(e=>({label:e,kind:`reference`,detail:`Table column`}))}function w(e,t){let n=Math.min(t,e.length);for(;n>0&&/[\w-]/u.test(e[n-1]);)n--;let r=h.exec(e.slice(n));if(r&&r.index===0)return{value:r[0],range:O(e,n,n+r[0].length)}}function T(e,t,n){let r=e.indexOf(n,t.start.offset);return r<0||r>=t.end.offset?t:O(e,r,r+n.length)}function E(e,t){let n=Math.max(0,Math.min(t,e.length)),r=e.slice(0,n);return{line:r.split(`
8
+ `).length,column:n-r.lastIndexOf(`
9
+ `),offset:n}}function D(e,t){if(t.offset!=null)return Math.max(0,Math.min(t.offset,e.length));let n=e.split(`
10
+ `),r=0;for(let e=1;e<t.line;e++)r+=(n[e-1]?.length??0)+1;return Math.min(e.length,r+Math.max(0,t.column-1))}function O(e,t,n){return{start:E(e,t),end:E(e,n)}}function k(e){return O(e,0,e.length)}function A(e,t){return e.slice(e.lastIndexOf(`
11
+ `,t-1)+1,t)}function j(e,t){return!!(t&&e.start.offset===t.start.offset&&e.end.offset===t.end.offset)}function M(e){return[...new Set(e)].sort()}function N(e){return[...new Map(e.map(e=>[e.name,e])).values()].sort((e,t)=>e.name.localeCompare(t.name))}var P=new g,F=new Map;function I(e,t){L(e,t);let n=[];return n.push(t.onDidChangeContent(()=>{L(e,t)})),n.push(e.languages.registerCompletionItemProvider(`kdiagram`,{triggerCharacters:[`:`,` `,`-`,`(`],provideCompletionItems(t,n){R(e,t);let r=t.getWordUntilPosition(n);return{suggestions:P.complete(z(t),B(n)).map(t=>({label:t.label,kind:H(e,t),detail:t.detail,documentation:t.documentation,insertText:t.insertText??t.label,range:new e.Range(n.lineNumber,r.startColumn,n.lineNumber,r.endColumn)}))}}})),n.push(e.languages.registerHoverProvider(`kdiagram`,{provideHover(t,n){R(e,t);let r=P.hover(z(t),B(n));return r?{range:V(r.range),contents:[{value:r.markdown}]}:null}})),n.push(e.languages.registerDefinitionProvider(`kdiagram`,{provideDefinition(t,n){R(e,t);let r=P.definition(z(t),B(n));return r?{uri:t.uri,range:V(r.range)}:null}})),n.push(e.languages.registerReferenceProvider(`kdiagram`,{provideReferences(t,n,r){return R(e,t),P.references(z(t),B(n),r.includeDeclaration).map(e=>({uri:t.uri,range:V(e.range)}))}})),n.push(e.languages.registerRenameProvider(`kdiagram`,{provideRenameEdits(t,n,r){return R(e,t),{edits:P.renameWorkspace(z(t),B(n),r).map(n=>({resource:e.Uri.parse(n.uri),versionId:n.uri===z(t)?t.getVersionId():void 0,textEdit:{range:V(n.range),text:n.newText}}))}},resolveRenameLocation(t,n){R(e,t);let r=P.definition(z(t),B(n));return r?{range:V(r.range),text:t.getValueInRange(V(r.range))}:{range:new e.Range(n.lineNumber,n.column,n.lineNumber,n.column),text:``,rejectReason:`Select a declared KDiagram identifier.`}}})),n.push(e.languages.registerDocumentSymbolProvider(`kdiagram`,{provideDocumentSymbols(t){return R(e,t),P.documentSymbols(z(t)).map(t=>({name:t.name,detail:`KDiagram ${t.kind}`,kind:t.kind===`diagram`?e.languages.SymbolKind.Namespace:t.kind===`group`?e.languages.SymbolKind.Package:t.kind===`style`?e.languages.SymbolKind.Class:e.languages.SymbolKind.Object,tags:[],range:V(t.range),selectionRange:V(t.range)}))}})),n.push(e.languages.registerFoldingRangeProvider(`kdiagram`,{provideFoldingRanges(t){return R(e,t),P.foldingRanges(z(t)).map(e=>({start:e.startLine,end:e.endLine}))}})),n.push(e.languages.registerDocumentFormattingEditProvider(`kdiagram`,{provideDocumentFormattingEdits(t){return R(e,t),P.format(z(t)).map(e=>({range:V(e.range),text:e.newText}))}})),{dispose(){P.closeDocument(z(t));for(let e of n)e.dispose()}}}function L(e,t){let n=z(t),r=t.getVersionId();F.set(n,r);let i=P.updateDocument(n,t.getValue(),r);e.editor.setModelMarkers(t,`kdiagram-language-service`,i.diagnostics.map(t=>({severity:t.severity===`error`?e.MarkerSeverity.Error:t.severity===`warning`?e.MarkerSeverity.Warning:e.MarkerSeverity.Info,code:t.code,message:`${t.message}${t.hint?`\n${t.hint}`:``}`,startLineNumber:t.range.start.line,startColumn:t.range.start.column,endLineNumber:t.range.end.line,endColumn:Math.max(t.range.end.column,t.range.start.column+1)})))}function R(e,t){F.get(z(t))!==t.getVersionId()&&L(e,t)}function z(e){return e.uri.toString()}function B(e){return{line:e.lineNumber,column:e.column}}function V(e){return{startLineNumber:e.start.line,startColumn:e.start.column,endLineNumber:e.end.line,endColumn:e.end.column}}function H(e,t){switch(t.kind){case`keyword`:return e.languages.CompletionItemKind.Keyword;case`kind`:return e.languages.CompletionItemKind.Class;case`property`:return e.languages.CompletionItemKind.Property;case`reference`:return e.languages.CompletionItemKind.Reference;case`style`:return e.languages.CompletionItemKind.Class;case`icon`:return e.languages.CompletionItemKind.Color;case`theme-token`:return e.languages.CompletionItemKind.Color;case`value`:return e.languages.CompletionItemKind.Value}}export{I as installKDiagramLanguage};