@mmlogic/components 0.3.6 → 0.3.8
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/app-globals-V2Kpy_OQ.js +5 -0
- package/dist/cjs/index-BPj2cBXs.js +1570 -0
- package/dist/cjs/index.cjs.js +66 -0
- package/dist/cjs/loader.cjs.js +13 -0
- package/dist/cjs/mosterdcomponents.cjs.js +25 -0
- package/dist/cjs/mrd-boolean-field_20.cjs.entry.js +3961 -0
- package/dist/cjs/quill-DmFfnC1f.js +16272 -0
- package/dist/collection/collection-manifest.json +32 -0
- package/dist/collection/components/mrd-boolean-field/mrd-boolean-field.js +199 -0
- package/dist/collection/components/mrd-boolean-field/mrd-boolean-field.scss +77 -0
- package/dist/collection/components/mrd-currency-field/mrd-currency-field.js +248 -0
- package/dist/collection/components/mrd-currency-field/mrd-currency-field.scss +100 -0
- package/dist/collection/components/mrd-date-field/mrd-date-field.js +206 -0
- package/dist/collection/components/mrd-date-field/mrd-date-field.scss +66 -0
- package/dist/collection/components/mrd-datetime-field/mrd-datetime-field.js +240 -0
- package/dist/collection/components/mrd-datetime-field/mrd-datetime-field.scss +66 -0
- package/dist/collection/components/mrd-email-field/mrd-email-field.js +230 -0
- package/dist/collection/components/mrd-email-field/mrd-email-field.scss +69 -0
- package/dist/{mosterdcomponents/mrd-field.entry.js → collection/components/mrd-field/mrd-field.js} +179 -28
- package/dist/collection/components/mrd-field/mrd-field.scss +118 -0
- package/dist/collection/components/mrd-file-field/mrd-file-field.js +341 -0
- package/dist/collection/components/mrd-file-field/mrd-file-field.scss +153 -0
- package/dist/{mosterdcomponents/mrd-form.entry.js → collection/components/mrd-form/mrd-form.js} +308 -31
- package/dist/collection/components/mrd-form/mrd-form.scss +148 -0
- package/dist/collection/components/mrd-hyperlink-field/mrd-hyperlink-field.js +291 -0
- package/dist/collection/components/mrd-hyperlink-field/mrd-hyperlink-field.scss +91 -0
- package/dist/collection/components/mrd-image-field/mrd-image-field.js +356 -0
- package/dist/collection/components/mrd-image-field/mrd-image-field.scss +190 -0
- package/dist/{mosterdcomponents/mrd-layout-section.entry.js → collection/components/mrd-layout-section/mrd-layout-section.js} +420 -33
- package/dist/collection/components/mrd-layout-section/mrd-layout-section.scss +445 -0
- package/dist/collection/components/mrd-list-field/mrd-list-field.js +313 -0
- package/dist/collection/components/mrd-list-field/mrd-list-field.scss +109 -0
- package/dist/collection/components/mrd-longtext-field/mrd-longtext-field.js +227 -0
- package/dist/collection/components/mrd-longtext-field/mrd-longtext-field.scss +78 -0
- package/dist/collection/components/mrd-number-field/mrd-number-field.js +316 -0
- package/dist/collection/components/mrd-number-field/mrd-number-field.scss +77 -0
- package/dist/collection/components/mrd-relation-field/mrd-relation-field.js +707 -0
- package/dist/collection/components/mrd-relation-field/mrd-relation-field.scss +266 -0
- package/dist/collection/components/mrd-secret-field/mrd-secret-field.js +229 -0
- package/dist/collection/components/mrd-secret-field/mrd-secret-field.scss +73 -0
- package/dist/{mosterdcomponents/mrd-table.entry.js → collection/components/mrd-table/mrd-table.js} +394 -32
- package/dist/collection/components/mrd-table/mrd-table.scss +809 -0
- package/dist/collection/components/mrd-text-field/mrd-text-field.js +227 -0
- package/dist/collection/components/mrd-text-field/mrd-text-field.scss +69 -0
- package/dist/collection/components/mrd-textarea-field/mrd-textarea-field.js +267 -0
- package/dist/collection/components/mrd-textarea-field/mrd-textarea-field.scss +79 -0
- package/dist/collection/components/mrd-time-field/mrd-time-field.js +206 -0
- package/dist/collection/components/mrd-time-field/mrd-time-field.scss +66 -0
- package/dist/collection/dev/api.js +145 -0
- package/dist/collection/dev/app.js +890 -0
- package/dist/collection/dev/auth.js +156 -0
- package/dist/collection/dev/example-data.js +403 -0
- package/dist/collection/dev/sprites.svg +55 -0
- package/dist/collection/index.js +1 -0
- package/dist/collection/types/client-layout.js +64 -0
- package/dist/collection/types/index.js +1 -0
- package/dist/{mosterdcomponents/cell-renderer-CbRwLOo8.js → collection/utils/cell-renderer.js} +3 -9
- package/dist/{mosterdcomponents/format-BAfsQfy1.js → collection/utils/format.js} +7 -12
- package/dist/{mosterdcomponents/i18n-hoGGKbKU.js → collection/utils/i18n.js} +1 -6
- package/dist/{mosterdcomponents/validation-ixb43cqU.js → collection/utils/validation.js} +5 -12
- package/dist/components/client-layout.js +1 -0
- package/dist/components/format.js +1 -0
- package/dist/components/i18n.js +1 -0
- package/dist/components/index.js +1 -0
- package/dist/components/mrd-boolean-field.js +1 -0
- package/dist/components/mrd-boolean-field2.js +1 -0
- package/dist/components/mrd-currency-field.js +1 -0
- package/dist/components/mrd-currency-field2.js +1 -0
- package/dist/components/mrd-date-field.js +1 -0
- package/dist/components/mrd-date-field2.js +1 -0
- package/dist/components/mrd-datetime-field.js +1 -0
- package/dist/components/mrd-datetime-field2.js +1 -0
- package/dist/components/mrd-email-field.js +1 -0
- package/dist/components/mrd-email-field2.js +1 -0
- package/dist/components/mrd-field.js +1 -0
- package/dist/components/mrd-field2.js +1 -0
- package/dist/components/mrd-file-field.js +1 -0
- package/dist/components/mrd-file-field2.js +1 -0
- package/dist/components/mrd-form.js +1 -0
- package/dist/components/mrd-hyperlink-field.js +1 -0
- package/dist/components/mrd-hyperlink-field2.js +1 -0
- package/dist/components/mrd-image-field.js +1 -0
- package/dist/components/mrd-image-field2.js +1 -0
- package/dist/components/mrd-layout-section.js +1 -0
- package/dist/components/mrd-list-field.js +1 -0
- package/dist/components/mrd-list-field2.js +1 -0
- package/dist/components/mrd-longtext-field.js +1 -0
- package/dist/components/mrd-longtext-field2.js +1 -0
- package/dist/components/mrd-number-field.js +1 -0
- package/dist/components/mrd-number-field2.js +1 -0
- package/dist/components/mrd-relation-field.js +1 -0
- package/dist/components/mrd-relation-field2.js +1 -0
- package/dist/components/mrd-secret-field.js +1 -0
- package/dist/components/mrd-secret-field2.js +1 -0
- package/dist/components/mrd-table.js +1 -0
- package/dist/components/mrd-table2.js +1 -0
- package/dist/components/mrd-text-field.js +1 -0
- package/dist/components/mrd-text-field2.js +1 -0
- package/dist/components/mrd-textarea-field.js +1 -0
- package/dist/components/mrd-textarea-field2.js +1 -0
- package/dist/components/mrd-time-field.js +1 -0
- package/dist/components/mrd-time-field2.js +1 -0
- package/dist/components/quill.js +1 -0
- package/dist/components/validation.js +1 -0
- package/dist/esm/app-globals-DQuL1Twl.js +3 -0
- package/dist/esm/index-_tsCCkAi.js +1561 -0
- package/dist/{mosterdcomponents/client-layout-D88nn5zf.js → esm/index.js} +1 -4
- package/dist/esm/loader.js +11 -0
- package/dist/esm/mosterdcomponents.js +21 -0
- package/dist/esm/mrd-boolean-field_20.entry.js +3940 -0
- package/dist/{mosterdcomponents/quill-C9pgw_k-.js → esm/quill-CiuCgGz_.js} +1347 -16232
- package/dist/index.cjs.js +1 -0
- package/dist/index.js +1 -0
- package/dist/mosterdcomponents/index-6yQUNVww.js.map +1 -0
- package/dist/mosterdcomponents/index.esm.js +1 -5
- package/dist/mosterdcomponents/mosterdcomponents.css +1 -180
- package/dist/mosterdcomponents/mosterdcomponents.esm.js +1 -50
- package/dist/mosterdcomponents/p-7bfaee51.entry.js +1 -0
- package/dist/mosterdcomponents/p-CiuCgGz_.js +1 -0
- package/dist/mosterdcomponents/p-DQuL1Twl.js +1 -0
- package/dist/mosterdcomponents/p-_tsCCkAi.js +2 -0
- package/package.json +1 -1
- package/dist/mosterdcomponents/index-B_tPFIvS.js +0 -4585
- package/dist/mosterdcomponents/index-B_tPFIvS.js.map +0 -1
- package/dist/mosterdcomponents/index-I5SuYv7a.js +0 -4
- package/dist/mosterdcomponents/mrd-boolean-field.entry.js +0 -37
- package/dist/mosterdcomponents/mrd-boolean-field.entry.js.map +0 -1
- package/dist/mosterdcomponents/mrd-currency-field.entry.js +0 -67
- package/dist/mosterdcomponents/mrd-currency-field.entry.js.map +0 -1
- package/dist/mosterdcomponents/mrd-date-field.entry.js +0 -46
- package/dist/mosterdcomponents/mrd-date-field.entry.js.map +0 -1
- package/dist/mosterdcomponents/mrd-datetime-field.entry.js +0 -78
- package/dist/mosterdcomponents/mrd-datetime-field.entry.js.map +0 -1
- package/dist/mosterdcomponents/mrd-email-field.entry.js +0 -50
- package/dist/mosterdcomponents/mrd-email-field.entry.js.map +0 -1
- package/dist/mosterdcomponents/mrd-field.entry.js.map +0 -1
- package/dist/mosterdcomponents/mrd-file-field.entry.js +0 -108
- package/dist/mosterdcomponents/mrd-file-field.entry.js.map +0 -1
- package/dist/mosterdcomponents/mrd-form.entry.js.map +0 -1
- package/dist/mosterdcomponents/mrd-hyperlink-field.entry.js +0 -87
- package/dist/mosterdcomponents/mrd-hyperlink-field.entry.js.map +0 -1
- package/dist/mosterdcomponents/mrd-image-field.entry.js +0 -122
- package/dist/mosterdcomponents/mrd-image-field.entry.js.map +0 -1
- package/dist/mosterdcomponents/mrd-layout-section.entry.js.map +0 -1
- package/dist/mosterdcomponents/mrd-list-field.entry.js +0 -107
- package/dist/mosterdcomponents/mrd-list-field.entry.js.map +0 -1
- package/dist/mosterdcomponents/mrd-longtext-field.entry.js +0 -47
- package/dist/mosterdcomponents/mrd-longtext-field.entry.js.map +0 -1
- package/dist/mosterdcomponents/mrd-number-field.entry.js +0 -87
- package/dist/mosterdcomponents/mrd-number-field.entry.js.map +0 -1
- package/dist/mosterdcomponents/mrd-relation-field.entry.js +0 -267
- package/dist/mosterdcomponents/mrd-relation-field.entry.js.map +0 -1
- package/dist/mosterdcomponents/mrd-secret-field.entry.js +0 -49
- package/dist/mosterdcomponents/mrd-secret-field.entry.js.map +0 -1
- package/dist/mosterdcomponents/mrd-table.entry.js.map +0 -1
- package/dist/mosterdcomponents/mrd-text-field.entry.js +0 -47
- package/dist/mosterdcomponents/mrd-text-field.entry.js.map +0 -1
- package/dist/mosterdcomponents/mrd-textarea-field.entry.js +0 -86
- package/dist/mosterdcomponents/mrd-textarea-field.entry.js.map +0 -1
- package/dist/mosterdcomponents/mrd-time-field.entry.js +0 -46
- package/dist/mosterdcomponents/mrd-time-field.entry.js.map +0 -1
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
import { r as registerInstance, a as createEvent, h, d as Host } from './index-B_tPFIvS.js';
|
|
2
|
-
import { t } from './i18n-hoGGKbKU.js';
|
|
3
|
-
import { v as validateRequired } from './validation-ixb43cqU.js';
|
|
4
|
-
import './index-I5SuYv7a.js';
|
|
5
|
-
import './client-layout-D88nn5zf.js';
|
|
6
|
-
|
|
7
|
-
const mrdListFieldScss = () => `.sc-mrd-list-field-h{display:block}.mrd-list-field.sc-mrd-list-field{display:flex;flex-direction:column;gap:var(--mrd-space-1);width:100%}.mrd-list-field__label.sc-mrd-list-field{display:block;font-family:var(--mrd-font-family);font-size:var(--mrd-label-font-size);font-weight:var(--mrd-label-font-weight);color:var(--mrd-label-color)}.mrd-list-field__label--required.sc-mrd-list-field::after{content:' *';color:var(--mrd-color-danger)}.mrd-list-field__select.sc-mrd-list-field{display:block;width:100%;height:var(--mrd-input-height);padding:var(--mrd-input-padding-y) var(--mrd-input-padding-x);padding-right:calc(var(--mrd-input-padding-x) + 1.5rem);font-family:var(--mrd-font-family);font-size:var(--mrd-font-size-base);color:var(--mrd-input-color);background-color:var(--mrd-input-bg);background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%236b7280' stroke-width='2'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right var(--mrd-space-3) center;border:var(--mrd-border-width) solid var(--mrd-border-color);border-radius:var(--mrd-border-radius);transition:border-color var(--mrd-transition), box-shadow var(--mrd-transition);outline:none;appearance:none;cursor:pointer;box-sizing:border-box}.mrd-list-field__select.sc-mrd-list-field:focus{border-color:var(--mrd-border-color-focus);box-shadow:var(--mrd-shadow-focus)}.mrd-list-field__select.sc-mrd-list-field:disabled{background-color:var(--mrd-input-bg-disabled);cursor:not-allowed;opacity:0.7}.mrd-list-field__select--error.sc-mrd-list-field{border-color:var(--mrd-border-color-error)}.mrd-list-field__select--error.sc-mrd-list-field:focus{box-shadow:var(--mrd-shadow-focus-error)}.mrd-list-field__checkbox-list.sc-mrd-list-field{display:flex;flex-direction:column;gap:var(--mrd-space-2);padding:var(--mrd-space-3);border:var(--mrd-border-width) solid var(--mrd-border-color);border-radius:var(--mrd-border-radius);background-color:var(--mrd-input-bg)}.mrd-list-field__checkbox-list--error.sc-mrd-list-field{border-color:var(--mrd-border-color-error)}.mrd-list-field__checkbox-item.sc-mrd-list-field{display:flex;align-items:center;gap:var(--mrd-space-2);font-family:var(--mrd-font-family);font-size:var(--mrd-font-size-base);color:var(--mrd-input-color);cursor:pointer}.mrd-list-field__checkbox-item.sc-mrd-list-field input[type='checkbox'].sc-mrd-list-field{width:1rem;height:1rem;cursor:pointer;accent-color:var(--mrd-color-primary)}.mrd-list-field__color-dot.sc-mrd-list-field{display:inline-block;width:12px;height:12px;border-radius:50%;flex-shrink:0}.mrd-list-field__error.sc-mrd-list-field{font-family:var(--mrd-font-family);font-size:var(--mrd-error-font-size);color:var(--mrd-error-color)}`;
|
|
8
|
-
|
|
9
|
-
const MrdListField = class {
|
|
10
|
-
constructor(hostRef) {
|
|
11
|
-
registerInstance(this, hostRef);
|
|
12
|
-
this.mrdChange = createEvent(this, "mrdChange", 7);
|
|
13
|
-
this.mrdBlur = createEvent(this, "mrdBlur", 7);
|
|
14
|
-
this.name = '';
|
|
15
|
-
this.label = '';
|
|
16
|
-
this.value = '';
|
|
17
|
-
this.required = false;
|
|
18
|
-
this.disabled = false;
|
|
19
|
-
this.multiple = false;
|
|
20
|
-
this.locale = navigator.language;
|
|
21
|
-
/** List items from the API. Each item has a `key` (stored value) and `label`. */
|
|
22
|
-
this.listItems = [];
|
|
23
|
-
this.error = '';
|
|
24
|
-
this.selected = [];
|
|
25
|
-
this.handleSelectChange = (e) => {
|
|
26
|
-
const select = e.target;
|
|
27
|
-
if (this.multiple) {
|
|
28
|
-
const vals = Array.from(select.selectedOptions).map(o => o.value);
|
|
29
|
-
this.selected = vals;
|
|
30
|
-
if (this.required && !validateRequired(vals)) {
|
|
31
|
-
this.error = t('required', this.locale);
|
|
32
|
-
}
|
|
33
|
-
else {
|
|
34
|
-
this.error = '';
|
|
35
|
-
}
|
|
36
|
-
this.mrdChange.emit({ name: this.name, value: vals });
|
|
37
|
-
}
|
|
38
|
-
else {
|
|
39
|
-
const val = select.value;
|
|
40
|
-
if (this.required && !validateRequired(val)) {
|
|
41
|
-
this.error = t('required', this.locale);
|
|
42
|
-
}
|
|
43
|
-
else {
|
|
44
|
-
this.error = '';
|
|
45
|
-
}
|
|
46
|
-
this.mrdChange.emit({ name: this.name, value: val });
|
|
47
|
-
}
|
|
48
|
-
};
|
|
49
|
-
this.handleBlur = () => {
|
|
50
|
-
const val = this.multiple ? this.selected : this.value;
|
|
51
|
-
this.mrdBlur.emit({ name: this.name, value: val });
|
|
52
|
-
};
|
|
53
|
-
this.toggleCheckbox = (key) => {
|
|
54
|
-
if (this.selected.includes(key)) {
|
|
55
|
-
this.selected = this.selected.filter(v => v !== key);
|
|
56
|
-
}
|
|
57
|
-
else {
|
|
58
|
-
this.selected = [...this.selected, key];
|
|
59
|
-
}
|
|
60
|
-
if (this.required && !validateRequired(this.selected)) {
|
|
61
|
-
this.error = t('required', this.locale);
|
|
62
|
-
}
|
|
63
|
-
else {
|
|
64
|
-
this.error = '';
|
|
65
|
-
}
|
|
66
|
-
this.mrdChange.emit({ name: this.name, value: this.selected });
|
|
67
|
-
};
|
|
68
|
-
}
|
|
69
|
-
componentWillLoad() {
|
|
70
|
-
if (this.multiple) {
|
|
71
|
-
this.selected = Array.isArray(this.value) ? this.value : this.value ? [this.value] : [];
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
getContrastColor(bgColor) {
|
|
75
|
-
if (!bgColor)
|
|
76
|
-
return '#000000';
|
|
77
|
-
const hex = bgColor.replace('#', '');
|
|
78
|
-
const r = parseInt(hex.substr(0, 2), 16);
|
|
79
|
-
const g = parseInt(hex.substr(2, 2), 16);
|
|
80
|
-
const b = parseInt(hex.substr(4, 2), 16);
|
|
81
|
-
const luminance = (0.299 * r + 0.587 * g + 0.114 * b) / 255;
|
|
82
|
-
return luminance > 0.5 ? '#000000' : '#ffffff';
|
|
83
|
-
}
|
|
84
|
-
render() {
|
|
85
|
-
var _a, _b;
|
|
86
|
-
const hasError = !!this.error;
|
|
87
|
-
const currentValue = Array.isArray(this.value) ? ((_a = this.value[0]) !== null && _a !== void 0 ? _a : '') : ((_b = this.value) !== null && _b !== void 0 ? _b : '');
|
|
88
|
-
if (this.multiple) {
|
|
89
|
-
return (h(Host, null, h("div", { class: "mrd-list-field" }, this.label && (h("label", { class: `mrd-list-field__label${this.required ? ' mrd-list-field__label--required' : ''}` }, this.label)), h("div", { class: `mrd-list-field__checkbox-list${hasError ? ' mrd-list-field__checkbox-list--error' : ''}` }, this.listItems.map(lv => {
|
|
90
|
-
var _a, _b;
|
|
91
|
-
return (h("label", { key: lv.key, class: "mrd-list-field__checkbox-item" }, h("input", { type: "checkbox", checked: this.selected.includes(lv.key), disabled: this.disabled, onChange: () => this.toggleCheckbox(lv.key) }), (lv.color || lv.backgroundColor) && (h("span", { class: "mrd-list-field__color-dot", style: { backgroundColor: (_b = (_a = lv.backgroundColor) !== null && _a !== void 0 ? _a : lv.color) !== null && _b !== void 0 ? _b : '' } })), h("span", null, lv.label)));
|
|
92
|
-
})), hasError && h("span", { class: "mrd-list-field__error" }, this.error))));
|
|
93
|
-
}
|
|
94
|
-
return (h(Host, null, h("div", { class: "mrd-list-field" }, this.label && (h("label", { class: `mrd-list-field__label${this.required ? ' mrd-list-field__label--required' : ''}` }, this.label)), h("select", { class: `mrd-list-field__select${hasError ? ' mrd-list-field__select--error' : ''}`, name: this.name, required: this.required, disabled: this.disabled, onChange: this.handleSelectChange, onBlur: this.handleBlur }, h("option", { value: "" }, t('select_placeholder', this.locale)), this.listItems.map(lv => {
|
|
95
|
-
var _a, _b;
|
|
96
|
-
const bg = (_b = (_a = lv.backgroundColor) !== null && _a !== void 0 ? _a : lv.color) !== null && _b !== void 0 ? _b : null;
|
|
97
|
-
const style = bg ? { backgroundColor: bg, color: this.getContrastColor(bg) } : {};
|
|
98
|
-
return (h("option", { key: lv.key, value: lv.key, selected: lv.key === currentValue, style: style }, lv.label));
|
|
99
|
-
})), hasError && h("span", { class: "mrd-list-field__error" }, this.error))));
|
|
100
|
-
}
|
|
101
|
-
};
|
|
102
|
-
MrdListField.style = mrdListFieldScss();
|
|
103
|
-
|
|
104
|
-
export { MrdListField as mrd_list_field };
|
|
105
|
-
//# sourceMappingURL=mrd-list-field.entry.esm.js.map
|
|
106
|
-
|
|
107
|
-
//# sourceMappingURL=mrd-list-field.entry.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"file":"mrd-list-field.entry.js","mappings":";;;;;;AAAA,MAAM,gBAAgB,GAAG,MAAM,CAAC,wuFAAwuF,CAAC;;MCU5vF,YAAY,GAAA,MAAA;AALzB,IAAA,WAAA,CAAA,OAAA,EAAA;;;;AAMU,QAAA,IAAA,CAAA,IAAI,GAAW,EAAE;AACjB,QAAA,IAAA,CAAA,KAAK,GAAW,EAAE;AAClB,QAAA,IAAA,CAAA,KAAK,GAAsB,EAAE;AAC7B,QAAA,IAAA,CAAA,QAAQ,GAAY,KAAK;AACzB,QAAA,IAAA,CAAA,QAAQ,GAAY,KAAK;AACzB,QAAA,IAAA,CAAA,QAAQ,GAAY,KAAK;AACzB,QAAA,IAAA,CAAA,MAAM,GAAW,SAAS,CAAC,QAAQ;;AAEnC,QAAA,IAAA,CAAA,SAAS,GAAsB,EAAE;AAEhC,QAAA,IAAA,CAAA,KAAK,GAAW,EAAE;AAClB,QAAA,IAAA,CAAA,QAAQ,GAAa,EAAE;AAWxB,QAAA,IAAA,CAAA,kBAAkB,GAAG,CAAC,CAAQ,KAAI;AACxC,YAAA,MAAM,MAAM,GAAG,CAAC,CAAC,MAA2B;AAC5C,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACjB,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC;AACjE,gBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;gBACpB,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE;oBAC5C,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC;;qBAClC;AACL,oBAAA,IAAI,CAAC,KAAK,GAAG,EAAE;;AAEjB,gBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;;iBAChD;AACL,gBAAA,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK;gBACxB,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE;oBAC3C,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC;;qBAClC;AACL,oBAAA,IAAI,CAAC,KAAK,GAAG,EAAE;;AAEjB,gBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;;AAExD,SAAC;AAEO,QAAA,IAAA,CAAA,UAAU,GAAG,MAAK;AACxB,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,GAAI,IAAI,CAAC,KAAgB;AAClE,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;AACpD,SAAC;AAEO,QAAA,IAAA,CAAA,cAAc,GAAG,CAAC,GAAW,KAAI;YACvC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AAC/B,gBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC;;iBAC/C;gBACL,IAAI,CAAC,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC;;AAEzC,YAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;gBACrD,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC;;iBAClC;AACL,gBAAA,IAAI,CAAC,KAAK,GAAG,EAAE;;AAEjB,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;AAChE,SAAC;AAuFF;IApIC,iBAAiB,GAAA;AACf,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,YAAA,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,KAAe,CAAC,GAAG,EAAE;;;AA6C7F,IAAA,gBAAgB,CAAC,OAAe,EAAA;AACtC,QAAA,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,SAAS;QAC9B,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC;AACpC,QAAA,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;AACxC,QAAA,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;AACxC,QAAA,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;AACxC,QAAA,MAAM,SAAS,GAAG,CAAC,KAAK,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,IAAI,GAAG;QAC3D,OAAO,SAAS,GAAG,GAAG,GAAG,SAAS,GAAG,SAAS;;IAGhD,MAAM,GAAA;;AACJ,QAAA,MAAM,QAAQ,GAAM,CAAC,CAAC,IAAI,CAAC,KAAK;AAChC,QAAA,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,MAAA,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,EAAE,KAAK,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,EAAE,CAAC;AAE3F,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,YAAA,QACE,EAAC,IAAI,EAAA,IAAA,EACH,CAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAC,gBAAgB,EAAA,EACxB,IAAI,CAAC,KAAK,KACT,CAAA,CAAA,OAAA,EAAA,EAAO,KAAK,EAAE,CAAA,qBAAA,EAAwB,IAAI,CAAC,QAAQ,GAAG,kCAAkC,GAAG,EAAE,EAAE,EAAA,EAC5F,IAAI,CAAC,KAAK,CACL,CACT,EACD,CAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,CAAA,6BAAA,EAAgC,QAAQ,GAAG,uCAAuC,GAAG,EAAE,CAAA,CAAE,EAAA,EAClG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,IAAG;;AAAC,gBAAA,QACxB,CAAA,CAAA,OAAA,EAAA,EAAO,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,KAAK,EAAC,+BAA+B,EAAA,EACvD,CAAA,CAAA,OAAA,EAAA,EACE,IAAI,EAAC,UAAU,EACf,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,EACvC,QAAQ,EAAE,IAAI,CAAC,QAAQ,EACvB,QAAQ,EAAE,MAAM,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,GAAG,CAAC,EAAA,CAC3C,EACD,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,eAAe,MAC9B,CAAA,CAAA,MAAA,EAAA,EACE,KAAK,EAAC,2BAA2B,EACjC,KAAK,EAAE,EAAE,eAAe,EAAE,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,EAAE,CAAC,eAAe,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,EAAE,CAAC,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,EAAE,EAAE,GAC1D,CACT,EACD,CAAA,CAAA,MAAA,EAAA,IAAA,EAAO,EAAE,CAAC,KAAK,CAAQ,CACjB;aACT,CAAC,CACE,EACL,QAAQ,IAAI,CAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAC,uBAAuB,EAAA,EAAE,IAAI,CAAC,KAAK,CAAQ,CAChE,CACD;;AAIX,QAAA,QACE,EAAC,IAAI,EAAA,IAAA,EACH,CAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAC,gBAAgB,EAAA,EACxB,IAAI,CAAC,KAAK,KACT,CAAA,CAAA,OAAA,EAAA,EAAO,KAAK,EAAE,CAAA,qBAAA,EAAwB,IAAI,CAAC,QAAQ,GAAG,kCAAkC,GAAG,EAAE,CAAA,CAAE,EAAA,EAC5F,IAAI,CAAC,KAAK,CACL,CACT,EACD,CAAA,CAAA,QAAA,EAAA,EACE,KAAK,EAAE,CAAA,sBAAA,EAAyB,QAAQ,GAAG,gCAAgC,GAAG,EAAE,CAAA,CAAE,EAClF,IAAI,EAAE,IAAI,CAAC,IAAI,EACf,QAAQ,EAAE,IAAI,CAAC,QAAQ,EACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ,EACvB,QAAQ,EAAE,IAAI,CAAC,kBAAkB,EACjC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAA,EAEvB,CAAA,CAAA,QAAA,EAAA,EAAQ,KAAK,EAAC,EAAE,EAAA,EAAE,CAAC,CAAC,oBAAoB,EAAE,IAAI,CAAC,MAAM,CAAC,CAAU,EAC/D,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,IAAG;;YACvB,MAAM,EAAE,GAAM,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,EAAE,CAAC,eAAe,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,EAAE,CAAC,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,IAAI;YACpD,MAAM,KAAK,GAAG,EAAE,GAAG,EAAE,eAAe,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE;AACjF,YAAA,QACE,CAAA,CAAA,QAAA,EAAA,EACE,GAAG,EAAE,EAAE,CAAC,GAAG,EACX,KAAK,EAAE,EAAE,CAAC,GAAG,EACb,QAAQ,EAAE,EAAE,CAAC,GAAG,KAAK,YAAY,EACjC,KAAK,EAAE,KAAK,EAAA,EAEX,EAAE,CAAC,KAAK,CACF;SAEZ,CAAC,CACK,EACR,QAAQ,IAAI,CAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAC,uBAAuB,EAAA,EAAE,IAAI,CAAC,KAAK,CAAQ,CAChE,CACD;;;;;;;","names":[],"sources":["src/components/mrd-list-field/mrd-list-field.scss?tag=mrd-list-field&encapsulation=scoped","src/components/mrd-list-field/mrd-list-field.tsx"],"sourcesContent":[":host {\n display: block;\n}\n\n.mrd-list-field {\n display: flex;\n flex-direction: column;\n gap: var(--mrd-space-1);\n width: 100%;\n}\n\n.mrd-list-field__label {\n display: block;\n font-family: var(--mrd-font-family);\n font-size: var(--mrd-label-font-size);\n font-weight: var(--mrd-label-font-weight);\n color: var(--mrd-label-color);\n}\n\n.mrd-list-field__label--required::after {\n content: ' *';\n color: var(--mrd-color-danger);\n}\n\n.mrd-list-field__select {\n display: block;\n width: 100%;\n height: var(--mrd-input-height);\n padding: var(--mrd-input-padding-y) var(--mrd-input-padding-x);\n padding-right: calc(var(--mrd-input-padding-x) + 1.5rem);\n font-family: var(--mrd-font-family);\n font-size: var(--mrd-font-size-base);\n color: var(--mrd-input-color);\n background-color: var(--mrd-input-bg);\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%236b7280' stroke-width='2'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E\");\n background-repeat: no-repeat;\n background-position: right var(--mrd-space-3) center;\n border: var(--mrd-border-width) solid var(--mrd-border-color);\n border-radius: var(--mrd-border-radius);\n transition: border-color var(--mrd-transition), box-shadow var(--mrd-transition);\n outline: none;\n appearance: none;\n cursor: pointer;\n box-sizing: border-box;\n}\n\n.mrd-list-field__select:focus {\n border-color: var(--mrd-border-color-focus);\n box-shadow: var(--mrd-shadow-focus);\n}\n\n.mrd-list-field__select:disabled {\n background-color: var(--mrd-input-bg-disabled);\n cursor: not-allowed;\n opacity: 0.7;\n}\n\n.mrd-list-field__select--error {\n border-color: var(--mrd-border-color-error);\n}\n\n.mrd-list-field__select--error:focus {\n box-shadow: var(--mrd-shadow-focus-error);\n}\n\n.mrd-list-field__checkbox-list {\n display: flex;\n flex-direction: column;\n gap: var(--mrd-space-2);\n padding: var(--mrd-space-3);\n border: var(--mrd-border-width) solid var(--mrd-border-color);\n border-radius: var(--mrd-border-radius);\n background-color: var(--mrd-input-bg);\n}\n\n.mrd-list-field__checkbox-list--error {\n border-color: var(--mrd-border-color-error);\n}\n\n.mrd-list-field__checkbox-item {\n display: flex;\n align-items: center;\n gap: var(--mrd-space-2);\n font-family: var(--mrd-font-family);\n font-size: var(--mrd-font-size-base);\n color: var(--mrd-input-color);\n cursor: pointer;\n}\n\n.mrd-list-field__checkbox-item input[type='checkbox'] {\n width: 1rem;\n height: 1rem;\n cursor: pointer;\n accent-color: var(--mrd-color-primary);\n}\n\n.mrd-list-field__color-dot {\n display: inline-block;\n width: 12px;\n height: 12px;\n border-radius: 50%;\n flex-shrink: 0;\n}\n\n.mrd-list-field__error {\n font-family: var(--mrd-font-family);\n font-size: var(--mrd-error-font-size);\n color: var(--mrd-error-color);\n}\n","import { Component, Host, h, Prop, State, Event, EventEmitter } from '@stencil/core';\nimport { t } from '../../utils/i18n';\nimport { validateRequired } from '../../utils/validation';\nimport { ClientListValue } from '../../types';\n\n@Component({\n tag: 'mrd-list-field',\n styleUrl: 'mrd-list-field.scss',\n scoped: true,\n})\nexport class MrdListField {\n @Prop() name: string = '';\n @Prop() label: string = '';\n @Prop() value: string | string[] = '';\n @Prop() required: boolean = false;\n @Prop() disabled: boolean = false;\n @Prop() multiple: boolean = false;\n @Prop() locale: string = navigator.language;\n /** List items from the API. Each item has a `key` (stored value) and `label`. */\n @Prop() listItems: ClientListValue[] = [];\n\n @State() error: string = '';\n @State() selected: string[] = [];\n\n @Event() mrdChange!: EventEmitter<{ name: string; value: string | string[] }>;\n @Event() mrdBlur!: EventEmitter<{ name: string; value: string | string[] }>;\n\n componentWillLoad() {\n if (this.multiple) {\n this.selected = Array.isArray(this.value) ? this.value : this.value ? [this.value as string] : [];\n }\n }\n\n private handleSelectChange = (e: Event) => {\n const select = e.target as HTMLSelectElement;\n if (this.multiple) {\n const vals = Array.from(select.selectedOptions).map(o => o.value);\n this.selected = vals;\n if (this.required && !validateRequired(vals)) {\n this.error = t('required', this.locale);\n } else {\n this.error = '';\n }\n this.mrdChange.emit({ name: this.name, value: vals });\n } else {\n const val = select.value;\n if (this.required && !validateRequired(val)) {\n this.error = t('required', this.locale);\n } else {\n this.error = '';\n }\n this.mrdChange.emit({ name: this.name, value: val });\n }\n };\n\n private handleBlur = () => {\n const val = this.multiple ? this.selected : (this.value as string);\n this.mrdBlur.emit({ name: this.name, value: val });\n };\n\n private toggleCheckbox = (key: string) => {\n if (this.selected.includes(key)) {\n this.selected = this.selected.filter(v => v !== key);\n } else {\n this.selected = [...this.selected, key];\n }\n if (this.required && !validateRequired(this.selected)) {\n this.error = t('required', this.locale);\n } else {\n this.error = '';\n }\n this.mrdChange.emit({ name: this.name, value: this.selected });\n };\n\n private getContrastColor(bgColor: string): string {\n if (!bgColor) return '#000000';\n const hex = bgColor.replace('#', '');\n const r = parseInt(hex.substr(0, 2), 16);\n const g = parseInt(hex.substr(2, 2), 16);\n const b = parseInt(hex.substr(4, 2), 16);\n const luminance = (0.299 * r + 0.587 * g + 0.114 * b) / 255;\n return luminance > 0.5 ? '#000000' : '#ffffff';\n }\n\n render() {\n const hasError = !!this.error;\n const currentValue = Array.isArray(this.value) ? (this.value[0] ?? '') : (this.value ?? '');\n\n if (this.multiple) {\n return (\n <Host>\n <div class=\"mrd-list-field\">\n {this.label && (\n <label class={`mrd-list-field__label${this.required ? ' mrd-list-field__label--required' : ''}`}>\n {this.label}\n </label>\n )}\n <div class={`mrd-list-field__checkbox-list${hasError ? ' mrd-list-field__checkbox-list--error' : ''}`}>\n {this.listItems.map(lv => (\n <label key={lv.key} class=\"mrd-list-field__checkbox-item\">\n <input\n type=\"checkbox\"\n checked={this.selected.includes(lv.key)}\n disabled={this.disabled}\n onChange={() => this.toggleCheckbox(lv.key)}\n />\n {(lv.color || lv.backgroundColor) && (\n <span\n class=\"mrd-list-field__color-dot\"\n style={{ backgroundColor: lv.backgroundColor ?? lv.color ?? '' }}\n ></span>\n )}\n <span>{lv.label}</span>\n </label>\n ))}\n </div>\n {hasError && <span class=\"mrd-list-field__error\">{this.error}</span>}\n </div>\n </Host>\n );\n }\n\n return (\n <Host>\n <div class=\"mrd-list-field\">\n {this.label && (\n <label class={`mrd-list-field__label${this.required ? ' mrd-list-field__label--required' : ''}`}>\n {this.label}\n </label>\n )}\n <select\n class={`mrd-list-field__select${hasError ? ' mrd-list-field__select--error' : ''}`}\n name={this.name}\n required={this.required}\n disabled={this.disabled}\n onChange={this.handleSelectChange}\n onBlur={this.handleBlur}\n >\n <option value=\"\">{t('select_placeholder', this.locale)}</option>\n {this.listItems.map(lv => {\n const bg = lv.backgroundColor ?? lv.color ?? null;\n const style = bg ? { backgroundColor: bg, color: this.getContrastColor(bg) } : {};\n return (\n <option\n key={lv.key}\n value={lv.key}\n selected={lv.key === currentValue}\n style={style}\n >\n {lv.label}\n </option>\n );\n })}\n </select>\n {hasError && <span class=\"mrd-list-field__error\">{this.error}</span>}\n </div>\n </Host>\n );\n }\n}\n"],"version":3}
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
import { r as registerInstance, a as createEvent, h, d as Host } from './index-B_tPFIvS.js';
|
|
2
|
-
import { t } from './i18n-hoGGKbKU.js';
|
|
3
|
-
import { v as validateRequired } from './validation-ixb43cqU.js';
|
|
4
|
-
import './index-I5SuYv7a.js';
|
|
5
|
-
import './client-layout-D88nn5zf.js';
|
|
6
|
-
|
|
7
|
-
const mrdLongtextFieldScss = () => `.sc-mrd-longtext-field-h{display:block}.mrd-longtext-field.sc-mrd-longtext-field{display:flex;flex-direction:column;gap:var(--mrd-space-1);width:100%}.mrd-longtext-field__label.sc-mrd-longtext-field{display:block;font-family:var(--mrd-font-family);font-size:var(--mrd-label-font-size);font-weight:var(--mrd-label-font-weight);color:var(--mrd-label-color)}.mrd-longtext-field__label--required.sc-mrd-longtext-field::after{content:' *';color:var(--mrd-color-danger)}.mrd-longtext-field__input.sc-mrd-longtext-field{display:block;width:100%;min-height:calc(var(--mrd-input-height) * 5);padding:var(--mrd-input-padding-y) var(--mrd-input-padding-x);font-family:var(--mrd-font-family);font-size:var(--mrd-font-size-base);color:var(--mrd-input-color);background-color:var(--mrd-input-bg);border:var(--mrd-border-width) solid var(--mrd-border-color);border-radius:var(--mrd-border-radius);transition:border-color var(--mrd-transition), box-shadow var(--mrd-transition);outline:none;resize:vertical;box-sizing:border-box;line-height:1.5}.mrd-longtext-field__input.sc-mrd-longtext-field::placeholder{color:var(--mrd-input-placeholder-color)}.mrd-longtext-field__input.sc-mrd-longtext-field:focus{border-color:var(--mrd-border-color-focus);box-shadow:var(--mrd-shadow-focus)}.mrd-longtext-field__input--error.sc-mrd-longtext-field{border-color:var(--mrd-border-color-error)}.mrd-longtext-field__input--error.sc-mrd-longtext-field:focus{box-shadow:var(--mrd-shadow-focus-error)}.mrd-longtext-field__content.sc-mrd-longtext-field{font-family:var(--mrd-font-family);font-size:var(--mrd-font-size-base);color:var(--mrd-input-color);white-space:pre-wrap;word-break:break-word;margin:0;padding:var(--mrd-input-padding-y) var(--mrd-input-padding-x);background-color:var(--mrd-input-bg-disabled);border:var(--mrd-border-width) solid var(--mrd-border-color);border-radius:var(--mrd-border-radius);line-height:1.5}.mrd-longtext-field__error.sc-mrd-longtext-field{font-family:var(--mrd-font-family);font-size:var(--mrd-error-font-size);color:var(--mrd-error-color)}`;
|
|
8
|
-
|
|
9
|
-
const MrdLongtextField = class {
|
|
10
|
-
constructor(hostRef) {
|
|
11
|
-
registerInstance(this, hostRef);
|
|
12
|
-
this.mrdChange = createEvent(this, "mrdChange", 7);
|
|
13
|
-
this.mrdBlur = createEvent(this, "mrdBlur", 7);
|
|
14
|
-
this.name = '';
|
|
15
|
-
this.label = '';
|
|
16
|
-
this.value = '';
|
|
17
|
-
this.placeholder = '';
|
|
18
|
-
this.required = false;
|
|
19
|
-
this.disabled = false;
|
|
20
|
-
this.locale = navigator.language;
|
|
21
|
-
this.error = '';
|
|
22
|
-
this.handleInput = (e) => {
|
|
23
|
-
const val = e.target.value;
|
|
24
|
-
this.mrdChange.emit({ name: this.name, value: val });
|
|
25
|
-
};
|
|
26
|
-
this.handleBlur = (e) => {
|
|
27
|
-
const val = e.target.value;
|
|
28
|
-
if (this.required && !validateRequired(val)) {
|
|
29
|
-
this.error = t('required', this.locale);
|
|
30
|
-
}
|
|
31
|
-
else {
|
|
32
|
-
this.error = '';
|
|
33
|
-
}
|
|
34
|
-
this.mrdBlur.emit({ name: this.name, value: val });
|
|
35
|
-
};
|
|
36
|
-
}
|
|
37
|
-
render() {
|
|
38
|
-
const hasError = !!this.error;
|
|
39
|
-
return (h(Host, { key: '10d998b80f54cf7b10be26bf451d808c78579e69' }, h("div", { key: 'af45fe94a41f668bf6ddca670b42e065ee83ef23', class: "mrd-longtext-field" }, this.label && (h("label", { key: '31a08490d695ac9f4bbe5dff6a1ae3bb2a94337d', class: `mrd-longtext-field__label${this.required ? ' mrd-longtext-field__label--required' : ''}` }, this.label)), this.disabled ? (h("pre", { class: "mrd-longtext-field__content" }, this.value)) : (h("textarea", { class: `mrd-longtext-field__input${hasError ? ' mrd-longtext-field__input--error' : ''}`, name: this.name, placeholder: this.placeholder, required: this.required, rows: 10, onInput: this.handleInput, onBlur: this.handleBlur }, this.value)), hasError && h("span", { key: '7f133e72a882a8aaf33245445829754da1e6377b', class: "mrd-longtext-field__error" }, this.error))));
|
|
40
|
-
}
|
|
41
|
-
};
|
|
42
|
-
MrdLongtextField.style = mrdLongtextFieldScss();
|
|
43
|
-
|
|
44
|
-
export { MrdLongtextField as mrd_longtext_field };
|
|
45
|
-
//# sourceMappingURL=mrd-longtext-field.entry.esm.js.map
|
|
46
|
-
|
|
47
|
-
//# sourceMappingURL=mrd-longtext-field.entry.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"file":"mrd-longtext-field.entry.js","mappings":";;;;;;AAAA,MAAM,oBAAoB,GAAG,MAAM,CAAC,4/DAA4/D,CAAC;;MCSphE,gBAAgB,GAAA,MAAA;AAL7B,IAAA,WAAA,CAAA,OAAA,EAAA;;;;AAMU,QAAA,IAAA,CAAA,IAAI,GAAW,EAAE;AACjB,QAAA,IAAA,CAAA,KAAK,GAAW,EAAE;AAClB,QAAA,IAAA,CAAA,KAAK,GAAW,EAAE;AAClB,QAAA,IAAA,CAAA,WAAW,GAAW,EAAE;AACxB,QAAA,IAAA,CAAA,QAAQ,GAAY,KAAK;AACzB,QAAA,IAAA,CAAA,QAAQ,GAAY,KAAK;AACzB,QAAA,IAAA,CAAA,MAAM,GAAW,SAAS,CAAC,QAAQ;AAElC,QAAA,IAAA,CAAA,KAAK,GAAW,EAAE;AAKnB,QAAA,IAAA,CAAA,WAAW,GAAG,CAAC,CAAQ,KAAI;AACjC,YAAA,MAAM,GAAG,GAAI,CAAC,CAAC,MAA8B,CAAC,KAAK;AACnD,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;AACtD,SAAC;AAEO,QAAA,IAAA,CAAA,UAAU,GAAG,CAAC,CAAQ,KAAI;AAChC,YAAA,MAAM,GAAG,GAAI,CAAC,CAAC,MAA8B,CAAC,KAAK;YACnD,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE;gBAC3C,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC;;iBAClC;AACL,gBAAA,IAAI,CAAC,KAAK,GAAG,EAAE;;AAEjB,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;AACpD,SAAC;AA8BF;IA5BC,MAAM,GAAA;AACJ,QAAA,MAAM,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK;AAC7B,QAAA,QACE,EAAC,IAAI,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,EACH,CAAA,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAK,KAAK,EAAC,oBAAoB,EAAA,EAC5B,IAAI,CAAC,KAAK,KACT,CAAA,CAAA,OAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAO,KAAK,EAAE,CAAA,yBAAA,EAA4B,IAAI,CAAC,QAAQ,GAAG,sCAAsC,GAAG,EAAE,CAAA,CAAE,EAAA,EACpG,IAAI,CAAC,KAAK,CACL,CACT,EACA,IAAI,CAAC,QAAQ,IACZ,CAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAC,6BAA6B,EAAA,EAAE,IAAI,CAAC,KAAK,CAAO,KAE3D,CAAA,CAAA,UAAA,EAAA,EACE,KAAK,EAAE,CAAA,yBAAA,EAA4B,QAAQ,GAAG,mCAAmC,GAAG,EAAE,CAAA,CAAE,EACxF,IAAI,EAAE,IAAI,CAAC,IAAI,EACf,WAAW,EAAE,IAAI,CAAC,WAAW,EAC7B,QAAQ,EAAE,IAAI,CAAC,QAAQ,EACvB,IAAI,EAAE,EAAE,EACR,OAAO,EAAE,IAAI,CAAC,WAAW,EACzB,MAAM,EAAE,IAAI,CAAC,UAAU,EAAA,EACvB,IAAI,CAAC,KAAK,CAAY,CACzB,EACA,QAAQ,IAAI,CAAA,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAM,KAAK,EAAC,2BAA2B,EAAA,EAAE,IAAI,CAAC,KAAK,CAAQ,CACpE,CACD;;;;;;;","names":[],"sources":["src/components/mrd-longtext-field/mrd-longtext-field.scss?tag=mrd-longtext-field&encapsulation=scoped","src/components/mrd-longtext-field/mrd-longtext-field.tsx"],"sourcesContent":[":host {\n display: block;\n}\n\n.mrd-longtext-field {\n display: flex;\n flex-direction: column;\n gap: var(--mrd-space-1);\n width: 100%;\n}\n\n.mrd-longtext-field__label {\n display: block;\n font-family: var(--mrd-font-family);\n font-size: var(--mrd-label-font-size);\n font-weight: var(--mrd-label-font-weight);\n color: var(--mrd-label-color);\n}\n\n.mrd-longtext-field__label--required::after {\n content: ' *';\n color: var(--mrd-color-danger);\n}\n\n.mrd-longtext-field__input {\n display: block;\n width: 100%;\n min-height: calc(var(--mrd-input-height) * 5);\n padding: var(--mrd-input-padding-y) var(--mrd-input-padding-x);\n font-family: var(--mrd-font-family);\n font-size: var(--mrd-font-size-base);\n color: var(--mrd-input-color);\n background-color: var(--mrd-input-bg);\n border: var(--mrd-border-width) solid var(--mrd-border-color);\n border-radius: var(--mrd-border-radius);\n transition: border-color var(--mrd-transition), box-shadow var(--mrd-transition);\n outline: none;\n resize: vertical;\n box-sizing: border-box;\n line-height: 1.5;\n}\n\n.mrd-longtext-field__input::placeholder {\n color: var(--mrd-input-placeholder-color);\n}\n\n.mrd-longtext-field__input:focus {\n border-color: var(--mrd-border-color-focus);\n box-shadow: var(--mrd-shadow-focus);\n}\n\n.mrd-longtext-field__input--error {\n border-color: var(--mrd-border-color-error);\n}\n\n.mrd-longtext-field__input--error:focus {\n box-shadow: var(--mrd-shadow-focus-error);\n}\n\n.mrd-longtext-field__content {\n font-family: var(--mrd-font-family);\n font-size: var(--mrd-font-size-base);\n color: var(--mrd-input-color);\n white-space: pre-wrap;\n word-break: break-word;\n margin: 0;\n padding: var(--mrd-input-padding-y) var(--mrd-input-padding-x);\n background-color: var(--mrd-input-bg-disabled);\n border: var(--mrd-border-width) solid var(--mrd-border-color);\n border-radius: var(--mrd-border-radius);\n line-height: 1.5;\n}\n\n.mrd-longtext-field__error {\n font-family: var(--mrd-font-family);\n font-size: var(--mrd-error-font-size);\n color: var(--mrd-error-color);\n}\n","import { Component, Host, h, Prop, State, Event, EventEmitter } from '@stencil/core';\nimport { t } from '../../utils/i18n';\nimport { validateRequired } from '../../utils/validation';\n\n@Component({\n tag: 'mrd-longtext-field',\n styleUrl: 'mrd-longtext-field.scss',\n scoped: true,\n})\nexport class MrdLongtextField {\n @Prop() name: string = '';\n @Prop() label: string = '';\n @Prop() value: string = '';\n @Prop() placeholder: string = '';\n @Prop() required: boolean = false;\n @Prop() disabled: boolean = false;\n @Prop() locale: string = navigator.language;\n\n @State() error: string = '';\n\n @Event() mrdChange!: EventEmitter<{ name: string; value: string }>;\n @Event() mrdBlur!: EventEmitter<{ name: string; value: string }>;\n\n private handleInput = (e: Event) => {\n const val = (e.target as HTMLTextAreaElement).value;\n this.mrdChange.emit({ name: this.name, value: val });\n };\n\n private handleBlur = (e: Event) => {\n const val = (e.target as HTMLTextAreaElement).value;\n if (this.required && !validateRequired(val)) {\n this.error = t('required', this.locale);\n } else {\n this.error = '';\n }\n this.mrdBlur.emit({ name: this.name, value: val });\n };\n\n render() {\n const hasError = !!this.error;\n return (\n <Host>\n <div class=\"mrd-longtext-field\">\n {this.label && (\n <label class={`mrd-longtext-field__label${this.required ? ' mrd-longtext-field__label--required' : ''}`}>\n {this.label}\n </label>\n )}\n {this.disabled ? (\n <pre class=\"mrd-longtext-field__content\">{this.value}</pre>\n ) : (\n <textarea\n class={`mrd-longtext-field__input${hasError ? ' mrd-longtext-field__input--error' : ''}`}\n name={this.name}\n placeholder={this.placeholder}\n required={this.required}\n rows={10}\n onInput={this.handleInput}\n onBlur={this.handleBlur}\n >{this.value}</textarea>\n )}\n {hasError && <span class=\"mrd-longtext-field__error\">{this.error}</span>}\n </div>\n </Host>\n );\n }\n}\n"],"version":3}
|
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
import { r as registerInstance, a as createEvent, h, d as Host } from './index-B_tPFIvS.js';
|
|
2
|
-
import { t } from './i18n-hoGGKbKU.js';
|
|
3
|
-
import { c as validateNumber, v as validateRequired } from './validation-ixb43cqU.js';
|
|
4
|
-
import { p as parseLocalizedNumber, a as formatNumber } from './format-BAfsQfy1.js';
|
|
5
|
-
import './index-I5SuYv7a.js';
|
|
6
|
-
import { b as ClientLayoutItemFieldDataType } from './client-layout-D88nn5zf.js';
|
|
7
|
-
|
|
8
|
-
const mrdNumberFieldScss = () => `.sc-mrd-number-field-h{display:block}.mrd-number-field.sc-mrd-number-field{display:flex;flex-direction:column;gap:var(--mrd-space-1);width:100%}.mrd-number-field__label.sc-mrd-number-field{display:block;font-family:var(--mrd-font-family);font-size:var(--mrd-label-font-size);font-weight:var(--mrd-label-font-weight);color:var(--mrd-label-color)}.mrd-number-field__label--required.sc-mrd-number-field::after{content:' *';color:var(--mrd-color-danger)}.mrd-number-field__input-wrapper.sc-mrd-number-field{position:relative;display:flex;align-items:center}.mrd-number-field__input.sc-mrd-number-field{display:block;width:100%;height:var(--mrd-input-height);padding:var(--mrd-input-padding-y) var(--mrd-input-padding-x);font-family:var(--mrd-font-family);font-size:var(--mrd-font-size-base);color:var(--mrd-input-color);background-color:var(--mrd-input-bg);border:var(--mrd-border-width) solid var(--mrd-border-color);border-radius:var(--mrd-border-radius);transition:border-color var(--mrd-transition), box-shadow var(--mrd-transition);outline:none;appearance:none;box-sizing:border-box;text-align:right}.mrd-number-field__input.sc-mrd-number-field::placeholder{color:var(--mrd-input-placeholder-color);text-align:left}.mrd-number-field__input.sc-mrd-number-field:focus{border-color:var(--mrd-border-color-focus);box-shadow:var(--mrd-shadow-focus)}.mrd-number-field__input.sc-mrd-number-field:disabled{background-color:var(--mrd-input-bg-disabled);cursor:not-allowed;opacity:0.7}.mrd-number-field__input--error.sc-mrd-number-field{border-color:var(--mrd-border-color-error)}.mrd-number-field__input--error.sc-mrd-number-field:focus{box-shadow:var(--mrd-shadow-focus-error)}.mrd-number-field__error.sc-mrd-number-field{font-family:var(--mrd-font-family);font-size:var(--mrd-error-font-size);color:var(--mrd-error-color)}`;
|
|
9
|
-
|
|
10
|
-
const MrdNumberField = class {
|
|
11
|
-
constructor(hostRef) {
|
|
12
|
-
registerInstance(this, hostRef);
|
|
13
|
-
this.mrdChange = createEvent(this, "mrdChange", 7);
|
|
14
|
-
this.mrdBlur = createEvent(this, "mrdBlur", 7);
|
|
15
|
-
this.name = '';
|
|
16
|
-
this.label = '';
|
|
17
|
-
this.value = null;
|
|
18
|
-
this.placeholder = '';
|
|
19
|
-
this.required = false;
|
|
20
|
-
this.disabled = false;
|
|
21
|
-
this.locale = navigator.language;
|
|
22
|
-
this.dataType = ClientLayoutItemFieldDataType.INTEGER;
|
|
23
|
-
this.decimalPrecision = 2;
|
|
24
|
-
this.displayValue = '';
|
|
25
|
-
this.error = '';
|
|
26
|
-
this.handleInput = (e) => {
|
|
27
|
-
this.displayValue = e.target.value;
|
|
28
|
-
};
|
|
29
|
-
this.handleBlur = (e) => {
|
|
30
|
-
const raw = e.target.value;
|
|
31
|
-
const parsed = parseLocalizedNumber(raw, this.locale);
|
|
32
|
-
if (this.required && (parsed === null || raw === '')) {
|
|
33
|
-
this.error = t('required', this.locale);
|
|
34
|
-
}
|
|
35
|
-
else if (raw !== '' && !validateNumber(parsed, this.dataType)) {
|
|
36
|
-
this.error = t('invalid_number', this.locale);
|
|
37
|
-
}
|
|
38
|
-
else {
|
|
39
|
-
this.error = '';
|
|
40
|
-
}
|
|
41
|
-
if (parsed !== null && validateRequired(raw)) {
|
|
42
|
-
this.displayValue = this.formatForDisplay(parsed);
|
|
43
|
-
}
|
|
44
|
-
this.mrdChange.emit({ name: this.name, value: parsed });
|
|
45
|
-
this.mrdBlur.emit({ name: this.name, value: parsed });
|
|
46
|
-
};
|
|
47
|
-
this.handleFocus = () => {
|
|
48
|
-
// Show raw number on focus
|
|
49
|
-
if (this.value !== null && this.value !== undefined) {
|
|
50
|
-
const str = String(this.value);
|
|
51
|
-
this.displayValue = str;
|
|
52
|
-
}
|
|
53
|
-
};
|
|
54
|
-
}
|
|
55
|
-
componentWillLoad() {
|
|
56
|
-
if (this.value !== null && this.value !== undefined) {
|
|
57
|
-
this.displayValue = this.formatForDisplay(this.value);
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
formatForDisplay(val) {
|
|
61
|
-
if (this.dataType === ClientLayoutItemFieldDataType.PERCENTAGE) {
|
|
62
|
-
return formatNumber(val, this.locale, {
|
|
63
|
-
minimumFractionDigits: 0,
|
|
64
|
-
maximumFractionDigits: this.decimalPrecision,
|
|
65
|
-
}) + '%';
|
|
66
|
-
}
|
|
67
|
-
if (this.dataType === ClientLayoutItemFieldDataType.DECIMAL) {
|
|
68
|
-
return formatNumber(val, this.locale, {
|
|
69
|
-
minimumFractionDigits: this.decimalPrecision,
|
|
70
|
-
maximumFractionDigits: this.decimalPrecision,
|
|
71
|
-
});
|
|
72
|
-
}
|
|
73
|
-
return formatNumber(val, this.locale, { maximumFractionDigits: 0 });
|
|
74
|
-
}
|
|
75
|
-
render() {
|
|
76
|
-
const hasError = !!this.error;
|
|
77
|
-
const suffix = this.dataType === ClientLayoutItemFieldDataType.PERCENTAGE ? '%' :
|
|
78
|
-
this.dataType === ClientLayoutItemFieldDataType.DECIMAL ? '' : '';
|
|
79
|
-
return (h(Host, { key: '195beed4d6453597320b79654feaabe8f742eff2' }, h("div", { key: 'c641d7a4d27ba28dd34acda98d38f245945d20bb', class: "mrd-number-field" }, this.label && (h("label", { key: '2a5f6eb48889a3ab0aa76d6b2ca5d59b20625bb2', class: `mrd-number-field__label${this.required ? ' mrd-number-field__label--required' : ''}` }, this.label)), h("div", { key: 'a844b89e6a278629a8aefa4ac72e5e18e5904cab', class: "mrd-number-field__input-wrapper" }, h("input", { key: '1ce9c3d67b458601a0de95b3b8478ef05df73069', class: `mrd-number-field__input${hasError ? ' mrd-number-field__input--error' : ''}`, type: "text", inputMode: "decimal", name: this.name, value: this.displayValue, placeholder: this.placeholder || (suffix ? `0${suffix}` : '0'), required: this.required, disabled: this.disabled, onInput: this.handleInput, onBlur: this.handleBlur, onFocus: this.handleFocus })), hasError && h("span", { key: '4226614a65a8d27543d1287e2c1f61f67c427e63', class: "mrd-number-field__error" }, this.error))));
|
|
80
|
-
}
|
|
81
|
-
};
|
|
82
|
-
MrdNumberField.style = mrdNumberFieldScss();
|
|
83
|
-
|
|
84
|
-
export { MrdNumberField as mrd_number_field };
|
|
85
|
-
//# sourceMappingURL=mrd-number-field.entry.esm.js.map
|
|
86
|
-
|
|
87
|
-
//# sourceMappingURL=mrd-number-field.entry.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"file":"mrd-number-field.entry.js","mappings":"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","names":[],"sources":["src/components/mrd-number-field/mrd-number-field.scss?tag=mrd-number-field&encapsulation=scoped","src/components/mrd-number-field/mrd-number-field.tsx"],"sourcesContent":[":host {\n display: block;\n}\n\n.mrd-number-field {\n display: flex;\n flex-direction: column;\n gap: var(--mrd-space-1);\n width: 100%;\n}\n\n.mrd-number-field__label {\n display: block;\n font-family: var(--mrd-font-family);\n font-size: var(--mrd-label-font-size);\n font-weight: var(--mrd-label-font-weight);\n color: var(--mrd-label-color);\n}\n\n.mrd-number-field__label--required::after {\n content: ' *';\n color: var(--mrd-color-danger);\n}\n\n.mrd-number-field__input-wrapper {\n position: relative;\n display: flex;\n align-items: center;\n}\n\n.mrd-number-field__input {\n display: block;\n width: 100%;\n height: var(--mrd-input-height);\n padding: var(--mrd-input-padding-y) var(--mrd-input-padding-x);\n font-family: var(--mrd-font-family);\n font-size: var(--mrd-font-size-base);\n color: var(--mrd-input-color);\n background-color: var(--mrd-input-bg);\n border: var(--mrd-border-width) solid var(--mrd-border-color);\n border-radius: var(--mrd-border-radius);\n transition: border-color var(--mrd-transition), box-shadow var(--mrd-transition);\n outline: none;\n appearance: none;\n box-sizing: border-box;\n text-align: right;\n}\n\n.mrd-number-field__input::placeholder {\n color: var(--mrd-input-placeholder-color);\n text-align: left;\n}\n\n.mrd-number-field__input:focus {\n border-color: var(--mrd-border-color-focus);\n box-shadow: var(--mrd-shadow-focus);\n}\n\n.mrd-number-field__input:disabled {\n background-color: var(--mrd-input-bg-disabled);\n cursor: not-allowed;\n opacity: 0.7;\n}\n\n.mrd-number-field__input--error {\n border-color: var(--mrd-border-color-error);\n}\n\n.mrd-number-field__input--error:focus {\n box-shadow: var(--mrd-shadow-focus-error);\n}\n\n.mrd-number-field__error {\n font-family: var(--mrd-font-family);\n font-size: var(--mrd-error-font-size);\n color: var(--mrd-error-color);\n}\n","import { Component, Host, h, Prop, State, Event, EventEmitter } from '@stencil/core';\nimport { t } from '../../utils/i18n';\nimport { validateRequired, validateNumber } from '../../utils/validation';\nimport { formatNumber, parseLocalizedNumber } from '../../utils/format';\nimport { ClientLayoutItemFieldDataType } from '../../types';\n\n@Component({\n tag: 'mrd-number-field',\n styleUrl: 'mrd-number-field.scss',\n scoped: true,\n})\nexport class MrdNumberField {\n @Prop() name: string = '';\n @Prop() label: string = '';\n @Prop() value: number | null = null;\n @Prop() placeholder: string = '';\n @Prop() required: boolean = false;\n @Prop() disabled: boolean = false;\n @Prop() locale: string = navigator.language;\n @Prop() dataType: ClientLayoutItemFieldDataType = ClientLayoutItemFieldDataType.INTEGER;\n @Prop() decimalPrecision: number = 2;\n\n @State() displayValue: string = '';\n @State() error: string = '';\n\n @Event() mrdChange!: EventEmitter<{ name: string; value: number | null }>;\n @Event() mrdBlur!: EventEmitter<{ name: string; value: number | null }>;\n\n componentWillLoad() {\n if (this.value !== null && this.value !== undefined) {\n this.displayValue = this.formatForDisplay(this.value);\n }\n }\n\n private formatForDisplay(val: number): string {\n if (this.dataType === ClientLayoutItemFieldDataType.PERCENTAGE) {\n return formatNumber(val, this.locale, {\n minimumFractionDigits: 0,\n maximumFractionDigits: this.decimalPrecision,\n }) + '%';\n }\n if (this.dataType === ClientLayoutItemFieldDataType.DECIMAL) {\n return formatNumber(val, this.locale, {\n minimumFractionDigits: this.decimalPrecision,\n maximumFractionDigits: this.decimalPrecision,\n });\n }\n return formatNumber(val, this.locale, { maximumFractionDigits: 0 });\n }\n\n private handleInput = (e: Event) => {\n this.displayValue = (e.target as HTMLInputElement).value;\n };\n\n private handleBlur = (e: Event) => {\n const raw = (e.target as HTMLInputElement).value;\n const parsed = parseLocalizedNumber(raw, this.locale);\n\n if (this.required && (parsed === null || raw === '')) {\n this.error = t('required', this.locale);\n } else if (raw !== '' && !validateNumber(parsed, this.dataType)) {\n this.error = t('invalid_number', this.locale);\n } else {\n this.error = '';\n }\n\n if (parsed !== null && validateRequired(raw)) {\n this.displayValue = this.formatForDisplay(parsed);\n }\n\n this.mrdChange.emit({ name: this.name, value: parsed });\n this.mrdBlur.emit({ name: this.name, value: parsed });\n };\n\n private handleFocus = () => {\n // Show raw number on focus\n if (this.value !== null && this.value !== undefined) {\n const str = String(this.value);\n this.displayValue = str;\n }\n };\n\n render() {\n const hasError = !!this.error;\n const suffix =\n this.dataType === ClientLayoutItemFieldDataType.PERCENTAGE ? '%' :\n this.dataType === ClientLayoutItemFieldDataType.DECIMAL ? '' : '';\n\n return (\n <Host>\n <div class=\"mrd-number-field\">\n {this.label && (\n <label class={`mrd-number-field__label${this.required ? ' mrd-number-field__label--required' : ''}`}>\n {this.label}\n </label>\n )}\n <div class=\"mrd-number-field__input-wrapper\">\n <input\n class={`mrd-number-field__input${hasError ? ' mrd-number-field__input--error' : ''}`}\n type=\"text\"\n inputMode=\"decimal\"\n name={this.name}\n value={this.displayValue}\n placeholder={this.placeholder || (suffix ? `0${suffix}` : '0')}\n required={this.required}\n disabled={this.disabled}\n onInput={this.handleInput}\n onBlur={this.handleBlur}\n onFocus={this.handleFocus}\n />\n </div>\n {hasError && <span class=\"mrd-number-field__error\">{this.error}</span>}\n </div>\n </Host>\n );\n }\n}\n"],"version":3}
|
|
@@ -1,267 +0,0 @@
|
|
|
1
|
-
import { r as registerInstance, a as createEvent, h, d as Host, e as getElement } from './index-B_tPFIvS.js';
|
|
2
|
-
import { t } from './i18n-hoGGKbKU.js';
|
|
3
|
-
import { v as validateRequired } from './validation-ixb43cqU.js';
|
|
4
|
-
import './index-I5SuYv7a.js';
|
|
5
|
-
import { c as ClientLayoutItemRelationDisplayType, d as ClientLayoutItemRelationEditBehavior } from './client-layout-D88nn5zf.js';
|
|
6
|
-
|
|
7
|
-
const mrdRelationFieldScss = () => `.sc-mrd-relation-field-h{display:block}.mrd-relation-field.sc-mrd-relation-field{display:flex;flex-direction:column;gap:var(--mrd-space-1);width:100%;position:relative}.mrd-relation-field__label.sc-mrd-relation-field{display:block;font-family:var(--mrd-font-family);font-size:var(--mrd-label-font-size);font-weight:var(--mrd-label-font-weight);color:var(--mrd-label-color)}.mrd-relation-field__label--required.sc-mrd-relation-field::after{content:' *';color:var(--mrd-color-danger)}.mrd-relation-field__select.sc-mrd-relation-field{display:block;width:100%;height:var(--mrd-input-height);padding:var(--mrd-input-padding-y) var(--mrd-input-padding-x);padding-right:calc(var(--mrd-input-padding-x) + 1.5rem);font-family:var(--mrd-font-family);font-size:var(--mrd-font-size-base);color:var(--mrd-input-color);background-color:var(--mrd-input-bg);background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%236b7280' stroke-width='2'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right var(--mrd-space-3) center;border:var(--mrd-border-width) solid var(--mrd-border-color);border-radius:var(--mrd-border-radius);outline:none;appearance:none;cursor:pointer;box-sizing:border-box}.mrd-relation-field__select.sc-mrd-relation-field:focus{border-color:var(--mrd-border-color-focus);box-shadow:var(--mrd-shadow-focus)}.mrd-relation-field__select.sc-mrd-relation-field:disabled{background-color:var(--mrd-input-bg-disabled);cursor:not-allowed;opacity:0.7}.mrd-relation-field__select--error.sc-mrd-relation-field{border-color:var(--mrd-border-color-error)}.mrd-relation-field__select--error.sc-mrd-relation-field:focus{box-shadow:var(--mrd-shadow-focus-error)}.mrd-relation-field__tags.sc-mrd-relation-field{display:flex;flex-wrap:wrap;gap:var(--mrd-space-1);margin-bottom:var(--mrd-space-1)}.mrd-relation-field__tag.sc-mrd-relation-field{display:inline-flex;align-items:center;gap:var(--mrd-space-1);padding:var(--mrd-space-1) var(--mrd-space-2);background-color:var(--mrd-color-primary-light);color:var(--mrd-color-primary-dark);border-radius:var(--mrd-border-radius-full);font-family:var(--mrd-font-family);font-size:var(--mrd-font-size-sm);font-weight:var(--mrd-font-weight-medium)}.mrd-relation-field__tag-remove.sc-mrd-relation-field{background:none;border:none;cursor:pointer;color:var(--mrd-color-primary-dark);font-size:var(--mrd-font-size-xs);padding:0;line-height:1;opacity:0.7}.mrd-relation-field__tag-remove.sc-mrd-relation-field:hover{opacity:1}.mrd-relation-field__search-wrapper.sc-mrd-relation-field{position:relative;display:flex;align-items:center}.mrd-relation-field__search.sc-mrd-relation-field{display:block;width:100%;height:var(--mrd-input-height);padding:var(--mrd-input-padding-y) var(--mrd-input-padding-x);font-family:var(--mrd-font-family);font-size:var(--mrd-font-size-base);color:var(--mrd-input-color);background-color:var(--mrd-input-bg);border:var(--mrd-border-width) solid var(--mrd-border-color);border-radius:var(--mrd-border-radius);outline:none;appearance:none;box-sizing:border-box}.mrd-relation-field__search.sc-mrd-relation-field::placeholder{color:var(--mrd-input-placeholder-color)}.mrd-relation-field__search.sc-mrd-relation-field:focus{border-color:var(--mrd-border-color-focus);box-shadow:var(--mrd-shadow-focus)}.mrd-relation-field__search.sc-mrd-relation-field:disabled{background-color:var(--mrd-input-bg-disabled);cursor:not-allowed;opacity:0.7}.mrd-relation-field__search--error.sc-mrd-relation-field{border-color:var(--mrd-border-color-error)}.mrd-relation-field__search--error.sc-mrd-relation-field:focus{box-shadow:var(--mrd-shadow-focus-error)}.mrd-relation-field__spinner.sc-mrd-relation-field{position:absolute;right:var(--mrd-space-3);width:16px;height:16px;border:2px solid var(--mrd-color-neutral-200);border-top-color:var(--mrd-color-primary);border-radius:50%;animation:mrd-spin 0.7s linear infinite}@keyframes mrd-spin{to{transform:rotate(360deg)}}.mrd-relation-field__results.sc-mrd-relation-field{position:absolute;top:calc(100% + var(--mrd-space-1));left:0;right:0;background-color:var(--mrd-color-white);border:var(--mrd-border-width) solid var(--mrd-border-color);border-radius:var(--mrd-border-radius);box-shadow:var(--mrd-shadow-md);z-index:var(--mrd-z-dropdown);max-height:240px;overflow-y:auto}.mrd-relation-field__result-item.sc-mrd-relation-field{display:flex;flex-direction:column;padding:var(--mrd-space-2) var(--mrd-space-3);cursor:pointer;transition:background-color var(--mrd-transition-fast)}.mrd-relation-field__result-item.sc-mrd-relation-field:hover{background-color:var(--mrd-color-neutral-50)}.mrd-relation-field__result-item.sc-mrd-relation-field:not(:last-child){border-bottom:var(--mrd-border-width) solid var(--mrd-color-neutral-100)}.mrd-relation-field__result-label.sc-mrd-relation-field{font-family:var(--mrd-font-family);font-size:var(--mrd-font-size-base);color:var(--mrd-color-neutral-800);font-weight:var(--mrd-font-weight-medium)}.mrd-relation-field__result-desc.sc-mrd-relation-field{font-family:var(--mrd-font-family);font-size:var(--mrd-font-size-xs);color:var(--mrd-color-neutral-500);margin-top:var(--mrd-space-1)}.mrd-relation-field__result-item--highlighted.sc-mrd-relation-field{background-color:var(--mrd-color-primary-light)}.mrd-relation-field__selected-value.sc-mrd-relation-field{display:flex;align-items:center;gap:var(--mrd-space-2);height:var(--mrd-input-height);padding:var(--mrd-input-padding-y) var(--mrd-input-padding-x);background-color:var(--mrd-color-primary-light);border:var(--mrd-border-width) solid var(--mrd-color-primary);border-radius:var(--mrd-border-radius);box-sizing:border-box}.mrd-relation-field__selected-value--error.sc-mrd-relation-field{border-color:var(--mrd-border-color-error);background-color:var(--mrd-color-danger-light)}.mrd-relation-field__selected-name.sc-mrd-relation-field{flex:1;font-family:var(--mrd-font-family);font-size:var(--mrd-font-size-base);font-weight:var(--mrd-font-weight-medium);color:var(--mrd-color-primary-dark);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mrd-relation-field__selected-clear.sc-mrd-relation-field{flex-shrink:0;background:none;border:none;cursor:pointer;color:var(--mrd-color-primary-dark);font-size:var(--mrd-font-size-sm);padding:0;line-height:1;opacity:0.6;transition:opacity var(--mrd-transition-fast)}.mrd-relation-field__selected-clear.sc-mrd-relation-field:hover{opacity:1}.mrd-relation-field__no-results.sc-mrd-relation-field{padding:var(--mrd-space-4);font-family:var(--mrd-font-family);font-size:var(--mrd-font-size-sm);color:var(--mrd-color-neutral-500);text-align:center}.mrd-relation-field__error.sc-mrd-relation-field{font-family:var(--mrd-font-family);font-size:var(--mrd-error-font-size);color:var(--mrd-error-color)}`;
|
|
8
|
-
|
|
9
|
-
const MrdRelationField = class {
|
|
10
|
-
constructor(hostRef) {
|
|
11
|
-
registerInstance(this, hostRef);
|
|
12
|
-
this.mrdChange = createEvent(this, "mrdChange", 7);
|
|
13
|
-
this.mrdBlur = createEvent(this, "mrdBlur", 7);
|
|
14
|
-
this.mrdSearch = createEvent(this, "mrdSearch", 7);
|
|
15
|
-
this.mrdFetchAll = createEvent(this, "mrdFetchAll", 7);
|
|
16
|
-
this.name = '';
|
|
17
|
-
this.label = '';
|
|
18
|
-
this.required = false;
|
|
19
|
-
this.disabled = false;
|
|
20
|
-
this.locale = navigator.language;
|
|
21
|
-
this.relatedClass = '';
|
|
22
|
-
/** When set, used instead of relatedClass for search queries (mostSignificantClass from API). */
|
|
23
|
-
this.mostSignificantClass = '';
|
|
24
|
-
this.displayType = ClientLayoutItemRelationDisplayType.SEARCH;
|
|
25
|
-
this.multiple = false;
|
|
26
|
-
this.dropdownValues = [];
|
|
27
|
-
/** Plain href string/array for normal use; pass { id, label } objects to pre-fill a loaded record. */
|
|
28
|
-
this.value = null;
|
|
29
|
-
this.searchQuery = '';
|
|
30
|
-
this.searchResults = [];
|
|
31
|
-
this.allRecords = [];
|
|
32
|
-
this.isLoading = false;
|
|
33
|
-
this.selectedItems = [];
|
|
34
|
-
this.showResults = false;
|
|
35
|
-
this.error = '';
|
|
36
|
-
this.highlightedIndex = -1;
|
|
37
|
-
this.searchDebounce = null;
|
|
38
|
-
this.handleKeyDown = (e) => {
|
|
39
|
-
if (!this.showResults || this.searchResults.length === 0) {
|
|
40
|
-
if (e.key === 'Escape') {
|
|
41
|
-
this.showResults = false;
|
|
42
|
-
this.highlightedIndex = -1;
|
|
43
|
-
}
|
|
44
|
-
return;
|
|
45
|
-
}
|
|
46
|
-
if (e.key === 'ArrowDown') {
|
|
47
|
-
e.preventDefault();
|
|
48
|
-
this.highlightedIndex = Math.min(this.highlightedIndex + 1, this.searchResults.length - 1);
|
|
49
|
-
}
|
|
50
|
-
else if (e.key === 'ArrowUp') {
|
|
51
|
-
e.preventDefault();
|
|
52
|
-
this.highlightedIndex = Math.max(this.highlightedIndex - 1, 0);
|
|
53
|
-
}
|
|
54
|
-
else if (e.key === 'Enter') {
|
|
55
|
-
e.preventDefault();
|
|
56
|
-
if (this.highlightedIndex >= 0) {
|
|
57
|
-
this.handleResultSelect(this.searchResults[this.highlightedIndex]);
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
else if (e.key === 'Escape') {
|
|
61
|
-
this.showResults = false;
|
|
62
|
-
this.highlightedIndex = -1;
|
|
63
|
-
}
|
|
64
|
-
};
|
|
65
|
-
this.clearSelection = () => {
|
|
66
|
-
this.selectedItems = [];
|
|
67
|
-
this.searchQuery = '';
|
|
68
|
-
this.searchResults = [];
|
|
69
|
-
this.showResults = false;
|
|
70
|
-
this.highlightedIndex = -1;
|
|
71
|
-
this.mrdChange.emit({ name: this.name, value: this.multiple ? [] : null });
|
|
72
|
-
};
|
|
73
|
-
this.handleSearchInput = (e) => {
|
|
74
|
-
const query = e.target.value;
|
|
75
|
-
this.searchQuery = query;
|
|
76
|
-
if (this.searchDebounce)
|
|
77
|
-
clearTimeout(this.searchDebounce);
|
|
78
|
-
if (query.trim().length >= 2) {
|
|
79
|
-
this.isLoading = true;
|
|
80
|
-
this.showResults = true;
|
|
81
|
-
this.searchDebounce = setTimeout(() => {
|
|
82
|
-
this.mrdSearch.emit({ name: this.name, query, relatedClass: this.mostSignificantClass });
|
|
83
|
-
}, 300);
|
|
84
|
-
}
|
|
85
|
-
else {
|
|
86
|
-
this.searchResults = [];
|
|
87
|
-
this.showResults = false;
|
|
88
|
-
this.isLoading = false;
|
|
89
|
-
}
|
|
90
|
-
};
|
|
91
|
-
this.handleResultSelect = (result) => {
|
|
92
|
-
if (this.multiple) {
|
|
93
|
-
if (!this.selectedItems.find(i => i.id === result.id)) {
|
|
94
|
-
this.selectedItems = [...this.selectedItems, result];
|
|
95
|
-
}
|
|
96
|
-
this.searchQuery = '';
|
|
97
|
-
this.searchResults = [];
|
|
98
|
-
this.showResults = false;
|
|
99
|
-
const ids = this.selectedItems.map(i => i.id);
|
|
100
|
-
this.mrdChange.emit({ name: this.name, value: ids });
|
|
101
|
-
}
|
|
102
|
-
else {
|
|
103
|
-
this.selectedItems = [result];
|
|
104
|
-
this.searchQuery = result.label;
|
|
105
|
-
this.showResults = false;
|
|
106
|
-
this.mrdChange.emit({ name: this.name, value: result.id });
|
|
107
|
-
}
|
|
108
|
-
if (this.required && !validateRequired(this.selectedItems)) {
|
|
109
|
-
this.error = t('required', this.locale);
|
|
110
|
-
}
|
|
111
|
-
else {
|
|
112
|
-
this.error = '';
|
|
113
|
-
}
|
|
114
|
-
};
|
|
115
|
-
this.handleRemoveSelected = (id) => {
|
|
116
|
-
this.selectedItems = this.selectedItems.filter(i => i.id !== id);
|
|
117
|
-
const ids = this.selectedItems.map(i => i.id);
|
|
118
|
-
this.mrdChange.emit({ name: this.name, value: this.multiple ? ids : null });
|
|
119
|
-
};
|
|
120
|
-
this.handleDropdownChange = (e) => {
|
|
121
|
-
const val = e.target.value;
|
|
122
|
-
if (this.required && !validateRequired(val)) {
|
|
123
|
-
this.error = t('required', this.locale);
|
|
124
|
-
}
|
|
125
|
-
else {
|
|
126
|
-
this.error = '';
|
|
127
|
-
}
|
|
128
|
-
this.mrdChange.emit({ name: this.name, value: val });
|
|
129
|
-
};
|
|
130
|
-
this.handleBlur = () => {
|
|
131
|
-
var _a, _b;
|
|
132
|
-
setTimeout(() => {
|
|
133
|
-
this.showResults = false;
|
|
134
|
-
this.highlightedIndex = -1;
|
|
135
|
-
}, 200);
|
|
136
|
-
const val = this.multiple ? this.selectedItems.map(i => i.id) : ((_b = (_a = this.selectedItems[0]) === null || _a === void 0 ? void 0 : _a.id) !== null && _b !== void 0 ? _b : null);
|
|
137
|
-
this.mrdBlur.emit({ name: this.name, value: val });
|
|
138
|
-
};
|
|
139
|
-
}
|
|
140
|
-
async setAllRecords(records) {
|
|
141
|
-
this.allRecords = records;
|
|
142
|
-
}
|
|
143
|
-
getValueHref() {
|
|
144
|
-
var _a, _b, _c;
|
|
145
|
-
const v = Array.isArray(this.value) ? ((_a = this.value[0]) !== null && _a !== void 0 ? _a : '') : ((_b = this.value) !== null && _b !== void 0 ? _b : '');
|
|
146
|
-
if (!v)
|
|
147
|
-
return '';
|
|
148
|
-
if (typeof v === 'object')
|
|
149
|
-
return (_c = v.id) !== null && _c !== void 0 ? _c : '';
|
|
150
|
-
return v;
|
|
151
|
-
}
|
|
152
|
-
allRecordsChanged() {
|
|
153
|
-
if (this.editBehavior !== ClientLayoutItemRelationEditBehavior.DROPDOWN)
|
|
154
|
-
return;
|
|
155
|
-
const current = this.getValueHref();
|
|
156
|
-
if (!current)
|
|
157
|
-
return;
|
|
158
|
-
// Defer past Stencil's async render cycle: options must exist in the DOM before
|
|
159
|
-
// select.value can be set. setAttribute('selected') alone is ignored by browsers
|
|
160
|
-
// when the select already has an established value.
|
|
161
|
-
setTimeout(() => {
|
|
162
|
-
var _a;
|
|
163
|
-
const select = (_a = this.el) === null || _a === void 0 ? void 0 : _a.querySelector('select');
|
|
164
|
-
if (select)
|
|
165
|
-
select.value = current;
|
|
166
|
-
}, 0);
|
|
167
|
-
}
|
|
168
|
-
async setSearchResults(results) {
|
|
169
|
-
this.searchResults = results;
|
|
170
|
-
this.isLoading = false;
|
|
171
|
-
this.showResults = true;
|
|
172
|
-
this.highlightedIndex = -1;
|
|
173
|
-
}
|
|
174
|
-
async setLoading(loading) {
|
|
175
|
-
this.isLoading = loading;
|
|
176
|
-
}
|
|
177
|
-
toSearchResult(v) {
|
|
178
|
-
var _a, _b, _c, _d;
|
|
179
|
-
return {
|
|
180
|
-
id: (_b = (_a = v.id) !== null && _a !== void 0 ? _a : v.href) !== null && _b !== void 0 ? _b : '',
|
|
181
|
-
label: (_d = (_c = v.label) !== null && _c !== void 0 ? _c : v.name) !== null && _d !== void 0 ? _d : '',
|
|
182
|
-
description: v.description,
|
|
183
|
-
};
|
|
184
|
-
}
|
|
185
|
-
applyValuePrefill(v) {
|
|
186
|
-
if (!v)
|
|
187
|
-
return;
|
|
188
|
-
if (Array.isArray(v)) {
|
|
189
|
-
if (v.length > 0 && typeof v[0] === 'object') {
|
|
190
|
-
this.selectedItems = v.map(item => this.toSearchResult(item));
|
|
191
|
-
this.searchQuery = '';
|
|
192
|
-
}
|
|
193
|
-
// array of strings → user interaction, ignore
|
|
194
|
-
}
|
|
195
|
-
else if (typeof v === 'object') {
|
|
196
|
-
const obj = v;
|
|
197
|
-
if (Array.isArray(obj.values)) {
|
|
198
|
-
// Multiple relation: API embeds selected items in values[]
|
|
199
|
-
this.selectedItems = obj.values.map((item) => this.toSearchResult(item));
|
|
200
|
-
this.searchQuery = '';
|
|
201
|
-
}
|
|
202
|
-
else if (!this.multiple && (obj.id || obj.name || obj.label)) {
|
|
203
|
-
// Single relation: { href, name } or already { id, label }
|
|
204
|
-
const result = this.toSearchResult(obj);
|
|
205
|
-
this.selectedItems = [result];
|
|
206
|
-
this.searchQuery = result.label;
|
|
207
|
-
}
|
|
208
|
-
// else: collection href (multiple without values) or unrecognised — skip
|
|
209
|
-
}
|
|
210
|
-
}
|
|
211
|
-
componentWillLoad() {
|
|
212
|
-
this.applyValuePrefill(this.value);
|
|
213
|
-
}
|
|
214
|
-
// Handles edit-mode: values prop on mrd-form is often set async after mount.
|
|
215
|
-
// Only updates selectedItems when the new value contains { id, label } objects
|
|
216
|
-
// (host pre-fill). Plain href strings from user interaction are ignored.
|
|
217
|
-
valueChanged(newValue) {
|
|
218
|
-
this.applyValuePrefill(newValue);
|
|
219
|
-
}
|
|
220
|
-
componentDidLoad() {
|
|
221
|
-
// Only emit when there is no commonRelation dependency — the form orchestrates those.
|
|
222
|
-
if (this.editBehavior === ClientLayoutItemRelationEditBehavior.DROPDOWN && !this.commonRelation) {
|
|
223
|
-
// Defer to next tick so parent event listeners are registered after DOM patching
|
|
224
|
-
setTimeout(() => {
|
|
225
|
-
this.mrdFetchAll.emit({
|
|
226
|
-
name: this.name,
|
|
227
|
-
relatedClass: this.relatedClass,
|
|
228
|
-
mostSignificantClass: this.mostSignificantClass || undefined,
|
|
229
|
-
});
|
|
230
|
-
}, 0);
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
render() {
|
|
234
|
-
var _a, _b;
|
|
235
|
-
const hasError = !!this.error;
|
|
236
|
-
if (this.editBehavior === ClientLayoutItemRelationEditBehavior.DROPDOWN) {
|
|
237
|
-
const currentValue = this.getValueHref();
|
|
238
|
-
return (h(Host, null, h("div", { class: "mrd-relation-field" }, this.label && (h("label", { class: `mrd-relation-field__label${this.required ? ' mrd-relation-field__label--required' : ''}` }, this.label)), h("select", { class: `mrd-relation-field__select${hasError ? ' mrd-relation-field__select--error' : ''}`, name: this.name, required: this.required, disabled: this.disabled, onChange: this.handleDropdownChange }, h("option", { value: "" }, t('select_placeholder', this.locale)), this.allRecords.map(record => (h("option", { key: record.id, value: record.id, selected: record.id === currentValue }, record.label)))), hasError && h("span", { class: "mrd-relation-field__error" }, this.error))));
|
|
239
|
-
}
|
|
240
|
-
if (this.displayType === ClientLayoutItemRelationDisplayType.DROPDOWN) {
|
|
241
|
-
const currentValue = Array.isArray(this.value) ? ((_a = this.value[0]) !== null && _a !== void 0 ? _a : '') : ((_b = this.value) !== null && _b !== void 0 ? _b : '');
|
|
242
|
-
return (h(Host, null, h("div", { class: "mrd-relation-field" }, this.label && (h("label", { class: `mrd-relation-field__label${this.required ? ' mrd-relation-field__label--required' : ''}` }, this.label)), h("select", { class: `mrd-relation-field__select${hasError ? ' mrd-relation-field__select--error' : ''}`, name: this.name, required: this.required, disabled: this.disabled, onChange: this.handleDropdownChange }, h("option", { value: "" }, t('select_placeholder', this.locale)), this.dropdownValues.map(dv => (h("option", { key: dv.key, value: dv.key, selected: dv.key === currentValue }, dv.label)))), hasError && h("span", { class: "mrd-relation-field__error" }, this.error))));
|
|
243
|
-
}
|
|
244
|
-
// SEARCH mode
|
|
245
|
-
const labelEl = this.label && (h("label", { class: `mrd-relation-field__label${this.required ? ' mrd-relation-field__label--required' : ''}` }, this.label));
|
|
246
|
-
// Single selection: show selected value as a badge, hide the search input
|
|
247
|
-
if (!this.multiple && this.selectedItems.length > 0) {
|
|
248
|
-
return (h(Host, null, h("div", { class: "mrd-relation-field" }, labelEl, h("div", { class: `mrd-relation-field__selected-value${hasError ? ' mrd-relation-field__selected-value--error' : ''}` }, h("span", { class: "mrd-relation-field__selected-name" }, this.selectedItems[0].label), h("button", { type: "button", class: "mrd-relation-field__selected-clear", onClick: this.clearSelection, "aria-label": t('remove', this.locale) }, "\u2715")), hasError && h("span", { class: "mrd-relation-field__error" }, this.error))));
|
|
249
|
-
}
|
|
250
|
-
return (h(Host, null, h("div", { class: "mrd-relation-field" }, labelEl, this.multiple && this.selectedItems.length > 0 && (h("div", { class: "mrd-relation-field__tags" }, this.selectedItems.map(item => (h("span", { key: item.id, class: "mrd-relation-field__tag" }, item.label, h("button", { type: "button", class: "mrd-relation-field__tag-remove", onClick: () => this.handleRemoveSelected(item.id), "aria-label": t('remove', this.locale) }, "\u2715")))))), h("div", { class: "mrd-relation-field__search-wrapper" }, h("input", { class: `mrd-relation-field__search${hasError ? ' mrd-relation-field__search--error' : ''}`, type: "text", value: this.searchQuery, placeholder: t('search_placeholder', this.locale), disabled: this.disabled, onInput: this.handleSearchInput, onKeyDown: this.handleKeyDown, onBlur: this.handleBlur }), this.isLoading && (h("span", { class: "mrd-relation-field__spinner", "aria-label": t('loading', this.locale) }))), this.showResults && (h("div", { class: "mrd-relation-field__results" }, this.searchResults.length === 0 && !this.isLoading ? (h("div", { class: "mrd-relation-field__no-results" }, t('no_results', this.locale))) : (this.searchResults.map((result, i) => (h("div", { key: result.id, class: `mrd-relation-field__result-item${i === this.highlightedIndex ? ' mrd-relation-field__result-item--highlighted' : ''}`, onMouseDown: () => this.handleResultSelect(result) }, h("span", { class: "mrd-relation-field__result-label" }, result.label), result.description && (h("span", { class: "mrd-relation-field__result-desc" }, result.description)))))))), hasError && h("span", { class: "mrd-relation-field__error" }, this.error))));
|
|
251
|
-
}
|
|
252
|
-
get el() { return getElement(this); }
|
|
253
|
-
static get watchers() { return {
|
|
254
|
-
"allRecords": [{
|
|
255
|
-
"allRecordsChanged": 0
|
|
256
|
-
}],
|
|
257
|
-
"value": [{
|
|
258
|
-
"valueChanged": 0
|
|
259
|
-
}]
|
|
260
|
-
}; }
|
|
261
|
-
};
|
|
262
|
-
MrdRelationField.style = mrdRelationFieldScss();
|
|
263
|
-
|
|
264
|
-
export { MrdRelationField as mrd_relation_field };
|
|
265
|
-
//# sourceMappingURL=mrd-relation-field.entry.esm.js.map
|
|
266
|
-
|
|
267
|
-
//# sourceMappingURL=mrd-relation-field.entry.js.map
|