@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,1541 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- const index = require('./index-5a32426a.js');
6
- const helpers = require('./helpers-291cb1cb.js');
7
-
8
- const scrollToEdge = (event, container, scrollSpeed, scrollThreshold) => {
9
- const mousePositionY = event.clientY - container.getBoundingClientRect().top;
10
- const containerHeight = container.clientHeight;
11
- const mouseAtTheTop = mousePositionY <= scrollThreshold;
12
- const mouseAtTheBottom = mousePositionY > containerHeight - scrollThreshold;
13
- if (mouseAtTheTop || mouseAtTheBottom) {
14
- const scrollAmount = mouseAtTheTop
15
- ? mousePositionY - scrollThreshold
16
- : mousePositionY - (containerHeight - scrollThreshold);
17
- // Adjust container scroll position
18
- container.scrollTop += scrollAmount / scrollSpeed;
19
- }
20
- };
21
-
22
- const treeXCss = "ch-tree-x{display:flex;position:relative;width:100%;overflow:auto}ch-tree-x>.ch-tree-x-container{position:absolute;inset:0}ch-tree-x.ch-tree-x-dragging-item ch-tree-x-list-item{pointer-events:var(--ch-tree-x-pointer-events, all)}ch-tree-x.ch-tree-x-dragging-item .ch-tree-x-list-item--deny-drop{pointer-events:none}ch-tree-x.ch-tree-x--dragging-selected-items ch-tree-x-list-item[selected]{--ch-tree-x-pointer-events:none}ch-tree-x.ch-tree-x-waiting-drop-processing{cursor:wait}ch-tree-x.ch-tree-x-waiting-drop-processing>.ch-tree-x-container{pointer-events:none}.ch-tree-x-drag-info{--rtl-offset:16px;position:fixed;left:0;top:0;transform:translate(calc(var(--ch-tree-x-dragging-item-x) + var(--rtl-offset)), calc(var(--ch-tree-x-dragging-item-y) + 8px));pointer-events:none;z-index:1;animation:ch-tree-x-drag-info-fade-in 10ms}@keyframes ch-tree-x-drag-info-fade-in{0%,100%{opacity:0}}html[dir=rtl] .ch-tree-x-drag-info{--rtl-offset:-100%}";
23
-
24
- const TREE_ITEM_TAG_NAME$1 = "ch-tree-x-list-item";
25
- const TREE_TAG_NAME = "ch-tree-x";
26
- // Selectors
27
- // const CHECKED_ITEMS = `${TREE_ITEM_TAG_NAME}[checked]`;
28
- const TEXT_FORMAT = "text/plain";
29
- const ARROW_DOWN_KEY = "ArrowDown";
30
- const ARROW_UP_KEY = "ArrowUp";
31
- const EDIT_KEY = "F2";
32
- const isTreeItem = (element) => element.tagName.toLowerCase() === TREE_ITEM_TAG_NAME$1;
33
- const getFocusedTreeItem = () => helpers.focusComposedPath().find(isTreeItem);
34
- const canMoveTreeItemFocus = (treeItem) => treeItem && !treeItem.editing;
35
- const getDroppableZoneKey = (newContainerId, draggedItems) => `"newContainerId":"${newContainerId}","metadata":"${JSON.stringify(draggedItems)}"`;
36
- const POSITION_X_DRAG_CUSTOM_VAR = "--ch-tree-x-dragging-item-x";
37
- const POSITION_Y_DRAG_CUSTOM_VAR = "--ch-tree-x-dragging-item-y";
38
- const ChTreeX = class {
39
- constructor(hostRef) {
40
- index.registerInstance(this, hostRef);
41
- this.droppableZoneEnter = index.createEvent(this, "droppableZoneEnter", 7);
42
- this.expandedItemChange = index.createEvent(this, "expandedItemChange", 7);
43
- this.itemContextmenu = index.createEvent(this, "itemContextmenu", 7);
44
- this.itemsDropped = index.createEvent(this, "itemsDropped", 7);
45
- this.selectedItemsChange = index.createEvent(this, "selectedItemsChange", 7);
46
- // @todo TODO: Check if key codes works in Safari
47
- this.keyDownEvents = {
48
- [ARROW_DOWN_KEY]: event => {
49
- const treeItem = getFocusedTreeItem();
50
- if (!canMoveTreeItemFocus(treeItem)) {
51
- return;
52
- }
53
- event.preventDefault();
54
- treeItem.focusNextItem(helpers.mouseEventModifierKey(event));
55
- },
56
- [ARROW_UP_KEY]: event => {
57
- const treeItem = getFocusedTreeItem();
58
- if (!canMoveTreeItemFocus(treeItem)) {
59
- return;
60
- }
61
- event.preventDefault();
62
- treeItem.focusPreviousItem(helpers.mouseEventModifierKey(event));
63
- },
64
- [EDIT_KEY]: event => {
65
- const treeItem = getFocusedTreeItem();
66
- if (!treeItem || !treeItem.editable) {
67
- return;
68
- }
69
- event.preventDefault();
70
- treeItem.editing = true;
71
- }
72
- };
73
- this.draggingSelectedItems = false;
74
- this.needForRAF = true; // To prevent redundant RAF (request animation frame) calls
75
- this.selectedItemsInfo = new Map();
76
- /**
77
- * Cache to avoid duplicate requests when checking the droppable zone in the
78
- * same drag event.
79
- */
80
- this.validDroppableZoneCache = new Map();
81
- this.draggedIds = [];
82
- this.draggedParentIds = [];
83
- this.draggingInTheDocument = false;
84
- this.draggingInTree = false;
85
- /**
86
- * Set this attribute if you want to allow multi selection of the items.
87
- */
88
- this.multiSelection = false;
89
- /**
90
- * This property lets you specify the time (in ms) that the mouse must be
91
- * over in a subtree to open it when dragging.
92
- */
93
- this.openSubTreeCountdown = 750;
94
- /**
95
- * `true` to scroll in the tree when dragging an item near the edges of the
96
- * tree.
97
- */
98
- this.scrollToEdgeOnDrag = true;
99
- /**
100
- * This property lets you specify if the tree is waiting to process the drop
101
- * of items.
102
- */
103
- this.waitDropProcessing = false;
104
- this.trackItemDrag = (event) => {
105
- event.preventDefault();
106
- this.lastDragEvent = event;
107
- this.updateDropEffect(event);
108
- if (!this.needForRAF) {
109
- return;
110
- }
111
- this.needForRAF = false; // No need to call RAF up until next frame
112
- requestAnimationFrame(() => {
113
- this.needForRAF = true; // RAF now consumes the movement instruction so a new one can come
114
- this.el.style.setProperty(POSITION_X_DRAG_CUSTOM_VAR, `${this.lastDragEvent.pageX}px`);
115
- this.el.style.setProperty(POSITION_Y_DRAG_CUSTOM_VAR, `${this.lastDragEvent.pageY}px`);
116
- });
117
- };
118
- this.fixScrollPositionOnDrag = () => {
119
- if (!this.draggingInTree || !this.lastDragEvent) {
120
- return;
121
- }
122
- requestAnimationFrame(() => {
123
- scrollToEdge(this.lastDragEvent, this.el, 10, 30);
124
- requestAnimationFrame(this.fixScrollPositionOnDrag);
125
- });
126
- };
127
- }
128
- // /**
129
- // * Returns an array of the selected tree items, providing the id, caption and
130
- // * selected status.
131
- // */
132
- // @Method()
133
- // async getCheckedItems(): Promise<CheckedTreeItemInfo[]> {
134
- // const checkedItems = Array.from(
135
- // this.el.querySelectorAll(CHECKED_ITEMS)
136
- // ) as HTMLChTreeXListItemElement[];
137
- // return checkedItems.map(item => ({
138
- // id: item.id,
139
- // caption: item.caption,
140
- // selected: item.selected
141
- // }));
142
- // }
143
- handleContextMenuEvent(event) {
144
- const treeItem = event.target.closest(TREE_ITEM_TAG_NAME$1);
145
- if (!treeItem) {
146
- return;
147
- }
148
- event.preventDefault();
149
- this.itemContextmenu.emit({
150
- id: treeItem.id,
151
- itemRef: treeItem,
152
- metadata: treeItem.metadata,
153
- contextmenuEvent: event
154
- });
155
- }
156
- // Set edit mode in items
157
- handleKeyDownEvents(event) {
158
- const keyHandler = this.keyDownEvents[event.key];
159
- if (keyHandler) {
160
- keyHandler(event);
161
- }
162
- }
163
- // We can't use capture, because the dataTransfer info would not be defined
164
- // Also, we cant use capture and setTimeout with 0 seconds, because the
165
- // getData method can only be accessed during the dragstart and drop event
166
- handleDragStart(event) {
167
- // Reset the validity of the droppable zones with each new drag start
168
- this.validDroppableZoneCache.clear();
169
- this.draggingInTheDocument = true;
170
- this.dragStartTimestamp = new Date().getTime();
171
- this.draggedItems = JSON.parse(event.dataTransfer.getData(TEXT_FORMAT));
172
- }
173
- handleDragEnd() {
174
- this.draggingInTheDocument = false;
175
- }
176
- handleDragEnter(event) {
177
- this.cancelSubTreeOpening(null, true);
178
- event.stopPropagation();
179
- const containerTarget = event.target;
180
- // Check if it is a valid item
181
- if (containerTarget.tagName.toLowerCase() !== TREE_ITEM_TAG_NAME$1) {
182
- return;
183
- }
184
- this.lastOpenSubTreeItem = containerTarget;
185
- this.openSubTreeAfterCountdown(containerTarget);
186
- if (this.validDroppableZone(event) === "valid") {
187
- containerTarget.dragState = "enter";
188
- }
189
- }
190
- handleDragLeave(event) {
191
- const currentTarget = event.target;
192
- if (currentTarget.tagName.toLowerCase() !== TREE_ITEM_TAG_NAME$1) {
193
- return;
194
- }
195
- const treeItem = currentTarget;
196
- treeItem.dragState = "none";
197
- this.cancelSubTreeOpening(treeItem);
198
- }
199
- cancelSubTreeOpening(treeItem, forceClear = false) {
200
- if (this.lastOpenSubTreeItem === treeItem || forceClear) {
201
- clearTimeout(this.openSubTreeTimeout);
202
- this.lastOpenSubTreeItem = null;
203
- }
204
- }
205
- handleItemDrop(event) {
206
- event.stopPropagation();
207
- this.cancelSubTreeOpening(null, true);
208
- const newContainer = event.target;
209
- const draggedItems = JSON.parse(event.dataTransfer.getData(TEXT_FORMAT));
210
- // The droppable zone must be checked, even if it was marked as not valid
211
- // @todo Try to drop an item with high delays in droppable zone checking
212
- if (this.validDroppableZone(event) !== "valid") {
213
- return;
214
- }
215
- this.itemsDropped.emit({
216
- newContainer: { id: newContainer.id, metadata: newContainer.metadata },
217
- draggingSelectedItems: this.draggingSelectedItems,
218
- draggedItems: draggedItems,
219
- dropInTheSameTree: this.draggingInTree
220
- });
221
- }
222
- handleItemDragStart(event) {
223
- document.body.addEventListener("dragover", this.trackItemDrag, {
224
- capture: true
225
- });
226
- this.currentDraggedItem = event.target;
227
- const allItemsCanBeDragged = this.checkDragValidityAndUpdateDragInfo(event.detail);
228
- if (!allItemsCanBeDragged) {
229
- // This effect disables drop interactions in all page elements, so there
230
- // is no need to capture and prevent the drop event in the window
231
- event.detail.dragEvent.dataTransfer.effectAllowed = "none";
232
- return;
233
- }
234
- this.draggingInTree = true;
235
- if (this.scrollToEdgeOnDrag) {
236
- this.fixScrollPositionOnDrag();
237
- }
238
- }
239
- handleItemDragEnd() {
240
- this.draggingInTree = false;
241
- document.body.removeEventListener("dragover", this.trackItemDrag, {
242
- capture: true
243
- });
244
- // Reset not allowed droppable ids
245
- this.resetVariables();
246
- }
247
- /**
248
- * Only sync the info about the selected items. It does not update the state
249
- * of the previous selected items.
250
- */
251
- handleSelectedItemSync(event) {
252
- event.stopPropagation();
253
- const selectedItemInfo = event.detail;
254
- // If the item is selected, add it to list
255
- if (selectedItemInfo.selected) {
256
- this.selectedItemsInfo.set(selectedItemInfo.id, selectedItemInfo);
257
- }
258
- else {
259
- this.selectedItemsInfo.delete(selectedItemInfo.id);
260
- }
261
- }
262
- handleSelectedItemChange(event) {
263
- event.stopPropagation();
264
- const selectedItemInfo = event.detail;
265
- const selectedItemEl = event.target;
266
- this.handleItemSelection(selectedItemEl, selectedItemInfo);
267
- }
268
- /**
269
- * Clear all information about the selected items. This method is intended to
270
- * be used when selected items are reordered and the selected references will
271
- * no longer be useful.
272
- */
273
- async clearSelectedItemsInfo() {
274
- this.clearSelectedItems();
275
- }
276
- /**
277
- * Given an item id, it displays and scrolls into the item view.
278
- */
279
- async scrollIntoVisible(treeItemId) {
280
- const itemRef = this.el.querySelector(`${TREE_ITEM_TAG_NAME$1}#${treeItemId}`);
281
- if (!itemRef) {
282
- return;
283
- }
284
- let parentItem = itemRef.parentElement;
285
- // Expand all parents
286
- while (parentItem.tagName.toLowerCase() === TREE_ITEM_TAG_NAME$1) {
287
- parentItem.expanded = true;
288
- parentItem = parentItem.parentElement;
289
- }
290
- // Wait until the parents are expanded
291
- requestAnimationFrame(() => {
292
- itemRef.scrollIntoView();
293
- });
294
- }
295
- /**
296
- * Update the information about the valid droppable zones.
297
- * @param requestTimestamp Time where the request to the server was made. Useful to avoid having old information.
298
- * @param newContainerId ID of the container where the drag is trying to be made.
299
- * @param draggedItems Information about the dragged items.
300
- * @param validDrop Current state of the droppable zone.
301
- */
302
- async updateValidDropZone(requestTimestamp, newContainerId, draggedItems, validDrop) {
303
- var _a;
304
- if (!this.draggingInTheDocument ||
305
- requestTimestamp <= this.dragStartTimestamp) {
306
- return;
307
- }
308
- const droppableZoneKey = getDroppableZoneKey(newContainerId, draggedItems);
309
- this.validDroppableZoneCache.set(droppableZoneKey, validDrop ? "valid" : "invalid");
310
- const shouldUpdateDragEnterInCurrentContainer = ((_a = this.lastOpenSubTreeItem) === null || _a === void 0 ? void 0 : _a.id) === newContainerId;
311
- if (shouldUpdateDragEnterInCurrentContainer) {
312
- this.lastOpenSubTreeItem.dragState = "enter";
313
- }
314
- }
315
- validDroppableZone(event) {
316
- const containerTarget = event.target;
317
- const cacheKey = getDroppableZoneKey(containerTarget.id, this.draggedItems);
318
- let droppableZoneState = this.validDroppableZoneCache.get(cacheKey);
319
- // Invalidate the cache, because the item is no longer waiting for its content to be downloaded
320
- if (droppableZoneState === "temporal-invalid" &&
321
- !containerTarget.lazyLoad &&
322
- !containerTarget.downloading) {
323
- droppableZoneState = null;
324
- }
325
- if (droppableZoneState != null) {
326
- return droppableZoneState;
327
- }
328
- // Do not show drop zones if:
329
- // - The effect does not allow it.
330
- // - The drop is disabled in the container target.
331
- // - When dragging in the same tree, don't mark droppable zones if they are
332
- // the dragged items or their direct parents.
333
- if (event.dataTransfer.effectAllowed === "none" ||
334
- containerTarget.dropDisabled ||
335
- (this.draggingInTree &&
336
- (this.draggedIds.includes(containerTarget.id) ||
337
- this.draggedParentIds.includes(containerTarget.id)))) {
338
- this.validDroppableZoneCache.set(cacheKey, "invalid");
339
- return "invalid";
340
- }
341
- // Disable drops when items need to lazy load their content first
342
- if (containerTarget.lazyLoad || containerTarget.downloading) {
343
- this.validDroppableZoneCache.set(cacheKey, "temporal-invalid");
344
- return "temporal-invalid";
345
- }
346
- this.validDroppableZoneCache.set(cacheKey, "checking");
347
- this.droppableZoneEnter.emit({
348
- newContainer: {
349
- id: containerTarget.id,
350
- metadata: containerTarget.metadata
351
- },
352
- draggedItems: this.draggedItems
353
- });
354
- return "checking";
355
- }
356
- openSubTreeAfterCountdown(currentTarget) {
357
- if (currentTarget.leaf || currentTarget.expanded) {
358
- return;
359
- }
360
- this.openSubTreeTimeout = setTimeout(() => {
361
- currentTarget.expanded = true;
362
- this.expandedItemChange.emit({ id: currentTarget.id, expanded: true });
363
- }, this.openSubTreeCountdown);
364
- }
365
- updateDropEffect(event) {
366
- const itemTarget = event.target;
367
- // Check if it is a valid item
368
- if (itemTarget.tagName.toLowerCase() !== TREE_ITEM_TAG_NAME$1 ||
369
- itemTarget.closest(TREE_TAG_NAME) !== this.el) {
370
- return;
371
- }
372
- const droppableZoneState = this.validDroppableZone(event);
373
- if (droppableZoneState === "invalid" ||
374
- droppableZoneState === "temporal-invalid") {
375
- event.dataTransfer.dropEffect = "none";
376
- }
377
- }
378
- resetVariables() {
379
- this.draggedIds = [];
380
- this.draggedParentIds = [];
381
- }
382
- /**
383
- * First, it check if all items can be dragged. If so, it updates the
384
- * dataTransfer in the drag event to store the ids and metadata of the
385
- * dragged items. Also it updates the visual information of the dragged
386
- * items.
387
- * @returns If all selected items can be dragged.
388
- */
389
- checkDragValidityAndUpdateDragInfo(dragInfo) {
390
- const draggedElement = dragInfo.elem;
391
- const isDraggingSelectedItems = this.selectedItemsInfo.has(draggedElement.id);
392
- this.draggingSelectedItems = isDraggingSelectedItems;
393
- let dataTransferInfo = [];
394
- let dragIsEnabledForAllItems;
395
- if (isDraggingSelectedItems) {
396
- const selectedItemKeys = [...this.selectedItemsInfo.keys()];
397
- const selectedItemValues = [...this.selectedItemsInfo.values()];
398
- const selectedItemCount = selectedItemKeys.length;
399
- dragIsEnabledForAllItems = selectedItemValues.every(el => !el.itemRef.dragDisabled);
400
- this.draggedIds = selectedItemKeys;
401
- dataTransferInfo = selectedItemValues.map(el => ({
402
- id: el.id,
403
- metadata: el.metadata
404
- }));
405
- this.dragInfo =
406
- selectedItemCount === 1
407
- ? draggedElement.caption
408
- : selectedItemCount.toString();
409
- }
410
- else {
411
- dragIsEnabledForAllItems = !draggedElement.dragDisabled;
412
- dataTransferInfo = [
413
- { id: draggedElement.id, metadata: draggedElement.metadata }
414
- ];
415
- this.draggedIds = [draggedElement.id];
416
- this.dragInfo = draggedElement.caption;
417
- }
418
- this.getDirectParentsOfDraggableItems(isDraggingSelectedItems);
419
- // Update drag event info
420
- const data = JSON.stringify(dataTransferInfo);
421
- dragInfo.dragEvent.dataTransfer.setData(TEXT_FORMAT, data);
422
- // We must keep the data binding and processing even if there is an item
423
- // that can't be dragged, otherwise, other trees or element might behave
424
- // unexpected when a dragstart event comes
425
- return dragIsEnabledForAllItems;
426
- }
427
- getDirectParentsOfDraggableItems(draggingSelectedItems) {
428
- if (!draggingSelectedItems) {
429
- const parentTreeItemElem = this.currentDraggedItem.parentElement;
430
- if (parentTreeItemElem.tagName.toLowerCase() === TREE_ITEM_TAG_NAME$1) {
431
- this.draggedParentIds.push(parentTreeItemElem.id);
432
- }
433
- return;
434
- }
435
- // Dragging selected items
436
- this.selectedItemsInfo.forEach(selectedItem => {
437
- const parentId = selectedItem.parentId;
438
- // parentId === "" when the item is in the first level of the tree
439
- if (parentId !== "") {
440
- this.draggedParentIds.push(parentId);
441
- }
442
- });
443
- }
444
- handleItemSelection(selectedItemEl, selectedItemInfo) {
445
- // If the Control key was not pressed or multi selection is disabled,
446
- // remove all selected items
447
- if (!selectedItemInfo.ctrlKeyPressed || !this.multiSelection) {
448
- // Don't update the state of the selected item if no needed
449
- this.selectedItemsInfo.delete(selectedItemInfo.id);
450
- this.selectedItemsInfo.forEach(treeItem => {
451
- treeItem.itemRef.selected = false;
452
- });
453
- this.clearSelectedItems();
454
- // Re-select the item
455
- selectedItemEl.selected = selectedItemInfo.selected;
456
- }
457
- // If the item is selected, add it to list
458
- if (selectedItemInfo.selected) {
459
- this.selectedItemsInfo.set(selectedItemInfo.id, selectedItemInfo);
460
- }
461
- // Sync with UI model
462
- this.selectedItemsChange.emit(this.selectedItemsInfo);
463
- }
464
- clearSelectedItems() {
465
- this.selectedItemsInfo.clear();
466
- }
467
- disconnectedCallback() {
468
- this.resetVariables();
469
- // Remove dragover body event
470
- this.handleItemDragEnd();
471
- }
472
- render() {
473
- return (index.h(index.Host, { class: {
474
- "ch-tree-x-dragging-item": this.draggingInTheDocument,
475
- "ch-tree-x-not-dragging-item": !this.draggingInTheDocument,
476
- "ch-tree-x--dragging-selected-items": this.draggingInTree && this.draggingSelectedItems,
477
- "ch-tree-x-waiting-drop-processing": this.waitDropProcessing
478
- } }, index.h("div", { role: "tree", part: "tree-x-container", "aria-multiselectable": this.multiSelection.toString(), class: "ch-tree-x-container" }, index.h("slot", null)), this.draggingInTree && (index.h("span", { "aria-hidden": "true", class: "ch-tree-x-drag-info" }, this.dragInfo))));
479
- }
480
- get el() { return index.getElement(this); }
481
- };
482
- ChTreeX.style = treeXCss;
483
-
484
- const treeXListItemCss = ":where(button){all:unset;display:flex;user-select:none;touch-action:manipulation;-webkit-user-drag:element}*,::before,::after{box-sizing:border-box}:host{--checkbox-size:1em;--expandable-button-width:0.75em;--ch-tree-x-list-item-dashed-line--offset:0px;--tab-width:calc(\n var(--checkbox-size) + var(--expandable-button-width) +\n (5px * 2)\n );display:grid;grid-template-rows:min-content;overflow:hidden}.header{--own-offset:0px;display:flex;align-items:center;min-height:calc(1em + 6px);padding-inline-start:var(--padding-inline-start)}.header--disabled{opacity:0.5;pointer-events:none}.header--even{--padding-inline-start:calc(\n var(--parent-padding-inline-start--odd, 0px) + var(--tab-width)\n )}.header--even+.expandable{--parent-padding-inline-start--even:calc(\n var(--parent-padding-inline-start--odd, 0px) + var(--tab-width)\n )}.header--even .dashed-line{--inset-inline-start:calc(\n var(--parent-padding-inline-start--odd, 0px) +\n var(--parent-checkbox-offset) + var(--parent-expandable-offset)\n )}.header--even-expandable{--padding-inline-start:calc(\n var(--parent-padding-inline-start--odd, 0px) + var(--tab-width) - calc(\n var(--expandable-button-width) + 5px\n )\n )}.header--even-expandable+.expandable{--parent-padding-inline-start--even:calc(\n var(--parent-padding-inline-start--odd, 0px) + var(--tab-width) - calc(\n var(--expandable-button-width) + 5px\n )\n )}.header--odd{--padding-inline-start:calc(\n var(--parent-padding-inline-start--even, 0px) + var(--tab-width)\n )}.header--odd+.expandable{--parent-padding-inline-start--odd:calc(\n var(--parent-padding-inline-start--even, 0px) + var(--tab-width)\n )}.header--odd .dashed-line{--inset-inline-start:calc(\n var(--parent-padding-inline-start--even, 0px) +\n var(--parent-checkbox-offset) + var(--parent-expandable-offset)\n )}.header--odd-expandable{--padding-inline-start:calc(\n var(--parent-padding-inline-start--even, 0px) + var(--tab-width) - calc(\n var(--expandable-button-width) + 5px\n )\n )}.header--odd-expandable+.expandable{--parent-padding-inline-start--odd:calc(\n var(--parent-padding-inline-start--even, 0px) + var(--tab-width) - calc(\n var(--expandable-button-width) + 5px\n )\n )}.header--level-0{--padding-inline-start:0px}.header--level-0+.expandable{--parent-padding-inline-start--even:0px}.header--expandable-offset{--own-offset:calc(\n var(--expandable-button-width) + 5px\n )}.header--expandable-offset+.expandable{--parent-expandable-offset:calc(var(--expandable-button-width) / 2)}.header--checkbox-offset+.expandable{--parent-checkbox-offset:calc(var(--checkbox-size) / 2);--parent-negative-checkbox-offset:calc(var(--checkbox-size) / 2)}.dashed-line{position:absolute;inset-inline-start:calc( var(--inset-inline-start) + var(--ch-tree-x-list-item-dashed-line--offset) );height:1px;width:calc( var(--tab-width) - var(--parent-checkbox-offset) - var(--parent-expandable-offset) - var(--own-offset) - var(--ch-tree-x-list-item-dashed-line--offset) - 4px );border:0 dashed color-mix(in srgb, currentColor 65%, transparent);border-block-end-width:1px;pointer-events:none;content-visibility:hidden;z-index:1}.last-all-line{inset-block-start:0;height:calc(100% - var(--distance-to-checkbox));border-inline-start-width:1px;border-end-start-radius:2px}.last-line{inset-block-start:0;height:100%;border-inline-start-width:1px;border-style:solid;border-block-end:unset}.expandable-button{display:grid;place-items:center;width:var(--expandable-button-width);height:var(--expandable-button-width);margin-inline-end:5px;z-index:1;cursor:pointer;content-visibility:auto;contain-intrinsic-size:auto var(--expandable-button-width)}.expandable-button::before{content:\"\";width:calc(100% - 2px);height:calc(100% - 2px);background-color:currentColor;-webkit-mask-size:calc(var(--expandable-button-width) - 2px)}.expandable-button--collapsed::before{-webkit-mask-image:url('data:image/svg+xml,<svg viewBox=\"0 0 16 16\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M14.15,8.5H8.54v5.61h-1V8.5H1.93v-1H7.54V1.89h1V7.5h5.61Z\"/></svg>')}.expandable-button--expanded::before{-webkit-mask-image:url('data:image/svg+xml,<svg viewBox=\"0 0 16 16\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M14.15,8.5H1.93v-1H14.15Z\"/></svg>')}.expandable-button:focus-visible{outline:1px solid #000}.checkbox{margin-inline-end:5px}.checkbox::part(container){width:var(--checkbox-size);height:var(--checkbox-size)}.action{display:grid;grid-template:\"left-img text right-img\"/max-content 1fr max-content;align-items:center;height:100%;flex:1;cursor:pointer}.readonly-mode{padding-block:0.75px}.left-img,.right-img{display:block;width:0.875em;height:0.875em;content-visibility:auto;contain-intrinsic-size:auto 0.875em}.left-img{grid-area:left-img;margin-inline-end:5px}.right-img{grid-area:right-img;margin-inline-start:5px}.edit-name{grid-area:text;width:100%;height:100%;padding:0;margin:0;background-color:unset;color:unset;border:1px solid currentColor;font:unset;outline:unset}.downloading{width:0.75em;height:0.75em;margin-inline-start:8px;border:2px solid currentColor;border-inline-start-color:transparent;border-radius:50%;opacity:0.75;animation:spin 1s linear infinite}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}.expandable{--parent-expandable-offset:0px;--parent-negative-checkbox-offset:0px;--parent-checkbox-offset:0px;display:grid;grid-auto-rows:min-content;position:relative;content-visibility:auto;contain-intrinsic-size:auto 100px}.expandable--collapsed{display:none;overflow:hidden;content-visibility:hidden}";
485
-
486
- const resetDragImage = new Image();
487
- const INITIAL_LEVEL = 0;
488
- // Selectors
489
- const TREE_ITEM_TAG_NAME = "ch-tree-x-list-item";
490
- const DIRECT_TREE_ITEM_CHILDREN = `:scope>${TREE_ITEM_TAG_NAME}`;
491
- const FIRST_ENABLED_SUB_ITEM = `${TREE_ITEM_TAG_NAME}:not([disabled])`;
492
- const LAST_SUB_ITEM = `:scope>${TREE_ITEM_TAG_NAME}:last-child`;
493
- // Keys
494
- const EXPANDABLE_ID = "expandable";
495
- const ENTER_KEY = "Enter";
496
- const ESCAPE_KEY = "Escape";
497
- // Export Parts
498
- const getCheckboxExportPart = (part) => `${part}:checkbox__${part}`;
499
- const CHECKBOX_EXPORT_PARTS = [
500
- "container",
501
- "input",
502
- "option",
503
- "checked",
504
- "indeterminate"
505
- ]
506
- .map(getCheckboxExportPart)
507
- .join(",");
508
- const ChTreeXListItem = class {
509
- constructor(hostRef) {
510
- index.registerInstance(this, hostRef);
511
- this.checkboxChange = index.createEvent(this, "checkboxChange", 7);
512
- this.checkboxToggleChange = index.createEvent(this, "checkboxToggleChange", 7);
513
- this.itemDragStart = index.createEvent(this, "itemDragStart", 7);
514
- this.itemDragEnd = index.createEvent(this, "itemDragEnd", 7);
515
- this.loadLazyContent = index.createEvent(this, "loadLazyContent", 7);
516
- this.modifyCaption = index.createEvent(this, "modifyCaption", 7);
517
- this.openReference = index.createEvent(this, "openReference", 7);
518
- this.selectedItemChange = index.createEvent(this, "selectedItemChange", 7);
519
- this.selectedItemSync = index.createEvent(this, "selectedItemSync", 7);
520
- /**
521
- * Useful to ignore the checkbox change when it was committed from a children.
522
- */
523
- this.ignoreCheckboxChange = false;
524
- /**
525
- * Set this attribute if you want display a checkbox in the control.
526
- */
527
- this.checkbox = false;
528
- /**
529
- * Set this attribute if you want the checkbox to be checked by default.
530
- * Only works if `checkbox = true`
531
- */
532
- this.checked = false;
533
- /**
534
- * Set this attribute if you want to set a custom render for the control, by
535
- * passing a slot.
536
- */
537
- this.customRender = false;
538
- /**
539
- * This attribute lets you specify if the element is disabled.
540
- * If disabled, it will not fire any user interaction related event
541
- * (for example, click event).
542
- */
543
- this.disabled = false;
544
- /**
545
- * This attribute lets you specify if the drag operation is disabled in the
546
- * control. If `true`, the control can't be dragged.
547
- */
548
- this.dragDisabled = false;
549
- /**
550
- * This attribute lets you specify if the drop operation is disabled in the
551
- * control. If `true`, the control won't accept any drops.
552
- */
553
- this.dropDisabled = false;
554
- /**
555
- * This property lets you define the current state of the item when it's
556
- * being dragged.
557
- */
558
- this.dragState = "none";
559
- /**
560
- * This attribute lets you specify when items are being lazy loaded in the
561
- * control.
562
- */
563
- this.downloading = false;
564
- /**
565
- * Set this attribute when the item is in edit mode
566
- */
567
- this.editing = false;
568
- /**
569
- * If the item has a sub-tree, this attribute determines if the subtree is
570
- * displayed.
571
- */
572
- this.expanded = false;
573
- /**
574
- * This attribute specifies if the control is the last items in its subtree
575
- */
576
- this.lastItem = false;
577
- /**
578
- * Determine if the items are lazy loaded when opening the first time the
579
- * control.
580
- */
581
- this.lazyLoad = false;
582
- /**
583
- * The presence of this attribute determine whether the item contains a
584
- * subtree. `true` if the item does not have a subtree.
585
- */
586
- this.leaf = false;
587
- /**
588
- * Level in the tree at which the item is placed.
589
- */
590
- this.level = INITIAL_LEVEL;
591
- /**
592
- * `true` if the checkbox's value is indeterminate.
593
- */
594
- this.indeterminate = false;
595
- /**
596
- * This attribute lets you specify if the item is selected
597
- */
598
- this.selected = false;
599
- /**
600
- * `true` to show the downloading spinner when lazy loading the sub items of
601
- * the control.
602
- */
603
- this.showDownloadingSpinner = true;
604
- /**
605
- * `true` to show the expandable button that allows to expand/collapse the
606
- * items of the control. Only works if `leaf === false`.
607
- */
608
- this.showExpandableButton = true;
609
- /**
610
- * `true` to display the relation between tree items and tree lists using
611
- * lines.
612
- */
613
- this.showLines = "none";
614
- /**
615
- * Set this attribute if you want all the children item's checkboxes to be
616
- * checked when the parent item checkbox is checked, or to be unchecked when
617
- * the parent item checkbox is unchecked.
618
- */
619
- this.toggleCheckboxes = false;
620
- this.checkIfShouldRemoveEditMode = (event) => {
621
- event.stopPropagation();
622
- if (event.code !== ENTER_KEY && event.code !== ESCAPE_KEY) {
623
- return;
624
- }
625
- event.preventDefault();
626
- const commitEdition = event.code === ENTER_KEY;
627
- this.removeEditMode(true, commitEdition)();
628
- };
629
- this.removeEditModeOnClick = (event) => {
630
- // The click is executed outside the input and the pointer type is defined,
631
- // meaning that the button click was not triggered by the Enter or Space keys
632
- if (!event.composedPath().includes(this.inputRef) && event.pointerType) {
633
- this.removeEditMode(false)();
634
- }
635
- };
636
- this.removeEditMode = (shouldFocusHeader, commitEdition = false) => () => {
637
- // When pressing the enter key in the input, the removeEditMode event is
638
- // triggered twice (due to the headerRef.focus() triggering the onBlur
639
- // event in the input), so we need to check if the edit mode was disabled
640
- if (!this.editing) {
641
- return;
642
- }
643
- this.editing = false;
644
- document.body.removeEventListener("click", this.removeEditModeOnClick, {
645
- capture: true
646
- });
647
- const newCaption = this.inputRef.value;
648
- if (commitEdition && newCaption.trim() !== "") {
649
- this.modifyCaption.emit({
650
- id: this.el.id,
651
- caption: newCaption
652
- });
653
- }
654
- if (shouldFocusHeader) {
655
- this.headerRef.focus();
656
- }
657
- };
658
- this.toggleExpand = (event) => {
659
- event.stopPropagation();
660
- if (!this.leaf) {
661
- this.expanded = !this.expanded;
662
- }
663
- this.selected = true;
664
- this.selectedItemChange.emit(this.getSelectedInfo(helpers.mouseEventModifierKey(event), true));
665
- };
666
- this.getSelectedInfo = (ctrlKeyPressed, selected) => ({
667
- ctrlKeyPressed: ctrlKeyPressed,
668
- expanded: this.expanded,
669
- id: this.el.id,
670
- itemRef: this.el,
671
- metadata: this.metadata,
672
- parentId: this.el.parentElement.id,
673
- selected: selected
674
- });
675
- this.handleActionDblClick = (event) => {
676
- event.stopPropagation();
677
- if (helpers.mouseEventModifierKey(event)) {
678
- this.toggleSelected();
679
- return;
680
- }
681
- this.emitOpenReference();
682
- // The Control key is not pressed, so the control can be expanded
683
- if (!this.leaf) {
684
- this.toggleExpand(event);
685
- }
686
- };
687
- /**
688
- * Event triggered by the following actions on the main button:
689
- * - Click
690
- * - Enter keydown
691
- * - Space keydown and keyup
692
- */
693
- this.handleActionClick = (event) => {
694
- event.stopPropagation();
695
- // Don't perform actions when editing
696
- if (this.editing) {
697
- return;
698
- }
699
- event.preventDefault();
700
- // Click event
701
- if (event.pointerType) {
702
- this.toggleOrSelect(event);
703
- return;
704
- }
705
- this.emitOpenReference();
706
- // Enter or space
707
- this.toggleExpand(event);
708
- };
709
- /**
710
- * Event triggered by key events on the main button.
711
- */
712
- this.handleActionKeyDown = (event) => {
713
- // Only toggle if the Enter key was pressed with the Ctrl key
714
- if (helpers.mouseEventModifierKey(event) && event.code === ENTER_KEY) {
715
- event.stopPropagation();
716
- this.toggleSelected();
717
- }
718
- };
719
- this.handleCheckedChange = (event) => {
720
- event.stopPropagation();
721
- const checked = event.target.checked;
722
- this.checked = checked;
723
- this.checkboxChange.emit({
724
- id: this.el.id,
725
- checked: this.checked,
726
- indeterminate: this.indeterminate
727
- });
728
- };
729
- this.renderImg = (cssClass, src) => (index.h("img", { "aria-hidden": "true", class: cssClass, part: cssClass, alt: "", src: src, loading: "lazy" }));
730
- this.handleDragStart = (event) => {
731
- // Disallow drag when editing the caption
732
- if (this.editing) {
733
- event.preventDefault();
734
- event.stopPropagation();
735
- return;
736
- }
737
- // Remove drag image
738
- event.dataTransfer.setDragImage(resetDragImage, 0, 0);
739
- event.dataTransfer.effectAllowed = "move";
740
- this.dragState = "start";
741
- this.itemDragStart.emit({
742
- elem: this.el,
743
- dragEvent: event
744
- });
745
- };
746
- this.handleDragEnd = () => {
747
- // event.preventDefault();
748
- // this.el.style.cursor = null;
749
- this.dragState = "none";
750
- this.itemDragEnd.emit();
751
- };
752
- this.handleDrop = () => {
753
- this.dragState = "none";
754
- };
755
- }
756
- updateChildrenCheckedValue(newValue) {
757
- if (!this.toggleCheckboxes || this.leaf || this.ignoreCheckboxChange) {
758
- this.ignoreCheckboxChange = false;
759
- return;
760
- }
761
- const treeItems = this.getDirectTreeItems();
762
- treeItems.forEach(treeItem => {
763
- if (treeItem.checked !== newValue || treeItem.indeterminate !== false) {
764
- treeItem.checked = newValue;
765
- treeItem.indeterminate = false;
766
- // Emit the event to sync with the UI model, even if the item does not
767
- // have toggleCheckboxes property
768
- this.checkboxToggleChange.emit({
769
- id: treeItem.id,
770
- checked: newValue,
771
- indeterminate: false
772
- });
773
- }
774
- });
775
- }
776
- handleEditingChange(isEditing) {
777
- if (!isEditing) {
778
- return;
779
- }
780
- document.body.addEventListener("click", this.removeEditModeOnClick, {
781
- capture: true
782
- });
783
- // Wait until the input is rendered to focus it
784
- index.writeTask(() => {
785
- requestAnimationFrame(() => {
786
- if (this.inputRef) {
787
- this.inputRef.focus();
788
- }
789
- });
790
- });
791
- }
792
- handleExpandedChange(isExpanded) {
793
- this.lazyLoadItems(isExpanded);
794
- }
795
- handleLasItemChange(isLastItem) {
796
- if (isLastItem && this.showLines) {
797
- this.setResizeObserver();
798
- }
799
- else {
800
- this.disconnectObserver();
801
- }
802
- }
803
- handleSelectedChange(newValue) {
804
- this.selectedItemSync.emit(this.getSelectedInfo(true, // Does not matter in this case
805
- newValue));
806
- }
807
- handleShowLinesChange(newShowLines) {
808
- if (newShowLines && this.lastItem) {
809
- this.setResizeObserver();
810
- }
811
- else {
812
- this.disconnectObserver();
813
- }
814
- }
815
- updateCheckboxValue(event) {
816
- // No need to update the checkbox value based on the children checkbox
817
- if (!this.toggleCheckboxes) {
818
- return;
819
- }
820
- const updatedCheck = event.detail.checked;
821
- const treeItems = this.getDirectTreeItems();
822
- // Check if all the items have the same value as the updated item
823
- const allItemsHaveTheSameCheckedValue = treeItems.every(treeItem => treeItem.checked === updatedCheck);
824
- this.ignoreCheckboxChange = this.checked !== updatedCheck;
825
- this.checked = updatedCheck;
826
- this.indeterminate = !allItemsHaveTheSameCheckedValue;
827
- // Sync with the UI Model
828
- this.checkboxToggleChange.emit({
829
- id: this.el.id,
830
- checked: updatedCheck,
831
- indeterminate: !allItemsHaveTheSameCheckedValue
832
- });
833
- }
834
- /**
835
- * Focus the next item in the tree. If the control is expanded, it focuses
836
- * the first subitem in its tree.
837
- */
838
- async focusNextItem(ctrlKeyPressed) {
839
- // Focus the first subitem if expanded
840
- if (!this.leaf && this.expanded) {
841
- const subItem = this.el.querySelector(FIRST_ENABLED_SUB_ITEM);
842
- // The tree item could be empty or downloading subitem, so it is uncertain
843
- // if the query won't fail
844
- if (subItem) {
845
- subItem.setFocus(ctrlKeyPressed);
846
- return;
847
- }
848
- }
849
- // Otherwise, focus the next sibling
850
- this.focusNextSibling(ctrlKeyPressed);
851
- }
852
- /**
853
- * Focus the next sibling item in the tree.
854
- */
855
- async focusNextSibling(ctrlKeyPressed) {
856
- const nextSiblingItem = this.el
857
- .nextElementSibling;
858
- // Focus the next sibling, if exists
859
- if (nextSiblingItem) {
860
- // If the next sibling is disabled, ask for its next sibling
861
- if (nextSiblingItem.disabled) {
862
- nextSiblingItem.focusNextItem(ctrlKeyPressed);
863
- }
864
- else {
865
- nextSiblingItem.setFocus(ctrlKeyPressed);
866
- }
867
- return;
868
- }
869
- // The item is the last one of the tree at the first level
870
- if (this.level === INITIAL_LEVEL) {
871
- return;
872
- }
873
- // Otherwise, ask the parent to focus the next sibling
874
- const parentItem = this.el.parentElement;
875
- parentItem.focusNextSibling(ctrlKeyPressed);
876
- }
877
- /**
878
- * Focus the previous item in the tree. If the previous item is expanded, it focuses
879
- * the last subitem in its tree.
880
- */
881
- async focusPreviousItem(ctrlKeyPressed) {
882
- const previousSiblingItem = this.el
883
- .previousElementSibling;
884
- // Focus last item of the previous sibling
885
- if (previousSiblingItem) {
886
- previousSiblingItem.focusLastItem(ctrlKeyPressed);
887
- return;
888
- }
889
- // The item is the first one of the tree at the first level
890
- if (this.level === INITIAL_LEVEL) {
891
- return;
892
- }
893
- // Otherwise, set focus in the parent element
894
- const parentItem = this.el.parentElement;
895
- // Check if the parent is not disabled
896
- if (parentItem.disabled) {
897
- parentItem.focusPreviousItem(ctrlKeyPressed);
898
- return;
899
- }
900
- parentItem.setFocus(ctrlKeyPressed);
901
- }
902
- /**
903
- * Focus the last item in its subtree. If the control is not expanded, it
904
- * focus the control
905
- */
906
- async focusLastItem(ctrlKeyPressed) {
907
- // Focus the last subitem if expanded and not lazy loading
908
- if (!this.leaf && this.expanded) {
909
- const lastSubItem = this.el.querySelector(LAST_SUB_ITEM);
910
- // The tree item could be empty or downloading subitem, so it is uncertain
911
- // if the query won't fail
912
- if (lastSubItem) {
913
- lastSubItem.focusLastItem(ctrlKeyPressed);
914
- return;
915
- }
916
- }
917
- // If the last item is disabled, try to focus the previous sibling
918
- if (this.disabled) {
919
- this.focusPreviousItem(ctrlKeyPressed);
920
- return;
921
- }
922
- // Otherwise, it focuses the control
923
- this.setFocus(ctrlKeyPressed);
924
- }
925
- /**
926
- * Set focus in the control
927
- */
928
- async setFocus(ctrlKeyPressed) {
929
- this.headerRef.focus();
930
- // Normal navigation auto selects the item.
931
- if (!ctrlKeyPressed) {
932
- this.setSelected();
933
- }
934
- }
935
- getDirectTreeItems() {
936
- return Array.from(this.el.querySelectorAll(DIRECT_TREE_ITEM_CHILDREN));
937
- }
938
- setResizeObserver() {
939
- this.watcher = new ResizeObserver(() => {
940
- const distanceToCheckbox = this.el.getBoundingClientRect().height -
941
- this.headerRef.getBoundingClientRect().height / 2;
942
- this.el.style.setProperty("--distance-to-checkbox", distanceToCheckbox + "px");
943
- });
944
- this.watcher.observe(this.el);
945
- this.watcher.observe(this.headerRef);
946
- }
947
- disconnectObserver() {
948
- if (!this.watcher) {
949
- return;
950
- }
951
- this.watcher.disconnect();
952
- this.watcher = null;
953
- }
954
- lazyLoadItems(expanded) {
955
- if (!this.lazyLoad || !expanded) {
956
- return;
957
- }
958
- // Load items
959
- this.lazyLoad = false;
960
- this.loadLazyContent.emit(this.el.id);
961
- }
962
- toggleSelected() {
963
- const selected = !this.selected;
964
- this.selected = selected;
965
- this.selectedItemChange.emit(this.getSelectedInfo(true, selected));
966
- }
967
- setSelected() {
968
- this.selected = true;
969
- this.selectedItemChange.emit(this.getSelectedInfo(false, true));
970
- }
971
- toggleOrSelect(event) {
972
- if (helpers.mouseEventModifierKey(event)) {
973
- this.toggleSelected();
974
- }
975
- else {
976
- this.setSelected();
977
- }
978
- }
979
- emitOpenReference() {
980
- this.openReference.emit({
981
- id: this.el.id,
982
- leaf: this.leaf,
983
- metadata: this.metadata
984
- });
985
- }
986
- componentWillLoad() {
987
- // Check if must lazy load
988
- this.lazyLoadItems(this.expanded);
989
- // Sync selected state with the main tree
990
- if (this.selected) {
991
- this.selectedItemChange.emit(this.getSelectedInfo(true, true));
992
- }
993
- }
994
- componentDidLoad() {
995
- if (this.lastItem && this.showLines) {
996
- this.setResizeObserver();
997
- }
998
- }
999
- disconnectedCallback() {
1000
- // If it was disconnected on edit mode, remove the body event handler
1001
- if (this.editing) {
1002
- this.removeEditMode(false);
1003
- }
1004
- this.disconnectObserver();
1005
- }
1006
- render() {
1007
- const evenLevel = this.level % 2 === 0;
1008
- const expandableButtonVisible = !this.leaf && this.showExpandableButton;
1009
- const expandableButtonNotVisible = !this.leaf && !this.showExpandableButton;
1010
- const acceptDrop = !this.dropDisabled && !this.leaf && this.dragState !== "start";
1011
- const hasContent = !this.leaf && !this.lazyLoad;
1012
- const showAllLines = this.showLines === "all" && this.level !== INITIAL_LEVEL;
1013
- const showLastLine = this.showLines === "last" &&
1014
- this.level !== INITIAL_LEVEL &&
1015
- this.lastItem;
1016
- return (index.h(index.Host, { role: "treeitem", "aria-level": this.level + 1, "aria-selected": this.selected ? "true" : null, class: {
1017
- [TREE_ITEM_TAG_NAME + "--downloading"]: this.downloading,
1018
- [TREE_ITEM_TAG_NAME + "--editing"]: this.editing,
1019
- [TREE_ITEM_TAG_NAME + "--not-editing"]: !this.editing,
1020
- [TREE_ITEM_TAG_NAME + "--drag-" + this.dragState]: this.dragState !== "none" && this.dragState !== "start",
1021
- [TREE_ITEM_TAG_NAME + "--deny-drop"]: this.leaf
1022
- }, style: { "--level": `${this.level}` },
1023
- // Drag and drop
1024
- onDrop: acceptDrop ? this.handleDrop : null }, index.h("button", { "aria-controls": hasContent ? EXPANDABLE_ID : null, "aria-expanded": hasContent ? this.expanded.toString() : null, class: {
1025
- header: true,
1026
- "header--selected": this.selected,
1027
- "header--disabled": this.disabled,
1028
- "header--expandable-offset": expandableButtonVisible,
1029
- "header--checkbox-offset": expandableButtonNotVisible && this.checkbox,
1030
- "header--even": evenLevel,
1031
- "header--odd": !evenLevel,
1032
- "header--even-expandable": evenLevel && expandableButtonVisible,
1033
- "header--odd-expandable": !evenLevel && expandableButtonVisible,
1034
- "header--level-0": this.level === INITIAL_LEVEL
1035
- }, part: `header${this.disabled ? " disabled" : ""}${this.selected ? " selected" : ""}`, type: "button", disabled: this.disabled, onClick: this.handleActionClick, onKeyDown: !this.editing ? this.handleActionKeyDown : null,
1036
- // Drag and drop
1037
- draggable: !this.dragDisabled, onDragStart: this.handleDragStart, onDragEnd: !this.dragDisabled ? this.handleDragEnd : null, ref: el => (this.headerRef = el) }, !this.leaf && this.showExpandableButton && (index.h("button", { type: "button", class: {
1038
- "expandable-button": true,
1039
- "expandable-button--expanded": this.expanded,
1040
- "expandable-button--collapsed": !this.expanded
1041
- }, part: `expandable-button${this.disabled ? " disabled" : ""}${this.expanded ? " expanded" : " collapsed"}`, disabled: this.disabled, onClick: this.toggleExpand })), this.checkbox && (index.h("ch-checkbox", { accessibleName: this.caption, class: "checkbox", exportparts: CHECKBOX_EXPORT_PARTS, part: `checkbox${this.disabled ? " disabled" : ""}${this.checked ? " checked" : ""}${this.indeterminate ? " indeterminate" : ""}`, checkedValue: "true", disabled: this.disabled, indeterminate: this.indeterminate, unCheckedValue: "false", value: `${this.checked}`, onInput: this.handleCheckedChange })), this.customRender ? (index.h("slot", { name: "custom-content" })) : ([
1042
- index.h("div", { class: {
1043
- action: true,
1044
- "readonly-mode": !this.editing
1045
- }, part: `action${!this.editing ? " readonly-mode" : ""}${!this.leaf && this.expanded ? " expanded" : ""}`, onDblClick: !this.editing ? this.handleActionDblClick : null }, this.leftImgSrc && this.renderImg("left-img", this.leftImgSrc), this.editable && this.editing ? (index.h("input", { class: "edit-name", part: "edit-name", disabled: this.disabled, type: "text", value: this.caption, onBlur: this.removeEditMode(false), onKeyDown: this.checkIfShouldRemoveEditMode, ref: el => (this.inputRef = el) })) : (this.caption), this.rightImgSrc &&
1046
- this.renderImg("right-img", this.rightImgSrc)),
1047
- this.showDownloadingSpinner && !this.leaf && this.downloading && (index.h("div", { class: "downloading", part: "downloading" }))
1048
- ]), (showAllLines || showLastLine) && (index.h("div", { class: {
1049
- "dashed-line": true,
1050
- "last-all-line": showAllLines && this.lastItem,
1051
- "last-line": showLastLine
1052
- }, part: `dashed-line${this.lastItem ? " last-all-line" : ""}` }))), hasContent && (index.h("div", { role: "group", "aria-busy": this.downloading.toString(), "aria-live": this.downloading ? "polite" : null, id: EXPANDABLE_ID, class: {
1053
- expandable: true,
1054
- "expandable--collapsed": !this.expanded
1055
- }, part: `expandable${this.expanded ? " expanded" : " collapsed"}` }, index.h("slot", null)))));
1056
- }
1057
- get el() { return index.getElement(this); }
1058
- static get watchers() { return {
1059
- "checked": ["updateChildrenCheckedValue"],
1060
- "editing": ["handleEditingChange"],
1061
- "expanded": ["handleExpandedChange"],
1062
- "lastItem": ["handleLasItemChange"],
1063
- "selected": ["handleSelectedChange"],
1064
- "showLines": ["handleShowLinesChange"]
1065
- }; }
1066
- };
1067
- ChTreeXListItem.style = treeXListItemCss;
1068
-
1069
- const resolveImgPath = (iconAssetsPath, img) => `${iconAssetsPath}/${img}.svg`;
1070
-
1071
- 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}";
1072
-
1073
- const DEFAULT_DRAG_DISABLED_VALUE = false;
1074
- const DEFAULT_DROP_DISABLED_VALUE = false;
1075
- const DEFAULT_CLASS_VALUE = "tree-view-item";
1076
- const DEFAULT_EDITABLE_ITEMS_VALUE = true;
1077
- const DEFAULT_EXPANDED_VALUE = false;
1078
- const DEFAULT_INDETERMINATE_VALUE = false;
1079
- const DEFAULT_LAZY_VALUE = false;
1080
- const DEFAULT_ORDER_VALUE = 0;
1081
- const DEFAULT_SELECTED_VALUE = false;
1082
- const GxgTreeView = class {
1083
- constructor(hostRef) {
1084
- index.registerInstance(this, hostRef);
1085
- this.checkedItemsChange = index.createEvent(this, "checkedItemsChange", 7);
1086
- this.itemContextmenu = index.createEvent(this, "itemContextmenu", 7);
1087
- this.itemOpenReference = index.createEvent(this, "itemOpenReference", 7);
1088
- this.selectedItemsChange = index.createEvent(this, "selectedItemsChange", 7);
1089
- // UI Models
1090
- this.flattenedTreeModel = new Map();
1091
- this.flattenedCheckboxTreeModel = new Map();
1092
- this.selectedItems = new Set();
1093
- this.iconAssetsPath = index.getAssetPath(`./icon-assets`);
1094
- /**
1095
- * This property lets you specify if the tree is waiting to process the drop
1096
- * of items.
1097
- */
1098
- this.waitDropProcessing = false;
1099
- /**
1100
- * Removes the default padding on '.ch-tree-x-container' (Added by Gemini)
1101
- */
1102
- this.noPadding = false;
1103
- /**
1104
- * Set this attribute if you want display a checkbox in all items by default.
1105
- */
1106
- this.checkbox = false;
1107
- /**
1108
- * Set this attribute if you want the checkbox to be checked in all items by
1109
- * default.
1110
- * Only works if `checkbox = true`
1111
- */
1112
- this.checked = false;
1113
- /**
1114
- * A CSS class to set as the `ch-tree-x` element class.
1115
- */
1116
- this.cssClass = "tree-view";
1117
- /**
1118
- * This attribute lets you specify if the drag operation is disabled in all
1119
- * items by default. If `true`, the items can't be dragged.
1120
- */
1121
- this.dragDisabled = DEFAULT_DRAG_DISABLED_VALUE;
1122
- /**
1123
- * This attribute lets you specify if the drop operation is disabled in all
1124
- * items by default. If `true`, the items won't accept any drops.
1125
- */
1126
- this.dropDisabled = DEFAULT_DROP_DISABLED_VALUE;
1127
- /**
1128
- * This attribute lets you specify if the edit operation is enabled in all
1129
- * items by default. If `true`, the items can edit its caption in place.
1130
- */
1131
- this.editableItems = DEFAULT_EDITABLE_ITEMS_VALUE;
1132
- /**
1133
- * Set this attribute if you want to allow multi selection of the items.
1134
- */
1135
- this.multiSelection = false;
1136
- /**
1137
- * `true` to display the relation between tree items and tree lists using
1138
- * lines.
1139
- */
1140
- this.showLines = "all";
1141
- /**
1142
- * Set this attribute if you want all the children item's checkboxes to be
1143
- * checked when the parent item checkbox is checked, or to be unchecked when
1144
- * the parent item checkbox is unchecked.
1145
- * This attribute will be used in all items by default.
1146
- */
1147
- this.toggleCheckboxes = false;
1148
- /**
1149
- * This property lets you define the model of the ch-tree-x control.
1150
- */
1151
- this.treeModel = [];
1152
- this.handleDroppableZoneEnter = (event) => {
1153
- if (!this.checkDroppableZoneCallback) {
1154
- return;
1155
- }
1156
- event.stopPropagation();
1157
- // Suppose the request is made immediately by executing the callback
1158
- const requestTimestamp = new Date().getTime();
1159
- const dropInformation = event.detail;
1160
- const promise = this.checkDroppableZoneCallback(dropInformation);
1161
- promise.then((validDrop) => {
1162
- this.updateValidDropZone(requestTimestamp, dropInformation.newContainer.id, dropInformation.draggedItems, validDrop);
1163
- });
1164
- };
1165
- this.handleSelectedItemsChange = (event) => {
1166
- event.stopPropagation();
1167
- const itemsToProcess = new Map(event.detail);
1168
- // Remove no longer selected items
1169
- this.selectedItems.forEach((selectedItemId) => {
1170
- const itemUIModel = this.flattenedTreeModel.get(selectedItemId).item;
1171
- const itemIsStillSelected = itemsToProcess.get(selectedItemId);
1172
- // The item does not need to be added. Remove it from the processed list
1173
- if (itemIsStillSelected) {
1174
- itemUIModel.expanded = itemIsStillSelected.expanded; // Update expanded state
1175
- itemsToProcess.delete(selectedItemId);
1176
- }
1177
- // The item must be un-selected in the UI Model
1178
- else {
1179
- itemUIModel.selected = false;
1180
- this.selectedItems.delete(selectedItemId);
1181
- }
1182
- });
1183
- // Add new selected items
1184
- itemsToProcess.forEach((newSelectedItemInfo, itemId) => {
1185
- const newSelectedItem = this.flattenedTreeModel.get(itemId).item;
1186
- newSelectedItem.selected = true;
1187
- newSelectedItem.expanded = newSelectedItemInfo.expanded;
1188
- this.selectedItems.add(itemId);
1189
- });
1190
- this.selectedItemsChange.emit(event.detail);
1191
- };
1192
- this.handleExpandedItemChange = (event) => {
1193
- const detail = event.detail;
1194
- const itemInfo = this.flattenedTreeModel.get(detail.id).item;
1195
- itemInfo.expanded = detail.expanded;
1196
- };
1197
- this.handleItemContextmenu = (event) => {
1198
- event.stopPropagation();
1199
- this.itemContextmenu.emit(event.detail);
1200
- };
1201
- this.handleItemsDropped = (event) => {
1202
- if (!this.dropItemsCallback) {
1203
- return;
1204
- }
1205
- event.stopPropagation();
1206
- const dataTransferInfo = event.detail;
1207
- const newContainer = dataTransferInfo.newContainer;
1208
- const newParentId = newContainer.id;
1209
- // Check if the parent exists in the UI Model
1210
- if (!this.flattenedTreeModel.get(newParentId)) {
1211
- return;
1212
- }
1213
- const draggedItems = dataTransferInfo.draggedItems;
1214
- if (draggedItems.length === 0) {
1215
- return;
1216
- }
1217
- const promise = this.dropItemsCallback(dataTransferInfo);
1218
- this.waitDropProcessing = true;
1219
- promise.then(async (response) => {
1220
- this.waitDropProcessing = false;
1221
- if (!response.acceptDrop) {
1222
- return;
1223
- }
1224
- const newParentUIModel = this.flattenedTreeModel.get(newParentId).item;
1225
- // Only move the items to the new parent, keeping the state
1226
- if (dataTransferInfo.dropInTheSameTree) {
1227
- // Add the UI models to the new container and remove the UI models from
1228
- // the old containers
1229
- draggedItems.forEach(this.moveItemToNewParent(newParentUIModel));
1230
- // When the selected items are moved, the tree must remove its internal
1231
- // state to not have undefined references
1232
- if (dataTransferInfo.draggingSelectedItems) {
1233
- await this.treeRef.clearSelectedItemsInfo();
1234
- }
1235
- }
1236
- // Add the new items
1237
- else {
1238
- if (response.items == null) {
1239
- return;
1240
- }
1241
- // Add new items to the parent
1242
- newParentUIModel.items.push(...response.items);
1243
- // Flatten the new UI models
1244
- response.items.forEach(this.flattenItemUIModel(newParentUIModel));
1245
- }
1246
- this.sortItems(newParentUIModel.items);
1247
- // Open the item to visualize the new subitems
1248
- newParentUIModel.expanded = true;
1249
- // There is no need to force and update, since the waitDropProcessing
1250
- // prop was modified
1251
- });
1252
- };
1253
- this.moveItemToNewParent = (newParentUIModel) => (dataTransferInfo) => {
1254
- const itemUIModelExtended = this.flattenedTreeModel.get(dataTransferInfo.id);
1255
- const item = itemUIModelExtended.item;
1256
- const oldParentItem = itemUIModelExtended.parentItem;
1257
- // Remove the UI model from the previous parent
1258
- oldParentItem.items.splice(oldParentItem.items.indexOf(item), 1);
1259
- // Add the UI Model to the new parent
1260
- newParentUIModel.items.push(item);
1261
- // Reference the new parent in the item
1262
- itemUIModelExtended.parentItem = newParentUIModel;
1263
- };
1264
- this.renderSubModel = (treeSubModel, lastItem, level) => {
1265
- var _a, _b, _c, _d, _e, _f;
1266
- return (index.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
1267
- ? resolveImgPath(this.iconAssetsPath, treeSubModel.leftImgSrc)
1268
- : 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 &&
1269
- treeSubModel.items != null &&
1270
- treeSubModel.items.map((subModel, index) => this.renderSubModel(subModel, this.showLines && index === treeSubModel.items.length - 1, level + 1))));
1271
- };
1272
- this.flattenItemUIModel = (parentModel) => (item) => {
1273
- var _a;
1274
- this.flattenedTreeModel.set(item.id, {
1275
- parentItem: parentModel,
1276
- item: item,
1277
- });
1278
- // Add the items that have a checkbox in a separate Map
1279
- if ((_a = item.checkbox) !== null && _a !== void 0 ? _a : this.checkbox) {
1280
- this.flattenedCheckboxTreeModel.set(item.id, {
1281
- parentItem: parentModel,
1282
- item: item,
1283
- });
1284
- }
1285
- // Make sure the properties are with their default values to avoid issues
1286
- // when reusing DOM nodes
1287
- item.class = item.class == null ? DEFAULT_CLASS_VALUE : item.class;
1288
- item.expanded =
1289
- item.expanded == null ? DEFAULT_EXPANDED_VALUE : item.expanded;
1290
- item.indeterminate =
1291
- item.indeterminate == null
1292
- ? DEFAULT_INDETERMINATE_VALUE
1293
- : item.indeterminate;
1294
- item.lazy = item.lazy == null ? DEFAULT_LAZY_VALUE : item.lazy;
1295
- item.order = item.order == null ? DEFAULT_ORDER_VALUE : item.order;
1296
- item.selected =
1297
- item.selected == null ? DEFAULT_SELECTED_VALUE : item.selected;
1298
- if (item.selected) {
1299
- this.selectedItems.add(item.id);
1300
- }
1301
- this.flattenSubModel(item);
1302
- };
1303
- }
1304
- handleTreeModelChange() {
1305
- this.flattenModel();
1306
- }
1307
- /**
1308
- * Given an item id, an array of items to add, the download status and the
1309
- * lazy state, updates the item's UI Model.
1310
- */
1311
- async loadLazyContent(itemId, items, downloading = false, lazy = false) {
1312
- const itemToLazyLoadContent = this.flattenedTreeModel.get(itemId).item;
1313
- // Establish that the content was lazy loaded
1314
- itemToLazyLoadContent.downloading = downloading;
1315
- itemToLazyLoadContent.lazy = lazy;
1316
- // Check if there is items to add
1317
- if (items == null) {
1318
- return;
1319
- }
1320
- // @todo What happens in the server when dropping items on a lazy node?
1321
- itemToLazyLoadContent.items = items;
1322
- this.sortItems(itemToLazyLoadContent.items);
1323
- this.flattenSubModel(itemToLazyLoadContent);
1324
- // Re-sync checked items
1325
- this.emitCheckedItemsChange();
1326
- // Force re-render
1327
- index.forceUpdate(this);
1328
- }
1329
- /**
1330
- * Given an item id, it displays and scrolls into the item view.
1331
- */
1332
- async scrollIntoVisible(treeItemId) {
1333
- const itemUIModel = this.flattenedTreeModel.get(treeItemId);
1334
- if (!itemUIModel) {
1335
- // @todo Check if the item is on the server?
1336
- return;
1337
- }
1338
- let visitedNode = itemUIModel.parentItem;
1339
- // While the parent is not the root, update the UI Models
1340
- while (visitedNode && visitedNode.id != null) {
1341
- // Expand the item
1342
- visitedNode.expanded = true;
1343
- const visitedNodeUIModel = this.flattenedTreeModel.get(visitedNode.id);
1344
- visitedNode = visitedNodeUIModel.parentItem;
1345
- }
1346
- index.forceUpdate(this);
1347
- // @todo For some reason, when the model is created using the "big model" option,
1348
- // this implementation does not work when only the UI Model is updated. So, to
1349
- // expand the items, we have to delegate the responsibility to the tree-x
1350
- this.treeRef.scrollIntoVisible(treeItemId);
1351
- }
1352
- /**
1353
- * This method is used to toggle a tree item by the tree item id/ids.
1354
- *
1355
- * @param treeItemIds An array id the tree items to be toggled.
1356
- * @param expand A boolean indicating that the tree item should be expanded or collapsed. (optional)
1357
- * @returns The modified items after the method was called.
1358
- */
1359
- async toggleItems(treeItemIds, expand) {
1360
- if (!treeItemIds) {
1361
- return [];
1362
- }
1363
- const modifiedTreeItems = [];
1364
- treeItemIds.forEach((treeItemId) => {
1365
- const itemInfo = this.flattenedTreeModel.get(treeItemId).item;
1366
- if (itemInfo) {
1367
- itemInfo.expanded = expand !== null && expand !== void 0 ? expand : !itemInfo.expanded;
1368
- modifiedTreeItems.push({
1369
- id: itemInfo.id,
1370
- expanded: itemInfo.expanded,
1371
- });
1372
- }
1373
- });
1374
- // Force re-render
1375
- index.forceUpdate(this);
1376
- return modifiedTreeItems;
1377
- }
1378
- /**
1379
- * Given a subset of item's properties, it updates all item UI models.
1380
- */
1381
- async updateAllItemsProperties(properties) {
1382
- [...this.flattenedTreeModel.values()].forEach((itemUIModel) => {
1383
- if (properties.expanded != null) {
1384
- itemUIModel.item.expanded = properties.expanded;
1385
- }
1386
- if (properties.checked != null) {
1387
- itemUIModel.item.checked = properties.checked;
1388
- itemUIModel.item.indeterminate = false;
1389
- }
1390
- });
1391
- index.forceUpdate(this);
1392
- }
1393
- /**
1394
- * Given a item list and the properties to update, it updates the properties
1395
- * of the items in the list.
1396
- */
1397
- async updateItemsProperties(items, properties) {
1398
- items.forEach((item) => {
1399
- const itemUIModel = this.flattenedTreeModel.get(item);
1400
- this.updateItemProperty(itemUIModel, properties);
1401
- });
1402
- index.forceUpdate(this);
1403
- }
1404
- /**
1405
- * Update the information about the valid droppable zones.
1406
- * @param requestTimestamp Time where the request to the server was made. Useful to avoid having old information.
1407
- * @param newContainerId ID of the container where the drag is trying to be made.
1408
- * @param draggedItems Information about the dragged items.
1409
- * @param validDrop Current state of the droppable zone.
1410
- */
1411
- async updateValidDropZone(requestTimestamp, newContainerId, draggedItems, validDrop) {
1412
- this.treeRef.updateValidDropZone(requestTimestamp, newContainerId, draggedItems, validDrop);
1413
- }
1414
- updateItemProperty(itemUIModel, properties) {
1415
- if (!itemUIModel) {
1416
- return;
1417
- }
1418
- const itemInfo = itemUIModel.item;
1419
- Object.keys(properties).forEach((propertyName) => {
1420
- itemInfo[propertyName] = properties[propertyName];
1421
- });
1422
- }
1423
- updateCheckboxValue(event) {
1424
- event.stopPropagation();
1425
- const detail = event.detail;
1426
- const treeItemId = detail.id;
1427
- const itemUIModel = this.flattenedCheckboxTreeModel.get(treeItemId);
1428
- // In some cases, when the `treeModel` and `checked` properties are updated
1429
- // outside of the tree control, some events are fired with undefined references
1430
- if (!itemUIModel) {
1431
- return;
1432
- }
1433
- const itemInfo = itemUIModel.item;
1434
- itemInfo.checked = detail.checked;
1435
- itemInfo.indeterminate = detail.indeterminate;
1436
- this.emitCheckedItemsChange();
1437
- }
1438
- loadLazyChildrenHandler(event) {
1439
- if (!this.lazyLoadTreeItemsCallback) {
1440
- return;
1441
- }
1442
- event.stopPropagation();
1443
- const treeItemId = event.detail;
1444
- const promise = this.lazyLoadTreeItemsCallback(treeItemId);
1445
- event.target.downloading = true;
1446
- promise.then((result) => {
1447
- this.loadLazyContent(treeItemId, result);
1448
- });
1449
- }
1450
- handleCaptionModification(event) {
1451
- if (!this.modifyItemCaptionCallback) {
1452
- return;
1453
- }
1454
- event.stopPropagation();
1455
- const itemRef = event.target;
1456
- const itemId = event.detail.id;
1457
- const itemUIModel = this.flattenedTreeModel.get(itemId);
1458
- const itemInfo = itemUIModel.item;
1459
- const newCaption = event.detail.caption;
1460
- const oldCaption = itemInfo.caption;
1461
- // Optimistic UI: Update the caption in the UI Model before the change is
1462
- // completed in the server
1463
- itemInfo.caption = newCaption;
1464
- // Due to performance reasons, we don't make a shallow copy of the
1465
- // treeModel to force a re-render
1466
- itemRef.caption = newCaption;
1467
- const promise = this.modifyItemCaptionCallback(itemId, newCaption);
1468
- promise.then((status) => {
1469
- if (status.success) {
1470
- this.sortItems(itemUIModel.parentItem.items);
1471
- // Force re-render
1472
- index.forceUpdate(this);
1473
- }
1474
- else {
1475
- itemRef.caption = oldCaption;
1476
- itemInfo.caption = oldCaption;
1477
- // Do something with the error message
1478
- }
1479
- });
1480
- }
1481
- handleOpenReference(event) {
1482
- event.stopPropagation();
1483
- this.itemOpenReference.emit(event.detail);
1484
- }
1485
- emitCheckedItemsChange() {
1486
- // New copy of the checked items
1487
- const allItemsWithCheckbox = new Map(this.flattenedCheckboxTreeModel);
1488
- // Update the checked value if not defined
1489
- allItemsWithCheckbox.forEach((itemUIModel) => {
1490
- if (itemUIModel.item.checked == null) {
1491
- itemUIModel.item.checked = this.checked;
1492
- }
1493
- });
1494
- this.checkedItemsChange.emit(allItemsWithCheckbox);
1495
- }
1496
- flattenSubModel(model) {
1497
- const items = model.items;
1498
- if (!items) {
1499
- // Make sure that subtrees don't have an undefined array
1500
- if (model.leaf !== true) {
1501
- model.items = [];
1502
- }
1503
- return;
1504
- }
1505
- this.sortItems(items);
1506
- items.forEach(this.flattenItemUIModel(model));
1507
- }
1508
- sortItems(items) {
1509
- // Ensure that items are sorted
1510
- if (this.sortItemsCallback) {
1511
- this.sortItemsCallback(items);
1512
- }
1513
- }
1514
- flattenModel() {
1515
- this.flattenedTreeModel.clear();
1516
- this.flattenedCheckboxTreeModel.clear();
1517
- this.selectedItems.clear();
1518
- // The model was updated at runtime, so we need to clear the references
1519
- if (this.treeRef) {
1520
- this.treeRef.clearSelectedItemsInfo();
1521
- }
1522
- this.flattenSubModel({ id: null, caption: null, items: this.treeModel });
1523
- // Re-sync checked items
1524
- this.emitCheckedItemsChange();
1525
- }
1526
- componentWillLoad() {
1527
- this.flattenModel();
1528
- }
1529
- render() {
1530
- return (index.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))));
1531
- }
1532
- static get assetsDirs() { return ["assets"]; }
1533
- static get watchers() { return {
1534
- "treeModel": ["handleTreeModelChange"]
1535
- }; }
1536
- };
1537
- GxgTreeView.style = treeViewCss;
1538
-
1539
- exports.ch_tree_x = ChTreeX;
1540
- exports.ch_tree_x_list_item = ChTreeXListItem;
1541
- exports.gxg_tree_view = GxgTreeView;