@pdfme/schemas 5.2.1-dev.1 → 5.2.1-dev.2
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/checkbox/index.js +56 -0
- package/dist/cjs/src/checkbox/index.js.map +1 -0
- package/dist/cjs/src/graphics/svg.js +1 -1
- package/dist/cjs/src/index.js +5 -1
- package/dist/cjs/src/index.js.map +1 -1
- package/dist/cjs/src/radioGroup/index.js +87 -0
- package/dist/cjs/src/radioGroup/index.js.map +1 -0
- package/dist/cjs/src/shapes/line.js +1 -1
- package/dist/cjs/src/shapes/line.js.map +1 -1
- package/dist/esm/src/checkbox/index.js +51 -0
- package/dist/esm/src/checkbox/index.js.map +1 -0
- package/dist/esm/src/graphics/svg.js +1 -1
- package/dist/esm/src/index.js +3 -1
- package/dist/esm/src/index.js.map +1 -1
- package/dist/esm/src/radioGroup/index.js +82 -0
- package/dist/esm/src/radioGroup/index.js.map +1 -0
- package/dist/esm/src/shapes/line.js +1 -1
- package/dist/esm/src/shapes/line.js.map +1 -1
- package/dist/types/src/checkbox/index.d.ts +7 -0
- package/dist/types/src/index.d.ts +3 -1
- package/dist/types/src/radioGroup/index.d.ts +8 -0
- package/package.json +1 -1
- package/src/checkbox/index.ts +68 -0
- package/src/graphics/svg.ts +1 -1
- package/src/index.ts +4 -0
- package/src/radioGroup/index.ts +112 -0
- package/src/shapes/line.ts +1 -1
@@ -0,0 +1,56 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
+
};
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
+
const svg_1 = __importDefault(require("../graphics/svg"));
|
7
|
+
const utils_js_1 = require("../utils.js");
|
8
|
+
const constants_js_1 = require("../constants.js");
|
9
|
+
const defaultStroke = 'currentColor';
|
10
|
+
const getCheckedIcon = (color = defaultStroke) => `<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="${color}" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-square-check"><rect width="18" height="18" x="3" y="3" rx="0"/><path d="m9 12 2 2 4-4"/></svg>`;
|
11
|
+
const getUncheckedIcon = (color = defaultStroke) => `<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="${color}" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-square"><rect width="18" height="18" x="3" y="3" rx="0"/></svg>`;
|
12
|
+
const getIcon = ({ value, color }) => value === 'true' ? getCheckedIcon(color) : getUncheckedIcon(color);
|
13
|
+
const schema = {
|
14
|
+
ui: (arg) => {
|
15
|
+
const { schema, value, onChange, rootElement, mode } = arg;
|
16
|
+
const container = document.createElement('div');
|
17
|
+
container.style.width = '100%';
|
18
|
+
container.style.height = '100%';
|
19
|
+
if ((0, utils_js_1.isEditable)(mode, schema)) {
|
20
|
+
container.addEventListener('click', () => {
|
21
|
+
onChange && onChange({ key: 'content', value: value === 'true' ? 'false' : 'true' });
|
22
|
+
});
|
23
|
+
}
|
24
|
+
void svg_1.default.ui({
|
25
|
+
...arg,
|
26
|
+
rootElement: container,
|
27
|
+
mode: 'viewer',
|
28
|
+
value: getIcon({ value, color: schema.color }),
|
29
|
+
});
|
30
|
+
rootElement.appendChild(container);
|
31
|
+
},
|
32
|
+
pdf: (arg) => svg_1.default.pdf(Object.assign(arg, { value: getIcon({ value: arg.value, color: arg.schema.color }) })),
|
33
|
+
propPanel: {
|
34
|
+
schema: ({ i18n }) => ({
|
35
|
+
color: {
|
36
|
+
title: i18n('schemas.color'),
|
37
|
+
type: 'string',
|
38
|
+
widget: 'color',
|
39
|
+
required: true,
|
40
|
+
rules: [{ pattern: constants_js_1.HEX_COLOR_PATTERN, message: i18n('validation.hexColor') }],
|
41
|
+
},
|
42
|
+
}),
|
43
|
+
defaultSchema: {
|
44
|
+
name: '',
|
45
|
+
type: 'checkbox',
|
46
|
+
content: 'false',
|
47
|
+
position: { x: 0, y: 0 },
|
48
|
+
width: 8,
|
49
|
+
height: 8,
|
50
|
+
color: '#000000',
|
51
|
+
},
|
52
|
+
},
|
53
|
+
icon: getCheckedIcon(),
|
54
|
+
};
|
55
|
+
exports.default = schema;
|
56
|
+
//# sourceMappingURL=index.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/checkbox/index.ts"],"names":[],"mappings":";;;;;AAEA,0DAAkC;AAClC,0CAAyC;AACzC,kDAAoD;AAEpD,MAAM,aAAa,GAAG,cAAc,CAAC;AAErC,MAAM,cAAc,GAAG,CAAC,KAAK,GAAG,aAAa,EAAE,EAAE,CAC/C,0GAA0G,KAAK,uLAAuL,CAAC;AACzS,MAAM,gBAAgB,GAAG,CAAC,KAAK,GAAG,aAAa,EAAE,EAAE,CACjD,0GAA0G,KAAK,wJAAwJ,CAAC;AAM1Q,MAAM,OAAO,GAAG,CAAC,EAAE,KAAK,EAAE,KAAK,EAAoC,EAAE,EAAE,CACrE,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;AAErE,MAAM,MAAM,GAAqB;IAC/B,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE;QACV,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC;QAC3D,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAChD,SAAS,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC;QAC/B,SAAS,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;QAEhC,IAAI,IAAA,qBAAU,EAAC,IAAI,EAAE,MAAM,CAAC,EAAE;YAC5B,SAAS,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;gBACvC,QAAQ,IAAI,QAAQ,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;YACvF,CAAC,CAAC,CAAC;SACJ;QAED,KAAK,aAAG,CAAC,EAAE,CAAC;YACV,GAAG,GAAG;YACN,WAAW,EAAE,SAAS;YACtB,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;SAC/C,CAAC,CAAC;QAEH,WAAW,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;IACrC,CAAC;IACD,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CACX,aAAG,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IAChG,SAAS,EAAE;QACT,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;YACrB,KAAK,EAAE;gBACL,KAAK,EAAE,IAAI,CAAC,eAAe,CAAC;gBAC5B,IAAI,EAAE,QAAQ;gBACd,MAAM,EAAE,OAAO;gBACf,QAAQ,EAAE,IAAI;gBACd,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,gCAAiB,EAAE,OAAO,EAAE,IAAI,CAAC,qBAAqB,CAAC,EAAE,CAAC;aAC9E;SACF,CAAC;QACF,aAAa,EAAE;YACb,IAAI,EAAE,EAAE;YACR,IAAI,EAAE,UAAU;YAChB,OAAO,EAAE,OAAO;YAChB,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;YACxB,KAAK,EAAE,CAAC;YACR,MAAM,EAAE,CAAC;YACT,KAAK,EAAE,SAAS;SACjB;KACF;IACD,IAAI,EAAE,cAAc,EAAE;CACvB,CAAC;AAEF,kBAAe,MAAM,CAAC"}
|
@@ -75,7 +75,7 @@ const svgSchema = {
|
|
75
75
|
content: defaultValue,
|
76
76
|
position: { x: 0, y: 0 },
|
77
77
|
width: 40,
|
78
|
-
height:
|
78
|
+
height: 50,
|
79
79
|
},
|
80
80
|
},
|
81
81
|
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-route"><circle cx="6" cy="19" r="3"/><path d="M9 19h8.5a3.5 3.5 0 0 0 0-7h-11a3.5 3.5 0 0 1 0-7H15"/><circle cx="18" cy="5" r="3"/></svg>',
|
package/dist/cjs/src/index.js
CHANGED
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
4
|
};
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
-
exports.select = exports.time = exports.date = exports.dateTime = exports.ellipse = exports.rectangle = exports.line = exports.barcodes = exports.table = exports.svg = exports.image = exports.multiVariableText = exports.text = exports.builtInPlugins = void 0;
|
6
|
+
exports.checkbox = exports.radioGroup = exports.select = exports.time = exports.date = exports.dateTime = exports.ellipse = exports.rectangle = exports.line = exports.barcodes = exports.table = exports.svg = exports.image = exports.multiVariableText = exports.text = exports.builtInPlugins = void 0;
|
7
7
|
const index_1 = __importDefault(require("./multiVariableText/index"));
|
8
8
|
exports.multiVariableText = index_1.default;
|
9
9
|
const index_2 = __importDefault(require("./text/index"));
|
@@ -29,6 +29,10 @@ const time_1 = __importDefault(require("./date/time"));
|
|
29
29
|
exports.time = time_1.default;
|
30
30
|
const index_5 = __importDefault(require("./select/index"));
|
31
31
|
exports.select = index_5.default;
|
32
|
+
const index_6 = __importDefault(require("./radioGroup/index"));
|
33
|
+
exports.radioGroup = index_6.default;
|
34
|
+
const index_7 = __importDefault(require("./checkbox/index"));
|
35
|
+
exports.checkbox = index_7.default;
|
32
36
|
const builtInPlugins = { Text: index_2.default };
|
33
37
|
exports.builtInPlugins = builtInPlugins;
|
34
38
|
//# sourceMappingURL=index.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":";;;;;;AAAA,sEAA0D;
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":";;;;;;AAAA,sEAA0D;AAqBxD,4BArBK,eAAiB,CAqBL;AApBnB,yDAAgC;AAmB9B,eAnBK,eAAI,CAmBL;AAlBN,6DAAqC;AAoBnC,gBApBK,eAAK,CAoBL;AAnBP,yDAAiC;AAoB/B,cApBK,aAAG,CAoBL;AAnBL,6DAAwC;AAqBtC,mBArBK,eAAQ,CAqBL;AApBV,yDAAiC;AAqB/B,eArBK,cAAI,CAqBL;AApBN,2DAAmC;AAkBjC,gBAlBK,eAAK,CAkBL;AAjBP,4DAA6D;AAoB3D,0FApBO,0BAAS,OAoBP;AACT,wFArBkB,wBAAO,OAqBlB;AApBT,+DAAuC;AAqBrC,mBArBK,kBAAQ,CAqBL;AApBV,uDAA+B;AAqB7B,eArBK,cAAI,CAqBL;AApBN,uDAA+B;AAqB7B,eArBK,cAAI,CAqBL;AApBN,2DAAoC;AAqBlC,iBArBK,eAAM,CAqBL;AApBR,+DAA4C;AAqB1C,qBArBK,eAAU,CAqBL;AApBZ,6DAAwC;AAqBtC,mBArBK,eAAQ,CAqBL;AAnBV,MAAM,cAAc,GAAG,EAAE,IAAI,EAAE,eAAI,EAAE,CAAC;AAGpC,wCAAc"}
|
@@ -0,0 +1,87 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
+
};
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
+
const svg_1 = __importDefault(require("../graphics/svg"));
|
7
|
+
const utils_js_1 = require("../utils.js");
|
8
|
+
const constants_js_1 = require("../constants.js");
|
9
|
+
const defaultStroke = 'currentColor';
|
10
|
+
const getCheckedIcon = (color = defaultStroke) => `<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="${color}" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-circle-dot"><circle cx="12" cy="12" r="10"/><circle cx="12" cy="12" r="1"/></svg>`;
|
11
|
+
const getUncheckedIcon = (color = defaultStroke) => `<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="${color}" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-circle"><circle cx="12" cy="12" r="10"/></svg>`;
|
12
|
+
const getIcon = ({ value, color }) => value === 'true' ? getCheckedIcon(color) : getUncheckedIcon(color);
|
13
|
+
const eventEmitter = new EventTarget();
|
14
|
+
const radioButtonStates = new Map();
|
15
|
+
const eventListeners = new Map();
|
16
|
+
const schema = {
|
17
|
+
ui: (arg) => {
|
18
|
+
const { schema, value, onChange, rootElement, mode } = arg;
|
19
|
+
const container = document.createElement('div');
|
20
|
+
if (onChange) {
|
21
|
+
radioButtonStates.set(schema.name, { value, onChange });
|
22
|
+
}
|
23
|
+
const oldListener = eventListeners.get(schema.name);
|
24
|
+
if (oldListener) {
|
25
|
+
eventEmitter.removeEventListener(`group-${schema.group}`, oldListener);
|
26
|
+
}
|
27
|
+
const handleGroupEvent = (event) => {
|
28
|
+
const customEvent = event;
|
29
|
+
const selectedSchemaName = customEvent.detail;
|
30
|
+
if (selectedSchemaName !== schema.name) {
|
31
|
+
const radioButtonState = radioButtonStates.get(schema.name);
|
32
|
+
if (!radioButtonState)
|
33
|
+
return;
|
34
|
+
if (radioButtonState.value === 'true') {
|
35
|
+
radioButtonState.onChange({ key: 'content', value: 'false' });
|
36
|
+
}
|
37
|
+
}
|
38
|
+
};
|
39
|
+
eventListeners.set(schema.name, handleGroupEvent);
|
40
|
+
eventEmitter.addEventListener(`group-${schema.group}`, handleGroupEvent);
|
41
|
+
if ((0, utils_js_1.isEditable)(mode, schema)) {
|
42
|
+
container.addEventListener('click', () => {
|
43
|
+
if (value !== 'true' && onChange) {
|
44
|
+
onChange({ key: 'content', value: 'true' });
|
45
|
+
radioButtonStates.set(schema.name, { value: 'true', onChange });
|
46
|
+
eventEmitter.dispatchEvent(new CustomEvent(`group-${schema.group}`, { detail: schema.name }));
|
47
|
+
}
|
48
|
+
});
|
49
|
+
}
|
50
|
+
void svg_1.default.ui({
|
51
|
+
...arg,
|
52
|
+
rootElement: container,
|
53
|
+
mode: 'viewer',
|
54
|
+
value: getIcon({ value, color: schema.color }),
|
55
|
+
});
|
56
|
+
rootElement.appendChild(container);
|
57
|
+
},
|
58
|
+
pdf: (arg) => svg_1.default.pdf(Object.assign(arg, { value: getIcon({ value: arg.value, color: arg.schema.color }) })),
|
59
|
+
propPanel: {
|
60
|
+
schema: ({ i18n }) => ({
|
61
|
+
color: {
|
62
|
+
title: i18n('schemas.color'),
|
63
|
+
type: 'string',
|
64
|
+
widget: 'color',
|
65
|
+
required: true,
|
66
|
+
rules: [{ pattern: constants_js_1.HEX_COLOR_PATTERN, message: i18n('validation.hexColor') }],
|
67
|
+
},
|
68
|
+
group: {
|
69
|
+
title: i18n('schemas.radioGroup.groupName'),
|
70
|
+
type: 'string',
|
71
|
+
},
|
72
|
+
}),
|
73
|
+
defaultSchema: {
|
74
|
+
name: '',
|
75
|
+
type: 'radioGroup',
|
76
|
+
content: 'false',
|
77
|
+
position: { x: 0, y: 0 },
|
78
|
+
width: 8,
|
79
|
+
height: 8,
|
80
|
+
group: 'MyGroup',
|
81
|
+
color: '#000000',
|
82
|
+
},
|
83
|
+
},
|
84
|
+
icon: getCheckedIcon(),
|
85
|
+
};
|
86
|
+
exports.default = schema;
|
87
|
+
//# sourceMappingURL=index.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/radioGroup/index.ts"],"names":[],"mappings":"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"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"line.js","sourceRoot":"","sources":["../../../../src/shapes/line.ts"],"names":[],"mappings":";;AACA,0CAAuF;AACvF,kDAAoD;AAEpD,MAAM,kBAAkB,GAAG,SAAS,CAAC;AAMrC,MAAM,UAAU,GAAuB;IACrC,GAAG,EAAE,CAAC,GAA+B,EAAE,EAAE;QACvC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,CAAC;QACtC,IAAI,MAAM,CAAC,KAAK,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK;YAAE,OAAO;QACvE,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;QAC9B,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QACpC,MAAM,EACJ,KAAK,EACL,MAAM,EACN,MAAM,EACN,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAClB,OAAO,GACR,GAAG,IAAA,mCAAwB,EAAC,EAAE,MAAM,EAAE,UAAU,EAAE,oBAAoB,EAAE,KAAK,EAAE,CAAC,CAAC;QAClF,MAAM,KAAK,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC;QACtD,IAAI,CAAC,QAAQ,CAAC;YACZ,KAAK,EAAE,IAAA,sBAAW,EAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC;YACjE,GAAG,EAAE,IAAA,sBAAW,EAAC,EAAE,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC;YAC1E,SAAS,EAAE,MAAM;YACjB,KAAK,EAAE,IAAA,4BAAiB,EAAC,MAAM,CAAC,KAAK,IAAI,kBAAkB,EAAE,SAAS,CAAC;YACvE,OAAO,EAAE,OAAO;SACjB,CAAC,CAAC;IACL,CAAC;IACD,EAAE,EAAE,CAAC,GAA8B,EAAE,EAAE;QACrC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,GAAG,CAAC;QACpC,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC1C,GAAG,CAAC,KAAK,CAAC,eAAe,GAAG,MAAM,CAAC,KAAK,IAAI,aAAa,CAAC;QAC1D,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC;QACzB,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;QAC1B,WAAW,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAC/B,CAAC;IACD,SAAS,EAAE;QACT,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;YACrB,KAAK,EAAE;gBACL,KAAK,EAAE,IAAI,CAAC,eAAe,CAAC;gBAC5B,IAAI,EAAE,QAAQ;gBACd,MAAM,EAAE,OAAO;gBACf,QAAQ,EAAE,IAAI;gBACd,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,gCAAiB,EAAE,OAAO,EAAE,IAAI,CAAC,qBAAqB,CAAC,EAAE,CAAC;aAC9E;SACF,CAAC;QACF,aAAa,EAAE;YACb,IAAI,EAAE,EAAE;YACR,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;YACxB,KAAK,EAAE,EAAE;YACT,MAAM,EAAE,
|
1
|
+
{"version":3,"file":"line.js","sourceRoot":"","sources":["../../../../src/shapes/line.ts"],"names":[],"mappings":";;AACA,0CAAuF;AACvF,kDAAoD;AAEpD,MAAM,kBAAkB,GAAG,SAAS,CAAC;AAMrC,MAAM,UAAU,GAAuB;IACrC,GAAG,EAAE,CAAC,GAA+B,EAAE,EAAE;QACvC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,CAAC;QACtC,IAAI,MAAM,CAAC,KAAK,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK;YAAE,OAAO;QACvE,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;QAC9B,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QACpC,MAAM,EACJ,KAAK,EACL,MAAM,EACN,MAAM,EACN,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAClB,OAAO,GACR,GAAG,IAAA,mCAAwB,EAAC,EAAE,MAAM,EAAE,UAAU,EAAE,oBAAoB,EAAE,KAAK,EAAE,CAAC,CAAC;QAClF,MAAM,KAAK,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC;QACtD,IAAI,CAAC,QAAQ,CAAC;YACZ,KAAK,EAAE,IAAA,sBAAW,EAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC;YACjE,GAAG,EAAE,IAAA,sBAAW,EAAC,EAAE,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC;YAC1E,SAAS,EAAE,MAAM;YACjB,KAAK,EAAE,IAAA,4BAAiB,EAAC,MAAM,CAAC,KAAK,IAAI,kBAAkB,EAAE,SAAS,CAAC;YACvE,OAAO,EAAE,OAAO;SACjB,CAAC,CAAC;IACL,CAAC;IACD,EAAE,EAAE,CAAC,GAA8B,EAAE,EAAE;QACrC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,GAAG,CAAC;QACpC,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC1C,GAAG,CAAC,KAAK,CAAC,eAAe,GAAG,MAAM,CAAC,KAAK,IAAI,aAAa,CAAC;QAC1D,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC;QACzB,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;QAC1B,WAAW,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAC/B,CAAC;IACD,SAAS,EAAE;QACT,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;YACrB,KAAK,EAAE;gBACL,KAAK,EAAE,IAAI,CAAC,eAAe,CAAC;gBAC5B,IAAI,EAAE,QAAQ;gBACd,MAAM,EAAE,OAAO;gBACf,QAAQ,EAAE,IAAI;gBACd,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,gCAAiB,EAAE,OAAO,EAAE,IAAI,CAAC,qBAAqB,CAAC,EAAE,CAAC;aAC9E;SACF,CAAC;QACF,aAAa,EAAE;YACb,IAAI,EAAE,EAAE;YACR,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;YACxB,KAAK,EAAE,EAAE;YACT,MAAM,EAAE,GAAG;YACX,MAAM,EAAE,CAAC;YACT,OAAO,EAAE,CAAC;YACV,QAAQ,EAAE,IAAI;YACd,KAAK,EAAE,kBAAkB;SAC1B;KACF;IACD,IAAI,EAAC,6OAA6O;CACnP,CAAC;AACF,kBAAe,UAAU,CAAC"}
|
@@ -0,0 +1,51 @@
|
|
1
|
+
import svg from '../graphics/svg';
|
2
|
+
import { isEditable } from '../utils.js';
|
3
|
+
import { HEX_COLOR_PATTERN } from '../constants.js';
|
4
|
+
const defaultStroke = 'currentColor';
|
5
|
+
const getCheckedIcon = (color = defaultStroke) => `<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="${color}" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-square-check"><rect width="18" height="18" x="3" y="3" rx="0"/><path d="m9 12 2 2 4-4"/></svg>`;
|
6
|
+
const getUncheckedIcon = (color = defaultStroke) => `<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="${color}" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-square"><rect width="18" height="18" x="3" y="3" rx="0"/></svg>`;
|
7
|
+
const getIcon = ({ value, color }) => value === 'true' ? getCheckedIcon(color) : getUncheckedIcon(color);
|
8
|
+
const schema = {
|
9
|
+
ui: (arg) => {
|
10
|
+
const { schema, value, onChange, rootElement, mode } = arg;
|
11
|
+
const container = document.createElement('div');
|
12
|
+
container.style.width = '100%';
|
13
|
+
container.style.height = '100%';
|
14
|
+
if (isEditable(mode, schema)) {
|
15
|
+
container.addEventListener('click', () => {
|
16
|
+
onChange && onChange({ key: 'content', value: value === 'true' ? 'false' : 'true' });
|
17
|
+
});
|
18
|
+
}
|
19
|
+
void svg.ui({
|
20
|
+
...arg,
|
21
|
+
rootElement: container,
|
22
|
+
mode: 'viewer',
|
23
|
+
value: getIcon({ value, color: schema.color }),
|
24
|
+
});
|
25
|
+
rootElement.appendChild(container);
|
26
|
+
},
|
27
|
+
pdf: (arg) => svg.pdf(Object.assign(arg, { value: getIcon({ value: arg.value, color: arg.schema.color }) })),
|
28
|
+
propPanel: {
|
29
|
+
schema: ({ i18n }) => ({
|
30
|
+
color: {
|
31
|
+
title: i18n('schemas.color'),
|
32
|
+
type: 'string',
|
33
|
+
widget: 'color',
|
34
|
+
required: true,
|
35
|
+
rules: [{ pattern: HEX_COLOR_PATTERN, message: i18n('validation.hexColor') }],
|
36
|
+
},
|
37
|
+
}),
|
38
|
+
defaultSchema: {
|
39
|
+
name: '',
|
40
|
+
type: 'checkbox',
|
41
|
+
content: 'false',
|
42
|
+
position: { x: 0, y: 0 },
|
43
|
+
width: 8,
|
44
|
+
height: 8,
|
45
|
+
color: '#000000',
|
46
|
+
},
|
47
|
+
},
|
48
|
+
icon: getCheckedIcon(),
|
49
|
+
};
|
50
|
+
export default schema;
|
51
|
+
//# sourceMappingURL=index.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/checkbox/index.ts"],"names":[],"mappings":"AAEA,OAAO,GAAG,MAAM,iBAAiB,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEpD,MAAM,aAAa,GAAG,cAAc,CAAC;AAErC,MAAM,cAAc,GAAG,CAAC,KAAK,GAAG,aAAa,EAAE,EAAE,CAC/C,0GAA0G,KAAK,uLAAuL,CAAC;AACzS,MAAM,gBAAgB,GAAG,CAAC,KAAK,GAAG,aAAa,EAAE,EAAE,CACjD,0GAA0G,KAAK,wJAAwJ,CAAC;AAM1Q,MAAM,OAAO,GAAG,CAAC,EAAE,KAAK,EAAE,KAAK,EAAoC,EAAE,EAAE,CACrE,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;AAErE,MAAM,MAAM,GAAqB;IAC/B,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE;QACV,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC;QAC3D,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAChD,SAAS,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC;QAC/B,SAAS,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;QAEhC,IAAI,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE;YAC5B,SAAS,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;gBACvC,QAAQ,IAAI,QAAQ,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;YACvF,CAAC,CAAC,CAAC;SACJ;QAED,KAAK,GAAG,CAAC,EAAE,CAAC;YACV,GAAG,GAAG;YACN,WAAW,EAAE,SAAS;YACtB,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;SAC/C,CAAC,CAAC;QAEH,WAAW,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;IACrC,CAAC;IACD,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CACX,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IAChG,SAAS,EAAE;QACT,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;YACrB,KAAK,EAAE;gBACL,KAAK,EAAE,IAAI,CAAC,eAAe,CAAC;gBAC5B,IAAI,EAAE,QAAQ;gBACd,MAAM,EAAE,OAAO;gBACf,QAAQ,EAAE,IAAI;gBACd,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,iBAAiB,EAAE,OAAO,EAAE,IAAI,CAAC,qBAAqB,CAAC,EAAE,CAAC;aAC9E;SACF,CAAC;QACF,aAAa,EAAE;YACb,IAAI,EAAE,EAAE;YACR,IAAI,EAAE,UAAU;YAChB,OAAO,EAAE,OAAO;YAChB,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;YACxB,KAAK,EAAE,CAAC;YACR,MAAM,EAAE,CAAC;YACT,KAAK,EAAE,SAAS;SACjB;KACF;IACD,IAAI,EAAE,cAAc,EAAE;CACvB,CAAC;AAEF,eAAe,MAAM,CAAC"}
|
@@ -73,7 +73,7 @@ const svgSchema = {
|
|
73
73
|
content: defaultValue,
|
74
74
|
position: { x: 0, y: 0 },
|
75
75
|
width: 40,
|
76
|
-
height:
|
76
|
+
height: 50,
|
77
77
|
},
|
78
78
|
},
|
79
79
|
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-route"><circle cx="6" cy="19" r="3"/><path d="M9 19h8.5a3.5 3.5 0 0 0 0-7h-11a3.5 3.5 0 0 1 0-7H15"/><circle cx="18" cy="5" r="3"/></svg>',
|
package/dist/esm/src/index.js
CHANGED
@@ -10,8 +10,10 @@ import dateTime from './date/dateTime';
|
|
10
10
|
import date from './date/date';
|
11
11
|
import time from './date/time';
|
12
12
|
import select from './select/index';
|
13
|
+
import radioGroup from './radioGroup/index';
|
14
|
+
import checkbox from './checkbox/index';
|
13
15
|
const builtInPlugins = { Text: text };
|
14
16
|
export { builtInPlugins,
|
15
17
|
// schemas
|
16
|
-
text, multiVariableText, image, svg, table, barcodes, line, rectangle, ellipse, dateTime, date, time, select, };
|
18
|
+
text, multiVariableText, image, svg, table, barcodes, line, rectangle, ellipse, dateTime, date, time, select, radioGroup, checkbox, };
|
17
19
|
//# sourceMappingURL=index.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,iBAAiB,MAAM,2BAA2B,CAAC;AAC1D,OAAO,IAAI,MAAM,cAAc,CAAC;AAChC,OAAO,KAAK,MAAM,kBAAkB,CAAC;AACrC,OAAO,GAAG,MAAM,gBAAgB,CAAC;AACjC,OAAO,QAAQ,MAAM,kBAAkB,CAAC;AACxC,OAAO,IAAI,MAAM,eAAe,CAAC;AACjC,OAAO,KAAK,MAAM,gBAAgB,CAAC;AACnC,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,QAAQ,MAAM,iBAAiB,CAAC;AACvC,OAAO,IAAI,MAAM,aAAa,CAAC;AAC/B,OAAO,IAAI,MAAM,aAAa,CAAC;AAC/B,OAAO,MAAM,MAAM,gBAAgB,CAAC;
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,iBAAiB,MAAM,2BAA2B,CAAC;AAC1D,OAAO,IAAI,MAAM,cAAc,CAAC;AAChC,OAAO,KAAK,MAAM,kBAAkB,CAAC;AACrC,OAAO,GAAG,MAAM,gBAAgB,CAAC;AACjC,OAAO,QAAQ,MAAM,kBAAkB,CAAC;AACxC,OAAO,IAAI,MAAM,eAAe,CAAC;AACjC,OAAO,KAAK,MAAM,gBAAgB,CAAC;AACnC,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,QAAQ,MAAM,iBAAiB,CAAC;AACvC,OAAO,IAAI,MAAM,aAAa,CAAC;AAC/B,OAAO,IAAI,MAAM,aAAa,CAAC;AAC/B,OAAO,MAAM,MAAM,gBAAgB,CAAC;AACpC,OAAO,UAAU,MAAM,oBAAoB,CAAC;AAC5C,OAAO,QAAQ,MAAM,kBAAkB,CAAC;AAExC,MAAM,cAAc,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAEtC,OAAO,EACL,cAAc;AACd,UAAU;AACV,IAAI,EACJ,iBAAiB,EACjB,KAAK,EACL,GAAG,EACH,KAAK,EACL,QAAQ,EACR,IAAI,EACJ,SAAS,EACT,OAAO,EACP,QAAQ,EACR,IAAI,EACJ,IAAI,EACJ,MAAM,EACN,UAAU,EACV,QAAQ,GACT,CAAC"}
|
@@ -0,0 +1,82 @@
|
|
1
|
+
import svg from '../graphics/svg';
|
2
|
+
import { isEditable } from '../utils.js';
|
3
|
+
import { HEX_COLOR_PATTERN } from '../constants.js';
|
4
|
+
const defaultStroke = 'currentColor';
|
5
|
+
const getCheckedIcon = (color = defaultStroke) => `<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="${color}" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-circle-dot"><circle cx="12" cy="12" r="10"/><circle cx="12" cy="12" r="1"/></svg>`;
|
6
|
+
const getUncheckedIcon = (color = defaultStroke) => `<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="${color}" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-circle"><circle cx="12" cy="12" r="10"/></svg>`;
|
7
|
+
const getIcon = ({ value, color }) => value === 'true' ? getCheckedIcon(color) : getUncheckedIcon(color);
|
8
|
+
const eventEmitter = new EventTarget();
|
9
|
+
const radioButtonStates = new Map();
|
10
|
+
const eventListeners = new Map();
|
11
|
+
const schema = {
|
12
|
+
ui: (arg) => {
|
13
|
+
const { schema, value, onChange, rootElement, mode } = arg;
|
14
|
+
const container = document.createElement('div');
|
15
|
+
if (onChange) {
|
16
|
+
radioButtonStates.set(schema.name, { value, onChange });
|
17
|
+
}
|
18
|
+
const oldListener = eventListeners.get(schema.name);
|
19
|
+
if (oldListener) {
|
20
|
+
eventEmitter.removeEventListener(`group-${schema.group}`, oldListener);
|
21
|
+
}
|
22
|
+
const handleGroupEvent = (event) => {
|
23
|
+
const customEvent = event;
|
24
|
+
const selectedSchemaName = customEvent.detail;
|
25
|
+
if (selectedSchemaName !== schema.name) {
|
26
|
+
const radioButtonState = radioButtonStates.get(schema.name);
|
27
|
+
if (!radioButtonState)
|
28
|
+
return;
|
29
|
+
if (radioButtonState.value === 'true') {
|
30
|
+
radioButtonState.onChange({ key: 'content', value: 'false' });
|
31
|
+
}
|
32
|
+
}
|
33
|
+
};
|
34
|
+
eventListeners.set(schema.name, handleGroupEvent);
|
35
|
+
eventEmitter.addEventListener(`group-${schema.group}`, handleGroupEvent);
|
36
|
+
if (isEditable(mode, schema)) {
|
37
|
+
container.addEventListener('click', () => {
|
38
|
+
if (value !== 'true' && onChange) {
|
39
|
+
onChange({ key: 'content', value: 'true' });
|
40
|
+
radioButtonStates.set(schema.name, { value: 'true', onChange });
|
41
|
+
eventEmitter.dispatchEvent(new CustomEvent(`group-${schema.group}`, { detail: schema.name }));
|
42
|
+
}
|
43
|
+
});
|
44
|
+
}
|
45
|
+
void svg.ui({
|
46
|
+
...arg,
|
47
|
+
rootElement: container,
|
48
|
+
mode: 'viewer',
|
49
|
+
value: getIcon({ value, color: schema.color }),
|
50
|
+
});
|
51
|
+
rootElement.appendChild(container);
|
52
|
+
},
|
53
|
+
pdf: (arg) => svg.pdf(Object.assign(arg, { value: getIcon({ value: arg.value, color: arg.schema.color }) })),
|
54
|
+
propPanel: {
|
55
|
+
schema: ({ i18n }) => ({
|
56
|
+
color: {
|
57
|
+
title: i18n('schemas.color'),
|
58
|
+
type: 'string',
|
59
|
+
widget: 'color',
|
60
|
+
required: true,
|
61
|
+
rules: [{ pattern: HEX_COLOR_PATTERN, message: i18n('validation.hexColor') }],
|
62
|
+
},
|
63
|
+
group: {
|
64
|
+
title: i18n('schemas.radioGroup.groupName'),
|
65
|
+
type: 'string',
|
66
|
+
},
|
67
|
+
}),
|
68
|
+
defaultSchema: {
|
69
|
+
name: '',
|
70
|
+
type: 'radioGroup',
|
71
|
+
content: 'false',
|
72
|
+
position: { x: 0, y: 0 },
|
73
|
+
width: 8,
|
74
|
+
height: 8,
|
75
|
+
group: 'MyGroup',
|
76
|
+
color: '#000000',
|
77
|
+
},
|
78
|
+
},
|
79
|
+
icon: getCheckedIcon(),
|
80
|
+
};
|
81
|
+
export default schema;
|
82
|
+
//# sourceMappingURL=index.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/radioGroup/index.ts"],"names":[],"mappings":"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"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"line.js","sourceRoot":"","sources":["../../../../src/shapes/line.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACvF,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEpD,MAAM,kBAAkB,GAAG,SAAS,CAAC;AAMrC,MAAM,UAAU,GAAuB;IACrC,GAAG,EAAE,CAAC,GAA+B,EAAE,EAAE;QACvC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,CAAC;QACtC,IAAI,MAAM,CAAC,KAAK,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK;YAAE,OAAO;QACvE,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;QAC9B,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QACpC,MAAM,EACJ,KAAK,EACL,MAAM,EACN,MAAM,EACN,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAClB,OAAO,GACR,GAAG,wBAAwB,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,oBAAoB,EAAE,KAAK,EAAE,CAAC,CAAC;QAClF,MAAM,KAAK,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC;QACtD,IAAI,CAAC,QAAQ,CAAC;YACZ,KAAK,EAAE,WAAW,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC;YACjE,GAAG,EAAE,WAAW,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC;YAC1E,SAAS,EAAE,MAAM;YACjB,KAAK,EAAE,iBAAiB,CAAC,MAAM,CAAC,KAAK,IAAI,kBAAkB,EAAE,SAAS,CAAC;YACvE,OAAO,EAAE,OAAO;SACjB,CAAC,CAAC;IACL,CAAC;IACD,EAAE,EAAE,CAAC,GAA8B,EAAE,EAAE;QACrC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,GAAG,CAAC;QACpC,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC1C,GAAG,CAAC,KAAK,CAAC,eAAe,GAAG,MAAM,CAAC,KAAK,IAAI,aAAa,CAAC;QAC1D,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC;QACzB,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;QAC1B,WAAW,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAC/B,CAAC;IACD,SAAS,EAAE;QACT,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;YACrB,KAAK,EAAE;gBACL,KAAK,EAAE,IAAI,CAAC,eAAe,CAAC;gBAC5B,IAAI,EAAE,QAAQ;gBACd,MAAM,EAAE,OAAO;gBACf,QAAQ,EAAE,IAAI;gBACd,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,iBAAiB,EAAE,OAAO,EAAE,IAAI,CAAC,qBAAqB,CAAC,EAAE,CAAC;aAC9E;SACF,CAAC;QACF,aAAa,EAAE;YACb,IAAI,EAAE,EAAE;YACR,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;YACxB,KAAK,EAAE,EAAE;YACT,MAAM,EAAE,
|
1
|
+
{"version":3,"file":"line.js","sourceRoot":"","sources":["../../../../src/shapes/line.ts"],"names":[],"mappings":"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"}
|
@@ -10,7 +10,9 @@ import dateTime from './date/dateTime';
|
|
10
10
|
import date from './date/date';
|
11
11
|
import time from './date/time';
|
12
12
|
import select from './select/index';
|
13
|
+
import radioGroup from './radioGroup/index';
|
14
|
+
import checkbox from './checkbox/index';
|
13
15
|
declare const builtInPlugins: {
|
14
16
|
Text: import("@pdfme/common").Plugin<import("./text/types").TextSchema>;
|
15
17
|
};
|
16
|
-
export { builtInPlugins, text, multiVariableText, image, svg, table, barcodes, line, rectangle, ellipse, dateTime, date, time, select, };
|
18
|
+
export { builtInPlugins, text, multiVariableText, image, svg, table, barcodes, line, rectangle, ellipse, dateTime, date, time, select, radioGroup, checkbox, };
|
package/package.json
CHANGED
@@ -0,0 +1,68 @@
|
|
1
|
+
import { Plugin } from '@pdfme/common';
|
2
|
+
import { Schema } from '@pdfme/common';
|
3
|
+
import svg from '../graphics/svg';
|
4
|
+
import { isEditable } from '../utils.js';
|
5
|
+
import { HEX_COLOR_PATTERN } from '../constants.js';
|
6
|
+
|
7
|
+
const defaultStroke = 'currentColor';
|
8
|
+
|
9
|
+
const getCheckedIcon = (color = defaultStroke) =>
|
10
|
+
`<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="${color}" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-square-check"><rect width="18" height="18" x="3" y="3" rx="0"/><path d="m9 12 2 2 4-4"/></svg>`;
|
11
|
+
const getUncheckedIcon = (color = defaultStroke) =>
|
12
|
+
`<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="${color}" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-square"><rect width="18" height="18" x="3" y="3" rx="0"/></svg>`;
|
13
|
+
|
14
|
+
interface Checkbox extends Schema {
|
15
|
+
color: string;
|
16
|
+
}
|
17
|
+
|
18
|
+
const getIcon = ({ value, color }: { value: string; color: string }) =>
|
19
|
+
value === 'true' ? getCheckedIcon(color) : getUncheckedIcon(color);
|
20
|
+
|
21
|
+
const schema: Plugin<Checkbox> = {
|
22
|
+
ui: (arg) => {
|
23
|
+
const { schema, value, onChange, rootElement, mode } = arg;
|
24
|
+
const container = document.createElement('div');
|
25
|
+
container.style.width = '100%';
|
26
|
+
container.style.height = '100%';
|
27
|
+
|
28
|
+
if (isEditable(mode, schema)) {
|
29
|
+
container.addEventListener('click', () => {
|
30
|
+
onChange && onChange({ key: 'content', value: value === 'true' ? 'false' : 'true' });
|
31
|
+
});
|
32
|
+
}
|
33
|
+
|
34
|
+
void svg.ui({
|
35
|
+
...arg,
|
36
|
+
rootElement: container,
|
37
|
+
mode: 'viewer',
|
38
|
+
value: getIcon({ value, color: schema.color }),
|
39
|
+
});
|
40
|
+
|
41
|
+
rootElement.appendChild(container);
|
42
|
+
},
|
43
|
+
pdf: (arg) =>
|
44
|
+
svg.pdf(Object.assign(arg, { value: getIcon({ value: arg.value, color: arg.schema.color }) })),
|
45
|
+
propPanel: {
|
46
|
+
schema: ({ i18n }) => ({
|
47
|
+
color: {
|
48
|
+
title: i18n('schemas.color'),
|
49
|
+
type: 'string',
|
50
|
+
widget: 'color',
|
51
|
+
required: true,
|
52
|
+
rules: [{ pattern: HEX_COLOR_PATTERN, message: i18n('validation.hexColor') }],
|
53
|
+
},
|
54
|
+
}),
|
55
|
+
defaultSchema: {
|
56
|
+
name: '',
|
57
|
+
type: 'checkbox',
|
58
|
+
content: 'false',
|
59
|
+
position: { x: 0, y: 0 },
|
60
|
+
width: 8,
|
61
|
+
height: 8,
|
62
|
+
color: '#000000',
|
63
|
+
},
|
64
|
+
},
|
65
|
+
icon: getCheckedIcon(),
|
66
|
+
};
|
67
|
+
|
68
|
+
export default schema;
|
package/src/graphics/svg.ts
CHANGED
@@ -77,7 +77,7 @@ const svgSchema: Plugin<SVGSchema> = {
|
|
77
77
|
content: defaultValue,
|
78
78
|
position: { x: 0, y: 0 },
|
79
79
|
width: 40,
|
80
|
-
height:
|
80
|
+
height: 50,
|
81
81
|
},
|
82
82
|
},
|
83
83
|
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-route"><circle cx="6" cy="19" r="3"/><path d="M9 19h8.5a3.5 3.5 0 0 0 0-7h-11a3.5 3.5 0 0 1 0-7H15"/><circle cx="18" cy="5" r="3"/></svg>',
|
package/src/index.ts
CHANGED
@@ -10,6 +10,8 @@ import dateTime from './date/dateTime';
|
|
10
10
|
import date from './date/date';
|
11
11
|
import time from './date/time';
|
12
12
|
import select from './select/index';
|
13
|
+
import radioGroup from './radioGroup/index';
|
14
|
+
import checkbox from './checkbox/index';
|
13
15
|
|
14
16
|
const builtInPlugins = { Text: text };
|
15
17
|
|
@@ -29,4 +31,6 @@ export {
|
|
29
31
|
date,
|
30
32
|
time,
|
31
33
|
select,
|
34
|
+
radioGroup,
|
35
|
+
checkbox,
|
32
36
|
};
|
@@ -0,0 +1,112 @@
|
|
1
|
+
import { Plugin } from '@pdfme/common';
|
2
|
+
import { Schema } from '@pdfme/common';
|
3
|
+
import svg from '../graphics/svg';
|
4
|
+
import { isEditable } from '../utils.js';
|
5
|
+
import { HEX_COLOR_PATTERN } from '../constants.js';
|
6
|
+
|
7
|
+
const defaultStroke = 'currentColor';
|
8
|
+
|
9
|
+
const getCheckedIcon = (color = defaultStroke) =>
|
10
|
+
`<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="${color}" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-circle-dot"><circle cx="12" cy="12" r="10"/><circle cx="12" cy="12" r="1"/></svg>`;
|
11
|
+
const getUncheckedIcon = (color = defaultStroke) =>
|
12
|
+
`<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="${color}" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-circle"><circle cx="12" cy="12" r="10"/></svg>`;
|
13
|
+
|
14
|
+
interface RadioGroup extends Schema {
|
15
|
+
group: string;
|
16
|
+
color: string;
|
17
|
+
}
|
18
|
+
|
19
|
+
const getIcon = ({ value, color }: { value: string; color: string }) =>
|
20
|
+
value === 'true' ? getCheckedIcon(color) : getUncheckedIcon(color);
|
21
|
+
|
22
|
+
const eventEmitter = new EventTarget();
|
23
|
+
|
24
|
+
interface RadioButtonState {
|
25
|
+
value: string;
|
26
|
+
onChange: (arg: { key: string; value: string }) => void;
|
27
|
+
}
|
28
|
+
|
29
|
+
const radioButtonStates = new Map<string, RadioButtonState>();
|
30
|
+
const eventListeners = new Map<string, EventListener>();
|
31
|
+
|
32
|
+
const schema: Plugin<RadioGroup> = {
|
33
|
+
ui: (arg) => {
|
34
|
+
const { schema, value, onChange, rootElement, mode } = arg;
|
35
|
+
const container = document.createElement('div');
|
36
|
+
|
37
|
+
if (onChange) {
|
38
|
+
radioButtonStates.set(schema.name, { value, onChange });
|
39
|
+
}
|
40
|
+
|
41
|
+
const oldListener = eventListeners.get(schema.name);
|
42
|
+
if (oldListener) {
|
43
|
+
eventEmitter.removeEventListener(`group-${schema.group}`, oldListener);
|
44
|
+
}
|
45
|
+
|
46
|
+
const handleGroupEvent = (event: Event) => {
|
47
|
+
const customEvent = event as CustomEvent<string>;
|
48
|
+
const selectedSchemaName = customEvent.detail;
|
49
|
+
if (selectedSchemaName !== schema.name) {
|
50
|
+
const radioButtonState = radioButtonStates.get(schema.name);
|
51
|
+
if (!radioButtonState) return;
|
52
|
+
if (radioButtonState.value === 'true') {
|
53
|
+
radioButtonState.onChange({ key: 'content', value: 'false' });
|
54
|
+
}
|
55
|
+
}
|
56
|
+
};
|
57
|
+
|
58
|
+
eventListeners.set(schema.name, handleGroupEvent);
|
59
|
+
eventEmitter.addEventListener(`group-${schema.group}`, handleGroupEvent);
|
60
|
+
|
61
|
+
if (isEditable(mode, schema)) {
|
62
|
+
container.addEventListener('click', () => {
|
63
|
+
if (value !== 'true' && onChange) {
|
64
|
+
onChange({ key: 'content', value: 'true' });
|
65
|
+
radioButtonStates.set(schema.name, { value: 'true', onChange });
|
66
|
+
eventEmitter.dispatchEvent(
|
67
|
+
new CustomEvent(`group-${schema.group}`, { detail: schema.name })
|
68
|
+
);
|
69
|
+
}
|
70
|
+
});
|
71
|
+
}
|
72
|
+
|
73
|
+
void svg.ui({
|
74
|
+
...arg,
|
75
|
+
rootElement: container,
|
76
|
+
mode: 'viewer',
|
77
|
+
value: getIcon({ value, color: schema.color }),
|
78
|
+
});
|
79
|
+
|
80
|
+
rootElement.appendChild(container);
|
81
|
+
},
|
82
|
+
pdf: (arg) =>
|
83
|
+
svg.pdf(Object.assign(arg, { value: getIcon({ value: arg.value, color: arg.schema.color }) })),
|
84
|
+
propPanel: {
|
85
|
+
schema: ({ i18n }) => ({
|
86
|
+
color: {
|
87
|
+
title: i18n('schemas.color'),
|
88
|
+
type: 'string',
|
89
|
+
widget: 'color',
|
90
|
+
required: true,
|
91
|
+
rules: [{ pattern: HEX_COLOR_PATTERN, message: i18n('validation.hexColor') }],
|
92
|
+
},
|
93
|
+
group: {
|
94
|
+
title: i18n('schemas.radioGroup.groupName'),
|
95
|
+
type: 'string',
|
96
|
+
},
|
97
|
+
}),
|
98
|
+
defaultSchema: {
|
99
|
+
name: '',
|
100
|
+
type: 'radioGroup',
|
101
|
+
content: 'false',
|
102
|
+
position: { x: 0, y: 0 },
|
103
|
+
width: 8,
|
104
|
+
height: 8,
|
105
|
+
group: 'MyGroup',
|
106
|
+
color: '#000000',
|
107
|
+
},
|
108
|
+
},
|
109
|
+
icon: getCheckedIcon(),
|
110
|
+
};
|
111
|
+
|
112
|
+
export default schema;
|