intelligent-system-design-language 0.3.22 → 0.3.24

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 (106) hide show
  1. package/.claude/agents/langium-language-designer.md +38 -38
  2. package/.claude/agents/typescript-vscode-expert.md +29 -29
  3. package/.claude/agents/ui-ux-designer.md +36 -36
  4. package/.claude/settings.local.json +33 -33
  5. package/.idea/inspectionProfiles/Project_Default.xml +6 -6
  6. package/.idea/isdl.iml +13 -13
  7. package/.idea/modules.xml +8 -8
  8. package/.idea/vcs.xml +6 -6
  9. package/.idea/watcherTasks.xml +3 -3
  10. package/.vscodeignore +18 -18
  11. package/LICENSE +673 -673
  12. package/README.md +86 -86
  13. package/bin/cli.js +4 -4
  14. package/bin/lsp.js +8 -8
  15. package/out/_backgrounds.scss +91 -91
  16. package/out/_handlebars.scss +497 -497
  17. package/out/_isdlStyles.scss +1444 -1444
  18. package/out/_vuetifyOverrides.scss +425 -425
  19. package/out/_vuetifyStyles.scss +31957 -31957
  20. package/out/cli/components/_backgrounds.scss +91 -91
  21. package/out/cli/components/_handlebars.scss +497 -497
  22. package/out/cli/components/_isdlStyles.scss +1444 -1444
  23. package/out/cli/components/_vuetifyOverrides.scss +425 -425
  24. package/out/cli/components/_vuetifyStyles.scss +31957 -31957
  25. package/out/cli/components/active-effect-sheet-generator.js +453 -453
  26. package/out/cli/components/chat-card-generator.js +654 -654
  27. package/out/cli/components/css-generator.js +4 -4
  28. package/out/cli/components/damage-roll-generator.js +160 -160
  29. package/out/cli/components/datamodel-generator.js +257 -257
  30. package/out/cli/components/derived-data-generator.js +923 -923
  31. package/out/cli/components/hotbar-drop-hook-generator.js +82 -82
  32. package/out/cli/components/init-hook-generator.js +495 -495
  33. package/out/cli/components/language-generator.js +1 -1
  34. package/out/cli/components/language-generator.js.map +1 -1
  35. package/out/cli/components/measured-template-preview.js +221 -221
  36. package/out/cli/components/method-generator.js +601 -562
  37. package/out/cli/components/method-generator.js.map +1 -1
  38. package/out/cli/components/ready-hook-generator.js +404 -404
  39. package/out/cli/components/token-generator.js +116 -116
  40. package/out/cli/components/vue/base-components/vue-attribute.js +138 -138
  41. package/out/cli/components/vue/base-components/vue-boolean.js +64 -64
  42. package/out/cli/components/vue/base-components/vue-calculator.js +93 -93
  43. package/out/cli/components/vue/base-components/vue-damage-application.js +356 -356
  44. package/out/cli/components/vue/base-components/vue-damage-bonuses.js +165 -165
  45. package/out/cli/components/vue/base-components/vue-damage-resistances.js +196 -196
  46. package/out/cli/components/vue/base-components/vue-damage-track.js +121 -121
  47. package/out/cli/components/vue/base-components/vue-date-time.js +42 -42
  48. package/out/cli/components/vue/base-components/vue-dice.js +98 -98
  49. package/out/cli/components/vue/base-components/vue-die.js +73 -73
  50. package/out/cli/components/vue/base-components/vue-document-choice.js +149 -149
  51. package/out/cli/components/vue/base-components/vue-document-choices.js +179 -179
  52. package/out/cli/components/vue/base-components/vue-document-link.js +60 -60
  53. package/out/cli/components/vue/base-components/vue-extended-choice.js +88 -88
  54. package/out/cli/components/vue/base-components/vue-inventory.js +519 -519
  55. package/out/cli/components/vue/base-components/vue-macro-choice.js +138 -138
  56. package/out/cli/components/vue/base-components/vue-measured-template.js +530 -530
  57. package/out/cli/components/vue/base-components/vue-money.js +483 -483
  58. package/out/cli/components/vue/base-components/vue-number.js +174 -174
  59. package/out/cli/components/vue/base-components/vue-paperdoll.js +43 -43
  60. package/out/cli/components/vue/base-components/vue-parent-property-reference.js +76 -76
  61. package/out/cli/components/vue/base-components/vue-prosemirror.js +18 -18
  62. package/out/cli/components/vue/base-components/vue-resource.js +136 -136
  63. package/out/cli/components/vue/base-components/vue-roll-visualizer.js +285 -285
  64. package/out/cli/components/vue/base-components/vue-self-property-reference.js +62 -62
  65. package/out/cli/components/vue/base-components/vue-string-choice.js +98 -98
  66. package/out/cli/components/vue/base-components/vue-string-choices.js +203 -203
  67. package/out/cli/components/vue/base-components/vue-string.js +60 -60
  68. package/out/cli/components/vue/base-components/vue-text-field.js +53 -53
  69. package/out/cli/components/vue/base-components/vue-tracker.js +431 -431
  70. package/out/cli/components/vue/vue-action-component-generator.js +64 -64
  71. package/out/cli/components/vue/vue-active-effect-sheet-generator.js +856 -856
  72. package/out/cli/components/vue/vue-datatable-sheet-class-generator.js +292 -292
  73. package/out/cli/components/vue/vue-datatable2-component-generator.js +824 -824
  74. package/out/cli/components/vue/vue-document-creation-app.js +121 -121
  75. package/out/cli/components/vue/vue-document-creation-sheet.js +94 -94
  76. package/out/cli/components/vue/vue-generator.js +40 -40
  77. package/out/cli/components/vue/vue-mixin.js +296 -296
  78. package/out/cli/components/vue/vue-pinned-datatable-component-generator.js +260 -260
  79. package/out/cli/components/vue/vue-prompt-generator.js +80 -80
  80. package/out/cli/components/vue/vue-prompt-sheet-class-generator.js +317 -317
  81. package/out/cli/components/vue/vue-sheet-application-generator.js +1171 -1171
  82. package/out/cli/components/vue/vue-sheet-class-generator.js +510 -510
  83. package/out/cli/generator.js +508 -438
  84. package/out/cli/generator.js.map +1 -1
  85. package/out/extension/github/githubManager.js +35 -35
  86. package/out/extension/github/githubQuickActions.js +120 -120
  87. package/out/extension/github/system-workflow.yml +47 -47
  88. package/out/extension/main.cjs +881 -311
  89. package/out/extension/main.cjs.map +3 -3
  90. package/out/extension/package.json +419 -419
  91. package/out/language/generated/ast.js +98 -2
  92. package/out/language/generated/ast.js.map +1 -1
  93. package/out/language/generated/grammar.js +14688 -14240
  94. package/out/language/generated/grammar.js.map +1 -1
  95. package/out/language/intelligent-system-design-language-validator.js +44 -2
  96. package/out/language/intelligent-system-design-language-validator.js.map +1 -1
  97. package/out/language/isdl-scope-provider.js +7 -1
  98. package/out/language/isdl-scope-provider.js.map +1 -1
  99. package/out/language/main.cjs +881 -311
  100. package/out/language/main.cjs.map +3 -3
  101. package/out/package.json +419 -419
  102. package/out/progressbar.min.js +6 -6
  103. package/out/styles.scss +828 -762
  104. package/out/test/validating/diagnostics.test.js +55 -0
  105. package/out/test/validating/diagnostics.test.js.map +1 -1
  106. package/package.json +419 -419
@@ -49,38 +49,38 @@ export function generateActiveEffectVueSheet(entry, id, destination) {
49
49
  }
50
50
  return Array.from(damageTypes).sort();
51
51
  }
52
- const fileNode = expandToNode `
53
- ${generateVueComponentScript(entry, id, destination)}
54
- ${generateVueComponentTemplate(id)}
52
+ const fileNode = expandToNode `
53
+ ${generateVueComponentScript(entry, id, destination)}
54
+ ${generateVueComponentTemplate(id)}
55
55
  `.appendNewLineIfNotEmpty();
56
56
  fs.writeFileSync(generatedFilePath, toString(fileNode));
57
57
  function generateVueComponentScript(entry, id, destination) {
58
- return expandToNode `
59
- <script setup>
60
- import { ref, inject, onMounted, computed } from 'vue';
61
-
62
- const document = inject('rawDocument');
63
- const props = defineProps(['context']);
64
- console.log("Vue AE context", props.context);
65
-
66
- // Colors
67
- const primaryColor = ref('#1565c0');
68
- const secondaryColor = ref('#4db6ac');
69
- const tertiaryColor = ref('#ffb74d');
70
-
71
- const drawer = ref(false);
72
- const page = ref('details');
73
- const tab = ref('description');
74
-
75
- // Available fields for each document type
76
- const availableFields = ref({});
77
- const selectedFields = ref({});
78
-
79
- // Create field name mapping for each document
80
- const createFieldMapping = () => {
81
- const mapping = {};
82
- const damageTypes = [${collectDamageTypes(entry).map(type => `'${type}'`).join(', ')}];
83
-
58
+ return expandToNode `
59
+ <script setup>
60
+ import { ref, inject, onMounted, computed } from 'vue';
61
+
62
+ const document = inject('rawDocument');
63
+ const props = defineProps(['context']);
64
+ console.log("Vue AE context", props.context);
65
+
66
+ // Colors
67
+ const primaryColor = ref('#1565c0');
68
+ const secondaryColor = ref('#4db6ac');
69
+ const tertiaryColor = ref('#ffb74d');
70
+
71
+ const drawer = ref(false);
72
+ const page = ref('details');
73
+ const tab = ref('description');
74
+
75
+ // Available fields for each document type
76
+ const availableFields = ref({});
77
+ const selectedFields = ref({});
78
+
79
+ // Create field name mapping for each document
80
+ const createFieldMapping = () => {
81
+ const mapping = {};
82
+ const damageTypes = [${collectDamageTypes(entry).map(type => `'${type}'`).join(', ')}];
83
+
84
84
  ${joinToNode(documents, document => {
85
85
  const fields = getAllOfType(document.body, isProperty, false).filter(property => !isInitiativeProperty(property) &&
86
86
  !isStatusProperty(property) &&
@@ -89,10 +89,10 @@ export function generateActiveEffectVueSheet(entry, id, destination) {
89
89
  !isDocumentFields(property) &&
90
90
  !isHtmlExp(property) &&
91
91
  property.modifier !== "locked");
92
- return expandToNode `
93
- mapping['${document.name}'] = {
94
- ${joinToNode(fields, field => `'${field.name.toLowerCase()}': '${field.name}'`, { separator: ',\n ' })}${fields.length > 0 ? ',' : ''}
95
- // Auto-generated damage type fields
92
+ return expandToNode `
93
+ mapping['${document.name}'] = {
94
+ ${joinToNode(fields, field => `'${field.name.toLowerCase()}': '${field.name}'`, { separator: ',\n ' })}${fields.length > 0 ? ',' : ''}
95
+ // Auto-generated damage type fields
96
96
  ${collectDamageTypes(entry).map((damageType) => {
97
97
  const safeTypeName = damageType.toLowerCase().replace(/[^a-z0-9]/g, '');
98
98
  return [
@@ -100,221 +100,221 @@ export function generateActiveEffectVueSheet(entry, id, destination) {
100
100
  `'${safeTypeName}damageresistanceflat': '${damageType} Damage Resistance (Flat)'`,
101
101
  `'${safeTypeName}damageresistancepercent': '${damageType} Damage Resistance (%)'`
102
102
  ].join(',\n ');
103
- }).join(',\n ')}
104
- };
103
+ }).join(',\n ')}
104
+ };
105
105
  `;
106
- }, { appendNewLineIfNotEmpty: true })}
107
- return mapping;
108
- };
109
-
110
- // Helper method to get change value from the changes array
111
- const getChangeValue = (key) => {
112
- const change = props.context?.document?.changes?.find(x => x.key === key);
113
- return change?.value || '';
114
- };
115
-
116
- // Helper method to get numeric change value from the changes array
117
- const getChangeNumberValue = (key) => {
118
- const change = props.context?.document?.changes?.find(x => x.key === key);
119
- if (!change?.value) return 0;
120
- const num = Number(change.value);
121
- return isNaN(num) ? 0 : num;
122
- };
123
-
124
- // Helper method to get change type from the changes array
125
- const getChangeMode = (key) => {
126
- const change = props.context?.document?.changes?.find(x => x.key === key);
127
- return change?.type || 'add';
128
- };
129
-
130
- // Initialize selectedFields from existing changes
131
- const initializeSelectedFields = () => {
132
- if (!props.context?.document?.changes) return;
133
-
134
- const fieldMapping = createFieldMapping();
135
-
136
- console.log(fieldMapping, props.context.document.changes);
137
- for (const change of props.context.document.changes) {
138
- // Parse the key to extract document name and field name
139
- // Format: "hero.system.availableskilllevels" or "hero.system.resourcefield.value"
140
- const parts = change.key.split('.');
141
- if (parts.length >= 3) {
142
- const documentName = parts[0];
143
- const fieldNameLower = parts[2];
144
-
145
- // Convert document name to proper case (e.g., "hero" -> "Hero")
146
- const docName = documentName.charAt(0).toUpperCase() + documentName.slice(1);
147
-
148
- // Look up the proper field name from our mapping
149
- const properFieldName = fieldMapping[docName]?.[fieldNameLower];
150
- console.log(properFieldName);
151
-
152
- if (properFieldName) {
153
- if (!selectedFields.value[docName]) {
154
- selectedFields.value[docName] = [];
155
- }
156
-
157
- if (!selectedFields.value[docName].includes(properFieldName)) {
158
- selectedFields.value[docName].push(properFieldName);
159
- }
160
- }
161
- }
162
- }
163
- };
164
-
165
- // Generate a summary of current changes
166
- const changesSummary = computed(() => {
167
- if (!props.context?.document?.changes || props.context.document.changes.length === 0) {
168
- return 'No changes configured';
169
- }
170
-
171
- const changes = props.context.document.changes.filter(change => {
172
- // Skip zero values for numbers
173
- const numValue = Number(change.value);
174
- return !((!isNaN(numValue) && numValue === 0) || change.value === '' || change.value === null);
175
- });
176
-
177
- if (changes.length === 0) {
178
- return 'No changes configured';
179
- }
180
-
181
- // Group changes by document type
182
- const groupedChanges = {};
183
- changes.forEach(change => {
184
- const parts = change.key.split('.');
185
- if (parts.length >= 3) {
186
- const documentName = parts[0].charAt(0).toUpperCase() + parts[0].slice(1); // Capitalize
187
- const fieldPath = parts.slice(2).join('.');
188
-
189
- if (!groupedChanges[documentName]) {
190
- groupedChanges[documentName] = [];
191
- }
192
-
193
- console.log(change.key, fieldPath, parts);
194
-
195
- // Convert field names to human readable
196
- let step1 = fieldPath.replaceAll('.', ' ');
197
- let step2 = step1.replace(/([a-z])([A-Z])/g, '$1 $2');
198
- let step3 = step2.replace(/\b\w/g, l => l.toUpperCase());
199
- //console.log("Debug steps:", fieldPath, "->", step1, "->", step2, "->", step3);
200
-
201
- const humanFieldName = step3;
202
-
203
- // Format the mode symbol
204
- const modeSymbol = change.type === 'multiply' ? ' × ' :
205
- change.type === 'add' ? ' + ' :
206
- change.type === 'downgrade' ? ' ↓ ' :
207
- change.type === 'upgrade' ? ' ↑ ' :
208
- change.type === 'custom' ? ' (Once) + ' : ' ';
209
-
210
- //console.log("Human Field Name:", humanFieldName, "Mode Symbol:", modeSymbol);
211
- groupedChanges[documentName].push(humanFieldName + modeSymbol + change.value);
212
- }
213
- });
214
-
215
- // Format as "Document: change1, change2"
216
- const documentSummaries = Object.entries(groupedChanges).map(([docName, changes]) => {
217
- return docName + ': ' + changes.join(', ');
218
- });
219
-
220
- return documentSummaries.join(' | ');
221
- });
222
-
223
- // Initialize on component mount
224
- onMounted(() => {
225
- initializeSelectedFields();
226
- });
227
- </script>
106
+ }, { appendNewLineIfNotEmpty: true })}
107
+ return mapping;
108
+ };
109
+
110
+ // Helper method to get change value from the changes array
111
+ const getChangeValue = (key) => {
112
+ const change = props.context?.document?.changes?.find(x => x.key === key);
113
+ return change?.value || '';
114
+ };
115
+
116
+ // Helper method to get numeric change value from the changes array
117
+ const getChangeNumberValue = (key) => {
118
+ const change = props.context?.document?.changes?.find(x => x.key === key);
119
+ if (!change?.value) return 0;
120
+ const num = Number(change.value);
121
+ return isNaN(num) ? 0 : num;
122
+ };
123
+
124
+ // Helper method to get change type from the changes array
125
+ const getChangeMode = (key) => {
126
+ const change = props.context?.document?.changes?.find(x => x.key === key);
127
+ return change?.type || 'add';
128
+ };
129
+
130
+ // Initialize selectedFields from existing changes
131
+ const initializeSelectedFields = () => {
132
+ if (!props.context?.document?.changes) return;
133
+
134
+ const fieldMapping = createFieldMapping();
135
+
136
+ console.log(fieldMapping, props.context.document.changes);
137
+ for (const change of props.context.document.changes) {
138
+ // Parse the key to extract document name and field name
139
+ // Format: "hero.system.availableskilllevels" or "hero.system.resourcefield.value"
140
+ const parts = change.key.split('.');
141
+ if (parts.length >= 3) {
142
+ const documentName = parts[0];
143
+ const fieldNameLower = parts[2];
144
+
145
+ // Convert document name to proper case (e.g., "hero" -> "Hero")
146
+ const docName = documentName.charAt(0).toUpperCase() + documentName.slice(1);
147
+
148
+ // Look up the proper field name from our mapping
149
+ const properFieldName = fieldMapping[docName]?.[fieldNameLower];
150
+ console.log(properFieldName);
151
+
152
+ if (properFieldName) {
153
+ if (!selectedFields.value[docName]) {
154
+ selectedFields.value[docName] = [];
155
+ }
156
+
157
+ if (!selectedFields.value[docName].includes(properFieldName)) {
158
+ selectedFields.value[docName].push(properFieldName);
159
+ }
160
+ }
161
+ }
162
+ }
163
+ };
164
+
165
+ // Generate a summary of current changes
166
+ const changesSummary = computed(() => {
167
+ if (!props.context?.document?.changes || props.context.document.changes.length === 0) {
168
+ return 'No changes configured';
169
+ }
170
+
171
+ const changes = props.context.document.changes.filter(change => {
172
+ // Skip zero values for numbers
173
+ const numValue = Number(change.value);
174
+ return !((!isNaN(numValue) && numValue === 0) || change.value === '' || change.value === null);
175
+ });
176
+
177
+ if (changes.length === 0) {
178
+ return 'No changes configured';
179
+ }
180
+
181
+ // Group changes by document type
182
+ const groupedChanges = {};
183
+ changes.forEach(change => {
184
+ const parts = change.key.split('.');
185
+ if (parts.length >= 3) {
186
+ const documentName = parts[0].charAt(0).toUpperCase() + parts[0].slice(1); // Capitalize
187
+ const fieldPath = parts.slice(2).join('.');
188
+
189
+ if (!groupedChanges[documentName]) {
190
+ groupedChanges[documentName] = [];
191
+ }
192
+
193
+ console.log(change.key, fieldPath, parts);
194
+
195
+ // Convert field names to human readable
196
+ let step1 = fieldPath.replaceAll('.', ' ');
197
+ let step2 = step1.replace(/([a-z])([A-Z])/g, '$1 $2');
198
+ let step3 = step2.replace(/\b\w/g, l => l.toUpperCase());
199
+ //console.log("Debug steps:", fieldPath, "->", step1, "->", step2, "->", step3);
200
+
201
+ const humanFieldName = step3;
202
+
203
+ // Format the mode symbol
204
+ const modeSymbol = change.type === 'multiply' ? ' × ' :
205
+ change.type === 'add' ? ' + ' :
206
+ change.type === 'downgrade' ? ' ↓ ' :
207
+ change.type === 'upgrade' ? ' ↑ ' :
208
+ change.type === 'custom' ? ' (Once) + ' : ' ';
209
+
210
+ //console.log("Human Field Name:", humanFieldName, "Mode Symbol:", modeSymbol);
211
+ groupedChanges[documentName].push(humanFieldName + modeSymbol + change.value);
212
+ }
213
+ });
214
+
215
+ // Format as "Document: change1, change2"
216
+ const documentSummaries = Object.entries(groupedChanges).map(([docName, changes]) => {
217
+ return docName + ': ' + changes.join(', ');
218
+ });
219
+
220
+ return documentSummaries.join(' | ');
221
+ });
222
+
223
+ // Initialize on component mount
224
+ onMounted(() => {
225
+ initializeSelectedFields();
226
+ });
227
+ </script>
228
228
  `;
229
229
  }
230
230
  function generateVueComponentTemplate(id) {
231
- return expandToNode `
232
- <template>
233
- <v-app>
234
- <!-- App Bar -->
235
- <v-app-bar :color="primaryColor" density="comfortable">
236
- <v-app-bar-nav-icon @click="drawer = !drawer"></v-app-bar-nav-icon>
237
- <v-text-field name="name" v-model="context.document.name" variant="outlined" class="document-name" density="compact"></v-text-field>
238
- </v-app-bar>
239
-
240
- <!-- Navigation Drawer -->
241
- <v-navigation-drawer v-model="drawer" temporary style="background-color: #dddddd">
242
- <v-img :src="context.document.img" style="background-color: lightgray" data-edit='img' data-action='onEditImage'>
243
- <template #error>
244
- <v-img src="/systems/${id}/img/missing-character.png" data-edit='img' data-action='onEditImage'></v-img>
245
- </template>
246
- </v-img>
247
- <v-tabs v-model="page" direction="vertical">
248
- <v-tab value="details" prepend-icon="fa-solid fa-book">Details</v-tab>
249
- <!-- <v-tab value="duration" prepend-icon="fa-solid fa-clock">Duration</v-tab>-->
250
- ${joinToNode(documents, generateNavListItem, { appendNewLineIfNotEmpty: true })}
251
- </v-tabs>
252
- </v-navigation-drawer>
253
-
254
- <!-- Main Content -->
255
- <v-main class="d-flex">
256
- <v-container class="topography" fluid>
257
- <v-tabs-window v-model="page">
258
- <v-tabs-window-item value="details" data-tab="details">
259
- <v-col cols="12" style="padding: 0">
260
- <v-switch
261
- :model-value="!context.document.disabled"
262
- @update:model-value="context.document.disabled = !$event"
263
- name="enabled"
264
- :color="primaryColor"
265
- label="Enabled">
266
- </v-switch>
267
- <v-switch
268
- v-if="context.isItemEffect"
269
- :model-value="context.document.transfer"
270
- name="transfer"
271
- :color="secondaryColor"
272
- label="Active on parent Actor">
273
- </v-switch>
274
- <v-text-field
275
- v-if="context.originLink"
276
- :model-value="context.originLink"
277
- label="Origin"
278
- :disabled="true"
279
- >
280
- </v-text-field>
281
- <v-card class="mt-3 mb-3" variant="outlined">
282
- <v-card-title class="text-body-2">
283
- <v-icon icon="fa-solid fa-magic" class="mr-2"></v-icon>
284
- Current Changes
285
- </v-card-title>
286
- <v-card-text class="pt-2">
287
- <div class="text-body-2 text-medium-emphasis">
288
- {{ changesSummary }}
289
- </div>
290
- </v-card-text>
291
- </v-card>
292
- <i-prosemirror
293
- label="Description"
294
- icon="fa-solid fa-file-lines"
295
- :field="context.editors['description']"
296
- class="mt-2"
297
- >
298
- </i-prosemirror>
299
- </v-col>
300
- </v-tabs-window-item>
301
- <v-tabs-window-item value="duration" data-tab="duration">
302
- <v-col cols="12" style="padding: 0">
303
- <v-label>Duration Settings</v-label>
304
- <!-- Add duration content here -->
305
- </v-col>
306
- </v-tabs-window-item>
307
- ${joinToNode(documents, generateDocumentPage, { appendNewLineIfNotEmpty: true })}
308
- </v-tabs-window>
309
- </v-container>
310
- </v-main>
311
- </v-app>
312
- </template>
231
+ return expandToNode `
232
+ <template>
233
+ <v-app>
234
+ <!-- App Bar -->
235
+ <v-app-bar :color="primaryColor" density="comfortable">
236
+ <v-app-bar-nav-icon @click="drawer = !drawer"></v-app-bar-nav-icon>
237
+ <v-text-field name="name" v-model="context.document.name" variant="outlined" class="document-name" density="compact"></v-text-field>
238
+ </v-app-bar>
239
+
240
+ <!-- Navigation Drawer -->
241
+ <v-navigation-drawer v-model="drawer" temporary style="background-color: #dddddd">
242
+ <v-img :src="context.document.img" style="background-color: lightgray" data-edit='img' data-action='onEditImage'>
243
+ <template #error>
244
+ <v-img src="/systems/${id}/img/missing-character.png" data-edit='img' data-action='onEditImage'></v-img>
245
+ </template>
246
+ </v-img>
247
+ <v-tabs v-model="page" direction="vertical">
248
+ <v-tab value="details" prepend-icon="fa-solid fa-book">Details</v-tab>
249
+ <!-- <v-tab value="duration" prepend-icon="fa-solid fa-clock">Duration</v-tab>-->
250
+ ${joinToNode(documents, generateNavListItem, { appendNewLineIfNotEmpty: true })}
251
+ </v-tabs>
252
+ </v-navigation-drawer>
253
+
254
+ <!-- Main Content -->
255
+ <v-main class="d-flex">
256
+ <v-container class="topography" fluid>
257
+ <v-tabs-window v-model="page">
258
+ <v-tabs-window-item value="details" data-tab="details">
259
+ <v-col cols="12" style="padding: 0">
260
+ <v-switch
261
+ :model-value="!context.document.disabled"
262
+ @update:model-value="context.document.disabled = !$event"
263
+ name="enabled"
264
+ :color="primaryColor"
265
+ label="Enabled">
266
+ </v-switch>
267
+ <v-switch
268
+ v-if="context.isItemEffect"
269
+ :model-value="context.document.transfer"
270
+ name="transfer"
271
+ :color="secondaryColor"
272
+ label="Active on parent Actor">
273
+ </v-switch>
274
+ <v-text-field
275
+ v-if="context.originLink"
276
+ :model-value="context.originLink"
277
+ label="Origin"
278
+ :disabled="true"
279
+ >
280
+ </v-text-field>
281
+ <v-card class="mt-3 mb-3" variant="outlined">
282
+ <v-card-title class="text-body-2">
283
+ <v-icon icon="fa-solid fa-magic" class="mr-2"></v-icon>
284
+ Current Changes
285
+ </v-card-title>
286
+ <v-card-text class="pt-2">
287
+ <div class="text-body-2 text-medium-emphasis">
288
+ {{ changesSummary }}
289
+ </div>
290
+ </v-card-text>
291
+ </v-card>
292
+ <i-prosemirror
293
+ label="Description"
294
+ icon="fa-solid fa-file-lines"
295
+ :field="context.editors['description']"
296
+ class="mt-2"
297
+ >
298
+ </i-prosemirror>
299
+ </v-col>
300
+ </v-tabs-window-item>
301
+ <v-tabs-window-item value="duration" data-tab="duration">
302
+ <v-col cols="12" style="padding: 0">
303
+ <v-label>Duration Settings</v-label>
304
+ <!-- Add duration content here -->
305
+ </v-col>
306
+ </v-tabs-window-item>
307
+ ${joinToNode(documents, generateDocumentPage, { appendNewLineIfNotEmpty: true })}
308
+ </v-tabs-window>
309
+ </v-container>
310
+ </v-main>
311
+ </v-app>
312
+ </template>
313
313
  `;
314
314
  }
315
315
  function generateNavListItem(document) {
316
- return expandToNode `
317
- <v-tab value="${document.name}" prepend-icon="fa-solid fa-pen-to-square">${document.name} Changes</v-tab>
316
+ return expandToNode `
317
+ <v-tab value="${document.name}" prepend-icon="fa-solid fa-pen-to-square">${document.name} Changes</v-tab>
318
318
  `;
319
319
  }
320
320
  function generateDocumentPage(document) {
@@ -333,44 +333,44 @@ export function generateActiveEffectVueSheet(entry, id, destination) {
333
333
  `{title: '${damageType} Damage Resistance (%)', value: '${damageType} Damage Resistance (%)'}`
334
334
  ];
335
335
  }).flat().join(', ');
336
- return expandToNode `
337
- <v-tabs-window-item value="${document.name}" data-tab="${document.name}">
338
- <v-col cols="12" style="padding: 0">
339
- <v-card class="mb-4">
340
- <v-card-title>Available Fields</v-card-title>
341
- <v-card-text>
342
- <v-autocomplete
343
- label="Add Field to Change"
344
- :items="[${joinToNode(fields, (property) => `{title: '${property.name}', value: '${property.name}'}`, { separator: ', ' })}${fields.length > 0 && damageTypeFields ? ', ' : ''}${damageTypeFields}]"
345
- item-title="title"
346
- item-value="value"
347
- v-model="selectedFields['${document.name}']"
348
- :color="primaryColor"
349
- variant="outlined"
350
- density="compact"
351
- multiple
352
- chips
353
- closable-chips>
354
- <template #chip="{ props, item }">
355
- <v-chip v-bind="props" :text="item.title" closable></v-chip>
356
- </template>
357
- </v-autocomplete>
358
- </v-card-text>
359
- </v-card>
360
-
361
- <div v-for="fieldName in selectedFields['${document.name}'] || []" :key="fieldName">
362
- ${joinToNode(fields, (property) => generateConditionalField(document, property), { appendNewLineIfNotEmpty: true })}
363
- ${generateDamageTypeConditionalFields(document, damageTypes)}
364
- </div>
365
- </v-col>
366
- </v-tabs-window-item>
336
+ return expandToNode `
337
+ <v-tabs-window-item value="${document.name}" data-tab="${document.name}">
338
+ <v-col cols="12" style="padding: 0">
339
+ <v-card class="mb-4">
340
+ <v-card-title>Available Fields</v-card-title>
341
+ <v-card-text>
342
+ <v-autocomplete
343
+ label="Add Field to Change"
344
+ :items="[${joinToNode(fields, (property) => `{title: '${property.name}', value: '${property.name}'}`, { separator: ', ' })}${fields.length > 0 && damageTypeFields ? ', ' : ''}${damageTypeFields}]"
345
+ item-title="title"
346
+ item-value="value"
347
+ v-model="selectedFields['${document.name}']"
348
+ :color="primaryColor"
349
+ variant="outlined"
350
+ density="compact"
351
+ multiple
352
+ chips
353
+ closable-chips>
354
+ <template #chip="{ props, item }">
355
+ <v-chip v-bind="props" :text="item.title" closable></v-chip>
356
+ </template>
357
+ </v-autocomplete>
358
+ </v-card-text>
359
+ </v-card>
360
+
361
+ <div v-for="fieldName in selectedFields['${document.name}'] || []" :key="fieldName">
362
+ ${joinToNode(fields, (property) => generateConditionalField(document, property), { appendNewLineIfNotEmpty: true })}
363
+ ${generateDamageTypeConditionalFields(document, damageTypes)}
364
+ </div>
365
+ </v-col>
366
+ </v-tabs-window-item>
367
367
  `;
368
368
  }
369
369
  function generateConditionalField(document, property) {
370
- return expandToNode `
371
- <div v-if="fieldName === '${property.name}'">
372
- ${generateField(document, property)}
373
- </div>
370
+ return expandToNode `
371
+ <div v-if="fieldName === '${property.name}'">
372
+ ${generateField(document, property)}
373
+ </div>
374
374
  `;
375
375
  }
376
376
  function generateDamageTypeConditionalFields(document, damageTypes) {
@@ -379,137 +379,137 @@ export function generateActiveEffectVueSheet(entry, id, destination) {
379
379
  }
380
380
  return joinToNode(damageTypes, damageType => {
381
381
  const safeTypeName = damageType.toLowerCase().replace(/[^a-z0-9]/g, '');
382
- return expandToNode `
383
- <!-- ${damageType} Bonus Damage -->
384
- <div v-if="fieldName === '${damageType} Bonus Damage'">
385
- <v-card class="mb-4">
386
- <v-card-title>
387
- ${damageType} Bonus Damage
388
- <v-btn
389
- icon="fa-solid fa-xmark"
390
- size="small"
391
- variant="text"
392
- @click="selectedFields['${document.name}'] = selectedFields['${document.name}'].filter(f => f !== '${damageType} Bonus Damage')"
393
- style="float: right;">
394
- </v-btn>
395
- </v-card-title>
396
- <v-card-text>
397
- <v-row>
398
- <v-select
399
- name="${document.name.toLowerCase()}.system.${safeTypeName}bonusdamage-type"
400
- :model-value="getChangeMode('${document.name.toLowerCase()}.system.${safeTypeName}bonusdamage')"
401
- label="Mode"
402
- :color="primaryColor"
403
- :items="context.basicNumberModes"
404
- item-title="label"
405
- item-value="value"
406
- variant="outlined"
407
- density="compact">
408
- </v-select>
409
- <v-number-input
410
- name="${document.name.toLowerCase()}.system.${safeTypeName}bonusdamage"
411
- :model-value="getChangeNumberValue('${document.name.toLowerCase()}.system.${safeTypeName}bonusdamage')"
412
- label="Bonus Damage"
413
- :color="primaryColor"
414
- variant="outlined"
415
- density="compact">
416
- </v-number-input>
417
- </v-row>
418
- </v-card-text>
419
- </v-card>
420
- </div>
421
-
422
- <!-- ${damageType} Damage Resistance (Flat) -->
423
- <div v-if="fieldName === '${damageType} Damage Resistance (Flat)'">
424
- <v-card class="mb-4">
425
- <v-card-title>
426
- ${damageType} Damage Resistance (Flat)
427
- <v-btn
428
- icon="fa-solid fa-xmark"
429
- size="small"
430
- variant="text"
431
- @click="selectedFields['${document.name}'] = selectedFields['${document.name}'].filter(f => f !== '${damageType} Damage Resistance (Flat)')"
432
- style="float: right;">
433
- </v-btn>
434
- </v-card-title>
435
- <v-card-text>
436
- <v-row>
437
- <v-select
438
- name="${document.name.toLowerCase()}.system.${safeTypeName}damageresistanceflat-type"
439
- :model-value="getChangeMode('${document.name.toLowerCase()}.system.${safeTypeName}damageresistanceflat')"
440
- label="Mode"
441
- :color="primaryColor"
442
- :items="context.basicNumberModes"
443
- item-title="label"
444
- item-value="value"
445
- variant="outlined"
446
- density="compact">
447
- </v-select>
448
- <v-number-input
449
- name="${document.name.toLowerCase()}.system.${safeTypeName}damageresistanceflat"
450
- :model-value="getChangeNumberValue('${document.name.toLowerCase()}.system.${safeTypeName}damageresistanceflat')"
451
- label="Flat Resistance"
452
- :color="primaryColor"
453
- variant="outlined"
454
- density="compact">
455
- </v-number-input>
456
- </v-row>
457
- </v-card-text>
458
- </v-card>
459
- </div>
460
-
461
- <!-- ${damageType} Damage Resistance (%) -->
462
- <div v-if="fieldName === '${damageType} Damage Resistance (%)'">
463
- <v-card class="mb-4">
464
- <v-card-title>
465
- ${damageType} Damage Resistance (%)
466
- <v-btn
467
- icon="fa-solid fa-xmark"
468
- size="small"
469
- variant="text"
470
- @click="selectedFields['${document.name}'] = selectedFields['${document.name}'].filter(f => f !== '${damageType} Damage Resistance (%)')"
471
- style="float: right;">
472
- </v-btn>
473
- </v-card-title>
474
- <v-card-text>
475
- <v-row>
476
- <v-select
477
- name="${document.name.toLowerCase()}.system.${safeTypeName}damageresistancepercent-type"
478
- :model-value="getChangeMode('${document.name.toLowerCase()}.system.${safeTypeName}damageresistancepercent')"
479
- label="Mode"
480
- :color="primaryColor"
481
- :items="context.basicNumberModes"
482
- item-title="label"
483
- item-value="value"tec
484
- variant="outlined"
485
- density="compact">
486
- </v-select>
487
- <v-number-input
488
- name="${document.name.toLowerCase()}.system.${safeTypeName}damageresistancepercent"
489
- :model-value="getChangeNumberValue('${document.name.toLowerCase()}.system.${safeTypeName}damageresistancepercent')"
490
- label="Percent Resistance (0-100)"
491
- :min="0"
492
- :max="100"
493
- :color="primaryColor"
494
- variant="outlined"
495
- density="compact">
496
- </v-number-input>
497
- </v-row>
498
- </v-card-text>
499
- </v-card>
500
- </div>
382
+ return expandToNode `
383
+ <!-- ${damageType} Bonus Damage -->
384
+ <div v-if="fieldName === '${damageType} Bonus Damage'">
385
+ <v-card class="mb-4">
386
+ <v-card-title>
387
+ ${damageType} Bonus Damage
388
+ <v-btn
389
+ icon="fa-solid fa-xmark"
390
+ size="small"
391
+ variant="text"
392
+ @click="selectedFields['${document.name}'] = selectedFields['${document.name}'].filter(f => f !== '${damageType} Bonus Damage')"
393
+ style="float: right;">
394
+ </v-btn>
395
+ </v-card-title>
396
+ <v-card-text>
397
+ <v-row>
398
+ <v-select
399
+ name="${document.name.toLowerCase()}.system.${safeTypeName}bonusdamage-type"
400
+ :model-value="getChangeMode('${document.name.toLowerCase()}.system.${safeTypeName}bonusdamage')"
401
+ label="Mode"
402
+ :color="primaryColor"
403
+ :items="context.basicNumberModes"
404
+ item-title="label"
405
+ item-value="value"
406
+ variant="outlined"
407
+ density="compact">
408
+ </v-select>
409
+ <v-number-input
410
+ name="${document.name.toLowerCase()}.system.${safeTypeName}bonusdamage"
411
+ :model-value="getChangeNumberValue('${document.name.toLowerCase()}.system.${safeTypeName}bonusdamage')"
412
+ label="Bonus Damage"
413
+ :color="primaryColor"
414
+ variant="outlined"
415
+ density="compact">
416
+ </v-number-input>
417
+ </v-row>
418
+ </v-card-text>
419
+ </v-card>
420
+ </div>
421
+
422
+ <!-- ${damageType} Damage Resistance (Flat) -->
423
+ <div v-if="fieldName === '${damageType} Damage Resistance (Flat)'">
424
+ <v-card class="mb-4">
425
+ <v-card-title>
426
+ ${damageType} Damage Resistance (Flat)
427
+ <v-btn
428
+ icon="fa-solid fa-xmark"
429
+ size="small"
430
+ variant="text"
431
+ @click="selectedFields['${document.name}'] = selectedFields['${document.name}'].filter(f => f !== '${damageType} Damage Resistance (Flat)')"
432
+ style="float: right;">
433
+ </v-btn>
434
+ </v-card-title>
435
+ <v-card-text>
436
+ <v-row>
437
+ <v-select
438
+ name="${document.name.toLowerCase()}.system.${safeTypeName}damageresistanceflat-type"
439
+ :model-value="getChangeMode('${document.name.toLowerCase()}.system.${safeTypeName}damageresistanceflat')"
440
+ label="Mode"
441
+ :color="primaryColor"
442
+ :items="context.basicNumberModes"
443
+ item-title="label"
444
+ item-value="value"
445
+ variant="outlined"
446
+ density="compact">
447
+ </v-select>
448
+ <v-number-input
449
+ name="${document.name.toLowerCase()}.system.${safeTypeName}damageresistanceflat"
450
+ :model-value="getChangeNumberValue('${document.name.toLowerCase()}.system.${safeTypeName}damageresistanceflat')"
451
+ label="Flat Resistance"
452
+ :color="primaryColor"
453
+ variant="outlined"
454
+ density="compact">
455
+ </v-number-input>
456
+ </v-row>
457
+ </v-card-text>
458
+ </v-card>
459
+ </div>
460
+
461
+ <!-- ${damageType} Damage Resistance (%) -->
462
+ <div v-if="fieldName === '${damageType} Damage Resistance (%)'">
463
+ <v-card class="mb-4">
464
+ <v-card-title>
465
+ ${damageType} Damage Resistance (%)
466
+ <v-btn
467
+ icon="fa-solid fa-xmark"
468
+ size="small"
469
+ variant="text"
470
+ @click="selectedFields['${document.name}'] = selectedFields['${document.name}'].filter(f => f !== '${damageType} Damage Resistance (%)')"
471
+ style="float: right;">
472
+ </v-btn>
473
+ </v-card-title>
474
+ <v-card-text>
475
+ <v-row>
476
+ <v-select
477
+ name="${document.name.toLowerCase()}.system.${safeTypeName}damageresistancepercent-type"
478
+ :model-value="getChangeMode('${document.name.toLowerCase()}.system.${safeTypeName}damageresistancepercent')"
479
+ label="Mode"
480
+ :color="primaryColor"
481
+ :items="context.basicNumberModes"
482
+ item-title="label"
483
+ item-value="value"tec
484
+ variant="outlined"
485
+ density="compact">
486
+ </v-select>
487
+ <v-number-input
488
+ name="${document.name.toLowerCase()}.system.${safeTypeName}damageresistancepercent"
489
+ :model-value="getChangeNumberValue('${document.name.toLowerCase()}.system.${safeTypeName}damageresistancepercent')"
490
+ label="Percent Resistance (0-100)"
491
+ :min="0"
492
+ :max="100"
493
+ :color="primaryColor"
494
+ variant="outlined"
495
+ density="compact">
496
+ </v-number-input>
497
+ </v-row>
498
+ </v-card-text>
499
+ </v-card>
500
+ </div>
501
501
  `;
502
502
  }, { appendNewLineIfNotEmpty: true });
503
503
  }
504
504
  function generateRemoveButton(document, property) {
505
- return expandToNode `
506
- <v-btn
507
- icon="fa-solid fa-xmark"
508
- size="small"
509
- variant="text"
510
- @click="selectedFields['${document.name}'] = selectedFields['${document.name}'].filter(f => f !== '${property.name}')"
511
- style="float: right;">
512
- </v-btn>
505
+ return expandToNode `
506
+ <v-btn
507
+ icon="fa-solid fa-xmark"
508
+ size="small"
509
+ variant="text"
510
+ @click="selectedFields['${document.name}'] = selectedFields['${document.name}'].filter(f => f !== '${property.name}')"
511
+ style="float: right;">
512
+ </v-btn>
513
513
  `;
514
514
  }
515
515
  function generateField(document, property) {
@@ -518,498 +518,498 @@ export function generateActiveEffectVueSheet(entry, id, destination) {
518
518
  if (property.modifier == "locked")
519
519
  return;
520
520
  if (isNumberExp(property)) {
521
- return expandToNode `
522
- <v-card class="mb-4">
523
- <v-card-title>
524
- ${property.name}
525
- ${generateRemoveButton(document, property)}
526
- </v-card-title>
527
- <v-card-text>
528
- <v-row>
529
- <v-select
530
- name="${document.name.toLowerCase()}.system.${property.name.toLowerCase()}-type"
531
- :model-value="getChangeMode('${document.name.toLowerCase()}.system.${property.name.toLowerCase()}')"
532
- label="Mode"
533
- :color="primaryColor"
534
- :items="context.numberModes"
535
- item-title="label"
536
- item-value="value"
537
- variant="outlined"
538
- density="compact">
539
- </v-select>
540
- <v-number-input
541
- name="${document.name.toLowerCase()}.system.${property.name.toLowerCase()}"
542
- :model-value="getChangeNumberValue('${document.name.toLowerCase()}.system.${property.name.toLowerCase()}')"
543
- label="Value"
544
- :color="primaryColor"
545
- variant="outlined"
546
- density="compact">
547
- </v-number-input>
548
- </v-row>
549
- </v-card-text>
550
- </v-card>
521
+ return expandToNode `
522
+ <v-card class="mb-4">
523
+ <v-card-title>
524
+ ${property.name}
525
+ ${generateRemoveButton(document, property)}
526
+ </v-card-title>
527
+ <v-card-text>
528
+ <v-row>
529
+ <v-select
530
+ name="${document.name.toLowerCase()}.system.${property.name.toLowerCase()}-type"
531
+ :model-value="getChangeMode('${document.name.toLowerCase()}.system.${property.name.toLowerCase()}')"
532
+ label="Mode"
533
+ :color="primaryColor"
534
+ :items="context.numberModes"
535
+ item-title="label"
536
+ item-value="value"
537
+ variant="outlined"
538
+ density="compact">
539
+ </v-select>
540
+ <v-number-input
541
+ name="${document.name.toLowerCase()}.system.${property.name.toLowerCase()}"
542
+ :model-value="getChangeNumberValue('${document.name.toLowerCase()}.system.${property.name.toLowerCase()}')"
543
+ label="Value"
544
+ :color="primaryColor"
545
+ variant="outlined"
546
+ density="compact">
547
+ </v-number-input>
548
+ </v-row>
549
+ </v-card-text>
550
+ </v-card>
551
551
  `;
552
552
  }
553
553
  if (isAttributeExp(property)) {
554
- return expandToNode `
555
- <v-card class="mb-4">
556
- <v-card-title>
557
- ${property.name}
558
- ${generateRemoveButton(document, property)}
559
- </v-card-title>
560
- <v-card-text>
561
- <v-row>
562
- <v-select
563
- name="${document.name.toLowerCase()}.system.${property.name.toLowerCase()}.value-mode"
564
- :model-value="getChangeMode('${document.name.toLowerCase()}.system.${property.name.toLowerCase()}.value')"
565
- label="Mode"
566
- :items="context.numberModes"
567
- item-title="label"
568
- item-value="value"
569
- :color="primaryColor"
570
- variant="outlined"
571
- density="compact">
572
- </v-select>
573
- <v-number-input
574
- name="${document.name.toLowerCase()}.system.${property.name.toLowerCase()}.value"
575
- :model-value="getChangeNumberValue('${document.name.toLowerCase()}.system.${property.name.toLowerCase()}.value')"
576
- label="Value"
577
- :color="primaryColor"
578
- variant="outlined"
579
- density="compact">
580
- </v-number-input>
581
- </v-row>
582
- </v-card-text>
583
- </v-card>
554
+ return expandToNode `
555
+ <v-card class="mb-4">
556
+ <v-card-title>
557
+ ${property.name}
558
+ ${generateRemoveButton(document, property)}
559
+ </v-card-title>
560
+ <v-card-text>
561
+ <v-row>
562
+ <v-select
563
+ name="${document.name.toLowerCase()}.system.${property.name.toLowerCase()}.value-mode"
564
+ :model-value="getChangeMode('${document.name.toLowerCase()}.system.${property.name.toLowerCase()}.value')"
565
+ label="Mode"
566
+ :items="context.numberModes"
567
+ item-title="label"
568
+ item-value="value"
569
+ :color="primaryColor"
570
+ variant="outlined"
571
+ density="compact">
572
+ </v-select>
573
+ <v-number-input
574
+ name="${document.name.toLowerCase()}.system.${property.name.toLowerCase()}.value"
575
+ :model-value="getChangeNumberValue('${document.name.toLowerCase()}.system.${property.name.toLowerCase()}.value')"
576
+ label="Value"
577
+ :color="primaryColor"
578
+ variant="outlined"
579
+ density="compact">
580
+ </v-number-input>
581
+ </v-row>
582
+ </v-card-text>
583
+ </v-card>
584
584
  `;
585
585
  }
586
586
  if (isResourceExp(property)) {
587
587
  // Resource has both a current and max that can be changed
588
- return expandToNode `
589
- <v-card class="mb-4">
590
- <v-card-title>
591
- ${property.name}
592
- ${generateRemoveButton(document, property)}
593
- </v-card-title>
594
- <v-card-text>
595
- <v-label>Resource Current</v-label>
596
- <v-row>
597
- <v-select
598
- name="${document.name.toLowerCase()}.system.${property.name.toLowerCase()}.value-mode"
599
- :model-value="getChangeMode('${document.name.toLowerCase()}.system.${property.name.toLowerCase()}.value')"
600
- label="Mode"
601
- :items="context.numberModes"
602
- item-title="label"
603
- item-value="value"
604
- :color="primaryColor"
605
- variant="outlined"
606
- density="compact">
607
- </v-select>
608
- <v-number-input
609
- name="${document.name.toLowerCase()}.system.${property.name.toLowerCase()}.value"
610
- :model-value="getChangeNumberValue('${document.name.toLowerCase()}.system.${property.name.toLowerCase()}.value')"
611
- label="Current Value"
612
- :color="primaryColor"
613
- variant="outlined"
614
- density="compact">
615
- </v-number-input>
616
- </v-row>
617
- <v-label class="mt-2">Resource Max</v-label>
618
- <v-row>
619
- <v-select
620
- name="${document.name.toLowerCase()}.system.${property.name.toLowerCase()}.max-mode"
621
- :model-value="getChangeMode('${document.name.toLowerCase()}.system.${property.name.toLowerCase()}.max')"
622
- label="Mode"
623
- :items="context.numberModes"
624
- item-title="label"
625
- item-value="value"
626
- :color="primaryColor"
627
- variant="outlined"
628
- density="compact">
629
- </v-select>
630
- <v-number-input
631
- name="${document.name.toLowerCase()}.system.${property.name.toLowerCase()}.max"
632
- :model-value="getChangeNumberValue('${document.name.toLowerCase()}.system.${property.name.toLowerCase()}.max')"
633
- label="Max Value"
634
- :color="primaryColor"
635
- variant="outlined"
636
- density="compact">
637
- </v-number-input>
638
- </v-row>
639
- </v-card-text>
640
- </v-card>
588
+ return expandToNode `
589
+ <v-card class="mb-4">
590
+ <v-card-title>
591
+ ${property.name}
592
+ ${generateRemoveButton(document, property)}
593
+ </v-card-title>
594
+ <v-card-text>
595
+ <v-label>Resource Current</v-label>
596
+ <v-row>
597
+ <v-select
598
+ name="${document.name.toLowerCase()}.system.${property.name.toLowerCase()}.value-mode"
599
+ :model-value="getChangeMode('${document.name.toLowerCase()}.system.${property.name.toLowerCase()}.value')"
600
+ label="Mode"
601
+ :items="context.numberModes"
602
+ item-title="label"
603
+ item-value="value"
604
+ :color="primaryColor"
605
+ variant="outlined"
606
+ density="compact">
607
+ </v-select>
608
+ <v-number-input
609
+ name="${document.name.toLowerCase()}.system.${property.name.toLowerCase()}.value"
610
+ :model-value="getChangeNumberValue('${document.name.toLowerCase()}.system.${property.name.toLowerCase()}.value')"
611
+ label="Current Value"
612
+ :color="primaryColor"
613
+ variant="outlined"
614
+ density="compact">
615
+ </v-number-input>
616
+ </v-row>
617
+ <v-label class="mt-2">Resource Max</v-label>
618
+ <v-row>
619
+ <v-select
620
+ name="${document.name.toLowerCase()}.system.${property.name.toLowerCase()}.max-mode"
621
+ :model-value="getChangeMode('${document.name.toLowerCase()}.system.${property.name.toLowerCase()}.max')"
622
+ label="Mode"
623
+ :items="context.numberModes"
624
+ item-title="label"
625
+ item-value="value"
626
+ :color="primaryColor"
627
+ variant="outlined"
628
+ density="compact">
629
+ </v-select>
630
+ <v-number-input
631
+ name="${document.name.toLowerCase()}.system.${property.name.toLowerCase()}.max"
632
+ :model-value="getChangeNumberValue('${document.name.toLowerCase()}.system.${property.name.toLowerCase()}.max')"
633
+ label="Max Value"
634
+ :color="primaryColor"
635
+ variant="outlined"
636
+ density="compact">
637
+ </v-number-input>
638
+ </v-row>
639
+ </v-card-text>
640
+ </v-card>
641
641
  `;
642
642
  }
643
643
  if (isStringExp(property)) {
644
- return expandToNode `
645
- <v-card class="mb-4">
646
- <v-card-title>
647
- ${property.name}
648
- ${generateRemoveButton(document, property)}
649
- </v-card-title>
650
- <v-card-text>
651
- <v-row>
652
- <v-select
653
- name="${document.name.toLowerCase()}.system.${property.name.toLowerCase()}-type"
654
- :model-value="getChangeMode('${document.name.toLowerCase()}.system.${property.name.toLowerCase()}')"
655
- label="Mode"
656
- :items="context.stringModes"
657
- item-title="label"
658
- item-value="value"
659
- :color="primaryColor"
660
- variant="outlined"
661
- density="compact">
662
- </v-select>
663
- <v-text-field
664
- name="${document.name.toLowerCase()}.system.${property.name.toLowerCase()}"
665
- :model-value="getChangeValue('${document.name.toLowerCase()}.system.${property.name.toLowerCase()}')"
666
- label="Text Value"
667
- :color="primaryColor"
668
- variant="outlined"
669
- density="compact">
670
- </v-text-field>
671
- </v-row>
672
- </v-card-text>
673
- </v-card>
644
+ return expandToNode `
645
+ <v-card class="mb-4">
646
+ <v-card-title>
647
+ ${property.name}
648
+ ${generateRemoveButton(document, property)}
649
+ </v-card-title>
650
+ <v-card-text>
651
+ <v-row>
652
+ <v-select
653
+ name="${document.name.toLowerCase()}.system.${property.name.toLowerCase()}-type"
654
+ :model-value="getChangeMode('${document.name.toLowerCase()}.system.${property.name.toLowerCase()}')"
655
+ label="Mode"
656
+ :items="context.stringModes"
657
+ item-title="label"
658
+ item-value="value"
659
+ :color="primaryColor"
660
+ variant="outlined"
661
+ density="compact">
662
+ </v-select>
663
+ <v-text-field
664
+ name="${document.name.toLowerCase()}.system.${property.name.toLowerCase()}"
665
+ :model-value="getChangeValue('${document.name.toLowerCase()}.system.${property.name.toLowerCase()}')"
666
+ label="Text Value"
667
+ :color="primaryColor"
668
+ variant="outlined"
669
+ density="compact">
670
+ </v-text-field>
671
+ </v-row>
672
+ </v-card-text>
673
+ </v-card>
674
674
  `;
675
675
  }
676
676
  if (isBooleanExp(property)) {
677
- return expandToNode `
678
- <v-card class="mb-4">
679
- <v-card-title>
680
- ${property.name}
681
- ${generateRemoveButton(document, property)}
682
- </v-card-title>
683
- <v-card-text>
684
- <v-row>
685
- <v-select
686
- name="${document.name.toLowerCase()}.system.${property.name.toLowerCase()}-type"
687
- :model-value="getChangeMode('${document.name.toLowerCase()}.system.${property.name.toLowerCase()}')"
688
- label="Mode"
689
- :items="context.booleanModes"
690
- item-title="label"
691
- item-value="value"
692
- :color="primaryColor"
693
- variant="outlined"
694
- density="compact">
695
- </v-select>
696
- <v-switch
697
- name="${document.name.toLowerCase()}.system.${property.name.toLowerCase()}"
698
- :model-value="getChangeValue('${document.name.toLowerCase()}.system.${property.name.toLowerCase()}')"
699
- label="Boolean Value"
700
- :color="primaryColor"
701
- variant="outlined"
702
- density="compact">
703
- </v-switch>
704
- </v-row>
705
- </v-card-text>
706
- </v-card>
677
+ return expandToNode `
678
+ <v-card class="mb-4">
679
+ <v-card-title>
680
+ ${property.name}
681
+ ${generateRemoveButton(document, property)}
682
+ </v-card-title>
683
+ <v-card-text>
684
+ <v-row>
685
+ <v-select
686
+ name="${document.name.toLowerCase()}.system.${property.name.toLowerCase()}-type"
687
+ :model-value="getChangeMode('${document.name.toLowerCase()}.system.${property.name.toLowerCase()}')"
688
+ label="Mode"
689
+ :items="context.booleanModes"
690
+ item-title="label"
691
+ item-value="value"
692
+ :color="primaryColor"
693
+ variant="outlined"
694
+ density="compact">
695
+ </v-select>
696
+ <v-switch
697
+ name="${document.name.toLowerCase()}.system.${property.name.toLowerCase()}"
698
+ :model-value="getChangeValue('${document.name.toLowerCase()}.system.${property.name.toLowerCase()}')"
699
+ label="Boolean Value"
700
+ :color="primaryColor"
701
+ variant="outlined"
702
+ density="compact">
703
+ </v-switch>
704
+ </v-row>
705
+ </v-card-text>
706
+ </v-card>
707
707
  `;
708
708
  }
709
709
  if (isStringChoiceField(property)) {
710
- return expandToNode `
711
- <v-card class="mb-4">
712
- <v-card-title>
713
- ${property.name}
714
- ${generateRemoveButton(document, property)}
715
- </v-card-title>
716
- <v-card-text>
717
- <v-row>
718
- <v-select
719
- name="${document.name.toLowerCase()}.system.${property.name.toLowerCase()}-type"
720
- label="Mode"
721
- :items="context.choiceModes"
722
- item-title="label"
723
- item-value="value"
724
- :color="primaryColor"
725
- variant="outlined"
726
- density="compact">
727
- </v-select>
728
- <v-select
729
- name="${document.name.toLowerCase()}.system.${property.name.toLowerCase()}"
730
- label="Choice Value"
731
- :items="[]"
732
- :color="primaryColor"
733
- variant="outlined"
734
- density="compact">
735
- </v-select>
736
- </v-row>
737
- </v-card-text>
738
- </v-card>
710
+ return expandToNode `
711
+ <v-card class="mb-4">
712
+ <v-card-title>
713
+ ${property.name}
714
+ ${generateRemoveButton(document, property)}
715
+ </v-card-title>
716
+ <v-card-text>
717
+ <v-row>
718
+ <v-select
719
+ name="${document.name.toLowerCase()}.system.${property.name.toLowerCase()}-type"
720
+ label="Mode"
721
+ :items="context.choiceModes"
722
+ item-title="label"
723
+ item-value="value"
724
+ :color="primaryColor"
725
+ variant="outlined"
726
+ density="compact">
727
+ </v-select>
728
+ <v-select
729
+ name="${document.name.toLowerCase()}.system.${property.name.toLowerCase()}"
730
+ label="Choice Value"
731
+ :items="[]"
732
+ :color="primaryColor"
733
+ variant="outlined"
734
+ density="compact">
735
+ </v-select>
736
+ </v-row>
737
+ </v-card-text>
738
+ </v-card>
739
739
  `;
740
740
  }
741
741
  if (isTrackerExp(property)) {
742
- return expandToNode `
743
- <v-card class="mb-4">
744
- <v-card-title>
745
- ${property.name}
746
- ${generateRemoveButton(document, property)}
747
- </v-card-title>
748
- <v-card-text>
749
- <v-label class="">Tracker Value</v-label>
750
- <v-row>
751
- <v-select
752
- name="${document.name.toLowerCase()}.system.${property.name.toLowerCase()}-type"
753
- label="Mode"
754
- :items="context.numberModes"
755
- item-title="label"
756
- item-value="value"
757
- :color="primaryColor"
758
- variant="outlined"
759
- density="compact">
760
- </v-select>
761
- <v-number-input
762
- name="${document.name.toLowerCase()}.system.${property.name.toLowerCase()}.value"
763
- :model-value="getChangeNumberValue('${document.name.toLowerCase()}.system.${property.name.toLowerCase()}.value')"
764
- label="Current Value"
765
- :color="primaryColor"
766
- variant="outlined"
767
- density="compact">
768
- </v-number-input>
769
- </v-row>
770
- <v-label class="mt-2">Tracker Max</v-label>
771
- <v-row>
772
- <v-select
773
- name="${document.name.toLowerCase()}.system.${property.name.toLowerCase()}.max-mode"
774
- :model-value="getChangeMode('${document.name.toLowerCase()}.system.${property.name.toLowerCase()}.max')"
775
- label="Mode"
776
- :items="context.numberModes"
777
- item-title="label"
778
- item-value="value"
779
- :color="primaryColor"
780
- variant="outlined"
781
- density="compact">
782
- </v-select>
783
- <v-number-input
784
- name="${document.name.toLowerCase()}.system.${property.name.toLowerCase()}.max"
785
- :model-value="getChangeNumberValue('${document.name.toLowerCase()}.system.${property.name.toLowerCase()}.max')"
786
- label="Max Value"
787
- :color="primaryColor"
788
- variant="outlined"
789
- density="compact">
790
- </v-number-input>
791
- </v-row>
792
- </v-card-text>
793
- </v-card>
742
+ return expandToNode `
743
+ <v-card class="mb-4">
744
+ <v-card-title>
745
+ ${property.name}
746
+ ${generateRemoveButton(document, property)}
747
+ </v-card-title>
748
+ <v-card-text>
749
+ <v-label class="">Tracker Value</v-label>
750
+ <v-row>
751
+ <v-select
752
+ name="${document.name.toLowerCase()}.system.${property.name.toLowerCase()}-type"
753
+ label="Mode"
754
+ :items="context.numberModes"
755
+ item-title="label"
756
+ item-value="value"
757
+ :color="primaryColor"
758
+ variant="outlined"
759
+ density="compact">
760
+ </v-select>
761
+ <v-number-input
762
+ name="${document.name.toLowerCase()}.system.${property.name.toLowerCase()}.value"
763
+ :model-value="getChangeNumberValue('${document.name.toLowerCase()}.system.${property.name.toLowerCase()}.value')"
764
+ label="Current Value"
765
+ :color="primaryColor"
766
+ variant="outlined"
767
+ density="compact">
768
+ </v-number-input>
769
+ </v-row>
770
+ <v-label class="mt-2">Tracker Max</v-label>
771
+ <v-row>
772
+ <v-select
773
+ name="${document.name.toLowerCase()}.system.${property.name.toLowerCase()}.max-mode"
774
+ :model-value="getChangeMode('${document.name.toLowerCase()}.system.${property.name.toLowerCase()}.max')"
775
+ label="Mode"
776
+ :items="context.numberModes"
777
+ item-title="label"
778
+ item-value="value"
779
+ :color="primaryColor"
780
+ variant="outlined"
781
+ density="compact">
782
+ </v-select>
783
+ <v-number-input
784
+ name="${document.name.toLowerCase()}.system.${property.name.toLowerCase()}.max"
785
+ :model-value="getChangeNumberValue('${document.name.toLowerCase()}.system.${property.name.toLowerCase()}.max')"
786
+ label="Max Value"
787
+ :color="primaryColor"
788
+ variant="outlined"
789
+ density="compact">
790
+ </v-number-input>
791
+ </v-row>
792
+ </v-card-text>
793
+ </v-card>
794
794
  `;
795
795
  }
796
796
  if (isDateExp(property)) {
797
- return expandToNode `
798
- <v-card class="mb-4">
799
- <v-card-title>
800
- ${property.name}
801
- ${generateRemoveButton(document, property)}
802
- </v-card-title>
803
- <v-card-text>
804
- <v-row>
805
- <v-select
806
- name="${document.name.toLowerCase()}.system.${property.name.toLowerCase()}-type"
807
- label="Mode"
808
- :items="context.dateModes"
809
- item-title="label"
810
- item-value="value"
811
- :color="primaryColor"
812
- variant="outlined"
813
- density="compact">
814
- </v-select>
815
- <v-text-field
816
- name="${document.name.toLowerCase()}.system.${property.name.toLowerCase()}"
817
- label="Date Value"
818
- type="date"
819
- :color="primaryColor"
820
- variant="outlined"
821
- density="compact">
822
- </v-text-field>
823
- </v-row>
824
- </v-card-text>
825
- </v-card>
797
+ return expandToNode `
798
+ <v-card class="mb-4">
799
+ <v-card-title>
800
+ ${property.name}
801
+ ${generateRemoveButton(document, property)}
802
+ </v-card-title>
803
+ <v-card-text>
804
+ <v-row>
805
+ <v-select
806
+ name="${document.name.toLowerCase()}.system.${property.name.toLowerCase()}-type"
807
+ label="Mode"
808
+ :items="context.dateModes"
809
+ item-title="label"
810
+ item-value="value"
811
+ :color="primaryColor"
812
+ variant="outlined"
813
+ density="compact">
814
+ </v-select>
815
+ <v-text-field
816
+ name="${document.name.toLowerCase()}.system.${property.name.toLowerCase()}"
817
+ label="Date Value"
818
+ type="date"
819
+ :color="primaryColor"
820
+ variant="outlined"
821
+ density="compact">
822
+ </v-text-field>
823
+ </v-row>
824
+ </v-card-text>
825
+ </v-card>
826
826
  `;
827
827
  }
828
828
  if (isTimeExp(property)) {
829
- return expandToNode `
830
- <v-card class="mb-4">
831
- <v-card-title>
832
- ${property.name}
833
- ${generateRemoveButton(document, property)}
834
- </v-card-title>
835
- <v-card-text>
836
- <v-row>
837
- <v-select
838
- name="${document.name.toLowerCase()}.system.${property.name.toLowerCase()}-type"
839
- label="Mode"
840
- :items="context.timeModes"
841
- item-title="label"
842
- item-value="value"
843
- :color="primaryColor"
844
- variant="outlined"
845
- density="compact">
846
- </v-select>
847
- <v-text-field
848
- name="${document.name.toLowerCase()}.system.${property.name.toLowerCase()}"
849
- label="Time Value"
850
- type="time"
851
- :color="primaryColor"
852
- variant="outlined"
853
- density="compact">
854
- </v-text-field>
855
- </v-row>
856
- </v-card-text>
857
- </v-card>
829
+ return expandToNode `
830
+ <v-card class="mb-4">
831
+ <v-card-title>
832
+ ${property.name}
833
+ ${generateRemoveButton(document, property)}
834
+ </v-card-title>
835
+ <v-card-text>
836
+ <v-row>
837
+ <v-select
838
+ name="${document.name.toLowerCase()}.system.${property.name.toLowerCase()}-type"
839
+ label="Mode"
840
+ :items="context.timeModes"
841
+ item-title="label"
842
+ item-value="value"
843
+ :color="primaryColor"
844
+ variant="outlined"
845
+ density="compact">
846
+ </v-select>
847
+ <v-text-field
848
+ name="${document.name.toLowerCase()}.system.${property.name.toLowerCase()}"
849
+ label="Time Value"
850
+ type="time"
851
+ :color="primaryColor"
852
+ variant="outlined"
853
+ density="compact">
854
+ </v-text-field>
855
+ </v-row>
856
+ </v-card-text>
857
+ </v-card>
858
858
  `;
859
859
  }
860
860
  if (isDateTimeExp(property)) {
861
- return expandToNode `
862
- <v-card class="mb-4">
863
- <v-card-title>
864
- ${property.name}
865
- ${generateRemoveButton(document, property)}
866
- </v-card-title>
867
- <v-card-text>
868
- <v-row>
869
- <v-select
870
- name="${document.name.toLowerCase()}.system.${property.name.toLowerCase()}-type"
871
- label="Mode"
872
- :items="context.dateTimeModes"
873
- item-title="label"
874
- item-value="value"
875
- :color="primaryColor"
876
- variant="outlined"
877
- density="compact">
878
- </v-select>
879
- <v-text-field
880
- name="${document.name.toLowerCase()}.system.${property.name.toLowerCase()}"
881
- label="DateTime Value"
882
- type="datetime-local"
883
- :color="primaryColor"
884
- variant="outlined"
885
- density="compact">
886
- </v-text-field>
887
- </v-row>
888
- </v-card-text>
889
- </v-card>
861
+ return expandToNode `
862
+ <v-card class="mb-4">
863
+ <v-card-title>
864
+ ${property.name}
865
+ ${generateRemoveButton(document, property)}
866
+ </v-card-title>
867
+ <v-card-text>
868
+ <v-row>
869
+ <v-select
870
+ name="${document.name.toLowerCase()}.system.${property.name.toLowerCase()}-type"
871
+ label="Mode"
872
+ :items="context.dateTimeModes"
873
+ item-title="label"
874
+ item-value="value"
875
+ :color="primaryColor"
876
+ variant="outlined"
877
+ density="compact">
878
+ </v-select>
879
+ <v-text-field
880
+ name="${document.name.toLowerCase()}.system.${property.name.toLowerCase()}"
881
+ label="DateTime Value"
882
+ type="datetime-local"
883
+ :color="primaryColor"
884
+ variant="outlined"
885
+ density="compact">
886
+ </v-text-field>
887
+ </v-row>
888
+ </v-card-text>
889
+ </v-card>
890
890
  `;
891
891
  }
892
892
  if (isDieField(property)) {
893
- return expandToNode `
894
- <v-card class="mb-4">
895
- <v-card-title>
896
- ${property.name}
897
- ${generateRemoveButton(document, property)}
898
- </v-card-title>
899
- <v-card-text>
900
- <v-row>
901
- <v-select
902
- name="${document.name.toLowerCase()}.system.${property.name.toLowerCase()}-type"
903
- label="Mode"
904
- :items="context.dieModes"
905
- item-title="label"
906
- item-value="value"
907
- :color="primaryColor"
908
- variant="outlined"
909
- density="compact">
910
- </v-select>
911
- <v-select
912
- name="${document.name.toLowerCase()}.system.${property.name.toLowerCase()}"
913
- label="Die Type"
914
- :items="context.dieTypes"
915
- item-title="label"
916
- item-value="value"
917
- :color="primaryColor"
918
- variant="outlined"
919
- density="compact">
920
- </v-select>
921
- </v-row>
922
- </v-card-text>
923
- </v-card>
893
+ return expandToNode `
894
+ <v-card class="mb-4">
895
+ <v-card-title>
896
+ ${property.name}
897
+ ${generateRemoveButton(document, property)}
898
+ </v-card-title>
899
+ <v-card-text>
900
+ <v-row>
901
+ <v-select
902
+ name="${document.name.toLowerCase()}.system.${property.name.toLowerCase()}-type"
903
+ label="Mode"
904
+ :items="context.dieModes"
905
+ item-title="label"
906
+ item-value="value"
907
+ :color="primaryColor"
908
+ variant="outlined"
909
+ density="compact">
910
+ </v-select>
911
+ <v-select
912
+ name="${document.name.toLowerCase()}.system.${property.name.toLowerCase()}"
913
+ label="Die Type"
914
+ :items="context.dieTypes"
915
+ item-title="label"
916
+ item-value="value"
917
+ :color="primaryColor"
918
+ variant="outlined"
919
+ density="compact">
920
+ </v-select>
921
+ </v-row>
922
+ </v-card-text>
923
+ </v-card>
924
924
  `;
925
925
  }
926
926
  if (isDiceField(property)) {
927
- return expandToNode `
928
- <v-card class="mb-4">
929
- <v-card-title>
930
- ${property.name}
931
- ${generateRemoveButton(document, property)}
932
- </v-card-title>
933
- <v-card-text>
934
- <v-row>
935
- <v-select
936
- name="${document.name.toLowerCase()}.system.${property.name.toLowerCase()}-type"
937
- :model-value="getChangeMode('${document.name.toLowerCase()}.system.${property.name.toLowerCase()}')"
938
- label="Mode"
939
- :items="context.diceModes"
940
- item-title="label"
941
- item-value="value"
942
- :color="primaryColor"
943
- variant="outlined"
944
- density="compact">
945
- </v-select>
946
- <v-number-input
947
- name="${document.name.toLowerCase()}.system.${property.name.toLowerCase()}.number"
948
- :model-value="getChangeNumberValue('${document.name.toLowerCase()}.system.${property.name.toLowerCase()}.number')"
949
- label="Number of Dice"
950
- :color="primaryColor"
951
- variant="outlined"
952
- density="compact">
953
- </v-number-input>
954
- <v-select
955
- name="${document.name.toLowerCase()}.system.${property.name.toLowerCase()}.die"
956
- :model-value="getChangeValue('${document.name.toLowerCase()}.system.${property.name.toLowerCase()}.die')"
957
- label="Die Type"
958
- :items="context.dieTypes"
959
- item-title="label"
960
- item-value="value"
961
- :color="primaryColor"
962
- variant="outlined"
963
- density="compact">
964
- </v-select>
965
- </v-row>
966
- </v-card-text>
967
- </v-card>
927
+ return expandToNode `
928
+ <v-card class="mb-4">
929
+ <v-card-title>
930
+ ${property.name}
931
+ ${generateRemoveButton(document, property)}
932
+ </v-card-title>
933
+ <v-card-text>
934
+ <v-row>
935
+ <v-select
936
+ name="${document.name.toLowerCase()}.system.${property.name.toLowerCase()}-type"
937
+ :model-value="getChangeMode('${document.name.toLowerCase()}.system.${property.name.toLowerCase()}')"
938
+ label="Mode"
939
+ :items="context.diceModes"
940
+ item-title="label"
941
+ item-value="value"
942
+ :color="primaryColor"
943
+ variant="outlined"
944
+ density="compact">
945
+ </v-select>
946
+ <v-number-input
947
+ name="${document.name.toLowerCase()}.system.${property.name.toLowerCase()}.number"
948
+ :model-value="getChangeNumberValue('${document.name.toLowerCase()}.system.${property.name.toLowerCase()}.number')"
949
+ label="Number of Dice"
950
+ :color="primaryColor"
951
+ variant="outlined"
952
+ density="compact">
953
+ </v-number-input>
954
+ <v-select
955
+ name="${document.name.toLowerCase()}.system.${property.name.toLowerCase()}.die"
956
+ :model-value="getChangeValue('${document.name.toLowerCase()}.system.${property.name.toLowerCase()}.die')"
957
+ label="Die Type"
958
+ :items="context.dieTypes"
959
+ item-title="label"
960
+ item-value="value"
961
+ :color="primaryColor"
962
+ variant="outlined"
963
+ density="compact">
964
+ </v-select>
965
+ </v-row>
966
+ </v-card-text>
967
+ </v-card>
968
968
  `;
969
969
  }
970
970
  if (isMeasuredTemplateField(property)) {
971
- return expandToNode `
972
- <v-card class="mb-4">
973
- <v-card-title>
974
- ${property.name}
975
- ${generateRemoveButton(document, property)}
976
- </v-card-title>
977
- <v-card-text>
978
- <v-row>
979
- <v-select
980
- name="${document.name.toLowerCase()}.system.${property.name.toLowerCase()}-type"
981
- label="Mode"
982
- :items="context.templateModes"
983
- item-title="label"
984
- item-value="value"
985
- :color="primaryColor"
986
- variant="outlined"
987
- density="compact">
988
- </v-select>
989
- <v-text-field
990
- name="${document.name.toLowerCase()}.system.${property.name.toLowerCase()}.distance"
991
- label="Distance"
992
- :color="primaryColor"
993
- variant="outlined"
994
- density="compact">
995
- </v-text-field>
996
- <v-select
997
- name="${document.name.toLowerCase()}.system.${property.name.toLowerCase()}.type"
998
- label="Template Type"
999
- :items="context.templateTypes"
1000
- item-title="label"
1001
- item-value="value"
1002
- :color="primaryColor"
1003
- variant="outlined"
1004
- density="compact">
1005
- </v-select>
1006
- </v-row>
1007
- </v-card-text>
1008
- </v-card>
971
+ return expandToNode `
972
+ <v-card class="mb-4">
973
+ <v-card-title>
974
+ ${property.name}
975
+ ${generateRemoveButton(document, property)}
976
+ </v-card-title>
977
+ <v-card-text>
978
+ <v-row>
979
+ <v-select
980
+ name="${document.name.toLowerCase()}.system.${property.name.toLowerCase()}-type"
981
+ label="Mode"
982
+ :items="context.templateModes"
983
+ item-title="label"
984
+ item-value="value"
985
+ :color="primaryColor"
986
+ variant="outlined"
987
+ density="compact">
988
+ </v-select>
989
+ <v-text-field
990
+ name="${document.name.toLowerCase()}.system.${property.name.toLowerCase()}.distance"
991
+ label="Distance"
992
+ :color="primaryColor"
993
+ variant="outlined"
994
+ density="compact">
995
+ </v-text-field>
996
+ <v-select
997
+ name="${document.name.toLowerCase()}.system.${property.name.toLowerCase()}.type"
998
+ label="Template Type"
999
+ :items="context.templateTypes"
1000
+ item-title="label"
1001
+ item-value="value"
1002
+ :color="primaryColor"
1003
+ variant="outlined"
1004
+ density="compact">
1005
+ </v-select>
1006
+ </v-row>
1007
+ </v-card-text>
1008
+ </v-card>
1009
1009
  `;
1010
1010
  }
1011
- return expandToNode `
1012
- <v-alert text="Unknown Property ${property.name} (${property.$type})" type="warning" density="compact" class="ga-2 ma-1" variant="outlined"></v-alert>
1011
+ return expandToNode `
1012
+ <v-alert text="Unknown Property ${property.name} (${property.$type})" type="warning" density="compact" class="ga-2 ma-1" variant="outlined"></v-alert>
1013
1013
  `;
1014
1014
  }
1015
1015
  }