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.
Files changed (225) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/LICENSE +1 -1
  3. package/README.md +13 -1
  4. package/components/card/themes/content.js +7 -0
  5. package/components/card/themes/content.js.map +1 -1
  6. package/components/card/themes/shared/content/card.content.indigo.css.d.ts +1 -0
  7. package/components/card/themes/shared/content/card.content.indigo.css.js +3 -0
  8. package/components/card/themes/shared/content/card.content.indigo.css.js.map +1 -0
  9. package/components/carousel/carousel-indicator.d.ts +1 -1
  10. package/components/carousel/carousel-indicator.js.map +1 -1
  11. package/components/carousel/carousel-slide.d.ts +3 -3
  12. package/components/carousel/carousel-slide.js +7 -13
  13. package/components/carousel/carousel-slide.js.map +1 -1
  14. package/components/carousel/carousel.d.ts +39 -38
  15. package/components/carousel/carousel.js +160 -153
  16. package/components/carousel/carousel.js.map +1 -1
  17. package/components/checkbox/checkbox-base.d.ts +3 -5
  18. package/components/checkbox/checkbox-base.js +15 -21
  19. package/components/checkbox/checkbox-base.js.map +1 -1
  20. package/components/checkbox/checkbox.d.ts +3 -4
  21. package/components/checkbox/checkbox.js +18 -17
  22. package/components/checkbox/checkbox.js.map +1 -1
  23. package/components/checkbox/switch.d.ts +0 -1
  24. package/components/checkbox/switch.js +7 -10
  25. package/components/checkbox/switch.js.map +1 -1
  26. package/components/checkbox/themes/dark/checkbox/checkbox.bootstrap.css.js +1 -1
  27. package/components/checkbox/themes/dark/checkbox/checkbox.bootstrap.css.js.map +1 -1
  28. package/components/checkbox/themes/dark/checkbox/checkbox.fluent.css.js +1 -1
  29. package/components/checkbox/themes/dark/checkbox/checkbox.fluent.css.js.map +1 -1
  30. package/components/checkbox/themes/shared/checkbox/checkbox.bootstrap.css.js +1 -1
  31. package/components/checkbox/themes/shared/checkbox/checkbox.bootstrap.css.js.map +1 -1
  32. package/components/checkbox/themes/shared/checkbox/checkbox.common.css.js +1 -1
  33. package/components/checkbox/themes/shared/checkbox/checkbox.common.css.js.map +1 -1
  34. package/components/checkbox/themes/shared/checkbox/checkbox.fluent.css.js +1 -1
  35. package/components/checkbox/themes/shared/checkbox/checkbox.fluent.css.js.map +1 -1
  36. package/components/checkbox/themes/shared/checkbox/checkbox.indigo.css.js +1 -1
  37. package/components/checkbox/themes/shared/checkbox/checkbox.indigo.css.js.map +1 -1
  38. package/components/checkbox/themes/shared/checkbox/checkbox.material.css.js +1 -1
  39. package/components/checkbox/themes/shared/checkbox/checkbox.material.css.js.map +1 -1
  40. package/components/chip/chip.d.ts +11 -11
  41. package/components/chip/chip.js +61 -65
  42. package/components/chip/chip.js.map +1 -1
  43. package/components/combo/combo.d.ts +3 -3
  44. package/components/combo/combo.js +12 -6
  45. package/components/combo/combo.js.map +1 -1
  46. package/components/combo/themes/shared/combo.common.css.js +1 -1
  47. package/components/combo/themes/shared/combo.common.css.js.map +1 -1
  48. package/components/combo/themes/shared/combo.indigo.css.js +1 -1
  49. package/components/combo/themes/shared/combo.indigo.css.js.map +1 -1
  50. package/components/combo/themes/shared/combo.material.css.js +1 -1
  51. package/components/combo/themes/shared/combo.material.css.js.map +1 -1
  52. package/components/common/controllers/internals.d.ts +66 -2
  53. package/components/common/controllers/internals.js +21 -0
  54. package/components/common/controllers/internals.js.map +1 -1
  55. package/components/common/controllers/slot.d.ts +87 -0
  56. package/components/common/controllers/slot.js +75 -0
  57. package/components/common/controllers/slot.js.map +1 -0
  58. package/components/common/mixins/forms/associated.d.ts +1 -1
  59. package/components/common/mixins/forms/associated.js +91 -36
  60. package/components/common/mixins/forms/associated.js.map +1 -1
  61. package/components/common/mixins/forms/form-transformers.d.ts +21 -0
  62. package/components/common/mixins/forms/form-transformers.js +64 -0
  63. package/components/common/mixins/forms/form-transformers.js.map +1 -0
  64. package/components/common/mixins/forms/form-value.d.ts +7 -36
  65. package/components/common/mixins/forms/form-value.js +2 -64
  66. package/components/common/mixins/forms/form-value.js.map +1 -1
  67. package/components/common/mixins/forms/types.d.ts +19 -10
  68. package/components/common/mixins/forms/types.js +2 -1
  69. package/components/common/mixins/forms/types.js.map +1 -1
  70. package/components/common/util.d.ts +1 -0
  71. package/components/common/util.js +3 -0
  72. package/components/common/util.js.map +1 -1
  73. package/components/date-picker/date-picker.d.ts +1 -3
  74. package/components/date-picker/date-picker.js +11 -13
  75. package/components/date-picker/date-picker.js.map +1 -1
  76. package/components/date-picker/themes/dark/date-picker.indigo.css.js +1 -1
  77. package/components/date-picker/themes/dark/date-picker.indigo.css.js.map +1 -1
  78. package/components/date-picker/themes/shared/date-picker.bootstrap.css.js +1 -1
  79. package/components/date-picker/themes/shared/date-picker.bootstrap.css.js.map +1 -1
  80. package/components/date-picker/themes/shared/date-picker.common.css.js +1 -1
  81. package/components/date-picker/themes/shared/date-picker.common.css.js.map +1 -1
  82. package/components/date-picker/themes/shared/date-picker.fluent.css.js +1 -1
  83. package/components/date-picker/themes/shared/date-picker.fluent.css.js.map +1 -1
  84. package/components/date-picker/themes/shared/date-picker.indigo.css.js +1 -1
  85. package/components/date-picker/themes/shared/date-picker.indigo.css.js.map +1 -1
  86. package/components/date-picker/themes/shared/date-picker.material.css.js +1 -1
  87. package/components/date-picker/themes/shared/date-picker.material.css.js.map +1 -1
  88. package/components/date-range-picker/date-range-picker.d.ts +1 -3
  89. package/components/date-range-picker/date-range-picker.js +19 -26
  90. package/components/date-range-picker/date-range-picker.js.map +1 -1
  91. package/components/date-range-picker/themes/dark/date-range-picker.indigo.css.js +1 -1
  92. package/components/date-range-picker/themes/dark/date-range-picker.indigo.css.js.map +1 -1
  93. package/components/date-range-picker/themes/shared/date-range-picker.bootstrap.css.js +1 -1
  94. package/components/date-range-picker/themes/shared/date-range-picker.bootstrap.css.js.map +1 -1
  95. package/components/date-range-picker/themes/shared/date-range-picker.common.css.js +1 -1
  96. package/components/date-range-picker/themes/shared/date-range-picker.common.css.js.map +1 -1
  97. package/components/date-range-picker/themes/shared/date-range-picker.fluent.css.js +1 -1
  98. package/components/date-range-picker/themes/shared/date-range-picker.fluent.css.js.map +1 -1
  99. package/components/date-range-picker/themes/shared/date-range-picker.indigo.css.js +1 -1
  100. package/components/date-range-picker/themes/shared/date-range-picker.indigo.css.js.map +1 -1
  101. package/components/date-range-picker/themes/shared/date-range-picker.material.css.js +1 -1
  102. package/components/date-range-picker/themes/shared/date-range-picker.material.css.js.map +1 -1
  103. package/components/date-time-input/date-time-input.d.ts +1 -2
  104. package/components/date-time-input/date-time-input.js +7 -7
  105. package/components/date-time-input/date-time-input.js.map +1 -1
  106. package/components/dialog/dialog.d.ts +23 -25
  107. package/components/dialog/dialog.js +108 -115
  108. package/components/dialog/dialog.js.map +1 -1
  109. package/components/dialog/themes/dark/dialog.bootstrap.css.js +1 -1
  110. package/components/dialog/themes/dark/dialog.bootstrap.css.js.map +1 -1
  111. package/components/expansion-panel/expansion-panel.d.ts +12 -14
  112. package/components/expansion-panel/expansion-panel.js +43 -56
  113. package/components/expansion-panel/expansion-panel.js.map +1 -1
  114. package/components/file-input/file-input.d.ts +1 -3
  115. package/components/file-input/file-input.js +6 -11
  116. package/components/file-input/file-input.js.map +1 -1
  117. package/components/file-input/themes/shared/file-input.bootstrap.css.js +1 -1
  118. package/components/file-input/themes/shared/file-input.bootstrap.css.js.map +1 -1
  119. package/components/file-input/themes/shared/file-input.material.css.js +1 -1
  120. package/components/file-input/themes/shared/file-input.material.css.js.map +1 -1
  121. package/components/input/input.d.ts +1 -4
  122. package/components/input/input.js +7 -12
  123. package/components/input/input.js.map +1 -1
  124. package/components/input/themes/shared/input.bootstrap.css.js +1 -1
  125. package/components/input/themes/shared/input.bootstrap.css.js.map +1 -1
  126. package/components/input/themes/shared/input.common.css.js +1 -1
  127. package/components/input/themes/shared/input.common.css.js.map +1 -1
  128. package/components/input/themes/shared/input.fluent.css.js +1 -1
  129. package/components/input/themes/shared/input.fluent.css.js.map +1 -1
  130. package/components/input/themes/shared/input.indigo.css.js +1 -1
  131. package/components/input/themes/shared/input.indigo.css.js.map +1 -1
  132. package/components/input/themes/shared/input.material.css.js +1 -1
  133. package/components/input/themes/shared/input.material.css.js.map +1 -1
  134. package/components/mask-input/mask-input-base.js +1 -0
  135. package/components/mask-input/mask-input-base.js.map +1 -1
  136. package/components/mask-input/mask-input.d.ts +2 -3
  137. package/components/mask-input/mask-input.js +5 -8
  138. package/components/mask-input/mask-input.js.map +1 -1
  139. package/components/nav-drawer/nav-drawer-item.d.ts +3 -4
  140. package/components/nav-drawer/nav-drawer-item.js +15 -18
  141. package/components/nav-drawer/nav-drawer-item.js.map +1 -1
  142. package/components/nav-drawer/nav-drawer.d.ts +1 -2
  143. package/components/nav-drawer/nav-drawer.js +9 -11
  144. package/components/nav-drawer/nav-drawer.js.map +1 -1
  145. package/components/nav-drawer/themes/container.base.css.js +1 -1
  146. package/components/nav-drawer/themes/container.base.css.js.map +1 -1
  147. package/components/nav-drawer/themes/shared/container/nav-drawer.common.css.js +1 -1
  148. package/components/nav-drawer/themes/shared/container/nav-drawer.common.css.js.map +1 -1
  149. package/components/popover/popover.d.ts +17 -16
  150. package/components/popover/popover.js +81 -91
  151. package/components/popover/popover.js.map +1 -1
  152. package/components/progress/base.d.ts +8 -8
  153. package/components/progress/base.js +19 -23
  154. package/components/progress/base.js.map +1 -1
  155. package/components/progress/circular-gradient.js.map +1 -1
  156. package/components/progress/circular-progress.d.ts +3 -4
  157. package/components/progress/circular-progress.js +15 -18
  158. package/components/progress/circular-progress.js.map +1 -1
  159. package/components/progress/linear-progress.d.ts +1 -0
  160. package/components/progress/linear-progress.js +5 -1
  161. package/components/progress/linear-progress.js.map +1 -1
  162. package/components/radio/radio.d.ts +3 -5
  163. package/components/radio/radio.js +33 -31
  164. package/components/radio/radio.js.map +1 -1
  165. package/components/radio/themes/dark/radio.fluent.css.js +1 -1
  166. package/components/radio/themes/dark/radio.fluent.css.js.map +1 -1
  167. package/components/radio/themes/shared/radio.bootstrap.css.js +1 -1
  168. package/components/radio/themes/shared/radio.bootstrap.css.js.map +1 -1
  169. package/components/radio/themes/shared/radio.common.css.js +1 -1
  170. package/components/radio/themes/shared/radio.common.css.js.map +1 -1
  171. package/components/radio/themes/shared/radio.fluent.css.js +1 -1
  172. package/components/radio/themes/shared/radio.fluent.css.js.map +1 -1
  173. package/components/radio/themes/shared/radio.indigo.css.js +1 -1
  174. package/components/radio/themes/shared/radio.indigo.css.js.map +1 -1
  175. package/components/radio/themes/shared/radio.material.css.js +1 -1
  176. package/components/radio/themes/shared/radio.material.css.js.map +1 -1
  177. package/components/radio-group/radio-group.d.ts +4 -4
  178. package/components/radio-group/radio-group.js +24 -21
  179. package/components/radio-group/radio-group.js.map +1 -1
  180. package/components/rating/rating.d.ts +1 -2
  181. package/components/rating/rating.js +4 -3
  182. package/components/rating/rating.js.map +1 -1
  183. package/components/select/select.d.ts +35 -38
  184. package/components/select/select.js +138 -146
  185. package/components/select/select.js.map +1 -1
  186. package/components/select/themes/shared/select.bootstrap.css.js +1 -1
  187. package/components/select/themes/shared/select.bootstrap.css.js.map +1 -1
  188. package/components/select/themes/shared/select.common.css.js +1 -1
  189. package/components/select/themes/shared/select.common.css.js.map +1 -1
  190. package/components/select/themes/shared/select.fluent.css.js +1 -1
  191. package/components/select/themes/shared/select.fluent.css.js.map +1 -1
  192. package/components/select/themes/shared/select.indigo.css.js +1 -1
  193. package/components/select/themes/shared/select.indigo.css.js.map +1 -1
  194. package/components/select/themes/shared/select.material.css.js +1 -1
  195. package/components/select/themes/shared/select.material.css.js.map +1 -1
  196. package/components/slider/slider-label.js.map +1 -1
  197. package/components/slider/slider.d.ts +1 -2
  198. package/components/slider/slider.js +5 -2
  199. package/components/slider/slider.js.map +1 -1
  200. package/components/textarea/textarea.d.ts +13 -20
  201. package/components/textarea/textarea.js +66 -90
  202. package/components/textarea/textarea.js.map +1 -1
  203. package/components/textarea/themes/shared/textarea.bootstrap.css.js +1 -1
  204. package/components/textarea/themes/shared/textarea.bootstrap.css.js.map +1 -1
  205. package/components/textarea/themes/shared/textarea.common.css.js +1 -1
  206. package/components/textarea/themes/shared/textarea.common.css.js.map +1 -1
  207. package/components/textarea/themes/shared/textarea.fluent.css.js +1 -1
  208. package/components/textarea/themes/shared/textarea.fluent.css.js.map +1 -1
  209. package/components/textarea/themes/shared/textarea.indigo.css.js +1 -1
  210. package/components/textarea/themes/shared/textarea.indigo.css.js.map +1 -1
  211. package/components/textarea/themes/shared/textarea.material.css.js +1 -1
  212. package/components/textarea/themes/shared/textarea.material.css.js.map +1 -1
  213. package/components/tile-manager/position.js +2 -1
  214. package/components/tile-manager/position.js.map +1 -1
  215. package/components/tile-manager/tile.d.ts +8 -12
  216. package/components/tile-manager/tile.js +16 -37
  217. package/components/tile-manager/tile.js.map +1 -1
  218. package/components/validation-container/validation-container.d.ts +2 -1
  219. package/components/validation-container/validation-container.js +19 -14
  220. package/components/validation-container/validation-container.js.map +1 -1
  221. package/custom-elements.json +9346 -6470
  222. package/igniteui-webcomponents.css-data.json +1 -1
  223. package/igniteui-webcomponents.html-data.json +1 -1
  224. package/package.json +1 -1
  225. 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, queryAssignedElements, state } from 'lit/decorators.js';
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 { blazorAdditionalDependencies } from '../common/decorators/blazorAdditionalDependencies.js';
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 { createCounter, isEmpty, numberInRangeInclusive, } from '../common/util.js';
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 IgcDialogComponent = IgcDialogComponent_1 = class IgcDialogComponent extends EventEmitterMixin(LitElement) {
23
+ let nextId = 1;
24
+ class IgcDialogComponent extends EventEmitterMixin(LitElement) {
26
25
  static register() {
27
- registerComponent(IgcDialogComponent_1, IgcButtonComponent);
26
+ registerComponent(IgcDialogComponent, IgcButtonComponent);
28
27
  }
29
- get dialog() {
30
- return this.dialogRef.value;
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.titleId = `title-${IgcDialogComponent_1.increment()}`;
38
- this.dialogRef = createRef();
39
- this.animationPlayer = addAnimationController(this, this.dialogRef);
40
- this.animating = false;
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.dialog.showModal();
48
+ this._dialog.showModal();
63
49
  }
64
50
  }
65
- async toggleAnimation(dir) {
66
- const animation = dir === 'open' ? fadeIn : fadeOut;
67
- const [_, event] = await Promise.all([
68
- this.animationPlayer.stopAll(),
69
- this.animationPlayer.play(animation()),
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.emitClosing())) {
58
+ if (!this.open || (emitEvent && !this._emitClosing())) {
75
59
  return false;
76
60
  }
77
- this.animating = true;
78
- await this.toggleAnimation('close');
61
+ this._animating = true;
62
+ await this._player.playExclusive(fadeOut());
79
63
  this.open = false;
80
- this.animating = false;
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.toggleAnimation('open');
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
- handleCancel(event) {
102
- event.preventDefault();
103
- if (!this.keepOpenOnEscape) {
104
- this._hide(true);
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
- handleClick({ clientX, clientY, target }) {
108
- if (this.closeOnOutsideClick && this.dialog === target) {
109
- const rect = this.dialog.getBoundingClientRect();
110
- const inX = numberInRangeInclusive(clientX, rect.left, rect.right);
111
- const inY = numberInRangeInclusive(clientY, rect.top, rect.bottom);
112
- if (!(inX && inY)) {
113
- this._hide(true);
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
- emitClosing() {
118
- return this.emitEvent('igcClosing', { cancelable: true });
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
- handleContentChange() {
121
- const forms = this.querySelectorAll('form[method="dialog"]');
122
- for (const form of forms) {
123
- form.removeEventListener('submit', this.formSubmitHandler);
124
- form.addEventListener('submit', this.formSubmitHandler);
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 label = this.ariaLabel ? this.ariaLabel : undefined;
129
- const labelledBy = label ? undefined : this.titleId;
130
- const backdropParts = {
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
- <div part=${partMap(backdropParts)} aria-hidden=${!this.open}></div>
158
+ ${this._renderBackdrop()}
141
159
  <dialog
142
- ${ref(this.dialogRef)}
143
- part=${partMap(baseParts)}
160
+ ${ref(this._dialogRef)}
161
+ part=${partMap({ base: true, titled: hasTitle, footed: hasFooter })}
144
162
  role="dialog"
145
- @click=${this.handleClick}
146
- @cancel=${this.handleCancel}
147
- aria-label=${ifDefined(label)}
148
- aria-labelledby=${ifDefined(labelledBy)}
163
+ aria-label=${this.ariaLabel || nothing}
164
+ aria-labelledby=${labelledBy || nothing}
165
+ @click=${this._handleClick}
166
+ @cancel=${this._handleCancel}
149
167
  >
150
- <header part="title" id=${this.titleId}>
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
- IgcDialogComponent.increment = createCounter();
175
+ export default IgcDialogComponent;
173
176
  __decorate([
174
177
  state()
175
- ], IgcDialogComponent.prototype, "animating", void 0);
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, "handleOpenState", null);
206
- IgcDialogComponent = IgcDialogComponent_1 = __decorate([
207
- blazorAdditionalDependencies('IgcButtonComponent')
208
- ], IgcDialogComponent);
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-100));--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}`;
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-100));--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"]}
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 headerRef;
42
- private contentRef;
43
- private animationPlayer;
44
- private _indicatorExpandedElements;
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 handleClick;
64
- private toggleWithEvent;
65
- private toggleAnimation;
66
- private openWithEvent;
67
- private closeWithEvent;
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 renderIndicatorTemplate;
75
- private renderHeaderTemplate;
76
- private renderContentTemplate;
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, queryAssignedElements } from 'lit/decorators.js';
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.headerRef = createRef();
28
- this.contentRef = createRef();
29
- this.animationPlayer = addAnimationController(this, this.contentRef);
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.headerRef,
40
+ ref: this._headerRef,
36
41
  skip: () => this.disabled,
37
42
  bindingDefaults: { preventDefault: true },
38
43
  })
39
- .setActivateHandler(this.toggleWithEvent)
40
- .set([altKey, arrowDown], this.openWithEvent)
41
- .set([altKey, arrowUp], this.closeWithEvent);
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
- handleClick() {
55
- this.headerRef.value.focus();
56
- this.toggleWithEvent();
52
+ _handleClick() {
53
+ this._headerRef.value.focus();
54
+ this._toggleWithEvent();
57
55
  }
58
- toggleWithEvent() {
59
- this.open ? this.closeWithEvent() : this.openWithEvent();
56
+ _toggleWithEvent() {
57
+ this.open ? this._closeWithEvent() : this._openWithEvent();
60
58
  }
61
- async toggleAnimation(dir) {
59
+ async _toggleAnimation(dir) {
62
60
  const animation = dir === 'open' ? growVerIn : growVerOut;
63
61
  const [_, event] = await Promise.all([
64
- this.animationPlayer.stopAll(),
65
- this.animationPlayer.play(animation()),
62
+ this._player.stopAll(),
63
+ this._player.play(animation()),
66
64
  ]);
67
65
  return event.type === 'finish';
68
66
  }
69
- async openWithEvent() {
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.toggleAnimation('open')) {
73
+ if (await this._toggleAnimation('open')) {
76
74
  this.emitEvent('igcOpened', { detail: this });
77
75
  }
78
76
  }
79
- async closeWithEvent() {
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.toggleAnimation('close')) {
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.toggleAnimation('close');
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.toggleAnimation('open');
103
+ await this._toggleAnimation('open');
106
104
  return true;
107
105
  }
108
- renderIndicatorTemplate() {
109
- const indicatorHidden = this.open && this._indicatorExpandedElements.length > 0;
110
- const indicatorExpandedHidden = isEmpty(this._indicatorExpandedElements) || !this.open;
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
- renderHeaderTemplate() {
118
+ _renderHeader() {
128
119
  return html `
129
120
  <div
130
- ${ref(this.headerRef)}
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.handleClick}
129
+ @click=${this.disabled ? nothing : this._handleClick}
139
130
  >
140
- ${this.renderIndicatorTemplate()}
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
- renderContentTemplate() {
139
+ _renderPanel() {
149
140
  return html `
150
141
  <div
151
- ${ref(this.contentRef)}
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.renderHeaderTemplate()}${this.renderContentTemplate()}`;
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
- queryAssignedElements({ slot: 'indicator-expanded' })
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({ reflect: true, type: Boolean })
165
+ property({ type: Boolean, reflect: true })
179
166
  ], IgcExpansionPanelComponent.prototype, "disabled", void 0);
180
167
  __decorate([
181
168
  property({ reflect: true, attribute: 'indicator-position' })