@genexus/genexus-ide-ui 0.0.13 → 0.0.14

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 (77) hide show
  1. package/dist/cjs/ch-suggest_5.cjs.entry.js +388 -0
  2. package/dist/cjs/genexus-ide-ui.cjs.js +1 -1
  3. package/dist/cjs/gx-ide-container_2.cjs.entry.js +168 -0
  4. package/dist/cjs/gx-ide-references.cjs.entry.js +299 -0
  5. package/dist/cjs/gx-ide-test.cjs.entry.js +2 -25
  6. package/dist/cjs/{gx-ide-container_10.cjs.entry.js → gxg-combo-box_8.cjs.entry.js} +0 -162
  7. package/dist/cjs/{gxg-tree-item.cjs.entry.js → gxg-tree_2.cjs.entry.js} +167 -0
  8. package/dist/cjs/loader.cjs.js +1 -1
  9. package/dist/cjs/render-tree-25d5b8a1.js +29 -0
  10. package/dist/collection/collection-manifest.json +1 -0
  11. package/dist/collection/common/render-suggest.js +18 -0
  12. package/dist/collection/components/references/gx-ide-assets/references/langs/references.lang.en.json +15 -0
  13. package/dist/collection/components/references/gx-ide-assets/references/langs/references.lang.ja.json +3 -0
  14. package/dist/collection/components/references/gx-ide-assets/references/langs/references.lang.zh.json +3 -0
  15. package/dist/collection/components/references/helpers.js +76 -0
  16. package/dist/collection/components/references/references.css +194 -0
  17. package/dist/collection/components/references/references.js +377 -0
  18. package/dist/collection/index.js +1 -0
  19. package/dist/components/ch-suggest-list-item.js +1 -58
  20. package/dist/{esm/ch-suggest-list-item.entry.js → components/ch-suggest-list-item2.js} +27 -8
  21. package/dist/components/ch-suggest-list.js +1 -39
  22. package/dist/components/ch-suggest-list2.js +41 -0
  23. package/dist/components/ch-suggest.js +1 -259
  24. package/dist/{esm/ch-suggest.entry.js → components/ch-suggest2.js} +47 -8
  25. package/dist/components/gx-ide-references.d.ts +11 -0
  26. package/dist/components/gx-ide-references.js +433 -0
  27. package/dist/components/gx-ide-test.js +2 -25
  28. package/dist/components/gxg-suggest.js +1 -55
  29. package/dist/components/gxg-text.js +1 -88
  30. package/dist/components/index.d.ts +1 -0
  31. package/dist/components/index.js +1 -0
  32. package/dist/components/render-tree.js +27 -0
  33. package/dist/{esm/gxg-suggest.entry.js → components/suggest.js} +29 -10
  34. package/dist/{esm/gxg-text.entry.js → components/text.js} +30 -8
  35. package/dist/esm/ch-suggest_5.entry.js +380 -0
  36. package/dist/esm/genexus-ide-ui.js +1 -1
  37. package/dist/esm/gx-ide-container_2.entry.js +163 -0
  38. package/dist/esm/gx-ide-references.entry.js +295 -0
  39. package/dist/esm/gx-ide-test.entry.js +2 -25
  40. package/dist/esm/{gx-ide-container_10.entry.js → gxg-combo-box_8.entry.js} +2 -162
  41. package/dist/esm/{gxg-tree-item.entry.js → gxg-tree_2.entry.js} +168 -2
  42. package/dist/esm/loader.js +1 -1
  43. package/dist/esm/render-tree-fc8636a3.js +27 -0
  44. package/dist/genexus-ide-ui/genexus-ide-ui.esm.js +1 -1
  45. package/dist/genexus-ide-ui/gx-ide-assets/references/langs/references.lang.en.json +15 -0
  46. package/dist/genexus-ide-ui/gx-ide-assets/references/langs/references.lang.ja.json +3 -0
  47. package/dist/genexus-ide-ui/gx-ide-assets/references/langs/references.lang.zh.json +3 -0
  48. package/dist/genexus-ide-ui/p-1e412d88.entry.js +1 -0
  49. package/dist/genexus-ide-ui/p-62814082.entry.js +1 -0
  50. package/dist/genexus-ide-ui/p-8cdad9e1.entry.js +1 -0
  51. package/dist/genexus-ide-ui/p-92b75873.entry.js +1 -0
  52. package/dist/genexus-ide-ui/p-a5fee36d.entry.js +1 -0
  53. package/dist/genexus-ide-ui/p-abee8c7b.js +1 -0
  54. package/dist/genexus-ide-ui/p-be9406e7.entry.js +1 -0
  55. package/dist/types/common/render-suggest.d.ts +2 -0
  56. package/dist/types/components/references/helpers.d.ts +17 -0
  57. package/dist/types/components/references/references.d.ts +125 -0
  58. package/dist/types/components.d.ts +78 -0
  59. package/dist/types/index.d.ts +1 -0
  60. package/package.json +1 -1
  61. package/dist/cjs/ch-suggest-list-item.cjs.entry.js +0 -45
  62. package/dist/cjs/ch-suggest-list.cjs.entry.js +0 -28
  63. package/dist/cjs/ch-suggest.cjs.entry.js +0 -226
  64. package/dist/cjs/gxg-suggest.cjs.entry.js +0 -42
  65. package/dist/cjs/gxg-text.cjs.entry.js +0 -72
  66. package/dist/cjs/gxg-tree.cjs.entry.js +0 -173
  67. package/dist/esm/ch-suggest-list.entry.js +0 -24
  68. package/dist/esm/gxg-tree.entry.js +0 -169
  69. package/dist/genexus-ide-ui/p-0a954e0f.entry.js +0 -1
  70. package/dist/genexus-ide-ui/p-20a45778.entry.js +0 -1
  71. package/dist/genexus-ide-ui/p-23d4b295.entry.js +0 -1
  72. package/dist/genexus-ide-ui/p-5463844e.entry.js +0 -1
  73. package/dist/genexus-ide-ui/p-5faaf0e5.entry.js +0 -1
  74. package/dist/genexus-ide-ui/p-7a5e0988.entry.js +0 -1
  75. package/dist/genexus-ide-ui/p-a985b448.entry.js +0 -1
  76. package/dist/genexus-ide-ui/p-ad9fe469.entry.js +0 -1
  77. package/dist/genexus-ide-ui/p-b3727324.entry.js +0 -1
@@ -0,0 +1,388 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ const index = require('./index-93a6a7e0.js');
6
+ const store = require('./store-49485138.js');
7
+ const form = require('./form-c5e161c6.js');
8
+ const classesNames = require('./classesNames-5b7c6ad4.js');
9
+
10
+ const chSuggestCss = "*,::after,::before{box-sizing:border-box}:host{--window-max-height:none;--window-gap:50px}.main-wrapper{display:block}.label-input-wrapper{display:flex}.label-input-wrapper .input{flex:1}:host([label-position=start]) .label-input-wrapper{flex-direction:row}:host([label-position=above]) .label-input-wrapper{flex-direction:column}.input{background-color:unset;border:none;color:inherit;font:inherit;margin:0;padding:0;outline:0}.ch-window-container{position:relative}ch-window::part(window){width:100%;max-height:calc(var(--window-max-height) - var(--window-gap));overflow-y:auto}";
11
+
12
+ const ARROW_DOWN$1 = "ArrowDown";
13
+ const ARROW_UP$1 = "ArrowUp";
14
+ const ChSuggest = class {
15
+ constructor(hostRef) {
16
+ index.registerInstance(this, hostRef);
17
+ this.valueChanged = index.createEvent(this, "valueChanged", 7);
18
+ this.keyEventsDictionary = {
19
+ ArrowDown: (e) => {
20
+ const newFocusedItem = this.getNewFocusedItem(e.currentFocusedItem, ARROW_DOWN$1);
21
+ const nextFocusedItem = this.getNewFocusedItem(newFocusedItem, ARROW_DOWN$1);
22
+ newFocusedItem && newFocusedItem.focus();
23
+ if (!nextFocusedItem) {
24
+ /* This is the last item. Adjust window scroll to be at the very bottom*/
25
+ this.scrollListToBottom();
26
+ }
27
+ },
28
+ ArrowUp: (e) => {
29
+ const newFocusedItem = this.getNewFocusedItem(e.currentFocusedItem, ARROW_UP$1);
30
+ const nextFocusedItem = this.getNewFocusedItem(newFocusedItem, ARROW_UP$1);
31
+ newFocusedItem && newFocusedItem.focus();
32
+ if (!nextFocusedItem) {
33
+ /* This is the first item. Adjust window scroll to be at the very top*/
34
+ this.scrollListToTop();
35
+ }
36
+ }
37
+ };
38
+ // 3.STATE() VARIABLES //
39
+ this.windowHidden = true;
40
+ this.slotIsEmpty = true;
41
+ // 4.PUBLIC PROPERTY API / WATCH'S //
42
+ /**
43
+ * The debounce amount in milliseconds (This is the time the suggest waits after the user has finished typing, to show the suggestions).
44
+ */
45
+ this.debounce = 500;
46
+ /**
47
+ * The label position
48
+ */
49
+ this.labelPosition = "start";
50
+ /**
51
+ * Whether or not to display the label
52
+ */
53
+ this.showLabel = true;
54
+ /**
55
+ * Wether or not the suggest has a header. The header will show the "suggestTitle" if provided, and a close button.
56
+ */
57
+ this.showHeader = false;
58
+ /**
59
+ * If true, it will position the cursor at the end when the input is focused.
60
+ */
61
+ this.cursorEnd = false;
62
+ // 10.LOCAL METHODS //
63
+ this.evaluateSlotIsEmpty = () => {
64
+ this.slotIsEmpty = !this.el.firstElementChild;
65
+ };
66
+ this.setFocusOnFirstItem = () => {
67
+ const firstItem = this.el.querySelector("ch-suggest-list-item");
68
+ firstItem && firstItem.focus();
69
+ };
70
+ this.getChSuggestListItems = () => Array.from(this.el.querySelectorAll("ch-suggest-list-item"));
71
+ this.getNewFocusedItem = (currentFocusedItem, direction) => {
72
+ /* Helper function that returns the list item that should get focus (the first one, or the last one)*/
73
+ const getListChild = (list) => {
74
+ const listItems = list.querySelectorAll("ch-suggest-list-item");
75
+ let listChild = listItems && listItems[listItems.length - 1];
76
+ if (direction === ARROW_DOWN$1) {
77
+ listChild = list.querySelector("ch-suggest-list-item");
78
+ }
79
+ else {
80
+ const parentListItems = list.querySelectorAll("ch-suggest-list-item");
81
+ listChild =
82
+ parentListItems && parentListItems[parentListItems.length - 1];
83
+ }
84
+ return listChild;
85
+ };
86
+ if (!currentFocusedItem) {
87
+ return;
88
+ }
89
+ let newFocusedItem = direction === ARROW_DOWN$1
90
+ ? currentFocusedItem.nextElementSibling
91
+ : currentFocusedItem.previousElementSibling;
92
+ if ((newFocusedItem === null || newFocusedItem === void 0 ? void 0 : newFocusedItem.nodeName) === "CH-SUGGEST-LIST") {
93
+ newFocusedItem = getListChild(newFocusedItem);
94
+ }
95
+ else if (!newFocusedItem) {
96
+ /* this could be the last item of a list, but not the last item*/
97
+ const parent = currentFocusedItem.parentElement;
98
+ const sibling = direction === ARROW_DOWN$1
99
+ ? parent.nextElementSibling
100
+ : parent.previousElementSibling;
101
+ const parentIsList = parent.nodeName === "CH-SUGGEST-LIST";
102
+ if (parentIsList &&
103
+ sibling &&
104
+ sibling.nodeName === "CH-SUGGEST-LIST-ITEM") {
105
+ newFocusedItem =
106
+ direction === ARROW_DOWN$1
107
+ ? parent.nextElementSibling
108
+ : parent.previousElementSibling;
109
+ }
110
+ else if (parentIsList &&
111
+ sibling &&
112
+ sibling.nodeName === "CH-SUGGEST-LIST") {
113
+ const parentList = direction === ARROW_DOWN$1
114
+ ? parent.nextElementSibling
115
+ : parent.previousElementSibling;
116
+ let listChild;
117
+ if (direction === ARROW_DOWN$1) {
118
+ listChild = parentList.querySelector("ch-suggest-list-item");
119
+ }
120
+ else {
121
+ listChild = getListChild(parentList);
122
+ }
123
+ newFocusedItem = listChild ? listChild : null;
124
+ }
125
+ }
126
+ return newFocusedItem;
127
+ };
128
+ /**
129
+ * Every time the input event is triggered, the value of the input is sent to processInputEvent, which is responsible for displaying a window with the suggested options. this.debounce is a delay that, along with clearTimeout, ensures that the window is only shown after the user has stopped typing.
130
+ */
131
+ this.handleInput = (e) => {
132
+ this.value = e.target.value;
133
+ if (this.timeoutReference) {
134
+ clearTimeout(this.timeoutReference);
135
+ }
136
+ this.timeoutReference = setTimeout(() => {
137
+ this.processInputEvent();
138
+ }, this.debounce);
139
+ };
140
+ this.handleKeyDown = (e) => {
141
+ if (e.key === ARROW_DOWN$1) {
142
+ e.preventDefault();
143
+ this.setFocusOnFirstItem();
144
+ }
145
+ };
146
+ this.evaluateWindowMaxHeight = () => {
147
+ const viewportHeight = window.innerHeight;
148
+ const documentHeight = document.body.scrollHeight;
149
+ const height = documentHeight >= viewportHeight ? documentHeight : viewportHeight;
150
+ const inputBottomPosition = this.textInput.getBoundingClientRect().bottom + window.scrollY;
151
+ const windowMaxHeight = height - inputBottomPosition + "px";
152
+ this.el.style.setProperty("--window-max-height", windowMaxHeight);
153
+ };
154
+ this.scrollListToTop = () => {
155
+ const partWindow = this.chWindow.shadowRoot.querySelector("[part='window']");
156
+ partWindow.scrollTop = 0;
157
+ };
158
+ this.scrollListToBottom = () => {
159
+ const partWindow = this.chWindow.shadowRoot.querySelector("[part='window']");
160
+ partWindow.scrollTop = partWindow.scrollHeight;
161
+ };
162
+ this.processInputEvent = () => {
163
+ this.evaluateWindowMaxHeight();
164
+ this.chWindow.hidden = this.slotIsEmpty;
165
+ };
166
+ this.closeWindow = () => {
167
+ this.chWindow.hidden = true;
168
+ };
169
+ this.onFocusHandler = () => {
170
+ if (this.cursorEnd) {
171
+ this.textInput.setSelectionRange(this.textInput.value.length, this.textInput.value.length);
172
+ }
173
+ };
174
+ }
175
+ watchValueHandler(newValue) {
176
+ this.valueChanged.emit(newValue);
177
+ }
178
+ // 6.COMPONENT LIFECYCLE EVENTS //
179
+ componentWillLoad() {
180
+ this.evaluateSlotIsEmpty();
181
+ }
182
+ // 7.LISTENERS //
183
+ itemSelectedHandler(event) {
184
+ this.value = event.detail.value;
185
+ this.closeWindow();
186
+ }
187
+ focusChangeAttemptHandler(event) {
188
+ const keyEventHandler = this.keyEventsDictionary[event.detail.code];
189
+ if (keyEventHandler) {
190
+ const currentFocusedItem = event.detail.el;
191
+ const chSuggestListItemsArray = this.getChSuggestListItems();
192
+ const currentFocusedItemIndex = chSuggestListItemsArray.findIndex(item => {
193
+ return item === currentFocusedItem;
194
+ });
195
+ const newItemToSetFocusOn = null;
196
+ keyEventHandler({
197
+ event: event.detail,
198
+ currentFocusedItem: currentFocusedItem,
199
+ chSuggestListItemsArray: chSuggestListItemsArray,
200
+ currentFocusedItemIndex: currentFocusedItemIndex,
201
+ newItemToSetFocusOn: newItemToSetFocusOn
202
+ });
203
+ }
204
+ }
205
+ windowClosedHandler() {
206
+ this.textInput.focus();
207
+ this.windowHidden = true;
208
+ }
209
+ // 9.PUBLIC METHODS API //
210
+ /**
211
+ * @description It selects/highlights the input text.
212
+ */
213
+ async selectInputText() {
214
+ this.textInput.focus();
215
+ this.textInput.select();
216
+ }
217
+ // 10.RENDER() FUNCTION //
218
+ render() {
219
+ return (index.h(index.Host, null, index.h("div", { class: "main-wrapper", part: "main-wrapper" }, index.h("div", { class: "label-input-wrapper", part: "label-input-wrapper" }, this.showLabel && this.label && (index.h("label", { id: "label", htmlFor: "input", part: "label" }, this.label)), index.h("input", { type: "text", id: "input", part: "input", class: "input", ref: el => (this.textInput = el), onInput: this.handleInput, onKeyDown: this.handleKeyDown, onFocus: this.onFocusHandler, value: this.value, autocomplete: "off", "aria-controls": "ch-window", "aria-label": !this.showLabel && this.label ? this.label : undefined, "aria-labelledby": this.showLabel && this.label ? "label" : undefined, "aria-expanded": this.windowHidden.toString() })), index.h("ch-window", { id: "ch-window", container: this.textInput, "close-on-outside-click": true, "close-on-escape": true, xAlign: "inside-start", yAlign: "outside-end", ref: el => (this.chWindow = el), showHeader: this.showHeader, caption: this.suggestTitle, exportparts: "\n header:header, \n caption:title, \n close:close-button,\n window:dropdown" }, index.h("slot", { onSlotchange: this.evaluateSlotIsEmpty })))));
220
+ }
221
+ static get delegatesFocus() { return true; }
222
+ get el() { return index.getElement(this); }
223
+ static get watchers() { return {
224
+ "value": ["watchValueHandler"]
225
+ }; }
226
+ };
227
+ ChSuggest.style = chSuggestCss;
228
+
229
+ const chSuggestListCss = "*,::after,::before{box-sizing:border-box}:host{display:block}.title{margin:0;font:inherit}.list{margin:0;padding:0}";
230
+
231
+ const ChSuggestList = class {
232
+ constructor(hostRef) {
233
+ index.registerInstance(this, hostRef);
234
+ }
235
+ // 2.REFERENCE TO ELEMENTS //
236
+ // 3.STATE() VARIABLES //
237
+ // 4.PUBLIC PROPERTY API / WATCH'S //
238
+ // 5.EVENTS (EMIT) //
239
+ // 6.COMPONENT LIFECYCLE EVENTS //
240
+ // 7.LISTENERS //
241
+ // 8.PUBLIC METHODS API //
242
+ // 9.LOCAL METHODS //
243
+ // 10.RENDER() FUNCTION //
244
+ render() {
245
+ return (index.h(index.Host, null, this.label && (index.h("h2", { id: "heading", part: "title", class: "title" }, this.label)), index.h("ul", { "aria-labelledby": this.label ? "heading" : undefined, part: "list", class: "list" }, index.h("slot", null))));
246
+ }
247
+ };
248
+ ChSuggestList.style = chSuggestListCss;
249
+
250
+ const chSuggestListItemCss = ":host{display:block}:where(button){all:unset;display:flex;width:100%;cursor:pointer}*,::after,::before{box-sizing:border-box}";
251
+
252
+ const ARROW_DOWN = "ArrowDown";
253
+ const ARROW_UP = "ArrowUp";
254
+ const ChSuggestListItem = class {
255
+ constructor(hostRef) {
256
+ index.registerInstance(this, hostRef);
257
+ this.itemSelected = index.createEvent(this, "itemSelected", 7);
258
+ this.focusChangeAttempt = index.createEvent(this, "focusChangeAttempt", 7);
259
+ // 6.COMPONENT LIFECYCLE EVENTS //
260
+ // 7.LISTENERS //
261
+ // 8.PUBLIC METHODS API //
262
+ // 9.LOCAL METHODS //
263
+ this.handleClick = () => {
264
+ this.itemSelected.emit({
265
+ value: this.value || this.el.innerText,
266
+ description: this.description
267
+ });
268
+ };
269
+ this.handleKeyDown = (e) => {
270
+ if (e.code === ARROW_UP || e.code === ARROW_DOWN) {
271
+ e.preventDefault();
272
+ this.focusChangeAttempt.emit({
273
+ el: this.el,
274
+ code: e.code
275
+ });
276
+ }
277
+ };
278
+ }
279
+ // 10.RENDER() FUNCTION //
280
+ render() {
281
+ return (index.h(index.Host, { role: "listitem", onKeyDown: this.handleKeyDown }, index.h("button", { part: "button", onClick: this.handleClick }, index.h("slot", { name: "icon" }), index.h("div", { class: "content-wrapper", part: "content-wrapper" }, index.h("slot", null), this.description && (index.h("span", { part: "description" }, this.description))))));
282
+ }
283
+ static get delegatesFocus() { return true; }
284
+ get el() { return index.getElement(this); }
285
+ };
286
+ ChSuggestListItem.style = chSuggestListItemCss;
287
+
288
+ const stylesCss = "@charset \"UTF-8\";: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}:host(.gxg-validation--warning) .form-element{border-color:var(--color-warning-dark)}:host(.gxg-validation--warning) .form-element:focus{outline-color:var(--color-warning-dark);border-color:var(--color-warning-dark)}:host(.gxg-validation--warning) .form-element:focus+.checkmark{--checkmark-border-color:var(--color-warning-dark)}:host(.gxg-validation--error) .form-element{border-color:var(--color-error-dark)}:host(.gxg-validation--error) .form-element:focus{outline-color:var(--color-error-dark);border-color:var(--color-error-dark)}:host(.gxg-validation--error) .form-element:focus+.checkmark{--checkmark-border-color:var(--color-error-dark)}:host(.gxg-validation--success) .form-element{border-color:var(--color-success-dark)}:host(.gxg-validation--success) .form-element:focus{outline-color:var(--color-success-dark);border-color:var(--color-success-dark)}:host(.gxg-validation--success) .form-element:focus+.checkmark{--checkmark-border-color:var(--color-success-dark)}ch-suggest{font-family:var(--font-family-primary);font-size:var(--font-size-lg);color:var(--color-on-background);}ch-suggest::-webkit-scrollbar{width:6px;height:6px}ch-suggest::-webkit-scrollbar-track{background-color:var(--gray-02);border-radius:10px}ch-suggest::-webkit-scrollbar-thumb{background:var(--gray-05);border-radius:10px}ch-suggest::-webkit-scrollbar-thumb:hover{background:var(--gray-04);cursor:pointer}ch-suggest .gxg-scroll{display:block;overflow-y:auto;padding-right:2px}ch-suggest ::-webkit-scrollbar{width:6px;height:6px}ch-suggest ::-webkit-scrollbar-track{background-color:var(--gray-02);border-radius:10px}ch-suggest ::-webkit-scrollbar-thumb{background:var(--gray-05);border-radius:10px}ch-suggest ::-webkit-scrollbar-thumb:hover{background:var(--gray-04);cursor:pointer}ch-suggest::part(label){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;display:flex;align-items:center;cursor:default;font-size:inherit}ch-suggest[label-position=start]::part(label){margin-inline-end:var(--gxg-label-margin-horizontal)}ch-suggest[label-position=above]::part(label){margin-block-end:var(--gxg-label-margin-vertical)}ch-suggest::part(input){height:var(--spacing-comp-05);border:var(--border-width-sm) solid var(--gxg-border-color--regular);padding:var(--spacing-comp-01) var(--spacing-comp-02);box-sizing:border-box;background-color:var(--color-background)}ch-suggest::part(input):focus{outline-style:solid;outline-color:var(--color-primary-active);outline-width:var(--border-width-md);outline-offset:-2px}ch-suggest::part(input):focus{outline-style:solid;outline-color:var(--color-primary-active);outline-width:var(--border-width-md);outline-offset:-2px}ch-suggest::part(header){display:block;padding-block-end:var(--spacing-comp-02);display:flex;justify-content:flex-end}ch-suggest::part(close-button){height:var(--spacing-comp-05);width:var(--spacing-comp-05);background-color:var(--color-background);color:var(--color-primary-hover);border:1px solid var(--color-primary-hover);box-sizing:border-box;cursor:pointer;display:block}ch-suggest::part(close-button):hover{background-color:var(--color-primary-hover-opacity-01)}ch-suggest::part(close-button)::after{content:\"✖\";width:100%;display:block;line-height:24px;text-align:center}ch-suggest::part(close-button):focus{outline-style:solid;outline-color:var(--color-primary-active);outline-width:var(--border-width-md);outline-offset:-2px}ch-suggest::part(dropdown){background-color:var(--color-background);margin-top:var(--spacing-comp-01);padding:var(--spacing-comp-02);box-shadow:var(--box-shadow-02);}ch-suggest::part(dropdown)::-webkit-scrollbar{width:6px;height:6px}ch-suggest::part(dropdown)::-webkit-scrollbar-track{background-color:var(--gray-02);border-radius:10px}ch-suggest::part(dropdown)::-webkit-scrollbar-thumb{background:var(--gray-05);border-radius:10px}ch-suggest::part(dropdown)::-webkit-scrollbar-thumb:hover{background:var(--gray-04);cursor:pointer}ch-suggest::part(dropdown) .gxg-scroll{display:block;overflow-y:auto;padding-right:2px}ch-suggest::part(dropdown) ::-webkit-scrollbar{width:6px;height:6px}ch-suggest::part(dropdown) ::-webkit-scrollbar-track{background-color:var(--gray-02);border-radius:10px}ch-suggest::part(dropdown) ::-webkit-scrollbar-thumb{background:var(--gray-05);border-radius:10px}ch-suggest::part(dropdown) ::-webkit-scrollbar-thumb:hover{background:var(--gray-04);cursor:pointer}.messages-wrapper{margin-top:var(--spacing-comp-02);display:flex;gap:var(--spacing-comp-01);flex-direction:column}gxg-suggest.gxg-validation--success ch-suggest::part(input){outline-color:var(--color-success-dark);border-color:var(--color-success-dark)}gxg-suggest.gxg-validation--success ch-suggest::part(input)+.checkmark{--checkmark-border-color:var(--color-success-dark)}gxg-suggest.gxg-validation--warning ch-suggest::part(input){outline-color:var(--color-warning-dark);border-color:var(--color-warning-dark)}gxg-suggest.gxg-validation--warning ch-suggest::part(input)+.checkmark{--checkmark-border-color:var(--color-warning-dark)}gxg-suggest.gxg-validation--error ch-suggest::part(input){outline-color:var(--color-error-dark);border-color:var(--color-error-dark)}gxg-suggest.gxg-validation--error ch-suggest::part(input)+.checkmark{--checkmark-border-color:var(--color-error-dark)}gxg-suggest.gxg--disabled ch-suggest{pointer-events:none}gxg-suggest.gxg--disabled ch-suggest::part(input){background-color:var(--gray-01);color:var(--color-on-disabled)}gxg-suggest[ellipsis]:not([ellipsis=false]) ch-suggest-list-item::part(content-wrapper){white-space:nowrap;overflow:hidden;text-overflow:ellipsis;width:100%}ch-suggest-list{margin:var(--spacing-comp-01) 0;font-family:inherit;border:var(--border-width-sm) solid var(--gxg-border-color--regular)}ch-suggest-list:first-child{margin-top:0}ch-suggest-list:last-child{margin-bottom:0}ch-suggest-list::part(title){text-transform:uppercase;font-weight:var(--font-weight-semibold);margin:var(--spacing-comp-01) 0 0 0;padding:var(--spacing-comp-01) var(--spacing-comp-02)}ch-suggest-list-item{}ch-suggest-list-item::part(button){padding:var(--spacing-comp-01) var(--spacing-comp-02);align-items:center;gap:var(--spacing-comp-01);box-sizing:border-box}ch-suggest-list-item::part(button):focus{outline-style:solid;outline-color:var(--color-primary-active);outline-width:var(--border-width-md);outline-offset:-2px}ch-suggest-list-item::part(description)::before{content:\" - \"}ch-suggest-list-item gxg-icon::part(ch-icon){--icon-size:16px;margin-right:2px}ch-suggest-list-item:hover{background-color:var(--gxg-background-color-item-hover)}";
289
+
290
+ const GxgSuggest = class {
291
+ constructor(hostRef) {
292
+ index.registerInstance(this, hostRef);
293
+ /* VALIDATION */
294
+ /**
295
+ * The validation status
296
+ */
297
+ this.validationStatus = "indeterminate";
298
+ /**
299
+ * The presence of this attribute makes the suggest disabled.
300
+ */
301
+ this.disabled = false;
302
+ /**
303
+ * The presence of this attribute forces the suggest list items to not wrap to a second line, and it will display ellipsis. (...)
304
+ */
305
+ this.ellipsis = true;
306
+ }
307
+ render() {
308
+ return (index.h(index.Host, { class: {
309
+ large: store.state.large,
310
+ [classesNames.formClasses["VALIDATION_INDETERMINATE_CLASS"]]: this.validationStatus === "indeterminate",
311
+ [classesNames.formClasses["VALIDATION_WARNING_CLASS"]]: this.validationStatus === "warning",
312
+ [classesNames.formClasses["VALIDATION_ERROR_CLASS"]]: this.validationStatus === "error",
313
+ [classesNames.formClasses["VALIDATION_SUCCESS_CLASS"]]: this.validationStatus === "success",
314
+ [classesNames.commonClassesNames["DISABLED_CLASS"]]: this.disabled,
315
+ } }, index.h("slot", null), form.formMessageLogic(this)));
316
+ }
317
+ };
318
+ GxgSuggest.style = stylesCss;
319
+
320
+ const textCss = "/*! 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}:host{display:block;font-size:14px}:host p,:host q,:host a{display:block;margin:0;padding:0;margin:0 auto}:host([text-align=start]){text-align:start}:host([text-align=start]) *{text-align:start}:host([text-align=center]){text-align:center}:host([text-align=center]) *{text-align:center}:host([text-align=end]){text-align:end}:host([text-align=end]) *{text-align:end}:host([padding=s]){padding:var(--spacing-comp-01)}:host([padding=m]){padding:var(--spacing-comp-02)}:host(.large) .gxg-text,:host(.large) .gxg-text--gray,:host(.large) .gxg-quote,:host(.large) .gxg-link,:host(.large) .gxg-link-gray,:host(.large) .gxg-alert-error,:host(.large) .gxg-alert-warning,:host(.large) .gxg-alert-success{font-size:var(--font-size-lg)}";
321
+
322
+ const GxgText = class {
323
+ constructor(hostRef) {
324
+ index.registerInstance(this, hostRef);
325
+ /**
326
+ * The target (for "link" or "link-gray" types
327
+ * */
328
+ this.target = "_self";
329
+ /**
330
+ * Text type
331
+ */
332
+ this.type = "text-regular";
333
+ /**
334
+ * Text alignment
335
+ */
336
+ this.textAlign = "start";
337
+ /**
338
+ * Text padding
339
+ */
340
+ this.padding = "none";
341
+ /**
342
+ * Max. width
343
+ */
344
+ this.maxWidth = "100%";
345
+ }
346
+ textType() {
347
+ let text;
348
+ switch (this.type) {
349
+ case "text-regular":
350
+ text = (index.h("p", { style: { maxWidth: this.maxWidth }, class: "gxg-text" }, index.h("slot", null)));
351
+ break;
352
+ case "text-gray":
353
+ text = (index.h("p", { style: { maxWidth: this.maxWidth }, class: "gxg-text--gray" }, index.h("slot", null)));
354
+ break;
355
+ case "text-quote":
356
+ text = (index.h("q", { style: { maxWidth: this.maxWidth }, class: "gxg-quote" }, index.h("slot", null)));
357
+ break;
358
+ case "text-link":
359
+ text = (index.h("a", { style: { maxWidth: this.maxWidth }, href: this.href, target: this.target, class: "gxg-link" }, index.h("slot", null)));
360
+ break;
361
+ case "text-link-gray":
362
+ text = (index.h("a", { style: { maxWidth: this.maxWidth }, href: this.href, target: this.target, class: "gxg-link-gray" }, index.h("slot", null)));
363
+ break;
364
+ case "text-alert-error":
365
+ text = (index.h("p", { style: { maxWidth: this.maxWidth }, class: "gxg-alert-error" }, index.h("slot", null)));
366
+ break;
367
+ case "text-alert-warning":
368
+ text = (index.h("p", { style: { maxWidth: this.maxWidth }, class: "gxg-alert-warning" }, index.h("slot", null)));
369
+ break;
370
+ case "text-alert-success":
371
+ text = (index.h("p", { style: { maxWidth: this.maxWidth }, class: "gxg-alert-success" }, index.h("slot", null)));
372
+ break;
373
+ default:
374
+ text = (index.h("p", { style: { maxWidth: this.maxWidth }, class: "gxg-text" }, index.h("slot", null)));
375
+ }
376
+ return text;
377
+ }
378
+ render() {
379
+ return index.h(index.Host, { class: { large: store.state.large } }, this.textType(), " ");
380
+ }
381
+ };
382
+ GxgText.style = textCss;
383
+
384
+ exports.ch_suggest = ChSuggest;
385
+ exports.ch_suggest_list = ChSuggestList;
386
+ exports.ch_suggest_list_item = ChSuggestListItem;
387
+ exports.gxg_suggest = GxgSuggest;
388
+ exports.gxg_text = GxgText;