@genexus/genexus-ide-ui 3.0.1 → 3.1.0

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 (100) hide show
  1. package/dist/cjs/genexus-ide-ui.cjs.js +1 -1
  2. package/dist/cjs/gx-ide-file-item.cjs.entry.js +21 -2
  3. package/dist/cjs/gx-ide-file-item.cjs.entry.js.map +1 -1
  4. package/dist/cjs/gx-ide-file-uploader.cjs.entry.js +11 -8
  5. package/dist/cjs/gx-ide-file-uploader.cjs.entry.js.map +1 -1
  6. package/dist/cjs/gx-ide-launchpad.cjs.entry.js +4 -16
  7. package/dist/cjs/gx-ide-launchpad.cjs.entry.js.map +1 -1
  8. package/dist/cjs/gx-ide-multi-select.cjs.entry.js +113 -0
  9. package/dist/cjs/gx-ide-multi-select.cjs.entry.js.map +1 -0
  10. package/dist/cjs/gx-ide-search.cjs.entry.js +171 -0
  11. package/dist/cjs/gx-ide-search.cjs.entry.js.map +1 -0
  12. package/dist/cjs/gx-ide-ww-files.cjs.entry.js +4 -9
  13. package/dist/cjs/gx-ide-ww-files.cjs.entry.js.map +1 -1
  14. package/dist/cjs/loader.cjs.js +1 -1
  15. package/dist/collection/collection-manifest.json +2 -0
  16. package/dist/collection/components/_helpers/multi-select/gx-ide-multi-select.css +193 -0
  17. package/dist/collection/components/_helpers/multi-select/gx-ide-multi-select.js +209 -0
  18. package/dist/collection/components/_helpers/multi-select/gx-ide-multi-select.js.map +1 -0
  19. package/dist/collection/components/file-uploader/file-item/file-item.css +23 -28
  20. package/dist/collection/components/file-uploader/file-item/file-item.js +37 -1
  21. package/dist/collection/components/file-uploader/file-item/file-item.js.map +1 -1
  22. package/dist/collection/components/file-uploader/file-uploader.css +11 -22
  23. package/dist/collection/components/file-uploader/file-uploader.js +10 -7
  24. package/dist/collection/components/file-uploader/file-uploader.js.map +1 -1
  25. package/dist/collection/components/file-uploader/gx-ide-assets/file-uploader/langs/file-uploader.lang.en.json +7 -3
  26. package/dist/collection/components/file-uploader/gx-ide-assets/file-uploader/langs/file-uploader.lang.ja.json +7 -3
  27. package/dist/collection/components/file-uploader/gx-ide-assets/file-uploader/langs/file-uploader.lang.zh.json +8 -3
  28. package/dist/collection/components/launchpad/root/gx-ide-assets/launchpad/shortcuts.json +1 -26
  29. package/dist/collection/components/launchpad/root/launchpad.js +5 -42
  30. package/dist/collection/components/launchpad/root/launchpad.js.map +1 -1
  31. package/dist/collection/components/search/gx-ide-assets/search/langs/search.lang.en.json +37 -0
  32. package/dist/collection/components/search/gx-ide-assets/search/langs/search.lang.ja.json +37 -0
  33. package/dist/collection/components/search/gx-ide-assets/search/langs/search.lang.zh.json +37 -0
  34. package/dist/collection/components/search/search.css +44 -0
  35. package/dist/collection/components/search/search.js +275 -0
  36. package/dist/collection/components/search/search.js.map +1 -0
  37. package/dist/collection/components/ww-files/ww-files.js +4 -9
  38. package/dist/collection/components/ww-files/ww-files.js.map +1 -1
  39. package/dist/collection/testing/locale.e2e.js +4 -1
  40. package/dist/collection/testing/locale.e2e.js.map +1 -1
  41. package/dist/components/file-item.js +22 -2
  42. package/dist/components/file-item.js.map +1 -1
  43. package/dist/components/gx-ide-file-uploader.js +11 -8
  44. package/dist/components/gx-ide-file-uploader.js.map +1 -1
  45. package/dist/components/gx-ide-launchpad.js +6 -19
  46. package/dist/components/gx-ide-launchpad.js.map +1 -1
  47. package/dist/components/gx-ide-multi-select.d.ts +11 -0
  48. package/dist/components/gx-ide-multi-select.js +132 -0
  49. package/dist/components/gx-ide-multi-select.js.map +1 -0
  50. package/dist/components/gx-ide-search.d.ts +11 -0
  51. package/dist/components/gx-ide-search.js +206 -0
  52. package/dist/components/gx-ide-search.js.map +1 -0
  53. package/dist/components/gx-ide-ww-files.js +4 -9
  54. package/dist/components/gx-ide-ww-files.js.map +1 -1
  55. package/dist/esm/genexus-ide-ui.js +1 -1
  56. package/dist/esm/gx-ide-file-item.entry.js +21 -2
  57. package/dist/esm/gx-ide-file-item.entry.js.map +1 -1
  58. package/dist/esm/gx-ide-file-uploader.entry.js +11 -8
  59. package/dist/esm/gx-ide-file-uploader.entry.js.map +1 -1
  60. package/dist/esm/gx-ide-launchpad.entry.js +5 -17
  61. package/dist/esm/gx-ide-launchpad.entry.js.map +1 -1
  62. package/dist/esm/gx-ide-multi-select.entry.js +109 -0
  63. package/dist/esm/gx-ide-multi-select.entry.js.map +1 -0
  64. package/dist/esm/gx-ide-search.entry.js +167 -0
  65. package/dist/esm/gx-ide-search.entry.js.map +1 -0
  66. package/dist/esm/gx-ide-ww-files.entry.js +4 -9
  67. package/dist/esm/gx-ide-ww-files.entry.js.map +1 -1
  68. package/dist/esm/loader.js +1 -1
  69. package/dist/genexus-ide-ui/genexus-ide-ui.esm.js +1 -1
  70. package/dist/genexus-ide-ui/genexus-ide-ui.esm.js.map +1 -1
  71. package/dist/genexus-ide-ui/gx-ide-assets/file-uploader/langs/file-uploader.lang.en.json +7 -3
  72. package/dist/genexus-ide-ui/gx-ide-assets/file-uploader/langs/file-uploader.lang.ja.json +7 -3
  73. package/dist/genexus-ide-ui/gx-ide-assets/file-uploader/langs/file-uploader.lang.zh.json +8 -3
  74. package/dist/genexus-ide-ui/gx-ide-assets/launchpad/shortcuts.json +1 -26
  75. package/dist/genexus-ide-ui/gx-ide-assets/search/langs/search.lang.en.json +37 -0
  76. package/dist/genexus-ide-ui/gx-ide-assets/search/langs/search.lang.ja.json +37 -0
  77. package/dist/genexus-ide-ui/gx-ide-assets/search/langs/search.lang.zh.json +37 -0
  78. package/dist/genexus-ide-ui/p-0745a565.entry.js +152 -0
  79. package/dist/genexus-ide-ui/p-0745a565.entry.js.map +1 -0
  80. package/dist/genexus-ide-ui/{p-6246204f.entry.js → p-25e749c7.entry.js} +44 -57
  81. package/dist/genexus-ide-ui/p-25e749c7.entry.js.map +1 -0
  82. package/dist/genexus-ide-ui/{p-60db2f02.entry.js → p-7bdeae77.entry.js} +106 -108
  83. package/dist/genexus-ide-ui/p-7bdeae77.entry.js.map +1 -0
  84. package/dist/genexus-ide-ui/p-8b5c826b.entry.js +212 -0
  85. package/dist/genexus-ide-ui/p-8b5c826b.entry.js.map +1 -0
  86. package/dist/genexus-ide-ui/p-c460c9e7.entry.js +187 -0
  87. package/dist/genexus-ide-ui/p-c460c9e7.entry.js.map +1 -0
  88. package/dist/genexus-ide-ui/{p-aad714a5.entry.js → p-e2b88bea.entry.js} +70 -67
  89. package/dist/genexus-ide-ui/p-e2b88bea.entry.js.map +1 -0
  90. package/dist/types/components/_helpers/multi-select/gx-ide-multi-select.d.ts +29 -0
  91. package/dist/types/components/file-uploader/file-item/file-item.d.ts +2 -0
  92. package/dist/types/components/launchpad/root/launchpad.d.ts +0 -4
  93. package/dist/types/components/search/search.d.ts +59 -0
  94. package/dist/types/components.d.ts +121 -4
  95. package/package.json +1 -1
  96. package/dist/genexus-ide-ui/p-60db2f02.entry.js.map +0 -1
  97. package/dist/genexus-ide-ui/p-6246204f.entry.js.map +0 -1
  98. package/dist/genexus-ide-ui/p-aad714a5.entry.js.map +0 -1
  99. package/dist/genexus-ide-ui/p-f3c3e830.entry.js +0 -163
  100. package/dist/genexus-ide-ui/p-f3c3e830.entry.js.map +0 -1
@@ -1,163 +0,0 @@
1
- import { r as e, c as i, h as t } from "./p-9b9ccd0c.js";
2
-
3
- import { g as s } from "./p-d42e842b.js";
4
-
5
- import "./p-6534555e.js";
6
-
7
- import "lit";
8
-
9
- import "lit/directives/when.js";
10
-
11
- import "lit/directives/if-defined.js";
12
-
13
- const r = ":host{display:block;inline-size:100%}.file-item{display:grid;grid-template-columns:auto 1fr auto;grid-template-rows:auto;gap:var(--spacing-gap-l);align-items:center;border:1px solid var(--mer-border__default);border-radius:4px}.file-item__icon{display:flex;align-items:center}.file-item__name{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;inline-size:100%;font-weight:var(--font-style-regular)}.file-item__name ch-edit{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;inline-size:100%;font-weight:var(--font-style-regular)}.file-item__name .label{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;inline-size:100%;font-weight:var(--font-style-regular)}.file-item__actions{display:flex;gap:var(--spacing-gap-m)}.file-item__actions button:active,.file-item__actions button:focus,.file-item__actions button:hover{background-color:var(--mer-surface__hover)}.file-item__actions button:active{background-color:var(--mer-surface__pressed)}.file-item__progress-container{grid-column:1/-1;display:flex;flex-direction:column;gap:var(--spacing-gap-xs);inline-size:100%;border:2px dashed var(--color-border-neutral-default);border-radius:8px;padding:var(--spacing-padding-l)}.file-item__progress-header{display:flex;justify-content:space-between;align-items:center;gap:var(--spacing-gap-l)}.file-item__uploading-text{font-style:italic;color:var(--color-text-neutral-disabled);overflow:hidden;white-space:nowrap;text-overflow:ellipsis;max-inline-size:calc(100% - 40px)}.file-item__progress-bar{inline-size:100%}.file-item__progress-bar progress{inline-size:100%;height:8px;border:none;border-radius:4px;overflow:hidden}.file-item__progress-bar progress::-webkit-progress-bar{background-color:transparent}.file-item__progress-bar progress::-webkit-progress-value{background-color:var(--color-accent-primary-default)}.file-item__progress-bar progress::-moz-progress-bar{background-color:var(--color-accent-primary-default)}";
14
-
15
- var o = undefined && undefined.__classPrivateFieldGet || function(e, i, t, s) {
16
- if (t === "a" && !s) throw new TypeError("Private accessor was defined without a getter");
17
- if (typeof i === "function" ? e !== i || !s : !i.has(e)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
18
- return t === "m" ? s : t === "a" ? s.call(e) : s ? s.value : i.get(e);
19
- };
20
-
21
- var a, n, l, c, p;
22
-
23
- const d = s({
24
- category: "gemini-tools",
25
- name: "file",
26
- colorType: "primary"
27
- });
28
-
29
- const f = s({
30
- category: "gemini-tools",
31
- name: "edit",
32
- colorType: "primary"
33
- });
34
-
35
- const m = s({
36
- category: "gemini-tools",
37
- name: "delete",
38
- colorType: "primary"
39
- });
40
-
41
- const h = s({
42
- category: "gemini-tools",
43
- name: "close",
44
- colorType: "primary"
45
- });
46
-
47
- const g = [ "resets/box-sizing", "components/button", "components/icon", "components/edit", "utils/typography", "utils/spacing", "utils/form", "utils/layout", "utils/elevation" ];
48
-
49
- const u = class {
50
- constructor(t) {
51
- e(this, t);
52
- this.fileNameChange = i(this, "fileNameChange", 7);
53
- this.fileDelete = i(this, "fileDelete", 7);
54
- this.fileCancel = i(this, "fileCancel", 7);
55
- a.set(this, (e => {
56
- const i = e.detail;
57
- if (i && i !== this.currentName) {
58
- this.currentName = i;
59
- this.fileNameChange.emit({
60
- id: this.file.id,
61
- name: i
62
- });
63
- }
64
- }));
65
- n.set(this, (() => {
66
- this.isEditing = false;
67
- }));
68
- /** Handles file deletion */ l.set(this, (() => {
69
- this.fileDelete.emit(this.file.id);
70
- }));
71
- /** Handles upload cancellation */ c.set(this, (e => {
72
- e.preventDefault();
73
- this.fileCancel.emit(this.file.id);
74
- }));
75
- /** Starts file name editing */ p.set(this, (() => {
76
- if (this.editable) {
77
- this.isEditing = true;
78
- }
79
- }));
80
- this.file = undefined;
81
- this.editable = false;
82
- this.fileDeletedCallback = undefined;
83
- this.fileDeletionErrorCallback = undefined;
84
- this.isEditing = false;
85
- this.currentName = undefined;
86
- }
87
- /** Updates current name when file prop changes */ handleFileChange(e) {
88
- this.currentName = e.name;
89
- }
90
- componentWillLoad() {
91
- this.currentName = this.file.name;
92
- }
93
- render() {
94
- return t("div", {
95
- class: "file-item"
96
- }, t("ch-theme", {
97
- model: g
98
- }), t("div", {
99
- class: "file-item__icon"
100
- }, t("ch-image", {
101
- src: d,
102
- class: "icon-m"
103
- })), t("div", {
104
- class: "file-item__name"
105
- }, this.isEditing ? t("ch-edit", {
106
- value: this.currentName,
107
- autoFocus: true,
108
- onInput: o(this, a, "f"),
109
- onBlur: o(this, n, "f"),
110
- class: "input"
111
- }) : t("label", {
112
- class: "label"
113
- }, this.currentName)), t("div", {
114
- class: "file-item__actions"
115
- }, !this.file.pending && this.editable && t("button", {
116
- class: "button-tertiary button-icon-only",
117
- type: "button",
118
- onClick: o(this, p, "f")
119
- }, t("ch-image", {
120
- src: f,
121
- class: "icon-m"
122
- })), !this.file.pending && t("button", {
123
- class: "button-tertiary button-icon-only",
124
- type: "button",
125
- onClick: o(this, l, "f"),
126
- "aria-label": "Delete file"
127
- }, t("ch-image", {
128
- src: m,
129
- class: "icon-m"
130
- }))), this.file.pending && t("div", {
131
- class: "file-item__progress-container"
132
- }, t("div", {
133
- class: "file-item__progress-header"
134
- }, t("span", {
135
- class: "file-item__uploading-text"
136
- }, "Uploading ", this.currentName, "..."), t("button", {
137
- class: "button-tertiary button-icon-only",
138
- type: "button",
139
- onClick: o(this, c, "f")
140
- }, t("ch-image", {
141
- src: h,
142
- class: "icon-m"
143
- }))), t("div", {
144
- class: "file-item__progress-bar"
145
- }, t("progress", {
146
- class: "elevation-1",
147
- value: this.file.progress,
148
- max: "100"
149
- }))));
150
- }
151
- static get watchers() {
152
- return {
153
- file: [ "handleFileChange" ]
154
- };
155
- }
156
- };
157
-
158
- a = new WeakMap, n = new WeakMap, l = new WeakMap, c = new WeakMap, p = new WeakMap;
159
-
160
- u.style = r;
161
-
162
- export { u as gx_ide_file_item };
163
- //# sourceMappingURL=p-f3c3e830.entry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["fileItemCss","FILE_ICON","getIconPath","category","name","colorType","EDIT_ICON","DELETE_ICON","CANCEL_ICON","CSS_BUNDLES","FileItem","_FileItem_handleNameChange","set","this","event","newName","detail","currentName","fileNameChange","emit","id","file","_FileItem_handleBlur","isEditing","_FileItem_handleDelete","fileDelete","_FileItem_handleCancelClick","e","preventDefault","fileCancel","_FileItem_startEditing","editable","handleFileChange","newFile","componentWillLoad","render","h","class","model","src","value","autoFocus","onInput","__classPrivateFieldGet","onBlur","pending","type","onClick","progress","max"],"sources":["src/components/file-uploader/file-item/file-item.scss?tag=gx-ide-file-item&encapsulation=shadow","src/components/file-uploader/file-item/file-item.tsx"],"sourcesContent":["@import \"../../../global/gx-ide-mixins.scss\";\n\n:host {\n display: block;\n inline-size: 100%;\n}\n\n.file-item {\n display: grid;\n grid-template-columns: auto 1fr auto;\n grid-template-rows: auto;\n gap: var(--spacing-gap-l);\n align-items: center;\n border: 1px solid var(--mer-border__default);\n border-radius: 4px;\n\n &__icon {\n display: flex;\n align-items: center;\n }\n\n &__name {\n @include ellipsis;\n inline-size: 100%;\n font-weight: var(--font-style-regular);\n\n ch-edit {\n @include ellipsis;\n inline-size: 100%;\n font-weight: var(--font-style-regular);\n }\n\n .label {\n @include ellipsis;\n inline-size: 100%;\n font-weight: var(--font-style-regular);\n }\n }\n\n &__actions {\n display: flex;\n gap: var(--spacing-gap-m);\n\n button {\n &:active,\n &:focus,\n &:hover {\n background-color: var(--mer-surface__hover);\n }\n\n &:active {\n background-color: var(--mer-surface__pressed);\n }\n }\n }\n\n &__progress-container {\n grid-column: 1 / -1;\n display: flex;\n flex-direction: column;\n gap: var(--spacing-gap-xs);\n inline-size: 100%;\n border: 2px dashed var(--color-border-neutral-default);\n border-radius: 8px;\n padding: var(--spacing-padding-l);\n }\n\n &__progress-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: var(--spacing-gap-l);\n }\n\n &__uploading-text {\n font-style: italic;\n color: var(--color-text-neutral-disabled);\n @include ellipsis;\n max-inline-size: calc(100% - 40px);\n }\n\n &__progress-bar {\n inline-size: 100%;\n\n progress {\n inline-size: 100%;\n height: 8px;\n border: none;\n border-radius: 4px;\n overflow: hidden;\n\n &::-webkit-progress-bar {\n background-color: transparent;\n }\n\n &::-webkit-progress-value {\n background-color: var(--color-accent-primary-default);\n }\n\n &::-moz-progress-bar {\n background-color: var(--color-accent-primary-default);\n }\n }\n }\n}\n","import {\n Component,\n h,\n Prop,\n State,\n Event,\n EventEmitter,\n Watch\n} from \"@stencil/core\";\nimport { getIconPath, MercuryBundles } from \"@genexus/mercury\";\nimport { ChEditCustomEvent } from \"@genexus/chameleon-controls-library\";\nimport { FileUploadState } from \"../types\";\n\nconst FILE_ICON = getIconPath({\n category: \"gemini-tools\",\n name: \"file\",\n colorType: \"primary\"\n});\n\nconst EDIT_ICON = getIconPath({\n category: \"gemini-tools\",\n name: \"edit\",\n colorType: \"primary\"\n});\n\nconst DELETE_ICON = getIconPath({\n category: \"gemini-tools\",\n name: \"delete\",\n colorType: \"primary\"\n});\n\nconst CANCEL_ICON = getIconPath({\n category: \"gemini-tools\",\n name: \"close\",\n colorType: \"primary\"\n});\n\nconst CSS_BUNDLES: MercuryBundles = [\n \"resets/box-sizing\",\n \"components/button\",\n \"components/icon\",\n \"components/edit\",\n \"utils/typography\",\n \"utils/spacing\",\n \"utils/form\",\n \"utils/layout\",\n \"utils/elevation\"\n];\n\n@Component({\n tag: \"gx-ide-file-item\",\n styleUrl: \"file-item.scss\",\n shadow: true\n})\nexport class FileItem {\n /** File state containing upload information */\n @Prop() readonly file!: FileUploadState;\n\n /** Whether the file name can be edited */\n @Prop() readonly editable: boolean = false;\n\n /** Callback when a file is deleted */\n @Prop() readonly fileDeletedCallback?: (fileId: string) => Promise<void>;\n\n /** Callback when a file deletion error occurs */\n @Prop() readonly fileDeletionErrorCallback?: (data: {\n fileName: string;\n error: string;\n }) => Promise<void>;\n\n /** Updates current name when file prop changes */\n @Watch(\"file\")\n handleFileChange(newFile: FileUploadState) {\n this.currentName = newFile.name;\n }\n\n @State() isEditing: boolean = false;\n @State() currentName: string;\n\n /** Emitted when the file name is changed */\n @Event() fileNameChange: EventEmitter<{ id: string; name: string }>;\n\n /** Emitted when the file is deleted */\n @Event() fileDelete: EventEmitter<string>;\n\n /** Emitted when the file upload is cancelled */\n @Event() fileCancel: EventEmitter<string>;\n\n componentWillLoad() {\n this.currentName = this.file.name;\n }\n\n #handleNameChange = (event: ChEditCustomEvent<string> | InputEvent) => {\n const newName = (event as CustomEvent<string>).detail;\n\n if (newName && newName !== this.currentName) {\n this.currentName = newName;\n this.fileNameChange.emit({\n id: this.file.id,\n name: newName\n });\n }\n };\n\n #handleBlur = () => {\n this.isEditing = false;\n };\n\n /** Handles file deletion */\n #handleDelete = () => {\n this.fileDelete.emit(this.file.id);\n };\n\n /** Handles upload cancellation */\n #handleCancelClick = (e: MouseEvent) => {\n e.preventDefault();\n this.fileCancel.emit(this.file.id);\n };\n\n /** Starts file name editing */\n #startEditing = () => {\n if (this.editable) {\n this.isEditing = true;\n }\n };\n\n render() {\n return (\n <div class=\"file-item\">\n <ch-theme model={CSS_BUNDLES}></ch-theme>\n <div class=\"file-item__icon\">\n <ch-image src={FILE_ICON} class=\"icon-m\" />\n </div>\n\n <div class=\"file-item__name\">\n {this.isEditing ? (\n <ch-edit\n value={this.currentName}\n autoFocus={true}\n onInput={this.#handleNameChange}\n onBlur={this.#handleBlur}\n class=\"input\"\n />\n ) : (\n <label class=\"label\">{this.currentName}</label>\n )}\n </div>\n\n <div class=\"file-item__actions\">\n {!this.file.pending && this.editable && (\n <button\n class=\"button-tertiary button-icon-only\"\n type=\"button\"\n onClick={this.#startEditing}\n >\n <ch-image src={EDIT_ICON} class=\"icon-m\" />\n </button>\n )}\n {!this.file.pending && (\n <button\n class=\"button-tertiary button-icon-only\"\n type=\"button\"\n onClick={this.#handleDelete}\n aria-label=\"Delete file\"\n >\n <ch-image src={DELETE_ICON} class=\"icon-m\" />\n </button>\n )}\n </div>\n\n {this.file.pending && (\n <div class=\"file-item__progress-container\">\n <div class=\"file-item__progress-header\">\n <span class=\"file-item__uploading-text\">\n Uploading {this.currentName}...\n </span>\n <button\n class=\"button-tertiary button-icon-only\"\n type=\"button\"\n onClick={this.#handleCancelClick}\n >\n <ch-image src={CANCEL_ICON} class=\"icon-m\" />\n </button>\n </div>\n <div class=\"file-item__progress-bar\">\n <progress\n class=\"elevation-1\"\n value={this.file.progress}\n max=\"100\"\n />\n </div>\n </div>\n )}\n </div>\n );\n }\n}\n"],"mappings":";;;;;;;;;;;;AAAA,MAAMA,IAAc;;;;;;;;;;ACapB,MAAMC,IAAYC,EAAY;EAC5BC,UAAU;EACVC,MAAM;EACNC,WAAW;;;AAGb,MAAMC,IAAYJ,EAAY;EAC5BC,UAAU;EACVC,MAAM;EACNC,WAAW;;;AAGb,MAAME,IAAcL,EAAY;EAC9BC,UAAU;EACVC,MAAM;EACNC,WAAW;;;AAGb,MAAMG,IAAcN,EAAY;EAC9BC,UAAU;EACVC,MAAM;EACNC,WAAW;;;AAGb,MAAMI,IAA8B,EAClC,qBACA,qBACA,mBACA,mBACA,oBACA,iBACA,cACA,gBACA;;MAQWC,IAAQ;;;;;;IAsCnBC,EAAAC,IAAAC,OAAqBC;MACnB,MAAMC,IAAWD,EAA8BE;MAE/C,IAAID,KAAWA,MAAYF,KAAKI,aAAa;QAC3CJ,KAAKI,cAAcF;QACnBF,KAAKK,eAAeC,KAAK;UACvBC,IAAIP,KAAKQ,KAAKD;UACdhB,MAAMW;;;;IAKZO,EAAAV,IAAAC,OAAc;MACZA,KAAKU,YAAY;AAAK;oCAIxBC,EAAAZ,IAAAC,OAAgB;MACdA,KAAKY,WAAWN,KAAKN,KAAKQ,KAAKD;AAAG;0CAIpCM,EAAAd,IAAAC,OAAsBc;MACpBA,EAAEC;MACFf,KAAKgB,WAAWV,KAAKN,KAAKQ,KAAKD;AAAG;uCAIpCU,EAAAlB,IAAAC,OAAgB;MACd,IAAIA,KAAKkB,UAAU;QACjBlB,KAAKU,YAAY;;;;oBA/DgB;;;qBAiBP;;;sDAJ9B,gBAAAS,CAAiBC;IACfpB,KAAKI,cAAcgB,EAAQ7B;;EAe7B,iBAAA8B;IACErB,KAAKI,cAAcJ,KAAKQ,KAAKjB;;EAqC/B,MAAA+B;IACE,OACEC,EAAA;MAAKC,OAAM;OACTD,EAAA;MAAUE,OAAO7B;QACjB2B,EAAA;MAAKC,OAAM;OACTD,EAAA;MAAUG,KAAKtC;MAAWoC,OAAM;SAGlCD,EAAA;MAAKC,OAAM;OACRxB,KAAKU,YACJa,EAAA;MACEI,OAAO3B,KAAKI;MACZwB,WAAW;MACXC,SAASC,EAAA9B,MAAIF,GAAA;MACbiC,QAAQD,EAAA9B,MAAIS,GAAA;MACZe,OAAM;SAGRD,EAAA;MAAOC,OAAM;OAASxB,KAAKI,eAI/BmB,EAAA;MAAKC,OAAM;QACPxB,KAAKQ,KAAKwB,WAAWhC,KAAKkB,YAC1BK,EAAA;MACEC,OAAM;MACNS,MAAK;MACLC,SAASJ,EAAA9B,MAAIiB,GAAA;OAEbM,EAAA;MAAUG,KAAKjC;MAAW+B,OAAM;UAGlCxB,KAAKQ,KAAKwB,WACVT,EAAA;MACEC,OAAM;MACNS,MAAK;MACLC,SAASJ,EAAA9B,MAAIW,GAAA;MAAc,cAChB;OAEXY,EAAA;MAAUG,KAAKhC;MAAa8B,OAAM;UAKvCxB,KAAKQ,KAAKwB,WACTT,EAAA;MAAKC,OAAM;OACTD,EAAA;MAAKC,OAAM;OACTD,EAAA;MAAMC,OAAM;OAA2B,cAC1BxB,KAAKI,aAAW,QAE7BmB,EAAA;MACEC,OAAM;MACNS,MAAK;MACLC,SAASJ,EAAA9B,MAAIa,GAAA;OAEbU,EAAA;MAAUG,KAAK/B;MAAa6B,OAAM;UAGtCD,EAAA;MAAKC,OAAM;OACTD,EAAA;MACEC,OAAM;MACNG,OAAO3B,KAAKQ,KAAK2B;MACjBC,KAAI"}