intelligent-system-design-language 0.3.13

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 (209) hide show
  1. package/.claude/agents/langium-language-designer.md +38 -0
  2. package/.claude/agents/typescript-vscode-expert.md +29 -0
  3. package/.claude/agents/ui-ux-designer.md +36 -0
  4. package/.claude/settings.local.json +33 -0
  5. package/.idea/inspectionProfiles/Project_Default.xml +7 -0
  6. package/.idea/isdl.iml +14 -0
  7. package/.idea/modules.xml +9 -0
  8. package/.idea/vcs.xml +7 -0
  9. package/.idea/watcherTasks.xml +4 -0
  10. package/.vscodeignore +18 -0
  11. package/LICENSE +674 -0
  12. package/README.md +86 -0
  13. package/bin/cli.js +4 -0
  14. package/bin/lsp.js +8 -0
  15. package/isdl.png +0 -0
  16. package/out/_backgrounds.scss +91 -0
  17. package/out/_handlebars.scss +505 -0
  18. package/out/_isdlStyles.scss +1357 -0
  19. package/out/_vuetifyOverrides.scss +425 -0
  20. package/out/_vuetifyStyles.scss +31957 -0
  21. package/out/cli/cli-util.js +39 -0
  22. package/out/cli/cli-util.js.map +1 -0
  23. package/out/cli/components/_backgrounds.scss +91 -0
  24. package/out/cli/components/_handlebars.scss +505 -0
  25. package/out/cli/components/_isdlStyles.scss +1357 -0
  26. package/out/cli/components/_vuetifyOverrides.scss +425 -0
  27. package/out/cli/components/_vuetifyStyles.scss +31957 -0
  28. package/out/cli/components/active-effect-sheet-generator.js +643 -0
  29. package/out/cli/components/active-effect-sheet-generator.js.map +1 -0
  30. package/out/cli/components/base-actor-sheet-generator.js +125 -0
  31. package/out/cli/components/base-actor-sheet-generator.js.map +1 -0
  32. package/out/cli/components/base-sheet-generator.js +525 -0
  33. package/out/cli/components/base-sheet-generator.js.map +1 -0
  34. package/out/cli/components/chat-card-generator.js +683 -0
  35. package/out/cli/components/chat-card-generator.js.map +1 -0
  36. package/out/cli/components/css-generator.js +58 -0
  37. package/out/cli/components/css-generator.js.map +1 -0
  38. package/out/cli/components/damage-roll-generator.js +173 -0
  39. package/out/cli/components/damage-roll-generator.js.map +1 -0
  40. package/out/cli/components/datamodel-generator.js +672 -0
  41. package/out/cli/components/datamodel-generator.js.map +1 -0
  42. package/out/cli/components/derived-data-generator.js +1340 -0
  43. package/out/cli/components/derived-data-generator.js.map +1 -0
  44. package/out/cli/components/hotbar-drop-hook-generator.js +95 -0
  45. package/out/cli/components/hotbar-drop-hook-generator.js.map +1 -0
  46. package/out/cli/components/init-hook-generator.js +597 -0
  47. package/out/cli/components/init-hook-generator.js.map +1 -0
  48. package/out/cli/components/keywords-generator.js +220 -0
  49. package/out/cli/components/keywords-generator.js.map +1 -0
  50. package/out/cli/components/language-generator.js +110 -0
  51. package/out/cli/components/language-generator.js.map +1 -0
  52. package/out/cli/components/measured-template-preview.js +234 -0
  53. package/out/cli/components/measured-template-preview.js.map +1 -0
  54. package/out/cli/components/method-generator.js +1812 -0
  55. package/out/cli/components/method-generator.js.map +1 -0
  56. package/out/cli/components/ready-hook-generator.js +448 -0
  57. package/out/cli/components/ready-hook-generator.js.map +1 -0
  58. package/out/cli/components/token-generator.js +138 -0
  59. package/out/cli/components/token-generator.js.map +1 -0
  60. package/out/cli/components/utils.js +176 -0
  61. package/out/cli/components/utils.js.map +1 -0
  62. package/out/cli/components/vue/base-components/vue-attribute.js +148 -0
  63. package/out/cli/components/vue/base-components/vue-attribute.js.map +1 -0
  64. package/out/cli/components/vue/base-components/vue-boolean.js +77 -0
  65. package/out/cli/components/vue/base-components/vue-boolean.js.map +1 -0
  66. package/out/cli/components/vue/base-components/vue-calculator.js +106 -0
  67. package/out/cli/components/vue/base-components/vue-calculator.js.map +1 -0
  68. package/out/cli/components/vue/base-components/vue-damage-application.js +369 -0
  69. package/out/cli/components/vue/base-components/vue-damage-application.js.map +1 -0
  70. package/out/cli/components/vue/base-components/vue-damage-bonuses.js +225 -0
  71. package/out/cli/components/vue/base-components/vue-damage-bonuses.js.map +1 -0
  72. package/out/cli/components/vue/base-components/vue-damage-resistances.js +256 -0
  73. package/out/cli/components/vue/base-components/vue-damage-resistances.js.map +1 -0
  74. package/out/cli/components/vue/base-components/vue-damage-track.js +134 -0
  75. package/out/cli/components/vue/base-components/vue-damage-track.js.map +1 -0
  76. package/out/cli/components/vue/base-components/vue-date-time.js +55 -0
  77. package/out/cli/components/vue/base-components/vue-date-time.js.map +1 -0
  78. package/out/cli/components/vue/base-components/vue-dice.js +111 -0
  79. package/out/cli/components/vue/base-components/vue-dice.js.map +1 -0
  80. package/out/cli/components/vue/base-components/vue-die.js +86 -0
  81. package/out/cli/components/vue/base-components/vue-die.js.map +1 -0
  82. package/out/cli/components/vue/base-components/vue-document-choice.js +172 -0
  83. package/out/cli/components/vue/base-components/vue-document-choice.js.map +1 -0
  84. package/out/cli/components/vue/base-components/vue-document-choices.js +203 -0
  85. package/out/cli/components/vue/base-components/vue-document-choices.js.map +1 -0
  86. package/out/cli/components/vue/base-components/vue-document-link.js +73 -0
  87. package/out/cli/components/vue/base-components/vue-document-link.js.map +1 -0
  88. package/out/cli/components/vue/base-components/vue-extended-choice.js +101 -0
  89. package/out/cli/components/vue/base-components/vue-extended-choice.js.map +1 -0
  90. package/out/cli/components/vue/base-components/vue-inventory.js +532 -0
  91. package/out/cli/components/vue/base-components/vue-inventory.js.map +1 -0
  92. package/out/cli/components/vue/base-components/vue-macro-choice.js +150 -0
  93. package/out/cli/components/vue/base-components/vue-macro-choice.js.map +1 -0
  94. package/out/cli/components/vue/base-components/vue-measured-template.js +543 -0
  95. package/out/cli/components/vue/base-components/vue-measured-template.js.map +1 -0
  96. package/out/cli/components/vue/base-components/vue-money.js +496 -0
  97. package/out/cli/components/vue/base-components/vue-money.js.map +1 -0
  98. package/out/cli/components/vue/base-components/vue-number.js +184 -0
  99. package/out/cli/components/vue/base-components/vue-number.js.map +1 -0
  100. package/out/cli/components/vue/base-components/vue-paperdoll.js +56 -0
  101. package/out/cli/components/vue/base-components/vue-paperdoll.js.map +1 -0
  102. package/out/cli/components/vue/base-components/vue-parent-property-reference.js +89 -0
  103. package/out/cli/components/vue/base-components/vue-parent-property-reference.js.map +1 -0
  104. package/out/cli/components/vue/base-components/vue-prosemirror.js +31 -0
  105. package/out/cli/components/vue/base-components/vue-prosemirror.js.map +1 -0
  106. package/out/cli/components/vue/base-components/vue-resource.js +149 -0
  107. package/out/cli/components/vue/base-components/vue-resource.js.map +1 -0
  108. package/out/cli/components/vue/base-components/vue-roll-visualizer.js +121 -0
  109. package/out/cli/components/vue/base-components/vue-roll-visualizer.js.map +1 -0
  110. package/out/cli/components/vue/base-components/vue-self-property-reference.js +75 -0
  111. package/out/cli/components/vue/base-components/vue-self-property-reference.js.map +1 -0
  112. package/out/cli/components/vue/base-components/vue-string-choice.js +111 -0
  113. package/out/cli/components/vue/base-components/vue-string-choice.js.map +1 -0
  114. package/out/cli/components/vue/base-components/vue-string-choices.js +216 -0
  115. package/out/cli/components/vue/base-components/vue-string-choices.js.map +1 -0
  116. package/out/cli/components/vue/base-components/vue-string.js +73 -0
  117. package/out/cli/components/vue/base-components/vue-string.js.map +1 -0
  118. package/out/cli/components/vue/base-components/vue-text-field.js +66 -0
  119. package/out/cli/components/vue/base-components/vue-text-field.js.map +1 -0
  120. package/out/cli/components/vue/base-components/vue-tracker.js +444 -0
  121. package/out/cli/components/vue/base-components/vue-tracker.js.map +1 -0
  122. package/out/cli/components/vue/vue-action-component-generator.js +88 -0
  123. package/out/cli/components/vue/vue-action-component-generator.js.map +1 -0
  124. package/out/cli/components/vue/vue-active-effect-sheet-generator.js +1016 -0
  125. package/out/cli/components/vue/vue-active-effect-sheet-generator.js.map +1 -0
  126. package/out/cli/components/vue/vue-base-components-generator.js +59 -0
  127. package/out/cli/components/vue/vue-base-components-generator.js.map +1 -0
  128. package/out/cli/components/vue/vue-datatable-component-generator.js +307 -0
  129. package/out/cli/components/vue/vue-datatable-component-generator.js.map +1 -0
  130. package/out/cli/components/vue/vue-datatable-sheet-class-generator.js +342 -0
  131. package/out/cli/components/vue/vue-datatable-sheet-class-generator.js.map +1 -0
  132. package/out/cli/components/vue/vue-datatable2-component-generator.js +939 -0
  133. package/out/cli/components/vue/vue-datatable2-component-generator.js.map +1 -0
  134. package/out/cli/components/vue/vue-document-creation-app.js +140 -0
  135. package/out/cli/components/vue/vue-document-creation-app.js.map +1 -0
  136. package/out/cli/components/vue/vue-document-creation-sheet.js +105 -0
  137. package/out/cli/components/vue/vue-document-creation-sheet.js.map +1 -0
  138. package/out/cli/components/vue/vue-generator.js +240 -0
  139. package/out/cli/components/vue/vue-generator.js.map +1 -0
  140. package/out/cli/components/vue/vue-mixin.js +338 -0
  141. package/out/cli/components/vue/vue-mixin.js.map +1 -0
  142. package/out/cli/components/vue/vue-pinned-datatable-component-generator.js +306 -0
  143. package/out/cli/components/vue/vue-pinned-datatable-component-generator.js.map +1 -0
  144. package/out/cli/components/vue/vue-prompt-generator.js +201 -0
  145. package/out/cli/components/vue/vue-prompt-generator.js.map +1 -0
  146. package/out/cli/components/vue/vue-prompt-sheet-class-generator.js +252 -0
  147. package/out/cli/components/vue/vue-prompt-sheet-class-generator.js.map +1 -0
  148. package/out/cli/components/vue/vue-sheet-application-generator.js +2008 -0
  149. package/out/cli/components/vue/vue-sheet-application-generator.js.map +1 -0
  150. package/out/cli/components/vue/vue-sheet-class-generator.js +484 -0
  151. package/out/cli/components/vue/vue-sheet-class-generator.js.map +1 -0
  152. package/out/cli/generator.js +659 -0
  153. package/out/cli/generator.js.map +1 -0
  154. package/out/cli/main.js +43 -0
  155. package/out/cli/main.js.map +1 -0
  156. package/out/datatables.min.css +54 -0
  157. package/out/datatables.min.js +178 -0
  158. package/out/extension/github/githubAuthProvider.js +345 -0
  159. package/out/extension/github/githubAuthProvider.js.map +1 -0
  160. package/out/extension/github/githubConfig.js +132 -0
  161. package/out/extension/github/githubConfig.js.map +1 -0
  162. package/out/extension/github/githubGistActions.js +251 -0
  163. package/out/extension/github/githubGistActions.js.map +1 -0
  164. package/out/extension/github/githubGistManager.js +255 -0
  165. package/out/extension/github/githubGistManager.js.map +1 -0
  166. package/out/extension/github/githubManager.js +1735 -0
  167. package/out/extension/github/githubManager.js.map +1 -0
  168. package/out/extension/github/githubQuickActions.js +659 -0
  169. package/out/extension/github/githubQuickActions.js.map +1 -0
  170. package/out/extension/github/githubTreeProvider.js +181 -0
  171. package/out/extension/github/githubTreeProvider.js.map +1 -0
  172. package/out/extension/github/system-workflow.yml +48 -0
  173. package/out/extension/main.cjs +70315 -0
  174. package/out/extension/main.cjs.map +7 -0
  175. package/out/extension/main.js +237 -0
  176. package/out/extension/main.js.map +1 -0
  177. package/out/extension/package.json +426 -0
  178. package/out/isdl.png +0 -0
  179. package/out/language/generated/ast.js +2992 -0
  180. package/out/language/generated/ast.js.map +1 -0
  181. package/out/language/generated/grammar.js +13970 -0
  182. package/out/language/generated/grammar.js.map +1 -0
  183. package/out/language/generated/module.js +20 -0
  184. package/out/language/generated/module.js.map +1 -0
  185. package/out/language/intelligent-system-design-language-formatter.js +85 -0
  186. package/out/language/intelligent-system-design-language-formatter.js.map +1 -0
  187. package/out/language/intelligent-system-design-language-module.js +69 -0
  188. package/out/language/intelligent-system-design-language-module.js.map +1 -0
  189. package/out/language/intelligent-system-design-language-quickfixes.js +37 -0
  190. package/out/language/intelligent-system-design-language-quickfixes.js.map +1 -0
  191. package/out/language/intelligent-system-design-language-validator.js +515 -0
  192. package/out/language/intelligent-system-design-language-validator.js.map +1 -0
  193. package/out/language/isdl-hover-provider.js +77 -0
  194. package/out/language/isdl-hover-provider.js.map +1 -0
  195. package/out/language/isdl-scope-provider.js +149 -0
  196. package/out/language/isdl-scope-provider.js.map +1 -0
  197. package/out/language/main.cjs +47655 -0
  198. package/out/language/main.cjs.map +7 -0
  199. package/out/language/main.js +11 -0
  200. package/out/language/main.js.map +1 -0
  201. package/out/missing-character.png +0 -0
  202. package/out/package.json +426 -0
  203. package/out/paperdoll_default.png +0 -0
  204. package/out/progressbar.min.js +7 -0
  205. package/out/styles.scss +722 -0
  206. package/out/test/formatting/formatter.test.js +46 -0
  207. package/out/test/formatting/formatter.test.js.map +1 -0
  208. package/out/vuetify.esm.js +30279 -0
  209. package/package.json +426 -0
@@ -0,0 +1,515 @@
1
+ import { isProperty, isConfigExpression, isSegmentsParameter, isTrackerStyleParameter, isNumberParamMin, isNumberParamValue, isNumberParamMax, isStringParamChoices, isStringExtendedChoice, isChoiceStringValue, isLayout, isNumberExp, isStringExp, isAttributeExp, isResourceExp, isTrackerExp, isStringParamValue, isStringChoiceField, isAttributeParamMod, isMethodBlock, isAccess, isInventorySlotsParam, isInventoryRowsParam, isInventorySlotSizeParam, isInventoryQuantityParam, isInventoryMoneyParam, isInventorySumParam, isItem, isMoneyField, isActor, isBinaryExpression, isLiteral, isReturnExpression, isAction } from './generated/ast.js';
2
+ import { getAllOfType } from '../cli/components/utils.js';
3
+ import { DiagnosticTag } from 'vscode-languageserver';
4
+ /**
5
+ * Register custom validation checks.
6
+ */
7
+ export function registerValidationChecks(services) {
8
+ const registry = services.validation.ValidationRegistry;
9
+ const validator = services.validation.IntelligentSystemDesignLanguageValidator;
10
+ const checks = {
11
+ Entry: validator.validateEntry,
12
+ Config: validator.validateConfig,
13
+ Actor: validator.validateActor,
14
+ Item: validator.validateItem,
15
+ Property: validator.validateProperty,
16
+ TrackerExp: validator.validateTrackerExpressions,
17
+ StringChoiceField: validator.validateStringChoiceField,
18
+ Document: validator.validateDependencyCycles,
19
+ InventoryField: validator.validateInventoryField,
20
+ NumberExp: validator.validateNumberExp,
21
+ ResourceExp: validator.validateResourceExp,
22
+ AttributeExp: validator.validateAttributeExp,
23
+ DamageTrackExp: validator.validateWipField
24
+ };
25
+ registry.register(checks, validator);
26
+ }
27
+ /**
28
+ * Implementation of custom validations.
29
+ */
30
+ export class IntelligentSystemDesignLanguageValidator {
31
+ validateEntry(entry, accept) {
32
+ if (!entry.config) {
33
+ accept('error', 'Entry requires a config.', { node: entry, property: 'config' });
34
+ }
35
+ }
36
+ validateConfig(config, accept) {
37
+ const id = config.body.find(x => isConfigExpression(x) && x.type == "id");
38
+ if (!id) {
39
+ accept('error', 'Config requires an id.', { node: config, property: 'body' });
40
+ }
41
+ }
42
+ validateActor(actor, accept) {
43
+ const discoveredPropertyNames = new Set();
44
+ function validateUniqueName(node, name) {
45
+ if (discoveredPropertyNames.has(name)) {
46
+ accept('error', `Actor has non-unique property name '${name}'.`, { node: node, property: 'name' });
47
+ }
48
+ discoveredPropertyNames.add(name);
49
+ }
50
+ const properties = getAllOfType(actor.body, isProperty, false);
51
+ for (const property of properties) {
52
+ validateUniqueName(property, property.name);
53
+ }
54
+ // Validate only one macro action per document
55
+ const actions = getAllOfType(actor.body, isAction, false);
56
+ const macroActions = actions.filter(a => a.isMacro);
57
+ if (macroActions.length > 1) {
58
+ for (const action of macroActions) {
59
+ accept('error', 'Only one action per document can be tagged as macro.', { node: action, property: 'isMacro' });
60
+ }
61
+ }
62
+ }
63
+ validateProperty(property, accept) {
64
+ if (property.name) {
65
+ const firstChar = property.name.substring(0, 1);
66
+ if (firstChar.toUpperCase() !== firstChar) {
67
+ accept('warning', 'Property names should start with a capital.', { node: property, property: 'name' });
68
+ }
69
+ }
70
+ }
71
+ validateItem(item, accept) {
72
+ const discoveredPropertyNames = new Set();
73
+ function validateUniqueName(node, name) {
74
+ if (discoveredPropertyNames.has(name)) {
75
+ accept('error', `Item has non-unique property name '${name}'.`, { node: node, property: 'name' });
76
+ }
77
+ discoveredPropertyNames.add(name);
78
+ }
79
+ // If the item has a body, validate the names of the properties
80
+ //if (!item.body) accept('error', 'Item requires at least one property.', { node: item, property: 'body' });
81
+ const properties = getAllOfType(item.body, isProperty, false);
82
+ for (const property of properties) {
83
+ validateUniqueName(property, property.name);
84
+ }
85
+ // Validate only one macro action per document
86
+ const actions = getAllOfType(item.body, isAction, false);
87
+ const macroActions = actions.filter(a => a.isMacro);
88
+ if (macroActions.length > 1) {
89
+ for (const action of macroActions) {
90
+ accept('error', 'Only one action per document can be tagged as macro.', { node: action, property: 'isMacro' });
91
+ }
92
+ }
93
+ }
94
+ validateTrackerExpressions(tracker, accept) {
95
+ const segmentsParam = tracker.params.find(isSegmentsParameter);
96
+ const styleParam = tracker.params.find(isTrackerStyleParameter);
97
+ if (styleParam && styleParam.style !== 'segmented' && segmentsParam) {
98
+ accept('hint', 'The segments param is only supported on the segmented style and will do nothing for other styles', {
99
+ node: segmentsParam,
100
+ code: 'tracker-segments-unnecessary',
101
+ tags: [DiagnosticTag.Unnecessary],
102
+ });
103
+ }
104
+ // Check for NaN-producing expressions in value, min, and max
105
+ const valueParam = tracker.params.find(isNumberParamValue);
106
+ const minParam = tracker.params.find(isNumberParamMin);
107
+ const maxParam = tracker.params.find(isNumberParamMax);
108
+ if (valueParam && isMethodBlock(valueParam.value)) {
109
+ this.validateNumericExpression(valueParam.value.body, accept);
110
+ }
111
+ if (minParam && isMethodBlock(minParam.value)) {
112
+ this.validateNumericExpression(minParam.value.body, accept);
113
+ }
114
+ if (maxParam && isMethodBlock(maxParam.value)) {
115
+ this.validateNumericExpression(maxParam.value.body, accept);
116
+ }
117
+ }
118
+ validateStringChoiceField(field, accept) {
119
+ const choices = field.params.find(isStringParamChoices);
120
+ if (!choices || !choices.choices || choices.choices.length === 0) {
121
+ accept('error', 'String choice fields must have at least one choice defined.', { node: field, property: 'params' });
122
+ return;
123
+ }
124
+ for (const choice of choices.choices) {
125
+ if (isStringExtendedChoice(choice.value)) {
126
+ const valueProperty = choice.value.properties.find(isChoiceStringValue);
127
+ if (!valueProperty || !valueProperty.value || valueProperty.value.trim() === '') {
128
+ accept('error', 'String choices must have a non-empty value.', { node: choice, property: 'value' });
129
+ }
130
+ }
131
+ else {
132
+ if (choice.value.trim() === '') {
133
+ accept('error', 'String choices must not be empty.', { node: choice, property: 'value' });
134
+ }
135
+ }
136
+ }
137
+ }
138
+ validateInventoryField(field, accept) {
139
+ // Validate that inventory only references item documents
140
+ if (field.document.ref && isActor(field.document.ref)) {
141
+ accept('error', 'Inventory fields can only reference item documents, not actors.', { node: field, property: 'document' });
142
+ }
143
+ const slotsParam = field.params.find(isInventorySlotsParam);
144
+ const rowsParam = field.params.find(isInventoryRowsParam);
145
+ const slotSizeParam = field.params.find(isInventorySlotSizeParam);
146
+ const quantityParam = field.params.find(isInventoryQuantityParam);
147
+ const moneyParam = field.params.find(isInventoryMoneyParam);
148
+ const sumParam = field.params.find(isInventorySumParam);
149
+ // Validate slots and rows are positive
150
+ if (slotsParam && slotsParam.value <= 0) {
151
+ accept('error', 'Slots parameter must be greater than 0.', { node: slotsParam, property: 'value' });
152
+ }
153
+ if (rowsParam && rowsParam.value <= 0) {
154
+ accept('error', 'Rows parameter must be greater than 0.', { node: rowsParam, property: 'value' });
155
+ }
156
+ // Validate slotSize range (20-150px)
157
+ if (slotSizeParam) {
158
+ const sizeValue = parseInt(slotSizeParam.value.replace('px', ''));
159
+ if (sizeValue < 20 || sizeValue > 150) {
160
+ accept('warning', 'SlotSize should be between 20px and 150px for optimal display.', { node: slotSizeParam, property: 'value' });
161
+ }
162
+ }
163
+ // Validate quantity field exists on item
164
+ if (quantityParam && quantityParam.field.ref) {
165
+ const itemDocument = field.document.ref;
166
+ if (itemDocument && isItem(itemDocument)) {
167
+ const itemProperties = getAllOfType(itemDocument.body, isProperty, false);
168
+ const quantityField = itemProperties.find(p => { var _a; return p.name === ((_a = quantityParam.field.ref) === null || _a === void 0 ? void 0 : _a.name); });
169
+ if (!quantityField) {
170
+ accept('error', `Quantity field '${quantityParam.field.ref.name}' does not exist on item '${itemDocument.name}'.`, { node: quantityParam, property: 'field' });
171
+ }
172
+ else if (!isNumberExp(quantityField) && !isResourceExp(quantityField) &&
173
+ !isAttributeExp(quantityField) && !isTrackerExp(quantityField)) {
174
+ accept('error', 'Quantity field must be a numeric type (number, resource, attribute, or tracker).', { node: quantityParam, property: 'field' });
175
+ }
176
+ }
177
+ }
178
+ // Validate money field exists and is MoneyField type
179
+ if (moneyParam && moneyParam.field.ref && !isMoneyField(moneyParam.field.ref)) {
180
+ accept('error', 'Money parameter must reference a money field.', { node: moneyParam, property: 'field' });
181
+ }
182
+ // Validate sum properties exist on item and are numeric
183
+ if (sumParam) {
184
+ const itemDocument = field.document.ref;
185
+ if (itemDocument && isItem(itemDocument)) {
186
+ const itemProperties = getAllOfType(itemDocument.body, isProperty, false);
187
+ // Handle single property or array of properties
188
+ const properties = sumParam.properties.property
189
+ ? [sumParam.properties.property]
190
+ : sumParam.properties.properties || [];
191
+ for (const prop of properties) {
192
+ if (prop.ref) {
193
+ const sumField = itemProperties.find(p => { var _a; return p.name === ((_a = prop.ref) === null || _a === void 0 ? void 0 : _a.name); });
194
+ if (!sumField) {
195
+ accept('error', `Sum property '${prop.ref.name}' does not exist on item '${itemDocument.name}'.`, { node: sumParam, property: 'properties' });
196
+ }
197
+ else if (!isNumberExp(sumField) && !isResourceExp(sumField) &&
198
+ !isAttributeExp(sumField) && !isTrackerExp(sumField) && !isMoneyField(sumField)) {
199
+ accept('error', 'Sum property must be a numeric type (number, resource, attribute, tracker, or money).', { node: sumParam, property: 'properties' });
200
+ }
201
+ }
202
+ }
203
+ }
204
+ }
205
+ }
206
+ validateNumberExp(field, accept) {
207
+ const valueParam = field.params.find(isNumberParamValue);
208
+ const minParam = field.params.find(isNumberParamMin);
209
+ const maxParam = field.params.find(isNumberParamMax);
210
+ // Check value parameter for type mismatches
211
+ if (valueParam && isMethodBlock(valueParam.value)) {
212
+ this.validateNumericExpression(valueParam.value.body, accept);
213
+ }
214
+ // Check min parameter for type mismatches
215
+ if (minParam && isMethodBlock(minParam.value)) {
216
+ this.validateNumericExpression(minParam.value.body, accept);
217
+ }
218
+ // Check max parameter for type mismatches
219
+ if (maxParam && isMethodBlock(maxParam.value)) {
220
+ this.validateNumericExpression(maxParam.value.body, accept);
221
+ }
222
+ }
223
+ validateResourceExp(field, accept) {
224
+ const valueParam = field.params.find(isNumberParamValue);
225
+ const minParam = field.params.find(isNumberParamMin);
226
+ const maxParam = field.params.find(isNumberParamMax);
227
+ // Check value parameter for type mismatches
228
+ if (valueParam && isMethodBlock(valueParam.value)) {
229
+ this.validateNumericExpression(valueParam.value.body, accept);
230
+ }
231
+ // Check min parameter for type mismatches
232
+ if (minParam && isMethodBlock(minParam.value)) {
233
+ this.validateNumericExpression(minParam.value.body, accept);
234
+ }
235
+ // Check max parameter for type mismatches
236
+ if (maxParam && isMethodBlock(maxParam.value)) {
237
+ this.validateNumericExpression(maxParam.value.body, accept);
238
+ }
239
+ }
240
+ validateAttributeExp(field, accept) {
241
+ const modParam = field.params.find(isAttributeParamMod);
242
+ // Check mod parameter for type mismatches
243
+ if (modParam && isMethodBlock(modParam.method)) {
244
+ this.validateNumericExpression(modParam.method.body, accept);
245
+ }
246
+ }
247
+ validateNumericExpression(body, accept) {
248
+ for (const expr of body) {
249
+ if (isReturnExpression(expr) && expr.value) {
250
+ this.checkExpressionTypes(expr.value, accept);
251
+ }
252
+ }
253
+ }
254
+ checkExpressionTypes(expr, accept) {
255
+ if (isBinaryExpression(expr)) {
256
+ const op = expr.op;
257
+ // Check for string + number operations (or other arithmetic with strings)
258
+ if (op === '+' || op === '-' || op === '*' || op === '/') {
259
+ const leftIsString = this.isStringExpression(expr.e1);
260
+ const rightIsString = this.isStringExpression(expr.e2);
261
+ const leftIsNumber = this.isNumericExpression(expr.e1);
262
+ const rightIsNumber = this.isNumericExpression(expr.e2);
263
+ // Error if mixing strings and numbers in arithmetic
264
+ if ((leftIsString && rightIsNumber) || (rightIsString && leftIsNumber)) {
265
+ accept('error', `Type mismatch: cannot perform arithmetic operation '${op}' between string and number. This will result in NaN (Not a Number).`, { node: expr, property: 'op' });
266
+ }
267
+ // Error if both are clearly strings and using non-addition operators
268
+ else if (leftIsString && rightIsString && op !== '+') {
269
+ accept('error', `Type mismatch: cannot perform operation '${op}' on strings. This will result in NaN (Not a Number).`, { node: expr, property: 'op' });
270
+ }
271
+ }
272
+ // Recursively check sub-expressions
273
+ this.checkExpressionTypes(expr.e1, accept);
274
+ this.checkExpressionTypes(expr.e2, accept);
275
+ }
276
+ }
277
+ isStringExpression(expr) {
278
+ var _a;
279
+ // Check if expression is a string literal
280
+ if (isLiteral(expr) && typeof expr.val === 'string') {
281
+ return true;
282
+ }
283
+ // Check if expression is accessing a string property
284
+ if (isAccess(expr) && ((_a = expr.property) === null || _a === void 0 ? void 0 : _a.ref)) {
285
+ const referencedProperty = expr.property.ref;
286
+ return isStringExp(referencedProperty) || isStringChoiceField(referencedProperty);
287
+ }
288
+ return false;
289
+ }
290
+ isNumericExpression(expr) {
291
+ var _a;
292
+ // Check if expression is a numeric literal
293
+ if (isLiteral(expr) && typeof expr.val === 'number') {
294
+ return true;
295
+ }
296
+ // Check if expression is accessing a numeric property
297
+ if (isAccess(expr) && ((_a = expr.property) === null || _a === void 0 ? void 0 : _a.ref)) {
298
+ const referencedProperty = expr.property.ref;
299
+ return isNumberExp(referencedProperty) ||
300
+ isResourceExp(referencedProperty) ||
301
+ isAttributeExp(referencedProperty) ||
302
+ isTrackerExp(referencedProperty);
303
+ }
304
+ return false;
305
+ }
306
+ validateDependencyCycles(document, accept) {
307
+ // Build dependency graph for all properties
308
+ const allProperties = getAllOfType(document.body, (p) => true);
309
+ const dependencies = this.buildDependencyGraph(allProperties);
310
+ const cycles = this.detectCycles(dependencies);
311
+ // Report dependency cycles as warnings
312
+ for (const cycle of cycles) {
313
+ const cycleDescription = cycle.join(' → ');
314
+ const affectedProperty = allProperties.find(p => ('name' in p && p.name) ? p.name.toLowerCase() === cycle[0] : false);
315
+ if (affectedProperty) {
316
+ accept('warning', `Dependency cycle detected: ${cycleDescription}. This may cause infinite loops in computed values.`, {
317
+ node: affectedProperty,
318
+ property: 'name',
319
+ code: 'dependency-cycle'
320
+ });
321
+ }
322
+ }
323
+ }
324
+ buildDependencyGraph(properties) {
325
+ const dependencies = new Map();
326
+ for (const property of properties) {
327
+ if (isLayout(property)) {
328
+ // Recursively process layout children
329
+ for (const child of property.body) {
330
+ const childDeps = this.buildDependencyGraph([child]);
331
+ for (const [key, value] of childDeps) {
332
+ dependencies.set(key, value);
333
+ }
334
+ }
335
+ continue;
336
+ }
337
+ const deps = new Set();
338
+ const propertyName = ('name' in property && property.name) ? property.name.toLowerCase() : 'unknown';
339
+ // Check if property has computed values that might depend on other properties
340
+ if (this.isPropertyComputed(property)) {
341
+ const extractedDeps = this.extractDependencies(property);
342
+ extractedDeps.forEach(dep => deps.add(dep));
343
+ // Remove self-references
344
+ deps.delete(propertyName);
345
+ }
346
+ dependencies.set(propertyName, deps);
347
+ }
348
+ return dependencies;
349
+ }
350
+ isPropertyComputed(property) {
351
+ if (isLayout(property)) {
352
+ return false; // Layouts don't have computed values themselves
353
+ }
354
+ // Check if any parameter contains a method block
355
+ if (isNumberExp(property)) {
356
+ const valueParam = property.params.find((p) => isNumberParamValue(p));
357
+ const minParam = property.params.find((p) => isNumberParamMin(p));
358
+ const maxParam = property.params.find((p) => isNumberParamMax(p));
359
+ return !!(valueParam && isMethodBlock(valueParam.value)) ||
360
+ !!(minParam && isMethodBlock(minParam.value)) ||
361
+ !!(maxParam && isMethodBlock(maxParam.value));
362
+ }
363
+ if (isStringExp(property)) {
364
+ const stringValue = property.params.find((p) => isStringParamValue(p));
365
+ return !!(stringValue && isMethodBlock(stringValue.value));
366
+ }
367
+ if (isAttributeExp(property)) {
368
+ const modParam = property.params.find((p) => isAttributeParamMod(p));
369
+ return !!(modParam && isMethodBlock(modParam.method));
370
+ }
371
+ if (isTrackerExp(property) || isResourceExp(property)) {
372
+ const numberParams = property.params;
373
+ const valueParam = numberParams.find((p) => isNumberParamValue(p));
374
+ const minParam = numberParams.find((p) => isNumberParamMin(p));
375
+ const maxParam = numberParams.find((p) => isNumberParamMax(p));
376
+ return !!(valueParam && isMethodBlock(valueParam.value)) ||
377
+ !!(minParam && isMethodBlock(minParam.value)) ||
378
+ !!(maxParam && isMethodBlock(maxParam.value));
379
+ }
380
+ return false;
381
+ }
382
+ extractDependencies(property) {
383
+ const dependencies = new Set();
384
+ if (isLayout(property)) {
385
+ return dependencies;
386
+ }
387
+ // Extract dependencies from method blocks
388
+ if (isNumberExp(property)) {
389
+ const valueParam = property.params.find((p) => isNumberParamValue(p));
390
+ const minParam = property.params.find((p) => isNumberParamMin(p));
391
+ const maxParam = property.params.find((p) => isNumberParamMax(p));
392
+ if (valueParam && isMethodBlock(valueParam.value)) {
393
+ this.extractMethodBlockDependencies(valueParam.value).forEach(dep => dependencies.add(dep));
394
+ }
395
+ if (minParam && isMethodBlock(minParam.value)) {
396
+ this.extractMethodBlockDependencies(minParam.value).forEach(dep => dependencies.add(dep));
397
+ }
398
+ if (maxParam && isMethodBlock(maxParam.value)) {
399
+ this.extractMethodBlockDependencies(maxParam.value).forEach(dep => dependencies.add(dep));
400
+ }
401
+ }
402
+ else if (isStringExp(property)) {
403
+ const stringValue = property.params.find((p) => isStringParamValue(p));
404
+ if (stringValue && isMethodBlock(stringValue.value)) {
405
+ this.extractMethodBlockDependencies(stringValue.value).forEach(dep => dependencies.add(dep));
406
+ }
407
+ }
408
+ else if (isAttributeExp(property)) {
409
+ const modParam = property.params.find((p) => isAttributeParamMod(p));
410
+ if (modParam && isMethodBlock(modParam.method)) {
411
+ this.extractMethodBlockDependencies(modParam.method).forEach(dep => dependencies.add(dep));
412
+ }
413
+ }
414
+ else if (isTrackerExp(property) || isResourceExp(property)) {
415
+ const numberParams = property.params;
416
+ const valueParam = numberParams.find((p) => isNumberParamValue(p));
417
+ const minParam = numberParams.find((p) => isNumberParamMin(p));
418
+ const maxParam = numberParams.find((p) => isNumberParamMax(p));
419
+ if (valueParam && isMethodBlock(valueParam.value)) {
420
+ this.extractMethodBlockDependencies(valueParam.value).forEach(dep => dependencies.add(dep));
421
+ }
422
+ if (minParam && isMethodBlock(minParam.value)) {
423
+ this.extractMethodBlockDependencies(minParam.value).forEach(dep => dependencies.add(dep));
424
+ }
425
+ if (maxParam && isMethodBlock(maxParam.value)) {
426
+ this.extractMethodBlockDependencies(maxParam.value).forEach(dep => dependencies.add(dep));
427
+ }
428
+ }
429
+ return dependencies;
430
+ }
431
+ extractMethodBlockDependencies(methodBlock) {
432
+ const dependencies = new Set();
433
+ function traverseExpression(node) {
434
+ var _a;
435
+ if (!node)
436
+ return;
437
+ if (isAccess(node) && ((_a = node.property) === null || _a === void 0 ? void 0 : _a.ref)) {
438
+ dependencies.add(node.property.ref.name.toLowerCase());
439
+ }
440
+ if (isAccess(node)) {
441
+ // Self-reference expressions don't create dependencies on specific properties
442
+ // since they're resolved at runtime based on user selection
443
+ return;
444
+ }
445
+ // Recursively traverse child nodes
446
+ if (node.$children) {
447
+ for (const child of node.$children) {
448
+ traverseExpression(child);
449
+ }
450
+ }
451
+ // Handle common expression properties
452
+ if (node.left)
453
+ traverseExpression(node.left);
454
+ if (node.right)
455
+ traverseExpression(node.right);
456
+ if (node.value)
457
+ traverseExpression(node.value);
458
+ if (node.expression)
459
+ traverseExpression(node.expression);
460
+ if (node.body && Array.isArray(node.body)) {
461
+ for (const expr of node.body) {
462
+ traverseExpression(expr);
463
+ }
464
+ }
465
+ }
466
+ traverseExpression(methodBlock);
467
+ return dependencies;
468
+ }
469
+ detectCycles(dependencies) {
470
+ const cycles = [];
471
+ const visiting = new Set();
472
+ const visited = new Set();
473
+ function visit(property, path = []) {
474
+ if (visiting.has(property)) {
475
+ // Found a cycle
476
+ const cycleStart = path.indexOf(property);
477
+ if (cycleStart >= 0) {
478
+ cycles.push([...path.slice(cycleStart), property]);
479
+ }
480
+ return;
481
+ }
482
+ if (visited.has(property)) {
483
+ return;
484
+ }
485
+ visiting.add(property);
486
+ path.push(property);
487
+ // Visit dependencies
488
+ const deps = dependencies.get(property);
489
+ if (deps) {
490
+ for (const dep of deps) {
491
+ if (dependencies.has(dep)) {
492
+ visit(dep, [...path]);
493
+ }
494
+ }
495
+ }
496
+ visiting.delete(property);
497
+ visited.add(property);
498
+ path.pop();
499
+ }
500
+ // Visit all properties
501
+ for (const property of dependencies.keys()) {
502
+ if (!visited.has(property)) {
503
+ visit(property);
504
+ }
505
+ }
506
+ return cycles;
507
+ }
508
+ validateWipField(field, accept) {
509
+ accept('warning', 'This field is a WIP and may not be fully implemented or may change in a future version.', {
510
+ node: field,
511
+ property: 'name'
512
+ });
513
+ }
514
+ }
515
+ //# sourceMappingURL=intelligent-system-design-language-validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"intelligent-system-design-language-validator.js","sourceRoot":"","sources":["../../src/language/intelligent-system-design-language-validator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,77 @@
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` and an optional `roll` expression. 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
+ Tab: '**tab** — A sub-tab inside a page. Supports `icon` and `label`.',
48
+ Row: '**row** — Arranges child fields horizontally side by side.',
49
+ Column: '**column** — Stacks child fields vertically within a row.',
50
+ // Executables
51
+ Action: '**action** — A clickable button on the sheet that runs code. Supports `visibility`, `icon`, and `color` params.',
52
+ HookHandler: '**on** — Reacts to a Foundry VTT event (`combatStart`, `roundStart`, `turnStart`, `appliedDamage`, etc.).',
53
+ FunctionDefinition: '**function** — A reusable named function with typed parameters and an optional `returns` type.',
54
+ };
55
+ export class IsdlHoverProvider {
56
+ getHoverContent(document, params) {
57
+ var _a, _b;
58
+ const rootCst = (_b = (_a = document.parseResult) === null || _a === void 0 ? void 0 : _a.value) === null || _b === void 0 ? void 0 : _b.$cstNode;
59
+ if (!rootCst)
60
+ return undefined;
61
+ const offset = document.textDocument.offsetAt(params.position);
62
+ const leaf = CstUtils.findLeafNodeAtOffset(rootCst, offset);
63
+ if (!leaf)
64
+ return undefined;
65
+ // Walk up the AST container chain until we find a type with docs
66
+ let node = leaf.astNode;
67
+ while (node) {
68
+ const doc = FIELD_DOCS[node.$type];
69
+ if (doc) {
70
+ return { contents: { kind: 'markdown', value: doc } };
71
+ }
72
+ node = node.$container;
73
+ }
74
+ return undefined;
75
+ }
76
+ }
77
+ //# sourceMappingURL=isdl-hover-provider.js.map
@@ -0,0 +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,kHAAkH;IAC1I,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,iEAAiE;IACzF,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"}