intelligent-system-design-language 0.3.28 → 0.3.34
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.
- package/.claude/commands/discord-sweep.md +95 -0
- package/.claude/commands/release-notes.md +86 -0
- package/.claude/commands/support-reply.md +61 -0
- package/.claude/commands/wiki-sync.md +90 -0
- package/.claude/feedback-sweep.json +12 -0
- package/.claude/settings.json +14 -0
- package/.codegraph/daemon.pid +6 -0
- package/.mcp.json +12 -0
- package/out/_isdlStyles.scss +2 -1
- package/out/cli/components/_isdlStyles.scss +2 -1
- package/out/cli/components/derived-data-generator.js +5 -2
- package/out/cli/components/derived-data-generator.js.map +1 -1
- package/out/cli/components/method-generator.js +67 -20
- package/out/cli/components/method-generator.js.map +1 -1
- package/out/cli/components/utils.js +5 -3
- package/out/cli/components/utils.js.map +1 -1
- package/out/cli/components/vue/base-components/vue-attribute.js +1 -1
- package/out/cli/components/vue/base-components/vue-resource.js +3 -2
- package/out/cli/components/vue/base-components/vue-resource.js.map +1 -1
- package/out/cli/components/vue/base-components/vue-tracker.js +10 -4
- package/out/cli/components/vue/base-components/vue-tracker.js.map +1 -1
- package/out/cli/components/vue/vue-datatable2-component-generator.js +185 -24
- package/out/cli/components/vue/vue-datatable2-component-generator.js.map +1 -1
- package/out/cli/components/vue/vue-generator.js +45 -4
- package/out/cli/components/vue/vue-generator.js.map +1 -1
- package/out/cli/components/vue/vue-sheet-application-generator.js +196 -43
- package/out/cli/components/vue/vue-sheet-application-generator.js.map +1 -1
- package/out/cli/components/vue/vue-sheet-class-generator.js +4 -5
- package/out/cli/components/vue/vue-sheet-class-generator.js.map +1 -1
- package/out/extension/main.cjs +1627 -898
- package/out/extension/main.cjs.map +3 -3
- package/out/extension/package.json +1 -1
- package/out/language/generated/ast.js +132 -12
- package/out/language/generated/ast.js.map +1 -1
- package/out/language/generated/grammar.js +1460 -876
- package/out/language/generated/grammar.js.map +1 -1
- package/out/language/intelligent-system-design-language-formatter.js +4 -1
- package/out/language/intelligent-system-design-language-formatter.js.map +1 -1
- package/out/language/intelligent-system-design-language-validator.js +43 -5
- package/out/language/intelligent-system-design-language-validator.js.map +1 -1
- package/out/language/isdl-document-validator.js +3 -3
- package/out/language/isdl-document-validator.js.map +1 -1
- package/out/language/isdl-scope-provider.js +6 -4
- package/out/language/isdl-scope-provider.js.map +1 -1
- package/out/language/main.cjs +1629 -900
- package/out/language/main.cjs.map +3 -3
- package/out/package.json +1 -1
- package/package.json +1 -1
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as path from 'node:path';
|
|
2
2
|
import * as fs from 'node:fs';
|
|
3
|
+
import { createRequire } from 'node:module';
|
|
3
4
|
import { isActor, isPage, isPinnedField, isPrompt, isTableField, isVariableExpression } from "../../../language/generated/ast.js";
|
|
4
5
|
import { generateDocumentVueComponent } from "./vue-sheet-application-generator.js";
|
|
5
6
|
import { expandToNode, joinToNode, toString } from 'langium/generate';
|
|
@@ -48,19 +49,59 @@ export async function runViteBuild(destination) {
|
|
|
48
49
|
try {
|
|
49
50
|
const __filename = fileURLToPath(import.meta.url);
|
|
50
51
|
const __dirname = path.dirname(__filename);
|
|
52
|
+
// The generated system directory has no node_modules of its own, so
|
|
53
|
+
// we must redirect all bare-specifier imports at the CLI's own
|
|
54
|
+
// node_modules. A simple string-prefix alias
|
|
55
|
+
// { vuetify: ".../node_modules/vuetify" }
|
|
56
|
+
// works for the root package but **bypasses the exports map** for
|
|
57
|
+
// sub-paths. vite-plugin-vuetify / @vuetify/loader-shared emits
|
|
58
|
+
// per-component imports such as "vuetify/components/VBtn". After the
|
|
59
|
+
// prefix alias that becomes ".../node_modules/vuetify/components/VBtn"
|
|
60
|
+
// — a path that doesn't exist on disk (real files live under lib/).
|
|
61
|
+
// On Linux (case-sensitive FS) this is a hard ENOENT; issue #85.
|
|
62
|
+
//
|
|
63
|
+
// Fix: use a custom Vite plugin with a resolveId hook that forwards
|
|
64
|
+
// all "vuetify/*" specifiers through Node's require() resolver, which
|
|
65
|
+
// honours the exports map and returns the real lib/ path regardless of
|
|
66
|
+
// which sub-path shape loader-shared generated.
|
|
67
|
+
const nodeModules = path.resolve(__dirname, "../../../../node_modules");
|
|
68
|
+
// createRequire needs a file URL; any file inside nodeModules works as anchor.
|
|
69
|
+
const cliRequire = createRequire(path.join(nodeModules, "vuetify", "package.json"));
|
|
70
|
+
// enforce:'pre' so this plugin runs BEFORE @rollup/plugin-alias, preventing
|
|
71
|
+
// the alias from mangling "vuetify/components/VBtn" into an absolute path
|
|
72
|
+
// (which would no longer start with "vuetify" and bypass the resolver).
|
|
73
|
+
const vuetifyResolverPlugin = {
|
|
74
|
+
name: "isdl:vuetify-resolver",
|
|
75
|
+
enforce: "pre",
|
|
76
|
+
resolveId(id) {
|
|
77
|
+
// Intercept any import that starts with "vuetify" (bare or sub-path).
|
|
78
|
+
if (!id.startsWith("vuetify"))
|
|
79
|
+
return null;
|
|
80
|
+
try {
|
|
81
|
+
return cliRequire.resolve(id);
|
|
82
|
+
}
|
|
83
|
+
catch (_a) {
|
|
84
|
+
// Not resolvable — let Vite handle it (shouldn't happen in practice).
|
|
85
|
+
return null;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
};
|
|
51
89
|
const config = defineConfig({
|
|
52
90
|
root: destination,
|
|
53
91
|
plugins: [
|
|
54
92
|
vue(),
|
|
55
|
-
vuetify({ autoImport: true })
|
|
93
|
+
vuetify({ autoImport: true }),
|
|
94
|
+
vuetifyResolverPlugin
|
|
56
95
|
],
|
|
57
96
|
optimizeDeps: {
|
|
58
97
|
include: ["vuetify"]
|
|
59
98
|
},
|
|
60
99
|
resolve: {
|
|
61
|
-
alias
|
|
62
|
-
|
|
63
|
-
|
|
100
|
+
// No alias for vuetify — the vuetifyResolverPlugin above handles all
|
|
101
|
+
// "vuetify/*" specifiers via Node's exports-map-aware resolver, which
|
|
102
|
+
// correctly maps e.g. "vuetify/components/VBtn" -> lib/components/VBtn/index.mjs
|
|
103
|
+
// regardless of which loader-shared version generated the import (issue #85).
|
|
104
|
+
alias: {}
|
|
64
105
|
},
|
|
65
106
|
build: {
|
|
66
107
|
emptyOutDir: true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vue-generator.js","sourceRoot":"","sources":["../../../../src/cli/components/vue/vue-generator.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"vue-generator.js","sourceRoot":"","sources":["../../../../src/cli/components/vue/vue-generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as path from 'node:path';
|
|
2
2
|
import * as fs from 'node:fs';
|
|
3
3
|
import { expandToNode, joinToNode, toString } from 'langium/generate';
|
|
4
|
-
import { isAccess, isAction, isActor, isConfigFlag, isTheme, isThemeFieldParam, isThemePrimaryParam, isThemeSecondaryParam, isThemeTertiaryParam, isAttributeExp, isAttributeParamMod, isAttributeRollParam, isAttributeFunctionParam, isAttributeStyleParam, isBackgroundParam, isBooleanExp, isBooleanParamValue, isChoiceCustomProperty, isChoiceStringValue, isColorParam, isColumn, isDateExp, isDateTimeExp, isDiceField, isDiceFields, isDieChoicesParam, isDieNoneParam, isDieField, isDocumentChoiceExp, isDocumentChoicesExp, isEntry, isHtmlExp, isIconParam, isImageParam, isLabelParam, isMacroField, isMeasuredTemplateField, isDamageBonusesField, isDamageResistancesField, isPinnedField, isMoneyField, isDamageTrackExp, isDamageTrackTypesParam, isRollVisualizerField, isImageField, isImagePrimaryParam, isHideLabelParam, isMethodBlock, isNumberExp, isNumberParamMax, isNumberParamMin, isNumberParamValue, isNumberParamCalculator, isPage, isPaperDollExp, isParentPropertyRefChoiceParam, isParentPropertyRefExp, isSelfPropertyRefExp, isProperty, isResourceExp, isRow, isSection, isSegmentsParameter, isSingleDocumentExp, isSizeParam, isStatusProperty, isStringChoiceField, isDamageTypeChoiceField, isStringChoicesField, isStringExp, isStringExtendedChoice, isStringParamChoices, isStringParamValue, isTableField, isTimeExp, isTrackerExp, isTrackerStyleParameter, isVisibilityParam, isInventoryField, isInventorySlotsParam, isInventoryRowsParam, isInventoryColumnsParam, isInventorySlotSizeParam, isInventoryQuantityParam, isInventoryMoneyParam, isInventorySumParam, isInventorySumMaxParam, isInventorySortParam, isInventoryEmptySlotsParam, isInventorySummaryParam, isWhereParam, isGlobalParam } from "../../../language/generated/ast.js";
|
|
4
|
+
import { isAccess, isAction, isActor, isConfigFlag, isTheme, isThemeFieldParam, isThemePrimaryParam, isThemeSecondaryParam, isThemeTertiaryParam, isAttributeExp, isAttributeParamMod, isAttributeRollParam, isAttributeFunctionParam, isAttributeStyleParam, isBackgroundParam, isBooleanExp, isBooleanParamValue, isChoiceCustomProperty, isChoiceStringValue, isColorParam, isColumn, isDateExp, isDateTimeExp, isDiceField, isDiceFields, isDieChoicesParam, isDieNoneParam, isDieField, isDocumentChoiceExp, isDocumentChoicesExp, isEntry, isHtmlExp, isIconParam, isImageParam, isLabelParam, isMacroField, isMeasuredTemplateField, isDamageBonusesField, isDamageResistancesField, isPinnedField, isMoneyField, isDamageTrackExp, isDamageTrackTypesParam, isRollVisualizerField, isImageField, isImagePrimaryParam, isHideLabelParam, isCollapsibleParam, isCollapsedParam, isEmptyColorParam, isThemeElevationParam, isMethodBlock, isNumberExp, isNumberParamMax, isNumberParamMin, isNumberParamValue, isNumberParamCalculator, isPage, isPaperDollExp, isParentPropertyRefChoiceParam, isParentPropertyRefExp, isSelfPropertyRefExp, isProperty, isResourceExp, isRow, isSection, isSegmentsParameter, isSingleDocumentExp, isSizeParam, isStatusProperty, isStringChoiceField, isDamageTypeChoiceField, isStringChoicesField, isStringExp, isStringExtendedChoice, isStringParamChoices, isStringParamValue, isTableField, isTimeExp, isTrackerExp, isTrackerStyleParameter, isVisibilityParam, isInventoryField, isInventorySlotsParam, isInventoryRowsParam, isInventoryColumnsParam, isInventorySlotSizeParam, isInventoryQuantityParam, isInventoryMoneyParam, isInventorySumParam, isInventorySumMaxParam, isInventorySortParam, isInventoryEmptySlotsParam, isInventorySummaryParam, isWhereParam, isGlobalParam } from "../../../language/generated/ast.js";
|
|
5
5
|
import { getAllOfType, getDocument, getSystemPath, globalGetAllOfType, toMachineIdentifier } from '../utils.js';
|
|
6
6
|
import { AstUtils } from 'langium';
|
|
7
7
|
import { generateActionComponent, generateDocumentPromptApps } from './vue-action-component-generator.js';
|
|
@@ -41,6 +41,17 @@ function getUserColorsEnabled(entry) {
|
|
|
41
41
|
const flag = entry.config.body.find(x => isConfigFlag(x) && x.type === 'userColors');
|
|
42
42
|
return flag ? flag.value : true;
|
|
43
43
|
}
|
|
44
|
+
// Returns the elevation integer from the global `theme { elevation: N }` block, or 4 if unset.
|
|
45
|
+
const DEFAULT_ELEVATION = 4;
|
|
46
|
+
function getGlobalThemeElevation(entry) {
|
|
47
|
+
const theme = entry.config.body.find(isTheme);
|
|
48
|
+
if (theme) {
|
|
49
|
+
const ep = theme.params.find(isThemeElevationParam);
|
|
50
|
+
if (ep != null)
|
|
51
|
+
return ep.value;
|
|
52
|
+
}
|
|
53
|
+
return DEFAULT_ELEVATION;
|
|
54
|
+
}
|
|
44
55
|
export function generateDocumentVueComponent(entry, id, document, destination) {
|
|
45
56
|
const type = isActor(document) ? 'actor' : 'item';
|
|
46
57
|
const generatedFileDir = path.join(destination, "system", "templates", "vue", type, document.name.toLowerCase());
|
|
@@ -57,6 +68,31 @@ export function generateDocumentVueComponent(entry, id, document, destination) {
|
|
|
57
68
|
`.appendNewLineIfNotEmpty();
|
|
58
69
|
fs.writeFileSync(generatedFilePath, toString(fileNode));
|
|
59
70
|
}
|
|
71
|
+
function generateCollapsibleSectionsSetup(document) {
|
|
72
|
+
const allSections = getAllOfType(document.body, isSection);
|
|
73
|
+
const collapsibleSections = allSections.filter(s => { var _a; return ((_a = s.params) !== null && _a !== void 0 ? _a : []).some(p => isCollapsibleParam(p) && p.value); });
|
|
74
|
+
if (collapsibleSections.length === 0)
|
|
75
|
+
return '';
|
|
76
|
+
const defaultCollapsedEntries = collapsibleSections
|
|
77
|
+
.filter(s => { var _a; return ((_a = s.params) !== null && _a !== void 0 ? _a : []).some(p => isCollapsedParam(p) && p.value); })
|
|
78
|
+
.map(s => `'${s.name.toLowerCase()}': true`)
|
|
79
|
+
.join(', ');
|
|
80
|
+
const defaultsObj = `{ ${defaultCollapsedEntries} }`;
|
|
81
|
+
return `
|
|
82
|
+
// Collapsible sections — state persisted per-document in localStorage.
|
|
83
|
+
const _collapsibleDefaults = ${defaultsObj};
|
|
84
|
+
const collapsedSections = ref((() => {
|
|
85
|
+
try {
|
|
86
|
+
const s = JSON.parse(localStorage.getItem(\`isdl-sections-\${document.uuid}\`) ?? 'null');
|
|
87
|
+
return s !== null ? s : { ..._collapsibleDefaults };
|
|
88
|
+
} catch { return { ..._collapsibleDefaults }; }
|
|
89
|
+
})());
|
|
90
|
+
const toggleSection = (name) => {
|
|
91
|
+
collapsedSections.value[name] = !collapsedSections.value[name];
|
|
92
|
+
localStorage.setItem(\`isdl-sections-\${document.uuid}\`, JSON.stringify(collapsedSections.value));
|
|
93
|
+
};
|
|
94
|
+
`;
|
|
95
|
+
}
|
|
60
96
|
function generateVueComponentScript(entry, id, document, destination) {
|
|
61
97
|
const pages = getAllOfType(document.body, isPage);
|
|
62
98
|
const actions = getAllOfType(document.body, isAction, false);
|
|
@@ -710,6 +746,8 @@ function generateVueComponentScript(entry, id, document, destination) {
|
|
|
710
746
|
document.setFlag('${id}', 'edit-mode', editModeRef.value);
|
|
711
747
|
};
|
|
712
748
|
|
|
749
|
+
${generateCollapsibleSectionsSetup(document)}
|
|
750
|
+
|
|
713
751
|
function spawnDatatableWindow(e, pageName, tabName) {
|
|
714
752
|
if (event.button === 1) {
|
|
715
753
|
event.preventDefault();
|
|
@@ -1022,7 +1060,7 @@ function generateVueComponentTemplate(entry, id, document) {
|
|
|
1022
1060
|
`.appendNewLine();
|
|
1023
1061
|
}
|
|
1024
1062
|
function generateInventoryTabWindow(pageName, element) {
|
|
1025
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r;
|
|
1063
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s;
|
|
1026
1064
|
const systemPath = getSystemPath(element, [], undefined, false);
|
|
1027
1065
|
const iconParam = element.params.find(p => isIconParam(p));
|
|
1028
1066
|
const labelParam = element.params.find(p => isLabelParam(p));
|
|
@@ -1044,21 +1082,21 @@ function generateVueComponentTemplate(entry, id, document) {
|
|
|
1044
1082
|
const slots = (_a = slotsParam === null || slotsParam === void 0 ? void 0 : slotsParam.value) !== null && _a !== void 0 ? _a : 20;
|
|
1045
1083
|
const rows = rowsParam === null || rowsParam === void 0 ? void 0 : rowsParam.value;
|
|
1046
1084
|
const slotSize = slotSizeParam ? parseInt(slotSizeParam.value.replace('px', '')) : 60;
|
|
1047
|
-
const documentType = (_b = element.
|
|
1048
|
-
const quantityField = (
|
|
1049
|
-
const moneyField = (
|
|
1050
|
-
const moneyFieldLabel = moneyField ? `${document.name}.${(
|
|
1051
|
-
const moneyFieldIcon = moneyField ? (
|
|
1052
|
-
const sortProperty = (
|
|
1053
|
-
const sortOrder = (
|
|
1054
|
-
const globalAllowed = (
|
|
1055
|
-
const emptySlots = (
|
|
1056
|
-
const summary = (
|
|
1085
|
+
const documentType = (_c = (_b = element.documents[0]) === null || _b === void 0 ? void 0 : _b.ref) === null || _c === void 0 ? void 0 : _c.name.toLowerCase();
|
|
1086
|
+
const quantityField = (_d = quantityParam === null || quantityParam === void 0 ? void 0 : quantityParam.field.ref) === null || _d === void 0 ? void 0 : _d.name.toLowerCase();
|
|
1087
|
+
const moneyField = (_e = moneyParam === null || moneyParam === void 0 ? void 0 : moneyParam.field.ref) === null || _e === void 0 ? void 0 : _e.name.toLowerCase();
|
|
1088
|
+
const moneyFieldLabel = moneyField ? `${document.name}.${(_g = (_f = moneyParam === null || moneyParam === void 0 ? void 0 : moneyParam.field) === null || _f === void 0 ? void 0 : _f.ref) === null || _g === void 0 ? void 0 : _g.name}` : undefined;
|
|
1089
|
+
const moneyFieldIcon = moneyField ? (_k = (_j = (_h = moneyParam === null || moneyParam === void 0 ? void 0 : moneyParam.field) === null || _h === void 0 ? void 0 : _h.ref) === null || _j === void 0 ? void 0 : _j.params.find(isIconParam)) === null || _k === void 0 ? void 0 : _k.value : undefined;
|
|
1090
|
+
const sortProperty = (_l = sortParam === null || sortParam === void 0 ? void 0 : sortParam.property.ref) === null || _l === void 0 ? void 0 : _l.name;
|
|
1091
|
+
const sortOrder = (_m = sortParam === null || sortParam === void 0 ? void 0 : sortParam.order) !== null && _m !== void 0 ? _m : 'asc';
|
|
1092
|
+
const globalAllowed = (_o = globalParam === null || globalParam === void 0 ? void 0 : globalParam.value) !== null && _o !== void 0 ? _o : false;
|
|
1093
|
+
const emptySlots = (_p = emptySlotsParam === null || emptySlotsParam === void 0 ? void 0 : emptySlotsParam.value) !== null && _p !== void 0 ? _p : 'show';
|
|
1094
|
+
const summary = (_q = summaryParam === null || summaryParam === void 0 ? void 0 : summaryParam.value) !== null && _q !== void 0 ? _q : 'full';
|
|
1057
1095
|
// Handle sum properties (can be single or array)
|
|
1058
1096
|
let sumProperties = [];
|
|
1059
1097
|
if (sumParam) {
|
|
1060
1098
|
if (sumParam.properties.property) {
|
|
1061
|
-
sumProperties = [((
|
|
1099
|
+
sumProperties = [((_r = sumParam.properties.property.ref) === null || _r === void 0 ? void 0 : _r.name) || ''];
|
|
1062
1100
|
}
|
|
1063
1101
|
else if (sumParam.properties.properties) {
|
|
1064
1102
|
sumProperties = sumParam.properties.properties
|
|
@@ -1081,7 +1119,7 @@ function generateVueComponentTemplate(entry, id, document) {
|
|
|
1081
1119
|
sumMax = `context.${toString(sumMaxNode)}`;
|
|
1082
1120
|
}
|
|
1083
1121
|
}
|
|
1084
|
-
else if ((
|
|
1122
|
+
else if ((_s = sumMaxParam.values) === null || _s === void 0 ? void 0 : _s.values) {
|
|
1085
1123
|
// It's an array of ints/expressions
|
|
1086
1124
|
const maxValues = sumMaxParam.values.values.map((val) => {
|
|
1087
1125
|
if (typeof val === 'number') {
|
|
@@ -1163,7 +1201,7 @@ function generateVueComponentTemplate(entry, id, document) {
|
|
|
1163
1201
|
`.appendNewLine();
|
|
1164
1202
|
}
|
|
1165
1203
|
function generateElement(element, isTopLevel = false) {
|
|
1166
|
-
var _a, _b;
|
|
1204
|
+
var _a, _b, _c, _d;
|
|
1167
1205
|
// A layout container's `theme: { ... }` compiles to an inline `style="..."` of ACTUAL
|
|
1168
1206
|
// CSS (not `--isdl-*` vars, which would inherit and leak sizing into nested children).
|
|
1169
1207
|
// The themed style is split by who owns the geometry: WIDTH governs the flex item that
|
|
@@ -1178,12 +1216,39 @@ function generateVueComponentTemplate(entry, id, document) {
|
|
|
1178
1216
|
const cardStyle = [themeHeightToInlineStyle(themeParam), themePaintToInlineStyle(themeParam)]
|
|
1179
1217
|
.filter(s => s.length > 0).join('; ');
|
|
1180
1218
|
const cardAttr = cardStyle.length > 0 ? ` style="${cardStyle}"` : '';
|
|
1219
|
+
const sectionParams = (_b = element.params) !== null && _b !== void 0 ? _b : [];
|
|
1181
1220
|
// `hideLabel: true` on a section drops its title bar entirely (compact, unlabeled panel).
|
|
1182
|
-
const hideTitle =
|
|
1183
|
-
|
|
1221
|
+
const hideTitle = sectionParams.some((p) => isHideLabelParam(p) && p.value);
|
|
1222
|
+
// Elevation: per-section theme override, falling back to global theme elevation (default 4).
|
|
1223
|
+
const sectionElevationParam = (_c = themeParam === null || themeParam === void 0 ? void 0 : themeParam.params) === null || _c === void 0 ? void 0 : _c.find(isThemeElevationParam);
|
|
1224
|
+
const elevation = (_d = sectionElevationParam === null || sectionElevationParam === void 0 ? void 0 : sectionElevationParam.value) !== null && _d !== void 0 ? _d : getGlobalThemeElevation(entry);
|
|
1225
|
+
// Collapsible: `collapsible: true` wraps body in a toggled expand-transition.
|
|
1226
|
+
const isCollapsible = sectionParams.some((p) => isCollapsibleParam(p) && p.value);
|
|
1227
|
+
const sectionName = element.name.toLowerCase();
|
|
1228
|
+
const localizeKey = `${document.name}.${element.name}`;
|
|
1229
|
+
if (isCollapsible) {
|
|
1230
|
+
const titleBar = hideTitle
|
|
1231
|
+
? ''
|
|
1232
|
+
: `<v-card-title class="isdl-section-title" @click.stop="toggleSection('${sectionName}')" style="cursor:pointer;display:flex;align-items:center;">{{ game.i18n.localize('${localizeKey}') }}<v-icon class="ml-auto" :icon="collapsedSections['${sectionName}'] ? 'fa-solid fa-chevron-down' : 'fa-solid fa-chevron-up'"></v-icon></v-card-title>`;
|
|
1233
|
+
return expandToNode `
|
|
1234
|
+
<v-col class="section isdl-section isdl-section-${sectionName}"${colAttr}>
|
|
1235
|
+
<v-card variant="outlined" elevation="${elevation}"${cardAttr}>
|
|
1236
|
+
${titleBar}
|
|
1237
|
+
<v-expand-transition>
|
|
1238
|
+
<v-card-text v-show="!collapsedSections['${sectionName}']">
|
|
1239
|
+
<v-row dense>
|
|
1240
|
+
${joinToNode(element.body, element => generateElement(element), { appendNewLineIfNotEmpty: true })}
|
|
1241
|
+
</v-row>
|
|
1242
|
+
</v-card-text>
|
|
1243
|
+
</v-expand-transition>
|
|
1244
|
+
</v-card>
|
|
1245
|
+
</v-col>
|
|
1246
|
+
`;
|
|
1247
|
+
}
|
|
1248
|
+
const titleNode = hideTitle ? '' : `<v-card-title>{{ game.i18n.localize('${localizeKey}') }}</v-card-title>`;
|
|
1184
1249
|
return expandToNode `
|
|
1185
|
-
<v-col class="section isdl-section isdl-section-${
|
|
1186
|
-
<v-card variant="outlined" elevation="
|
|
1250
|
+
<v-col class="section isdl-section isdl-section-${sectionName}"${colAttr}>
|
|
1251
|
+
<v-card variant="outlined" elevation="${elevation}"${cardAttr}>
|
|
1187
1252
|
${titleNode}
|
|
1188
1253
|
|
|
1189
1254
|
<v-card-text>
|
|
@@ -1204,9 +1269,11 @@ function generateVueComponentTemplate(entry, id, document) {
|
|
|
1204
1269
|
const styleAttr = containerStyle.length > 0 ? ` style="${containerStyle}"` : '';
|
|
1205
1270
|
if (isRow(element)) {
|
|
1206
1271
|
return expandToNode `
|
|
1207
|
-
<v-
|
|
1208
|
-
|
|
1209
|
-
|
|
1272
|
+
<v-col cols="12"${styleAttr}>
|
|
1273
|
+
<v-row dense class="isdl-row">
|
|
1274
|
+
${joinToNode(element.body, element => generateElement(element), { appendNewLineIfNotEmpty: true })}
|
|
1275
|
+
</v-row>
|
|
1276
|
+
</v-col>
|
|
1210
1277
|
`;
|
|
1211
1278
|
}
|
|
1212
1279
|
if (isColumn(element)) {
|
|
@@ -1254,7 +1321,7 @@ function generateVueComponentTemplate(entry, id, document) {
|
|
|
1254
1321
|
// Every field branch returns an <i-...> root, so this reaches ALL field types -- no
|
|
1255
1322
|
// per-branch allowlist to drift out of sync as new field types are added.
|
|
1256
1323
|
const fieldComponent = (() => {
|
|
1257
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8;
|
|
1324
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9;
|
|
1258
1325
|
if (isRollVisualizerField(element)) {
|
|
1259
1326
|
const { formula, data } = compileVisualizerFormula(entry, id, element);
|
|
1260
1327
|
return expandToNode `
|
|
@@ -1919,6 +1986,8 @@ function generateVueComponentTemplate(entry, id, document) {
|
|
|
1919
1986
|
const primaryColor = colorParam ? `'${colorParam.value}'` : "primaryColor";
|
|
1920
1987
|
const segmentParm = element.params.find(x => isSegmentsParameter(x));
|
|
1921
1988
|
const segments = (_o = segmentParm === null || segmentParm === void 0 ? void 0 : segmentParm.segments) !== null && _o !== void 0 ? _o : 1;
|
|
1989
|
+
const emptyColorParam = element.params.find(x => isEmptyColorParam(x));
|
|
1990
|
+
const emptyColor = emptyColorParam === null || emptyColorParam === void 0 ? void 0 : emptyColorParam.value;
|
|
1922
1991
|
let isHealth = false;
|
|
1923
1992
|
let isWounds = false;
|
|
1924
1993
|
if (isResourceExp(element)) {
|
|
@@ -1934,8 +2003,9 @@ function generateVueComponentTemplate(entry, id, document) {
|
|
|
1934
2003
|
:visibility="visibilityStates['${element.name.toLowerCase()}'].value"
|
|
1935
2004
|
:editMode="editModeRef"
|
|
1936
2005
|
:primaryColor="${primaryColor}" :secondaryColor="secondaryColor" :tertiaryColor="tertiaryColor"
|
|
2006
|
+
${emptyColor != null ? `emptyColor="${emptyColor}"` : ''}
|
|
1937
2007
|
trackerStyle="${style}"
|
|
1938
|
-
icon="${icon}"
|
|
2008
|
+
icon="${icon}"
|
|
1939
2009
|
:hideMin="${hideMin}"
|
|
1940
2010
|
:disableMin="${disableMin}"
|
|
1941
2011
|
:disableValue="${disableValue}"
|
|
@@ -2064,9 +2134,9 @@ function generateVueComponentTemplate(entry, id, document) {
|
|
|
2064
2134
|
// wrapper they have no drop target. The wrapper only exists in the layout
|
|
2065
2135
|
// case (never nested inside a .tabs-container), so no double drop binding.
|
|
2066
2136
|
return expandToNode `
|
|
2067
|
-
<
|
|
2137
|
+
<v-col class="pa-1 datatable-drop-zone" cols="12" v-if="!isHidden('${element.name.toLowerCase()}')">
|
|
2068
2138
|
<${componentName} systemPath="${systemPath}" :context="context" :primaryColor="primaryColor" :secondaryColor="secondaryColor" :tertiaryColor="tertiaryColor"></${componentName}>
|
|
2069
|
-
</
|
|
2139
|
+
</v-col>
|
|
2070
2140
|
`.appendNewLine();
|
|
2071
2141
|
}
|
|
2072
2142
|
if (isInventoryField(element)) {
|
|
@@ -2094,21 +2164,21 @@ function generateVueComponentTemplate(entry, id, document) {
|
|
|
2094
2164
|
const rows = rowsParam === null || rowsParam === void 0 ? void 0 : rowsParam.value;
|
|
2095
2165
|
const columns = columnsParam === null || columnsParam === void 0 ? void 0 : columnsParam.value;
|
|
2096
2166
|
const slotSize = slotSizeParam ? parseInt(slotSizeParam.value.replace('px', '')) : 60;
|
|
2097
|
-
const documentType = (_u = element.
|
|
2098
|
-
const quantityField = (
|
|
2099
|
-
const moneyField = (
|
|
2100
|
-
const moneyFieldLabel = moneyField ? `${document.name}.${(
|
|
2101
|
-
const moneyFieldIcon = moneyField ? (
|
|
2102
|
-
const sortProperty = (
|
|
2103
|
-
const sortOrder = (
|
|
2104
|
-
const globalAllowed = (
|
|
2105
|
-
const emptySlots = (
|
|
2106
|
-
const summary = (
|
|
2167
|
+
const documentType = (_v = (_u = element.documents[0]) === null || _u === void 0 ? void 0 : _u.ref) === null || _v === void 0 ? void 0 : _v.name.toLowerCase();
|
|
2168
|
+
const quantityField = (_w = quantityParam === null || quantityParam === void 0 ? void 0 : quantityParam.field.ref) === null || _w === void 0 ? void 0 : _w.name.toLowerCase();
|
|
2169
|
+
const moneyField = (_x = moneyParam === null || moneyParam === void 0 ? void 0 : moneyParam.field.ref) === null || _x === void 0 ? void 0 : _x.name.toLowerCase();
|
|
2170
|
+
const moneyFieldLabel = moneyField ? `${document.name}.${(_z = (_y = moneyParam === null || moneyParam === void 0 ? void 0 : moneyParam.field) === null || _y === void 0 ? void 0 : _y.ref) === null || _z === void 0 ? void 0 : _z.name}` : undefined;
|
|
2171
|
+
const moneyFieldIcon = moneyField ? (_2 = (_1 = (_0 = moneyParam === null || moneyParam === void 0 ? void 0 : moneyParam.field) === null || _0 === void 0 ? void 0 : _0.ref) === null || _1 === void 0 ? void 0 : _1.params.find(isIconParam)) === null || _2 === void 0 ? void 0 : _2.value : undefined;
|
|
2172
|
+
const sortProperty = (_3 = sortParam === null || sortParam === void 0 ? void 0 : sortParam.property.ref) === null || _3 === void 0 ? void 0 : _3.name;
|
|
2173
|
+
const sortOrder = (_4 = sortParam === null || sortParam === void 0 ? void 0 : sortParam.order) !== null && _4 !== void 0 ? _4 : 'asc';
|
|
2174
|
+
const globalAllowed = (_5 = globalParam === null || globalParam === void 0 ? void 0 : globalParam.value) !== null && _5 !== void 0 ? _5 : false;
|
|
2175
|
+
const emptySlots = (_6 = emptySlotsParam === null || emptySlotsParam === void 0 ? void 0 : emptySlotsParam.value) !== null && _6 !== void 0 ? _6 : 'show';
|
|
2176
|
+
const summary = (_7 = summaryParam === null || summaryParam === void 0 ? void 0 : summaryParam.value) !== null && _7 !== void 0 ? _7 : 'full';
|
|
2107
2177
|
// Handle sum properties (can be single or array)
|
|
2108
2178
|
let sumProperties = [];
|
|
2109
2179
|
if (sumParam) {
|
|
2110
2180
|
if (sumParam.properties.property) {
|
|
2111
|
-
sumProperties = [((
|
|
2181
|
+
sumProperties = [((_8 = sumParam.properties.property.ref) === null || _8 === void 0 ? void 0 : _8.name) || ''];
|
|
2112
2182
|
}
|
|
2113
2183
|
else if (sumParam.properties.properties) {
|
|
2114
2184
|
sumProperties = sumParam.properties.properties
|
|
@@ -2131,7 +2201,7 @@ function generateVueComponentTemplate(entry, id, document) {
|
|
|
2131
2201
|
sumMax = `context.${toString(sumMaxNode)}`;
|
|
2132
2202
|
}
|
|
2133
2203
|
}
|
|
2134
|
-
else if ((
|
|
2204
|
+
else if ((_9 = sumMaxParam.values) === null || _9 === void 0 ? void 0 : _9.values) {
|
|
2135
2205
|
// It's an array of ints/expressions
|
|
2136
2206
|
const maxValues = sumMaxParam.values.values.map((val) => {
|
|
2137
2207
|
if (typeof val === 'number') {
|
|
@@ -2197,13 +2267,96 @@ function generateVueComponentTemplate(entry, id, document) {
|
|
|
2197
2267
|
<v-alert text="Unknown Element" type="warning" density="compact" class="ga-2 ma-1" variant="outlined"></v-alert>
|
|
2198
2268
|
`;
|
|
2199
2269
|
}
|
|
2200
|
-
|
|
2201
|
-
|
|
2202
|
-
|
|
2203
|
-
|
|
2270
|
+
function getFieldTypeClass(element) {
|
|
2271
|
+
if (isNumberExp(element))
|
|
2272
|
+
return 'isdl-number';
|
|
2273
|
+
if (isStringExp(element))
|
|
2274
|
+
return 'isdl-string';
|
|
2275
|
+
if (isHtmlExp(element))
|
|
2276
|
+
return 'isdl-html';
|
|
2277
|
+
if (isBooleanExp(element))
|
|
2278
|
+
return 'isdl-boolean';
|
|
2279
|
+
if (isAttributeExp(element))
|
|
2280
|
+
return 'isdl-attribute';
|
|
2281
|
+
if (isTrackerExp(element))
|
|
2282
|
+
return 'isdl-tracker';
|
|
2283
|
+
if (isResourceExp(element))
|
|
2284
|
+
return 'isdl-resource';
|
|
2285
|
+
if (isImageField(element))
|
|
2286
|
+
return 'isdl-image';
|
|
2287
|
+
if (isMoneyField(element))
|
|
2288
|
+
return 'isdl-money';
|
|
2289
|
+
if (isStringChoiceField(element))
|
|
2290
|
+
return 'isdl-string-choice';
|
|
2291
|
+
if (isDamageTypeChoiceField(element))
|
|
2292
|
+
return 'isdl-damage-type-choice';
|
|
2293
|
+
if (isStringChoicesField(element))
|
|
2294
|
+
return 'isdl-string-choices';
|
|
2295
|
+
if (isDamageTrackExp(element))
|
|
2296
|
+
return 'isdl-damage-track';
|
|
2297
|
+
if (isDamageBonusesField(element))
|
|
2298
|
+
return 'isdl-bonuses';
|
|
2299
|
+
if (isDamageResistancesField(element))
|
|
2300
|
+
return 'isdl-resistances';
|
|
2301
|
+
if (isRollVisualizerField(element))
|
|
2302
|
+
return 'isdl-roll-visualizer';
|
|
2303
|
+
if (isMeasuredTemplateField(element))
|
|
2304
|
+
return 'isdl-measured-template';
|
|
2305
|
+
if (isMacroField(element))
|
|
2306
|
+
return 'isdl-macro';
|
|
2307
|
+
if (isPaperDollExp(element))
|
|
2308
|
+
return 'isdl-paperdoll';
|
|
2309
|
+
if (isDieField(element))
|
|
2310
|
+
return 'isdl-die';
|
|
2311
|
+
if (isDiceField(element))
|
|
2312
|
+
return 'isdl-dice';
|
|
2313
|
+
if (isDateExp(element))
|
|
2314
|
+
return 'isdl-date';
|
|
2315
|
+
if (isTimeExp(element))
|
|
2316
|
+
return 'isdl-time';
|
|
2317
|
+
if (isDateTimeExp(element))
|
|
2318
|
+
return 'isdl-datetime';
|
|
2319
|
+
if (isSingleDocumentExp(element))
|
|
2320
|
+
return 'isdl-document-link';
|
|
2321
|
+
if (isDocumentChoiceExp(element))
|
|
2322
|
+
return 'isdl-document-choice';
|
|
2323
|
+
if (isDocumentChoicesExp(element))
|
|
2324
|
+
return 'isdl-document-choices';
|
|
2325
|
+
if (isTableField(element))
|
|
2326
|
+
return 'isdl-table';
|
|
2327
|
+
if (isInventoryField(element))
|
|
2328
|
+
return 'isdl-inventory';
|
|
2329
|
+
if (isPinnedField(element))
|
|
2330
|
+
return 'isdl-pinned';
|
|
2331
|
+
if (isParentPropertyRefExp(element))
|
|
2332
|
+
return 'isdl-parent-property-reference';
|
|
2333
|
+
if (isSelfPropertyRefExp(element))
|
|
2334
|
+
return 'isdl-self-property-reference';
|
|
2335
|
+
return '';
|
|
2336
|
+
}
|
|
2337
|
+
function getVisibilityClass(element) {
|
|
2338
|
+
var _a;
|
|
2339
|
+
const standardParams = (_a = element.params) !== null && _a !== void 0 ? _a : [];
|
|
2340
|
+
const visibilityParam = standardParams.find(p => isVisibilityParam(p));
|
|
2341
|
+
if (element.modifier != null && !visibilityParam)
|
|
2342
|
+
return `isdl-visibility-${element.modifier}`;
|
|
2343
|
+
if (visibilityParam) {
|
|
2344
|
+
if (isMethodBlock(visibilityParam.visibility))
|
|
2345
|
+
return 'isdl-visibility-dynamic';
|
|
2346
|
+
return `isdl-visibility-${visibilityParam.visibility}`;
|
|
2347
|
+
}
|
|
2348
|
+
return 'isdl-visibility-default';
|
|
2349
|
+
}
|
|
2350
|
+
// Stamp field type, name, and declared visibility classes onto a rendered field's <i-...>
|
|
2351
|
+
// component root (the element that also carries single/double-wide via attribute fallthrough).
|
|
2352
|
+
// `.isdl-field` is the shared selector theme tokens target; `.isdl-<type>` is the type hook;
|
|
2353
|
+
// `.isdl-field-<name>` is the per-field hook; `.isdl-visibility-<value>` reflects declared
|
|
2354
|
+
// visibility for CSS authoring (runtime show/hide is handled by v-if / :disabled separately).
|
|
2204
2355
|
function injectFieldMarker(node, element) {
|
|
2205
2356
|
const html = toString(node);
|
|
2206
|
-
const
|
|
2357
|
+
const typeClass = getFieldTypeClass(element);
|
|
2358
|
+
const visibilityClass = getVisibilityClass(element);
|
|
2359
|
+
const marker = `isdl-field${typeClass ? ` ${typeClass}` : ''} isdl-field-${element.name.toLowerCase()} ${visibilityClass}`;
|
|
2207
2360
|
// Stamp the marker onto the FIRST element tag of the rendered field, whatever its name --
|
|
2208
2361
|
// <i-number>, a datatable <div class="datatable-drop-zone">, a <DocumentChoice> component,
|
|
2209
2362
|
// etc. Insert right after the tag NAME so attribute values (which can contain '>') are never
|