@genexus/genexus-ide-ui 0.0.62 → 0.0.64

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 (574) hide show
  1. package/dist/cjs/ch-accordion.cjs.entry.js +1 -1
  2. package/dist/cjs/ch-action-group_2.cjs.entry.js +1 -1
  3. package/dist/cjs/ch-alert.cjs.entry.js +1 -1
  4. package/dist/cjs/ch-checkbox_3.cjs.entry.js +1171 -0
  5. package/dist/cjs/ch-drag-bar.cjs.entry.js +1 -1
  6. package/dist/cjs/ch-dropdown-item-separator.cjs.entry.js +1 -1
  7. package/dist/cjs/ch-dropdown-item.cjs.entry.js +1 -1
  8. package/dist/cjs/ch-dropdown.cjs.entry.js +1 -1
  9. package/dist/cjs/ch-form-checkbox.cjs.entry.js +1 -1
  10. package/dist/cjs/ch-grid-action-refresh_7.cjs.entry.js +1 -1
  11. package/dist/cjs/ch-grid-column-display.cjs.entry.js +1 -1
  12. package/dist/cjs/ch-grid-infinite-scroll.cjs.entry.js +1 -1
  13. package/dist/cjs/ch-grid-row-actions.cjs.entry.js +1 -1
  14. package/dist/cjs/ch-grid-rowset-empty.cjs.entry.js +1 -1
  15. package/dist/cjs/ch-grid-rowset-legend.cjs.entry.js +1 -1
  16. package/dist/cjs/ch-grid-virtual-scroller.cjs.entry.js +1 -1
  17. package/dist/cjs/ch-grid_8.cjs.entry.js +2 -2
  18. package/dist/cjs/ch-icon_2.cjs.entry.js +2 -1
  19. package/dist/cjs/ch-intersection-observer.cjs.entry.js +1 -1
  20. package/dist/cjs/ch-next-data-modeling-render.cjs.entry.js +242 -0
  21. package/dist/cjs/{ch-next-data-modeling-item.cjs.entry.js → ch-next-data-modeling_2.cjs.entry.js} +21 -2
  22. package/dist/cjs/ch-next-progress-bar.cjs.entry.js +1 -1
  23. package/dist/cjs/ch-notifications-item.cjs.entry.js +1 -1
  24. package/dist/cjs/ch-notifications.cjs.entry.js +1 -1
  25. package/dist/cjs/ch-qr.cjs.entry.js +1 -1
  26. package/dist/cjs/ch-select-option.cjs.entry.js +1 -1
  27. package/dist/cjs/ch-select.cjs.entry.js +2 -2
  28. package/dist/cjs/ch-sidebar-menu-list-item.cjs.entry.js +1 -1
  29. package/dist/cjs/ch-sidebar-menu-list.cjs.entry.js +1 -1
  30. package/dist/cjs/ch-sidebar-menu.cjs.entry.js +2 -2
  31. package/dist/cjs/ch-step-list-item.cjs.entry.js +1 -1
  32. package/dist/cjs/ch-step-list.cjs.entry.js +1 -1
  33. package/dist/cjs/ch-style.cjs.entry.js +1 -1
  34. package/dist/cjs/ch-suggest_4.cjs.entry.js +3 -3
  35. package/dist/cjs/ch-test-action-group.cjs.entry.js +1 -1
  36. package/dist/cjs/ch-test-dropdown.cjs.entry.js +1 -1
  37. package/dist/cjs/ch-test-suggest.cjs.entry.js +1 -1
  38. package/dist/cjs/ch-textblock.cjs.entry.js +1 -1
  39. package/dist/cjs/ch-timer.cjs.entry.js +1 -1
  40. package/dist/cjs/ch-tooltip.cjs.entry.js +1 -1
  41. package/dist/cjs/ch-tree-item.cjs.entry.js +1 -1
  42. package/dist/cjs/ch-tree-view-render-wrapper.cjs.entry.js +163 -0
  43. package/dist/cjs/ch-tree-view-render_2.cjs.entry.js +822 -0
  44. package/dist/cjs/ch-tree.cjs.entry.js +1 -1
  45. package/dist/cjs/ch-window_2.cjs.entry.js +1 -1
  46. package/dist/cjs/{common-5d08e273.js → common-2100f35f.js} +1 -1
  47. package/dist/cjs/{config-c652329b.js → config-8634e7dd.js} +1 -1
  48. package/dist/cjs/{form-c75c9ac0.js → form-437d6a38.js} +1 -1
  49. package/dist/cjs/genexus-ide-ui.cjs.js +2 -2
  50. package/dist/cjs/gx-grid-chameleon.cjs.entry.js +1 -1
  51. package/dist/cjs/gx-ide-bpm-app-declaration.cjs.entry.js +4 -4
  52. package/dist/cjs/gx-ide-container_4.cjs.entry.js +4 -3
  53. package/dist/cjs/gx-ide-create-kb-from-server.cjs.entry.js +2 -2
  54. package/dist/cjs/gx-ide-directory-selector.cjs.entry.js +24 -5
  55. package/dist/cjs/gx-ide-entity-selector_2.cjs.entry.js +2 -2
  56. package/dist/cjs/gx-ide-file-selector.cjs.entry.js +1 -1
  57. package/dist/cjs/gx-ide-kb-manager-export.cjs.entry.js +96 -64
  58. package/dist/cjs/gx-ide-kb-manager-import.cjs.entry.js +30 -15
  59. package/dist/cjs/gx-ide-list-selector_2.cjs.entry.js +1 -1
  60. package/dist/cjs/gx-ide-new-environment.cjs.entry.js +3 -3
  61. package/dist/cjs/gx-ide-new-kb.cjs.entry.js +3 -3
  62. package/dist/cjs/gx-ide-new-object.cjs.entry.js +2 -2
  63. package/dist/cjs/gx-ide-object-selector.cjs.entry.js +3 -3
  64. package/dist/cjs/gx-ide-references.cjs.entry.js +3 -3
  65. package/dist/cjs/gx-ide-share-kb.cjs.entry.js +3 -3
  66. package/dist/cjs/gx-ide-status-buttons_2.cjs.entry.js +1 -1
  67. package/dist/cjs/gx-ide-switch-panel.cjs.entry.js +1 -1
  68. package/dist/cjs/gx-ide-switcher.cjs.entry.js +1 -1
  69. package/dist/cjs/gx-ide-team-dev-commit.cjs.entry.js +3 -3
  70. package/dist/cjs/gx-ide-team-dev-select-recent-comment.cjs.entry.js +2 -2
  71. package/dist/cjs/gx-ide-team-dev-update-partial-selection.cjs.entry.js +2 -2
  72. package/dist/cjs/gx-ide-team-dev-update-to-revision.cjs.entry.js +2 -2
  73. package/dist/cjs/gx-ide-team-dev-update.cjs.entry.js +3 -3
  74. package/dist/cjs/gx-ide-template.cjs.entry.js +2 -2
  75. package/dist/cjs/gx-ide-test.cjs.entry.js +108 -123
  76. package/dist/cjs/gx-ide-top-bar.cjs.entry.js +1 -1
  77. package/dist/cjs/gx-ide-ww-images.cjs.entry.js +3 -3
  78. package/dist/cjs/gxg-accordion-item.cjs.entry.js +2 -2
  79. package/dist/cjs/gxg-accordion.cjs.entry.js +1 -1
  80. package/dist/cjs/gxg-alert.cjs.entry.js +1 -1
  81. package/dist/cjs/gxg-box.cjs.entry.js +1 -1
  82. package/dist/cjs/gxg-breadcrumb.cjs.entry.js +1 -1
  83. package/dist/cjs/gxg-breadcrumbs.cjs.entry.js +1 -1
  84. package/dist/cjs/gxg-button-group.cjs.entry.js +3 -3
  85. package/dist/cjs/gxg-button.cjs.entry.js +2 -2
  86. package/dist/cjs/gxg-card.cjs.entry.js +36 -3
  87. package/dist/cjs/gxg-color-picker.cjs.entry.js +3 -3
  88. package/dist/cjs/gxg-column.cjs.entry.js +1 -1
  89. package/dist/cjs/gxg-columns.cjs.entry.js +1 -1
  90. package/dist/cjs/gxg-combo-box_2.cjs.entry.js +3 -3
  91. package/dist/cjs/gxg-container.cjs.entry.js +1 -1
  92. package/dist/cjs/gxg-contextual-menu-item.cjs.entry.js +1 -1
  93. package/dist/cjs/gxg-contextual-menu-submenu.cjs.entry.js +1 -1
  94. package/dist/cjs/gxg-contextual-menu.cjs.entry.js +1 -1
  95. package/dist/cjs/gxg-demo.cjs.entry.js +1 -1
  96. package/dist/cjs/gxg-drag-box.cjs.entry.js +1 -1
  97. package/dist/cjs/gxg-drag-container.cjs.entry.js +1 -1
  98. package/dist/cjs/gxg-drop-down.cjs.entry.js +2 -2
  99. package/dist/cjs/gxg-filter-item.cjs.entry.js +1 -1
  100. package/dist/cjs/gxg-filter.cjs.entry.js +1 -1
  101. package/dist/cjs/gxg-form-checkbox-group.cjs.entry.js +2 -2
  102. package/dist/cjs/gxg-form-checkbox.cjs.entry.js +3 -3
  103. package/dist/cjs/gxg-form-message.cjs.entry.js +2 -2
  104. package/dist/cjs/gxg-form-radio-group.cjs.entry.js +2 -2
  105. package/dist/cjs/gxg-form-radio.cjs.entry.js +1 -1
  106. package/dist/cjs/gxg-form-textarea.cjs.entry.js +3 -3
  107. package/dist/cjs/gxg-label_2.cjs.entry.js +2 -2
  108. package/dist/cjs/gxg-list-box_2.cjs.entry.js +3 -3
  109. package/dist/cjs/gxg-loader.cjs.entry.js +1 -1
  110. package/dist/cjs/gxg-menu-item.cjs.entry.js +1 -1
  111. package/dist/cjs/gxg-menu-slim-item.cjs.entry.js +1 -1
  112. package/dist/cjs/gxg-menu-slim-list.cjs.entry.js +1 -1
  113. package/dist/cjs/gxg-menu-slim.cjs.entry.js +1 -1
  114. package/dist/cjs/gxg-menu.cjs.entry.js +1 -1
  115. package/dist/cjs/gxg-modal.cjs.entry.js +2 -2
  116. package/dist/cjs/gxg-more-info.cjs.entry.js +1 -1
  117. package/dist/cjs/gxg-option-v2.cjs.entry.js +1 -1
  118. package/dist/cjs/gxg-option.cjs.entry.js +1 -1
  119. package/dist/cjs/gxg-options-item.cjs.entry.js +1 -1
  120. package/dist/cjs/gxg-options.cjs.entry.js +2 -2
  121. package/dist/cjs/gxg-paginator.cjs.entry.js +1 -1
  122. package/dist/cjs/gxg-pill.cjs.entry.js +12 -4
  123. package/dist/cjs/gxg-pills.cjs.entry.js +4 -3
  124. package/dist/cjs/gxg-progress-bar.cjs.entry.js +1 -1
  125. package/dist/cjs/gxg-scroll.cjs.entry.js +1 -1
  126. package/dist/cjs/gxg-select-v2.cjs.entry.js +2 -2
  127. package/dist/cjs/gxg-select.cjs.entry.js +3 -3
  128. package/dist/cjs/gxg-separator.cjs.entry.js +1 -1
  129. package/dist/cjs/gxg-slider.cjs.entry.js +1 -1
  130. package/dist/cjs/gxg-spacer-layout.cjs.entry.js +1 -1
  131. package/dist/cjs/gxg-spacer-one.cjs.entry.js +1 -1
  132. package/dist/cjs/gxg-split.cjs.entry.js +1 -1
  133. package/dist/cjs/gxg-splitter.cjs.entry.js +1 -1
  134. package/dist/cjs/gxg-stack.cjs.entry.js +1 -1
  135. package/dist/cjs/gxg-stepper.cjs.entry.js +1 -1
  136. package/dist/cjs/gxg-tab_4.cjs.entry.js +14 -7
  137. package/dist/cjs/gxg-test.cjs.entry.js +1 -1
  138. package/dist/cjs/gxg-text.cjs.entry.js +8 -4
  139. package/dist/cjs/gxg-title-editable.cjs.entry.js +11 -5
  140. package/dist/cjs/gxg-toggle.cjs.entry.js +1 -1
  141. package/dist/cjs/gxg-toolbar-item.cjs.entry.js +1 -1
  142. package/dist/cjs/gxg-toolbar.cjs.entry.js +1 -1
  143. package/dist/cjs/gxg-tree-grid-divs.cjs.entry.js +1 -1
  144. package/dist/cjs/{gxg-tree_2.cjs.entry.js → gxg-tree-item.cjs.entry.js} +1 -213
  145. package/dist/cjs/gxg-tree.cjs.entry.js +218 -0
  146. package/dist/cjs/gxg-window.cjs.entry.js +1 -1
  147. package/dist/cjs/{index-3e90909d.js → index-69adec41.js} +1 -1
  148. package/dist/cjs/{index-5a32426a.js → index-f9bb1815.js} +5 -0
  149. package/dist/cjs/loader.cjs.js +2 -2
  150. package/dist/cjs/{render-combo-items-d99a186a.js → render-combo-items-05509216.js} +1 -1
  151. package/dist/cjs/{render-suggest-c623955f.js → render-suggest-a4363c7b.js} +1 -1
  152. package/dist/cjs/{store-0866de9f.js → store-5fad773e.js} +2 -1
  153. package/dist/collection/collection-manifest.json +5 -3
  154. package/dist/collection/common/config.js +1 -1
  155. package/dist/collection/components/_helpers/directory-selector/directory-selector.js +28 -4
  156. package/dist/collection/components/_helpers/list-selector/list-selector-item/list-selector-item.js +1 -1
  157. package/dist/collection/components/_helpers/list-selector/list-selector.js +1 -1
  158. package/dist/collection/components/_test/test.css +5 -0
  159. package/dist/collection/components/_test/test.js +109 -220
  160. package/dist/collection/components/kb-manager-export/gx-ide-assets/kb-manager-export/langs/kb-manager-export.lang.en.json +4 -1
  161. package/dist/collection/components/kb-manager-export/helpers.js +9 -25
  162. package/dist/collection/components/kb-manager-export/kb-manager-export.js +97 -44
  163. package/dist/collection/components/kb-manager-import/gx-ide-assets/kb-manager-import/langs/kb-manager-import.lang.en.json +1 -0
  164. package/dist/collection/components/kb-manager-import/helpers.js +3 -1
  165. package/dist/collection/components/kb-manager-import/kb-manager-import.js +26 -12
  166. package/dist/components/button-group.js +1 -1
  167. package/dist/components/ch-next-data-modeling-item.js +1 -457
  168. package/dist/components/ch-next-data-modeling-render.js +295 -0
  169. package/dist/components/ch-next-data-modeling.js +1 -27
  170. package/dist/components/ch-tree-view-item.js +6 -0
  171. package/dist/components/ch-tree-view-render-wrapper.js +227 -0
  172. package/dist/components/ch-tree-view-render.js +6 -0
  173. package/dist/components/ch-tree-view.js +6 -0
  174. package/dist/components/config.js +1 -1
  175. package/dist/components/directory-selector.js +25 -5
  176. package/dist/components/form-text.js +1 -0
  177. package/dist/components/gx-ide-kb-manager-export.js +114 -74
  178. package/dist/components/gx-ide-kb-manager-import.js +43 -22
  179. package/dist/components/gx-ide-references.js +21 -15
  180. package/dist/components/gx-ide-test.js +120 -160
  181. package/dist/components/gxg-card.js +66 -4
  182. package/dist/components/gxg-color-picker.js +2 -2
  183. package/dist/components/gxg-pill.js +11 -2
  184. package/dist/components/gxg-pills.js +3 -2
  185. package/dist/components/gxg-title-editable.js +1 -143
  186. package/dist/components/gxg-tree-item.js +614 -1
  187. package/dist/components/gxg-tree-view.js +2 -2
  188. package/dist/components/gxg-tree.js +236 -1
  189. package/dist/components/icon2.js +1 -0
  190. package/dist/components/index.js +5 -3
  191. package/dist/components/next-data-modeling-item.js +466 -0
  192. package/dist/{esm/ch-next-data-modeling.entry.js → components/next-data-modeling.js} +21 -7
  193. package/dist/components/store.js +1 -0
  194. package/dist/components/tab-bar.js +3 -1
  195. package/dist/components/tab-button.js +2 -1
  196. package/dist/components/tab.js +2 -1
  197. package/dist/components/tabs.js +8 -2
  198. package/dist/components/text.js +8 -3
  199. package/dist/components/title-editable.js +152 -0
  200. package/dist/components/{tree-x-list-item.js → tree-view-item.js} +49 -34
  201. package/dist/components/{ch-test-tree-x.js → tree-view-render.js} +242 -39
  202. package/dist/components/tree-view.js +410 -435
  203. package/dist/components/tree-view2.js +231 -0
  204. package/dist/esm/ch-accordion.entry.js +1 -1
  205. package/dist/esm/ch-action-group_2.entry.js +1 -1
  206. package/dist/esm/ch-alert.entry.js +1 -1
  207. package/dist/esm/ch-checkbox_3.entry.js +1165 -0
  208. package/dist/esm/ch-drag-bar.entry.js +1 -1
  209. package/dist/esm/ch-dropdown-item-separator.entry.js +1 -1
  210. package/dist/esm/ch-dropdown-item.entry.js +1 -1
  211. package/dist/esm/ch-dropdown.entry.js +1 -1
  212. package/dist/esm/ch-form-checkbox.entry.js +1 -1
  213. package/dist/esm/ch-grid-action-refresh_7.entry.js +1 -1
  214. package/dist/esm/ch-grid-column-display.entry.js +1 -1
  215. package/dist/esm/ch-grid-infinite-scroll.entry.js +1 -1
  216. package/dist/esm/ch-grid-row-actions.entry.js +1 -1
  217. package/dist/esm/ch-grid-rowset-empty.entry.js +1 -1
  218. package/dist/esm/ch-grid-rowset-legend.entry.js +1 -1
  219. package/dist/esm/ch-grid-virtual-scroller.entry.js +1 -1
  220. package/dist/esm/ch-grid_8.entry.js +2 -2
  221. package/dist/esm/ch-icon_2.entry.js +2 -1
  222. package/dist/esm/ch-intersection-observer.entry.js +1 -1
  223. package/dist/esm/ch-next-data-modeling-render.entry.js +238 -0
  224. package/dist/esm/{ch-next-data-modeling-item.entry.js → ch-next-data-modeling_2.entry.js} +21 -3
  225. package/dist/esm/ch-next-progress-bar.entry.js +1 -1
  226. package/dist/esm/ch-notifications-item.entry.js +1 -1
  227. package/dist/esm/ch-notifications.entry.js +1 -1
  228. package/dist/esm/ch-qr.entry.js +1 -1
  229. package/dist/esm/ch-select-option.entry.js +1 -1
  230. package/dist/esm/ch-select.entry.js +2 -2
  231. package/dist/esm/ch-sidebar-menu-list-item.entry.js +1 -1
  232. package/dist/esm/ch-sidebar-menu-list.entry.js +1 -1
  233. package/dist/esm/ch-sidebar-menu.entry.js +2 -2
  234. package/dist/esm/ch-step-list-item.entry.js +1 -1
  235. package/dist/esm/ch-step-list.entry.js +1 -1
  236. package/dist/esm/ch-style.entry.js +1 -1
  237. package/dist/esm/ch-suggest_4.entry.js +3 -3
  238. package/dist/esm/ch-test-action-group.entry.js +1 -1
  239. package/dist/esm/ch-test-dropdown.entry.js +1 -1
  240. package/dist/esm/ch-test-suggest.entry.js +1 -1
  241. package/dist/esm/ch-textblock.entry.js +1 -1
  242. package/dist/esm/ch-timer.entry.js +1 -1
  243. package/dist/esm/ch-tooltip.entry.js +1 -1
  244. package/dist/esm/ch-tree-item.entry.js +1 -1
  245. package/dist/esm/ch-tree-view-render-wrapper.entry.js +159 -0
  246. package/dist/esm/ch-tree-view-render_2.entry.js +817 -0
  247. package/dist/esm/ch-tree.entry.js +1 -1
  248. package/dist/esm/ch-window_2.entry.js +1 -1
  249. package/dist/esm/{common-ec35ec2f.js → common-202491f0.js} +1 -1
  250. package/dist/esm/{config-ee66bdf4.js → config-e6f580c8.js} +1 -1
  251. package/dist/esm/{form-267b92df.js → form-1e8f483d.js} +1 -1
  252. package/dist/esm/genexus-ide-ui.js +3 -3
  253. package/dist/esm/gx-grid-chameleon.entry.js +1 -1
  254. package/dist/esm/gx-ide-bpm-app-declaration.entry.js +4 -4
  255. package/dist/esm/gx-ide-container_4.entry.js +4 -3
  256. package/dist/esm/gx-ide-create-kb-from-server.entry.js +2 -2
  257. package/dist/esm/gx-ide-directory-selector.entry.js +24 -5
  258. package/dist/esm/gx-ide-entity-selector_2.entry.js +2 -2
  259. package/dist/esm/gx-ide-file-selector.entry.js +1 -1
  260. package/dist/esm/gx-ide-kb-manager-export.entry.js +96 -64
  261. package/dist/esm/gx-ide-kb-manager-import.entry.js +30 -15
  262. package/dist/esm/gx-ide-list-selector_2.entry.js +1 -1
  263. package/dist/esm/gx-ide-new-environment.entry.js +3 -3
  264. package/dist/esm/gx-ide-new-kb.entry.js +3 -3
  265. package/dist/esm/gx-ide-new-object.entry.js +2 -2
  266. package/dist/esm/gx-ide-object-selector.entry.js +3 -3
  267. package/dist/esm/gx-ide-references.entry.js +3 -3
  268. package/dist/esm/gx-ide-share-kb.entry.js +3 -3
  269. package/dist/esm/gx-ide-status-buttons_2.entry.js +1 -1
  270. package/dist/esm/gx-ide-switch-panel.entry.js +1 -1
  271. package/dist/esm/gx-ide-switcher.entry.js +1 -1
  272. package/dist/esm/gx-ide-team-dev-commit.entry.js +3 -3
  273. package/dist/esm/gx-ide-team-dev-select-recent-comment.entry.js +2 -2
  274. package/dist/esm/gx-ide-team-dev-update-partial-selection.entry.js +2 -2
  275. package/dist/esm/gx-ide-team-dev-update-to-revision.entry.js +2 -2
  276. package/dist/esm/gx-ide-team-dev-update.entry.js +3 -3
  277. package/dist/esm/gx-ide-template.entry.js +2 -2
  278. package/dist/esm/gx-ide-test.entry.js +108 -123
  279. package/dist/esm/gx-ide-top-bar.entry.js +1 -1
  280. package/dist/esm/gx-ide-ww-images.entry.js +3 -3
  281. package/dist/esm/gxg-accordion-item.entry.js +2 -2
  282. package/dist/esm/gxg-accordion.entry.js +1 -1
  283. package/dist/esm/gxg-alert.entry.js +1 -1
  284. package/dist/esm/gxg-box.entry.js +1 -1
  285. package/dist/esm/gxg-breadcrumb.entry.js +1 -1
  286. package/dist/esm/gxg-breadcrumbs.entry.js +1 -1
  287. package/dist/esm/gxg-button-group.entry.js +3 -3
  288. package/dist/esm/gxg-button.entry.js +2 -2
  289. package/dist/esm/gxg-card.entry.js +36 -3
  290. package/dist/esm/gxg-color-picker.entry.js +3 -3
  291. package/dist/esm/gxg-column.entry.js +1 -1
  292. package/dist/esm/gxg-columns.entry.js +1 -1
  293. package/dist/esm/gxg-combo-box_2.entry.js +3 -3
  294. package/dist/esm/gxg-container.entry.js +1 -1
  295. package/dist/esm/gxg-contextual-menu-item.entry.js +1 -1
  296. package/dist/esm/gxg-contextual-menu-submenu.entry.js +1 -1
  297. package/dist/esm/gxg-contextual-menu.entry.js +1 -1
  298. package/dist/esm/gxg-demo.entry.js +1 -1
  299. package/dist/esm/gxg-drag-box.entry.js +1 -1
  300. package/dist/esm/gxg-drag-container.entry.js +1 -1
  301. package/dist/esm/gxg-drop-down.entry.js +2 -2
  302. package/dist/esm/gxg-filter-item.entry.js +1 -1
  303. package/dist/esm/gxg-filter.entry.js +1 -1
  304. package/dist/esm/gxg-form-checkbox-group.entry.js +2 -2
  305. package/dist/esm/gxg-form-checkbox.entry.js +3 -3
  306. package/dist/esm/gxg-form-message.entry.js +2 -2
  307. package/dist/esm/gxg-form-radio-group.entry.js +2 -2
  308. package/dist/esm/gxg-form-radio.entry.js +1 -1
  309. package/dist/esm/gxg-form-textarea.entry.js +3 -3
  310. package/dist/esm/gxg-label_2.entry.js +2 -2
  311. package/dist/esm/gxg-list-box_2.entry.js +3 -3
  312. package/dist/esm/gxg-loader.entry.js +1 -1
  313. package/dist/esm/gxg-menu-item.entry.js +1 -1
  314. package/dist/esm/gxg-menu-slim-item.entry.js +1 -1
  315. package/dist/esm/gxg-menu-slim-list.entry.js +1 -1
  316. package/dist/esm/gxg-menu-slim.entry.js +1 -1
  317. package/dist/esm/gxg-menu.entry.js +1 -1
  318. package/dist/esm/gxg-modal.entry.js +2 -2
  319. package/dist/esm/gxg-more-info.entry.js +1 -1
  320. package/dist/esm/gxg-option-v2.entry.js +1 -1
  321. package/dist/esm/gxg-option.entry.js +1 -1
  322. package/dist/esm/gxg-options-item.entry.js +1 -1
  323. package/dist/esm/gxg-options.entry.js +2 -2
  324. package/dist/esm/gxg-paginator.entry.js +1 -1
  325. package/dist/esm/gxg-pill.entry.js +12 -4
  326. package/dist/esm/gxg-pills.entry.js +4 -3
  327. package/dist/esm/gxg-progress-bar.entry.js +1 -1
  328. package/dist/esm/gxg-scroll.entry.js +1 -1
  329. package/dist/esm/gxg-select-v2.entry.js +2 -2
  330. package/dist/esm/gxg-select.entry.js +3 -3
  331. package/dist/esm/gxg-separator.entry.js +1 -1
  332. package/dist/esm/gxg-slider.entry.js +1 -1
  333. package/dist/esm/gxg-spacer-layout.entry.js +1 -1
  334. package/dist/esm/gxg-spacer-one.entry.js +1 -1
  335. package/dist/esm/gxg-split.entry.js +1 -1
  336. package/dist/esm/gxg-splitter.entry.js +1 -1
  337. package/dist/esm/gxg-stack.entry.js +1 -1
  338. package/dist/esm/gxg-stepper.entry.js +1 -1
  339. package/dist/esm/gxg-tab_4.entry.js +14 -7
  340. package/dist/esm/gxg-test.entry.js +1 -1
  341. package/dist/esm/gxg-text.entry.js +8 -4
  342. package/dist/esm/gxg-title-editable.entry.js +11 -5
  343. package/dist/esm/gxg-toggle.entry.js +1 -1
  344. package/dist/esm/gxg-toolbar-item.entry.js +1 -1
  345. package/dist/esm/gxg-toolbar.entry.js +1 -1
  346. package/dist/esm/gxg-tree-grid-divs.entry.js +1 -1
  347. package/dist/{components/gxg-tree-item2.js → esm/gxg-tree-item.entry.js} +9 -79
  348. package/dist/{components/gxg-tree2.js → esm/gxg-tree.entry.js} +8 -32
  349. package/dist/esm/gxg-window.entry.js +1 -1
  350. package/dist/esm/{index-0da01575.js → index-0aa3977d.js} +5 -0
  351. package/dist/esm/{index-ea94e298.js → index-5ae5cf27.js} +1 -1
  352. package/dist/esm/loader.js +3 -3
  353. package/dist/esm/{render-combo-items-faf78e28.js → render-combo-items-ede5de19.js} +1 -1
  354. package/dist/esm/{render-suggest-e44dde1b.js → render-suggest-f3af661b.js} +1 -1
  355. package/dist/esm/{store-c2650ca5.js → store-eca88b9a.js} +2 -1
  356. package/dist/genexus-ide-ui/genexus-ide-ui.css +4 -4
  357. package/dist/genexus-ide-ui/genexus-ide-ui.esm.js +1 -1
  358. package/dist/genexus-ide-ui/gx-ide-assets/kb-manager-export/langs/kb-manager-export.lang.en.json +4 -1
  359. package/dist/genexus-ide-ui/gx-ide-assets/kb-manager-import/langs/kb-manager-import.lang.en.json +1 -0
  360. package/dist/genexus-ide-ui/{p-1fe05a05.entry.js → p-01978a13.entry.js} +1 -1
  361. package/dist/genexus-ide-ui/p-0261c202.entry.js +1 -0
  362. package/dist/genexus-ide-ui/{p-54f01d52.entry.js → p-0371daa4.entry.js} +1 -1
  363. package/dist/genexus-ide-ui/{p-73cfc07c.entry.js → p-040e960d.entry.js} +1 -1
  364. package/dist/genexus-ide-ui/p-045ddedf.entry.js +1 -0
  365. package/dist/genexus-ide-ui/{p-cbe42c29.entry.js → p-0495c639.entry.js} +1 -1
  366. package/dist/genexus-ide-ui/{p-b5dc509f.entry.js → p-07c6f7dd.entry.js} +1 -1
  367. package/dist/genexus-ide-ui/p-0906fb46.js +2 -0
  368. package/dist/genexus-ide-ui/{p-1294d220.entry.js → p-0cba56a1.entry.js} +1 -1
  369. package/dist/genexus-ide-ui/{p-527ace08.entry.js → p-0cc3af0d.entry.js} +1 -1
  370. package/dist/genexus-ide-ui/p-0d7c0cd1.entry.js +1 -0
  371. package/dist/genexus-ide-ui/{p-0c360621.entry.js → p-0e29d370.entry.js} +1 -1
  372. package/dist/genexus-ide-ui/{p-fec82adb.entry.js → p-0ff8550a.entry.js} +1 -1
  373. package/dist/genexus-ide-ui/{p-eddf8a1e.entry.js → p-10fa87ef.entry.js} +1 -1
  374. package/dist/genexus-ide-ui/{p-9aa2dd17.entry.js → p-112dc730.entry.js} +1 -1
  375. package/dist/genexus-ide-ui/{p-bb7ae451.entry.js → p-128c0527.entry.js} +1 -1
  376. package/dist/genexus-ide-ui/{p-db4f2732.entry.js → p-15685d3f.entry.js} +1 -1
  377. package/dist/genexus-ide-ui/{p-df02f70a.entry.js → p-15f4ca7a.entry.js} +1 -1
  378. package/dist/genexus-ide-ui/{p-5e40990d.entry.js → p-161969f3.entry.js} +1 -1
  379. package/dist/genexus-ide-ui/{p-4d506c74.entry.js → p-16aad0e4.entry.js} +1 -1
  380. package/dist/genexus-ide-ui/{p-b9d071f7.entry.js → p-16b0acef.entry.js} +1 -1
  381. package/dist/genexus-ide-ui/{p-fb92083f.entry.js → p-1a8d710a.entry.js} +1 -1
  382. package/dist/genexus-ide-ui/{p-d9a5b3d6.entry.js → p-1ad41f2e.entry.js} +1 -1
  383. package/dist/genexus-ide-ui/p-1bf68774.entry.js +1 -0
  384. package/dist/genexus-ide-ui/{p-81c9847d.entry.js → p-20751bae.entry.js} +1 -1
  385. package/dist/genexus-ide-ui/{p-0dee851b.entry.js → p-207c378b.entry.js} +1 -1
  386. package/dist/genexus-ide-ui/{p-a48badf0.entry.js → p-21a768d0.entry.js} +1 -1
  387. package/dist/genexus-ide-ui/{p-1dece95c.entry.js → p-231244f2.entry.js} +1 -1
  388. package/dist/genexus-ide-ui/{p-e7c46bbe.entry.js → p-2422a593.entry.js} +1 -1
  389. package/dist/genexus-ide-ui/p-2447a18f.entry.js +1 -0
  390. package/dist/genexus-ide-ui/{p-8a29aa0e.entry.js → p-2582e3d7.entry.js} +1 -1
  391. package/dist/genexus-ide-ui/{p-283afc3b.entry.js → p-2589e00e.entry.js} +1 -1
  392. package/dist/genexus-ide-ui/{p-3e3cb535.entry.js → p-264b3088.entry.js} +1 -1
  393. package/dist/genexus-ide-ui/p-264f77c4.entry.js +1 -0
  394. package/dist/genexus-ide-ui/{p-c6b514cb.entry.js → p-266539cf.entry.js} +1 -1
  395. package/dist/genexus-ide-ui/{p-bb77cb65.entry.js → p-27d835c0.entry.js} +1 -1
  396. package/dist/genexus-ide-ui/{p-a8e97a42.entry.js → p-285f0790.entry.js} +1 -1
  397. package/dist/genexus-ide-ui/{p-42209f9f.entry.js → p-2c5289df.entry.js} +1 -1
  398. package/dist/genexus-ide-ui/{p-aacec189.entry.js → p-34f4deb8.entry.js} +1 -1
  399. package/dist/genexus-ide-ui/{p-117498b7.entry.js → p-383f10ab.entry.js} +1 -1
  400. package/dist/genexus-ide-ui/{p-e8e2f4c1.entry.js → p-39bd6c60.entry.js} +1 -1
  401. package/dist/genexus-ide-ui/{p-df7996d5.entry.js → p-39c03652.entry.js} +1 -1
  402. package/dist/genexus-ide-ui/{p-f3837d78.entry.js → p-3b55122b.entry.js} +1 -1
  403. package/dist/genexus-ide-ui/{p-eb328b50.entry.js → p-3fbc7703.entry.js} +1 -1
  404. package/dist/genexus-ide-ui/p-3fc20855.entry.js +1 -0
  405. package/dist/genexus-ide-ui/{p-f8c8eebd.entry.js → p-42f71c47.entry.js} +1 -1
  406. package/dist/genexus-ide-ui/p-43386091.entry.js +1 -0
  407. package/dist/genexus-ide-ui/{p-a2479a2f.entry.js → p-43947003.entry.js} +1 -1
  408. package/dist/genexus-ide-ui/p-439a45c1.entry.js +1 -0
  409. package/dist/genexus-ide-ui/{p-8243c51d.entry.js → p-46632b39.entry.js} +1 -1
  410. package/dist/genexus-ide-ui/{p-bfb41ce9.js → p-47629213.js} +1 -1
  411. package/dist/genexus-ide-ui/{p-4f02b7bf.entry.js → p-4a756245.entry.js} +1 -1
  412. package/dist/genexus-ide-ui/{p-718759e7.entry.js → p-4ad2bc69.entry.js} +1 -1
  413. package/dist/genexus-ide-ui/{p-45b17fd8.entry.js → p-4ca8f7d3.entry.js} +1 -1
  414. package/dist/genexus-ide-ui/{p-9b93752d.entry.js → p-4cb93e1b.entry.js} +1 -1
  415. package/dist/genexus-ide-ui/{p-123b8351.entry.js → p-4d42f077.entry.js} +1 -1
  416. package/dist/genexus-ide-ui/{p-984f7626.entry.js → p-4da6f594.entry.js} +1 -1
  417. package/dist/genexus-ide-ui/{p-780caf92.entry.js → p-4f63438d.entry.js} +1 -1
  418. package/dist/genexus-ide-ui/{p-1fc0c236.entry.js → p-53424a7c.entry.js} +1 -1
  419. package/dist/genexus-ide-ui/{p-11af125f.js → p-551539eb.js} +1 -1
  420. package/dist/genexus-ide-ui/p-5624cbd0.entry.js +1 -0
  421. package/dist/genexus-ide-ui/{p-68ec655f.entry.js → p-57327cd3.entry.js} +1 -1
  422. package/dist/genexus-ide-ui/{p-f69d8c9f.entry.js → p-57972075.entry.js} +1 -1
  423. package/dist/genexus-ide-ui/{p-6b301bbb.entry.js → p-59244df7.entry.js} +1 -1
  424. package/dist/genexus-ide-ui/{p-9dfc4afa.entry.js → p-5babe487.entry.js} +1 -1
  425. package/dist/genexus-ide-ui/{p-5ec25f04.entry.js → p-61b5f2f2.entry.js} +1 -1
  426. package/dist/genexus-ide-ui/{p-71b14079.entry.js → p-61e5b3a7.entry.js} +1 -1
  427. package/dist/genexus-ide-ui/{p-d30c5a8e.entry.js → p-6272fb68.entry.js} +1 -1
  428. package/dist/genexus-ide-ui/{p-606d6814.entry.js → p-6811e556.entry.js} +1 -1
  429. package/dist/genexus-ide-ui/{p-34763105.entry.js → p-68626d13.entry.js} +1 -1
  430. package/dist/genexus-ide-ui/p-689ffafd.entry.js +1 -0
  431. package/dist/genexus-ide-ui/p-68be9582.entry.js +1 -0
  432. package/dist/genexus-ide-ui/{p-90416fc8.js → p-698d274a.js} +1 -1
  433. package/dist/genexus-ide-ui/p-6bb17c51.js +1 -0
  434. package/dist/genexus-ide-ui/{p-d67c476c.entry.js → p-6cd18b45.entry.js} +1 -1
  435. package/dist/genexus-ide-ui/{p-98b8a4b7.entry.js → p-6dba1f6c.entry.js} +1 -1
  436. package/dist/genexus-ide-ui/{p-df744a68.entry.js → p-6fafe9d4.entry.js} +1 -1
  437. package/dist/genexus-ide-ui/{p-8738b63b.entry.js → p-6fb33e4c.entry.js} +1 -1
  438. package/dist/genexus-ide-ui/{p-65e532d8.entry.js → p-718dc78b.entry.js} +1 -1
  439. package/dist/genexus-ide-ui/{p-3485ddda.entry.js → p-73204c8a.entry.js} +1 -1
  440. package/dist/genexus-ide-ui/p-783a1530.entry.js +1 -0
  441. package/dist/genexus-ide-ui/{p-e8a21ed7.entry.js → p-7ae11b35.entry.js} +1 -1
  442. package/dist/genexus-ide-ui/{p-ade59c73.entry.js → p-7d1fd88e.entry.js} +1 -1
  443. package/dist/genexus-ide-ui/{p-82ba2bec.entry.js → p-7d327d28.entry.js} +1 -1
  444. package/dist/genexus-ide-ui/{p-fc6b970d.entry.js → p-7fc8f83b.entry.js} +1 -1
  445. package/dist/genexus-ide-ui/{p-b8917eee.entry.js → p-832a1eff.entry.js} +1 -1
  446. package/dist/genexus-ide-ui/{p-94d2d18a.entry.js → p-88f896a6.entry.js} +1 -1
  447. package/dist/genexus-ide-ui/p-8c574452.entry.js +1 -0
  448. package/dist/genexus-ide-ui/{p-dfac4d3c.entry.js → p-8cf88b58.entry.js} +1 -1
  449. package/dist/genexus-ide-ui/{p-7c44a3c8.entry.js → p-8fddfbd1.entry.js} +1 -1
  450. package/dist/genexus-ide-ui/{p-19e6c2b8.entry.js → p-90b5b7ed.entry.js} +1 -1
  451. package/dist/genexus-ide-ui/{p-4a01a404.entry.js → p-91fe1c0d.entry.js} +1 -1
  452. package/dist/genexus-ide-ui/{p-976e8118.entry.js → p-95d1a4e7.entry.js} +1 -1
  453. package/dist/genexus-ide-ui/{p-3fc9cf29.entry.js → p-97dc4967.entry.js} +1 -1
  454. package/dist/genexus-ide-ui/{p-9f4b6230.entry.js → p-98ea872a.entry.js} +1 -1
  455. package/dist/genexus-ide-ui/{p-fb368434.entry.js → p-99da5de7.entry.js} +1 -1
  456. package/dist/genexus-ide-ui/{p-870c7d8f.entry.js → p-9b29a8e8.entry.js} +1 -1
  457. package/dist/genexus-ide-ui/p-9d73a85c.entry.js +1 -0
  458. package/dist/genexus-ide-ui/{p-1ff3cf87.entry.js → p-9df2aae3.entry.js} +1 -1
  459. package/dist/genexus-ide-ui/p-a0d3d2b0.entry.js +1 -0
  460. package/dist/genexus-ide-ui/{p-abfc0ad8.entry.js → p-a14dde56.entry.js} +1 -1
  461. package/dist/genexus-ide-ui/{p-c11c96d7.entry.js → p-a214edb5.entry.js} +1 -1
  462. package/dist/genexus-ide-ui/{p-a5463fc9.entry.js → p-a2c7dc8a.entry.js} +1 -1
  463. package/dist/genexus-ide-ui/{p-46ed607e.entry.js → p-a6f02255.entry.js} +1 -1
  464. package/dist/genexus-ide-ui/{p-4e53dfaf.entry.js → p-a7c3a0fc.entry.js} +1 -1
  465. package/dist/genexus-ide-ui/p-a85038e2.js +1 -0
  466. package/dist/genexus-ide-ui/{p-566ae3e7.entry.js → p-a96aa03c.entry.js} +1 -1
  467. package/dist/genexus-ide-ui/p-a99c17b1.entry.js +1 -0
  468. package/dist/genexus-ide-ui/{p-56935fba.entry.js → p-b0268924.entry.js} +1 -1
  469. package/dist/genexus-ide-ui/{p-52f6ee1e.js → p-b9fca59c.js} +1 -1
  470. package/dist/genexus-ide-ui/{p-f93e94dc.entry.js → p-ba7c3c18.entry.js} +1 -1
  471. package/dist/genexus-ide-ui/{p-0574b321.entry.js → p-bca4d4c1.entry.js} +1 -1
  472. package/dist/genexus-ide-ui/{p-25b333a5.entry.js → p-bce289e6.entry.js} +1 -1
  473. package/dist/genexus-ide-ui/{p-339a8480.entry.js → p-bf93ac90.entry.js} +1 -1
  474. package/dist/genexus-ide-ui/{p-9c82381c.entry.js → p-c00aa636.entry.js} +1 -1
  475. package/dist/genexus-ide-ui/{p-1b51da5e.entry.js → p-c0532785.entry.js} +1 -1
  476. package/dist/genexus-ide-ui/{p-8a70239f.entry.js → p-c19354eb.entry.js} +1 -1
  477. package/dist/genexus-ide-ui/{p-aec51bab.entry.js → p-c5e22cd8.entry.js} +1 -1
  478. package/dist/genexus-ide-ui/p-c74f5d08.entry.js +1 -0
  479. package/dist/genexus-ide-ui/p-c914cc1f.entry.js +1 -0
  480. package/dist/genexus-ide-ui/{p-b4b4cbdc.entry.js → p-cb1845a9.entry.js} +1 -1
  481. package/dist/genexus-ide-ui/{p-ad30241e.entry.js → p-cc7d2262.entry.js} +1 -1
  482. package/dist/genexus-ide-ui/{p-4cf3c2b9.entry.js → p-ccc9151e.entry.js} +1 -1
  483. package/dist/genexus-ide-ui/{p-72be1b75.entry.js → p-cd2fb5c9.entry.js} +1 -1
  484. package/dist/genexus-ide-ui/{p-7e13efb2.entry.js → p-cd6dafe5.entry.js} +1 -1
  485. package/dist/genexus-ide-ui/{p-5cc7c201.entry.js → p-cdaaf8f9.entry.js} +1 -1
  486. package/dist/genexus-ide-ui/{p-e542c155.entry.js → p-ce76b613.entry.js} +1 -1
  487. package/dist/genexus-ide-ui/{p-f7aa606a.entry.js → p-cf421c67.entry.js} +1 -1
  488. package/dist/genexus-ide-ui/{p-cb3a255c.entry.js → p-d080030a.entry.js} +1 -1
  489. package/dist/genexus-ide-ui/p-d0dbf94f.entry.js +1 -0
  490. package/dist/genexus-ide-ui/{p-133b562f.entry.js → p-d25da0c9.entry.js} +1 -1
  491. package/dist/genexus-ide-ui/{p-b0cb9690.entry.js → p-d5005f26.entry.js} +1 -1
  492. package/dist/genexus-ide-ui/{p-f9f1d95d.entry.js → p-da2dfb82.entry.js} +1 -1
  493. package/dist/genexus-ide-ui/{p-32bade0f.entry.js → p-da5317f5.entry.js} +1 -1
  494. package/dist/genexus-ide-ui/{p-657e57e7.entry.js → p-dc3efe56.entry.js} +1 -1
  495. package/dist/genexus-ide-ui/p-e45b5686.entry.js +1 -0
  496. package/dist/genexus-ide-ui/{p-9e428123.entry.js → p-e7c96dec.entry.js} +1 -1
  497. package/dist/genexus-ide-ui/{p-0f1388e1.entry.js → p-eb3895cc.entry.js} +1 -1
  498. package/dist/genexus-ide-ui/{p-93ec18f7.entry.js → p-eb49012b.entry.js} +1 -1
  499. package/dist/genexus-ide-ui/{p-7dd9df47.entry.js → p-ed89f1ee.entry.js} +1 -1
  500. package/dist/genexus-ide-ui/{p-3c8b9c4b.entry.js → p-efd187d0.entry.js} +1 -1
  501. package/dist/genexus-ide-ui/{p-b900ffbc.entry.js → p-f7fd7fa8.entry.js} +1 -1
  502. package/dist/genexus-ide-ui/{p-6d42b2c4.entry.js → p-f8750a75.entry.js} +1 -1
  503. package/dist/genexus-ide-ui/p-f97d7bbe.entry.js +1 -0
  504. package/dist/genexus-ide-ui/p-fa4e7177.js +1 -0
  505. package/dist/genexus-ide-ui/{p-253669d3.entry.js → p-fb2a7e10.entry.js} +1 -1
  506. package/dist/genexus-ide-ui/{p-0e28d8f3.entry.js → p-fb921907.entry.js} +1 -1
  507. package/dist/genexus-ide-ui/{p-866f6d39.entry.js → p-fc03bdd3.entry.js} +1 -1
  508. package/dist/genexus-ide-ui/{p-d7b452ef.entry.js → p-fd73e13a.entry.js} +1 -1
  509. package/dist/genexus-ide-ui/{p-0ae159de.entry.js → p-fdb7b01c.entry.js} +1 -1
  510. package/dist/node_modules/@genexus/chameleon-controls-library/dist/collection/components/next/data-modeling-render/next-data-modeling-render.css +3 -0
  511. package/dist/node_modules/@genexus/chameleon-controls-library/dist/collection/components/renders/tree-view/tree-view-render.css +3 -0
  512. package/dist/node_modules/@genexus/chameleon-controls-library/dist/collection/components/test/test-tree-view/tree-view-render-wrapper.css +0 -0
  513. package/dist/node_modules/@genexus/chameleon-controls-library/dist/collection/components/tree-view/tree-view/tree-view.css +45 -0
  514. package/dist/node_modules/@genexus/chameleon-controls-library/dist/collection/components/tree-view/{tree-x-list-item/tree-x-list-item.css → tree-view-item/tree-view-item.css} +58 -36
  515. package/dist/node_modules/@genexus/gemini/dist/collection/components/button-group/button-group.css +4 -5
  516. package/dist/node_modules/@genexus/gemini/dist/collection/components/card/card.css +96 -0
  517. package/dist/node_modules/@genexus/gemini/dist/collection/components/pills/pill.css +28 -0
  518. package/dist/node_modules/@genexus/gemini/dist/collection/components/pills/pills.css +7 -0
  519. package/dist/node_modules/@genexus/gemini/dist/collection/components/tab/tab.css +6 -0
  520. package/dist/node_modules/@genexus/gemini/dist/collection/components/tab-bar/tab-bar.css +10 -0
  521. package/dist/node_modules/@genexus/gemini/dist/collection/components/tab-button/tab-button.css +43 -0
  522. package/dist/node_modules/@genexus/gemini/dist/collection/components/tabs/tabs.css +12 -0
  523. package/dist/node_modules/@genexus/gemini/dist/collection/components/text/text.css +9 -0
  524. package/dist/node_modules/@genexus/gemini/dist/collection/components/title-editable/title-editable.css +25 -6
  525. package/dist/node_modules/@genexus/gemini/dist/collection/components/tree-view/tree-view.css +20 -25
  526. package/dist/types/common/helpers.d.ts +2 -2
  527. package/dist/types/components/_helpers/directory-selector/directory-selector.d.ts +4 -0
  528. package/dist/types/components/_test/test.d.ts +3 -35
  529. package/dist/types/components/kb-manager-export/helpers.d.ts +6 -4
  530. package/dist/types/components/kb-manager-export/kb-manager-export.d.ts +15 -8
  531. package/dist/types/components/kb-manager-import/helpers.d.ts +4 -3
  532. package/dist/types/components/kb-manager-import/kb-manager-import.d.ts +7 -6
  533. package/dist/types/components/references/helpers.d.ts +2 -2
  534. package/dist/types/components/references/references.d.ts +3 -3
  535. package/dist/types/components.d.ts +3 -60
  536. package/package.json +3 -3
  537. package/dist/cjs/ch-checkbox.cjs.entry.js +0 -93
  538. package/dist/cjs/ch-next-data-modeling.cjs.entry.js +0 -19
  539. package/dist/cjs/ch-test-tree-x.cjs.entry.js +0 -458
  540. package/dist/cjs/ch-tree-x_3.cjs.entry.js +0 -1541
  541. package/dist/components/ch-tree-x-list-item.js +0 -6
  542. package/dist/components/ch-tree-x.js +0 -6
  543. package/dist/components/tree-x.js +0 -504
  544. package/dist/esm/ch-checkbox.entry.js +0 -89
  545. package/dist/esm/ch-test-tree-x.entry.js +0 -454
  546. package/dist/esm/ch-tree-x_3.entry.js +0 -1535
  547. package/dist/esm/gxg-tree_2.entry.js +0 -757
  548. package/dist/genexus-ide-ui/p-00b5896d.entry.js +0 -1
  549. package/dist/genexus-ide-ui/p-092ccacd.entry.js +0 -1
  550. package/dist/genexus-ide-ui/p-1ad68b23.entry.js +0 -3
  551. package/dist/genexus-ide-ui/p-292fc3f4.entry.js +0 -1
  552. package/dist/genexus-ide-ui/p-2e0a65a3.entry.js +0 -1
  553. package/dist/genexus-ide-ui/p-2f3c0023.entry.js +0 -1
  554. package/dist/genexus-ide-ui/p-3442d19a.entry.js +0 -1
  555. package/dist/genexus-ide-ui/p-38c18db5.js +0 -1
  556. package/dist/genexus-ide-ui/p-39968306.entry.js +0 -1
  557. package/dist/genexus-ide-ui/p-3f0f7f80.entry.js +0 -1
  558. package/dist/genexus-ide-ui/p-5755f985.entry.js +0 -1
  559. package/dist/genexus-ide-ui/p-606fee7b.entry.js +0 -1
  560. package/dist/genexus-ide-ui/p-6211ca46.entry.js +0 -1
  561. package/dist/genexus-ide-ui/p-85597097.entry.js +0 -1
  562. package/dist/genexus-ide-ui/p-9380b713.entry.js +0 -1
  563. package/dist/genexus-ide-ui/p-976c3a09.js +0 -2
  564. package/dist/genexus-ide-ui/p-9e530c7d.entry.js +0 -1
  565. package/dist/genexus-ide-ui/p-ad5040e4.entry.js +0 -1
  566. package/dist/genexus-ide-ui/p-aeb3b032.entry.js +0 -1
  567. package/dist/genexus-ide-ui/p-b8d5c561.js +0 -1
  568. package/dist/genexus-ide-ui/p-c53522c9.entry.js +0 -1
  569. package/dist/genexus-ide-ui/p-d104f9a4.entry.js +0 -1
  570. package/dist/genexus-ide-ui/p-e46e26a6.js +0 -1
  571. package/dist/genexus-ide-ui/p-f6a6d8bb.entry.js +0 -1
  572. package/dist/genexus-ide-ui/p-fbb1cd20.entry.js +0 -1
  573. package/dist/node_modules/@genexus/chameleon-controls-library/dist/collection/components/test/test-tree-x.css +0 -3
  574. package/dist/node_modules/@genexus/chameleon-controls-library/dist/collection/components/tree-view/tree-x/tree-x.css +0 -45
@@ -0,0 +1,1165 @@
1
+ import { r as registerInstance, c as createEvent, h, H as Host, g as getElement, w as writeTask } from './index-0aa3977d.js';
2
+ import { D as DISABLED_CLASS } from './reserverd-names-2a2d0fb3.js';
3
+ import { f as focusComposedPath, m as mouseEventModifierKey } from './helpers-1ecd5e26.js';
4
+
5
+ const checkboxCss = "*,::before,::after{box-sizing:border-box}:host{display:flex;align-items:center;align-self:stretch;outline:unset;touch-action:manipulation;user-select:none}:host(.ch-checkbox--actionable) :is(.input,.label){cursor:pointer}.container{position:relative;width:min(1em, 20px);height:min(1em, 20px);border:1px solid var(--option-border-color, currentColor);border-radius:18.75%}.container--checked{background-color:var(--option-checked-color, #ffffff00)}.container:focus-within{box-shadow:0 0 1px 1px color-mix(in srgb, currentColor 25%, transparent)}.input{display:flex;width:100%;height:100%;opacity:0;margin:0;padding:0}.option{position:absolute;left:50%;top:50%;transform:translate(-50%, -50%);width:50%;height:50%;background-color:currentColor;opacity:0;pointer-events:none}.option--checked{opacity:1;-webkit-mask:url(\"data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8' %3E%3Cpath fill='currentColor' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z' /%3E%3C/svg%3E\")}.option--indeterminate{opacity:1}.label{margin-inline-start:min(0.35em, 7px)}";
6
+
7
+ const CHECKBOX_ID = "checkbox";
8
+ const PARTS = (checked, indeterminate) => `${checked ? " checked" : ""}${indeterminate ? " indeterminate" : ""}`;
9
+ const CheckBox = class {
10
+ constructor(hostRef) {
11
+ registerInstance(this, hostRef);
12
+ this.click = createEvent(this, "click", 7);
13
+ this.input = createEvent(this, "input", 7);
14
+ /**
15
+ * This attribute lets you specify if the element is disabled.
16
+ * If disabled, it will not fire any user interaction related event
17
+ * (for example, click event).
18
+ */
19
+ this.disabled = false;
20
+ /**
21
+ * True to highlight control when an action is fired.
22
+ */
23
+ this.highlightable = false;
24
+ /**
25
+ * `true` if the control's value is indeterminate.
26
+ */
27
+ this.indeterminate = false;
28
+ /**
29
+ * This attribute indicates that the user cannot modify the value of the control.
30
+ * Same as [readonly](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#attr-readonly)
31
+ * attribute for `input` elements.
32
+ */
33
+ this.readonly = false;
34
+ this.getValue = (checked) => checked ? this.checkedValue : this.unCheckedValue;
35
+ /**
36
+ * Checks if it is necessary to prevent the click from bubbling
37
+ */
38
+ this.handleClick = (event) => {
39
+ if (this.readonly || this.disabled) {
40
+ return;
41
+ }
42
+ event.stopPropagation();
43
+ };
44
+ this.handleChange = (event) => {
45
+ event.stopPropagation();
46
+ const inputRef = event.target;
47
+ const checked = inputRef.checked;
48
+ const value = this.getValue(checked);
49
+ this.checked = checked;
50
+ this.value = value;
51
+ inputRef.value = value; // Update input's value before emitting the event
52
+ this.input.emit(event);
53
+ if (this.highlightable) {
54
+ this.click.emit();
55
+ }
56
+ };
57
+ }
58
+ valueChanged() {
59
+ this.checked = this.value === this.checkedValue;
60
+ }
61
+ componentWillLoad() {
62
+ this.checked = this.value === this.checkedValue;
63
+ }
64
+ render() {
65
+ var _a;
66
+ const additionalParts = PARTS(this.checked, this.indeterminate);
67
+ return (h(Host, { class: {
68
+ [DISABLED_CLASS]: this.disabled,
69
+ "ch-checkbox--actionable": (!this.readonly && !this.disabled) ||
70
+ (this.readonly && this.highlightable)
71
+ } }, h("div", { class: {
72
+ container: true,
73
+ "container--checked": this.checked
74
+ }, part: `container${additionalParts}` }, h("input", { "aria-label": ((_a = this.accessibleName) === null || _a === void 0 ? void 0 : _a.trim()) !== "" &&
75
+ this.accessibleName !== this.caption
76
+ ? this.accessibleName
77
+ : null, id: this.caption ? CHECKBOX_ID : null, class: "input", part: "input", type: "checkbox", checked: this.checked, disabled: this.disabled || this.readonly, indeterminate: this.indeterminate, value: this.value, onClick: this.handleClick, onInput: this.handleChange }), h("div", { class: {
78
+ option: true,
79
+ "option--checked": this.checked && !this.indeterminate,
80
+ "option--indeterminate": this.indeterminate
81
+ }, part: `option${additionalParts}`, "aria-hidden": "true" })), this.caption && (h("label", { class: "label", part: "label", htmlFor: CHECKBOX_ID, onClick: this.handleClick }, this.caption))));
82
+ }
83
+ get element() { return getElement(this); }
84
+ static get watchers() { return {
85
+ "value": ["valueChanged"]
86
+ }; }
87
+ };
88
+ CheckBox.style = checkboxCss;
89
+
90
+ const scrollToEdge = (event, container, scrollSpeed, scrollThreshold) => {
91
+ const mousePositionY = event.clientY - container.getBoundingClientRect().top;
92
+ const containerHeight = container.clientHeight;
93
+ const mouseAtTheTop = mousePositionY <= scrollThreshold;
94
+ const mouseAtTheBottom = mousePositionY > containerHeight - scrollThreshold;
95
+ if (mouseAtTheTop || mouseAtTheBottom) {
96
+ const scrollAmount = mouseAtTheTop
97
+ ? mousePositionY - scrollThreshold
98
+ : mousePositionY - (containerHeight - scrollThreshold);
99
+ // Adjust container scroll position
100
+ container.scrollTop += scrollAmount / scrollSpeed;
101
+ }
102
+ };
103
+
104
+ const treeViewCss = "ch-tree-view{display:flex;position:relative;width:100%;overflow:auto}ch-tree-view>.ch-tree-view-container{position:absolute;inset:0}ch-tree-view.ch-tree-view-dragging-item ch-tree-view-item{pointer-events:var(--ch-tree-view-pointer-events, all)}ch-tree-view.ch-tree-view-dragging-item .ch-tree-view-list-item--deny-drop{pointer-events:none}ch-tree-view.ch-tree-view--dragging-selected-items ch-tree-view-item[selected]{--ch-tree-view-pointer-events:none}ch-tree-view.ch-tree-view-waiting-drop-processing{cursor:wait}ch-tree-view.ch-tree-view-waiting-drop-processing>.ch-tree-view-container{pointer-events:none}.ch-tree-view-drag-info{--rtl-offset:16px;position:fixed;left:0;top:0;transform:translate(calc(var(--ch-tree-view-dragging-item-x) + var(--rtl-offset)), calc(var(--ch-tree-view-dragging-item-y) + 8px));pointer-events:none;z-index:1;animation:ch-tree-view-drag-info-fade-in 10ms}@keyframes ch-tree-view-drag-info-fade-in{0%,100%{opacity:0}}html[dir=rtl] .ch-tree-view-drag-info{--rtl-offset:-100%}";
105
+
106
+ const TREE_ITEM_TAG_NAME$1 = "ch-tree-view-item";
107
+ const TREE_TAG_NAME = "ch-tree-view";
108
+ // Selectors
109
+ // const CHECKED_ITEMS = `${TREE_ITEM_TAG_NAME}[checked]`;
110
+ const TEXT_FORMAT = "text/plain";
111
+ const ARROW_DOWN_KEY = "ArrowDown";
112
+ const ARROW_UP_KEY = "ArrowUp";
113
+ const EDIT_KEY = "F2";
114
+ const isTreeItem = (element) => element.tagName.toLowerCase() === TREE_ITEM_TAG_NAME$1;
115
+ const getFocusedTreeItem = () => focusComposedPath().find(isTreeItem);
116
+ const canMoveTreeItemFocus = (treeItem) => treeItem && !treeItem.editing;
117
+ const getDroppableZoneKey = (newContainerId, draggedItems) => `"newContainerId":"${newContainerId}","metadata":"${JSON.stringify(draggedItems)}"`;
118
+ const POSITION_X_DRAG_CUSTOM_VAR = "--ch-tree-view-dragging-item-x";
119
+ const POSITION_Y_DRAG_CUSTOM_VAR = "--ch-tree-view-dragging-item-y";
120
+ const ChTreeView = class {
121
+ constructor(hostRef) {
122
+ registerInstance(this, hostRef);
123
+ this.droppableZoneEnter = createEvent(this, "droppableZoneEnter", 7);
124
+ this.expandedItemChange = createEvent(this, "expandedItemChange", 7);
125
+ this.itemContextmenu = createEvent(this, "itemContextmenu", 7);
126
+ this.itemsDropped = createEvent(this, "itemsDropped", 7);
127
+ this.selectedItemsChange = createEvent(this, "selectedItemsChange", 7);
128
+ // @todo TODO: Check if key codes works in Safari
129
+ this.keyDownEvents = {
130
+ [ARROW_DOWN_KEY]: event => {
131
+ const treeItem = getFocusedTreeItem();
132
+ if (!canMoveTreeItemFocus(treeItem)) {
133
+ return;
134
+ }
135
+ event.preventDefault();
136
+ treeItem.focusNextItem(mouseEventModifierKey(event));
137
+ },
138
+ [ARROW_UP_KEY]: event => {
139
+ const treeItem = getFocusedTreeItem();
140
+ if (!canMoveTreeItemFocus(treeItem)) {
141
+ return;
142
+ }
143
+ event.preventDefault();
144
+ treeItem.focusPreviousItem(mouseEventModifierKey(event));
145
+ },
146
+ [EDIT_KEY]: event => {
147
+ const treeItem = getFocusedTreeItem();
148
+ if (!treeItem || !treeItem.editable) {
149
+ return;
150
+ }
151
+ event.preventDefault();
152
+ treeItem.editing = true;
153
+ }
154
+ };
155
+ this.draggingSelectedItems = false;
156
+ this.needForRAF = true; // To prevent redundant RAF (request animation frame) calls
157
+ this.selectedItemsInfo = new Map();
158
+ /**
159
+ * Cache to avoid duplicate requests when checking the droppable zone in the
160
+ * same drag event.
161
+ */
162
+ this.validDroppableZoneCache = new Map();
163
+ this.draggedIds = [];
164
+ this.draggedParentIds = [];
165
+ this.draggingInTheDocument = false;
166
+ this.draggingInTree = false;
167
+ /**
168
+ * Set this attribute if you want to allow multi selection of the items.
169
+ */
170
+ this.multiSelection = false;
171
+ /**
172
+ * This property lets you specify the time (in ms) that the mouse must be
173
+ * over in a subtree to open it when dragging.
174
+ */
175
+ this.openSubTreeCountdown = 750;
176
+ /**
177
+ * `true` to scroll in the tree when dragging an item near the edges of the
178
+ * tree.
179
+ */
180
+ this.scrollToEdgeOnDrag = true;
181
+ /**
182
+ * This property lets you specify if the tree is waiting to process the drop
183
+ * of items.
184
+ */
185
+ this.waitDropProcessing = false;
186
+ this.trackItemDrag = (event) => {
187
+ event.preventDefault();
188
+ this.lastDragEvent = event;
189
+ this.updateDropEffect(event);
190
+ if (!this.needForRAF) {
191
+ return;
192
+ }
193
+ this.needForRAF = false; // No need to call RAF up until next frame
194
+ requestAnimationFrame(() => {
195
+ this.needForRAF = true; // RAF now consumes the movement instruction so a new one can come
196
+ this.el.style.setProperty(POSITION_X_DRAG_CUSTOM_VAR, `${this.lastDragEvent.pageX}px`);
197
+ this.el.style.setProperty(POSITION_Y_DRAG_CUSTOM_VAR, `${this.lastDragEvent.pageY}px`);
198
+ });
199
+ };
200
+ this.fixScrollPositionOnDrag = () => {
201
+ if (!this.draggingInTree || !this.lastDragEvent) {
202
+ return;
203
+ }
204
+ requestAnimationFrame(() => {
205
+ scrollToEdge(this.lastDragEvent, this.el, 10, 30);
206
+ requestAnimationFrame(this.fixScrollPositionOnDrag);
207
+ });
208
+ };
209
+ }
210
+ // /**
211
+ // * Returns an array of the selected tree items, providing the id, caption and
212
+ // * selected status.
213
+ // */
214
+ // @Method()
215
+ // async getCheckedItems(): Promise<CheckedTreeItemInfo[]> {
216
+ // const checkedItems = Array.from(
217
+ // this.el.querySelectorAll(CHECKED_ITEMS)
218
+ // ) as HTMLChTreeViewItemElement[];
219
+ // return checkedItems.map(item => ({
220
+ // id: item.id,
221
+ // caption: item.caption,
222
+ // selected: item.selected
223
+ // }));
224
+ // }
225
+ handleContextMenuEvent(event) {
226
+ const treeItem = event.target.closest(TREE_ITEM_TAG_NAME$1);
227
+ if (!treeItem) {
228
+ return;
229
+ }
230
+ event.preventDefault();
231
+ this.itemContextmenu.emit({
232
+ id: treeItem.id,
233
+ itemRef: treeItem,
234
+ metadata: treeItem.metadata,
235
+ contextmenuEvent: event
236
+ });
237
+ }
238
+ // Set edit mode in items
239
+ handleKeyDownEvents(event) {
240
+ const keyHandler = this.keyDownEvents[event.key];
241
+ if (keyHandler) {
242
+ keyHandler(event);
243
+ }
244
+ }
245
+ // We can't use capture, because the dataTransfer info would not be defined
246
+ // Also, we cant use capture and setTimeout with 0 seconds, because the
247
+ // getData method can only be accessed during the dragstart and drop event
248
+ handleDragStart(event) {
249
+ // Reset the validity of the droppable zones with each new drag start
250
+ this.validDroppableZoneCache.clear();
251
+ this.draggingInTheDocument = true;
252
+ this.dragStartTimestamp = new Date().getTime();
253
+ this.draggedItems = JSON.parse(event.dataTransfer.getData(TEXT_FORMAT));
254
+ }
255
+ handleDragEnd() {
256
+ this.draggingInTheDocument = false;
257
+ }
258
+ handleDragEnter(event) {
259
+ this.cancelSubTreeOpening(null, true);
260
+ event.stopPropagation();
261
+ const containerTarget = event.target;
262
+ // Check if it is a valid item
263
+ if (containerTarget.tagName.toLowerCase() !== TREE_ITEM_TAG_NAME$1) {
264
+ return;
265
+ }
266
+ this.lastOpenSubTreeItem = containerTarget;
267
+ this.openSubTreeAfterCountdown(containerTarget);
268
+ if (this.validDroppableZone(event) === "valid") {
269
+ containerTarget.dragState = "enter";
270
+ }
271
+ }
272
+ handleDragLeave(event) {
273
+ const currentTarget = event.target;
274
+ if (currentTarget.tagName.toLowerCase() !== TREE_ITEM_TAG_NAME$1) {
275
+ return;
276
+ }
277
+ const treeItem = currentTarget;
278
+ treeItem.dragState = "none";
279
+ this.cancelSubTreeOpening(treeItem);
280
+ }
281
+ cancelSubTreeOpening(treeItem, forceClear = false) {
282
+ if (this.lastOpenSubTreeItem === treeItem || forceClear) {
283
+ clearTimeout(this.openSubTreeTimeout);
284
+ this.lastOpenSubTreeItem = null;
285
+ }
286
+ }
287
+ handleItemDrop(event) {
288
+ event.stopPropagation();
289
+ this.cancelSubTreeOpening(null, true);
290
+ const newContainer = event.target;
291
+ const draggedItems = JSON.parse(event.dataTransfer.getData(TEXT_FORMAT));
292
+ // The droppable zone must be checked, even if it was marked as not valid
293
+ // @todo Try to drop an item with high delays in droppable zone checking
294
+ if (this.validDroppableZone(event) !== "valid") {
295
+ return;
296
+ }
297
+ this.itemsDropped.emit({
298
+ newContainer: { id: newContainer.id, metadata: newContainer.metadata },
299
+ draggingSelectedItems: this.draggingSelectedItems,
300
+ draggedItems: draggedItems,
301
+ dropInTheSameTree: this.draggingInTree
302
+ });
303
+ }
304
+ handleItemDragStart(event) {
305
+ document.body.addEventListener("dragover", this.trackItemDrag, {
306
+ capture: true
307
+ });
308
+ this.currentDraggedItem = event.target;
309
+ const allItemsCanBeDragged = this.checkDragValidityAndUpdateDragInfo(event.detail);
310
+ if (!allItemsCanBeDragged) {
311
+ // This effect disables drop interactions in all page elements, so there
312
+ // is no need to capture and prevent the drop event in the window
313
+ event.detail.dragEvent.dataTransfer.effectAllowed = "none";
314
+ return;
315
+ }
316
+ this.draggingInTree = true;
317
+ if (this.scrollToEdgeOnDrag) {
318
+ this.fixScrollPositionOnDrag();
319
+ }
320
+ }
321
+ handleItemDragEnd() {
322
+ this.draggingInTree = false;
323
+ document.body.removeEventListener("dragover", this.trackItemDrag, {
324
+ capture: true
325
+ });
326
+ // Reset not allowed droppable ids
327
+ this.resetVariables();
328
+ }
329
+ /**
330
+ * Only sync the info about the selected items. It does not update the state
331
+ * of the previous selected items.
332
+ */
333
+ handleSelectedItemSync(event) {
334
+ event.stopPropagation();
335
+ const selectedItemInfo = event.detail;
336
+ // If the item is selected, add it to list
337
+ if (selectedItemInfo.selected) {
338
+ this.selectedItemsInfo.set(selectedItemInfo.id, selectedItemInfo);
339
+ }
340
+ else {
341
+ this.selectedItemsInfo.delete(selectedItemInfo.id);
342
+ }
343
+ }
344
+ handleSelectedItemChange(event) {
345
+ event.stopPropagation();
346
+ const selectedItemInfo = event.detail;
347
+ const selectedItemEl = event.target;
348
+ this.handleItemSelection(selectedItemEl, selectedItemInfo);
349
+ }
350
+ /**
351
+ * Clear all information about the selected items. This method is intended to
352
+ * be used when selected items are reordered and the selected references will
353
+ * no longer be useful.
354
+ */
355
+ async clearSelectedItemsInfo() {
356
+ this.clearSelectedItems();
357
+ }
358
+ /**
359
+ * Given an item id, it displays and scrolls into the item view.
360
+ */
361
+ async scrollIntoVisible(treeItemId) {
362
+ const itemRef = this.el.querySelector(`${TREE_ITEM_TAG_NAME$1}#${treeItemId}`);
363
+ if (!itemRef) {
364
+ return;
365
+ }
366
+ let parentItem = itemRef.parentElement;
367
+ // Expand all parents
368
+ while (parentItem.tagName.toLowerCase() === TREE_ITEM_TAG_NAME$1) {
369
+ parentItem.expanded = true;
370
+ parentItem = parentItem.parentElement;
371
+ }
372
+ // Wait until the parents are expanded
373
+ requestAnimationFrame(() => {
374
+ itemRef.scrollIntoView();
375
+ });
376
+ }
377
+ /**
378
+ * Update the information about the valid droppable zones.
379
+ * @param requestTimestamp Time where the request to the server was made. Useful to avoid having old information.
380
+ * @param newContainerId ID of the container where the drag is trying to be made.
381
+ * @param draggedItems Information about the dragged items.
382
+ * @param validDrop Current state of the droppable zone.
383
+ */
384
+ async updateValidDropZone(requestTimestamp, newContainerId, draggedItems, validDrop) {
385
+ var _a;
386
+ if (!this.draggingInTheDocument ||
387
+ requestTimestamp <= this.dragStartTimestamp) {
388
+ return;
389
+ }
390
+ const droppableZoneKey = getDroppableZoneKey(newContainerId, draggedItems);
391
+ this.validDroppableZoneCache.set(droppableZoneKey, validDrop ? "valid" : "invalid");
392
+ const shouldUpdateDragEnterInCurrentContainer = ((_a = this.lastOpenSubTreeItem) === null || _a === void 0 ? void 0 : _a.id) === newContainerId;
393
+ if (shouldUpdateDragEnterInCurrentContainer) {
394
+ this.lastOpenSubTreeItem.dragState = "enter";
395
+ }
396
+ }
397
+ validDroppableZone(event) {
398
+ const containerTarget = event.target;
399
+ const cacheKey = getDroppableZoneKey(containerTarget.id, this.draggedItems);
400
+ let droppableZoneState = this.validDroppableZoneCache.get(cacheKey);
401
+ // Invalidate the cache, because the item is no longer waiting for its content to be downloaded
402
+ if (droppableZoneState === "temporal-invalid" &&
403
+ !containerTarget.lazyLoad &&
404
+ !containerTarget.downloading) {
405
+ droppableZoneState = null;
406
+ }
407
+ if (droppableZoneState != null) {
408
+ return droppableZoneState;
409
+ }
410
+ // Do not show drop zones if:
411
+ // - The effect does not allow it.
412
+ // - The drop is disabled in the container target.
413
+ // - When dragging in the same tree, don't mark droppable zones if they are
414
+ // the dragged items or their direct parents.
415
+ if (event.dataTransfer.effectAllowed === "none" ||
416
+ containerTarget.dropDisabled ||
417
+ (this.draggingInTree &&
418
+ (this.draggedIds.includes(containerTarget.id) ||
419
+ this.draggedParentIds.includes(containerTarget.id)))) {
420
+ this.validDroppableZoneCache.set(cacheKey, "invalid");
421
+ return "invalid";
422
+ }
423
+ // Disable drops when items need to lazy load their content first
424
+ if (containerTarget.lazyLoad || containerTarget.downloading) {
425
+ this.validDroppableZoneCache.set(cacheKey, "temporal-invalid");
426
+ return "temporal-invalid";
427
+ }
428
+ this.validDroppableZoneCache.set(cacheKey, "checking");
429
+ this.droppableZoneEnter.emit({
430
+ newContainer: {
431
+ id: containerTarget.id,
432
+ metadata: containerTarget.metadata
433
+ },
434
+ draggedItems: this.draggedItems
435
+ });
436
+ return "checking";
437
+ }
438
+ openSubTreeAfterCountdown(currentTarget) {
439
+ if (currentTarget.leaf || currentTarget.expanded) {
440
+ return;
441
+ }
442
+ this.openSubTreeTimeout = setTimeout(() => {
443
+ currentTarget.expanded = true;
444
+ this.expandedItemChange.emit({ id: currentTarget.id, expanded: true });
445
+ }, this.openSubTreeCountdown);
446
+ }
447
+ updateDropEffect(event) {
448
+ const itemTarget = event.target;
449
+ // Check if it is a valid item
450
+ if (itemTarget.tagName.toLowerCase() !== TREE_ITEM_TAG_NAME$1 ||
451
+ itemTarget.closest(TREE_TAG_NAME) !== this.el) {
452
+ return;
453
+ }
454
+ const droppableZoneState = this.validDroppableZone(event);
455
+ if (droppableZoneState === "invalid" ||
456
+ droppableZoneState === "temporal-invalid") {
457
+ event.dataTransfer.dropEffect = "none";
458
+ }
459
+ }
460
+ resetVariables() {
461
+ this.draggedIds = [];
462
+ this.draggedParentIds = [];
463
+ }
464
+ /**
465
+ * First, it check if all items can be dragged. If so, it updates the
466
+ * dataTransfer in the drag event to store the ids and metadata of the
467
+ * dragged items. Also it updates the visual information of the dragged
468
+ * items.
469
+ * @returns If all selected items can be dragged.
470
+ */
471
+ checkDragValidityAndUpdateDragInfo(dragInfo) {
472
+ const draggedElement = dragInfo.elem;
473
+ const isDraggingSelectedItems = this.selectedItemsInfo.has(draggedElement.id);
474
+ this.draggingSelectedItems = isDraggingSelectedItems;
475
+ let dataTransferInfo = [];
476
+ let dragIsEnabledForAllItems;
477
+ if (isDraggingSelectedItems) {
478
+ const selectedItemKeys = [...this.selectedItemsInfo.keys()];
479
+ const selectedItemValues = [...this.selectedItemsInfo.values()];
480
+ const selectedItemCount = selectedItemKeys.length;
481
+ dragIsEnabledForAllItems = selectedItemValues.every(el => !el.itemRef.dragDisabled);
482
+ this.draggedIds = selectedItemKeys;
483
+ dataTransferInfo = selectedItemValues.map(el => ({
484
+ id: el.id,
485
+ metadata: el.metadata
486
+ }));
487
+ this.dragInfo =
488
+ selectedItemCount === 1
489
+ ? draggedElement.caption
490
+ : selectedItemCount.toString();
491
+ }
492
+ else {
493
+ dragIsEnabledForAllItems = !draggedElement.dragDisabled;
494
+ dataTransferInfo = [
495
+ { id: draggedElement.id, metadata: draggedElement.metadata }
496
+ ];
497
+ this.draggedIds = [draggedElement.id];
498
+ this.dragInfo = draggedElement.caption;
499
+ }
500
+ this.getDirectParentsOfDraggableItems(isDraggingSelectedItems);
501
+ // Update drag event info
502
+ const data = JSON.stringify(dataTransferInfo);
503
+ dragInfo.dragEvent.dataTransfer.setData(TEXT_FORMAT, data);
504
+ // We must keep the data binding and processing even if there is an item
505
+ // that can't be dragged, otherwise, other trees or element might behave
506
+ // unexpected when a dragstart event comes
507
+ return dragIsEnabledForAllItems;
508
+ }
509
+ getDirectParentsOfDraggableItems(draggingSelectedItems) {
510
+ if (!draggingSelectedItems) {
511
+ const parentTreeItemElem = this.currentDraggedItem.parentElement;
512
+ if (parentTreeItemElem.tagName.toLowerCase() === TREE_ITEM_TAG_NAME$1) {
513
+ this.draggedParentIds.push(parentTreeItemElem.id);
514
+ }
515
+ return;
516
+ }
517
+ // Dragging selected items
518
+ this.selectedItemsInfo.forEach(selectedItem => {
519
+ const parentId = selectedItem.parentId;
520
+ // parentId === "" when the item is in the first level of the tree
521
+ if (parentId !== "") {
522
+ this.draggedParentIds.push(parentId);
523
+ }
524
+ });
525
+ }
526
+ handleItemSelection(selectedItemEl, selectedItemInfo) {
527
+ // If the Control key was not pressed or multi selection is disabled,
528
+ // remove all selected items
529
+ if (!selectedItemInfo.ctrlKeyPressed || !this.multiSelection) {
530
+ // Don't update the state of the selected item if no needed
531
+ this.selectedItemsInfo.delete(selectedItemInfo.id);
532
+ this.selectedItemsInfo.forEach(treeItem => {
533
+ treeItem.itemRef.selected = false;
534
+ });
535
+ this.clearSelectedItems();
536
+ // Re-select the item
537
+ selectedItemEl.selected = selectedItemInfo.selected;
538
+ }
539
+ // If the item is selected, add it to list
540
+ if (selectedItemInfo.selected) {
541
+ this.selectedItemsInfo.set(selectedItemInfo.id, selectedItemInfo);
542
+ }
543
+ // Sync with UI model
544
+ this.selectedItemsChange.emit(this.selectedItemsInfo);
545
+ }
546
+ clearSelectedItems() {
547
+ this.selectedItemsInfo.clear();
548
+ }
549
+ disconnectedCallback() {
550
+ this.resetVariables();
551
+ // Remove dragover body event
552
+ this.handleItemDragEnd();
553
+ }
554
+ render() {
555
+ return (h(Host, { class: {
556
+ "ch-tree-view-dragging-item": this.draggingInTheDocument,
557
+ "ch-tree-view-not-dragging-item": !this.draggingInTheDocument,
558
+ "ch-tree-view--dragging-selected-items": this.draggingInTree && this.draggingSelectedItems,
559
+ "ch-tree-view-waiting-drop-processing": this.waitDropProcessing
560
+ } }, h("div", { role: "tree", part: "tree-x-container", "aria-multiselectable": this.multiSelection.toString(), class: "ch-tree-view-container" }, h("slot", null)), this.draggingInTree && (h("span", { "aria-hidden": "true", class: "ch-tree-view-drag-info" }, this.dragInfo))));
561
+ }
562
+ get el() { return getElement(this); }
563
+ };
564
+ ChTreeView.style = treeViewCss;
565
+
566
+ const treeViewItemCss = ":where(button){all:unset;display:flex;user-select:none;touch-action:manipulation;-webkit-user-drag:element}*,::before,::after{box-sizing:border-box}:host{--ch-tree-view-view__checkbox-size:1em;--ch-tree-view-view__expandable-button-width:0.75em;--ch-tree-view-item__dashed-line--inset-inline-start:0px;--ch-tree-view-item__dashed-line--inset-inline-end:4px;--ch-tree-view-item-gap:5px;--ch-tree-view-item-custom-padding-inline-start:0px;--ch-tree-tab-width:calc(\n var(--ch-tree-view-view__checkbox-size) +\n var(--ch-tree-view-view__expandable-button-width) +\n (var(--ch-tree-view-item-gap) * 2)\n );display:grid;grid-template-rows:min-content;overflow:hidden}.header{--own-offset:0px;display:flex;align-items:center;min-height:calc(1em + 6px);padding-inline-start:calc( var(--padding-inline-start) + var(--ch-tree-view-item-custom-padding-inline-start) )}.header--disabled{opacity:0.5;pointer-events:none}.header--even{--padding-inline-start:calc(\n var(--parent-padding-inline-start--odd, 0px) + var(--ch-tree-tab-width)\n )}.header--even+.expandable{--parent-padding-inline-start--even:calc(\n var(--parent-padding-inline-start--odd, 0px) + var(--ch-tree-tab-width)\n )}.header--even .dashed-line{--inset-inline-start:calc(\n var(--parent-padding-inline-start--odd, 0px) +\n var(--parent-checkbox-offset) + var(--parent-expandable-offset)\n )}.header--even-expandable{--padding-inline-start:calc(\n var(--parent-padding-inline-start--odd, 0px) + var(--ch-tree-tab-width) -\n calc(\n var(--ch-tree-view-view__expandable-button-width) +\n var(--ch-tree-view-item-gap)\n )\n )}.header--even-expandable+.expandable{--parent-padding-inline-start--even:calc(\n var(--parent-padding-inline-start--odd, 0px) + var(--ch-tree-tab-width) -\n calc(\n var(--ch-tree-view-view__expandable-button-width) +\n var(--ch-tree-view-item-gap)\n )\n )}.header--odd{--padding-inline-start:calc(\n var(--parent-padding-inline-start--even, 0px) + var(--ch-tree-tab-width)\n )}.header--odd+.expandable{--parent-padding-inline-start--odd:calc(\n var(--parent-padding-inline-start--even, 0px) + var(--ch-tree-tab-width)\n )}.header--odd .dashed-line{--inset-inline-start:calc(\n var(--parent-padding-inline-start--even, 0px) +\n var(--parent-checkbox-offset) + var(--parent-expandable-offset)\n )}.header--odd-expandable{--padding-inline-start:calc(\n var(--parent-padding-inline-start--even, 0px) + var(--ch-tree-tab-width) -\n calc(\n var(--ch-tree-view-view__expandable-button-width) +\n var(--ch-tree-view-item-gap)\n )\n )}.header--odd-expandable+.expandable{--parent-padding-inline-start--odd:calc(\n var(--parent-padding-inline-start--even, 0px) + var(--ch-tree-tab-width) -\n calc(\n var(--ch-tree-view-view__expandable-button-width) +\n var(--ch-tree-view-item-gap)\n )\n )}.header--level-0{--padding-inline-start:0px}.header--level-0+.expandable{--parent-padding-inline-start--even:0px}.header--expandable-offset{--own-offset:calc(\n var(--ch-tree-view-view__expandable-button-width) +\n var(--ch-tree-view-item-gap)\n )}.header--expandable-offset+.expandable{--parent-expandable-offset:calc(\n var(--ch-tree-view-view__expandable-button-width) / 2\n )}.header--checkbox-offset+.expandable{--parent-checkbox-offset:calc(\n var(--ch-tree-view-view__checkbox-size) / 2\n );--parent-negative-checkbox-offset:calc(\n var(--ch-tree-view-view__checkbox-size) / 2\n )}.dashed-line{position:absolute;inset-inline-start:calc( var(--inset-inline-start) + var(--ch-tree-view-item__dashed-line--inset-inline-start) + var(--ch-tree-view-item-custom-padding-inline-start) );height:1px;width:calc( var(--ch-tree-tab-width) - var(--parent-checkbox-offset) - var(--parent-expandable-offset) - var(--own-offset) - var(--ch-tree-view-item__dashed-line--inset-inline-start) - var(--ch-tree-view-item__dashed-line--inset-inline-end) );border:0 dashed color-mix(in srgb, currentColor 65%, transparent);border-block-end-width:1px;pointer-events:none;content-visibility:hidden;z-index:1}.last-all-line{inset-block-start:0;height:calc(100% - var(--ch-tree-view-item-distance-to-checkbox));border-inline-start-width:1px;border-end-start-radius:2px}.last-line{inset-block-start:0;height:100%;border-inline-start-width:1px;border-style:solid;border-block-end:unset}.expandable-button{display:grid;place-items:center;width:var(--ch-tree-view-view__expandable-button-width);height:var(--ch-tree-view-view__expandable-button-width);margin-inline-end:var(--ch-tree-view-item-gap);z-index:1;cursor:pointer;content-visibility:auto;contain-intrinsic-size:auto var(--ch-tree-view-view__expandable-button-width)}.expandable-button::before{content:\"\";width:calc(100% - 2px);height:calc(100% - 2px);background-color:currentColor;-webkit-mask-size:calc( var(--ch-tree-view-view__expandable-button-width) - 2px )}.expandable-button--collapsed::before{-webkit-mask-image:url('data:image/svg+xml,<svg viewBox=\"0 0 16 16\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M14.15,8.5H8.54v5.61h-1V8.5H1.93v-1H7.54V1.89h1V7.5h5.61Z\"/></svg>')}.expandable-button--expanded::before{-webkit-mask-image:url('data:image/svg+xml,<svg viewBox=\"0 0 16 16\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M14.15,8.5H1.93v-1H14.15Z\"/></svg>')}.expandable-button:focus-visible{outline:1px solid #000}.checkbox{width:var(--ch-tree-view-view__checkbox-size);margin-inline-end:var(--ch-tree-view-item-gap)}.checkbox::part(container){width:var(--ch-tree-view-view__checkbox-size);height:var(--ch-tree-view-view__checkbox-size)}.action{display:grid;grid-template:\"left-img text right-img\"/max-content 1fr max-content;align-items:center;height:100%;flex:1;cursor:pointer}.readonly-mode{padding-block:0.75px}.left-img,.right-img{display:block;width:0.875em;height:0.875em;content-visibility:auto;contain-intrinsic-size:auto 0.875em}.left-img{grid-area:left-img;margin-inline-end:var(--ch-tree-view-item-gap)}.right-img{grid-area:right-img;margin-inline-start:var(--ch-tree-view-item-gap)}.edit-name{grid-area:text;width:100%;height:100%;padding:0;margin:0;background-color:unset;color:unset;border:1px solid currentColor;font:unset;outline:unset}.downloading{width:0.75em;height:0.75em;margin-inline-start:8px;border:2px solid currentColor;border-inline-start-color:transparent;border-radius:50%;opacity:0.75;animation:spin 1s linear infinite}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}.expandable{--parent-expandable-offset:0px;--parent-negative-checkbox-offset:0px;--parent-checkbox-offset:0px;display:grid;grid-auto-rows:min-content;position:relative}.expandable--lazy-loaded{content-visibility:auto;contain-intrinsic-size:auto 100px}.expandable--collapsed{display:none;overflow:hidden;content-visibility:hidden}";
567
+
568
+ const resetDragImage = new Image();
569
+ const DISTANCE_TO_CHECKBOX_CUSTOM_VAR = "--ch-tree-view-item-distance-to-checkbox";
570
+ const INITIAL_LEVEL = 0;
571
+ // Selectors
572
+ const TREE_ITEM_TAG_NAME = "ch-tree-view-item";
573
+ const DIRECT_TREE_ITEM_CHILDREN = `:scope>${TREE_ITEM_TAG_NAME}`;
574
+ const FIRST_ENABLED_SUB_ITEM = `${TREE_ITEM_TAG_NAME}:not([disabled])`;
575
+ const LAST_SUB_ITEM = `:scope>${TREE_ITEM_TAG_NAME}:last-child`;
576
+ // Keys
577
+ const EXPANDABLE_ID = "expandable";
578
+ const ENTER_KEY = "Enter";
579
+ const ESCAPE_KEY = "Escape";
580
+ // Export Parts
581
+ const getCheckboxExportPart = (part) => `${part}:checkbox__${part}`;
582
+ const CHECKBOX_EXPORT_PARTS = [
583
+ "container",
584
+ "input",
585
+ "option",
586
+ "checked",
587
+ "indeterminate"
588
+ ]
589
+ .map(getCheckboxExportPart)
590
+ .join(",");
591
+ const ChTreeViewItem = class {
592
+ constructor(hostRef) {
593
+ registerInstance(this, hostRef);
594
+ this.checkboxChange = createEvent(this, "checkboxChange", 7);
595
+ this.checkboxToggleChange = createEvent(this, "checkboxToggleChange", 7);
596
+ this.itemDragStart = createEvent(this, "itemDragStart", 7);
597
+ this.itemDragEnd = createEvent(this, "itemDragEnd", 7);
598
+ this.loadLazyContent = createEvent(this, "loadLazyContent", 7);
599
+ this.modifyCaption = createEvent(this, "modifyCaption", 7);
600
+ this.openReference = createEvent(this, "openReference", 7);
601
+ this.selectedItemChange = createEvent(this, "selectedItemChange", 7);
602
+ this.selectedItemSync = createEvent(this, "selectedItemSync", 7);
603
+ /**
604
+ * Useful to ignore the checkbox change when it was committed from a children.
605
+ */
606
+ this.ignoreCheckboxChange = false;
607
+ /**
608
+ * Set this attribute if you want display a checkbox in the control.
609
+ */
610
+ this.checkbox = false;
611
+ /**
612
+ * Set this attribute if you want the checkbox to be checked by default.
613
+ * Only works if `checkbox = true`
614
+ */
615
+ this.checked = false;
616
+ /**
617
+ * Set this attribute if you want to set a custom render for the control, by
618
+ * passing a slot.
619
+ */
620
+ this.customRender = false;
621
+ /**
622
+ * This attribute lets you specify if the element is disabled.
623
+ * If disabled, it will not fire any user interaction related event
624
+ * (for example, click event).
625
+ */
626
+ this.disabled = false;
627
+ /**
628
+ * This attribute lets you specify if the drag operation is disabled in the
629
+ * control. If `true`, the control can't be dragged.
630
+ */
631
+ this.dragDisabled = false;
632
+ /**
633
+ * This attribute lets you specify if the drop operation is disabled in the
634
+ * control. If `true`, the control won't accept any drops.
635
+ */
636
+ this.dropDisabled = false;
637
+ /**
638
+ * This property lets you define the current state of the item when it's
639
+ * being dragged.
640
+ */
641
+ this.dragState = "none";
642
+ /**
643
+ * This attribute lets you specify when items are being lazy loaded in the
644
+ * control.
645
+ */
646
+ this.downloading = false;
647
+ /**
648
+ * Set this attribute when the item is in edit mode
649
+ */
650
+ this.editing = false;
651
+ /**
652
+ * If the item has a sub-tree, this attribute determines if the subtree is
653
+ * displayed.
654
+ */
655
+ this.expanded = false;
656
+ /**
657
+ * This attribute specifies if the control is the last items in its subtree
658
+ */
659
+ this.lastItem = false;
660
+ /**
661
+ * Determine if the items are lazy loaded when opening the first time the
662
+ * control.
663
+ */
664
+ this.lazyLoad = false;
665
+ /**
666
+ * The presence of this attribute determine whether the item contains a
667
+ * subtree. `true` if the item does not have a subtree.
668
+ */
669
+ this.leaf = false;
670
+ /**
671
+ * Level in the tree at which the item is placed.
672
+ */
673
+ this.level = INITIAL_LEVEL;
674
+ /**
675
+ * `true` if the checkbox's value is indeterminate.
676
+ */
677
+ this.indeterminate = false;
678
+ /**
679
+ * This attribute lets you specify if the item is selected
680
+ */
681
+ this.selected = false;
682
+ /**
683
+ * `true` to show the downloading spinner when lazy loading the sub items of
684
+ * the control.
685
+ */
686
+ this.showDownloadingSpinner = true;
687
+ /**
688
+ * `true` to show the expandable button that allows to expand/collapse the
689
+ * items of the control. Only works if `leaf === false`.
690
+ */
691
+ this.showExpandableButton = true;
692
+ /**
693
+ * `true` to display the relation between tree items and tree lists using
694
+ * lines.
695
+ */
696
+ this.showLines = "none";
697
+ /**
698
+ * Set this attribute if you want all the children item's checkboxes to be
699
+ * checked when the parent item checkbox is checked, or to be unchecked when
700
+ * the parent item checkbox is unchecked.
701
+ */
702
+ this.toggleCheckboxes = false;
703
+ this.checkIfShouldRemoveEditMode = (event) => {
704
+ event.stopPropagation();
705
+ if (event.code !== ENTER_KEY && event.code !== ESCAPE_KEY) {
706
+ return;
707
+ }
708
+ event.preventDefault();
709
+ const commitEdition = event.code === ENTER_KEY;
710
+ this.removeEditMode(true, commitEdition)();
711
+ };
712
+ this.removeEditModeOnClick = (event) => {
713
+ // The click is executed outside the input and the pointer type is defined,
714
+ // meaning that the button click was not triggered by the Enter or Space keys
715
+ if (!event.composedPath().includes(this.inputRef) && event.pointerType) {
716
+ this.removeEditMode(false)();
717
+ }
718
+ };
719
+ this.removeEditMode = (shouldFocusHeader, commitEdition = false) => () => {
720
+ // When pressing the enter key in the input, the removeEditMode event is
721
+ // triggered twice (due to the headerRef.focus() triggering the onBlur
722
+ // event in the input), so we need to check if the edit mode was disabled
723
+ if (!this.editing) {
724
+ return;
725
+ }
726
+ this.editing = false;
727
+ document.body.removeEventListener("click", this.removeEditModeOnClick, {
728
+ capture: true
729
+ });
730
+ const newCaption = this.inputRef.value;
731
+ if (commitEdition && newCaption.trim() !== "") {
732
+ this.modifyCaption.emit({
733
+ id: this.el.id,
734
+ caption: newCaption
735
+ });
736
+ }
737
+ if (shouldFocusHeader) {
738
+ this.headerRef.focus();
739
+ }
740
+ };
741
+ this.toggleExpand = (event) => {
742
+ event.stopPropagation();
743
+ if (!this.leaf) {
744
+ this.expanded = !this.expanded;
745
+ }
746
+ this.selected = true;
747
+ this.selectedItemChange.emit(this.getSelectedInfo(mouseEventModifierKey(event), true));
748
+ };
749
+ this.getSelectedInfo = (ctrlKeyPressed, selected) => ({
750
+ ctrlKeyPressed: ctrlKeyPressed,
751
+ expanded: this.expanded,
752
+ id: this.el.id,
753
+ itemRef: this.el,
754
+ metadata: this.metadata,
755
+ parentId: this.el.parentElement.id,
756
+ selected: selected
757
+ });
758
+ this.handleActionDblClick = (event) => {
759
+ event.stopPropagation();
760
+ if (mouseEventModifierKey(event)) {
761
+ this.toggleSelected();
762
+ return;
763
+ }
764
+ this.emitOpenReference();
765
+ // The Control key is not pressed, so the control can be expanded
766
+ if (!this.leaf) {
767
+ this.toggleExpand(event);
768
+ }
769
+ };
770
+ /**
771
+ * Event triggered by the following actions on the main button:
772
+ * - Click
773
+ * - Enter keydown
774
+ * - Space keydown and keyup
775
+ */
776
+ this.handleActionClick = (event) => {
777
+ event.stopPropagation();
778
+ // Don't perform actions when editing
779
+ if (this.editing) {
780
+ return;
781
+ }
782
+ event.preventDefault();
783
+ // Click event
784
+ if (event.pointerType) {
785
+ this.toggleOrSelect(event);
786
+ return;
787
+ }
788
+ this.emitOpenReference();
789
+ // Enter or space
790
+ this.toggleExpand(event);
791
+ };
792
+ /**
793
+ * Event triggered by key events on the main button.
794
+ */
795
+ this.handleActionKeyDown = (event) => {
796
+ // Only toggle if the Enter key was pressed with the Ctrl key
797
+ if (mouseEventModifierKey(event) && event.code === ENTER_KEY) {
798
+ event.stopPropagation();
799
+ this.toggleSelected();
800
+ }
801
+ };
802
+ this.handleCheckedChange = (event) => {
803
+ event.stopPropagation();
804
+ const checked = event.target.checked;
805
+ this.checked = checked;
806
+ this.indeterminate = false; // Changing the checked value makes it no longer indeterminate
807
+ this.checkboxChange.emit({
808
+ id: this.el.id,
809
+ checked: this.checked,
810
+ indeterminate: false
811
+ });
812
+ };
813
+ this.renderImg = (cssClass, src) => (h("img", { "aria-hidden": "true", class: cssClass, part: cssClass, alt: "", src: src, loading: "lazy" }));
814
+ this.handleDragStart = (event) => {
815
+ // Disallow drag when editing the caption
816
+ if (this.editing) {
817
+ event.preventDefault();
818
+ event.stopPropagation();
819
+ return;
820
+ }
821
+ // Remove drag image
822
+ event.dataTransfer.setDragImage(resetDragImage, 0, 0);
823
+ event.dataTransfer.effectAllowed = "move";
824
+ this.dragState = "start";
825
+ this.itemDragStart.emit({
826
+ elem: this.el,
827
+ dragEvent: event
828
+ });
829
+ };
830
+ this.handleDragEnd = () => {
831
+ // event.preventDefault();
832
+ // this.el.style.cursor = null;
833
+ this.dragState = "none";
834
+ this.itemDragEnd.emit();
835
+ };
836
+ this.handleDrop = () => {
837
+ this.dragState = "none";
838
+ };
839
+ }
840
+ updateChildrenCheckedValue(newValue) {
841
+ if (!this.toggleCheckboxes || this.leaf || this.ignoreCheckboxChange) {
842
+ this.ignoreCheckboxChange = false;
843
+ return;
844
+ }
845
+ const treeItems = this.getDirectTreeItems();
846
+ treeItems.forEach(treeItem => {
847
+ if (treeItem.checked !== newValue || treeItem.indeterminate !== false) {
848
+ treeItem.updateChecked(newValue, false);
849
+ }
850
+ });
851
+ }
852
+ handleEditingChange(isEditing) {
853
+ if (!isEditing) {
854
+ return;
855
+ }
856
+ document.body.addEventListener("click", this.removeEditModeOnClick, {
857
+ capture: true
858
+ });
859
+ // Wait until the input is rendered to focus it
860
+ writeTask(() => {
861
+ requestAnimationFrame(() => {
862
+ if (this.inputRef) {
863
+ this.inputRef.focus();
864
+ }
865
+ });
866
+ });
867
+ }
868
+ handleExpandedChange(isExpanded) {
869
+ this.lazyLoadItems(isExpanded);
870
+ }
871
+ handleLasItemChange(isLastItem) {
872
+ if (isLastItem && this.showLines) {
873
+ this.setResizeObserver();
874
+ }
875
+ else {
876
+ this.disconnectObserver();
877
+ }
878
+ }
879
+ handleSelectedChange(newValue) {
880
+ this.selectedItemSync.emit(this.getSelectedInfo(true, // Does not matter in this case
881
+ newValue));
882
+ }
883
+ handleShowLinesChange(newShowLines) {
884
+ if (newShowLines && this.lastItem) {
885
+ this.setResizeObserver();
886
+ }
887
+ else {
888
+ this.disconnectObserver();
889
+ }
890
+ }
891
+ updateCheckboxValue(event) {
892
+ // No need to update the checkbox value based on the children checkbox
893
+ if (!this.toggleCheckboxes || this.el === event.target) {
894
+ return;
895
+ }
896
+ const updatedCheck = event.detail.checked;
897
+ const treeItems = this.getDirectTreeItems();
898
+ // Check if all the items have the same value as the updated item
899
+ const allItemsHaveTheSameCheckedValue = treeItems.every(treeItem => treeItem.checked === updatedCheck);
900
+ const eventMustBeEmitted = this.checked !== updatedCheck ||
901
+ this.indeterminate !== !allItemsHaveTheSameCheckedValue;
902
+ this.ignoreCheckboxChange = this.checked !== updatedCheck;
903
+ this.checked = updatedCheck;
904
+ this.indeterminate = !allItemsHaveTheSameCheckedValue;
905
+ // Sync with the UI Model
906
+ if (eventMustBeEmitted) {
907
+ this.checkboxToggleChange.emit({
908
+ id: this.el.id,
909
+ checked: updatedCheck,
910
+ indeterminate: !allItemsHaveTheSameCheckedValue
911
+ });
912
+ }
913
+ }
914
+ /**
915
+ * Focus the next item in the tree. If the control is expanded, it focuses
916
+ * the first subitem in its tree.
917
+ */
918
+ async focusNextItem(ctrlKeyPressed) {
919
+ // Focus the first subitem if expanded
920
+ if (!this.leaf && this.expanded) {
921
+ const subItem = this.el.querySelector(FIRST_ENABLED_SUB_ITEM);
922
+ // The tree item could be empty or downloading subitem, so it is uncertain
923
+ // if the query won't fail
924
+ if (subItem) {
925
+ subItem.setFocus(ctrlKeyPressed);
926
+ return;
927
+ }
928
+ }
929
+ // Otherwise, focus the next sibling
930
+ this.focusNextSibling(ctrlKeyPressed);
931
+ }
932
+ /**
933
+ * Focus the next sibling item in the tree.
934
+ */
935
+ async focusNextSibling(ctrlKeyPressed) {
936
+ const nextSiblingItem = this.el
937
+ .nextElementSibling;
938
+ // Focus the next sibling, if exists
939
+ if (nextSiblingItem) {
940
+ // If the next sibling is disabled, ask for its next sibling
941
+ if (nextSiblingItem.disabled) {
942
+ nextSiblingItem.focusNextItem(ctrlKeyPressed);
943
+ }
944
+ else {
945
+ nextSiblingItem.setFocus(ctrlKeyPressed);
946
+ }
947
+ return;
948
+ }
949
+ // The item is the last one of the tree at the first level
950
+ if (this.level === INITIAL_LEVEL) {
951
+ return;
952
+ }
953
+ // Otherwise, ask the parent to focus the next sibling
954
+ const parentItem = this.el.parentElement;
955
+ parentItem.focusNextSibling(ctrlKeyPressed);
956
+ }
957
+ /**
958
+ * Focus the previous item in the tree. If the previous item is expanded, it focuses
959
+ * the last subitem in its tree.
960
+ */
961
+ async focusPreviousItem(ctrlKeyPressed) {
962
+ const previousSiblingItem = this.el
963
+ .previousElementSibling;
964
+ // Focus last item of the previous sibling
965
+ if (previousSiblingItem) {
966
+ previousSiblingItem.focusLastItem(ctrlKeyPressed);
967
+ return;
968
+ }
969
+ // The item is the first one of the tree at the first level
970
+ if (this.level === INITIAL_LEVEL) {
971
+ return;
972
+ }
973
+ // Otherwise, set focus in the parent element
974
+ const parentItem = this.el.parentElement;
975
+ // Check if the parent is not disabled
976
+ if (parentItem.disabled) {
977
+ parentItem.focusPreviousItem(ctrlKeyPressed);
978
+ return;
979
+ }
980
+ parentItem.setFocus(ctrlKeyPressed);
981
+ }
982
+ /**
983
+ * Focus the last item in its subtree. If the control is not expanded, it
984
+ * focus the control.
985
+ */
986
+ async focusLastItem(ctrlKeyPressed) {
987
+ // Focus the last subitem if expanded and not lazy loading
988
+ if (!this.leaf && this.expanded) {
989
+ const lastSubItem = this.el.querySelector(LAST_SUB_ITEM);
990
+ // The tree item could be empty or downloading subitem, so it is uncertain
991
+ // if the query won't fail
992
+ if (lastSubItem) {
993
+ lastSubItem.focusLastItem(ctrlKeyPressed);
994
+ return;
995
+ }
996
+ }
997
+ // If the last item is disabled, try to focus the previous sibling
998
+ if (this.disabled) {
999
+ this.focusPreviousItem(ctrlKeyPressed);
1000
+ return;
1001
+ }
1002
+ // Otherwise, it focuses the control
1003
+ this.setFocus(ctrlKeyPressed);
1004
+ }
1005
+ /**
1006
+ * Set focus in the control.
1007
+ */
1008
+ async setFocus(ctrlKeyPressed) {
1009
+ this.headerRef.focus();
1010
+ // Normal navigation auto selects the item.
1011
+ if (!ctrlKeyPressed) {
1012
+ this.setSelected();
1013
+ }
1014
+ }
1015
+ /**
1016
+ * Update `checked` and `indeterminate` properties.
1017
+ */
1018
+ async updateChecked(newChecked, newIndeterminate) {
1019
+ this.checked = newChecked;
1020
+ this.indeterminate = newIndeterminate;
1021
+ // Emit the event to sync with the UI model, even if the item does not
1022
+ // have toggleCheckboxes property
1023
+ this.checkboxToggleChange.emit({
1024
+ id: this.el.id,
1025
+ checked: newChecked,
1026
+ indeterminate: newIndeterminate
1027
+ });
1028
+ }
1029
+ getDirectTreeItems() {
1030
+ return Array.from(this.el.querySelectorAll(DIRECT_TREE_ITEM_CHILDREN));
1031
+ }
1032
+ setResizeObserver() {
1033
+ this.watcher = new ResizeObserver(() => {
1034
+ const distanceToCheckbox = this.el.getBoundingClientRect().height -
1035
+ this.headerRef.getBoundingClientRect().height / 2;
1036
+ this.el.style.setProperty(DISTANCE_TO_CHECKBOX_CUSTOM_VAR, distanceToCheckbox + "px");
1037
+ });
1038
+ this.watcher.observe(this.el);
1039
+ this.watcher.observe(this.headerRef);
1040
+ }
1041
+ disconnectObserver() {
1042
+ if (!this.watcher) {
1043
+ return;
1044
+ }
1045
+ this.watcher.disconnect();
1046
+ this.watcher = null;
1047
+ }
1048
+ lazyLoadItems(expanded) {
1049
+ if (!this.lazyLoad || !expanded) {
1050
+ return;
1051
+ }
1052
+ // Load items
1053
+ this.lazyLoad = false;
1054
+ this.downloading = true;
1055
+ this.loadLazyContent.emit(this.el.id);
1056
+ }
1057
+ toggleSelected() {
1058
+ const selected = !this.selected;
1059
+ this.selected = selected;
1060
+ this.selectedItemChange.emit(this.getSelectedInfo(true, selected));
1061
+ }
1062
+ setSelected() {
1063
+ this.selected = true;
1064
+ this.selectedItemChange.emit(this.getSelectedInfo(false, true));
1065
+ }
1066
+ toggleOrSelect(event) {
1067
+ if (mouseEventModifierKey(event)) {
1068
+ this.toggleSelected();
1069
+ }
1070
+ else {
1071
+ this.setSelected();
1072
+ }
1073
+ }
1074
+ emitOpenReference() {
1075
+ this.openReference.emit({
1076
+ id: this.el.id,
1077
+ leaf: this.leaf,
1078
+ metadata: this.metadata
1079
+ });
1080
+ }
1081
+ componentWillLoad() {
1082
+ // Check if must lazy load
1083
+ this.lazyLoadItems(this.expanded);
1084
+ // Sync selected state with the main tree
1085
+ if (this.selected) {
1086
+ this.selectedItemChange.emit(this.getSelectedInfo(true, true));
1087
+ }
1088
+ }
1089
+ componentDidLoad() {
1090
+ if (this.lastItem && this.showLines) {
1091
+ this.setResizeObserver();
1092
+ }
1093
+ }
1094
+ disconnectedCallback() {
1095
+ // If it was disconnected on edit mode, remove the body event handler
1096
+ if (this.editing) {
1097
+ this.removeEditMode(false);
1098
+ }
1099
+ this.disconnectObserver();
1100
+ }
1101
+ render() {
1102
+ const evenLevel = this.level % 2 === 0;
1103
+ const expandableButtonVisible = !this.leaf && this.showExpandableButton;
1104
+ const expandableButtonNotVisible = !this.leaf && !this.showExpandableButton;
1105
+ const acceptDrop = !this.dropDisabled && !this.leaf && this.dragState !== "start";
1106
+ const hasContent = !this.leaf && !this.lazyLoad;
1107
+ const showAllLines = this.showLines === "all" && this.level !== INITIAL_LEVEL;
1108
+ const showLastLine = this.showLines === "last" &&
1109
+ this.level !== INITIAL_LEVEL &&
1110
+ this.lastItem;
1111
+ return (h(Host, { role: "treeitem", "aria-level": this.level + 1, "aria-selected": this.selected ? "true" : null, class: {
1112
+ [TREE_ITEM_TAG_NAME + "--downloading"]: this.downloading,
1113
+ [TREE_ITEM_TAG_NAME + "--editing"]: this.editing,
1114
+ [TREE_ITEM_TAG_NAME + "--not-editing"]: !this.editing,
1115
+ [TREE_ITEM_TAG_NAME + "--drag-" + this.dragState]: this.dragState !== "none" && this.dragState !== "start",
1116
+ [TREE_ITEM_TAG_NAME + "--deny-drop"]: this.leaf
1117
+ }, style: { "--level": `${this.level}` },
1118
+ // Drag and drop
1119
+ onDrop: acceptDrop ? this.handleDrop : null }, h("button", { "aria-controls": hasContent ? EXPANDABLE_ID : null, "aria-expanded": hasContent ? this.expanded.toString() : null, class: {
1120
+ header: true,
1121
+ "header--selected": this.selected,
1122
+ "header--disabled": this.disabled,
1123
+ "header--expandable-offset": expandableButtonVisible,
1124
+ "header--checkbox-offset": expandableButtonNotVisible && this.checkbox,
1125
+ "header--even": evenLevel,
1126
+ "header--odd": !evenLevel,
1127
+ "header--even-expandable": evenLevel && expandableButtonVisible,
1128
+ "header--odd-expandable": !evenLevel && expandableButtonVisible,
1129
+ "header--level-0": this.level === INITIAL_LEVEL
1130
+ }, part: `header${this.disabled ? " disabled" : ""}${this.selected ? " selected" : ""}${this.level === INITIAL_LEVEL ? " level-0" : ""}`, type: "button", disabled: this.disabled, onClick: this.handleActionClick, onKeyDown: !this.editing ? this.handleActionKeyDown : null,
1131
+ // Drag and drop
1132
+ draggable: !this.dragDisabled, onDragStart: this.handleDragStart, onDragEnd: !this.dragDisabled ? this.handleDragEnd : null, ref: el => (this.headerRef = el) }, !this.leaf && this.showExpandableButton && (h("button", { type: "button", class: {
1133
+ "expandable-button": true,
1134
+ "expandable-button--expanded": this.expanded,
1135
+ "expandable-button--collapsed": !this.expanded
1136
+ }, part: `expandable-button${this.disabled ? " disabled" : ""}${this.expanded ? " expanded" : " collapsed"}`, disabled: this.disabled, onClick: this.toggleExpand })), this.checkbox && (h("ch-checkbox", { accessibleName: this.caption, class: "checkbox", exportparts: CHECKBOX_EXPORT_PARTS, part: `checkbox${this.disabled ? " disabled" : ""}${this.checked ? " checked" : ""}${this.indeterminate ? " indeterminate" : ""}`, checkedValue: "true", disabled: this.disabled, indeterminate: this.indeterminate, unCheckedValue: "false", value: `${this.checked}`, onInput: this.handleCheckedChange })), this.customRender ? (h("slot", { name: "custom-content" })) : ([
1137
+ h("div", { class: {
1138
+ action: true,
1139
+ "readonly-mode": !this.editing
1140
+ }, part: `action${!this.editing ? " readonly-mode" : ""}${!this.leaf && this.expanded ? " expanded" : ""}`, onDblClick: !this.editing ? this.handleActionDblClick : null }, this.leftImgSrc && this.renderImg("left-img", this.leftImgSrc), this.editable && this.editing ? (h("input", { class: "edit-name", part: "edit-name", disabled: this.disabled, type: "text", value: this.caption, onBlur: this.removeEditMode(false), onKeyDown: this.checkIfShouldRemoveEditMode, ref: el => (this.inputRef = el) })) : (this.caption), this.rightImgSrc &&
1141
+ this.renderImg("right-img", this.rightImgSrc)),
1142
+ this.showDownloadingSpinner && !this.leaf && this.downloading && (h("div", { class: "downloading", part: "downloading" }))
1143
+ ]), (showAllLines || showLastLine) && (h("div", { class: {
1144
+ "dashed-line": true,
1145
+ "last-all-line": showAllLines && this.lastItem,
1146
+ "last-line": showLastLine
1147
+ }, part: `dashed-line${this.lastItem ? " last-all-line" : ""}` }))), hasContent && (h("div", { role: "group", "aria-busy": (!!this.downloading).toString(), "aria-live": this.downloading ? "polite" : null, id: EXPANDABLE_ID, class: {
1148
+ expandable: true,
1149
+ "expandable--collapsed": !this.expanded,
1150
+ "expandable--lazy-loaded": !this.downloading
1151
+ }, part: `expandable${this.expanded ? " expanded" : " collapsed"}${!this.downloading ? " lazy-loaded" : ""}` }, h("slot", null)))));
1152
+ }
1153
+ get el() { return getElement(this); }
1154
+ static get watchers() { return {
1155
+ "checked": ["updateChildrenCheckedValue"],
1156
+ "editing": ["handleEditingChange"],
1157
+ "expanded": ["handleExpandedChange"],
1158
+ "lastItem": ["handleLasItemChange"],
1159
+ "selected": ["handleSelectedChange"],
1160
+ "showLines": ["handleShowLinesChange"]
1161
+ }; }
1162
+ };
1163
+ ChTreeViewItem.style = treeViewItemCss;
1164
+
1165
+ export { CheckBox as ch_checkbox, ChTreeView as ch_tree_view, ChTreeViewItem as ch_tree_view_item };