@shoper/phoenix_design_system 1.18.16-0 → 1.18.16-10
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/build/cjs/packages/phoenix/src/components/form/select/select.js +157 -15
- package/build/cjs/packages/phoenix/src/components/form/select/select.js.map +1 -1
- package/build/esm/packages/phoenix/src/components/form/select/select.d.ts +6 -0
- package/build/esm/packages/phoenix/src/components/form/select/select.js +157 -15
- package/build/esm/packages/phoenix/src/components/form/select/select.js.map +1 -1
- package/package.json +1 -1
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
5
|
var tslib_es6 = require('../../../../../../external/tslib/tslib.es6.js');
|
|
6
|
+
var phoenix_light_lit_elements_constants = require('../../../core/phoenix_light_lit_element/phoenix_light_lit_elements_constants.js');
|
|
6
7
|
var lit = require('lit');
|
|
7
8
|
var decorators = require('lit/decorators');
|
|
8
9
|
var phoenix_light_lit_element = require('../../../core/phoenix_light_lit_element/phoenix_light_lit_element.js');
|
|
@@ -44,6 +45,8 @@ exports.HSelect = class HSelect extends phoenix_light_lit_element.PhoenixLightLi
|
|
|
44
45
|
this.noDeselect = false;
|
|
45
46
|
this.assistiveTitleId = '';
|
|
46
47
|
this.isDevSelectPlaceholderFlagEnabled = false;
|
|
48
|
+
this.isDevSelectPlaceholderTranslationFlagEnabled = false;
|
|
49
|
+
this.isReactiveSelectionFlagEnabled = false;
|
|
47
50
|
this.translations = {};
|
|
48
51
|
this._selectOptionsId = v4['default']();
|
|
49
52
|
this._searchValue = '';
|
|
@@ -54,14 +57,42 @@ exports.HSelect = class HSelect extends phoenix_light_lit_element.PhoenixLightLi
|
|
|
54
57
|
this._$dropdownContent = ref_js.createRef();
|
|
55
58
|
this.$dropdownToggler = ref_js.createRef();
|
|
56
59
|
this._selectContext = new context_provider_controller.ContextProviderController(this);
|
|
60
|
+
this._onChildRendered = (ev) => {
|
|
61
|
+
const renderedEl = ev.detail && ev.detail.$el;
|
|
62
|
+
if (!renderedEl)
|
|
63
|
+
return;
|
|
64
|
+
const tag = renderedEl.tagName.toLowerCase();
|
|
65
|
+
if (tag === select_components_constatns.SELECT_RELATED_COMPONENTS_NAMES.toggler) {
|
|
66
|
+
// Prefer child's slot API if available
|
|
67
|
+
if (typeof renderedEl.getSlot === 'function' && renderedEl.hasSlot && renderedEl.hasSlot(select_components_constatns.SELECT_INPUT_PLACEHOLDER_SLOT_NAME)) {
|
|
68
|
+
const arr = renderedEl.getSlot(select_components_constatns.SELECT_INPUT_PLACEHOLDER_SLOT_NAME);
|
|
69
|
+
if (arr && arr.length) {
|
|
70
|
+
const val = arr[0].values && arr[0].values[0];
|
|
71
|
+
if (val) {
|
|
72
|
+
this.$placeholder = val;
|
|
73
|
+
this.requestUpdate();
|
|
74
|
+
this.removeEventListener(phoenix_light_lit_elements_constants.PHOENIX_LIGHT_LIT_ELEMENTS_EVENT_NAMES.rendered, this._onChildRendered);
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
// Fallback: try querySelector on the rendered element
|
|
80
|
+
const el = renderedEl.querySelector ? renderedEl.querySelector(`[slot="${select_components_constatns.SELECT_INPUT_PLACEHOLDER_SLOT_NAME}"]`) : null;
|
|
81
|
+
if (el) {
|
|
82
|
+
this.$placeholder = el;
|
|
83
|
+
this.requestUpdate();
|
|
84
|
+
this.removeEventListener(phoenix_light_lit_elements_constants.PHOENIX_LIGHT_LIT_ELEMENTS_EVENT_NAMES.rendered, this._onChildRendered);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
};
|
|
57
88
|
this._updateOptions = () => {
|
|
58
89
|
const $options = this._getOptions();
|
|
59
90
|
this._$options = $options.reduce((acc, $option) => {
|
|
60
91
|
const value = $option.getAttribute('value');
|
|
61
92
|
if (value === null || value === undefined)
|
|
62
|
-
throw Error('Select option must
|
|
93
|
+
throw Error('Select option must have a value');
|
|
63
94
|
if (acc.has(value))
|
|
64
|
-
throw Error('Select options must
|
|
95
|
+
throw Error('Select options must have a unique values.');
|
|
65
96
|
return acc.set(value, $option);
|
|
66
97
|
}, new Map());
|
|
67
98
|
const options = $options.map(select_option_mapper.SelectOptionMapper.toModel);
|
|
@@ -184,8 +215,11 @@ exports.HSelect = class HSelect extends phoenix_light_lit_element.PhoenixLightLi
|
|
|
184
215
|
};
|
|
185
216
|
const $options = Array.from(this.querySelectorAll(select_components_constatns.SELECT_RELATED_COMPONENTS_NAMES.option));
|
|
186
217
|
$options.forEach(($option) => $option.setAttribute('slot', select_constants.SELECT_SLOT_NAMES.content));
|
|
187
|
-
|
|
188
|
-
|
|
218
|
+
// this condition doesn't work as properties load on connectedCallback but I leave it here to not forget about deleting it
|
|
219
|
+
if (!this.isDevSelectPlaceholderTranslationFlagEnabled) {
|
|
220
|
+
const $placeholderEl = this.querySelector(`[slot="${select_components_constatns.SELECT_INPUT_PLACEHOLDER_SLOT_NAME}"]`);
|
|
221
|
+
this.$placeholder = ($placeholderEl && ((_a = $placeholderEl.textContent) === null || _a === void 0 ? void 0 : _a.trim())) ? $placeholderEl : 'Select';
|
|
222
|
+
}
|
|
189
223
|
if (this.multiple)
|
|
190
224
|
this.type = select_constants.SELECT_TYPES.multiple;
|
|
191
225
|
}
|
|
@@ -287,6 +321,56 @@ exports.HSelect = class HSelect extends phoenix_light_lit_element.PhoenixLightLi
|
|
|
287
321
|
}
|
|
288
322
|
this._setupEvents();
|
|
289
323
|
}
|
|
324
|
+
firstUpdated(changedProperties) {
|
|
325
|
+
super.firstUpdated(changedProperties);
|
|
326
|
+
if (this.isDevSelectPlaceholderTranslationFlagEnabled) {
|
|
327
|
+
let placeholderCandidate = null;
|
|
328
|
+
if (this.hasSlot(select_components_constatns.SELECT_INPUT_PLACEHOLDER_SLOT_NAME)) {
|
|
329
|
+
const slotTpls = this.getSlot(select_components_constatns.SELECT_INPUT_PLACEHOLDER_SLOT_NAME);
|
|
330
|
+
if (Array.isArray(slotTpls) && slotTpls.length > 0) {
|
|
331
|
+
const tpl = slotTpls[0];
|
|
332
|
+
placeholderCandidate = (tpl && tpl.values && tpl.values[0] ? tpl.values[0] : null);
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
// 2) Try toggler slot that may have been assigned into this._slots
|
|
336
|
+
if (!placeholderCandidate && this.hasSlot(select_constants.SELECT_SLOT_NAMES.toggler)) {
|
|
337
|
+
const togglerTpls = this.getSlot(select_constants.SELECT_SLOT_NAMES.toggler);
|
|
338
|
+
if (Array.isArray(togglerTpls) && togglerTpls.length > 0) {
|
|
339
|
+
const typedTogglerPtls = togglerTpls;
|
|
340
|
+
const togglerNode = (typedTogglerPtls[0].values ? typedTogglerPtls[0].values[0] : null);
|
|
341
|
+
if (togglerNode) {
|
|
342
|
+
// If togglerNode is an element, try to find an inner placeholder element
|
|
343
|
+
if (typeof togglerNode.querySelector === 'function') {
|
|
344
|
+
const inner = togglerNode.querySelector(`[slot="${select_components_constatns.SELECT_INPUT_PLACEHOLDER_SLOT_NAME}"]`);
|
|
345
|
+
if (inner)
|
|
346
|
+
placeholderCandidate = inner;
|
|
347
|
+
}
|
|
348
|
+
// fallback to using togglerNode text content (if useful)
|
|
349
|
+
if (!placeholderCandidate && togglerNode.textContent && togglerNode.textContent.trim()) {
|
|
350
|
+
placeholderCandidate = togglerNode;
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
// 3) Last DOM fallback (works if placeholder still in DOM)
|
|
356
|
+
if (!placeholderCandidate) {
|
|
357
|
+
const domEl = this.querySelector(`[slot="${select_components_constatns.SELECT_INPUT_PLACEHOLDER_SLOT_NAME}"]`);
|
|
358
|
+
if (domEl)
|
|
359
|
+
placeholderCandidate = domEl;
|
|
360
|
+
}
|
|
361
|
+
// 4) If not found yet, set default and listen for child "rendered" events (toggler)
|
|
362
|
+
if (placeholderCandidate) {
|
|
363
|
+
this.$placeholder = placeholderCandidate;
|
|
364
|
+
}
|
|
365
|
+
else {
|
|
366
|
+
this.$placeholder = 'Select';
|
|
367
|
+
this.addEventListener(phoenix_light_lit_elements_constants.PHOENIX_LIGHT_LIT_ELEMENTS_EVENT_NAMES.rendered, this._onChildRendered);
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
if (this.isReactiveSelectionFlagEnabled) {
|
|
371
|
+
this._setupMutationObserver();
|
|
372
|
+
}
|
|
373
|
+
}
|
|
290
374
|
attributeChangedCallback(name, _old, value) {
|
|
291
375
|
super.attributeChangedCallback(name, _old, value);
|
|
292
376
|
switch (name) {
|
|
@@ -305,19 +389,19 @@ exports.HSelect = class HSelect extends phoenix_light_lit_element.PhoenixLightLi
|
|
|
305
389
|
this._updateOptions();
|
|
306
390
|
}
|
|
307
391
|
get _canAddPlaceholder() {
|
|
308
|
-
var _a;
|
|
309
392
|
if (this.multiple || this.required)
|
|
310
393
|
return false;
|
|
311
|
-
const hasSelection = (((_a = this._selectController.selectedOptions$.getValue()) === null || _a === void 0 ? void 0 : _a.length) || 0) > 0;
|
|
312
|
-
if (hasSelection)
|
|
313
|
-
return false;
|
|
314
394
|
const hasExistingPlaceholder = !!this.querySelector('h-option[placeholder]');
|
|
315
395
|
return !hasExistingPlaceholder;
|
|
316
396
|
}
|
|
317
397
|
_createPlaceholderOption() {
|
|
398
|
+
var _a;
|
|
318
399
|
const $option = document.createElement('h-option');
|
|
319
400
|
$option.setAttribute('value', '');
|
|
320
|
-
|
|
401
|
+
const hasSelection = (((_a = this._selectController.selectedOptions$.getValue()) === null || _a === void 0 ? void 0 : _a.length) || 0) > 0;
|
|
402
|
+
if (!hasSelection) {
|
|
403
|
+
$option.setAttribute('selected', 'true');
|
|
404
|
+
}
|
|
321
405
|
$option.setAttribute('placeholder', 'true');
|
|
322
406
|
$option.setAttribute('slot', select_constants.SELECT_SLOT_NAMES.content);
|
|
323
407
|
const $content = document.createElement(select_components_constatns.SELECT_RELATED_COMPONENTS_NAMES.optionContent);
|
|
@@ -325,7 +409,7 @@ exports.HSelect = class HSelect extends phoenix_light_lit_element.PhoenixLightLi
|
|
|
325
409
|
$content.textContent = this.$placeholder;
|
|
326
410
|
}
|
|
327
411
|
else if (this.$placeholder instanceof Node) {
|
|
328
|
-
Array.from(this.$placeholder.childNodes).forEach(node => {
|
|
412
|
+
Array.from(this.$placeholder.childNodes).forEach((node) => {
|
|
329
413
|
$content.appendChild(node.cloneNode(true));
|
|
330
414
|
});
|
|
331
415
|
}
|
|
@@ -334,8 +418,8 @@ exports.HSelect = class HSelect extends phoenix_light_lit_element.PhoenixLightLi
|
|
|
334
418
|
}
|
|
335
419
|
_injectOptionIntoDOM($option) {
|
|
336
420
|
const $firstOption = this.querySelector(select_components_constatns.SELECT_RELATED_COMPONENTS_NAMES.option);
|
|
337
|
-
if ($firstOption) {
|
|
338
|
-
|
|
421
|
+
if ($firstOption && $firstOption.parentNode) {
|
|
422
|
+
$firstOption.parentNode.insertBefore($option, $firstOption);
|
|
339
423
|
}
|
|
340
424
|
else {
|
|
341
425
|
this.appendChild($option);
|
|
@@ -345,6 +429,53 @@ exports.HSelect = class HSelect extends phoenix_light_lit_element.PhoenixLightLi
|
|
|
345
429
|
this.addEventListener(select_constants.SELECT_EVENT_NAMES.deselectOption, this._handleOptionDeselect);
|
|
346
430
|
this.addEventListener(select_components_constatns.SELECT_CLOSE_BTN_EVENT_NAMES.close, this._closeSelect);
|
|
347
431
|
}
|
|
432
|
+
_setupMutationObserver() {
|
|
433
|
+
this._optionsMutationObserver = new MutationObserver((mutations) => {
|
|
434
|
+
let shouldUpdate = false;
|
|
435
|
+
let newlySelectedValue = null;
|
|
436
|
+
for (const mutation of mutations) {
|
|
437
|
+
const target = mutation.target;
|
|
438
|
+
if (mutation.type === 'attributes' &&
|
|
439
|
+
mutation.attributeName === 'selected' &&
|
|
440
|
+
target.tagName &&
|
|
441
|
+
target.tagName.toLowerCase() === 'h-option') {
|
|
442
|
+
shouldUpdate = true;
|
|
443
|
+
if (target.hasAttribute('selected')) {
|
|
444
|
+
newlySelectedValue = target.getAttribute('value');
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
}
|
|
448
|
+
if (shouldUpdate) {
|
|
449
|
+
const options = Array.from(this._$options.values()).map(($el) => select_option_mapper.SelectOptionMapper.toModel($el));
|
|
450
|
+
if (!this.multiple && newlySelectedValue !== null) {
|
|
451
|
+
options.forEach((opt) => {
|
|
452
|
+
opt.selected = opt.value === newlySelectedValue;
|
|
453
|
+
});
|
|
454
|
+
}
|
|
455
|
+
this._selectController.options$.notify(options);
|
|
456
|
+
let selectedOptions = options.filter((opt) => opt.selected);
|
|
457
|
+
if (selectedOptions.length === 0) {
|
|
458
|
+
const placeholder = options.find((opt) => opt.isPlaceholder);
|
|
459
|
+
if (placeholder) {
|
|
460
|
+
placeholder.selected = true;
|
|
461
|
+
const $placeholderHtml = this._$options.get(placeholder.value);
|
|
462
|
+
if ($placeholderHtml) {
|
|
463
|
+
$placeholderHtml.setAttribute('selected', 'true');
|
|
464
|
+
}
|
|
465
|
+
selectedOptions = [placeholder];
|
|
466
|
+
}
|
|
467
|
+
}
|
|
468
|
+
this._selectController.selectedOptions$.notify(selectedOptions);
|
|
469
|
+
}
|
|
470
|
+
});
|
|
471
|
+
if (this._$optionsList.value) {
|
|
472
|
+
this._optionsMutationObserver.observe(this._$optionsList.value, {
|
|
473
|
+
attributes: true,
|
|
474
|
+
attributeFilter: ['selected'],
|
|
475
|
+
subtree: true
|
|
476
|
+
});
|
|
477
|
+
}
|
|
478
|
+
}
|
|
348
479
|
_appendNewHTMLOption(option, position) {
|
|
349
480
|
const $list = this._$optionsList.value;
|
|
350
481
|
if (!$list)
|
|
@@ -405,9 +536,12 @@ exports.HSelect = class HSelect extends phoenix_light_lit_element.PhoenixLightLi
|
|
|
405
536
|
this._selectController.select(option);
|
|
406
537
|
}
|
|
407
538
|
disconnectedCallback() {
|
|
539
|
+
var _a;
|
|
408
540
|
super.disconnectedCallback();
|
|
409
541
|
this._selectController.options$.unsubscribe(this._optionsObserver);
|
|
410
542
|
this._$options.clear();
|
|
543
|
+
(_a = this._optionsMutationObserver) === null || _a === void 0 ? void 0 : _a.disconnect();
|
|
544
|
+
this.removeEventListener(phoenix_light_lit_elements_constants.PHOENIX_LIGHT_LIT_ELEMENTS_EVENT_NAMES.rendered, this._onChildRendered);
|
|
411
545
|
}
|
|
412
546
|
_getClonedPlaceholderElement() {
|
|
413
547
|
return this.$placeholder instanceof HTMLElement ? this.$placeholder.cloneNode(true) : this.$placeholder;
|
|
@@ -459,9 +593,9 @@ exports.HSelect = class HSelect extends phoenix_light_lit_element.PhoenixLightLi
|
|
|
459
593
|
<h-select-close-btn class="${select_constants.SELECT_CSS_CLASSES.selectCloseMobileButton}" @close=${this._closeSelect}></h-select-close-btn>
|
|
460
594
|
|
|
461
595
|
<div class=${select_constants.SELECT_CSS_CLASSES.selectLabel}>
|
|
462
|
-
${this.isDevSelectPlaceholderFlagEnabled
|
|
463
|
-
(_b = this.$searchLabel) === null || _b === void 0 ? void 0 : _b.cloneNode(true)
|
|
464
|
-
lit.html `${this._getClonedPlaceholderElement()}`}
|
|
596
|
+
${this.isDevSelectPlaceholderFlagEnabled
|
|
597
|
+
? (_b = this.$searchLabel) === null || _b === void 0 ? void 0 : _b.cloneNode(true)
|
|
598
|
+
: lit.html `${this._getClonedPlaceholderElement()}`}
|
|
465
599
|
</div>
|
|
466
600
|
|
|
467
601
|
${isSearchEnabled
|
|
@@ -581,6 +715,14 @@ tslib_es6.__decorate([
|
|
|
581
715
|
decorators_js.property({ type: Boolean, attribute: 'is-dev-select-placeholder-flag-enabled' }),
|
|
582
716
|
tslib_es6.__metadata("design:type", Boolean)
|
|
583
717
|
], exports.HSelect.prototype, "isDevSelectPlaceholderFlagEnabled", void 0);
|
|
718
|
+
tslib_es6.__decorate([
|
|
719
|
+
decorators_js.property({ type: Boolean, attribute: 'is-dev-select-placeholder-translation-flag-enabled' }),
|
|
720
|
+
tslib_es6.__metadata("design:type", Boolean)
|
|
721
|
+
], exports.HSelect.prototype, "isDevSelectPlaceholderTranslationFlagEnabled", void 0);
|
|
722
|
+
tslib_es6.__decorate([
|
|
723
|
+
decorators_js.property({ type: Boolean, attribute: 'is-reactive-selection-flag-enabled' }),
|
|
724
|
+
tslib_es6.__metadata("design:type", Boolean)
|
|
725
|
+
], exports.HSelect.prototype, "isReactiveSelectionFlagEnabled", void 0);
|
|
584
726
|
tslib_es6.__decorate([
|
|
585
727
|
decorators_js.property({
|
|
586
728
|
converter: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA,wBAAwB,+CAAmD;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,wDAA4D;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
|
|
1
|
+
{"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA,wBAAwB,+CAAmD;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,wDAA4D;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
|
|
@@ -24,6 +24,8 @@ export declare class HSelect extends PhoenixLightLitElement {
|
|
|
24
24
|
noDeselect: boolean;
|
|
25
25
|
assistiveTitleId: string;
|
|
26
26
|
isDevSelectPlaceholderFlagEnabled: boolean;
|
|
27
|
+
isDevSelectPlaceholderTranslationFlagEnabled: boolean;
|
|
28
|
+
isReactiveSelectionFlagEnabled: boolean;
|
|
27
29
|
translations: Record<string, string>;
|
|
28
30
|
private _selectOptionsId;
|
|
29
31
|
get selectedIndex(): number;
|
|
@@ -47,10 +49,13 @@ export declare class HSelect extends PhoenixLightLitElement {
|
|
|
47
49
|
private _selectedOptionsAriaObserver;
|
|
48
50
|
private $placeholder;
|
|
49
51
|
private $searchLabel;
|
|
52
|
+
private _optionsMutationObserver?;
|
|
50
53
|
constructor();
|
|
51
54
|
updated(changedProperties: PropertyValues): void;
|
|
52
55
|
private _focusElementAfterSelectOpened;
|
|
53
56
|
connectedCallback(): void;
|
|
57
|
+
firstUpdated(changedProperties: PropertyValues): void;
|
|
58
|
+
private _onChildRendered;
|
|
54
59
|
attributeChangedCallback(name: string, _old: string | null, value: string | null): void;
|
|
55
60
|
private _updateOptions;
|
|
56
61
|
private _getOptions;
|
|
@@ -59,6 +64,7 @@ export declare class HSelect extends PhoenixLightLitElement {
|
|
|
59
64
|
private _createPlaceholderOption;
|
|
60
65
|
private _injectOptionIntoDOM;
|
|
61
66
|
private _setupEvents;
|
|
67
|
+
private _setupMutationObserver;
|
|
62
68
|
private _handleOptionDeselect;
|
|
63
69
|
private _updateOptionsView;
|
|
64
70
|
private _updateLabelAria;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { __decorate, __metadata } from '../../../../../../external/tslib/tslib.es6.js';
|
|
2
|
+
import { PHOENIX_LIGHT_LIT_ELEMENTS_EVENT_NAMES } from '../../../core/phoenix_light_lit_element/phoenix_light_lit_elements_constants.js';
|
|
2
3
|
import { html, nothing } from 'lit';
|
|
3
4
|
import { state } from 'lit/decorators';
|
|
4
5
|
import { PhoenixLightLitElement } from '../../../core/phoenix_light_lit_element/phoenix_light_lit_element.js';
|
|
@@ -40,6 +41,8 @@ let HSelect = class HSelect extends PhoenixLightLitElement {
|
|
|
40
41
|
this.noDeselect = false;
|
|
41
42
|
this.assistiveTitleId = '';
|
|
42
43
|
this.isDevSelectPlaceholderFlagEnabled = false;
|
|
44
|
+
this.isDevSelectPlaceholderTranslationFlagEnabled = false;
|
|
45
|
+
this.isReactiveSelectionFlagEnabled = false;
|
|
43
46
|
this.translations = {};
|
|
44
47
|
this._selectOptionsId = v4();
|
|
45
48
|
this._searchValue = '';
|
|
@@ -50,14 +53,42 @@ let HSelect = class HSelect extends PhoenixLightLitElement {
|
|
|
50
53
|
this._$dropdownContent = createRef();
|
|
51
54
|
this.$dropdownToggler = createRef();
|
|
52
55
|
this._selectContext = new ContextProviderController(this);
|
|
56
|
+
this._onChildRendered = (ev) => {
|
|
57
|
+
const renderedEl = ev.detail && ev.detail.$el;
|
|
58
|
+
if (!renderedEl)
|
|
59
|
+
return;
|
|
60
|
+
const tag = renderedEl.tagName.toLowerCase();
|
|
61
|
+
if (tag === SELECT_RELATED_COMPONENTS_NAMES.toggler) {
|
|
62
|
+
// Prefer child's slot API if available
|
|
63
|
+
if (typeof renderedEl.getSlot === 'function' && renderedEl.hasSlot && renderedEl.hasSlot(SELECT_INPUT_PLACEHOLDER_SLOT_NAME)) {
|
|
64
|
+
const arr = renderedEl.getSlot(SELECT_INPUT_PLACEHOLDER_SLOT_NAME);
|
|
65
|
+
if (arr && arr.length) {
|
|
66
|
+
const val = arr[0].values && arr[0].values[0];
|
|
67
|
+
if (val) {
|
|
68
|
+
this.$placeholder = val;
|
|
69
|
+
this.requestUpdate();
|
|
70
|
+
this.removeEventListener(PHOENIX_LIGHT_LIT_ELEMENTS_EVENT_NAMES.rendered, this._onChildRendered);
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
// Fallback: try querySelector on the rendered element
|
|
76
|
+
const el = renderedEl.querySelector ? renderedEl.querySelector(`[slot="${SELECT_INPUT_PLACEHOLDER_SLOT_NAME}"]`) : null;
|
|
77
|
+
if (el) {
|
|
78
|
+
this.$placeholder = el;
|
|
79
|
+
this.requestUpdate();
|
|
80
|
+
this.removeEventListener(PHOENIX_LIGHT_LIT_ELEMENTS_EVENT_NAMES.rendered, this._onChildRendered);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
};
|
|
53
84
|
this._updateOptions = () => {
|
|
54
85
|
const $options = this._getOptions();
|
|
55
86
|
this._$options = $options.reduce((acc, $option) => {
|
|
56
87
|
const value = $option.getAttribute('value');
|
|
57
88
|
if (value === null || value === undefined)
|
|
58
|
-
throw Error('Select option must
|
|
89
|
+
throw Error('Select option must have a value');
|
|
59
90
|
if (acc.has(value))
|
|
60
|
-
throw Error('Select options must
|
|
91
|
+
throw Error('Select options must have a unique values.');
|
|
61
92
|
return acc.set(value, $option);
|
|
62
93
|
}, new Map());
|
|
63
94
|
const options = $options.map(SelectOptionMapper.toModel);
|
|
@@ -180,8 +211,11 @@ let HSelect = class HSelect extends PhoenixLightLitElement {
|
|
|
180
211
|
};
|
|
181
212
|
const $options = Array.from(this.querySelectorAll(SELECT_RELATED_COMPONENTS_NAMES.option));
|
|
182
213
|
$options.forEach(($option) => $option.setAttribute('slot', SELECT_SLOT_NAMES.content));
|
|
183
|
-
|
|
184
|
-
|
|
214
|
+
// this condition doesn't work as properties load on connectedCallback but I leave it here to not forget about deleting it
|
|
215
|
+
if (!this.isDevSelectPlaceholderTranslationFlagEnabled) {
|
|
216
|
+
const $placeholderEl = this.querySelector(`[slot="${SELECT_INPUT_PLACEHOLDER_SLOT_NAME}"]`);
|
|
217
|
+
this.$placeholder = ($placeholderEl && ((_a = $placeholderEl.textContent) === null || _a === void 0 ? void 0 : _a.trim())) ? $placeholderEl : 'Select';
|
|
218
|
+
}
|
|
185
219
|
if (this.multiple)
|
|
186
220
|
this.type = SELECT_TYPES.multiple;
|
|
187
221
|
}
|
|
@@ -283,6 +317,56 @@ let HSelect = class HSelect extends PhoenixLightLitElement {
|
|
|
283
317
|
}
|
|
284
318
|
this._setupEvents();
|
|
285
319
|
}
|
|
320
|
+
firstUpdated(changedProperties) {
|
|
321
|
+
super.firstUpdated(changedProperties);
|
|
322
|
+
if (this.isDevSelectPlaceholderTranslationFlagEnabled) {
|
|
323
|
+
let placeholderCandidate = null;
|
|
324
|
+
if (this.hasSlot(SELECT_INPUT_PLACEHOLDER_SLOT_NAME)) {
|
|
325
|
+
const slotTpls = this.getSlot(SELECT_INPUT_PLACEHOLDER_SLOT_NAME);
|
|
326
|
+
if (Array.isArray(slotTpls) && slotTpls.length > 0) {
|
|
327
|
+
const tpl = slotTpls[0];
|
|
328
|
+
placeholderCandidate = (tpl && tpl.values && tpl.values[0] ? tpl.values[0] : null);
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
// 2) Try toggler slot that may have been assigned into this._slots
|
|
332
|
+
if (!placeholderCandidate && this.hasSlot(SELECT_SLOT_NAMES.toggler)) {
|
|
333
|
+
const togglerTpls = this.getSlot(SELECT_SLOT_NAMES.toggler);
|
|
334
|
+
if (Array.isArray(togglerTpls) && togglerTpls.length > 0) {
|
|
335
|
+
const typedTogglerPtls = togglerTpls;
|
|
336
|
+
const togglerNode = (typedTogglerPtls[0].values ? typedTogglerPtls[0].values[0] : null);
|
|
337
|
+
if (togglerNode) {
|
|
338
|
+
// If togglerNode is an element, try to find an inner placeholder element
|
|
339
|
+
if (typeof togglerNode.querySelector === 'function') {
|
|
340
|
+
const inner = togglerNode.querySelector(`[slot="${SELECT_INPUT_PLACEHOLDER_SLOT_NAME}"]`);
|
|
341
|
+
if (inner)
|
|
342
|
+
placeholderCandidate = inner;
|
|
343
|
+
}
|
|
344
|
+
// fallback to using togglerNode text content (if useful)
|
|
345
|
+
if (!placeholderCandidate && togglerNode.textContent && togglerNode.textContent.trim()) {
|
|
346
|
+
placeholderCandidate = togglerNode;
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
// 3) Last DOM fallback (works if placeholder still in DOM)
|
|
352
|
+
if (!placeholderCandidate) {
|
|
353
|
+
const domEl = this.querySelector(`[slot="${SELECT_INPUT_PLACEHOLDER_SLOT_NAME}"]`);
|
|
354
|
+
if (domEl)
|
|
355
|
+
placeholderCandidate = domEl;
|
|
356
|
+
}
|
|
357
|
+
// 4) If not found yet, set default and listen for child "rendered" events (toggler)
|
|
358
|
+
if (placeholderCandidate) {
|
|
359
|
+
this.$placeholder = placeholderCandidate;
|
|
360
|
+
}
|
|
361
|
+
else {
|
|
362
|
+
this.$placeholder = 'Select';
|
|
363
|
+
this.addEventListener(PHOENIX_LIGHT_LIT_ELEMENTS_EVENT_NAMES.rendered, this._onChildRendered);
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
if (this.isReactiveSelectionFlagEnabled) {
|
|
367
|
+
this._setupMutationObserver();
|
|
368
|
+
}
|
|
369
|
+
}
|
|
286
370
|
attributeChangedCallback(name, _old, value) {
|
|
287
371
|
super.attributeChangedCallback(name, _old, value);
|
|
288
372
|
switch (name) {
|
|
@@ -301,19 +385,19 @@ let HSelect = class HSelect extends PhoenixLightLitElement {
|
|
|
301
385
|
this._updateOptions();
|
|
302
386
|
}
|
|
303
387
|
get _canAddPlaceholder() {
|
|
304
|
-
var _a;
|
|
305
388
|
if (this.multiple || this.required)
|
|
306
389
|
return false;
|
|
307
|
-
const hasSelection = (((_a = this._selectController.selectedOptions$.getValue()) === null || _a === void 0 ? void 0 : _a.length) || 0) > 0;
|
|
308
|
-
if (hasSelection)
|
|
309
|
-
return false;
|
|
310
390
|
const hasExistingPlaceholder = !!this.querySelector('h-option[placeholder]');
|
|
311
391
|
return !hasExistingPlaceholder;
|
|
312
392
|
}
|
|
313
393
|
_createPlaceholderOption() {
|
|
394
|
+
var _a;
|
|
314
395
|
const $option = document.createElement('h-option');
|
|
315
396
|
$option.setAttribute('value', '');
|
|
316
|
-
|
|
397
|
+
const hasSelection = (((_a = this._selectController.selectedOptions$.getValue()) === null || _a === void 0 ? void 0 : _a.length) || 0) > 0;
|
|
398
|
+
if (!hasSelection) {
|
|
399
|
+
$option.setAttribute('selected', 'true');
|
|
400
|
+
}
|
|
317
401
|
$option.setAttribute('placeholder', 'true');
|
|
318
402
|
$option.setAttribute('slot', SELECT_SLOT_NAMES.content);
|
|
319
403
|
const $content = document.createElement(SELECT_RELATED_COMPONENTS_NAMES.optionContent);
|
|
@@ -321,7 +405,7 @@ let HSelect = class HSelect extends PhoenixLightLitElement {
|
|
|
321
405
|
$content.textContent = this.$placeholder;
|
|
322
406
|
}
|
|
323
407
|
else if (this.$placeholder instanceof Node) {
|
|
324
|
-
Array.from(this.$placeholder.childNodes).forEach(node => {
|
|
408
|
+
Array.from(this.$placeholder.childNodes).forEach((node) => {
|
|
325
409
|
$content.appendChild(node.cloneNode(true));
|
|
326
410
|
});
|
|
327
411
|
}
|
|
@@ -330,8 +414,8 @@ let HSelect = class HSelect extends PhoenixLightLitElement {
|
|
|
330
414
|
}
|
|
331
415
|
_injectOptionIntoDOM($option) {
|
|
332
416
|
const $firstOption = this.querySelector(SELECT_RELATED_COMPONENTS_NAMES.option);
|
|
333
|
-
if ($firstOption) {
|
|
334
|
-
|
|
417
|
+
if ($firstOption && $firstOption.parentNode) {
|
|
418
|
+
$firstOption.parentNode.insertBefore($option, $firstOption);
|
|
335
419
|
}
|
|
336
420
|
else {
|
|
337
421
|
this.appendChild($option);
|
|
@@ -341,6 +425,53 @@ let HSelect = class HSelect extends PhoenixLightLitElement {
|
|
|
341
425
|
this.addEventListener(SELECT_EVENT_NAMES.deselectOption, this._handleOptionDeselect);
|
|
342
426
|
this.addEventListener(SELECT_CLOSE_BTN_EVENT_NAMES.close, this._closeSelect);
|
|
343
427
|
}
|
|
428
|
+
_setupMutationObserver() {
|
|
429
|
+
this._optionsMutationObserver = new MutationObserver((mutations) => {
|
|
430
|
+
let shouldUpdate = false;
|
|
431
|
+
let newlySelectedValue = null;
|
|
432
|
+
for (const mutation of mutations) {
|
|
433
|
+
const target = mutation.target;
|
|
434
|
+
if (mutation.type === 'attributes' &&
|
|
435
|
+
mutation.attributeName === 'selected' &&
|
|
436
|
+
target.tagName &&
|
|
437
|
+
target.tagName.toLowerCase() === 'h-option') {
|
|
438
|
+
shouldUpdate = true;
|
|
439
|
+
if (target.hasAttribute('selected')) {
|
|
440
|
+
newlySelectedValue = target.getAttribute('value');
|
|
441
|
+
}
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
if (shouldUpdate) {
|
|
445
|
+
const options = Array.from(this._$options.values()).map(($el) => SelectOptionMapper.toModel($el));
|
|
446
|
+
if (!this.multiple && newlySelectedValue !== null) {
|
|
447
|
+
options.forEach((opt) => {
|
|
448
|
+
opt.selected = opt.value === newlySelectedValue;
|
|
449
|
+
});
|
|
450
|
+
}
|
|
451
|
+
this._selectController.options$.notify(options);
|
|
452
|
+
let selectedOptions = options.filter((opt) => opt.selected);
|
|
453
|
+
if (selectedOptions.length === 0) {
|
|
454
|
+
const placeholder = options.find((opt) => opt.isPlaceholder);
|
|
455
|
+
if (placeholder) {
|
|
456
|
+
placeholder.selected = true;
|
|
457
|
+
const $placeholderHtml = this._$options.get(placeholder.value);
|
|
458
|
+
if ($placeholderHtml) {
|
|
459
|
+
$placeholderHtml.setAttribute('selected', 'true');
|
|
460
|
+
}
|
|
461
|
+
selectedOptions = [placeholder];
|
|
462
|
+
}
|
|
463
|
+
}
|
|
464
|
+
this._selectController.selectedOptions$.notify(selectedOptions);
|
|
465
|
+
}
|
|
466
|
+
});
|
|
467
|
+
if (this._$optionsList.value) {
|
|
468
|
+
this._optionsMutationObserver.observe(this._$optionsList.value, {
|
|
469
|
+
attributes: true,
|
|
470
|
+
attributeFilter: ['selected'],
|
|
471
|
+
subtree: true
|
|
472
|
+
});
|
|
473
|
+
}
|
|
474
|
+
}
|
|
344
475
|
_appendNewHTMLOption(option, position) {
|
|
345
476
|
const $list = this._$optionsList.value;
|
|
346
477
|
if (!$list)
|
|
@@ -401,9 +532,12 @@ let HSelect = class HSelect extends PhoenixLightLitElement {
|
|
|
401
532
|
this._selectController.select(option);
|
|
402
533
|
}
|
|
403
534
|
disconnectedCallback() {
|
|
535
|
+
var _a;
|
|
404
536
|
super.disconnectedCallback();
|
|
405
537
|
this._selectController.options$.unsubscribe(this._optionsObserver);
|
|
406
538
|
this._$options.clear();
|
|
539
|
+
(_a = this._optionsMutationObserver) === null || _a === void 0 ? void 0 : _a.disconnect();
|
|
540
|
+
this.removeEventListener(PHOENIX_LIGHT_LIT_ELEMENTS_EVENT_NAMES.rendered, this._onChildRendered);
|
|
407
541
|
}
|
|
408
542
|
_getClonedPlaceholderElement() {
|
|
409
543
|
return this.$placeholder instanceof HTMLElement ? this.$placeholder.cloneNode(true) : this.$placeholder;
|
|
@@ -455,9 +589,9 @@ let HSelect = class HSelect extends PhoenixLightLitElement {
|
|
|
455
589
|
<h-select-close-btn class="${SELECT_CSS_CLASSES.selectCloseMobileButton}" @close=${this._closeSelect}></h-select-close-btn>
|
|
456
590
|
|
|
457
591
|
<div class=${SELECT_CSS_CLASSES.selectLabel}>
|
|
458
|
-
${this.isDevSelectPlaceholderFlagEnabled
|
|
459
|
-
(_b = this.$searchLabel) === null || _b === void 0 ? void 0 : _b.cloneNode(true)
|
|
460
|
-
html `${this._getClonedPlaceholderElement()}`}
|
|
592
|
+
${this.isDevSelectPlaceholderFlagEnabled
|
|
593
|
+
? (_b = this.$searchLabel) === null || _b === void 0 ? void 0 : _b.cloneNode(true)
|
|
594
|
+
: html `${this._getClonedPlaceholderElement()}`}
|
|
461
595
|
</div>
|
|
462
596
|
|
|
463
597
|
${isSearchEnabled
|
|
@@ -577,6 +711,14 @@ __decorate([
|
|
|
577
711
|
property({ type: Boolean, attribute: 'is-dev-select-placeholder-flag-enabled' }),
|
|
578
712
|
__metadata("design:type", Boolean)
|
|
579
713
|
], HSelect.prototype, "isDevSelectPlaceholderFlagEnabled", void 0);
|
|
714
|
+
__decorate([
|
|
715
|
+
property({ type: Boolean, attribute: 'is-dev-select-placeholder-translation-flag-enabled' }),
|
|
716
|
+
__metadata("design:type", Boolean)
|
|
717
|
+
], HSelect.prototype, "isDevSelectPlaceholderTranslationFlagEnabled", void 0);
|
|
718
|
+
__decorate([
|
|
719
|
+
property({ type: Boolean, attribute: 'is-reactive-selection-flag-enabled' }),
|
|
720
|
+
__metadata("design:type", Boolean)
|
|
721
|
+
], HSelect.prototype, "isReactiveSelectionFlagEnabled", void 0);
|
|
580
722
|
__decorate([
|
|
581
723
|
property({
|
|
582
724
|
converter: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA,uCAAuC,+CAAmD;AAC1F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,wDAA4D;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
|
|
1
|
+
{"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA,uCAAuC,+CAAmD;AAC1F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,wDAA4D;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
|