@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.
Files changed (161) hide show
  1. package/dist/cjs/app-globals-V2Kpy_OQ.js +5 -0
  2. package/dist/cjs/index-BPj2cBXs.js +1570 -0
  3. package/dist/cjs/index.cjs.js +66 -0
  4. package/dist/cjs/loader.cjs.js +13 -0
  5. package/dist/cjs/mosterdcomponents.cjs.js +25 -0
  6. package/dist/cjs/mrd-boolean-field_20.cjs.entry.js +3961 -0
  7. package/dist/cjs/quill-DmFfnC1f.js +16272 -0
  8. package/dist/collection/collection-manifest.json +32 -0
  9. package/dist/collection/components/mrd-boolean-field/mrd-boolean-field.js +199 -0
  10. package/dist/collection/components/mrd-boolean-field/mrd-boolean-field.scss +77 -0
  11. package/dist/collection/components/mrd-currency-field/mrd-currency-field.js +248 -0
  12. package/dist/collection/components/mrd-currency-field/mrd-currency-field.scss +100 -0
  13. package/dist/collection/components/mrd-date-field/mrd-date-field.js +206 -0
  14. package/dist/collection/components/mrd-date-field/mrd-date-field.scss +66 -0
  15. package/dist/collection/components/mrd-datetime-field/mrd-datetime-field.js +240 -0
  16. package/dist/collection/components/mrd-datetime-field/mrd-datetime-field.scss +66 -0
  17. package/dist/collection/components/mrd-email-field/mrd-email-field.js +230 -0
  18. package/dist/collection/components/mrd-email-field/mrd-email-field.scss +69 -0
  19. package/dist/{mosterdcomponents/mrd-field.entry.js → collection/components/mrd-field/mrd-field.js} +179 -28
  20. package/dist/collection/components/mrd-field/mrd-field.scss +118 -0
  21. package/dist/collection/components/mrd-file-field/mrd-file-field.js +341 -0
  22. package/dist/collection/components/mrd-file-field/mrd-file-field.scss +153 -0
  23. package/dist/{mosterdcomponents/mrd-form.entry.js → collection/components/mrd-form/mrd-form.js} +308 -31
  24. package/dist/collection/components/mrd-form/mrd-form.scss +148 -0
  25. package/dist/collection/components/mrd-hyperlink-field/mrd-hyperlink-field.js +291 -0
  26. package/dist/collection/components/mrd-hyperlink-field/mrd-hyperlink-field.scss +91 -0
  27. package/dist/collection/components/mrd-image-field/mrd-image-field.js +356 -0
  28. package/dist/collection/components/mrd-image-field/mrd-image-field.scss +190 -0
  29. package/dist/{mosterdcomponents/mrd-layout-section.entry.js → collection/components/mrd-layout-section/mrd-layout-section.js} +420 -33
  30. package/dist/collection/components/mrd-layout-section/mrd-layout-section.scss +445 -0
  31. package/dist/collection/components/mrd-list-field/mrd-list-field.js +313 -0
  32. package/dist/collection/components/mrd-list-field/mrd-list-field.scss +109 -0
  33. package/dist/collection/components/mrd-longtext-field/mrd-longtext-field.js +227 -0
  34. package/dist/collection/components/mrd-longtext-field/mrd-longtext-field.scss +78 -0
  35. package/dist/collection/components/mrd-number-field/mrd-number-field.js +316 -0
  36. package/dist/collection/components/mrd-number-field/mrd-number-field.scss +77 -0
  37. package/dist/collection/components/mrd-relation-field/mrd-relation-field.js +707 -0
  38. package/dist/collection/components/mrd-relation-field/mrd-relation-field.scss +266 -0
  39. package/dist/collection/components/mrd-secret-field/mrd-secret-field.js +229 -0
  40. package/dist/collection/components/mrd-secret-field/mrd-secret-field.scss +73 -0
  41. package/dist/{mosterdcomponents/mrd-table.entry.js → collection/components/mrd-table/mrd-table.js} +394 -32
  42. package/dist/collection/components/mrd-table/mrd-table.scss +809 -0
  43. package/dist/collection/components/mrd-text-field/mrd-text-field.js +227 -0
  44. package/dist/collection/components/mrd-text-field/mrd-text-field.scss +69 -0
  45. package/dist/collection/components/mrd-textarea-field/mrd-textarea-field.js +267 -0
  46. package/dist/collection/components/mrd-textarea-field/mrd-textarea-field.scss +79 -0
  47. package/dist/collection/components/mrd-time-field/mrd-time-field.js +206 -0
  48. package/dist/collection/components/mrd-time-field/mrd-time-field.scss +66 -0
  49. package/dist/collection/dev/api.js +145 -0
  50. package/dist/collection/dev/app.js +890 -0
  51. package/dist/collection/dev/auth.js +156 -0
  52. package/dist/collection/dev/example-data.js +403 -0
  53. package/dist/collection/dev/sprites.svg +55 -0
  54. package/dist/collection/index.js +1 -0
  55. package/dist/collection/types/client-layout.js +64 -0
  56. package/dist/collection/types/index.js +1 -0
  57. package/dist/{mosterdcomponents/cell-renderer-CbRwLOo8.js → collection/utils/cell-renderer.js} +3 -9
  58. package/dist/{mosterdcomponents/format-BAfsQfy1.js → collection/utils/format.js} +7 -12
  59. package/dist/{mosterdcomponents/i18n-hoGGKbKU.js → collection/utils/i18n.js} +1 -6
  60. package/dist/{mosterdcomponents/validation-ixb43cqU.js → collection/utils/validation.js} +5 -12
  61. package/dist/components/client-layout.js +1 -0
  62. package/dist/components/format.js +1 -0
  63. package/dist/components/i18n.js +1 -0
  64. package/dist/components/index.js +1 -0
  65. package/dist/components/mrd-boolean-field.js +1 -0
  66. package/dist/components/mrd-boolean-field2.js +1 -0
  67. package/dist/components/mrd-currency-field.js +1 -0
  68. package/dist/components/mrd-currency-field2.js +1 -0
  69. package/dist/components/mrd-date-field.js +1 -0
  70. package/dist/components/mrd-date-field2.js +1 -0
  71. package/dist/components/mrd-datetime-field.js +1 -0
  72. package/dist/components/mrd-datetime-field2.js +1 -0
  73. package/dist/components/mrd-email-field.js +1 -0
  74. package/dist/components/mrd-email-field2.js +1 -0
  75. package/dist/components/mrd-field.js +1 -0
  76. package/dist/components/mrd-field2.js +1 -0
  77. package/dist/components/mrd-file-field.js +1 -0
  78. package/dist/components/mrd-file-field2.js +1 -0
  79. package/dist/components/mrd-form.js +1 -0
  80. package/dist/components/mrd-hyperlink-field.js +1 -0
  81. package/dist/components/mrd-hyperlink-field2.js +1 -0
  82. package/dist/components/mrd-image-field.js +1 -0
  83. package/dist/components/mrd-image-field2.js +1 -0
  84. package/dist/components/mrd-layout-section.js +1 -0
  85. package/dist/components/mrd-list-field.js +1 -0
  86. package/dist/components/mrd-list-field2.js +1 -0
  87. package/dist/components/mrd-longtext-field.js +1 -0
  88. package/dist/components/mrd-longtext-field2.js +1 -0
  89. package/dist/components/mrd-number-field.js +1 -0
  90. package/dist/components/mrd-number-field2.js +1 -0
  91. package/dist/components/mrd-relation-field.js +1 -0
  92. package/dist/components/mrd-relation-field2.js +1 -0
  93. package/dist/components/mrd-secret-field.js +1 -0
  94. package/dist/components/mrd-secret-field2.js +1 -0
  95. package/dist/components/mrd-table.js +1 -0
  96. package/dist/components/mrd-table2.js +1 -0
  97. package/dist/components/mrd-text-field.js +1 -0
  98. package/dist/components/mrd-text-field2.js +1 -0
  99. package/dist/components/mrd-textarea-field.js +1 -0
  100. package/dist/components/mrd-textarea-field2.js +1 -0
  101. package/dist/components/mrd-time-field.js +1 -0
  102. package/dist/components/mrd-time-field2.js +1 -0
  103. package/dist/components/quill.js +1 -0
  104. package/dist/components/validation.js +1 -0
  105. package/dist/esm/app-globals-DQuL1Twl.js +3 -0
  106. package/dist/esm/index-_tsCCkAi.js +1561 -0
  107. package/dist/{mosterdcomponents/client-layout-D88nn5zf.js → esm/index.js} +1 -4
  108. package/dist/esm/loader.js +11 -0
  109. package/dist/esm/mosterdcomponents.js +21 -0
  110. package/dist/esm/mrd-boolean-field_20.entry.js +3940 -0
  111. package/dist/{mosterdcomponents/quill-C9pgw_k-.js → esm/quill-CiuCgGz_.js} +1347 -16232
  112. package/dist/index.cjs.js +1 -0
  113. package/dist/index.js +1 -0
  114. package/dist/mosterdcomponents/index-6yQUNVww.js.map +1 -0
  115. package/dist/mosterdcomponents/index.esm.js +1 -5
  116. package/dist/mosterdcomponents/mosterdcomponents.css +1 -180
  117. package/dist/mosterdcomponents/mosterdcomponents.esm.js +1 -50
  118. package/dist/mosterdcomponents/p-7bfaee51.entry.js +1 -0
  119. package/dist/mosterdcomponents/p-CiuCgGz_.js +1 -0
  120. package/dist/mosterdcomponents/p-DQuL1Twl.js +1 -0
  121. package/dist/mosterdcomponents/p-_tsCCkAi.js +2 -0
  122. package/package.json +1 -1
  123. package/dist/mosterdcomponents/index-B_tPFIvS.js +0 -4585
  124. package/dist/mosterdcomponents/index-B_tPFIvS.js.map +0 -1
  125. package/dist/mosterdcomponents/index-I5SuYv7a.js +0 -4
  126. package/dist/mosterdcomponents/mrd-boolean-field.entry.js +0 -37
  127. package/dist/mosterdcomponents/mrd-boolean-field.entry.js.map +0 -1
  128. package/dist/mosterdcomponents/mrd-currency-field.entry.js +0 -67
  129. package/dist/mosterdcomponents/mrd-currency-field.entry.js.map +0 -1
  130. package/dist/mosterdcomponents/mrd-date-field.entry.js +0 -46
  131. package/dist/mosterdcomponents/mrd-date-field.entry.js.map +0 -1
  132. package/dist/mosterdcomponents/mrd-datetime-field.entry.js +0 -78
  133. package/dist/mosterdcomponents/mrd-datetime-field.entry.js.map +0 -1
  134. package/dist/mosterdcomponents/mrd-email-field.entry.js +0 -50
  135. package/dist/mosterdcomponents/mrd-email-field.entry.js.map +0 -1
  136. package/dist/mosterdcomponents/mrd-field.entry.js.map +0 -1
  137. package/dist/mosterdcomponents/mrd-file-field.entry.js +0 -108
  138. package/dist/mosterdcomponents/mrd-file-field.entry.js.map +0 -1
  139. package/dist/mosterdcomponents/mrd-form.entry.js.map +0 -1
  140. package/dist/mosterdcomponents/mrd-hyperlink-field.entry.js +0 -87
  141. package/dist/mosterdcomponents/mrd-hyperlink-field.entry.js.map +0 -1
  142. package/dist/mosterdcomponents/mrd-image-field.entry.js +0 -122
  143. package/dist/mosterdcomponents/mrd-image-field.entry.js.map +0 -1
  144. package/dist/mosterdcomponents/mrd-layout-section.entry.js.map +0 -1
  145. package/dist/mosterdcomponents/mrd-list-field.entry.js +0 -107
  146. package/dist/mosterdcomponents/mrd-list-field.entry.js.map +0 -1
  147. package/dist/mosterdcomponents/mrd-longtext-field.entry.js +0 -47
  148. package/dist/mosterdcomponents/mrd-longtext-field.entry.js.map +0 -1
  149. package/dist/mosterdcomponents/mrd-number-field.entry.js +0 -87
  150. package/dist/mosterdcomponents/mrd-number-field.entry.js.map +0 -1
  151. package/dist/mosterdcomponents/mrd-relation-field.entry.js +0 -267
  152. package/dist/mosterdcomponents/mrd-relation-field.entry.js.map +0 -1
  153. package/dist/mosterdcomponents/mrd-secret-field.entry.js +0 -49
  154. package/dist/mosterdcomponents/mrd-secret-field.entry.js.map +0 -1
  155. package/dist/mosterdcomponents/mrd-table.entry.js.map +0 -1
  156. package/dist/mosterdcomponents/mrd-text-field.entry.js +0 -47
  157. package/dist/mosterdcomponents/mrd-text-field.entry.js.map +0 -1
  158. package/dist/mosterdcomponents/mrd-textarea-field.entry.js +0 -86
  159. package/dist/mosterdcomponents/mrd-textarea-field.entry.js.map +0 -1
  160. package/dist/mosterdcomponents/mrd-time-field.entry.js +0 -46
  161. 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":"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","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