intelligent-system-design-language 0.4.0 → 0.4.1

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 (35) hide show
  1. package/out/cli/cli-util.js +9 -3
  2. package/out/cli/cli-util.js.map +1 -1
  3. package/out/cli/components/derived-data-generator.js +23 -8
  4. package/out/cli/components/derived-data-generator.js.map +1 -1
  5. package/out/cli/components/dev-module-generator.js +399 -0
  6. package/out/cli/components/dev-module-generator.js.map +1 -0
  7. package/out/cli/components/method-generator.js +83 -36
  8. package/out/cli/components/method-generator.js.map +1 -1
  9. package/out/cli/components/vue/base-components/vue-string-choices.js +11 -4
  10. package/out/cli/components/vue/base-components/vue-string-choices.js.map +1 -1
  11. package/out/cli/generator.js +46 -42
  12. package/out/cli/generator.js.map +1 -1
  13. package/out/extension/main.cjs +710 -560
  14. package/out/extension/main.cjs.map +4 -4
  15. package/out/extension/main.js +2 -2
  16. package/out/extension/main.js.map +1 -1
  17. package/out/extension/package.json +1 -1
  18. package/out/language/generated/ast.js +13 -4
  19. package/out/language/generated/ast.js.map +1 -1
  20. package/out/language/generated/grammar.js +106 -32
  21. package/out/language/generated/grammar.js.map +1 -1
  22. package/out/language/intelligent-system-design-language-module.js +3 -1
  23. package/out/language/intelligent-system-design-language-module.js.map +1 -1
  24. package/out/language/intelligent-system-design-language-validator.js +20 -7
  25. package/out/language/intelligent-system-design-language-validator.js.map +1 -1
  26. package/out/language/isdl-completion-provider.js +32 -0
  27. package/out/language/isdl-completion-provider.js.map +1 -0
  28. package/out/language/isdl-docs.js +106 -0
  29. package/out/language/isdl-docs.js.map +1 -0
  30. package/out/language/isdl-hover-provider.js +4 -54
  31. package/out/language/isdl-hover-provider.js.map +1 -1
  32. package/out/language/main.cjs +633 -483
  33. package/out/language/main.cjs.map +4 -4
  34. package/out/package.json +1 -1
  35. package/package.json +1 -1
@@ -0,0 +1,106 @@
1
+ /**
2
+ * Single source of truth for in-editor documentation routing.
3
+ *
4
+ * The same short descriptions power three discoverability surfaces:
5
+ * - the hover provider (keyed by AST `$type`)
6
+ * - completion items (keyed by the ISDL keyword literal)
7
+ * - validation diagnostics ("learn more" links via `codeDescription.href`)
8
+ *
9
+ * Every entry carries a `wiki` target (`Page#anchor`, relative to the wiki base) so a
10
+ * user can jump straight from the thing they're looking at to the page that explains it.
11
+ * This is the "I know what I want but can't find the docs" fix: the editor is the index.
12
+ */
13
+ var _a, _b, _c;
14
+ export const WIKI_BASE = 'https://github.com/cswendrowski/intelligent-system-design-language/wiki/';
15
+ /** Build an absolute wiki URL from a `Page#anchor` target. */
16
+ export function wikiUrl(wiki) {
17
+ return WIKI_BASE + wiki;
18
+ }
19
+ // Order matters for keywords shared by several constructs (e.g. `choice`, `choices`):
20
+ // the first definition listing a keyword wins, so the most common meaning is listed first.
21
+ const DOCS = [
22
+ // ── Simple fields ────────────────────────────────────────────────────────
23
+ { summary: '**string** — A plain text input field.', wiki: 'Fields#string', detail: 'Field', types: ['StringExp'], keywords: ['string'] },
24
+ { summary: '**number** — A numeric input field. Supports `min`, `max`, `initial`, and a calculated `value`.', wiki: 'Fields#number', detail: 'Field', types: ['NumberExp'], keywords: ['number'] },
25
+ { summary: '**boolean** — A true/false checkbox.', wiki: 'Fields#boolean', detail: 'Field', types: ['BooleanExp'], keywords: ['boolean'] },
26
+ { summary: '**html** — A rich text editor field (supports HTML markup).', wiki: 'Fields#html', detail: 'Field', types: ['HtmlExp'], keywords: ['html'] },
27
+ { summary: '**choice\\<string\\>** — A single-select dropdown from a fixed list of string options.', wiki: 'Fields#choice-string', detail: 'Field', types: ['StringChoiceField'], keywords: ['choice'] },
28
+ { summary: '**choice\\<damageType\\>** — A dropdown for selecting a damage type defined in your keywords.', wiki: 'Fields#choice-damagetype-wip', detail: 'Field', types: ['DamageTypeChoiceField'] },
29
+ { summary: '**choices\\<string\\>** — A multi-select field. Accepts up to `max` selections from a fixed list.', wiki: 'Fields#choices-string-multi-select', detail: 'Field', types: ['StringChoicesField'], keywords: ['choices'] },
30
+ // ── Common building blocks ───────────────────────────────────────────────
31
+ { summary: '**resource** — A current/max bar (HP, Mana, etc.). Tag with `health` or `wounds` to mark as the primary pool. Supports `style`, `segments`, `min`, and `max`.', wiki: 'Fields#resource', detail: 'Field', types: ['ResourceExp'], keywords: ['resource'] },
32
+ { summary: '**tracker** — A visual progress tracker. Styles: `bar`, `dial`, `icons`, `slashes`, `segmented`, `clock`, `plain`.', wiki: 'Fields#tracker', detail: 'Field', types: ['TrackerExp'], keywords: ['tracker'] },
33
+ { summary: '**attribute** — A stat with an optional derived `mod`. Make it clickable with `roll:` (posts a standard roll card) or `function:` (calls a no-arg function on this document for full control over the result). Styles: `plain`, `box`.', wiki: 'Fields#attribute', detail: 'Field', types: ['AttributeExp'], keywords: ['attribute'] },
34
+ { summary: '**money** — A currency field. Use `format` (`compact`/`full`/`auto`) and optional denominations block for multi-currency systems.', wiki: 'Fields#money', detail: 'Field', types: ['MoneyField'], keywords: ['money'] },
35
+ { summary: '**measuredTemplate** — A Foundry VTT measured template reference (AoE shapes like circles, cones, rays).', wiki: 'Fields#measured-template', detail: 'Field', types: ['MeasuredTemplateField'], keywords: ['measuredTemplate'] },
36
+ { summary: '**bonuses** — Displays aggregated active-effect damage bonuses by type.', wiki: 'Fields#bonuses', detail: 'Field', types: ['DamageBonusesField'], keywords: ['bonuses'] },
37
+ { summary: '**resistances** — Displays aggregated active-effect damage resistances by type.', wiki: 'Fields#resistances', detail: 'Field', types: ['DamageResistancesField'], keywords: ['resistances'] },
38
+ { summary: '**pinned** — Shows items the player has pinned for quick access.', wiki: 'Fields#pinned-field', detail: 'Field', types: ['PinnedField'], keywords: ['pinned'] },
39
+ // ── Date / time fields ───────────────────────────────────────────────────
40
+ { summary: '**date** — A date picker field.', wiki: 'Fields#date-time-and-datetime', detail: 'Field', types: ['DateExp'], keywords: ['date'] },
41
+ { summary: '**time** — A time picker field.', wiki: 'Fields#date-time-and-datetime', detail: 'Field', types: ['TimeExp'], keywords: ['time'] },
42
+ { summary: '**datetime** — A combined date and time picker field.', wiki: 'Fields#date-time-and-datetime', detail: 'Field', types: ['DateTimeExp'], keywords: ['datetime'] },
43
+ // ── Dice fields ──────────────────────────────────────────────────────────
44
+ { summary: '**die** — A single die type selector (d4, d6, d8, d10, d12, d20, d100).', wiki: 'Fields#die-field', detail: 'Field', types: ['DieField'], keywords: ['die'] },
45
+ { summary: '**dice** — A dice pool selector (NdX). Tracks both count and die size.', wiki: 'Fields#dice-field', detail: 'Field', types: ['DiceField'], keywords: ['dice'] },
46
+ // ── Document links / embeds ──────────────────────────────────────────────
47
+ { summary: '**DocumentType name** — A reference to a single linked item of the specified type.', wiki: 'Fields#single-item', detail: 'Field', types: ['SingleDocumentExp'] },
48
+ { summary: '**choice\\<DocumentType\\>** — A dropdown linking to one item of the specified type.', wiki: 'Fields#document-choice', detail: 'Field', types: ['DocumentChoiceExp'] },
49
+ { summary: '**choices\\<ItemType\\>** — A multi-select field linking to multiple items of the specified type.', wiki: 'Fields#document-choices', detail: 'Field', types: ['DocumentChoicesExp'] },
50
+ { summary: '**inventory\\<ItemType\\>** — A grid-based inventory. Supports slots, rows, columns, quantity tracking, money integration, and weight/value sums.', wiki: 'Fields#inventory-field', detail: 'Field', types: ['InventoryField'], keywords: ['inventory'] },
51
+ { summary: '**table\\<ItemType\\>** — An embedded table listing linked items. Use `fields` to choose columns and `where` to filter.', wiki: 'Fields#table-field', detail: 'Field', types: ['TableField'], keywords: ['table'] },
52
+ { summary: '**macro** — A Foundry VTT macro reference. Execute it in code with `self.Name.execute()`.', wiki: 'Fields#macro-field', detail: 'Field', types: ['MacroField'], keywords: ['macro'] },
53
+ { summary: '**paperdoll** — An image-based equipment slot layout. Drop items onto defined hotspots.', wiki: 'Fields#paper-doll', detail: 'Field', types: ['PaperDollExp'], keywords: ['paperdoll'] },
54
+ // ── Reference fields ─────────────────────────────────────────────────────
55
+ { summary: '**self\\<type\\>** — A mirror of another field on this same document. Changes reflect in real time.', wiki: 'Fields#self-property-reference', detail: 'Field', types: ['SelfPropertyRefExp'], keywords: ['self'] },
56
+ { summary: '**parent\\<type\\>** — A mirror of a field on the owning parent document (e.g. an item reading from its actor).', wiki: 'Fields#parent-property-reference', detail: 'Field', types: ['ParentPropertyRefExp'], keywords: ['parent'] },
57
+ // ── WIP fields ───────────────────────────────────────────────────────────
58
+ { summary: '**damageTrack** ⚠️ *WIP* — A damage track with typed boxes (bashing, lethal, aggravated, etc.). May change in a future version.', wiki: 'Fields#damage-track', detail: 'Field', types: ['DamageTrackExp'], keywords: ['damageTrack'] },
59
+ // ── Documents & configuration ────────────────────────────────────────────
60
+ { summary: '**actor** — Defines an actor document type (characters, NPCs, vehicles). Generates a full character sheet.', wiki: 'Document', detail: 'Document', types: ['Actor'], keywords: ['actor'] },
61
+ { summary: '**item** — Defines an item document type (weapons, spells, skills). Generates an item sheet.', wiki: 'Document', detail: 'Document', types: ['Item'], keywords: ['item'] },
62
+ { summary: '**config** — System-wide configuration: name, id, author, description, and keyword definitions.', wiki: 'Config', detail: 'Configuration', types: ['Config'], keywords: ['config'] },
63
+ { summary: '**keywords** — Defines named keywords that appear as tags in chat cards and rich text. Each keyword can have a `summary`, `color`, and `icon`.', wiki: 'Keywords-and-Journals#keywords-system', detail: 'Configuration', types: ['Keywords'], keywords: ['keywords'] },
64
+ // ── Layout / structure ───────────────────────────────────────────────────
65
+ { summary: '**section** — Groups related fields under a named heading on the sheet.', wiki: 'Document#section', detail: 'Structure', types: ['Section'], keywords: ['section'] },
66
+ { summary: '**page** — Adds a separate tab to the document sheet. Supports `icon` and `background`.', wiki: 'Document#page', detail: 'Structure', types: ['Page'], keywords: ['page'] },
67
+ { summary: '**row** — Arranges child fields horizontally side by side.', wiki: 'Document#row', detail: 'Structure', types: ['Row'], keywords: ['row'] },
68
+ { summary: '**column** — Stacks child fields vertically within a row.', wiki: 'Document#column', detail: 'Structure', types: ['Column'], keywords: ['column'] },
69
+ // ── Executables & logic ──────────────────────────────────────────────────
70
+ { summary: '**action** — A clickable button on the sheet that runs code. Supports `visibility`, `icon`, and `color` params.', wiki: 'Basic-Logic#simple-actions', detail: 'Logic', types: ['Action'], keywords: ['action'] },
71
+ { summary: '**on** — Reacts to a Foundry VTT event (`combatStart`, `roundStart`, `turnStart`, `appliedDamage`, etc.).', wiki: 'Interactivity#event-handling-hook-handlers', detail: 'Logic', types: ['HookHandler'], keywords: ['on'] },
72
+ { summary: '**function** — A reusable named function with typed parameters and an optional `returns` type.', wiki: 'Advanced-Logic#functions', detail: 'Logic', types: ['FunctionDefinition'], keywords: ['function'] },
73
+ // ── Keyword-only logic enrichers (no dedicated AST hover, surfaced in completion) ──
74
+ { summary: '**status** — Defines a status effect (condition) that can appear on the token, optionally gated by a `when:` condition and shown with an icon.', wiki: 'Keywords-and-Journals#status-effects', detail: 'Keyword', keywords: ['status'] },
75
+ { summary: '**health** — Tags a `resource` as the primary health pool: enables damage application and automatic green → yellow → red coloring.', wiki: 'Fields#resource', detail: 'Field tag', keywords: ['health'] },
76
+ { summary: '**prompt** — Pauses an action to ask the player for input (numbers, choices, booleans) through a dialog.', wiki: 'Interactivity#interactive-prompts', detail: 'Logic', keywords: ['prompt'] },
77
+ { summary: '**roll()** — Rolls a dice expression and returns a result you can inspect: `.total`, `.crit`, `.fumble`, `.successes`, plus dice-pool queries.', wiki: 'Basic-Logic#dice-rolling', detail: 'Logic', keywords: ['roll'] },
78
+ { summary: '**chat** — Posts a chat card. Put fields, text, and buttons inside the block to compose the message.', wiki: 'Basic-Logic#chat-cards', detail: 'Logic', keywords: ['chat'] },
79
+ { summary: '**fleeting** — A temporary variable that exists only for the current action or calculation.', wiki: 'Basic-Logic#fleeting-variables', detail: 'Logic', keywords: ['fleeting'] },
80
+ ];
81
+ /** AST `$type` → documentation, consumed by the hover provider. */
82
+ export const TYPE_DOCS = {};
83
+ /** ISDL keyword literal → documentation, consumed by the completion provider. */
84
+ export const KEYWORD_DOCS = {};
85
+ for (const def of DOCS) {
86
+ const resolved = { summary: def.summary, wiki: def.wiki, detail: (_a = def.detail) !== null && _a !== void 0 ? _a : 'ISDL' };
87
+ for (const t of (_b = def.types) !== null && _b !== void 0 ? _b : [])
88
+ TYPE_DOCS[t] = resolved;
89
+ for (const k of (_c = def.keywords) !== null && _c !== void 0 ? _c : []) {
90
+ if (!(k in KEYWORD_DOCS))
91
+ KEYWORD_DOCS[k] = resolved; // first listing wins for shared keywords
92
+ }
93
+ }
94
+ /** Markdown body for a hover/completion popup: the summary plus a deep link to the wiki. */
95
+ export function docMarkdown(entry) {
96
+ return `${entry.summary}\n\n📖 [Open the docs →](${wikiUrl(entry.wiki)})`;
97
+ }
98
+ /**
99
+ * Diagnostic options that attach a "learn more" link to a validation message.
100
+ * Spread into a `ValidationAcceptor` options object: the editor renders the code as a
101
+ * clickable link to the relevant wiki page, turning errors into teaching moments.
102
+ */
103
+ export function wikiDiagnostic(wiki) {
104
+ return { code: 'isdl-docs', codeDescription: { href: wikiUrl(wiki) } };
105
+ }
106
+ //# sourceMappingURL=isdl-docs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isdl-docs.js","sourceRoot":"","sources":["../../src/language/isdl-docs.ts"],"names":[],"mappings":"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"}
@@ -1,56 +1,5 @@
1
1
  import { CstUtils } from 'langium';
2
- const FIELD_DOCS = {
3
- // Basic fields
4
- StringExp: '**string** — A plain text input field.',
5
- NumberExp: '**number** — A numeric input field. Supports `min`, `max`, `initial`, and a calculated `value`.',
6
- BooleanExp: '**boolean** — A true/false checkbox.',
7
- HtmlExp: '**html** — A rich text editor field (supports HTML markup).',
8
- StringChoiceField: '**choice\\<string\\>** — A single-select dropdown from a fixed list of string options.',
9
- DamageTypeChoiceField: '**choice\\<damageType\\>** — A dropdown for selecting a damage type defined in your keywords.',
10
- StringChoicesField: '**choices\\<string\\>** — A multi-select field. Accepts up to `max` selections from a fixed list.',
11
- // Complex fields
12
- ResourceExp: '**resource** — A current/max bar (HP, Mana, etc.). Tag with `health` or `wounds` to mark as the primary pool. Supports `style`, `segments`, `min`, and `max`.',
13
- TrackerExp: '**tracker** — A visual progress tracker. Styles: `bar`, `dial`, `icons`, `slashes`, `segmented`, `clock`, `plain`.',
14
- AttributeExp: '**attribute** — A stat with an optional derived `mod`. Make it clickable with `roll:` (posts a standard roll card) or `function:` (calls a no-arg function on this document for full control over the result). Styles: `plain`, `box`.',
15
- MeasuredTemplateField: '**measuredTemplate** — A Foundry VTT measured template reference (AoE shapes like circles, cones, rays).',
16
- DamageBonusesField: '**bonuses** — Displays aggregated active-effect damage bonuses by type.',
17
- DamageResistancesField: '**resistances** — Displays aggregated active-effect damage resistances by type.',
18
- MoneyField: '**money** — A currency field. Use `format` (`compact`/`full`/`auto`) and optional denominations block for multi-currency systems.',
19
- PinnedField: '**pinned** — Shows items the player has pinned for quick access.',
20
- DocumentChoicesExp: '**choices\\<ItemType\\>** — A multi-select field linking to multiple items of the specified type.',
21
- // WIP fields
22
- DamageTrackExp: '**damageTrack** ⚠️ *WIP* — A damage track with typed boxes (bashing, lethal, aggravated, etc.). May change in a future version.',
23
- // Date/Time fields
24
- DateExp: '**date** — A date picker field.',
25
- TimeExp: '**time** — A time picker field.',
26
- DateTimeExp: '**datetime** — A combined date and time picker field.',
27
- // Dice fields
28
- DieField: '**die** — A single die type selector (d4, d6, d8, d10, d12, d20, d100).',
29
- DiceField: '**dice** — A dice pool selector (NdX). Tracks both count and die size.',
30
- // Document fields
31
- SingleDocumentExp: '**DocumentType name** — A reference to a single linked item of the specified type.',
32
- DocumentChoiceExp: '**choice\\<DocumentType\\>** — A dropdown linking to one item of the specified type.',
33
- InventoryField: '**inventory\\<ItemType\\>** — A grid-based inventory. Supports slots, rows, columns, quantity tracking, money integration, and weight/value sums.',
34
- MacroField: '**macro** — A Foundry VTT macro reference. Execute it in code with `self.Name.execute()`.',
35
- TableField: '**table\\<ItemType\\>** — An embedded table listing linked items. Use `fields` to choose columns and `where` to filter.',
36
- PaperDollExp: '**paperdoll** — An image-based equipment slot layout. Drop items onto defined hotspots.',
37
- // Reference fields
38
- SelfPropertyRefExp: '**self\\<type\\>** — A mirror of another field on this same document. Changes reflect in real time.',
39
- ParentPropertyRefExp: '**parent\\<type\\>** — A mirror of a field on the owning parent document (e.g. an item reading from its actor).',
40
- // Layout / structure
41
- Actor: '**actor** — Defines an actor document type (characters, NPCs, vehicles). Generates a full character sheet.',
42
- Item: '**item** — Defines an item document type (weapons, spells, skills). Generates an item sheet.',
43
- Config: '**config** — System-wide configuration: name, id, author, description, and keyword definitions.',
44
- Keywords: '**keywords** — Defines named keywords that appear as tags in chat cards and rich text. Each keyword can have a `summary`, `color`, and `icon`.',
45
- Section: '**section** — Groups related fields under a named heading on the sheet.',
46
- Page: '**page** — Adds a separate tab to the document sheet. Supports `icon` and `background`.',
47
- Row: '**row** — Arranges child fields horizontally side by side.',
48
- Column: '**column** — Stacks child fields vertically within a row.',
49
- // Executables
50
- Action: '**action** — A clickable button on the sheet that runs code. Supports `visibility`, `icon`, and `color` params.',
51
- HookHandler: '**on** — Reacts to a Foundry VTT event (`combatStart`, `roundStart`, `turnStart`, `appliedDamage`, etc.).',
52
- FunctionDefinition: '**function** — A reusable named function with typed parameters and an optional `returns` type.',
53
- };
2
+ import { TYPE_DOCS, docMarkdown } from './isdl-docs.js';
54
3
  export class IsdlHoverProvider {
55
4
  getHoverContent(document, params) {
56
5
  var _a, _b;
@@ -64,9 +13,10 @@ export class IsdlHoverProvider {
64
13
  // Walk up the AST container chain until we find a type with docs
65
14
  let node = leaf.astNode;
66
15
  while (node) {
67
- const doc = FIELD_DOCS[node.$type];
16
+ const doc = TYPE_DOCS[node.$type];
68
17
  if (doc) {
69
- return { contents: { kind: 'markdown', value: doc } };
18
+ // Summary + a deep link to the wiki page that explains this construct.
19
+ return { contents: { kind: 'markdown', value: docMarkdown(doc) } };
70
20
  }
71
21
  node = node.$container;
72
22
  }
@@ -1 +1 @@
1
- {"version":3,"file":"isdl-hover-provider.js","sourceRoot":"","sources":["../../src/language/isdl-hover-provider.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEnC,MAAM,UAAU,GAA2B;IACvC,eAAe;IACf,SAAS,EAAe,wCAAwC;IAChE,SAAS,EAAe,iGAAiG;IACzH,UAAU,EAAc,sCAAsC;IAC9D,OAAO,EAAiB,6DAA6D;IACrF,iBAAiB,EAAO,wFAAwF;IAChH,qBAAqB,EAAG,+FAA+F;IACvH,kBAAkB,EAAM,mGAAmG;IAE3H,iBAAiB;IACjB,WAAW,EAAa,+JAA+J;IACvL,UAAU,EAAc,oHAAoH;IAC5I,YAAY,EAAY,wOAAwO;IAChQ,qBAAqB,EAAG,0GAA0G;IAClI,kBAAkB,EAAM,yEAAyE;IACjG,sBAAsB,EAAE,iFAAiF;IACzG,UAAU,EAAc,mIAAmI;IAC3J,WAAW,EAAa,kEAAkE;IAC1F,kBAAkB,EAAM,mGAAmG;IAE3H,aAAa;IACb,cAAc,EAAU,iIAAiI;IAEzJ,mBAAmB;IACnB,OAAO,EAAiB,iCAAiC;IACzD,OAAO,EAAiB,iCAAiC;IACzD,WAAW,EAAa,uDAAuD;IAE/E,cAAc;IACd,QAAQ,EAAgB,yEAAyE;IACjG,SAAS,EAAe,wEAAwE;IAEhG,kBAAkB;IAClB,iBAAiB,EAAO,oFAAoF;IAC5G,iBAAiB,EAAO,sFAAsF;IAC9G,cAAc,EAAU,mJAAmJ;IAC3K,UAAU,EAAc,2FAA2F;IACnH,UAAU,EAAc,yHAAyH;IACjJ,YAAY,EAAY,yFAAyF;IAEjH,mBAAmB;IACnB,kBAAkB,EAAM,qGAAqG;IAC7H,oBAAoB,EAAI,iHAAiH;IAEzI,qBAAqB;IACrB,KAAK,EAAmB,4GAA4G;IACpI,IAAI,EAAoB,8FAA8F;IACtH,MAAM,EAAkB,iGAAiG;IACzH,QAAQ,EAAgB,gJAAgJ;IACxK,OAAO,EAAiB,yEAAyE;IACjG,IAAI,EAAoB,yFAAyF;IACjH,GAAG,EAAqB,4DAA4D;IACpF,MAAM,EAAkB,2DAA2D;IAEnF,cAAc;IACd,MAAM,EAAkB,iHAAiH;IACzI,WAAW,EAAa,2GAA2G;IACnI,kBAAkB,EAAM,gGAAgG;CAC3H,CAAC;AAEF,MAAM,OAAO,iBAAiB;IAE1B,eAAe,CAAC,QAAyB,EAAE,MAAmB;;QAC1D,MAAM,OAAO,GAAG,MAAA,MAAA,QAAQ,CAAC,WAAW,0CAAE,KAAK,0CAAE,QAAQ,CAAC;QACtD,IAAI,CAAC,OAAO;YAAE,OAAO,SAAS,CAAC;QAE/B,MAAM,MAAM,GAAG,QAAQ,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC/D,MAAM,IAAI,GAAG,QAAQ,CAAC,oBAAoB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC5D,IAAI,CAAC,IAAI;YAAE,OAAO,SAAS,CAAC;QAE5B,iEAAiE;QACjE,IAAI,IAAI,GAAwB,IAAI,CAAC,OAAO,CAAC;QAC7C,OAAO,IAAI,EAAE;YACT,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACnC,IAAI,GAAG,EAAE;gBACL,OAAO,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC;aACzD;YACD,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC;SAC1B;QAED,OAAO,SAAS,CAAC;IACrB,CAAC;CACJ"}
1
+ {"version":3,"file":"isdl-hover-provider.js","sourceRoot":"","sources":["../../src/language/isdl-hover-provider.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAExD,MAAM,OAAO,iBAAiB;IAE1B,eAAe,CAAC,QAAyB,EAAE,MAAmB;;QAC1D,MAAM,OAAO,GAAG,MAAA,MAAA,QAAQ,CAAC,WAAW,0CAAE,KAAK,0CAAE,QAAQ,CAAC;QACtD,IAAI,CAAC,OAAO;YAAE,OAAO,SAAS,CAAC;QAE/B,MAAM,MAAM,GAAG,QAAQ,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC/D,MAAM,IAAI,GAAG,QAAQ,CAAC,oBAAoB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC5D,IAAI,CAAC,IAAI;YAAE,OAAO,SAAS,CAAC;QAE5B,iEAAiE;QACjE,IAAI,IAAI,GAAwB,IAAI,CAAC,OAAO,CAAC;QAC7C,OAAO,IAAI,EAAE;YACT,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAClC,IAAI,GAAG,EAAE;gBACL,uEAAuE;gBACvE,OAAO,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;aACtE;YACD,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC;SAC1B;QAED,OAAO,SAAS,CAAC;IACrB,CAAC;CACJ"}