@aquera/nile-elements 0.0.80 → 0.0.82

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 (483) hide show
  1. package/README.md +12 -0
  2. package/demo/filenames.txt +1 -1
  3. package/demo/variables.css +54 -0
  4. package/demo/variables_v2.css +51 -0
  5. package/dist/fixture-1a9fb5f1.cjs.js +395 -0
  6. package/dist/fixture-1a9fb5f1.cjs.js.map +1 -0
  7. package/dist/fixture-81e5a936.esm.js +569 -0
  8. package/dist/index.cjs.js +1 -1
  9. package/dist/index.esm.js +1 -1
  10. package/dist/index.iife.js +976 -563
  11. package/dist/internal/animate.cjs.js +1 -1
  12. package/dist/internal/animate.cjs.js.map +1 -1
  13. package/dist/internal/animate.esm.js +1 -1
  14. package/dist/internal/drag.cjs.js +2 -0
  15. package/dist/internal/drag.cjs.js.map +1 -0
  16. package/dist/internal/drag.esm.js +1 -0
  17. package/dist/internal/math.cjs.js +2 -0
  18. package/dist/internal/math.cjs.js.map +1 -0
  19. package/dist/internal/math.esm.js +1 -0
  20. package/dist/nile-avatar/nile-avatar.css.cjs.js +1 -1
  21. package/dist/nile-avatar/nile-avatar.css.cjs.js.map +1 -1
  22. package/dist/nile-avatar/nile-avatar.css.esm.js +7 -8
  23. package/dist/nile-avatar/nile-avatar.test.cjs.js +2 -0
  24. package/dist/nile-avatar/nile-avatar.test.cjs.js.map +1 -0
  25. package/dist/nile-avatar/nile-avatar.test.esm.js +1 -0
  26. package/dist/nile-badge/index.cjs.js +1 -1
  27. package/dist/nile-badge/index.esm.js +1 -1
  28. package/dist/nile-badge/nile-badge.cjs.js +1 -1
  29. package/dist/nile-badge/nile-badge.cjs.js.map +1 -1
  30. package/dist/nile-badge/nile-badge.css.cjs.js +1 -1
  31. package/dist/nile-badge/nile-badge.css.cjs.js.map +1 -1
  32. package/dist/nile-badge/nile-badge.css.esm.js +47 -47
  33. package/dist/nile-badge/nile-badge.esm.js +1 -1
  34. package/dist/nile-badge/nile-badge.test.cjs.js +2 -0
  35. package/dist/nile-badge/nile-badge.test.cjs.js.map +1 -0
  36. package/dist/nile-badge/nile-badge.test.esm.js +1 -0
  37. package/dist/nile-breadcrumb-item/nile-breadcrumb-item.css.cjs.js +1 -1
  38. package/dist/nile-breadcrumb-item/nile-breadcrumb-item.css.cjs.js.map +1 -1
  39. package/dist/nile-breadcrumb-item/nile-breadcrumb-item.css.esm.js +3 -4
  40. package/dist/nile-button/index.cjs.js +1 -1
  41. package/dist/nile-button/index.esm.js +1 -1
  42. package/dist/nile-button/nile-button.cjs.js +1 -1
  43. package/dist/nile-button/nile-button.cjs.js.map +1 -1
  44. package/dist/nile-button/nile-button.esm.js +1 -1
  45. package/dist/nile-button/nile-button.test.cjs.js +2 -0
  46. package/dist/nile-button/nile-button.test.cjs.js.map +1 -0
  47. package/dist/nile-button/nile-button.test.esm.js +4 -0
  48. package/dist/nile-button-toggle-group/nile-button-toggle-group.test.cjs.js +2 -0
  49. package/dist/nile-button-toggle-group/nile-button-toggle-group.test.cjs.js.map +1 -0
  50. package/dist/nile-button-toggle-group/nile-button-toggle-group.test.esm.js +49 -0
  51. package/dist/nile-calendar/index.cjs.js +1 -1
  52. package/dist/nile-calendar/index.esm.js +1 -1
  53. package/dist/nile-calendar/nile-calendar.cjs.js +1 -1
  54. package/dist/nile-calendar/nile-calendar.cjs.js.map +1 -1
  55. package/dist/nile-calendar/nile-calendar.css.cjs.js +1 -1
  56. package/dist/nile-calendar/nile-calendar.css.cjs.js.map +1 -1
  57. package/dist/nile-calendar/nile-calendar.css.esm.js +122 -191
  58. package/dist/nile-calendar/nile-calendar.esm.js +135 -135
  59. package/dist/nile-card/nile-card.test.cjs.js +2 -0
  60. package/dist/nile-card/nile-card.test.cjs.js.map +1 -0
  61. package/dist/nile-card/nile-card.test.esm.js +51 -0
  62. package/dist/nile-checkbox/nile-checkbox.test.cjs.js +1 -394
  63. package/dist/nile-checkbox/nile-checkbox.test.cjs.js.map +1 -1
  64. package/dist/nile-checkbox/nile-checkbox.test.esm.js +3 -571
  65. package/dist/nile-date-picker/nile-date-picker.cjs.js +1 -1
  66. package/dist/nile-date-picker/nile-date-picker.cjs.js.map +1 -1
  67. package/dist/nile-date-picker/nile-date-picker.esm.js +1 -1
  68. package/dist/nile-dialog/index.cjs.js +1 -1
  69. package/dist/nile-dialog/index.esm.js +1 -1
  70. package/dist/nile-dialog/nile-dialog.cjs.js +1 -1
  71. package/dist/nile-dialog/nile-dialog.cjs.js.map +1 -1
  72. package/dist/nile-dialog/nile-dialog.css.cjs.js +1 -1
  73. package/dist/nile-dialog/nile-dialog.css.cjs.js.map +1 -1
  74. package/dist/nile-dialog/nile-dialog.css.esm.js +4 -1
  75. package/dist/nile-dialog/nile-dialog.esm.js +5 -4
  76. package/dist/nile-drawer/index.cjs.js +1 -1
  77. package/dist/nile-drawer/index.esm.js +1 -1
  78. package/dist/nile-drawer/nile-drawer.cjs.js +1 -1
  79. package/dist/nile-drawer/nile-drawer.cjs.js.map +1 -1
  80. package/dist/nile-drawer/nile-drawer.esm.js +1 -1
  81. package/dist/nile-drawer/nile-drawer.test.cjs.js +2 -0
  82. package/dist/nile-drawer/nile-drawer.test.cjs.js.map +1 -0
  83. package/dist/nile-drawer/nile-drawer.test.esm.js +18 -0
  84. package/dist/nile-empty-state/nile-empty-state.test.cjs.js +2 -0
  85. package/dist/nile-empty-state/nile-empty-state.test.cjs.js.map +1 -0
  86. package/dist/nile-empty-state/nile-empty-state.test.esm.js +9 -0
  87. package/dist/nile-error-message/nile-error-message.test.cjs.js +2 -0
  88. package/dist/nile-error-message/nile-error-message.test.cjs.js.map +1 -0
  89. package/dist/nile-error-message/nile-error-message.test.esm.js +1 -0
  90. package/dist/nile-form-group/nile-form-group.test.cjs.js +2 -0
  91. package/dist/nile-form-group/nile-form-group.test.cjs.js.map +1 -0
  92. package/dist/nile-form-group/nile-form-group.test.esm.js +1 -0
  93. package/dist/nile-hero/nile-hero.test.cjs.js +2 -0
  94. package/dist/nile-hero/nile-hero.test.cjs.js.map +1 -0
  95. package/dist/nile-hero/nile-hero.test.esm.js +14 -0
  96. package/dist/nile-icon/icons/svg/alert.cjs.js +2 -0
  97. package/dist/nile-icon/icons/svg/alert.cjs.js.map +1 -0
  98. package/dist/nile-icon/icons/svg/alert.esm.js +1 -0
  99. package/dist/nile-icon/icons/svg/file-check-02.cjs.js +2 -0
  100. package/dist/nile-icon/icons/svg/file-check-02.cjs.js.map +1 -0
  101. package/dist/nile-icon/icons/svg/file-check-02.esm.js +1 -0
  102. package/dist/nile-icon/icons/svg/index.cjs.js +1 -1
  103. package/dist/nile-icon/icons/svg/index.esm.js +1 -1
  104. package/dist/nile-icon/icons/svg/monitor-01.cjs.js +2 -0
  105. package/dist/nile-icon/icons/svg/monitor-01.cjs.js.map +1 -0
  106. package/dist/nile-icon/icons/svg/monitor-01.esm.js +1 -0
  107. package/dist/nile-icon/index.cjs.js +1 -1
  108. package/dist/nile-icon/index.cjs.js.map +1 -1
  109. package/dist/nile-icon/index.esm.js +1 -1
  110. package/dist/nile-icon/nile-icon.test.cjs.js +2 -0
  111. package/dist/nile-icon/nile-icon.test.cjs.js.map +1 -0
  112. package/dist/nile-icon/nile-icon.test.esm.js +1 -0
  113. package/dist/nile-icon-button/index.cjs.js +1 -1
  114. package/dist/nile-icon-button/index.esm.js +1 -1
  115. package/dist/nile-icon-button/nile-icon-button.cjs.js +1 -1
  116. package/dist/nile-icon-button/nile-icon-button.cjs.js.map +1 -1
  117. package/dist/nile-icon-button/nile-icon-button.esm.js +1 -1
  118. package/dist/nile-input/index.cjs.js +1 -1
  119. package/dist/nile-input/index.esm.js +1 -1
  120. package/dist/nile-input/nile-input.cjs.js +1 -1
  121. package/dist/nile-input/nile-input.cjs.js.map +1 -1
  122. package/dist/nile-input/nile-input.esm.js +1 -1
  123. package/dist/nile-input/nile-input.test.cjs.js +2 -0
  124. package/dist/nile-input/nile-input.test.cjs.js.map +1 -0
  125. package/dist/nile-input/nile-input.test.esm.js +17 -0
  126. package/dist/nile-link/nile-link.test.cjs.js +2 -0
  127. package/dist/nile-link/nile-link.test.cjs.js.map +1 -0
  128. package/dist/nile-link/nile-link.test.esm.js +1 -0
  129. package/dist/nile-list/index.cjs.js +2 -0
  130. package/dist/nile-list/index.cjs.js.map +1 -0
  131. package/dist/nile-list/index.esm.js +1 -0
  132. package/dist/nile-list/nile-list.cjs.js +2 -0
  133. package/dist/nile-list/nile-list.cjs.js.map +1 -0
  134. package/dist/nile-list/nile-list.css.cjs.js +2 -0
  135. package/dist/nile-list/nile-list.css.cjs.js.map +1 -0
  136. package/dist/nile-list/nile-list.css.esm.js +8 -0
  137. package/dist/nile-list/nile-list.esm.js +3 -0
  138. package/dist/nile-list-item/index.cjs.js +2 -0
  139. package/dist/nile-list-item/index.cjs.js.map +1 -0
  140. package/dist/nile-list-item/index.esm.js +1 -0
  141. package/dist/nile-list-item/nile-list-item.cjs.js +2 -0
  142. package/dist/nile-list-item/nile-list-item.cjs.js.map +1 -0
  143. package/dist/nile-list-item/nile-list-item.css.cjs.js +2 -0
  144. package/dist/nile-list-item/nile-list-item.css.cjs.js.map +1 -0
  145. package/dist/nile-list-item/nile-list-item.css.esm.js +54 -0
  146. package/dist/nile-list-item/nile-list-item.esm.js +21 -0
  147. package/dist/nile-loader/nile-loader.test.cjs.js +2 -0
  148. package/dist/nile-loader/nile-loader.test.cjs.js.map +1 -0
  149. package/dist/nile-loader/nile-loader.test.esm.js +1 -0
  150. package/dist/nile-menu/nile-menu.cjs.js +1 -1
  151. package/dist/nile-menu/nile-menu.cjs.js.map +1 -1
  152. package/dist/nile-menu/nile-menu.css.cjs.js +1 -1
  153. package/dist/nile-menu/nile-menu.css.cjs.js.map +1 -1
  154. package/dist/nile-menu/nile-menu.css.esm.js +21 -7
  155. package/dist/nile-menu/nile-menu.esm.js +17 -15
  156. package/dist/nile-menu-item/index.cjs.js +1 -1
  157. package/dist/nile-menu-item/index.esm.js +1 -1
  158. package/dist/nile-menu-item/nile-menu-item.cjs.js +1 -1
  159. package/dist/nile-menu-item/nile-menu-item.cjs.js.map +1 -1
  160. package/dist/nile-menu-item/nile-menu-item.esm.js +1 -1
  161. package/dist/nile-option/index.cjs.js +1 -1
  162. package/dist/nile-option/index.esm.js +1 -1
  163. package/dist/nile-option/nile-option.cjs.js +1 -1
  164. package/dist/nile-option/nile-option.cjs.js.map +1 -1
  165. package/dist/nile-option/nile-option.esm.js +1 -1
  166. package/dist/nile-popover/nile-popover.cjs.js +1 -1
  167. package/dist/nile-popover/nile-popover.cjs.js.map +1 -1
  168. package/dist/nile-popover/nile-popover.css.cjs.js +1 -1
  169. package/dist/nile-popover/nile-popover.css.cjs.js.map +1 -1
  170. package/dist/nile-popover/nile-popover.css.esm.js +6 -4
  171. package/dist/nile-popover/nile-popover.esm.js +4 -7
  172. package/dist/nile-popover/nile-popover.test.cjs.js +2 -0
  173. package/dist/nile-popover/nile-popover.test.cjs.js.map +1 -0
  174. package/dist/nile-popover/nile-popover.test.esm.js +21 -0
  175. package/dist/nile-popup/nile-popup.css.cjs.js +1 -1
  176. package/dist/nile-popup/nile-popup.css.cjs.js.map +1 -1
  177. package/dist/nile-popup/nile-popup.css.esm.js +8 -4
  178. package/dist/nile-progress-bar/nile-progress-bar.test.cjs.js +2 -0
  179. package/dist/nile-progress-bar/nile-progress-bar.test.cjs.js.map +1 -0
  180. package/dist/nile-progress-bar/nile-progress-bar.test.esm.js +1 -0
  181. package/dist/nile-radio/nile-radio.test.cjs.js +2 -0
  182. package/dist/nile-radio/nile-radio.test.cjs.js.map +1 -0
  183. package/dist/nile-radio/nile-radio.test.esm.js +1 -0
  184. package/dist/nile-select/index.cjs.js +1 -1
  185. package/dist/nile-select/index.esm.js +1 -1
  186. package/dist/nile-select/nile-select.cjs.js +1 -1
  187. package/dist/nile-select/nile-select.cjs.js.map +1 -1
  188. package/dist/nile-select/nile-select.esm.js +3 -3
  189. package/dist/nile-slide-toggle/nile-slide-toggle.test.cjs.js +2 -0
  190. package/dist/nile-slide-toggle/nile-slide-toggle.test.cjs.js.map +1 -0
  191. package/dist/nile-slide-toggle/nile-slide-toggle.test.esm.js +1 -0
  192. package/dist/nile-split-panel/index.cjs.js +2 -0
  193. package/dist/nile-split-panel/index.cjs.js.map +1 -0
  194. package/dist/nile-split-panel/index.esm.js +1 -0
  195. package/dist/nile-split-panel/nile-split-panel.cjs.js +2 -0
  196. package/dist/nile-split-panel/nile-split-panel.cjs.js.map +1 -0
  197. package/dist/nile-split-panel/nile-split-panel.css.cjs.js +2 -0
  198. package/dist/nile-split-panel/nile-split-panel.css.cjs.js.map +1 -0
  199. package/dist/nile-split-panel/nile-split-panel.css.esm.js +87 -0
  200. package/dist/nile-split-panel/nile-split-panel.esm.js +21 -0
  201. package/dist/nile-stepper/nile-stepper.cjs.js +1 -1
  202. package/dist/nile-stepper/nile-stepper.cjs.js.map +1 -1
  203. package/dist/nile-stepper/nile-stepper.esm.js +1 -1
  204. package/dist/nile-stepper/nile-stepper.test.cjs.js +2 -0
  205. package/dist/nile-stepper/nile-stepper.test.cjs.js.map +1 -0
  206. package/dist/nile-stepper/nile-stepper.test.esm.js +1 -0
  207. package/dist/nile-tab/index.cjs.js +1 -1
  208. package/dist/nile-tab/index.esm.js +1 -1
  209. package/dist/nile-tab/nile-tab.cjs.js +1 -1
  210. package/dist/nile-tab/nile-tab.cjs.js.map +1 -1
  211. package/dist/nile-tab/nile-tab.esm.js +1 -1
  212. package/dist/nile-tab-group/index.cjs.js +1 -1
  213. package/dist/nile-tab-group/index.esm.js +1 -1
  214. package/dist/nile-tab-group/nile-tab-group.cjs.js +1 -1
  215. package/dist/nile-tab-group/nile-tab-group.cjs.js.map +1 -1
  216. package/dist/nile-tab-group/nile-tab-group.css.cjs.js +1 -1
  217. package/dist/nile-tab-group/nile-tab-group.css.cjs.js.map +1 -1
  218. package/dist/nile-tab-group/nile-tab-group.css.esm.js +2 -2
  219. package/dist/nile-tab-group/nile-tab-group.esm.js +1 -1
  220. package/dist/nile-table-header-item/nile-table-header-item.css.cjs.js +1 -1
  221. package/dist/nile-table-header-item/nile-table-header-item.css.cjs.js.map +1 -1
  222. package/dist/nile-table-header-item/nile-table-header-item.css.esm.js +0 -4
  223. package/dist/nile-tag/index.cjs.js +1 -1
  224. package/dist/nile-tag/index.esm.js +1 -1
  225. package/dist/nile-tag/nile-tag.cjs.js +1 -1
  226. package/dist/nile-tag/nile-tag.cjs.js.map +1 -1
  227. package/dist/nile-tag/nile-tag.esm.js +1 -1
  228. package/dist/nile-textarea/nile-textarea.test.cjs.js +2 -0
  229. package/dist/nile-textarea/nile-textarea.test.cjs.js.map +1 -0
  230. package/dist/nile-textarea/nile-textarea.test.esm.js +1 -0
  231. package/dist/nile-toast/index.cjs.js +1 -1
  232. package/dist/nile-toast/index.esm.js +1 -1
  233. package/dist/nile-toast/nile-toast.cjs.js +1 -1
  234. package/dist/nile-toast/nile-toast.cjs.js.map +1 -1
  235. package/dist/nile-toast/nile-toast.esm.js +1 -1
  236. package/dist/nile-tree/index.cjs.js +2 -0
  237. package/dist/nile-tree/index.cjs.js.map +1 -0
  238. package/dist/nile-tree/index.esm.js +1 -0
  239. package/dist/nile-tree/nile-tree.cjs.js +2 -0
  240. package/dist/nile-tree/nile-tree.cjs.js.map +1 -0
  241. package/dist/nile-tree/nile-tree.css.cjs.js +2 -0
  242. package/dist/nile-tree/nile-tree.css.cjs.js.map +1 -0
  243. package/dist/nile-tree/nile-tree.css.esm.js +36 -0
  244. package/dist/nile-tree/nile-tree.esm.js +13 -0
  245. package/dist/nile-tree-item/index.cjs.js +2 -0
  246. package/dist/nile-tree-item/index.cjs.js.map +1 -0
  247. package/dist/nile-tree-item/index.esm.js +1 -0
  248. package/dist/nile-tree-item/nile-tree-item.cjs.js +2 -0
  249. package/dist/nile-tree-item/nile-tree-item.cjs.js.map +1 -0
  250. package/dist/nile-tree-item/nile-tree-item.css.cjs.js +2 -0
  251. package/dist/nile-tree-item/nile-tree-item.css.cjs.js.map +1 -0
  252. package/dist/nile-tree-item/nile-tree-item.css.esm.js +164 -0
  253. package/dist/nile-tree-item/nile-tree-item.esm.js +63 -0
  254. package/dist/src/index.d.ts +5 -0
  255. package/dist/src/index.js +5 -0
  256. package/dist/src/index.js.map +1 -1
  257. package/dist/src/internal/drag.d.ts +15 -0
  258. package/dist/src/internal/drag.js +28 -0
  259. package/dist/src/internal/drag.js.map +1 -0
  260. package/dist/src/internal/math.d.ts +2 -0
  261. package/dist/src/internal/math.js +12 -0
  262. package/dist/src/internal/math.js.map +1 -0
  263. package/dist/src/nile-avatar/nile-avatar.css.js +5 -6
  264. package/dist/src/nile-avatar/nile-avatar.css.js.map +1 -1
  265. package/dist/src/nile-avatar/nile-avatar.test.d.ts +1 -0
  266. package/dist/src/nile-avatar/nile-avatar.test.js +58 -0
  267. package/dist/src/nile-avatar/nile-avatar.test.js.map +1 -0
  268. package/dist/src/nile-badge/nile-badge.css.js +45 -45
  269. package/dist/src/nile-badge/nile-badge.css.js.map +1 -1
  270. package/dist/src/nile-badge/nile-badge.test.d.ts +1 -0
  271. package/dist/src/nile-badge/nile-badge.test.js +42 -0
  272. package/dist/src/nile-badge/nile-badge.test.js.map +1 -0
  273. package/dist/src/nile-breadcrumb-item/nile-breadcrumb-item.css.js +3 -4
  274. package/dist/src/nile-breadcrumb-item/nile-breadcrumb-item.css.js.map +1 -1
  275. package/dist/src/nile-button/nile-button.test.d.ts +1 -0
  276. package/dist/src/nile-button/nile-button.test.js +86 -0
  277. package/dist/src/nile-button/nile-button.test.js.map +1 -0
  278. package/dist/src/nile-button-toggle-group/nile-button-toggle-group.test.d.ts +2 -0
  279. package/dist/src/nile-button-toggle-group/nile-button-toggle-group.test.js +108 -0
  280. package/dist/src/nile-button-toggle-group/nile-button-toggle-group.test.js.map +1 -0
  281. package/dist/src/nile-calendar/nile-calendar.css.js +122 -191
  282. package/dist/src/nile-calendar/nile-calendar.css.js.map +1 -1
  283. package/dist/src/nile-calendar/nile-calendar.d.ts +8 -0
  284. package/dist/src/nile-calendar/nile-calendar.js +164 -167
  285. package/dist/src/nile-calendar/nile-calendar.js.map +1 -1
  286. package/dist/src/nile-card/nile-card.test.d.ts +1 -0
  287. package/dist/src/nile-card/nile-card.test.js +69 -0
  288. package/dist/src/nile-card/nile-card.test.js.map +1 -0
  289. package/dist/src/nile-date-picker/nile-date-picker.js +1 -0
  290. package/dist/src/nile-date-picker/nile-date-picker.js.map +1 -1
  291. package/dist/src/nile-dialog/nile-dialog.css.js +4 -1
  292. package/dist/src/nile-dialog/nile-dialog.css.js.map +1 -1
  293. package/dist/src/nile-dialog/nile-dialog.js +4 -3
  294. package/dist/src/nile-dialog/nile-dialog.js.map +1 -1
  295. package/dist/src/nile-drawer/nile-drawer.test.d.ts +1 -0
  296. package/dist/src/nile-drawer/nile-drawer.test.js +88 -0
  297. package/dist/src/nile-drawer/nile-drawer.test.js.map +1 -0
  298. package/dist/src/nile-empty-state/nile-empty-state.test.d.ts +1 -0
  299. package/dist/src/nile-empty-state/nile-empty-state.test.js +63 -0
  300. package/dist/src/nile-empty-state/nile-empty-state.test.js.map +1 -0
  301. package/dist/src/nile-error-message/nile-error-message.test.d.ts +1 -0
  302. package/dist/src/nile-error-message/nile-error-message.test.js +61 -0
  303. package/dist/src/nile-error-message/nile-error-message.test.js.map +1 -0
  304. package/dist/src/nile-form-group/nile-form-group.test.d.ts +1 -0
  305. package/dist/src/nile-form-group/nile-form-group.test.js +55 -0
  306. package/dist/src/nile-form-group/nile-form-group.test.js.map +1 -0
  307. package/dist/src/nile-hero/nile-hero.test.d.ts +1 -0
  308. package/dist/src/nile-hero/nile-hero.test.js +42 -0
  309. package/dist/src/nile-hero/nile-hero.test.js.map +1 -0
  310. package/dist/src/nile-icon/icons/svg/alert.d.ts +5 -0
  311. package/dist/src/nile-icon/icons/svg/alert.js +5 -0
  312. package/dist/src/nile-icon/icons/svg/alert.js.map +1 -0
  313. package/dist/src/nile-icon/icons/svg/file-check-02.d.ts +5 -0
  314. package/dist/src/nile-icon/icons/svg/file-check-02.js +5 -0
  315. package/dist/src/nile-icon/icons/svg/file-check-02.js.map +1 -0
  316. package/dist/src/nile-icon/icons/svg/index.d.ts +3 -0
  317. package/dist/src/nile-icon/icons/svg/index.js +3 -0
  318. package/dist/src/nile-icon/icons/svg/index.js.map +1 -1
  319. package/dist/src/nile-icon/icons/svg/monitor-01.d.ts +5 -0
  320. package/dist/src/nile-icon/icons/svg/monitor-01.js +5 -0
  321. package/dist/src/nile-icon/icons/svg/monitor-01.js.map +1 -0
  322. package/dist/src/nile-icon/nile-icon.test.d.ts +1 -0
  323. package/dist/src/nile-icon/nile-icon.test.js +45 -0
  324. package/dist/src/nile-icon/nile-icon.test.js.map +1 -0
  325. package/dist/src/nile-input/nile-input.test.d.ts +1 -0
  326. package/dist/src/nile-input/nile-input.test.js +139 -0
  327. package/dist/src/nile-input/nile-input.test.js.map +1 -0
  328. package/dist/src/nile-link/nile-link.test.d.ts +1 -0
  329. package/dist/src/nile-link/nile-link.test.js +72 -0
  330. package/dist/src/nile-link/nile-link.test.js.map +1 -0
  331. package/dist/src/nile-list/index.d.ts +1 -0
  332. package/dist/src/nile-list/index.js +2 -0
  333. package/dist/src/nile-list/index.js.map +1 -0
  334. package/dist/src/nile-list/nile-list.css.d.ts +12 -0
  335. package/dist/src/nile-list/nile-list.css.js +20 -0
  336. package/dist/src/nile-list/nile-list.css.js.map +1 -0
  337. package/dist/src/nile-list/nile-list.d.ts +33 -0
  338. package/dist/src/nile-list/nile-list.js +47 -0
  339. package/dist/src/nile-list/nile-list.js.map +1 -0
  340. package/dist/src/nile-list-item/index.d.ts +1 -0
  341. package/dist/src/nile-list-item/index.js +2 -0
  342. package/dist/src/nile-list-item/index.js.map +1 -0
  343. package/dist/src/nile-list-item/nile-list-item.css.d.ts +12 -0
  344. package/dist/src/nile-list-item/nile-list-item.css.js +66 -0
  345. package/dist/src/nile-list-item/nile-list-item.css.js.map +1 -0
  346. package/dist/src/nile-list-item/nile-list-item.d.ts +38 -0
  347. package/dist/src/nile-list-item/nile-list-item.js +96 -0
  348. package/dist/src/nile-list-item/nile-list-item.js.map +1 -0
  349. package/dist/src/nile-loader/nile-loader.test.d.ts +1 -0
  350. package/dist/src/nile-loader/nile-loader.test.js +39 -0
  351. package/dist/src/nile-loader/nile-loader.test.js.map +1 -0
  352. package/dist/src/nile-menu/nile-menu.css.js +19 -5
  353. package/dist/src/nile-menu/nile-menu.css.js.map +1 -1
  354. package/dist/src/nile-menu/nile-menu.d.ts +1 -0
  355. package/dist/src/nile-menu/nile-menu.js +25 -14
  356. package/dist/src/nile-menu/nile-menu.js.map +1 -1
  357. package/dist/src/nile-popover/nile-popover.css.js +6 -4
  358. package/dist/src/nile-popover/nile-popover.css.js.map +1 -1
  359. package/dist/src/nile-popover/nile-popover.d.ts +1 -0
  360. package/dist/src/nile-popover/nile-popover.js +7 -6
  361. package/dist/src/nile-popover/nile-popover.js.map +1 -1
  362. package/dist/src/nile-popover/nile-popover.test.d.ts +1 -0
  363. package/dist/src/nile-popover/nile-popover.test.js +73 -0
  364. package/dist/src/nile-popover/nile-popover.test.js.map +1 -0
  365. package/dist/src/nile-popup/nile-popup.css.d.ts +5 -5
  366. package/dist/src/nile-popup/nile-popup.css.js +13 -9
  367. package/dist/src/nile-popup/nile-popup.css.js.map +1 -1
  368. package/dist/src/nile-progress-bar/nile-progress-bar.test.d.ts +1 -0
  369. package/dist/src/nile-progress-bar/nile-progress-bar.test.js +48 -0
  370. package/dist/src/nile-progress-bar/nile-progress-bar.test.js.map +1 -0
  371. package/dist/src/nile-radio/nile-radio.test.d.ts +1 -0
  372. package/dist/src/nile-radio/nile-radio.test.js +71 -0
  373. package/dist/src/nile-radio/nile-radio.test.js.map +1 -0
  374. package/dist/src/nile-select/nile-select.d.ts +1 -0
  375. package/dist/src/nile-select/nile-select.js +5 -1
  376. package/dist/src/nile-select/nile-select.js.map +1 -1
  377. package/dist/src/nile-slide-toggle/nile-slide-toggle.test.d.ts +1 -0
  378. package/dist/src/nile-slide-toggle/nile-slide-toggle.test.js +54 -0
  379. package/dist/src/nile-slide-toggle/nile-slide-toggle.test.js.map +1 -0
  380. package/dist/src/nile-split-panel/index.d.ts +1 -0
  381. package/dist/src/nile-split-panel/index.js +2 -0
  382. package/dist/src/nile-split-panel/index.js.map +1 -0
  383. package/dist/src/nile-split-panel/nile-split-panel.css.d.ts +12 -0
  384. package/dist/src/nile-split-panel/nile-split-panel.css.js +99 -0
  385. package/dist/src/nile-split-panel/nile-split-panel.css.js.map +1 -0
  386. package/dist/src/nile-split-panel/nile-split-panel.d.ts +78 -0
  387. package/dist/src/nile-split-panel/nile-split-panel.js +251 -0
  388. package/dist/src/nile-split-panel/nile-split-panel.js.map +1 -0
  389. package/dist/src/nile-stepper/nile-stepper.js +1 -1
  390. package/dist/src/nile-stepper/nile-stepper.js.map +1 -1
  391. package/dist/src/nile-stepper/nile-stepper.test.d.ts +0 -0
  392. package/dist/src/nile-stepper/nile-stepper.test.js +165 -0
  393. package/dist/src/nile-stepper/nile-stepper.test.js.map +1 -0
  394. package/dist/src/nile-tab-group/nile-tab-group.css.js +2 -2
  395. package/dist/src/nile-tab-group/nile-tab-group.css.js.map +1 -1
  396. package/dist/src/nile-tab-group/nile-tab-group.js +16 -15
  397. package/dist/src/nile-tab-group/nile-tab-group.js.map +1 -1
  398. package/dist/src/nile-table-header-item/nile-table-header-item.css.js +0 -4
  399. package/dist/src/nile-table-header-item/nile-table-header-item.css.js.map +1 -1
  400. package/dist/src/nile-textarea/nile-textarea.test.d.ts +1 -0
  401. package/dist/src/nile-textarea/nile-textarea.test.js +87 -0
  402. package/dist/src/nile-textarea/nile-textarea.test.js.map +1 -0
  403. package/dist/src/nile-tree/index.d.ts +1 -0
  404. package/dist/src/nile-tree/index.js +2 -0
  405. package/dist/src/nile-tree/index.js.map +1 -0
  406. package/dist/src/nile-tree/nile-tree.css.d.ts +12 -0
  407. package/dist/src/nile-tree/nile-tree.css.js +48 -0
  408. package/dist/src/nile-tree/nile-tree.css.js.map +1 -0
  409. package/dist/src/nile-tree/nile-tree.d.ts +69 -0
  410. package/dist/src/nile-tree/nile-tree.js +376 -0
  411. package/dist/src/nile-tree/nile-tree.js.map +1 -0
  412. package/dist/src/nile-tree-item/index.d.ts +1 -0
  413. package/dist/src/nile-tree-item/index.js +2 -0
  414. package/dist/src/nile-tree-item/index.js.map +1 -0
  415. package/dist/src/nile-tree-item/nile-tree-item.css.d.ts +12 -0
  416. package/dist/src/nile-tree-item/nile-tree-item.css.js +176 -0
  417. package/dist/src/nile-tree-item/nile-tree-item.css.js.map +1 -0
  418. package/dist/src/nile-tree-item/nile-tree-item.d.ts +96 -0
  419. package/dist/src/nile-tree-item/nile-tree-item.js +324 -0
  420. package/dist/src/nile-tree-item/nile-tree-item.js.map +1 -0
  421. package/dist/tsconfig.tsbuildinfo +1 -1
  422. package/package.json +71 -2
  423. package/plopfile.js +11 -0
  424. package/src/index.ts +6 -1
  425. package/src/internal/drag.ts +45 -0
  426. package/src/internal/math.ts +14 -0
  427. package/src/nile-avatar/nile-avatar.css.ts +5 -6
  428. package/src/nile-avatar/nile-avatar.test.ts +65 -0
  429. package/src/nile-badge/nile-badge.css.ts +45 -45
  430. package/src/nile-badge/nile-badge.test.ts +48 -0
  431. package/src/nile-breadcrumb-item/nile-breadcrumb-item.css.ts +3 -4
  432. package/src/nile-button/nile-button.test.ts +117 -0
  433. package/src/nile-button-toggle-group/nile-button-toggle-group.test.ts +130 -0
  434. package/src/nile-calendar/nile-calendar.css.ts +122 -191
  435. package/src/nile-calendar/nile-calendar.ts +170 -213
  436. package/src/nile-card/nile-card.test.ts +74 -0
  437. package/src/nile-date-picker/nile-date-picker.ts +5 -6
  438. package/src/nile-dialog/nile-dialog.css.ts +4 -1
  439. package/src/nile-dialog/nile-dialog.ts +4 -4
  440. package/src/nile-drawer/nile-drawer.test.ts +106 -0
  441. package/src/nile-empty-state/nile-empty-state.test.ts +69 -0
  442. package/src/nile-error-message/nile-error-message.test.ts +69 -0
  443. package/src/nile-form-group/nile-form-group.test.ts +63 -0
  444. package/src/nile-hero/nile-hero.test.ts +45 -0
  445. package/src/nile-icon/icons/svg/alert.ts +5 -0
  446. package/src/nile-icon/icons/svg/file-check-02.ts +5 -0
  447. package/src/nile-icon/icons/svg/index.ts +3 -0
  448. package/src/nile-icon/icons/svg/monitor-01.ts +5 -0
  449. package/src/nile-icon/nile-icon.test.ts +53 -0
  450. package/src/nile-input/nile-input.test.ts +160 -0
  451. package/src/nile-link/nile-link.test.ts +83 -0
  452. package/src/nile-list/index.ts +1 -0
  453. package/src/nile-list/nile-list.css.ts +22 -0
  454. package/src/nile-list/nile-list.ts +64 -0
  455. package/src/nile-list-item/index.ts +1 -0
  456. package/src/nile-list-item/nile-list-item.css.ts +68 -0
  457. package/src/nile-list-item/nile-list-item.ts +104 -0
  458. package/src/nile-loader/nile-loader.test.ts +45 -0
  459. package/src/nile-menu/nile-menu.css.ts +19 -5
  460. package/src/nile-menu/nile-menu.ts +27 -17
  461. package/src/nile-popover/nile-popover.css.ts +6 -4
  462. package/src/nile-popover/nile-popover.test.ts +86 -0
  463. package/src/nile-popover/nile-popover.ts +7 -10
  464. package/src/nile-popup/nile-popup.css.ts +14 -10
  465. package/src/nile-progress-bar/nile-progress-bar.test.ts +55 -0
  466. package/src/nile-radio/nile-radio.test.ts +81 -0
  467. package/src/nile-select/nile-select.ts +3 -1
  468. package/src/nile-slide-toggle/nile-slide-toggle.test.ts +61 -0
  469. package/src/nile-split-panel/index.ts +1 -0
  470. package/src/nile-split-panel/nile-split-panel.css.ts +101 -0
  471. package/src/nile-split-panel/nile-split-panel.ts +285 -0
  472. package/src/nile-stepper/nile-stepper.test.ts +174 -0
  473. package/src/nile-stepper/nile-stepper.ts +2 -2
  474. package/src/nile-tab-group/nile-tab-group.css.ts +2 -2
  475. package/src/nile-tab-group/nile-tab-group.ts +2 -1
  476. package/src/nile-table-header-item/nile-table-header-item.css.ts +0 -4
  477. package/src/nile-textarea/nile-textarea.test.ts +102 -0
  478. package/src/nile-tree/index.ts +1 -0
  479. package/src/nile-tree/nile-tree.css.ts +50 -0
  480. package/src/nile-tree/nile-tree.ts +433 -0
  481. package/src/nile-tree-item/index.ts +1 -0
  482. package/src/nile-tree-item/nile-tree-item.css.ts +178 -0
  483. package/src/nile-tree-item/nile-tree-item.ts +330 -0
@@ -0,0 +1,433 @@
1
+ /**
2
+ * Copyright Aquera Inc 2023
3
+ *
4
+ * This source code is licensed under the BSD-3-Clause license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+ import {LitElement, CSSResultArray, TemplateResult} from 'lit-element';
9
+ import {styles} from './nile-tree.css';
10
+ import NileElement from '../internal/nile-element';
11
+ import { clamp } from '../internal/math';
12
+ import { customElement, property, query } from 'lit/decorators.js';
13
+ import { html } from 'lit';
14
+ import { watch } from '../internal/watch';
15
+ import NileTreeItem from '../nile-tree-item/nile-tree-item';
16
+ import type { CSSResultGroup } from 'lit';
17
+
18
+ function syncCheckboxes(changedTreeItem: NileTreeItem, initialSync = false) {
19
+ function syncParentItem(treeItem: NileTreeItem) {
20
+ const children = treeItem.getChildrenItems({ includeDisabled: false });
21
+
22
+ if (children.length) {
23
+ const allChecked = children.every(item => item.selected);
24
+ const allUnchecked = children.every(item => !item.selected && !item.indeterminate);
25
+
26
+ treeItem.selected = allChecked;
27
+ treeItem.indeterminate = !allChecked && !allUnchecked;
28
+ }
29
+ }
30
+
31
+ function syncAncestors(treeItem: NileTreeItem) {
32
+ const parentItem: NileTreeItem | null = treeItem.parentElement as NileTreeItem;
33
+
34
+ if (NileTreeItem.isTreeItem(parentItem)) {
35
+ syncParentItem(parentItem);
36
+ syncAncestors(parentItem);
37
+ }
38
+ }
39
+
40
+ function syncDescendants(treeItem: NileTreeItem) {
41
+ for (const childItem of treeItem.getChildrenItems()) {
42
+ childItem.selected = initialSync
43
+ ? treeItem.selected || childItem.selected
44
+ : !childItem.disabled && treeItem.selected;
45
+
46
+ syncDescendants(childItem);
47
+ }
48
+
49
+ if (initialSync) {
50
+ syncParentItem(treeItem);
51
+ }
52
+ }
53
+
54
+ syncDescendants(changedTreeItem);
55
+ syncAncestors(changedTreeItem);
56
+ }
57
+
58
+
59
+ /**
60
+ * @summary Trees allow you to display a hierarchical list of selectable [tree items](/components/tree-item). Items with children can be expanded and collapsed as desired by the user.
61
+ *
62
+ * @event {{ selection: NileTreeItem[] }} nile-selection-change - Emitted when a tree item is selected or deselected.
63
+ *
64
+ * @slot - The default slot.
65
+ * @slot expand-icon - The icon to show when the tree item is expanded. Works best with `<nile-icon>`.
66
+ * @slot collapse-icon - The icon to show when the tree item is collapsed. Works best with `<nile-icon>`.
67
+ *
68
+ * @csspart base - The component's base wrapper.
69
+ *
70
+ * @cssproperty [--indent-size=var(--nile-spacing-medium)] - The size of the indentation for nested items.
71
+ * @cssproperty [--indent-guide-color=var(--nile-color-neutral-200)] - The color of the indentation line.
72
+ * @cssproperty [--indent-guide-offset=0] - The amount of vertical spacing to leave between the top and bottom of the
73
+ * indentation line's starting position.
74
+ * @cssproperty [--indent-guide-style=solid] - The style of the indentation line, e.g. solid, dotted, dashed.
75
+ * @cssproperty [--indent-guide-width=0] - The width of the indentation line.
76
+ */
77
+
78
+ @customElement('nile-tree')
79
+ export class NileTree extends NileElement {
80
+
81
+ static styles: CSSResultGroup = styles;
82
+
83
+ @query('slot:not([name])') defaultSlot: HTMLSlotElement;
84
+ @query('slot[name=expand-icon]') expandedIconSlot: HTMLSlotElement;
85
+ @query('slot[name=collapse-icon]') collapsedIconSlot: HTMLSlotElement;
86
+
87
+ /**
88
+ * The selection behavior of the tree. Single selection allows only one node to be selected at a time. Multiple
89
+ * displays checkboxes and allows more than one node to be selected. Leaf allows only leaf nodes to be selected.
90
+ */
91
+ @property() selection: 'single' | 'multiple' | 'leaf' = 'leaf';
92
+
93
+ //
94
+ // A collection of all the items in the tree, in the order they appear. The collection is live, meaning it is
95
+ // automatically updated when the underlying document is changed.
96
+ //
97
+ private lastFocusedItem: NileTreeItem;
98
+ private mutationObserver: MutationObserver;
99
+ private clickTarget: NileTreeItem | null = null;
100
+
101
+ async connectedCallback() {
102
+ super.connectedCallback();
103
+ this.handleTreeChanged = this.handleTreeChanged.bind(this);
104
+ this.handleFocusIn = this.handleFocusIn.bind(this);
105
+ this.handleFocusOut = this.handleFocusOut.bind(this);
106
+
107
+ this.setAttribute('role', 'tree');
108
+ this.setAttribute('tabindex', '0');
109
+
110
+ this.addEventListener('focusin', this.handleFocusIn);
111
+ this.addEventListener('focusout', this.handleFocusOut);
112
+ this.addEventListener('nile-lazy-change', this.handleSlotChange);
113
+
114
+ await this.updateComplete;
115
+
116
+ this.mutationObserver = new MutationObserver(this.handleTreeChanged);
117
+ this.mutationObserver.observe(this, { childList: true, subtree: true });
118
+ }
119
+
120
+ disconnectedCallback() {
121
+ super.disconnectedCallback();
122
+
123
+ this.mutationObserver.disconnect();
124
+
125
+ this.removeEventListener('focusin', this.handleFocusIn);
126
+ this.removeEventListener('focusout', this.handleFocusOut);
127
+ this.removeEventListener('nile-lazy-change', this.handleSlotChange);
128
+ }
129
+
130
+ // Generates a clone of the expand icon element to use for each tree item
131
+ private getExpandButtonIcon(status: 'expand' | 'collapse') {
132
+ const slot = status === 'expand' ? this.expandedIconSlot : this.collapsedIconSlot;
133
+ const icon = slot.assignedElements({ flatten: true })[0] as HTMLElement;
134
+
135
+ // Clone it, remove ids, and slot it
136
+ if (icon) {
137
+ const clone = icon.cloneNode(true) as HTMLElement;
138
+ [clone, ...clone.querySelectorAll('[id]')].forEach(el => el.removeAttribute('id'));
139
+ clone.setAttribute('data-default', '');
140
+ clone.slot = `${status}-icon`;
141
+
142
+ return clone;
143
+ }
144
+
145
+ return null;
146
+ }
147
+
148
+ // Initializes new items by setting the `selectable` property and the expanded/collapsed icons if any
149
+ private initTreeItem = (item: NileTreeItem) => {
150
+ item.selectable = this.selection === 'multiple';
151
+
152
+ ['expand', 'collapse']
153
+ .filter(status => !!this.querySelector(`[slot="${status}-icon"]`))
154
+ .forEach((status: 'expand' | 'collapse') => {
155
+ const existingIcon = item.querySelector(`[slot="${status}-icon"]`);
156
+
157
+ if (existingIcon === null) {
158
+ // No separator exists, add one
159
+ item.append(this.getExpandButtonIcon(status)!);
160
+ } else if (existingIcon.hasAttribute('data-default')) {
161
+ // A default separator exists, replace it
162
+ existingIcon.replaceWith(this.getExpandButtonIcon(status)!);
163
+ } else {
164
+ // The user provided a custom icon, leave it alone
165
+ }
166
+ });
167
+ };
168
+
169
+ private handleTreeChanged(mutations: MutationRecord[]) {
170
+ for (const mutation of mutations) {
171
+ const addedNodes: NileTreeItem[] = [...mutation.addedNodes].filter(NileTreeItem.isTreeItem) as NileTreeItem[];
172
+ const removedNodes = [...mutation.removedNodes].filter(NileTreeItem.isTreeItem) as NileTreeItem[];
173
+
174
+ addedNodes.forEach(this.initTreeItem);
175
+
176
+ // If the focused item has been removed form the DOM, move the focus to the first focusable item
177
+ if (removedNodes.includes(this.lastFocusedItem)) {
178
+ this.focusItem(this.getFocusableItems()[0]);
179
+ }
180
+ }
181
+ }
182
+
183
+ private syncTreeItems(selectedItem: NileTreeItem) {
184
+ const items = this.getAllTreeItems();
185
+
186
+ if (this.selection === 'multiple') {
187
+ syncCheckboxes(selectedItem);
188
+ } else {
189
+ for (const item of items) {
190
+ if (item !== selectedItem) {
191
+ item.selected = false;
192
+ }
193
+ }
194
+ }
195
+ }
196
+
197
+ private selectItem(selectedItem: NileTreeItem) {
198
+ const previousSelection = [...this.selectedItems];
199
+
200
+ if (this.selection === 'multiple') {
201
+ selectedItem.selected = !selectedItem.selected;
202
+ if (selectedItem.lazy) {
203
+ selectedItem.expanded = true;
204
+ }
205
+ this.syncTreeItems(selectedItem);
206
+ } else if (this.selection === 'single' || selectedItem.isLeaf) {
207
+ selectedItem.expanded = !selectedItem.expanded;
208
+ selectedItem.selected = true;
209
+
210
+ this.syncTreeItems(selectedItem);
211
+ } else if (this.selection === 'leaf') {
212
+ selectedItem.expanded = !selectedItem.expanded;
213
+ }
214
+
215
+ const nextSelection = this.selectedItems;
216
+
217
+ if (
218
+ previousSelection.length !== nextSelection.length ||
219
+ nextSelection.some(item => !previousSelection.includes(item))
220
+ ) {
221
+ // Wait for the tree items' DOM to update before emitting
222
+ Promise.all(nextSelection.map(el => el.updateComplete)).then(() => {
223
+ this.emit('nile-selection-change', { detail: { selection: nextSelection } });
224
+ });
225
+ }
226
+ }
227
+
228
+ private getAllTreeItems() {
229
+ return [...this.querySelectorAll<NileTreeItem>('nile-tree-item')];
230
+ }
231
+
232
+ private focusItem(item?: NileTreeItem | null) {
233
+ item?.focus();
234
+ }
235
+
236
+ private handleKeyDown(event: KeyboardEvent) {
237
+ if (!['ArrowDown', 'ArrowUp', 'ArrowRight', 'ArrowLeft', 'Home', 'End', 'Enter', ' '].includes(event.key)) {
238
+ return;
239
+ }
240
+
241
+ const items = this.getFocusableItems();
242
+ const isLtr = true;
243
+ const isRtl = false;
244
+
245
+ if (items.length > 0) {
246
+ event.preventDefault();
247
+ const activeItemIndex = items.findIndex(item => item.matches(':focus'));
248
+ const activeItem: NileTreeItem | undefined = items[activeItemIndex];
249
+
250
+ const focusItemAt = (index: number) => {
251
+ const item = items[clamp(index, 0, items.length - 1)];
252
+ this.focusItem(item);
253
+ };
254
+ const toggleExpand = (expanded: boolean) => {
255
+ activeItem.expanded = expanded;
256
+ };
257
+
258
+ if (event.key === 'ArrowDown') {
259
+ // Moves focus to the next node that is focusable without opening or closing a node.
260
+ focusItemAt(activeItemIndex + 1);
261
+ } else if (event.key === 'ArrowUp') {
262
+ // Moves focus to the next node that is focusable without opening or closing a node.
263
+ focusItemAt(activeItemIndex - 1);
264
+ } else if ((isLtr && event.key === 'ArrowRight') || (isRtl && event.key === 'ArrowLeft')) {
265
+ //
266
+ // When focus is on a closed node, opens the node; focus does not move.
267
+ // When focus is on a open node, moves focus to the first child node.
268
+ // When focus is on an end node (a tree item with no children), does nothing.
269
+ //
270
+ if (!activeItem || activeItem.disabled || activeItem.expanded || (activeItem.isLeaf && !activeItem.lazy)) {
271
+ focusItemAt(activeItemIndex + 1);
272
+ } else {
273
+ toggleExpand(true);
274
+ }
275
+ } else if ((isLtr && event.key === 'ArrowLeft') || (isRtl && event.key === 'ArrowRight')) {
276
+ //
277
+ // When focus is on an open node, closes the node.
278
+ // When focus is on a child node that is also either an end node or a closed node, moves focus to its parent node.
279
+ // When focus is on a closed `tree`, does nothing.
280
+ //
281
+ if (!activeItem || activeItem.disabled || activeItem.isLeaf || !activeItem.expanded) {
282
+ focusItemAt(activeItemIndex - 1);
283
+ } else {
284
+ toggleExpand(false);
285
+ }
286
+ } else if (event.key === 'Home') {
287
+ // Moves focus to the first node in the tree without opening or closing a node.
288
+ focusItemAt(0);
289
+ } else if (event.key === 'End') {
290
+ // Moves focus to the last node in the tree that is focusable without opening the node.
291
+ focusItemAt(items.length - 1);
292
+ } else if (event.key === 'Enter' || event.key === ' ') {
293
+ // Selects the focused node.
294
+ if (!activeItem.disabled) {
295
+ this.selectItem(activeItem);
296
+ }
297
+ }
298
+ }
299
+ }
300
+
301
+ private handleClick(event: Event) {
302
+ const target = event.target as NileTreeItem;
303
+ const treeItem = target.closest('nile-tree-item')!;
304
+ const isExpandButton = event
305
+ .composedPath()
306
+ .some((el: HTMLElement) => el?.classList?.contains('tree-item__expand-button'));
307
+
308
+ //
309
+ // Don't Do anything if there's no tree item, if it's disabled, or if the click doesn't match the initial target
310
+ // from mousedown. The latter case prevents the user from starting a click on one item and ending it on another,
311
+ // causing the parent node to collapse.
312
+ //
313
+ if (!treeItem || treeItem.disabled || target !== this.clickTarget) {
314
+ return;
315
+ }
316
+
317
+ if (this.selection === 'multiple' && isExpandButton) {
318
+ treeItem.expanded = !treeItem.expanded;
319
+ } else {
320
+ this.selectItem(treeItem);
321
+ }
322
+ }
323
+
324
+ handleMouseDown(event: MouseEvent) {
325
+ // Record the click target so we know which item the click initially targeted
326
+ this.clickTarget = event.target as NileTreeItem;
327
+ }
328
+
329
+ private handleFocusOut(event: FocusEvent) {
330
+ const relatedTarget = event.relatedTarget as HTMLElement;
331
+
332
+ // If the element that got the focus is not in the tree
333
+ if (!relatedTarget || !this.contains(relatedTarget)) {
334
+ this.tabIndex = 0;
335
+ }
336
+ }
337
+
338
+ private handleFocusIn(event: FocusEvent) {
339
+ const target = event.target as NileTreeItem;
340
+
341
+ // If the tree has been focused, move the focus to the last focused item
342
+ if (event.target === this) {
343
+ this.focusItem(this.lastFocusedItem || this.getAllTreeItems()[0]);
344
+ }
345
+
346
+ // If the target is a tree item, update the tabindex
347
+ if (NileTreeItem.isTreeItem(target) && !target.disabled) {
348
+ if (this.lastFocusedItem) {
349
+ this.lastFocusedItem.tabIndex = -1;
350
+ }
351
+ this.lastFocusedItem = target;
352
+ this.tabIndex = -1;
353
+
354
+ target.tabIndex = 0;
355
+ }
356
+ }
357
+
358
+ private handleSlotChange() {
359
+ const items = this.getAllTreeItems();
360
+ items.forEach(this.initTreeItem);
361
+ }
362
+
363
+ @watch('selection')
364
+ async handleSelectionChange() {
365
+ const isSelectionMultiple = this.selection === 'multiple';
366
+ const items = this.getAllTreeItems();
367
+
368
+ this.setAttribute('aria-multiselectable', isSelectionMultiple ? 'true' : 'false');
369
+
370
+ for (const item of items) {
371
+ item.selectable = isSelectionMultiple;
372
+ }
373
+
374
+ if (isSelectionMultiple) {
375
+ await this.updateComplete;
376
+
377
+ [...this.querySelectorAll(':scope > nile-tree-item')].forEach((treeItem: NileTreeItem) =>
378
+ syncCheckboxes(treeItem, true)
379
+ );
380
+ }
381
+ }
382
+
383
+ /** @internal Returns the list of tree items that are selected in the tree. */
384
+ get selectedItems(): NileTreeItem[] {
385
+ const items = this.getAllTreeItems();
386
+ const isSelected = (item: NileTreeItem) => item.selected;
387
+
388
+ return items.filter(isSelected);
389
+ }
390
+
391
+ /** @internal Gets focusable tree items in the tree. */
392
+ getFocusableItems() {
393
+ const items = this.getAllTreeItems();
394
+ const collapsedItems = new Set();
395
+
396
+ return items.filter(item => {
397
+ // Exclude disabled elements
398
+ if (item.disabled) return false;
399
+
400
+ // Exclude those whose parent is collapsed or loading
401
+ const parent: NileTreeItem | null | undefined = item.parentElement?.closest('[role=treeitem]');
402
+ if (parent && (!parent.expanded || parent.loading || collapsedItems.has(parent))) {
403
+ collapsedItems.add(item);
404
+ }
405
+
406
+ return !collapsedItems.has(item);
407
+ });
408
+ }
409
+
410
+ render() {
411
+ return html`
412
+ <div
413
+ part="base"
414
+ class="tree"
415
+ @click=${this.handleClick}
416
+ @keydown=${this.handleKeyDown}
417
+ @mousedown=${this.handleMouseDown}
418
+ >
419
+ <slot @slotchange=${this.handleSlotChange}></slot>
420
+ <slot name="expand-icon" hidden aria-hidden="true"> </slot>
421
+ <slot name="collapse-icon" hidden aria-hidden="true"> </slot>
422
+ </div>
423
+ `;
424
+ }
425
+ }
426
+
427
+ export default NileTree;
428
+
429
+ declare global {
430
+ interface HTMLElementTagNameMap {
431
+ 'nile-tree': NileTree;
432
+ }
433
+ }
@@ -0,0 +1 @@
1
+ export { NileTreeItem } from './nile-tree-item';
@@ -0,0 +1,178 @@
1
+ /**
2
+ * Copyright Aquera Inc 2023
3
+ *
4
+ * This source code is licensed under the BSD-3-Clause license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+ import {css} from 'lit-element';
9
+
10
+ /**
11
+ * TreeItem CSS
12
+ */
13
+ export const styles = css`
14
+ :host {
15
+ box-sizing: border-box;
16
+ }
17
+
18
+ :host *,
19
+ :host *::before,
20
+ :host *::after {
21
+ box-sizing: inherit;
22
+ }
23
+
24
+ [hidden] {
25
+ display: none !important;
26
+ }
27
+
28
+ :host {
29
+ display: block;
30
+ outline: 0;
31
+ z-index: 0;
32
+ }
33
+
34
+ :host(:focus) {
35
+ outline: none;
36
+ }
37
+
38
+ slot:not([name])::slotted(nile-icon) {
39
+ margin-inline-end: 0.5rem;
40
+ }
41
+
42
+ .tree-item {
43
+ position: relative;
44
+ display: flex;
45
+ align-items: stretch;
46
+ flex-direction: column;
47
+ color: #777D82;
48
+ cursor: pointer;
49
+ user-select: none;
50
+ }
51
+
52
+ .tree-item__checkbox {
53
+ pointer-events: none;
54
+ }
55
+
56
+ .tree-item__expand-button,
57
+ .tree-item__checkbox,
58
+ .tree-item__label {
59
+ font-family: var(--nile-font-family-serif);
60
+ font-size: 16px;
61
+ font-weight: 400;
62
+ }
63
+
64
+ .tree-item__checkbox::part(base) {
65
+ display: flex;
66
+ align-items: center;
67
+ }
68
+
69
+ .tree-item__indentation {
70
+ display: block;
71
+ width: 1em;
72
+ flex-shrink: 0;
73
+ }
74
+
75
+ .tree-item__expand-button {
76
+ display: flex;
77
+ align-items: center;
78
+ justify-content: center;
79
+ box-sizing: content-box;
80
+ color: #C7CED4;
81
+ padding: 0.5rem;
82
+ width: 1rem;
83
+ height: 1rem;
84
+ flex-shrink: 0;
85
+ cursor: pointer;
86
+ }
87
+
88
+ .tree-item__expand-button {
89
+ transition: 250ms rotate ease;
90
+ }
91
+
92
+ .tree-item--expanded .tree-item__expand-button {
93
+ rotate: 90deg;
94
+ }
95
+
96
+ .tree-item--expanded.tree-item--rtl .tree-item__expand-button {
97
+ rotate: -90deg;
98
+ }
99
+
100
+ .tree-item--expanded slot[name='expand-icon'],
101
+ .tree-item:not(.tree-item--expanded) slot[name='collapse-icon'] {
102
+ display: none;
103
+ }
104
+
105
+ .tree-item:not(.tree-item--has-expand-button) .tree-item__expand-icon-slot {
106
+ display: none;
107
+ }
108
+
109
+ .tree-item__expand-button--visible {
110
+ cursor: pointer;
111
+ }
112
+
113
+ .tree-item__item {
114
+ display: flex;
115
+ align-items: center;
116
+ border-inline-start: solid 3px transparent;
117
+ }
118
+
119
+ .tree-item--disabled .tree-item__item {
120
+ opacity: 0.5;
121
+ outline: none;
122
+ cursor: not-allowed;
123
+ }
124
+
125
+ :host(:focus-visible) .tree-item__item {
126
+ outline: solid 3px #C7CED4;
127
+ outline-offset: 1px;
128
+ z-index: 2;
129
+ }
130
+
131
+ :host(:not([aria-disabled='true'])) .tree-item--selected .tree-item__item {
132
+ background-color: #eaecf0;
133
+ border-inline-start-color: #035da6;
134
+ }
135
+
136
+ :host(:not([aria-disabled='true'])) .tree-item__expand-button {
137
+ color: #777D82;
138
+ }
139
+
140
+ .tree-item__label {
141
+ display: flex;
142
+ align-items: center;
143
+ transition: 150ms color;
144
+ }
145
+
146
+ .tree-item__children {
147
+ display: block;
148
+ font-size: calc(1em + var(--indent-size, 1rem));
149
+ }
150
+
151
+ /* Indentation lines */
152
+ .tree-item__children {
153
+ position: relative;
154
+ }
155
+
156
+ .tree-item__children::before {
157
+ content: '';
158
+ position: absolute;
159
+ top: var(--indent-guide-offset);
160
+ bottom: var(--indent-guide-offset);
161
+ left: calc(1em - (var(--indent-guide-width) / 2) - 1px);
162
+ border-inline-end: var(--indent-guide-width) var(--indent-guide-style) var(--indent-guide-color);
163
+ z-index: 1;
164
+ }
165
+
166
+ .tree-item--rtl .tree-item__children::before {
167
+ left: auto;
168
+ right: 1em;
169
+ }
170
+
171
+ @media (forced-colors: active) {
172
+ :host(:not([aria-disabled='true'])) .tree-item--selected .tree-item__item {
173
+ outline: dashed 1px SelectedItem;
174
+ }
175
+ }
176
+ `;
177
+
178
+ export default [styles];