@shoper/phoenix_design_system 0.22.3 → 0.22.4-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.
- package/build/cjs/packages/phoenix/src/components/dropdown/dropdown.js +23 -32
- package/build/cjs/packages/phoenix/src/components/dropdown/dropdown.js.map +1 -1
- package/build/cjs/packages/phoenix/src/components/dropdown/dropdown_content.js +4 -1
- package/build/cjs/packages/phoenix/src/components/dropdown/dropdown_content.js.map +1 -1
- package/build/cjs/packages/phoenix/src/components/dropdown/dropdown_toggler.js +1 -1
- package/build/cjs/packages/phoenix/src/components/slider/slider.js +2 -2
- package/build/cjs/packages/phoenix/src/components/tabs/tab/tab.js +74 -0
- package/build/cjs/packages/phoenix/src/components/tabs/tab/tab.js.map +1 -0
- package/build/cjs/packages/phoenix/src/components/tabs/tab/tab_constants.js +12 -0
- package/build/{esm/packages/utilities/build/esm/web_components_utils.js.map → cjs/packages/phoenix/src/components/tabs/tab/tab_constants.js.map} +1 -1
- package/build/cjs/packages/phoenix/src/components/tabs/tab_panel.js +31 -0
- package/build/cjs/packages/phoenix/src/components/tabs/tab_panel.js.map +1 -0
- package/build/cjs/packages/phoenix/src/components/tabs/tabs.js +108 -0
- package/build/cjs/packages/phoenix/src/components/tabs/tabs.js.map +1 -0
- package/build/cjs/packages/phoenix/src/components/tabs/tabs_constants.js +10 -0
- package/build/cjs/packages/{utilities/build/esm/web_components_utils.js.map → phoenix/src/components/tabs/tabs_constants.js.map} +1 -1
- package/build/cjs/packages/phoenix/src/controllers/relative_position_controller/relative_position_calculator.js +170 -46
- package/build/cjs/packages/phoenix/src/controllers/relative_position_controller/relative_position_calculator.js.map +1 -1
- package/build/cjs/packages/phoenix/src/controllers/relative_position_controller/relative_position_controller.js +10 -6
- package/build/cjs/packages/phoenix/src/controllers/relative_position_controller/relative_position_controller.js.map +1 -1
- package/build/cjs/packages/phoenix/src/controllers/visibility_controller/visibility_controller.js +1 -1
- package/build/cjs/packages/phoenix/src/core/phoenix_light_lit_element/phoenix_light_lit_element.js +47 -13
- package/build/cjs/packages/phoenix/src/core/phoenix_light_lit_element/phoenix_light_lit_element.js.map +1 -1
- package/build/cjs/packages/phoenix/src/core/phoenix_light_lit_element/phoenix_light_lit_element_utils.js +10 -4
- package/build/cjs/packages/phoenix/src/core/phoenix_light_lit_element/phoenix_light_lit_element_utils.js.map +1 -1
- package/build/cjs/packages/phoenix/src/core/phoenix_light_lit_element/phoenix_light_lit_elements_constants.js +3 -1
- package/build/cjs/packages/phoenix/src/core/phoenix_light_lit_element/phoenix_light_lit_elements_constants.js.map +1 -1
- package/build/cjs/packages/phoenix/src/index.js +23 -0
- package/build/cjs/packages/phoenix/src/index.js.map +1 -1
- package/build/esm/packages/phoenix/src/components/dropdown/dropdown.d.ts +0 -5
- package/build/esm/packages/phoenix/src/components/dropdown/dropdown.js +23 -32
- package/build/esm/packages/phoenix/src/components/dropdown/dropdown.js.map +1 -1
- package/build/esm/packages/phoenix/src/components/dropdown/dropdown_content.js +4 -1
- package/build/esm/packages/phoenix/src/components/dropdown/dropdown_content.js.map +1 -1
- package/build/esm/packages/phoenix/src/components/dropdown/dropdown_toggler.js +1 -1
- package/build/esm/packages/phoenix/src/components/slider/slider.js +1 -1
- package/build/esm/packages/phoenix/src/components/tabs/tab/tab.d.ts +14 -0
- package/build/esm/packages/phoenix/src/components/tabs/tab/tab.js +72 -0
- package/build/esm/packages/phoenix/src/components/tabs/tab/tab.js.map +1 -0
- package/build/esm/packages/phoenix/src/components/tabs/tab/tab_constants.d.ts +4 -0
- package/build/esm/packages/phoenix/src/components/tabs/tab/tab_constants.js +7 -0
- package/build/esm/packages/phoenix/src/components/tabs/tab/tab_constants.js.map +1 -0
- package/build/esm/packages/phoenix/src/components/tabs/tab_panel.d.ts +8 -0
- package/build/esm/packages/phoenix/src/components/tabs/tab_panel.js +29 -0
- package/build/{cjs/packages/utilities/build/esm/json_utils.js.map → esm/packages/phoenix/src/components/tabs/tab_panel.js.map} +1 -1
- package/build/esm/packages/phoenix/src/components/tabs/tabs.d.ts +16 -0
- package/build/esm/packages/phoenix/src/components/tabs/tabs.js +106 -0
- package/build/esm/packages/phoenix/src/components/tabs/tabs.js.map +1 -0
- package/build/esm/packages/phoenix/src/components/tabs/tabs_constants.d.ts +3 -0
- package/build/esm/packages/phoenix/src/components/tabs/tabs_constants.js +6 -0
- package/build/esm/packages/phoenix/src/components/tabs/tabs_constants.js.map +1 -0
- package/build/esm/packages/phoenix/src/components/tabs/tabs_types.d.ts +4 -0
- package/build/esm/packages/phoenix/src/components/tabs/tabs_types.js +2 -0
- package/build/esm/packages/phoenix/src/components/tabs/tabs_types.js.map +1 -0
- package/build/esm/packages/phoenix/src/controllers/relative_position_controller/relative_position_calculator.d.ts +15 -2
- package/build/esm/packages/phoenix/src/controllers/relative_position_controller/relative_position_calculator.js +170 -46
- package/build/esm/packages/phoenix/src/controllers/relative_position_controller/relative_position_calculator.js.map +1 -1
- package/build/esm/packages/phoenix/src/controllers/relative_position_controller/relative_position_calculator_types.d.ts +45 -0
- package/build/esm/packages/phoenix/src/controllers/relative_position_controller/relative_position_calculator_types.js +4 -0
- package/build/esm/packages/phoenix/src/controllers/relative_position_controller/relative_position_calculator_types.js.map +1 -0
- package/build/esm/packages/phoenix/src/controllers/relative_position_controller/relative_position_controller.d.ts +3 -3
- package/build/esm/packages/phoenix/src/controllers/relative_position_controller/relative_position_controller.js +10 -6
- package/build/esm/packages/phoenix/src/controllers/relative_position_controller/relative_position_controller.js.map +1 -1
- package/build/esm/packages/phoenix/src/controllers/relative_position_controller/relative_position_controller_types.d.ts +4 -11
- package/build/esm/packages/phoenix/src/controllers/relative_position_controller/relative_position_controller_types.js +2 -1
- package/build/esm/packages/phoenix/src/controllers/relative_position_controller/relative_position_controller_types.js.map +1 -1
- package/build/esm/packages/phoenix/src/controllers/visibility_controller/visibility_controller.js +1 -1
- package/build/esm/packages/phoenix/src/core/phoenix_light_lit_element/phoenix_light_lit_element.d.ts +8 -1
- package/build/esm/packages/phoenix/src/core/phoenix_light_lit_element/phoenix_light_lit_element.js +47 -13
- package/build/esm/packages/phoenix/src/core/phoenix_light_lit_element/phoenix_light_lit_element.js.map +1 -1
- package/build/esm/packages/phoenix/src/core/phoenix_light_lit_element/phoenix_light_lit_element_utils.d.ts +1 -0
- package/build/esm/packages/phoenix/src/core/phoenix_light_lit_element/phoenix_light_lit_element_utils.js +7 -1
- package/build/esm/packages/phoenix/src/core/phoenix_light_lit_element/phoenix_light_lit_element_utils.js.map +1 -1
- package/build/esm/packages/phoenix/src/core/phoenix_light_lit_element/phoenix_light_lit_elements_constants.d.ts +2 -1
- package/build/esm/packages/phoenix/src/core/phoenix_light_lit_element/phoenix_light_lit_elements_constants.js +3 -1
- package/build/esm/packages/phoenix/src/core/phoenix_light_lit_element/phoenix_light_lit_elements_constants.js.map +1 -1
- package/build/esm/packages/phoenix/src/index.d.ts +4 -0
- package/build/esm/packages/phoenix/src/index.js +4 -0
- package/build/esm/packages/phoenix/src/index.js.map +1 -1
- package/package.json +1 -1
- package/build/cjs/packages/utilities/build/esm/json_utils.js +0 -25
- package/build/cjs/packages/utilities/build/esm/web_components_utils.js +0 -18
- package/build/esm/packages/utilities/build/esm/json_utils.js +0 -21
- package/build/esm/packages/utilities/build/esm/json_utils.js.map +0 -1
- package/build/esm/packages/utilities/build/esm/web_components_utils.js +0 -14
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
import { __decorate, __metadata } from '../../../../../external/tslib/tslib.es6.js';
|
|
2
|
-
import 'lit';
|
|
3
2
|
import { state } from 'lit/decorators';
|
|
3
|
+
import { UiDomUtils } from '@dreamcommerce/utilities';
|
|
4
4
|
import { PhoenixLightLitElement } from '../../core/phoenix_light_lit_element/phoenix_light_lit_element.js';
|
|
5
5
|
import { phoenixCustomElement } from '../../core/decorators/phoenix_custom_element.js';
|
|
6
6
|
import { PORTAL_TARGET_COMPONENT_NAME, PORTAL_TARGET_NAME_PROP } from '../portal/portal_constants.js';
|
|
7
7
|
import { html } from 'lit-html';
|
|
8
8
|
import { BackdropController } from '../backdrop/controller/backdrop_controller.js';
|
|
9
9
|
import { property } from '@lit/reactive-element/decorators.js';
|
|
10
|
-
import { createRef, ref } from 'lit-html/directives/ref.js';
|
|
11
10
|
import { BREAKPOINTS, SCROLLABLE_CLASS_NAME } from '../../global_constants.js';
|
|
12
11
|
import { DEFAULT_DROPDOWN_PORTAL_NAME, DROPDOWN_CONTENT_VISIBLE_CLASS, DROPDOWN_CONTENT_SHOW, DROPDOWN_EVENTS, DROPDOWN_CONTAINER_NAME, DROPDOWN_CONTENT_HIDE, DROPDOWN_CONTENT_NAME, DROPDOWN_TOGGLER_NAME } from './dropdown_constants.js';
|
|
13
12
|
import { DIRECTIONS, RELATIVE_POSITION_CONTROLLER_EVENTS, DEFAULT_THROTTLE_WAIT_TIME } from '../../controllers/relative_position_controller/relative_position_controller_constants.js';
|
|
@@ -26,10 +25,7 @@ let HDropdown = HDropdown_1 = class HDropdown extends PhoenixLightLitElement {
|
|
|
26
25
|
this.transition = 'direction';
|
|
27
26
|
this.portalTarget = DEFAULT_DROPDOWN_PORTAL_NAME;
|
|
28
27
|
this._backdropController = new BackdropController();
|
|
29
|
-
this._firstFocusableElement = undefined;
|
|
30
28
|
this._lastFocusableElement = undefined;
|
|
31
|
-
this._focusSentinelStart = createRef();
|
|
32
|
-
this._focusSentinelEnd = createRef();
|
|
33
29
|
this._handleClickOutside = async (target) => {
|
|
34
30
|
var _a, _b;
|
|
35
31
|
if (!this.opened)
|
|
@@ -55,11 +51,13 @@ let HDropdown = HDropdown_1 = class HDropdown extends PhoenixLightLitElement {
|
|
|
55
51
|
}, 0);
|
|
56
52
|
const transitionDuration = parseFloat(getComputedStyle(this.$dropdownContent || this).transitionDuration) * 1000;
|
|
57
53
|
setTimeout(() => {
|
|
58
|
-
var _a, _b;
|
|
54
|
+
var _a, _b, _c;
|
|
59
55
|
this._dispatchShowDropdownEvent();
|
|
60
56
|
(_a = this.$dropdownContent) === null || _a === void 0 ? void 0 : _a.classList.remove(`${DROPDOWN_CONTENT_SHOW}-${this.transition}-start`, `${DROPDOWN_CONTENT_SHOW}-${this.transition}-end`);
|
|
61
57
|
this._toggleScroll();
|
|
62
|
-
(
|
|
58
|
+
if (!this._lastFocusableElement)
|
|
59
|
+
this._lastFocusableElement = (_b = this.$dropdownContent) === null || _b === void 0 ? void 0 : _b.lastElementChild;
|
|
60
|
+
this._focusOnNextSibling((_c = this.$dropdownContent) === null || _c === void 0 ? void 0 : _c.firstElementChild);
|
|
63
61
|
resolve();
|
|
64
62
|
}, transitionDuration);
|
|
65
63
|
});
|
|
@@ -133,18 +131,16 @@ let HDropdown = HDropdown_1 = class HDropdown extends PhoenixLightLitElement {
|
|
|
133
131
|
this._handleFocusWithinDropdown = async (ev) => {
|
|
134
132
|
var _a;
|
|
135
133
|
const hasTabBeenPressed = ev.key.toLowerCase() === 'tab';
|
|
136
|
-
if (hasTabBeenPressed) {
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
await this._hideDropdownsSequentially();
|
|
147
|
-
}
|
|
134
|
+
if (hasTabBeenPressed && document.activeElement === this._lastFocusableElement) {
|
|
135
|
+
ev.preventDefault();
|
|
136
|
+
this._focusOnNextSibling(this.nextElementSibling || this);
|
|
137
|
+
await this._hideDropdownsSequentially();
|
|
138
|
+
}
|
|
139
|
+
const $firstFocusableElement = this.$dropdownContent && UiDomUtils.getFocusableElement(this.$dropdownContent);
|
|
140
|
+
if (hasTabBeenPressed && ev.shiftKey && document.activeElement === $firstFocusableElement) {
|
|
141
|
+
ev.preventDefault();
|
|
142
|
+
(_a = this.$dropdownToggler) === null || _a === void 0 ? void 0 : _a.focus();
|
|
143
|
+
await this._hideDropdownsSequentially();
|
|
148
144
|
}
|
|
149
145
|
};
|
|
150
146
|
this._hoverToggle = async (ev) => {
|
|
@@ -203,11 +199,6 @@ let HDropdown = HDropdown_1 = class HDropdown extends PhoenixLightLitElement {
|
|
|
203
199
|
this._setupListeners();
|
|
204
200
|
this._setupInitialDropdownProperties();
|
|
205
201
|
}
|
|
206
|
-
firstUpdated(props) {
|
|
207
|
-
super.firstUpdated(props);
|
|
208
|
-
this._firstFocusableElement = this._focusSentinelStart.value;
|
|
209
|
-
this._lastFocusableElement = this._focusSentinelEnd.value;
|
|
210
|
-
}
|
|
211
202
|
static _appendDropdownPortal() {
|
|
212
203
|
const $dropdownPortalTarget = document.querySelector(`[name="${DEFAULT_DROPDOWN_PORTAL_NAME}"]`);
|
|
213
204
|
if (!$dropdownPortalTarget) {
|
|
@@ -254,7 +245,12 @@ let HDropdown = HDropdown_1 = class HDropdown extends PhoenixLightLitElement {
|
|
|
254
245
|
el.focus();
|
|
255
246
|
if (el === document.activeElement)
|
|
256
247
|
return;
|
|
257
|
-
|
|
248
|
+
if (el.firstElementChild) {
|
|
249
|
+
this._focusOnNextSibling(el.firstElementChild);
|
|
250
|
+
return;
|
|
251
|
+
}
|
|
252
|
+
if (el.nextElementSibling)
|
|
253
|
+
this._focusOnNextSibling(el.nextElementSibling);
|
|
258
254
|
}
|
|
259
255
|
_isHoveredWithinDropdown(element) {
|
|
260
256
|
var _a;
|
|
@@ -262,7 +258,8 @@ let HDropdown = HDropdown_1 = class HDropdown extends PhoenixLightLitElement {
|
|
|
262
258
|
return true;
|
|
263
259
|
if (element === this.$dropdownContent)
|
|
264
260
|
return true;
|
|
265
|
-
const isDescendantOfDropdown = element.closest(`${DROPDOWN_CONTAINER_NAME}[name="${this.name}"]`) !== null
|
|
261
|
+
const isDescendantOfDropdown = element.closest(`${DROPDOWN_CONTAINER_NAME}[name="${this.name}"]`) !== null ||
|
|
262
|
+
element.closest(`${DROPDOWN_CONTENT_NAME}[name="${this.name}"]`) !== null;
|
|
266
263
|
if (isDescendantOfDropdown)
|
|
267
264
|
return true;
|
|
268
265
|
const $closestDropdownContent = element.closest(DROPDOWN_CONTENT_NAME);
|
|
@@ -299,9 +296,7 @@ let HDropdown = HDropdown_1 = class HDropdown extends PhoenixLightLitElement {
|
|
|
299
296
|
return html `
|
|
300
297
|
${this.getSlot('toggler')}
|
|
301
298
|
<h-portal ?disabled="${!this.opened}" @portal.open="${this._positionDropdownContent}" to="${this.portalTarget}" hidden>
|
|
302
|
-
<div tabindex="0" ${ref(this._focusSentinelStart)}></div>
|
|
303
299
|
${this.getSlot('content')}
|
|
304
|
-
<div tabindex="0" ${ref(this._focusSentinelEnd)}></div>
|
|
305
300
|
</h-portal>
|
|
306
301
|
`;
|
|
307
302
|
}
|
|
@@ -330,10 +325,6 @@ __decorate([
|
|
|
330
325
|
property({ type: String }),
|
|
331
326
|
__metadata("design:type", Object)
|
|
332
327
|
], HDropdown.prototype, "portalTarget", void 0);
|
|
333
|
-
__decorate([
|
|
334
|
-
state(),
|
|
335
|
-
__metadata("design:type", Object)
|
|
336
|
-
], HDropdown.prototype, "_firstFocusableElement", void 0);
|
|
337
328
|
__decorate([
|
|
338
329
|
state(),
|
|
339
330
|
__metadata("design:type", Object)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA,uCAAuC,4CAAgD;AACvF;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,4CAAgD;AACvF;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;"}
|
|
@@ -18,7 +18,10 @@ let HDropdownContent = class HDropdownContent extends PhoenixLightLitElement {
|
|
|
18
18
|
}
|
|
19
19
|
render() {
|
|
20
20
|
super.render();
|
|
21
|
-
return html `
|
|
21
|
+
return html `
|
|
22
|
+
<div role="dialog">${this.getSlot('content')}</div>
|
|
23
|
+
<div tabindex="0" aria-hidden="true"></div>
|
|
24
|
+
`;
|
|
22
25
|
}
|
|
23
26
|
};
|
|
24
27
|
__decorate([
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA,uCAAuC,4CAAgD;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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,4CAAgD;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
|
|
@@ -14,7 +14,7 @@ let HDropdownToggler = class HDropdownToggler extends PhoenixLightLitElement {
|
|
|
14
14
|
this._dispatchToggleDropdownEvent = (ev) => {
|
|
15
15
|
ev.preventDefault();
|
|
16
16
|
ev.stopImmediatePropagation();
|
|
17
|
-
const toggleDropdownEvent = new
|
|
17
|
+
const toggleDropdownEvent = new CustomEvent(DROPDOWN_EVENTS.toggle, {
|
|
18
18
|
bubbles: true
|
|
19
19
|
});
|
|
20
20
|
this.dispatchEvent(toggleDropdownEvent);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { __decorate, __metadata } from '../../../../../external/tslib/tslib.es6.js';
|
|
2
2
|
import { property } from 'lit/decorators';
|
|
3
|
-
import { JsonUtils } from '
|
|
3
|
+
import { JsonUtils } from '@dreamcommerce/utilities';
|
|
4
4
|
import { PhoenixLightLitElement } from '../../core/phoenix_light_lit_element/phoenix_light_lit_element.js';
|
|
5
5
|
import { phoenixCustomElement } from '../../core/decorators/phoenix_custom_element.js';
|
|
6
6
|
import { Splide } from '../../../../../external/@splidejs/splide/dist/js/splide.esm.js';
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { PhoenixLightLitElement } from "../../../core/phoenix_light_lit_element/phoenix_light_lit_element";
|
|
2
|
+
export declare class HTab extends PhoenixLightLitElement {
|
|
3
|
+
panelName: string;
|
|
4
|
+
get selected(): boolean;
|
|
5
|
+
disabled: boolean;
|
|
6
|
+
set selected(selected: boolean);
|
|
7
|
+
private _btnController;
|
|
8
|
+
attributeChangedCallback(name: string, value: string | null, newValue: string | null): void;
|
|
9
|
+
connectedCallback(): void;
|
|
10
|
+
private _setupAttributes;
|
|
11
|
+
private _bindEvents;
|
|
12
|
+
private _handleTabClicked;
|
|
13
|
+
_dispatchSelectedEvent: () => void;
|
|
14
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { __decorate, __metadata } from '../../../../../../external/tslib/tslib.es6.js';
|
|
2
|
+
import { property } from 'lit/decorators';
|
|
3
|
+
import { UiDomUtils } from '@dreamcommerce/utilities';
|
|
4
|
+
import { PhoenixLightLitElement } from '../../../core/phoenix_light_lit_element/phoenix_light_lit_element.js';
|
|
5
|
+
import { phoenixCustomElement } from '../../../core/decorators/phoenix_custom_element.js';
|
|
6
|
+
import { BtnController } from '../../../controllers/btn_controller.js';
|
|
7
|
+
import { TAB_EVENT_NAMES, TAB_SELECTED_ATTRIBUTE_NAME } from './tab_constants.js';
|
|
8
|
+
|
|
9
|
+
let HTab = class HTab extends PhoenixLightLitElement {
|
|
10
|
+
constructor() {
|
|
11
|
+
super(...arguments);
|
|
12
|
+
this._handleTabClicked = () => {
|
|
13
|
+
if (this.disabled)
|
|
14
|
+
return;
|
|
15
|
+
this._dispatchSelectedEvent();
|
|
16
|
+
};
|
|
17
|
+
this._dispatchSelectedEvent = () => {
|
|
18
|
+
this.dispatchEvent(new CustomEvent(TAB_EVENT_NAMES.selected, {
|
|
19
|
+
detail: {
|
|
20
|
+
$el: this
|
|
21
|
+
},
|
|
22
|
+
bubbles: true
|
|
23
|
+
}));
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
get selected() {
|
|
27
|
+
return this.hasAttribute(TAB_SELECTED_ATTRIBUTE_NAME);
|
|
28
|
+
}
|
|
29
|
+
set selected(selected) {
|
|
30
|
+
selected ? this.setAttribute(TAB_SELECTED_ATTRIBUTE_NAME, '') : this.removeAttribute(TAB_SELECTED_ATTRIBUTE_NAME);
|
|
31
|
+
this.setAttribute('aria-selected', String(selected));
|
|
32
|
+
selected ? UiDomUtils.makeNavigable(this) : UiDomUtils.makeUnnavigable(this);
|
|
33
|
+
}
|
|
34
|
+
attributeChangedCallback(name, value, newValue) {
|
|
35
|
+
super.attributeChangedCallback(name, value, newValue);
|
|
36
|
+
switch (name) {
|
|
37
|
+
case TAB_SELECTED_ATTRIBUTE_NAME: {
|
|
38
|
+
this.selected = Boolean(newValue);
|
|
39
|
+
break;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
connectedCallback() {
|
|
44
|
+
super.connectedCallback();
|
|
45
|
+
this._btnController = new BtnController(this, this._handleTabClicked);
|
|
46
|
+
this._setupAttributes();
|
|
47
|
+
this._bindEvents();
|
|
48
|
+
this.selected ? UiDomUtils.makeNavigable(this) : UiDomUtils.makeUnnavigable(this);
|
|
49
|
+
}
|
|
50
|
+
_setupAttributes() {
|
|
51
|
+
this.setAttribute('role', 'tab');
|
|
52
|
+
this.setAttribute('aria-controls', this.panelName);
|
|
53
|
+
this.setAttribute('aria-selected', String(this.selected));
|
|
54
|
+
}
|
|
55
|
+
_bindEvents() {
|
|
56
|
+
this.addEventListener('click', this._handleTabClicked);
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
__decorate([
|
|
60
|
+
property({ type: String, reflect: true, attribute: 'panel-name' }),
|
|
61
|
+
__metadata("design:type", String)
|
|
62
|
+
], HTab.prototype, "panelName", void 0);
|
|
63
|
+
__decorate([
|
|
64
|
+
property({ type: Boolean, reflect: true }),
|
|
65
|
+
__metadata("design:type", Boolean)
|
|
66
|
+
], HTab.prototype, "disabled", void 0);
|
|
67
|
+
HTab = __decorate([
|
|
68
|
+
phoenixCustomElement('h-tab')
|
|
69
|
+
], HTab);
|
|
70
|
+
|
|
71
|
+
export { HTab };
|
|
72
|
+
//# sourceMappingURL=tab.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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { PhoenixLightLitElement } from "../../core/phoenix_light_lit_element/phoenix_light_lit_element";
|
|
2
|
+
export declare class HTabPanel extends PhoenixLightLitElement {
|
|
3
|
+
name: string;
|
|
4
|
+
private _visibilityController;
|
|
5
|
+
constructor();
|
|
6
|
+
show(): void;
|
|
7
|
+
hide(): void;
|
|
8
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { __decorate, __metadata } from '../../../../../external/tslib/tslib.es6.js';
|
|
2
|
+
import { property } from 'lit/decorators';
|
|
3
|
+
import { PhoenixLightLitElement } from '../../core/phoenix_light_lit_element/phoenix_light_lit_element.js';
|
|
4
|
+
import { phoenixCustomElement } from '../../core/decorators/phoenix_custom_element.js';
|
|
5
|
+
import { VisibilityController } from '../../controllers/visibility_controller/visibility_controller.js';
|
|
6
|
+
|
|
7
|
+
let HTabPanel = class HTabPanel extends PhoenixLightLitElement {
|
|
8
|
+
constructor() {
|
|
9
|
+
super();
|
|
10
|
+
this._visibilityController = new VisibilityController(this);
|
|
11
|
+
}
|
|
12
|
+
show() {
|
|
13
|
+
this._visibilityController.show();
|
|
14
|
+
}
|
|
15
|
+
hide() {
|
|
16
|
+
this._visibilityController.hide();
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
__decorate([
|
|
20
|
+
property({ type: String, reflect: true }),
|
|
21
|
+
__metadata("design:type", String)
|
|
22
|
+
], HTabPanel.prototype, "name", void 0);
|
|
23
|
+
HTabPanel = __decorate([
|
|
24
|
+
phoenixCustomElement('h-tab-panel'),
|
|
25
|
+
__metadata("design:paramtypes", [])
|
|
26
|
+
], HTabPanel);
|
|
27
|
+
|
|
28
|
+
export { HTabPanel };
|
|
29
|
+
//# sourceMappingURL=tab_panel.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;AACA;"}
|
|
1
|
+
{"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA,uCAAuC,4CAAgD;AACvF;AACA;AACA;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,16 @@
|
|
|
1
|
+
import { PhoenixLightLitElement } from "../../core/phoenix_light_lit_element/phoenix_light_lit_element";
|
|
2
|
+
export declare class HTabs extends PhoenixLightLitElement {
|
|
3
|
+
private _$selectedTab;
|
|
4
|
+
private _$tabs;
|
|
5
|
+
connectedCallback(): void;
|
|
6
|
+
private _handleArrowNavigation;
|
|
7
|
+
private _getFocusedTabIndex;
|
|
8
|
+
private _getNextTabIndex;
|
|
9
|
+
private _getPrevTabIndex;
|
|
10
|
+
private _setupEvents;
|
|
11
|
+
private _handleTabSelected;
|
|
12
|
+
allChildrenRendered(): void;
|
|
13
|
+
private _hideNotSelectedAndVisiblePanels;
|
|
14
|
+
switchPanel(newPanelName: string): void;
|
|
15
|
+
private _dispatchChangedEvent;
|
|
16
|
+
}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { __decorate, __metadata } from '../../../../../external/tslib/tslib.es6.js';
|
|
2
|
+
import { state } from 'lit/decorators';
|
|
3
|
+
import { UiDomUtils } from '@dreamcommerce/utilities';
|
|
4
|
+
import { PhoenixLightLitElement } from '../../core/phoenix_light_lit_element/phoenix_light_lit_element.js';
|
|
5
|
+
import { phoenixCustomElement } from '../../core/decorators/phoenix_custom_element.js';
|
|
6
|
+
import { KeystrokesController } from '../../controllers/keystrokes_controller/keystrokes_controller.js';
|
|
7
|
+
import { TAB_EVENT_NAMES } from './tab/tab_constants.js';
|
|
8
|
+
import { HTab } from './tab/tab.js';
|
|
9
|
+
import { TABS_EVENT_NAMES } from './tabs_constants.js';
|
|
10
|
+
|
|
11
|
+
let HTabs = class HTabs extends PhoenixLightLitElement {
|
|
12
|
+
constructor() {
|
|
13
|
+
super(...arguments);
|
|
14
|
+
this._handleArrowNavigation = ({ key }) => {
|
|
15
|
+
const currentTabIndex = this._getFocusedTabIndex();
|
|
16
|
+
if (currentTabIndex === undefined)
|
|
17
|
+
return;
|
|
18
|
+
const newTabIndex = key === 'ArrowLeft' ? this._getPrevTabIndex(currentTabIndex) : this._getNextTabIndex(currentTabIndex);
|
|
19
|
+
if (newTabIndex === undefined)
|
|
20
|
+
return;
|
|
21
|
+
UiDomUtils.makeUnnavigable(this._$tabs[currentTabIndex]);
|
|
22
|
+
UiDomUtils.makeNavigable(this._$tabs[newTabIndex]);
|
|
23
|
+
this._$tabs[newTabIndex].focus();
|
|
24
|
+
};
|
|
25
|
+
this._handleTabSelected = (event) => {
|
|
26
|
+
const $newlySelectedTab = event.detail.$el;
|
|
27
|
+
this.switchPanel($newlySelectedTab.panelName);
|
|
28
|
+
if (this._$selectedTab)
|
|
29
|
+
this._$selectedTab.selected = false;
|
|
30
|
+
$newlySelectedTab.selected = true;
|
|
31
|
+
this._dispatchChangedEvent(this._$selectedTab, $newlySelectedTab);
|
|
32
|
+
this._$selectedTab = $newlySelectedTab;
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
connectedCallback() {
|
|
36
|
+
super.connectedCallback();
|
|
37
|
+
this._setupEvents();
|
|
38
|
+
this.setAttribute('role', 'tablist');
|
|
39
|
+
this._$tabs = [...this.querySelectorAll('h-tab')];
|
|
40
|
+
new KeystrokesController({
|
|
41
|
+
host: this,
|
|
42
|
+
keys: ['ArrowRight', 'ArrowLeft'],
|
|
43
|
+
callback: this._handleArrowNavigation
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
_getFocusedTabIndex() {
|
|
47
|
+
const focusedElement = document.activeElement;
|
|
48
|
+
if ((focusedElement === null || focusedElement === void 0 ? void 0 : focusedElement.tagName) !== 'H-TAB')
|
|
49
|
+
return;
|
|
50
|
+
return this._$tabs.findIndex(($tab) => $tab === focusedElement);
|
|
51
|
+
}
|
|
52
|
+
_getNextTabIndex(currentTabIndex) {
|
|
53
|
+
if (currentTabIndex >= this._$tabs.length - 1)
|
|
54
|
+
return;
|
|
55
|
+
return currentTabIndex + 1;
|
|
56
|
+
}
|
|
57
|
+
_getPrevTabIndex(currentTabIndex) {
|
|
58
|
+
if (currentTabIndex <= 0)
|
|
59
|
+
return;
|
|
60
|
+
return currentTabIndex - 1;
|
|
61
|
+
}
|
|
62
|
+
_setupEvents() {
|
|
63
|
+
this.addEventListener(TAB_EVENT_NAMES.selected, this._handleTabSelected);
|
|
64
|
+
}
|
|
65
|
+
allChildrenRendered() {
|
|
66
|
+
const $selectedTab = this.querySelector('h-tab[selected]');
|
|
67
|
+
this._hideNotSelectedAndVisiblePanels();
|
|
68
|
+
if (!$selectedTab)
|
|
69
|
+
return;
|
|
70
|
+
this._$selectedTab = $selectedTab;
|
|
71
|
+
this.switchPanel(this._$selectedTab.panelName);
|
|
72
|
+
}
|
|
73
|
+
_hideNotSelectedAndVisiblePanels() {
|
|
74
|
+
const $notSelectedTabs = [...this.querySelectorAll('h-tab:not([selected])')];
|
|
75
|
+
$notSelectedTabs
|
|
76
|
+
.map(($tab) => $tab.panelName)
|
|
77
|
+
.forEach((panelName) => document.querySelectorAll(`[name="${panelName}"]`).forEach(($panel) => $panel.hide()));
|
|
78
|
+
}
|
|
79
|
+
switchPanel(newPanelName) {
|
|
80
|
+
const $currentPanel = this._$selectedTab && document.querySelectorAll(`[name="${this._$selectedTab.panelName}"]`);
|
|
81
|
+
const $newPanel = document.querySelectorAll(`[name="${newPanelName}"]`);
|
|
82
|
+
if ($currentPanel)
|
|
83
|
+
$currentPanel.forEach(($panel) => $panel.hide());
|
|
84
|
+
if ($newPanel)
|
|
85
|
+
$newPanel.forEach(($panel) => $panel.show());
|
|
86
|
+
}
|
|
87
|
+
_dispatchChangedEvent($previousTab, $newTab) {
|
|
88
|
+
this.dispatchEvent(new CustomEvent(TABS_EVENT_NAMES.changed, {
|
|
89
|
+
detail: {
|
|
90
|
+
$previousTab,
|
|
91
|
+
$newTab
|
|
92
|
+
},
|
|
93
|
+
bubbles: true
|
|
94
|
+
}));
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
__decorate([
|
|
98
|
+
state(),
|
|
99
|
+
__metadata("design:type", HTab)
|
|
100
|
+
], HTabs.prototype, "_$selectedTab", void 0);
|
|
101
|
+
HTabs = __decorate([
|
|
102
|
+
phoenixCustomElement('h-tabs')
|
|
103
|
+
], HTabs);
|
|
104
|
+
|
|
105
|
+
export { HTabs };
|
|
106
|
+
//# sourceMappingURL=tabs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA,uCAAuC,4CAAgD;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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 @@
|
|
|
1
|
+
{"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tabs_types.js","sourceRoot":"","sources":["../../../../../../../src/components/tabs/tabs_types.ts"],"names":[],"mappings":"AAAA,OAAqB,sCAAsC,CAAC"}
|
|
@@ -1,11 +1,24 @@
|
|
|
1
|
-
import { TRelativePositionCalculatorConstructorOptions
|
|
1
|
+
import { TRelativePositionCalculatorConstructorOptions } from './relative_position_calculator_types';
|
|
2
|
+
import { TRelativePositionControllerPositionData } from "./relative_position_controller_types";
|
|
2
3
|
export declare class PositionCalculator {
|
|
3
4
|
#private;
|
|
4
|
-
constructor({ direction, relativeElementRect, positionElementRect, container, nearestNonStaticElementFromElementToPositionRect, shouldNotReposition }: TRelativePositionCalculatorConstructorOptions);
|
|
5
|
+
constructor({ direction, relativeElementRect, positionElementRect, container, nearestNonStaticElementFromElementToPositionRect, offset, shouldNotReposition }: TRelativePositionCalculatorConstructorOptions);
|
|
5
6
|
calculatePosition(): TRelativePositionControllerPositionData;
|
|
6
7
|
private _canFitTopSide;
|
|
7
8
|
private _canFitBottomSide;
|
|
8
9
|
private _canFitCenter;
|
|
10
|
+
private _canFitLeftSide;
|
|
11
|
+
private _canFitRightSide;
|
|
9
12
|
private _calculateSidePosition;
|
|
13
|
+
private _calculateTopSide;
|
|
14
|
+
private _calculateBottomSide;
|
|
15
|
+
private _calculateCenterSide;
|
|
16
|
+
private _calculateLeftSide;
|
|
17
|
+
private _calculateRightSide;
|
|
10
18
|
private calculateAlignmentPosition;
|
|
19
|
+
private _calculateTopAlignment;
|
|
20
|
+
private _calculateBottomAlignment;
|
|
21
|
+
private _calculateLeftAlignment;
|
|
22
|
+
private _calculateRightAlignment;
|
|
23
|
+
private _calculateCenterAlignment;
|
|
11
24
|
}
|