@ukic/canary-web-components 3.0.0-canary.13 → 3.0.0-canary.14

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 (222) hide show
  1. package/dist/cjs/core.cjs.js +1 -1
  2. package/dist/cjs/{helpers-0e4c4fdd.js → helpers-32016c21.js} +21 -3
  3. package/dist/cjs/helpers-32016c21.js.map +1 -0
  4. package/dist/cjs/ic-button_3.cjs.entry.js +59 -1
  5. package/dist/cjs/ic-button_3.cjs.entry.js.map +1 -1
  6. package/dist/cjs/ic-card-horizontal.cjs.entry.js +1 -1
  7. package/dist/cjs/ic-data-table-title-bar.cjs.entry.js +1 -1
  8. package/dist/cjs/ic-data-table.cjs.entry.js +2 -2
  9. package/dist/cjs/ic-data-table.cjs.entry.js.map +1 -1
  10. package/dist/cjs/ic-date-input.cjs.entry.js +52 -19
  11. package/dist/cjs/ic-date-input.cjs.entry.js.map +1 -1
  12. package/dist/cjs/ic-date-picker.cjs.entry.js +15 -10
  13. package/dist/cjs/ic-date-picker.cjs.entry.js.map +1 -1
  14. package/dist/cjs/ic-empty-state_2.cjs.entry.js +1 -1
  15. package/dist/cjs/ic-menu-item.cjs.entry.js +1 -1
  16. package/dist/cjs/ic-menu-item.cjs.entry.js.map +1 -1
  17. package/dist/cjs/ic-navigation-group.cjs.entry.js +6 -3
  18. package/dist/cjs/ic-navigation-group.cjs.entry.js.map +1 -1
  19. package/dist/cjs/ic-navigation-menu.cjs.entry.js +36 -22
  20. package/dist/cjs/ic-navigation-menu.cjs.entry.js.map +1 -1
  21. package/dist/cjs/ic-pagination_4.cjs.entry.js +13 -10
  22. package/dist/cjs/ic-pagination_4.cjs.entry.js.map +1 -1
  23. package/dist/cjs/ic-popover-menu.cjs.entry.js +5 -4
  24. package/dist/cjs/ic-popover-menu.cjs.entry.js.map +1 -1
  25. package/dist/cjs/ic-side-navigation.cjs.entry.js +7 -4
  26. package/dist/cjs/ic-side-navigation.cjs.entry.js.map +1 -1
  27. package/dist/cjs/ic-skip-link.cjs.entry.js +10 -9
  28. package/dist/cjs/ic-skip-link.cjs.entry.js.map +1 -1
  29. package/dist/cjs/ic-status-tag.cjs.entry.js +1 -1
  30. package/dist/cjs/ic-status-tag.cjs.entry.js.map +1 -1
  31. package/dist/cjs/ic-step.cjs.entry.js +13 -12
  32. package/dist/cjs/ic-step.cjs.entry.js.map +1 -1
  33. package/dist/cjs/ic-toast.cjs.entry.js +3 -3
  34. package/dist/cjs/ic-toast.cjs.entry.js.map +1 -1
  35. package/dist/cjs/ic-tree-item.cjs.entry.js +29 -8
  36. package/dist/cjs/ic-tree-item.cjs.entry.js.map +1 -1
  37. package/dist/cjs/ic-tree-view.cjs.entry.js +113 -12
  38. package/dist/cjs/ic-tree-view.cjs.entry.js.map +1 -1
  39. package/dist/cjs/loader.cjs.js +1 -1
  40. package/dist/collection/components/ic-data-table/ic-data-table.css +3 -2
  41. package/dist/collection/components/ic-date-input/ic-date-input.js +83 -24
  42. package/dist/collection/components/ic-date-input/ic-date-input.js.map +1 -1
  43. package/dist/collection/components/ic-date-input/ic-date-input.stories.js +18 -0
  44. package/dist/collection/components/ic-date-input/ic-date-input.stories.js.map +1 -1
  45. package/dist/collection/components/ic-date-picker/ic-date-picker.js +34 -9
  46. package/dist/collection/components/ic-date-picker/ic-date-picker.js.map +1 -1
  47. package/dist/collection/components/ic-date-picker/ic-date-picker.stories.js +9 -1
  48. package/dist/collection/components/ic-date-picker/ic-date-picker.stories.js.map +1 -1
  49. package/dist/collection/components/ic-date-picker/story-data.js +16 -1
  50. package/dist/collection/components/ic-date-picker/story-data.js.map +1 -1
  51. package/dist/collection/components/ic-tree-item/ic-tree-item.js +50 -7
  52. package/dist/collection/components/ic-tree-item/ic-tree-item.js.map +1 -1
  53. package/dist/collection/components/ic-tree-view/ic-tree-view.js +146 -16
  54. package/dist/collection/components/ic-tree-view/ic-tree-view.js.map +1 -1
  55. package/dist/collection/components/ic-tree-view/ic-tree-view.stories.js +384 -12
  56. package/dist/collection/components/ic-tree-view/ic-tree-view.stories.js.map +1 -1
  57. package/dist/collection/components/ic-tree-view/ic-tree-view.types.js +2 -0
  58. package/dist/collection/components/ic-tree-view/ic-tree-view.types.js.map +1 -0
  59. package/dist/collection/utils/helpers.js.map +1 -1
  60. package/dist/components/helpers.js +1 -1
  61. package/dist/components/helpers2.js +19 -3
  62. package/dist/components/helpers2.js.map +1 -1
  63. package/dist/components/ic-button2.js +59 -1
  64. package/dist/components/ic-button2.js.map +1 -1
  65. package/dist/components/ic-data-table.js +1 -1
  66. package/dist/components/ic-data-table.js.map +1 -1
  67. package/dist/components/ic-date-input2.js +58 -21
  68. package/dist/components/ic-date-input2.js.map +1 -1
  69. package/dist/components/ic-date-picker.js +15 -9
  70. package/dist/components/ic-date-picker.js.map +1 -1
  71. package/dist/components/ic-menu-item2.js +1 -1
  72. package/dist/components/ic-menu-item2.js.map +1 -1
  73. package/dist/components/ic-navigation-group.js +6 -3
  74. package/dist/components/ic-navigation-group.js.map +1 -1
  75. package/dist/components/ic-navigation-menu2.js +37 -23
  76. package/dist/components/ic-navigation-menu2.js.map +1 -1
  77. package/dist/components/ic-popover-menu.js +5 -4
  78. package/dist/components/ic-popover-menu.js.map +1 -1
  79. package/dist/components/ic-select2.js +13 -10
  80. package/dist/components/ic-select2.js.map +1 -1
  81. package/dist/components/ic-side-navigation.js +7 -4
  82. package/dist/components/ic-side-navigation.js.map +1 -1
  83. package/dist/components/ic-skip-link.js +10 -9
  84. package/dist/components/ic-skip-link.js.map +1 -1
  85. package/dist/components/ic-status-tag.js +1 -1
  86. package/dist/components/ic-status-tag.js.map +1 -1
  87. package/dist/components/ic-step.js +13 -12
  88. package/dist/components/ic-step.js.map +1 -1
  89. package/dist/components/ic-toast.js +4 -4
  90. package/dist/components/ic-toast.js.map +1 -1
  91. package/dist/components/ic-top-navigation.js +1 -1
  92. package/dist/components/ic-tree-item.js +29 -7
  93. package/dist/components/ic-tree-item.js.map +1 -1
  94. package/dist/components/ic-tree-view.js +119 -14
  95. package/dist/components/ic-tree-view.js.map +1 -1
  96. package/dist/core/core.css +35 -29
  97. package/dist/core/core.esm.js +1 -1
  98. package/dist/core/core.esm.js.map +1 -1
  99. package/dist/core/p-0ad472d0.entry.js +2 -0
  100. package/dist/core/p-0ad472d0.entry.js.map +1 -0
  101. package/dist/core/{p-fde3bbb2.entry.js → p-0c97a53d.entry.js} +2 -2
  102. package/dist/core/p-250bf568.entry.js +2 -0
  103. package/dist/core/p-250bf568.entry.js.map +1 -0
  104. package/dist/core/{p-c6f1e205.entry.js → p-48163a2a.entry.js} +2 -2
  105. package/dist/core/p-48163a2a.entry.js.map +1 -0
  106. package/dist/core/{p-95f2c59a.entry.js → p-4f00aa91.entry.js} +2 -2
  107. package/dist/core/{p-95f2c59a.entry.js.map → p-4f00aa91.entry.js.map} +1 -1
  108. package/dist/core/p-54e01fad.entry.js +2 -0
  109. package/dist/core/p-54e01fad.entry.js.map +1 -0
  110. package/dist/core/p-5d85bd73.entry.js +2 -0
  111. package/dist/core/p-5d85bd73.entry.js.map +1 -0
  112. package/dist/core/p-6040a025.entry.js +2 -0
  113. package/dist/core/p-6040a025.entry.js.map +1 -0
  114. package/dist/core/p-62f7f2bd.entry.js +2 -0
  115. package/dist/core/p-62f7f2bd.entry.js.map +1 -0
  116. package/dist/core/p-72310da8.js +2 -0
  117. package/dist/core/p-72310da8.js.map +1 -0
  118. package/dist/core/p-762a4d7c.entry.js +2 -0
  119. package/dist/core/p-762a4d7c.entry.js.map +1 -0
  120. package/dist/core/p-836d302a.entry.js +2 -0
  121. package/dist/core/p-836d302a.entry.js.map +1 -0
  122. package/dist/core/p-881bb783.entry.js +2 -0
  123. package/dist/core/p-881bb783.entry.js.map +1 -0
  124. package/dist/core/{p-3dc4e128.entry.js → p-895a3eb1.entry.js} +2 -2
  125. package/dist/core/p-9a46b1e5.entry.js +2 -0
  126. package/dist/core/p-9a46b1e5.entry.js.map +1 -0
  127. package/dist/core/{p-67f3bf1a.entry.js → p-a13dc5ba.entry.js} +2 -2
  128. package/dist/core/{p-e86c1c95.entry.js → p-c0687222.entry.js} +2 -2
  129. package/dist/core/p-c0687222.entry.js.map +1 -0
  130. package/dist/core/p-c4f7e479.entry.js +2 -0
  131. package/dist/core/p-c4f7e479.entry.js.map +1 -0
  132. package/dist/core/{p-f6013934.entry.js → p-ef25bb6d.entry.js} +2 -2
  133. package/dist/core/p-ef25bb6d.entry.js.map +1 -0
  134. package/dist/core/p-fb11ce9b.entry.js +2 -0
  135. package/dist/core/p-fb11ce9b.entry.js.map +1 -0
  136. package/dist/esm/core.js +1 -1
  137. package/dist/esm/{helpers-4e38ba2b.js → helpers-5479985d.js} +20 -4
  138. package/dist/esm/helpers-5479985d.js.map +1 -0
  139. package/dist/esm/ic-button_3.entry.js +59 -1
  140. package/dist/esm/ic-button_3.entry.js.map +1 -1
  141. package/dist/esm/ic-card-horizontal.entry.js +1 -1
  142. package/dist/esm/ic-data-table-title-bar.entry.js +1 -1
  143. package/dist/esm/ic-data-table.entry.js +2 -2
  144. package/dist/esm/ic-data-table.entry.js.map +1 -1
  145. package/dist/esm/ic-date-input.entry.js +52 -19
  146. package/dist/esm/ic-date-input.entry.js.map +1 -1
  147. package/dist/esm/ic-date-picker.entry.js +15 -10
  148. package/dist/esm/ic-date-picker.entry.js.map +1 -1
  149. package/dist/esm/ic-empty-state_2.entry.js +1 -1
  150. package/dist/esm/ic-menu-item.entry.js +1 -1
  151. package/dist/esm/ic-menu-item.entry.js.map +1 -1
  152. package/dist/esm/ic-navigation-group.entry.js +6 -3
  153. package/dist/esm/ic-navigation-group.entry.js.map +1 -1
  154. package/dist/esm/ic-navigation-menu.entry.js +37 -23
  155. package/dist/esm/ic-navigation-menu.entry.js.map +1 -1
  156. package/dist/esm/ic-pagination_4.entry.js +13 -10
  157. package/dist/esm/ic-pagination_4.entry.js.map +1 -1
  158. package/dist/esm/ic-popover-menu.entry.js +5 -4
  159. package/dist/esm/ic-popover-menu.entry.js.map +1 -1
  160. package/dist/esm/ic-side-navigation.entry.js +7 -4
  161. package/dist/esm/ic-side-navigation.entry.js.map +1 -1
  162. package/dist/esm/ic-skip-link.entry.js +10 -9
  163. package/dist/esm/ic-skip-link.entry.js.map +1 -1
  164. package/dist/esm/ic-status-tag.entry.js +1 -1
  165. package/dist/esm/ic-status-tag.entry.js.map +1 -1
  166. package/dist/esm/ic-step.entry.js +13 -12
  167. package/dist/esm/ic-step.entry.js.map +1 -1
  168. package/dist/esm/ic-toast.entry.js +3 -3
  169. package/dist/esm/ic-toast.entry.js.map +1 -1
  170. package/dist/esm/ic-tree-item.entry.js +29 -8
  171. package/dist/esm/ic-tree-item.entry.js.map +1 -1
  172. package/dist/esm/ic-tree-view.entry.js +113 -12
  173. package/dist/esm/ic-tree-view.entry.js.map +1 -1
  174. package/dist/esm/loader.js +1 -1
  175. package/dist/types/components/ic-date-input/ic-date-input.d.ts +15 -4
  176. package/dist/types/components/ic-date-input/ic-date-input.stories.d.ts +6 -0
  177. package/dist/types/components/ic-date-picker/ic-date-picker.d.ts +4 -0
  178. package/dist/types/components/ic-date-picker/ic-date-picker.stories.d.ts +8 -0
  179. package/dist/types/components/ic-date-picker/story-data.d.ts +1 -0
  180. package/dist/types/components/ic-tree-item/ic-tree-item.d.ts +6 -0
  181. package/dist/types/components/ic-tree-view/ic-tree-view.d.ts +17 -0
  182. package/dist/types/components/ic-tree-view/ic-tree-view.stories.d.ts +91 -13
  183. package/dist/types/components/ic-tree-view/ic-tree-view.types.d.ts +12 -0
  184. package/dist/types/components.d.ts +39 -6
  185. package/dist/types/utils/helpers.d.ts +2 -2
  186. package/hydrate/index.js +449 -184
  187. package/hydrate/index.mjs +449 -184
  188. package/package.json +3 -3
  189. package/dist/cjs/helpers-0e4c4fdd.js.map +0 -1
  190. package/dist/core/p-44ffa951.entry.js +0 -2
  191. package/dist/core/p-44ffa951.entry.js.map +0 -1
  192. package/dist/core/p-47962514.entry.js +0 -2
  193. package/dist/core/p-47962514.entry.js.map +0 -1
  194. package/dist/core/p-5329e478.entry.js +0 -2
  195. package/dist/core/p-5329e478.entry.js.map +0 -1
  196. package/dist/core/p-5b2a7c1a.entry.js +0 -2
  197. package/dist/core/p-5b2a7c1a.entry.js.map +0 -1
  198. package/dist/core/p-8c4f212a.entry.js +0 -2
  199. package/dist/core/p-8c4f212a.entry.js.map +0 -1
  200. package/dist/core/p-9265efef.entry.js +0 -2
  201. package/dist/core/p-9265efef.entry.js.map +0 -1
  202. package/dist/core/p-a35cdfc3.entry.js +0 -2
  203. package/dist/core/p-a35cdfc3.entry.js.map +0 -1
  204. package/dist/core/p-ac74cdac.entry.js +0 -2
  205. package/dist/core/p-ac74cdac.entry.js.map +0 -1
  206. package/dist/core/p-ad3e543e.entry.js +0 -2
  207. package/dist/core/p-ad3e543e.entry.js.map +0 -1
  208. package/dist/core/p-ae2bae87.entry.js +0 -2
  209. package/dist/core/p-ae2bae87.entry.js.map +0 -1
  210. package/dist/core/p-afde50b8.js +0 -2
  211. package/dist/core/p-afde50b8.js.map +0 -1
  212. package/dist/core/p-b84213d1.entry.js +0 -2
  213. package/dist/core/p-b84213d1.entry.js.map +0 -1
  214. package/dist/core/p-c6f1e205.entry.js.map +0 -1
  215. package/dist/core/p-cd59dc16.entry.js +0 -2
  216. package/dist/core/p-cd59dc16.entry.js.map +0 -1
  217. package/dist/core/p-e86c1c95.entry.js.map +0 -1
  218. package/dist/core/p-f6013934.entry.js.map +0 -1
  219. package/dist/esm/helpers-4e38ba2b.js.map +0 -1
  220. /package/dist/core/{p-fde3bbb2.entry.js.map → p-0c97a53d.entry.js.map} +0 -0
  221. /package/dist/core/{p-3dc4e128.entry.js.map → p-895a3eb1.entry.js.map} +0 -0
  222. /package/dist/core/{p-67f3bf1a.entry.js.map → p-a13dc5ba.entry.js.map} +0 -0
@@ -1,11 +1,23 @@
1
1
  import { proxyCustomElement, HTMLElement, h, Host } from '@stencil/core/internal/client';
2
- import { z as isPropDefined, i as isSlotUsed, a as renderDynamicChildSlots } from './helpers2.js';
2
+ import { z as getCurrentDeviceSize, D as DEVICE_SIZES, A as isPropDefined, i as isSlotUsed, h as checkResizeObserver, a as renderDynamicChildSlots } from './helpers2.js';
3
3
  import { d as defineCustomElement$3 } from './ic-tooltip2.js';
4
4
  import { d as defineCustomElement$2 } from './ic-typography2.js';
5
5
 
6
6
  const icTreeViewCss = ":host{display:block;width:var(--tree-view-width, 100%);background-color:var(--ic-tree-view-background)}:host .heading-area-container{border-bottom:var(--ic-space-1px) solid var(--ic-tree-view-divider);display:flex;align-items:center;min-height:calc(\n var(--ic-space-xl) + var(--ic-space-xs) - var(--ic-space-1px)\n );padding:0 var(--ic-space-xs);--ic-typography-color:var(--ic-tree-view-text)}:host(.ic-tree-view-small) .heading-area-container{min-height:calc(var(--ic-space-xl) - var(--ic-space-1px))}:host(.ic-tree-view-large) .heading-area-container{min-height:calc(var(--ic-space-xxl) - var(--ic-space-1px))}:host(.ic-tree-view-truncate) .heading-area-container{height:calc(var(--ic-space-xl) + var(--ic-space-xs) - var(--ic-space-1px))}:host(.ic-tree-view-truncate.ic-tree-view-small) .heading-area-container{height:calc(var(--ic-space-xl) - var(--ic-space-1px))}:host(.ic-tree-view-truncate.ic-tree-view-large) .heading-area-container{height:calc(var(--ic-space-xxl) - var(--ic-space-1px))}.icon-container{width:var(--ic-space-lg);min-width:var(--ic-space-lg);height:var(--ic-space-lg);margin:0 var(--ic-space-xs) 0 0}:host(.ic-tree-view-small) .icon-container{margin:0 var(--ic-space-xxs) 0 0}.ic-text-overflow{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.ic-tooltip-overflow{overflow:hidden}.tree-view-header.with-padding{padding-right:var(--ic-space-xs)}.tree-items-container-hidden{visibility:hidden}::slotted([slot=\"icon\"]){fill:var(--ic-tree-view-icon)}@media (forced-colors: active){::slotted([slot=\"icon\"]){fill:currentcolor}}";
7
7
  const IcTreeViewStyle0 = icTreeViewCss;
8
8
 
9
+ var __rest = (undefined && undefined.__rest) || function (s, e) {
10
+ var t = {};
11
+ for (var p in s)
12
+ if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
13
+ t[p] = s[p];
14
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
15
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
16
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
17
+ t[p[i]] = s[p[i]];
18
+ }
19
+ return t;
20
+ };
9
21
  let treeViewIds = 0;
10
22
  const TreeView = /*@__PURE__*/ proxyCustomElement(class TreeView extends HTMLElement {
11
23
  constructor() {
@@ -16,6 +28,9 @@ const TreeView = /*@__PURE__*/ proxyCustomElement(class TreeView extends HTMLEle
16
28
  this.treeItemTag = "IC-TREE-ITEM";
17
29
  this.hostMutationObserver = null;
18
30
  this.isLoaded = false;
31
+ this.resizeObserver = null;
32
+ this.TOOLTIP = "ic-tooltip";
33
+ this.smallDevice = false;
19
34
  /**
20
35
  * If `true`, tree items will have inset focus.
21
36
  */
@@ -32,14 +47,32 @@ const TreeView = /*@__PURE__*/ proxyCustomElement(class TreeView extends HTMLEle
32
47
  * Sets the theme color to the dark or light theme color. "inherit" will set the color based on the system settings or ic-theme component.
33
48
  */
34
49
  this.theme = "inherit";
50
+ /**
51
+ * The content within the tree view tree items. This will take precedence over slotted content.
52
+ * */
53
+ this.treeItemData = [];
35
54
  /**
36
55
  * If `true`, the tree view heading will be truncated instead of text wrapping.
56
+ * When used on small devices, this prop will be overridden and headings will be set to text-wrap.
37
57
  */
38
58
  this.truncateHeading = false;
39
59
  /**
40
60
  * If `true`, tree items will be truncated, unless they are individually overridden.
61
+ * When used on small devices, this prop will be overridden and tree-items will be set to text-wrap.
41
62
  */
42
63
  this.truncateTreeItems = false;
64
+ this.runResizeObserver = () => {
65
+ this.resizeObserver = new ResizeObserver(() => {
66
+ const isSmallDevice = getCurrentDeviceSize() <= DEVICE_SIZES.S;
67
+ if (this.smallDevice !== isSmallDevice)
68
+ this.smallDevice = isSmallDevice;
69
+ });
70
+ this.resizeObserver.observe(document.body);
71
+ };
72
+ this.removeTruncation = () => {
73
+ this.truncateHeading = undefined;
74
+ this.truncateTreeItems = undefined;
75
+ };
43
76
  this.handleKeyDown = (event) => {
44
77
  var _a;
45
78
  const focussedChild = this.treeItems.indexOf(this.treeItems.filter((el) => el === document.activeElement)[0]);
@@ -128,7 +161,7 @@ const TreeView = /*@__PURE__*/ proxyCustomElement(class TreeView extends HTMLEle
128
161
  };
129
162
  this.truncateTreeViewHeading = () => {
130
163
  const typographyEl = this.el.shadowRoot.querySelector(".tree-view-header");
131
- const tooltip = typographyEl === null || typographyEl === void 0 ? void 0 : typographyEl.closest("ic-tooltip");
164
+ const tooltip = typographyEl === null || typographyEl === void 0 ? void 0 : typographyEl.closest(this.TOOLTIP);
132
165
  const headingContainer = this.el.shadowRoot.querySelector(".heading-area-container");
133
166
  if ((typographyEl === null || typographyEl === void 0 ? void 0 : typographyEl.scrollHeight) > (headingContainer === null || headingContainer === void 0 ? void 0 : headingContainer.clientHeight)) {
134
167
  typographyEl.classList.add("ic-text-overflow");
@@ -143,6 +176,16 @@ const TreeView = /*@__PURE__*/ proxyCustomElement(class TreeView extends HTMLEle
143
176
  }
144
177
  }
145
178
  };
179
+ this.removeHeadingTruncation = () => {
180
+ const typographyEl = this.el.shadowRoot.querySelector(".tree-view-header");
181
+ const tooltipEl = typographyEl === null || typographyEl === void 0 ? void 0 : typographyEl.closest(this.TOOLTIP);
182
+ if (tooltipEl) {
183
+ typographyEl.classList.remove("ic-text-overflow");
184
+ this.el.shadowRoot
185
+ .querySelector(".heading-area-container")
186
+ .replaceChild(typographyEl, tooltipEl);
187
+ }
188
+ };
146
189
  this.isHeadingDefined = () => isPropDefined(this.heading) && this.heading !== null;
147
190
  this.hasHeadingAreaContent = () => {
148
191
  return (isSlotUsed(this.el, "heading") ||
@@ -150,6 +193,17 @@ const TreeView = /*@__PURE__*/ proxyCustomElement(class TreeView extends HTMLEle
150
193
  isSlotUsed(this.el, "icon"));
151
194
  };
152
195
  }
196
+ watchSmallDeviceHandler() {
197
+ if (this.smallDevice) {
198
+ this.previousTruncateHeading = this.truncateHeading;
199
+ this.previousTruncateTreeItems = this.truncateTreeItems;
200
+ this.removeTruncation();
201
+ }
202
+ else {
203
+ this.truncateHeading = this.previousTruncateHeading;
204
+ this.truncateTreeItems = this.previousTruncateTreeItems;
205
+ }
206
+ }
153
207
  watchFocusInsetHandler() {
154
208
  this.treeItems.forEach((treeItem) => {
155
209
  treeItem.focusInset = this.focusInset;
@@ -165,27 +219,44 @@ const TreeView = /*@__PURE__*/ proxyCustomElement(class TreeView extends HTMLEle
165
219
  treeItem.theme = this.theme;
166
220
  });
167
221
  }
222
+ watchTreeItemOptionsHandler() {
223
+ this.setTreeItems();
224
+ }
168
225
  watchTruncateTreeItemsHandler() {
169
226
  this.treeItems.forEach((treeItem) => {
170
- if (treeItem.truncateTreeItem === undefined) {
227
+ if (this.smallDevice) {
228
+ treeItem.previousTruncateTreeItem = treeItem.truncateTreeItem;
171
229
  treeItem.truncateTreeItem = this.truncateTreeItems;
172
230
  }
231
+ else {
232
+ treeItem.truncateTreeItem = treeItem.previousTruncateTreeItem;
233
+ }
173
234
  });
174
235
  }
175
236
  disconnectedCallback() {
176
- var _a, _b;
237
+ var _a, _b, _c;
177
238
  (_a = this.el) === null || _a === void 0 ? void 0 : _a.removeEventListener("slotchange", this.setTreeItems);
178
239
  (_b = this.hostMutationObserver) === null || _b === void 0 ? void 0 : _b.disconnect();
240
+ (_c = this.resizeObserver) === null || _c === void 0 ? void 0 : _c.disconnect();
179
241
  }
180
242
  componentWillLoad() {
181
243
  this.setTreeItems();
244
+ this.previousTruncateHeading = this.truncateHeading;
245
+ this.previousTruncateTreeItems = this.truncateTreeItems;
246
+ checkResizeObserver(this.runResizeObserver);
182
247
  this.watchSizeHandler();
183
248
  this.watchFocusInsetHandler();
184
249
  this.watchThemeHandler();
185
- this.watchTruncateTreeItemsHandler();
250
+ this.treeItems.forEach((treeItem) => {
251
+ if (treeItem.truncateTreeItem === undefined) {
252
+ treeItem.truncateTreeItem = this.truncateTreeItems;
253
+ }
254
+ });
186
255
  }
187
256
  componentDidRender() {
188
- this.truncateHeading && this.truncateTreeViewHeading();
257
+ this.truncateHeading
258
+ ? this.truncateTreeViewHeading()
259
+ : this.removeHeadingTruncation();
189
260
  }
190
261
  componentDidLoad() {
191
262
  this.addSlotChangeListener();
@@ -204,33 +275,63 @@ const TreeView = /*@__PURE__*/ proxyCustomElement(class TreeView extends HTMLEle
204
275
  }
205
276
  getAllTreeItems(element) {
206
277
  const treeItems = [];
207
- const collectTreeItems = (el) => {
278
+ const collectTreeItemsFromSlottedContent = (el) => {
208
279
  Array.from(el.children).forEach((child) => {
209
280
  if (child.tagName === this.treeItemTag) {
210
281
  treeItems.push(child);
211
282
  }
212
- collectTreeItems(child);
283
+ collectTreeItemsFromSlottedContent(child);
284
+ });
285
+ };
286
+ const collectTreeItemsFromData = (items, parentElement) => {
287
+ Array.from(parentElement.children).forEach((child) => {
288
+ if (child.tagName === this.treeItemTag) {
289
+ parentElement.removeChild(child);
290
+ }
291
+ });
292
+ items.forEach((item) => {
293
+ const treeItem = document.createElement(this.treeItemTag);
294
+ const { children, icon } = item, props = __rest(item, ["children", "icon"]);
295
+ Object.assign(treeItem, props);
296
+ if (icon) {
297
+ const iconSlot = document.createElement("div");
298
+ iconSlot.setAttribute("slot", "icon");
299
+ iconSlot.innerHTML = icon;
300
+ treeItem.appendChild(iconSlot);
301
+ }
302
+ parentElement.appendChild(treeItem);
303
+ treeItems.push(treeItem);
304
+ if (children && children.length > 0) {
305
+ collectTreeItemsFromData(children, treeItem);
306
+ }
213
307
  });
214
308
  };
215
- collectTreeItems(element);
309
+ if (this.treeItemData.length > 0) {
310
+ collectTreeItemsFromData(this.treeItemData, element);
311
+ }
312
+ else {
313
+ collectTreeItemsFromSlottedContent(element);
314
+ }
216
315
  return treeItems;
217
316
  }
218
317
  render() {
219
318
  const { heading, isLoaded, size, theme, truncateHeading } = this;
220
- return (h(Host, { key: 'e0979a6b323b02bc65afceea69ee953527d269f1', "context-id": this.treeViewId, class: {
319
+ return (h(Host, { key: '43c3dd9cb9f888c4033088087fdce4829559f03f', "context-id": this.treeViewId, class: {
221
320
  [`ic-tree-view-${size}`]: size !== "medium",
222
321
  [`ic-theme-${theme}`]: theme !== "inherit",
223
322
  "ic-tree-view-truncate": truncateHeading,
224
- }, onKeyDown: this.handleKeyDown, "aria-label": this.isHeadingDefined() ? heading : null }, this.hasHeadingAreaContent() && (h("div", { key: 'b72efd1f1be26cd539fac41f436deda54eb4b6ed', class: "heading-area-container" }, isSlotUsed(this.el, "icon") && (h("div", { key: 'e3d21bac85aa59bd1adabd18c20a9c7afd20ccb4', class: "icon-container" }, h("slot", { key: '972af4222049f8b197832a42f3620f43544215d1', name: "icon" }))), h("ic-typography", { key: '905866b6d0606c26b6910c9b725f0ff66948f069', variant: "subtitle-large", class: {
323
+ }, onKeyDown: this.handleKeyDown, "aria-label": this.isHeadingDefined() ? heading : null }, this.hasHeadingAreaContent() && (h("div", { key: '759c1432800d9dd26b1d9ce720c9626e41408f2f', class: "heading-area-container" }, isSlotUsed(this.el, "icon") && (h("div", { key: '3c239ffde40795dcf3f47b12c5649906a6198970', class: "icon-container" }, h("slot", { key: 'e86df51c31b2b0deea7c484bceacec0f593db42c', name: "icon" }))), h("ic-typography", { key: 'a54ae6d1eb99029f5dda14f0118519aed971b6d1', variant: "subtitle-large", class: {
225
324
  "tree-view-header": true,
226
325
  "with-padding": this.truncateHeading && !isLoaded,
227
- } }, isSlotUsed(this.el, "heading") ? (h("slot", { name: "heading" })) : (heading)))), h("slot", { key: '4d4337a008d71ca0be19f05510539480eb7de290' })));
326
+ } }, isSlotUsed(this.el, "heading") ? (h("slot", { name: "heading" })) : (heading)))), h("slot", { key: '154c96cfb4a0c93da02b53308fe6b8871ec4144b' })));
228
327
  }
229
328
  get el() { return this; }
230
329
  static get watchers() { return {
330
+ "smallDevice": ["watchSmallDeviceHandler"],
231
331
  "focusInset": ["watchFocusInsetHandler"],
232
332
  "size": ["watchSizeHandler"],
233
333
  "theme": ["watchThemeHandler"],
334
+ "treeItemData": ["watchTreeItemOptionsHandler"],
234
335
  "truncateTreeItems": ["watchTruncateTreeItemsHandler"]
235
336
  }; }
236
337
  static get style() { return IcTreeViewStyle0; }
@@ -239,13 +340,17 @@ const TreeView = /*@__PURE__*/ proxyCustomElement(class TreeView extends HTMLEle
239
340
  "heading": [1],
240
341
  "size": [1],
241
342
  "theme": [1],
242
- "truncateHeading": [4, "truncate-heading"],
243
- "truncateTreeItems": [4, "truncate-tree-items"],
343
+ "treeItemData": [16],
344
+ "truncateHeading": [1028, "truncate-heading"],
345
+ "truncateTreeItems": [1028, "truncate-tree-items"],
346
+ "smallDevice": [32],
244
347
  "treeItems": [32]
245
348
  }, [[0, "icTreeItemSelected", "handleTreeItemSelected"]], {
349
+ "smallDevice": ["watchSmallDeviceHandler"],
246
350
  "focusInset": ["watchFocusInsetHandler"],
247
351
  "size": ["watchSizeHandler"],
248
352
  "theme": ["watchThemeHandler"],
353
+ "treeItemData": ["watchTreeItemOptionsHandler"],
249
354
  "truncateTreeItems": ["watchTruncateTreeItemsHandler"]
250
355
  }]);
251
356
  function defineCustomElement$1() {
@@ -1 +1 @@
1
- {"file":"ic-tree-view.js","mappings":"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","names":[],"sources":["src/components/ic-tree-view/ic-tree-view.css?tag=ic-tree-view&encapsulation=shadow","src/components/ic-tree-view/ic-tree-view.tsx"],"sourcesContent":["/**\n* @prop --tree-view-width: Width of the tree view\n*/\n\n:host {\n display: block;\n width: var(--tree-view-width, 100%);\n background-color: var(--ic-tree-view-background);\n}\n\n:host .heading-area-container {\n border-bottom: var(--ic-space-1px) solid var(--ic-tree-view-divider);\n display: flex;\n align-items: center;\n min-height: calc(\n var(--ic-space-xl) + var(--ic-space-xs) - var(--ic-space-1px)\n );\n padding: 0 var(--ic-space-xs);\n\n --ic-typography-color: var(--ic-tree-view-text);\n}\n\n:host(.ic-tree-view-small) .heading-area-container {\n min-height: calc(var(--ic-space-xl) - var(--ic-space-1px));\n}\n\n:host(.ic-tree-view-large) .heading-area-container {\n min-height: calc(var(--ic-space-xxl) - var(--ic-space-1px));\n}\n\n:host(.ic-tree-view-truncate) .heading-area-container {\n height: calc(var(--ic-space-xl) + var(--ic-space-xs) - var(--ic-space-1px));\n}\n\n:host(.ic-tree-view-truncate.ic-tree-view-small) .heading-area-container {\n height: calc(var(--ic-space-xl) - var(--ic-space-1px));\n}\n\n:host(.ic-tree-view-truncate.ic-tree-view-large) .heading-area-container {\n height: calc(var(--ic-space-xxl) - var(--ic-space-1px));\n}\n\n.icon-container {\n width: var(--ic-space-lg);\n min-width: var(--ic-space-lg);\n height: var(--ic-space-lg);\n margin: 0 var(--ic-space-xs) 0 0;\n}\n\n:host(.ic-tree-view-small) .icon-container {\n margin: 0 var(--ic-space-xxs) 0 0;\n}\n\n.ic-text-overflow {\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n}\n\n.ic-tooltip-overflow {\n overflow: hidden;\n}\n\n/* Ensures truncation works - accounts for text width increase as component hydrates */\n.tree-view-header.with-padding {\n padding-right: var(--ic-space-xs);\n}\n\n.tree-items-container-hidden {\n visibility: hidden;\n}\n\n::slotted([slot=\"icon\"]) {\n fill: var(--ic-tree-view-icon);\n}\n\n/** High Contrast **/\n@media (forced-colors: active) {\n ::slotted([slot=\"icon\"]) {\n fill: currentcolor;\n }\n}\n","import {\n Component,\n h,\n Prop,\n Element,\n Host,\n Watch,\n State,\n Listen,\n} from \"@stencil/core\";\nimport { IcSizes, IcThemeMode } from \"../../utils/types\";\nimport {\n isPropDefined,\n isSlotUsed,\n renderDynamicChildSlots,\n} from \"../../utils/helpers\";\n\nlet treeViewIds = 0;\n\n/**\n * @slot heading - Content is set as the tree view heading.\n * @slot icon - Content is placed to the left of the heading.\n */\n\n@Component({\n tag: \"ic-tree-view\",\n styleUrl: \"ic-tree-view.css\",\n shadow: true,\n})\nexport class TreeView {\n private treeViewId = `ic-tree-view-${treeViewIds++}`;\n private treeItemTag = \"IC-TREE-ITEM\";\n private hostMutationObserver: MutationObserver = null;\n private isLoaded = false;\n\n @Element() el: HTMLIcTreeViewElement;\n\n @State() treeItems: HTMLIcTreeItemElement[];\n\n /**\n * If `true`, tree items will have inset focus.\n */\n @Prop() focusInset?: boolean = false;\n @Watch(\"focusInset\")\n watchFocusInsetHandler(): void {\n this.treeItems.forEach((treeItem) => {\n treeItem.focusInset = this.focusInset;\n });\n }\n\n /**\n * The heading of the tree view.\n */\n @Prop() heading?: string = \"\";\n\n /**\n * The size of the tree view.\n */\n @Prop() size?: IcSizes = \"medium\";\n @Watch(\"size\")\n watchSizeHandler(): void {\n this.treeItems.forEach((treeItem) => {\n treeItem.size = this.size;\n });\n }\n\n /**\n * Sets the theme color to the dark or light theme color. \"inherit\" will set the color based on the system settings or ic-theme component.\n */\n @Prop() theme?: IcThemeMode = \"inherit\";\n @Watch(\"theme\")\n watchThemeHandler(): void {\n this.treeItems.forEach((treeItem) => {\n treeItem.theme = this.theme;\n });\n }\n\n /**\n * If `true`, the tree view heading will be truncated instead of text wrapping.\n */\n @Prop() truncateHeading?: boolean = false;\n\n /**\n * If `true`, tree items will be truncated, unless they are individually overridden.\n */\n @Prop() truncateTreeItems?: boolean = false;\n @Watch(\"truncateTreeItems\")\n watchTruncateTreeItemsHandler(): void {\n this.treeItems.forEach((treeItem) => {\n if (treeItem.truncateTreeItem === undefined) {\n treeItem.truncateTreeItem = this.truncateTreeItems;\n }\n });\n }\n\n disconnectedCallback(): void {\n this.el?.removeEventListener(\"slotchange\", this.setTreeItems);\n\n this.hostMutationObserver?.disconnect();\n }\n componentWillLoad(): void {\n this.setTreeItems();\n\n this.watchSizeHandler();\n this.watchFocusInsetHandler();\n this.watchThemeHandler();\n this.watchTruncateTreeItemsHandler();\n }\n\n componentDidRender(): void {\n this.truncateHeading && this.truncateTreeViewHeading();\n }\n\n componentDidLoad(): void {\n this.addSlotChangeListener();\n\n this.hostMutationObserver = new MutationObserver((mutationList) =>\n renderDynamicChildSlots(mutationList, \"icon\", this)\n );\n this.hostMutationObserver.observe(this.el, {\n childList: true,\n });\n\n this.isLoaded = true;\n }\n\n @Listen(\"icTreeItemSelected\")\n handleTreeItemSelected(event: CustomEvent): void {\n this.treeItems.forEach((treeItem) => {\n if (treeItem.selected && treeItem.id !== event.detail.id) {\n treeItem.selected = false;\n }\n });\n }\n\n private handleKeyDown = (event: KeyboardEvent): void => {\n const focussedChild = this.treeItems.indexOf(\n this.treeItems.filter((el) => el === document.activeElement)[0]\n );\n const expanded = this.treeItems[focussedChild]?.expanded;\n switch (event.key) {\n case \"ArrowDown\":\n this.treeItems[\n this.getNextItemToSelect(focussedChild, true)\n ].setFocus();\n if (focussedChild !== this.treeItems.length - 1) {\n event.preventDefault();\n }\n break;\n case \"ArrowUp\":\n this.treeItems[\n this.getNextItemToSelect(focussedChild, false)\n ].setFocus();\n if (focussedChild !== 0) {\n event.preventDefault();\n }\n break;\n case \"ArrowRight\":\n if (this.treeItems[focussedChild].isParent && !expanded) {\n this.treeItems[focussedChild].expanded = true;\n this.treeItems[focussedChild].hasParentExpanded = true;\n this.treeItems[focussedChild].updateAriaLabel();\n } else if (this.treeItems[focussedChild].isParent && expanded) {\n (\n this.treeItems[focussedChild].children[0] as HTMLIcTreeItemElement\n ).setFocus();\n }\n event.preventDefault();\n break;\n case \"ArrowLeft\":\n if (this.treeItems[focussedChild].isParent && expanded) {\n this.treeItems[focussedChild].expanded = false;\n this.treeItems[focussedChild].hasParentExpanded = false;\n this.treeItems[focussedChild].updateAriaLabel();\n } else if (\n this.treeItems[focussedChild].parentElement.tagName ===\n this.treeItemTag\n ) {\n (\n this.treeItems[focussedChild].parentElement as HTMLIcTreeItemElement\n ).setFocus();\n }\n event.preventDefault();\n break;\n }\n };\n\n private getNextItemToSelect = (\n currentItem: number,\n movingDown: boolean\n ): number => {\n const numItems = this.treeItems.length - 1;\n\n if (currentItem < 1) {\n currentItem = 0;\n }\n\n let nextItem = movingDown ? currentItem + 1 : currentItem - 1;\n if (nextItem < 0) {\n nextItem = 0;\n } else if (nextItem > numItems) {\n nextItem = numItems;\n }\n\n const maxAttempts = numItems + 1;\n let attempts = 0;\n\n while (attempts < maxAttempts) {\n if (nextItem < 0 || nextItem > numItems) {\n return currentItem;\n }\n\n if (\n !this.treeItems[nextItem].disabled &&\n (this.treeItems[nextItem].parentElement.tagName !== this.treeItemTag ||\n (this.treeItems[nextItem].parentElement as HTMLIcTreeItemElement)\n .expanded)\n ) {\n return nextItem;\n }\n\n if (nextItem === numItems && this.treeItems[nextItem].disabled) {\n return currentItem;\n }\n\n nextItem = movingDown ? nextItem + 1 : nextItem - 1;\n attempts++;\n }\n\n return currentItem;\n };\n\n private linkTreeItems = () => {\n this.treeItems.forEach((treeItem) => {\n treeItem.setAttribute(\"context-id\", this.treeViewId);\n });\n };\n\n private setTreeItems = () => {\n this.treeItems = this.getAllTreeItems(this.el as HTMLElement);\n\n this.linkTreeItems();\n };\n\n private getAllTreeItems(element: HTMLElement): HTMLIcTreeItemElement[] {\n const treeItems: HTMLIcTreeItemElement[] = [];\n\n const collectTreeItems = (el: HTMLElement) => {\n Array.from(el.children).forEach((child) => {\n if (child.tagName === this.treeItemTag) {\n treeItems.push(child as HTMLIcTreeItemElement);\n }\n\n collectTreeItems(child as HTMLElement);\n });\n };\n\n collectTreeItems(element);\n return treeItems;\n }\n\n private addSlotChangeListener = () => {\n this.el.addEventListener(\"slotchange\", this.setTreeItems);\n };\n\n private truncateTreeViewHeading = () => {\n const typographyEl: HTMLIcTypographyElement =\n this.el.shadowRoot.querySelector(\".tree-view-header\");\n const tooltip = typographyEl?.closest(\"ic-tooltip\");\n const headingContainer: HTMLElement = this.el.shadowRoot.querySelector(\n \".heading-area-container\"\n );\n\n if (typographyEl?.scrollHeight > headingContainer?.clientHeight) {\n typographyEl.classList.add(\"ic-text-overflow\");\n\n if (!tooltip) {\n const tooltipEl = document.createElement(\"ic-tooltip\");\n tooltipEl.setAttribute(\"target\", this.el.id);\n tooltipEl.setAttribute(\"label\", typographyEl.textContent);\n tooltipEl.classList.add(\"ic-tooltip-overflow\");\n tooltipEl.setAttribute(\"placement\", \"right\");\n headingContainer.appendChild(tooltipEl);\n tooltipEl.appendChild(typographyEl);\n }\n }\n };\n\n private isHeadingDefined = () =>\n isPropDefined(this.heading) && this.heading !== null;\n\n private hasHeadingAreaContent = (): boolean => {\n return (\n isSlotUsed(this.el, \"heading\") ||\n this.isHeadingDefined() ||\n isSlotUsed(this.el, \"icon\")\n );\n };\n\n render() {\n const { heading, isLoaded, size, theme, truncateHeading } = this;\n\n return (\n <Host\n context-id={this.treeViewId}\n class={{\n [`ic-tree-view-${size}`]: size !== \"medium\",\n [`ic-theme-${theme}`]: theme !== \"inherit\",\n \"ic-tree-view-truncate\": truncateHeading,\n }}\n onKeyDown={this.handleKeyDown}\n aria-label={this.isHeadingDefined() ? heading : null}\n >\n {this.hasHeadingAreaContent() && (\n <div class=\"heading-area-container\">\n {isSlotUsed(this.el, \"icon\") && (\n <div class=\"icon-container\">\n <slot name=\"icon\" />\n </div>\n )}\n <ic-typography\n variant=\"subtitle-large\"\n class={{\n \"tree-view-header\": true,\n \"with-padding\": this.truncateHeading && !isLoaded,\n }}\n >\n {isSlotUsed(this.el, \"heading\") ? (\n <slot name=\"heading\" />\n ) : (\n heading\n )}\n </ic-typography>\n </div>\n )}\n\n <slot></slot>\n </Host>\n );\n }\n}\n"],"version":3}
1
+ {"file":"ic-tree-view.js","mappings":"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","names":[],"sources":["src/components/ic-tree-view/ic-tree-view.css?tag=ic-tree-view&encapsulation=shadow","src/components/ic-tree-view/ic-tree-view.tsx"],"sourcesContent":["/**\n* @prop --tree-view-width: Width of the tree view\n*/\n\n:host {\n display: block;\n width: var(--tree-view-width, 100%);\n background-color: var(--ic-tree-view-background);\n}\n\n:host .heading-area-container {\n border-bottom: var(--ic-space-1px) solid var(--ic-tree-view-divider);\n display: flex;\n align-items: center;\n min-height: calc(\n var(--ic-space-xl) + var(--ic-space-xs) - var(--ic-space-1px)\n );\n padding: 0 var(--ic-space-xs);\n\n --ic-typography-color: var(--ic-tree-view-text);\n}\n\n:host(.ic-tree-view-small) .heading-area-container {\n min-height: calc(var(--ic-space-xl) - var(--ic-space-1px));\n}\n\n:host(.ic-tree-view-large) .heading-area-container {\n min-height: calc(var(--ic-space-xxl) - var(--ic-space-1px));\n}\n\n:host(.ic-tree-view-truncate) .heading-area-container {\n height: calc(var(--ic-space-xl) + var(--ic-space-xs) - var(--ic-space-1px));\n}\n\n:host(.ic-tree-view-truncate.ic-tree-view-small) .heading-area-container {\n height: calc(var(--ic-space-xl) - var(--ic-space-1px));\n}\n\n:host(.ic-tree-view-truncate.ic-tree-view-large) .heading-area-container {\n height: calc(var(--ic-space-xxl) - var(--ic-space-1px));\n}\n\n.icon-container {\n width: var(--ic-space-lg);\n min-width: var(--ic-space-lg);\n height: var(--ic-space-lg);\n margin: 0 var(--ic-space-xs) 0 0;\n}\n\n:host(.ic-tree-view-small) .icon-container {\n margin: 0 var(--ic-space-xxs) 0 0;\n}\n\n.ic-text-overflow {\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n}\n\n.ic-tooltip-overflow {\n overflow: hidden;\n}\n\n/* Ensures truncation works - accounts for text width increase as component hydrates */\n.tree-view-header.with-padding {\n padding-right: var(--ic-space-xs);\n}\n\n.tree-items-container-hidden {\n visibility: hidden;\n}\n\n::slotted([slot=\"icon\"]) {\n fill: var(--ic-tree-view-icon);\n}\n\n/** High Contrast **/\n@media (forced-colors: active) {\n ::slotted([slot=\"icon\"]) {\n fill: currentcolor;\n }\n}\n","import {\n Component,\n h,\n Prop,\n Element,\n Host,\n Watch,\n State,\n Listen,\n} from \"@stencil/core\";\nimport { IcSizes, IcThemeMode } from \"../../utils/types\";\nimport {\n checkResizeObserver,\n DEVICE_SIZES,\n getCurrentDeviceSize,\n isPropDefined,\n isSlotUsed,\n renderDynamicChildSlots,\n} from \"../../utils/helpers\";\nimport { IcTreeItemOptions } from \"./ic-tree-view.types\";\n\nlet treeViewIds = 0;\n\n/**\n * @slot heading - Content is set as the tree view heading.\n * @slot icon - Content is placed to the left of the heading.\n */\n\n@Component({\n tag: \"ic-tree-view\",\n styleUrl: \"ic-tree-view.css\",\n shadow: true,\n})\nexport class TreeView {\n private treeViewId = `ic-tree-view-${treeViewIds++}`;\n private treeItemTag = \"IC-TREE-ITEM\";\n private hostMutationObserver: MutationObserver = null;\n private isLoaded = false;\n private resizeObserver: ResizeObserver | null = null;\n private TOOLTIP = \"ic-tooltip\";\n\n private previousTruncateHeading: boolean;\n private previousTruncateTreeItems: boolean;\n\n @Element() el: HTMLIcTreeViewElement;\n\n @State() smallDevice: boolean = false;\n @Watch(\"smallDevice\")\n watchSmallDeviceHandler(): void {\n if (this.smallDevice) {\n this.previousTruncateHeading = this.truncateHeading;\n this.previousTruncateTreeItems = this.truncateTreeItems;\n this.removeTruncation();\n } else {\n this.truncateHeading = this.previousTruncateHeading;\n this.truncateTreeItems = this.previousTruncateTreeItems;\n }\n }\n\n @State() treeItems: HTMLIcTreeItemElement[];\n\n /**\n * If `true`, tree items will have inset focus.\n */\n @Prop() focusInset?: boolean = false;\n @Watch(\"focusInset\")\n watchFocusInsetHandler(): void {\n this.treeItems.forEach((treeItem) => {\n treeItem.focusInset = this.focusInset;\n });\n }\n\n /**\n * The heading of the tree view.\n */\n @Prop() heading?: string = \"\";\n\n /**\n * The size of the tree view.\n */\n @Prop() size?: IcSizes = \"medium\";\n @Watch(\"size\")\n watchSizeHandler(): void {\n this.treeItems.forEach((treeItem) => {\n treeItem.size = this.size;\n });\n }\n\n /**\n * Sets the theme color to the dark or light theme color. \"inherit\" will set the color based on the system settings or ic-theme component.\n */\n @Prop() theme?: IcThemeMode = \"inherit\";\n @Watch(\"theme\")\n watchThemeHandler(): void {\n this.treeItems.forEach((treeItem) => {\n treeItem.theme = this.theme;\n });\n }\n\n /**\n * The content within the tree view tree items. This will take precedence over slotted content.\n * */\n @Prop() treeItemData: IcTreeItemOptions[] = [];\n @Watch(\"treeItemData\")\n watchTreeItemOptionsHandler(): void {\n this.setTreeItems();\n }\n\n /**\n * If `true`, the tree view heading will be truncated instead of text wrapping.\n * When used on small devices, this prop will be overridden and headings will be set to text-wrap.\n */\n @Prop({ mutable: true }) truncateHeading?: boolean = false;\n\n /**\n * If `true`, tree items will be truncated, unless they are individually overridden.\n * When used on small devices, this prop will be overridden and tree-items will be set to text-wrap.\n */\n @Prop({ mutable: true }) truncateTreeItems?: boolean = false;\n @Watch(\"truncateTreeItems\")\n watchTruncateTreeItemsHandler(): void {\n this.treeItems.forEach((treeItem) => {\n if (this.smallDevice) {\n treeItem.previousTruncateTreeItem = treeItem.truncateTreeItem;\n treeItem.truncateTreeItem = this.truncateTreeItems;\n } else {\n treeItem.truncateTreeItem = treeItem.previousTruncateTreeItem;\n }\n });\n }\n\n disconnectedCallback(): void {\n this.el?.removeEventListener(\"slotchange\", this.setTreeItems);\n\n this.hostMutationObserver?.disconnect();\n this.resizeObserver?.disconnect();\n }\n componentWillLoad(): void {\n this.setTreeItems();\n\n this.previousTruncateHeading = this.truncateHeading;\n this.previousTruncateTreeItems = this.truncateTreeItems;\n\n checkResizeObserver(this.runResizeObserver);\n\n this.watchSizeHandler();\n this.watchFocusInsetHandler();\n this.watchThemeHandler();\n this.treeItems.forEach((treeItem) => {\n if (treeItem.truncateTreeItem === undefined) {\n treeItem.truncateTreeItem = this.truncateTreeItems;\n }\n });\n }\n\n componentDidRender(): void {\n this.truncateHeading\n ? this.truncateTreeViewHeading()\n : this.removeHeadingTruncation();\n }\n\n componentDidLoad(): void {\n this.addSlotChangeListener();\n\n this.hostMutationObserver = new MutationObserver((mutationList) =>\n renderDynamicChildSlots(mutationList, \"icon\", this)\n );\n this.hostMutationObserver.observe(this.el, {\n childList: true,\n });\n\n this.isLoaded = true;\n }\n\n @Listen(\"icTreeItemSelected\")\n handleTreeItemSelected(event: CustomEvent): void {\n this.treeItems.forEach((treeItem) => {\n if (treeItem.selected && treeItem.id !== event.detail.id) {\n treeItem.selected = false;\n }\n });\n }\n\n private runResizeObserver = () => {\n this.resizeObserver = new ResizeObserver(() => {\n const isSmallDevice = getCurrentDeviceSize() <= DEVICE_SIZES.S;\n if (this.smallDevice !== isSmallDevice) this.smallDevice = isSmallDevice;\n });\n\n this.resizeObserver.observe(document.body);\n };\n\n private removeTruncation = (): void => {\n this.truncateHeading = undefined;\n this.truncateTreeItems = undefined;\n };\n\n private handleKeyDown = (event: KeyboardEvent): void => {\n const focussedChild = this.treeItems.indexOf(\n this.treeItems.filter((el) => el === document.activeElement)[0]\n );\n const expanded = this.treeItems[focussedChild]?.expanded;\n switch (event.key) {\n case \"ArrowDown\":\n this.treeItems[\n this.getNextItemToSelect(focussedChild, true)\n ].setFocus();\n if (focussedChild !== this.treeItems.length - 1) {\n event.preventDefault();\n }\n break;\n case \"ArrowUp\":\n this.treeItems[\n this.getNextItemToSelect(focussedChild, false)\n ].setFocus();\n if (focussedChild !== 0) {\n event.preventDefault();\n }\n break;\n case \"ArrowRight\":\n if (this.treeItems[focussedChild].isParent && !expanded) {\n this.treeItems[focussedChild].expanded = true;\n this.treeItems[focussedChild].hasParentExpanded = true;\n this.treeItems[focussedChild].updateAriaLabel();\n } else if (this.treeItems[focussedChild].isParent && expanded) {\n (\n this.treeItems[focussedChild].children[0] as HTMLIcTreeItemElement\n ).setFocus();\n }\n event.preventDefault();\n break;\n case \"ArrowLeft\":\n if (this.treeItems[focussedChild].isParent && expanded) {\n this.treeItems[focussedChild].expanded = false;\n this.treeItems[focussedChild].hasParentExpanded = false;\n this.treeItems[focussedChild].updateAriaLabel();\n } else if (\n this.treeItems[focussedChild].parentElement.tagName ===\n this.treeItemTag\n ) {\n (\n this.treeItems[focussedChild].parentElement as HTMLIcTreeItemElement\n ).setFocus();\n }\n event.preventDefault();\n break;\n }\n };\n\n private getNextItemToSelect = (\n currentItem: number,\n movingDown: boolean\n ): number => {\n const numItems = this.treeItems.length - 1;\n\n if (currentItem < 1) {\n currentItem = 0;\n }\n\n let nextItem = movingDown ? currentItem + 1 : currentItem - 1;\n if (nextItem < 0) {\n nextItem = 0;\n } else if (nextItem > numItems) {\n nextItem = numItems;\n }\n\n const maxAttempts = numItems + 1;\n let attempts = 0;\n\n while (attempts < maxAttempts) {\n if (nextItem < 0 || nextItem > numItems) {\n return currentItem;\n }\n\n if (\n !this.treeItems[nextItem].disabled &&\n (this.treeItems[nextItem].parentElement.tagName !== this.treeItemTag ||\n (this.treeItems[nextItem].parentElement as HTMLIcTreeItemElement)\n .expanded)\n ) {\n return nextItem;\n }\n\n if (nextItem === numItems && this.treeItems[nextItem].disabled) {\n return currentItem;\n }\n\n nextItem = movingDown ? nextItem + 1 : nextItem - 1;\n attempts++;\n }\n\n return currentItem;\n };\n\n private linkTreeItems = () => {\n this.treeItems.forEach((treeItem) => {\n treeItem.setAttribute(\"context-id\", this.treeViewId);\n });\n };\n\n private setTreeItems = () => {\n this.treeItems = this.getAllTreeItems(this.el as HTMLElement);\n\n this.linkTreeItems();\n };\n\n private getAllTreeItems(element: HTMLElement): HTMLIcTreeItemElement[] {\n const treeItems: HTMLIcTreeItemElement[] = [];\n\n const collectTreeItemsFromSlottedContent = (el: HTMLElement) => {\n Array.from(el.children).forEach((child) => {\n if (child.tagName === this.treeItemTag) {\n treeItems.push(child as HTMLIcTreeItemElement);\n }\n\n collectTreeItemsFromSlottedContent(child as HTMLElement);\n });\n };\n\n const collectTreeItemsFromData = (\n items: IcTreeItemOptions[],\n parentElement: HTMLElement\n ) => {\n Array.from(parentElement.children).forEach((child) => {\n if (child.tagName === this.treeItemTag) {\n parentElement.removeChild(child);\n }\n });\n\n items.forEach((item) => {\n const treeItem = document.createElement(\n this.treeItemTag\n ) as HTMLIcTreeItemElement;\n const { children, icon, ...props } = item;\n Object.assign(treeItem, props);\n\n if (icon) {\n const iconSlot = document.createElement(\"div\");\n iconSlot.setAttribute(\"slot\", \"icon\");\n iconSlot.innerHTML = icon;\n treeItem.appendChild(iconSlot);\n }\n\n parentElement.appendChild(treeItem);\n treeItems.push(treeItem);\n\n if (children && children.length > 0) {\n collectTreeItemsFromData(children, treeItem);\n }\n });\n };\n\n if (this.treeItemData.length > 0) {\n collectTreeItemsFromData(this.treeItemData, element);\n } else {\n collectTreeItemsFromSlottedContent(element);\n }\n\n return treeItems;\n }\n\n private addSlotChangeListener = () => {\n this.el.addEventListener(\"slotchange\", this.setTreeItems);\n };\n\n private truncateTreeViewHeading = () => {\n const typographyEl: HTMLIcTypographyElement =\n this.el.shadowRoot.querySelector(\".tree-view-header\");\n const tooltip = typographyEl?.closest(this.TOOLTIP);\n const headingContainer: HTMLElement = this.el.shadowRoot.querySelector(\n \".heading-area-container\"\n );\n\n if (typographyEl?.scrollHeight > headingContainer?.clientHeight) {\n typographyEl.classList.add(\"ic-text-overflow\");\n\n if (!tooltip) {\n const tooltipEl = document.createElement(\"ic-tooltip\");\n tooltipEl.setAttribute(\"target\", this.el.id);\n tooltipEl.setAttribute(\"label\", typographyEl.textContent);\n tooltipEl.classList.add(\"ic-tooltip-overflow\");\n tooltipEl.setAttribute(\"placement\", \"right\");\n headingContainer.appendChild(tooltipEl);\n tooltipEl.appendChild(typographyEl);\n }\n }\n };\n\n private removeHeadingTruncation = () => {\n const typographyEl: HTMLIcTypographyElement =\n this.el.shadowRoot.querySelector(\".tree-view-header\");\n const tooltipEl: HTMLIcTooltipElement = typographyEl?.closest(this.TOOLTIP);\n\n if (tooltipEl) {\n typographyEl.classList.remove(\"ic-text-overflow\");\n this.el.shadowRoot\n .querySelector(\".heading-area-container\")\n .replaceChild(typographyEl, tooltipEl);\n }\n };\n\n private isHeadingDefined = () =>\n isPropDefined(this.heading) && this.heading !== null;\n\n private hasHeadingAreaContent = (): boolean => {\n return (\n isSlotUsed(this.el, \"heading\") ||\n this.isHeadingDefined() ||\n isSlotUsed(this.el, \"icon\")\n );\n };\n\n render() {\n const { heading, isLoaded, size, theme, truncateHeading } = this;\n\n return (\n <Host\n context-id={this.treeViewId}\n class={{\n [`ic-tree-view-${size}`]: size !== \"medium\",\n [`ic-theme-${theme}`]: theme !== \"inherit\",\n \"ic-tree-view-truncate\": truncateHeading,\n }}\n onKeyDown={this.handleKeyDown}\n aria-label={this.isHeadingDefined() ? heading : null}\n >\n {this.hasHeadingAreaContent() && (\n <div class=\"heading-area-container\">\n {isSlotUsed(this.el, \"icon\") && (\n <div class=\"icon-container\">\n <slot name=\"icon\" />\n </div>\n )}\n <ic-typography\n variant=\"subtitle-large\"\n class={{\n \"tree-view-header\": true,\n \"with-padding\": this.truncateHeading && !isLoaded,\n }}\n >\n {isSlotUsed(this.el, \"heading\") ? (\n <slot name=\"heading\" />\n ) : (\n heading\n )}\n </ic-typography>\n </div>\n )}\n\n <slot></slot>\n </Host>\n );\n }\n}\n"],"version":3}