@genexus/genexus-ide-ui 0.0.62 → 0.0.63

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 (113) hide show
  1. package/dist/cjs/{ch-tree-x_3.cjs.entry.js → ch-checkbox_4.cjs.entry.js} +277 -71
  2. package/dist/cjs/ch-next-data-modeling-render.cjs.entry.js +242 -0
  3. package/dist/cjs/{ch-next-data-modeling-item.cjs.entry.js → ch-next-data-modeling_2.cjs.entry.js} +20 -1
  4. package/dist/cjs/ch-tree-view-render-wrapper.cjs.entry.js +160 -0
  5. package/dist/cjs/genexus-ide-ui.cjs.js +1 -1
  6. package/dist/cjs/gx-ide-kb-manager-export.cjs.entry.js +41 -39
  7. package/dist/cjs/gx-ide-kb-manager-import.cjs.entry.js +23 -11
  8. package/dist/cjs/gx-ide-test.cjs.entry.js +107 -122
  9. package/dist/cjs/gxg-color-picker.cjs.entry.js +2 -2
  10. package/dist/cjs/gxg-title-editable.cjs.entry.js +11 -4
  11. package/dist/cjs/{gxg-tree_2.cjs.entry.js → gxg-tree-item.cjs.entry.js} +0 -212
  12. package/dist/cjs/gxg-tree-view.cjs.entry.js +165 -0
  13. package/dist/cjs/gxg-tree.cjs.entry.js +218 -0
  14. package/dist/cjs/loader.cjs.js +1 -1
  15. package/dist/collection/collection-manifest.json +5 -3
  16. package/dist/collection/components/_test/test.css +5 -0
  17. package/dist/collection/components/_test/test.js +109 -220
  18. package/dist/collection/components/kb-manager-export/helpers.js +7 -23
  19. package/dist/collection/components/kb-manager-export/kb-manager-export.css +20 -0
  20. package/dist/collection/components/kb-manager-export/kb-manager-export.js +42 -22
  21. package/dist/collection/components/kb-manager-import/gx-ide-assets/kb-manager-import/langs/kb-manager-import.lang.en.json +1 -0
  22. package/dist/collection/components/kb-manager-import/kb-manager-import.js +23 -11
  23. package/dist/components/ch-next-data-modeling-item.js +1 -457
  24. package/dist/components/ch-next-data-modeling-render.js +295 -0
  25. package/dist/components/ch-next-data-modeling.js +1 -27
  26. package/dist/components/ch-tree-view-item.js +6 -0
  27. package/dist/components/ch-tree-view-render-wrapper.js +224 -0
  28. package/dist/components/ch-tree-view-render.js +6 -0
  29. package/dist/components/ch-tree-view.js +6 -0
  30. package/dist/components/gx-ide-kb-manager-export.js +75 -73
  31. package/dist/components/gx-ide-kb-manager-import.js +38 -20
  32. package/dist/components/gx-ide-references.js +21 -15
  33. package/dist/components/gx-ide-test.js +120 -160
  34. package/dist/components/gxg-color-picker.js +2 -2
  35. package/dist/components/gxg-title-editable.js +12 -4
  36. package/dist/components/gxg-tree-item.js +614 -1
  37. package/dist/components/gxg-tree-view.js +2 -2
  38. package/dist/components/gxg-tree.js +236 -1
  39. package/dist/components/index.js +5 -3
  40. package/dist/components/next-data-modeling-item.js +466 -0
  41. package/dist/{esm/ch-next-data-modeling.entry.js → components/next-data-modeling.js} +21 -7
  42. package/dist/components/{tree-x-list-item.js → tree-view-item.js} +9 -9
  43. package/dist/components/{ch-test-tree-x.js → tree-view-render.js} +168 -28
  44. package/dist/components/tree-view.js +410 -435
  45. package/dist/components/tree-view2.js +226 -0
  46. package/dist/esm/{ch-tree-x_3.entry.js → ch-checkbox_4.entry.js} +275 -70
  47. package/dist/esm/ch-next-data-modeling-render.entry.js +238 -0
  48. package/dist/esm/{ch-next-data-modeling-item.entry.js → ch-next-data-modeling_2.entry.js} +21 -3
  49. package/dist/esm/ch-tree-view-render-wrapper.entry.js +156 -0
  50. package/dist/esm/genexus-ide-ui.js +1 -1
  51. package/dist/esm/gx-ide-kb-manager-export.entry.js +41 -39
  52. package/dist/esm/gx-ide-kb-manager-import.entry.js +23 -11
  53. package/dist/esm/gx-ide-test.entry.js +108 -123
  54. package/dist/esm/gxg-color-picker.entry.js +2 -2
  55. package/dist/esm/gxg-title-editable.entry.js +11 -4
  56. package/dist/{components/gxg-tree-item2.js → esm/gxg-tree-item.entry.js} +9 -79
  57. package/dist/esm/gxg-tree-view.entry.js +161 -0
  58. package/dist/{components/gxg-tree2.js → esm/gxg-tree.entry.js} +8 -32
  59. package/dist/esm/loader.js +1 -1
  60. package/dist/genexus-ide-ui/genexus-ide-ui.css +1 -1
  61. package/dist/genexus-ide-ui/genexus-ide-ui.esm.js +1 -1
  62. package/dist/genexus-ide-ui/gx-ide-assets/kb-manager-import/langs/kb-manager-import.lang.en.json +1 -0
  63. package/dist/genexus-ide-ui/p-13177896.entry.js +1 -0
  64. package/dist/genexus-ide-ui/p-19fef562.entry.js +1 -0
  65. package/dist/genexus-ide-ui/p-2781b92a.entry.js +1 -0
  66. package/dist/genexus-ide-ui/p-2c17e71d.entry.js +1 -0
  67. package/dist/genexus-ide-ui/p-40a57a36.entry.js +1 -0
  68. package/dist/genexus-ide-ui/p-636d02fa.entry.js +1 -0
  69. package/dist/genexus-ide-ui/p-7b63be93.entry.js +1 -0
  70. package/dist/genexus-ide-ui/p-8a7c4561.entry.js +1 -0
  71. package/dist/genexus-ide-ui/p-a2cb0e6b.entry.js +1 -0
  72. package/dist/genexus-ide-ui/p-a9c8b373.entry.js +1 -0
  73. package/dist/genexus-ide-ui/p-b819706e.entry.js +1 -0
  74. package/dist/genexus-ide-ui/p-bacd879c.entry.js +1 -0
  75. package/dist/node_modules/@genexus/chameleon-controls-library/dist/collection/components/next/data-modeling-render/next-data-modeling-render.css +3 -0
  76. package/dist/node_modules/@genexus/chameleon-controls-library/dist/collection/components/renders/tree-view/tree-view-render.css +3 -0
  77. package/dist/node_modules/@genexus/chameleon-controls-library/dist/collection/components/test/test-tree-view/tree-view-render-wrapper.css +0 -0
  78. package/dist/node_modules/@genexus/chameleon-controls-library/dist/collection/components/tree-view/tree-view/tree-view.css +45 -0
  79. package/dist/node_modules/@genexus/gemini/dist/collection/components/title-editable/title-editable.css +17 -3
  80. package/dist/node_modules/@genexus/gemini/dist/collection/components/tree-view/tree-view.css +5 -2
  81. package/dist/types/common/helpers.d.ts +2 -2
  82. package/dist/types/components/_test/test.d.ts +3 -35
  83. package/dist/types/components/kb-manager-export/helpers.d.ts +4 -4
  84. package/dist/types/components/kb-manager-export/kb-manager-export.d.ts +10 -5
  85. package/dist/types/components/kb-manager-import/helpers.d.ts +3 -3
  86. package/dist/types/components/kb-manager-import/kb-manager-import.d.ts +7 -6
  87. package/dist/types/components/references/helpers.d.ts +2 -2
  88. package/dist/types/components/references/references.d.ts +3 -3
  89. package/dist/types/components.d.ts +3 -60
  90. package/package.json +3 -3
  91. package/dist/cjs/ch-checkbox.cjs.entry.js +0 -93
  92. package/dist/cjs/ch-next-data-modeling.cjs.entry.js +0 -19
  93. package/dist/cjs/ch-test-tree-x.cjs.entry.js +0 -458
  94. package/dist/components/ch-tree-x-list-item.js +0 -6
  95. package/dist/components/ch-tree-x.js +0 -6
  96. package/dist/components/tree-x.js +0 -504
  97. package/dist/esm/ch-checkbox.entry.js +0 -89
  98. package/dist/esm/ch-test-tree-x.entry.js +0 -454
  99. package/dist/esm/gxg-tree_2.entry.js +0 -757
  100. package/dist/genexus-ide-ui/p-092ccacd.entry.js +0 -1
  101. package/dist/genexus-ide-ui/p-1ad68b23.entry.js +0 -3
  102. package/dist/genexus-ide-ui/p-3442d19a.entry.js +0 -1
  103. package/dist/genexus-ide-ui/p-39968306.entry.js +0 -1
  104. package/dist/genexus-ide-ui/p-5755f985.entry.js +0 -1
  105. package/dist/genexus-ide-ui/p-85597097.entry.js +0 -1
  106. package/dist/genexus-ide-ui/p-9e530c7d.entry.js +0 -1
  107. package/dist/genexus-ide-ui/p-ad5040e4.entry.js +0 -1
  108. package/dist/genexus-ide-ui/p-aeb3b032.entry.js +0 -1
  109. package/dist/genexus-ide-ui/p-c53522c9.entry.js +0 -1
  110. package/dist/genexus-ide-ui/p-d104f9a4.entry.js +0 -1
  111. package/dist/node_modules/@genexus/chameleon-controls-library/dist/collection/components/test/test-tree-x.css +0 -3
  112. package/dist/node_modules/@genexus/chameleon-controls-library/dist/collection/components/tree-view/tree-x/tree-x.css +0 -45
  113. /package/dist/node_modules/@genexus/chameleon-controls-library/dist/collection/components/tree-view/{tree-x-list-item/tree-x-list-item.css → tree-view-item/tree-view-item.css} +0 -0
@@ -1,504 +0,0 @@
1
- import { proxyCustomElement, HTMLElement, createEvent, h, Host } from '@stencil/core/internal/client';
2
- import { f as focusComposedPath, m as mouseEventModifierKey } from './helpers.js';
3
-
4
- const scrollToEdge = (event, container, scrollSpeed, scrollThreshold) => {
5
- const mousePositionY = event.clientY - container.getBoundingClientRect().top;
6
- const containerHeight = container.clientHeight;
7
- const mouseAtTheTop = mousePositionY <= scrollThreshold;
8
- const mouseAtTheBottom = mousePositionY > containerHeight - scrollThreshold;
9
- if (mouseAtTheTop || mouseAtTheBottom) {
10
- const scrollAmount = mouseAtTheTop
11
- ? mousePositionY - scrollThreshold
12
- : mousePositionY - (containerHeight - scrollThreshold);
13
- // Adjust container scroll position
14
- container.scrollTop += scrollAmount / scrollSpeed;
15
- }
16
- };
17
-
18
- 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%}";
19
-
20
- const TREE_ITEM_TAG_NAME = "ch-tree-x-list-item";
21
- const TREE_TAG_NAME = "ch-tree-x";
22
- // Selectors
23
- // const CHECKED_ITEMS = `${TREE_ITEM_TAG_NAME}[checked]`;
24
- const TEXT_FORMAT = "text/plain";
25
- const ARROW_DOWN_KEY = "ArrowDown";
26
- const ARROW_UP_KEY = "ArrowUp";
27
- const EDIT_KEY = "F2";
28
- const isTreeItem = (element) => element.tagName.toLowerCase() === TREE_ITEM_TAG_NAME;
29
- const getFocusedTreeItem = () => focusComposedPath().find(isTreeItem);
30
- const canMoveTreeItemFocus = (treeItem) => treeItem && !treeItem.editing;
31
- const getDroppableZoneKey = (newContainerId, draggedItems) => `"newContainerId":"${newContainerId}","metadata":"${JSON.stringify(draggedItems)}"`;
32
- const POSITION_X_DRAG_CUSTOM_VAR = "--ch-tree-x-dragging-item-x";
33
- const POSITION_Y_DRAG_CUSTOM_VAR = "--ch-tree-x-dragging-item-y";
34
- const ChTreeX = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
35
- constructor() {
36
- super();
37
- this.__registerHost();
38
- this.droppableZoneEnter = createEvent(this, "droppableZoneEnter", 7);
39
- this.expandedItemChange = createEvent(this, "expandedItemChange", 7);
40
- this.itemContextmenu = createEvent(this, "itemContextmenu", 7);
41
- this.itemsDropped = createEvent(this, "itemsDropped", 7);
42
- this.selectedItemsChange = createEvent(this, "selectedItemsChange", 7);
43
- // @todo TODO: Check if key codes works in Safari
44
- this.keyDownEvents = {
45
- [ARROW_DOWN_KEY]: event => {
46
- const treeItem = getFocusedTreeItem();
47
- if (!canMoveTreeItemFocus(treeItem)) {
48
- return;
49
- }
50
- event.preventDefault();
51
- treeItem.focusNextItem(mouseEventModifierKey(event));
52
- },
53
- [ARROW_UP_KEY]: event => {
54
- const treeItem = getFocusedTreeItem();
55
- if (!canMoveTreeItemFocus(treeItem)) {
56
- return;
57
- }
58
- event.preventDefault();
59
- treeItem.focusPreviousItem(mouseEventModifierKey(event));
60
- },
61
- [EDIT_KEY]: event => {
62
- const treeItem = getFocusedTreeItem();
63
- if (!treeItem || !treeItem.editable) {
64
- return;
65
- }
66
- event.preventDefault();
67
- treeItem.editing = true;
68
- }
69
- };
70
- this.draggingSelectedItems = false;
71
- this.needForRAF = true; // To prevent redundant RAF (request animation frame) calls
72
- this.selectedItemsInfo = new Map();
73
- /**
74
- * Cache to avoid duplicate requests when checking the droppable zone in the
75
- * same drag event.
76
- */
77
- this.validDroppableZoneCache = new Map();
78
- this.draggedIds = [];
79
- this.draggedParentIds = [];
80
- this.draggingInTheDocument = false;
81
- this.draggingInTree = false;
82
- /**
83
- * Set this attribute if you want to allow multi selection of the items.
84
- */
85
- this.multiSelection = false;
86
- /**
87
- * This property lets you specify the time (in ms) that the mouse must be
88
- * over in a subtree to open it when dragging.
89
- */
90
- this.openSubTreeCountdown = 750;
91
- /**
92
- * `true` to scroll in the tree when dragging an item near the edges of the
93
- * tree.
94
- */
95
- this.scrollToEdgeOnDrag = true;
96
- /**
97
- * This property lets you specify if the tree is waiting to process the drop
98
- * of items.
99
- */
100
- this.waitDropProcessing = false;
101
- this.trackItemDrag = (event) => {
102
- event.preventDefault();
103
- this.lastDragEvent = event;
104
- this.updateDropEffect(event);
105
- if (!this.needForRAF) {
106
- return;
107
- }
108
- this.needForRAF = false; // No need to call RAF up until next frame
109
- requestAnimationFrame(() => {
110
- this.needForRAF = true; // RAF now consumes the movement instruction so a new one can come
111
- this.el.style.setProperty(POSITION_X_DRAG_CUSTOM_VAR, `${this.lastDragEvent.pageX}px`);
112
- this.el.style.setProperty(POSITION_Y_DRAG_CUSTOM_VAR, `${this.lastDragEvent.pageY}px`);
113
- });
114
- };
115
- this.fixScrollPositionOnDrag = () => {
116
- if (!this.draggingInTree || !this.lastDragEvent) {
117
- return;
118
- }
119
- requestAnimationFrame(() => {
120
- scrollToEdge(this.lastDragEvent, this.el, 10, 30);
121
- requestAnimationFrame(this.fixScrollPositionOnDrag);
122
- });
123
- };
124
- }
125
- // /**
126
- // * Returns an array of the selected tree items, providing the id, caption and
127
- // * selected status.
128
- // */
129
- // @Method()
130
- // async getCheckedItems(): Promise<CheckedTreeItemInfo[]> {
131
- // const checkedItems = Array.from(
132
- // this.el.querySelectorAll(CHECKED_ITEMS)
133
- // ) as HTMLChTreeXListItemElement[];
134
- // return checkedItems.map(item => ({
135
- // id: item.id,
136
- // caption: item.caption,
137
- // selected: item.selected
138
- // }));
139
- // }
140
- handleContextMenuEvent(event) {
141
- const treeItem = event.target.closest(TREE_ITEM_TAG_NAME);
142
- if (!treeItem) {
143
- return;
144
- }
145
- event.preventDefault();
146
- this.itemContextmenu.emit({
147
- id: treeItem.id,
148
- itemRef: treeItem,
149
- metadata: treeItem.metadata,
150
- contextmenuEvent: event
151
- });
152
- }
153
- // Set edit mode in items
154
- handleKeyDownEvents(event) {
155
- const keyHandler = this.keyDownEvents[event.key];
156
- if (keyHandler) {
157
- keyHandler(event);
158
- }
159
- }
160
- // We can't use capture, because the dataTransfer info would not be defined
161
- // Also, we cant use capture and setTimeout with 0 seconds, because the
162
- // getData method can only be accessed during the dragstart and drop event
163
- handleDragStart(event) {
164
- // Reset the validity of the droppable zones with each new drag start
165
- this.validDroppableZoneCache.clear();
166
- this.draggingInTheDocument = true;
167
- this.dragStartTimestamp = new Date().getTime();
168
- this.draggedItems = JSON.parse(event.dataTransfer.getData(TEXT_FORMAT));
169
- }
170
- handleDragEnd() {
171
- this.draggingInTheDocument = false;
172
- }
173
- handleDragEnter(event) {
174
- this.cancelSubTreeOpening(null, true);
175
- event.stopPropagation();
176
- const containerTarget = event.target;
177
- // Check if it is a valid item
178
- if (containerTarget.tagName.toLowerCase() !== TREE_ITEM_TAG_NAME) {
179
- return;
180
- }
181
- this.lastOpenSubTreeItem = containerTarget;
182
- this.openSubTreeAfterCountdown(containerTarget);
183
- if (this.validDroppableZone(event) === "valid") {
184
- containerTarget.dragState = "enter";
185
- }
186
- }
187
- handleDragLeave(event) {
188
- const currentTarget = event.target;
189
- if (currentTarget.tagName.toLowerCase() !== TREE_ITEM_TAG_NAME) {
190
- return;
191
- }
192
- const treeItem = currentTarget;
193
- treeItem.dragState = "none";
194
- this.cancelSubTreeOpening(treeItem);
195
- }
196
- cancelSubTreeOpening(treeItem, forceClear = false) {
197
- if (this.lastOpenSubTreeItem === treeItem || forceClear) {
198
- clearTimeout(this.openSubTreeTimeout);
199
- this.lastOpenSubTreeItem = null;
200
- }
201
- }
202
- handleItemDrop(event) {
203
- event.stopPropagation();
204
- this.cancelSubTreeOpening(null, true);
205
- const newContainer = event.target;
206
- const draggedItems = JSON.parse(event.dataTransfer.getData(TEXT_FORMAT));
207
- // The droppable zone must be checked, even if it was marked as not valid
208
- // @todo Try to drop an item with high delays in droppable zone checking
209
- if (this.validDroppableZone(event) !== "valid") {
210
- return;
211
- }
212
- this.itemsDropped.emit({
213
- newContainer: { id: newContainer.id, metadata: newContainer.metadata },
214
- draggingSelectedItems: this.draggingSelectedItems,
215
- draggedItems: draggedItems,
216
- dropInTheSameTree: this.draggingInTree
217
- });
218
- }
219
- handleItemDragStart(event) {
220
- document.body.addEventListener("dragover", this.trackItemDrag, {
221
- capture: true
222
- });
223
- this.currentDraggedItem = event.target;
224
- const allItemsCanBeDragged = this.checkDragValidityAndUpdateDragInfo(event.detail);
225
- if (!allItemsCanBeDragged) {
226
- // This effect disables drop interactions in all page elements, so there
227
- // is no need to capture and prevent the drop event in the window
228
- event.detail.dragEvent.dataTransfer.effectAllowed = "none";
229
- return;
230
- }
231
- this.draggingInTree = true;
232
- if (this.scrollToEdgeOnDrag) {
233
- this.fixScrollPositionOnDrag();
234
- }
235
- }
236
- handleItemDragEnd() {
237
- this.draggingInTree = false;
238
- document.body.removeEventListener("dragover", this.trackItemDrag, {
239
- capture: true
240
- });
241
- // Reset not allowed droppable ids
242
- this.resetVariables();
243
- }
244
- /**
245
- * Only sync the info about the selected items. It does not update the state
246
- * of the previous selected items.
247
- */
248
- handleSelectedItemSync(event) {
249
- event.stopPropagation();
250
- const selectedItemInfo = event.detail;
251
- // If the item is selected, add it to list
252
- if (selectedItemInfo.selected) {
253
- this.selectedItemsInfo.set(selectedItemInfo.id, selectedItemInfo);
254
- }
255
- else {
256
- this.selectedItemsInfo.delete(selectedItemInfo.id);
257
- }
258
- }
259
- handleSelectedItemChange(event) {
260
- event.stopPropagation();
261
- const selectedItemInfo = event.detail;
262
- const selectedItemEl = event.target;
263
- this.handleItemSelection(selectedItemEl, selectedItemInfo);
264
- }
265
- /**
266
- * Clear all information about the selected items. This method is intended to
267
- * be used when selected items are reordered and the selected references will
268
- * no longer be useful.
269
- */
270
- async clearSelectedItemsInfo() {
271
- this.clearSelectedItems();
272
- }
273
- /**
274
- * Given an item id, it displays and scrolls into the item view.
275
- */
276
- async scrollIntoVisible(treeItemId) {
277
- const itemRef = this.el.querySelector(`${TREE_ITEM_TAG_NAME}#${treeItemId}`);
278
- if (!itemRef) {
279
- return;
280
- }
281
- let parentItem = itemRef.parentElement;
282
- // Expand all parents
283
- while (parentItem.tagName.toLowerCase() === TREE_ITEM_TAG_NAME) {
284
- parentItem.expanded = true;
285
- parentItem = parentItem.parentElement;
286
- }
287
- // Wait until the parents are expanded
288
- requestAnimationFrame(() => {
289
- itemRef.scrollIntoView();
290
- });
291
- }
292
- /**
293
- * Update the information about the valid droppable zones.
294
- * @param requestTimestamp Time where the request to the server was made. Useful to avoid having old information.
295
- * @param newContainerId ID of the container where the drag is trying to be made.
296
- * @param draggedItems Information about the dragged items.
297
- * @param validDrop Current state of the droppable zone.
298
- */
299
- async updateValidDropZone(requestTimestamp, newContainerId, draggedItems, validDrop) {
300
- var _a;
301
- if (!this.draggingInTheDocument ||
302
- requestTimestamp <= this.dragStartTimestamp) {
303
- return;
304
- }
305
- const droppableZoneKey = getDroppableZoneKey(newContainerId, draggedItems);
306
- this.validDroppableZoneCache.set(droppableZoneKey, validDrop ? "valid" : "invalid");
307
- const shouldUpdateDragEnterInCurrentContainer = ((_a = this.lastOpenSubTreeItem) === null || _a === void 0 ? void 0 : _a.id) === newContainerId;
308
- if (shouldUpdateDragEnterInCurrentContainer) {
309
- this.lastOpenSubTreeItem.dragState = "enter";
310
- }
311
- }
312
- validDroppableZone(event) {
313
- const containerTarget = event.target;
314
- const cacheKey = getDroppableZoneKey(containerTarget.id, this.draggedItems);
315
- let droppableZoneState = this.validDroppableZoneCache.get(cacheKey);
316
- // Invalidate the cache, because the item is no longer waiting for its content to be downloaded
317
- if (droppableZoneState === "temporal-invalid" &&
318
- !containerTarget.lazyLoad &&
319
- !containerTarget.downloading) {
320
- droppableZoneState = null;
321
- }
322
- if (droppableZoneState != null) {
323
- return droppableZoneState;
324
- }
325
- // Do not show drop zones if:
326
- // - The effect does not allow it.
327
- // - The drop is disabled in the container target.
328
- // - When dragging in the same tree, don't mark droppable zones if they are
329
- // the dragged items or their direct parents.
330
- if (event.dataTransfer.effectAllowed === "none" ||
331
- containerTarget.dropDisabled ||
332
- (this.draggingInTree &&
333
- (this.draggedIds.includes(containerTarget.id) ||
334
- this.draggedParentIds.includes(containerTarget.id)))) {
335
- this.validDroppableZoneCache.set(cacheKey, "invalid");
336
- return "invalid";
337
- }
338
- // Disable drops when items need to lazy load their content first
339
- if (containerTarget.lazyLoad || containerTarget.downloading) {
340
- this.validDroppableZoneCache.set(cacheKey, "temporal-invalid");
341
- return "temporal-invalid";
342
- }
343
- this.validDroppableZoneCache.set(cacheKey, "checking");
344
- this.droppableZoneEnter.emit({
345
- newContainer: {
346
- id: containerTarget.id,
347
- metadata: containerTarget.metadata
348
- },
349
- draggedItems: this.draggedItems
350
- });
351
- return "checking";
352
- }
353
- openSubTreeAfterCountdown(currentTarget) {
354
- if (currentTarget.leaf || currentTarget.expanded) {
355
- return;
356
- }
357
- this.openSubTreeTimeout = setTimeout(() => {
358
- currentTarget.expanded = true;
359
- this.expandedItemChange.emit({ id: currentTarget.id, expanded: true });
360
- }, this.openSubTreeCountdown);
361
- }
362
- updateDropEffect(event) {
363
- const itemTarget = event.target;
364
- // Check if it is a valid item
365
- if (itemTarget.tagName.toLowerCase() !== TREE_ITEM_TAG_NAME ||
366
- itemTarget.closest(TREE_TAG_NAME) !== this.el) {
367
- return;
368
- }
369
- const droppableZoneState = this.validDroppableZone(event);
370
- if (droppableZoneState === "invalid" ||
371
- droppableZoneState === "temporal-invalid") {
372
- event.dataTransfer.dropEffect = "none";
373
- }
374
- }
375
- resetVariables() {
376
- this.draggedIds = [];
377
- this.draggedParentIds = [];
378
- }
379
- /**
380
- * First, it check if all items can be dragged. If so, it updates the
381
- * dataTransfer in the drag event to store the ids and metadata of the
382
- * dragged items. Also it updates the visual information of the dragged
383
- * items.
384
- * @returns If all selected items can be dragged.
385
- */
386
- checkDragValidityAndUpdateDragInfo(dragInfo) {
387
- const draggedElement = dragInfo.elem;
388
- const isDraggingSelectedItems = this.selectedItemsInfo.has(draggedElement.id);
389
- this.draggingSelectedItems = isDraggingSelectedItems;
390
- let dataTransferInfo = [];
391
- let dragIsEnabledForAllItems;
392
- if (isDraggingSelectedItems) {
393
- const selectedItemKeys = [...this.selectedItemsInfo.keys()];
394
- const selectedItemValues = [...this.selectedItemsInfo.values()];
395
- const selectedItemCount = selectedItemKeys.length;
396
- dragIsEnabledForAllItems = selectedItemValues.every(el => !el.itemRef.dragDisabled);
397
- this.draggedIds = selectedItemKeys;
398
- dataTransferInfo = selectedItemValues.map(el => ({
399
- id: el.id,
400
- metadata: el.metadata
401
- }));
402
- this.dragInfo =
403
- selectedItemCount === 1
404
- ? draggedElement.caption
405
- : selectedItemCount.toString();
406
- }
407
- else {
408
- dragIsEnabledForAllItems = !draggedElement.dragDisabled;
409
- dataTransferInfo = [
410
- { id: draggedElement.id, metadata: draggedElement.metadata }
411
- ];
412
- this.draggedIds = [draggedElement.id];
413
- this.dragInfo = draggedElement.caption;
414
- }
415
- this.getDirectParentsOfDraggableItems(isDraggingSelectedItems);
416
- // Update drag event info
417
- const data = JSON.stringify(dataTransferInfo);
418
- dragInfo.dragEvent.dataTransfer.setData(TEXT_FORMAT, data);
419
- // We must keep the data binding and processing even if there is an item
420
- // that can't be dragged, otherwise, other trees or element might behave
421
- // unexpected when a dragstart event comes
422
- return dragIsEnabledForAllItems;
423
- }
424
- getDirectParentsOfDraggableItems(draggingSelectedItems) {
425
- if (!draggingSelectedItems) {
426
- const parentTreeItemElem = this.currentDraggedItem.parentElement;
427
- if (parentTreeItemElem.tagName.toLowerCase() === TREE_ITEM_TAG_NAME) {
428
- this.draggedParentIds.push(parentTreeItemElem.id);
429
- }
430
- return;
431
- }
432
- // Dragging selected items
433
- this.selectedItemsInfo.forEach(selectedItem => {
434
- const parentId = selectedItem.parentId;
435
- // parentId === "" when the item is in the first level of the tree
436
- if (parentId !== "") {
437
- this.draggedParentIds.push(parentId);
438
- }
439
- });
440
- }
441
- handleItemSelection(selectedItemEl, selectedItemInfo) {
442
- // If the Control key was not pressed or multi selection is disabled,
443
- // remove all selected items
444
- if (!selectedItemInfo.ctrlKeyPressed || !this.multiSelection) {
445
- // Don't update the state of the selected item if no needed
446
- this.selectedItemsInfo.delete(selectedItemInfo.id);
447
- this.selectedItemsInfo.forEach(treeItem => {
448
- treeItem.itemRef.selected = false;
449
- });
450
- this.clearSelectedItems();
451
- // Re-select the item
452
- selectedItemEl.selected = selectedItemInfo.selected;
453
- }
454
- // If the item is selected, add it to list
455
- if (selectedItemInfo.selected) {
456
- this.selectedItemsInfo.set(selectedItemInfo.id, selectedItemInfo);
457
- }
458
- // Sync with UI model
459
- this.selectedItemsChange.emit(this.selectedItemsInfo);
460
- }
461
- clearSelectedItems() {
462
- this.selectedItemsInfo.clear();
463
- }
464
- disconnectedCallback() {
465
- this.resetVariables();
466
- // Remove dragover body event
467
- this.handleItemDragEnd();
468
- }
469
- render() {
470
- return (h(Host, { class: {
471
- "ch-tree-x-dragging-item": this.draggingInTheDocument,
472
- "ch-tree-x-not-dragging-item": !this.draggingInTheDocument,
473
- "ch-tree-x--dragging-selected-items": this.draggingInTree && this.draggingSelectedItems,
474
- "ch-tree-x-waiting-drop-processing": this.waitDropProcessing
475
- } }, 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))));
476
- }
477
- get el() { return this; }
478
- static get style() { return treeXCss; }
479
- }, [4, "ch-tree-x", {
480
- "multiSelection": [4, "multi-selection"],
481
- "openSubTreeCountdown": [2, "open-sub-tree-countdown"],
482
- "scrollToEdgeOnDrag": [4, "scroll-to-edge-on-drag"],
483
- "waitDropProcessing": [4, "wait-drop-processing"],
484
- "draggingInTheDocument": [32],
485
- "draggingInTree": [32],
486
- "clearSelectedItemsInfo": [64],
487
- "scrollIntoVisible": [64],
488
- "updateValidDropZone": [64]
489
- }, [[2, "contextmenu", "handleContextMenuEvent"], [2, "keydown", "handleKeyDownEvents"], [9, "dragstart", "handleDragStart"], [11, "dragend", "handleDragEnd"], [3, "dragenter", "handleDragEnter"], [3, "dragleave", "handleDragLeave"], [1, "drop", "handleItemDrop"], [0, "itemDragStart", "handleItemDragStart"], [0, "itemDragEnd", "handleItemDragEnd"], [0, "selectedItemSync", "handleSelectedItemSync"], [0, "selectedItemChange", "handleSelectedItemChange"]]]);
490
- function defineCustomElement() {
491
- if (typeof customElements === "undefined") {
492
- return;
493
- }
494
- const components = ["ch-tree-x"];
495
- components.forEach(tagName => { switch (tagName) {
496
- case "ch-tree-x":
497
- if (!customElements.get(tagName)) {
498
- customElements.define(tagName, ChTreeX);
499
- }
500
- break;
501
- } });
502
- }
503
-
504
- export { ChTreeX as C, defineCustomElement as d };
@@ -1,89 +0,0 @@
1
- import { r as registerInstance, c as createEvent, h, H as Host, g as getElement } from './index-0da01575.js';
2
- import { D as DISABLED_CLASS } from './reserverd-names-2a2d0fb3.js';
3
-
4
- 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)}";
5
-
6
- const CHECKBOX_ID = "checkbox";
7
- const PARTS = (checked, indeterminate) => `${checked ? " checked" : ""}${indeterminate ? " indeterminate" : ""}`;
8
- const CheckBox = class {
9
- constructor(hostRef) {
10
- registerInstance(this, hostRef);
11
- this.click = createEvent(this, "click", 7);
12
- this.input = createEvent(this, "input", 7);
13
- /**
14
- * This attribute lets you specify if the element is disabled.
15
- * If disabled, it will not fire any user interaction related event
16
- * (for example, click event).
17
- */
18
- this.disabled = false;
19
- /**
20
- * True to highlight control when an action is fired.
21
- */
22
- this.highlightable = false;
23
- /**
24
- * `true` if the control's value is indeterminate.
25
- */
26
- this.indeterminate = false;
27
- /**
28
- * This attribute indicates that the user cannot modify the value of the control.
29
- * Same as [readonly](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#attr-readonly)
30
- * attribute for `input` elements.
31
- */
32
- this.readonly = false;
33
- this.getValue = (checked) => checked ? this.checkedValue : this.unCheckedValue;
34
- /**
35
- * Checks if it is necessary to prevent the click from bubbling
36
- */
37
- this.handleClick = (event) => {
38
- if (this.readonly || this.disabled) {
39
- return;
40
- }
41
- event.stopPropagation();
42
- };
43
- this.handleChange = (event) => {
44
- event.stopPropagation();
45
- const inputRef = event.target;
46
- const checked = inputRef.checked;
47
- const value = this.getValue(checked);
48
- this.checked = checked;
49
- this.value = value;
50
- inputRef.value = value; // Update input's value before emitting the event
51
- this.input.emit(event);
52
- if (this.highlightable) {
53
- this.click.emit();
54
- }
55
- };
56
- }
57
- valueChanged() {
58
- this.checked = this.value === this.checkedValue;
59
- }
60
- componentWillLoad() {
61
- this.checked = this.value === this.checkedValue;
62
- }
63
- render() {
64
- var _a;
65
- const additionalParts = PARTS(this.checked, this.indeterminate);
66
- return (h(Host, { class: {
67
- [DISABLED_CLASS]: this.disabled,
68
- "ch-checkbox--actionable": (!this.readonly && !this.disabled) ||
69
- (this.readonly && this.highlightable)
70
- } }, h("div", { class: {
71
- container: true,
72
- "container--checked": this.checked
73
- }, part: `container${additionalParts}` }, h("input", { "aria-label": ((_a = this.accessibleName) === null || _a === void 0 ? void 0 : _a.trim()) !== "" &&
74
- this.accessibleName !== this.caption
75
- ? this.accessibleName
76
- : null, id: this.caption ? CHECKBOX_ID : null, class: "input", part: "input", type: "checkbox", checked: this.checked, disabled: this.disabled || this.readonly, indeterminate: this.indeterminate, value: this.value, onClick: this.handleClick, onInput: this.handleChange }), h("div", { class: {
77
- option: true,
78
- "option--checked": this.checked && !this.indeterminate,
79
- "option--indeterminate": this.indeterminate
80
- }, part: `option${additionalParts}`, "aria-hidden": "true" })), this.caption && (h("label", { class: "label", part: "label", htmlFor: CHECKBOX_ID, onClick: this.handleClick }, this.caption))));
81
- }
82
- get element() { return getElement(this); }
83
- static get watchers() { return {
84
- "value": ["valueChanged"]
85
- }; }
86
- };
87
- CheckBox.style = checkboxCss;
88
-
89
- export { CheckBox as ch_checkbox };