@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
@@ -1,343 +1,293 @@
1
- import { proxyCustomElement, HTMLElement, createEvent, getAssetPath, h, forceUpdate } from '@stencil/core/internal/client';
2
- import { d as defineCustomElement$3 } from './checkbox.js';
3
- import { d as defineCustomElement$2 } from './tree-x.js';
4
- import { d as defineCustomElement$1 } from './tree-x-list-item.js';
1
+ import { proxyCustomElement, HTMLElement, createEvent, h, Host } from '@stencil/core/internal/client';
2
+ import { f as focusComposedPath, m as mouseEventModifierKey } from './helpers.js';
5
3
 
6
- const resolveImgPath = (iconAssetsPath, img) => `${iconAssetsPath}/${img}.svg`;
4
+ const scrollToEdge = (event, container, scrollSpeed, scrollThreshold) => {
5
+ const mousePositionY = event.clientY - container.getBoundingClientRect().top;
6
+ const containerHeight = container.clientHeight;
7
+ const mouseAtTheTop = mousePositionY <= scrollThreshold;
8
+ const mouseAtTheBottom = mousePositionY > containerHeight - scrollThreshold;
9
+ if (mouseAtTheTop || mouseAtTheBottom) {
10
+ const scrollAmount = mouseAtTheTop
11
+ ? mousePositionY - scrollThreshold
12
+ : mousePositionY - (containerHeight - scrollThreshold);
13
+ // Adjust container scroll position
14
+ container.scrollTop += scrollAmount / scrollSpeed;
15
+ }
16
+ };
7
17
 
8
- const treeViewCss = ":root{--ui-animaton-speed:0.2s}.gxg-title-01{font-family:var(--font-family-primary);font-weight:var(--font-weight-bold);font-size:var(--font-size-md);letter-spacing:var(--letter-spacing-md);color:var(--color-on-background);text-align:start;line-height:1.455em}.gxg-title-01--negative{font-family:var(--font-family-primary);font-weight:var(--font-weight-bold);font-size:var(--font-size-md);letter-spacing:var(--letter-spacing-md);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--color-on-primary)}.gxg-title-02{font-family:var(--font-family-primary);font-weight:var(--font-weight-bold);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-sm);color:var(--color-on-background);text-align:start;text-transform:uppercase;line-height:1.556em}.gxg-title-02--negative{font-family:var(--font-family-primary);font-weight:var(--font-weight-bold);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-sm);color:var(--color-on-background);text-align:start;text-transform:uppercase;line-height:1.556em;color:var(--color-on-primary)}.gxg-title-03{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-xs);letter-spacing:var(--letter-spacing-sm);color:var(--color-on-background);text-align:start;text-transform:uppercase;line-height:1.556em}.gxg-title-03--negative{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-xs);letter-spacing:var(--letter-spacing-sm);color:var(--color-on-background);text-align:start;text-transform:uppercase;line-height:1.556em;color:var(--color-on-primary)}.gxg-title-04{font-family:var(--font-family-primary);font-weight:var(--font-weight-semibold);font-size:var(--font-size-md);letter-spacing:var(--letter-spacing-md);color:var(--color-on-background);text-align:start;line-height:1.455em}.gxg-title-04--negative{font-family:var(--font-family-primary);font-weight:var(--font-weight-semibold);font-size:var(--font-size-md);letter-spacing:var(--letter-spacing-md);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--color-on-primary)}.gxg-title-05{font-family:var(--font-family-primary);font-weight:var(--font-weight-semibold);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-sm);color:var(--color-on-background);text-align:start;line-height:1.556em}.gxg-title-05--negative{font-family:var(--font-family-primary);font-weight:var(--font-weight-semibold);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-sm);color:var(--color-on-background);text-align:start;line-height:1.556em;color:var(--color-on-primary)}.gxg-text{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em}.gxg-text--negative{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--color-on-primary)}.gxg-text--gray{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--gray-05)}.gxg-quote{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em;font-style:italic}.gxg-quote--negative{color:var(--color-on-primary)}.gxg-link{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--color-primary);text-decoration:underline;cursor:pointer;display:inline-block}.gxg-link:hover{color:var(--color-primary-hover)}.gxg-link:active{color:var(--color-primary-active)}.gxg-link-gray{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--color-primary);text-decoration:underline;cursor:pointer;display:inline-block;color:var(--gray-04)}.gxg-link-gray:hover{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--color-primary);text-decoration:underline;cursor:pointer;display:inline-block;color:var(--gray-04);color:var(--gray-06)}.gxg-alert-error{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--color-error-dark);display:inline-block}.gxg-alert-warning{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--color-warning-dark);display:inline-block}.gxg-alert-success{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--color-success-dark);display:inline-block}.gxg-tab--disabled{color:var(--color-primary-disabled);pointer-events:none}.gxg-tab--disabled[disabled]{color:var(--color-primary-disabled);pointer-events:none}.gxg-label{font-family:var(--font-family-primary) !important;font-weight:var(--font-weight-semibold);font-size:var(--font-size-sm) !important;letter-spacing:var(--letter-spacing-xs);color:var(--color-primary-enabled);text-align:center;line-height:1.455em}.gxg-label:hover{color:var(--color-primary-hover)}.gxg-label:focus{color:var(--color-primary-active)}.gxg-label:active{color:var(--color-primary-active)}.gxg-label[disabled]{color:var(--color-primary-disabled)}.gxg-label--negative{color:var(--color-on-primary)}.gxg-label--negative[disabled]{color:var(--color-on-disabled)}.gxg-button-styles{font-family:var(--font-family-primary) !important;font-weight:var(--font-weight-semibold);font-size:var(--font-size-sm) !important;letter-spacing:var(--letter-spacing-xs);color:var(--color-primary-enabled);text-align:center;line-height:1.455em}.gxg-scrollbar{}.gxg-scrollbar::-webkit-scrollbar{width:var(--gxg-scrollbar-width, 6px)}.gxg-scrollbar::-webkit-scrollbar-track{background-color:var(--gxg-scrollbar-track-background, --gray-02);border-radius:var(--gxg-scrollbar-track-border-radius, 10px)}.gxg-scrollbar::-webkit-scrollbar-thumb{background:var(--gxg-scrollbar-track-thumb-background, --gray-05);border-radius:var(--gxg-scrollbar-track-thumb-radius, 10px)}.gxg-scrollbar::-webkit-scrollbar-thumb:hover{background:var(--gxg-scrollbar-track-thumb-hover-background, --gray-04);cursor:pointer}gxg-tree-view{font-family:var(--font-family-primary);font-size:var(--font-size-lg);font-weight:var(--font-weight-regular);color:var(--color-on-background);display:contents}.tree-view{}.tree-view::-webkit-scrollbar{width:var(--gxg-scrollbar-width, 6px)}.tree-view::-webkit-scrollbar-track{background-color:var(--gxg-scrollbar-track-background, --gray-02);border-radius:var(--gxg-scrollbar-track-border-radius, 10px)}.tree-view::-webkit-scrollbar-thumb{background:var(--gxg-scrollbar-track-thumb-background, --gray-05);border-radius:var(--gxg-scrollbar-track-thumb-radius, 10px)}.tree-view::-webkit-scrollbar-thumb:hover{background:var(--gxg-scrollbar-track-thumb-hover-background, --gray-04);cursor:pointer}.tree-view-item{--checkbox-size:var(--gxg-checkbox-size);--expandable-button-width:var(--spacing-comp-04);}.tree-view-item::part(dashed-line){border-color:var(--gray-02)}.tree-view-item::part(header){padding-inline-end:calc(var(--spacing-comp-02) * 0.65);height:var(--spacing-comp-05);display:flex;gap:5px}.tree-view-item::part(header):first-child{margin-inline-start:var(--spacing-comp-01)}.tree-view-item::part(header):before{content:\"\";display:block}.tree-view-item::part(header):hover{background-color:var(--gxg-background-color--hover);color:var(--gxg-color--hover)}.tree-view-item::part(header):focus{outline:var(--border-width-md) solid var(--gxg-border-color--focused);outline-offset:-2px}.tree-view-item[selected]::part(header){background-color:var(--gxg-background-color--selected)}.tree-view-item[selected]::part(header):hover{background-color:var(--gxg-background-color--selected-hover)}.tree-view-item::part(expandable-button){background-color:var(--gray-00);margin-inline-end:0}.tree-view-item::part(expandable-button)::before{background-color:var(--gray-04);-webkit-mask-position:center;-webkit-mask-repeat:no-repeat}.tree-view-item::part(expandable-button):hover{background-color:var(--color-background)}.tree-view-item::part(expandable-button):focus{outline:var(--border-width-md) solid var(--gxg-border-color--focused);outline-offset:0}.tree-view-item::part(action){text-transform:capitalize;display:flex;gap:var(--spacing-comp-01)}.tree-view-item::part(left-img){width:var(--spacing-comp-04);height:var(--spacing-comp-04);margin-inline-end:0}.tree-view-item::part(downloading){width:var(--spacing-comp-03);height:var(--spacing-comp-03);border:var(--border-width-md) solid var(--color-primary-enabled);border-inline-start-color:transparent}.tree-view-item::part(checkbox__container){border-color:var(--gray-04);background-color:var(--color-background)}.tree-view-item::part(checkbox__container):after{content:\"\";position:absolute;display:block;border:solid;border-color:transparent;z-index:0}.tree-view-item::part(checkbox__container):focus-within{box-shadow:none;outline:var(--border-width-md) solid var(--gxg-border-color--focused);outline-offset:-2px}.tree-view-item::part(checkbox){margin-inline-end:0}.tree-view-item::part(checkbox__option){display:none}.tree-view-item::part(checkbox__container checkbox__checked):after{left:5.5px;top:3px;width:4px;height:7px;border-width:0 2px 2px 0;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);border-color:var(--color-primary-active);transition-property:border-color;transition-duration:var(--ui-animaton-speed);transition-timing-function:ease}.tree-view-item::part(checkbox__container checkbox__indeterminate):after{left:50%;top:50%;width:8px;height:1.5px;border:0;background-color:var(--color-primary-active);-webkit-transform:rotate(0) translateY(-50%) translateX(-50%);-ms-transform:rotate(0) translateY(-50%) translateX(-50%);transform:rotate(0) translateY(-50%) translateX(-50%)}.tree-view-item::part(checkbox__input){position:relative;z-index:1}.tree-view-item--folder::part(action)::before,.tree-view-item--module::part(action)::before{grid-area:left-img;content:\"\";width:14px;height:14px;margin-inline-end:4px;background-repeat:no-repeat}.tree-view-item--folder::part(action)::before{background-image:url(\"/build/icon-assets/objects/folder.svg\")}.tree-view-item--folder::part(action expanded)::before{background-image:url(\"/build/icon-assets/objects/folder-open.svg\")}.tree-view-item--module::part(action)::before{background-image:url(\"/build/icon-assets/objects/module.svg\")}.tree-view-item--module::part(action expanded)::before{background-image:url(\"/build/icon-assets/objects/module-open.svg\")}.tree-view-item--pending-commit::part(action)::before{content:\"\";position:relative;z-index:1;grid-area:left-img;width:5px;height:5px;align-self:end;margin-block-end:3px;margin-inline-start:1px;background-color:var(--color-primary-enabled);border-radius:50%}.ch-tree-x-list-item--editing::part(header){border:2px solid transparent}.ch-tree-x-list-item .ch-tree-x-drag-info{padding-inline:6px;padding-block:2px;background-color:#cfdee6;border:1px solid #0266a0;border-radius:10px;font-size:8px}";
18
+ 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%}";
9
19
 
10
- const DEFAULT_DRAG_DISABLED_VALUE = false;
11
- const DEFAULT_DROP_DISABLED_VALUE = false;
12
- const DEFAULT_CLASS_VALUE = "tree-view-item";
13
- const DEFAULT_EDITABLE_ITEMS_VALUE = true;
14
- const DEFAULT_EXPANDED_VALUE = false;
15
- const DEFAULT_INDETERMINATE_VALUE = false;
16
- const DEFAULT_LAZY_VALUE = false;
17
- const DEFAULT_ORDER_VALUE = 0;
18
- const DEFAULT_SELECTED_VALUE = false;
19
- const GxgTreeView = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
20
+ const TREE_ITEM_TAG_NAME = "ch-tree-view-item";
21
+ const TREE_TAG_NAME = "ch-tree-view";
22
+ // Selectors
23
+ // const CHECKED_ITEMS = `${TREE_ITEM_TAG_NAME}[checked]`;
24
+ const TEXT_FORMAT = "text/plain";
25
+ const ARROW_DOWN_KEY = "ArrowDown";
26
+ const ARROW_UP_KEY = "ArrowUp";
27
+ const EDIT_KEY = "F2";
28
+ const isTreeItem = (element) => element.tagName.toLowerCase() === TREE_ITEM_TAG_NAME;
29
+ const getFocusedTreeItem = () => focusComposedPath().find(isTreeItem);
30
+ const canMoveTreeItemFocus = (treeItem) => treeItem && !treeItem.editing;
31
+ const getDroppableZoneKey = (newContainerId, draggedItems) => `"newContainerId":"${newContainerId}","metadata":"${JSON.stringify(draggedItems)}"`;
32
+ const POSITION_X_DRAG_CUSTOM_VAR = "--ch-tree-view-dragging-item-x";
33
+ const POSITION_Y_DRAG_CUSTOM_VAR = "--ch-tree-view-dragging-item-y";
34
+ const ChTreeView = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
20
35
  constructor() {
21
36
  super();
22
37
  this.__registerHost();
23
- this.checkedItemsChange = createEvent(this, "checkedItemsChange", 7);
38
+ this.droppableZoneEnter = createEvent(this, "droppableZoneEnter", 7);
39
+ this.expandedItemChange = createEvent(this, "expandedItemChange", 7);
24
40
  this.itemContextmenu = createEvent(this, "itemContextmenu", 7);
25
- this.itemOpenReference = createEvent(this, "itemOpenReference", 7);
41
+ this.itemsDropped = createEvent(this, "itemsDropped", 7);
26
42
  this.selectedItemsChange = createEvent(this, "selectedItemsChange", 7);
27
- // UI Models
28
- this.flattenedTreeModel = new Map();
29
- this.flattenedCheckboxTreeModel = new Map();
30
- this.selectedItems = new Set();
31
- this.iconAssetsPath = getAssetPath(`./icon-assets`);
32
- /**
33
- * This property lets you specify if the tree is waiting to process the drop
34
- * of items.
35
- */
36
- this.waitDropProcessing = false;
37
- /**
38
- * Removes the default padding on '.ch-tree-x-container' (Added by Gemini)
39
- */
40
- this.noPadding = false;
41
- /**
42
- * Set this attribute if you want display a checkbox in all items by default.
43
- */
44
- this.checkbox = false;
45
- /**
46
- * Set this attribute if you want the checkbox to be checked in all items by
47
- * default.
48
- * Only works if `checkbox = true`
49
- */
50
- this.checked = false;
51
- /**
52
- * A CSS class to set as the `ch-tree-x` element class.
53
- */
54
- this.cssClass = "tree-view";
55
- /**
56
- * This attribute lets you specify if the drag operation is disabled in all
57
- * items by default. If `true`, the items can't be dragged.
58
- */
59
- this.dragDisabled = DEFAULT_DRAG_DISABLED_VALUE;
60
- /**
61
- * This attribute lets you specify if the drop operation is disabled in all
62
- * items by default. If `true`, the items won't accept any drops.
63
- */
64
- this.dropDisabled = DEFAULT_DROP_DISABLED_VALUE;
43
+ // @todo TODO: Check if key codes works in Safari
44
+ this.keyDownEvents = {
45
+ [ARROW_DOWN_KEY]: event => {
46
+ const treeItem = getFocusedTreeItem();
47
+ if (!canMoveTreeItemFocus(treeItem)) {
48
+ return;
49
+ }
50
+ event.preventDefault();
51
+ treeItem.focusNextItem(mouseEventModifierKey(event));
52
+ },
53
+ [ARROW_UP_KEY]: event => {
54
+ const treeItem = getFocusedTreeItem();
55
+ if (!canMoveTreeItemFocus(treeItem)) {
56
+ return;
57
+ }
58
+ event.preventDefault();
59
+ treeItem.focusPreviousItem(mouseEventModifierKey(event));
60
+ },
61
+ [EDIT_KEY]: event => {
62
+ const treeItem = getFocusedTreeItem();
63
+ if (!treeItem || !treeItem.editable) {
64
+ return;
65
+ }
66
+ event.preventDefault();
67
+ treeItem.editing = true;
68
+ }
69
+ };
70
+ this.draggingSelectedItems = false;
71
+ this.needForRAF = true; // To prevent redundant RAF (request animation frame) calls
72
+ this.selectedItemsInfo = new Map();
65
73
  /**
66
- * This attribute lets you specify if the edit operation is enabled in all
67
- * items by default. If `true`, the items can edit its caption in place.
74
+ * Cache to avoid duplicate requests when checking the droppable zone in the
75
+ * same drag event.
68
76
  */
69
- this.editableItems = DEFAULT_EDITABLE_ITEMS_VALUE;
77
+ this.validDroppableZoneCache = new Map();
78
+ this.draggedIds = [];
79
+ this.draggedParentIds = [];
80
+ this.draggingInTheDocument = false;
81
+ this.draggingInTree = false;
70
82
  /**
71
83
  * Set this attribute if you want to allow multi selection of the items.
72
84
  */
73
85
  this.multiSelection = false;
74
86
  /**
75
- * `true` to display the relation between tree items and tree lists using
76
- * lines.
87
+ * This property lets you specify the time (in ms) that the mouse must be
88
+ * over in a subtree to open it when dragging.
77
89
  */
78
- this.showLines = "all";
90
+ this.openSubTreeCountdown = 750;
79
91
  /**
80
- * Set this attribute if you want all the children item's checkboxes to be
81
- * checked when the parent item checkbox is checked, or to be unchecked when
82
- * the parent item checkbox is unchecked.
83
- * This attribute will be used in all items by default.
92
+ * `true` to scroll in the tree when dragging an item near the edges of the
93
+ * tree.
84
94
  */
85
- this.toggleCheckboxes = false;
95
+ this.scrollToEdgeOnDrag = true;
86
96
  /**
87
- * This property lets you define the model of the ch-tree-x control.
97
+ * This property lets you specify if the tree is waiting to process the drop
98
+ * of items.
88
99
  */
89
- this.treeModel = [];
90
- this.handleDroppableZoneEnter = (event) => {
91
- if (!this.checkDroppableZoneCallback) {
100
+ this.waitDropProcessing = false;
101
+ this.trackItemDrag = (event) => {
102
+ event.preventDefault();
103
+ this.lastDragEvent = event;
104
+ this.updateDropEffect(event);
105
+ if (!this.needForRAF) {
92
106
  return;
93
107
  }
94
- event.stopPropagation();
95
- // Suppose the request is made immediately by executing the callback
96
- const requestTimestamp = new Date().getTime();
97
- const dropInformation = event.detail;
98
- const promise = this.checkDroppableZoneCallback(dropInformation);
99
- promise.then((validDrop) => {
100
- this.updateValidDropZone(requestTimestamp, dropInformation.newContainer.id, dropInformation.draggedItems, validDrop);
108
+ this.needForRAF = false; // No need to call RAF up until next frame
109
+ requestAnimationFrame(() => {
110
+ this.needForRAF = true; // RAF now consumes the movement instruction so a new one can come
111
+ this.el.style.setProperty(POSITION_X_DRAG_CUSTOM_VAR, `${this.lastDragEvent.pageX}px`);
112
+ this.el.style.setProperty(POSITION_Y_DRAG_CUSTOM_VAR, `${this.lastDragEvent.pageY}px`);
101
113
  });
102
114
  };
103
- this.handleSelectedItemsChange = (event) => {
104
- event.stopPropagation();
105
- const itemsToProcess = new Map(event.detail);
106
- // Remove no longer selected items
107
- this.selectedItems.forEach((selectedItemId) => {
108
- const itemUIModel = this.flattenedTreeModel.get(selectedItemId).item;
109
- const itemIsStillSelected = itemsToProcess.get(selectedItemId);
110
- // The item does not need to be added. Remove it from the processed list
111
- if (itemIsStillSelected) {
112
- itemUIModel.expanded = itemIsStillSelected.expanded; // Update expanded state
113
- itemsToProcess.delete(selectedItemId);
114
- }
115
- // The item must be un-selected in the UI Model
116
- else {
117
- itemUIModel.selected = false;
118
- this.selectedItems.delete(selectedItemId);
119
- }
120
- });
121
- // Add new selected items
122
- itemsToProcess.forEach((newSelectedItemInfo, itemId) => {
123
- const newSelectedItem = this.flattenedTreeModel.get(itemId).item;
124
- newSelectedItem.selected = true;
125
- newSelectedItem.expanded = newSelectedItemInfo.expanded;
126
- this.selectedItems.add(itemId);
127
- });
128
- this.selectedItemsChange.emit(event.detail);
129
- };
130
- this.handleExpandedItemChange = (event) => {
131
- const detail = event.detail;
132
- const itemInfo = this.flattenedTreeModel.get(detail.id).item;
133
- itemInfo.expanded = detail.expanded;
134
- };
135
- this.handleItemContextmenu = (event) => {
136
- event.stopPropagation();
137
- this.itemContextmenu.emit(event.detail);
138
- };
139
- this.handleItemsDropped = (event) => {
140
- if (!this.dropItemsCallback) {
141
- return;
142
- }
143
- event.stopPropagation();
144
- const dataTransferInfo = event.detail;
145
- const newContainer = dataTransferInfo.newContainer;
146
- const newParentId = newContainer.id;
147
- // Check if the parent exists in the UI Model
148
- if (!this.flattenedTreeModel.get(newParentId)) {
149
- return;
150
- }
151
- const draggedItems = dataTransferInfo.draggedItems;
152
- if (draggedItems.length === 0) {
115
+ this.fixScrollPositionOnDrag = () => {
116
+ if (!this.draggingInTree || !this.lastDragEvent) {
153
117
  return;
154
118
  }
155
- const promise = this.dropItemsCallback(dataTransferInfo);
156
- this.waitDropProcessing = true;
157
- promise.then(async (response) => {
158
- this.waitDropProcessing = false;
159
- if (!response.acceptDrop) {
160
- return;
161
- }
162
- const newParentUIModel = this.flattenedTreeModel.get(newParentId).item;
163
- // Only move the items to the new parent, keeping the state
164
- if (dataTransferInfo.dropInTheSameTree) {
165
- // Add the UI models to the new container and remove the UI models from
166
- // the old containers
167
- draggedItems.forEach(this.moveItemToNewParent(newParentUIModel));
168
- // When the selected items are moved, the tree must remove its internal
169
- // state to not have undefined references
170
- if (dataTransferInfo.draggingSelectedItems) {
171
- await this.treeRef.clearSelectedItemsInfo();
172
- }
173
- }
174
- // Add the new items
175
- else {
176
- if (response.items == null) {
177
- return;
178
- }
179
- // Add new items to the parent
180
- newParentUIModel.items.push(...response.items);
181
- // Flatten the new UI models
182
- response.items.forEach(this.flattenItemUIModel(newParentUIModel));
183
- }
184
- this.sortItems(newParentUIModel.items);
185
- // Open the item to visualize the new subitems
186
- newParentUIModel.expanded = true;
187
- // There is no need to force and update, since the waitDropProcessing
188
- // prop was modified
189
- });
190
- };
191
- this.moveItemToNewParent = (newParentUIModel) => (dataTransferInfo) => {
192
- const itemUIModelExtended = this.flattenedTreeModel.get(dataTransferInfo.id);
193
- const item = itemUIModelExtended.item;
194
- const oldParentItem = itemUIModelExtended.parentItem;
195
- // Remove the UI model from the previous parent
196
- oldParentItem.items.splice(oldParentItem.items.indexOf(item), 1);
197
- // Add the UI Model to the new parent
198
- newParentUIModel.items.push(item);
199
- // Reference the new parent in the item
200
- itemUIModelExtended.parentItem = newParentUIModel;
201
- };
202
- this.renderSubModel = (treeSubModel, lastItem, level) => {
203
- var _a, _b, _c, _d, _e, _f;
204
- return (h("ch-tree-x-list-item", { id: treeSubModel.id, caption: treeSubModel.caption, checkbox: (_a = treeSubModel.checkbox) !== null && _a !== void 0 ? _a : this.checkbox, checked: (_b = treeSubModel.checked) !== null && _b !== void 0 ? _b : this.checked, class: treeSubModel.class, disabled: treeSubModel.disabled, downloading: treeSubModel.downloading, dragDisabled: (_c = treeSubModel.dragDisabled) !== null && _c !== void 0 ? _c : this.dragDisabled, dropDisabled: (_d = treeSubModel.dropDisabled) !== null && _d !== void 0 ? _d : this.dropDisabled, editable: (_e = treeSubModel.editable) !== null && _e !== void 0 ? _e : this.editableItems, expanded: treeSubModel.expanded, indeterminate: treeSubModel.indeterminate, lastItem: lastItem, lazyLoad: treeSubModel.lazy, leaf: treeSubModel.leaf, leftImgSrc: treeSubModel.leftImgSrc
205
- ? resolveImgPath(this.iconAssetsPath, treeSubModel.leftImgSrc)
206
- : null, level: level, metadata: treeSubModel.metadata, rightImgSrc: treeSubModel.rightImgSrc, selected: treeSubModel.selected, showExpandableButton: treeSubModel.showExpandableButton, showLines: this.showLines, toggleCheckboxes: (_f = treeSubModel.toggleCheckboxes) !== null && _f !== void 0 ? _f : this.toggleCheckboxes }, !treeSubModel.leaf &&
207
- treeSubModel.items != null &&
208
- treeSubModel.items.map((subModel, index) => this.renderSubModel(subModel, this.showLines && index === treeSubModel.items.length - 1, level + 1))));
209
- };
210
- this.flattenItemUIModel = (parentModel) => (item) => {
211
- var _a;
212
- this.flattenedTreeModel.set(item.id, {
213
- parentItem: parentModel,
214
- item: item,
119
+ requestAnimationFrame(() => {
120
+ scrollToEdge(this.lastDragEvent, this.el, 10, 30);
121
+ requestAnimationFrame(this.fixScrollPositionOnDrag);
215
122
  });
216
- // Add the items that have a checkbox in a separate Map
217
- if ((_a = item.checkbox) !== null && _a !== void 0 ? _a : this.checkbox) {
218
- this.flattenedCheckboxTreeModel.set(item.id, {
219
- parentItem: parentModel,
220
- item: item,
221
- });
222
- }
223
- // Make sure the properties are with their default values to avoid issues
224
- // when reusing DOM nodes
225
- item.class = item.class == null ? DEFAULT_CLASS_VALUE : item.class;
226
- item.expanded =
227
- item.expanded == null ? DEFAULT_EXPANDED_VALUE : item.expanded;
228
- item.indeterminate =
229
- item.indeterminate == null
230
- ? DEFAULT_INDETERMINATE_VALUE
231
- : item.indeterminate;
232
- item.lazy = item.lazy == null ? DEFAULT_LAZY_VALUE : item.lazy;
233
- item.order = item.order == null ? DEFAULT_ORDER_VALUE : item.order;
234
- item.selected =
235
- item.selected == null ? DEFAULT_SELECTED_VALUE : item.selected;
236
- if (item.selected) {
237
- this.selectedItems.add(item.id);
238
- }
239
- this.flattenSubModel(item);
240
123
  };
241
124
  }
242
- handleTreeModelChange() {
243
- this.flattenModel();
125
+ // /**
126
+ // * Returns an array of the selected tree items, providing the id, caption and
127
+ // * selected status.
128
+ // */
129
+ // @Method()
130
+ // async getCheckedItems(): Promise<CheckedTreeItemInfo[]> {
131
+ // const checkedItems = Array.from(
132
+ // this.el.querySelectorAll(CHECKED_ITEMS)
133
+ // ) as HTMLChTreeViewItemElement[];
134
+ // return checkedItems.map(item => ({
135
+ // id: item.id,
136
+ // caption: item.caption,
137
+ // selected: item.selected
138
+ // }));
139
+ // }
140
+ handleContextMenuEvent(event) {
141
+ const treeItem = event.target.closest(TREE_ITEM_TAG_NAME);
142
+ if (!treeItem) {
143
+ return;
144
+ }
145
+ event.preventDefault();
146
+ this.itemContextmenu.emit({
147
+ id: treeItem.id,
148
+ itemRef: treeItem,
149
+ metadata: treeItem.metadata,
150
+ contextmenuEvent: event
151
+ });
152
+ }
153
+ // Set edit mode in items
154
+ handleKeyDownEvents(event) {
155
+ const keyHandler = this.keyDownEvents[event.key];
156
+ if (keyHandler) {
157
+ keyHandler(event);
158
+ }
244
159
  }
245
- /**
246
- * Given an item id, an array of items to add, the download status and the
247
- * lazy state, updates the item's UI Model.
248
- */
249
- async loadLazyContent(itemId, items, downloading = false, lazy = false) {
250
- const itemToLazyLoadContent = this.flattenedTreeModel.get(itemId).item;
251
- // Establish that the content was lazy loaded
252
- itemToLazyLoadContent.downloading = downloading;
253
- itemToLazyLoadContent.lazy = lazy;
254
- // Check if there is items to add
255
- if (items == null) {
160
+ // We can't use capture, because the dataTransfer info would not be defined
161
+ // Also, we cant use capture and setTimeout with 0 seconds, because the
162
+ // getData method can only be accessed during the dragstart and drop event
163
+ handleDragStart(event) {
164
+ // Reset the validity of the droppable zones with each new drag start
165
+ this.validDroppableZoneCache.clear();
166
+ this.draggingInTheDocument = true;
167
+ this.dragStartTimestamp = new Date().getTime();
168
+ this.draggedItems = JSON.parse(event.dataTransfer.getData(TEXT_FORMAT));
169
+ }
170
+ handleDragEnd() {
171
+ this.draggingInTheDocument = false;
172
+ }
173
+ handleDragEnter(event) {
174
+ this.cancelSubTreeOpening(null, true);
175
+ event.stopPropagation();
176
+ const containerTarget = event.target;
177
+ // Check if it is a valid item
178
+ if (containerTarget.tagName.toLowerCase() !== TREE_ITEM_TAG_NAME) {
256
179
  return;
257
180
  }
258
- // @todo What happens in the server when dropping items on a lazy node?
259
- itemToLazyLoadContent.items = items;
260
- this.sortItems(itemToLazyLoadContent.items);
261
- this.flattenSubModel(itemToLazyLoadContent);
262
- // Re-sync checked items
263
- this.emitCheckedItemsChange();
264
- // Force re-render
265
- forceUpdate(this);
181
+ this.lastOpenSubTreeItem = containerTarget;
182
+ this.openSubTreeAfterCountdown(containerTarget);
183
+ if (this.validDroppableZone(event) === "valid") {
184
+ containerTarget.dragState = "enter";
185
+ }
266
186
  }
267
- /**
268
- * Given an item id, it displays and scrolls into the item view.
269
- */
270
- async scrollIntoVisible(treeItemId) {
271
- const itemUIModel = this.flattenedTreeModel.get(treeItemId);
272
- if (!itemUIModel) {
273
- // @todo Check if the item is on the server?
187
+ handleDragLeave(event) {
188
+ const currentTarget = event.target;
189
+ if (currentTarget.tagName.toLowerCase() !== TREE_ITEM_TAG_NAME) {
274
190
  return;
275
191
  }
276
- let visitedNode = itemUIModel.parentItem;
277
- // While the parent is not the root, update the UI Models
278
- while (visitedNode && visitedNode.id != null) {
279
- // Expand the item
280
- visitedNode.expanded = true;
281
- const visitedNodeUIModel = this.flattenedTreeModel.get(visitedNode.id);
282
- visitedNode = visitedNodeUIModel.parentItem;
192
+ const treeItem = currentTarget;
193
+ treeItem.dragState = "none";
194
+ this.cancelSubTreeOpening(treeItem);
195
+ }
196
+ cancelSubTreeOpening(treeItem, forceClear = false) {
197
+ if (this.lastOpenSubTreeItem === treeItem || forceClear) {
198
+ clearTimeout(this.openSubTreeTimeout);
199
+ this.lastOpenSubTreeItem = null;
200
+ }
201
+ }
202
+ handleItemDrop(event) {
203
+ event.stopPropagation();
204
+ this.cancelSubTreeOpening(null, true);
205
+ const newContainer = event.target;
206
+ const draggedItems = JSON.parse(event.dataTransfer.getData(TEXT_FORMAT));
207
+ // The droppable zone must be checked, even if it was marked as not valid
208
+ // @todo Try to drop an item with high delays in droppable zone checking
209
+ if (this.validDroppableZone(event) !== "valid") {
210
+ return;
211
+ }
212
+ this.itemsDropped.emit({
213
+ newContainer: { id: newContainer.id, metadata: newContainer.metadata },
214
+ draggingSelectedItems: this.draggingSelectedItems,
215
+ draggedItems: draggedItems,
216
+ dropInTheSameTree: this.draggingInTree
217
+ });
218
+ }
219
+ handleItemDragStart(event) {
220
+ document.body.addEventListener("dragover", this.trackItemDrag, {
221
+ capture: true
222
+ });
223
+ this.currentDraggedItem = event.target;
224
+ const allItemsCanBeDragged = this.checkDragValidityAndUpdateDragInfo(event.detail);
225
+ if (!allItemsCanBeDragged) {
226
+ // This effect disables drop interactions in all page elements, so there
227
+ // is no need to capture and prevent the drop event in the window
228
+ event.detail.dragEvent.dataTransfer.effectAllowed = "none";
229
+ return;
283
230
  }
284
- forceUpdate(this);
285
- // @todo For some reason, when the model is created using the "big model" option,
286
- // this implementation does not work when only the UI Model is updated. So, to
287
- // expand the items, we have to delegate the responsibility to the tree-x
288
- this.treeRef.scrollIntoVisible(treeItemId);
231
+ this.draggingInTree = true;
232
+ if (this.scrollToEdgeOnDrag) {
233
+ this.fixScrollPositionOnDrag();
234
+ }
235
+ }
236
+ handleItemDragEnd() {
237
+ this.draggingInTree = false;
238
+ document.body.removeEventListener("dragover", this.trackItemDrag, {
239
+ capture: true
240
+ });
241
+ // Reset not allowed droppable ids
242
+ this.resetVariables();
289
243
  }
290
244
  /**
291
- * This method is used to toggle a tree item by the tree item id/ids.
292
- *
293
- * @param treeItemIds An array id the tree items to be toggled.
294
- * @param expand A boolean indicating that the tree item should be expanded or collapsed. (optional)
295
- * @returns The modified items after the method was called.
245
+ * Only sync the info about the selected items. It does not update the state
246
+ * of the previous selected items.
296
247
  */
297
- async toggleItems(treeItemIds, expand) {
298
- if (!treeItemIds) {
299
- return [];
248
+ handleSelectedItemSync(event) {
249
+ event.stopPropagation();
250
+ const selectedItemInfo = event.detail;
251
+ // If the item is selected, add it to list
252
+ if (selectedItemInfo.selected) {
253
+ this.selectedItemsInfo.set(selectedItemInfo.id, selectedItemInfo);
300
254
  }
301
- const modifiedTreeItems = [];
302
- treeItemIds.forEach((treeItemId) => {
303
- const itemInfo = this.flattenedTreeModel.get(treeItemId).item;
304
- if (itemInfo) {
305
- itemInfo.expanded = expand !== null && expand !== void 0 ? expand : !itemInfo.expanded;
306
- modifiedTreeItems.push({
307
- id: itemInfo.id,
308
- expanded: itemInfo.expanded,
309
- });
310
- }
311
- });
312
- // Force re-render
313
- forceUpdate(this);
314
- return modifiedTreeItems;
255
+ else {
256
+ this.selectedItemsInfo.delete(selectedItemInfo.id);
257
+ }
258
+ }
259
+ handleSelectedItemChange(event) {
260
+ event.stopPropagation();
261
+ const selectedItemInfo = event.detail;
262
+ const selectedItemEl = event.target;
263
+ this.handleItemSelection(selectedItemEl, selectedItemInfo);
315
264
  }
316
265
  /**
317
- * Given a subset of item's properties, it updates all item UI models.
266
+ * Clear all information about the selected items. This method is intended to
267
+ * be used when selected items are reordered and the selected references will
268
+ * no longer be useful.
318
269
  */
319
- async updateAllItemsProperties(properties) {
320
- [...this.flattenedTreeModel.values()].forEach((itemUIModel) => {
321
- if (properties.expanded != null) {
322
- itemUIModel.item.expanded = properties.expanded;
323
- }
324
- if (properties.checked != null) {
325
- itemUIModel.item.checked = properties.checked;
326
- itemUIModel.item.indeterminate = false;
327
- }
328
- });
329
- forceUpdate(this);
270
+ async clearSelectedItemsInfo() {
271
+ this.clearSelectedItems();
330
272
  }
331
273
  /**
332
- * Given a item list and the properties to update, it updates the properties
333
- * of the items in the list.
274
+ * Given an item id, it displays and scrolls into the item view.
334
275
  */
335
- async updateItemsProperties(items, properties) {
336
- items.forEach((item) => {
337
- const itemUIModel = this.flattenedTreeModel.get(item);
338
- this.updateItemProperty(itemUIModel, properties);
276
+ async scrollIntoVisible(treeItemId) {
277
+ const itemRef = this.el.querySelector(`${TREE_ITEM_TAG_NAME}#${treeItemId}`);
278
+ if (!itemRef) {
279
+ return;
280
+ }
281
+ let parentItem = itemRef.parentElement;
282
+ // Expand all parents
283
+ while (parentItem.tagName.toLowerCase() === TREE_ITEM_TAG_NAME) {
284
+ parentItem.expanded = true;
285
+ parentItem = parentItem.parentElement;
286
+ }
287
+ // Wait until the parents are expanded
288
+ requestAnimationFrame(() => {
289
+ itemRef.scrollIntoView();
339
290
  });
340
- forceUpdate(this);
341
291
  }
342
292
  /**
343
293
  * Update the information about the valid droppable zones.
@@ -347,183 +297,208 @@ const GxgTreeView = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
347
297
  * @param validDrop Current state of the droppable zone.
348
298
  */
349
299
  async updateValidDropZone(requestTimestamp, newContainerId, draggedItems, validDrop) {
350
- this.treeRef.updateValidDropZone(requestTimestamp, newContainerId, draggedItems, validDrop);
351
- }
352
- updateItemProperty(itemUIModel, properties) {
353
- if (!itemUIModel) {
300
+ var _a;
301
+ if (!this.draggingInTheDocument ||
302
+ requestTimestamp <= this.dragStartTimestamp) {
354
303
  return;
355
304
  }
356
- const itemInfo = itemUIModel.item;
357
- Object.keys(properties).forEach((propertyName) => {
358
- itemInfo[propertyName] = properties[propertyName];
359
- });
305
+ const droppableZoneKey = getDroppableZoneKey(newContainerId, draggedItems);
306
+ this.validDroppableZoneCache.set(droppableZoneKey, validDrop ? "valid" : "invalid");
307
+ const shouldUpdateDragEnterInCurrentContainer = ((_a = this.lastOpenSubTreeItem) === null || _a === void 0 ? void 0 : _a.id) === newContainerId;
308
+ if (shouldUpdateDragEnterInCurrentContainer) {
309
+ this.lastOpenSubTreeItem.dragState = "enter";
310
+ }
360
311
  }
361
- updateCheckboxValue(event) {
362
- event.stopPropagation();
363
- const detail = event.detail;
364
- const treeItemId = detail.id;
365
- const itemUIModel = this.flattenedCheckboxTreeModel.get(treeItemId);
366
- // In some cases, when the `treeModel` and `checked` properties are updated
367
- // outside of the tree control, some events are fired with undefined references
368
- if (!itemUIModel) {
369
- return;
312
+ validDroppableZone(event) {
313
+ const containerTarget = event.target;
314
+ const cacheKey = getDroppableZoneKey(containerTarget.id, this.draggedItems);
315
+ let droppableZoneState = this.validDroppableZoneCache.get(cacheKey);
316
+ // Invalidate the cache, because the item is no longer waiting for its content to be downloaded
317
+ if (droppableZoneState === "temporal-invalid" &&
318
+ !containerTarget.lazyLoad &&
319
+ !containerTarget.downloading) {
320
+ droppableZoneState = null;
370
321
  }
371
- const itemInfo = itemUIModel.item;
372
- itemInfo.checked = detail.checked;
373
- itemInfo.indeterminate = detail.indeterminate;
374
- this.emitCheckedItemsChange();
322
+ if (droppableZoneState != null) {
323
+ return droppableZoneState;
324
+ }
325
+ // Do not show drop zones if:
326
+ // - The effect does not allow it.
327
+ // - The drop is disabled in the container target.
328
+ // - When dragging in the same tree, don't mark droppable zones if they are
329
+ // the dragged items or their direct parents.
330
+ if (event.dataTransfer.effectAllowed === "none" ||
331
+ containerTarget.dropDisabled ||
332
+ (this.draggingInTree &&
333
+ (this.draggedIds.includes(containerTarget.id) ||
334
+ this.draggedParentIds.includes(containerTarget.id)))) {
335
+ this.validDroppableZoneCache.set(cacheKey, "invalid");
336
+ return "invalid";
337
+ }
338
+ // Disable drops when items need to lazy load their content first
339
+ if (containerTarget.lazyLoad || containerTarget.downloading) {
340
+ this.validDroppableZoneCache.set(cacheKey, "temporal-invalid");
341
+ return "temporal-invalid";
342
+ }
343
+ this.validDroppableZoneCache.set(cacheKey, "checking");
344
+ this.droppableZoneEnter.emit({
345
+ newContainer: {
346
+ id: containerTarget.id,
347
+ metadata: containerTarget.metadata
348
+ },
349
+ draggedItems: this.draggedItems
350
+ });
351
+ return "checking";
375
352
  }
376
- loadLazyChildrenHandler(event) {
377
- if (!this.lazyLoadTreeItemsCallback) {
353
+ openSubTreeAfterCountdown(currentTarget) {
354
+ if (currentTarget.leaf || currentTarget.expanded) {
378
355
  return;
379
356
  }
380
- event.stopPropagation();
381
- const treeItemId = event.detail;
382
- const promise = this.lazyLoadTreeItemsCallback(treeItemId);
383
- event.target.downloading = true;
384
- promise.then((result) => {
385
- this.loadLazyContent(treeItemId, result);
386
- });
357
+ this.openSubTreeTimeout = setTimeout(() => {
358
+ currentTarget.expanded = true;
359
+ this.expandedItemChange.emit({ id: currentTarget.id, expanded: true });
360
+ }, this.openSubTreeCountdown);
387
361
  }
388
- handleCaptionModification(event) {
389
- if (!this.modifyItemCaptionCallback) {
362
+ updateDropEffect(event) {
363
+ const itemTarget = event.target;
364
+ // Check if it is a valid item
365
+ if (itemTarget.tagName.toLowerCase() !== TREE_ITEM_TAG_NAME ||
366
+ itemTarget.closest(TREE_TAG_NAME) !== this.el) {
390
367
  return;
391
368
  }
392
- event.stopPropagation();
393
- const itemRef = event.target;
394
- const itemId = event.detail.id;
395
- const itemUIModel = this.flattenedTreeModel.get(itemId);
396
- const itemInfo = itemUIModel.item;
397
- const newCaption = event.detail.caption;
398
- const oldCaption = itemInfo.caption;
399
- // Optimistic UI: Update the caption in the UI Model before the change is
400
- // completed in the server
401
- itemInfo.caption = newCaption;
402
- // Due to performance reasons, we don't make a shallow copy of the
403
- // treeModel to force a re-render
404
- itemRef.caption = newCaption;
405
- const promise = this.modifyItemCaptionCallback(itemId, newCaption);
406
- promise.then((status) => {
407
- if (status.success) {
408
- this.sortItems(itemUIModel.parentItem.items);
409
- // Force re-render
410
- forceUpdate(this);
411
- }
412
- else {
413
- itemRef.caption = oldCaption;
414
- itemInfo.caption = oldCaption;
415
- // Do something with the error message
416
- }
417
- });
369
+ const droppableZoneState = this.validDroppableZone(event);
370
+ if (droppableZoneState === "invalid" ||
371
+ droppableZoneState === "temporal-invalid") {
372
+ event.dataTransfer.dropEffect = "none";
373
+ }
418
374
  }
419
- handleOpenReference(event) {
420
- event.stopPropagation();
421
- this.itemOpenReference.emit(event.detail);
375
+ resetVariables() {
376
+ this.draggedIds = [];
377
+ this.draggedParentIds = [];
422
378
  }
423
- emitCheckedItemsChange() {
424
- // New copy of the checked items
425
- const allItemsWithCheckbox = new Map(this.flattenedCheckboxTreeModel);
426
- // Update the checked value if not defined
427
- allItemsWithCheckbox.forEach((itemUIModel) => {
428
- if (itemUIModel.item.checked == null) {
429
- itemUIModel.item.checked = this.checked;
430
- }
431
- });
432
- this.checkedItemsChange.emit(allItemsWithCheckbox);
379
+ /**
380
+ * First, it check if all items can be dragged. If so, it updates the
381
+ * dataTransfer in the drag event to store the ids and metadata of the
382
+ * dragged items. Also it updates the visual information of the dragged
383
+ * items.
384
+ * @returns If all selected items can be dragged.
385
+ */
386
+ checkDragValidityAndUpdateDragInfo(dragInfo) {
387
+ const draggedElement = dragInfo.elem;
388
+ const isDraggingSelectedItems = this.selectedItemsInfo.has(draggedElement.id);
389
+ this.draggingSelectedItems = isDraggingSelectedItems;
390
+ let dataTransferInfo = [];
391
+ let dragIsEnabledForAllItems;
392
+ if (isDraggingSelectedItems) {
393
+ const selectedItemKeys = [...this.selectedItemsInfo.keys()];
394
+ const selectedItemValues = [...this.selectedItemsInfo.values()];
395
+ const selectedItemCount = selectedItemKeys.length;
396
+ dragIsEnabledForAllItems = selectedItemValues.every(el => !el.itemRef.dragDisabled);
397
+ this.draggedIds = selectedItemKeys;
398
+ dataTransferInfo = selectedItemValues.map(el => ({
399
+ id: el.id,
400
+ metadata: el.metadata
401
+ }));
402
+ this.dragInfo =
403
+ selectedItemCount === 1
404
+ ? draggedElement.caption
405
+ : selectedItemCount.toString();
406
+ }
407
+ else {
408
+ dragIsEnabledForAllItems = !draggedElement.dragDisabled;
409
+ dataTransferInfo = [
410
+ { id: draggedElement.id, metadata: draggedElement.metadata }
411
+ ];
412
+ this.draggedIds = [draggedElement.id];
413
+ this.dragInfo = draggedElement.caption;
414
+ }
415
+ this.getDirectParentsOfDraggableItems(isDraggingSelectedItems);
416
+ // Update drag event info
417
+ const data = JSON.stringify(dataTransferInfo);
418
+ dragInfo.dragEvent.dataTransfer.setData(TEXT_FORMAT, data);
419
+ // We must keep the data binding and processing even if there is an item
420
+ // that can't be dragged, otherwise, other trees or element might behave
421
+ // unexpected when a dragstart event comes
422
+ return dragIsEnabledForAllItems;
433
423
  }
434
- flattenSubModel(model) {
435
- const items = model.items;
436
- if (!items) {
437
- // Make sure that subtrees don't have an undefined array
438
- if (model.leaf !== true) {
439
- model.items = [];
424
+ getDirectParentsOfDraggableItems(draggingSelectedItems) {
425
+ if (!draggingSelectedItems) {
426
+ const parentTreeItemElem = this.currentDraggedItem.parentElement;
427
+ if (parentTreeItemElem.tagName.toLowerCase() === TREE_ITEM_TAG_NAME) {
428
+ this.draggedParentIds.push(parentTreeItemElem.id);
440
429
  }
441
430
  return;
442
431
  }
443
- this.sortItems(items);
444
- items.forEach(this.flattenItemUIModel(model));
432
+ // Dragging selected items
433
+ this.selectedItemsInfo.forEach(selectedItem => {
434
+ const parentId = selectedItem.parentId;
435
+ // parentId === "" when the item is in the first level of the tree
436
+ if (parentId !== "") {
437
+ this.draggedParentIds.push(parentId);
438
+ }
439
+ });
445
440
  }
446
- sortItems(items) {
447
- // Ensure that items are sorted
448
- if (this.sortItemsCallback) {
449
- this.sortItemsCallback(items);
441
+ handleItemSelection(selectedItemEl, selectedItemInfo) {
442
+ // If the Control key was not pressed or multi selection is disabled,
443
+ // remove all selected items
444
+ if (!selectedItemInfo.ctrlKeyPressed || !this.multiSelection) {
445
+ // Don't update the state of the selected item if no needed
446
+ this.selectedItemsInfo.delete(selectedItemInfo.id);
447
+ this.selectedItemsInfo.forEach(treeItem => {
448
+ treeItem.itemRef.selected = false;
449
+ });
450
+ this.clearSelectedItems();
451
+ // Re-select the item
452
+ selectedItemEl.selected = selectedItemInfo.selected;
450
453
  }
451
- }
452
- flattenModel() {
453
- this.flattenedTreeModel.clear();
454
- this.flattenedCheckboxTreeModel.clear();
455
- this.selectedItems.clear();
456
- // The model was updated at runtime, so we need to clear the references
457
- if (this.treeRef) {
458
- this.treeRef.clearSelectedItemsInfo();
454
+ // If the item is selected, add it to list
455
+ if (selectedItemInfo.selected) {
456
+ this.selectedItemsInfo.set(selectedItemInfo.id, selectedItemInfo);
459
457
  }
460
- this.flattenSubModel({ id: null, caption: null, items: this.treeModel });
461
- // Re-sync checked items
462
- this.emitCheckedItemsChange();
458
+ // Sync with UI model
459
+ this.selectedItemsChange.emit(this.selectedItemsInfo);
463
460
  }
464
- componentWillLoad() {
465
- this.flattenModel();
461
+ clearSelectedItems() {
462
+ this.selectedItemsInfo.clear();
463
+ }
464
+ disconnectedCallback() {
465
+ this.resetVariables();
466
+ // Remove dragover body event
467
+ this.handleItemDragEnd();
466
468
  }
467
469
  render() {
468
- return (h("ch-tree-x", { class: this.cssClass || null, multiSelection: this.multiSelection, waitDropProcessing: this.waitDropProcessing, onDroppableZoneEnter: this.handleDroppableZoneEnter, onExpandedItemChange: this.handleExpandedItemChange, onItemContextmenu: this.handleItemContextmenu, onItemsDropped: this.handleItemsDropped, onSelectedItemsChange: this.handleSelectedItemsChange, ref: (el) => (this.treeRef = el) }, this.treeModel.map((subModel, index) => this.renderSubModel(subModel, this.showLines && index === this.treeModel.length - 1, 0))));
470
+ return (h(Host, { class: {
471
+ "ch-tree-view-dragging-item": this.draggingInTheDocument,
472
+ "ch-tree-view-not-dragging-item": !this.draggingInTheDocument,
473
+ "ch-tree-view--dragging-selected-items": this.draggingInTree && this.draggingSelectedItems,
474
+ "ch-tree-view-waiting-drop-processing": this.waitDropProcessing
475
+ } }, 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))));
469
476
  }
470
- static get assetsDirs() { return ["assets"]; }
471
- static get watchers() { return {
472
- "treeModel": ["handleTreeModelChange"]
473
- }; }
477
+ get el() { return this; }
474
478
  static get style() { return treeViewCss; }
475
- }, [0, "gxg-tree-view", {
476
- "noPadding": [516, "no-padding"],
477
- "checkbox": [4],
478
- "checked": [4],
479
- "checkDroppableZoneCallback": [16],
480
- "cssClass": [1, "css-class"],
481
- "dragDisabled": [4, "drag-disabled"],
482
- "dropDisabled": [4, "drop-disabled"],
483
- "dropItemsCallback": [16],
484
- "editableItems": [4, "editable-items"],
485
- "lazyLoadTreeItemsCallback": [16],
486
- "modifyItemCaptionCallback": [16],
479
+ }, [4, "ch-tree-view", {
487
480
  "multiSelection": [4, "multi-selection"],
488
- "showLines": [1, "show-lines"],
489
- "sortItemsCallback": [16],
490
- "toggleCheckboxes": [4, "toggle-checkboxes"],
491
- "treeModel": [16],
492
- "waitDropProcessing": [32],
493
- "loadLazyContent": [64],
481
+ "openSubTreeCountdown": [2, "open-sub-tree-countdown"],
482
+ "scrollToEdgeOnDrag": [4, "scroll-to-edge-on-drag"],
483
+ "waitDropProcessing": [4, "wait-drop-processing"],
484
+ "draggingInTheDocument": [32],
485
+ "draggingInTree": [32],
486
+ "clearSelectedItemsInfo": [64],
494
487
  "scrollIntoVisible": [64],
495
- "toggleItems": [64],
496
- "updateAllItemsProperties": [64],
497
- "updateItemsProperties": [64],
498
488
  "updateValidDropZone": [64]
499
- }, [[0, "checkboxChange", "updateCheckboxValue"], [0, "checkboxToggleChange", "updateCheckboxValue"], [0, "loadLazyContent", "loadLazyChildrenHandler"], [0, "modifyCaption", "handleCaptionModification"], [2, "openReference", "handleOpenReference"]]]);
489
+ }, [[2, "contextmenu", "handleContextMenuEvent"], [2, "keydown", "handleKeyDownEvents"], [9, "dragstart", "handleDragStart"], [11, "dragend", "handleDragEnd"], [3, "dragenter", "handleDragEnter"], [3, "dragleave", "handleDragLeave"], [1, "drop", "handleItemDrop"], [0, "itemDragStart", "handleItemDragStart"], [0, "itemDragEnd", "handleItemDragEnd"], [0, "selectedItemSync", "handleSelectedItemSync"], [0, "selectedItemChange", "handleSelectedItemChange"]]]);
500
490
  function defineCustomElement() {
501
491
  if (typeof customElements === "undefined") {
502
492
  return;
503
493
  }
504
- const components = ["gxg-tree-view", "ch-checkbox", "ch-tree-x", "ch-tree-x-list-item"];
494
+ const components = ["ch-tree-view"];
505
495
  components.forEach(tagName => { switch (tagName) {
506
- case "gxg-tree-view":
507
- if (!customElements.get(tagName)) {
508
- customElements.define(tagName, GxgTreeView);
509
- }
510
- break;
511
- case "ch-checkbox":
512
- if (!customElements.get(tagName)) {
513
- defineCustomElement$3();
514
- }
515
- break;
516
- case "ch-tree-x":
517
- if (!customElements.get(tagName)) {
518
- defineCustomElement$2();
519
- }
520
- break;
521
- case "ch-tree-x-list-item":
496
+ case "ch-tree-view":
522
497
  if (!customElements.get(tagName)) {
523
- defineCustomElement$1();
498
+ customElements.define(tagName, ChTreeView);
524
499
  }
525
500
  break;
526
501
  } });
527
502
  }
528
503
 
529
- export { GxgTreeView as G, defineCustomElement as d };
504
+ export { ChTreeView as C, defineCustomElement as d };