@genexus/genexus-ide-ui 0.0.56 → 0.0.57

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 (135) hide show
  1. package/dist/cjs/ch-checkbox_4.cjs.entry.js +41 -27
  2. package/dist/cjs/{ch-grid-action-refresh_6.cjs.entry.js → ch-grid-action-refresh_7.cjs.entry.js} +168 -4
  3. package/dist/cjs/ch-icon_2.cjs.entry.js +1 -0
  4. package/dist/cjs/ch-suggest_4.cjs.entry.js +6 -2
  5. package/dist/cjs/ch-test-tree-x.cjs.entry.js +57 -32
  6. package/dist/cjs/config-082c7c76.js +9 -0
  7. package/dist/cjs/{form-a22de8f3.js → form-a2de5b1c.js} +14 -0
  8. package/dist/cjs/genexus-ide-ui.cjs.js +1 -1
  9. package/dist/cjs/gx-grid-chameleon.cjs.entry.js +21 -3
  10. package/dist/cjs/gx-ide-new-kb.cjs.entry.js +10 -9
  11. package/dist/cjs/gx-ide-new-object.cjs.entry.js +2 -1
  12. package/dist/cjs/gx-ide-share-kb.cjs.entry.js +3 -2
  13. package/dist/cjs/gxg-combo-box_2.cjs.entry.js +9 -4
  14. package/dist/cjs/gxg-form-checkbox-group.cjs.entry.js +1 -1
  15. package/dist/cjs/gxg-form-checkbox.cjs.entry.js +2 -2
  16. package/dist/cjs/gxg-form-radio-group.cjs.entry.js +1 -1
  17. package/dist/cjs/gxg-form-text.cjs.entry.js +19 -4
  18. package/dist/cjs/gxg-form-textarea.cjs.entry.js +8 -4
  19. package/dist/cjs/gxg-label_2.cjs.entry.js +27 -2
  20. package/dist/cjs/gxg-list-box_2.cjs.entry.js +2 -2
  21. package/dist/cjs/gxg-select.cjs.entry.js +1 -1
  22. package/dist/cjs/gxg-test.cjs.entry.js +1 -16
  23. package/dist/cjs/gxg-tree-view.cjs.entry.js +81 -40
  24. package/dist/cjs/loader.cjs.js +1 -1
  25. package/dist/collection/common/config.js +5 -0
  26. package/dist/collection/components/new-kb/new-kb.js +10 -9
  27. package/dist/collection/components/new-object/new-object.js +2 -1
  28. package/dist/collection/components/share-kb/share-kb.js +3 -2
  29. package/dist/components/ch-paginator-pages.js +1 -171
  30. package/dist/{esm/ch-paginator-pages.entry.js → components/ch-paginator-pages2.js} +29 -8
  31. package/dist/components/ch-paginator2.js +18 -4
  32. package/dist/components/ch-suggest2.js +5 -1
  33. package/dist/components/ch-test-tree-x.js +63 -35
  34. package/dist/components/checkbox.js +1 -1
  35. package/dist/components/combo-box.js +10 -4
  36. package/dist/components/config.js +7 -0
  37. package/dist/components/form-checkbox.js +1 -1
  38. package/dist/components/form-text.js +20 -4
  39. package/dist/components/form-textarea.js +9 -4
  40. package/dist/components/form.js +14 -1
  41. package/dist/components/gx-grid-chameleon.js +52 -28
  42. package/dist/components/gx-ide-new-kb.js +10 -9
  43. package/dist/components/gx-ide-new-object.js +2 -1
  44. package/dist/components/gx-ide-share-kb.js +3 -2
  45. package/dist/components/gxg-test.js +25 -22
  46. package/dist/components/gxg-tree-view.js +90 -44
  47. package/dist/components/icon2.js +1 -0
  48. package/dist/components/list-box.js +1 -1
  49. package/dist/components/suggest.js +1 -1
  50. package/dist/components/tooltip.js +30 -2
  51. package/dist/components/tree-x-list-item.js +25 -10
  52. package/dist/components/tree-x-list.js +2 -8
  53. package/dist/components/tree-x.js +16 -13
  54. package/dist/esm/ch-checkbox_4.entry.js +42 -28
  55. package/dist/esm/{ch-grid-action-refresh_6.entry.js → ch-grid-action-refresh_7.entry.js} +168 -5
  56. package/dist/esm/ch-icon_2.entry.js +1 -0
  57. package/dist/esm/ch-suggest_4.entry.js +6 -2
  58. package/dist/esm/ch-test-tree-x.entry.js +57 -32
  59. package/dist/esm/config-94445cc2.js +7 -0
  60. package/dist/esm/{form-5e68671c.js → form-9c41f579.js} +14 -1
  61. package/dist/esm/genexus-ide-ui.js +1 -1
  62. package/dist/esm/gx-grid-chameleon.entry.js +21 -3
  63. package/dist/esm/gx-ide-new-kb.entry.js +10 -9
  64. package/dist/esm/gx-ide-new-object.entry.js +2 -1
  65. package/dist/esm/gx-ide-share-kb.entry.js +3 -2
  66. package/dist/esm/gxg-combo-box_2.entry.js +9 -4
  67. package/dist/esm/gxg-form-checkbox-group.entry.js +1 -1
  68. package/dist/esm/gxg-form-checkbox.entry.js +2 -2
  69. package/dist/esm/gxg-form-radio-group.entry.js +1 -1
  70. package/dist/esm/gxg-form-text.entry.js +19 -4
  71. package/dist/esm/gxg-form-textarea.entry.js +8 -4
  72. package/dist/esm/gxg-label_2.entry.js +28 -3
  73. package/dist/esm/gxg-list-box_2.entry.js +2 -2
  74. package/dist/esm/gxg-select.entry.js +1 -1
  75. package/dist/esm/gxg-test.entry.js +1 -16
  76. package/dist/esm/gxg-tree-view.entry.js +81 -40
  77. package/dist/esm/loader.js +1 -1
  78. package/dist/genexus-ide-ui/genexus-ide-ui.css +4 -2
  79. package/dist/genexus-ide-ui/genexus-ide-ui.esm.js +1 -1
  80. package/dist/genexus-ide-ui/icon-assets/gemini-tools/error.svg +1 -1
  81. package/dist/genexus-ide-ui/icon-assets/gemini-tools/success.svg +1 -1
  82. package/dist/genexus-ide-ui/icon-assets/gemini-tools/warning.svg +1 -1
  83. package/dist/genexus-ide-ui/{p-afe9515e.entry.js → p-0268cc45.entry.js} +1 -1
  84. package/dist/genexus-ide-ui/p-0aa11d6f.entry.js +1 -0
  85. package/dist/genexus-ide-ui/p-0f4fe7ad.js +1 -0
  86. package/dist/genexus-ide-ui/{p-a440a73f.entry.js → p-1294d220.entry.js} +1 -1
  87. package/dist/genexus-ide-ui/p-1f3a81e3.entry.js +1 -0
  88. package/dist/genexus-ide-ui/{p-4eaffd02.entry.js → p-2096031c.entry.js} +1 -1
  89. package/dist/genexus-ide-ui/{p-f3a1dc7c.entry.js → p-2537b4d6.entry.js} +1 -1
  90. package/dist/genexus-ide-ui/p-3657924a.entry.js +1 -0
  91. package/dist/genexus-ide-ui/p-3ec2f036.entry.js +1 -0
  92. package/dist/genexus-ide-ui/p-4923cffa.entry.js +1 -0
  93. package/dist/genexus-ide-ui/p-4e81926d.entry.js +1 -0
  94. package/dist/genexus-ide-ui/p-5669baf5.entry.js +1 -0
  95. package/dist/genexus-ide-ui/p-60b2bd2f.entry.js +1 -0
  96. package/dist/genexus-ide-ui/{p-e586d05e.entry.js → p-875e5979.entry.js} +1 -1
  97. package/dist/genexus-ide-ui/p-9e428123.entry.js +1 -0
  98. package/dist/genexus-ide-ui/p-a8b8baf9.entry.js +1 -0
  99. package/dist/genexus-ide-ui/p-dd2e0590.entry.js +1 -0
  100. package/dist/genexus-ide-ui/{p-5cb871e3.entry.js → p-ebcdef37.entry.js} +1 -1
  101. package/dist/genexus-ide-ui/p-ed5cf480.entry.js +1 -0
  102. package/dist/genexus-ide-ui/p-f1ff6b48.entry.js +1 -0
  103. package/dist/genexus-ide-ui/p-f82f25e2.js +1 -0
  104. package/dist/genexus-ide-ui/p-f9f1d95d.entry.js +1 -0
  105. package/dist/node_modules/@genexus/chameleon-controls-library/dist/collection/components/checkbox/checkbox.css +3 -3
  106. package/dist/node_modules/@genexus/chameleon-controls-library/dist/collection/components/test/test-tree-x.css +1 -47
  107. package/dist/node_modules/@genexus/chameleon-controls-library/dist/collection/components/tree-x/tree-x.css +2 -2
  108. package/dist/node_modules/@genexus/chameleon-controls-library/dist/collection/components/tree-x-list-item/tree-x-list-item.css +5 -3
  109. package/dist/node_modules/@genexus/gemini/dist/collection/components/combo-box/combo-box.css +5 -0
  110. package/dist/node_modules/@genexus/gemini/dist/collection/components/form-checkbox/form-checkbox.css +18 -0
  111. package/dist/node_modules/@genexus/gemini/dist/collection/components/form-text/form-text.css +37 -0
  112. package/dist/node_modules/@genexus/gemini/dist/collection/components/form-textarea/form-textarea.css +22 -0
  113. package/dist/node_modules/@genexus/gemini/dist/collection/components/list-box/list-box.css +18 -0
  114. package/dist/node_modules/@genexus/gemini/dist/collection/components/suggest/styles.css +18 -0
  115. package/dist/node_modules/@genexus/gemini/dist/collection/components/tooltip/tooltip.css +47 -3
  116. package/dist/node_modules/@genexus/gemini/dist/collection/components/tree-view/tree-view.css +10 -1
  117. package/dist/types/common/config.d.ts +3 -0
  118. package/package.json +3 -3
  119. package/dist/cjs/ch-paginator-pages.cjs.entry.js +0 -156
  120. package/dist/genexus-ide-ui/p-01406cbc.js +0 -1
  121. package/dist/genexus-ide-ui/p-03efca69.entry.js +0 -1
  122. package/dist/genexus-ide-ui/p-1d7c22d5.entry.js +0 -1
  123. package/dist/genexus-ide-ui/p-395a65de.entry.js +0 -1
  124. package/dist/genexus-ide-ui/p-3b4fca51.entry.js +0 -1
  125. package/dist/genexus-ide-ui/p-447c3a31.entry.js +0 -1
  126. package/dist/genexus-ide-ui/p-58f882c6.entry.js +0 -1
  127. package/dist/genexus-ide-ui/p-60bea19c.entry.js +0 -1
  128. package/dist/genexus-ide-ui/p-64cbe277.entry.js +0 -1
  129. package/dist/genexus-ide-ui/p-9a6cb543.entry.js +0 -1
  130. package/dist/genexus-ide-ui/p-a2fa3132.entry.js +0 -1
  131. package/dist/genexus-ide-ui/p-a708db45.entry.js +0 -1
  132. package/dist/genexus-ide-ui/p-c0edbeb5.entry.js +0 -1
  133. package/dist/genexus-ide-ui/p-cd5482fa.entry.js +0 -1
  134. package/dist/genexus-ide-ui/p-d312fe25.entry.js +0 -1
  135. package/dist/genexus-ide-ui/p-e6ae0460.entry.js +0 -1
@@ -1,174 +1,4 @@
1
- import { proxyCustomElement, HTMLElement, createEvent, h } from '@stencil/core/internal/client';
2
-
3
- const chPaginatorPagesCss = "button{all:unset}.pages{display:flex;align-items:center;list-style-type:none;margin:0;padding:0}";
4
-
5
- const ChPaginatorPages$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
6
- constructor() {
7
- super();
8
- this.__registerHost();
9
- this.__attachShadow();
10
- this.pageChanged = createEvent(this, "pageChanged", 7);
11
- /**
12
- * The active page number.
13
- */
14
- this.page = 1;
15
- /**
16
- * The total number of pages.
17
- */
18
- this.totalPages = 1;
19
- /**
20
- * The maximum number of items to display in the pagination.
21
- */
22
- this.maxSize = 9;
23
- /**
24
- * Flag to render the first and last pages.
25
- */
26
- this.renderFirstLastPages = true;
27
- /**
28
- * The text to display for the dots.
29
- */
30
- this.textDots = "...";
31
- this.clickHandler = (eventInfo) => {
32
- const button = eventInfo.target;
33
- this.page = parseInt(button.value);
34
- };
35
- }
36
- pageHandler() {
37
- this.pageChanged.emit({ page: this.page });
38
- }
39
- maxSizeHandler() {
40
- this.validateMaxSize();
41
- }
42
- renderFirstLastPagesHandler() {
43
- this.validateMaxSize();
44
- }
45
- componentDidUpdate() {
46
- if (document.activeElement === this.el) {
47
- this.buttonActive.focus();
48
- }
49
- }
50
- keyDownHandler(eventInfo) {
51
- switch (eventInfo.key) {
52
- case "ArrowLeft":
53
- this.page = Math.max(this.page - 1, 1);
54
- break;
55
- case "ArrowRight":
56
- this.page = Math.min(this.page + 1, this.totalPages);
57
- break;
58
- }
59
- }
60
- focusHandler() {
61
- this.buttonActive.focus();
62
- }
63
- getItems() {
64
- const padLeft = Math.ceil((this.maxSize - 1) / 2);
65
- const padRight = Math.floor((this.maxSize - 1) / 2);
66
- let fillLeft, fillStart;
67
- let fillRight, fillEnd;
68
- if (this.maxSize === 0 || this.maxSize >= this.totalPages) {
69
- fillStart = this.fillStart(false);
70
- fillLeft = this.page - 1;
71
- fillRight = this.totalPages - this.page;
72
- fillEnd = this.fillEnd(false);
73
- }
74
- else if (this.page <= padLeft && this.page < this.totalPages - padRight) {
75
- fillStart = this.fillStart(false);
76
- fillLeft = this.page - 1;
77
- fillEnd = this.fillEnd(true);
78
- fillRight = padRight - fillEnd.length + (padLeft - fillLeft);
79
- }
80
- else if (this.page > padLeft && this.page < this.totalPages - padRight) {
81
- fillStart = this.fillStart(true);
82
- fillLeft = padLeft - fillStart.length;
83
- fillEnd = this.fillEnd(true);
84
- fillRight = padRight - fillEnd.length;
85
- }
86
- else if (this.page > padLeft && this.page >= this.totalPages - padRight) {
87
- fillEnd = this.fillEnd(false);
88
- fillRight = this.totalPages - this.page;
89
- fillStart = this.fillStart(true);
90
- fillLeft = padLeft - fillStart.length + padRight - fillRight;
91
- }
92
- const items = fillStart
93
- .concat(this.getRangeItems(this.page - fillLeft, this.page - 1))
94
- .concat([this.page])
95
- .concat(this.getRangeItems(this.page + 1, this.page + fillRight))
96
- .concat(fillEnd);
97
- return {
98
- items,
99
- activeIndex: fillStart.length + fillLeft
100
- };
101
- }
102
- fillStart(render) {
103
- if (render) {
104
- return this.renderFirstLastPages ? [1, this.textDots] : [this.textDots];
105
- }
106
- else {
107
- return [];
108
- }
109
- }
110
- fillEnd(render) {
111
- if (render) {
112
- return this.renderFirstLastPages
113
- ? [this.textDots, this.totalPages]
114
- : [this.textDots];
115
- }
116
- else {
117
- return [];
118
- }
119
- }
120
- getRangeItems(start, end) {
121
- return Array.from({ length: end - start + 1 }, (_, i) => start + i);
122
- }
123
- validateMaxSize() {
124
- if (this.maxSize > 0) {
125
- if (!this.renderFirstLastPages && this.maxSize < 3) {
126
- this.maxSize = 3;
127
- }
128
- else if (this.renderFirstLastPages && this.maxSize < 5) {
129
- this.maxSize = 5;
130
- }
131
- }
132
- }
133
- render() {
134
- const { items, activeIndex } = this.getItems();
135
- return (h("ol", { part: "pages", class: "pages" }, items.map((item, i) => {
136
- if (typeof item === "number") {
137
- return (h("li", null, h("button", { part: `page button ${i === activeIndex ? "active" : ""}`, value: item, onClick: this.clickHandler, ref: el => (this.buttonActive =
138
- i === activeIndex ? el : this.buttonActive) }, item)));
139
- }
140
- else {
141
- return (h("li", null, h("button", { part: "page button dots", disabled: true }, item)));
142
- }
143
- })));
144
- }
145
- get el() { return this; }
146
- static get watchers() { return {
147
- "page": ["pageHandler"],
148
- "maxSize": ["maxSizeHandler"],
149
- "renderFirstLastPages": ["renderFirstLastPagesHandler"]
150
- }; }
151
- static get style() { return chPaginatorPagesCss; }
152
- }, [1, "ch-paginator-pages", {
153
- "page": [1538],
154
- "totalPages": [514, "total-pages"],
155
- "maxSize": [1538, "max-size"],
156
- "renderFirstLastPages": [4, "render-first-last-pages"],
157
- "textDots": [1, "text-dots"]
158
- }, [[1, "keydown", "keyDownHandler"], [1, "focusin", "focusHandler"]]]);
159
- function defineCustomElement$1() {
160
- if (typeof customElements === "undefined") {
161
- return;
162
- }
163
- const components = ["ch-paginator-pages"];
164
- components.forEach(tagName => { switch (tagName) {
165
- case "ch-paginator-pages":
166
- if (!customElements.get(tagName)) {
167
- customElements.define(tagName, ChPaginatorPages$1);
168
- }
169
- break;
170
- } });
171
- }
1
+ import { C as ChPaginatorPages$1, d as defineCustomElement$1 } from './ch-paginator-pages2.js';
172
2
 
173
3
  const ChPaginatorPages = ChPaginatorPages$1;
174
4
  const defineCustomElement = defineCustomElement$1;
@@ -1,10 +1,12 @@
1
- import { r as registerInstance, c as createEvent, h, g as getElement } from './index-0da01575.js';
1
+ import { proxyCustomElement, HTMLElement, createEvent, h } from '@stencil/core/internal/client';
2
2
 
3
3
  const chPaginatorPagesCss = "button{all:unset}.pages{display:flex;align-items:center;list-style-type:none;margin:0;padding:0}";
4
4
 
5
- const ChPaginatorPages = class {
6
- constructor(hostRef) {
7
- registerInstance(this, hostRef);
5
+ const ChPaginatorPages = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
6
+ constructor() {
7
+ super();
8
+ this.__registerHost();
9
+ this.__attachShadow();
8
10
  this.pageChanged = createEvent(this, "pageChanged", 7);
9
11
  /**
10
12
  * The active page number.
@@ -140,13 +142,32 @@ const ChPaginatorPages = class {
140
142
  }
141
143
  })));
142
144
  }
143
- get el() { return getElement(this); }
145
+ get el() { return this; }
144
146
  static get watchers() { return {
145
147
  "page": ["pageHandler"],
146
148
  "maxSize": ["maxSizeHandler"],
147
149
  "renderFirstLastPages": ["renderFirstLastPagesHandler"]
148
150
  }; }
149
- };
150
- ChPaginatorPages.style = chPaginatorPagesCss;
151
+ static get style() { return chPaginatorPagesCss; }
152
+ }, [1, "ch-paginator-pages", {
153
+ "page": [1538],
154
+ "totalPages": [514, "total-pages"],
155
+ "maxSize": [1538, "max-size"],
156
+ "renderFirstLastPages": [4, "render-first-last-pages"],
157
+ "textDots": [1, "text-dots"]
158
+ }, [[1, "keydown", "keyDownHandler"], [1, "focusin", "focusHandler"]]]);
159
+ function defineCustomElement() {
160
+ if (typeof customElements === "undefined") {
161
+ return;
162
+ }
163
+ const components = ["ch-paginator-pages"];
164
+ components.forEach(tagName => { switch (tagName) {
165
+ case "ch-paginator-pages":
166
+ if (!customElements.get(tagName)) {
167
+ customElements.define(tagName, ChPaginatorPages);
168
+ }
169
+ break;
170
+ } });
171
+ }
151
172
 
152
- export { ChPaginatorPages as ch_paginator_pages };
173
+ export { ChPaginatorPages as C, defineCustomElement as d };
@@ -102,10 +102,24 @@ const ChPaginator = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
102
102
  }
103
103
  loadElements() {
104
104
  this.elPages = this.el.querySelector("ch-paginator-pages");
105
- this.elFirst = this.el.querySelector("ch-paginator-navigate[type='first']");
106
- this.elPrevious = this.el.querySelector("ch-paginator-navigate[type='previous']");
107
- this.elNext = this.el.querySelector("ch-paginator-navigate[type='next']");
108
- this.elLast = this.el.querySelector("ch-paginator-navigate[type='last']");
105
+ this.el
106
+ .querySelectorAll("ch-paginator-navigate")
107
+ .forEach((el) => {
108
+ switch (el.type) {
109
+ case "first":
110
+ this.elFirst = el;
111
+ break;
112
+ case "previous":
113
+ this.elPrevious = el;
114
+ break;
115
+ case "next":
116
+ this.elNext = el;
117
+ break;
118
+ case "last":
119
+ this.elLast = el;
120
+ break;
121
+ }
122
+ });
109
123
  }
110
124
  render() {
111
125
  if (this.elPages) {
@@ -12,6 +12,7 @@ const ChSuggest = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
12
12
  this.__registerHost();
13
13
  this.__attachShadow();
14
14
  this.valueChanged = createEvent(this, "valueChanged", 7);
15
+ this.selectionChanged = createEvent(this, "selectionChanged", 7);
15
16
  this.keyEventsDictionary = {
16
17
  ArrowDown: (e) => {
17
18
  const newFocusedItem = this.getNewFocusedItem(e.currentFocusedItem, ARROW_DOWN);
@@ -172,8 +173,10 @@ const ChSuggest = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
172
173
  // 6.COMPONENT LIFECYCLE EVENTS //
173
174
  // 7.LISTENERS //
174
175
  itemSelectedHandler(event) {
176
+ event.stopPropagation();
175
177
  this.value = event.detail.value;
176
178
  this.closeWindow();
179
+ this.selectionChanged.emit(event.detail);
177
180
  }
178
181
  focusChangeAttemptHandler(event) {
179
182
  const keyEventHandler = this.keyEventsDictionary[event.detail.code];
@@ -196,6 +199,7 @@ const ChSuggest = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
196
199
  windowClosedHandler() {
197
200
  this.textInput.focus();
198
201
  this.windowHidden = true;
202
+ this.el.innerHTML = "";
199
203
  }
200
204
  // 9.PUBLIC METHODS API //
201
205
  /**
@@ -223,7 +227,7 @@ const ChSuggest = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
223
227
  "cursorEnd": [4, "cursor-end"],
224
228
  "windowHidden": [32],
225
229
  "selectInputText": [64]
226
- }, [[0, "itemSelected", "itemSelectedHandler"], [0, "focusChangeAttempt", "focusChangeAttemptHandler"], [0, "windowClosed", "windowClosedHandler"]]]);
230
+ }, [[2, "itemSelected", "itemSelectedHandler"], [0, "focusChangeAttempt", "focusChangeAttemptHandler"], [0, "windowClosed", "windowClosedHandler"]]]);
227
231
  function defineCustomElement() {
228
232
  if (typeof customElements === "undefined") {
229
233
  return;
@@ -4,10 +4,11 @@ import { d as defineCustomElement$4 } from './tree-x.js';
4
4
  import { d as defineCustomElement$3 } from './tree-x-list.js';
5
5
  import { d as defineCustomElement$2 } from './tree-x-list-item.js';
6
6
 
7
- const testTreeXCss = "ch-test-tree-x{display:grid;grid-template-columns:500px max-content;grid-template-rows:1fr;height:100%}.tree-buttons{display:grid;grid-auto-rows:max-content;row-gap:8px}:not(.ch-tree-x-dragging-item) ch-tree-x-list-item:not([selected])::part(header):hover{background-color:#e8e8e9}.ch-tree-x-list-item--drag-enter{background-color:#eee;box-shadow:inset 0 0 1px 0px black}.ch-tree-x-list-item--drag-enter[selected]::part(header){background-color:#eee}ch-tree-x-list-item::part(header){border:1px solid transparent}ch-tree-x-list-item[selected]::part(header){background-color:#cfdee6;border-color:#0266a0}ch-tree-x-list-item.ch-tree-x-list-item--editing::part(header){background-color:rgba(207, 222, 230, 0.5);border-color:transparent}ch-tree-x-list-item:not(.ch-tree-x-list-item--editing)::part(header):focus-visible{border-color:black;z-index:1}.ch-tree-x-drag-info{padding-inline:6px;padding-block:2px;background-color:#cfdee6;border:1px solid #0266a0;border-radius:10px;font-size:8px}";
7
+ const testTreeXCss = "ch-test-tree-x{display:contents}";
8
8
 
9
9
  const DEFAULT_DRAG_DISABLED_VALUE = false;
10
10
  const DEFAULT_DROP_DISABLED_VALUE = false;
11
+ const DEFAULT_CLASS_VALUE = "tree-view-item";
11
12
  const DEFAULT_EXPANDED_VALUE = false;
12
13
  const DEFAULT_INDETERMINATE_VALUE = false;
13
14
  const DEFAULT_LAZY_VALUE = false;
@@ -38,7 +39,7 @@ const ChTestTreeX$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement
38
39
  /**
39
40
  * This property lets you define the model of the ch-tree-x control.
40
41
  */
41
- this.treeModel = { items: [] };
42
+ this.treeModel = [];
42
43
  /**
43
44
  * Set this attribute if you want to allow multi selection of the items.
44
45
  */
@@ -49,14 +50,16 @@ const ChTestTreeX$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement
49
50
  */
50
51
  this.showLines = "none";
51
52
  this.handleDroppableZoneEnter = (event) => {
52
- const dropInformation = event.detail;
53
53
  if (!this.checkDroppableZoneCallback) {
54
54
  return;
55
55
  }
56
+ event.stopPropagation();
57
+ // Suppose the request is made immediately by executing the callback
56
58
  const requestTimestamp = new Date().getTime();
59
+ const dropInformation = event.detail;
57
60
  const promise = this.checkDroppableZoneCallback(dropInformation);
58
61
  promise.then(validDrop => {
59
- this.treeRef.updateValidDroppableZone(requestTimestamp, dropInformation.newContainer.id, dropInformation.draggedItems, validDrop);
62
+ this.updateValidDropZone(requestTimestamp, dropInformation.newContainer.id, dropInformation.draggedItems, validDrop);
60
63
  });
61
64
  };
62
65
  this.handleSelectedItemsChange = (event) => {
@@ -90,6 +93,10 @@ const ChTestTreeX$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement
90
93
  itemInfo.expanded = detail.expanded;
91
94
  };
92
95
  this.handleItemsDropped = (event) => {
96
+ if (!this.dropItemsCallback) {
97
+ return;
98
+ }
99
+ event.stopPropagation();
93
100
  const dataTransferInfo = event.detail;
94
101
  const newContainer = dataTransferInfo.newContainer;
95
102
  const newParentId = newContainer.id;
@@ -98,7 +105,7 @@ const ChTestTreeX$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement
98
105
  return;
99
106
  }
100
107
  const draggedItems = dataTransferInfo.draggedItems;
101
- if (draggedItems.length === 0 || !this.dropItemsCallback) {
108
+ if (draggedItems.length === 0) {
102
109
  return;
103
110
  }
104
111
  const promise = this.dropItemsCallback(dataTransferInfo);
@@ -150,9 +157,9 @@ const ChTestTreeX$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement
150
157
  };
151
158
  this.renderSubModel = (treeSubModel, lastItem, level) => {
152
159
  var _a, _b;
153
- 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, 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
+ 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 &&
154
161
  treeSubModel.items != null &&
155
- treeSubModel.items.length !== 0 && (h("ch-tree-x-list", { slot: "tree", level: level + 1 }, treeSubModel.items.map((subModel, index) => this.renderSubModel(subModel, this.showLines && index === treeSubModel.items.length - 1, level + 1))))));
162
+ 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))))));
156
163
  };
157
164
  this.flattenItemUIModel = (parentModel) => (item) => {
158
165
  var _a, _b, _c, _d;
@@ -162,6 +169,7 @@ const ChTestTreeX$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement
162
169
  });
163
170
  // Make sure the properties are with their default values to avoid issues
164
171
  // when reusing DOM nodes
172
+ item.class || (item.class = DEFAULT_CLASS_VALUE);
165
173
  (_a = item.expanded) !== null && _a !== void 0 ? _a : (item.expanded = DEFAULT_EXPANDED_VALUE);
166
174
  (_b = item.indeterminate) !== null && _b !== void 0 ? _b : (item.indeterminate = DEFAULT_INDETERMINATE_VALUE);
167
175
  (_c = item.lazy) !== null && _c !== void 0 ? _c : (item.lazy = DEFAULT_LAZY_VALUE);
@@ -178,6 +186,27 @@ const ChTestTreeX$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement
178
186
  handleTreeModelChange() {
179
187
  this.flattenModel();
180
188
  }
189
+ /**
190
+ * Given an item id, an array of items to add, the download status and the
191
+ * lazy state, updates the item's UI Model.
192
+ */
193
+ async loadLazyContent(itemId, items, downloading = false, lazy = false) {
194
+ const itemToLazyLoadContent = this.flattenedLazyTreeModel.get(itemId);
195
+ // Establish that the content was lazy loaded
196
+ this.flattenedLazyTreeModel.delete(itemId);
197
+ itemToLazyLoadContent.downloading = downloading;
198
+ itemToLazyLoadContent.lazy = lazy;
199
+ // Check if there is items to add
200
+ if (items == null) {
201
+ return;
202
+ }
203
+ // @todo What happens in the server when dropping items on a lazy node?
204
+ itemToLazyLoadContent.items = items;
205
+ this.sortItems(itemToLazyLoadContent.items);
206
+ this.flattenSubModel(itemToLazyLoadContent);
207
+ // Force re-render
208
+ forceUpdate(this);
209
+ }
181
210
  /**
182
211
  * Given an item id, it displays and scrolls into the item view.
183
212
  */
@@ -253,6 +282,16 @@ const ChTestTreeX$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement
253
282
  });
254
283
  forceUpdate(this);
255
284
  }
285
+ /**
286
+ * Update the information about the valid droppable zones.
287
+ * @param requestTimestamp Time where the request to the server was made. Useful to avoid having old information.
288
+ * @param newContainerId ID of the container where the drag is trying to be made.
289
+ * @param draggedItems Information about the dragged items.
290
+ * @param validDrop Current state of the droppable zone.
291
+ */
292
+ async updateValidDropZone(requestTimestamp, newContainerId, draggedItems, validDrop) {
293
+ this.treeRef.updateValidDropZone(requestTimestamp, newContainerId, draggedItems, validDrop);
294
+ }
256
295
  updateItemProperty(itemUIModel, properties) {
257
296
  if (!itemUIModel) {
258
297
  return;
@@ -263,36 +302,22 @@ const ChTestTreeX$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement
263
302
  });
264
303
  }
265
304
  loadLazyChildrenHandler(event) {
305
+ if (!this.lazyLoadTreeItemsCallback) {
306
+ return;
307
+ }
266
308
  event.stopPropagation();
267
309
  const treeItemId = event.detail;
268
- if (this.lazyLoadTreeItemsCallback) {
269
- const promise = this.lazyLoadTreeItemsCallback(treeItemId);
270
- const itemRef = event.target;
271
- itemRef.downloading = true;
272
- promise.then(result => {
273
- const itemToLazyLoadContent = this.flattenedLazyTreeModel.get(treeItemId);
274
- // Establish that the content was lazy loaded
275
- this.flattenedLazyTreeModel.delete(treeItemId);
276
- itemToLazyLoadContent.lazy = false;
277
- itemRef.downloading = false;
278
- // Check if there is items to add
279
- if (result == null) {
280
- return;
281
- }
282
- // @todo What happens in the server when dropping items on a lazy node?
283
- itemToLazyLoadContent.items = result;
284
- this.sortItems(itemToLazyLoadContent.items);
285
- this.flattenSubModel(itemToLazyLoadContent);
286
- // Force re-render
287
- forceUpdate(this);
288
- });
289
- }
310
+ const promise = this.lazyLoadTreeItemsCallback(treeItemId);
311
+ event.target.downloading = true;
312
+ promise.then(result => {
313
+ this.loadLazyContent(treeItemId, result);
314
+ });
290
315
  }
291
316
  handleCaptionModification(event) {
292
- event.stopPropagation();
293
317
  if (!this.modifyItemCaptionCallback) {
294
318
  return;
295
319
  }
320
+ event.stopPropagation();
296
321
  const itemRef = event.target;
297
322
  const itemId = event.detail.id;
298
323
  const itemUIModel = this.flattenedTreeModel.get(itemId);
@@ -340,13 +365,13 @@ const ChTestTreeX$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement
340
365
  flattenModel() {
341
366
  this.flattenedTreeModel.clear();
342
367
  this.flattenedLazyTreeModel.clear();
343
- this.flattenSubModel(this.treeModel);
368
+ this.flattenSubModel({ id: null, caption: null, items: this.treeModel });
344
369
  }
345
370
  componentWillLoad() {
346
371
  this.flattenModel();
347
372
  }
348
373
  render() {
349
- return (h(Host, null, h("ch-tree-x", { multiSelection: this.multiSelection, waitDropProcessing: this.waitDropProcessing, onDroppableZoneEnter: this.handleDroppableZoneEnter, onExpandedItemChange: this.handleExpandedItemChange, onItemsDropped: this.handleItemsDropped, onSelectedItemsChange: this.handleSelectedItemsChange, ref: el => (this.treeRef = el) }, h("ch-tree-x-list", { level: 0 }, this.treeModel.items.map((subModel, index) => this.renderSubModel(subModel, this.showLines && index === this.treeModel.items.length - 1, 0)))), h("div", { class: "tree-buttons" })));
374
+ 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)))));
350
375
  }
351
376
  static get watchers() { return {
352
377
  "treeModel": ["handleTreeModelChange"]
@@ -354,20 +379,23 @@ const ChTestTreeX$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement
354
379
  static get style() { return testTreeXCss; }
355
380
  }, [0, "ch-test-tree-x", {
356
381
  "checkDroppableZoneCallback": [16],
382
+ "cssClass": [1, "css-class"],
357
383
  "dragDisabled": [4, "drag-disabled"],
358
384
  "dropDisabled": [4, "drop-disabled"],
359
385
  "dropItemsCallback": [16],
360
- "treeModel": [1040],
386
+ "treeModel": [16],
361
387
  "lazyLoadTreeItemsCallback": [16],
362
388
  "modifyItemCaptionCallback": [16],
363
- "multiSelection": [1028, "multi-selection"],
389
+ "multiSelection": [4, "multi-selection"],
364
390
  "showLines": [1, "show-lines"],
365
391
  "sortItemsCallback": [16],
366
392
  "waitDropProcessing": [32],
393
+ "loadLazyContent": [64],
367
394
  "scrollIntoVisible": [64],
368
395
  "toggleItems": [64],
369
396
  "updateAllItemsProperties": [64],
370
- "updateItemsProperties": [64]
397
+ "updateItemsProperties": [64],
398
+ "updateValidDropZone": [64]
371
399
  }, [[0, "loadLazyContent", "loadLazyChildrenHandler"], [0, "modifyCaption", "handleCaptionModification"]]]);
372
400
  function defineCustomElement$1() {
373
401
  if (typeof customElements === "undefined") {
@@ -1,7 +1,7 @@
1
1
  import { proxyCustomElement, HTMLElement, createEvent, h, Host } from '@stencil/core/internal/client';
2
2
  import { D as DISABLED_CLASS } from './reserverd-names.js';
3
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, #000);border-radius:18.75%}.container--checked{background-color:var(--option-checked-color, #ffffff00)}.container:focus-within{box-shadow:0 0 1px 1px #00000040}.input{display:flex;width:100%;height:100%;opacity:0;margin:0;padding:0}.option{position:absolute;left:50%;top:50%;transform:translate(-50%, -50%);width:50%;height:50%;background-color:#000;opacity:0;pointer-events:none}.option--checked{opacity:1;-webkit-mask:url(\"data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8' %3E%3Cpath fill='currentColor' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z' /%3E%3C/svg%3E\")}.option--indeterminate{opacity:1}.label{margin-inline-start:min(0.35em, 7px)}";
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
5
 
6
6
  const CHECKBOX_ID = "checkbox";
7
7
  const PARTS = (checked, indeterminate) => `${checked ? " checked" : ""}${indeterminate ? " indeterminate" : ""}`;
@@ -1,5 +1,5 @@
1
1
  import { proxyCustomElement, HTMLElement, createEvent, h, Host } from '@stencil/core/internal/client';
2
- import { a as formMessageLogic } from './form.js';
2
+ import { a as formMessageLogic, b as formTooltipLogic } from './form.js';
3
3
  import { r as repositionScroll } from './reposition-scroll.js';
4
4
  import { K as KeyboardKeys } from './types.js';
5
5
  import { e as exportParts } from './export-parts.js';
@@ -28,7 +28,7 @@ function mutationObserverRemoved(target, ref) {
28
28
  return observer; // Return the observer instance if needed
29
29
  }
30
30
 
31
- const comboBoxCss = "/*! 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{font-family:var(--font-family-primary);display:block}:host gxg-form-text::part(input){padding-inline-end:var(--spacing-comp-05)}:host gxg-form-text.clear-icon::part(input){padding-inline-end:calc(var(--spacing-comp-05) * 2)}:host .main-container{width:100%;position:relative;}:host .main-container .label{font-size:var(--font-size-sm);margin-bottom:var(--spacing-lay-xs)}:host .main-container .search-container{flex:1;position:relative}:host .main-container .search-container .buttons-wrapper{position:absolute;top:2px;height:calc(100% - 4px);display:flex;align-items:center;padding-inline-start:var(--spacing-comp-01);inset-inline-end:2px}:host .main-container .search-container .buttons-wrapper .button-icon{height:20px;width:20px}:host .main-container .items-container{border:var(--border-width-sm) solid var(--gxg-border-color--regular);border-radius:var(--border-radius-md);border-top-left-radius:0;border-top-right-radius:0;border-top-width:0;overflow-y:auto;overscroll-behavior:contain;background-color:var(--color-background);position:fixed;width:inherit;box-sizing:border-box;z-index:999;display:none;}:host .main-container .items-container::-webkit-scrollbar{width:6px;height:6px}:host .main-container .items-container::-webkit-scrollbar-track{background-color:var(--gray-02);border-radius:10px}:host .main-container .items-container::-webkit-scrollbar-thumb{background:var(--gray-05);border-radius:10px}:host .main-container .items-container::-webkit-scrollbar-thumb:hover{background:var(--gray-04);cursor:pointer}:host .main-container .items-container--show{display:block}:host .main-container .items-container--no-match{display:none}:host .main-container .items-container .no-ocurrences-found{font-family:var(--font-family-primary);font-size:var(--font-size-sm);color:var(--color-on-background);padding:var(--spacing-comp-01);background-color:var(--color-background)}:host .main-container .items-container .no-ocurrences-found span{display:block;color:var(--gray-04)}:host .main-container .items-container.exact-match{overflow-y:hidden}:host .main-container .items-container--above{transform:translateY(calc(-100% - 24px));border-top-width:1px;border-bottom-width:0;border-top-left-radius:var(--border-radius-md);border-top-right-radius:var(--border-radius-md);border-bottom-right-radius:0;border-bottom-left-radius:0}:host .search-and-items-container{flex:1}:host([label-position=start]) .main-container{display:flex;flex-direction:row}.messages-wrapper{margin-top:var(--spacing-comp-02);display:flex;gap:var(--spacing-comp-01);flex-direction:column}:host(.large) .main-container .label{display:flex;font-size:var(--font-size-lg);margin-bottom:var(--spacing-lay-xs);line-height:1.455em}:host(.large) .main-container .items-container .no-ocurrences-found{font-size:var(--font-size-lg)}";
31
+ const comboBoxCss = "/*! 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{font-family:var(--font-family-primary);display:block}:host gxg-form-text::part(input){padding-inline-end:var(--spacing-comp-05)}:host gxg-form-text.clear-icon::part(input){padding-inline-end:calc(var(--spacing-comp-05) * 2)}:host .main-container{width:100%;position:relative;}:host .main-container .outer-wrapper{display:flex;gap:var(--spacing-comp-01);align-items:center}:host .main-container .label{font-size:var(--font-size-sm);margin-bottom:var(--spacing-lay-xs)}:host .main-container .search-container{flex:1;position:relative}:host .main-container .search-container .buttons-wrapper{position:absolute;top:2px;height:calc(100% - 4px);display:flex;align-items:center;padding-inline-start:var(--spacing-comp-01);inset-inline-end:2px}:host .main-container .search-container .buttons-wrapper .button-icon{height:20px;width:20px}:host .main-container .items-container{border:var(--border-width-sm) solid var(--gxg-border-color--regular);border-radius:var(--border-radius-md);border-top-left-radius:0;border-top-right-radius:0;border-top-width:0;overflow-y:auto;overscroll-behavior:contain;background-color:var(--color-background);position:fixed;width:inherit;box-sizing:border-box;z-index:999;display:none;}:host .main-container .items-container::-webkit-scrollbar{width:6px;height:6px}:host .main-container .items-container::-webkit-scrollbar-track{background-color:var(--gray-02);border-radius:10px}:host .main-container .items-container::-webkit-scrollbar-thumb{background:var(--gray-05);border-radius:10px}:host .main-container .items-container::-webkit-scrollbar-thumb:hover{background:var(--gray-04);cursor:pointer}:host .main-container .items-container--show{display:block}:host .main-container .items-container--no-match{display:none}:host .main-container .items-container .no-ocurrences-found{font-family:var(--font-family-primary);font-size:var(--font-size-sm);color:var(--color-on-background);padding:var(--spacing-comp-01);background-color:var(--color-background)}:host .main-container .items-container .no-ocurrences-found span{display:block;color:var(--gray-04)}:host .main-container .items-container.exact-match{overflow-y:hidden}:host .main-container .items-container--above{transform:translateY(calc(-100% - 24px));border-top-width:1px;border-bottom-width:0;border-top-left-radius:var(--border-radius-md);border-top-right-radius:var(--border-radius-md);border-bottom-right-radius:0;border-bottom-left-radius:0}:host .search-and-items-container{flex:1}:host([label-position=start]) .main-container{display:flex;flex-direction:row}.messages-wrapper{margin-top:var(--spacing-comp-02);display:flex;gap:var(--spacing-comp-01);flex-direction:column}:host(.large) .main-container .label{display:flex;font-size:var(--font-size-lg);margin-bottom:var(--spacing-lay-xs);line-height:1.455em}:host(.large) .main-container .items-container .no-ocurrences-found{font-size:var(--font-size-lg)}";
32
32
 
33
33
  const GxgComboBox = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
34
34
  constructor() {
@@ -45,6 +45,10 @@ const GxgComboBox = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
45
45
  toggleButton: "toggle-button",
46
46
  };
47
47
  this.componentDidLoadFlag = false;
48
+ /**
49
+ * The presence of this attribute displays a tooltip message, instead of a block message below the control
50
+ */
51
+ this.toolTip = false;
48
52
  /**
49
53
  * The presence of this attribute makes the input disabled
50
54
  */
@@ -599,16 +603,17 @@ const GxgComboBox = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
599
603
  const clearIcon = this.value && !this.disableFilter && !this.disableClear;
600
604
  return (h(Host, { class: {
601
605
  "gxg-combo-box--disabled": this.disableFilter,
606
+ tooltip: this.toolTip,
602
607
  large: state.large,
603
608
  }, style: { maxWidth: this.maxWidth, minWidth: this.minWidth }, exportParts: this.exportparts ? this.exportparts : null }, h("div", { class: {
604
609
  "main-container": true,
605
- }, ref: (el) => (this.mainContainer = el) }, this.label ? (h("gxg-label", { labelPosition: this.labelPosition, center: this.centerLabel, width: this.labelWidth }, this.label)) : null, h("div", { class: "search-and-items-container", ref: (el) => (this.searchItemsContainer = el) }, h("div", { class: { "search-container": true } }, h("gxg-form-text", { placeholder: this.placeholder, onInput: this.inputHandler.bind(this), onKeyDown: this.keyDownHandler, onClick: this.inputTextClickHandler, value: this.text, icon: this.fixedIcon || this.inputTextIcon, iconPosition: "start", readonly: this.disableFilter, ref: (el) => (this.inputText = el), validationStatus: this.validationStatus, disabled: this.disabled, onValueChanged: this.handleValueChangeFormText, cursorEnd: this.cursorEnd, preventValueChangedEmit: true, preventValueChangeOnDisabled: true, class: { "clear-icon": clearIcon }, part: this.parts.input }), h("div", { class: "buttons-wrapper" }, clearIcon ? (h("gxg-button", { class: { "button-icon delete-icon": true }, icon: "menus/delete", type: "tertiary", onClick: () => this.clearCombo(), tabindex: "-1", fit: true, disabled: this.disabled, part: this.parts.clearButton })) : null, h("gxg-button", { class: { "button-icon": true }, icon: "navigation/arrow-down", type: "secondary-icon-only", onClick: this.toggleListButtonClickHandler, fit: true, disabled: this.disabled, tabindex: "-1", part: this.parts.toggleButton }))), h("div", { class: {
610
+ }, ref: (el) => (this.mainContainer = el) }, this.label ? (h("gxg-label", { labelPosition: this.labelPosition, center: this.centerLabel, width: this.labelWidth }, this.label)) : null, h("div", { class: "outer-wrapper" }, h("div", { class: "search-and-items-container", ref: (el) => (this.searchItemsContainer = el) }, h("div", { class: { "search-container": true } }, h("gxg-form-text", { placeholder: this.placeholder, onInput: this.inputHandler.bind(this), onKeyDown: this.keyDownHandler, onClick: this.inputTextClickHandler, value: this.text, icon: this.fixedIcon || this.inputTextIcon, iconPosition: "start", readonly: this.disableFilter, ref: (el) => (this.inputText = el), validationStatus: this.validationStatus, disabled: this.disabled, onValueChanged: this.handleValueChangeFormText, cursorEnd: this.cursorEnd, preventValueChangedEmit: true, preventValueChangeOnDisabled: true, class: { "clear-icon": clearIcon }, part: this.parts.input }), h("div", { class: "buttons-wrapper" }, clearIcon ? (h("gxg-button", { class: { "button-icon delete-icon": true }, icon: "menus/delete", type: "tertiary", onClick: () => this.clearCombo(), tabindex: "-1", fit: true, disabled: this.disabled, part: this.parts.clearButton })) : null, h("gxg-button", { class: { "button-icon": true }, icon: "navigation/arrow-down", type: "secondary-icon-only", onClick: this.toggleListButtonClickHandler, fit: true, disabled: this.disabled, tabindex: "-1", part: this.parts.toggleButton }))), h("div", { class: {
606
611
  "items-container": true,
607
612
  "items-container--show": this.listIsOpen,
608
613
  "items-container--no-match": this.noMatch,
609
614
  "items-container--below": this.listPosition === "below",
610
615
  "items-container--above": this.listPosition === "above",
611
- }, style: { maxHeight: this.listMaxHeight }, ref: (el) => (this.itemsContainer = el) }, h("slot", null), this.noMatch && this.strict ? (h("div", { class: "no-ocurrences-found" }, "No occurrences found", h("span", null, "ctrl/cmd + backspace to erase"))) : null))), this.formMessageLogic(this)));
616
+ }, style: { maxHeight: this.listMaxHeight }, ref: (el) => (this.itemsContainer = el) }, h("slot", null), this.noMatch && this.strict ? (h("div", { class: "no-ocurrences-found" }, "No occurrences found", h("span", null, "ctrl/cmd + backspace to erase"))) : null)), this.toolTip ? formTooltipLogic(this) : null)), !this.toolTip ? formMessageLogic(this) : null));
612
617
  }
613
618
  static get delegatesFocus() { return true; }
614
619
  get el() { return this; }
@@ -621,6 +626,7 @@ const GxgComboBox = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
621
626
  }; }
622
627
  static get style() { return comboBoxCss; }
623
628
  }, [17, "gxg-combo-box", {
629
+ "toolTip": [4, "tool-tip"],
624
630
  "fixedIcon": [1, "fixed-icon"],
625
631
  "disabled": [4],
626
632
  "label": [1],
@@ -0,0 +1,7 @@
1
+ /* The purpose of config is to provide a simple way to change options/settings that are generally applied on all the components*/
2
+ const config = {
3
+ // tooltip is a property that exists on some gemini controls. When set to true, it will display the error/warning/success message (if any) by using a tooltip, instead of displaying the message under the control. The tooltip prevents changes on the component total height, which is desired.
4
+ tooltip: true
5
+ };
6
+
7
+ export { config as c };