igniteui-webcomponents 6.1.2 → 6.2.0
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/CHANGELOG.md +32 -0
- package/LICENSE +1 -1
- package/README.md +13 -1
- package/components/card/themes/content.js +7 -0
- package/components/card/themes/content.js.map +1 -1
- package/components/card/themes/shared/content/card.content.indigo.css.d.ts +1 -0
- package/components/card/themes/shared/content/card.content.indigo.css.js +3 -0
- package/components/card/themes/shared/content/card.content.indigo.css.js.map +1 -0
- package/components/carousel/carousel-indicator.d.ts +1 -1
- package/components/carousel/carousel-indicator.js.map +1 -1
- package/components/carousel/carousel-slide.d.ts +3 -3
- package/components/carousel/carousel-slide.js +7 -13
- package/components/carousel/carousel-slide.js.map +1 -1
- package/components/carousel/carousel.d.ts +39 -38
- package/components/carousel/carousel.js +160 -153
- package/components/carousel/carousel.js.map +1 -1
- package/components/checkbox/checkbox-base.d.ts +3 -5
- package/components/checkbox/checkbox-base.js +15 -21
- package/components/checkbox/checkbox-base.js.map +1 -1
- package/components/checkbox/checkbox.d.ts +3 -4
- package/components/checkbox/checkbox.js +18 -17
- package/components/checkbox/checkbox.js.map +1 -1
- package/components/checkbox/switch.d.ts +0 -1
- package/components/checkbox/switch.js +7 -10
- package/components/checkbox/switch.js.map +1 -1
- package/components/checkbox/themes/dark/checkbox/checkbox.bootstrap.css.js +1 -1
- package/components/checkbox/themes/dark/checkbox/checkbox.bootstrap.css.js.map +1 -1
- package/components/checkbox/themes/dark/checkbox/checkbox.fluent.css.js +1 -1
- package/components/checkbox/themes/dark/checkbox/checkbox.fluent.css.js.map +1 -1
- package/components/checkbox/themes/shared/checkbox/checkbox.bootstrap.css.js +1 -1
- package/components/checkbox/themes/shared/checkbox/checkbox.bootstrap.css.js.map +1 -1
- package/components/checkbox/themes/shared/checkbox/checkbox.common.css.js +1 -1
- package/components/checkbox/themes/shared/checkbox/checkbox.common.css.js.map +1 -1
- package/components/checkbox/themes/shared/checkbox/checkbox.fluent.css.js +1 -1
- package/components/checkbox/themes/shared/checkbox/checkbox.fluent.css.js.map +1 -1
- package/components/checkbox/themes/shared/checkbox/checkbox.indigo.css.js +1 -1
- package/components/checkbox/themes/shared/checkbox/checkbox.indigo.css.js.map +1 -1
- package/components/checkbox/themes/shared/checkbox/checkbox.material.css.js +1 -1
- package/components/checkbox/themes/shared/checkbox/checkbox.material.css.js.map +1 -1
- package/components/chip/chip.d.ts +11 -11
- package/components/chip/chip.js +61 -65
- package/components/chip/chip.js.map +1 -1
- package/components/combo/combo.d.ts +3 -3
- package/components/combo/combo.js +12 -6
- package/components/combo/combo.js.map +1 -1
- package/components/combo/themes/shared/combo.common.css.js +1 -1
- package/components/combo/themes/shared/combo.common.css.js.map +1 -1
- package/components/combo/themes/shared/combo.indigo.css.js +1 -1
- package/components/combo/themes/shared/combo.indigo.css.js.map +1 -1
- package/components/combo/themes/shared/combo.material.css.js +1 -1
- package/components/combo/themes/shared/combo.material.css.js.map +1 -1
- package/components/common/controllers/internals.d.ts +66 -2
- package/components/common/controllers/internals.js +21 -0
- package/components/common/controllers/internals.js.map +1 -1
- package/components/common/controllers/slot.d.ts +87 -0
- package/components/common/controllers/slot.js +75 -0
- package/components/common/controllers/slot.js.map +1 -0
- package/components/common/mixins/forms/associated.d.ts +1 -1
- package/components/common/mixins/forms/associated.js +91 -36
- package/components/common/mixins/forms/associated.js.map +1 -1
- package/components/common/mixins/forms/form-transformers.d.ts +21 -0
- package/components/common/mixins/forms/form-transformers.js +64 -0
- package/components/common/mixins/forms/form-transformers.js.map +1 -0
- package/components/common/mixins/forms/form-value.d.ts +7 -36
- package/components/common/mixins/forms/form-value.js +2 -64
- package/components/common/mixins/forms/form-value.js.map +1 -1
- package/components/common/mixins/forms/types.d.ts +19 -10
- package/components/common/mixins/forms/types.js +2 -1
- package/components/common/mixins/forms/types.js.map +1 -1
- package/components/common/util.d.ts +1 -0
- package/components/common/util.js +3 -0
- package/components/common/util.js.map +1 -1
- package/components/date-picker/date-picker.d.ts +1 -3
- package/components/date-picker/date-picker.js +11 -13
- package/components/date-picker/date-picker.js.map +1 -1
- package/components/date-picker/themes/dark/date-picker.indigo.css.js +1 -1
- package/components/date-picker/themes/dark/date-picker.indigo.css.js.map +1 -1
- package/components/date-picker/themes/shared/date-picker.bootstrap.css.js +1 -1
- package/components/date-picker/themes/shared/date-picker.bootstrap.css.js.map +1 -1
- package/components/date-picker/themes/shared/date-picker.common.css.js +1 -1
- package/components/date-picker/themes/shared/date-picker.common.css.js.map +1 -1
- package/components/date-picker/themes/shared/date-picker.fluent.css.js +1 -1
- package/components/date-picker/themes/shared/date-picker.fluent.css.js.map +1 -1
- package/components/date-picker/themes/shared/date-picker.indigo.css.js +1 -1
- package/components/date-picker/themes/shared/date-picker.indigo.css.js.map +1 -1
- package/components/date-picker/themes/shared/date-picker.material.css.js +1 -1
- package/components/date-picker/themes/shared/date-picker.material.css.js.map +1 -1
- package/components/date-range-picker/date-range-picker.d.ts +1 -3
- package/components/date-range-picker/date-range-picker.js +19 -26
- package/components/date-range-picker/date-range-picker.js.map +1 -1
- package/components/date-range-picker/themes/dark/date-range-picker.indigo.css.js +1 -1
- package/components/date-range-picker/themes/dark/date-range-picker.indigo.css.js.map +1 -1
- package/components/date-range-picker/themes/shared/date-range-picker.bootstrap.css.js +1 -1
- package/components/date-range-picker/themes/shared/date-range-picker.bootstrap.css.js.map +1 -1
- package/components/date-range-picker/themes/shared/date-range-picker.common.css.js +1 -1
- package/components/date-range-picker/themes/shared/date-range-picker.common.css.js.map +1 -1
- package/components/date-range-picker/themes/shared/date-range-picker.fluent.css.js +1 -1
- package/components/date-range-picker/themes/shared/date-range-picker.fluent.css.js.map +1 -1
- package/components/date-range-picker/themes/shared/date-range-picker.indigo.css.js +1 -1
- package/components/date-range-picker/themes/shared/date-range-picker.indigo.css.js.map +1 -1
- package/components/date-range-picker/themes/shared/date-range-picker.material.css.js +1 -1
- package/components/date-range-picker/themes/shared/date-range-picker.material.css.js.map +1 -1
- package/components/date-time-input/date-time-input.d.ts +1 -2
- package/components/date-time-input/date-time-input.js +7 -7
- package/components/date-time-input/date-time-input.js.map +1 -1
- package/components/dialog/dialog.d.ts +23 -25
- package/components/dialog/dialog.js +108 -115
- package/components/dialog/dialog.js.map +1 -1
- package/components/dialog/themes/dark/dialog.bootstrap.css.js +1 -1
- package/components/dialog/themes/dark/dialog.bootstrap.css.js.map +1 -1
- package/components/expansion-panel/expansion-panel.d.ts +12 -14
- package/components/expansion-panel/expansion-panel.js +43 -56
- package/components/expansion-panel/expansion-panel.js.map +1 -1
- package/components/file-input/file-input.d.ts +1 -3
- package/components/file-input/file-input.js +6 -11
- package/components/file-input/file-input.js.map +1 -1
- package/components/file-input/themes/shared/file-input.bootstrap.css.js +1 -1
- package/components/file-input/themes/shared/file-input.bootstrap.css.js.map +1 -1
- package/components/file-input/themes/shared/file-input.material.css.js +1 -1
- package/components/file-input/themes/shared/file-input.material.css.js.map +1 -1
- package/components/input/input.d.ts +1 -4
- package/components/input/input.js +7 -12
- package/components/input/input.js.map +1 -1
- package/components/input/themes/shared/input.bootstrap.css.js +1 -1
- package/components/input/themes/shared/input.bootstrap.css.js.map +1 -1
- package/components/input/themes/shared/input.common.css.js +1 -1
- package/components/input/themes/shared/input.common.css.js.map +1 -1
- package/components/input/themes/shared/input.fluent.css.js +1 -1
- package/components/input/themes/shared/input.fluent.css.js.map +1 -1
- package/components/input/themes/shared/input.indigo.css.js +1 -1
- package/components/input/themes/shared/input.indigo.css.js.map +1 -1
- package/components/input/themes/shared/input.material.css.js +1 -1
- package/components/input/themes/shared/input.material.css.js.map +1 -1
- package/components/mask-input/mask-input-base.js +1 -0
- package/components/mask-input/mask-input-base.js.map +1 -1
- package/components/mask-input/mask-input.d.ts +2 -3
- package/components/mask-input/mask-input.js +5 -8
- package/components/mask-input/mask-input.js.map +1 -1
- package/components/nav-drawer/nav-drawer-item.d.ts +3 -4
- package/components/nav-drawer/nav-drawer-item.js +15 -18
- package/components/nav-drawer/nav-drawer-item.js.map +1 -1
- package/components/nav-drawer/nav-drawer.d.ts +1 -2
- package/components/nav-drawer/nav-drawer.js +9 -11
- package/components/nav-drawer/nav-drawer.js.map +1 -1
- package/components/nav-drawer/themes/container.base.css.js +1 -1
- package/components/nav-drawer/themes/container.base.css.js.map +1 -1
- package/components/nav-drawer/themes/shared/container/nav-drawer.common.css.js +1 -1
- package/components/nav-drawer/themes/shared/container/nav-drawer.common.css.js.map +1 -1
- package/components/popover/popover.d.ts +17 -16
- package/components/popover/popover.js +81 -91
- package/components/popover/popover.js.map +1 -1
- package/components/progress/base.d.ts +8 -8
- package/components/progress/base.js +19 -23
- package/components/progress/base.js.map +1 -1
- package/components/progress/circular-gradient.js.map +1 -1
- package/components/progress/circular-progress.d.ts +3 -4
- package/components/progress/circular-progress.js +15 -18
- package/components/progress/circular-progress.js.map +1 -1
- package/components/progress/linear-progress.d.ts +1 -0
- package/components/progress/linear-progress.js +5 -1
- package/components/progress/linear-progress.js.map +1 -1
- package/components/radio/radio.d.ts +3 -5
- package/components/radio/radio.js +33 -31
- package/components/radio/radio.js.map +1 -1
- package/components/radio/themes/dark/radio.fluent.css.js +1 -1
- package/components/radio/themes/dark/radio.fluent.css.js.map +1 -1
- package/components/radio/themes/shared/radio.bootstrap.css.js +1 -1
- package/components/radio/themes/shared/radio.bootstrap.css.js.map +1 -1
- package/components/radio/themes/shared/radio.common.css.js +1 -1
- package/components/radio/themes/shared/radio.common.css.js.map +1 -1
- package/components/radio/themes/shared/radio.fluent.css.js +1 -1
- package/components/radio/themes/shared/radio.fluent.css.js.map +1 -1
- package/components/radio/themes/shared/radio.indigo.css.js +1 -1
- package/components/radio/themes/shared/radio.indigo.css.js.map +1 -1
- package/components/radio/themes/shared/radio.material.css.js +1 -1
- package/components/radio/themes/shared/radio.material.css.js.map +1 -1
- package/components/radio-group/radio-group.d.ts +4 -4
- package/components/radio-group/radio-group.js +24 -21
- package/components/radio-group/radio-group.js.map +1 -1
- package/components/rating/rating.d.ts +1 -2
- package/components/rating/rating.js +4 -3
- package/components/rating/rating.js.map +1 -1
- package/components/select/select.d.ts +35 -38
- package/components/select/select.js +138 -146
- package/components/select/select.js.map +1 -1
- package/components/select/themes/shared/select.bootstrap.css.js +1 -1
- package/components/select/themes/shared/select.bootstrap.css.js.map +1 -1
- package/components/select/themes/shared/select.common.css.js +1 -1
- package/components/select/themes/shared/select.common.css.js.map +1 -1
- package/components/select/themes/shared/select.fluent.css.js +1 -1
- package/components/select/themes/shared/select.fluent.css.js.map +1 -1
- package/components/select/themes/shared/select.indigo.css.js +1 -1
- package/components/select/themes/shared/select.indigo.css.js.map +1 -1
- package/components/select/themes/shared/select.material.css.js +1 -1
- package/components/select/themes/shared/select.material.css.js.map +1 -1
- package/components/slider/slider-label.js.map +1 -1
- package/components/slider/slider.d.ts +1 -2
- package/components/slider/slider.js +5 -2
- package/components/slider/slider.js.map +1 -1
- package/components/textarea/textarea.d.ts +13 -20
- package/components/textarea/textarea.js +66 -90
- package/components/textarea/textarea.js.map +1 -1
- package/components/textarea/themes/shared/textarea.bootstrap.css.js +1 -1
- package/components/textarea/themes/shared/textarea.bootstrap.css.js.map +1 -1
- package/components/textarea/themes/shared/textarea.common.css.js +1 -1
- package/components/textarea/themes/shared/textarea.common.css.js.map +1 -1
- package/components/textarea/themes/shared/textarea.fluent.css.js +1 -1
- package/components/textarea/themes/shared/textarea.fluent.css.js.map +1 -1
- package/components/textarea/themes/shared/textarea.indigo.css.js +1 -1
- package/components/textarea/themes/shared/textarea.indigo.css.js.map +1 -1
- package/components/textarea/themes/shared/textarea.material.css.js +1 -1
- package/components/textarea/themes/shared/textarea.material.css.js.map +1 -1
- package/components/tile-manager/position.js +2 -1
- package/components/tile-manager/position.js.map +1 -1
- package/components/tile-manager/tile.d.ts +8 -12
- package/components/tile-manager/tile.js +16 -37
- package/components/tile-manager/tile.js.map +1 -1
- package/components/validation-container/validation-container.d.ts +2 -1
- package/components/validation-container/validation-container.js +19 -14
- package/components/validation-container/validation-container.js.map +1 -1
- package/custom-elements.json +9346 -6470
- package/igniteui-webcomponents.css-data.json +1 -1
- package/igniteui-webcomponents.html-data.json +1 -1
- package/package.json +1 -1
- package/web-types.json +2 -2
|
@@ -4,92 +4,103 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
4
4
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
5
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
6
|
};
|
|
7
|
-
var IgcDialogComponent_1;
|
|
8
7
|
import { html, LitElement, nothing } from 'lit';
|
|
9
|
-
import { property,
|
|
10
|
-
import { ifDefined } from 'lit/directives/if-defined.js';
|
|
8
|
+
import { property, state } from 'lit/decorators.js';
|
|
11
9
|
import { createRef, ref } from 'lit/directives/ref.js';
|
|
12
10
|
import { addAnimationController } from '../../animations/player.js';
|
|
13
11
|
import { fadeIn, fadeOut } from '../../animations/presets/fade/index.js';
|
|
14
12
|
import { addThemingController } from '../../theming/theming-controller.js';
|
|
15
13
|
import IgcButtonComponent from '../button/button.js';
|
|
16
|
-
import {
|
|
14
|
+
import { addSlotController, setSlots } from '../common/controllers/slot.js';
|
|
17
15
|
import { watch } from '../common/decorators/watch.js';
|
|
18
16
|
import { registerComponent } from '../common/definitions/register.js';
|
|
19
17
|
import { EventEmitterMixin } from '../common/mixins/event-emitter.js';
|
|
20
18
|
import { partMap } from '../common/part-map.js';
|
|
21
|
-
import {
|
|
19
|
+
import { numberInRangeInclusive } from '../common/util.js';
|
|
22
20
|
import { styles } from './themes/dialog.base.css.js';
|
|
23
21
|
import { styles as shared } from './themes/shared/dialog.common.css.js';
|
|
24
22
|
import { all } from './themes/themes.js';
|
|
25
|
-
let
|
|
23
|
+
let nextId = 1;
|
|
24
|
+
class IgcDialogComponent extends EventEmitterMixin(LitElement) {
|
|
26
25
|
static register() {
|
|
27
|
-
registerComponent(
|
|
26
|
+
registerComponent(IgcDialogComponent, IgcButtonComponent);
|
|
28
27
|
}
|
|
29
|
-
get
|
|
30
|
-
return this.
|
|
31
|
-
}
|
|
32
|
-
handleOpenState() {
|
|
33
|
-
this.open ? this.dialog.showModal() : this.dialog.close();
|
|
28
|
+
get _dialog() {
|
|
29
|
+
return this._dialogRef.value;
|
|
34
30
|
}
|
|
35
31
|
constructor() {
|
|
36
32
|
super();
|
|
37
|
-
this.
|
|
38
|
-
this.
|
|
39
|
-
|
|
40
|
-
|
|
33
|
+
this._titleId = `title-${nextId++}`;
|
|
34
|
+
this._slots = addSlotController(this, {
|
|
35
|
+
slots: setSlots('title', 'message', 'footer'),
|
|
36
|
+
});
|
|
37
|
+
this._dialogRef = createRef();
|
|
38
|
+
this._player = addAnimationController(this, this._dialogRef);
|
|
39
|
+
this._animating = false;
|
|
41
40
|
this.keepOpenOnEscape = false;
|
|
42
41
|
this.closeOnOutsideClick = false;
|
|
43
42
|
this.hideDefaultAction = false;
|
|
44
43
|
this.open = false;
|
|
45
|
-
this.formSubmitHandler = (e) => {
|
|
46
|
-
if (e.submitter) {
|
|
47
|
-
this.returnValue = e.submitter?.value ?? '';
|
|
48
|
-
}
|
|
49
|
-
if (!e.defaultPrevented) {
|
|
50
|
-
this._hide(true);
|
|
51
|
-
}
|
|
52
|
-
};
|
|
53
44
|
addThemingController(this, all);
|
|
54
45
|
}
|
|
55
|
-
createRenderRoot() {
|
|
56
|
-
const root = super.createRenderRoot();
|
|
57
|
-
root.addEventListener('slotchange', () => this.requestUpdate());
|
|
58
|
-
return root;
|
|
59
|
-
}
|
|
60
46
|
firstUpdated() {
|
|
61
47
|
if (this.open) {
|
|
62
|
-
this.
|
|
48
|
+
this._dialog.showModal();
|
|
63
49
|
}
|
|
64
50
|
}
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
]);
|
|
71
|
-
return event.type === 'finish';
|
|
51
|
+
_handleOpenState() {
|
|
52
|
+
this.open ? this._dialog.showModal() : this._dialog.close();
|
|
53
|
+
}
|
|
54
|
+
_emitClosing() {
|
|
55
|
+
return this.emitEvent('igcClosing', { cancelable: true });
|
|
72
56
|
}
|
|
73
57
|
async _hide(emitEvent = false) {
|
|
74
|
-
if (!this.open || (emitEvent && !this.
|
|
58
|
+
if (!this.open || (emitEvent && !this._emitClosing())) {
|
|
75
59
|
return false;
|
|
76
60
|
}
|
|
77
|
-
this.
|
|
78
|
-
await this.
|
|
61
|
+
this._animating = true;
|
|
62
|
+
await this._player.playExclusive(fadeOut());
|
|
79
63
|
this.open = false;
|
|
80
|
-
this.
|
|
64
|
+
this._animating = false;
|
|
81
65
|
if (emitEvent) {
|
|
82
66
|
await this.updateComplete;
|
|
83
67
|
this.emitEvent('igcClosed');
|
|
84
68
|
}
|
|
85
69
|
return true;
|
|
86
70
|
}
|
|
71
|
+
_handleFormSubmit(event) {
|
|
72
|
+
const form = event.target;
|
|
73
|
+
if (form.method === 'dialog') {
|
|
74
|
+
if (hasSubmitter(event.submitter)) {
|
|
75
|
+
this.returnValue = event.submitter.value ?? '';
|
|
76
|
+
}
|
|
77
|
+
if (!event.defaultPrevented) {
|
|
78
|
+
this._hide(true);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
_handleCancel(event) {
|
|
83
|
+
event.preventDefault();
|
|
84
|
+
if (!this.keepOpenOnEscape) {
|
|
85
|
+
this._hide(true);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
_handleClick({ clientX, clientY, target }) {
|
|
89
|
+
if (this.closeOnOutsideClick && this._dialog === target) {
|
|
90
|
+
const rect = this._dialog.getBoundingClientRect();
|
|
91
|
+
const inX = numberInRangeInclusive(clientX, rect.left, rect.right);
|
|
92
|
+
const inY = numberInRangeInclusive(clientY, rect.top, rect.bottom);
|
|
93
|
+
if (!(inX && inY)) {
|
|
94
|
+
this._hide(true);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
87
98
|
async show() {
|
|
88
99
|
if (this.open) {
|
|
89
100
|
return false;
|
|
90
101
|
}
|
|
91
102
|
this.open = true;
|
|
92
|
-
await this.
|
|
103
|
+
await this._player.playExclusive(fadeIn());
|
|
93
104
|
return true;
|
|
94
105
|
}
|
|
95
106
|
async hide() {
|
|
@@ -98,90 +109,73 @@ let IgcDialogComponent = IgcDialogComponent_1 = class IgcDialogComponent extends
|
|
|
98
109
|
async toggle() {
|
|
99
110
|
return this.open ? this.hide() : this.show();
|
|
100
111
|
}
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
}
|
|
112
|
+
_renderBackdrop() {
|
|
113
|
+
return html `
|
|
114
|
+
<div
|
|
115
|
+
aria-hidden=${!this.open}
|
|
116
|
+
part=${partMap({ backdrop: true, animating: this._animating })}
|
|
117
|
+
></div>
|
|
118
|
+
`;
|
|
106
119
|
}
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
}
|
|
120
|
+
_renderHeader() {
|
|
121
|
+
return html `
|
|
122
|
+
<header part="title" id=${this._titleId}>
|
|
123
|
+
<slot name="title">
|
|
124
|
+
<span>${this.title}</span>
|
|
125
|
+
</slot>
|
|
126
|
+
</header>
|
|
127
|
+
`;
|
|
116
128
|
}
|
|
117
|
-
|
|
118
|
-
|
|
129
|
+
_renderContent() {
|
|
130
|
+
const hasMessage = this._slots.hasAssignedElements('message');
|
|
131
|
+
return html `
|
|
132
|
+
<section part="content">
|
|
133
|
+
<slot name="message" ?hidden=${!hasMessage}></slot>
|
|
134
|
+
<slot @submit=${this._handleFormSubmit}></slot>
|
|
135
|
+
</section>
|
|
136
|
+
`;
|
|
119
137
|
}
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
138
|
+
_renderFooter() {
|
|
139
|
+
return html `
|
|
140
|
+
<footer part="footer">
|
|
141
|
+
<slot name="footer">
|
|
142
|
+
${this.hideDefaultAction
|
|
143
|
+
? nothing
|
|
144
|
+
: html `
|
|
145
|
+
<igc-button variant="flat" @click=${() => this._hide(true)}>
|
|
146
|
+
OK
|
|
147
|
+
</igc-button>
|
|
148
|
+
`}
|
|
149
|
+
</slot>
|
|
150
|
+
</footer>
|
|
151
|
+
`;
|
|
126
152
|
}
|
|
127
153
|
render() {
|
|
128
|
-
const
|
|
129
|
-
const
|
|
130
|
-
const
|
|
131
|
-
backdrop: true,
|
|
132
|
-
animating: this.animating,
|
|
133
|
-
};
|
|
134
|
-
const baseParts = {
|
|
135
|
-
base: true,
|
|
136
|
-
titled: this.titleElements.length > 0 || !!this.title,
|
|
137
|
-
footed: this.footerElements.length > 0 || !this.hideDefaultAction,
|
|
138
|
-
};
|
|
154
|
+
const hasTitle = this._slots.hasAssignedElements('title') || !!this.title;
|
|
155
|
+
const hasFooter = this._slots.hasAssignedElements('footer') || !this.hideDefaultAction;
|
|
156
|
+
const labelledBy = this.ariaLabel ?? this._titleId;
|
|
139
157
|
return html `
|
|
140
|
-
|
|
158
|
+
${this._renderBackdrop()}
|
|
141
159
|
<dialog
|
|
142
|
-
${ref(this.
|
|
143
|
-
part=${partMap(
|
|
160
|
+
${ref(this._dialogRef)}
|
|
161
|
+
part=${partMap({ base: true, titled: hasTitle, footed: hasFooter })}
|
|
144
162
|
role="dialog"
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
163
|
+
aria-label=${this.ariaLabel || nothing}
|
|
164
|
+
aria-labelledby=${labelledBy || nothing}
|
|
165
|
+
@click=${this._handleClick}
|
|
166
|
+
@cancel=${this._handleCancel}
|
|
149
167
|
>
|
|
150
|
-
|
|
151
|
-
<slot name="title"><span>${this.title}</span></slot>
|
|
152
|
-
</header>
|
|
153
|
-
<section part="content">
|
|
154
|
-
<slot name="message" .hidden=${isEmpty(this.messageElements)}></slot>
|
|
155
|
-
<slot @slotchange=${this.handleContentChange}></slot>
|
|
156
|
-
</section>
|
|
157
|
-
<footer part="footer">
|
|
158
|
-
<slot name="footer">
|
|
159
|
-
${this.hideDefaultAction
|
|
160
|
-
? nothing
|
|
161
|
-
: html `<igc-button variant="flat" @click=${() => this._hide(true)}
|
|
162
|
-
>OK</igc-button
|
|
163
|
-
>`}
|
|
164
|
-
</slot>
|
|
165
|
-
</footer>
|
|
168
|
+
${this._renderHeader()} ${this._renderContent()} ${this._renderFooter()}
|
|
166
169
|
</dialog>
|
|
167
170
|
`;
|
|
168
171
|
}
|
|
169
|
-
}
|
|
172
|
+
}
|
|
170
173
|
IgcDialogComponent.tagName = 'igc-dialog';
|
|
171
174
|
IgcDialogComponent.styles = [styles, shared];
|
|
172
|
-
|
|
175
|
+
export default IgcDialogComponent;
|
|
173
176
|
__decorate([
|
|
174
177
|
state()
|
|
175
|
-
], IgcDialogComponent.prototype, "
|
|
176
|
-
__decorate([
|
|
177
|
-
queryAssignedElements({ slot: 'title' })
|
|
178
|
-
], IgcDialogComponent.prototype, "titleElements", void 0);
|
|
179
|
-
__decorate([
|
|
180
|
-
queryAssignedElements({ slot: 'message' })
|
|
181
|
-
], IgcDialogComponent.prototype, "messageElements", void 0);
|
|
182
|
-
__decorate([
|
|
183
|
-
queryAssignedElements({ slot: 'footer' })
|
|
184
|
-
], IgcDialogComponent.prototype, "footerElements", void 0);
|
|
178
|
+
], IgcDialogComponent.prototype, "_animating", void 0);
|
|
185
179
|
__decorate([
|
|
186
180
|
property({ type: Boolean, attribute: 'keep-open-on-escape' })
|
|
187
181
|
], IgcDialogComponent.prototype, "keepOpenOnEscape", void 0);
|
|
@@ -202,9 +196,8 @@ __decorate([
|
|
|
202
196
|
], IgcDialogComponent.prototype, "returnValue", void 0);
|
|
203
197
|
__decorate([
|
|
204
198
|
watch('open', { waitUntilFirstUpdate: true })
|
|
205
|
-
], IgcDialogComponent.prototype, "
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
export default IgcDialogComponent;
|
|
199
|
+
], IgcDialogComponent.prototype, "_handleOpenState", null);
|
|
200
|
+
function hasSubmitter(submitter) {
|
|
201
|
+
return submitter != null;
|
|
202
|
+
}
|
|
210
203
|
//# sourceMappingURL=dialog.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dialog.js","sourceRoot":"","sources":["../../../src/components/dialog/dialog.ts"],"names":[],"mappings":"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","sourcesContent":["import { html, LitElement, nothing } from 'lit';\nimport { property, queryAssignedElements, state } from 'lit/decorators.js';\nimport { ifDefined } from 'lit/directives/if-defined.js';\nimport { createRef, type Ref, ref } from 'lit/directives/ref.js';\n\nimport { addAnimationController } from '../../animations/player.js';\nimport { fadeIn, fadeOut } from '../../animations/presets/fade/index.js';\nimport { addThemingController } from '../../theming/theming-controller.js';\nimport IgcButtonComponent from '../button/button.js';\nimport { blazorAdditionalDependencies } from '../common/decorators/blazorAdditionalDependencies.js';\nimport { watch } from '../common/decorators/watch.js';\nimport { registerComponent } from '../common/definitions/register.js';\nimport type { Constructor } from '../common/mixins/constructor.js';\nimport { EventEmitterMixin } from '../common/mixins/event-emitter.js';\nimport { partMap } from '../common/part-map.js';\nimport {\n createCounter,\n isEmpty,\n numberInRangeInclusive,\n} from '../common/util.js';\nimport { styles } from './themes/dialog.base.css.js';\nimport { styles as shared } from './themes/shared/dialog.common.css.js';\nimport { all } from './themes/themes.js';\n\nexport interface IgcDialogComponentEventMap {\n igcClosing: CustomEvent<void>;\n igcClosed: CustomEvent<void>;\n}\n\n/**\n * Represents a Dialog component.\n *\n * @element igc-dialog\n *\n * @fires igcClosing - Emitter just before the dialog is closed.\n * @fires igcClosed - Emitted after closing the dialog.\n *\n * @slot - Renders content inside the default slot.\n * @slot title - Renders the title of the dialog header.\n * @slot message - Renders the message content of the dialog.\n * @slot footer - Renders the dialog footer.\n *\n * @csspart base - The base wrapper of the dialog.\n * @csspart title - The title container.\n * @csspart footer - The footer container.\n * @csspart overlay - The overlay.\n */\n@blazorAdditionalDependencies('IgcButtonComponent')\nexport default class IgcDialogComponent extends EventEmitterMixin<\n IgcDialogComponentEventMap,\n Constructor<LitElement>\n>(LitElement) {\n public static readonly tagName = 'igc-dialog';\n public static styles = [styles, shared];\n\n /* blazorSuppress */\n public static register() {\n registerComponent(IgcDialogComponent, IgcButtonComponent);\n }\n\n private static readonly increment = createCounter();\n private titleId = `title-${IgcDialogComponent.increment()}`;\n\n private dialogRef: Ref<HTMLDialogElement> = createRef();\n private animationPlayer = addAnimationController(this, this.dialogRef);\n\n /**\n * Backdrop animation helper.\n */\n @state()\n private animating = false;\n\n private get dialog() {\n return this.dialogRef.value!;\n }\n\n @queryAssignedElements({ slot: 'title' })\n private titleElements!: Array<HTMLElement>;\n\n @queryAssignedElements({ slot: 'message' })\n private messageElements!: Array<HTMLElement>;\n\n @queryAssignedElements({ slot: 'footer' })\n private footerElements!: Array<HTMLElement>;\n\n /**\n * Whether the dialog should be kept open when pressing the 'ESCAPE' button.\n * @attr keep-open-on-escape\n */\n @property({ type: Boolean, attribute: 'keep-open-on-escape' })\n public keepOpenOnEscape = false;\n\n /**\n * Whether the dialog should be closed when clicking outside of it.\n * @attr close-on-outside-click\n */\n @property({ type: Boolean, attribute: 'close-on-outside-click' })\n public closeOnOutsideClick = false;\n\n /**\n * Whether to hide the default action button for the dialog.\n *\n * When there is projected content in the `footer` slot this property\n * has no effect.\n * @attr hide-default-action\n */\n @property({ type: Boolean, attribute: 'hide-default-action' })\n public hideDefaultAction = false;\n\n /**\n * Whether the dialog is opened.\n * @attr\n */\n @property({ type: Boolean, reflect: true })\n public open = false;\n\n /**\n * Sets the title of the dialog.\n * @attr\n */\n @property()\n public override title!: string;\n\n /** Sets the return value for the dialog. */\n @property({ attribute: false })\n public returnValue!: string;\n\n @watch('open', { waitUntilFirstUpdate: true })\n protected handleOpenState() {\n this.open ? this.dialog.showModal() : this.dialog.close();\n }\n\n constructor() {\n super();\n addThemingController(this, all);\n }\n\n protected override createRenderRoot() {\n const root = super.createRenderRoot();\n root.addEventListener('slotchange', () => this.requestUpdate());\n return root;\n }\n\n protected override firstUpdated() {\n if (this.open) {\n this.dialog.showModal();\n }\n }\n\n private async toggleAnimation(dir: 'open' | 'close') {\n const animation = dir === 'open' ? fadeIn : fadeOut;\n\n const [_, event] = await Promise.all([\n this.animationPlayer.stopAll(),\n this.animationPlayer.play(animation()),\n ]);\n\n return event.type === 'finish';\n }\n\n private async _hide(emitEvent = false) {\n if (!this.open || (emitEvent && !this.emitClosing())) {\n return false;\n }\n\n this.animating = true;\n await this.toggleAnimation('close');\n this.open = false;\n this.animating = false;\n\n if (emitEvent) {\n await this.updateComplete;\n this.emitEvent('igcClosed');\n }\n\n return true;\n }\n\n /** Opens the dialog. */\n public async show(): Promise<boolean> {\n if (this.open) {\n return false;\n }\n\n this.open = true;\n await this.toggleAnimation('open');\n return true;\n }\n\n /** Closes the dialog. */\n public async hide(): Promise<boolean> {\n return this._hide();\n }\n\n /** Toggles the open state of the dialog. */\n public async toggle(): Promise<boolean> {\n return this.open ? this.hide() : this.show();\n }\n\n private handleCancel(event: Event) {\n event.preventDefault();\n\n if (!this.keepOpenOnEscape) {\n this._hide(true);\n }\n }\n\n private handleClick({ clientX, clientY, target }: PointerEvent) {\n if (this.closeOnOutsideClick && this.dialog === target) {\n const rect = this.dialog.getBoundingClientRect();\n const inX = numberInRangeInclusive(clientX, rect.left, rect.right);\n const inY = numberInRangeInclusive(clientY, rect.top, rect.bottom);\n\n if (!(inX && inY)) {\n this._hide(true);\n }\n }\n }\n\n private emitClosing(): boolean {\n return this.emitEvent('igcClosing', { cancelable: true });\n }\n\n protected formSubmitHandler = (e: SubmitEvent) => {\n if (e.submitter) {\n this.returnValue = (e.submitter as any)?.value ?? '';\n }\n\n if (!e.defaultPrevented) {\n this._hide(true);\n }\n };\n\n private handleContentChange() {\n // Setup submit handling for forms\n const forms = this.querySelectorAll<HTMLFormElement>(\n 'form[method=\"dialog\"]'\n );\n\n for (const form of forms) {\n form.removeEventListener('submit', this.formSubmitHandler);\n form.addEventListener('submit', this.formSubmitHandler);\n }\n }\n\n protected override render() {\n const label = this.ariaLabel ? this.ariaLabel : undefined;\n const labelledBy = label ? undefined : this.titleId;\n const backdropParts = {\n backdrop: true,\n animating: this.animating,\n };\n const baseParts = {\n base: true,\n titled: this.titleElements.length > 0 || !!this.title,\n footed: this.footerElements.length > 0 || !this.hideDefaultAction,\n };\n\n return html`\n <div part=${partMap(backdropParts)} aria-hidden=${!this.open}></div>\n <dialog\n ${ref(this.dialogRef)}\n part=${partMap(baseParts)}\n role=\"dialog\"\n @click=${this.handleClick}\n @cancel=${this.handleCancel}\n aria-label=${ifDefined(label)}\n aria-labelledby=${ifDefined(labelledBy)}\n >\n <header part=\"title\" id=${this.titleId}>\n <slot name=\"title\"><span>${this.title}</span></slot>\n </header>\n <section part=\"content\">\n <slot name=\"message\" .hidden=${isEmpty(this.messageElements)}></slot>\n <slot @slotchange=${this.handleContentChange}></slot>\n </section>\n <footer part=\"footer\">\n <slot name=\"footer\">\n ${this.hideDefaultAction\n ? nothing\n : html`<igc-button variant=\"flat\" @click=${() => this._hide(true)}\n >OK</igc-button\n >`}\n </slot>\n </footer>\n </dialog>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'igc-dialog': IgcDialogComponent;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"dialog.js","sourceRoot":"","sources":["../../../src/components/dialog/dialog.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,wCAAwC,CAAC;AACzE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,kBAAkB,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAC5E,OAAO,EAAE,KAAK,EAAE,MAAM,+BAA+B,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAEtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,MAAM,EAAE,MAAM,6BAA6B,CAAC;AACrD,OAAO,EAAE,MAAM,IAAI,MAAM,EAAE,MAAM,sCAAsC,CAAC;AACxE,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAOzC,IAAI,MAAM,GAAG,CAAC,CAAC;AAqBf,MAAqB,kBAAmB,SAAQ,iBAAiB,CAG/D,UAAU,CAAC;IAKJ,MAAM,CAAC,QAAQ;QACpB,iBAAiB,CAAC,kBAAkB,EAAE,kBAAkB,CAAC,CAAC;IAC5D,CAAC;IAmBD,IAAY,OAAO;QACjB,OAAO,IAAI,CAAC,UAAU,CAAC,KAAM,CAAC;IAChC,CAAC;IAoDD;QACE,KAAK,EAAE,CAAC;QAtEO,aAAQ,GAAG,SAAS,MAAM,EAAE,EAAE,CAAC;QAE/B,WAAM,GAAG,iBAAiB,CAAC,IAAI,EAAE;YAChD,KAAK,EAAE,QAAQ,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC;SAC9C,CAAC,CAAC;QAEc,eAAU,GAAG,SAAS,EAAqB,CAAC;QAC5C,YAAO,GAAG,sBAAsB,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QAMjE,eAAU,GAAG,KAAK,CAAC;QAepB,qBAAgB,GAAG,KAAK,CAAC;QAOzB,wBAAmB,GAAG,KAAK,CAAC;QAU5B,sBAAiB,GAAG,KAAK,CAAC;QAO1B,SAAI,GAAG,KAAK,CAAC;QAmBlB,oBAAoB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAClC,CAAC;IAEkB,YAAY;QAC7B,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;QAC3B,CAAC;IACH,CAAC;IAGS,gBAAgB;QACxB,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;IAC9D,CAAC;IAEO,YAAY;QAClB,OAAO,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5D,CAAC;IAEO,KAAK,CAAC,KAAK,CAAC,SAAS,GAAG,KAAK;QACnC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,EAAE,CAAC;YACtD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,MAAM,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QAC5C,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;QAClB,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QAExB,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,IAAI,CAAC,cAAc,CAAC;YAC1B,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;QAC9B,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAES,iBAAiB,CAAC,KAAkB;QAC5C,MAAM,IAAI,GAAG,KAAK,CAAC,MAAyB,CAAC;QAE7C,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC7B,IAAI,YAAY,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;gBAClC,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,IAAI,EAAE,CAAC;YACjD,CAAC;YAED,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAC;gBAC5B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACnB,CAAC;QACH,CAAC;IACH,CAAC;IAEO,aAAa,CAAC,KAAY;QAChC,KAAK,CAAC,cAAc,EAAE,CAAC;QAEvB,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC3B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACnB,CAAC;IACH,CAAC;IAEO,YAAY,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAgB;QAC7D,IAAI,IAAI,CAAC,mBAAmB,IAAI,IAAI,CAAC,OAAO,KAAK,MAAM,EAAE,CAAC;YACxD,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC;YAClD,MAAM,GAAG,GAAG,sBAAsB,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YACnE,MAAM,GAAG,GAAG,sBAAsB,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YAEnE,IAAI,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,EAAE,CAAC;gBAClB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACnB,CAAC;QACH,CAAC;IACH,CAAC;IAOM,KAAK,CAAC,IAAI;QACf,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,MAAM,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC;QAC3C,OAAO,IAAI,CAAC;IACd,CAAC;IAGM,KAAK,CAAC,IAAI;QACf,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC;IACtB,CAAC;IAGM,KAAK,CAAC,MAAM;QACjB,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IAC/C,CAAC;IAMS,eAAe;QACvB,OAAO,IAAI,CAAA;;sBAEO,CAAC,IAAI,CAAC,IAAI;eACjB,OAAO,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC;;KAEjE,CAAC;IACJ,CAAC;IAES,aAAa;QACrB,OAAO,IAAI,CAAA;gCACiB,IAAI,CAAC,QAAQ;;kBAE3B,IAAI,CAAC,KAAK;;;KAGvB,CAAC;IACJ,CAAC;IAES,cAAc;QACtB,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC;QAC9D,OAAO,IAAI,CAAA;;uCAEwB,CAAC,UAAU;wBAC1B,IAAI,CAAC,iBAAiB;;KAEzC,CAAC;IACJ,CAAC;IAES,aAAa;QACrB,OAAO,IAAI,CAAA;;;YAGH,IAAI,CAAC,iBAAiB;YACtB,CAAC,CAAC,OAAO;YACT,CAAC,CAAC,IAAI,CAAA;oDACkC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;;;eAG3D;;;KAGV,CAAC;IACJ,CAAC;IAEkB,MAAM;QACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;QAC1E,MAAM,SAAS,GACb,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC;QACvE,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,QAAQ,CAAC;QAEnD,OAAO,IAAI,CAAA;QACP,IAAI,CAAC,eAAe,EAAE;;UAEpB,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC;eACf,OAAO,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;;qBAEtD,IAAI,CAAC,SAAS,IAAI,OAAO;0BACpB,UAAU,IAAI,OAAO;iBAC9B,IAAI,CAAC,YAAY;kBAChB,IAAI,CAAC,aAAa;;UAE1B,IAAI,CAAC,aAAa,EAAE,IAAI,IAAI,CAAC,cAAc,EAAE,IAAI,IAAI,CAAC,aAAa,EAAE;;KAE1E,CAAC;IACJ,CAAC;;AArPsB,0BAAO,GAAG,YAAY,AAAf,CAAgB;AAChC,yBAAM,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,AAAnB,CAAoB;eALrB,kBAAkB;AA2B7B;IADP,KAAK,EAAE;sDACmB;AAepB;IADN,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,qBAAqB,EAAE,CAAC;4DAC9B;AAOzB;IADN,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,wBAAwB,EAAE,CAAC;+DAC9B;AAU5B;IADN,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,qBAAqB,EAAE,CAAC;6DAC7B;AAO1B;IADN,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;gDACvB;AAOJ;IADf,QAAQ,EAAE;iDACoB;AAIxB;IADN,QAAQ,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;uDACH;AAkBlB;IADT,KAAK,CAAC,MAAM,EAAE,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAAC;0DAG7C;AAmKH,SAAS,YAAY,CACnB,SAAmC;IAEnC,OAAO,SAAS,IAAI,IAAI,CAAC;AAC3B,CAAC","sourcesContent":["import { html, LitElement, nothing } from 'lit';\nimport { property, state } from 'lit/decorators.js';\nimport { createRef, ref } from 'lit/directives/ref.js';\nimport { addAnimationController } from '../../animations/player.js';\nimport { fadeIn, fadeOut } from '../../animations/presets/fade/index.js';\nimport { addThemingController } from '../../theming/theming-controller.js';\nimport IgcButtonComponent from '../button/button.js';\nimport { addSlotController, setSlots } from '../common/controllers/slot.js';\nimport { watch } from '../common/decorators/watch.js';\nimport { registerComponent } from '../common/definitions/register.js';\nimport type { Constructor } from '../common/mixins/constructor.js';\nimport { EventEmitterMixin } from '../common/mixins/event-emitter.js';\nimport { partMap } from '../common/part-map.js';\nimport { numberInRangeInclusive } from '../common/util.js';\nimport { styles } from './themes/dialog.base.css.js';\nimport { styles as shared } from './themes/shared/dialog.common.css.js';\nimport { all } from './themes/themes.js';\n\nexport interface IgcDialogComponentEventMap {\n igcClosing: CustomEvent<void>;\n igcClosed: CustomEvent<void>;\n}\n\nlet nextId = 1;\n\n/* blazorAdditionalDependency: IgcButtonComponent */\n/**\n * Represents a Dialog component.\n *\n * @element igc-dialog\n *\n * @fires igcClosing - Emitter just before the dialog is closed. Cancelable.\n * @fires igcClosed - Emitted after closing the dialog.\n *\n * @slot - Renders content inside the default slot of the dialog.\n * @slot title - Renders content in the title slot of the dialog header.\n * @slot message - Renders the message content of the dialog.\n * @slot footer - Renders content in the dialog footer.\n *\n * @csspart base - The base wrapper of the dialog.\n * @csspart title - The title container of the dialog.\n * @csspart footer - The footer container of the dialog.\n * @csspart overlay - The backdrop overlay of the dialog.\n */\nexport default class IgcDialogComponent extends EventEmitterMixin<\n IgcDialogComponentEventMap,\n Constructor<LitElement>\n>(LitElement) {\n public static readonly tagName = 'igc-dialog';\n public static styles = [styles, shared];\n\n /* blazorSuppress */\n public static register(): void {\n registerComponent(IgcDialogComponent, IgcButtonComponent);\n }\n\n //#region Private state and properties\n\n private readonly _titleId = `title-${nextId++}`;\n\n private readonly _slots = addSlotController(this, {\n slots: setSlots('title', 'message', 'footer'),\n });\n\n private readonly _dialogRef = createRef<HTMLDialogElement>();\n private readonly _player = addAnimationController(this, this._dialogRef);\n\n /**\n * Backdrop animation helper.\n */\n @state()\n private _animating = false;\n\n private get _dialog(): HTMLDialogElement {\n return this._dialogRef.value!;\n }\n\n //#endregion\n\n //#region Public properties\n\n /**\n * Whether the dialog should be kept open when pressing the 'Escape' button.\n * @attr keep-open-on-escape\n */\n @property({ type: Boolean, attribute: 'keep-open-on-escape' })\n public keepOpenOnEscape = false;\n\n /**\n * Whether the dialog should be closed when clicking outside of it.\n * @attr close-on-outside-click\n */\n @property({ type: Boolean, attribute: 'close-on-outside-click' })\n public closeOnOutsideClick = false;\n\n /**\n * Whether to hide the default action button for the dialog.\n *\n * When there is projected content in the `footer` slot this property\n * has no effect.\n * @attr hide-default-action\n */\n @property({ type: Boolean, attribute: 'hide-default-action' })\n public hideDefaultAction = false;\n\n /**\n * Whether the dialog is opened.\n * @attr\n */\n @property({ type: Boolean, reflect: true })\n public open = false;\n\n /**\n * Sets the title of the dialog.\n * @attr\n */\n @property()\n public override title!: string;\n\n /** Sets the return value for the dialog. */\n @property({ attribute: false })\n public returnValue!: string;\n\n //#endregion\n\n //#region Internal API\n\n constructor() {\n super();\n addThemingController(this, all);\n }\n\n protected override firstUpdated(): void {\n if (this.open) {\n this._dialog.showModal();\n }\n }\n\n @watch('open', { waitUntilFirstUpdate: true })\n protected _handleOpenState(): void {\n this.open ? this._dialog.showModal() : this._dialog.close();\n }\n\n private _emitClosing(): boolean {\n return this.emitEvent('igcClosing', { cancelable: true });\n }\n\n private async _hide(emitEvent = false): Promise<boolean> {\n if (!this.open || (emitEvent && !this._emitClosing())) {\n return false;\n }\n\n this._animating = true;\n await this._player.playExclusive(fadeOut());\n this.open = false;\n this._animating = false;\n\n if (emitEvent) {\n await this.updateComplete;\n this.emitEvent('igcClosed');\n }\n\n return true;\n }\n\n protected _handleFormSubmit(event: SubmitEvent): void {\n const form = event.target as HTMLFormElement;\n\n if (form.method === 'dialog') {\n if (hasSubmitter(event.submitter)) {\n this.returnValue = event.submitter.value ?? '';\n }\n\n if (!event.defaultPrevented) {\n this._hide(true);\n }\n }\n }\n\n private _handleCancel(event: Event): void {\n event.preventDefault();\n\n if (!this.keepOpenOnEscape) {\n this._hide(true);\n }\n }\n\n private _handleClick({ clientX, clientY, target }: PointerEvent): void {\n if (this.closeOnOutsideClick && this._dialog === target) {\n const rect = this._dialog.getBoundingClientRect();\n const inX = numberInRangeInclusive(clientX, rect.left, rect.right);\n const inY = numberInRangeInclusive(clientY, rect.top, rect.bottom);\n\n if (!(inX && inY)) {\n this._hide(true);\n }\n }\n }\n\n //#endregion\n\n //#region Public API\n\n /** Opens the dialog. */\n public async show(): Promise<boolean> {\n if (this.open) {\n return false;\n }\n\n this.open = true;\n await this._player.playExclusive(fadeIn());\n return true;\n }\n\n /** Closes the dialog. */\n public async hide(): Promise<boolean> {\n return this._hide();\n }\n\n /** Toggles the open state of the dialog. */\n public async toggle(): Promise<boolean> {\n return this.open ? this.hide() : this.show();\n }\n\n //#endregion\n\n //#region Render methods\n\n protected _renderBackdrop() {\n return html`\n <div\n aria-hidden=${!this.open}\n part=${partMap({ backdrop: true, animating: this._animating })}\n ></div>\n `;\n }\n\n protected _renderHeader() {\n return html`\n <header part=\"title\" id=${this._titleId}>\n <slot name=\"title\">\n <span>${this.title}</span>\n </slot>\n </header>\n `;\n }\n\n protected _renderContent() {\n const hasMessage = this._slots.hasAssignedElements('message');\n return html`\n <section part=\"content\">\n <slot name=\"message\" ?hidden=${!hasMessage}></slot>\n <slot @submit=${this._handleFormSubmit}></slot>\n </section>\n `;\n }\n\n protected _renderFooter() {\n return html`\n <footer part=\"footer\">\n <slot name=\"footer\">\n ${this.hideDefaultAction\n ? nothing\n : html`\n <igc-button variant=\"flat\" @click=${() => this._hide(true)}>\n OK\n </igc-button>\n `}\n </slot>\n </footer>\n `;\n }\n\n protected override render() {\n const hasTitle = this._slots.hasAssignedElements('title') || !!this.title;\n const hasFooter =\n this._slots.hasAssignedElements('footer') || !this.hideDefaultAction;\n const labelledBy = this.ariaLabel ?? this._titleId;\n\n return html`\n ${this._renderBackdrop()}\n <dialog\n ${ref(this._dialogRef)}\n part=${partMap({ base: true, titled: hasTitle, footed: hasFooter })}\n role=\"dialog\"\n aria-label=${this.ariaLabel || nothing}\n aria-labelledby=${labelledBy || nothing}\n @click=${this._handleClick}\n @cancel=${this._handleCancel}\n >\n ${this._renderHeader()} ${this._renderContent()} ${this._renderFooter()}\n </dialog>\n `;\n }\n\n //#endregion\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'igc-dialog': IgcDialogComponent;\n }\n}\n\nfunction hasSubmitter(\n submitter: SubmitEvent['submitter']\n): submitter is HTMLButtonElement | HTMLInputElement {\n return submitter != null;\n}\n"]}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { css } from 'lit';
|
|
2
|
-
export const styles = css `:host{--elevation: var(--ig-dialog-elevation, var(--ig-elevation-0));--background: var(--ig-dialog-background, var(--ig-surface-500));--title-color: var(--ig-dialog-title-color, var(--ig-gray-900));--border-color: var(--ig-dialog-border-color, var(--ig-gray-
|
|
2
|
+
export const styles = css `:host{--elevation: var(--ig-dialog-elevation, var(--ig-elevation-0));--background: var(--ig-dialog-background, var(--ig-surface-500));--title-color: var(--ig-dialog-title-color, var(--ig-gray-900));--border-color: var(--ig-dialog-border-color, var(--ig-gray-300));--backdrop: var(--ig-dialog-backdrop, hsl(from var(--ig-gray-500) h s l/0.54));--border-radius: var(--ig-dialog-border-radius, clamp(0rem, calc(var(--ig-radius-factor, 0.1111111111) * 2.25rem), 2.25rem));--default-size: var(--ig-dialog-default-size, 2);--ig-theme: bootstrap}`;
|
|
3
3
|
//# sourceMappingURL=dialog.bootstrap.css.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dialog.bootstrap.css.js","sourceRoot":"","sources":["../../../../../src/components/dialog/themes/dark/dialog.bootstrap.css.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAA,6hBAA6hB,CAAC","sourcesContent":["import { css } from 'lit';\n\nexport const styles = css`:host{--elevation: var(--ig-dialog-elevation, var(--ig-elevation-0));--background: var(--ig-dialog-background, var(--ig-surface-500));--title-color: var(--ig-dialog-title-color, var(--ig-gray-900));--border-color: var(--ig-dialog-border-color, var(--ig-gray-
|
|
1
|
+
{"version":3,"file":"dialog.bootstrap.css.js","sourceRoot":"","sources":["../../../../../src/components/dialog/themes/dark/dialog.bootstrap.css.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAA,6hBAA6hB,CAAC","sourcesContent":["import { css } from 'lit';\n\nexport const styles = css`:host{--elevation: var(--ig-dialog-elevation, var(--ig-elevation-0));--background: var(--ig-dialog-background, var(--ig-surface-500));--title-color: var(--ig-dialog-title-color, var(--ig-gray-900));--border-color: var(--ig-dialog-border-color, var(--ig-gray-300));--backdrop: var(--ig-dialog-backdrop, hsl(from var(--ig-gray-500) h s l/0.54));--border-radius: var(--ig-dialog-border-radius, clamp(0rem, calc(var(--ig-radius-factor, 0.1111111111) * 2.25rem), 2.25rem));--default-size: var(--ig-dialog-default-size, 2);--ig-theme: bootstrap}`;\n"]}
|
|
@@ -36,12 +36,11 @@ export default class IgcExpansionPanelComponent extends IgcExpansionPanelCompone
|
|
|
36
36
|
static readonly tagName = "igc-expansion-panel";
|
|
37
37
|
static styles: import("lit").CSSResult[];
|
|
38
38
|
static register(): void;
|
|
39
|
-
private static readonly increment;
|
|
40
39
|
private _panelId;
|
|
41
|
-
private
|
|
42
|
-
private
|
|
43
|
-
private
|
|
44
|
-
private
|
|
40
|
+
private readonly _headerRef;
|
|
41
|
+
private readonly _contentRef;
|
|
42
|
+
private readonly _player;
|
|
43
|
+
private readonly _slots;
|
|
45
44
|
/**
|
|
46
45
|
* Indicates whether the contents of the control should be visible.
|
|
47
46
|
* @attr
|
|
@@ -58,22 +57,21 @@ export default class IgcExpansionPanelComponent extends IgcExpansionPanelCompone
|
|
|
58
57
|
*/
|
|
59
58
|
indicatorPosition: ExpansionPanelIndicatorPosition;
|
|
60
59
|
constructor();
|
|
61
|
-
protected createRenderRoot(): HTMLElement | DocumentFragment;
|
|
62
60
|
connectedCallback(): void;
|
|
63
|
-
private
|
|
64
|
-
private
|
|
65
|
-
private
|
|
66
|
-
private
|
|
67
|
-
private
|
|
61
|
+
private _handleClick;
|
|
62
|
+
private _toggleWithEvent;
|
|
63
|
+
private _toggleAnimation;
|
|
64
|
+
private _openWithEvent;
|
|
65
|
+
private _closeWithEvent;
|
|
68
66
|
/** Toggles the panel open/close state. */
|
|
69
67
|
toggle(): Promise<boolean>;
|
|
70
68
|
/** Hides the panel content. */
|
|
71
69
|
hide(): Promise<boolean>;
|
|
72
70
|
/** Shows the panel content. */
|
|
73
71
|
show(): Promise<boolean>;
|
|
74
|
-
private
|
|
75
|
-
private
|
|
76
|
-
private
|
|
72
|
+
private _renderIndicator;
|
|
73
|
+
private _renderHeader;
|
|
74
|
+
private _renderPanel;
|
|
77
75
|
protected render(): import("lit-html").TemplateResult<1>;
|
|
78
76
|
}
|
|
79
77
|
declare global {
|
|
@@ -5,84 +5,82 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
5
5
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
6
|
};
|
|
7
7
|
import { html, LitElement, nothing } from 'lit';
|
|
8
|
-
import { property
|
|
8
|
+
import { property } from 'lit/decorators.js';
|
|
9
9
|
import { createRef, ref } from 'lit/directives/ref.js';
|
|
10
10
|
import { addAnimationController } from '../../animations/player.js';
|
|
11
11
|
import { growVerIn, growVerOut } from '../../animations/presets/grow/index.js';
|
|
12
12
|
import { addThemingController } from '../../theming/theming-controller.js';
|
|
13
13
|
import { addKeybindings, altKey, arrowDown, arrowUp, } from '../common/controllers/key-bindings.js';
|
|
14
|
+
import { addSlotController, setSlots } from '../common/controllers/slot.js';
|
|
14
15
|
import { registerComponent } from '../common/definitions/register.js';
|
|
15
16
|
import { EventEmitterMixin } from '../common/mixins/event-emitter.js';
|
|
16
|
-
import { createCounter, isEmpty } from '../common/util.js';
|
|
17
17
|
import IgcIconComponent from '../icon/icon.js';
|
|
18
18
|
import { styles } from './themes/expansion-panel.base.css.js';
|
|
19
19
|
import { styles as shared } from './themes/shared/expansion-panel.common.css.js';
|
|
20
20
|
import { all } from './themes/themes.js';
|
|
21
|
+
let nextId = 1;
|
|
21
22
|
class IgcExpansionPanelComponent extends EventEmitterMixin(LitElement) {
|
|
22
23
|
static register() {
|
|
23
24
|
registerComponent(IgcExpansionPanelComponent, IgcIconComponent);
|
|
24
25
|
}
|
|
25
26
|
constructor() {
|
|
26
27
|
super();
|
|
27
|
-
this.
|
|
28
|
-
this.
|
|
29
|
-
this.
|
|
28
|
+
this._panelId = `${IgcExpansionPanelComponent.tagName}-${nextId++}`;
|
|
29
|
+
this._headerRef = createRef();
|
|
30
|
+
this._contentRef = createRef();
|
|
31
|
+
this._player = addAnimationController(this, this._contentRef);
|
|
32
|
+
this._slots = addSlotController(this, {
|
|
33
|
+
slots: setSlots('title', 'subtitle', 'indicator', 'indicator-expanded'),
|
|
34
|
+
});
|
|
30
35
|
this.open = false;
|
|
31
36
|
this.disabled = false;
|
|
32
37
|
this.indicatorPosition = 'start';
|
|
33
38
|
addThemingController(this, all);
|
|
34
39
|
addKeybindings(this, {
|
|
35
|
-
ref: this.
|
|
40
|
+
ref: this._headerRef,
|
|
36
41
|
skip: () => this.disabled,
|
|
37
42
|
bindingDefaults: { preventDefault: true },
|
|
38
43
|
})
|
|
39
|
-
.setActivateHandler(this.
|
|
40
|
-
.set([altKey, arrowDown], this.
|
|
41
|
-
.set([altKey, arrowUp], this.
|
|
42
|
-
}
|
|
43
|
-
createRenderRoot() {
|
|
44
|
-
const root = super.createRenderRoot();
|
|
45
|
-
root.addEventListener('slotchange', () => this.requestUpdate());
|
|
46
|
-
return root;
|
|
44
|
+
.setActivateHandler(this._toggleWithEvent)
|
|
45
|
+
.set([altKey, arrowDown], this._openWithEvent)
|
|
46
|
+
.set([altKey, arrowUp], this._closeWithEvent);
|
|
47
47
|
}
|
|
48
48
|
connectedCallback() {
|
|
49
49
|
super.connectedCallback();
|
|
50
|
-
this._panelId =
|
|
51
|
-
this.id ||
|
|
52
|
-
`igc-expansion-panel-${IgcExpansionPanelComponent.increment()}`;
|
|
50
|
+
this._panelId = this.id || this._panelId;
|
|
53
51
|
}
|
|
54
|
-
|
|
55
|
-
this.
|
|
56
|
-
this.
|
|
52
|
+
_handleClick() {
|
|
53
|
+
this._headerRef.value.focus();
|
|
54
|
+
this._toggleWithEvent();
|
|
57
55
|
}
|
|
58
|
-
|
|
59
|
-
this.open ? this.
|
|
56
|
+
_toggleWithEvent() {
|
|
57
|
+
this.open ? this._closeWithEvent() : this._openWithEvent();
|
|
60
58
|
}
|
|
61
|
-
async
|
|
59
|
+
async _toggleAnimation(dir) {
|
|
62
60
|
const animation = dir === 'open' ? growVerIn : growVerOut;
|
|
63
61
|
const [_, event] = await Promise.all([
|
|
64
|
-
this.
|
|
65
|
-
this.
|
|
62
|
+
this._player.stopAll(),
|
|
63
|
+
this._player.play(animation()),
|
|
66
64
|
]);
|
|
67
65
|
return event.type === 'finish';
|
|
68
66
|
}
|
|
69
|
-
async
|
|
67
|
+
async _openWithEvent() {
|
|
70
68
|
if (this.open ||
|
|
71
69
|
!this.emitEvent('igcOpening', { cancelable: true, detail: this })) {
|
|
72
70
|
return;
|
|
73
71
|
}
|
|
74
72
|
this.open = true;
|
|
75
|
-
if (await this.
|
|
73
|
+
if (await this._toggleAnimation('open')) {
|
|
76
74
|
this.emitEvent('igcOpened', { detail: this });
|
|
77
75
|
}
|
|
78
76
|
}
|
|
79
|
-
async
|
|
77
|
+
async _closeWithEvent() {
|
|
80
78
|
if (!(this.open &&
|
|
81
79
|
this.emitEvent('igcClosing', { cancelable: true, detail: this }))) {
|
|
82
80
|
return;
|
|
83
81
|
}
|
|
84
82
|
this.open = false;
|
|
85
|
-
if (await this.
|
|
83
|
+
if (await this._toggleAnimation('close')) {
|
|
86
84
|
this.emitEvent('igcClosed', { detail: this });
|
|
87
85
|
}
|
|
88
86
|
}
|
|
@@ -94,7 +92,7 @@ class IgcExpansionPanelComponent extends EventEmitterMixin(LitElement) {
|
|
|
94
92
|
return false;
|
|
95
93
|
}
|
|
96
94
|
this.open = false;
|
|
97
|
-
await this.
|
|
95
|
+
await this._toggleAnimation('close');
|
|
98
96
|
return true;
|
|
99
97
|
}
|
|
100
98
|
async show() {
|
|
@@ -102,32 +100,25 @@ class IgcExpansionPanelComponent extends EventEmitterMixin(LitElement) {
|
|
|
102
100
|
return false;
|
|
103
101
|
}
|
|
104
102
|
this.open = true;
|
|
105
|
-
await this.
|
|
103
|
+
await this._toggleAnimation('open');
|
|
106
104
|
return true;
|
|
107
105
|
}
|
|
108
|
-
|
|
109
|
-
const
|
|
110
|
-
const
|
|
106
|
+
_renderIndicator() {
|
|
107
|
+
const iconName = this.open ? 'collapse' : 'expand';
|
|
108
|
+
const indicatorHidden = this.open && this._slots.hasAssignedElements('indicator-expanded');
|
|
111
109
|
return html `
|
|
112
110
|
<div part="indicator" aria-hidden="true">
|
|
113
111
|
<slot name="indicator" ?hidden=${indicatorHidden}>
|
|
114
|
-
<igc-icon
|
|
115
|
-
name=${this.open ? 'collapse' : 'expand'}
|
|
116
|
-
collection="default"
|
|
117
|
-
>
|
|
118
|
-
</igc-icon>
|
|
112
|
+
<igc-icon name=${iconName} collection="default"></igc-icon>
|
|
119
113
|
</slot>
|
|
120
|
-
<slot
|
|
121
|
-
name="indicator-expanded"
|
|
122
|
-
?hidden=${indicatorExpandedHidden}
|
|
123
|
-
></slot>
|
|
114
|
+
<slot name="indicator-expanded" ?hidden=${!indicatorHidden}></slot>
|
|
124
115
|
</div>
|
|
125
116
|
`;
|
|
126
117
|
}
|
|
127
|
-
|
|
118
|
+
_renderHeader() {
|
|
128
119
|
return html `
|
|
129
120
|
<div
|
|
130
|
-
${ref(this.
|
|
121
|
+
${ref(this._headerRef)}
|
|
131
122
|
part="header"
|
|
132
123
|
id="${this._panelId}-header"
|
|
133
124
|
role="button"
|
|
@@ -135,9 +126,9 @@ class IgcExpansionPanelComponent extends EventEmitterMixin(LitElement) {
|
|
|
135
126
|
aria-disabled=${this.disabled}
|
|
136
127
|
aria-controls="${this._panelId}-content"
|
|
137
128
|
tabindex=${this.disabled ? '-1' : '0'}
|
|
138
|
-
@click=${this.disabled ? nothing : this.
|
|
129
|
+
@click=${this.disabled ? nothing : this._handleClick}
|
|
139
130
|
>
|
|
140
|
-
${this.
|
|
131
|
+
${this._renderIndicator()}
|
|
141
132
|
<div>
|
|
142
133
|
<slot name="title" part="title"></slot>
|
|
143
134
|
<slot name="subtitle" part="subtitle"></slot>
|
|
@@ -145,10 +136,10 @@ class IgcExpansionPanelComponent extends EventEmitterMixin(LitElement) {
|
|
|
145
136
|
</div>
|
|
146
137
|
`;
|
|
147
138
|
}
|
|
148
|
-
|
|
139
|
+
_renderPanel() {
|
|
149
140
|
return html `
|
|
150
141
|
<div
|
|
151
|
-
${ref(this.
|
|
142
|
+
${ref(this._contentRef)}
|
|
152
143
|
part="content"
|
|
153
144
|
role="region"
|
|
154
145
|
id="${this._panelId}-content"
|
|
@@ -161,21 +152,17 @@ class IgcExpansionPanelComponent extends EventEmitterMixin(LitElement) {
|
|
|
161
152
|
`;
|
|
162
153
|
}
|
|
163
154
|
render() {
|
|
164
|
-
return html `${this.
|
|
155
|
+
return html `${this._renderHeader()}${this._renderPanel()}`;
|
|
165
156
|
}
|
|
166
157
|
}
|
|
167
158
|
IgcExpansionPanelComponent.tagName = 'igc-expansion-panel';
|
|
168
159
|
IgcExpansionPanelComponent.styles = [styles, shared];
|
|
169
|
-
IgcExpansionPanelComponent.increment = createCounter();
|
|
170
160
|
export default IgcExpansionPanelComponent;
|
|
171
161
|
__decorate([
|
|
172
|
-
|
|
173
|
-
], IgcExpansionPanelComponent.prototype, "_indicatorExpandedElements", void 0);
|
|
174
|
-
__decorate([
|
|
175
|
-
property({ reflect: true, type: Boolean })
|
|
162
|
+
property({ type: Boolean, reflect: true })
|
|
176
163
|
], IgcExpansionPanelComponent.prototype, "open", void 0);
|
|
177
164
|
__decorate([
|
|
178
|
-
property({
|
|
165
|
+
property({ type: Boolean, reflect: true })
|
|
179
166
|
], IgcExpansionPanelComponent.prototype, "disabled", void 0);
|
|
180
167
|
__decorate([
|
|
181
168
|
property({ reflect: true, attribute: 'indicator-position' })
|