intelligent-system-design-language 0.3.21 → 0.3.23

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 (116) 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 -1381
  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 -1381
  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 -651
  27. package/out/cli/components/chat-card-generator.js.map +1 -1
  28. package/out/cli/components/css-generator.js +4 -4
  29. package/out/cli/components/damage-roll-generator.js +160 -160
  30. package/out/cli/components/datamodel-generator.js +264 -257
  31. package/out/cli/components/datamodel-generator.js.map +1 -1
  32. package/out/cli/components/derived-data-generator.js +923 -923
  33. package/out/cli/components/hotbar-drop-hook-generator.js +82 -82
  34. package/out/cli/components/init-hook-generator.js +495 -495
  35. package/out/cli/components/language-generator.js +1 -1
  36. package/out/cli/components/language-generator.js.map +1 -1
  37. package/out/cli/components/measured-template-preview.js +221 -221
  38. package/out/cli/components/method-generator.js +979 -887
  39. package/out/cli/components/method-generator.js.map +1 -1
  40. package/out/cli/components/ready-hook-generator.js +404 -404
  41. package/out/cli/components/token-generator.js +116 -116
  42. package/out/cli/components/vue/base-components/vue-attribute.js +138 -138
  43. package/out/cli/components/vue/base-components/vue-boolean.js +64 -64
  44. package/out/cli/components/vue/base-components/vue-calculator.js +93 -93
  45. package/out/cli/components/vue/base-components/vue-damage-application.js +356 -356
  46. package/out/cli/components/vue/base-components/vue-damage-bonuses.js +165 -165
  47. package/out/cli/components/vue/base-components/vue-damage-resistances.js +196 -196
  48. package/out/cli/components/vue/base-components/vue-damage-track.js +121 -121
  49. package/out/cli/components/vue/base-components/vue-date-time.js +42 -42
  50. package/out/cli/components/vue/base-components/vue-dice.js +98 -98
  51. package/out/cli/components/vue/base-components/vue-die.js +73 -73
  52. package/out/cli/components/vue/base-components/vue-document-choice.js +149 -149
  53. package/out/cli/components/vue/base-components/vue-document-choices.js +179 -179
  54. package/out/cli/components/vue/base-components/vue-document-link.js +60 -60
  55. package/out/cli/components/vue/base-components/vue-extended-choice.js +88 -88
  56. package/out/cli/components/vue/base-components/vue-inventory.js +519 -519
  57. package/out/cli/components/vue/base-components/vue-macro-choice.js +138 -138
  58. package/out/cli/components/vue/base-components/vue-measured-template.js +530 -530
  59. package/out/cli/components/vue/base-components/vue-money.js +483 -483
  60. package/out/cli/components/vue/base-components/vue-number.js +174 -174
  61. package/out/cli/components/vue/base-components/vue-paperdoll.js +43 -43
  62. package/out/cli/components/vue/base-components/vue-parent-property-reference.js +76 -76
  63. package/out/cli/components/vue/base-components/vue-prosemirror.js +18 -18
  64. package/out/cli/components/vue/base-components/vue-resource.js +136 -136
  65. package/out/cli/components/vue/base-components/vue-roll-visualizer.js +286 -109
  66. package/out/cli/components/vue/base-components/vue-roll-visualizer.js.map +1 -1
  67. package/out/cli/components/vue/base-components/vue-self-property-reference.js +62 -62
  68. package/out/cli/components/vue/base-components/vue-string-choice.js +98 -98
  69. package/out/cli/components/vue/base-components/vue-string-choices.js +203 -203
  70. package/out/cli/components/vue/base-components/vue-string.js +60 -60
  71. package/out/cli/components/vue/base-components/vue-text-field.js +53 -53
  72. package/out/cli/components/vue/base-components/vue-tracker.js +431 -431
  73. package/out/cli/components/vue/vue-action-component-generator.js +64 -64
  74. package/out/cli/components/vue/vue-active-effect-sheet-generator.js +856 -856
  75. package/out/cli/components/vue/vue-datatable-sheet-class-generator.js +292 -292
  76. package/out/cli/components/vue/vue-datatable2-component-generator.js +824 -824
  77. package/out/cli/components/vue/vue-document-creation-app.js +121 -121
  78. package/out/cli/components/vue/vue-document-creation-sheet.js +94 -94
  79. package/out/cli/components/vue/vue-generator.js +40 -40
  80. package/out/cli/components/vue/vue-mixin.js +296 -296
  81. package/out/cli/components/vue/vue-pinned-datatable-component-generator.js +260 -260
  82. package/out/cli/components/vue/vue-prompt-generator.js +91 -76
  83. package/out/cli/components/vue/vue-prompt-generator.js.map +1 -1
  84. package/out/cli/components/vue/vue-prompt-sheet-class-generator.js +317 -317
  85. package/out/cli/components/vue/vue-sheet-application-generator.js +1177 -1167
  86. package/out/cli/components/vue/vue-sheet-application-generator.js.map +1 -1
  87. package/out/cli/components/vue/vue-sheet-class-generator.js +510 -510
  88. package/out/cli/generator.js +438 -433
  89. package/out/cli/generator.js.map +1 -1
  90. package/out/extension/github/githubAuthProvider.js +71 -29
  91. package/out/extension/github/githubAuthProvider.js.map +1 -1
  92. package/out/extension/github/githubGistManager.js +4 -3
  93. package/out/extension/github/githubGistManager.js.map +1 -1
  94. package/out/extension/github/githubManager.js +40 -38
  95. package/out/extension/github/githubManager.js.map +1 -1
  96. package/out/extension/github/githubQuickActions.js +120 -120
  97. package/out/extension/github/system-workflow.yml +47 -47
  98. package/out/extension/main.cjs +909 -532
  99. package/out/extension/main.cjs.map +3 -3
  100. package/out/extension/package.json +419 -419
  101. package/out/language/generated/ast.js +51 -2
  102. package/out/language/generated/ast.js.map +1 -1
  103. package/out/language/generated/grammar.js +14240 -13991
  104. package/out/language/generated/grammar.js.map +1 -1
  105. package/out/language/intelligent-system-design-language-validator.js +32 -2
  106. package/out/language/intelligent-system-design-language-validator.js.map +1 -1
  107. package/out/language/isdl-scope-provider.js +14 -1
  108. package/out/language/isdl-scope-provider.js.map +1 -1
  109. package/out/language/main.cjs +913 -569
  110. package/out/language/main.cjs.map +3 -3
  111. package/out/package.json +419 -419
  112. package/out/progressbar.min.js +6 -6
  113. package/out/styles.scss +762 -747
  114. package/out/test/validating/diagnostics.test.js +40 -0
  115. package/out/test/validating/diagnostics.test.js.map +1 -1
  116. 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
  }