@mmlogic/components 0.3.5 → 0.3.6
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/{collection/utils/cell-renderer.js → mosterdcomponents/cell-renderer-CbRwLOo8.js} +9 -3
- package/dist/mosterdcomponents/cell-renderer-CbRwLOo8.js.map +1 -0
- package/dist/{esm/index.js → mosterdcomponents/client-layout-D88nn5zf.js} +4 -1
- package/dist/mosterdcomponents/client-layout-D88nn5zf.js.map +1 -0
- package/dist/{collection/utils/format.js → mosterdcomponents/format-BAfsQfy1.js} +12 -7
- package/dist/mosterdcomponents/format-BAfsQfy1.js.map +1 -0
- package/dist/{collection/utils/i18n.js → mosterdcomponents/i18n-hoGGKbKU.js} +6 -1
- package/dist/mosterdcomponents/i18n-hoGGKbKU.js.map +1 -0
- package/dist/mosterdcomponents/index-B_tPFIvS.js +4585 -0
- package/dist/mosterdcomponents/index-B_tPFIvS.js.map +1 -0
- package/dist/mosterdcomponents/index-I5SuYv7a.js +4 -0
- package/dist/mosterdcomponents/index-I5SuYv7a.js.map +1 -0
- package/dist/mosterdcomponents/index.esm.js +5 -1
- package/dist/mosterdcomponents/index.esm.js.map +1 -0
- package/dist/mosterdcomponents/mosterdcomponents.css +180 -1
- package/dist/mosterdcomponents/mosterdcomponents.esm.js +50 -1
- package/dist/mosterdcomponents/mosterdcomponents.esm.js.map +1 -0
- package/dist/mosterdcomponents/mrd-boolean-field.entry.js +37 -0
- package/dist/mosterdcomponents/mrd-boolean-field.entry.js.map +1 -0
- package/dist/mosterdcomponents/mrd-currency-field.entry.js +67 -0
- package/dist/mosterdcomponents/mrd-currency-field.entry.js.map +1 -0
- package/dist/mosterdcomponents/mrd-date-field.entry.js +46 -0
- package/dist/mosterdcomponents/mrd-date-field.entry.js.map +1 -0
- package/dist/mosterdcomponents/mrd-datetime-field.entry.js +78 -0
- package/dist/mosterdcomponents/mrd-datetime-field.entry.js.map +1 -0
- package/dist/mosterdcomponents/mrd-email-field.entry.js +50 -0
- package/dist/mosterdcomponents/mrd-email-field.entry.js.map +1 -0
- package/dist/{collection/components/mrd-field/mrd-field.js → mosterdcomponents/mrd-field.entry.js} +28 -179
- package/dist/mosterdcomponents/mrd-field.entry.js.map +1 -0
- package/dist/mosterdcomponents/mrd-file-field.entry.js +108 -0
- package/dist/mosterdcomponents/mrd-file-field.entry.js.map +1 -0
- package/dist/{collection/components/mrd-form/mrd-form.js → mosterdcomponents/mrd-form.entry.js} +31 -308
- package/dist/mosterdcomponents/mrd-form.entry.js.map +1 -0
- package/dist/mosterdcomponents/mrd-hyperlink-field.entry.js +87 -0
- package/dist/mosterdcomponents/mrd-hyperlink-field.entry.js.map +1 -0
- package/dist/mosterdcomponents/mrd-image-field.entry.js +122 -0
- package/dist/mosterdcomponents/mrd-image-field.entry.js.map +1 -0
- package/dist/{collection/components/mrd-layout-section/mrd-layout-section.js → mosterdcomponents/mrd-layout-section.entry.js} +31 -418
- package/dist/mosterdcomponents/mrd-layout-section.entry.js.map +1 -0
- package/dist/mosterdcomponents/mrd-list-field.entry.js +107 -0
- package/dist/mosterdcomponents/mrd-list-field.entry.js.map +1 -0
- package/dist/mosterdcomponents/mrd-longtext-field.entry.js +47 -0
- package/dist/mosterdcomponents/mrd-longtext-field.entry.js.map +1 -0
- package/dist/mosterdcomponents/mrd-number-field.entry.js +87 -0
- package/dist/mosterdcomponents/mrd-number-field.entry.js.map +1 -0
- package/dist/mosterdcomponents/mrd-relation-field.entry.js +267 -0
- package/dist/mosterdcomponents/mrd-relation-field.entry.js.map +1 -0
- package/dist/mosterdcomponents/mrd-secret-field.entry.js +49 -0
- package/dist/mosterdcomponents/mrd-secret-field.entry.js.map +1 -0
- package/dist/{collection/components/mrd-table/mrd-table.js → mosterdcomponents/mrd-table.entry.js} +32 -394
- package/dist/mosterdcomponents/mrd-table.entry.js.map +1 -0
- package/dist/mosterdcomponents/mrd-text-field.entry.js +47 -0
- package/dist/mosterdcomponents/mrd-text-field.entry.js.map +1 -0
- package/dist/mosterdcomponents/mrd-textarea-field.entry.js +86 -0
- package/dist/mosterdcomponents/mrd-textarea-field.entry.js.map +1 -0
- package/dist/mosterdcomponents/mrd-time-field.entry.js +46 -0
- package/dist/mosterdcomponents/mrd-time-field.entry.js.map +1 -0
- package/dist/{esm/quill-CiuCgGz_.js → mosterdcomponents/quill-C9pgw_k-.js} +16282 -1397
- package/dist/mosterdcomponents/quill-C9pgw_k-.js.map +1 -0
- package/dist/{collection/utils/validation.js → mosterdcomponents/validation-ixb43cqU.js} +12 -5
- package/dist/mosterdcomponents/validation-ixb43cqU.js.map +1 -0
- package/package.json +1 -1
- package/dist/cjs/app-globals-V2Kpy_OQ.js +0 -5
- package/dist/cjs/index-BPj2cBXs.js +0 -1570
- package/dist/cjs/index.cjs.js +0 -66
- package/dist/cjs/loader.cjs.js +0 -13
- package/dist/cjs/mosterdcomponents.cjs.js +0 -25
- package/dist/cjs/mrd-boolean-field_20.cjs.entry.js +0 -3961
- package/dist/cjs/quill-DmFfnC1f.js +0 -16272
- package/dist/collection/collection-manifest.json +0 -32
- package/dist/collection/components/mrd-boolean-field/mrd-boolean-field.js +0 -199
- package/dist/collection/components/mrd-boolean-field/mrd-boolean-field.scss +0 -77
- package/dist/collection/components/mrd-currency-field/mrd-currency-field.js +0 -248
- package/dist/collection/components/mrd-currency-field/mrd-currency-field.scss +0 -100
- package/dist/collection/components/mrd-date-field/mrd-date-field.js +0 -206
- package/dist/collection/components/mrd-date-field/mrd-date-field.scss +0 -66
- package/dist/collection/components/mrd-datetime-field/mrd-datetime-field.js +0 -240
- package/dist/collection/components/mrd-datetime-field/mrd-datetime-field.scss +0 -66
- package/dist/collection/components/mrd-email-field/mrd-email-field.js +0 -230
- package/dist/collection/components/mrd-email-field/mrd-email-field.scss +0 -69
- package/dist/collection/components/mrd-field/mrd-field.scss +0 -118
- package/dist/collection/components/mrd-file-field/mrd-file-field.js +0 -341
- package/dist/collection/components/mrd-file-field/mrd-file-field.scss +0 -153
- package/dist/collection/components/mrd-form/mrd-form.scss +0 -148
- package/dist/collection/components/mrd-hyperlink-field/mrd-hyperlink-field.js +0 -291
- package/dist/collection/components/mrd-hyperlink-field/mrd-hyperlink-field.scss +0 -91
- package/dist/collection/components/mrd-image-field/mrd-image-field.js +0 -356
- package/dist/collection/components/mrd-image-field/mrd-image-field.scss +0 -190
- package/dist/collection/components/mrd-layout-section/mrd-layout-section.scss +0 -445
- package/dist/collection/components/mrd-list-field/mrd-list-field.js +0 -313
- package/dist/collection/components/mrd-list-field/mrd-list-field.scss +0 -109
- package/dist/collection/components/mrd-longtext-field/mrd-longtext-field.js +0 -227
- package/dist/collection/components/mrd-longtext-field/mrd-longtext-field.scss +0 -78
- package/dist/collection/components/mrd-number-field/mrd-number-field.js +0 -316
- package/dist/collection/components/mrd-number-field/mrd-number-field.scss +0 -77
- package/dist/collection/components/mrd-relation-field/mrd-relation-field.js +0 -707
- package/dist/collection/components/mrd-relation-field/mrd-relation-field.scss +0 -266
- package/dist/collection/components/mrd-secret-field/mrd-secret-field.js +0 -229
- package/dist/collection/components/mrd-secret-field/mrd-secret-field.scss +0 -73
- package/dist/collection/components/mrd-table/mrd-table.scss +0 -809
- package/dist/collection/components/mrd-text-field/mrd-text-field.js +0 -227
- package/dist/collection/components/mrd-text-field/mrd-text-field.scss +0 -69
- package/dist/collection/components/mrd-textarea-field/mrd-textarea-field.js +0 -267
- package/dist/collection/components/mrd-textarea-field/mrd-textarea-field.scss +0 -135
- package/dist/collection/components/mrd-time-field/mrd-time-field.js +0 -206
- package/dist/collection/components/mrd-time-field/mrd-time-field.scss +0 -66
- package/dist/collection/dev/api.js +0 -145
- package/dist/collection/dev/app.js +0 -890
- package/dist/collection/dev/auth.js +0 -156
- package/dist/collection/dev/example-data.js +0 -403
- package/dist/collection/dev/sprites.svg +0 -55
- package/dist/collection/index.js +0 -1
- package/dist/collection/types/client-layout.js +0 -64
- package/dist/collection/types/index.js +0 -1
- package/dist/components/client-layout.js +0 -1
- package/dist/components/format.js +0 -1
- package/dist/components/i18n.js +0 -1
- package/dist/components/index.js +0 -1
- package/dist/components/mrd-boolean-field.js +0 -1
- package/dist/components/mrd-boolean-field2.js +0 -1
- package/dist/components/mrd-currency-field.js +0 -1
- package/dist/components/mrd-currency-field2.js +0 -1
- package/dist/components/mrd-date-field.js +0 -1
- package/dist/components/mrd-date-field2.js +0 -1
- package/dist/components/mrd-datetime-field.js +0 -1
- package/dist/components/mrd-datetime-field2.js +0 -1
- package/dist/components/mrd-email-field.js +0 -1
- package/dist/components/mrd-email-field2.js +0 -1
- package/dist/components/mrd-field.js +0 -1
- package/dist/components/mrd-field2.js +0 -1
- package/dist/components/mrd-file-field.js +0 -1
- package/dist/components/mrd-file-field2.js +0 -1
- package/dist/components/mrd-form.js +0 -1
- package/dist/components/mrd-hyperlink-field.js +0 -1
- package/dist/components/mrd-hyperlink-field2.js +0 -1
- package/dist/components/mrd-image-field.js +0 -1
- package/dist/components/mrd-image-field2.js +0 -1
- package/dist/components/mrd-layout-section.js +0 -1
- package/dist/components/mrd-list-field.js +0 -1
- package/dist/components/mrd-list-field2.js +0 -1
- package/dist/components/mrd-longtext-field.js +0 -1
- package/dist/components/mrd-longtext-field2.js +0 -1
- package/dist/components/mrd-number-field.js +0 -1
- package/dist/components/mrd-number-field2.js +0 -1
- package/dist/components/mrd-relation-field.js +0 -1
- package/dist/components/mrd-relation-field2.js +0 -1
- package/dist/components/mrd-secret-field.js +0 -1
- package/dist/components/mrd-secret-field2.js +0 -1
- package/dist/components/mrd-table.js +0 -1
- package/dist/components/mrd-table2.js +0 -1
- package/dist/components/mrd-text-field.js +0 -1
- package/dist/components/mrd-text-field2.js +0 -1
- package/dist/components/mrd-textarea-field.js +0 -1
- package/dist/components/mrd-textarea-field2.js +0 -1
- package/dist/components/mrd-time-field.js +0 -1
- package/dist/components/mrd-time-field2.js +0 -1
- package/dist/components/quill.js +0 -1
- package/dist/components/validation.js +0 -1
- package/dist/esm/app-globals-DQuL1Twl.js +0 -3
- package/dist/esm/index-_tsCCkAi.js +0 -1561
- package/dist/esm/loader.js +0 -11
- package/dist/esm/mosterdcomponents.js +0 -21
- package/dist/esm/mrd-boolean-field_20.entry.js +0 -3940
- package/dist/index.cjs.js +0 -1
- package/dist/index.js +0 -1
- package/dist/mosterdcomponents/p-CiuCgGz_.js +0 -1
- package/dist/mosterdcomponents/p-DQuL1Twl.js +0 -1
- package/dist/mosterdcomponents/p-_tsCCkAi.js +0 -2
- package/dist/mosterdcomponents/p-e477187c.entry.js +0 -1
|
@@ -0,0 +1,267 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"file":"mrd-relation-field.entry.js","mappings":"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","names":[],"sources":["src/components/mrd-relation-field/mrd-relation-field.scss?tag=mrd-relation-field&encapsulation=scoped","src/components/mrd-relation-field/mrd-relation-field.tsx"],"sourcesContent":[":host {\n display: block;\n}\n\n.mrd-relation-field {\n display: flex;\n flex-direction: column;\n gap: var(--mrd-space-1);\n width: 100%;\n position: relative;\n}\n\n.mrd-relation-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-relation-field__label--required::after {\n content: ' *';\n color: var(--mrd-color-danger);\n}\n\n.mrd-relation-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 outline: none;\n appearance: none;\n cursor: pointer;\n box-sizing: border-box;\n}\n\n.mrd-relation-field__select:focus {\n border-color: var(--mrd-border-color-focus);\n box-shadow: var(--mrd-shadow-focus);\n}\n\n.mrd-relation-field__select:disabled {\n background-color: var(--mrd-input-bg-disabled);\n cursor: not-allowed;\n opacity: 0.7;\n}\n\n.mrd-relation-field__select--error {\n border-color: var(--mrd-border-color-error);\n}\n\n.mrd-relation-field__select--error:focus {\n box-shadow: var(--mrd-shadow-focus-error);\n}\n\n.mrd-relation-field__tags {\n display: flex;\n flex-wrap: wrap;\n gap: var(--mrd-space-1);\n margin-bottom: var(--mrd-space-1);\n}\n\n.mrd-relation-field__tag {\n display: inline-flex;\n align-items: center;\n gap: var(--mrd-space-1);\n padding: var(--mrd-space-1) var(--mrd-space-2);\n background-color: var(--mrd-color-primary-light);\n color: var(--mrd-color-primary-dark);\n border-radius: var(--mrd-border-radius-full);\n font-family: var(--mrd-font-family);\n font-size: var(--mrd-font-size-sm);\n font-weight: var(--mrd-font-weight-medium);\n}\n\n.mrd-relation-field__tag-remove {\n background: none;\n border: none;\n cursor: pointer;\n color: var(--mrd-color-primary-dark);\n font-size: var(--mrd-font-size-xs);\n padding: 0;\n line-height: 1;\n opacity: 0.7;\n}\n\n.mrd-relation-field__tag-remove:hover {\n opacity: 1;\n}\n\n.mrd-relation-field__search-wrapper {\n position: relative;\n display: flex;\n align-items: center;\n}\n\n.mrd-relation-field__search {\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 outline: none;\n appearance: none;\n box-sizing: border-box;\n}\n\n.mrd-relation-field__search::placeholder {\n color: var(--mrd-input-placeholder-color);\n}\n\n.mrd-relation-field__search:focus {\n border-color: var(--mrd-border-color-focus);\n box-shadow: var(--mrd-shadow-focus);\n}\n\n.mrd-relation-field__search:disabled {\n background-color: var(--mrd-input-bg-disabled);\n cursor: not-allowed;\n opacity: 0.7;\n}\n\n.mrd-relation-field__search--error {\n border-color: var(--mrd-border-color-error);\n}\n\n.mrd-relation-field__search--error:focus {\n box-shadow: var(--mrd-shadow-focus-error);\n}\n\n.mrd-relation-field__spinner {\n position: absolute;\n right: var(--mrd-space-3);\n width: 16px;\n height: 16px;\n border: 2px solid var(--mrd-color-neutral-200);\n border-top-color: var(--mrd-color-primary);\n border-radius: 50%;\n animation: mrd-spin 0.7s linear infinite;\n}\n\n@keyframes mrd-spin {\n to { transform: rotate(360deg); }\n}\n\n.mrd-relation-field__results {\n position: absolute;\n top: calc(100% + var(--mrd-space-1));\n left: 0;\n right: 0;\n background-color: var(--mrd-color-white);\n border: var(--mrd-border-width) solid var(--mrd-border-color);\n border-radius: var(--mrd-border-radius);\n box-shadow: var(--mrd-shadow-md);\n z-index: var(--mrd-z-dropdown);\n max-height: 240px;\n overflow-y: auto;\n}\n\n.mrd-relation-field__result-item {\n display: flex;\n flex-direction: column;\n padding: var(--mrd-space-2) var(--mrd-space-3);\n cursor: pointer;\n transition: background-color var(--mrd-transition-fast);\n}\n\n.mrd-relation-field__result-item:hover {\n background-color: var(--mrd-color-neutral-50);\n}\n\n.mrd-relation-field__result-item:not(:last-child) {\n border-bottom: var(--mrd-border-width) solid var(--mrd-color-neutral-100);\n}\n\n.mrd-relation-field__result-label {\n font-family: var(--mrd-font-family);\n font-size: var(--mrd-font-size-base);\n color: var(--mrd-color-neutral-800);\n font-weight: var(--mrd-font-weight-medium);\n}\n\n.mrd-relation-field__result-desc {\n font-family: var(--mrd-font-family);\n font-size: var(--mrd-font-size-xs);\n color: var(--mrd-color-neutral-500);\n margin-top: var(--mrd-space-1);\n}\n\n.mrd-relation-field__result-item--highlighted {\n background-color: var(--mrd-color-primary-light);\n}\n\n.mrd-relation-field__selected-value {\n display: flex;\n align-items: center;\n gap: var(--mrd-space-2);\n height: var(--mrd-input-height);\n padding: var(--mrd-input-padding-y) var(--mrd-input-padding-x);\n background-color: var(--mrd-color-primary-light);\n border: var(--mrd-border-width) solid var(--mrd-color-primary);\n border-radius: var(--mrd-border-radius);\n box-sizing: border-box;\n}\n\n.mrd-relation-field__selected-value--error {\n border-color: var(--mrd-border-color-error);\n background-color: var(--mrd-color-danger-light);\n}\n\n.mrd-relation-field__selected-name {\n flex: 1;\n font-family: var(--mrd-font-family);\n font-size: var(--mrd-font-size-base);\n font-weight: var(--mrd-font-weight-medium);\n color: var(--mrd-color-primary-dark);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.mrd-relation-field__selected-clear {\n flex-shrink: 0;\n background: none;\n border: none;\n cursor: pointer;\n color: var(--mrd-color-primary-dark);\n font-size: var(--mrd-font-size-sm);\n padding: 0;\n line-height: 1;\n opacity: 0.6;\n transition: opacity var(--mrd-transition-fast);\n}\n\n.mrd-relation-field__selected-clear:hover {\n opacity: 1;\n}\n\n.mrd-relation-field__no-results {\n padding: var(--mrd-space-4);\n font-family: var(--mrd-font-family);\n font-size: var(--mrd-font-size-sm);\n color: var(--mrd-color-neutral-500);\n text-align: center;\n}\n\n.mrd-relation-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, Method, Watch, Element } from '@stencil/core';\nimport { t } from '../../utils/i18n';\nimport { validateRequired } from '../../utils/validation';\nimport { ClientLayoutItemRelationDisplayType, ClientLayoutItemRelationEditBehavior, ClientListValue, RelationSearchResult } from '../../types';\n\n@Component({\n tag: 'mrd-relation-field',\n styleUrl: 'mrd-relation-field.scss',\n scoped: true,\n})\nexport class MrdRelationField {\n @Element() el!: HTMLElement;\n\n @Prop() name: string = '';\n @Prop() label: string = '';\n @Prop() required: boolean = false;\n @Prop() disabled: boolean = false;\n @Prop() locale: string = navigator.language;\n @Prop() relatedClass: string = '';\n /** When set, used instead of relatedClass for search queries (mostSignificantClass from API). */\n @Prop() mostSignificantClass: string = '';\n @Prop() displayType: ClientLayoutItemRelationDisplayType = ClientLayoutItemRelationDisplayType.SEARCH;\n @Prop() editBehavior?: ClientLayoutItemRelationEditBehavior | null;\n @Prop() commonRelation?: string;\n @Prop() multiple: boolean = false;\n @Prop() dropdownValues: ClientListValue[] = [];\n /** Plain href string/array for normal use; pass { id, label } objects to pre-fill a loaded record. */\n @Prop() value: string | string[] | RelationSearchResult | RelationSearchResult[] | null = null;\n\n @State() searchQuery: string = '';\n @State() searchResults: RelationSearchResult[] = [];\n @State() allRecords: RelationSearchResult[] = [];\n @State() isLoading: boolean = false;\n @State() selectedItems: RelationSearchResult[] = [];\n @State() showResults: boolean = false;\n @State() error: string = '';\n @State() highlightedIndex: number = -1;\n\n @Event() mrdChange!: EventEmitter<{ name: string; value: string | string[] | null }>;\n @Event() mrdBlur!: EventEmitter<{ name: string; value: string | string[] | null }>;\n @Event() mrdSearch!: EventEmitter<{ name: string; query: string; relatedClass: string }>;\n @Event() mrdFetchAll!: EventEmitter<{ name: string; relatedClass: string; mostSignificantClass?: string; commonRelation?: string; filter?: string; filterValue?: string }>;\n\n @Method()\n async setAllRecords(records: RelationSearchResult[]): Promise<void> {\n this.allRecords = records;\n }\n\n private getValueHref(): string {\n const v = Array.isArray(this.value) ? (this.value[0] ?? '') : (this.value ?? '');\n if (!v) return '';\n if (typeof v === 'object') return (v as RelationSearchResult).id ?? '';\n return v as string;\n }\n\n @Watch('allRecords')\n allRecordsChanged() {\n if (this.editBehavior !== ClientLayoutItemRelationEditBehavior.DROPDOWN) return;\n const current = this.getValueHref();\n if (!current) return;\n // Defer past Stencil's async render cycle: options must exist in the DOM before\n // select.value can be set. setAttribute('selected') alone is ignored by browsers\n // when the select already has an established value.\n setTimeout(() => {\n const select = this.el?.querySelector('select');\n if (select) select.value = current;\n }, 0);\n }\n\n @Method()\n async setSearchResults(results: RelationSearchResult[]) {\n this.searchResults = results;\n this.isLoading = false;\n this.showResults = true;\n this.highlightedIndex = -1;\n }\n\n @Method()\n async setLoading(loading: boolean) {\n this.isLoading = loading;\n }\n\n private searchDebounce: ReturnType<typeof setTimeout> | null = null;\n\n private toSearchResult(v: any): RelationSearchResult {\n return {\n id: v.id ?? v.href ?? '',\n label: v.label ?? v.name ?? '',\n description: v.description,\n };\n }\n\n private applyValuePrefill(v: typeof this.value) {\n if (!v) return;\n if (Array.isArray(v)) {\n if (v.length > 0 && typeof v[0] === 'object') {\n this.selectedItems = (v as any[]).map(item => this.toSearchResult(item));\n this.searchQuery = '';\n }\n // array of strings → user interaction, ignore\n } else if (typeof v === 'object') {\n const obj = v as any;\n if (Array.isArray(obj.values)) {\n // Multiple relation: API embeds selected items in values[]\n this.selectedItems = obj.values.map((item: any) => this.toSearchResult(item));\n this.searchQuery = '';\n } else if (!this.multiple && (obj.id || obj.name || obj.label)) {\n // Single relation: { href, name } or already { id, label }\n const result = this.toSearchResult(obj);\n this.selectedItems = [result];\n this.searchQuery = result.label;\n }\n // else: collection href (multiple without values) or unrecognised — skip\n }\n }\n\n componentWillLoad() {\n this.applyValuePrefill(this.value);\n }\n\n // Handles edit-mode: values prop on mrd-form is often set async after mount.\n // Only updates selectedItems when the new value contains { id, label } objects\n // (host pre-fill). Plain href strings from user interaction are ignored.\n @Watch('value')\n valueChanged(newValue: typeof this.value) {\n this.applyValuePrefill(newValue);\n }\n\n componentDidLoad() {\n // Only emit when there is no commonRelation dependency — the form orchestrates those.\n if (this.editBehavior === ClientLayoutItemRelationEditBehavior.DROPDOWN && !this.commonRelation) {\n // Defer to next tick so parent event listeners are registered after DOM patching\n setTimeout(() => {\n this.mrdFetchAll.emit({\n name: this.name,\n relatedClass: this.relatedClass,\n mostSignificantClass: this.mostSignificantClass || undefined,\n });\n }, 0);\n }\n }\n\n private handleKeyDown = (e: KeyboardEvent) => {\n if (!this.showResults || this.searchResults.length === 0) {\n if (e.key === 'Escape') { this.showResults = false; this.highlightedIndex = -1; }\n return;\n }\n if (e.key === 'ArrowDown') {\n e.preventDefault();\n this.highlightedIndex = Math.min(this.highlightedIndex + 1, this.searchResults.length - 1);\n } else if (e.key === 'ArrowUp') {\n e.preventDefault();\n this.highlightedIndex = Math.max(this.highlightedIndex - 1, 0);\n } else if (e.key === 'Enter') {\n e.preventDefault();\n if (this.highlightedIndex >= 0) {\n this.handleResultSelect(this.searchResults[this.highlightedIndex]);\n }\n } else if (e.key === 'Escape') {\n this.showResults = false;\n this.highlightedIndex = -1;\n }\n };\n\n private clearSelection = () => {\n this.selectedItems = [];\n this.searchQuery = '';\n this.searchResults = [];\n this.showResults = false;\n this.highlightedIndex = -1;\n this.mrdChange.emit({ name: this.name, value: this.multiple ? [] : null });\n };\n\n private handleSearchInput = (e: Event) => {\n const query = (e.target as HTMLInputElement).value;\n this.searchQuery = query;\n if (this.searchDebounce) clearTimeout(this.searchDebounce);\n if (query.trim().length >= 2) {\n this.isLoading = true;\n this.showResults = true;\n this.searchDebounce = setTimeout(() => {\n this.mrdSearch.emit({ name: this.name, query, relatedClass: this.mostSignificantClass });\n }, 300);\n } else {\n this.searchResults = [];\n this.showResults = false;\n this.isLoading = false;\n }\n };\n\n private handleResultSelect = (result: RelationSearchResult) => {\n if (this.multiple) {\n if (!this.selectedItems.find(i => i.id === result.id)) {\n this.selectedItems = [...this.selectedItems, result];\n }\n this.searchQuery = '';\n this.searchResults = [];\n this.showResults = false;\n const ids = this.selectedItems.map(i => i.id);\n this.mrdChange.emit({ name: this.name, value: ids });\n } else {\n this.selectedItems = [result];\n this.searchQuery = result.label;\n this.showResults = false;\n this.mrdChange.emit({ name: this.name, value: result.id });\n }\n if (this.required && !validateRequired(this.selectedItems)) {\n this.error = t('required', this.locale);\n } else {\n this.error = '';\n }\n };\n\n private handleRemoveSelected = (id: string) => {\n this.selectedItems = this.selectedItems.filter(i => i.id !== id);\n const ids = this.selectedItems.map(i => i.id);\n this.mrdChange.emit({ name: this.name, value: this.multiple ? ids : null });\n };\n\n private handleDropdownChange = (e: Event) => {\n const val = (e.target as HTMLSelectElement).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 private handleBlur = () => {\n setTimeout(() => {\n this.showResults = false;\n this.highlightedIndex = -1;\n }, 200);\n const val = this.multiple ? this.selectedItems.map(i => i.id) : (this.selectedItems[0]?.id ?? null);\n this.mrdBlur.emit({ name: this.name, value: val });\n };\n\n render() {\n const hasError = !!this.error;\n\n if (this.editBehavior === ClientLayoutItemRelationEditBehavior.DROPDOWN) {\n const currentValue = this.getValueHref();\n return (\n <Host>\n <div class=\"mrd-relation-field\">\n {this.label && (\n <label class={`mrd-relation-field__label${this.required ? ' mrd-relation-field__label--required' : ''}`}>\n {this.label}\n </label>\n )}\n <select\n class={`mrd-relation-field__select${hasError ? ' mrd-relation-field__select--error' : ''}`}\n name={this.name}\n required={this.required}\n disabled={this.disabled}\n onChange={this.handleDropdownChange}\n >\n <option value=\"\">{t('select_placeholder', this.locale)}</option>\n {this.allRecords.map(record => (\n <option key={record.id} value={record.id} selected={record.id === currentValue}>\n {record.label}\n </option>\n ))}\n </select>\n {hasError && <span class=\"mrd-relation-field__error\">{this.error}</span>}\n </div>\n </Host>\n );\n }\n\n if (this.displayType === ClientLayoutItemRelationDisplayType.DROPDOWN) {\n const currentValue = Array.isArray(this.value) ? (this.value[0] ?? '') : (this.value ?? '');\n return (\n <Host>\n <div class=\"mrd-relation-field\">\n {this.label && (\n <label class={`mrd-relation-field__label${this.required ? ' mrd-relation-field__label--required' : ''}`}>\n {this.label}\n </label>\n )}\n <select\n class={`mrd-relation-field__select${hasError ? ' mrd-relation-field__select--error' : ''}`}\n name={this.name}\n required={this.required}\n disabled={this.disabled}\n onChange={this.handleDropdownChange}\n >\n <option value=\"\">{t('select_placeholder', this.locale)}</option>\n {this.dropdownValues.map(dv => (\n <option key={dv.key} value={dv.key} selected={dv.key === currentValue}>\n {dv.label}\n </option>\n ))}\n </select>\n {hasError && <span class=\"mrd-relation-field__error\">{this.error}</span>}\n </div>\n </Host>\n );\n }\n\n // SEARCH mode\n const labelEl = this.label && (\n <label class={`mrd-relation-field__label${this.required ? ' mrd-relation-field__label--required' : ''}`}>\n {this.label}\n </label>\n );\n\n // Single selection: show selected value as a badge, hide the search input\n if (!this.multiple && this.selectedItems.length > 0) {\n return (\n <Host>\n <div class=\"mrd-relation-field\">\n {labelEl}\n <div class={`mrd-relation-field__selected-value${hasError ? ' mrd-relation-field__selected-value--error' : ''}`}>\n <span class=\"mrd-relation-field__selected-name\">{this.selectedItems[0].label}</span>\n <button\n type=\"button\"\n class=\"mrd-relation-field__selected-clear\"\n onClick={this.clearSelection}\n aria-label={t('remove', this.locale)}\n >\n ✕\n </button>\n </div>\n {hasError && <span class=\"mrd-relation-field__error\">{this.error}</span>}\n </div>\n </Host>\n );\n }\n\n return (\n <Host>\n <div class=\"mrd-relation-field\">\n {labelEl}\n {this.multiple && this.selectedItems.length > 0 && (\n <div class=\"mrd-relation-field__tags\">\n {this.selectedItems.map(item => (\n <span key={item.id} class=\"mrd-relation-field__tag\">\n {item.label}\n <button\n type=\"button\"\n class=\"mrd-relation-field__tag-remove\"\n onClick={() => this.handleRemoveSelected(item.id)}\n aria-label={t('remove', this.locale)}\n >\n ✕\n </button>\n </span>\n ))}\n </div>\n )}\n <div class=\"mrd-relation-field__search-wrapper\">\n <input\n class={`mrd-relation-field__search${hasError ? ' mrd-relation-field__search--error' : ''}`}\n type=\"text\"\n value={this.searchQuery}\n placeholder={t('search_placeholder', this.locale)}\n disabled={this.disabled}\n onInput={this.handleSearchInput}\n onKeyDown={this.handleKeyDown}\n onBlur={this.handleBlur}\n />\n {this.isLoading && (\n <span class=\"mrd-relation-field__spinner\" aria-label={t('loading', this.locale)}></span>\n )}\n </div>\n {this.showResults && (\n <div class=\"mrd-relation-field__results\">\n {this.searchResults.length === 0 && !this.isLoading ? (\n <div class=\"mrd-relation-field__no-results\">{t('no_results', this.locale)}</div>\n ) : (\n this.searchResults.map((result, i) => (\n <div\n key={result.id}\n class={`mrd-relation-field__result-item${i === this.highlightedIndex ? ' mrd-relation-field__result-item--highlighted' : ''}`}\n onMouseDown={() => this.handleResultSelect(result)}\n >\n <span class=\"mrd-relation-field__result-label\">{result.label}</span>\n {result.description && (\n <span class=\"mrd-relation-field__result-desc\">{result.description}</span>\n )}\n </div>\n ))\n )}\n </div>\n )}\n {hasError && <span class=\"mrd-relation-field__error\">{this.error}</span>}\n </div>\n </Host>\n );\n }\n}\n"],"version":3}
|
|
@@ -0,0 +1,49 @@
|
|
|
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 mrdSecretFieldScss = () => `.sc-mrd-secret-field-h{display:block}.mrd-secret-field.sc-mrd-secret-field{display:flex;flex-direction:column;gap:var(--mrd-space-1);width:100%}.mrd-secret-field__label.sc-mrd-secret-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-secret-field__label--required.sc-mrd-secret-field::after{content:' *';color:var(--mrd-color-danger)}.mrd-secret-field__input.sc-mrd-secret-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}.mrd-secret-field__input.sc-mrd-secret-field::placeholder{color:var(--mrd-input-placeholder-color)}.mrd-secret-field__input.sc-mrd-secret-field:focus{border-color:var(--mrd-border-color-focus);box-shadow:var(--mrd-shadow-focus)}.mrd-secret-field__input--error.sc-mrd-secret-field{border-color:var(--mrd-border-color-error)}.mrd-secret-field__input--error.sc-mrd-secret-field:focus{box-shadow:var(--mrd-shadow-focus-error)}.mrd-secret-field__error.sc-mrd-secret-field{font-family:var(--mrd-font-family);font-size:var(--mrd-error-font-size);color:var(--mrd-error-color)}.mrd-secret-field__masked.sc-mrd-secret-field{display:block;font-family:var(--mrd-font-family);font-size:var(--mrd-font-size-base);color:var(--mrd-label-color);letter-spacing:0.15em;user-select:none;pointer-events:none}`;
|
|
8
|
+
|
|
9
|
+
const MrdSecretField = 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: '08f1aa9d8ab9f4e41abb6d3286e5e383427a5409' }, h("div", { key: 'fabe38aa130e211cea81f2c2f227bc15ad3ebf7d', class: "mrd-secret-field" }, this.label && (h("label", { key: '69af8844eff8ce84daa622635c79130fb491eb0b', class: `mrd-secret-field__label${this.required ? ' mrd-secret-field__label--required' : ''}` }, this.label)), this.disabled
|
|
40
|
+
? (h("span", { class: "mrd-secret-field__masked", "aria-label": this.label }, this.value ? '••••••••' : ''))
|
|
41
|
+
: (h("input", { class: `mrd-secret-field__input${hasError ? ' mrd-secret-field__input--error' : ''}`, type: "password", name: this.name, value: this.value, placeholder: this.placeholder, required: this.required, autocomplete: "new-password", onInput: this.handleInput, onBlur: this.handleBlur })), hasError && h("span", { key: 'e602004f0bb10916d1015e3c2b003523a292997c', class: "mrd-secret-field__error" }, this.error))));
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
MrdSecretField.style = mrdSecretFieldScss();
|
|
45
|
+
|
|
46
|
+
export { MrdSecretField as mrd_secret_field };
|
|
47
|
+
//# sourceMappingURL=mrd-secret-field.entry.esm.js.map
|
|
48
|
+
|
|
49
|
+
//# sourceMappingURL=mrd-secret-field.entry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"file":"mrd-secret-field.entry.js","mappings":";;;;;;AAAA,MAAM,kBAAkB,GAAG,MAAM,CAAC,wuDAAwuD,CAAC;;MCS9vD,cAAc,GAAA,MAAA;AAL3B,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,MAA2B,CAAC,KAAK;AAChD,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,MAA2B,CAAC,KAAK;YAChD,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;AAqCF;IAnCC,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,kBAAkB,EAAA,EAC1B,IAAI,CAAC,KAAK,KACT,CAAA,CAAA,OAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAO,KAAK,EAAE,CAAA,uBAAA,EAA0B,IAAI,CAAC,QAAQ,GAAG,oCAAoC,GAAG,EAAE,CAAA,CAAE,EAAA,EAChG,IAAI,CAAC,KAAK,CACL,CACT,EACA,IAAI,CAAC;AACJ,eACE,CAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAC,0BAA0B,EAAA,YAAA,EAAa,IAAI,CAAC,KAAK,EAAA,EAC1D,IAAI,CAAC,KAAK,GAAG,UAAU,GAAG,EAAE,CACxB;AAET,eACE,CAAA,CAAA,OAAA,EAAA,EACE,KAAK,EAAE,0BAA0B,QAAQ,GAAG,iCAAiC,GAAG,EAAE,CAAA,CAAE,EACpF,IAAI,EAAC,UAAU,EACf,IAAI,EAAE,IAAI,CAAC,IAAI,EACf,KAAK,EAAE,IAAI,CAAC,KAAK,EACjB,WAAW,EAAE,IAAI,CAAC,WAAW,EAC7B,QAAQ,EAAE,IAAI,CAAC,QAAQ,EACvB,YAAY,EAAC,cAAc,EAC3B,OAAO,EAAE,IAAI,CAAC,WAAW,EACzB,MAAM,EAAE,IAAI,CAAC,UAAU,GACvB,CACH,EAEF,QAAQ,IAAI,CAAA,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAM,KAAK,EAAC,yBAAyB,EAAA,EAAE,IAAI,CAAC,KAAK,CAAQ,CAClE,CACD;;;;;;;","names":[],"sources":["src/components/mrd-secret-field/mrd-secret-field.scss?tag=mrd-secret-field&encapsulation=scoped","src/components/mrd-secret-field/mrd-secret-field.tsx"],"sourcesContent":[":host {\n display: block;\n}\n\n.mrd-secret-field {\n display: flex;\n flex-direction: column;\n gap: var(--mrd-space-1);\n width: 100%;\n}\n\n.mrd-secret-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-secret-field__label--required::after {\n content: ' *';\n color: var(--mrd-color-danger);\n}\n\n.mrd-secret-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}\n\n.mrd-secret-field__input::placeholder {\n color: var(--mrd-input-placeholder-color);\n}\n\n.mrd-secret-field__input:focus {\n border-color: var(--mrd-border-color-focus);\n box-shadow: var(--mrd-shadow-focus);\n}\n\n.mrd-secret-field__input--error {\n border-color: var(--mrd-border-color-error);\n}\n\n.mrd-secret-field__input--error:focus {\n box-shadow: var(--mrd-shadow-focus-error);\n}\n\n.mrd-secret-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\n.mrd-secret-field__masked {\n display: block;\n font-family: var(--mrd-font-family);\n font-size: var(--mrd-font-size-base);\n color: var(--mrd-label-color);\n letter-spacing: 0.15em;\n user-select: none;\n pointer-events: none;\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-secret-field',\n styleUrl: 'mrd-secret-field.scss',\n scoped: true,\n})\nexport class MrdSecretField {\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 HTMLInputElement).value;\n this.mrdChange.emit({ name: this.name, value: val });\n };\n\n private handleBlur = (e: Event) => {\n const val = (e.target as HTMLInputElement).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-secret-field\">\n {this.label && (\n <label class={`mrd-secret-field__label${this.required ? ' mrd-secret-field__label--required' : ''}`}>\n {this.label}\n </label>\n )}\n {this.disabled\n ? (\n <span class=\"mrd-secret-field__masked\" aria-label={this.label}>\n {this.value ? '••••••••' : ''}\n </span>\n )\n : (\n <input\n class={`mrd-secret-field__input${hasError ? ' mrd-secret-field__input--error' : ''}`}\n type=\"password\"\n name={this.name}\n value={this.value}\n placeholder={this.placeholder}\n required={this.required}\n autocomplete=\"new-password\"\n onInput={this.handleInput}\n onBlur={this.handleBlur}\n />\n )\n }\n {hasError && <span class=\"mrd-secret-field__error\">{this.error}</span>}\n </div>\n </Host>\n );\n }\n}\n"],"version":3}
|