@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
@@ -6,7 +6,7 @@ const index = require('./index-5a32426a.js');
6
6
  const reserverdNames = require('./reserverd-names-1b00889a.js');
7
7
  const helpers = require('./helpers-291cb1cb.js');
8
8
 
9
- 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)}";
9
+ 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)}";
10
10
 
11
11
  const CHECKBOX_ID = "checkbox";
12
12
  const PARTS = (checked, indeterminate) => `${checked ? " checked" : ""}${indeterminate ? " indeterminate" : ""}`;
@@ -105,7 +105,7 @@ const scrollToEdge = (event, container, scrollSpeed, scrollThreshold) => {
105
105
  }
106
106
  };
107
107
 
108
- 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%}";
108
+ 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%}";
109
109
 
110
110
  const TREE_ITEM_TAG_NAME$1 = "ch-tree-x-list-item";
111
111
  const TREE_TAG_NAME = "ch-tree-x";
@@ -115,8 +115,9 @@ const TEXT_FORMAT = "text/plain";
115
115
  const ARROW_DOWN_KEY = "ArrowDown";
116
116
  const ARROW_UP_KEY = "ArrowUp";
117
117
  const EDIT_KEY = "F2";
118
- const isExecutedInTree = (event, el) => event.composedPath().includes(el);
119
- const treeItemIsInEditMode = () => document.activeElement.editing;
118
+ const isTreeItem = (element) => element.tagName.toLowerCase() === TREE_ITEM_TAG_NAME$1;
119
+ const getFocusedTreeItem = () => helpers.focusComposedPath().find(isTreeItem);
120
+ const canMoveTreeItemFocus = (treeItem) => treeItem && !treeItem.editing;
120
121
  const getDroppableZoneKey = (newContainerId, draggedItems) => `"newContainerId":"${newContainerId}","metadata":"${JSON.stringify(draggedItems)}"`;
121
122
  const POSITION_X_DRAG_CUSTOM_VAR = "--ch-tree-x-dragging-item-x";
122
123
  const POSITION_Y_DRAG_CUSTOM_VAR = "--ch-tree-x-dragging-item-y";
@@ -125,32 +126,34 @@ const ChTreeX = class {
125
126
  index.registerInstance(this, hostRef);
126
127
  this.droppableZoneEnter = index.createEvent(this, "droppableZoneEnter", 7);
127
128
  this.expandedItemChange = index.createEvent(this, "expandedItemChange", 7);
129
+ this.itemContextmenu = index.createEvent(this, "itemContextmenu", 7);
128
130
  this.selectedItemsChange = index.createEvent(this, "selectedItemsChange", 7);
129
131
  this.itemsDropped = index.createEvent(this, "itemsDropped", 7);
130
132
  // @todo TODO: Check if key codes works in Safari
131
133
  this.keyDownEvents = {
132
134
  [ARROW_DOWN_KEY]: event => {
133
- if (!isExecutedInTree(event, this.el) || treeItemIsInEditMode()) {
135
+ const treeItem = getFocusedTreeItem();
136
+ if (!canMoveTreeItemFocus(treeItem)) {
134
137
  return;
135
138
  }
136
139
  event.preventDefault();
137
- const treeItem = document.activeElement;
138
140
  treeItem.focusNextItem(helpers.mouseEventModifierKey(event));
139
141
  },
140
142
  [ARROW_UP_KEY]: event => {
141
- if (!isExecutedInTree(event, this.el) || treeItemIsInEditMode()) {
143
+ const treeItem = getFocusedTreeItem();
144
+ if (!canMoveTreeItemFocus(treeItem)) {
142
145
  return;
143
146
  }
144
147
  event.preventDefault();
145
- const treeItem = document.activeElement;
146
148
  treeItem.focusPreviousItem(helpers.mouseEventModifierKey(event));
147
149
  },
148
150
  [EDIT_KEY]: event => {
149
- if (document.activeElement.tagName.toLowerCase() !== TREE_ITEM_TAG_NAME$1) {
151
+ const treeItem = getFocusedTreeItem();
152
+ if (!treeItem || !treeItem.editable) {
150
153
  return;
151
154
  }
152
155
  event.preventDefault();
153
- document.activeElement.editing = true;
156
+ treeItem.editing = true;
154
157
  }
155
158
  };
156
159
  this.draggingSelectedItems = false;
@@ -223,6 +226,19 @@ const ChTreeX = class {
223
226
  // selected: item.selected
224
227
  // }));
225
228
  // }
229
+ handleContextMenuEvent(event) {
230
+ const treeItem = event.target.closest(TREE_ITEM_TAG_NAME$1);
231
+ if (!treeItem) {
232
+ return;
233
+ }
234
+ event.preventDefault();
235
+ this.itemContextmenu.emit({
236
+ id: treeItem.id,
237
+ itemRef: treeItem,
238
+ metadata: treeItem.metadata,
239
+ contextmenuEvent: event
240
+ });
241
+ }
226
242
  // Set edit mode in items
227
243
  handleKeyDownEvents(event) {
228
244
  const keyHandler = this.keyDownEvents[event.key];
@@ -351,11 +367,11 @@ const ChTreeX = class {
351
367
  if (!itemRef) {
352
368
  return;
353
369
  }
354
- let parentItem = itemRef.parentElement.parentElement;
370
+ let parentItem = itemRef.parentElement;
355
371
  // Expand all parents
356
372
  while (parentItem.tagName.toLowerCase() === TREE_ITEM_TAG_NAME$1) {
357
373
  parentItem.expanded = true;
358
- parentItem = parentItem.parentElement.parentElement;
374
+ parentItem = parentItem.parentElement;
359
375
  }
360
376
  // Wait until the parents are expanded
361
377
  requestAnimationFrame(() => {
@@ -369,7 +385,7 @@ const ChTreeX = class {
369
385
  * @param draggedItems Information about the dragged items.
370
386
  * @param validDrop Current state of the droppable zone.
371
387
  */
372
- async updateValidDroppableZone(requestTimestamp, newContainerId, draggedItems, validDrop) {
388
+ async updateValidDropZone(requestTimestamp, newContainerId, draggedItems, validDrop) {
373
389
  var _a;
374
390
  if (!this.draggingInTheDocument ||
375
391
  requestTimestamp <= this.dragStartTimestamp) {
@@ -485,7 +501,7 @@ const ChTreeX = class {
485
501
  }
486
502
  getDirectParentsOfDraggableItems(draggingSelectedItems) {
487
503
  if (!draggingSelectedItems) {
488
- const parentTreeItemElem = this.currentDraggedItem.parentElement.parentElement;
504
+ const parentTreeItemElem = this.currentDraggedItem.parentElement;
489
505
  if (parentTreeItemElem.tagName.toLowerCase() === TREE_ITEM_TAG_NAME$1) {
490
506
  this.draggedParentIds.push(parentTreeItemElem.id);
491
507
  }
@@ -531,43 +547,39 @@ const ChTreeX = class {
531
547
  render() {
532
548
  return (index.h(index.Host, { class: {
533
549
  "ch-tree-x-dragging-item": this.draggingInTheDocument,
550
+ "ch-tree-x-not-dragging-item": !this.draggingInTheDocument,
534
551
  "ch-tree-x--dragging-selected-items": this.draggingInTree && this.draggingSelectedItems,
535
552
  "ch-tree-x-waiting-drop-processing": this.waitDropProcessing
536
- } }, index.h("slot", null), this.draggingInTree && (index.h("span", { "aria-hidden": "true", class: "ch-tree-x-drag-info" }, this.dragInfo))));
553
+ } }, 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))));
537
554
  }
538
555
  get el() { return index.getElement(this); }
539
556
  };
540
557
  ChTreeX.style = treeXCss;
541
558
 
542
- const treeXListCss = ":host{display:grid;grid-auto-rows:min-content;position:relative;width:100%}";
543
-
544
- const ChTreeListX = class {
545
- constructor(hostRef) {
546
- index.registerInstance(this, hostRef);
547
- /**
548
- * Level in the tree at which the control is placed.
549
- */
550
- this.level = 0;
551
- }
552
- render() {
553
- return (index.h(index.Host, { role: this.level === 0 ? "tree" : "group" }, index.h("slot", null)));
554
- }
555
- get el() { return index.getElement(this); }
556
- };
557
- ChTreeListX.style = treeXListCss;
558
-
559
- 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}";
559
+ 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}";
560
560
 
561
561
  const resetDragImage = new Image();
562
+ const INITIAL_LEVEL = 0;
562
563
  // Selectors
563
564
  const TREE_ITEM_TAG_NAME = "ch-tree-x-list-item";
564
- const DIRECT_TREE_ITEM_CHILDREN = `:scope>*>${TREE_ITEM_TAG_NAME}`;
565
+ const DIRECT_TREE_ITEM_CHILDREN = `:scope>${TREE_ITEM_TAG_NAME}`;
565
566
  const FIRST_ENABLED_SUB_ITEM = `${TREE_ITEM_TAG_NAME}:not([disabled])`;
566
- const LAST_SUB_ITEM = `:scope>*>${TREE_ITEM_TAG_NAME}:last-child`;
567
+ const LAST_SUB_ITEM = `:scope>${TREE_ITEM_TAG_NAME}:last-child`;
567
568
  // Keys
568
569
  const EXPANDABLE_ID = "expandable";
569
570
  const ENTER_KEY = "Enter";
570
571
  const ESCAPE_KEY = "Escape";
572
+ // Export Parts
573
+ const getCheckboxExportPart = (part) => `${part}:checkbox__${part}`;
574
+ const CHECKBOX_EXPORT_PARTS = [
575
+ "container",
576
+ "input",
577
+ "option",
578
+ "checked",
579
+ "indeterminate"
580
+ ]
581
+ .map(getCheckboxExportPart)
582
+ .join(",");
571
583
  const ChTreeXListItem = class {
572
584
  constructor(hostRef) {
573
585
  index.registerInstance(this, hostRef);
@@ -576,6 +588,7 @@ const ChTreeXListItem = class {
576
588
  this.itemDragEnd = index.createEvent(this, "itemDragEnd", 7);
577
589
  this.loadLazyContent = index.createEvent(this, "loadLazyContent", 7);
578
590
  this.modifyCaption = index.createEvent(this, "modifyCaption", 7);
591
+ this.openReference = index.createEvent(this, "openReference", 7);
579
592
  this.selectedItemChange = index.createEvent(this, "selectedItemChange", 7);
580
593
  this.selectedItemSync = index.createEvent(this, "selectedItemSync", 7);
581
594
  /**
@@ -648,7 +661,7 @@ const ChTreeXListItem = class {
648
661
  /**
649
662
  * Level in the tree at which the item is placed.
650
663
  */
651
- this.level = 0;
664
+ this.level = INITIAL_LEVEL;
652
665
  /**
653
666
  * `true` if the checkbox's value is indeterminate.
654
667
  */
@@ -722,16 +735,15 @@ const ChTreeXListItem = class {
722
735
  this.expanded = !this.expanded;
723
736
  }
724
737
  this.selected = true;
725
- this.selectedItemChange.emit(this.getSelectedInfo(helpers.mouseEventModifierKey(event), false, true));
738
+ this.selectedItemChange.emit(this.getSelectedInfo(helpers.mouseEventModifierKey(event), true));
726
739
  };
727
- this.getSelectedInfo = (ctrlKeyPressed, goToReference, selected) => ({
740
+ this.getSelectedInfo = (ctrlKeyPressed, selected) => ({
728
741
  ctrlKeyPressed: ctrlKeyPressed,
729
742
  expanded: this.expanded,
730
- goToReference: goToReference,
731
743
  id: this.el.id,
732
744
  itemRef: this.el,
733
745
  metadata: this.metadata,
734
- parentId: this.el.parentElement.parentElement.id,
746
+ parentId: this.el.parentElement.id,
735
747
  selected: selected
736
748
  });
737
749
  this.handleActionDblClick = (event) => {
@@ -740,8 +752,11 @@ const ChTreeXListItem = class {
740
752
  this.toggleSelected();
741
753
  return;
742
754
  }
755
+ this.emitOpenReference();
743
756
  // The Control key is not pressed, so the control can be expanded
744
- this.toggleExpand(event);
757
+ if (!this.leaf) {
758
+ this.toggleExpand(event);
759
+ }
745
760
  };
746
761
  /**
747
762
  * Event triggered by the following actions on the main button:
@@ -761,6 +776,7 @@ const ChTreeXListItem = class {
761
776
  this.toggleOrSelect(event);
762
777
  return;
763
778
  }
779
+ this.emitOpenReference();
764
780
  // Enter or space
765
781
  this.toggleExpand(event);
766
782
  };
@@ -846,7 +862,6 @@ const ChTreeXListItem = class {
846
862
  }
847
863
  handleSelectedChange(newValue) {
848
864
  this.selectedItemSync.emit(this.getSelectedInfo(true, // Does not matter in this case
849
- false, // Does not matter in this case
850
865
  newValue));
851
866
  }
852
867
  handleShowLinesChange(newShowLines) {
@@ -906,12 +921,11 @@ const ChTreeXListItem = class {
906
921
  return;
907
922
  }
908
923
  // The item is the last one of the tree at the first level
909
- if (this.level === 0) {
924
+ if (this.level === INITIAL_LEVEL) {
910
925
  return;
911
926
  }
912
927
  // Otherwise, ask the parent to focus the next sibling
913
- const parentItem = this.el.parentElement
914
- .parentElement;
928
+ const parentItem = this.el.parentElement;
915
929
  parentItem.focusNextSibling(ctrlKeyPressed);
916
930
  }
917
931
  /**
@@ -927,12 +941,11 @@ const ChTreeXListItem = class {
927
941
  return;
928
942
  }
929
943
  // The item is the first one of the tree at the first level
930
- if (this.level === 0) {
944
+ if (this.level === INITIAL_LEVEL) {
931
945
  return;
932
946
  }
933
947
  // Otherwise, set focus in the parent element
934
- const parentItem = this.el.parentElement
935
- .parentElement;
948
+ const parentItem = this.el.parentElement;
936
949
  // Check if the parent is not disabled
937
950
  if (parentItem.disabled) {
938
951
  parentItem.focusPreviousItem(ctrlKeyPressed);
@@ -970,7 +983,7 @@ const ChTreeXListItem = class {
970
983
  this.headerRef.focus();
971
984
  // Normal navigation auto selects the item.
972
985
  if (!ctrlKeyPressed) {
973
- this.setSelected(false);
986
+ this.setSelected();
974
987
  }
975
988
  }
976
989
  getDirectTreeItems() {
@@ -1003,34 +1016,41 @@ const ChTreeXListItem = class {
1003
1016
  toggleSelected() {
1004
1017
  const selected = !this.selected;
1005
1018
  this.selected = selected;
1006
- this.selectedItemChange.emit(this.getSelectedInfo(true, false, selected));
1019
+ this.selectedItemChange.emit(this.getSelectedInfo(true, selected));
1007
1020
  }
1008
- setSelected(goToReference) {
1021
+ setSelected() {
1009
1022
  this.selected = true;
1010
- this.selectedItemChange.emit(this.getSelectedInfo(false, goToReference, true));
1023
+ this.selectedItemChange.emit(this.getSelectedInfo(false, true));
1011
1024
  }
1012
1025
  toggleOrSelect(event) {
1013
1026
  if (helpers.mouseEventModifierKey(event)) {
1014
1027
  this.toggleSelected();
1015
1028
  }
1016
1029
  else {
1017
- this.setSelected(true);
1030
+ this.setSelected();
1018
1031
  }
1019
1032
  }
1033
+ emitOpenReference() {
1034
+ this.openReference.emit({
1035
+ id: this.el.id,
1036
+ leaf: this.leaf,
1037
+ metadata: this.metadata
1038
+ });
1039
+ }
1020
1040
  componentWillLoad() {
1021
- const parentElement = this.el.parentElement;
1041
+ const parentElementItem = this.el
1042
+ .parentElement;
1022
1043
  // Check if must lazy load
1023
1044
  this.lazyLoadItems(this.expanded);
1024
1045
  // Sync selected state with the main tree
1025
1046
  if (this.selected) {
1026
- this.selectedItemChange.emit(this.getSelectedInfo(true, false, true));
1047
+ this.selectedItemChange.emit(this.getSelectedInfo(true, true));
1027
1048
  }
1028
1049
  // No need to update more the status
1029
- if (this.level === 0) {
1050
+ if (this.level === INITIAL_LEVEL) {
1030
1051
  return;
1031
1052
  }
1032
1053
  // Update checkbox status
1033
- const parentElementItem = parentElement.parentElement;
1034
1054
  if (parentElementItem.checkbox) {
1035
1055
  this.checked = parentElementItem.checked;
1036
1056
  }
@@ -1053,11 +1073,14 @@ const ChTreeXListItem = class {
1053
1073
  const expandableButtonNotVisible = !this.leaf && !this.showExpandableButton;
1054
1074
  const acceptDrop = !this.dropDisabled && !this.leaf && this.dragState !== "start";
1055
1075
  const hasContent = !this.leaf && !this.lazyLoad;
1056
- const showAllLines = this.showLines === "all" && this.level !== 0;
1057
- const showLastLine = this.showLines === "last" && this.level !== 0 && this.lastItem;
1058
- return (index.h(index.Host, { role: "treeitem", "aria-selected": this.selected ? "true" : null, class: {
1076
+ const showAllLines = this.showLines === "all" && this.level !== INITIAL_LEVEL;
1077
+ const showLastLine = this.showLines === "last" &&
1078
+ this.level !== INITIAL_LEVEL &&
1079
+ this.lastItem;
1080
+ return (index.h(index.Host, { role: "treeitem", "aria-level": this.level + 1, "aria-selected": this.selected ? "true" : null, class: {
1059
1081
  [TREE_ITEM_TAG_NAME + "--downloading"]: this.downloading,
1060
1082
  [TREE_ITEM_TAG_NAME + "--editing"]: this.editing,
1083
+ [TREE_ITEM_TAG_NAME + "--not-editing"]: !this.editing,
1061
1084
  [TREE_ITEM_TAG_NAME + "--drag-" + this.dragState]: this.dragState !== "none" && this.dragState !== "start",
1062
1085
  [TREE_ITEM_TAG_NAME + "--deny-drop"]: this.leaf
1063
1086
  }, style: { "--level": `${this.level}` },
@@ -1072,25 +1095,28 @@ const ChTreeXListItem = class {
1072
1095
  "header--odd": !evenLevel,
1073
1096
  "header--even-expandable": evenLevel && expandableButtonVisible,
1074
1097
  "header--odd-expandable": !evenLevel && expandableButtonVisible,
1075
- "header--level-0": this.level === 0
1098
+ "header--level-0": this.level === INITIAL_LEVEL
1076
1099
  }, part: `header${this.disabled ? " disabled" : ""}${this.selected ? " selected" : ""}`, type: "button", disabled: this.disabled, onClick: this.handleActionClick, onKeyDown: !this.editing ? this.handleActionKeyDown : null,
1077
1100
  // Drag and drop
1078
1101
  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: {
1079
1102
  "expandable-button": true,
1080
1103
  "expandable-button--expanded": this.expanded,
1081
1104
  "expandable-button--collapsed": !this.expanded
1082
- }, 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", 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" })) : ([
1105
+ }, 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" })) : ([
1083
1106
  index.h("div", { class: {
1084
1107
  action: true,
1085
1108
  "readonly-mode": !this.editing
1086
- }, part: `action ${!this.editing ? "readonly-mode" : ""}`, onDblClick: !this.leaf && !this.editing ? this.handleActionDblClick : null }, this.leftImgSrc && this.renderImg("left-img", this.leftImgSrc), 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 &&
1109
+ }, 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 &&
1087
1110
  this.renderImg("right-img", this.rightImgSrc)),
1088
1111
  this.showDownloadingSpinner && !this.leaf && this.downloading && (index.h("div", { class: "downloading", part: "downloading" }))
1089
1112
  ]), (showAllLines || showLastLine) && (index.h("div", { class: {
1090
1113
  "dashed-line": true,
1091
1114
  "last-all-line": showAllLines && this.lastItem,
1092
1115
  "last-line": showLastLine
1093
- }, part: `dashed-line${this.lastItem ? " last-all-line" : ""}` }))), hasContent && (index.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" : ""}` }, index.h("slot", { name: "tree" })))));
1116
+ }, 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: {
1117
+ expandable: true,
1118
+ "expandable--collapsed": !this.expanded
1119
+ }, part: `expandable${this.expanded ? " expanded" : " collapsed"}` }, index.h("slot", null)))));
1094
1120
  }
1095
1121
  get el() { return index.getElement(this); }
1096
1122
  static get watchers() { return {
@@ -1106,5 +1132,4 @@ ChTreeXListItem.style = treeXListItemCss;
1106
1132
 
1107
1133
  exports.ch_checkbox = CheckBox;
1108
1134
  exports.ch_tree_x = ChTreeX;
1109
- exports.ch_tree_x_list = ChTreeListX;
1110
1135
  exports.ch_tree_x_list_item = ChTreeXListItem;
@@ -153,10 +153,24 @@ const ChPaginator = class {
153
153
  }
154
154
  loadElements() {
155
155
  this.elPages = this.el.querySelector("ch-paginator-pages");
156
- this.elFirst = this.el.querySelector("ch-paginator-navigate[type='first']");
157
- this.elPrevious = this.el.querySelector("ch-paginator-navigate[type='previous']");
158
- this.elNext = this.el.querySelector("ch-paginator-navigate[type='next']");
159
- this.elLast = this.el.querySelector("ch-paginator-navigate[type='last']");
156
+ this.el
157
+ .querySelectorAll("ch-paginator-navigate")
158
+ .forEach((el) => {
159
+ switch (el.type) {
160
+ case "first":
161
+ this.elFirst = el;
162
+ break;
163
+ case "previous":
164
+ this.elPrevious = el;
165
+ break;
166
+ case "next":
167
+ this.elNext = el;
168
+ break;
169
+ case "last":
170
+ this.elLast = el;
171
+ break;
172
+ }
173
+ });
160
174
  }
161
175
  render() {
162
176
  if (this.elPages) {
@@ -206,6 +220,155 @@ const ChPaginatorNavigate = class {
206
220
  };
207
221
  ChPaginatorNavigate.style = chPaginatorNavigateCss;
208
222
 
223
+ const chPaginatorPagesCss = "button{all:unset}.pages{display:flex;align-items:center;list-style-type:none;margin:0;padding:0}";
224
+
225
+ const ChPaginatorPages = class {
226
+ constructor(hostRef) {
227
+ index.registerInstance(this, hostRef);
228
+ this.pageChanged = index.createEvent(this, "pageChanged", 7);
229
+ /**
230
+ * The active page number.
231
+ */
232
+ this.page = 1;
233
+ /**
234
+ * The total number of pages.
235
+ */
236
+ this.totalPages = 1;
237
+ /**
238
+ * The maximum number of items to display in the pagination.
239
+ */
240
+ this.maxSize = 9;
241
+ /**
242
+ * Flag to render the first and last pages.
243
+ */
244
+ this.renderFirstLastPages = true;
245
+ /**
246
+ * The text to display for the dots.
247
+ */
248
+ this.textDots = "...";
249
+ this.clickHandler = (eventInfo) => {
250
+ const button = eventInfo.target;
251
+ this.page = parseInt(button.value);
252
+ };
253
+ }
254
+ pageHandler() {
255
+ this.pageChanged.emit({ page: this.page });
256
+ }
257
+ maxSizeHandler() {
258
+ this.validateMaxSize();
259
+ }
260
+ renderFirstLastPagesHandler() {
261
+ this.validateMaxSize();
262
+ }
263
+ componentDidUpdate() {
264
+ if (document.activeElement === this.el) {
265
+ this.buttonActive.focus();
266
+ }
267
+ }
268
+ keyDownHandler(eventInfo) {
269
+ switch (eventInfo.key) {
270
+ case "ArrowLeft":
271
+ this.page = Math.max(this.page - 1, 1);
272
+ break;
273
+ case "ArrowRight":
274
+ this.page = Math.min(this.page + 1, this.totalPages);
275
+ break;
276
+ }
277
+ }
278
+ focusHandler() {
279
+ this.buttonActive.focus();
280
+ }
281
+ getItems() {
282
+ const padLeft = Math.ceil((this.maxSize - 1) / 2);
283
+ const padRight = Math.floor((this.maxSize - 1) / 2);
284
+ let fillLeft, fillStart;
285
+ let fillRight, fillEnd;
286
+ if (this.maxSize === 0 || this.maxSize >= this.totalPages) {
287
+ fillStart = this.fillStart(false);
288
+ fillLeft = this.page - 1;
289
+ fillRight = this.totalPages - this.page;
290
+ fillEnd = this.fillEnd(false);
291
+ }
292
+ else if (this.page <= padLeft && this.page < this.totalPages - padRight) {
293
+ fillStart = this.fillStart(false);
294
+ fillLeft = this.page - 1;
295
+ fillEnd = this.fillEnd(true);
296
+ fillRight = padRight - fillEnd.length + (padLeft - fillLeft);
297
+ }
298
+ else if (this.page > padLeft && this.page < this.totalPages - padRight) {
299
+ fillStart = this.fillStart(true);
300
+ fillLeft = padLeft - fillStart.length;
301
+ fillEnd = this.fillEnd(true);
302
+ fillRight = padRight - fillEnd.length;
303
+ }
304
+ else if (this.page > padLeft && this.page >= this.totalPages - padRight) {
305
+ fillEnd = this.fillEnd(false);
306
+ fillRight = this.totalPages - this.page;
307
+ fillStart = this.fillStart(true);
308
+ fillLeft = padLeft - fillStart.length + padRight - fillRight;
309
+ }
310
+ const items = fillStart
311
+ .concat(this.getRangeItems(this.page - fillLeft, this.page - 1))
312
+ .concat([this.page])
313
+ .concat(this.getRangeItems(this.page + 1, this.page + fillRight))
314
+ .concat(fillEnd);
315
+ return {
316
+ items,
317
+ activeIndex: fillStart.length + fillLeft
318
+ };
319
+ }
320
+ fillStart(render) {
321
+ if (render) {
322
+ return this.renderFirstLastPages ? [1, this.textDots] : [this.textDots];
323
+ }
324
+ else {
325
+ return [];
326
+ }
327
+ }
328
+ fillEnd(render) {
329
+ if (render) {
330
+ return this.renderFirstLastPages
331
+ ? [this.textDots, this.totalPages]
332
+ : [this.textDots];
333
+ }
334
+ else {
335
+ return [];
336
+ }
337
+ }
338
+ getRangeItems(start, end) {
339
+ return Array.from({ length: end - start + 1 }, (_, i) => start + i);
340
+ }
341
+ validateMaxSize() {
342
+ if (this.maxSize > 0) {
343
+ if (!this.renderFirstLastPages && this.maxSize < 3) {
344
+ this.maxSize = 3;
345
+ }
346
+ else if (this.renderFirstLastPages && this.maxSize < 5) {
347
+ this.maxSize = 5;
348
+ }
349
+ }
350
+ }
351
+ render() {
352
+ const { items, activeIndex } = this.getItems();
353
+ return (index.h("ol", { part: "pages", class: "pages" }, items.map((item, i) => {
354
+ if (typeof item === "number") {
355
+ return (index.h("li", null, index.h("button", { part: `page button ${i === activeIndex ? "active" : ""}`, value: item, onClick: this.clickHandler, ref: el => (this.buttonActive =
356
+ i === activeIndex ? el : this.buttonActive) }, item)));
357
+ }
358
+ else {
359
+ return (index.h("li", null, index.h("button", { part: "page button dots", disabled: true }, item)));
360
+ }
361
+ })));
362
+ }
363
+ get el() { return index.getElement(this); }
364
+ static get watchers() { return {
365
+ "page": ["pageHandler"],
366
+ "maxSize": ["maxSizeHandler"],
367
+ "renderFirstLastPages": ["renderFirstLastPagesHandler"]
368
+ }; }
369
+ };
370
+ ChPaginatorPages.style = chPaginatorPagesCss;
371
+
209
372
  var GxControlType;
210
373
  (function (GxControlType) {
211
374
  GxControlType[GxControlType["EDIT"] = 1] = "EDIT";
@@ -362,4 +525,5 @@ exports.ch_grid_action_settings = ChGridActionSettings;
362
525
  exports.ch_grid_actionbar = ChGridActionbar;
363
526
  exports.ch_paginator = ChPaginator;
364
527
  exports.ch_paginator_navigate = ChPaginatorNavigate;
528
+ exports.ch_paginator_pages = ChPaginatorPages;
365
529
  exports.gx_grid_chameleon_column_filter = GridChameleonColumnFilter;
@@ -125,6 +125,7 @@ const COLOR_MAPPINGS = {
125
125
  error: "color-error-dark",
126
126
  negative: "color-on-primary",
127
127
  onbackground: "color-on-background",
128
+ indeterminate: "color-primary-active",
128
129
  "primary-enabled": "color-primary-enabled",
129
130
  "primary-active": "color-primary-active",
130
131
  "primary-hover": "color-primary-hover",