@esri/calcite-components 1.0.0-next.364 → 1.0.0-next.368

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 (224) hide show
  1. package/dist/calcite/calcite.esm.js +1 -1
  2. package/dist/calcite/p-0282fd8b.system.entry.js +5 -0
  3. package/dist/calcite/p-050ff462.entry.js +5 -0
  4. package/dist/calcite/p-05b03971.system.entry.js +5 -0
  5. package/dist/calcite/p-08847812.entry.js +5 -0
  6. package/dist/calcite/p-0aa85495.system.entry.js +5 -0
  7. package/dist/calcite/{p-409d0a3f.entry.js → p-1855547f.entry.js} +1 -1
  8. package/dist/calcite/p-1bcce6c9.entry.js +5 -0
  9. package/dist/calcite/p-1ef9235e.system.entry.js +5 -0
  10. package/dist/calcite/p-25ed6059.entry.js +5 -0
  11. package/dist/calcite/p-40cbbd20.entry.js +5 -0
  12. package/dist/calcite/p-4347fde9.system.entry.js +5 -0
  13. package/dist/calcite/p-43cd4b9b.entry.js +5 -0
  14. package/dist/calcite/{p-e6d14bc5.system.entry.js → p-4dcae709.system.entry.js} +1 -1
  15. package/dist/calcite/p-55e2658e.entry.js +5 -0
  16. package/dist/calcite/p-5682a918.entry.js +5 -0
  17. package/dist/calcite/p-597b782e.system.entry.js +5 -0
  18. package/dist/calcite/p-60e4f404.entry.js +5 -0
  19. package/dist/calcite/p-660c8077.js +5 -0
  20. package/dist/calcite/p-7279ccf9.entry.js +5 -0
  21. package/dist/calcite/p-832d7f68.system.entry.js +5 -0
  22. package/dist/calcite/p-888a152c.system.entry.js +5 -0
  23. package/dist/calcite/p-946c3bed.system.entry.js +5 -0
  24. package/dist/calcite/p-94717214.entry.js +5 -0
  25. package/dist/calcite/p-953259af.entry.js +5 -0
  26. package/dist/calcite/p-96808ed2.entry.js +5 -0
  27. package/dist/calcite/p-99d32fc3.system.js +1 -1
  28. package/dist/calcite/p-9b723fdd.system.entry.js +5 -0
  29. package/dist/calcite/p-9fe77a88.system.entry.js +5 -0
  30. package/dist/calcite/p-a52288cd.system.entry.js +5 -0
  31. package/dist/calcite/p-a71d17b4.entry.js +5 -0
  32. package/dist/calcite/p-aea7c650.system.entry.js +5 -0
  33. package/dist/calcite/p-af7ed41f.system.entry.js +5 -0
  34. package/dist/calcite/p-b14e0be5.system.entry.js +5 -0
  35. package/dist/calcite/p-b53b28e3.system.js +5 -0
  36. package/dist/calcite/p-b88d7391.entry.js +5 -0
  37. package/dist/calcite/p-ba000c59.entry.js +5 -0
  38. package/dist/calcite/p-ba915998.entry.js +5 -0
  39. package/dist/calcite/p-cf2be87e.entry.js +5 -0
  40. package/dist/calcite/p-dd4457cd.entry.js +5 -0
  41. package/dist/calcite/p-eff2fb8c.system.entry.js +5 -0
  42. package/dist/calcite/p-f4614b28.system.entry.js +5 -0
  43. package/dist/calcite/{p-8b145872.system.entry.js → p-f94619be.system.entry.js} +1 -1
  44. package/dist/calcite/p-fd57beb5.system.entry.js +5 -0
  45. package/dist/cjs/calcite-action-bar.cjs.entry.js +3 -24
  46. package/dist/cjs/calcite-action-group.cjs.entry.js +13 -0
  47. package/dist/cjs/calcite-action-menu.cjs.entry.js +3 -0
  48. package/dist/cjs/calcite-action-pad.cjs.entry.js +8 -0
  49. package/dist/cjs/calcite-alert.cjs.entry.js +15 -9
  50. package/dist/cjs/calcite-block_2.cjs.entry.js +14 -1
  51. package/dist/cjs/calcite-chip.cjs.entry.js +14 -1
  52. package/dist/cjs/calcite-combobox_3.cjs.entry.js +14 -10
  53. package/dist/cjs/calcite-graph_2.cjs.entry.js +3 -3
  54. package/dist/cjs/calcite-link.cjs.entry.js +13 -2
  55. package/dist/cjs/calcite-list_3.cjs.entry.js +13 -0
  56. package/dist/cjs/calcite-modal.cjs.entry.js +5 -2
  57. package/dist/cjs/calcite-notice.cjs.entry.js +8 -0
  58. package/dist/cjs/calcite-panel.cjs.entry.js +18 -12
  59. package/dist/cjs/calcite-pick-list_3.cjs.entry.js +23 -0
  60. package/dist/cjs/calcite-shell_3.cjs.entry.js +35 -7
  61. package/dist/cjs/calcite-tile.cjs.entry.js +13 -0
  62. package/dist/cjs/calcite-tip_3.cjs.entry.js +13 -1
  63. package/dist/cjs/calcite-tree_2.cjs.entry.js +6 -0
  64. package/dist/cjs/calcite-value-list_2.cjs.entry.js +12 -0
  65. package/dist/cjs/calcite.cjs.js +1 -1
  66. package/dist/cjs/conditionalSlot-e874fbb0.js +43 -0
  67. package/dist/cjs/loader.cjs.js +1 -1
  68. package/dist/collection/components/calcite-action-group/calcite-action-group.js +12 -0
  69. package/dist/collection/components/calcite-action-menu/calcite-action-menu.js +3 -0
  70. package/dist/collection/components/calcite-action-pad/calcite-action-pad.js +7 -0
  71. package/dist/collection/components/calcite-alert/calcite-alert.js +15 -9
  72. package/dist/collection/components/calcite-block/calcite-block.js +13 -1
  73. package/dist/collection/components/calcite-chip/calcite-chip.js +13 -1
  74. package/dist/collection/components/calcite-combobox/calcite-combobox.js +15 -11
  75. package/dist/collection/components/calcite-link/calcite-link.js +31 -2
  76. package/dist/collection/components/calcite-list-item/calcite-list-item.js +12 -0
  77. package/dist/collection/components/calcite-modal/calcite-modal.js +5 -2
  78. package/dist/collection/components/calcite-notice/calcite-notice.js +7 -0
  79. package/dist/collection/components/calcite-panel/calcite-panel.js +19 -14
  80. package/dist/collection/components/calcite-pick-list-group/calcite-pick-list-group.js +12 -0
  81. package/dist/collection/components/calcite-pick-list-item/calcite-pick-list-item.js +12 -0
  82. package/dist/collection/components/calcite-shell/calcite-shell.js +14 -2
  83. package/dist/collection/components/calcite-shell-center-row/calcite-shell-center-row.js +13 -1
  84. package/dist/collection/components/calcite-shell-panel/calcite-shell-panel.js +9 -4
  85. package/dist/collection/components/calcite-slider/calcite-slider.css +3 -0
  86. package/dist/collection/components/calcite-slider/calcite-slider.js +2 -2
  87. package/dist/collection/components/calcite-tile/calcite-tile.js +12 -0
  88. package/dist/collection/components/calcite-tip/calcite-tip.js +13 -1
  89. package/dist/collection/components/calcite-tree-item/calcite-tree-item.js +5 -0
  90. package/dist/collection/components/calcite-value-list-item/calcite-value-list-item.js +12 -0
  91. package/dist/collection/utils/conditionalSlot.js +22 -11
  92. package/dist/components/calcite-action-bar.js +2 -23
  93. package/dist/components/calcite-action-group2.js +12 -0
  94. package/dist/components/calcite-action-menu2.js +3 -0
  95. package/dist/components/calcite-action-pad.js +7 -0
  96. package/dist/components/calcite-alert.js +15 -9
  97. package/dist/components/calcite-block.js +13 -1
  98. package/dist/components/calcite-chip2.js +13 -1
  99. package/dist/components/calcite-combobox.js +14 -10
  100. package/dist/components/calcite-link2.js +14 -2
  101. package/dist/components/calcite-list-item.js +12 -0
  102. package/dist/components/calcite-modal.js +5 -2
  103. package/dist/components/calcite-notice.js +7 -0
  104. package/dist/components/calcite-panel.js +17 -12
  105. package/dist/components/calcite-pick-list-group.js +12 -0
  106. package/dist/components/calcite-pick-list-item2.js +12 -0
  107. package/dist/components/calcite-shell-center-row.js +13 -1
  108. package/dist/components/calcite-shell-panel.js +9 -4
  109. package/dist/components/calcite-shell.js +14 -2
  110. package/dist/components/calcite-slider.js +3 -3
  111. package/dist/components/calcite-tile2.js +12 -0
  112. package/dist/components/calcite-tip.js +13 -1
  113. package/dist/components/calcite-tree-item.js +5 -0
  114. package/dist/components/calcite-value-list-item.js +12 -0
  115. package/dist/components/conditionalSlot.js +40 -0
  116. package/dist/custom-elements/index.js +240 -60
  117. package/dist/esm/calcite-action-bar.entry.js +2 -23
  118. package/dist/esm/calcite-action-group.entry.js +13 -0
  119. package/dist/esm/calcite-action-menu.entry.js +3 -0
  120. package/dist/esm/calcite-action-pad.entry.js +8 -0
  121. package/dist/esm/calcite-alert.entry.js +15 -9
  122. package/dist/esm/calcite-block_2.entry.js +14 -1
  123. package/dist/esm/calcite-chip.entry.js +14 -1
  124. package/dist/esm/calcite-combobox_3.entry.js +14 -10
  125. package/dist/esm/calcite-graph_2.entry.js +3 -3
  126. package/dist/esm/calcite-link.entry.js +13 -2
  127. package/dist/esm/calcite-list_3.entry.js +13 -0
  128. package/dist/esm/calcite-modal.entry.js +5 -2
  129. package/dist/esm/calcite-notice.entry.js +8 -0
  130. package/dist/esm/calcite-panel.entry.js +18 -12
  131. package/dist/esm/calcite-pick-list_3.entry.js +23 -0
  132. package/dist/esm/calcite-shell_3.entry.js +35 -7
  133. package/dist/esm/calcite-tile.entry.js +13 -0
  134. package/dist/esm/calcite-tip_3.entry.js +13 -1
  135. package/dist/esm/calcite-tree_2.entry.js +6 -0
  136. package/dist/esm/calcite-value-list_2.entry.js +12 -0
  137. package/dist/esm/calcite.js +1 -1
  138. package/dist/esm/conditionalSlot-0c4ea23a.js +40 -0
  139. package/dist/esm/loader.js +1 -1
  140. package/dist/esm-es5/calcite-action-bar.entry.js +2 -2
  141. package/dist/esm-es5/calcite-action-group.entry.js +1 -1
  142. package/dist/esm-es5/calcite-action-menu.entry.js +2 -2
  143. package/dist/esm-es5/calcite-action-pad.entry.js +2 -2
  144. package/dist/esm-es5/calcite-alert.entry.js +1 -1
  145. package/dist/esm-es5/calcite-block_2.entry.js +1 -1
  146. package/dist/esm-es5/calcite-chip.entry.js +2 -2
  147. package/dist/esm-es5/calcite-combobox_3.entry.js +2 -2
  148. package/dist/esm-es5/calcite-graph_2.entry.js +1 -1
  149. package/dist/esm-es5/calcite-link.entry.js +2 -2
  150. package/dist/esm-es5/calcite-list_3.entry.js +1 -1
  151. package/dist/esm-es5/calcite-modal.entry.js +1 -1
  152. package/dist/esm-es5/calcite-notice.entry.js +2 -2
  153. package/dist/esm-es5/calcite-panel.entry.js +2 -2
  154. package/dist/esm-es5/calcite-pick-list_3.entry.js +1 -1
  155. package/dist/esm-es5/calcite-shell_3.entry.js +1 -1
  156. package/dist/esm-es5/calcite-tile.entry.js +1 -1
  157. package/dist/esm-es5/calcite-tip_3.entry.js +1 -1
  158. package/dist/esm-es5/calcite-tree_2.entry.js +1 -1
  159. package/dist/esm-es5/calcite-value-list_2.entry.js +1 -1
  160. package/dist/esm-es5/calcite.js +1 -1
  161. package/dist/esm-es5/conditionalSlot-0c4ea23a.js +5 -0
  162. package/dist/esm-es5/loader.js +1 -1
  163. package/dist/extras/docs-json.json +21 -1
  164. package/dist/types/components/calcite-action-group/calcite-action-group.d.ts +4 -1
  165. package/dist/types/components/calcite-action-menu/calcite-action-menu.d.ts +2 -1
  166. package/dist/types/components/calcite-action-pad/calcite-action-pad.d.ts +4 -1
  167. package/dist/types/components/calcite-alert/calcite-alert.d.ts +2 -0
  168. package/dist/types/components/calcite-block/calcite-block.d.ts +4 -1
  169. package/dist/types/components/calcite-chip/calcite-chip.d.ts +4 -1
  170. package/dist/types/components/calcite-link/calcite-link.d.ts +5 -0
  171. package/dist/types/components/calcite-list-item/calcite-list-item.d.ts +4 -1
  172. package/dist/types/components/calcite-modal/calcite-modal.d.ts +2 -1
  173. package/dist/types/components/calcite-notice/calcite-notice.d.ts +4 -1
  174. package/dist/types/components/calcite-panel/calcite-panel.d.ts +5 -6
  175. package/dist/types/components/calcite-pick-list-group/calcite-pick-list-group.d.ts +4 -1
  176. package/dist/types/components/calcite-pick-list-item/calcite-pick-list-item.d.ts +4 -1
  177. package/dist/types/components/calcite-shell/calcite-shell.d.ts +4 -1
  178. package/dist/types/components/calcite-shell-center-row/calcite-shell-center-row.d.ts +4 -1
  179. package/dist/types/components/calcite-shell-panel/calcite-shell-panel.d.ts +3 -1
  180. package/dist/types/components/calcite-tile/calcite-tile.d.ts +4 -1
  181. package/dist/types/components/calcite-tip/calcite-tip.d.ts +4 -1
  182. package/dist/types/components/calcite-tree-item/calcite-tree-item.d.ts +3 -1
  183. package/dist/types/components/calcite-value-list-item/calcite-value-list-item.d.ts +4 -1
  184. package/dist/types/components.d.ts +8 -0
  185. package/hydrate/index.js +241 -60
  186. package/package.json +1 -2
  187. package/readme.md +0 -30
  188. package/dist/calcite/p-0af820bf.entry.js +0 -5
  189. package/dist/calcite/p-0cf878ed.system.entry.js +0 -5
  190. package/dist/calcite/p-1a5dae4a.entry.js +0 -5
  191. package/dist/calcite/p-1d7a9909.system.entry.js +0 -5
  192. package/dist/calcite/p-253efee4.entry.js +0 -5
  193. package/dist/calcite/p-2618de8a.entry.js +0 -5
  194. package/dist/calcite/p-273cd5ab.entry.js +0 -5
  195. package/dist/calcite/p-2a8938c7.system.entry.js +0 -5
  196. package/dist/calcite/p-2c954eaa.system.entry.js +0 -5
  197. package/dist/calcite/p-320ef3e6.system.entry.js +0 -5
  198. package/dist/calcite/p-37bddb73.system.entry.js +0 -5
  199. package/dist/calcite/p-3ab992ff.system.entry.js +0 -5
  200. package/dist/calcite/p-3b73b785.system.entry.js +0 -5
  201. package/dist/calcite/p-4659df78.entry.js +0 -5
  202. package/dist/calcite/p-54e271c9.system.entry.js +0 -5
  203. package/dist/calcite/p-57558d4b.entry.js +0 -5
  204. package/dist/calcite/p-5df1936f.entry.js +0 -5
  205. package/dist/calcite/p-698167ac.entry.js +0 -5
  206. package/dist/calcite/p-7d355abe.system.entry.js +0 -5
  207. package/dist/calcite/p-8d36bc7c.entry.js +0 -5
  208. package/dist/calcite/p-9bfe6679.system.entry.js +0 -5
  209. package/dist/calcite/p-9d81d229.entry.js +0 -5
  210. package/dist/calcite/p-a0043c61.entry.js +0 -5
  211. package/dist/calcite/p-a1f65f6e.entry.js +0 -5
  212. package/dist/calcite/p-a4dec1f6.system.entry.js +0 -5
  213. package/dist/calcite/p-a9c50960.system.entry.js +0 -5
  214. package/dist/calcite/p-aaed1677.entry.js +0 -5
  215. package/dist/calcite/p-ac778725.system.entry.js +0 -5
  216. package/dist/calcite/p-ac8cf248.entry.js +0 -5
  217. package/dist/calcite/p-b4d3f1c1.entry.js +0 -5
  218. package/dist/calcite/p-c0ed9eff.entry.js +0 -5
  219. package/dist/calcite/p-cb9cd28c.system.entry.js +0 -5
  220. package/dist/calcite/p-d578e568.system.entry.js +0 -5
  221. package/dist/calcite/p-e564004a.system.entry.js +0 -5
  222. package/dist/calcite/p-f6559122.entry.js +0 -5
  223. package/dist/calcite/p-f6fc151d.system.entry.js +0 -5
  224. package/dist/calcite/p-f73124d0.entry.js +0 -5
@@ -7,6 +7,7 @@ import { TreeSelectionMode } from "../calcite-tree/interfaces";
7
7
  import { nodeListToArray, getElementDir, filterDirectChildren, getSlotted } from "../../utils/dom";
8
8
  import { CSS, SLOTS, ICONS } from "./resources";
9
9
  import { CSS_UTILITY } from "../../utils/resources";
10
+ import { connectConditionalSlotComponent, disconnectConditionalSlotComponent } from "../../utils/conditionalSlot";
10
11
  /**
11
12
  * @slot - A slot for adding content to the item.
12
13
  * @slot children - A slot for adding nested `calcite-tree` elements.
@@ -78,6 +79,10 @@ export class CalciteTreeItem {
78
79
  const { expanded } = this.parentTreeItem;
79
80
  this.updateParentIsExpanded(this.parentTreeItem, expanded);
80
81
  }
82
+ connectConditionalSlotComponent(this);
83
+ }
84
+ disconnectedCallback() {
85
+ disconnectConditionalSlotComponent(this);
81
86
  }
82
87
  componentWillRender() {
83
88
  this.hasChildren = !!this.el.querySelector("calcite-tree");
@@ -9,6 +9,7 @@ import { CSS } from "../calcite-pick-list-item/resources";
9
9
  import { ICONS, SLOTS } from "./resources";
10
10
  import { SLOTS as PICK_LIST_SLOTS } from "../calcite-pick-list-item/resources";
11
11
  import { getSlotted } from "../../utils/dom";
12
+ import { connectConditionalSlotComponent, disconnectConditionalSlotComponent } from "../../utils/conditionalSlot";
12
13
  /**
13
14
  * @slot actions-end - A slot for adding actions or content to the end side of the item.
14
15
  * @slot actions-start - A slot for adding actions or content to the start side of the item.
@@ -66,6 +67,17 @@ export class CalciteValueListItem {
66
67
  }
67
68
  // --------------------------------------------------------------------------
68
69
  //
70
+ // Lifecycle
71
+ //
72
+ // --------------------------------------------------------------------------
73
+ connectedCallback() {
74
+ connectConditionalSlotComponent(this);
75
+ }
76
+ disconnectedCallback() {
77
+ disconnectConditionalSlotComponent(this);
78
+ }
79
+ // --------------------------------------------------------------------------
80
+ //
69
81
  // Public Methods
70
82
  //
71
83
  // --------------------------------------------------------------------------
@@ -3,24 +3,35 @@
3
3
  * See https://github.com/Esri/calcite-components/blob/master/LICENSE.md for details.
4
4
  */
5
5
  import { forceUpdate } from "@stencil/core";
6
- const slotChangedMap = new WeakMap();
7
- function onSlotChange() {
8
- forceUpdate(this);
9
- }
10
- const eventType = "slotchange";
6
+ import { createObserver } from "./observers";
7
+ const observed = new Set();
8
+ let mutationObserver;
9
+ const observerOptions = { childList: true };
11
10
  /**
12
11
  * Helper to set up a conditional slot component on connectedCallback.
13
12
  */
14
13
  export function connectConditionalSlotComponent(component) {
15
- const boundSlotChange = onSlotChange.bind(component);
16
- component.el.shadowRoot.addEventListener(eventType, boundSlotChange);
17
- slotChangedMap.set(component, boundSlotChange);
14
+ if (!mutationObserver) {
15
+ mutationObserver = createObserver("mutation", processMutations);
16
+ }
17
+ mutationObserver.observe(component.el, observerOptions);
18
18
  }
19
19
  /**
20
20
  * Helper to tear down a conditional slot component on disconnectedCallback.
21
21
  */
22
22
  export function disconnectConditionalSlotComponent(component) {
23
- const boundSlotChange = slotChangedMap.get(component);
24
- component.el.shadowRoot.removeEventListener(eventType, boundSlotChange);
25
- slotChangedMap.delete(component);
23
+ observed.delete(component.el);
24
+ // we explicitly process queued mutations and disconnect and reconnect
25
+ // the observer until MutationObserver gets an `unobserve` method
26
+ // see https://github.com/whatwg/dom/issues/126
27
+ processMutations(mutationObserver.takeRecords());
28
+ mutationObserver.disconnect();
29
+ for (const [element] of observed.entries()) {
30
+ mutationObserver.observe(element, observerOptions);
31
+ }
32
+ }
33
+ function processMutations(mutations) {
34
+ mutations.forEach(({ target }) => {
35
+ forceUpdate(target);
36
+ });
26
37
  }
@@ -2,10 +2,11 @@
2
2
  * All material copyright ESRI, All Rights Reserved, unless otherwise specified.
3
3
  * See https://github.com/Esri/calcite-components/blob/master/LICENSE.md for details.
4
4
  */
5
- import { forceUpdate, HTMLElement, createEvent, h, Host, proxyCustomElement } from '@stencil/core/internal/client';
5
+ import { HTMLElement, createEvent, h, Host, proxyCustomElement } from '@stencil/core/internal/client';
6
6
  import { t as toggleChildActionText, C as CalciteExpandToggle, o as overflowActionsDebounceInMs, q as queryActions, a as overflowActions, g as getOverflowCount } from './CalciteExpandToggle.js';
7
7
  import { f as focusElement, b as getSlotted } from './dom.js';
8
8
  import { c as createObserver } from './observers.js';
9
+ import { c as connectConditionalSlotComponent, d as disconnectConditionalSlotComponent } from './conditionalSlot.js';
9
10
  import { d as defineCustomElement$8 } from './calcite-action2.js';
10
11
  import { d as defineCustomElement$7 } from './calcite-action-group2.js';
11
12
  import { d as defineCustomElement$6 } from './calcite-action-menu2.js';
@@ -27,28 +28,6 @@ const TEXT = {
27
28
  collapse: "Collapse"
28
29
  };
29
30
 
30
- const slotChangedMap = new WeakMap();
31
- function onSlotChange() {
32
- forceUpdate(this);
33
- }
34
- const eventType = "slotchange";
35
- /**
36
- * Helper to set up a conditional slot component on connectedCallback.
37
- */
38
- function connectConditionalSlotComponent(component) {
39
- const boundSlotChange = onSlotChange.bind(component);
40
- component.el.shadowRoot.addEventListener(eventType, boundSlotChange);
41
- slotChangedMap.set(component, boundSlotChange);
42
- }
43
- /**
44
- * Helper to tear down a conditional slot component on disconnectedCallback.
45
- */
46
- function disconnectConditionalSlotComponent(component) {
47
- const boundSlotChange = slotChangedMap.get(component);
48
- component.el.shadowRoot.removeEventListener(eventType, boundSlotChange);
49
- slotChangedMap.delete(component);
50
- }
51
-
52
31
  const calciteActionBarCss = "@-webkit-keyframes in{0%{opacity:0}100%{opacity:1}}@keyframes in{0%{opacity:0}100%{opacity:1}}@-webkit-keyframes in-down{0%{opacity:0;-webkit-transform:translate3D(0, -5px, 0);transform:translate3D(0, -5px, 0)}100%{opacity:1;-webkit-transform:translate3D(0, 0, 0);transform:translate3D(0, 0, 0)}}@keyframes in-down{0%{opacity:0;-webkit-transform:translate3D(0, -5px, 0);transform:translate3D(0, -5px, 0)}100%{opacity:1;-webkit-transform:translate3D(0, 0, 0);transform:translate3D(0, 0, 0)}}@-webkit-keyframes in-up{0%{opacity:0;-webkit-transform:translate3D(0, 5px, 0);transform:translate3D(0, 5px, 0)}100%{opacity:1;-webkit-transform:translate3D(0, 0, 0);transform:translate3D(0, 0, 0)}}@keyframes in-up{0%{opacity:0;-webkit-transform:translate3D(0, 5px, 0);transform:translate3D(0, 5px, 0)}100%{opacity:1;-webkit-transform:translate3D(0, 0, 0);transform:translate3D(0, 0, 0)}}@-webkit-keyframes in-scale{0%{opacity:0;-webkit-transform:scale3D(0.95, 0.95, 1);transform:scale3D(0.95, 0.95, 1)}100%{opacity:1;-webkit-transform:scale3D(1, 1, 1);transform:scale3D(1, 1, 1)}}@keyframes in-scale{0%{opacity:0;-webkit-transform:scale3D(0.95, 0.95, 1);transform:scale3D(0.95, 0.95, 1)}100%{opacity:1;-webkit-transform:scale3D(1, 1, 1);transform:scale3D(1, 1, 1)}}:root{--calcite-animation-timing:calc(150ms * var(--calcite-internal-duration-factor));--calcite-internal-duration-factor:var(--calcite-duration-factor, 1);--calcite-internal-animation-timing-fast:calc(100ms * var(--calcite-internal-duration-factor));--calcite-internal-animation-timing-medium:calc(200ms * var(--calcite-internal-duration-factor));--calcite-internal-animation-timing-slow:calc(300ms * var(--calcite-internal-duration-factor))}.calcite-animate{opacity:0;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-duration:var(--calcite-animation-timing);animation-duration:var(--calcite-animation-timing)}.calcite-animate__in{-webkit-animation-name:in;animation-name:in}.calcite-animate__in-down{-webkit-animation-name:in-down;animation-name:in-down}.calcite-animate__in-up{-webkit-animation-name:in-up;animation-name:in-up}.calcite-animate__in-scale{-webkit-animation-name:in-scale;animation-name:in-scale}:host{-webkit-box-sizing:border-box;box-sizing:border-box;background-color:var(--calcite-ui-foreground-1);color:var(--calcite-ui-text-2);font-size:var(--calcite-font-size--1)}:host *{-webkit-box-sizing:border-box;box-sizing:border-box}:root{--calcite-popper-transition:var(--calcite-animation-timing)}:host([hidden]){display:none}:host{pointer-events:auto;display:-ms-inline-flexbox;display:inline-flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-item-align:stretch;align-self:stretch;max-width:15vw}:host([overflow-actions-disabled]){overflow-y:auto}:host([expanded]){max-width:20vw}::slotted(calcite-action-group){border-width:0px;border-bottom-width:1px;border-style:solid;border-color:var(--calcite-ui-border-3)}::slotted(calcite-action-group:last-child){border-bottom-width:0px}.action-group--bottom{-ms-flex-positive:1;flex-grow:1;-ms-flex-pack:end;justify-content:flex-end;padding-bottom:0px}";
53
32
 
54
33
  let CalciteActionBar$1 = class extends HTMLElement {
@@ -5,6 +5,7 @@
5
5
  import { HTMLElement, h, Fragment, proxyCustomElement } from '@stencil/core/internal/client';
6
6
  import { b as getSlotted } from './dom.js';
7
7
  import { S as SLOTS$1, d as defineCustomElement$5 } from './calcite-action-menu2.js';
8
+ import { c as connectConditionalSlotComponent, d as disconnectConditionalSlotComponent } from './conditionalSlot.js';
8
9
  import { d as defineCustomElement$6 } from './calcite-action2.js';
9
10
  import { d as defineCustomElement$4 } from './calcite-icon2.js';
10
11
  import { d as defineCustomElement$3 } from './calcite-loader2.js';
@@ -60,6 +61,17 @@ let CalciteActionGroup = class extends HTMLElement {
60
61
  }
61
62
  // --------------------------------------------------------------------------
62
63
  //
64
+ // Lifecycle
65
+ //
66
+ // --------------------------------------------------------------------------
67
+ connectedCallback() {
68
+ connectConditionalSlotComponent(this);
69
+ }
70
+ disconnectedCallback() {
71
+ disconnectConditionalSlotComponent(this);
72
+ }
73
+ // --------------------------------------------------------------------------
74
+ //
63
75
  // Component Methods
64
76
  //
65
77
  // --------------------------------------------------------------------------
@@ -7,6 +7,7 @@ import { b as getSlotted, f as focusElement } from './dom.js';
7
7
  import { g as getRoundRobinIndex } from './array.js';
8
8
  import { g as guid } from './guid.js';
9
9
  import { c as createObserver } from './observers.js';
10
+ import { c as connectConditionalSlotComponent, d as disconnectConditionalSlotComponent } from './conditionalSlot.js';
10
11
  import { d as defineCustomElement$5 } from './calcite-action2.js';
11
12
  import { d as defineCustomElement$4 } from './calcite-icon2.js';
12
13
  import { d as defineCustomElement$3 } from './calcite-loader2.js';
@@ -237,11 +238,13 @@ let CalciteActionMenu = class extends HTMLElement {
237
238
  var _a;
238
239
  (_a = this.mutationObserver) === null || _a === void 0 ? void 0 : _a.observe(this.el, { childList: true, subtree: true });
239
240
  this.getActions();
241
+ connectConditionalSlotComponent(this);
240
242
  }
241
243
  disconnectedCallback() {
242
244
  var _a;
243
245
  (_a = this.mutationObserver) === null || _a === void 0 ? void 0 : _a.disconnect();
244
246
  this.disconnectMenuButtonEl();
247
+ disconnectConditionalSlotComponent(this);
245
248
  }
246
249
  expandedHandler() {
247
250
  this.open = false;
@@ -5,6 +5,7 @@
5
5
  import { HTMLElement, createEvent, h, Host, proxyCustomElement } from '@stencil/core/internal/client';
6
6
  import { t as toggleChildActionText, C as CalciteExpandToggle } from './CalciteExpandToggle.js';
7
7
  import { f as focusElement, b as getSlotted } from './dom.js';
8
+ import { c as connectConditionalSlotComponent, d as disconnectConditionalSlotComponent } from './conditionalSlot.js';
8
9
  import { d as defineCustomElement$8 } from './calcite-action2.js';
9
10
  import { d as defineCustomElement$7 } from './calcite-action-group2.js';
10
11
  import { d as defineCustomElement$6 } from './calcite-action-menu2.js';
@@ -88,6 +89,12 @@ let CalciteActionPad$1 = class extends HTMLElement {
88
89
  // Lifecycle
89
90
  //
90
91
  // --------------------------------------------------------------------------
92
+ connectedCallback() {
93
+ connectConditionalSlotComponent(this);
94
+ }
95
+ disconnectedCallback() {
96
+ disconnectConditionalSlotComponent(this);
97
+ }
91
98
  componentWillLoad() {
92
99
  const { el, expandDisabled, expanded } = this;
93
100
  if (!expandDisabled) {
@@ -67,6 +67,7 @@ let CalciteAlert$1 = class extends HTMLElement {
67
67
  this.queued = false;
68
68
  this.autoDismissTimeoutId = null;
69
69
  this.trackTimer = Date.now();
70
+ this.activeTransitionProp = "opacity";
70
71
  /** close and emit the closed alert and the queue */
71
72
  this.closeAlert = () => {
72
73
  this.autoDismissTimeoutId = null;
@@ -75,10 +76,19 @@ let CalciteAlert$1 = class extends HTMLElement {
75
76
  this.queue = this.queue.filter((e) => e !== this.el);
76
77
  this.determineActiveAlert();
77
78
  this.calciteAlertSync.emit({ queue: this.queue });
78
- this.calciteAlertClose.emit({
79
- el: this.el,
80
- queue: this.queue
81
- });
79
+ };
80
+ this.transitionEnd = (event) => {
81
+ if (event.propertyName === this.activeTransitionProp) {
82
+ this.active
83
+ ? this.calciteAlertOpen.emit({
84
+ el: this.el,
85
+ queue: this.queue
86
+ })
87
+ : this.calciteAlertClose.emit({
88
+ el: this.el,
89
+ queue: this.queue
90
+ });
91
+ }
82
92
  };
83
93
  }
84
94
  watchActive() {
@@ -129,7 +139,7 @@ let CalciteAlert$1 = class extends HTMLElement {
129
139
  container: true,
130
140
  queued,
131
141
  [placement]: true
132
- } }, requestedIcon ? (h("div", { class: "alert-icon" }, h("calcite-icon", { icon: requestedIcon, scale: this.scale === "l" ? "m" : "s" }))) : null, h("div", { class: "alert-content" }, h("slot", { name: SLOTS.title }), h("slot", { name: SLOTS.message }), h("slot", { name: SLOTS.link })), queueCount, !autoDismiss ? closeButton : null, active && !queued && autoDismiss ? h("div", { class: "alert-dismiss-progress" }) : null)));
142
+ }, onTransitionEnd: this.transitionEnd }, requestedIcon ? (h("div", { class: "alert-icon" }, h("calcite-icon", { icon: requestedIcon, scale: this.scale === "l" ? "m" : "s" }))) : null, h("div", { class: "alert-content" }, h("slot", { name: SLOTS.title }), h("slot", { name: SLOTS.message }), h("slot", { name: SLOTS.link })), queueCount, !autoDismiss ? closeButton : null, active && !queued && autoDismiss ? h("div", { class: "alert-dismiss-progress" }) : null)));
133
143
  }
134
144
  // when an alert is opened or closed, update queue and determine active alert
135
145
  alertSync(event) {
@@ -188,10 +198,6 @@ let CalciteAlert$1 = class extends HTMLElement {
188
198
  openAlert() {
189
199
  window.clearTimeout(this.queueTimeout);
190
200
  this.queueTimeout = window.setTimeout(() => (this.queued = false), 300);
191
- this.calciteAlertOpen.emit({
192
- el: this.el,
193
- queue: this.queue
194
- });
195
201
  }
196
202
  get el() { return this; }
197
203
  static get watchers() { return {
@@ -5,6 +5,7 @@
5
5
  import { HTMLElement, createEvent, h, Host, proxyCustomElement } from '@stencil/core/internal/client';
6
6
  import { b as getSlotted } from './dom.js';
7
7
  import { C as CalciteHeading } from './CalciteHeading.js';
8
+ import { c as connectConditionalSlotComponent, d as disconnectConditionalSlotComponent } from './conditionalSlot.js';
8
9
  import { d as defineCustomElement$9 } from './calcite-action2.js';
9
10
  import { d as defineCustomElement$8 } from './calcite-action-menu2.js';
10
11
  import { d as defineCustomElement$7 } from './calcite-handle2.js';
@@ -105,6 +106,17 @@ let CalciteBlock$1 = class extends HTMLElement {
105
106
  }
106
107
  // --------------------------------------------------------------------------
107
108
  //
109
+ // Lifecycle
110
+ //
111
+ // --------------------------------------------------------------------------
112
+ connectedCallback() {
113
+ connectConditionalSlotComponent(this);
114
+ }
115
+ disconnectedCallback() {
116
+ disconnectConditionalSlotComponent(this);
117
+ }
118
+ // --------------------------------------------------------------------------
119
+ //
108
120
  // Render Methods
109
121
  //
110
122
  // --------------------------------------------------------------------------
@@ -118,7 +130,7 @@ let CalciteBlock$1 = class extends HTMLElement {
118
130
  const showingLoadingStatus = this.loading && !this.open;
119
131
  const statusIcon = showingLoadingStatus ? ICONS.refresh : ICONS[status];
120
132
  const hasIcon = getSlotted(el, SLOTS.icon) || statusIcon;
121
- const iconEl = !statusIcon ? (h("slot", { name: SLOTS.icon })) : (h("calcite-icon", { class: {
133
+ const iconEl = !statusIcon ? (h("slot", { key: "icon-slot", name: SLOTS.icon })) : (h("calcite-icon", { class: {
122
134
  [CSS.statusIcon]: true,
123
135
  [CSS.valid]: status == "valid",
124
136
  [CSS.invalid]: status == "invalid",
@@ -5,6 +5,7 @@
5
5
  import { HTMLElement, createEvent, h, proxyCustomElement } from '@stencil/core/internal/client';
6
6
  import { b as getSlotted } from './dom.js';
7
7
  import { g as guid } from './guid.js';
8
+ import { c as connectConditionalSlotComponent, d as disconnectConditionalSlotComponent } from './conditionalSlot.js';
8
9
  import { d as defineCustomElement$1 } from './calcite-icon2.js';
9
10
 
10
11
  const CSS = {
@@ -61,6 +62,17 @@ let CalciteChip = class extends HTMLElement {
61
62
  };
62
63
  this.guid = guid();
63
64
  }
65
+ // --------------------------------------------------------------------------
66
+ //
67
+ // Lifecycle
68
+ //
69
+ // --------------------------------------------------------------------------
70
+ connectedCallback() {
71
+ connectConditionalSlotComponent(this);
72
+ }
73
+ disconnectedCallback() {
74
+ disconnectConditionalSlotComponent(this);
75
+ }
64
76
  //--------------------------------------------------------------------------
65
77
  //
66
78
  // Public Methods
@@ -79,7 +91,7 @@ let CalciteChip = class extends HTMLElement {
79
91
  renderChipImage() {
80
92
  const { el } = this;
81
93
  const hasChipImage = getSlotted(el, SLOTS.image);
82
- return hasChipImage ? (h("div", { class: CSS.chipImageContainer }, h("slot", { name: SLOTS.image }))) : null;
94
+ return hasChipImage ? (h("div", { class: CSS.chipImageContainer, key: "image" }, h("slot", { name: SLOTS.image }))) : null;
83
95
  }
84
96
  render() {
85
97
  const iconEl = (h("calcite-icon", { class: CSS.calciteChipIcon, flipRtl: this.iconFlipRtl, icon: this.icon, scale: "s" }));
@@ -156,6 +156,11 @@ const filter = (data, value) => {
156
156
  const calciteComboboxCss = "@-webkit-keyframes in{0%{opacity:0}100%{opacity:1}}@keyframes in{0%{opacity:0}100%{opacity:1}}@-webkit-keyframes in-down{0%{opacity:0;-webkit-transform:translate3D(0, -5px, 0);transform:translate3D(0, -5px, 0)}100%{opacity:1;-webkit-transform:translate3D(0, 0, 0);transform:translate3D(0, 0, 0)}}@keyframes in-down{0%{opacity:0;-webkit-transform:translate3D(0, -5px, 0);transform:translate3D(0, -5px, 0)}100%{opacity:1;-webkit-transform:translate3D(0, 0, 0);transform:translate3D(0, 0, 0)}}@-webkit-keyframes in-up{0%{opacity:0;-webkit-transform:translate3D(0, 5px, 0);transform:translate3D(0, 5px, 0)}100%{opacity:1;-webkit-transform:translate3D(0, 0, 0);transform:translate3D(0, 0, 0)}}@keyframes in-up{0%{opacity:0;-webkit-transform:translate3D(0, 5px, 0);transform:translate3D(0, 5px, 0)}100%{opacity:1;-webkit-transform:translate3D(0, 0, 0);transform:translate3D(0, 0, 0)}}@-webkit-keyframes in-scale{0%{opacity:0;-webkit-transform:scale3D(0.95, 0.95, 1);transform:scale3D(0.95, 0.95, 1)}100%{opacity:1;-webkit-transform:scale3D(1, 1, 1);transform:scale3D(1, 1, 1)}}@keyframes in-scale{0%{opacity:0;-webkit-transform:scale3D(0.95, 0.95, 1);transform:scale3D(0.95, 0.95, 1)}100%{opacity:1;-webkit-transform:scale3D(1, 1, 1);transform:scale3D(1, 1, 1)}}:root{--calcite-animation-timing:calc(150ms * var(--calcite-internal-duration-factor));--calcite-internal-duration-factor:var(--calcite-duration-factor, 1);--calcite-internal-animation-timing-fast:calc(100ms * var(--calcite-internal-duration-factor));--calcite-internal-animation-timing-medium:calc(200ms * var(--calcite-internal-duration-factor));--calcite-internal-animation-timing-slow:calc(300ms * var(--calcite-internal-duration-factor))}.calcite-animate{opacity:0;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-duration:var(--calcite-animation-timing);animation-duration:var(--calcite-animation-timing)}.calcite-animate__in{-webkit-animation-name:in;animation-name:in}.calcite-animate__in-down{-webkit-animation-name:in-down;animation-name:in-down}.calcite-animate__in-up{-webkit-animation-name:in-up;animation-name:in-up}.calcite-animate__in-scale{-webkit-animation-name:in-scale;animation-name:in-scale}:root{--calcite-popper-transition:var(--calcite-animation-timing)}:host([hidden]){display:none}:host{position:relative;display:block}:host([disabled]){pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;opacity:0.5}:host([scale=s]){font-size:var(--calcite-font-size--2);--calcite-combobox-item-spacing-unit-l:0.5rem;--calcite-combobox-item-spacing-unit-s:0.25rem;--calcite-combobox-input-height:1.5rem}:host([scale=m]){font-size:var(--calcite-font-size--1);--calcite-combobox-item-spacing-unit-l:0.75rem;--calcite-combobox-item-spacing-unit-s:0.5rem;--calcite-combobox-input-height:2rem}:host([scale=l]){font-size:var(--calcite-font-size-0);--calcite-combobox-item-spacing-unit-l:1rem;--calcite-combobox-item-spacing-unit-s:0.75rem;--calcite-combobox-input-height:2.75rem}.wrapper{display:-ms-flexbox;display:flex;background-color:var(--calcite-ui-foreground-1);color:var(--calcite-ui-text-1);outline-offset:0;outline-color:transparent;-webkit-transition:outline-offset 100ms ease-in-out, outline-color 100ms ease-in-out;transition:outline-offset 100ms ease-in-out, outline-color 100ms ease-in-out;-webkit-box-shadow:inset 0 0 0 1px var(--calcite-ui-border-input);box-shadow:inset 0 0 0 1px var(--calcite-ui-border-input);padding:0 var(--calcite-combobox-item-spacing-unit-l) 0 var(--calcite-combobox-item-spacing-unit-l)}:host(:focus-within) .wrapper,.wrapper--active{outline:2px solid var(--calcite-ui-brand);outline-offset:-2px}.wrapper--single{padding:0 var(--calcite-combobox-item-spacing-unit-l);cursor:pointer;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.grid-input{display:-ms-flexbox;display:flex;-ms-flex-positive:1;flex-grow:1;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding:0px}.input{-ms-flex-positive:1;flex-grow:1;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-style:none;background-color:transparent;padding:0px;font-family:inherit;color:var(--calcite-ui-text-1);font-size:inherit;height:var(--calcite-combobox-input-height);line-height:var(--calcite-combobox-input-height);min-width:120px;margin-bottom:var(--calcite-combobox-item-spacing-unit-s)}.input:focus{outline:2px solid transparent;outline-offset:2px}.input--transparent{opacity:0}.input--single{margin-bottom:0px;margin-top:0px;padding:0px}.wrapper--active .input-single{cursor:text}.input--hidden{pointer-events:none;width:0px;min-width:0px;opacity:0}.input--icon{padding:0 var(--calcite-combobox-item-spacing-unit-l)}.input-wrap{display:-ms-flexbox;display:flex;-ms-flex-positive:1;flex-grow:1}.input-wrap--single{-ms-flex:1 1 auto;flex:1 1 auto;overflow:hidden}.label{pointer-events:none;display:-ms-flexbox;display:flex;max-width:100%;-ms-flex:1 1 auto;flex:1 1 auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding:0px;font-weight:var(--calcite-font-weight-normal);height:var(--calcite-combobox-input-height);line-height:var(--calcite-combobox-input-height)}.label--spaced{padding-top:0px;padding-bottom:0px;padding-left:var(--calcite-combobox-item-spacing-unit-l);padding-right:var(--calcite-combobox-item-spacing-unit-l)}.icon-end,.icon-start{display:-ms-flexbox;display:flex;width:1rem;cursor:pointer;-ms-flex-align:center;align-items:center}.icon-end{-ms-flex:none;flex:none}.popper-container{width:100%;display:block;position:absolute;z-index:900;-webkit-transform:scale(0);transform:scale(0);visibility:hidden;pointer-events:none}.popper-container .calcite-popper-anim{position:relative;z-index:1;-webkit-transition:var(--calcite-popper-transition);transition:var(--calcite-popper-transition);visibility:hidden;-webkit-transition-property:visibility, opacity, -webkit-transform;transition-property:visibility, opacity, -webkit-transform;transition-property:transform, visibility, opacity;transition-property:transform, visibility, opacity, -webkit-transform;opacity:0;-webkit-box-shadow:0 0 16px 0 rgba(0, 0, 0, 0.16);box-shadow:0 0 16px 0 rgba(0, 0, 0, 0.16);border-radius:0.25rem}.popper-container[data-popper-placement^=bottom] .calcite-popper-anim{-webkit-transform:translateY(-5px);transform:translateY(-5px)}.popper-container[data-popper-placement^=top] .calcite-popper-anim{-webkit-transform:translateY(5px);transform:translateY(5px)}.popper-container[data-popper-placement^=left] .calcite-popper-anim{-webkit-transform:translateX(5px);transform:translateX(5px)}.popper-container[data-popper-placement^=right] .calcite-popper-anim{-webkit-transform:translateX(-5px);transform:translateX(-5px)}.popper-container[data-popper-placement] .calcite-popper-anim--active{opacity:1;visibility:visible;-webkit-transform:translate(0);transform:translate(0)}.popper-container--active{pointer-events:initial;visibility:visible}.screen-readers-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;border-width:0}.list-container{max-height:100vh;overflow-y:auto;background-color:var(--calcite-ui-foreground-1);width:var(--calcite-dropdown-width)}.list{margin:0px;display:block;padding:0px}.list--hide{height:0px;overflow:hidden}.chip{margin-block:calc(var(--calcite-combobox-item-spacing-unit-s) / 2) 0;margin-inline:0 var(--calcite-combobox-item-spacing-unit-s);max-width:100%}.chip--active{background-color:var(--calcite-ui-foreground-3)}.chip:last-of-type{-webkit-margin-end:0;margin-inline-end:0}.item{display:block}::slotted(input[slot=hidden-form-input]){bottom:0 !important;left:0 !important;margin:0 !important;opacity:0 !important;outline:none !important;padding:0 !important;position:absolute !important;right:0 !important;top:0 !important;-webkit-transform:none !important;transform:none !important;-webkit-appearance:none !important;z-index:-1 !important}";
157
157
 
158
158
  const isGroup = (el) => el.tagName === ComboboxItemGroup;
159
+ const itemUidPrefix = "combobox-item-";
160
+ const chipUidPrefix = "combobox-chip-";
161
+ const labelUidPrefix = "combobox-label-";
162
+ const listboxUidPrefix = "combobox-listbox-";
163
+ const inputUidPrefix = "combobox-input-";
159
164
  let CalciteCombobox$1 = class extends HTMLElement {
160
165
  constructor() {
161
166
  super();
@@ -709,7 +714,7 @@ let CalciteCombobox$1 = class extends HTMLElement {
709
714
  const item = document.createElement(ComboboxItem);
710
715
  item.value = value;
711
716
  item.textLabel = value;
712
- item.guid = guid();
717
+ item.guid = `${chipUidPrefix}${guid()}`;
713
718
  item.selected = true;
714
719
  this.el.appendChild(item);
715
720
  this.resetText();
@@ -759,7 +764,7 @@ let CalciteCombobox$1 = class extends HTMLElement {
759
764
  focusChip() {
760
765
  var _a;
761
766
  const guid = (_a = this.selectedItems[this.activeChipIndex]) === null || _a === void 0 ? void 0 : _a.guid;
762
- const chip = this.referenceEl.querySelector(`#chip-${guid}`);
767
+ const chip = this.referenceEl.querySelector(`#${chipUidPrefix}${guid}`);
763
768
  chip === null || chip === void 0 ? void 0 : chip.setFocus();
764
769
  }
765
770
  shiftActiveItemIndex(delta) {
@@ -814,11 +819,11 @@ let CalciteCombobox$1 = class extends HTMLElement {
814
819
  const ancestors = [...getItemAncestors(item)].reverse();
815
820
  const pathLabel = [...ancestors, item].map((el) => el.textLabel);
816
821
  const label = selectionMode !== "ancestors" ? item.textLabel : pathLabel.join(" / ");
817
- return (h("calcite-chip", { "aria-label": label, class: chipClasses, dismissLabel: intlRemoveTag, dismissible: true, icon: item.icon, id: `chip-${item.guid}`, key: item.textLabel, onCalciteChipDismiss: (event) => this.calciteChipDismissHandler(event, item), scale: scale, title: label, value: item.value }, label));
822
+ return (h("calcite-chip", { class: chipClasses, dismissLabel: intlRemoveTag, dismissible: true, icon: item.icon, id: `${chipUidPrefix}${item.guid}`, key: item.textLabel, onCalciteChipDismiss: (event) => this.calciteChipDismissHandler(event, item), scale: scale, title: label, value: item.value }, label));
818
823
  });
819
824
  }
820
825
  renderInput() {
821
- const { active, disabled, placeholder, selectionMode, needsIcon, selectedItems } = this;
826
+ const { guid, active, disabled, placeholder, selectionMode, needsIcon, selectedItems } = this;
822
827
  const single = selectionMode === "single";
823
828
  const selectedItem = selectedItems[0];
824
829
  const showLabel = !active && single && !!selectedItem;
@@ -828,16 +833,16 @@ let CalciteCombobox$1 = class extends HTMLElement {
828
833
  } }, showLabel && (h("span", { class: {
829
834
  label: true,
830
835
  "label--spaced": needsIcon
831
- }, key: "label", onFocus: this.comboboxFocusHandler, tabindex: "0" }, selectedItem.textLabel)), h("input", { "aria-activedescendant": this.activeDescendant, "aria-autocomplete": "list", "aria-controls": guid, "aria-label": getLabelText(this), class: {
836
+ }, key: "label", onFocus: this.comboboxFocusHandler, tabindex: "0" }, selectedItem.textLabel)), h("input", { "aria-activedescendant": this.activeDescendant, "aria-autocomplete": "list", "aria-controls": `${listboxUidPrefix}${guid}`, "aria-label": getLabelText(this), class: {
832
837
  input: true,
833
838
  "input--single": true,
834
839
  "input--transparent": this.activeChipIndex > -1,
835
840
  "input--hidden": showLabel,
836
841
  "input--icon": single && needsIcon
837
- }, disabled: disabled, id: `${guid}-input`, key: "input", onBlur: this.comboboxBlurHandler, onFocus: this.comboboxFocusHandler, onInput: this.inputHandler, placeholder: placeholder, ref: (el) => (this.textInput = el), type: "text" })));
842
+ }, disabled: disabled, id: `${inputUidPrefix}${guid}`, key: "input", onBlur: this.comboboxBlurHandler, onFocus: this.comboboxFocusHandler, onInput: this.inputHandler, placeholder: placeholder, ref: (el) => (this.textInput = el), type: "text" })));
838
843
  }
839
844
  renderListBoxOptions() {
840
- return this.visibleItems.map((item) => (h("li", { "aria-selected": (!!item.selected).toString(), id: item.guid, role: "option", tabindex: "-1" }, item.textLabel)));
845
+ return this.visibleItems.map((item) => (h("li", { "aria-selected": (!!item.selected).toString(), id: `${itemUidPrefix}${item.guid}`, role: "option", tabindex: "-1" }, item.textLabel)));
841
846
  }
842
847
  renderPopperContainer() {
843
848
  const { active, maxScrollerHeight, setMenuEl, setListContainerEl, hideList, open } = this;
@@ -863,12 +868,11 @@ let CalciteCombobox$1 = class extends HTMLElement {
863
868
  render() {
864
869
  const { guid, open, label } = this;
865
870
  const single = this.selectionMode === "single";
866
- const labelId = `${guid}-label`;
867
- return (h(Host, { onKeyDown: this.keydownHandler }, h("div", { "aria-autocomplete": "list", "aria-expanded": open.toString(), "aria-haspopup": "listbox", "aria-labelledby": labelId, "aria-owns": guid, class: {
871
+ return (h(Host, { onKeyDown: this.keydownHandler }, h("div", { "aria-autocomplete": "list", "aria-expanded": open.toString(), "aria-haspopup": "listbox", "aria-labelledby": `${labelUidPrefix}${guid}`, "aria-owns": `${listboxUidPrefix}${guid}`, class: {
868
872
  wrapper: true,
869
873
  "wrapper--single": single || !this.selectedItems.length,
870
874
  "wrapper--active": open
871
- }, onClick: this.setFocusClick, ref: this.setReferenceEl, role: "combobox" }, h("div", { class: "grid-input" }, this.renderIconStart(), !single && this.renderChips(), h("label", { class: "screen-readers-only", htmlFor: `${guid}-input`, id: labelId }, label), this.renderInput()), this.renderIconEnd()), h("ul", { "aria-labelledby": labelId, "aria-multiselectable": "true", class: "screen-readers-only", id: guid, role: "listbox", tabIndex: -1 }, this.renderListBoxOptions()), this.renderPopperContainer(), h(HiddenFormInputSlot, { component: this })));
875
+ }, onClick: this.setFocusClick, ref: this.setReferenceEl, role: "combobox" }, h("div", { class: "grid-input" }, this.renderIconStart(), !single && this.renderChips(), h("label", { class: "screen-readers-only", htmlFor: `${inputUidPrefix}${guid}`, id: `${labelUidPrefix}${guid}` }, label), this.renderInput()), this.renderIconEnd()), h("ul", { "aria-labelledby": `${labelUidPrefix}${guid}`, "aria-multiselectable": "true", class: "screen-readers-only", id: `${listboxUidPrefix}${guid}`, role: "listbox", tabIndex: -1 }, this.renderListBoxOptions()), this.renderPopperContainer(), h(HiddenFormInputSlot, { component: this })));
872
876
  }
873
877
  get el() { return this; }
874
878
  static get watchers() { return {
@@ -20,6 +20,11 @@ let CalciteLink = class extends HTMLElement {
20
20
  //--------------------------------------------------------------------------
21
21
  /** is the link disabled */
22
22
  this.disabled = false;
23
+ /** Prompts the user to save the linked URL instead of navigating to it. Can be used with or without a value:
24
+ * Without a value, the browser will suggest a filename/extension
25
+ * See: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/a#attr-download
26
+ */
27
+ this.download = false;
23
28
  /** the node type of the rendered child element */
24
29
  this.childElType = "span";
25
30
  //--------------------------------------------------------------------------
@@ -43,13 +48,19 @@ let CalciteLink = class extends HTMLElement {
43
48
  this.childElType = this.href ? "a" : "span";
44
49
  }
45
50
  render() {
46
- const dir = getElementDir(this.el);
51
+ const { download, el } = this;
52
+ const dir = getElementDir(el);
47
53
  const iconStartEl = (h("calcite-icon", { class: "calcite-link--icon icon-start", flipRtl: this.iconFlipRtl === "start" || this.iconFlipRtl === "both", icon: this.iconStart, scale: "s" }));
48
54
  const iconEndEl = (h("calcite-icon", { class: "calcite-link--icon icon-end", flipRtl: this.iconFlipRtl === "end" || this.iconFlipRtl === "both", icon: this.iconEnd, scale: "s" }));
49
55
  const Tag = this.childElType;
50
56
  const role = this.childElType === "span" ? "link" : null;
51
57
  const tabIndex = this.disabled ? -1 : this.childElType === "span" ? 0 : null;
52
- return (h(Host, { role: "presentation" }, h(Tag, { class: { [CSS_UTILITY.rtl]: dir === "rtl" }, href: Tag === "a" && this.href, ref: this.storeTagRef, rel: Tag === "a" && this.rel, role: role, tabIndex: tabIndex, target: Tag === "a" && this.target }, this.iconStart ? iconStartEl : null, h("slot", null), this.iconEnd ? iconEndEl : null)));
58
+ return (h(Host, { role: "presentation" }, h(Tag, { class: { [CSS_UTILITY.rtl]: dir === "rtl" },
59
+ /*
60
+ When the 'download' property of type 'boolean | string' is set to true, the value is "".
61
+ This works around that issue for now.
62
+ */
63
+ download: Tag === "a" && (download === "" || download) ? download : null, href: Tag === "a" && this.href, ref: this.storeTagRef, rel: Tag === "a" && this.rel, role: role, tabIndex: tabIndex, target: Tag === "a" && this.target }, this.iconStart ? iconStartEl : null, h("slot", null), this.iconEnd ? iconEndEl : null)));
53
64
  }
54
65
  //--------------------------------------------------------------------------
55
66
  //
@@ -68,6 +79,7 @@ let CalciteLink = class extends HTMLElement {
68
79
  };
69
80
  CalciteLink = /*@__PURE__*/ proxyCustomElement(CalciteLink, [1, "calcite-link", {
70
81
  "disabled": [516],
82
+ "download": [520],
71
83
  "href": [513],
72
84
  "iconEnd": [513, "icon-end"],
73
85
  "iconFlipRtl": [513, "icon-flip-rtl"],
@@ -4,6 +4,7 @@
4
4
  */
5
5
  import { HTMLElement, h, Host, proxyCustomElement } from '@stencil/core/internal/client';
6
6
  import { b as getSlotted } from './dom.js';
7
+ import { c as connectConditionalSlotComponent, d as disconnectConditionalSlotComponent } from './conditionalSlot.js';
7
8
 
8
9
  const CSS = {
9
10
  container: "container",
@@ -48,6 +49,17 @@ let CalciteListItem$1 = class extends HTMLElement {
48
49
  }
49
50
  // --------------------------------------------------------------------------
50
51
  //
52
+ // Lifecycle
53
+ //
54
+ // --------------------------------------------------------------------------
55
+ connectedCallback() {
56
+ connectConditionalSlotComponent(this);
57
+ }
58
+ disconnectedCallback() {
59
+ disconnectConditionalSlotComponent(this);
60
+ }
61
+ // --------------------------------------------------------------------------
62
+ //
51
63
  // Public Methods
52
64
  //
53
65
  // --------------------------------------------------------------------------
@@ -5,6 +5,7 @@
5
5
  import { HTMLElement, createEvent, h, Host, proxyCustomElement } from '@stencil/core/internal/client';
6
6
  import { f as focusElement, b as getSlotted, h as ensureId, i as isCalciteFocusable } from './dom.js';
7
7
  import { c as createObserver } from './observers.js';
8
+ import { c as connectConditionalSlotComponent, d as disconnectConditionalSlotComponent } from './conditionalSlot.js';
8
9
  import { d as defineCustomElement$4 } from './calcite-icon2.js';
9
10
  import { d as defineCustomElement$3 } from './calcite-loader2.js';
10
11
  import { d as defineCustomElement$2 } from './calcite-scrim2.js';
@@ -244,11 +245,13 @@ let CalciteModal$1 = class extends HTMLElement {
244
245
  var _a;
245
246
  (_a = this.mutationObserver) === null || _a === void 0 ? void 0 : _a.observe(this.el, { childList: true, subtree: true });
246
247
  this.updateFooterVisibility();
248
+ connectConditionalSlotComponent(this);
247
249
  }
248
250
  disconnectedCallback() {
249
251
  var _a;
250
252
  this.removeOverflowHiddenClass();
251
253
  (_a = this.mutationObserver) === null || _a === void 0 ? void 0 : _a.disconnect();
254
+ disconnectConditionalSlotComponent(this);
252
255
  }
253
256
  render() {
254
257
  return (h(Host, { "aria-describedby": this.contentId, "aria-labelledby": this.titleId, "aria-modal": "true", role: "dialog" }, h("calcite-scrim", { class: CSS.scrim, onClick: this.handleOutsideClose }), this.renderStyle(), h("div", { class: "modal", onTransitionEnd: this.transitionEnd }, h("div", { "data-focus-fence": true, onFocus: this.focusLastElement, tabindex: "0" }), h("div", { class: CSS.header }, this.renderCloseButton(), h("header", { class: CSS.title }, h("slot", { name: CSS.header }))), h("div", { class: {
@@ -258,10 +261,10 @@ let CalciteModal$1 = class extends HTMLElement {
258
261
  }, ref: (el) => (this.modalContent = el) }, h("slot", { name: SLOTS.content })), this.renderFooter(), h("div", { "data-focus-fence": true, onFocus: this.focusFirstElement, tabindex: "0" }))));
259
262
  }
260
263
  renderFooter() {
261
- return this.hasFooter ? (h("div", { class: CSS.footer }, h("span", { class: CSS.back }, h("slot", { name: SLOTS.back })), h("span", { class: CSS.secondary }, h("slot", { name: SLOTS.secondary })), h("span", { class: CSS.primary }, h("slot", { name: SLOTS.primary })))) : null;
264
+ return this.hasFooter ? (h("div", { class: CSS.footer, key: "footer" }, h("span", { class: CSS.back }, h("slot", { name: SLOTS.back })), h("span", { class: CSS.secondary }, h("slot", { name: SLOTS.secondary })), h("span", { class: CSS.primary }, h("slot", { name: SLOTS.primary })))) : null;
262
265
  }
263
266
  renderCloseButton() {
264
- return !this.disableCloseButton ? (h("button", { "aria-label": this.intlClose, class: CSS.close, onClick: this.close, ref: (el) => (this.closeButtonEl = el), title: this.intlClose }, h("calcite-icon", { icon: ICONS.close, scale: this.scale === "s" ? "s" : this.scale === "m" ? "m" : this.scale === "l" ? "l" : null }))) : null;
267
+ return !this.disableCloseButton ? (h("button", { "aria-label": this.intlClose, class: CSS.close, key: "button", onClick: this.close, ref: (el) => (this.closeButtonEl = el), title: this.intlClose }, h("calcite-icon", { icon: ICONS.close, scale: this.scale === "s" ? "s" : this.scale === "m" ? "m" : this.scale === "l" ? "l" : null }))) : null;
265
268
  }
266
269
  renderStyle() {
267
270
  const hasCustomWidth = !isNaN(parseInt(`${this.width}`));
@@ -5,6 +5,7 @@
5
5
  import { HTMLElement, createEvent, h, proxyCustomElement } from '@stencil/core/internal/client';
6
6
  import { S as StatusIcons } from './interfaces.js';
7
7
  import { s as setRequestedIcon, b as getSlotted } from './dom.js';
8
+ import { c as connectConditionalSlotComponent, d as disconnectConditionalSlotComponent } from './conditionalSlot.js';
8
9
  import { d as defineCustomElement$2 } from './calcite-icon2.js';
9
10
 
10
11
  const TEXT = {
@@ -70,6 +71,12 @@ let CalciteNotice$1 = class extends HTMLElement {
70
71
  // Lifecycle
71
72
  //
72
73
  //--------------------------------------------------------------------------
74
+ connectedCallback() {
75
+ connectConditionalSlotComponent(this);
76
+ }
77
+ disconnectedCallback() {
78
+ disconnectConditionalSlotComponent(this);
79
+ }
73
80
  componentWillLoad() {
74
81
  this.requestedIcon = setRequestedIcon(StatusIcons, this.icon, this.color);
75
82
  }
@@ -6,6 +6,7 @@ import { HTMLElement, createEvent, h, Fragment, proxyCustomElement } from '@sten
6
6
  import { a as getElementDir, b as getSlotted } from './dom.js';
7
7
  import { C as CalciteHeading } from './CalciteHeading.js';
8
8
  import { S as SLOTS$1, d as defineCustomElement$7 } from './calcite-action-menu2.js';
9
+ import { c as connectConditionalSlotComponent, d as disconnectConditionalSlotComponent } from './conditionalSlot.js';
9
10
  import { d as defineCustomElement$8 } from './calcite-action2.js';
10
11
  import { d as defineCustomElement$6 } from './calcite-icon2.js';
11
12
  import { d as defineCustomElement$5 } from './calcite-loader2.js';
@@ -129,6 +130,17 @@ let CalcitePanel$1 = class extends HTMLElement {
129
130
  }
130
131
  // --------------------------------------------------------------------------
131
132
  //
133
+ // Lifecycle
134
+ //
135
+ // --------------------------------------------------------------------------
136
+ connectedCallback() {
137
+ connectConditionalSlotComponent(this);
138
+ }
139
+ disconnectedCallback() {
140
+ disconnectConditionalSlotComponent(this);
141
+ }
142
+ // --------------------------------------------------------------------------
143
+ //
132
144
  // Methods
133
145
  //
134
146
  // --------------------------------------------------------------------------
@@ -168,7 +180,7 @@ let CalcitePanel$1 = class extends HTMLElement {
168
180
  * Allows user to override the entire header-content node.
169
181
  */
170
182
  renderHeaderSlottedContent() {
171
- return (h("div", { class: CSS.headerContent, key: "header-content" }, h("slot", { name: SLOTS.headerContent })));
183
+ return (h("div", { class: CSS.headerContent, key: "slotted-header-content" }, h("slot", { name: SLOTS.headerContent })));
172
184
  }
173
185
  renderHeaderStartActions() {
174
186
  const { el } = this;
@@ -186,7 +198,7 @@ let CalcitePanel$1 = class extends HTMLElement {
186
198
  renderMenu() {
187
199
  const { el, intlOptions, menuOpen } = this;
188
200
  const hasMenuItems = getSlotted(el, SLOTS.headerMenuActions);
189
- return hasMenuItems ? (h("calcite-action-menu", { flipPlacements: ["top", "bottom"], label: intlOptions || TEXT.options, open: menuOpen, placement: "bottom-end" }, h("calcite-action", { icon: ICONS.menu, slot: SLOTS$1.trigger, text: intlOptions || TEXT.options }), h("slot", { name: SLOTS.headerMenuActions }))) : null;
201
+ return hasMenuItems ? (h("calcite-action-menu", { flipPlacements: ["top", "bottom"], key: "menu", label: intlOptions || TEXT.options, open: menuOpen, placement: "bottom-end" }, h("calcite-action", { icon: ICONS.menu, slot: SLOTS$1.trigger, text: intlOptions || TEXT.options }), h("slot", { name: SLOTS.headerMenuActions }))) : null;
190
202
  }
191
203
  renderHeaderNode() {
192
204
  const { el, showBackButton } = this;
@@ -204,18 +216,11 @@ let CalcitePanel$1 = class extends HTMLElement {
204
216
  headerMenuNode ||
205
217
  showBackButton ? (h("header", { class: CSS.header }, backButtonNode, actionsNodeStart, headerContentNode, actionsNodeEnd, headerMenuNode)) : null;
206
218
  }
207
- /**
208
- * Allows user to override the entire footer node.
209
- */
210
- renderFooterSlottedContent() {
219
+ renderFooterNode() {
211
220
  const { el } = this;
212
221
  const hasFooterSlottedContent = getSlotted(el, SLOTS.footer);
213
- return hasFooterSlottedContent ? (h("footer", { class: CSS.footer }, h("slot", { name: SLOTS.footer }))) : null;
214
- }
215
- renderFooterActions() {
216
- const { el } = this;
217
222
  const hasFooterActions = getSlotted(el, SLOTS.footerActions);
218
- return hasFooterActions ? (h("footer", { class: CSS.footer }, h("slot", { name: SLOTS.footerActions }))) : null;
223
+ return hasFooterSlottedContent || hasFooterActions ? (h("footer", { class: CSS.footer, key: "footer" }, hasFooterSlottedContent ? h("slot", { key: "footer-slot", name: SLOTS.footer }) : null, hasFooterActions ? h("slot", { key: "footer-actions-slot", name: SLOTS.footerActions }) : null)) : null;
219
224
  }
220
225
  renderContent() {
221
226
  const { el } = this;
@@ -227,7 +232,7 @@ let CalcitePanel$1 = class extends HTMLElement {
227
232
  }
228
233
  render() {
229
234
  const { dismissed, disabled, dismissible, loading, panelKeyDownHandler } = this;
230
- const panelNode = (h("article", { "aria-busy": loading.toString(), class: CSS.container, hidden: dismissible && dismissed, onKeyDown: panelKeyDownHandler, ref: this.setContainerRef, tabIndex: dismissible ? 0 : -1 }, this.renderHeaderNode(), this.renderContent(), this.renderFooterSlottedContent() || this.renderFooterActions()));
235
+ const panelNode = (h("article", { "aria-busy": loading.toString(), class: CSS.container, hidden: dismissible && dismissed, onKeyDown: panelKeyDownHandler, ref: this.setContainerRef, tabIndex: dismissible ? 0 : -1 }, this.renderHeaderNode(), this.renderContent(), this.renderFooterNode()));
231
236
  return (h(Fragment, null, loading || disabled ? h("calcite-scrim", { loading: loading }) : null, panelNode));
232
237
  }
233
238
  get el() { return this; }