@genexus/genexus-ide-ui 0.0.56 → 0.0.58

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 (171) hide show
  1. package/dist/cjs/{ch-checkbox_4.cjs.entry.js → ch-checkbox_3.cjs.entry.js} +90 -65
  2. package/dist/cjs/{ch-grid-action-refresh_6.cjs.entry.js → ch-grid-action-refresh_7.cjs.entry.js} +168 -4
  3. package/dist/cjs/ch-icon_2.cjs.entry.js +1 -0
  4. package/dist/cjs/ch-suggest_4.cjs.entry.js +7 -3
  5. package/dist/cjs/ch-test-suggest.cjs.entry.js +84 -0
  6. package/dist/cjs/ch-test-tree-x.cjs.entry.js +83 -43
  7. package/dist/cjs/ch-tooltip.cjs.entry.js +85 -0
  8. package/dist/cjs/config-082c7c76.js +9 -0
  9. package/dist/cjs/{form-a22de8f3.js → form-a2de5b1c.js} +14 -0
  10. package/dist/cjs/genexus-ide-ui.cjs.js +1 -1
  11. package/dist/cjs/gx-grid-chameleon.cjs.entry.js +21 -3
  12. package/dist/cjs/gx-ide-new-kb.cjs.entry.js +10 -9
  13. package/dist/cjs/gx-ide-new-object.cjs.entry.js +2 -1
  14. package/dist/cjs/gx-ide-references.cjs.entry.js +76 -116
  15. package/dist/cjs/gx-ide-share-kb.cjs.entry.js +3 -2
  16. package/dist/cjs/gx-ide-test.cjs.entry.js +51 -5
  17. package/dist/cjs/gxg-combo-box_2.cjs.entry.js +9 -4
  18. package/dist/cjs/gxg-form-checkbox-group.cjs.entry.js +1 -1
  19. package/dist/cjs/gxg-form-checkbox.cjs.entry.js +2 -2
  20. package/dist/cjs/gxg-form-radio-group.cjs.entry.js +1 -1
  21. package/dist/cjs/gxg-form-text.cjs.entry.js +19 -4
  22. package/dist/cjs/gxg-form-textarea.cjs.entry.js +8 -4
  23. package/dist/cjs/gxg-label_2.cjs.entry.js +40 -2
  24. package/dist/cjs/gxg-list-box_2.cjs.entry.js +2 -2
  25. package/dist/cjs/gxg-select.cjs.entry.js +1 -1
  26. package/dist/cjs/gxg-test.cjs.entry.js +1 -16
  27. package/dist/cjs/gxg-tree-view.cjs.entry.js +108 -45
  28. package/dist/cjs/loader.cjs.js +1 -1
  29. package/dist/collection/collection-manifest.json +2 -1
  30. package/dist/collection/common/config.js +5 -0
  31. package/dist/collection/common/helpers.js +3 -0
  32. package/dist/collection/components/new-kb/new-kb.js +10 -9
  33. package/dist/collection/components/new-object/new-object.js +2 -1
  34. package/dist/collection/components/references/helpers.js +16 -19
  35. package/dist/collection/components/references/references.css +8 -0
  36. package/dist/collection/components/references/references.js +60 -98
  37. package/dist/collection/components/share-kb/share-kb.js +3 -2
  38. package/dist/components/ch-paginator-pages.js +1 -171
  39. package/dist/{esm/ch-paginator-pages.entry.js → components/ch-paginator-pages2.js} +29 -8
  40. package/dist/components/ch-paginator2.js +18 -4
  41. package/dist/components/ch-suggest2.js +6 -2
  42. package/dist/components/ch-test-suggest.js +119 -0
  43. package/dist/components/ch-test-tree-x.js +96 -58
  44. package/dist/components/ch-tooltip.js +115 -0
  45. package/dist/components/checkbox.js +1 -1
  46. package/dist/components/combo-box.js +10 -4
  47. package/dist/components/config.js +7 -0
  48. package/dist/components/form-checkbox.js +1 -1
  49. package/dist/components/form-text.js +20 -4
  50. package/dist/components/form-textarea.js +9 -4
  51. package/dist/components/form.js +14 -1
  52. package/dist/components/gx-grid-chameleon.js +52 -28
  53. package/dist/components/gx-ide-new-kb.js +10 -9
  54. package/dist/components/gx-ide-new-object.js +2 -1
  55. package/dist/components/gx-ide-references.js +122 -150
  56. package/dist/components/gx-ide-share-kb.js +3 -2
  57. package/dist/components/gx-ide-test.js +48 -2
  58. package/dist/components/gxg-test.js +25 -22
  59. package/dist/components/gxg-tree-view.js +2 -389
  60. package/dist/components/icon2.js +1 -0
  61. package/dist/components/index.js +2 -1
  62. package/dist/components/list-box.js +1 -1
  63. package/dist/components/suggest.js +1 -1
  64. package/dist/components/tooltip.js +45 -3
  65. package/dist/components/tree-view.js +453 -0
  66. package/dist/components/tree-x-list-item.js +59 -32
  67. package/dist/components/tree-x.js +34 -17
  68. package/dist/esm/{ch-checkbox_4.entry.js → ch-checkbox_3.entry.js} +92 -66
  69. package/dist/esm/{ch-grid-action-refresh_6.entry.js → ch-grid-action-refresh_7.entry.js} +168 -5
  70. package/dist/esm/ch-icon_2.entry.js +1 -0
  71. package/dist/esm/ch-suggest_4.entry.js +7 -3
  72. package/dist/esm/ch-test-suggest.entry.js +80 -0
  73. package/dist/esm/ch-test-tree-x.entry.js +84 -44
  74. package/dist/esm/ch-tooltip.entry.js +81 -0
  75. package/dist/esm/config-94445cc2.js +7 -0
  76. package/dist/esm/{form-5e68671c.js → form-9c41f579.js} +14 -1
  77. package/dist/esm/genexus-ide-ui.js +1 -1
  78. package/dist/esm/gx-grid-chameleon.entry.js +21 -3
  79. package/dist/esm/gx-ide-new-kb.entry.js +10 -9
  80. package/dist/esm/gx-ide-new-object.entry.js +2 -1
  81. package/dist/esm/gx-ide-references.entry.js +76 -116
  82. package/dist/esm/gx-ide-share-kb.entry.js +3 -2
  83. package/dist/esm/gx-ide-test.entry.js +48 -2
  84. package/dist/esm/gxg-combo-box_2.entry.js +9 -4
  85. package/dist/esm/gxg-form-checkbox-group.entry.js +1 -1
  86. package/dist/esm/gxg-form-checkbox.entry.js +2 -2
  87. package/dist/esm/gxg-form-radio-group.entry.js +1 -1
  88. package/dist/esm/gxg-form-text.entry.js +19 -4
  89. package/dist/esm/gxg-form-textarea.entry.js +8 -4
  90. package/dist/esm/gxg-label_2.entry.js +41 -3
  91. package/dist/esm/gxg-list-box_2.entry.js +2 -2
  92. package/dist/esm/gxg-select.entry.js +1 -1
  93. package/dist/esm/gxg-test.entry.js +1 -16
  94. package/dist/esm/gxg-tree-view.entry.js +109 -46
  95. package/dist/esm/loader.js +1 -1
  96. package/dist/genexus-ide-ui/genexus-ide-ui.css +4 -2
  97. package/dist/genexus-ide-ui/genexus-ide-ui.esm.js +1 -1
  98. package/dist/genexus-ide-ui/icon-assets/gemini-tools/error.svg +1 -1
  99. package/dist/genexus-ide-ui/icon-assets/gemini-tools/success.svg +1 -1
  100. package/dist/genexus-ide-ui/icon-assets/gemini-tools/warning.svg +1 -1
  101. package/dist/genexus-ide-ui/{p-afe9515e.entry.js → p-0268cc45.entry.js} +1 -1
  102. package/dist/genexus-ide-ui/p-0aa11d6f.entry.js +1 -0
  103. package/dist/genexus-ide-ui/p-0f4fe7ad.js +1 -0
  104. package/dist/genexus-ide-ui/p-109209dc.entry.js +1 -0
  105. package/dist/genexus-ide-ui/p-123b8351.entry.js +1 -0
  106. package/dist/genexus-ide-ui/{p-a440a73f.entry.js → p-1294d220.entry.js} +1 -1
  107. package/dist/genexus-ide-ui/{p-4eaffd02.entry.js → p-2096031c.entry.js} +1 -1
  108. package/dist/genexus-ide-ui/{p-f3a1dc7c.entry.js → p-2537b4d6.entry.js} +1 -1
  109. package/dist/genexus-ide-ui/p-3657924a.entry.js +1 -0
  110. package/dist/genexus-ide-ui/p-3ec2f036.entry.js +1 -0
  111. package/dist/genexus-ide-ui/p-4923cffa.entry.js +1 -0
  112. package/dist/genexus-ide-ui/p-4e81926d.entry.js +1 -0
  113. package/dist/genexus-ide-ui/p-71c6da54.entry.js +1 -0
  114. package/dist/genexus-ide-ui/p-86b98a99.entry.js +1 -0
  115. package/dist/genexus-ide-ui/{p-e586d05e.entry.js → p-875e5979.entry.js} +1 -1
  116. package/dist/genexus-ide-ui/p-9e428123.entry.js +1 -0
  117. package/dist/genexus-ide-ui/p-a8b8baf9.entry.js +1 -0
  118. package/dist/genexus-ide-ui/p-cd00ba19.entry.js +1 -0
  119. package/dist/genexus-ide-ui/p-ce9fef1a.entry.js +1 -0
  120. package/dist/genexus-ide-ui/p-d47ed4e3.entry.js +1 -0
  121. package/dist/genexus-ide-ui/p-d7b452ef.entry.js +1 -0
  122. package/dist/genexus-ide-ui/{p-5cb871e3.entry.js → p-ebcdef37.entry.js} +1 -1
  123. package/dist/genexus-ide-ui/p-f1ff6b48.entry.js +1 -0
  124. package/dist/genexus-ide-ui/p-f62d9b6d.entry.js +1 -0
  125. package/dist/genexus-ide-ui/p-f82f25e2.js +1 -0
  126. package/dist/genexus-ide-ui/p-f9f1d95d.entry.js +1 -0
  127. package/dist/node_modules/@genexus/chameleon-controls-library/dist/collection/components/checkbox/checkbox.css +3 -3
  128. package/dist/node_modules/@genexus/chameleon-controls-library/dist/collection/components/test/test-suggest/test-suggest.css +114 -0
  129. package/dist/node_modules/@genexus/chameleon-controls-library/dist/collection/components/test/test-tree-x.css +1 -47
  130. package/dist/node_modules/@genexus/chameleon-controls-library/dist/collection/components/tooltip/tooltip.css +120 -0
  131. package/dist/node_modules/@genexus/chameleon-controls-library/dist/collection/components/{tree-x → tree-view/tree-x}/tree-x.css +4 -5
  132. package/dist/node_modules/@genexus/chameleon-controls-library/dist/collection/components/{tree-x-list-item → tree-view/tree-x-list-item}/tree-x-list-item.css +8 -9
  133. package/dist/node_modules/@genexus/gemini/dist/collection/components/combo-box/combo-box.css +5 -0
  134. package/dist/node_modules/@genexus/gemini/dist/collection/components/form-checkbox/form-checkbox.css +18 -0
  135. package/dist/node_modules/@genexus/gemini/dist/collection/components/form-text/form-text.css +37 -0
  136. package/dist/node_modules/@genexus/gemini/dist/collection/components/form-textarea/form-textarea.css +22 -0
  137. package/dist/node_modules/@genexus/gemini/dist/collection/components/list-box/list-box.css +18 -0
  138. package/dist/node_modules/@genexus/gemini/dist/collection/components/suggest/styles.css +18 -0
  139. package/dist/node_modules/@genexus/gemini/dist/collection/components/tooltip/tooltip.css +58 -3
  140. package/dist/node_modules/@genexus/gemini/dist/collection/components/tree-view/tree-view.css +68 -13
  141. package/dist/types/common/config.d.ts +3 -0
  142. package/dist/types/common/helpers.d.ts +1 -0
  143. package/dist/types/components/references/helpers.d.ts +3 -3
  144. package/dist/types/components/references/references.d.ts +7 -19
  145. package/package.json +3 -3
  146. package/dist/cjs/ch-paginator-pages.cjs.entry.js +0 -156
  147. package/dist/cjs/update-tree-model-8b154db1.js +0 -53
  148. package/dist/components/ch-tree-x-list.js +0 -6
  149. package/dist/components/tree-x-list.js +0 -37
  150. package/dist/components/update-tree-model.js +0 -50
  151. package/dist/esm/update-tree-model-6c612f05.js +0 -50
  152. package/dist/genexus-ide-ui/p-01406cbc.js +0 -1
  153. package/dist/genexus-ide-ui/p-03efca69.entry.js +0 -1
  154. package/dist/genexus-ide-ui/p-1d7c22d5.entry.js +0 -1
  155. package/dist/genexus-ide-ui/p-395a65de.entry.js +0 -1
  156. package/dist/genexus-ide-ui/p-3b4fca51.entry.js +0 -1
  157. package/dist/genexus-ide-ui/p-447c3a31.entry.js +0 -1
  158. package/dist/genexus-ide-ui/p-46d393f5.entry.js +0 -1
  159. package/dist/genexus-ide-ui/p-58f882c6.entry.js +0 -1
  160. package/dist/genexus-ide-ui/p-60bea19c.entry.js +0 -1
  161. package/dist/genexus-ide-ui/p-64cbe277.entry.js +0 -1
  162. package/dist/genexus-ide-ui/p-71ecc7fd.js +0 -1
  163. package/dist/genexus-ide-ui/p-9a6cb543.entry.js +0 -1
  164. package/dist/genexus-ide-ui/p-a2fa3132.entry.js +0 -1
  165. package/dist/genexus-ide-ui/p-a708db45.entry.js +0 -1
  166. package/dist/genexus-ide-ui/p-c0edbeb5.entry.js +0 -1
  167. package/dist/genexus-ide-ui/p-c7425416.entry.js +0 -1
  168. package/dist/genexus-ide-ui/p-cd5482fa.entry.js +0 -1
  169. package/dist/genexus-ide-ui/p-d312fe25.entry.js +0 -1
  170. package/dist/genexus-ide-ui/p-e6ae0460.entry.js +0 -1
  171. package/dist/node_modules/@genexus/chameleon-controls-library/dist/collection/components/tree-x-list/tree-x-list.css +0 -6
@@ -1,8 +1,8 @@
1
1
  import { r as registerInstance, c as createEvent, h, H as Host, g as getElement, w as writeTask } from './index-0da01575.js';
2
2
  import { D as DISABLED_CLASS } from './reserverd-names-2a2d0fb3.js';
3
- import { m as mouseEventModifierKey } from './helpers-1ecd5e26.js';
3
+ import { f as focusComposedPath, m as mouseEventModifierKey } from './helpers-1ecd5e26.js';
4
4
 
5
- const checkboxCss = "*,::before,::after{box-sizing:border-box}:host{display:flex;align-items:center;align-self:stretch;outline:unset;touch-action:manipulation;user-select:none}:host(.ch-checkbox--actionable) :is(.input,.label){cursor:pointer}.container{position:relative;width:min(1em, 20px);height:min(1em, 20px);border:1px solid var(--option-border-color, #000);border-radius:18.75%}.container--checked{background-color:var(--option-checked-color, #ffffff00)}.container:focus-within{box-shadow:0 0 1px 1px #00000040}.input{display:flex;width:100%;height:100%;opacity:0;margin:0;padding:0}.option{position:absolute;left:50%;top:50%;transform:translate(-50%, -50%);width:50%;height:50%;background-color:#000;opacity:0;pointer-events:none}.option--checked{opacity:1;-webkit-mask:url(\"data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8' %3E%3Cpath fill='currentColor' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z' /%3E%3C/svg%3E\")}.option--indeterminate{opacity:1}.label{margin-inline-start:min(0.35em, 7px)}";
5
+ const checkboxCss = "*,::before,::after{box-sizing:border-box}:host{display:flex;align-items:center;align-self:stretch;outline:unset;touch-action:manipulation;user-select:none}:host(.ch-checkbox--actionable) :is(.input,.label){cursor:pointer}.container{position:relative;width:min(1em, 20px);height:min(1em, 20px);border:1px solid var(--option-border-color, currentColor);border-radius:18.75%}.container--checked{background-color:var(--option-checked-color, #ffffff00)}.container:focus-within{box-shadow:0 0 1px 1px color-mix(in srgb, currentColor 25%, transparent)}.input{display:flex;width:100%;height:100%;opacity:0;margin:0;padding:0}.option{position:absolute;left:50%;top:50%;transform:translate(-50%, -50%);width:50%;height:50%;background-color:currentColor;opacity:0;pointer-events:none}.option--checked{opacity:1;-webkit-mask:url(\"data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8' %3E%3Cpath fill='currentColor' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z' /%3E%3C/svg%3E\")}.option--indeterminate{opacity:1}.label{margin-inline-start:min(0.35em, 7px)}";
6
6
 
7
7
  const CHECKBOX_ID = "checkbox";
8
8
  const PARTS = (checked, indeterminate) => `${checked ? " checked" : ""}${indeterminate ? " indeterminate" : ""}`;
@@ -101,7 +101,7 @@ const scrollToEdge = (event, container, scrollSpeed, scrollThreshold) => {
101
101
  }
102
102
  };
103
103
 
104
- const treeXCss = "ch-tree-x{display:flex;position:relative;overflow:auto}ch-tree-x>ch-tree-x-list{position:absolute;inset:0;min-width:max-content}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,ch-tree-x.ch-tree-x-dragging-item ch-tree-x-list{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-list{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%}";
104
+ 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%}";
105
105
 
106
106
  const TREE_ITEM_TAG_NAME$1 = "ch-tree-x-list-item";
107
107
  const TREE_TAG_NAME = "ch-tree-x";
@@ -111,8 +111,9 @@ const TEXT_FORMAT = "text/plain";
111
111
  const ARROW_DOWN_KEY = "ArrowDown";
112
112
  const ARROW_UP_KEY = "ArrowUp";
113
113
  const EDIT_KEY = "F2";
114
- const isExecutedInTree = (event, el) => event.composedPath().includes(el);
115
- const treeItemIsInEditMode = () => document.activeElement.editing;
114
+ const isTreeItem = (element) => element.tagName.toLowerCase() === TREE_ITEM_TAG_NAME$1;
115
+ const getFocusedTreeItem = () => focusComposedPath().find(isTreeItem);
116
+ const canMoveTreeItemFocus = (treeItem) => treeItem && !treeItem.editing;
116
117
  const getDroppableZoneKey = (newContainerId, draggedItems) => `"newContainerId":"${newContainerId}","metadata":"${JSON.stringify(draggedItems)}"`;
117
118
  const POSITION_X_DRAG_CUSTOM_VAR = "--ch-tree-x-dragging-item-x";
118
119
  const POSITION_Y_DRAG_CUSTOM_VAR = "--ch-tree-x-dragging-item-y";
@@ -121,32 +122,34 @@ const ChTreeX = class {
121
122
  registerInstance(this, hostRef);
122
123
  this.droppableZoneEnter = createEvent(this, "droppableZoneEnter", 7);
123
124
  this.expandedItemChange = createEvent(this, "expandedItemChange", 7);
125
+ this.itemContextmenu = createEvent(this, "itemContextmenu", 7);
124
126
  this.selectedItemsChange = createEvent(this, "selectedItemsChange", 7);
125
127
  this.itemsDropped = createEvent(this, "itemsDropped", 7);
126
128
  // @todo TODO: Check if key codes works in Safari
127
129
  this.keyDownEvents = {
128
130
  [ARROW_DOWN_KEY]: event => {
129
- if (!isExecutedInTree(event, this.el) || treeItemIsInEditMode()) {
131
+ const treeItem = getFocusedTreeItem();
132
+ if (!canMoveTreeItemFocus(treeItem)) {
130
133
  return;
131
134
  }
132
135
  event.preventDefault();
133
- const treeItem = document.activeElement;
134
136
  treeItem.focusNextItem(mouseEventModifierKey(event));
135
137
  },
136
138
  [ARROW_UP_KEY]: event => {
137
- if (!isExecutedInTree(event, this.el) || treeItemIsInEditMode()) {
139
+ const treeItem = getFocusedTreeItem();
140
+ if (!canMoveTreeItemFocus(treeItem)) {
138
141
  return;
139
142
  }
140
143
  event.preventDefault();
141
- const treeItem = document.activeElement;
142
144
  treeItem.focusPreviousItem(mouseEventModifierKey(event));
143
145
  },
144
146
  [EDIT_KEY]: event => {
145
- if (document.activeElement.tagName.toLowerCase() !== TREE_ITEM_TAG_NAME$1) {
147
+ const treeItem = getFocusedTreeItem();
148
+ if (!treeItem || !treeItem.editable) {
146
149
  return;
147
150
  }
148
151
  event.preventDefault();
149
- document.activeElement.editing = true;
152
+ treeItem.editing = true;
150
153
  }
151
154
  };
152
155
  this.draggingSelectedItems = false;
@@ -219,6 +222,19 @@ const ChTreeX = class {
219
222
  // selected: item.selected
220
223
  // }));
221
224
  // }
225
+ handleContextMenuEvent(event) {
226
+ const treeItem = event.target.closest(TREE_ITEM_TAG_NAME$1);
227
+ if (!treeItem) {
228
+ return;
229
+ }
230
+ event.preventDefault();
231
+ this.itemContextmenu.emit({
232
+ id: treeItem.id,
233
+ itemRef: treeItem,
234
+ metadata: treeItem.metadata,
235
+ contextmenuEvent: event
236
+ });
237
+ }
222
238
  // Set edit mode in items
223
239
  handleKeyDownEvents(event) {
224
240
  const keyHandler = this.keyDownEvents[event.key];
@@ -347,11 +363,11 @@ const ChTreeX = class {
347
363
  if (!itemRef) {
348
364
  return;
349
365
  }
350
- let parentItem = itemRef.parentElement.parentElement;
366
+ let parentItem = itemRef.parentElement;
351
367
  // Expand all parents
352
368
  while (parentItem.tagName.toLowerCase() === TREE_ITEM_TAG_NAME$1) {
353
369
  parentItem.expanded = true;
354
- parentItem = parentItem.parentElement.parentElement;
370
+ parentItem = parentItem.parentElement;
355
371
  }
356
372
  // Wait until the parents are expanded
357
373
  requestAnimationFrame(() => {
@@ -365,7 +381,7 @@ const ChTreeX = class {
365
381
  * @param draggedItems Information about the dragged items.
366
382
  * @param validDrop Current state of the droppable zone.
367
383
  */
368
- async updateValidDroppableZone(requestTimestamp, newContainerId, draggedItems, validDrop) {
384
+ async updateValidDropZone(requestTimestamp, newContainerId, draggedItems, validDrop) {
369
385
  var _a;
370
386
  if (!this.draggingInTheDocument ||
371
387
  requestTimestamp <= this.dragStartTimestamp) {
@@ -481,7 +497,7 @@ const ChTreeX = class {
481
497
  }
482
498
  getDirectParentsOfDraggableItems(draggingSelectedItems) {
483
499
  if (!draggingSelectedItems) {
484
- const parentTreeItemElem = this.currentDraggedItem.parentElement.parentElement;
500
+ const parentTreeItemElem = this.currentDraggedItem.parentElement;
485
501
  if (parentTreeItemElem.tagName.toLowerCase() === TREE_ITEM_TAG_NAME$1) {
486
502
  this.draggedParentIds.push(parentTreeItemElem.id);
487
503
  }
@@ -527,43 +543,39 @@ const ChTreeX = class {
527
543
  render() {
528
544
  return (h(Host, { class: {
529
545
  "ch-tree-x-dragging-item": this.draggingInTheDocument,
546
+ "ch-tree-x-not-dragging-item": !this.draggingInTheDocument,
530
547
  "ch-tree-x--dragging-selected-items": this.draggingInTree && this.draggingSelectedItems,
531
548
  "ch-tree-x-waiting-drop-processing": this.waitDropProcessing
532
- } }, h("slot", null), this.draggingInTree && (h("span", { "aria-hidden": "true", class: "ch-tree-x-drag-info" }, this.dragInfo))));
549
+ } }, h("div", { role: "tree", part: "tree-x-container", "aria-multiselectable": this.multiSelection.toString(), class: "ch-tree-x-container" }, h("slot", null)), this.draggingInTree && (h("span", { "aria-hidden": "true", class: "ch-tree-x-drag-info" }, this.dragInfo))));
533
550
  }
534
551
  get el() { return getElement(this); }
535
552
  };
536
553
  ChTreeX.style = treeXCss;
537
554
 
538
- const treeXListCss = ":host{display:grid;grid-auto-rows:min-content;position:relative;width:100%}";
539
-
540
- const ChTreeListX = class {
541
- constructor(hostRef) {
542
- registerInstance(this, hostRef);
543
- /**
544
- * Level in the tree at which the control is placed.
545
- */
546
- this.level = 0;
547
- }
548
- render() {
549
- return (h(Host, { role: this.level === 0 ? "tree" : "group" }, h("slot", null)));
550
- }
551
- get el() { return getElement(this); }
552
- };
553
- ChTreeListX.style = treeXListCss;
554
-
555
- const treeXListItemCss = ":where(button){all:unset;display:flex;cursor:pointer;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 #a9a9a9;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;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}.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%;background-color:unset;padding:0;margin:0;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-template-rows:0fr;content-visibility:auto;contain-intrinsic-size:auto 100px}.expanded{grid-template-rows:1fr}:not(.expanded) ::slotted([slot=tree]){display:none;overflow:hidden;content-visibility:hidden}";
555
+ 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}";
556
556
 
557
557
  const resetDragImage = new Image();
558
+ const INITIAL_LEVEL = 0;
558
559
  // Selectors
559
560
  const TREE_ITEM_TAG_NAME = "ch-tree-x-list-item";
560
- const DIRECT_TREE_ITEM_CHILDREN = `:scope>*>${TREE_ITEM_TAG_NAME}`;
561
+ const DIRECT_TREE_ITEM_CHILDREN = `:scope>${TREE_ITEM_TAG_NAME}`;
561
562
  const FIRST_ENABLED_SUB_ITEM = `${TREE_ITEM_TAG_NAME}:not([disabled])`;
562
- const LAST_SUB_ITEM = `:scope>*>${TREE_ITEM_TAG_NAME}:last-child`;
563
+ const LAST_SUB_ITEM = `:scope>${TREE_ITEM_TAG_NAME}:last-child`;
563
564
  // Keys
564
565
  const EXPANDABLE_ID = "expandable";
565
566
  const ENTER_KEY = "Enter";
566
567
  const ESCAPE_KEY = "Escape";
568
+ // Export Parts
569
+ const getCheckboxExportPart = (part) => `${part}:checkbox__${part}`;
570
+ const CHECKBOX_EXPORT_PARTS = [
571
+ "container",
572
+ "input",
573
+ "option",
574
+ "checked",
575
+ "indeterminate"
576
+ ]
577
+ .map(getCheckboxExportPart)
578
+ .join(",");
567
579
  const ChTreeXListItem = class {
568
580
  constructor(hostRef) {
569
581
  registerInstance(this, hostRef);
@@ -572,6 +584,7 @@ const ChTreeXListItem = class {
572
584
  this.itemDragEnd = createEvent(this, "itemDragEnd", 7);
573
585
  this.loadLazyContent = createEvent(this, "loadLazyContent", 7);
574
586
  this.modifyCaption = createEvent(this, "modifyCaption", 7);
587
+ this.openReference = createEvent(this, "openReference", 7);
575
588
  this.selectedItemChange = createEvent(this, "selectedItemChange", 7);
576
589
  this.selectedItemSync = createEvent(this, "selectedItemSync", 7);
577
590
  /**
@@ -644,7 +657,7 @@ const ChTreeXListItem = class {
644
657
  /**
645
658
  * Level in the tree at which the item is placed.
646
659
  */
647
- this.level = 0;
660
+ this.level = INITIAL_LEVEL;
648
661
  /**
649
662
  * `true` if the checkbox's value is indeterminate.
650
663
  */
@@ -718,16 +731,15 @@ const ChTreeXListItem = class {
718
731
  this.expanded = !this.expanded;
719
732
  }
720
733
  this.selected = true;
721
- this.selectedItemChange.emit(this.getSelectedInfo(mouseEventModifierKey(event), false, true));
734
+ this.selectedItemChange.emit(this.getSelectedInfo(mouseEventModifierKey(event), true));
722
735
  };
723
- this.getSelectedInfo = (ctrlKeyPressed, goToReference, selected) => ({
736
+ this.getSelectedInfo = (ctrlKeyPressed, selected) => ({
724
737
  ctrlKeyPressed: ctrlKeyPressed,
725
738
  expanded: this.expanded,
726
- goToReference: goToReference,
727
739
  id: this.el.id,
728
740
  itemRef: this.el,
729
741
  metadata: this.metadata,
730
- parentId: this.el.parentElement.parentElement.id,
742
+ parentId: this.el.parentElement.id,
731
743
  selected: selected
732
744
  });
733
745
  this.handleActionDblClick = (event) => {
@@ -736,8 +748,11 @@ const ChTreeXListItem = class {
736
748
  this.toggleSelected();
737
749
  return;
738
750
  }
751
+ this.emitOpenReference();
739
752
  // The Control key is not pressed, so the control can be expanded
740
- this.toggleExpand(event);
753
+ if (!this.leaf) {
754
+ this.toggleExpand(event);
755
+ }
741
756
  };
742
757
  /**
743
758
  * Event triggered by the following actions on the main button:
@@ -757,6 +772,7 @@ const ChTreeXListItem = class {
757
772
  this.toggleOrSelect(event);
758
773
  return;
759
774
  }
775
+ this.emitOpenReference();
760
776
  // Enter or space
761
777
  this.toggleExpand(event);
762
778
  };
@@ -842,7 +858,6 @@ const ChTreeXListItem = class {
842
858
  }
843
859
  handleSelectedChange(newValue) {
844
860
  this.selectedItemSync.emit(this.getSelectedInfo(true, // Does not matter in this case
845
- false, // Does not matter in this case
846
861
  newValue));
847
862
  }
848
863
  handleShowLinesChange(newShowLines) {
@@ -902,12 +917,11 @@ const ChTreeXListItem = class {
902
917
  return;
903
918
  }
904
919
  // The item is the last one of the tree at the first level
905
- if (this.level === 0) {
920
+ if (this.level === INITIAL_LEVEL) {
906
921
  return;
907
922
  }
908
923
  // Otherwise, ask the parent to focus the next sibling
909
- const parentItem = this.el.parentElement
910
- .parentElement;
924
+ const parentItem = this.el.parentElement;
911
925
  parentItem.focusNextSibling(ctrlKeyPressed);
912
926
  }
913
927
  /**
@@ -923,12 +937,11 @@ const ChTreeXListItem = class {
923
937
  return;
924
938
  }
925
939
  // The item is the first one of the tree at the first level
926
- if (this.level === 0) {
940
+ if (this.level === INITIAL_LEVEL) {
927
941
  return;
928
942
  }
929
943
  // Otherwise, set focus in the parent element
930
- const parentItem = this.el.parentElement
931
- .parentElement;
944
+ const parentItem = this.el.parentElement;
932
945
  // Check if the parent is not disabled
933
946
  if (parentItem.disabled) {
934
947
  parentItem.focusPreviousItem(ctrlKeyPressed);
@@ -966,7 +979,7 @@ const ChTreeXListItem = class {
966
979
  this.headerRef.focus();
967
980
  // Normal navigation auto selects the item.
968
981
  if (!ctrlKeyPressed) {
969
- this.setSelected(false);
982
+ this.setSelected();
970
983
  }
971
984
  }
972
985
  getDirectTreeItems() {
@@ -999,34 +1012,41 @@ const ChTreeXListItem = class {
999
1012
  toggleSelected() {
1000
1013
  const selected = !this.selected;
1001
1014
  this.selected = selected;
1002
- this.selectedItemChange.emit(this.getSelectedInfo(true, false, selected));
1015
+ this.selectedItemChange.emit(this.getSelectedInfo(true, selected));
1003
1016
  }
1004
- setSelected(goToReference) {
1017
+ setSelected() {
1005
1018
  this.selected = true;
1006
- this.selectedItemChange.emit(this.getSelectedInfo(false, goToReference, true));
1019
+ this.selectedItemChange.emit(this.getSelectedInfo(false, true));
1007
1020
  }
1008
1021
  toggleOrSelect(event) {
1009
1022
  if (mouseEventModifierKey(event)) {
1010
1023
  this.toggleSelected();
1011
1024
  }
1012
1025
  else {
1013
- this.setSelected(true);
1026
+ this.setSelected();
1014
1027
  }
1015
1028
  }
1029
+ emitOpenReference() {
1030
+ this.openReference.emit({
1031
+ id: this.el.id,
1032
+ leaf: this.leaf,
1033
+ metadata: this.metadata
1034
+ });
1035
+ }
1016
1036
  componentWillLoad() {
1017
- const parentElement = this.el.parentElement;
1037
+ const parentElementItem = this.el
1038
+ .parentElement;
1018
1039
  // Check if must lazy load
1019
1040
  this.lazyLoadItems(this.expanded);
1020
1041
  // Sync selected state with the main tree
1021
1042
  if (this.selected) {
1022
- this.selectedItemChange.emit(this.getSelectedInfo(true, false, true));
1043
+ this.selectedItemChange.emit(this.getSelectedInfo(true, true));
1023
1044
  }
1024
1045
  // No need to update more the status
1025
- if (this.level === 0) {
1046
+ if (this.level === INITIAL_LEVEL) {
1026
1047
  return;
1027
1048
  }
1028
1049
  // Update checkbox status
1029
- const parentElementItem = parentElement.parentElement;
1030
1050
  if (parentElementItem.checkbox) {
1031
1051
  this.checked = parentElementItem.checked;
1032
1052
  }
@@ -1049,11 +1069,14 @@ const ChTreeXListItem = class {
1049
1069
  const expandableButtonNotVisible = !this.leaf && !this.showExpandableButton;
1050
1070
  const acceptDrop = !this.dropDisabled && !this.leaf && this.dragState !== "start";
1051
1071
  const hasContent = !this.leaf && !this.lazyLoad;
1052
- const showAllLines = this.showLines === "all" && this.level !== 0;
1053
- const showLastLine = this.showLines === "last" && this.level !== 0 && this.lastItem;
1054
- return (h(Host, { role: "treeitem", "aria-selected": this.selected ? "true" : null, class: {
1072
+ const showAllLines = this.showLines === "all" && this.level !== INITIAL_LEVEL;
1073
+ const showLastLine = this.showLines === "last" &&
1074
+ this.level !== INITIAL_LEVEL &&
1075
+ this.lastItem;
1076
+ return (h(Host, { role: "treeitem", "aria-level": this.level + 1, "aria-selected": this.selected ? "true" : null, class: {
1055
1077
  [TREE_ITEM_TAG_NAME + "--downloading"]: this.downloading,
1056
1078
  [TREE_ITEM_TAG_NAME + "--editing"]: this.editing,
1079
+ [TREE_ITEM_TAG_NAME + "--not-editing"]: !this.editing,
1057
1080
  [TREE_ITEM_TAG_NAME + "--drag-" + this.dragState]: this.dragState !== "none" && this.dragState !== "start",
1058
1081
  [TREE_ITEM_TAG_NAME + "--deny-drop"]: this.leaf
1059
1082
  }, style: { "--level": `${this.level}` },
@@ -1068,25 +1091,28 @@ const ChTreeXListItem = class {
1068
1091
  "header--odd": !evenLevel,
1069
1092
  "header--even-expandable": evenLevel && expandableButtonVisible,
1070
1093
  "header--odd-expandable": !evenLevel && expandableButtonVisible,
1071
- "header--level-0": this.level === 0
1094
+ "header--level-0": this.level === INITIAL_LEVEL
1072
1095
  }, part: `header${this.disabled ? " disabled" : ""}${this.selected ? " selected" : ""}`, type: "button", disabled: this.disabled, onClick: this.handleActionClick, onKeyDown: !this.editing ? this.handleActionKeyDown : null,
1073
1096
  // Drag and drop
1074
1097
  draggable: !this.dragDisabled, onDragStart: this.handleDragStart, onDragEnd: !this.dragDisabled ? this.handleDragEnd : null, ref: el => (this.headerRef = el) }, !this.leaf && this.showExpandableButton && (h("button", { type: "button", class: {
1075
1098
  "expandable-button": true,
1076
1099
  "expandable-button--expanded": this.expanded,
1077
1100
  "expandable-button--collapsed": !this.expanded
1078
- }, part: `expandable-button${this.disabled ? " disabled" : ""}${this.expanded ? " expanded" : " collapsed"}`, disabled: this.disabled, onClick: this.toggleExpand })), this.checkbox && (h("ch-checkbox", { accessibleName: this.caption, class: "checkbox", part: `checkbox${this.disabled ? " disabled" : ""}${this.checked ? " checked" : ""}${this.indeterminate ? " indeterminate" : ""}`, checkedValue: "true", disabled: this.disabled, indeterminate: this.indeterminate, unCheckedValue: "false", value: `${this.checked}`, onInput: this.handleCheckedChange })), this.customRender ? (h("slot", { name: "custom-content" })) : ([
1101
+ }, part: `expandable-button${this.disabled ? " disabled" : ""}${this.expanded ? " expanded" : " collapsed"}`, disabled: this.disabled, onClick: this.toggleExpand })), this.checkbox && (h("ch-checkbox", { accessibleName: this.caption, class: "checkbox", exportparts: CHECKBOX_EXPORT_PARTS, part: `checkbox${this.disabled ? " disabled" : ""}${this.checked ? " checked" : ""}${this.indeterminate ? " indeterminate" : ""}`, checkedValue: "true", disabled: this.disabled, indeterminate: this.indeterminate, unCheckedValue: "false", value: `${this.checked}`, onInput: this.handleCheckedChange })), this.customRender ? (h("slot", { name: "custom-content" })) : ([
1079
1102
  h("div", { class: {
1080
1103
  action: true,
1081
1104
  "readonly-mode": !this.editing
1082
- }, part: `action ${!this.editing ? "readonly-mode" : ""}`, onDblClick: !this.leaf && !this.editing ? this.handleActionDblClick : null }, this.leftImgSrc && this.renderImg("left-img", this.leftImgSrc), this.editing ? (h("input", { class: "edit-name", part: "edit-name", disabled: this.disabled, type: "text", value: this.caption, onBlur: this.removeEditMode(false), onKeyDown: this.checkIfShouldRemoveEditMode, ref: el => (this.inputRef = el) })) : (this.caption), this.rightImgSrc &&
1105
+ }, part: `action${!this.editing ? " readonly-mode" : ""}${!this.leaf && this.expanded ? " expanded" : ""}`, onDblClick: !this.editing ? this.handleActionDblClick : null }, this.leftImgSrc && this.renderImg("left-img", this.leftImgSrc), this.editable && this.editing ? (h("input", { class: "edit-name", part: "edit-name", disabled: this.disabled, type: "text", value: this.caption, onBlur: this.removeEditMode(false), onKeyDown: this.checkIfShouldRemoveEditMode, ref: el => (this.inputRef = el) })) : (this.caption), this.rightImgSrc &&
1083
1106
  this.renderImg("right-img", this.rightImgSrc)),
1084
1107
  this.showDownloadingSpinner && !this.leaf && this.downloading && (h("div", { class: "downloading", part: "downloading" }))
1085
1108
  ]), (showAllLines || showLastLine) && (h("div", { class: {
1086
1109
  "dashed-line": true,
1087
1110
  "last-all-line": showAllLines && this.lastItem,
1088
1111
  "last-line": showLastLine
1089
- }, part: `dashed-line${this.lastItem ? " last-all-line" : ""}` }))), hasContent && (h("div", { "aria-busy": this.downloading.toString(), "aria-live": this.downloading ? "polite" : null, id: EXPANDABLE_ID, class: { expandable: true, expanded: this.expanded }, part: `expandable${this.expanded ? " expanded" : ""}` }, h("slot", { name: "tree" })))));
1112
+ }, part: `dashed-line${this.lastItem ? " last-all-line" : ""}` }))), hasContent && (h("div", { role: "group", "aria-busy": this.downloading.toString(), "aria-live": this.downloading ? "polite" : null, id: EXPANDABLE_ID, class: {
1113
+ expandable: true,
1114
+ "expandable--collapsed": !this.expanded
1115
+ }, part: `expandable${this.expanded ? " expanded" : " collapsed"}` }, h("slot", null)))));
1090
1116
  }
1091
1117
  get el() { return getElement(this); }
1092
1118
  static get watchers() { return {
@@ -1100,4 +1126,4 @@ const ChTreeXListItem = class {
1100
1126
  };
1101
1127
  ChTreeXListItem.style = treeXListItemCss;
1102
1128
 
1103
- export { CheckBox as ch_checkbox, ChTreeX as ch_tree_x, ChTreeListX as ch_tree_x_list, ChTreeXListItem as ch_tree_x_list_item };
1129
+ export { CheckBox as ch_checkbox, ChTreeX as ch_tree_x, ChTreeXListItem as ch_tree_x_list_item };
@@ -149,10 +149,24 @@ const ChPaginator = class {
149
149
  }
150
150
  loadElements() {
151
151
  this.elPages = this.el.querySelector("ch-paginator-pages");
152
- this.elFirst = this.el.querySelector("ch-paginator-navigate[type='first']");
153
- this.elPrevious = this.el.querySelector("ch-paginator-navigate[type='previous']");
154
- this.elNext = this.el.querySelector("ch-paginator-navigate[type='next']");
155
- this.elLast = this.el.querySelector("ch-paginator-navigate[type='last']");
152
+ this.el
153
+ .querySelectorAll("ch-paginator-navigate")
154
+ .forEach((el) => {
155
+ switch (el.type) {
156
+ case "first":
157
+ this.elFirst = el;
158
+ break;
159
+ case "previous":
160
+ this.elPrevious = el;
161
+ break;
162
+ case "next":
163
+ this.elNext = el;
164
+ break;
165
+ case "last":
166
+ this.elLast = el;
167
+ break;
168
+ }
169
+ });
156
170
  }
157
171
  render() {
158
172
  if (this.elPages) {
@@ -202,6 +216,155 @@ const ChPaginatorNavigate = class {
202
216
  };
203
217
  ChPaginatorNavigate.style = chPaginatorNavigateCss;
204
218
 
219
+ const chPaginatorPagesCss = "button{all:unset}.pages{display:flex;align-items:center;list-style-type:none;margin:0;padding:0}";
220
+
221
+ const ChPaginatorPages = class {
222
+ constructor(hostRef) {
223
+ registerInstance(this, hostRef);
224
+ this.pageChanged = createEvent(this, "pageChanged", 7);
225
+ /**
226
+ * The active page number.
227
+ */
228
+ this.page = 1;
229
+ /**
230
+ * The total number of pages.
231
+ */
232
+ this.totalPages = 1;
233
+ /**
234
+ * The maximum number of items to display in the pagination.
235
+ */
236
+ this.maxSize = 9;
237
+ /**
238
+ * Flag to render the first and last pages.
239
+ */
240
+ this.renderFirstLastPages = true;
241
+ /**
242
+ * The text to display for the dots.
243
+ */
244
+ this.textDots = "...";
245
+ this.clickHandler = (eventInfo) => {
246
+ const button = eventInfo.target;
247
+ this.page = parseInt(button.value);
248
+ };
249
+ }
250
+ pageHandler() {
251
+ this.pageChanged.emit({ page: this.page });
252
+ }
253
+ maxSizeHandler() {
254
+ this.validateMaxSize();
255
+ }
256
+ renderFirstLastPagesHandler() {
257
+ this.validateMaxSize();
258
+ }
259
+ componentDidUpdate() {
260
+ if (document.activeElement === this.el) {
261
+ this.buttonActive.focus();
262
+ }
263
+ }
264
+ keyDownHandler(eventInfo) {
265
+ switch (eventInfo.key) {
266
+ case "ArrowLeft":
267
+ this.page = Math.max(this.page - 1, 1);
268
+ break;
269
+ case "ArrowRight":
270
+ this.page = Math.min(this.page + 1, this.totalPages);
271
+ break;
272
+ }
273
+ }
274
+ focusHandler() {
275
+ this.buttonActive.focus();
276
+ }
277
+ getItems() {
278
+ const padLeft = Math.ceil((this.maxSize - 1) / 2);
279
+ const padRight = Math.floor((this.maxSize - 1) / 2);
280
+ let fillLeft, fillStart;
281
+ let fillRight, fillEnd;
282
+ if (this.maxSize === 0 || this.maxSize >= this.totalPages) {
283
+ fillStart = this.fillStart(false);
284
+ fillLeft = this.page - 1;
285
+ fillRight = this.totalPages - this.page;
286
+ fillEnd = this.fillEnd(false);
287
+ }
288
+ else if (this.page <= padLeft && this.page < this.totalPages - padRight) {
289
+ fillStart = this.fillStart(false);
290
+ fillLeft = this.page - 1;
291
+ fillEnd = this.fillEnd(true);
292
+ fillRight = padRight - fillEnd.length + (padLeft - fillLeft);
293
+ }
294
+ else if (this.page > padLeft && this.page < this.totalPages - padRight) {
295
+ fillStart = this.fillStart(true);
296
+ fillLeft = padLeft - fillStart.length;
297
+ fillEnd = this.fillEnd(true);
298
+ fillRight = padRight - fillEnd.length;
299
+ }
300
+ else if (this.page > padLeft && this.page >= this.totalPages - padRight) {
301
+ fillEnd = this.fillEnd(false);
302
+ fillRight = this.totalPages - this.page;
303
+ fillStart = this.fillStart(true);
304
+ fillLeft = padLeft - fillStart.length + padRight - fillRight;
305
+ }
306
+ const items = fillStart
307
+ .concat(this.getRangeItems(this.page - fillLeft, this.page - 1))
308
+ .concat([this.page])
309
+ .concat(this.getRangeItems(this.page + 1, this.page + fillRight))
310
+ .concat(fillEnd);
311
+ return {
312
+ items,
313
+ activeIndex: fillStart.length + fillLeft
314
+ };
315
+ }
316
+ fillStart(render) {
317
+ if (render) {
318
+ return this.renderFirstLastPages ? [1, this.textDots] : [this.textDots];
319
+ }
320
+ else {
321
+ return [];
322
+ }
323
+ }
324
+ fillEnd(render) {
325
+ if (render) {
326
+ return this.renderFirstLastPages
327
+ ? [this.textDots, this.totalPages]
328
+ : [this.textDots];
329
+ }
330
+ else {
331
+ return [];
332
+ }
333
+ }
334
+ getRangeItems(start, end) {
335
+ return Array.from({ length: end - start + 1 }, (_, i) => start + i);
336
+ }
337
+ validateMaxSize() {
338
+ if (this.maxSize > 0) {
339
+ if (!this.renderFirstLastPages && this.maxSize < 3) {
340
+ this.maxSize = 3;
341
+ }
342
+ else if (this.renderFirstLastPages && this.maxSize < 5) {
343
+ this.maxSize = 5;
344
+ }
345
+ }
346
+ }
347
+ render() {
348
+ const { items, activeIndex } = this.getItems();
349
+ return (h("ol", { part: "pages", class: "pages" }, items.map((item, i) => {
350
+ if (typeof item === "number") {
351
+ return (h("li", null, h("button", { part: `page button ${i === activeIndex ? "active" : ""}`, value: item, onClick: this.clickHandler, ref: el => (this.buttonActive =
352
+ i === activeIndex ? el : this.buttonActive) }, item)));
353
+ }
354
+ else {
355
+ return (h("li", null, h("button", { part: "page button dots", disabled: true }, item)));
356
+ }
357
+ })));
358
+ }
359
+ get el() { return getElement(this); }
360
+ static get watchers() { return {
361
+ "page": ["pageHandler"],
362
+ "maxSize": ["maxSizeHandler"],
363
+ "renderFirstLastPages": ["renderFirstLastPagesHandler"]
364
+ }; }
365
+ };
366
+ ChPaginatorPages.style = chPaginatorPagesCss;
367
+
205
368
  var GxControlType;
206
369
  (function (GxControlType) {
207
370
  GxControlType[GxControlType["EDIT"] = 1] = "EDIT";
@@ -353,4 +516,4 @@ const GridChameleonColumnFilter = class {
353
516
  };
354
517
  GridChameleonColumnFilter.style = gxGridChameleonColumnFilterCss;
355
518
 
356
- export { ChGridActionRefresh as ch_grid_action_refresh, ChGridActionSettings as ch_grid_action_settings, ChGridActionbar as ch_grid_actionbar, ChPaginator as ch_paginator, ChPaginatorNavigate as ch_paginator_navigate, GridChameleonColumnFilter as gx_grid_chameleon_column_filter };
519
+ export { ChGridActionRefresh as ch_grid_action_refresh, ChGridActionSettings as ch_grid_action_settings, ChGridActionbar as ch_grid_actionbar, ChPaginator as ch_paginator, ChPaginatorNavigate as ch_paginator_navigate, ChPaginatorPages as ch_paginator_pages, GridChameleonColumnFilter as gx_grid_chameleon_column_filter };
@@ -121,6 +121,7 @@ const COLOR_MAPPINGS = {
121
121
  error: "color-error-dark",
122
122
  negative: "color-on-primary",
123
123
  onbackground: "color-on-background",
124
+ indeterminate: "color-primary-active",
124
125
  "primary-enabled": "color-primary-enabled",
125
126
  "primary-active": "color-primary-active",
126
127
  "primary-hover": "color-primary-hover",