@pdfme/schemas 4.1.1 → 4.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/src/constants.js +1 -1
- package/dist/cjs/src/constants.js.map +1 -1
- package/dist/cjs/src/index.js +11 -9
- package/dist/cjs/src/index.js.map +1 -1
- package/dist/cjs/src/multiVariableText/helper.js +19 -0
- package/dist/cjs/src/multiVariableText/helper.js.map +1 -0
- package/dist/cjs/src/multiVariableText/index.js +8 -0
- package/dist/cjs/src/multiVariableText/index.js.map +1 -0
- package/dist/cjs/src/multiVariableText/pdfRender.js +16 -0
- package/dist/cjs/src/multiVariableText/pdfRender.js.map +1 -0
- package/dist/cjs/src/multiVariableText/propPanel.js +128 -0
- package/dist/cjs/src/multiVariableText/propPanel.js.map +1 -0
- package/dist/cjs/src/multiVariableText/types.js +3 -0
- package/dist/cjs/src/multiVariableText/types.js.map +1 -0
- package/dist/cjs/src/multiVariableText/uiRender.js +133 -0
- package/dist/cjs/src/multiVariableText/uiRender.js.map +1 -0
- package/dist/cjs/src/text/uiRender.js +122 -103
- package/dist/cjs/src/text/uiRender.js.map +1 -1
- package/dist/esm/src/constants.js +1 -1
- package/dist/esm/src/constants.js.map +1 -1
- package/dist/esm/src/index.js +2 -1
- package/dist/esm/src/index.js.map +1 -1
- package/dist/esm/src/multiVariableText/helper.js +15 -0
- package/dist/esm/src/multiVariableText/helper.js.map +1 -0
- package/dist/esm/src/multiVariableText/index.js +6 -0
- package/dist/esm/src/multiVariableText/index.js.map +1 -0
- package/dist/esm/src/multiVariableText/pdfRender.js +12 -0
- package/dist/esm/src/multiVariableText/pdfRender.js.map +1 -0
- package/dist/esm/src/multiVariableText/propPanel.js +125 -0
- package/dist/esm/src/multiVariableText/propPanel.js.map +1 -0
- package/dist/esm/src/multiVariableText/types.js +2 -0
- package/dist/esm/src/multiVariableText/types.js.map +1 -0
- package/dist/esm/src/multiVariableText/uiRender.js +129 -0
- package/dist/esm/src/multiVariableText/uiRender.js.map +1 -0
- package/dist/esm/src/text/uiRender.js +118 -101
- package/dist/esm/src/text/uiRender.js.map +1 -1
- package/dist/types/src/constants.d.ts +1 -1
- package/dist/types/src/index.d.ts +2 -1
- package/dist/types/src/multiVariableText/helper.d.ts +1 -0
- package/dist/types/src/multiVariableText/index.d.ts +4 -0
- package/dist/types/src/multiVariableText/pdfRender.d.ts +3 -0
- package/dist/types/src/multiVariableText/propPanel.d.ts +3 -0
- package/dist/types/src/multiVariableText/types.d.ts +5 -0
- package/dist/types/src/multiVariableText/uiRender.d.ts +3 -0
- package/dist/types/src/shapes/rectAndEllipse.d.ts +2 -0
- package/dist/types/src/text/uiRender.d.ts +6 -0
- package/package.json +1 -1
- package/src/constants.ts +1 -1
- package/src/index.ts +2 -0
- package/src/multiVariableText/helper.ts +18 -0
- package/src/multiVariableText/index.ts +8 -0
- package/src/multiVariableText/pdfRender.ts +16 -0
- package/src/multiVariableText/propPanel.ts +139 -0
- package/src/multiVariableText/types.ts +6 -0
- package/src/multiVariableText/uiRender.ts +161 -0
- package/src/text/uiRender.ts +150 -118
@@ -2,5 +2,5 @@
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
3
|
exports.HEX_COLOR_PATTERN = exports.DEFAULT_OPACITY = void 0;
|
4
4
|
exports.DEFAULT_OPACITY = 1;
|
5
|
-
exports.HEX_COLOR_PATTERN = '^#(?:[A-Fa-f0-9]{
|
5
|
+
exports.HEX_COLOR_PATTERN = '^#(?:[A-Fa-f0-9]{6})$';
|
6
6
|
//# sourceMappingURL=constants.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,eAAe,GAAG,CAAC,CAAC;AACpB,QAAA,iBAAiB,GAAG,
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,eAAe,GAAG,CAAC,CAAC;AACpB,QAAA,iBAAiB,GAAG,uBAAuB,CAAC"}
|
package/dist/cjs/src/index.js
CHANGED
@@ -26,21 +26,23 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
26
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
27
27
|
};
|
28
28
|
Object.defineProperty(exports, "__esModule", { value: true });
|
29
|
-
exports.rotatePoint = exports.convertForPdfLayoutProps = exports.builtInPlugins = exports.ellipse = exports.rectangle = exports.getDynamicHeightForTable = exports.modifyTemplateForTable = exports.tableBeta = exports.line = exports.barcodes = exports.readOnlySvg = exports.svg = exports.readOnlyImage = exports.image = exports.readOnlyText = exports.text = void 0;
|
30
|
-
const index_js_1 =
|
31
|
-
exports.
|
32
|
-
|
29
|
+
exports.rotatePoint = exports.convertForPdfLayoutProps = exports.builtInPlugins = exports.ellipse = exports.rectangle = exports.getDynamicHeightForTable = exports.modifyTemplateForTable = exports.tableBeta = exports.line = exports.barcodes = exports.readOnlySvg = exports.svg = exports.readOnlyImage = exports.image = exports.readOnlyText = exports.text = exports.multiVariableText = void 0;
|
30
|
+
const index_js_1 = __importDefault(require("./multiVariableText/index.js"));
|
31
|
+
exports.multiVariableText = index_js_1.default;
|
32
|
+
const index_js_2 = __importStar(require("./text/index.js"));
|
33
|
+
exports.text = index_js_2.default;
|
34
|
+
Object.defineProperty(exports, "readOnlyText", { enumerable: true, get: function () { return index_js_2.readOnlyText; } });
|
33
35
|
const image_js_1 = __importStar(require("./graphics/image.js"));
|
34
36
|
exports.image = image_js_1.default;
|
35
37
|
Object.defineProperty(exports, "readOnlyImage", { enumerable: true, get: function () { return image_js_1.readOnlyImage; } });
|
36
38
|
const svg_js_1 = __importStar(require("./graphics/svg.js"));
|
37
39
|
exports.svg = svg_js_1.default;
|
38
40
|
Object.defineProperty(exports, "readOnlySvg", { enumerable: true, get: function () { return svg_js_1.readOnlySvg; } });
|
39
|
-
const
|
40
|
-
exports.barcodes =
|
41
|
+
const index_js_3 = __importDefault(require("./barcodes/index.js"));
|
42
|
+
exports.barcodes = index_js_3.default;
|
41
43
|
const line_js_1 = __importDefault(require("./shapes/line.js"));
|
42
44
|
exports.line = line_js_1.default;
|
43
|
-
const
|
45
|
+
const index_js_4 = __importDefault(require("./tables/index.js"));
|
44
46
|
const dynamicTemplate_js_1 = require("./tables/dynamicTemplate.js");
|
45
47
|
Object.defineProperty(exports, "modifyTemplateForTable", { enumerable: true, get: function () { return dynamicTemplate_js_1.modifyTemplateForTable; } });
|
46
48
|
Object.defineProperty(exports, "getDynamicHeightForTable", { enumerable: true, get: function () { return dynamicTemplate_js_1.getDynamicHeightForTable; } });
|
@@ -50,8 +52,8 @@ Object.defineProperty(exports, "ellipse", { enumerable: true, get: function () {
|
|
50
52
|
const utils_js_1 = require("./utils.js");
|
51
53
|
Object.defineProperty(exports, "convertForPdfLayoutProps", { enumerable: true, get: function () { return utils_js_1.convertForPdfLayoutProps; } });
|
52
54
|
Object.defineProperty(exports, "rotatePoint", { enumerable: true, get: function () { return utils_js_1.rotatePoint; } });
|
53
|
-
const tableBeta =
|
55
|
+
const tableBeta = index_js_4.default;
|
54
56
|
exports.tableBeta = tableBeta;
|
55
|
-
const builtInPlugins = { Text:
|
57
|
+
const builtInPlugins = { Text: index_js_2.default };
|
56
58
|
exports.builtInPlugins = builtInPlugins;
|
57
59
|
//# sourceMappingURL=index.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,4DAAqD;
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,4EAA4D;AAgB1D,4BAhBK,kBAAiB,CAgBL;AAfnB,4DAAqD;AAgBnD,eAhBK,kBAAI,CAgBL;AACJ,6FAjBa,uBAAY,OAiBb;AAhBd,gEAA2D;AAiBzD,gBAjBK,kBAAK,CAiBL;AACL,8FAlBc,wBAAa,OAkBd;AAjBf,4DAAqD;AAkBnD,cAlBK,gBAAG,CAkBL;AACH,4FAnBY,oBAAW,OAmBZ;AAlBb,mEAA2C;AAmBzC,mBAnBK,kBAAQ,CAmBL;AAlBV,+DAAoC;AAmBlC,eAnBK,iBAAI,CAmBL;AAlBN,iEAAsC;AACtC,oEAA+F;AAmB7F,uGAnBO,2CAAsB,OAmBP;AACtB,yGApB+B,6CAAwB,OAoB/B;AAnB1B,kEAAgE;AAoB9D,0FApBO,6BAAS,OAoBP;AACT,wFArBkB,2BAAO,OAqBlB;AApBT,yCAAmE;AAsBjE,yGAtBO,mCAAwB,OAsBP;AACxB,4FAvBiC,sBAAW,OAuBjC;AArBb,MAAM,SAAS,GAAG,kBAAK,CAAC;AActB,8BAAS;AAZX,MAAM,cAAc,GAAG,EAAE,IAAI,EAAE,kBAAI,EAAE,CAAC;AAiBpC,wCAAc"}
|
@@ -0,0 +1,19 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.substituteVariables = void 0;
|
4
|
+
const substituteVariables = (text, variablesIn) => {
|
5
|
+
if (!text || !variablesIn) {
|
6
|
+
return text;
|
7
|
+
}
|
8
|
+
let substitutedText = text;
|
9
|
+
const variables = (typeof variablesIn === "string") ? JSON.parse(variablesIn) || {} : variablesIn;
|
10
|
+
Object.keys(variables).forEach((variableName) => {
|
11
|
+
// handle special characters in variable name
|
12
|
+
const variableForRegex = variableName.replace(/[/\-\\^$*+?.()|[\]{}]/g, '\\$&');
|
13
|
+
const regex = new RegExp('{' + variableForRegex + '}', 'g');
|
14
|
+
substitutedText = substitutedText.replace(regex, variables[variableName]);
|
15
|
+
});
|
16
|
+
return substitutedText;
|
17
|
+
};
|
18
|
+
exports.substituteVariables = substituteVariables;
|
19
|
+
//# sourceMappingURL=helper.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"helper.js","sourceRoot":"","sources":["../../../../src/multiVariableText/helper.ts"],"names":[],"mappings":";;;AAAO,MAAM,mBAAmB,GAAG,CAAC,IAAY,EAAE,WAA4C,EAAU,EAAE;IACxG,IAAI,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE;QACzB,OAAO,IAAI,CAAC;KACb;IAED,IAAI,eAAe,GAAG,IAAI,CAAC;IAE3B,MAAM,SAAS,GAA2B,CAAC,OAAO,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC;IAE1H,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,YAAY,EAAE,EAAE;QAC9C,6CAA6C;QAC7C,MAAM,gBAAgB,GAAG,YAAY,CAAC,OAAO,CAAC,wBAAwB,EAAE,MAAM,CAAC,CAAC;QAChF,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,GAAG,GAAG,gBAAgB,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC;QAC5D,eAAe,GAAG,eAAe,CAAC,OAAO,CAAC,KAAK,EAAE,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC;IAC5E,CAAC,CAAC,CAAC;IAEH,OAAO,eAAe,CAAC;AACzB,CAAC,CAAC;AAjBW,QAAA,mBAAmB,uBAiB9B"}
|
@@ -0,0 +1,8 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
const pdfRender_js_1 = require("./pdfRender.js");
|
4
|
+
const propPanel_js_1 = require("./propPanel.js");
|
5
|
+
const uiRender_js_1 = require("./uiRender.js");
|
6
|
+
const schema = { pdf: pdfRender_js_1.pdfRender, ui: uiRender_js_1.uiRender, propPanel: propPanel_js_1.propPanel, uninterruptedEditMode: true };
|
7
|
+
exports.default = schema;
|
8
|
+
//# sourceMappingURL=index.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/multiVariableText/index.ts"],"names":[],"mappings":";;AACA,iDAA2C;AAC3C,iDAA2C;AAC3C,+CAAyC;AAGzC,MAAM,MAAM,GAAoC,EAAE,GAAG,EAAE,wBAAS,EAAE,EAAE,EAAE,sBAAQ,EAAE,SAAS,EAAT,wBAAS,EAAE,qBAAqB,EAAE,IAAI,EAAE,CAAC;AACzH,kBAAe,MAAM,CAAC"}
|
@@ -0,0 +1,16 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.pdfRender = void 0;
|
4
|
+
const pdfRender_1 = require("../text/pdfRender");
|
5
|
+
const helper_1 = require("./helper");
|
6
|
+
const pdfRender = async (arg) => {
|
7
|
+
const { value, schema, ...rest } = arg;
|
8
|
+
const renderArgs = {
|
9
|
+
value: (0, helper_1.substituteVariables)(schema.text || '', value),
|
10
|
+
schema,
|
11
|
+
...rest,
|
12
|
+
};
|
13
|
+
await (0, pdfRender_1.pdfRender)(renderArgs);
|
14
|
+
};
|
15
|
+
exports.pdfRender = pdfRender;
|
16
|
+
//# sourceMappingURL=pdfRender.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"pdfRender.js","sourceRoot":"","sources":["../../../../src/multiVariableText/pdfRender.ts"],"names":[],"mappings":";;;AAEA,iDAAiE;AACjE,qCAA+C;AAExC,MAAM,SAAS,GAAG,KAAK,EAAE,GAA4C,EAAE,EAAE;IAC9E,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,GAAG,CAAC;IAEvC,MAAM,UAAU,GAAG;QACjB,KAAK,EAAG,IAAA,4BAAmB,EAAC,MAAM,CAAC,IAAI,IAAI,EAAE,EAAE,KAAK,CAAC;QACrD,MAAM;QACN,GAAG,IAAI;KACR,CAAC;IAEF,MAAM,IAAA,qBAAe,EAAC,UAAU,CAAC,CAAC;AACpC,CAAC,CAAC;AAVW,QAAA,SAAS,aAUpB"}
|
@@ -0,0 +1,128 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.propPanel = void 0;
|
4
|
+
const propPanel_1 = require("../text/propPanel");
|
5
|
+
const mapDynamicVariables = (props) => {
|
6
|
+
const { rootElement, changeSchemas, activeSchema, i18n, options } = props;
|
7
|
+
const mvtSchema = activeSchema;
|
8
|
+
const text = mvtSchema.text || '';
|
9
|
+
const variables = JSON.parse(mvtSchema.content) || {};
|
10
|
+
const variablesChanged = updateVariablesFromText(text, variables);
|
11
|
+
const varNames = Object.keys(variables);
|
12
|
+
if (variablesChanged) {
|
13
|
+
changeSchemas([
|
14
|
+
{ key: 'content', value: JSON.stringify(variables), schemaId: activeSchema.id },
|
15
|
+
{ key: 'variables', value: varNames, schemaId: activeSchema.id }
|
16
|
+
]);
|
17
|
+
}
|
18
|
+
const placeholderRowEl = document.getElementById('placeholder-dynamic-var')?.closest('.ant-form-item');
|
19
|
+
if (!placeholderRowEl) {
|
20
|
+
throw new Error('Failed to find Ant form placeholder row to create dynamic variables inputs.');
|
21
|
+
}
|
22
|
+
placeholderRowEl.style.display = 'none';
|
23
|
+
// The wrapping form element has a display:flex which limits the width of the form fields, removing.
|
24
|
+
rootElement.parentElement.style.display = 'block';
|
25
|
+
if (varNames.length > 0) {
|
26
|
+
for (let variableName of varNames) {
|
27
|
+
const varRow = placeholderRowEl.cloneNode(true);
|
28
|
+
const textarea = varRow.querySelector('textarea');
|
29
|
+
textarea.id = 'dynamic-var-' + variableName;
|
30
|
+
textarea.value = variables[variableName];
|
31
|
+
textarea.addEventListener('change', (e) => {
|
32
|
+
variables[variableName] = e.target.value;
|
33
|
+
changeSchemas([{ key: 'content', value: JSON.stringify(variables), schemaId: activeSchema.id }]);
|
34
|
+
});
|
35
|
+
const label = varRow.querySelector('label');
|
36
|
+
label.innerText = variableName;
|
37
|
+
varRow.style.display = 'block';
|
38
|
+
rootElement.appendChild(varRow);
|
39
|
+
}
|
40
|
+
}
|
41
|
+
else {
|
42
|
+
const para = document.createElement('p');
|
43
|
+
para.innerHTML = i18n('schemas.mvt.typingInstructions')
|
44
|
+
+ ` <code style="color:${options?.theme?.token?.colorPrimary || "#168fe3"}; font-weight:bold;">{`
|
45
|
+
+ i18n('schemas.mvt.sampleField')
|
46
|
+
+ '}</code>';
|
47
|
+
rootElement.appendChild(para);
|
48
|
+
}
|
49
|
+
};
|
50
|
+
exports.propPanel = {
|
51
|
+
schema: (propPanelProps) => {
|
52
|
+
if (typeof propPanel_1.propPanel.schema !== 'function') {
|
53
|
+
throw Error('Oops, is text schema no longer a function?');
|
54
|
+
}
|
55
|
+
return {
|
56
|
+
...propPanel_1.propPanel.schema(propPanelProps),
|
57
|
+
'-------': { type: 'void', widget: 'Divider' },
|
58
|
+
dynamicVarContainer: {
|
59
|
+
title: propPanelProps.i18n('schemas.mvt.variablesSampleData'),
|
60
|
+
type: 'string',
|
61
|
+
widget: 'Card',
|
62
|
+
span: 24,
|
63
|
+
properties: {
|
64
|
+
dynamicVariables: {
|
65
|
+
type: 'object',
|
66
|
+
widget: 'mapDynamicVariables',
|
67
|
+
bind: false,
|
68
|
+
span: 24
|
69
|
+
},
|
70
|
+
placeholderDynamicVar: {
|
71
|
+
title: 'Placeholder Dynamic Variable',
|
72
|
+
type: 'string',
|
73
|
+
format: 'textarea',
|
74
|
+
props: {
|
75
|
+
id: 'placeholder-dynamic-var',
|
76
|
+
autoSize: {
|
77
|
+
minRows: 2,
|
78
|
+
maxRows: 5,
|
79
|
+
},
|
80
|
+
},
|
81
|
+
span: 24,
|
82
|
+
},
|
83
|
+
}
|
84
|
+
},
|
85
|
+
};
|
86
|
+
},
|
87
|
+
widgets: { ...propPanel_1.propPanel.widgets, mapDynamicVariables },
|
88
|
+
defaultSchema: {
|
89
|
+
...propPanel_1.propPanel.defaultSchema,
|
90
|
+
type: 'multiVariableText',
|
91
|
+
icon: '<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-type"><polyline points="4 7 4 4 20 4 20 7"/><line x1="9" x2="15" y1="20" y2="20"/><line x1="12" x2="12" y1="4" y2="20"/></svg>',
|
92
|
+
text: 'Type something...',
|
93
|
+
content: '{}',
|
94
|
+
variables: [],
|
95
|
+
},
|
96
|
+
};
|
97
|
+
const updateVariablesFromText = (text, variables) => {
|
98
|
+
const regex = /\{([^{}]+)}/g;
|
99
|
+
const matches = text.match(regex);
|
100
|
+
let changed = false;
|
101
|
+
if (matches) {
|
102
|
+
// Add any new variables
|
103
|
+
for (const match of matches) {
|
104
|
+
const variableName = match.replace('{', '').replace('}', '');
|
105
|
+
if (!variables[variableName]) {
|
106
|
+
// NOTE: We upper case the variable name as the default value
|
107
|
+
variables[variableName] = variableName.toUpperCase();
|
108
|
+
changed = true;
|
109
|
+
}
|
110
|
+
}
|
111
|
+
// Remove any that no longer exist
|
112
|
+
Object.keys(variables).forEach((variableName) => {
|
113
|
+
if (!matches.includes('{' + variableName + '}')) {
|
114
|
+
delete variables[variableName];
|
115
|
+
changed = true;
|
116
|
+
}
|
117
|
+
});
|
118
|
+
}
|
119
|
+
else {
|
120
|
+
// No matches at all, so clear all variables
|
121
|
+
Object.keys(variables).forEach((variableName) => {
|
122
|
+
delete variables[variableName];
|
123
|
+
changed = true;
|
124
|
+
});
|
125
|
+
}
|
126
|
+
return changed;
|
127
|
+
};
|
128
|
+
//# sourceMappingURL=propPanel.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"propPanel.js","sourceRoot":"","sources":["../../../../src/multiVariableText/propPanel.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/multiVariableText/types.ts"],"names":[],"mappings":""}
|
@@ -0,0 +1,133 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.uiRender = void 0;
|
4
|
+
const uiRender_1 = require("../text/uiRender");
|
5
|
+
const utils_1 = require("../utils");
|
6
|
+
const helper_1 = require("./helper");
|
7
|
+
const uiRender = async (arg) => {
|
8
|
+
const { value, schema, rootElement, mode, onChange, ...rest } = arg;
|
9
|
+
let text = schema.text;
|
10
|
+
let numVariables = schema.variables.length;
|
11
|
+
if (mode === 'form' && numVariables > 0) {
|
12
|
+
await formUiRender(arg);
|
13
|
+
return;
|
14
|
+
}
|
15
|
+
await (0, uiRender_1.uiRender)({
|
16
|
+
value: (0, utils_1.isEditable)(mode, schema) ? text : (0, helper_1.substituteVariables)(text, value),
|
17
|
+
schema,
|
18
|
+
mode: mode == 'form' ? 'viewer' : mode,
|
19
|
+
rootElement,
|
20
|
+
onChange: (arg) => {
|
21
|
+
if (!Array.isArray(arg)) {
|
22
|
+
onChange && onChange({ key: 'text', value: arg.value });
|
23
|
+
}
|
24
|
+
else {
|
25
|
+
throw new Error('onChange is not an array, the parent text plugin has changed...');
|
26
|
+
}
|
27
|
+
},
|
28
|
+
...rest,
|
29
|
+
});
|
30
|
+
const textBlock = rootElement.querySelector('#text-' + schema.id);
|
31
|
+
if (!textBlock) {
|
32
|
+
throw new Error('Text block not found. Ensure the text block has an id of "text-" + schema.id');
|
33
|
+
}
|
34
|
+
if (mode === 'designer') {
|
35
|
+
textBlock.addEventListener('keyup', (event) => {
|
36
|
+
text = textBlock.textContent || '';
|
37
|
+
if (keyPressShouldBeChecked(event)) {
|
38
|
+
const newNumVariables = countUniqueVariableNames(text);
|
39
|
+
if (numVariables !== newNumVariables) {
|
40
|
+
// If variables were modified during this keypress, we trigger a change
|
41
|
+
if (onChange) {
|
42
|
+
onChange({ key: 'text', value: text });
|
43
|
+
}
|
44
|
+
numVariables = newNumVariables;
|
45
|
+
}
|
46
|
+
}
|
47
|
+
});
|
48
|
+
}
|
49
|
+
};
|
50
|
+
exports.uiRender = uiRender;
|
51
|
+
const formUiRender = async (arg) => {
|
52
|
+
const { value, schema, rootElement, onChange, stopEditing, theme, } = arg;
|
53
|
+
const rawText = schema.text;
|
54
|
+
if (rootElement.parentElement) {
|
55
|
+
// remove the outline for the whole schema, we'll apply outlines on each individual variable field instead
|
56
|
+
rootElement.parentElement.style.outline = '';
|
57
|
+
}
|
58
|
+
const variables = JSON.parse(value) || {};
|
59
|
+
const variableIndices = getVariableIndices(rawText);
|
60
|
+
const substitutedText = (0, helper_1.substituteVariables)(rawText, variables);
|
61
|
+
const textBlock = await (0, uiRender_1.buildStyledTextContainer)(arg, substitutedText);
|
62
|
+
// Construct content-editable spans for each variable within the string
|
63
|
+
let inVarString = false;
|
64
|
+
for (let i = 0; i < rawText.length; i++) {
|
65
|
+
if (variableIndices[i]) {
|
66
|
+
inVarString = true;
|
67
|
+
let span = document.createElement('span');
|
68
|
+
span.style.outline = `${theme.colorPrimary} dashed 1px`;
|
69
|
+
(0, uiRender_1.makeElementPlainTextContentEditable)(span);
|
70
|
+
span.textContent = variables[variableIndices[i]];
|
71
|
+
span.addEventListener('blur', (e) => {
|
72
|
+
const newValue = e.target.innerText;
|
73
|
+
if (newValue !== variables[variableIndices[i]]) {
|
74
|
+
variables[variableIndices[i]] = newValue;
|
75
|
+
onChange && onChange({ key: 'content', value: JSON.stringify(variables) });
|
76
|
+
stopEditing && stopEditing();
|
77
|
+
}
|
78
|
+
});
|
79
|
+
textBlock.appendChild(span);
|
80
|
+
}
|
81
|
+
else if (inVarString) {
|
82
|
+
if (rawText[i] === '}') {
|
83
|
+
inVarString = false;
|
84
|
+
}
|
85
|
+
}
|
86
|
+
else {
|
87
|
+
let span = document.createElement('span');
|
88
|
+
span.style.letterSpacing = rawText.length === i + 1 ? '0' : 'inherit';
|
89
|
+
span.textContent = rawText[i];
|
90
|
+
textBlock.appendChild(span);
|
91
|
+
}
|
92
|
+
}
|
93
|
+
};
|
94
|
+
const getVariableIndices = (content) => {
|
95
|
+
const regex = /\{([^}]+)}/g;
|
96
|
+
const indices = [];
|
97
|
+
let match;
|
98
|
+
while ((match = regex.exec(content)) !== null) {
|
99
|
+
indices[match.index] = match[1];
|
100
|
+
}
|
101
|
+
return indices;
|
102
|
+
};
|
103
|
+
const countUniqueVariableNames = (content) => {
|
104
|
+
const regex = /\{([^}]+)}/g;
|
105
|
+
const uniqueMatchesSet = new Set();
|
106
|
+
let match;
|
107
|
+
while ((match = regex.exec(content)) !== null) {
|
108
|
+
uniqueMatchesSet.add(match[1]);
|
109
|
+
}
|
110
|
+
return uniqueMatchesSet.size;
|
111
|
+
};
|
112
|
+
/**
|
113
|
+
* An optimisation to try to minimise jank while typing.
|
114
|
+
* Only check whether variables were modified based on certain key presses.
|
115
|
+
* Regex would otherwise be performed on every key press (which isn't terrible, but this code helps).
|
116
|
+
*/
|
117
|
+
const keyPressShouldBeChecked = (event) => {
|
118
|
+
if (event.key == "ArrowUp" || event.key == "ArrowDown" || event.key == "ArrowLeft" || event.key == "ArrowRight") {
|
119
|
+
return false;
|
120
|
+
}
|
121
|
+
const selection = window.getSelection();
|
122
|
+
const contenteditable = event.target;
|
123
|
+
const isCursorAtEnd = selection?.focusOffset === contenteditable?.textContent?.length;
|
124
|
+
if (isCursorAtEnd) {
|
125
|
+
return event.key === '}' || event.key === 'Backspace' || event.key === 'Delete';
|
126
|
+
}
|
127
|
+
const isCursorAtStart = selection?.anchorOffset === 0;
|
128
|
+
if (isCursorAtStart) {
|
129
|
+
return event.key === '{' || event.key === 'Backspace' || event.key === 'Delete';
|
130
|
+
}
|
131
|
+
return true;
|
132
|
+
};
|
133
|
+
//# sourceMappingURL=uiRender.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"uiRender.js","sourceRoot":"","sources":["../../../../src/multiVariableText/uiRender.ts"],"names":[],"mappings":"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"}
|