@windwalker-io/unicorn-next 0.1.18 → 0.1.21
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/chunks/_arrayPush.js +325 -108
- package/dist/chunks/_arrayPush.js.map +1 -1
- package/dist/chunks/_baseRest.js +155 -60
- package/dist/chunks/_baseRest.js.map +1 -1
- package/dist/chunks/_baseUnary.js +463 -0
- package/dist/chunks/_baseUnary.js.map +1 -0
- package/dist/chunks/_getPrototype.js +292 -100
- package/dist/chunks/_getPrototype.js.map +1 -1
- package/dist/chunks/alert-adapter.js +29 -0
- package/dist/chunks/alert-adapter.js.map +1 -0
- package/dist/chunks/alert.js +21 -0
- package/dist/chunks/alert.js.map +1 -0
- package/dist/chunks/arr.js +24 -0
- package/dist/chunks/arr.js.map +1 -0
- package/dist/chunks/button-radio.js +127 -145
- package/dist/chunks/button-radio.js.map +1 -1
- package/dist/chunks/checkboxes-multi-select.js +44 -43
- package/dist/chunks/checkboxes-multi-select.js.map +1 -1
- package/dist/chunks/chunk.js +24 -0
- package/dist/chunks/cloneDeep.js +679 -212
- package/dist/chunks/cloneDeep.js.map +1 -1
- package/dist/chunks/cropper.min.js +6 -5
- package/dist/chunks/cropper.min.js.map +1 -1
- package/dist/chunks/crypto.js +26 -0
- package/dist/chunks/crypto.js.map +1 -0
- package/dist/chunks/data.js +49 -0
- package/dist/chunks/data.js.map +1 -0
- package/dist/chunks/dom.js +128 -0
- package/dist/chunks/dom.js.map +1 -0
- package/dist/chunks/events.js +270 -0
- package/dist/chunks/events.js.map +1 -0
- package/dist/chunks/field-cascade-select.js +207 -250
- package/dist/chunks/field-cascade-select.js.map +1 -1
- package/dist/chunks/field-file-drag.js +175 -209
- package/dist/chunks/field-file-drag.js.map +1 -1
- package/dist/chunks/field-flatpickr.js +94 -898
- package/dist/chunks/field-flatpickr.js.map +1 -1
- package/dist/chunks/field-modal-select.js +728 -467
- package/dist/chunks/field-modal-select.js.map +1 -1
- package/dist/chunks/field-modal-tree.js +771 -766
- package/dist/chunks/field-modal-tree.js.map +1 -1
- package/dist/chunks/field-multi-uploader.js +249 -256
- package/dist/chunks/field-multi-uploader.js.map +1 -1
- package/dist/chunks/field-repeatable.js +111 -127
- package/dist/chunks/field-repeatable.js.map +1 -1
- package/dist/chunks/field-single-image-drag.js +286 -338
- package/dist/chunks/field-single-image-drag.js.map +1 -1
- package/dist/chunks/form.js +146 -159
- package/dist/chunks/form.js.map +1 -1
- package/dist/chunks/grid.js +349 -418
- package/dist/chunks/grid.js.map +1 -1
- package/dist/chunks/helper.js +39 -0
- package/dist/chunks/helper.js.map +1 -0
- package/dist/chunks/http-client.js +221 -211
- package/dist/chunks/http-client.js.map +1 -1
- package/dist/chunks/iframe-modal.js +95 -115
- package/dist/chunks/iframe-modal.js.map +1 -1
- package/dist/chunks/keep-tab.js +92 -101
- package/dist/chunks/keep-tab.js.map +1 -1
- package/dist/chunks/lang.js +250 -0
- package/dist/chunks/lang.js.map +1 -0
- package/dist/chunks/legacy.js +197 -201
- package/dist/chunks/legacy.js.map +1 -1
- package/dist/chunks/list-dependent.js +195 -228
- package/dist/chunks/list-dependent.js.map +1 -1
- package/dist/chunks/loader.js +106 -0
- package/dist/chunks/loader.js.map +1 -0
- package/dist/chunks/monthSelect.js +251 -0
- package/dist/chunks/monthSelect.js.map +1 -0
- package/dist/chunks/router.js +111 -0
- package/dist/chunks/router.js.map +1 -0
- package/dist/chunks/s3-multipart-uploader.js +183 -210
- package/dist/chunks/s3-multipart-uploader.js.map +1 -1
- package/dist/chunks/s3-uploader.js +106 -128
- package/dist/chunks/s3-uploader.js.map +1 -1
- package/dist/chunks/show-on.js +358 -205
- package/dist/chunks/show-on.js.map +1 -1
- package/dist/chunks/timing.js +10 -0
- package/dist/chunks/timing.js.map +1 -0
- package/dist/chunks/tinymce.js +153 -203
- package/dist/chunks/tinymce.js.map +1 -1
- package/dist/chunks/ui-bootstrap5.js +58 -72
- package/dist/chunks/ui-bootstrap5.js.map +1 -1
- package/dist/chunks/ui.js +320 -0
- package/dist/chunks/ui.js.map +1 -0
- package/dist/chunks/unicorn.js.map +1 -1
- package/dist/chunks/useQueue.js +111 -0
- package/dist/chunks/useQueue.js.map +1 -0
- package/dist/chunks/useStack.js +76 -0
- package/dist/chunks/useStack.js.map +1 -0
- package/dist/chunks/validation.js +761 -853
- package/dist/chunks/validation.js.map +1 -1
- package/dist/editor.css +1 -1
- package/dist/index.d.ts +27 -15
- package/dist/multi-level-menu.css +1 -1
- package/dist/switcher.css +1 -1
- package/dist/unicorn.js +805 -130
- package/dist/unicorn.js.map +1 -1
- package/package.json +3 -3
- package/src/composable/useBsModalAlert.ts +92 -12
- package/src/composable/useHttp.ts +13 -1
- package/src/module/s3-uploader.ts +1 -1
- package/src/service/ui.ts +31 -15
- package/vite.config.ts +5 -1
- package/dist/chunks/_commonjsHelpers.js +0 -7
- package/dist/chunks/index.js +0 -314
- package/dist/chunks/isArguments.js +0 -146
- package/dist/chunks/unicorn.js +0 -2580
|
@@ -1,147 +1,129 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
1
|
+
import { t as mergeDeep } from "./arr.js";
|
|
2
|
+
import { t as data } from "./data.js";
|
|
3
|
+
import { a as h, d as selectOne, r as getBoundedInstance, u as selectAll } from "./dom.js";
|
|
4
|
+
import { useUniDirective } from "../unicorn.js";
|
|
5
|
+
//#region src/bootstrap/button-radio.ts
|
|
6
|
+
var defaultOptions = {
|
|
7
|
+
selector: ".btn-group .radio",
|
|
8
|
+
buttonClass: "btn",
|
|
9
|
+
activeClass: "active",
|
|
10
|
+
color: {
|
|
11
|
+
"default": "btn-default btn-outline-secondary",
|
|
12
|
+
green: "btn-success",
|
|
13
|
+
red: "btn-danger",
|
|
14
|
+
blue: "btn-primary"
|
|
15
|
+
}
|
|
12
16
|
};
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
}
|
|
118
|
-
syncState() {
|
|
119
|
-
const options = this.options;
|
|
120
|
-
this.buttons.forEach((button) => {
|
|
121
|
-
const input = data(button, "input");
|
|
122
|
-
button.classList.add(...this.parseClasses(options.color.default || ""));
|
|
123
|
-
button.classList.remove(...this.parseClasses(options.activeClass));
|
|
124
|
-
button.classList.remove(...this.parseClasses(...this.colors));
|
|
125
|
-
if (input.checked) {
|
|
126
|
-
button.classList.add(...this.parseClasses(options.activeClass));
|
|
127
|
-
button.classList.add(...this.parseClasses(input.dataset.colorClass || ""));
|
|
128
|
-
button.classList.remove(...this.parseClasses(options.color.default || ""));
|
|
129
|
-
}
|
|
130
|
-
});
|
|
131
|
-
}
|
|
132
|
-
parseClasses(...className) {
|
|
133
|
-
const classNameStr = className.join(" ");
|
|
134
|
-
return classNameStr.split(" ").filter((t) => t !== "");
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
const ready = /* @__PURE__ */ useUniDirective("button-radio", {
|
|
138
|
-
mounted(el, { value }) {
|
|
139
|
-
JSON.parse(value || "{}");
|
|
140
|
-
ButtonRadio.handle(el, value || {});
|
|
141
|
-
}
|
|
142
|
-
});
|
|
143
|
-
export {
|
|
144
|
-
ButtonRadio,
|
|
145
|
-
ready
|
|
17
|
+
var ButtonRadio = class {
|
|
18
|
+
wrapper;
|
|
19
|
+
element;
|
|
20
|
+
radios = [];
|
|
21
|
+
inputs = [];
|
|
22
|
+
buttons = [];
|
|
23
|
+
colors = [];
|
|
24
|
+
options;
|
|
25
|
+
static handle(el, options = {}) {
|
|
26
|
+
return getBoundedInstance(el, "button-radio", (el) => {
|
|
27
|
+
return new this(el, options);
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
constructor(selector, options = {}) {
|
|
31
|
+
this.element = selectOne(selector);
|
|
32
|
+
this.options = mergeDeep({}, defaultOptions, options);
|
|
33
|
+
let wrapper;
|
|
34
|
+
if (this.element.dataset.fieldInput != null) wrapper = this.element;
|
|
35
|
+
else wrapper = this.element.querySelector("[data-field-input]");
|
|
36
|
+
this.wrapper = wrapper;
|
|
37
|
+
let inputGroup = wrapper.querySelector(".btn-group");
|
|
38
|
+
const exists = inputGroup != null;
|
|
39
|
+
if (!inputGroup) inputGroup = h("div", { class: "btn-group" });
|
|
40
|
+
this.radios = selectAll(wrapper.querySelectorAll(".radio"));
|
|
41
|
+
this.radios.forEach((radio) => {
|
|
42
|
+
const button = this.prepareButton(radio, exists);
|
|
43
|
+
if (!exists) inputGroup.appendChild(button);
|
|
44
|
+
});
|
|
45
|
+
this.syncState();
|
|
46
|
+
wrapper.insertBefore(inputGroup, wrapper.firstChild);
|
|
47
|
+
wrapper.dispatchEvent(new Event("button-radio.loaded"));
|
|
48
|
+
this.colors = [...new Set(this.colors)];
|
|
49
|
+
}
|
|
50
|
+
prepareButton(radio, exists = false) {
|
|
51
|
+
const options = this.options;
|
|
52
|
+
const input = radio.querySelector("input");
|
|
53
|
+
const label = radio.querySelector("label");
|
|
54
|
+
let button;
|
|
55
|
+
if (exists) {
|
|
56
|
+
button = this.wrapper.querySelector(`[data-for="${input.id}"]`);
|
|
57
|
+
button.classList.add(...this.parseClasses(`${options.buttonClass} ${options.color["default"]}`));
|
|
58
|
+
} else button = h("button", {
|
|
59
|
+
type: "button",
|
|
60
|
+
class: `${options.buttonClass} ${options.color["default"]}`,
|
|
61
|
+
"data-value": input.value
|
|
62
|
+
}, `<span>${label.innerHTML}</span>`);
|
|
63
|
+
data(button, "input", input);
|
|
64
|
+
this.inputs.push(input);
|
|
65
|
+
this.buttons.push(button);
|
|
66
|
+
radio.style.display = "none";
|
|
67
|
+
let color = input.dataset.colorClass || "";
|
|
68
|
+
if (!color) {
|
|
69
|
+
switch (input.value) {
|
|
70
|
+
case "":
|
|
71
|
+
color = options.color.blue || "";
|
|
72
|
+
break;
|
|
73
|
+
case "0":
|
|
74
|
+
color = options.color.red || "";
|
|
75
|
+
break;
|
|
76
|
+
default:
|
|
77
|
+
color = options.color.green || "";
|
|
78
|
+
break;
|
|
79
|
+
}
|
|
80
|
+
input.dataset.colorClass = color;
|
|
81
|
+
}
|
|
82
|
+
this.colors.push(color);
|
|
83
|
+
if (input.disabled || input.getAttribute("readonly") != null) {
|
|
84
|
+
button.classList.add("disabled");
|
|
85
|
+
button.disabled = true;
|
|
86
|
+
}
|
|
87
|
+
if (input.getAttribute("readonly") != null) button.classList.add("readonly");
|
|
88
|
+
button.addEventListener("click", () => {
|
|
89
|
+
if (input.getAttribute("disabled") || input.getAttribute("readonly")) return;
|
|
90
|
+
if (!input.checked) {
|
|
91
|
+
this.inputs.forEach((ele) => {
|
|
92
|
+
ele.checked = false;
|
|
93
|
+
});
|
|
94
|
+
input.checked = true;
|
|
95
|
+
input.dispatchEvent(new Event("change"));
|
|
96
|
+
input.dispatchEvent(new Event("input"));
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
input.addEventListener("change", () => {
|
|
100
|
+
this.syncState();
|
|
101
|
+
});
|
|
102
|
+
return button;
|
|
103
|
+
}
|
|
104
|
+
syncState() {
|
|
105
|
+
const options = this.options;
|
|
106
|
+
this.buttons.forEach((button) => {
|
|
107
|
+
const input = data(button, "input");
|
|
108
|
+
button.classList.add(...this.parseClasses(options.color.default || ""));
|
|
109
|
+
button.classList.remove(...this.parseClasses(options.activeClass));
|
|
110
|
+
button.classList.remove(...this.parseClasses(...this.colors));
|
|
111
|
+
if (input.checked) {
|
|
112
|
+
button.classList.add(...this.parseClasses(options.activeClass));
|
|
113
|
+
button.classList.add(...this.parseClasses(input.dataset.colorClass || ""));
|
|
114
|
+
button.classList.remove(...this.parseClasses(options.color.default || ""));
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
parseClasses(...className) {
|
|
119
|
+
return className.join(" ").split(" ").filter((t) => t !== "");
|
|
120
|
+
}
|
|
146
121
|
};
|
|
147
|
-
|
|
122
|
+
var ready = /* @__PURE__ */ useUniDirective("button-radio", { mounted(el, { value }) {
|
|
123
|
+
JSON.parse(value || "{}");
|
|
124
|
+
ButtonRadio.handle(el, value || {});
|
|
125
|
+
} });
|
|
126
|
+
//#endregion
|
|
127
|
+
export { ButtonRadio, ready };
|
|
128
|
+
|
|
129
|
+
//# sourceMappingURL=button-radio.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"button-radio.js","sources":["../../src/bootstrap/button-radio.ts"],"sourcesContent":["import { useUniDirective } from '../composable';\nimport { data } from '../data';\nimport { getBoundedInstance, h, selectAll, selectOne } from '../service';\nimport { mergeDeep } from '../utilities';\n\nexport interface ButtonRadioOptions {\n selector?: string;\n buttonClass?: string;\n activeClass?: string;\n color?: {\n 'default'?: string;\n green?: string;\n red?: string;\n blue?: string;\n };\n}\n\nconst defaultOptions = {\n selector: '.btn-group .radio',\n buttonClass: 'btn',\n activeClass: 'active',\n color: {\n 'default': 'btn-default btn-outline-secondary',\n green: 'btn-success',\n red: 'btn-danger',\n blue: 'btn-primary'\n }\n};\n\nexport class ButtonRadio {\n wrapper: HTMLElement;\n element: HTMLElement;\n radios: HTMLInputElement[] = [];\n inputs: HTMLInputElement[] = [];\n buttons: HTMLButtonElement[] = [];\n colors: string[] = [];\n options: Required<ButtonRadioOptions>;\n\n static handle(el: HTMLElement | string, options: ButtonRadioOptions = {}) {\n return getBoundedInstance(el, 'button-radio', (el: HTMLElement) => {\n return new this(el, options);\n });\n }\n\n constructor(selector: HTMLElement | string, options: ButtonRadioOptions = {}) {\n this.element = selectOne<HTMLElement>(selector)!;\n this.options = mergeDeep({}, defaultOptions, options);\n let wrapper: HTMLElement;\n\n // Turn radios into btn-group\n\n if (this.element.dataset.fieldInput != null) {\n wrapper = this.element;\n } else {\n wrapper = this.element.querySelector('[data-field-input]')!;\n }\n\n this.wrapper = wrapper;\n let inputGroup = wrapper.querySelector<HTMLElement>('.btn-group')!;\n const exists = inputGroup != null;\n\n if (!inputGroup) {\n inputGroup = h('div', { class: 'btn-group' })\n }\n\n this.radios = selectAll(wrapper.querySelectorAll<HTMLInputElement>('.radio'));\n\n this.radios.forEach(radio => {\n const button = this.prepareButton(radio, exists);\n\n if (!exists) {\n inputGroup.appendChild(button);\n }\n });\n\n this.syncState();\n\n wrapper.insertBefore(inputGroup, wrapper.firstChild);\n\n wrapper.dispatchEvent(new Event('button-radio.loaded'));\n\n // Make color elements unique\n this.colors = [...new Set(this.colors)];\n }\n\n prepareButton(radio: HTMLInputElement, exists = false) {\n const options = this.options;\n\n const input = radio.querySelector('input')!;\n const label = radio.querySelector('label')!;\n\n let button: HTMLButtonElement;\n\n if (exists) {\n button = this.wrapper.querySelector(`[data-for=\"${input.id}\"]`)!;\n button.classList.add(...this.parseClasses(`${options.buttonClass} ${options.color['default']}`));\n } else {\n button = h(\n 'button',\n {\n type: 'button',\n class: `${options.buttonClass} ${options.color['default']}`,\n 'data-value': input.value,\n },\n `<span>${label.innerHTML}</span>`\n );\n }\n\n data(button, 'input', input);\n this.inputs.push(input);\n this.buttons.push(button);\n\n radio.style.display = 'none';\n\n // Prepare color schema\n let color = input.dataset.colorClass || '';\n\n if (!color) {\n switch (input.value) {\n case '':\n color = options.color.blue || '';\n break;\n\n case '0':\n color = options.color.red || '';\n break;\n\n default:\n color = options.color.green || '';\n break;\n }\n\n input.dataset.colorClass = color;\n }\n \n this.colors.push(color);\n\n if (input.disabled || input.getAttribute('readonly') != null) {\n button.classList.add('disabled');\n button.disabled = true;\n }\n\n if (input.getAttribute('readonly') != null) {\n button.classList.add('readonly');\n }\n\n // Bind event\n button.addEventListener('click', () => {\n if (input.getAttribute('disabled') || input.getAttribute('readonly')) {\n return;\n }\n\n const changed = !input.checked;\n\n if (changed) {\n this.inputs.forEach((ele) => {\n ele.checked = false;\n });\n\n input.checked = true;\n\n input.dispatchEvent(new Event('change'));\n input.dispatchEvent(new Event('input'));\n }\n });\n\n input.addEventListener('change', () => {\n this.syncState();\n });\n\n return button;\n }\n\n syncState() {\n const options = this.options;\n\n this.buttons.forEach((button) => {\n const input: HTMLInputElement = data(button, 'input');\n\n button.classList.add(...this.parseClasses(options.color.default || ''));\n button.classList.remove(...this.parseClasses(options.activeClass));\n button.classList.remove(...this.parseClasses(...this.colors));\n\n if (input.checked) {\n button.classList.add(...this.parseClasses(options.activeClass));\n button.classList.add(...this.parseClasses(input.dataset.colorClass || ''));\n button.classList.remove(...this.parseClasses(options.color.default || ''));\n }\n });\n }\n\n parseClasses(...className: string[]) {\n const classNameStr = className.join(' ');\n return classNameStr.split(' ').filter(t => t !== '');\n }\n}\n\nexport const ready = useUniDirective('button-radio', {\n mounted(el, { value }) {\n const options: ButtonRadioOptions = JSON.parse(value || '{}');\n ButtonRadio.handle(el, value || {});\n }\n});\n\nexport interface ButtonRadioModule {\n ButtonRadio: typeof ButtonRadio;\n ready: typeof ready;\n}\n"],"
|
|
1
|
+
{"version":3,"file":"button-radio.js","names":[],"sources":["../../src/bootstrap/button-radio.ts"],"sourcesContent":["import { useUniDirective } from '../composable';\nimport { data } from '../data';\nimport { getBoundedInstance, h, selectAll, selectOne } from '../service';\nimport { mergeDeep } from '../utilities';\n\nexport interface ButtonRadioOptions {\n selector?: string;\n buttonClass?: string;\n activeClass?: string;\n color?: {\n 'default'?: string;\n green?: string;\n red?: string;\n blue?: string;\n };\n}\n\nconst defaultOptions = {\n selector: '.btn-group .radio',\n buttonClass: 'btn',\n activeClass: 'active',\n color: {\n 'default': 'btn-default btn-outline-secondary',\n green: 'btn-success',\n red: 'btn-danger',\n blue: 'btn-primary'\n }\n};\n\nexport class ButtonRadio {\n wrapper: HTMLElement;\n element: HTMLElement;\n radios: HTMLInputElement[] = [];\n inputs: HTMLInputElement[] = [];\n buttons: HTMLButtonElement[] = [];\n colors: string[] = [];\n options: Required<ButtonRadioOptions>;\n\n static handle(el: HTMLElement | string, options: ButtonRadioOptions = {}) {\n return getBoundedInstance(el, 'button-radio', (el: HTMLElement) => {\n return new this(el, options);\n });\n }\n\n constructor(selector: HTMLElement | string, options: ButtonRadioOptions = {}) {\n this.element = selectOne<HTMLElement>(selector)!;\n this.options = mergeDeep({}, defaultOptions, options);\n let wrapper: HTMLElement;\n\n // Turn radios into btn-group\n\n if (this.element.dataset.fieldInput != null) {\n wrapper = this.element;\n } else {\n wrapper = this.element.querySelector('[data-field-input]')!;\n }\n\n this.wrapper = wrapper;\n let inputGroup = wrapper.querySelector<HTMLElement>('.btn-group')!;\n const exists = inputGroup != null;\n\n if (!inputGroup) {\n inputGroup = h('div', { class: 'btn-group' })\n }\n\n this.radios = selectAll(wrapper.querySelectorAll<HTMLInputElement>('.radio'));\n\n this.radios.forEach(radio => {\n const button = this.prepareButton(radio, exists);\n\n if (!exists) {\n inputGroup.appendChild(button);\n }\n });\n\n this.syncState();\n\n wrapper.insertBefore(inputGroup, wrapper.firstChild);\n\n wrapper.dispatchEvent(new Event('button-radio.loaded'));\n\n // Make color elements unique\n this.colors = [...new Set(this.colors)];\n }\n\n prepareButton(radio: HTMLInputElement, exists = false) {\n const options = this.options;\n\n const input = radio.querySelector('input')!;\n const label = radio.querySelector('label')!;\n\n let button: HTMLButtonElement;\n\n if (exists) {\n button = this.wrapper.querySelector(`[data-for=\"${input.id}\"]`)!;\n button.classList.add(...this.parseClasses(`${options.buttonClass} ${options.color['default']}`));\n } else {\n button = h(\n 'button',\n {\n type: 'button',\n class: `${options.buttonClass} ${options.color['default']}`,\n 'data-value': input.value,\n },\n `<span>${label.innerHTML}</span>`\n );\n }\n\n data(button, 'input', input);\n this.inputs.push(input);\n this.buttons.push(button);\n\n radio.style.display = 'none';\n\n // Prepare color schema\n let color = input.dataset.colorClass || '';\n\n if (!color) {\n switch (input.value) {\n case '':\n color = options.color.blue || '';\n break;\n\n case '0':\n color = options.color.red || '';\n break;\n\n default:\n color = options.color.green || '';\n break;\n }\n\n input.dataset.colorClass = color;\n }\n \n this.colors.push(color);\n\n if (input.disabled || input.getAttribute('readonly') != null) {\n button.classList.add('disabled');\n button.disabled = true;\n }\n\n if (input.getAttribute('readonly') != null) {\n button.classList.add('readonly');\n }\n\n // Bind event\n button.addEventListener('click', () => {\n if (input.getAttribute('disabled') || input.getAttribute('readonly')) {\n return;\n }\n\n const changed = !input.checked;\n\n if (changed) {\n this.inputs.forEach((ele) => {\n ele.checked = false;\n });\n\n input.checked = true;\n\n input.dispatchEvent(new Event('change'));\n input.dispatchEvent(new Event('input'));\n }\n });\n\n input.addEventListener('change', () => {\n this.syncState();\n });\n\n return button;\n }\n\n syncState() {\n const options = this.options;\n\n this.buttons.forEach((button) => {\n const input: HTMLInputElement = data(button, 'input');\n\n button.classList.add(...this.parseClasses(options.color.default || ''));\n button.classList.remove(...this.parseClasses(options.activeClass));\n button.classList.remove(...this.parseClasses(...this.colors));\n\n if (input.checked) {\n button.classList.add(...this.parseClasses(options.activeClass));\n button.classList.add(...this.parseClasses(input.dataset.colorClass || ''));\n button.classList.remove(...this.parseClasses(options.color.default || ''));\n }\n });\n }\n\n parseClasses(...className: string[]) {\n const classNameStr = className.join(' ');\n return classNameStr.split(' ').filter(t => t !== '');\n }\n}\n\nexport const ready = useUniDirective('button-radio', {\n mounted(el, { value }) {\n const options: ButtonRadioOptions = JSON.parse(value || '{}');\n ButtonRadio.handle(el, value || {});\n }\n});\n\nexport interface ButtonRadioModule {\n ButtonRadio: typeof ButtonRadio;\n ready: typeof ready;\n}\n"],"mappings":"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"}
|
|
@@ -1,44 +1,45 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
}
|
|
41
|
-
export {
|
|
42
|
-
CheckboxesMultiSelect
|
|
1
|
+
import { d as selectOne, u as selectAll } from "./dom.js";
|
|
2
|
+
//#region src/module/checkboxes-multi-select.ts
|
|
3
|
+
var CheckboxesMultiSelect = class {
|
|
4
|
+
defaultOptions = {
|
|
5
|
+
duration: 100,
|
|
6
|
+
inputSelector: "input[type=checkbox][data-role=grid-checkbox]"
|
|
7
|
+
};
|
|
8
|
+
$element;
|
|
9
|
+
options;
|
|
10
|
+
boxes;
|
|
11
|
+
last = false;
|
|
12
|
+
static handle(selector, options = {}) {
|
|
13
|
+
return selectAll(selector, (ele) => new this(ele, options));
|
|
14
|
+
}
|
|
15
|
+
constructor(selector, options = {}) {
|
|
16
|
+
this.$element = selectOne(selector);
|
|
17
|
+
this.options = Object.assign({}, this.defaultOptions, options);
|
|
18
|
+
this.boxes = Array.from(this.$element.querySelectorAll(this.options.inputSelector));
|
|
19
|
+
this.last = false;
|
|
20
|
+
selectAll(this.boxes, (box) => {
|
|
21
|
+
box.addEventListener("click", (e) => {
|
|
22
|
+
this.select(box, e);
|
|
23
|
+
});
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
select(box, event) {
|
|
27
|
+
if (!this.last) {
|
|
28
|
+
this.last = box;
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
if (event.shiftKey) {
|
|
32
|
+
const start = [].indexOf.call(this.boxes, box);
|
|
33
|
+
const end = [].indexOf.call(this.boxes, this.last);
|
|
34
|
+
const chs = [].slice.call(this.boxes, Math.min(start, end), Math.max(start, end) + 1);
|
|
35
|
+
[].forEach.call(chs, (ele, i) => {
|
|
36
|
+
ele.checked = this.last.checked;
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
this.last = box;
|
|
40
|
+
}
|
|
43
41
|
};
|
|
44
|
-
//#
|
|
42
|
+
//#endregion
|
|
43
|
+
export { CheckboxesMultiSelect };
|
|
44
|
+
|
|
45
|
+
//# sourceMappingURL=checkboxes-multi-select.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkboxes-multi-select.js","sources":["../../src/module/checkboxes-multi-select.ts"],"sourcesContent":["import { selectAll, selectOne } from '../service';\n\nexport class CheckboxesMultiSelect {\n defaultOptions = {\n duration: 100,\n inputSelector: 'input[type=checkbox][data-role=grid-checkbox]'\n }\n\n $element: HTMLElement;\n options: any;\n boxes: HTMLInputElement[];\n last: HTMLInputElement | false = false;\n\n static handle(selector: any, options: any = {}) {\n return selectAll(selector, (ele: any) => new this(ele, options));\n }\n\n constructor(selector: any, options = {}) {\n this.$element = selectOne<HTMLElement>(selector)!;\n this.options = Object.assign({}, this.defaultOptions, options);\n this.boxes = Array.from(this.$element.querySelectorAll(this.options.inputSelector));\n this.last = false;\n\n selectAll(this.boxes, (box: HTMLInputElement) => {\n box.addEventListener('click', (e: MouseEvent) => {\n this.select(box, e);\n });\n });\n }\n\n select(box: HTMLInputElement, event: MouseEvent) {\n if (!this.last) {\n this.last = box;\n\n return;\n }\n\n if (event.shiftKey) {\n // @ts-ignore\n const start = [].indexOf.call(this.boxes, box);\n\n // @ts-ignore\n const end = [].indexOf.call(this.boxes, this.last);\n\n const chs = [].slice.call(this.boxes, Math.min(start, end), Math.max(start, end) + 1);\n\n [].forEach.call(chs, (ele: HTMLInputElement, i) => {\n ele.checked = (this.last as HTMLInputElement).checked;\n });\n }\n\n this.last = box;\n }\n}\n"],"
|
|
1
|
+
{"version":3,"file":"checkboxes-multi-select.js","names":[],"sources":["../../src/module/checkboxes-multi-select.ts"],"sourcesContent":["import { selectAll, selectOne } from '../service';\n\nexport class CheckboxesMultiSelect {\n defaultOptions = {\n duration: 100,\n inputSelector: 'input[type=checkbox][data-role=grid-checkbox]'\n }\n\n $element: HTMLElement;\n options: any;\n boxes: HTMLInputElement[];\n last: HTMLInputElement | false = false;\n\n static handle(selector: any, options: any = {}) {\n return selectAll(selector, (ele: any) => new this(ele, options));\n }\n\n constructor(selector: any, options = {}) {\n this.$element = selectOne<HTMLElement>(selector)!;\n this.options = Object.assign({}, this.defaultOptions, options);\n this.boxes = Array.from(this.$element.querySelectorAll(this.options.inputSelector));\n this.last = false;\n\n selectAll(this.boxes, (box: HTMLInputElement) => {\n box.addEventListener('click', (e: MouseEvent) => {\n this.select(box, e);\n });\n });\n }\n\n select(box: HTMLInputElement, event: MouseEvent) {\n if (!this.last) {\n this.last = box;\n\n return;\n }\n\n if (event.shiftKey) {\n // @ts-ignore\n const start = [].indexOf.call(this.boxes, box);\n\n // @ts-ignore\n const end = [].indexOf.call(this.boxes, this.last);\n\n const chs = [].slice.call(this.boxes, Math.min(start, end), Math.max(start, end) + 1);\n\n [].forEach.call(chs, (ele: HTMLInputElement, i) => {\n ele.checked = (this.last as HTMLInputElement).checked;\n });\n }\n\n this.last = box;\n }\n}\n"],"mappings":";;AAEA,IAAa,wBAAb,MAAmC;CACjC,iBAAiB;EACf,UAAU;EACV,eAAe;EAChB;CAED;CACA;CACA;CACA,OAAiC;CAEjC,OAAO,OAAO,UAAe,UAAe,EAAE,EAAE;AAC9C,SAAO,UAAU,WAAW,QAAa,IAAI,KAAK,KAAK,QAAQ,CAAC;;CAGlE,YAAY,UAAe,UAAU,EAAE,EAAE;AACvC,OAAK,WAAW,UAAuB,SAAS;AAChD,OAAK,UAAU,OAAO,OAAO,EAAE,EAAE,KAAK,gBAAgB,QAAQ;AAC9D,OAAK,QAAQ,MAAM,KAAK,KAAK,SAAS,iBAAiB,KAAK,QAAQ,cAAc,CAAC;AACnF,OAAK,OAAO;AAEZ,YAAU,KAAK,QAAQ,QAA0B;AAC/C,OAAI,iBAAiB,UAAU,MAAkB;AAC/C,SAAK,OAAO,KAAK,EAAE;KACnB;IACF;;CAGJ,OAAO,KAAuB,OAAmB;AAC/C,MAAI,CAAC,KAAK,MAAM;AACd,QAAK,OAAO;AAEZ;;AAGF,MAAI,MAAM,UAAU;GAElB,MAAM,QAAQ,EAAE,CAAC,QAAQ,KAAK,KAAK,OAAO,IAAI;GAG9C,MAAM,MAAM,EAAE,CAAC,QAAQ,KAAK,KAAK,OAAO,KAAK,KAAK;GAElD,MAAM,MAAM,EAAE,CAAC,MAAM,KAAK,KAAK,OAAO,KAAK,IAAI,OAAO,IAAI,EAAE,KAAK,IAAI,OAAO,IAAI,GAAG,EAAE;AAErF,KAAE,CAAC,QAAQ,KAAK,MAAM,KAAuB,MAAM;AACjD,QAAI,UAAW,KAAK,KAA0B;KAC9C;;AAGJ,OAAK,OAAO"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
//#region \0rolldown/runtime.js
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __commonJSMin = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports);
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
|
|
11
|
+
key = keys[i];
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
|
|
13
|
+
get: ((k) => from[k]).bind(null, key),
|
|
14
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
return to;
|
|
18
|
+
};
|
|
19
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
|
|
20
|
+
value: mod,
|
|
21
|
+
enumerable: true
|
|
22
|
+
}) : target, mod));
|
|
23
|
+
//#endregion
|
|
24
|
+
export { __toESM as n, __commonJSMin as t };
|