@genexus/genexus-ide-ui 0.0.57 → 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 (73) hide show
  1. package/dist/cjs/{ch-checkbox_4.cjs.entry.js → ch-checkbox_3.cjs.entry.js} +54 -43
  2. package/dist/cjs/ch-suggest_4.cjs.entry.js +2 -2
  3. package/dist/cjs/ch-test-suggest.cjs.entry.js +84 -0
  4. package/dist/cjs/ch-test-tree-x.cjs.entry.js +31 -16
  5. package/dist/cjs/ch-tooltip.cjs.entry.js +85 -0
  6. package/dist/cjs/genexus-ide-ui.cjs.js +1 -1
  7. package/dist/cjs/gx-ide-references.cjs.entry.js +76 -116
  8. package/dist/cjs/gx-ide-test.cjs.entry.js +51 -5
  9. package/dist/cjs/gxg-label_2.cjs.entry.js +15 -2
  10. package/dist/cjs/gxg-tree-view.cjs.entry.js +36 -14
  11. package/dist/cjs/loader.cjs.js +1 -1
  12. package/dist/collection/collection-manifest.json +2 -1
  13. package/dist/collection/common/helpers.js +3 -0
  14. package/dist/collection/components/references/helpers.js +16 -19
  15. package/dist/collection/components/references/references.css +8 -0
  16. package/dist/collection/components/references/references.js +60 -98
  17. package/dist/components/ch-suggest2.js +2 -2
  18. package/dist/components/ch-test-suggest.js +119 -0
  19. package/dist/components/ch-test-tree-x.js +38 -28
  20. package/dist/components/ch-tooltip.js +115 -0
  21. package/dist/components/gx-ide-references.js +122 -150
  22. package/dist/components/gx-ide-test.js +48 -2
  23. package/dist/components/gxg-tree-view.js +1 -434
  24. package/dist/components/index.js +2 -1
  25. package/dist/components/tooltip.js +17 -3
  26. package/dist/components/tree-view.js +453 -0
  27. package/dist/components/tree-x-list-item.js +35 -23
  28. package/dist/components/tree-x.js +21 -7
  29. package/dist/esm/{ch-checkbox_4.entry.js → ch-checkbox_3.entry.js} +55 -43
  30. package/dist/esm/ch-suggest_4.entry.js +2 -2
  31. package/dist/esm/ch-test-suggest.entry.js +80 -0
  32. package/dist/esm/ch-test-tree-x.entry.js +32 -17
  33. package/dist/esm/ch-tooltip.entry.js +81 -0
  34. package/dist/esm/genexus-ide-ui.js +1 -1
  35. package/dist/esm/gx-ide-references.entry.js +76 -116
  36. package/dist/esm/gx-ide-test.entry.js +48 -2
  37. package/dist/esm/gxg-label_2.entry.js +15 -2
  38. package/dist/esm/gxg-tree-view.entry.js +37 -15
  39. package/dist/esm/loader.js +1 -1
  40. package/dist/genexus-ide-ui/genexus-ide-ui.esm.js +1 -1
  41. package/dist/genexus-ide-ui/p-109209dc.entry.js +1 -0
  42. package/dist/genexus-ide-ui/p-123b8351.entry.js +1 -0
  43. package/dist/genexus-ide-ui/p-71c6da54.entry.js +1 -0
  44. package/dist/genexus-ide-ui/p-86b98a99.entry.js +1 -0
  45. package/dist/genexus-ide-ui/p-cd00ba19.entry.js +1 -0
  46. package/dist/genexus-ide-ui/p-ce9fef1a.entry.js +1 -0
  47. package/dist/genexus-ide-ui/p-d47ed4e3.entry.js +1 -0
  48. package/dist/genexus-ide-ui/p-d7b452ef.entry.js +1 -0
  49. package/dist/genexus-ide-ui/p-f62d9b6d.entry.js +1 -0
  50. package/dist/node_modules/@genexus/chameleon-controls-library/dist/collection/components/test/test-suggest/test-suggest.css +114 -0
  51. package/dist/node_modules/@genexus/chameleon-controls-library/dist/collection/components/tooltip/tooltip.css +120 -0
  52. package/dist/node_modules/@genexus/chameleon-controls-library/dist/collection/components/{tree-x → tree-view/tree-x}/tree-x.css +2 -3
  53. 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 +3 -6
  54. package/dist/node_modules/@genexus/gemini/dist/collection/components/tooltip/tooltip.css +11 -0
  55. package/dist/node_modules/@genexus/gemini/dist/collection/components/tree-view/tree-view.css +58 -12
  56. package/dist/types/common/helpers.d.ts +1 -0
  57. package/dist/types/components/references/helpers.d.ts +3 -3
  58. package/dist/types/components/references/references.d.ts +7 -19
  59. package/package.json +3 -3
  60. package/dist/cjs/update-tree-model-8b154db1.js +0 -53
  61. package/dist/components/ch-tree-x-list.js +0 -6
  62. package/dist/components/tree-x-list.js +0 -31
  63. package/dist/components/update-tree-model.js +0 -50
  64. package/dist/esm/update-tree-model-6c612f05.js +0 -50
  65. package/dist/genexus-ide-ui/p-1f3a81e3.entry.js +0 -1
  66. package/dist/genexus-ide-ui/p-46d393f5.entry.js +0 -1
  67. package/dist/genexus-ide-ui/p-5669baf5.entry.js +0 -1
  68. package/dist/genexus-ide-ui/p-60b2bd2f.entry.js +0 -1
  69. package/dist/genexus-ide-ui/p-71ecc7fd.js +0 -1
  70. package/dist/genexus-ide-ui/p-c7425416.entry.js +0 -1
  71. package/dist/genexus-ide-ui/p-dd2e0590.entry.js +0 -1
  72. package/dist/genexus-ide-ui/p-ed5cf480.entry.js +0 -1
  73. package/dist/node_modules/@genexus/chameleon-controls-library/dist/collection/components/tree-x-list/tree-x-list.css +0 -6
@@ -1,437 +1,4 @@
1
- import { proxyCustomElement, HTMLElement, h, forceUpdate, Host } from '@stencil/core/internal/client';
2
- import { d as defineCustomElement$5 } from './checkbox.js';
3
- import { d as defineCustomElement$4 } from './tree-x.js';
4
- import { d as defineCustomElement$3 } from './tree-x-list.js';
5
- import { d as defineCustomElement$2 } from './tree-x-list-item.js';
6
-
7
- const treeViewCss = ":root{--ui-animaton-speed:0.2s}.gxg-title-01{font-family:var(--font-family-primary);font-weight:var(--font-weight-bold);font-size:var(--font-size-md);letter-spacing:var(--letter-spacing-md);color:var(--color-on-background);text-align:start;line-height:1.455em}.gxg-title-01--negative{font-family:var(--font-family-primary);font-weight:var(--font-weight-bold);font-size:var(--font-size-md);letter-spacing:var(--letter-spacing-md);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--color-on-primary)}.gxg-title-02{font-family:var(--font-family-primary);font-weight:var(--font-weight-bold);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-sm);color:var(--color-on-background);text-align:start;text-transform:uppercase;line-height:1.556em}.gxg-title-02--negative{font-family:var(--font-family-primary);font-weight:var(--font-weight-bold);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-sm);color:var(--color-on-background);text-align:start;text-transform:uppercase;line-height:1.556em;color:var(--color-on-primary)}.gxg-title-03{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-xs);letter-spacing:var(--letter-spacing-sm);color:var(--color-on-background);text-align:start;text-transform:uppercase;line-height:1.556em}.gxg-title-03--negative{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-xs);letter-spacing:var(--letter-spacing-sm);color:var(--color-on-background);text-align:start;text-transform:uppercase;line-height:1.556em;color:var(--color-on-primary)}.gxg-title-04{font-family:var(--font-family-primary);font-weight:var(--font-weight-semibold);font-size:var(--font-size-md);letter-spacing:var(--letter-spacing-md);color:var(--color-on-background);text-align:start;line-height:1.455em}.gxg-title-04--negative{font-family:var(--font-family-primary);font-weight:var(--font-weight-semibold);font-size:var(--font-size-md);letter-spacing:var(--letter-spacing-md);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--color-on-primary)}.gxg-title-05{font-family:var(--font-family-primary);font-weight:var(--font-weight-semibold);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-sm);color:var(--color-on-background);text-align:start;line-height:1.556em}.gxg-title-05--negative{font-family:var(--font-family-primary);font-weight:var(--font-weight-semibold);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-sm);color:var(--color-on-background);text-align:start;line-height:1.556em;color:var(--color-on-primary)}.gxg-text{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em}.gxg-text--negative{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--color-on-primary)}.gxg-text--gray{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--gray-05)}.gxg-quote{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em;font-style:italic}.gxg-quote--negative{color:var(--color-on-primary)}.gxg-link{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--color-primary);text-decoration:underline;cursor:pointer;display:inline-block}.gxg-link:hover{color:var(--color-primary-hover)}.gxg-link:active{color:var(--color-primary-active)}.gxg-link-gray{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--color-primary);text-decoration:underline;cursor:pointer;display:inline-block;color:var(--gray-04)}.gxg-link-gray:hover{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--color-primary);text-decoration:underline;cursor:pointer;display:inline-block;color:var(--gray-04);color:var(--gray-06)}.gxg-alert-error{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--color-error-dark);display:inline-block}.gxg-alert-warning{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--color-warning-dark);display:inline-block}.gxg-alert-success{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--color-success-dark);display:inline-block}.gxg-tab--disabled{color:var(--color-primary-disabled);pointer-events:none}.gxg-tab--disabled[disabled]{color:var(--color-primary-disabled);pointer-events:none}.gxg-label{font-family:var(--font-family-primary) !important;font-weight:var(--font-weight-semibold);font-size:var(--font-size-sm) !important;letter-spacing:var(--letter-spacing-xs);color:var(--color-primary-enabled);text-align:center;line-height:1.455em}.gxg-label:hover{color:var(--color-primary-hover)}.gxg-label:focus{color:var(--color-primary-active)}.gxg-label:active{color:var(--color-primary-active)}.gxg-label[disabled]{color:var(--color-primary-disabled)}.gxg-label--negative{color:var(--color-on-primary)}.gxg-label--negative[disabled]{color:var(--color-on-disabled)}.gxg-button-styles{font-family:var(--font-family-primary) !important;font-weight:var(--font-weight-semibold);font-size:var(--font-size-sm) !important;letter-spacing:var(--letter-spacing-xs);color:var(--color-primary-enabled);text-align:center;line-height:1.455em}.gxg-scrollbar{}.gxg-scrollbar::-webkit-scrollbar{width:6px;height:6px}.gxg-scrollbar::-webkit-scrollbar-track{background-color:var(--gray-02);border-radius:10px}.gxg-scrollbar::-webkit-scrollbar-thumb{background:var(--gray-05);border-radius:10px}.gxg-scrollbar::-webkit-scrollbar-thumb:hover{background:var(--gray-04);cursor:pointer}gxg-tree-view{display:grid;grid-template-columns:1fr;grid-template-rows:1fr;height:100%;font-family:var(--font-family-primary);font-size:var(--font-size-lg);font-weight:var(--font-weight-regular);color:var(--color-on-background)}.tree-buttons{display:grid;grid-auto-rows:max-content;row-gap:8px}ch-tree-x-list-item{--expandable-button-width:var(--spacing-comp-04)}ch-tree-x-list-item::part(header){padding-inline-end:calc(var(--spacing-comp-02) * 0.65);border:1px solid transparent;height:var(--spacing-comp-05)}ch-tree-x-list-item::part(header):focus{outline-style:solid;outline-color:var(--gxg-border-color--focused);outline-width:var(--border-width-md);outline-offset:-2px}ch-tree-x-list-item[selected]::part(header){background-color:var(--gxg-background-color--selected);outline-style:solid;outline-color:var(--gxg-border-color--focused);outline-width:var(--border-width-md);outline-offset:-2px}ch-tree-x-list-item[selected]::part(header):hover{background-color:var(--gxg-background-color--selected-hover)}ch-tree-x-list-item::part(expandable-button){background-color:var(--color-hover);margin-inline-start:var(--spacing-comp-01)}ch-tree-x-list-item::part(expandable-button)::before{background-color:var(--gray-04);-webkit-mask-position:center;-webkit-mask-repeat:no-repeat}ch-tree-x-list-item::part(expandable-button):hover{background-color:var(--color-background)}ch-tree-x-list-item::part(expandable-button):focus{outline-style:solid;outline-color:var(--gxg-border-color--focused);outline-width:var(--border-width-md);outline-offset:0}ch-tree-x-list-item::part(action){text-transform:capitalize}ch-tree-x-list-item::part(left-img){width:var(--spacing-comp-04);height:var(--spacing-comp-04)}ch-tree-x-list-item::part(downloading){width:var(--spacing-comp-03);height:var(--spacing-comp-03);border:var(--border-width-md) solid var(--color-primary-enabled);border-inline-start-color:transparent}.ch-tree-x-drag-info{padding-inline:6px;padding-block:2px;background-color:#cfdee6;border:1px solid #0266a0;border-radius:10px;font-size:8px}";
8
-
9
- const DEFAULT_DRAG_DISABLED_VALUE = false;
10
- const DEFAULT_DROP_DISABLED_VALUE = false;
11
- const DEFAULT_EXPANDED_VALUE = false;
12
- const DEFAULT_INDETERMINATE_VALUE = false;
13
- const DEFAULT_LAZY_VALUE = false;
14
- const DEFAULT_SELECTED_VALUE = false;
15
- const GxgTreeView$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
16
- constructor() {
17
- super();
18
- this.__registerHost();
19
- // UI Models
20
- this.flattenedTreeModel = new Map();
21
- this.selectedItems = new Set();
22
- this.flattenedLazyTreeModel = new Map();
23
- /**
24
- * This property lets you specify if the tree is waiting to process the drop
25
- * of items.
26
- */
27
- this.waitDropProcessing = false;
28
- /**
29
- * This attribute lets you specify if the drag operation is disabled in all
30
- * items by default. If `true`, the control can't be dragged.
31
- */
32
- this.dragDisabled = DEFAULT_DRAG_DISABLED_VALUE;
33
- /**
34
- * This attribute lets you specify if the drop operation is disabled in all
35
- * items by default. If `true`, the control won't accept any drops.
36
- */
37
- this.dropDisabled = DEFAULT_DROP_DISABLED_VALUE;
38
- /**
39
- * This property lets you define the model of the ch-tree-x control.
40
- */
41
- this.treeModel = [];
42
- /**
43
- * Set this attribute if you want to allow multi selection of the items.
44
- */
45
- this.multiSelection = false;
46
- /**
47
- * `true` to display the relation between tree items and tree lists using
48
- * lines.
49
- */
50
- this.showLines = "all";
51
- this.handleDroppableZoneEnter = (event) => {
52
- if (!this.checkDroppableZoneCallback) {
53
- return;
54
- }
55
- event.stopPropagation();
56
- // Suppose the request is made immediately by executing the callback
57
- const requestTimestamp = new Date().getTime();
58
- const dropInformation = event.detail;
59
- const promise = this.checkDroppableZoneCallback(dropInformation);
60
- promise.then((validDrop) => {
61
- this.updateValidDropZone(requestTimestamp, dropInformation.newContainer.id, dropInformation.draggedItems, validDrop);
62
- });
63
- };
64
- this.handleSelectedItemsChange = (event) => {
65
- const itemsToProcess = new Map(event.detail);
66
- // Remove no longer selected items
67
- this.selectedItems.forEach((selectedItemId) => {
68
- const itemUIModel = this.flattenedTreeModel.get(selectedItemId).item;
69
- const itemIsStillSelected = itemsToProcess.get(selectedItemId);
70
- // The item does not need to be added. Remove it from the processed list
71
- if (itemIsStillSelected) {
72
- itemUIModel.expanded = itemIsStillSelected.expanded; // Update expanded state
73
- itemsToProcess.delete(selectedItemId);
74
- }
75
- // The item must be un-selected in the UI Model
76
- else {
77
- itemUIModel.selected = false;
78
- this.selectedItems.delete(selectedItemId);
79
- }
80
- });
81
- // Add new selected items
82
- itemsToProcess.forEach((newSelectedItemInfo, itemId) => {
83
- const newSelectedItem = this.flattenedTreeModel.get(itemId).item;
84
- newSelectedItem.selected = true;
85
- newSelectedItem.expanded = newSelectedItemInfo.expanded;
86
- this.selectedItems.add(itemId);
87
- });
88
- };
89
- this.handleExpandedItemChange = (event) => {
90
- const detail = event.detail;
91
- const itemInfo = this.flattenedTreeModel.get(detail.id).item;
92
- itemInfo.expanded = detail.expanded;
93
- };
94
- this.handleItemsDropped = (event) => {
95
- if (!this.dropItemsCallback) {
96
- return;
97
- }
98
- event.stopPropagation();
99
- const dataTransferInfo = event.detail;
100
- const newContainer = dataTransferInfo.newContainer;
101
- const newParentId = newContainer.id;
102
- // Check if the parent exists in the UI Model
103
- if (!this.flattenedTreeModel.get(newParentId)) {
104
- return;
105
- }
106
- const draggedItems = dataTransferInfo.draggedItems;
107
- if (draggedItems.length === 0) {
108
- return;
109
- }
110
- const promise = this.dropItemsCallback(dataTransferInfo);
111
- this.waitDropProcessing = true;
112
- promise.then(async (response) => {
113
- this.waitDropProcessing = false;
114
- if (!response.acceptDrop) {
115
- return;
116
- }
117
- const newParentUIModel = this.flattenedTreeModel.get(newParentId).item;
118
- // Only move the items to the new parent, keeping the state
119
- if (dataTransferInfo.dropInTheSameTree) {
120
- // Add the UI models to the new container and remove the UI models from
121
- // the old containers
122
- draggedItems.forEach(this.moveItemToNewParent(newParentUIModel));
123
- // When the selected items are moved, the tree must remove its internal
124
- // state to not have undefined references
125
- if (dataTransferInfo.draggingSelectedItems) {
126
- await this.treeRef.clearSelectedItemsInfo();
127
- }
128
- }
129
- // Add the new items
130
- else {
131
- if (response.items == null) {
132
- return;
133
- }
134
- // Add new items to the parent
135
- newParentUIModel.items.push(...response.items);
136
- // Flatten the new UI models
137
- response.items.forEach(this.flattenItemUIModel(newParentUIModel));
138
- }
139
- this.sortItems(newParentUIModel.items);
140
- // Open the item to visualize the new subitems
141
- newParentUIModel.expanded = true;
142
- // There is no need to force and update, since the waitDropProcessing
143
- // prop was modified
144
- });
145
- };
146
- this.moveItemToNewParent = (newParentUIModel) => (dataTransferInfo) => {
147
- const itemUIModelExtended = this.flattenedTreeModel.get(dataTransferInfo.id);
148
- const item = itemUIModelExtended.item;
149
- const oldParentItem = itemUIModelExtended.parentItem;
150
- // Remove the UI model from the previous parent
151
- oldParentItem.items.splice(oldParentItem.items.indexOf(item), 1);
152
- // Add the UI Model to the new parent
153
- newParentUIModel.items.push(item);
154
- // Reference the new parent in the item
155
- itemUIModelExtended.parentItem = newParentUIModel;
156
- };
157
- this.renderSubModel = (treeSubModel, lastItem, level) => {
158
- var _a, _b;
159
- return (h("ch-tree-x-list-item", { id: treeSubModel.id, caption: treeSubModel.caption, checkbox: treeSubModel.checkbox, checked: treeSubModel.checked, class: treeSubModel.class, disabled: treeSubModel.disabled, downloading: treeSubModel.downloading, dragDisabled: (_a = treeSubModel.dragDisabled) !== null && _a !== void 0 ? _a : this.dragDisabled, dropDisabled: (_b = treeSubModel.dropDisabled) !== null && _b !== void 0 ? _b : this.dropDisabled, expanded: treeSubModel.expanded, indeterminate: treeSubModel.indeterminate, lastItem: lastItem, lazyLoad: treeSubModel.lazy, leaf: treeSubModel.leaf, leftImgSrc: treeSubModel.leftImgSrc, level: level, metadata: treeSubModel.metadata, rightImgSrc: treeSubModel.rightImgSrc, selected: treeSubModel.selected, showExpandableButton: treeSubModel.showExpandableButton, showLines: this.showLines, toggleCheckboxes: treeSubModel.toggleCheckboxes }, !treeSubModel.leaf &&
160
- treeSubModel.items != null &&
161
- treeSubModel.items.length !== 0 && (h("ch-tree-x-list", { slot: "tree" }, treeSubModel.items.map((subModel, index) => this.renderSubModel(subModel, this.showLines && index === treeSubModel.items.length - 1, level + 1))))));
162
- };
163
- this.flattenItemUIModel = (parentModel) => (item) => {
164
- this.flattenedTreeModel.set(item.id, {
165
- parentItem: parentModel,
166
- item: item,
167
- });
168
- // Make sure the properties are with their default values to avoid issues
169
- // when reusing DOM nodes
170
- item.expanded =
171
- item.expanded == null ? DEFAULT_EXPANDED_VALUE : item.expanded;
172
- item.indeterminate =
173
- item.indeterminate == null
174
- ? DEFAULT_INDETERMINATE_VALUE
175
- : item.indeterminate;
176
- item.lazy = item.lazy == null ? DEFAULT_LAZY_VALUE : item.lazy;
177
- item.selected =
178
- item.selected == null ? DEFAULT_SELECTED_VALUE : item.selected;
179
- if (item.lazy) {
180
- this.flattenedLazyTreeModel.set(item.id, item);
181
- }
182
- if (item.selected) {
183
- this.selectedItems.add(item.id);
184
- }
185
- this.flattenSubModel(item);
186
- };
187
- }
188
- handleTreeModelChange() {
189
- this.flattenModel();
190
- }
191
- /**
192
- * Given an item id, an array of items to add, the download status and the
193
- * lazy state, updates the item's UI Model.
194
- */
195
- async loadLazyContent(itemId, items, downloading = false, lazy = false) {
196
- const itemToLazyLoadContent = this.flattenedLazyTreeModel.get(itemId);
197
- // Establish that the content was lazy loaded
198
- this.flattenedLazyTreeModel.delete(itemId);
199
- itemToLazyLoadContent.downloading = downloading;
200
- itemToLazyLoadContent.lazy = lazy;
201
- // Check if there is items to add
202
- if (items == null) {
203
- return;
204
- }
205
- // @todo What happens in the server when dropping items on a lazy node?
206
- itemToLazyLoadContent.items = items;
207
- this.sortItems(itemToLazyLoadContent.items);
208
- this.flattenSubModel(itemToLazyLoadContent);
209
- // Force re-render
210
- forceUpdate(this);
211
- }
212
- /**
213
- * Given an item id, it displays and scrolls into the item view.
214
- */
215
- async scrollIntoVisible(treeItemId) {
216
- const itemUIModel = this.flattenedTreeModel.get(treeItemId);
217
- if (!itemUIModel) {
218
- // @todo Check if the item is on the server?
219
- return;
220
- }
221
- let visitedNode = itemUIModel.parentItem;
222
- // While the parent is not the root, update the UI Models
223
- while (visitedNode && visitedNode.id != null) {
224
- // Expand the item
225
- visitedNode.expanded = true;
226
- const visitedNodeUIModel = this.flattenedTreeModel.get(visitedNode.id);
227
- visitedNode = visitedNodeUIModel.parentItem;
228
- }
229
- forceUpdate(this);
230
- // @todo For some reason, when the model is created using the "big model" option,
231
- // this implementation does not work when only the UI Model is updated. So, to
232
- // expand the items, we have to delegate the responsibility to the tree-x
233
- this.treeRef.scrollIntoVisible(treeItemId);
234
- }
235
- /**
236
- * This method is used to toggle a tree item by the tree item id/ids.
237
- *
238
- * @param treeItemIds An array id the tree items to be toggled.
239
- * @param expand A boolean indicating that the tree item should be expanded or collapsed. (optional)
240
- * @returns The modified items after the method was called.
241
- */
242
- async toggleItems(treeItemIds, expand) {
243
- if (!treeItemIds) {
244
- return [];
245
- }
246
- const modifiedTreeItems = [];
247
- treeItemIds.forEach((treeItemId) => {
248
- const itemInfo = this.flattenedTreeModel.get(treeItemId).item;
249
- if (itemInfo) {
250
- itemInfo.expanded = expand !== null && expand !== void 0 ? expand : !itemInfo.expanded;
251
- modifiedTreeItems.push({
252
- id: itemInfo.id,
253
- expanded: itemInfo.expanded,
254
- });
255
- }
256
- });
257
- // Force re-render
258
- forceUpdate(this);
259
- return modifiedTreeItems;
260
- }
261
- /**
262
- * Given a subset of item's properties, it updates all item UI models.
263
- */
264
- async updateAllItemsProperties(properties) {
265
- [...this.flattenedTreeModel.values()].forEach((itemUIModel) => {
266
- if (properties.expanded != null) {
267
- itemUIModel.item.expanded = properties.expanded;
268
- }
269
- if (properties.checked != null) {
270
- itemUIModel.item.checked = properties.checked;
271
- itemUIModel.item.indeterminate = false;
272
- }
273
- });
274
- forceUpdate(this);
275
- }
276
- /**
277
- * Given a item list and the properties to update, it updates the properties
278
- * of the items in the list.
279
- */
280
- async updateItemsProperties(items, properties) {
281
- items.forEach((item) => {
282
- const itemUIModel = this.flattenedTreeModel.get(item);
283
- this.updateItemProperty(itemUIModel, properties);
284
- });
285
- forceUpdate(this);
286
- }
287
- /**
288
- * Update the information about the valid droppable zones.
289
- * @param requestTimestamp Time where the request to the server was made. Useful to avoid having old information.
290
- * @param newContainerId ID of the container where the drag is trying to be made.
291
- * @param draggedItems Information about the dragged items.
292
- * @param validDrop Current state of the droppable zone.
293
- */
294
- async updateValidDropZone(requestTimestamp, newContainerId, draggedItems, validDrop) {
295
- this.treeRef.updateValidDropZone(requestTimestamp, newContainerId, draggedItems, validDrop);
296
- }
297
- updateItemProperty(itemUIModel, properties) {
298
- if (!itemUIModel) {
299
- return;
300
- }
301
- const itemInfo = itemUIModel.item;
302
- Object.keys(properties).forEach((propertyName) => {
303
- itemInfo[propertyName] = properties[propertyName];
304
- });
305
- }
306
- loadLazyChildrenHandler(event) {
307
- if (!this.lazyLoadTreeItemsCallback) {
308
- return;
309
- }
310
- event.stopPropagation();
311
- const treeItemId = event.detail;
312
- const promise = this.lazyLoadTreeItemsCallback(treeItemId);
313
- event.target.downloading = true;
314
- promise.then((result) => {
315
- this.loadLazyContent(treeItemId, result);
316
- });
317
- }
318
- handleCaptionModification(event) {
319
- if (!this.modifyItemCaptionCallback) {
320
- return;
321
- }
322
- event.stopPropagation();
323
- const itemRef = event.target;
324
- const itemId = event.detail.id;
325
- const itemUIModel = this.flattenedTreeModel.get(itemId);
326
- const itemInfo = itemUIModel.item;
327
- const newCaption = event.detail.caption;
328
- const oldCaption = itemInfo.caption;
329
- // Optimistic UI: Update the caption in the UI Model before the change is
330
- // completed in the server
331
- itemInfo.caption = newCaption;
332
- // Due to performance reasons, we don't make a shallow copy of the
333
- // treeModel to force a re-render
334
- itemRef.caption = newCaption;
335
- const promise = this.modifyItemCaptionCallback(itemId, newCaption);
336
- promise.then((status) => {
337
- if (status.success) {
338
- this.sortItems(itemUIModel.parentItem.items);
339
- // Force re-render
340
- forceUpdate(this);
341
- }
342
- else {
343
- itemRef.caption = oldCaption;
344
- itemInfo.caption = oldCaption;
345
- // Do something with the error message
346
- }
347
- });
348
- }
349
- flattenSubModel(model) {
350
- const items = model.items;
351
- if (!items) {
352
- // Make sure that subtrees don't have an undefined array
353
- if (model.leaf === false) {
354
- model.items = [];
355
- }
356
- return;
357
- }
358
- this.sortItems(items);
359
- items.forEach(this.flattenItemUIModel(model));
360
- }
361
- sortItems(items) {
362
- // Ensure that items are sorted
363
- if (this.sortItemsCallback) {
364
- this.sortItemsCallback(items);
365
- }
366
- }
367
- flattenModel() {
368
- this.flattenedTreeModel.clear();
369
- this.flattenedLazyTreeModel.clear();
370
- this.flattenSubModel({ id: null, caption: null, items: this.treeModel });
371
- }
372
- componentWillLoad() {
373
- this.flattenModel();
374
- }
375
- render() {
376
- return (h(Host, null, h("ch-tree-x", { class: this.cssClass || null, multiSelection: this.multiSelection, waitDropProcessing: this.waitDropProcessing, onDroppableZoneEnter: this.handleDroppableZoneEnter, onExpandedItemChange: this.handleExpandedItemChange, onItemsDropped: this.handleItemsDropped, onSelectedItemsChange: this.handleSelectedItemsChange, ref: (el) => (this.treeRef = el) }, this.treeModel.map((subModel, index) => this.renderSubModel(subModel, this.showLines && index === this.treeModel.length - 1, 0)))));
377
- }
378
- static get watchers() { return {
379
- "treeModel": ["handleTreeModelChange"]
380
- }; }
381
- static get style() { return treeViewCss; }
382
- }, [0, "gxg-tree-view", {
383
- "checkDroppableZoneCallback": [16],
384
- "cssClass": [1, "css-class"],
385
- "dragDisabled": [4, "drag-disabled"],
386
- "dropDisabled": [4, "drop-disabled"],
387
- "dropItemsCallback": [16],
388
- "treeModel": [16],
389
- "lazyLoadTreeItemsCallback": [16],
390
- "modifyItemCaptionCallback": [16],
391
- "multiSelection": [4, "multi-selection"],
392
- "showLines": [1, "show-lines"],
393
- "sortItemsCallback": [16],
394
- "waitDropProcessing": [32],
395
- "loadLazyContent": [64],
396
- "scrollIntoVisible": [64],
397
- "toggleItems": [64],
398
- "updateAllItemsProperties": [64],
399
- "updateItemsProperties": [64],
400
- "updateValidDropZone": [64]
401
- }, [[0, "loadLazyContent", "loadLazyChildrenHandler"], [0, "modifyCaption", "handleCaptionModification"]]]);
402
- function defineCustomElement$1() {
403
- if (typeof customElements === "undefined") {
404
- return;
405
- }
406
- const components = ["gxg-tree-view", "ch-checkbox", "ch-tree-x", "ch-tree-x-list", "ch-tree-x-list-item"];
407
- components.forEach(tagName => { switch (tagName) {
408
- case "gxg-tree-view":
409
- if (!customElements.get(tagName)) {
410
- customElements.define(tagName, GxgTreeView$1);
411
- }
412
- break;
413
- case "ch-checkbox":
414
- if (!customElements.get(tagName)) {
415
- defineCustomElement$5();
416
- }
417
- break;
418
- case "ch-tree-x":
419
- if (!customElements.get(tagName)) {
420
- defineCustomElement$4();
421
- }
422
- break;
423
- case "ch-tree-x-list":
424
- if (!customElements.get(tagName)) {
425
- defineCustomElement$3();
426
- }
427
- break;
428
- case "ch-tree-x-list-item":
429
- if (!customElements.get(tagName)) {
430
- defineCustomElement$2();
431
- }
432
- break;
433
- } });
434
- }
1
+ import { G as GxgTreeView$1, d as defineCustomElement$1 } from './tree-view.js';
435
2
 
436
3
  const GxgTreeView = GxgTreeView$1;
437
4
  const defineCustomElement = defineCustomElement$1;
@@ -49,13 +49,14 @@ export { ChSuggestList, defineCustomElement as defineCustomElementChSuggestList
49
49
  export { ChSuggestListItem, defineCustomElement as defineCustomElementChSuggestListItem } from './ch-suggest-list-item.js';
50
50
  export { ChTestActionGroup, defineCustomElement as defineCustomElementChTestActionGroup } from './ch-test-action-group.js';
51
51
  export { ChTestDropdown, defineCustomElement as defineCustomElementChTestDropdown } from './ch-test-dropdown.js';
52
+ export { ChTestSuggest, defineCustomElement as defineCustomElementChTestSuggest } from './ch-test-suggest.js';
52
53
  export { ChTestTreeX, defineCustomElement as defineCustomElementChTestTreeX } from './ch-test-tree-x.js';
53
54
  export { ChTextblock, defineCustomElement as defineCustomElementChTextblock } from './ch-textblock.js';
54
55
  export { ChTimer, defineCustomElement as defineCustomElementChTimer } from './ch-timer.js';
56
+ export { ChTooltip, defineCustomElement as defineCustomElementChTooltip } from './ch-tooltip.js';
55
57
  export { ChTree, defineCustomElement as defineCustomElementChTree } from './ch-tree.js';
56
58
  export { ChTreeItem, defineCustomElement as defineCustomElementChTreeItem } from './ch-tree-item.js';
57
59
  export { ChTreeX, defineCustomElement as defineCustomElementChTreeX } from './ch-tree-x.js';
58
- export { ChTreeXList, defineCustomElement as defineCustomElementChTreeXList } from './ch-tree-x-list.js';
59
60
  export { ChTreeXListItem, defineCustomElement as defineCustomElementChTreeXListItem } from './ch-tree-x-list-item.js';
60
61
  export { ChWindow, defineCustomElement as defineCustomElementChWindow } from './ch-window.js';
61
62
  export { ChWindowClose, defineCustomElement as defineCustomElementChWindowClose } from './ch-window-close.js';
@@ -1,6 +1,6 @@
1
1
  import { proxyCustomElement, HTMLElement, h, Host } from '@stencil/core/internal/client';
2
2
 
3
- const tooltipCss = "/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-webkit-text-size-adjust:100%;}body{margin:0}main{display:block}h1{font-size:2em;margin:0.67em 0}hr{box-sizing:content-box;height:0;overflow:visible;}pre{font-family:monospace, monospace;font-size:1em;}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted;}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace, monospace;font-size:1em;}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0;}button,input{overflow:visible}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button}button::-moz-focus-inner,[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner{border-style:none;padding:0}button:-moz-focusring,[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:0.35em 0.75em 0.625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal;}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0;}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px;}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit;}details{display:block}summary{display:list-item}template{display:none}[hidden]{display:none}:root{--ui-animaton-speed:0.2s}.gxg-title-01{font-family:var(--font-family-primary);font-weight:var(--font-weight-bold);font-size:var(--font-size-md);letter-spacing:var(--letter-spacing-md);color:var(--color-on-background);text-align:start;line-height:1.455em}.gxg-title-01--negative{font-family:var(--font-family-primary);font-weight:var(--font-weight-bold);font-size:var(--font-size-md);letter-spacing:var(--letter-spacing-md);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--color-on-primary)}.gxg-title-02{font-family:var(--font-family-primary);font-weight:var(--font-weight-bold);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-sm);color:var(--color-on-background);text-align:start;text-transform:uppercase;line-height:1.556em}.gxg-title-02--negative{font-family:var(--font-family-primary);font-weight:var(--font-weight-bold);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-sm);color:var(--color-on-background);text-align:start;text-transform:uppercase;line-height:1.556em;color:var(--color-on-primary)}.gxg-title-03{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-xs);letter-spacing:var(--letter-spacing-sm);color:var(--color-on-background);text-align:start;text-transform:uppercase;line-height:1.556em}.gxg-title-03--negative{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-xs);letter-spacing:var(--letter-spacing-sm);color:var(--color-on-background);text-align:start;text-transform:uppercase;line-height:1.556em;color:var(--color-on-primary)}.gxg-title-04{font-family:var(--font-family-primary);font-weight:var(--font-weight-semibold);font-size:var(--font-size-md);letter-spacing:var(--letter-spacing-md);color:var(--color-on-background);text-align:start;line-height:1.455em}.gxg-title-04--negative{font-family:var(--font-family-primary);font-weight:var(--font-weight-semibold);font-size:var(--font-size-md);letter-spacing:var(--letter-spacing-md);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--color-on-primary)}.gxg-title-05{font-family:var(--font-family-primary);font-weight:var(--font-weight-semibold);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-sm);color:var(--color-on-background);text-align:start;line-height:1.556em}.gxg-title-05--negative{font-family:var(--font-family-primary);font-weight:var(--font-weight-semibold);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-sm);color:var(--color-on-background);text-align:start;line-height:1.556em;color:var(--color-on-primary)}.gxg-text{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em}.gxg-text--negative{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--color-on-primary)}.gxg-text--gray{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--gray-05)}.gxg-quote{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em;font-style:italic}.gxg-quote--negative{color:var(--color-on-primary)}.gxg-link{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--color-primary);text-decoration:underline;cursor:pointer;display:inline-block}.gxg-link:hover{color:var(--color-primary-hover)}.gxg-link:active{color:var(--color-primary-active)}.gxg-link-gray{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--color-primary);text-decoration:underline;cursor:pointer;display:inline-block;color:var(--gray-04)}.gxg-link-gray:hover{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--color-primary);text-decoration:underline;cursor:pointer;display:inline-block;color:var(--gray-04);color:var(--gray-06)}.gxg-alert-error{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--color-error-dark);display:inline-block}.gxg-alert-warning{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--color-warning-dark);display:inline-block}.gxg-alert-success{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--color-success-dark);display:inline-block}.gxg-tab--disabled{color:var(--color-primary-disabled);pointer-events:none}.gxg-tab--disabled[disabled]{color:var(--color-primary-disabled);pointer-events:none}.gxg-label{font-family:var(--font-family-primary) !important;font-weight:var(--font-weight-semibold);font-size:var(--font-size-sm) !important;letter-spacing:var(--letter-spacing-xs);color:var(--color-primary-enabled);text-align:center;line-height:1.455em}.gxg-label:hover{color:var(--color-primary-hover)}.gxg-label:focus{color:var(--color-primary-active)}.gxg-label:active{color:var(--color-primary-active)}.gxg-label[disabled]{color:var(--color-primary-disabled)}.gxg-label--negative{color:var(--color-on-primary)}.gxg-label--negative[disabled]{color:var(--color-on-disabled)}.gxg-button-styles{font-family:var(--font-family-primary) !important;font-weight:var(--font-weight-semibold);font-size:var(--font-size-sm) !important;letter-spacing:var(--letter-spacing-xs);color:var(--color-primary-enabled);text-align:center;line-height:1.455em}.gxg-scrollbar{}.gxg-scrollbar::-webkit-scrollbar{width:6px;height:6px}.gxg-scrollbar::-webkit-scrollbar-track{background-color:var(--gray-02);border-radius:10px}.gxg-scrollbar::-webkit-scrollbar-thumb{background:var(--gray-05);border-radius:10px}.gxg-scrollbar::-webkit-scrollbar-thumb:hover{background:var(--gray-04);cursor:pointer}:host{display:inline-flex}:host .tooltip{cursor:pointer;position:relative;border-bottom:1px dotted var(--color-on-secondary);text-decoration:none}:host .tooltip .tooltiptext{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em;font-size:var(--font-size-xs);visibility:hidden;opacity:0;transition-property:opacity;transition-duration:var(--ui-animaton-speed);transition-timing-function:ease;position:absolute;z-index:1;width:250px;text-align:center}:host .tooltip .tooltiptext__content{width:fit-content;background-color:var(--gray-07);padding:var(--spacing-comp-01) var(--spacing-comp-02);border-radius:var(--border-width-md);color:var(--color-on-primary);display:inline-block;text-align:left}:host .tooltip .tooltiptext:after{content:\"\";width:0;height:0;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:5px solid var(--gray-07);position:absolute}:host .tooltip:hover .tooltiptext{visibility:visible;opacity:1}:host([position=top]) .tooltip .tooltiptext{bottom:27px;left:50%;transform:translateX(-50%)}:host([position=top]) .tooltip .tooltiptext:after{left:50%;transform:translateX(-50%) rotate(180deg);bottom:-4px}:host([position=right]) .tooltip .tooltiptext{top:0;left:111%;text-align:left}:host([position=right]) .tooltip .tooltiptext:after{left:-7px;transform:rotate(-90deg);top:8px}:host([position=bottom]) .tooltip .tooltiptext{top:25px;left:50%;transform:translateX(-50%)}:host([position=bottom]) .tooltip .tooltiptext:after{left:50%;transform:translateX(-50%);top:-4px}:host([position=left]) .tooltip .tooltiptext{text-align:right;top:0;right:105%}:host([position=left]) .tooltip .tooltiptext:after{right:-7px;transform:rotate(90deg);top:8px}:host([width-auto]) .tooltip .tooltiptext{width:auto;white-space:nowrap}:host([no-border]) .tooltip{border-bottom:none}:host([align-end]) .tooltiptext{transform:none !important;inset-inline-end:0;left:auto !important;max-width:180px;width:max-content}:host([align-end]) .tooltiptext:after{inset-inline-end:-1px;left:auto !important}:host([flex]){display:flex}:host([flex]) .tooltip{display:flex}:host([fixed]) .tooltip .tooltiptext{position:fixed;height:0}:host([fixed]) .tooltip .tooltiptext__content{transform:translateY(calc(-100% - 5px))}:host([fixed]) .tooltip .tooltiptext__content:after{content:\"\";width:0;height:0;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:5px solid var(--gray-07);position:absolute;right:0;transform:translateX(-3px) rotate(180deg);bottom:-3px}:host([fixed]) .tooltip .tooltiptext:after{display:none}";
3
+ const tooltipCss = "/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-webkit-text-size-adjust:100%;}body{margin:0}main{display:block}h1{font-size:2em;margin:0.67em 0}hr{box-sizing:content-box;height:0;overflow:visible;}pre{font-family:monospace, monospace;font-size:1em;}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted;}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace, monospace;font-size:1em;}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0;}button,input{overflow:visible}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button}button::-moz-focus-inner,[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner{border-style:none;padding:0}button:-moz-focusring,[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:0.35em 0.75em 0.625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal;}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0;}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px;}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit;}details{display:block}summary{display:list-item}template{display:none}[hidden]{display:none}:root{--ui-animaton-speed:0.2s}.gxg-title-01{font-family:var(--font-family-primary);font-weight:var(--font-weight-bold);font-size:var(--font-size-md);letter-spacing:var(--letter-spacing-md);color:var(--color-on-background);text-align:start;line-height:1.455em}.gxg-title-01--negative{font-family:var(--font-family-primary);font-weight:var(--font-weight-bold);font-size:var(--font-size-md);letter-spacing:var(--letter-spacing-md);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--color-on-primary)}.gxg-title-02{font-family:var(--font-family-primary);font-weight:var(--font-weight-bold);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-sm);color:var(--color-on-background);text-align:start;text-transform:uppercase;line-height:1.556em}.gxg-title-02--negative{font-family:var(--font-family-primary);font-weight:var(--font-weight-bold);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-sm);color:var(--color-on-background);text-align:start;text-transform:uppercase;line-height:1.556em;color:var(--color-on-primary)}.gxg-title-03{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-xs);letter-spacing:var(--letter-spacing-sm);color:var(--color-on-background);text-align:start;text-transform:uppercase;line-height:1.556em}.gxg-title-03--negative{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-xs);letter-spacing:var(--letter-spacing-sm);color:var(--color-on-background);text-align:start;text-transform:uppercase;line-height:1.556em;color:var(--color-on-primary)}.gxg-title-04{font-family:var(--font-family-primary);font-weight:var(--font-weight-semibold);font-size:var(--font-size-md);letter-spacing:var(--letter-spacing-md);color:var(--color-on-background);text-align:start;line-height:1.455em}.gxg-title-04--negative{font-family:var(--font-family-primary);font-weight:var(--font-weight-semibold);font-size:var(--font-size-md);letter-spacing:var(--letter-spacing-md);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--color-on-primary)}.gxg-title-05{font-family:var(--font-family-primary);font-weight:var(--font-weight-semibold);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-sm);color:var(--color-on-background);text-align:start;line-height:1.556em}.gxg-title-05--negative{font-family:var(--font-family-primary);font-weight:var(--font-weight-semibold);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-sm);color:var(--color-on-background);text-align:start;line-height:1.556em;color:var(--color-on-primary)}.gxg-text{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em}.gxg-text--negative{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--color-on-primary)}.gxg-text--gray{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--gray-05)}.gxg-quote{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em;font-style:italic}.gxg-quote--negative{color:var(--color-on-primary)}.gxg-link{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--color-primary);text-decoration:underline;cursor:pointer;display:inline-block}.gxg-link:hover{color:var(--color-primary-hover)}.gxg-link:active{color:var(--color-primary-active)}.gxg-link-gray{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--color-primary);text-decoration:underline;cursor:pointer;display:inline-block;color:var(--gray-04)}.gxg-link-gray:hover{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--color-primary);text-decoration:underline;cursor:pointer;display:inline-block;color:var(--gray-04);color:var(--gray-06)}.gxg-alert-error{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--color-error-dark);display:inline-block}.gxg-alert-warning{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--color-warning-dark);display:inline-block}.gxg-alert-success{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--color-success-dark);display:inline-block}.gxg-tab--disabled{color:var(--color-primary-disabled);pointer-events:none}.gxg-tab--disabled[disabled]{color:var(--color-primary-disabled);pointer-events:none}.gxg-label{font-family:var(--font-family-primary) !important;font-weight:var(--font-weight-semibold);font-size:var(--font-size-sm) !important;letter-spacing:var(--letter-spacing-xs);color:var(--color-primary-enabled);text-align:center;line-height:1.455em}.gxg-label:hover{color:var(--color-primary-hover)}.gxg-label:focus{color:var(--color-primary-active)}.gxg-label:active{color:var(--color-primary-active)}.gxg-label[disabled]{color:var(--color-primary-disabled)}.gxg-label--negative{color:var(--color-on-primary)}.gxg-label--negative[disabled]{color:var(--color-on-disabled)}.gxg-button-styles{font-family:var(--font-family-primary) !important;font-weight:var(--font-weight-semibold);font-size:var(--font-size-sm) !important;letter-spacing:var(--letter-spacing-xs);color:var(--color-primary-enabled);text-align:center;line-height:1.455em}.gxg-scrollbar{}.gxg-scrollbar::-webkit-scrollbar{width:6px;height:6px}.gxg-scrollbar::-webkit-scrollbar-track{background-color:var(--gray-02);border-radius:10px}.gxg-scrollbar::-webkit-scrollbar-thumb{background:var(--gray-05);border-radius:10px}.gxg-scrollbar::-webkit-scrollbar-thumb:hover{background:var(--gray-04);cursor:pointer}:host{display:inline-flex}:host .tooltip{cursor:pointer;position:relative;border-bottom:1px dotted var(--color-on-secondary);text-decoration:none}:host .tooltip .tooltiptext{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em;font-size:var(--font-size-xs);visibility:hidden;opacity:0;transition-property:opacity;transition-duration:var(--ui-animaton-speed);transition-timing-function:ease;position:absolute;z-index:1;width:250px;text-align:center}:host .tooltip .tooltiptext__content{width:fit-content;background-color:var(--gray-07);padding:var(--spacing-comp-01) var(--spacing-comp-02);border-radius:var(--border-width-md);color:var(--color-on-primary);display:inline-block;text-align:left}:host .tooltip .tooltiptext:after{content:\"\";width:0;height:0;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:5px solid var(--gray-07);position:absolute}:host .tooltip:hover .tooltiptext{visibility:visible;opacity:1}:host([position=top]) .tooltip .tooltiptext{bottom:27px;left:50%;transform:translateX(-50%)}:host([position=top]) .tooltip .tooltiptext:after{left:50%;transform:translateX(-50%) rotate(180deg);bottom:-4px}:host([position=right]) .tooltip .tooltiptext{top:0;left:111%;text-align:left}:host([position=right]) .tooltip .tooltiptext:after{left:-7px;transform:rotate(-90deg);top:8px}:host([position=bottom]) .tooltip .tooltiptext{top:25px;left:50%;transform:translateX(-50%)}:host([position=bottom]) .tooltip .tooltiptext:after{left:50%;transform:translateX(-50%);top:-4px}:host([position=left]) .tooltip .tooltiptext{text-align:right;top:0;right:105%}:host([position=left]) .tooltip .tooltiptext:after{right:-7px;transform:rotate(90deg);top:8px}:host([width-auto]) .tooltip .tooltiptext{width:auto;white-space:nowrap}:host([no-border]) .tooltip{border-bottom:none}:host([align-end]) .tooltiptext{transform:none !important;inset-inline-end:0;left:auto !important;max-width:180px;width:max-content}:host([align-end]) .tooltiptext:after{inset-inline-end:-1px;left:auto !important}:host([flex]){display:flex}:host([flex]) .tooltip{display:flex}:host([fixed]){border:1px solid black}:host([fixed]) .tooltip:hover .tooltiptext{visibility:hidden;opacity:0}:host([fixed]) .tooltip .tooltiptext{position:fixed;height:0}:host([fixed]) .tooltip .tooltiptext__content{transform:translateY(calc(-100% - 5px))}:host([fixed]) .tooltip .tooltiptext__content:after{content:\"\";width:0;height:0;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:5px solid var(--gray-07);position:absolute;right:0;transform:translateX(-3px) rotate(180deg);bottom:-3px}:host([fixed]) .tooltip .tooltiptext:after{display:none}:host([fixed]) .tooltip--visible .tooltiptext{visibility:visible !important;opacity:1 !important}";
4
4
 
5
5
  const GxgTooltip = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
6
6
  constructor() {
@@ -27,21 +27,34 @@ const GxgTooltip = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
27
27
  * This presence of this property removes the border under the text
28
28
  */
29
29
  this.noBorder = false;
30
+ /**
31
+ * Used to show/hide the tooltip (only used if 'fixed' is true) otherwise, it will show on hover.
32
+ */
33
+ this.visible = false;
30
34
  this.mouseEnterHandler = () => {
31
35
  const tooltipBC = this.el.getBoundingClientRect();
32
36
  const top = tooltipBC.top;
33
37
  const rightPosition = window.innerWidth - tooltipBC.right;
34
38
  this.tooltipTextEl.style.top = `${top}px`;
35
39
  this.tooltipTextEl.style.right = `${rightPosition}px`;
40
+ this.visible = true;
41
+ };
42
+ this.mouseLeaveHandler = () => {
43
+ this.visible = false;
44
+ };
45
+ this.documentScrollHandler = () => {
46
+ this.visible = false;
36
47
  };
37
48
  }
38
49
  componentWillLoad() {
39
50
  if (this.fixed) {
40
51
  this.el.addEventListener("mouseenter", this.mouseEnterHandler);
52
+ this.el.addEventListener("mouseleave", this.mouseLeaveHandler);
53
+ document.addEventListener("scroll", this.documentScrollHandler);
41
54
  }
42
55
  }
43
56
  render() {
44
- return (h(Host, { role: "tooltip" }, h("span", { class: "tooltip" }, h("slot", null), h("div", { class: "tooltiptext", ref: (el) => (this.tooltipTextEl = el) }, h("span", { class: "tooltiptext__content" }, this.label)))));
57
+ return (h(Host, { role: "tooltip" }, h("span", { class: { tooltip: true, "tooltip--visible": this.visible } }, h("slot", null), h("div", { class: "tooltiptext", ref: (el) => (this.tooltipTextEl = el) }, h("span", { class: "tooltiptext__content" }, this.label)))));
45
58
  }
46
59
  get el() { return this; }
47
60
  static get style() { return tooltipCss; }
@@ -51,7 +64,8 @@ const GxgTooltip = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
51
64
  "alignEnd": [516, "align-end"],
52
65
  "fixed": [516],
53
66
  "flex": [516],
54
- "noBorder": [516, "no-border"]
67
+ "noBorder": [516, "no-border"],
68
+ "visible": [32]
55
69
  }]);
56
70
  function defineCustomElement() {
57
71
  if (typeof customElements === "undefined") {