@shoper/phoenix_design_system 0.16.2 → 0.18.0-1

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 (29) hide show
  1. package/build/cjs/packages/phoenix/src/components/groups/toggle_button_group/toggle_button.js +55 -0
  2. package/build/cjs/packages/phoenix/src/components/groups/toggle_button_group/toggle_button.js.map +1 -0
  3. package/build/cjs/packages/phoenix/src/components/groups/toggle_button_group/toggle_button_group.js +67 -0
  4. package/build/cjs/packages/phoenix/src/components/groups/toggle_button_group/toggle_button_group.js.map +1 -0
  5. package/build/cjs/packages/phoenix/src/components/groups/toggle_button_group/toggle_button_group_constants.js +17 -0
  6. package/build/cjs/packages/phoenix/src/components/groups/toggle_button_group/toggle_button_group_constants.js.map +1 -0
  7. package/build/cjs/packages/phoenix/src/core/phoenix_light_lit_element.js +56 -1
  8. package/build/cjs/packages/phoenix/src/core/phoenix_light_lit_element.js.map +1 -1
  9. package/build/cjs/packages/phoenix/src/index.js +14 -0
  10. package/build/cjs/packages/phoenix/src/index.js.map +1 -1
  11. package/build/esm/packages/phoenix/src/components/groups/toggle_button_group/toggle_button.d.ts +10 -0
  12. package/build/esm/packages/phoenix/src/components/groups/toggle_button_group/toggle_button.js +53 -0
  13. package/build/esm/packages/phoenix/src/components/groups/toggle_button_group/toggle_button.js.map +1 -0
  14. package/build/esm/packages/phoenix/src/components/groups/toggle_button_group/toggle_button_group.d.ts +12 -0
  15. package/build/esm/packages/phoenix/src/components/groups/toggle_button_group/toggle_button_group.js +65 -0
  16. package/build/esm/packages/phoenix/src/components/groups/toggle_button_group/toggle_button_group.js.map +1 -0
  17. package/build/esm/packages/phoenix/src/components/groups/toggle_button_group/toggle_button_group_constants.d.ts +8 -0
  18. package/build/esm/packages/phoenix/src/components/groups/toggle_button_group/toggle_button_group_constants.js +11 -0
  19. package/build/esm/packages/phoenix/src/components/groups/toggle_button_group/toggle_button_group_constants.js.map +1 -0
  20. package/build/esm/packages/phoenix/src/components/groups/toggle_button_group/toggle_button_group_types.d.ts +6 -0
  21. package/build/esm/packages/phoenix/src/components/groups/toggle_button_group/toggle_button_group_types.js +2 -0
  22. package/build/esm/packages/phoenix/src/components/groups/toggle_button_group/toggle_button_group_types.js.map +1 -0
  23. package/build/esm/packages/phoenix/src/core/phoenix_light_lit_element.d.ts +7 -0
  24. package/build/esm/packages/phoenix/src/core/phoenix_light_lit_element.js +57 -2
  25. package/build/esm/packages/phoenix/src/core/phoenix_light_lit_element.js.map +1 -1
  26. package/build/esm/packages/phoenix/src/index.d.ts +3 -0
  27. package/build/esm/packages/phoenix/src/index.js +2 -0
  28. package/build/esm/packages/phoenix/src/index.js.map +1 -1
  29. package/package.json +1 -1
@@ -0,0 +1,55 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var tslib_es6 = require('../../../../../../external/tslib/tslib.es6.js');
6
+ require('lit');
7
+ var decorators = require('lit/decorators');
8
+ var phoenix_light_lit_element = require('../../../core/phoenix_light_lit_element.js');
9
+ var phoenix_custom_element = require('../../../core/decorators/phoenix_custom_element.js');
10
+ var toggle_button_group_constants = require('./toggle_button_group_constants.js');
11
+
12
+ exports.HToggleButton = class HToggleButton extends phoenix_light_lit_element.PhoenixLightLitElement {
13
+ constructor() {
14
+ super(...arguments);
15
+ this.toggledOn = false;
16
+ }
17
+ willUpdate(propertyValues) {
18
+ var _a;
19
+ if (propertyValues.has('toggledOn')) {
20
+ (_a = this.firstElementChild) === null || _a === void 0 ? void 0 : _a.setAttribute('aria-pressed', this.toggledOn.toString());
21
+ }
22
+ }
23
+ connectedCallback() {
24
+ super.connectedCallback();
25
+ if (!this.hasAttribute('role')) {
26
+ this.setAttribute('role', 'presentation');
27
+ }
28
+ this.addEventListener('click', this._componentClickHandler);
29
+ this._emmitComponentConnected();
30
+ }
31
+ _emmitComponentConnected() {
32
+ const detail = {
33
+ target: this
34
+ };
35
+ this.dispatchEvent(new CustomEvent(toggle_button_group_constants.TOGGLE_BUTTON_EVENT_NAMES.connected, { bubbles: true, detail }));
36
+ }
37
+ _componentClickHandler(event) {
38
+ event.stopPropagation();
39
+ this._emitComponentClickedCustomEvent();
40
+ }
41
+ _emitComponentClickedCustomEvent() {
42
+ const detail = {
43
+ target: this
44
+ };
45
+ this.dispatchEvent(new CustomEvent(toggle_button_group_constants.TOGGLE_BUTTON_EVENT_NAMES.clicked, { bubbles: true, detail }));
46
+ }
47
+ };
48
+ tslib_es6.__decorate([
49
+ decorators.property({ type: Boolean, attribute: toggle_button_group_constants.TOGGLED_ON_ATTRIBUTE_NAME }),
50
+ tslib_es6.__metadata("design:type", Object)
51
+ ], exports.HToggleButton.prototype, "toggledOn", void 0);
52
+ exports.HToggleButton = tslib_es6.__decorate([
53
+ phoenix_custom_element.phoenixCustomElement('h-toggle-button')
54
+ ], exports.HToggleButton);
55
+ //# sourceMappingURL=toggle_button.js.map
@@ -0,0 +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;"}
@@ -0,0 +1,67 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var tslib_es6 = require('../../../../../../external/tslib/tslib.es6.js');
6
+ var phoenix_light_lit_element = require('../../../core/phoenix_light_lit_element.js');
7
+ var phoenix_custom_element = require('../../../core/decorators/phoenix_custom_element.js');
8
+ var v4 = require('../../../../../../external/uuid/dist/esm-browser/v4.js');
9
+ var toggle_button_group_constants = require('./toggle_button_group_constants.js');
10
+
11
+ var HToggleButtonGroup_1;
12
+ exports.HToggleButtonGroup = HToggleButtonGroup_1 = class HToggleButtonGroup extends phoenix_light_lit_element.PhoenixLightLitElement {
13
+ constructor() {
14
+ super(...arguments);
15
+ this.toggleButtonsRegistry = [];
16
+ }
17
+ connectedCallback() {
18
+ super.connectedCallback();
19
+ if (!this.hasAttribute('role')) {
20
+ this.setAttribute('role', 'group');
21
+ }
22
+ this.addEventListener(toggle_button_group_constants.TOGGLE_BUTTON_EVENT_NAMES.connected, this._toggleButtonConnectedHandler);
23
+ this.addEventListener(toggle_button_group_constants.TOGGLE_BUTTON_EVENT_NAMES.clicked, this._toggleButtonClickHandler);
24
+ }
25
+ disconnectedCallback() {
26
+ super.disconnectedCallback();
27
+ this.toggleButtonsRegistry = [];
28
+ }
29
+ _toggleButtonConnectedHandler(event) {
30
+ event.stopPropagation();
31
+ const toggleButton = event.detail.target;
32
+ this._registerToggleButton(toggleButton);
33
+ if (toggleButton.getAttribute(toggle_button_group_constants.TOGGLED_ON_ATTRIBUTE_NAME) === '') {
34
+ this._emitSingleToggleOnModeToggleChange(toggleButton.getAttribute('value'));
35
+ }
36
+ }
37
+ _registerToggleButton(toggleButton) {
38
+ toggleButton.setAttribute(HToggleButtonGroup_1.DATA_TOGGLE_ID_ATTRIBUTE_NAME, v4['default']());
39
+ this.toggleButtonsRegistry = [...this.toggleButtonsRegistry, toggleButton];
40
+ }
41
+ _toggleButtonClickHandler(event) {
42
+ event.stopPropagation();
43
+ const target = event.detail.target;
44
+ this._performSingleToggleOnActionOnToggleButtons(target);
45
+ this._emitSingleToggleOnModeToggleChange(target.getAttribute('value'));
46
+ }
47
+ _performSingleToggleOnActionOnToggleButtons(toggleButton) {
48
+ this.toggleButtonsRegistry.forEach((element) => {
49
+ const canToggleOnButton = element.getAttribute(HToggleButtonGroup_1.DATA_TOGGLE_ID_ATTRIBUTE_NAME) ===
50
+ toggleButton.getAttribute(HToggleButtonGroup_1.DATA_TOGGLE_ID_ATTRIBUTE_NAME);
51
+ if (canToggleOnButton) {
52
+ element.setAttribute(toggle_button_group_constants.TOGGLED_ON_ATTRIBUTE_NAME, '');
53
+ return;
54
+ }
55
+ element.removeAttribute(toggle_button_group_constants.TOGGLED_ON_ATTRIBUTE_NAME);
56
+ });
57
+ }
58
+ _emitSingleToggleOnModeToggleChange(value) {
59
+ const detail = { value };
60
+ this.dispatchEvent(new CustomEvent(toggle_button_group_constants.TOGGLE_BUTTON_GROUP_EVENT_NAMES.toggleChange, { bubbles: true, detail }));
61
+ }
62
+ };
63
+ exports.HToggleButtonGroup.DATA_TOGGLE_ID_ATTRIBUTE_NAME = 'data-toggle-button-id';
64
+ exports.HToggleButtonGroup = HToggleButtonGroup_1 = tslib_es6.__decorate([
65
+ phoenix_custom_element.phoenixCustomElement('h-toggle-button-group')
66
+ ], exports.HToggleButtonGroup);
67
+ //# sourceMappingURL=toggle_button_group.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA,wBAAwB,+CAAmD;AAC3E;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;"}
@@ -0,0 +1,17 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ const TOGGLED_ON_ATTRIBUTE_NAME = 'toggled-on';
6
+ const TOGGLE_BUTTON_GROUP_EVENT_NAMES = {
7
+ toggleChange: 'toggleChange'
8
+ };
9
+ const TOGGLE_BUTTON_EVENT_NAMES = {
10
+ connected: 'toggleButtonConnected',
11
+ clicked: 'toggleButtonClicked'
12
+ };
13
+
14
+ exports.TOGGLED_ON_ATTRIBUTE_NAME = TOGGLED_ON_ATTRIBUTE_NAME;
15
+ exports.TOGGLE_BUTTON_EVENT_NAMES = TOGGLE_BUTTON_EVENT_NAMES;
16
+ exports.TOGGLE_BUTTON_GROUP_EVENT_NAMES = TOGGLE_BUTTON_GROUP_EVENT_NAMES;
17
+ //# sourceMappingURL=toggle_button_group_constants.js.map
@@ -0,0 +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;"}
@@ -7,16 +7,67 @@ var tslib_es6 = require('../../../../external/tslib/tslib.es6.js');
7
7
  var lit = require('lit');
8
8
  var decorators = require('lit/decorators');
9
9
 
10
+ class ComponentsUtils {
11
+ static isUnknownElement($element) {
12
+ return $element instanceof HTMLUnknownElement;
13
+ }
14
+ static isElementDefined($element) {
15
+ if (!this.isCustomElement($element))
16
+ return false;
17
+ const customElementClass = window.customElements.get($element.tagName.toLowerCase());
18
+ return !!customElementClass && $element instanceof customElementClass;
19
+ }
20
+ static isCustomElement($element) {
21
+ return $element.tagName.includes('-');
22
+ }
23
+ static filterComponentsToInitialize(components) {
24
+ return components.filter(($element) => ComponentsUtils.isUnknownElement($element) ||
25
+ (ComponentsUtils.isCustomElement($element) && !ComponentsUtils.isElementDefined($element)) ||
26
+ (ComponentsUtils.isCustomElement($element) && ComponentsUtils.isElementDefined($element) && !$element.isWebComponentConnected));
27
+ }
28
+ }
10
29
  class PhoenixLightLitElement extends lit.LitElement {
11
30
  constructor() {
12
31
  super(...arguments);
13
32
  this._slots = {};
33
+ this.isWebComponentConnected = false;
34
+ this._handleComponentConnected = ({ detail }) => {
35
+ const connectedElement = detail.$el.tagName.toLowerCase();
36
+ console.log('connected', connectedElement);
37
+ if (this.childrenToConnectionWatch.includes(connectedElement)) {
38
+ const elToRemoveIndex = this.childrenToConnectionWatch.findIndex((tagName) => tagName === connectedElement);
39
+ this.childrenToConnectionWatch.splice(elToRemoveIndex, elToRemoveIndex + 1);
40
+ }
41
+ if (!this.childrenToConnectionWatch.length) {
42
+ this.allChildrenConnected();
43
+ this.removeEventListener('connected', this._handleComponentConnected);
44
+ }
45
+ };
14
46
  }
15
47
  firstUpdated(props) {
16
48
  super.firstUpdated(props);
17
49
  this._slots = this._assignSlots();
18
50
  this.requestUpdate();
19
51
  }
52
+ _setupChildrenWatch() {
53
+ this.childrenToConnectionWatch = this.childrenToConnectionWatch
54
+ ? this.childrenToConnectionWatch
55
+ : ComponentsUtils.filterComponentsToInitialize([...this.querySelectorAll('*')]).map(($element) => $element.tagName.toLowerCase());
56
+ console.log(this.childrenToConnectionWatch);
57
+ this.addEventListener('connected', this._handleComponentConnected);
58
+ }
59
+ connectedCallback() {
60
+ super.connectedCallback();
61
+ this.dispatchEvent(new CustomEvent('connected', {
62
+ detail: {
63
+ $el: this
64
+ },
65
+ bubbles: true
66
+ }));
67
+ if (this.watchChildren)
68
+ this._setupChildrenWatch();
69
+ }
70
+ allChildrenConnected() { }
20
71
  _assignSlots() {
21
72
  return [...this.querySelectorAll(':scope > [slot]')].reduce((acc, $el) => {
22
73
  var _a;
@@ -45,7 +96,11 @@ class PhoenixLightLitElement extends lit.LitElement {
45
96
  tslib_es6.__decorate([
46
97
  decorators.state(),
47
98
  tslib_es6.__metadata("design:type", Object)
48
- ], PhoenixLightLitElement.prototype, "_slots", void 0);
99
+ ], PhoenixLightLitElement.prototype, "_slots", void 0);
100
+ tslib_es6.__decorate([
101
+ decorators.property({ type: Boolean }),
102
+ tslib_es6.__metadata("design:type", Object)
103
+ ], PhoenixLightLitElement.prototype, "isWebComponentConnected", void 0);
49
104
 
50
105
  exports.PhoenixLightLitElement = PhoenixLightLitElement;
51
106
  //# sourceMappingURL=phoenix_light_lit_element.js.map
@@ -1 +1 @@
1
- {"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA,wBAAwB,yCAA6C;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA,wBAAwB,yCAA6C;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
@@ -56,6 +56,8 @@ var relative_position_controller = require('./controllers/relative_position_cont
56
56
  var dropdown = require('./components/dropdown/dropdown.js');
57
57
  var toggle_element_aria_controller = require('./controllers/toggle_element_aria_controller/toggle_element_aria_controller.js');
58
58
  var dropdown_toggler = require('./components/dropdown/dropdown_toggler.js');
59
+ var toggle_button_group = require('./components/groups/toggle_button_group/toggle_button_group.js');
60
+ var toggle_button = require('./components/groups/toggle_button_group/toggle_button.js');
59
61
  var click_outside_controller_messages = require('./controllers/click_outside_controller/click_outside_controller_messages.js');
60
62
  var backdrop = require('./components/backdrop/backdrop.js');
61
63
  var visibility_controller = require('./controllers/visibility_controller/visibility_controller.js');
@@ -316,6 +318,18 @@ Object.defineProperty(exports, 'HDropdownToggler', {
316
318
  return dropdown_toggler.HDropdownToggler;
317
319
  }
318
320
  });
321
+ Object.defineProperty(exports, 'HToggleButtonGroup', {
322
+ enumerable: true,
323
+ get: function () {
324
+ return toggle_button_group.HToggleButtonGroup;
325
+ }
326
+ });
327
+ Object.defineProperty(exports, 'HToggleButton', {
328
+ enumerable: true,
329
+ get: function () {
330
+ return toggle_button.HToggleButton;
331
+ }
332
+ });
319
333
  exports.CLICK_OUTSIDE_CONTROLLER_MESSAGES = click_outside_controller_messages.CLICK_OUTSIDE_CONTROLLER_MESSAGES;
320
334
  Object.defineProperty(exports, 'HBackdrop', {
321
335
  enumerable: true,
@@ -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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
@@ -0,0 +1,10 @@
1
+ import { PropertyValues } from 'lit';
2
+ import { PhoenixLightLitElement } from "../../../core/phoenix_light_lit_element";
3
+ export declare class HToggleButton extends PhoenixLightLitElement {
4
+ toggledOn: boolean;
5
+ willUpdate(propertyValues: PropertyValues): void;
6
+ connectedCallback(): void;
7
+ private _emmitComponentConnected;
8
+ private _componentClickHandler;
9
+ private _emitComponentClickedCustomEvent;
10
+ }
@@ -0,0 +1,53 @@
1
+ import { __decorate, __metadata } from '../../../../../../external/tslib/tslib.es6.js';
2
+ import 'lit';
3
+ import { property } from 'lit/decorators';
4
+ import { PhoenixLightLitElement } from '../../../core/phoenix_light_lit_element.js';
5
+ import { phoenixCustomElement } from '../../../core/decorators/phoenix_custom_element.js';
6
+ import { TOGGLE_BUTTON_EVENT_NAMES, TOGGLED_ON_ATTRIBUTE_NAME } from './toggle_button_group_constants.js';
7
+
8
+ let HToggleButton = class HToggleButton extends PhoenixLightLitElement {
9
+ constructor() {
10
+ super(...arguments);
11
+ this.toggledOn = false;
12
+ }
13
+ willUpdate(propertyValues) {
14
+ var _a;
15
+ if (propertyValues.has('toggledOn')) {
16
+ (_a = this.firstElementChild) === null || _a === void 0 ? void 0 : _a.setAttribute('aria-pressed', this.toggledOn.toString());
17
+ }
18
+ }
19
+ connectedCallback() {
20
+ super.connectedCallback();
21
+ if (!this.hasAttribute('role')) {
22
+ this.setAttribute('role', 'presentation');
23
+ }
24
+ this.addEventListener('click', this._componentClickHandler);
25
+ this._emmitComponentConnected();
26
+ }
27
+ _emmitComponentConnected() {
28
+ const detail = {
29
+ target: this
30
+ };
31
+ this.dispatchEvent(new CustomEvent(TOGGLE_BUTTON_EVENT_NAMES.connected, { bubbles: true, detail }));
32
+ }
33
+ _componentClickHandler(event) {
34
+ event.stopPropagation();
35
+ this._emitComponentClickedCustomEvent();
36
+ }
37
+ _emitComponentClickedCustomEvent() {
38
+ const detail = {
39
+ target: this
40
+ };
41
+ this.dispatchEvent(new CustomEvent(TOGGLE_BUTTON_EVENT_NAMES.clicked, { bubbles: true, detail }));
42
+ }
43
+ };
44
+ __decorate([
45
+ property({ type: Boolean, attribute: TOGGLED_ON_ATTRIBUTE_NAME }),
46
+ __metadata("design:type", Object)
47
+ ], HToggleButton.prototype, "toggledOn", void 0);
48
+ HToggleButton = __decorate([
49
+ phoenixCustomElement('h-toggle-button')
50
+ ], HToggleButton);
51
+
52
+ export { HToggleButton };
53
+ //# sourceMappingURL=toggle_button.js.map
@@ -0,0 +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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
@@ -0,0 +1,12 @@
1
+ import { PhoenixLightLitElement } from "../../../core/phoenix_light_lit_element";
2
+ export declare class HToggleButtonGroup extends PhoenixLightLitElement {
3
+ private static readonly DATA_TOGGLE_ID_ATTRIBUTE_NAME;
4
+ private toggleButtonsRegistry;
5
+ connectedCallback(): void;
6
+ disconnectedCallback(): void;
7
+ private _toggleButtonConnectedHandler;
8
+ private _registerToggleButton;
9
+ private _toggleButtonClickHandler;
10
+ private _performSingleToggleOnActionOnToggleButtons;
11
+ private _emitSingleToggleOnModeToggleChange;
12
+ }
@@ -0,0 +1,65 @@
1
+ import { __decorate } from '../../../../../../external/tslib/tslib.es6.js';
2
+ import { PhoenixLightLitElement } from '../../../core/phoenix_light_lit_element.js';
3
+ import { phoenixCustomElement } from '../../../core/decorators/phoenix_custom_element.js';
4
+ import v4 from '../../../../../../external/uuid/dist/esm-browser/v4.js';
5
+ import { TOGGLE_BUTTON_EVENT_NAMES, TOGGLED_ON_ATTRIBUTE_NAME, TOGGLE_BUTTON_GROUP_EVENT_NAMES } from './toggle_button_group_constants.js';
6
+
7
+ var HToggleButtonGroup_1;
8
+ let HToggleButtonGroup = HToggleButtonGroup_1 = class HToggleButtonGroup extends PhoenixLightLitElement {
9
+ constructor() {
10
+ super(...arguments);
11
+ this.toggleButtonsRegistry = [];
12
+ }
13
+ connectedCallback() {
14
+ super.connectedCallback();
15
+ if (!this.hasAttribute('role')) {
16
+ this.setAttribute('role', 'group');
17
+ }
18
+ this.addEventListener(TOGGLE_BUTTON_EVENT_NAMES.connected, this._toggleButtonConnectedHandler);
19
+ this.addEventListener(TOGGLE_BUTTON_EVENT_NAMES.clicked, this._toggleButtonClickHandler);
20
+ }
21
+ disconnectedCallback() {
22
+ super.disconnectedCallback();
23
+ this.toggleButtonsRegistry = [];
24
+ }
25
+ _toggleButtonConnectedHandler(event) {
26
+ event.stopPropagation();
27
+ const toggleButton = event.detail.target;
28
+ this._registerToggleButton(toggleButton);
29
+ if (toggleButton.getAttribute(TOGGLED_ON_ATTRIBUTE_NAME) === '') {
30
+ this._emitSingleToggleOnModeToggleChange(toggleButton.getAttribute('value'));
31
+ }
32
+ }
33
+ _registerToggleButton(toggleButton) {
34
+ toggleButton.setAttribute(HToggleButtonGroup_1.DATA_TOGGLE_ID_ATTRIBUTE_NAME, v4());
35
+ this.toggleButtonsRegistry = [...this.toggleButtonsRegistry, toggleButton];
36
+ }
37
+ _toggleButtonClickHandler(event) {
38
+ event.stopPropagation();
39
+ const target = event.detail.target;
40
+ this._performSingleToggleOnActionOnToggleButtons(target);
41
+ this._emitSingleToggleOnModeToggleChange(target.getAttribute('value'));
42
+ }
43
+ _performSingleToggleOnActionOnToggleButtons(toggleButton) {
44
+ this.toggleButtonsRegistry.forEach((element) => {
45
+ const canToggleOnButton = element.getAttribute(HToggleButtonGroup_1.DATA_TOGGLE_ID_ATTRIBUTE_NAME) ===
46
+ toggleButton.getAttribute(HToggleButtonGroup_1.DATA_TOGGLE_ID_ATTRIBUTE_NAME);
47
+ if (canToggleOnButton) {
48
+ element.setAttribute(TOGGLED_ON_ATTRIBUTE_NAME, '');
49
+ return;
50
+ }
51
+ element.removeAttribute(TOGGLED_ON_ATTRIBUTE_NAME);
52
+ });
53
+ }
54
+ _emitSingleToggleOnModeToggleChange(value) {
55
+ const detail = { value };
56
+ this.dispatchEvent(new CustomEvent(TOGGLE_BUTTON_GROUP_EVENT_NAMES.toggleChange, { bubbles: true, detail }));
57
+ }
58
+ };
59
+ HToggleButtonGroup.DATA_TOGGLE_ID_ATTRIBUTE_NAME = 'data-toggle-button-id';
60
+ HToggleButtonGroup = HToggleButtonGroup_1 = __decorate([
61
+ phoenixCustomElement('h-toggle-button-group')
62
+ ], HToggleButtonGroup);
63
+
64
+ export { HToggleButtonGroup };
65
+ //# sourceMappingURL=toggle_button_group.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA,2BAA2B,+CAAmD;AAC9E;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;"}
@@ -0,0 +1,8 @@
1
+ export declare const TOGGLED_ON_ATTRIBUTE_NAME = "toggled-on";
2
+ export declare const TOGGLE_BUTTON_GROUP_EVENT_NAMES: {
3
+ readonly toggleChange: "toggleChange";
4
+ };
5
+ export declare const TOGGLE_BUTTON_EVENT_NAMES: {
6
+ readonly connected: "toggleButtonConnected";
7
+ readonly clicked: "toggleButtonClicked";
8
+ };
@@ -0,0 +1,11 @@
1
+ const TOGGLED_ON_ATTRIBUTE_NAME = 'toggled-on';
2
+ const TOGGLE_BUTTON_GROUP_EVENT_NAMES = {
3
+ toggleChange: 'toggleChange'
4
+ };
5
+ const TOGGLE_BUTTON_EVENT_NAMES = {
6
+ connected: 'toggleButtonConnected',
7
+ clicked: 'toggleButtonClicked'
8
+ };
9
+
10
+ export { TOGGLED_ON_ATTRIBUTE_NAME, TOGGLE_BUTTON_EVENT_NAMES, TOGGLE_BUTTON_GROUP_EVENT_NAMES };
11
+ //# sourceMappingURL=toggle_button_group_constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
@@ -0,0 +1,6 @@
1
+ export interface ITargetToggleButton {
2
+ target: HTMLElement;
3
+ }
4
+ export interface ISingleToggleOnModeToggleChange {
5
+ value: string | null;
6
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=toggle_button_group_types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toggle_button_group_types.js","sourceRoot":"","sources":["../../../../../../../../src/components/groups/toggle_button_group/toggle_button_group_types.ts"],"names":[],"mappings":""}
@@ -1,7 +1,14 @@
1
1
  import { LitElement, TemplateResult, nothing, PropertyValues } from 'lit';
2
2
  export declare class PhoenixLightLitElement extends LitElement {
3
3
  _slots: Record<string, TemplateResult[]>;
4
+ protected childrenToConnectionWatch: string[];
5
+ watchChildren: boolean;
6
+ isWebComponentConnected: boolean;
4
7
  firstUpdated(props: PropertyValues): void;
8
+ private _setupChildrenWatch;
9
+ private _handleComponentConnected;
10
+ connectedCallback(): void;
11
+ allChildrenConnected(): void;
5
12
  private _assignSlots;
6
13
  getSlot(name: string): TemplateResult[] | typeof nothing;
7
14
  hasSlot(name: string): boolean;
@@ -1,18 +1,69 @@
1
1
  import { DEFAULT_SLOT_NAME } from './phoenix_light_lit_elements_constants.js';
2
2
  import { __decorate, __metadata } from '../../../../external/tslib/tslib.es6.js';
3
3
  import { LitElement, html, nothing } from 'lit';
4
- import { state } from 'lit/decorators';
4
+ import { state, property } from 'lit/decorators';
5
5
 
6
+ class ComponentsUtils {
7
+ static isUnknownElement($element) {
8
+ return $element instanceof HTMLUnknownElement;
9
+ }
10
+ static isElementDefined($element) {
11
+ if (!this.isCustomElement($element))
12
+ return false;
13
+ const customElementClass = window.customElements.get($element.tagName.toLowerCase());
14
+ return !!customElementClass && $element instanceof customElementClass;
15
+ }
16
+ static isCustomElement($element) {
17
+ return $element.tagName.includes('-');
18
+ }
19
+ static filterComponentsToInitialize(components) {
20
+ return components.filter(($element) => ComponentsUtils.isUnknownElement($element) ||
21
+ (ComponentsUtils.isCustomElement($element) && !ComponentsUtils.isElementDefined($element)) ||
22
+ (ComponentsUtils.isCustomElement($element) && ComponentsUtils.isElementDefined($element) && !$element.isWebComponentConnected));
23
+ }
24
+ }
6
25
  class PhoenixLightLitElement extends LitElement {
7
26
  constructor() {
8
27
  super(...arguments);
9
28
  this._slots = {};
29
+ this.isWebComponentConnected = false;
30
+ this._handleComponentConnected = ({ detail }) => {
31
+ const connectedElement = detail.$el.tagName.toLowerCase();
32
+ console.log('connected', connectedElement);
33
+ if (this.childrenToConnectionWatch.includes(connectedElement)) {
34
+ const elToRemoveIndex = this.childrenToConnectionWatch.findIndex((tagName) => tagName === connectedElement);
35
+ this.childrenToConnectionWatch.splice(elToRemoveIndex, elToRemoveIndex + 1);
36
+ }
37
+ if (!this.childrenToConnectionWatch.length) {
38
+ this.allChildrenConnected();
39
+ this.removeEventListener('connected', this._handleComponentConnected);
40
+ }
41
+ };
10
42
  }
11
43
  firstUpdated(props) {
12
44
  super.firstUpdated(props);
13
45
  this._slots = this._assignSlots();
14
46
  this.requestUpdate();
15
47
  }
48
+ _setupChildrenWatch() {
49
+ this.childrenToConnectionWatch = this.childrenToConnectionWatch
50
+ ? this.childrenToConnectionWatch
51
+ : ComponentsUtils.filterComponentsToInitialize([...this.querySelectorAll('*')]).map(($element) => $element.tagName.toLowerCase());
52
+ console.log(this.childrenToConnectionWatch);
53
+ this.addEventListener('connected', this._handleComponentConnected);
54
+ }
55
+ connectedCallback() {
56
+ super.connectedCallback();
57
+ this.dispatchEvent(new CustomEvent('connected', {
58
+ detail: {
59
+ $el: this
60
+ },
61
+ bubbles: true
62
+ }));
63
+ if (this.watchChildren)
64
+ this._setupChildrenWatch();
65
+ }
66
+ allChildrenConnected() { }
16
67
  _assignSlots() {
17
68
  return [...this.querySelectorAll(':scope > [slot]')].reduce((acc, $el) => {
18
69
  var _a;
@@ -41,7 +92,11 @@ class PhoenixLightLitElement extends LitElement {
41
92
  __decorate([
42
93
  state(),
43
94
  __metadata("design:type", Object)
44
- ], PhoenixLightLitElement.prototype, "_slots", void 0);
95
+ ], PhoenixLightLitElement.prototype, "_slots", void 0);
96
+ __decorate([
97
+ property({ type: Boolean }),
98
+ __metadata("design:type", Object)
99
+ ], PhoenixLightLitElement.prototype, "isWebComponentConnected", void 0);
45
100
 
46
101
  export { PhoenixLightLitElement };
47
102
  //# sourceMappingURL=phoenix_light_lit_element.js.map
@@ -1 +1 @@
1
- {"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA;AACA,uCAAuC,yCAA6C;AACpF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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,uCAAuC,yCAA6C;AACpF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
@@ -54,6 +54,9 @@ export { BtnController } from './controllers/btn_controller';
54
54
  export { HDropdown } from './components/dropdown/dropdown';
55
55
  export { HDropdownToggler } from './components/dropdown/dropdown_toggler';
56
56
  export { HDropdownContent } from './components/dropdown/dropdown_content';
57
+ export { HToggleButtonGroup } from './components/groups/toggle_button_group/toggle_button_group';
58
+ export { HToggleButton } from './components/groups/toggle_button_group/toggle_button';
59
+ export type { ISingleToggleOnModeToggleChange } from './components/groups/toggle_button_group/toggle_button_group_types';
57
60
  export { ClickOutsideController } from './controllers/click_outside_controller/click_outside_controller';
58
61
  export { IClickOutsideController } from "./controllers/click_outside_controller/click_outside_controller_types";
59
62
  export { CLICK_OUTSIDE_CONTROLLER_MESSAGES } from "./controllers/click_outside_controller/click_outside_controller_messages";
@@ -52,6 +52,8 @@ export { RelativePositionController } from './controllers/relative_position_cont
52
52
  export { HDropdown } from './components/dropdown/dropdown.js';
53
53
  export { ToggleElementAriaController } from './controllers/toggle_element_aria_controller/toggle_element_aria_controller.js';
54
54
  export { HDropdownToggler } from './components/dropdown/dropdown_toggler.js';
55
+ export { HToggleButtonGroup } from './components/groups/toggle_button_group/toggle_button_group.js';
56
+ export { HToggleButton } from './components/groups/toggle_button_group/toggle_button.js';
55
57
  export { CLICK_OUTSIDE_CONTROLLER_MESSAGES } from './controllers/click_outside_controller/click_outside_controller_messages.js';
56
58
  export { HBackdrop } from './components/backdrop/backdrop.js';
57
59
  export { VisibilityController } from './controllers/visibility_controller/visibility_controller.js';
@@ -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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@shoper/phoenix_design_system",
3
3
  "packageManager": "yarn@3.2.0",
4
4
  "sideEffects": false,
5
- "version": "0.16.2",
5
+ "version": "0.18.0-1",
6
6
  "description": "phoenix design system",
7
7
  "author": "zefirek",
8
8
  "license": "MIT",