@shoper/phoenix_design_system 1.11.14-5 → 1.11.14-7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/build/cjs/packages/phoenix/src/components/color_swatches/color_item/color_item.js +21 -29
  2. package/build/cjs/packages/phoenix/src/components/color_swatches/color_item/color_item.js.map +1 -1
  3. package/build/cjs/packages/phoenix/src/components/color_swatches/color_item/color_item_constants.js +0 -4
  4. package/build/cjs/packages/phoenix/src/components/color_swatches/color_item/color_item_constants.js.map +1 -1
  5. package/build/cjs/packages/phoenix/src/components/color_swatches/color_swatches.js +121 -11
  6. package/build/cjs/packages/phoenix/src/components/color_swatches/color_swatches.js.map +1 -1
  7. package/build/cjs/packages/phoenix/src/components/color_swatches/color_swatches_constants.js +0 -2
  8. package/build/cjs/packages/phoenix/src/components/color_swatches/color_swatches_constants.js.map +1 -1
  9. package/build/cjs/packages/phoenix/src/components/dropdown/dropdown.js +114 -37
  10. package/build/cjs/packages/phoenix/src/components/dropdown/dropdown.js.map +1 -1
  11. package/build/cjs/packages/phoenix/src/components/dropdown/dropdown_content.js +12 -9
  12. package/build/cjs/packages/phoenix/src/components/dropdown/dropdown_content.js.map +1 -1
  13. package/build/cjs/packages/phoenix/src/components/dropdown/dropdown_toggler.js +13 -24
  14. package/build/cjs/packages/phoenix/src/components/dropdown/dropdown_toggler.js.map +1 -1
  15. package/build/cjs/packages/phoenix/src/components/form/input/input_control.js +16 -1
  16. package/build/cjs/packages/phoenix/src/components/form/input/input_control.js.map +1 -1
  17. package/build/cjs/packages/phoenix/src/components/form/select/select.js +4 -5
  18. package/build/cjs/packages/phoenix/src/components/form/select/select.js.map +1 -1
  19. package/build/cjs/packages/phoenix/src/components/messages/base_message.js +7 -45
  20. package/build/cjs/packages/phoenix/src/components/messages/base_message.js.map +1 -1
  21. package/build/cjs/packages/phoenix/src/components/messages/base_message_constants.js +0 -2
  22. package/build/cjs/packages/phoenix/src/components/messages/base_message_constants.js.map +1 -1
  23. package/build/cjs/packages/phoenix/src/controllers/keystrokes_controller/keystrokes_controller.js +13 -2
  24. package/build/cjs/packages/phoenix/src/controllers/keystrokes_controller/keystrokes_controller.js.map +1 -1
  25. package/build/cjs/packages/phoenix/src/index.js +5 -5
  26. package/build/esm/packages/phoenix/src/components/color_swatches/color_item/color_item.d.ts +3 -6
  27. package/build/esm/packages/phoenix/src/components/color_swatches/color_item/color_item.js +22 -30
  28. package/build/esm/packages/phoenix/src/components/color_swatches/color_item/color_item.js.map +1 -1
  29. package/build/esm/packages/phoenix/src/components/color_swatches/color_item/color_item_constants.js +1 -4
  30. package/build/esm/packages/phoenix/src/components/color_swatches/color_item/color_item_constants.js.map +1 -1
  31. package/build/esm/packages/phoenix/src/components/color_swatches/color_swatches.d.ts +11 -1
  32. package/build/esm/packages/phoenix/src/components/color_swatches/color_swatches.js +124 -14
  33. package/build/esm/packages/phoenix/src/components/color_swatches/color_swatches.js.map +1 -1
  34. package/build/esm/packages/phoenix/src/components/color_swatches/color_swatches_constants.js +1 -2
  35. package/build/esm/packages/phoenix/src/components/color_swatches/color_swatches_constants.js.map +1 -1
  36. package/build/esm/packages/phoenix/src/components/dropdown/dropdown.d.ts +13 -4
  37. package/build/esm/packages/phoenix/src/components/dropdown/dropdown.js +115 -38
  38. package/build/esm/packages/phoenix/src/components/dropdown/dropdown.js.map +1 -1
  39. package/build/esm/packages/phoenix/src/components/dropdown/dropdown_content.d.ts +1 -2
  40. package/build/esm/packages/phoenix/src/components/dropdown/dropdown_content.js +12 -9
  41. package/build/esm/packages/phoenix/src/components/dropdown/dropdown_content.js.map +1 -1
  42. package/build/esm/packages/phoenix/src/components/dropdown/dropdown_toggler.d.ts +1 -2
  43. package/build/esm/packages/phoenix/src/components/dropdown/dropdown_toggler.js +14 -25
  44. package/build/esm/packages/phoenix/src/components/dropdown/dropdown_toggler.js.map +1 -1
  45. package/build/esm/packages/phoenix/src/components/form/input/input_control.d.ts +3 -0
  46. package/build/esm/packages/phoenix/src/components/form/input/input_control.js +16 -1
  47. package/build/esm/packages/phoenix/src/components/form/input/input_control.js.map +1 -1
  48. package/build/esm/packages/phoenix/src/components/form/select/select.js +4 -5
  49. package/build/esm/packages/phoenix/src/components/form/select/select.js.map +1 -1
  50. package/build/esm/packages/phoenix/src/components/messages/base_message.d.ts +1 -3
  51. package/build/esm/packages/phoenix/src/components/messages/base_message.js +9 -47
  52. package/build/esm/packages/phoenix/src/components/messages/base_message.js.map +1 -1
  53. package/build/esm/packages/phoenix/src/components/messages/base_message_constants.js +3 -4
  54. package/build/esm/packages/phoenix/src/components/messages/base_message_constants.js.map +1 -1
  55. package/build/esm/packages/phoenix/src/controllers/keystrokes_controller/keystrokes_controller.d.ts +2 -1
  56. package/build/esm/packages/phoenix/src/controllers/keystrokes_controller/keystrokes_controller.js +13 -2
  57. package/build/esm/packages/phoenix/src/controllers/keystrokes_controller/keystrokes_controller.js.map +1 -1
  58. package/build/esm/packages/phoenix/src/controllers/keystrokes_controller/keystrokes_controller_types.d.ts +1 -0
  59. package/build/esm/packages/phoenix/src/index.js +1 -1
  60. package/package.json +1 -1
@@ -7,47 +7,40 @@ var decorators = require('lit/decorators');
7
7
  var utilities = require('@dreamcommerce/utilities');
8
8
  var phoenix_light_lit_element = require('../../../core/phoenix_light_lit_element/phoenix_light_lit_element.js');
9
9
  var phoenix_custom_element = require('../../../core/decorators/phoenix_custom_element.js');
10
- var btn_controller = require('../../../controllers/btn_controller/btn_controller.js');
11
10
  var color_item_constants = require('./color_item_constants.js');
12
11
 
13
12
  exports.HColorItem = class HColorItem extends phoenix_light_lit_element.PhoenixLightLitElement {
14
13
  constructor() {
15
- super();
14
+ super(...arguments);
16
15
  this.disabled = false;
17
16
  this.selected = false;
18
17
  this.unclickable = false;
19
- this._dispatchClickedEvent = () => {
20
- this.emitEvent(color_item_constants.COLOR_ITEM_EVENT_NAMES.selected);
18
+ this._$colorSwatches = null;
19
+ this._setupAriaAttributes = () => {
20
+ var _a;
21
+ this._$colorSwatches = this.closest('h-color-swatches');
22
+ this.setAttribute('role', ((_a = this._$colorSwatches) === null || _a === void 0 ? void 0 : _a.multiple) ? 'checkbox' : 'radio');
23
+ this.setAttribute('aria-label', this.label ? this.label : this.color);
24
+ };
25
+ this._setupClasses = () => {
26
+ this.classList.add(color_item_constants.COLOR_ITEM_CSS_CLASSES.colorItem);
27
+ if (this.size)
28
+ this.classList.add(color_item_constants.COLOR_ITEM_CSS_CLASSES[this.size]);
21
29
  };
22
- this._btnController = new btn_controller.BtnController(this, this._dispatchClickedEvent);
23
30
  }
24
31
  connectedCallback() {
25
32
  super.connectedCallback();
26
- this.setupEvents();
33
+ this._setupAriaAttributes();
34
+ this._setupClasses();
27
35
  this.style.backgroundColor = this.setBgColor(this.disabled);
28
- this._syncAriaPressed();
29
- this.setAttribute('aria-label', this.label ? this.label : this.color);
30
- this.unclickable && this.removeAttribute('tabindex');
31
- this.classList.add(color_item_constants.COLOR_ITEM_CSS_CLASSES.colorItem);
36
+ if (this.unclickable) {
37
+ this.removeAttribute('tabindex');
38
+ }
39
+ else {
40
+ this.setAttribute('tabindex', '0');
41
+ }
32
42
  if (!this.value)
33
43
  this.value = this.color;
34
- if (this.size)
35
- this.classList.add(color_item_constants.COLOR_ITEM_CSS_CLASSES[this.size]);
36
- }
37
- attributeChangedCallback(name, value, newValue) {
38
- super.attributeChangedCallback(name, value, newValue);
39
- switch (name) {
40
- case color_item_constants.COLOR_ITEM_SELECTED_ATTRIBUTE: {
41
- this._syncAriaPressed();
42
- break;
43
- }
44
- }
45
- }
46
- _syncAriaPressed() {
47
- this.selected ? this.setAttribute('aria-pressed', '') : this.removeAttribute('aria-pressed');
48
- }
49
- setupEvents() {
50
- !this.unclickable && this.addEventListener('click', this._dispatchClickedEvent);
51
44
  }
52
45
  setBgColor(itemIsDisabled) {
53
46
  return itemIsDisabled ? utilities.ColorUtils.hexToRgba(this.color, 0.5) : this.color;
@@ -82,7 +75,6 @@ tslib_es6.__decorate([
82
75
  tslib_es6.__metadata("design:type", Boolean)
83
76
  ], exports.HColorItem.prototype, "unclickable", void 0);
84
77
  exports.HColorItem = tslib_es6.__decorate([
85
- phoenix_custom_element.phoenixCustomElement('h-color-item'),
86
- tslib_es6.__metadata("design:paramtypes", [])
78
+ phoenix_custom_element.phoenixCustomElement('h-color-item')
87
79
  ], exports.HColorItem);
88
80
  //# sourceMappingURL=color_item.js.map
@@ -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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
@@ -3,9 +3,6 @@
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  const colorItemBaseCssClass = 'color-item';
6
- const COLOR_ITEM_EVENT_NAMES = {
7
- selected: 'colorItemSelected'
8
- };
9
6
  const COLOR_ITEM_SIZES = {
10
7
  s: 's',
11
8
  xs: 'xs'
@@ -18,7 +15,6 @@ const COLOR_ITEM_CSS_CLASSES = {
18
15
  const COLOR_ITEM_SELECTED_ATTRIBUTE = 'selected';
19
16
 
20
17
  exports.COLOR_ITEM_CSS_CLASSES = COLOR_ITEM_CSS_CLASSES;
21
- exports.COLOR_ITEM_EVENT_NAMES = COLOR_ITEM_EVENT_NAMES;
22
18
  exports.COLOR_ITEM_SELECTED_ATTRIBUTE = COLOR_ITEM_SELECTED_ATTRIBUTE;
23
19
  exports.COLOR_ITEM_SIZES = COLOR_ITEM_SIZES;
24
20
  //# sourceMappingURL=color_item_constants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
@@ -8,6 +8,7 @@ var decorators = require('lit/decorators');
8
8
  var utilities = require('@dreamcommerce/utilities');
9
9
  var phoenix_light_lit_element = require('../../core/phoenix_light_lit_element/phoenix_light_lit_element.js');
10
10
  var phoenix_custom_element = require('../../core/decorators/phoenix_custom_element.js');
11
+ var keystrokes_controller = require('../../controllers/keystrokes_controller/keystrokes_controller.js');
11
12
  require('lit-html');
12
13
  var color_swatches_constants = require('./color_swatches_constants.js');
13
14
  var color_item_constants = require('./color_item/color_item_constants.js');
@@ -18,8 +19,87 @@ exports.HColorSwatches = class HColorSwatches extends phoenix_light_lit_element.
18
19
  this.multiple = false;
19
20
  this.selectedColors = [];
20
21
  this.showMoreBtnText = 'Pokaż wszystkie kolory';
21
- this._handleColorClicked = ({ target }) => {
22
- const $colorItem = target;
22
+ this._setupEvents = () => {
23
+ if (this.getAttribute('role') === 'group') {
24
+ this._setupCheckboxGroupEvents();
25
+ }
26
+ else {
27
+ this._setupRadioGroupEvents();
28
+ }
29
+ };
30
+ this._setupCheckboxGroupEvents = () => {
31
+ this._setupColorClickEvents();
32
+ };
33
+ this._setupRadioGroupEvents = () => {
34
+ document.body.addEventListener('keydown', this._focusOnSelectedColor);
35
+ this.addEventListener('keydown', this._handleTabNavigation);
36
+ this.addEventListener('keyup', this._handleRadioNavigation);
37
+ this._setupColorClickEvents();
38
+ };
39
+ this._setupColorClickEvents = () => {
40
+ if (!this._$colorSwatchesChildren)
41
+ return;
42
+ this._$colorSwatchesChildren.forEach(($colorItem) => {
43
+ $colorItem.addEventListener('click', this._handleColorClicked);
44
+ new keystrokes_controller.KeystrokesController({
45
+ host: this,
46
+ keys: [' '],
47
+ callback: this._handleColorClicked,
48
+ target: $colorItem
49
+ });
50
+ });
51
+ };
52
+ this._handleColorClicked = (ev) => {
53
+ ev.preventDefault();
54
+ const $colorItem = ev.target;
55
+ if ($colorItem.unclickable)
56
+ return;
57
+ this._toggleColorItem($colorItem);
58
+ this._dispatchColorChangeEvent($colorItem);
59
+ };
60
+ this._handleTabNavigation = (ev) => {
61
+ if (ev.key !== 'Tab')
62
+ return;
63
+ ev.preventDefault();
64
+ if (ev.shiftKey) {
65
+ const $firstFocusableColor = utilities.UiDomUtils.getFocusableElement(this);
66
+ utilities.UiDomUtils.getPreviousFocusableElement($firstFocusableColor).focus();
67
+ return;
68
+ }
69
+ const $LastFocusableColor = utilities.UiDomUtils.getLastFocusableElement(this);
70
+ utilities.UiDomUtils.getNextFocusableElement($LastFocusableColor).focus();
71
+ };
72
+ this._handleRadioNavigation = (ev) => {
73
+ const changeToNextKeys = ['ArrowDown', 'ArrowRight'];
74
+ const changeToPreviousKeys = ['ArrowUp', 'ArrowLeft'];
75
+ if (!changeToNextKeys.includes(ev.key) && !changeToPreviousKeys.includes(ev.key))
76
+ return;
77
+ ev.preventDefault();
78
+ if (changeToNextKeys.includes(ev.key)) {
79
+ this._handleChangeToNextColorItem(ev);
80
+ }
81
+ if (changeToPreviousKeys.includes(ev.key)) {
82
+ this._handleChangeToPreviousColorItem(ev);
83
+ }
84
+ };
85
+ this._focusOnSelectedColor = (ev) => {
86
+ if (ev.key !== 'Tab' || this.multiple)
87
+ return;
88
+ if (ev.shiftKey) {
89
+ const $previousFocusableElement = utilities.UiDomUtils.getPreviousFocusableElement(document.activeElement);
90
+ if (this.contains($previousFocusableElement) && this.selectedColors.length > 0) {
91
+ ev.preventDefault();
92
+ this.selectedColors[0].focus();
93
+ }
94
+ return;
95
+ }
96
+ const $nextFocusableElement = utilities.UiDomUtils.getNextFocusableElement(document.activeElement);
97
+ if (this.contains($nextFocusableElement) && this.selectedColors.length > 0) {
98
+ ev.preventDefault();
99
+ this.selectedColors[0].focus();
100
+ }
101
+ };
102
+ this._handleColorChange = ($colorItem) => {
23
103
  this._toggleColorItem($colorItem);
24
104
  this._dispatchColorChangeEvent($colorItem);
25
105
  };
@@ -56,6 +136,8 @@ exports.HColorSwatches = class HColorSwatches extends phoenix_light_lit_element.
56
136
  }
57
137
  connectedCallback() {
58
138
  super.connectedCallback();
139
+ this.setAttribute('role', this.multiple ? 'group' : 'radiogroup');
140
+ this._$colorSwatchesChildren = [...this.children];
59
141
  this._setupEvents();
60
142
  this._addCssClasses();
61
143
  this.numberOfVisibleColors && this._hideItems(this.numberOfVisibleColors);
@@ -68,11 +150,9 @@ exports.HColorSwatches = class HColorSwatches extends phoenix_light_lit_element.
68
150
  this.classList.add(color_swatches_constants.COLOR_SWATCHES_CSS_CLASSES.colorSwatches);
69
151
  }
70
152
  _hideItems(numberOfVisibleColors) {
71
- var _a;
72
- this._$colorSwatchesChildren = (_a = document.querySelector(color_swatches_constants.COLOR_SWATCHES_TAG_NAME)) === null || _a === void 0 ? void 0 : _a.children;
73
153
  if (!this._$colorSwatchesChildren)
74
154
  return;
75
- Array.from(this._$colorSwatchesChildren).forEach(($colorSwatchesChild, index) => {
155
+ this._$colorSwatchesChildren.forEach(($colorSwatchesChild, index) => {
76
156
  if (index > numberOfVisibleColors - 1) {
77
157
  $colorSwatchesChild.setAttribute(color_swatches_constants.COLOR_SWATCHES_HIDDEN_ATTRIBUTE, '');
78
158
  }
@@ -83,17 +163,40 @@ exports.HColorSwatches = class HColorSwatches extends phoenix_light_lit_element.
83
163
  var _a;
84
164
  if (!this._$colorSwatchesChildren)
85
165
  return;
86
- Array.from(this._$colorSwatchesChildren).forEach(($colorSwatchesChild) => {
166
+ this._$colorSwatchesChildren.forEach(($colorSwatchesChild) => {
87
167
  $colorSwatchesChild.removeAttribute(color_swatches_constants.COLOR_SWATCHES_HIDDEN_ATTRIBUTE);
88
168
  });
89
169
  (_a = this.querySelector('h-color-swatches-show-more')) === null || _a === void 0 ? void 0 : _a.setAttribute(color_swatches_constants.COLOR_SWATCHES_HIDDEN_ATTRIBUTE, '');
90
170
  });
91
171
  }
92
- _setupEvents() {
93
- this.addEventListener(color_item_constants.COLOR_ITEM_EVENT_NAMES.selected, this._handleColorClicked);
172
+ _handleChangeToNextColorItem({ target }) {
173
+ const $colorItem = target;
174
+ const $nextFocusableElement = utilities.UiDomUtils.getNextFocusableElement($colorItem);
175
+ let $nextColorItem;
176
+ if (!this.contains($nextFocusableElement)) {
177
+ $nextColorItem = utilities.UiDomUtils.getFocusableElement(this);
178
+ }
179
+ else {
180
+ $nextColorItem = $nextFocusableElement;
181
+ }
182
+ $nextColorItem.focus();
183
+ this._handleColorChange($nextColorItem);
184
+ }
185
+ _handleChangeToPreviousColorItem({ target }) {
186
+ const $colorItem = target;
187
+ const $previousFocusableElement = utilities.UiDomUtils.getPreviousFocusableElement($colorItem);
188
+ let $previousColorItem;
189
+ if (!this.contains($previousFocusableElement)) {
190
+ $previousColorItem = utilities.UiDomUtils.getLastFocusableElement(this);
191
+ }
192
+ else {
193
+ $previousColorItem = $previousFocusableElement;
194
+ }
195
+ $previousColorItem.focus();
196
+ this._handleColorChange($previousColorItem);
94
197
  }
95
198
  _toggleColorItem($colorItem) {
96
- this.multiple ? this._handleColorClickedForMultipleMode($colorItem) : this._handleColorClickedForSingleMode($colorItem);
199
+ this.multiple ? this._handleColorClickedForMultipleMode($colorItem) : this._handleColorChangeForSingleMode($colorItem);
97
200
  }
98
201
  _handleColorClickedForMultipleMode($colorItem) {
99
202
  !this._isColorAlreadyExistInArray($colorItem)
@@ -101,17 +204,20 @@ exports.HColorSwatches = class HColorSwatches extends phoenix_light_lit_element.
101
204
  : this._removeExistingColorFromArray($colorItem);
102
205
  this._toggleSelectedAttribute($colorItem);
103
206
  }
104
- _handleColorClickedForSingleMode($colorItem) {
207
+ _handleColorChangeForSingleMode($colorItem) {
105
208
  const $previouslySelected = this.selectedColors[0];
106
209
  this._toggleSelectedAttribute($colorItem);
107
- if ($previouslySelected && $previouslySelected !== $colorItem)
210
+ if ($previouslySelected && $previouslySelected !== $colorItem) {
108
211
  $previouslySelected.removeAttribute(color_item_constants.COLOR_ITEM_SELECTED_ATTRIBUTE);
212
+ $previouslySelected.setAttribute('aria-checked', 'false');
213
+ }
109
214
  this.selectedColors = $previouslySelected === $colorItem ? [] : [$colorItem];
110
215
  }
111
216
  _toggleSelectedAttribute($colorItem) {
112
217
  $colorItem.hasAttribute(color_item_constants.COLOR_ITEM_SELECTED_ATTRIBUTE)
113
218
  ? $colorItem.removeAttribute(color_item_constants.COLOR_ITEM_SELECTED_ATTRIBUTE)
114
219
  : $colorItem.setAttribute(color_item_constants.COLOR_ITEM_SELECTED_ATTRIBUTE, '');
220
+ $colorItem.setAttribute('aria-checked', 'true');
115
221
  }
116
222
  _isColorAlreadyExistInArray($colorItem) {
117
223
  return this.selectedColors.includes($colorItem);
@@ -120,6 +226,10 @@ exports.HColorSwatches = class HColorSwatches extends phoenix_light_lit_element.
120
226
  const indexOfAlreadyExistingColor = this.selectedColors.indexOf($colorItem);
121
227
  this.selectedColors.splice(indexOfAlreadyExistingColor, 1);
122
228
  }
229
+ disconnectedCallback() {
230
+ super.disconnectedCallback();
231
+ document.body.removeEventListener('keydown', this._focusOnSelectedColor);
232
+ }
123
233
  render() {
124
234
  return lit.html `
125
235
  ${this.getSlot('default')}
@@ -1 +1 @@
1
- {"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA,wBAAwB,4CAAgD;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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,4CAAgD;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
@@ -3,7 +3,6 @@
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  const colorSwatchesBaseCssClass = 'color-swatches';
6
- const COLOR_SWATCHES_TAG_NAME = 'h-color-swatches';
7
6
  const COLOR_ITEM_TAG_NAME = 'h-color-item';
8
7
  const COLOR_SWATCHES_CSS_CLASSES = {
9
8
  colorSwatches: colorSwatchesBaseCssClass,
@@ -20,5 +19,4 @@ exports.COLOR_ITEM_TAG_NAME = COLOR_ITEM_TAG_NAME;
20
19
  exports.COLOR_SWATCHES_CSS_CLASSES = COLOR_SWATCHES_CSS_CLASSES;
21
20
  exports.COLOR_SWATCHES_EVENT_NAMES = COLOR_SWATCHES_EVENT_NAMES;
22
21
  exports.COLOR_SWATCHES_HIDDEN_ATTRIBUTE = COLOR_SWATCHES_HIDDEN_ATTRIBUTE;
23
- exports.COLOR_SWATCHES_TAG_NAME = COLOR_SWATCHES_TAG_NAME;
24
22
  //# sourceMappingURL=color_swatches_constants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
@@ -12,6 +12,7 @@ var litHtml = require('lit-html');
12
12
  var global_constants = require('../../global_constants.js');
13
13
  var dropdown_constants = require('./dropdown_constants.js');
14
14
  var relative_position_controller_constants = require('../../controllers/relative_position_controller/relative_position_controller_constants.js');
15
+ var v4 = require('../../../../../external/uuid/dist/esm-browser/v4.js');
15
16
  var portal_constants = require('../portal/portal_constants.js');
16
17
  var backdrop_controller = require('../backdrop/controller/backdrop_controller.js');
17
18
  var click_outside_controller = require('../../controllers/click_outside_controller/click_outside_controller.js');
@@ -29,6 +30,8 @@ exports.HDropdown = HDropdown_1 = class HDropdown extends phoenix_light_lit_elem
29
30
  this.transition = 'direction';
30
31
  this.offset = 0;
31
32
  this.portalTarget = dropdown_constants.DEFAULT_DROPDOWN_PORTAL_NAME;
33
+ this.id = v4['default']();
34
+ this.preventFocusTrap = false;
32
35
  this._backdropController = new backdrop_controller.BackdropController();
33
36
  this._handleClickOutside = async (target) => {
34
37
  var _a, _b;
@@ -45,7 +48,7 @@ exports.HDropdown = HDropdown_1 = class HDropdown extends phoenix_light_lit_elem
45
48
  return;
46
49
  }
47
50
  await this.show();
48
- utilities.UiDomUtils.setFocusToFirstFocusableElementInContainer(this.$dropdownContent);
51
+ this._focusOnFirstContentElement();
49
52
  };
50
53
  this.show = async () => {
51
54
  if (this.opened)
@@ -136,44 +139,32 @@ exports.HDropdown = HDropdown_1 = class HDropdown extends phoenix_light_lit_elem
136
139
  return;
137
140
  await this.hide();
138
141
  };
139
- this._handleForwardFocus = async (ev) => {
140
- // if (!this.opened) this._handleFocusOnNextElement(ev);
141
- if (!this.opened || ev.shiftKey)
142
+ this._keepFocusWithinDropdownForwards = (ev) => {
143
+ var _a, _b;
144
+ if (ev.shiftKey === true || !this.$dropdownContent || !this.opened)
142
145
  return;
143
- const $focusableElementsWithinDropdownContent = utilities.UiDomUtils.getFocusableElements(this.$dropdownContent).filter((element) => element.closest(dropdown_constants.DROPDOWN_CONTENT_NAME) === this.$dropdownContent);
144
- const doesNotHaveFocusableElementsInsideContent = $focusableElementsWithinDropdownContent.length <= 0 && this.opened;
145
- const indexOfCurrentlyFocusedElement = $focusableElementsWithinDropdownContent.indexOf(document.activeElement);
146
- const isActiveElementLastFocusableElement = indexOfCurrentlyFocusedElement === $focusableElementsWithinDropdownContent.length - 1;
147
- if (doesNotHaveFocusableElementsInsideContent || isActiveElementLastFocusableElement)
148
- this._handleFocusOnNextElement(ev);
149
- };
150
- this._handleFocusOnNextElement = async (ev) => {
151
- var _a;
152
- ev.preventDefault();
153
- const $focusableElements = utilities.UiDomUtils.getFocusableElements(document.body);
154
- const indexOfDropdownToggler = $focusableElements.indexOf(this.$dropdownToggler);
155
- const $nextElementToFocus = (_a = $focusableElements[indexOfDropdownToggler + 1]) !== null && _a !== void 0 ? _a : $focusableElements[0];
156
- await this._hideDropdownsSequentially();
157
- await this.hide();
158
- this._focusOnNextElementAfterToggler($nextElementToFocus);
159
- };
160
- this._focusOnNextElementAfterToggler = ($elementToFocus) => {
161
- var _a;
162
- const isTogglerLastChildOfPreviousDropdown = ($elementToFocus === null || $elementToFocus === void 0 ? void 0 : $elementToFocus.closest(dropdown_constants.DROPDOWN_CONTENT_NAME)) === this.$dropdownContent;
163
- if (isTogglerLastChildOfPreviousDropdown) {
164
- (_a = this.$dropdownToggler) === null || _a === void 0 ? void 0 : _a.focus();
146
+ const $target = ev.target;
147
+ if (((_a = this.$dropdownContent) === null || _a === void 0 ? void 0 : _a.contains($target)) && this.preventFocusTrap) {
148
+ this._handleFocusOnNextElementAfterDropdown(ev);
149
+ return;
150
+ }
151
+ if ((_b = this.$dropdownToggler) === null || _b === void 0 ? void 0 : _b.contains($target)) {
152
+ this._handleFocusFromTogglerForwards(ev);
165
153
  return;
166
154
  }
167
- $elementToFocus === null || $elementToFocus === void 0 ? void 0 : $elementToFocus.focus();
155
+ this._handleFocusFromSentinelEndForwards(ev, $target);
168
156
  };
169
- this._handleBackwardFocus = async (ev) => {
170
- var _a;
171
- const $firstFocusableElement = this.$dropdownContent && utilities.UiDomUtils.getFocusableElement(this.$dropdownContent);
172
- if (document.activeElement !== $firstFocusableElement)
157
+ this._keepFocusWithinDropdownBackwards = (ev) => {
158
+ if (!this.opened || !this.$dropdownContent)
173
159
  return;
174
- ev.preventDefault();
175
- (_a = this.$dropdownToggler) === null || _a === void 0 ? void 0 : _a.focus();
176
- await this._hideDropdownsSequentially();
160
+ const $target = ev.target;
161
+ if (this.preventFocusTrap) {
162
+ this._handleDefaultFocusFromDropdownBackwards(ev);
163
+ }
164
+ else {
165
+ this._handleFocusFromTogglerBackwards(ev, $target);
166
+ this._handleFocusFromSentinelStartBackwards(ev, $target);
167
+ }
177
168
  };
178
169
  this._hoverToggle = async (ev) => {
179
170
  if (window.innerWidth < global_constants.BREAKPOINTS.xs)
@@ -185,12 +176,19 @@ exports.HDropdown = HDropdown_1 = class HDropdown extends phoenix_light_lit_elem
185
176
  const isHoveredWithinDropdown = this._isHoveredWithinDropdown(ev.target);
186
177
  if (isHoveredWithinDropdown && !this.opened) {
187
178
  await this.show();
188
- utilities.UiDomUtils.setFocusToFirstFocusableElementInContainer(this.$dropdownContent);
179
+ this._focusOnFirstContentElement();
189
180
  return;
190
181
  }
191
182
  if (!isHoveredWithinDropdown && this.opened)
192
183
  await this._hideDropdownsSequentially();
193
184
  };
185
+ this._focusOnFirstContentElement = () => {
186
+ if (!this.$dropdownContent)
187
+ return;
188
+ const $firstFocusableElement = this._getTrulyFocusableElements(this.$dropdownContent)[0];
189
+ if ($firstFocusableElement)
190
+ $firstFocusableElement.focus();
191
+ };
194
192
  this.isOpened = () => this.opened;
195
193
  this._positionDropdownContent = () => {
196
194
  if (this.contentWidth === dropdown_constants.DROPDOWN_CONTENT_WIDTH.full)
@@ -216,13 +214,14 @@ exports.HDropdown = HDropdown_1 = class HDropdown extends phoenix_light_lit_elem
216
214
  host: this,
217
215
  target: document.body,
218
216
  keys: ['tab'],
219
- callback: this._handleForwardFocus
217
+ callback: this._keepFocusWithinDropdownForwards
220
218
  });
221
219
  new keystrokes_controller.KeystrokesController({
222
220
  host: this,
223
221
  target: document.body,
224
222
  keys: [['shift', 'tab']],
225
- callback: this._handleBackwardFocus
223
+ callback: this._keepFocusWithinDropdownBackwards,
224
+ containerSelectors: ['h-dropdown', 'h-dropdown-content']
226
225
  });
227
226
  }
228
227
  async connectedCallback() {
@@ -298,6 +297,74 @@ exports.HDropdown = HDropdown_1 = class HDropdown extends phoenix_light_lit_elem
298
297
  (_b = this.$dropdownContent) === null || _b === void 0 ? void 0 : _b.classList.add(global_constants.SCROLLABLE_CLASS_NAME);
299
298
  }
300
299
  }
300
+ _handleFocusOnNextElementAfterDropdown(ev) {
301
+ ev.preventDefault();
302
+ this.hide();
303
+ utilities.UiDomUtils.getNextFocusableElement(this.$dropdownToggler || this).focus();
304
+ return;
305
+ }
306
+ _handleFocusFromTogglerForwards(ev) {
307
+ if (!this.$dropdownContent)
308
+ return;
309
+ const trulyFocusableElements = this._getTrulyFocusableElements(this.$dropdownContent);
310
+ if (trulyFocusableElements.length === 0)
311
+ return;
312
+ ev.preventDefault();
313
+ trulyFocusableElements[0].focus();
314
+ }
315
+ _handleFocusFromSentinelEndForwards(ev, $target) {
316
+ var _a;
317
+ if (!this.$dropdownContent)
318
+ return;
319
+ const trulyFocusableElements = this._getTrulyFocusableElements(this.$dropdownContent);
320
+ const $lastFocusableElement = trulyFocusableElements.slice(-1)[0];
321
+ if ($target !== $lastFocusableElement)
322
+ return;
323
+ ev.preventDefault();
324
+ (_a = this.$dropdownToggler) === null || _a === void 0 ? void 0 : _a.focus();
325
+ }
326
+ _handleDefaultFocusFromDropdownBackwards(ev) {
327
+ ev.preventDefault();
328
+ this.hide();
329
+ utilities.UiDomUtils.getPreviousFocusableElement(this.$dropdownToggler || this).focus();
330
+ }
331
+ _handleFocusFromTogglerBackwards(ev, $target) {
332
+ var _a;
333
+ if ($target !== this.$dropdownToggler && !((_a = this.$dropdownToggler) === null || _a === void 0 ? void 0 : _a.contains($target)) || !this.$dropdownContent)
334
+ return;
335
+ ev.preventDefault();
336
+ const trulyFocusableElements = this._getTrulyFocusableElements(this.$dropdownContent);
337
+ if (trulyFocusableElements.length === 0)
338
+ return;
339
+ const $lastFocusableElement = trulyFocusableElements.slice(-1)[0];
340
+ $lastFocusableElement.focus();
341
+ }
342
+ _handleFocusFromSentinelStartBackwards(ev, $target) {
343
+ var _a;
344
+ if (!this.$dropdownContent)
345
+ return;
346
+ const $firstFocusableElement = this._getTrulyFocusableElements(this.$dropdownContent)[0];
347
+ if ($target !== $firstFocusableElement)
348
+ return;
349
+ ev.preventDefault();
350
+ (_a = this.$dropdownToggler) === null || _a === void 0 ? void 0 : _a.focus();
351
+ }
352
+ _getTrulyFocusableElements($container) {
353
+ const focusableElements = utilities.UiDomUtils.getFocusableElements($container);
354
+ return focusableElements.filter(($el) => this._isElementTrulyFocusable($el));
355
+ }
356
+ _isElementTrulyFocusable($el) {
357
+ const style = window.getComputedStyle($el);
358
+ if (style.display === 'none' || style.visibility === 'hidden') {
359
+ return false;
360
+ }
361
+ if ($el.nodeName === 'H-PORTAL')
362
+ return true;
363
+ const $parent = $el.parentElement;
364
+ if (!$parent)
365
+ return true;
366
+ return this._isElementTrulyFocusable($parent);
367
+ }
301
368
  _isHoveredWithinDropdown(element) {
302
369
  var _a;
303
370
  if (element === this)
@@ -321,6 +388,8 @@ exports.HDropdown = HDropdown_1 = class HDropdown extends phoenix_light_lit_elem
321
388
  return;
322
389
  if (!this._hasScrollableClassInitially)
323
390
  this._hasScrollableClassInitially = this.$dropdownContent.classList.contains(global_constants.SCROLLABLE_CLASS_NAME);
391
+ if (!this.preventFocusTrap)
392
+ this.$dropdownContent.setAttribute('aria-modal', 'true');
324
393
  }
325
394
  _getDropdownContentWidth() {
326
395
  const isMobileResolution = document.documentElement.clientWidth < global_constants.BREAKPOINTS.xs;
@@ -389,6 +458,14 @@ tslib_es6.__decorate([
389
458
  decorators_js.property({ type: String, attribute: 'mobile-position' }),
390
459
  tslib_es6.__metadata("design:type", String)
391
460
  ], exports.HDropdown.prototype, "mobilePosition", void 0);
461
+ tslib_es6.__decorate([
462
+ decorators_js.property({ type: String, attribute: 'id', reflect: true }),
463
+ tslib_es6.__metadata("design:type", Object)
464
+ ], exports.HDropdown.prototype, "id", void 0);
465
+ tslib_es6.__decorate([
466
+ decorators_js.property({ type: Boolean, attribute: 'prevent-focus-trap' }),
467
+ tslib_es6.__metadata("design:type", Object)
468
+ ], exports.HDropdown.prototype, "preventFocusTrap", void 0);
392
469
  exports.HDropdown = HDropdown_1 = tslib_es6.__decorate([
393
470
  phoenix_custom_element.phoenixCustomElement('h-dropdown'),
394
471
  tslib_es6.__metadata("design:paramtypes", [])
@@ -1 +1 @@
1
- {"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA,wBAAwB,4CAAgD;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,4CAAgD;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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,4CAAgD;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,qDAAyD;AAC1E;AACA;AACA;AACA,uBAAuB,4CAAgD;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
@@ -3,8 +3,8 @@
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var tslib_es6 = require('../../../../../external/tslib/tslib.es6.js');
6
- var lit = require('lit');
7
6
  var decorators = require('lit/decorators');
7
+ var utilities = require('@dreamcommerce/utilities');
8
8
  var phoenix_light_lit_element = require('../../core/phoenix_light_lit_element/phoenix_light_lit_element.js');
9
9
  var phoenix_custom_element = require('../../core/decorators/phoenix_custom_element.js');
10
10
  var dropdown_constants = require('./dropdown_constants.js');
@@ -13,19 +13,22 @@ exports.HDropdownContent = class HDropdownContent extends phoenix_light_lit_elem
13
13
  constructor() {
14
14
  super();
15
15
  this.name = '';
16
+ this._setupRole = () => {
17
+ const $focusableElements = utilities.UiDomUtils.getFocusableElements(this);
18
+ const role = $focusableElements.length < 2 ? 'dialog' : 'menu';
19
+ this.setAttribute('role', role);
20
+ if (role === 'menu') {
21
+ Array.from(this.children).forEach((element) => {
22
+ element.setAttribute('role', 'menuitem');
23
+ });
24
+ }
25
+ };
16
26
  this.slot = this.hasAttribute('slot') ? this.slot : 'content';
17
27
  }
18
28
  connectedCallback() {
19
29
  super.connectedCallback();
20
30
  this.classList.add(dropdown_constants.DROPDOWN_CSS_CLASSES.content);
21
- this.setAttribute('role', 'menu');
22
- Array.from(this.children).forEach((element) => {
23
- element.setAttribute('role', 'menuitem');
24
- });
25
- }
26
- render() {
27
- super.render();
28
- return lit.html ` <div role="dialog">${this.getSlot('content')}</div> `;
31
+ this._setupRole();
29
32
  }
30
33
  };
31
34
  tslib_es6.__decorate([
@@ -1 +1 @@
1
- {"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA,wBAAwB,4CAAgD;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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,4CAAgD;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}