@genexus/genexus-ide-ui 1.1.13 → 1.1.15

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 (142) hide show
  1. package/dist/cjs/genexus-ide-ui.cjs.js +1 -1
  2. package/dist/cjs/gx-ide-about.cjs.entry.js +29 -15
  3. package/dist/cjs/gx-ide-about.cjs.entry.js.map +1 -1
  4. package/dist/cjs/gx-ide-bpm-export-xpdl.cjs.entry.js +2 -2
  5. package/dist/cjs/gx-ide-bpm-export-xpdl.cjs.entry.js.map +1 -1
  6. package/dist/cjs/gx-ide-data-type-selector.cjs.entry.js +121 -40
  7. package/dist/cjs/gx-ide-data-type-selector.cjs.entry.js.map +1 -1
  8. package/dist/cjs/gx-ide-empty-state.cjs.entry.js +2 -2
  9. package/dist/cjs/gx-ide-empty-state.cjs.entry.js.map +1 -1
  10. package/dist/cjs/gx-ide-file-uploader.cjs.entry.js +0 -13
  11. package/dist/cjs/gx-ide-file-uploader.cjs.entry.js.map +1 -1
  12. package/dist/cjs/gx-ide-plugin-details.cjs.entry.js +201 -0
  13. package/dist/cjs/gx-ide-plugin-details.cjs.entry.js.map +1 -0
  14. package/dist/cjs/gx-ide-plugin-explorer.cjs.entry.js +159 -0
  15. package/dist/cjs/gx-ide-plugin-explorer.cjs.entry.js.map +1 -0
  16. package/dist/cjs/gx-ide-sc-chat-container.cjs.entry.js +0 -1
  17. package/dist/cjs/gx-ide-sc-chat-container.cjs.entry.js.map +1 -1
  18. package/dist/cjs/loader.cjs.js +1 -1
  19. package/dist/collection/collection-manifest.json +3 -1
  20. package/dist/collection/components/_helpers/empty-state/gx-ide-empty-state.css +4 -0
  21. package/dist/collection/components/_helpers/empty-state/gx-ide-empty-state.js +1 -1
  22. package/dist/collection/components/_helpers/empty-state/gx-ide-empty-state.js.map +1 -1
  23. package/dist/collection/components/{_branding/about → about}/about.css +44 -15
  24. package/dist/collection/components/{_branding/about → about}/about.js +46 -62
  25. package/dist/collection/components/about/about.js.map +1 -0
  26. package/dist/collection/components/{_branding/about → about}/gx-ide-assets/about/langs/about.lang.en.json +3 -3
  27. package/dist/collection/components/{_branding/about → about}/gx-ide-assets/about/langs/about.lang.ja.json +3 -3
  28. package/dist/collection/components/{_branding/about → about}/gx-ide-assets/about/langs/about.lang.zh.json +3 -3
  29. package/dist/collection/components/bpm/export-xpdl/bpm-export-xpdl.js +2 -2
  30. package/dist/collection/components/bpm/export-xpdl/bpm-export-xpdl.js.map +1 -1
  31. package/dist/collection/components/data-type-selector/data-type-selector.css +1 -0
  32. package/dist/collection/components/data-type-selector/data-type-selector.js +165 -43
  33. package/dist/collection/components/data-type-selector/data-type-selector.js.map +1 -1
  34. package/dist/collection/components/data-type-selector/gx-ide-assets/data-type-selector/langs/data-type-selector.lang.en.json +1 -1
  35. package/dist/collection/components/data-type-selector/helpers.js +2 -0
  36. package/dist/collection/components/data-type-selector/helpers.js.map +1 -1
  37. package/dist/collection/components/file-uploader/file-uploader.js +0 -13
  38. package/dist/collection/components/file-uploader/file-uploader.js.map +1 -1
  39. package/dist/collection/components/plugin-details/gx-ide-assets/plugin-details/langs/plugin-details.lang.en.json +9 -0
  40. package/dist/collection/components/plugin-details/gx-ide-assets/plugin-details/langs/plugin-details.lang.ja.json +9 -0
  41. package/dist/collection/components/plugin-details/gx-ide-assets/plugin-details/langs/plugin-details.lang.zh.json +9 -0
  42. package/dist/collection/components/plugin-details/plugin-details.css +168 -0
  43. package/dist/collection/components/plugin-details/plugin-details.js +292 -0
  44. package/dist/collection/components/plugin-details/plugin-details.js.map +1 -0
  45. package/dist/collection/components/plugin-explorer/gx-ide-assets/plugin-explorer/images/plugin-icon.svg +10 -0
  46. package/dist/collection/components/plugin-explorer/gx-ide-assets/plugin-explorer/langs/plugin-explorer.lang.en.json +10 -0
  47. package/dist/collection/components/plugin-explorer/gx-ide-assets/plugin-explorer/langs/plugin-explorer.lang.ja.json +10 -0
  48. package/dist/collection/components/plugin-explorer/gx-ide-assets/plugin-explorer/langs/plugin-explorer.lang.zh.json +10 -0
  49. package/dist/collection/components/plugin-explorer/plugin-explorer.css +106 -0
  50. package/dist/collection/components/plugin-explorer/plugin-explorer.js +263 -0
  51. package/dist/collection/components/plugin-explorer/plugin-explorer.js.map +1 -0
  52. package/dist/collection/components/team-dev/bring-changes/gx-ide-assets/team-dev-bring-changes/langs/team-dev-bring-changes.lang.ja.json +45 -45
  53. package/dist/collection/pages/assets/images/plugin/docker-iso.svg +12 -0
  54. package/dist/collection/showcase/chat-container/callbacks.js +0 -1
  55. package/dist/collection/showcase/chat-container/callbacks.js.map +1 -1
  56. package/dist/collection/testing/locale.e2e.js +2 -0
  57. package/dist/collection/testing/locale.e2e.js.map +1 -1
  58. package/dist/components/gx-ide-about.js +32 -19
  59. package/dist/components/gx-ide-about.js.map +1 -1
  60. package/dist/components/gx-ide-bpm-export-xpdl.js +2 -2
  61. package/dist/components/gx-ide-bpm-export-xpdl.js.map +1 -1
  62. package/dist/components/gx-ide-data-type-selector.js +126 -42
  63. package/dist/components/gx-ide-data-type-selector.js.map +1 -1
  64. package/dist/components/gx-ide-empty-state2.js +2 -2
  65. package/dist/components/gx-ide-empty-state2.js.map +1 -1
  66. package/dist/components/gx-ide-file-uploader.js +0 -13
  67. package/dist/components/gx-ide-file-uploader.js.map +1 -1
  68. package/dist/components/gx-ide-plugin-details.d.ts +11 -0
  69. package/dist/components/gx-ide-plugin-details.js +222 -0
  70. package/dist/components/gx-ide-plugin-details.js.map +1 -0
  71. package/dist/components/gx-ide-plugin-explorer.d.ts +11 -0
  72. package/dist/components/gx-ide-plugin-explorer.js +194 -0
  73. package/dist/components/gx-ide-plugin-explorer.js.map +1 -0
  74. package/dist/components/gx-ide-sc-chat-container.js +0 -1
  75. package/dist/components/gx-ide-sc-chat-container.js.map +1 -1
  76. package/dist/esm/genexus-ide-ui.js +1 -1
  77. package/dist/esm/gx-ide-about.entry.js +29 -15
  78. package/dist/esm/gx-ide-about.entry.js.map +1 -1
  79. package/dist/esm/gx-ide-bpm-export-xpdl.entry.js +2 -2
  80. package/dist/esm/gx-ide-bpm-export-xpdl.entry.js.map +1 -1
  81. package/dist/esm/gx-ide-data-type-selector.entry.js +121 -40
  82. package/dist/esm/gx-ide-data-type-selector.entry.js.map +1 -1
  83. package/dist/esm/gx-ide-empty-state.entry.js +2 -2
  84. package/dist/esm/gx-ide-empty-state.entry.js.map +1 -1
  85. package/dist/esm/gx-ide-file-uploader.entry.js +0 -13
  86. package/dist/esm/gx-ide-file-uploader.entry.js.map +1 -1
  87. package/dist/esm/gx-ide-plugin-details.entry.js +197 -0
  88. package/dist/esm/gx-ide-plugin-details.entry.js.map +1 -0
  89. package/dist/esm/gx-ide-plugin-explorer.entry.js +155 -0
  90. package/dist/esm/gx-ide-plugin-explorer.entry.js.map +1 -0
  91. package/dist/esm/gx-ide-sc-chat-container.entry.js +0 -1
  92. package/dist/esm/gx-ide-sc-chat-container.entry.js.map +1 -1
  93. package/dist/esm/loader.js +1 -1
  94. package/dist/genexus-ide-ui/genexus-ide-ui.esm.js +1 -1
  95. package/dist/genexus-ide-ui/genexus-ide-ui.esm.js.map +1 -1
  96. package/dist/genexus-ide-ui/gx-ide-assets/about/langs/about.lang.en.json +3 -3
  97. package/dist/genexus-ide-ui/gx-ide-assets/about/langs/about.lang.ja.json +3 -3
  98. package/dist/genexus-ide-ui/gx-ide-assets/about/langs/about.lang.zh.json +3 -3
  99. package/dist/genexus-ide-ui/gx-ide-assets/data-type-selector/langs/data-type-selector.lang.en.json +1 -1
  100. package/dist/genexus-ide-ui/gx-ide-assets/plugin-details/langs/plugin-details.lang.en.json +9 -0
  101. package/dist/genexus-ide-ui/gx-ide-assets/plugin-details/langs/plugin-details.lang.ja.json +9 -0
  102. package/dist/genexus-ide-ui/gx-ide-assets/plugin-details/langs/plugin-details.lang.zh.json +9 -0
  103. package/dist/genexus-ide-ui/gx-ide-assets/plugin-explorer/images/plugin-icon.svg +10 -0
  104. package/dist/genexus-ide-ui/gx-ide-assets/plugin-explorer/langs/plugin-explorer.lang.en.json +10 -0
  105. package/dist/genexus-ide-ui/gx-ide-assets/plugin-explorer/langs/plugin-explorer.lang.ja.json +10 -0
  106. package/dist/genexus-ide-ui/gx-ide-assets/plugin-explorer/langs/plugin-explorer.lang.zh.json +10 -0
  107. package/dist/genexus-ide-ui/gx-ide-assets/team-dev-bring-changes/langs/team-dev-bring-changes.lang.ja.json +45 -45
  108. package/dist/genexus-ide-ui/{p-a47d71eb.entry.js → p-4328be14.entry.js} +7 -7
  109. package/dist/genexus-ide-ui/p-4328be14.entry.js.map +1 -0
  110. package/dist/genexus-ide-ui/p-476b74a1.entry.js +109 -0
  111. package/dist/genexus-ide-ui/p-476b74a1.entry.js.map +1 -0
  112. package/dist/genexus-ide-ui/{p-6d996621.entry.js → p-4e6425f3.entry.js} +1 -2
  113. package/dist/genexus-ide-ui/p-4e6425f3.entry.js.map +1 -0
  114. package/dist/genexus-ide-ui/p-641c79a9.entry.js +198 -0
  115. package/dist/genexus-ide-ui/p-641c79a9.entry.js.map +1 -0
  116. package/dist/genexus-ide-ui/p-6b4fdf55.entry.js +344 -0
  117. package/dist/genexus-ide-ui/p-6b4fdf55.entry.js.map +1 -0
  118. package/dist/genexus-ide-ui/{p-17dc4c9c.entry.js → p-7d7cf30d.entry.js} +35 -51
  119. package/dist/genexus-ide-ui/p-7d7cf30d.entry.js.map +1 -0
  120. package/dist/genexus-ide-ui/p-84c1c1bb.entry.js +270 -0
  121. package/dist/genexus-ide-ui/p-84c1c1bb.entry.js.map +1 -0
  122. package/dist/genexus-ide-ui/{p-844b7117.entry.js → p-86365635.entry.js} +3 -3
  123. package/dist/genexus-ide-ui/p-86365635.entry.js.map +1 -0
  124. package/dist/types/components/{_branding/about → about}/about.d.ts +6 -10
  125. package/dist/types/components/data-type-selector/data-type-selector.d.ts +16 -12
  126. package/dist/types/components/plugin-details/plugin-details.d.ts +55 -0
  127. package/dist/types/components/plugin-explorer/plugin-explorer.d.ts +43 -0
  128. package/dist/types/components.d.ts +126 -26
  129. package/package.json +1 -1
  130. package/dist/collection/components/_branding/about/about.js.map +0 -1
  131. package/dist/genexus-ide-ui/p-0550fd5f.entry.js +0 -96
  132. package/dist/genexus-ide-ui/p-0550fd5f.entry.js.map +0 -1
  133. package/dist/genexus-ide-ui/p-17dc4c9c.entry.js.map +0 -1
  134. package/dist/genexus-ide-ui/p-6d996621.entry.js.map +0 -1
  135. package/dist/genexus-ide-ui/p-844b7117.entry.js.map +0 -1
  136. package/dist/genexus-ide-ui/p-a47d71eb.entry.js.map +0 -1
  137. package/dist/genexus-ide-ui/p-ca6eb9fd.entry.js +0 -255
  138. package/dist/genexus-ide-ui/p-ca6eb9fd.entry.js.map +0 -1
  139. /package/dist/collection/components/{_branding/about → about}/gx-ide-assets/about/images/copyrights-illustration.png +0 -0
  140. /package/dist/collection/components/{_branding/about → about}/gx-ide-assets/about/images/next-arrow.svg +0 -0
  141. /package/dist/collection/components/{_branding/about → about}/gx-ide-assets/about/images/next-logo.svg +0 -0
  142. /package/dist/collection/components/{_branding/about → about}/gx-ide-assets/about/images/next-square.svg +0 -0
@@ -0,0 +1,198 @@
1
+ import { g as t, r as e, h as i, H as o, a as n } from "./p-25a9f1d7.js";
2
+
3
+ import { g as r } from "./p-2987a259.js";
4
+
5
+ import { L as s } from "./p-311eedf3.js";
6
+
7
+ import { c as a } from "./p-13738332.js";
8
+
9
+ const c = ":host{display:grid;block-size:100%;position:relative}.outer-container{grid-template-rows:max-content 1fr}.inner-container{position:relative}.list-box::part(item){width:100%;min-width:100%}.list-box::part(item__action){gap:4px}.list-box::part(item__caption){font-weight:600}.list-box::part(custom-container){display:flex;flex-direction:column;gap:4px;width:100%}.list-box::part(custom-image){block-size:32px;inline-size:32px;margin-inline-end:12px}.list-box::part(custom-description){font-size:12px;margin:0;opacity:0.8;line-height:1.4;margin-inline-end:8px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.list-box::part(item__block-end start){width:100%;min-width:100%}.list-box::part(custom-brand){font-weight:600;display:flex;gap:4px;align-items:center}.list-box::part(custom-brand-icon){--icon-path:var(--icon__system_user_neutral--enabled);display:inline-block;background-image:var(--icon-path);background-size:contain;background-repeat:no-repeat;background-position:center center;block-size:16px;inline-size:16px}.list-box::part(custom-button){--control__border-color:var(--button-background-color);--button-color:var(--mer-text__primary);--button-color--enabled:var(--mer-text__on-primary);--button-color--active:var(--mer-text__on-primary--active);display:inline-grid;grid-auto-flow:column;grid-auto-columns:max-content;justify-content:center;padding-block:var(--control__padding-block);padding-inline:var(--control__padding-inline);box-sizing:border-box;background-color:var(--button-background-color);color:var(--button-color);font-weight:600;margin-block-end:auto;margin-block-start:auto;text-transform:capitalize}.list-box::part(custom-button):hover{--button-color:var(--mer-text__primary--hover)}.list-box::part(custom-button):active{--button-color:var(--mer-text__primary--active)}";
10
+
11
+ var l = undefined && undefined.__classPrivateFieldGet || function(t, e, i, o) {
12
+ if (i === "a" && !o) throw new TypeError("Private accessor was defined without a getter");
13
+ if (typeof e === "function" ? t !== e || !o : !e.has(t)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
14
+ return i === "m" ? o : i === "a" ? o.call(t) : o ? o.value : e.get(t);
15
+ };
16
+
17
+ var p = undefined && undefined.__classPrivateFieldSet || function(t, e, i, o, n) {
18
+ if (o === "m") throw new TypeError("Private method is not writable");
19
+ if (o === "a" && !n) throw new TypeError("Private accessor was defined without a setter");
20
+ if (typeof e === "function" ? t !== e || !n : !e.has(t)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
21
+ return o === "a" ? n.call(t, i) : n ? n.value = i : e.set(t, i), i;
22
+ };
23
+
24
+ var d, u, m, h, b, g, f, x;
25
+
26
+ const w = r({
27
+ category: "system",
28
+ name: "filters",
29
+ colorType: "on-elevation"
30
+ });
31
+
32
+ // plugin icon if no iconUrl was provided
33
+ const v = t(`./gx-ide-assets/plugin-manager/images/plugin-icon.svg`);
34
+
35
+ const _ = [ "resets/box-sizing", "components/list-box", "components/button", "components/edit", "utils/form", "utils/layout", "utils/typography", "utils/spacing", "chameleon/scrollbar" ];
36
+
37
+ const y = class {
38
+ constructor(t) {
39
+ e(this, t);
40
+ /**
41
+ * The component hard-coded strings translations.
42
+ */
43
+ // eslint-disable-next-line @stencil-community/own-props-must-be-private
44
+ d.set(this, void 0);
45
+ u.set(this, false);
46
+ m.set(this, ((t, e) => i => {
47
+ i.stopPropagation();
48
+ this.executeActionCallback(t, e);
49
+ }));
50
+ h.set(this, (t => {
51
+ const e = [];
52
+ const o = {
53
+ type: "separator"
54
+ };
55
+ t === null || t === void 0 ? void 0 : t.forEach(((t, n) => {
56
+ const r = !!t.action;
57
+ const s = {
58
+ id: t.id,
59
+ caption: t.name,
60
+ imgSrc: t.iconUrl,
61
+ type: "actionable",
62
+ additionalInformation: {
63
+ "stretch-start": {
64
+ center: [ {
65
+ part: "custom-image",
66
+ jsx: () => i("img", {
67
+ part: "custom-image",
68
+ src: t.iconUrl || v,
69
+ alt: `${l(this, d, "f").logotype.replace("PLUGIN_NAME_PLACEHOLDER", t.name)}`,
70
+ loading: "lazy"
71
+ })
72
+ } ]
73
+ },
74
+ "block-end": {
75
+ start: [ {
76
+ part: "custom-description custom-button custom-container custom-brand custom-brand-icon custom-image item__block-end start",
77
+ jsx: () => i("div", {
78
+ part: "custom-container",
79
+ title: t.description
80
+ }, i("p", {
81
+ part: "custom-description"
82
+ }, t.description), i("small", {
83
+ part: "custom-brand"
84
+ }, i("span", {
85
+ part: "custom-brand-icon"
86
+ }), t.publisher))
87
+ // {
88
+ // slot: "abcd"
89
+ // } as ActionListItemAdditionalSlot // slot not working
90
+ } ]
91
+ },
92
+ "stretch-end": r && {
93
+ center: [ {
94
+ jsx: () => i("button", {
95
+ part: "custom-button",
96
+ onClick: l(this, m, "f").call(this, t.id, t.action)
97
+ }, t.action)
98
+ } ]
99
+ }
100
+ }
101
+ };
102
+ if (n !== 0) {
103
+ e.push(o);
104
+ }
105
+ e.push(s);
106
+ }));
107
+ return e;
108
+ }));
109
+ b.set(this, (async t => {
110
+ this.loading = true;
111
+ const e = t.detail;
112
+ this.plugins = await this.filterCallback(e);
113
+ }));
114
+ g.set(this, (() => {
115
+ const t = this.pluginsActionListModel.length;
116
+ return t ? i("ch-action-list-render", {
117
+ model: this.pluginsActionListModel,
118
+ class: "list-box",
119
+ selection: "single",
120
+ onSelectedItemsChange: l(this, x, "f")
121
+ }) : i("gx-ide-empty-state", {
122
+ isAnimated: l(this, u, "f"),
123
+ class: "recent-objects__empty-state",
124
+ stateIconSrc: w,
125
+ stateTitle: l(this, d, "f").emptyStateTitle,
126
+ stateDescription: l(this, d, "f").emptyStateDescription
127
+ });
128
+ }));
129
+ f.set(this, (() => {
130
+ p(this, u, true, "f");
131
+ return i("gx-ide-loader", {
132
+ loaderTitle: l(this, d, "f").loaderTitle,
133
+ description: l(this, d, "f").loaderDescription,
134
+ show: true
135
+ });
136
+ }));
137
+ x.set(this, (t => {
138
+ var e;
139
+ const i = (e = t.detail[0]) === null || e === void 0 ? void 0 : e.item.type;
140
+ if (i === "actionable") {
141
+ const e = t.detail[0].item.id;
142
+ this.showDetailsCallback(e);
143
+ }
144
+ }));
145
+ this.loading = true;
146
+ this.pluginsActionListModel = [];
147
+ this.plugins = undefined;
148
+ this.filterCallback = undefined;
149
+ this.showDetailsCallback = undefined;
150
+ this.executeActionCallback = undefined;
151
+ }
152
+ pluginsChangedHandler(t) {
153
+ this.pluginsActionListModel = l(this, h, "f").call(this, t);
154
+ this.loading = false;
155
+ }
156
+ async componentWillLoad() {
157
+ p(this, d, await s.getComponentStrings(this.el), "f");
158
+ this.pluginsChangedHandler(this.plugins);
159
+ }
160
+ render() {
161
+ return i(o, {
162
+ class: "widget"
163
+ }, i("ch-theme", {
164
+ model: _
165
+ }), i("div", {
166
+ class: "outer-container field-group"
167
+ }, i("ch-edit", {
168
+ id: "search-plugins-input",
169
+ class: "input",
170
+ accessibleName: l(this, d, "f").accessibleName,
171
+ placeholder: l(this, d, "f").searchInputPlaceholder,
172
+ debounce: a.inputDebounce,
173
+ onInput: l(this, b, "f"),
174
+ type: "search"
175
+ }), i("div", {
176
+ class: "inner-container"
177
+ }, this.loading ? l(this, f, "f").call(this) : l(this, g, "f").call(this))));
178
+ }
179
+ static get assetsDirs() {
180
+ return [ "gx-ide-assets/plugin-explorer" ];
181
+ }
182
+ get el() {
183
+ return n(this);
184
+ }
185
+ static get watchers() {
186
+ return {
187
+ plugins: [ "pluginsChangedHandler" ]
188
+ };
189
+ }
190
+ };
191
+
192
+ d = new WeakMap, u = new WeakMap, m = new WeakMap, h = new WeakMap, b = new WeakMap,
193
+ g = new WeakMap, f = new WeakMap, x = new WeakMap;
194
+
195
+ y.style = c;
196
+
197
+ export { y as gx_ide_plugin_explorer };
198
+ //# sourceMappingURL=p-641c79a9.entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["pluginExplorerCss","FILTER_ICON","getIconPath","category","name","colorType","EXTENSION_ICON_IMG","getAssetPath","CSS_BUNDLES","GxIdePluginManager","_GxIdePluginManager_componentLocale","set","this","_GxIdePluginManager_animateEmptyState","_GxIdePluginManager_actionListButtonClickHandler","pluginId","action","event","stopPropagation","executeActionCallback","_GxIdePluginManager_mapPluginDataToActionListModel","pluginsData","pluginsActionListModel","separatorItem","type","forEach","pluginData","index","hasActionButton","pluginItem","id","caption","imgSrc","iconUrl","additionalInformation","center","part","jsx","h","src","alt","__classPrivateFieldGet","logotype","replace","loading","start","title","description","publisher","onClick","call","push","_GxIdePluginManager_pluginsFilterInputHandler","async","filterValue","detail","plugins","filterCallback","_GxIdePluginManager_evaluateContentToDisplay","pluginsToDisplay","length","model","class","selection","onSelectedItemsChange","_GxIdePluginManager_pluginSelectedHandler","isAnimated","stateIconSrc","stateTitle","emptyStateTitle","stateDescription","emptyStateDescription","_GxIdePluginManager_renderLoader","__classPrivateFieldSet","loaderTitle","loaderDescription","show","eventType","_a","item","showDetailsCallback","pluginsChangedHandler","newPlugins","componentWillLoad","Locale","getComponentStrings","el","render","Host","accessibleName","placeholder","searchInputPlaceholder","debounce","config","inputDebounce","onInput"],"sources":["src/components/plugin-explorer/plugin-explorer.scss?tag=gx-ide-plugin-explorer&encapsulation=shadow","src/components/plugin-explorer/plugin-explorer.tsx"],"sourcesContent":["@import \"../../global/gx-ide-mixins.scss\";\n\n:host {\n display: grid;\n block-size: 100%;\n position: relative;\n}\n\n.outer-container {\n grid-template-rows: max-content 1fr;\n}\n.inner-container {\n position: relative;\n}\n\n.list-box::part(item) {\n width: 100%;\n min-width: 100%;\n}\n.list-box::part(item__action) {\n gap: 4px;\n}\n.list-box::part(item__caption) {\n font-weight: 600;\n}\n.list-box::part(custom-container) {\n display: flex;\n flex-direction: column;\n gap: 4px;\n width: 100%;\n}\n.list-box::part(custom-image) {\n block-size: 32px;\n inline-size: 32px;\n margin-inline-end: 12px;\n}\n.list-box::part(custom-description) {\n font-size: 12px;\n margin: 0;\n opacity: 0.8;\n line-height: 1.4;\n margin-inline-end: 8px;\n @include ellipsis();\n}\n.list-box::part(item__block-end start) {\n width: 100%;\n min-width: 100%;\n}\n.list-box::part(custom-brand) {\n font-weight: 600;\n display: flex;\n gap: 4px;\n align-items: center;\n}\n.list-box::part(custom-brand-icon) {\n // --icon-path: var(--icon__system_publish_on-elevation--enabled);\n --icon-path: var(--icon__system_user_neutral--enabled);\n display: inline-block;\n background-image: var(--icon-path);\n background-size: contain;\n background-repeat: no-repeat;\n background-position: center center;\n block-size: 16px;\n inline-size: 16px;\n}\n.list-box::part(custom-button) {\n // WA: Style the button like a Mercury primary button\n // \"Slot\" not working apparently.\n --control__border-color: var(--button-background-color);\n --button-color: var(--mer-text__primary);\n --button-color--enabled: var(--mer-text__on-primary);\n --button-color--active: var(--mer-text__on-primary--active);\n display: inline-grid;\n grid-auto-flow: column;\n grid-auto-columns: max-content;\n justify-content: center;\n padding-block: var(--control__padding-block);\n padding-inline: var(--control__padding-inline);\n box-sizing: border-box;\n background-color: var(--button-background-color);\n color: var(--button-color);\n font-weight: 600;\n margin-block-end: auto;\n margin-block-start: auto;\n text-transform: capitalize;\n}\n.list-box::part(custom-button):hover {\n --button-color: var(--mer-text__primary--hover);\n}\n.list-box::part(custom-button):active {\n --button-color: var(--mer-text__primary--active);\n}\n","import {\n Component,\n Host,\n Prop,\n State,\n Element,\n h,\n Watch,\n getAssetPath\n} from \"@stencil/core\";\n\nimport { getIconPath, MercuryBundles } from \"@genexus/mercury\";\nimport { Locale } from \"../../common/locale\";\nimport { config } from \"../../common/config\";\n\nimport { ActionListModel } from \"@genexus/chameleon-controls-library\";\nimport {\n ActionListItemModel,\n ActionListItemModelExtended,\n ActionListItemSeparator\n} from \"@genexus/chameleon-controls-library/dist/types/components/action-list/types\";\n\nconst FILTER_ICON = getIconPath({\n category: \"system\",\n name: \"filters\",\n colorType: \"on-elevation\"\n});\n\n// plugin icon if no iconUrl was provided\nconst EXTENSION_ICON_IMG = getAssetPath(\n `./gx-ide-assets/plugin-manager/images/plugin-icon.svg`\n);\n\nconst CSS_BUNDLES: MercuryBundles = [\n \"resets/box-sizing\",\n \"components/list-box\",\n \"components/button\",\n \"components/edit\",\n \"utils/form\",\n \"utils/layout\",\n \"utils/typography\",\n \"utils/spacing\",\n \"chameleon/scrollbar\"\n];\n\n@Component({\n tag: \"gx-ide-plugin-explorer\",\n styleUrl: \"plugin-explorer.scss\",\n shadow: true,\n assetsDirs: [\"gx-ide-assets/plugin-explorer\"]\n})\nexport class GxIdePluginManager {\n /**\n * The component hard-coded strings translations.\n */\n // eslint-disable-next-line @stencil-community/own-props-must-be-private\n #componentLocale: any;\n #animateEmptyState: boolean = false;\n\n @Element() el: HTMLGxIdePluginExplorerElement;\n\n /**\n * If true it will hide the content, and display a loader\n */\n @State() loading: boolean = true;\n\n /**\n * The plugins model as ActionListModel, which is the model the ch-action-list expects\n */\n @State() pluginsActionListModel: ActionListModel = [];\n\n /**\n * List of plugins to display. Usually used to initialize the component.\n */\n @Prop({ mutable: true }) plugins: PluginData[];\n @Watch(\"plugins\")\n pluginsChangedHandler(newPlugins: PluginData[]) {\n this.pluginsActionListModel =\n this.#mapPluginDataToActionListModel(newPlugins);\n this.loading = false;\n }\n\n /**\n * Callback that should be invoked when the user updates the filter.\n * A debounce should be applied before invoking this function.\n */\n @Prop() readonly filterCallback!: (text: string) => Promise<PluginData[]>;\n\n /**\n * Callback that should be invoked when the user clicks or presses Enter\n * on a selected plugin item.\n */\n @Prop() readonly showDetailsCallback!: (pluginId: string) => Promise<void>;\n\n /**\n * Callback that should be invoked when the user clicks on a plugin's action button.\n */\n @Prop() readonly executeActionCallback!: (\n pluginId: string,\n action: PluginAction\n ) => Promise<void>;\n\n async componentWillLoad() {\n this.#componentLocale = await Locale.getComponentStrings(this.el);\n this.pluginsChangedHandler(this.plugins);\n }\n\n #actionListButtonClickHandler =\n (pluginId: string, action: PluginAction) => (event: MouseEvent) => {\n event.stopPropagation();\n this.executeActionCallback(pluginId, action);\n };\n\n #mapPluginDataToActionListModel = (\n pluginsData: PluginData[]\n ): ActionListModel => {\n const pluginsActionListModel: ActionListModel = [];\n const separatorItem: ActionListItemSeparator = { type: \"separator\" };\n\n pluginsData?.forEach((pluginData, index) => {\n const hasActionButton = !!pluginData.action;\n const pluginItem = {\n id: pluginData.id,\n caption: pluginData.name,\n imgSrc: pluginData.iconUrl,\n type: \"actionable\",\n\n additionalInformation: {\n \"stretch-start\": {\n center: [\n {\n part: \"custom-image\",\n jsx: () => (\n <img\n part=\"custom-image\"\n src={pluginData.iconUrl || EXTENSION_ICON_IMG}\n alt={`${this.#componentLocale.logotype.replace(\n \"PLUGIN_NAME_PLACEHOLDER\",\n pluginData.name\n )}`}\n loading=\"lazy\"\n />\n )\n }\n ]\n },\n \"block-end\": {\n start: [\n {\n part: \"custom-description custom-button custom-container custom-brand custom-brand-icon custom-image item__block-end start\",\n jsx: () => (\n <div part=\"custom-container\" title={pluginData.description}>\n <p part=\"custom-description\">{pluginData.description}</p>\n <small part=\"custom-brand\">\n <span part=\"custom-brand-icon\"></span>\n {pluginData.publisher}\n </small>\n </div>\n )\n }\n // {\n // slot: \"abcd\"\n // } as ActionListItemAdditionalSlot // slot not working\n ]\n },\n \"stretch-end\": hasActionButton && {\n center: [\n {\n jsx: () => (\n <button\n part=\"custom-button\"\n onClick={this.#actionListButtonClickHandler(\n pluginData.id,\n pluginData.action\n )}\n >\n {pluginData.action}\n </button>\n )\n }\n ]\n }\n }\n } as ActionListItemModel;\n if (index !== 0) {\n pluginsActionListModel.push(separatorItem);\n }\n pluginsActionListModel.push(pluginItem);\n });\n\n return pluginsActionListModel;\n };\n\n #pluginsFilterInputHandler = async (\n event: CustomEvent<string> | InputEvent\n ) => {\n this.loading = true;\n const filterValue = event.detail as string;\n this.plugins = await this.filterCallback(filterValue);\n };\n\n #evaluateContentToDisplay = () => {\n const pluginsToDisplay = this.pluginsActionListModel.length;\n return pluginsToDisplay ? (\n <ch-action-list-render\n model={this.pluginsActionListModel}\n class=\"list-box\"\n selection=\"single\"\n onSelectedItemsChange={this.#pluginSelectedHandler}\n >\n {/* <p slot=\"abcd\">Slot for \"abcd\" id</p> */}\n </ch-action-list-render>\n ) : (\n <gx-ide-empty-state\n isAnimated={this.#animateEmptyState}\n class=\"recent-objects__empty-state\"\n stateIconSrc={FILTER_ICON}\n stateTitle={this.#componentLocale.emptyStateTitle}\n stateDescription={this.#componentLocale.emptyStateDescription}\n ></gx-ide-empty-state>\n );\n };\n\n #renderLoader = () => {\n this.#animateEmptyState = true;\n return (\n <gx-ide-loader\n loaderTitle={this.#componentLocale.loaderTitle}\n description={this.#componentLocale.loaderDescription}\n show\n ></gx-ide-loader>\n );\n };\n\n #pluginSelectedHandler = (\n event: CustomEvent<ActionListItemModelExtended[]>\n ) => {\n const eventType = event.detail[0]?.item.type;\n if (eventType === \"actionable\") {\n const pluginId = event.detail[0].item.id;\n this.showDetailsCallback(pluginId);\n }\n };\n\n render() {\n return (\n <Host class=\"widget\">\n <ch-theme model={CSS_BUNDLES}></ch-theme>\n\n <div class=\"outer-container field-group\">\n <ch-edit\n id=\"search-plugins-input\"\n class=\"input\"\n accessibleName={this.#componentLocale.accessibleName}\n placeholder={this.#componentLocale.searchInputPlaceholder}\n debounce={config.inputDebounce}\n onInput={this.#pluginsFilterInputHandler}\n type=\"search\"\n ></ch-edit>\n <div class=\"inner-container\">\n {this.loading\n ? this.#renderLoader()\n : this.#evaluateContentToDisplay()}\n </div>\n </div>\n </Host>\n );\n }\n}\n\nexport type PluginData = {\n id: string;\n iconUrl: string;\n name: string;\n description: string;\n publisher: string;\n action?: PluginAction;\n};\n\nexport type PluginAction = \"install\" | \"update\";\n"],"mappings":";;;;;;;;AAAA,MAAMA,IAAoB;;;;;;;;;;;;;;;;;ACsB1B,MAAMC,IAAcC,EAAY;EAC9BC,UAAU;EACVC,MAAM;EACNC,WAAW;;;yCAIb;MAAMC,IAAqBC,EACzB;;AAGF,MAAMC,IAA8B,EAClC,qBACA,uBACA,qBACA,mBACA,cACA,gBACA,oBACA,iBACA;;MASWC,IAAkB;;;;;;;QAK7BC,EAAAC,IAAAC,WAAA;IACAC,EAAAF,IAAAC,MAA8B;IAkD9BE,EAAAH,IAAAC,OACE,CAACG,GAAkBC,MAA0BC;MAC3CA,EAAMC;MACNN,KAAKO,sBAAsBJ,GAAUC;AAAO;IAGhDI,EAAAT,IAAAC,OACES;MAEA,MAAMC,IAA0C;MAChD,MAAMC,IAAyC;QAAEC,MAAM;;MAEvDH,MAAW,QAAXA,WAAW,aAAXA,EAAaI,SAAQ,CAACC,GAAYC;QAChC,MAAMC,MAAoBF,EAAWV;QACrC,MAAMa,IAAa;UACjBC,IAAIJ,EAAWI;UACfC,SAASL,EAAWtB;UACpB4B,QAAQN,EAAWO;UACnBT,MAAM;UAENU,uBAAuB;YACrB,iBAAiB;cACfC,QAAQ,EACN;gBACEC,MAAM;gBACNC,KAAK,MACHC,EAAA;kBACEF,MAAK;kBACLG,KAAKb,EAAWO,WAAW3B;kBAC3BkC,KAAK,GAAGC,EAAA7B,MAAIF,GAAA,KAAkBgC,SAASC,QACrC,2BACAjB,EAAWtB;kBAEbwC,SAAQ;;;;YAMlB,aAAa;cACXC,OAAO,EACL;gBACET,MAAM;gBACNC,KAAK,MACHC,EAAA;kBAAKF,MAAK;kBAAmBU,OAAOpB,EAAWqB;mBAC7CT,EAAA;kBAAGF,MAAK;mBAAsBV,EAAWqB,cACzCT,EAAA;kBAAOF,MAAK;mBACVE,EAAA;kBAAMF,MAAK;oBACVV,EAAWsB;;;;;;YAUxB,eAAepB,KAAmB;cAChCO,QAAQ,EACN;gBACEE,KAAK,MACHC,EAAA;kBACEF,MAAK;kBACLa,SAASR,EAAA7B,MAAIE,GAAA,KAA8BoC,KAAlCtC,MACPc,EAAWI,IACXJ,EAAWV;mBAGZU,EAAWV;;;;;QAQ1B,IAAIW,MAAU,GAAG;UACfL,EAAuB6B,KAAK5B;;QAE9BD,EAAuB6B,KAAKtB;AAAW;MAGzC,OAAOP;AAAsB;IAG/B8B,EAAAzC,IAAAC,OAA6ByC,MAC3BpC;MAEAL,KAAKgC,UAAU;MACf,MAAMU,IAAcrC,EAAMsC;MAC1B3C,KAAK4C,gBAAgB5C,KAAK6C,eAAeH;AAAY;IAGvDI,EAAA/C,IAAAC,OAA4B;MAC1B,MAAM+C,IAAmB/C,KAAKU,uBAAuBsC;MACrD,OAAOD,IACLrB,EAAA;QACEuB,OAAOjD,KAAKU;QACZwC,OAAM;QACNC,WAAU;QACVC,uBAAuBvB,EAAA7B,MAAIqD,GAAA;WAK7B3B,EAAA;QACE4B,YAAYzB,EAAA7B,MAAIC,GAAA;QAChBiD,OAAM;QACNK,cAAclE;QACdmE,YAAY3B,EAAA7B,MAAIF,GAAA,KAAkB2D;QAClCC,kBAAkB7B,EAAA7B,MAAIF,GAAA,KAAkB6D;;AAE3C;IAGHC,EAAA7D,IAAAC,OAAgB;MACd6D,EAAA7D,MAAIC,GAAsB,MAAI;MAC9B,OACEyB,EAAA;QACEoC,aAAajC,EAAA7B,MAAIF,GAAA,KAAkBgE;QACnC3B,aAAaN,EAAA7B,MAAIF,GAAA,KAAkBiE;QACnCC,MAAI;;AACW;IAIrBX,EAAAtD,IAAAC,OACEK;;MAEA,MAAM4D,KAAYC,IAAA7D,EAAMsC,OAAO,QAAE,QAAAuB,WAAA,aAAAA,EAAEC,KAAKvD;MACxC,IAAIqD,MAAc,cAAc;QAC9B,MAAM9D,IAAWE,EAAMsC,OAAO,GAAGwB,KAAKjD;QACtClB,KAAKoE,oBAAoBjE;;;mBAhLD;kCAKuB;;;;;;EAOnD,qBAAAkE,CAAsBC;IACpBtE,KAAKU,yBACHmB,EAAA7B,MAAIQ,GAAA,KAAgC8B,KAApCtC,MAAqCsE;IACvCtE,KAAKgC,UAAU;;EAuBjB,uBAAMuC;IACJV,EAAA7D,MAAIF,SAA0B0E,EAAOC,oBAAoBzE,KAAK0E,KAAG;IACjE1E,KAAKqE,sBAAsBrE,KAAK4C;;EA4IlC,MAAA+B;IACE,OACEjD,EAACkD,GAAI;MAAC1B,OAAM;OACVxB,EAAA;MAAUuB,OAAOrD;QAEjB8B,EAAA;MAAKwB,OAAM;OACTxB,EAAA;MACER,IAAG;MACHgC,OAAM;MACN2B,gBAAgBhD,EAAA7B,MAAIF,GAAA,KAAkB+E;MACtCC,aAAajD,EAAA7B,MAAIF,GAAA,KAAkBiF;MACnCC,UAAUC,EAAOC;MACjBC,SAAStD,EAAA7B,MAAIwC,GAAA;MACb5B,MAAK;QAEPc,EAAA;MAAKwB,OAAM;OACRlD,KAAKgC,UACFH,EAAA7B,MAAI4D,GAAA,KAActB,KAAlBtC,QACA6B,EAAA7B,MAAI8C,GAAA,KAA0BR,KAA9BtC"}
@@ -0,0 +1,344 @@
1
+ import { r as t, h as e, H as s, a as i } from "./p-25a9f1d7.js";
2
+
3
+ import { g as n } from "./p-2987a259.js";
4
+
5
+ import { L as o } from "./p-311eedf3.js";
6
+
7
+ const mapCategoryToListItemGroup = t => {
8
+ const e = {
9
+ caption: t.name,
10
+ id: t.name,
11
+ type: "group",
12
+ expanded: true,
13
+ expandable: true,
14
+ items: t.types.map((t => ({
15
+ caption: t.name,
16
+ id: t.name,
17
+ selected: t.selected,
18
+ additionalInformation: {
19
+ "stretch-start": {
20
+ center: [ {
21
+ imgSrc: t.icon
22
+ } ]
23
+ }
24
+ },
25
+ type: "actionable"
26
+ })))
27
+ };
28
+ return e;
29
+ };
30
+
31
+ const mapDataTypesToList = t => t.map(((t, e) => ({
32
+ caption: t.name,
33
+ id: t.name,
34
+ selected: t.selected,
35
+ additionalInformation: {
36
+ "stretch-start": {
37
+ center: [ {
38
+ imgSrc: t.icon || undefined
39
+ } ]
40
+ }
41
+ },
42
+ type: "actionable",
43
+ order: e
44
+ })));
45
+
46
+ const a = ":host{position:relative;display:grid;block-size:100%;overflow:auto;grid-template-rows:1fr max-content;--control__border-width:var(--mer-border__width--sm);--control__border-radius:var(--mer-border__radius--sm)}.main{display:contents}.selected-category{margin:0;text-transform:capitalize;margin-inline-start:var(--mer-spacing--md);white-space:nowrap}.footer{overflow:auto;padding:var(--mer-spacing--xs)}";
47
+
48
+ var r = undefined && undefined.__classPrivateFieldGet || function(t, e, s, i) {
49
+ if (s === "a" && !i) throw new TypeError("Private accessor was defined without a getter");
50
+ if (typeof e === "function" ? t !== e || !i : !e.has(t)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
51
+ return s === "m" ? i : s === "a" ? i.call(t) : i ? i.value : e.get(t);
52
+ };
53
+
54
+ var h = undefined && undefined.__classPrivateFieldSet || function(t, e, s, i, n) {
55
+ if (i === "m") throw new TypeError("Private method is not writable");
56
+ if (i === "a" && !n) throw new TypeError("Private accessor was defined without a setter");
57
+ if (typeof e === "function" ? t !== e || !n : !e.has(t)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
58
+ return i === "a" ? n.call(t, s) : n ? n.value = s : e.set(t, s), s;
59
+ };
60
+
61
+ var c, f, l, d, p, u, w, m, y, g, b, k, M, v, T, W, C;
62
+
63
+ const x = [ "resets/box-sizing", "components/list-box", "utils/form--full", "utils/typography", "utils/layout", "utils/spacing", "chameleon/scrollbar" ];
64
+
65
+ const I = "ArrowUp";
66
+
67
+ const _ = "ArrowDown";
68
+
69
+ const $ = "Enter";
70
+
71
+ const E = "Tab";
72
+
73
+ const D = "all";
74
+
75
+ const j = "recenttly-used";
76
+
77
+ const A = n({
78
+ category: "system",
79
+ name: "time",
80
+ colorType: "primary"
81
+ });
82
+
83
+ const L = class {
84
+ constructor(s) {
85
+ t(this, s);
86
+ c.set(this, void 0);
87
+ f.set(this, false);
88
+ l.set(this, new Map);
89
+ d.set(this, new Map);
90
+ p.set(this, new Map);
91
+ u.set(this, null);
92
+ w.set(this, {
93
+ // For setting focus
94
+ categoryId: undefined,
95
+ dataTypeId: undefined
96
+ });
97
+ m.set(this, false);
98
+ y.set(this, void 0);
99
+ g.set(this, (t => {
100
+ const e = t.find((t => t.tagName === "CH-ACTION-LIST-ITEM"));
101
+ if (e) {
102
+ const t = e.id;
103
+ const s = r(this, p, "f").get(t);
104
+ this.dataTypeSelectedCallback(s);
105
+ }
106
+ }));
107
+ b.set(this, (t => {
108
+ const e = t.key;
109
+ const s = t.composedPath();
110
+ if (e === I || e === _) {
111
+ h(this, u, e, "f");
112
+ if (e === I) {
113
+ // Check if this is the first group. IF it is, let the host know,
114
+ // so it can close the dialog.
115
+ const t = s.find((t => t.tagName === "CH-ACTION-LIST-ITEM"));
116
+ if (t !== undefined) {
117
+ return;
118
+ }
119
+ // This is a ch-action-list-group
120
+ const e = s.find((t => t.tagName === "CH-ACTION-LIST-GROUP"));
121
+ const i = e.id;
122
+ const n = r(this, y, "f").shadowRoot.firstElementChild.id;
123
+ if (i === n) {
124
+ this.arrowUpOnFirstElement();
125
+ }
126
+ }
127
+ } else if (e === $) {
128
+ r(this, g, "f").call(this, s);
129
+ } else if (e === E) {
130
+ t.stopPropagation();
131
+ }
132
+ }));
133
+ k.set(this, (t => {
134
+ if (r(this, u, "f")) ; else if (t.detail === 0) {
135
+ // ignore keyboard Enter (Enter happens by default on buttons on onClick)
136
+ return;
137
+ } else {
138
+ const e = t.composedPath();
139
+ r(this, g, "f").call(this, e);
140
+ }
141
+ h(this, u, null, "f");
142
+ }));
143
+ M.set(this, (() => {
144
+ if (!r(this, f, "f")) {
145
+ const t = [];
146
+ let e = 1;
147
+ const s = r(this, l, "f").size;
148
+ for (const i of r(this, l, "f").keys()) {
149
+ t.push(r(this, l, "f").get(i));
150
+ if (e !== s) {
151
+ t.push({
152
+ type: "separator"
153
+ });
154
+ }
155
+ e++;
156
+ }
157
+ this.categoriesListBoxModel = t;
158
+ h(this, f, true, "f");
159
+ this.selectedCategory = D;
160
+ }
161
+ }));
162
+ v.set(this, (() => {
163
+ h(this, f, false, "f");
164
+ this.categoriesListBoxModel = this.recentlyUsedActionListModel;
165
+ this.selectedCategory = j;
166
+ }));
167
+ this.selectedCategoryHandler = t => {
168
+ this.selectedCategory = t.currentTarget.dataset.name;
169
+ const e = [ r(this, l, "f").get(this.selectedCategory) ];
170
+ this.categoriesListBoxModel = e;
171
+ h(this, f, false, "f");
172
+ };
173
+ T.set(this, (t => {
174
+ // Prevents bubbling, which causes this component to close, due to how the IDE handles Tab event
175
+ // in a parent element.
176
+ if (t.key === E || t.key === $) {
177
+ t.stopPropagation();
178
+ }
179
+ }));
180
+ W.set(this, (() => {
181
+ const t = this.selectedCategory === j ? "button-secondary" : "button-tertiary";
182
+ const s = this.selectedCategory === D ? "button-secondary" : "button-tertiary";
183
+ let i = this.selectedCategory;
184
+ if (this.selectedCategory === j) {
185
+ i = r(this, c, "f").fixedTypes.recentlyUsed;
186
+ } else if (this.selectedCategory === D) {
187
+ i = r(this, c, "f").fixedTypes.all;
188
+ } else {
189
+ i = this.selectedCategory;
190
+ }
191
+ return e("footer", {
192
+ class: "footer control-footer control-footer-start scrollable\n "
193
+ }, e("div", {
194
+ class: "buttons-spacer"
195
+ }, this.recentlyUsed && this.recentlyUsed.length > 0 && e("button", {
196
+ class: `button-icon-only ${t}`,
197
+ "aria-label": `${r(this, c, "f").select} ${r(this, c, "f").fixedTypes.recentlyUsed}`,
198
+ title: `${r(this, c, "f").select} ${r(this, c, "f").fixedTypes.recentlyUsed}`,
199
+ onClick: r(this, v, "f"),
200
+ onKeyDown: r(this, T, "f")
201
+ }, e("ch-image", {
202
+ class: "icon-md",
203
+ src: A
204
+ })), e("button", {
205
+ class: `button-icon-only ${s}`,
206
+ onClick: r(this, M, "f"),
207
+ onKeyDown: r(this, T, "f"),
208
+ "aria-label": `${r(this, c, "f").select} ${r(this, c, "f").fixedTypes.all}`,
209
+ title: `${r(this, c, "f").select} ${r(this, c, "f").fixedTypes.all}`
210
+ }, "[*]"), this.categories.map((t => {
211
+ const s = t.name === this.selectedCategory ? "button-secondary" : "button-tertiary";
212
+ return e("button", {
213
+ class: `button-icon-only ${s}`,
214
+ "aria-label": t.name,
215
+ title: t.name,
216
+ onClick: this.selectedCategoryHandler,
217
+ onKeyDown: r(this, T, "f"),
218
+ "data-name": t.name
219
+ }, e("ch-image", {
220
+ class: "icon-md",
221
+ src: t.icon
222
+ }));
223
+ }))), e("p", {
224
+ class: "body-regular-s selected-category"
225
+ }, i));
226
+ }));
227
+ C.set(this, (async () => {
228
+ if (r(this, m, "f")) {
229
+ return;
230
+ }
231
+ let t;
232
+ setTimeout((() => {
233
+ // setTimeout as a WA, since the list-box elements are not rendered/read immediatelly
234
+ if (this.focusType === "selected" && r(this, w, "f").categoryId && r(this, w, "f").dataTypeId) {
235
+ // set focus on the selected element
236
+ const e = r(this, y, "f").shadowRoot.getElementById(r(this, w, "f").dataTypeId);
237
+ if (e) {
238
+ t = e;
239
+ }
240
+ } else {
241
+ // set focus of the first element
242
+ const e = r(this, y, "f").shadowRoot.firstElementChild;
243
+ const s = e.shadowRoot.firstElementChild;
244
+ t = s;
245
+ }
246
+ t && t.focus();
247
+ h(this, m, true, "f");
248
+ }), 150);
249
+ }));
250
+ this.categoriesListBoxModel = [];
251
+ this.selectedCategory = undefined;
252
+ this.recentlyUsedActionListModel = [];
253
+ this.loading = true;
254
+ this.categoriesJustChanged = false;
255
+ this.actionListDidRender = false;
256
+ this.categories = undefined;
257
+ this.dataTypeSelectedCallback = undefined;
258
+ this.arrowUpOnFirstElement = undefined;
259
+ this.focusType = "first-element";
260
+ this.recentlyUsed = [];
261
+ }
262
+ categoriesChanged(t) {
263
+ if (!(t === null || t === void 0 ? void 0 : t.length)) {
264
+ return;
265
+ }
266
+ r(this, l, "f").clear();
267
+ t.forEach((t => {
268
+ const e = mapCategoryToListItemGroup(t);
269
+ r(this, l, "f").set(t.name, e);
270
+ t.types.forEach((e => {
271
+ const s = e.selected;
272
+ if (s) {
273
+ // For setting focus
274
+ r(this, w, "f").categoryId = t.name;
275
+ r(this, w, "f").dataTypeId = e.name;
276
+ }
277
+ r(this, d, "f").set(e.name, t.id);
278
+ r(this, p, "f").set(e.name, {
279
+ id: t.id,
280
+ name: e.name,
281
+ icon: e.icon,
282
+ selected: e.selected
283
+ });
284
+ }));
285
+ }));
286
+ this.loading = false;
287
+ r(this, M, "f").call(this);
288
+ this.categoriesJustChanged = true;
289
+ }
290
+ recentlyUsedChanged(t) {
291
+ this.recentlyUsedActionListModel = null;
292
+ this.recentlyUsedActionListModel = mapDataTypesToList(t);
293
+ }
294
+ async componentWillLoad() {
295
+ h(this, c, await o.getComponentStrings(this.el), "f");
296
+ // initialize models
297
+ this.recentlyUsed.length && this.recentlyUsedChanged(this.recentlyUsed);
298
+ }
299
+ render() {
300
+ return e(s, {
301
+ class: "widget"
302
+ }, e("ch-theme", {
303
+ model: x
304
+ }), this.loading ? e("gx-ide-loader", {
305
+ loaderTitle: r(this, c, "f").loader.title,
306
+ description: r(this, c, "f").loader.description,
307
+ show: true
308
+ }) : e("section", {
309
+ class: "main"
310
+ }, e("ch-action-list-render", {
311
+ ref: async t => {
312
+ h(this, y, t, "f");
313
+ r(this, C, "f").call(this);
314
+ },
315
+ class: "list-box",
316
+ model: this.categoriesListBoxModel,
317
+ selection: "single",
318
+ onKeyDown: r(this, b, "f"),
319
+ onClick: r(this, k, "f")
320
+ }), r(this, W, "f").call(this)));
321
+ }
322
+ static get assetsDirs() {
323
+ return [ "gx-ide-assets/data-type-selector" ];
324
+ }
325
+ get el() {
326
+ return i(this);
327
+ }
328
+ static get watchers() {
329
+ return {
330
+ categories: [ "categoriesChanged" ],
331
+ recentlyUsed: [ "recentlyUsedChanged" ]
332
+ };
333
+ }
334
+ };
335
+
336
+ c = new WeakMap, f = new WeakMap, l = new WeakMap, d = new WeakMap, p = new WeakMap,
337
+ u = new WeakMap, w = new WeakMap, m = new WeakMap, y = new WeakMap, g = new WeakMap,
338
+ b = new WeakMap, k = new WeakMap, M = new WeakMap, v = new WeakMap, T = new WeakMap,
339
+ W = new WeakMap, C = new WeakMap;
340
+
341
+ L.style = a;
342
+
343
+ export { L as gx_ide_data_type_selector };
344
+ //# sourceMappingURL=p-6b4fdf55.entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["mapCategoryToListItemGroup","category","categoryGroup","caption","name","id","type","expanded","expandable","items","types","map","selected","additionalInformation","center","imgSrc","icon","mapDataTypesToList","dataTypes","dataType","index","undefined","order","dataTypeSelectorCss","CSS_BUNDLES","ARROW_UP_KEY","ARROW_DOWN_KEY","ENTER_KEY","TAB_KEY","ALL_CATEGORY_ID","RECENTLY_USED_CATEGORY_ID","CLOCK_ICON","getIconPath","colorType","GxIdeKbManagerImport","_GxIdeKbManagerImport__componentLocale","set","this","_GxIdeKbManagerImport_showAll","_GxIdeKbManagerImport_categoriesActionListItemGroupMap","Map","_GxIdeKbManagerImport_dataTypeCategoryMap","_GxIdeKbManagerImport_dataTypeDataIdMap","_GxIdeKbManagerImport_lastArrowKey","_GxIdeKbManagerImport_selectedDataTypeIds","categoryId","dataTypeId","_GxIdeKbManagerImport_focusAlreadySet","_GxIdeKbManagerImport_actionListEl","_GxIdeKbManagerImport_evaluateSelectionChanged","path","chActionListItem","find","el","tagName","dataTypeData","__classPrivateFieldGet","get","dataTypeSelectedCallback","_GxIdeKbManagerImport_listKeyDownHandler","event","pressedKey","key","composedPath","__classPrivateFieldSet","actionGroup","currentFocusedActionGroupId","firstActionListGroupId","shadowRoot","firstElementChild","arrowUpOnFirstElement","call","stopPropagation","_GxIdeKbManagerImport_listClickHandler","detail","_GxIdeKbManagerImport_showAllObjects","allCategoriesActionListModel","counter","mapLength","size","keys","push","categoriesListBoxModel","selectedCategory","_GxIdeKbManagerImport_showRecentlyObjects","recentlyUsedActionListModel","selectedCategoryHandler","e","currentTarget","dataset","newSelectedCategory","_GxIdeKbManagerImport_handleButtonTab","_GxIdeKbManagerImport_renderFooter","recentlyUsedBtnClass","allBtnClass","selectedCategoryDescription","fixedTypes","recentlyUsed","all","h","class","length","select","title","onClick","onKeyDown","src","categories","buttonClass","_GxIdeKbManagerImport_setFocus","async","focusableElement","setTimeout","focusType","selectedDataTypeEl","getElementById","firstActionListGroup","firstButton","focus","categoriesChanged","newCategories","clear","forEach","categoryListBoxModel","isSelected","loading","categoriesJustChanged","recentlyUsedChanged","newRecentlyUsed","componentWillLoad","Locale","getComponentStrings","render","Host","model","loaderTitle","loader","description","show","ref","selection"],"sources":["src/components/data-type-selector/helpers.ts","src/components/data-type-selector/data-type-selector.scss?tag=gx-ide-data-type-selector&encapsulation=shadow","src/components/data-type-selector/data-type-selector.tsx"],"sourcesContent":["import { DataTypeCategoryData, DataTypeData } from \"./data-type-selector\";\nimport {\n ActionListItemGroup,\n ActionListModel\n} from \"@genexus/chameleon-controls-library/dist/types/components/action-list/types\";\n\nexport const mapCategoryToListItemGroup = (\n category: DataTypeCategoryData\n): ActionListItemGroup => {\n const categoryGroup: ActionListItemGroup = {\n caption: category.name,\n id: category.name,\n type: \"group\",\n expanded: true,\n expandable: true,\n items: category.types.map(type => {\n return {\n caption: type.name,\n id: type.name,\n selected: type.selected,\n additionalInformation: {\n \"stretch-start\": {\n center: [{ imgSrc: type.icon }]\n }\n },\n type: \"actionable\"\n };\n })\n };\n return categoryGroup;\n};\n\nexport const mapDataTypesToList = (\n dataTypes: DataTypeData[]\n): ActionListModel => {\n return dataTypes.map((dataType, index) => {\n return {\n caption: dataType.name,\n id: dataType.name,\n selected: dataType.selected,\n additionalInformation: {\n \"stretch-start\": {\n center: [{ imgSrc: dataType.icon || undefined }]\n }\n },\n type: \"actionable\",\n order: index\n };\n });\n};\n",":host {\n position: relative;\n display: grid;\n block-size: 100%;\n overflow: auto;\n grid-template-rows: 1fr max-content;\n\n // WA: Prevent a custom css rule on genexus-web from overriding --control__border-width value.\n // TDOO: remove this when the custom style is removed from genexus-web.\n // custom stlye is: .gx-struct-editor .tabular-grid-cell {\n // --control__border-width: 0;\n // }\n\n --control__border-width: var(--mer-border__width--sm);\n --control__border-radius: var(--mer-border__radius--sm);\n}\n\n.main {\n display: contents;\n}\n\n.selected-category {\n margin: 0;\n text-transform: capitalize;\n margin-inline-start: var(\n --mer-spacing--md\n ); // TODO: Create a semantic class in Mercury for this case.\n white-space: nowrap;\n}\n\n.footer {\n overflow: auto;\n padding: var(--mer-spacing--xs);\n}\n","// Stencil\nimport { Component, Host, h, Prop, Element, State, Watch } from \"@stencil/core\";\n// Other Libraries\nimport { MercuryBundles, getIconPath } from \"@genexus/mercury\";\nimport {\n ActionListItemModel,\n ActionListModel\n} from \"@genexus/chameleon-controls-library\";\nimport { ActionListItemGroup } from \"@genexus/chameleon-controls-library/dist/types/components/action-list/types\";\n// Gx Ide Ui\nimport { Locale } from \"../../common/locale\";\nimport { mapCategoryToListItemGroup, mapDataTypesToList } from \"./helpers\";\n\nconst CSS_BUNDLES: MercuryBundles = [\n \"resets/box-sizing\",\n \"components/list-box\",\n \"utils/form--full\",\n \"utils/typography\",\n \"utils/layout\",\n \"utils/spacing\",\n \"chameleon/scrollbar\"\n];\n\nconst ARROW_UP_KEY = \"ArrowUp\";\nconst ARROW_DOWN_KEY = \"ArrowDown\";\nconst ENTER_KEY = \"Enter\";\nconst TAB_KEY = \"Tab\";\n\nconst ALL_CATEGORY_ID = \"all\";\nconst RECENTLY_USED_CATEGORY_ID = \"recenttly-used\";\n\nconst CLOCK_ICON = getIconPath({\n category: \"system\",\n name: \"time\",\n colorType: \"primary\"\n});\n\n@Component({\n tag: \"gx-ide-data-type-selector\",\n styleUrl: \"data-type-selector.scss\",\n shadow: true,\n assetsDirs: [\"gx-ide-assets/data-type-selector\"]\n})\nexport class GxIdeKbManagerImport {\n #_componentLocale: any;\n #showAll: boolean = false;\n #categoriesActionListItemGroupMap: Map<string, ActionListItemGroup> = new Map<\n string,\n ActionListItemGroup\n >();\n\n #dataTypeCategoryMap: Map<string, string> = new Map<string, string>();\n #dataTypeDataIdMap: Map<string, DataTypeData> = new Map<\n string,\n DataTypeData\n >();\n #lastArrowKey: typeof ARROW_UP_KEY | typeof ARROW_DOWN_KEY | null = null;\n #selectedDataTypeIds: SelectedDataTypeIds = {\n // For setting focus\n categoryId: undefined,\n dataTypeId: undefined\n };\n #focusAlreadySet: boolean = false;\n\n #actionListEl!: HTMLChActionListRenderElement;\n @Element() el: HTMLGxIdeDataTypeSelectorElement;\n\n @State() categoriesListBoxModel: ActionListItemModel[] = [];\n @State() selectedCategory: string;\n @State() recentlyUsedActionListModel: ActionListModel = [];\n @State() loading: boolean = true;\n @State() categoriesJustChanged: boolean = false;\n @State() actionListDidRender: boolean = false;\n\n /**\n * All possible types and its category\n */\n @Prop() readonly categories: DataTypeCategoryData[] = undefined;\n @Watch(\"categories\")\n categoriesChanged(newCategories: DataTypeCategoryData[]) {\n if (!newCategories?.length) {\n return;\n }\n\n this.#categoriesActionListItemGroupMap.clear();\n newCategories.forEach(category => {\n const categoryListBoxModel = mapCategoryToListItemGroup(category);\n this.#categoriesActionListItemGroupMap.set(\n category.name,\n categoryListBoxModel\n );\n category.types.forEach(type => {\n const isSelected = type.selected;\n if (isSelected) {\n // For setting focus\n this.#selectedDataTypeIds.categoryId = category.name;\n this.#selectedDataTypeIds.dataTypeId = type.name;\n }\n\n this.#dataTypeCategoryMap.set(type.name, category.id);\n this.#dataTypeDataIdMap.set(type.name, {\n id: category.id,\n name: type.name,\n icon: type.icon,\n selected: type.selected\n });\n });\n });\n this.loading = false;\n this.#showAllObjects();\n this.categoriesJustChanged = true;\n }\n\n /**\n * Callback invoked when the user has selected an item type\n */\n @Prop() readonly dataTypeSelectedCallback: DataTypeSelectedCallback;\n\n /**\n * Defines the type of focus applied when the component renders for the first time.\n */\n @Prop() readonly arrowUpOnFirstElement: ArrowFirstOnFirstElement;\n\n /**\n * Defines the type of focus applied when the component renders for the first time.\n */\n @Prop() readonly focusType: \"first-element\" | \"selected\" = \"first-element\";\n\n /**\n * All recently used types list\n */\n @Prop() readonly recentlyUsed: DataTypeData[] = [];\n @Watch(\"recentlyUsed\")\n recentlyUsedChanged(newRecentlyUsed: DataTypeData[]) {\n this.recentlyUsedActionListModel = null;\n this.recentlyUsedActionListModel = mapDataTypesToList(newRecentlyUsed);\n }\n\n async componentWillLoad() {\n this.#_componentLocale = await Locale.getComponentStrings(this.el);\n // initialize models\n this.recentlyUsed.length && this.recentlyUsedChanged(this.recentlyUsed);\n }\n\n #evaluateSelectionChanged = (path: EventTarget[]) => {\n const chActionListItem = path.find(\n el => (el as HTMLElement).tagName === \"CH-ACTION-LIST-ITEM\"\n );\n if (chActionListItem) {\n const id = (chActionListItem as HTMLElement).id;\n const dataTypeData = this.#dataTypeDataIdMap.get(id);\n this.dataTypeSelectedCallback(dataTypeData);\n }\n };\n\n #listKeyDownHandler = (event: KeyboardEvent) => {\n const pressedKey = event.key;\n const path = event.composedPath();\n\n if (pressedKey === ARROW_UP_KEY || pressedKey === ARROW_DOWN_KEY) {\n this.#lastArrowKey = pressedKey;\n\n if (pressedKey === ARROW_UP_KEY) {\n // Check if this is the first group. IF it is, let the host know,\n // so it can close the dialog.\n\n const chActionListItem = path.find(\n el => (el as HTMLElement).tagName === \"CH-ACTION-LIST-ITEM\"\n );\n\n if (chActionListItem !== undefined) {\n return;\n }\n\n // This is a ch-action-list-group\n const actionGroup = path.find(\n el => (el as HTMLElement).tagName === \"CH-ACTION-LIST-GROUP\"\n );\n const currentFocusedActionGroupId = (actionGroup as HTMLElement).id;\n\n const firstActionListGroupId =\n this.#actionListEl.shadowRoot.firstElementChild.id;\n\n if (currentFocusedActionGroupId === firstActionListGroupId) {\n this.arrowUpOnFirstElement();\n }\n }\n } else if (pressedKey === ENTER_KEY) {\n this.#evaluateSelectionChanged(path);\n } else if (pressedKey === TAB_KEY) {\n event.stopPropagation();\n }\n };\n\n #listClickHandler = (event: MouseEvent) => {\n if (this.#lastArrowKey) {\n // User navigated with ArrowUp or ArrowDown\n // Ignore, since this was not a click event.\n } else if (event.detail === 0) {\n // ignore keyboard Enter (Enter happens by default on buttons on onClick)\n return;\n } else {\n const path = event.composedPath();\n this.#evaluateSelectionChanged(path);\n }\n this.#lastArrowKey = null;\n };\n\n #showAllObjects = () => {\n if (!this.#showAll) {\n const allCategoriesActionListModel: ActionListItemModel[] = [];\n let counter = 1;\n const mapLength = this.#categoriesActionListItemGroupMap.size;\n for (const key of this.#categoriesActionListItemGroupMap.keys()) {\n allCategoriesActionListModel.push(\n this.#categoriesActionListItemGroupMap.get(key)\n );\n if (counter !== mapLength) {\n allCategoriesActionListModel.push({ type: \"separator\" });\n }\n counter++;\n }\n this.categoriesListBoxModel = allCategoriesActionListModel;\n this.#showAll = true;\n this.selectedCategory = ALL_CATEGORY_ID;\n }\n };\n\n #showRecentlyObjects = () => {\n this.#showAll = false;\n this.categoriesListBoxModel = this.recentlyUsedActionListModel;\n this.selectedCategory = RECENTLY_USED_CATEGORY_ID;\n };\n\n private selectedCategoryHandler = (e: MouseEvent) => {\n this.selectedCategory = (e.currentTarget as HTMLButtonElement).dataset.name;\n const newSelectedCategory = [\n this.#categoriesActionListItemGroupMap.get(this.selectedCategory)\n ];\n this.categoriesListBoxModel = newSelectedCategory;\n this.#showAll = false;\n };\n\n #handleButtonTab = (event: KeyboardEvent) => {\n // Prevents bubbling, which causes this component to close, due to how the IDE handles Tab event\n // in a parent element.\n if (event.key === TAB_KEY || event.key === ENTER_KEY) {\n event.stopPropagation();\n }\n };\n\n #renderFooter = () => {\n const recentlyUsedBtnClass =\n this.selectedCategory === RECENTLY_USED_CATEGORY_ID\n ? \"button-secondary\"\n : \"button-tertiary\";\n const allBtnClass =\n this.selectedCategory === ALL_CATEGORY_ID\n ? \"button-secondary\"\n : \"button-tertiary\";\n let selectedCategoryDescription = this.selectedCategory;\n if (this.selectedCategory === RECENTLY_USED_CATEGORY_ID) {\n selectedCategoryDescription =\n this.#_componentLocale.fixedTypes.recentlyUsed;\n } else if (this.selectedCategory === ALL_CATEGORY_ID) {\n selectedCategoryDescription = this.#_componentLocale.fixedTypes.all;\n } else {\n selectedCategoryDescription = this.selectedCategory;\n }\n\n return (\n <footer\n class=\"footer control-footer control-footer-start scrollable\n \"\n >\n <div class=\"buttons-spacer\">\n {this.recentlyUsed && this.recentlyUsed.length > 0 && (\n <button\n class={`button-icon-only ${recentlyUsedBtnClass}`}\n aria-label={`${this.#_componentLocale.select} ${\n this.#_componentLocale.fixedTypes.recentlyUsed\n }`}\n title={`${this.#_componentLocale.select} ${\n this.#_componentLocale.fixedTypes.recentlyUsed\n }`}\n onClick={this.#showRecentlyObjects}\n onKeyDown={this.#handleButtonTab}\n >\n <ch-image class=\"icon-md\" src={CLOCK_ICON}></ch-image>\n </button>\n )}\n <button\n class={`button-icon-only ${allBtnClass}`}\n onClick={this.#showAllObjects}\n onKeyDown={this.#handleButtonTab}\n aria-label={`${this.#_componentLocale.select} ${\n this.#_componentLocale.fixedTypes.all\n }`}\n title={`${this.#_componentLocale.select} ${\n this.#_componentLocale.fixedTypes.all\n }`}\n >\n [*]\n </button>\n {this.categories.map(category => {\n const buttonClass =\n category.name === this.selectedCategory\n ? \"button-secondary\"\n : \"button-tertiary\";\n\n return (\n <button\n class={`button-icon-only ${buttonClass}`}\n aria-label={category.name}\n title={category.name}\n onClick={this.selectedCategoryHandler}\n onKeyDown={this.#handleButtonTab}\n data-name={category.name}\n >\n <ch-image class=\"icon-md\" src={category.icon}></ch-image>\n </button>\n );\n })}\n </div>\n <p class=\"body-regular-s selected-category\">\n {selectedCategoryDescription}\n </p>\n </footer>\n );\n };\n\n #setFocus = async () => {\n if (this.#focusAlreadySet) {\n return;\n }\n let focusableElement: HTMLElement;\n\n setTimeout(() => {\n // setTimeout as a WA, since the list-box elements are not rendered/read immediatelly\n if (\n this.focusType === \"selected\" &&\n this.#selectedDataTypeIds.categoryId &&\n this.#selectedDataTypeIds.dataTypeId\n ) {\n // set focus on the selected element\n const selectedDataTypeEl = this.#actionListEl.shadowRoot.getElementById(\n this.#selectedDataTypeIds.dataTypeId\n );\n if (selectedDataTypeEl) {\n focusableElement = selectedDataTypeEl;\n }\n } else {\n // set focus of the first element\n const firstActionListGroup =\n this.#actionListEl.shadowRoot.firstElementChild;\n\n const firstButton = firstActionListGroup.shadowRoot.firstElementChild;\n focusableElement = firstButton as HTMLButtonElement;\n }\n\n focusableElement && (focusableElement as HTMLElement).focus();\n this.#focusAlreadySet = true;\n }, 150);\n };\n\n render(): void {\n return (\n <Host class=\"widget\">\n <ch-theme model={CSS_BUNDLES}></ch-theme>\n {this.loading ? (\n <gx-ide-loader\n loaderTitle={this.#_componentLocale.loader.title}\n description={this.#_componentLocale.loader.description}\n show\n ></gx-ide-loader>\n ) : (\n <section class=\"main\">\n <ch-action-list-render\n ref={async el => {\n this.#actionListEl = el as HTMLChActionListRenderElement;\n this.#setFocus();\n }}\n class=\"list-box\"\n model={this.categoriesListBoxModel}\n selection=\"single\"\n onKeyDown={this.#listKeyDownHandler}\n onClick={this.#listClickHandler}\n ></ch-action-list-render>\n {this.#renderFooter()}\n </section>\n )}\n </Host>\n );\n }\n}\n\nexport type DataTypeCategoryData = {\n id: string;\n name: string;\n icon: string;\n types: DataTypeData[];\n};\nexport type DataTypeData = {\n id: string;\n name: string;\n icon: string;\n selected: boolean;\n};\n\nexport type DataTypeSelectedCallback = (data: DataTypeData) => Promise<void>;\n\ntype SelectedDataTypeIds = {\n categoryId: string;\n dataTypeId: string;\n};\n\nexport type ArrowFirstOnFirstElement = () => Promise<void>;\n"],"mappings":";;;;;;AAMO,MAAMA,6BACXC;EAEA,MAAMC,IAAqC;IACzCC,SAASF,EAASG;IAClBC,IAAIJ,EAASG;IACbE,MAAM;IACNC,UAAU;IACVC,YAAY;IACZC,OAAOR,EAASS,MAAMC,KAAIL,MACjB;MACLH,SAASG,EAAKF;MACdC,IAAIC,EAAKF;MACTQ,UAAUN,EAAKM;MACfC,uBAAuB;QACrB,iBAAiB;UACfC,QAAQ,EAAC;YAAEC,QAAQT,EAAKU;;;;MAG5BV,MAAM;;;EAIZ,OAAOJ;AAAa;;AAGf,MAAMe,qBACXC,KAEOA,EAAUP,KAAI,CAACQ,GAAUC,OACvB;EACLjB,SAASgB,EAASf;EAClBC,IAAIc,EAASf;EACbQ,UAAUO,EAASP;EACnBC,uBAAuB;IACrB,iBAAiB;MACfC,QAAQ,EAAC;QAAEC,QAAQI,EAASH,QAAQK;;;;EAGxCf,MAAM;EACNgB,OAAOF;;;AC9Cb,MAAMG,IAAsB;;;;;;;;;;;;;;;;;ACa5B,MAAMC,IAA8B,EAClC,qBACA,uBACA,oBACA,oBACA,gBACA,iBACA;;AAGF,MAAMC,IAAe;;AACrB,MAAMC,IAAiB;;AACvB,MAAMC,IAAY;;AAClB,MAAMC,IAAU;;AAEhB,MAAMC,IAAkB;;AACxB,MAAMC,IAA4B;;AAElC,MAAMC,IAAaC,EAAY;EAC7B/B,UAAU;EACVG,MAAM;EACN6B,WAAW;;;MASAC,IAAoB;;;IAC/BC,EAAAC,IAAAC,WAAA;IACAC,EAAAF,IAAAC,MAAoB;IACpBE,EAAAH,IAAAC,MAAsE,IAAIG;IAK1EC,EAAAL,IAAAC,MAA4C,IAAIG;IAChDE,EAAAN,IAAAC,MAAgD,IAAIG;IAIpDG,EAAAP,IAAAC,MAAoE;IACpEO,EAAAR,IAAAC,MAA4C;;MAE1CQ,YAAYxB;MACZyB,YAAYzB;;IAEd0B,EAAAX,IAAAC,MAA4B;IAE5BW,EAAAZ,IAAAC,WAAA;IAgFAY,EAAAb,IAAAC,OAA6Ba;MAC3B,MAAMC,IAAmBD,EAAKE,MAC5BC,KAAOA,EAAmBC,YAAY;MAExC,IAAIH,GAAkB;QACpB,MAAM9C,IAAM8C,EAAiC9C;QAC7C,MAAMkD,IAAeC,EAAAnB,MAAIK,GAAA,KAAoBe,IAAIpD;QACjDgC,KAAKqB,yBAAyBH;;;IAIlCI,EAAAvB,IAAAC,OAAuBuB;MACrB,MAAMC,IAAaD,EAAME;MACzB,MAAMZ,IAAOU,EAAMG;MAEnB,IAAIF,MAAepC,KAAgBoC,MAAenC,GAAgB;QAChEsC,EAAA3B,MAAIM,GAAiBkB,GAAU;QAE/B,IAAIA,MAAepC,GAAc;;;UAI/B,MAAM0B,IAAmBD,EAAKE,MAC5BC,KAAOA,EAAmBC,YAAY;UAGxC,IAAIH,MAAqB9B,WAAW;YAClC;;;oBAIF,MAAM4C,IAAcf,EAAKE,MACvBC,KAAOA,EAAmBC,YAAY;UAExC,MAAMY,IAA+BD,EAA4B5D;UAEjE,MAAM8D,IACJX,EAAAnB,MAAIW,GAAA,KAAeoB,WAAWC,kBAAkBhE;UAElD,IAAI6D,MAAgCC,GAAwB;YAC1D9B,KAAKiC;;;aAGJ,IAAIT,MAAelC,GAAW;QACnC6B,EAAAnB,MAAIY,GAAA,KAA0BsB,KAA9BlC,MAA+Ba;aAC1B,IAAIW,MAAejC,GAAS;QACjCgC,EAAMY;;;IAIVC,EAAArC,IAAAC,OAAqBuB;MACnB,IAAIJ,EAAAnB,MAAIM,GAAA,aAGD,IAAIiB,EAAMc,WAAW,GAAG;;QAE7B;aACK;QACL,MAAMxB,IAAOU,EAAMG;QACnBP,EAAAnB,MAAIY,GAAA,KAA0BsB,KAA9BlC,MAA+Ba;;MAEjCc,EAAA3B,MAAIM,GAAiB,MAAI;AAAA;IAG3BgC,EAAAvC,IAAAC,OAAkB;MAChB,KAAKmB,EAAAnB,MAAIC,GAAA,MAAW;QAClB,MAAMsC,IAAsD;QAC5D,IAAIC,IAAU;QACd,MAAMC,IAAYtB,EAAAnB,MAAIE,GAAA,KAAmCwC;QACzD,KAAK,MAAMjB,KAAON,EAAAnB,MAAIE,GAAA,KAAmCyC,QAAQ;UAC/DJ,EAA6BK,KAC3BzB,EAAAnB,MAAIE,GAAA,KAAmCkB,IAAIK;UAE7C,IAAIe,MAAYC,GAAW;YACzBF,EAA6BK,KAAK;cAAE3E,MAAM;;;UAE5CuE;;QAEFxC,KAAK6C,yBAAyBN;QAC9BZ,EAAA3B,MAAIC,GAAY,MAAI;QACpBD,KAAK8C,mBAAmBtD;;;IAI5BuD,EAAAhD,IAAAC,OAAuB;MACrB2B,EAAA3B,MAAIC,GAAY,OAAK;MACrBD,KAAK6C,yBAAyB7C,KAAKgD;MACnChD,KAAK8C,mBAAmBrD;AAAyB;IAG3CO,KAAAiD,0BAA2BC;MACjClD,KAAK8C,mBAAoBI,EAAEC,cAAoCC,QAAQrF;MACvE,MAAMsF,IAAsB,EAC1BlC,EAAAnB,MAAIE,GAAA,KAAmCkB,IAAIpB,KAAK8C;MAElD9C,KAAK6C,yBAAyBQ;MAC9B1B,EAAA3B,MAAIC,GAAY,OAAK;AAAA;IAGvBqD,EAAAvD,IAAAC,OAAoBuB;;;MAGlB,IAAIA,EAAME,QAAQlC,KAAWgC,EAAME,QAAQnC,GAAW;QACpDiC,EAAMY;;;IAIVoB,EAAAxD,IAAAC,OAAgB;MACd,MAAMwD,IACJxD,KAAK8C,qBAAqBrD,IACtB,qBACA;MACN,MAAMgE,IACJzD,KAAK8C,qBAAqBtD,IACtB,qBACA;MACN,IAAIkE,IAA8B1D,KAAK8C;MACvC,IAAI9C,KAAK8C,qBAAqBrD,GAA2B;QACvDiE,IACEvC,EAAAnB,MAAIF,GAAA,KAAmB6D,WAAWC;aAC/B,IAAI5D,KAAK8C,qBAAqBtD,GAAiB;QACpDkE,IAA8BvC,EAAAnB,MAAIF,GAAA,KAAmB6D,WAAWE;aAC3D;QACLH,IAA8B1D,KAAK8C;;MAGrC,OACEgB,EAAA;QACEC,OAAM;SAGND,EAAA;QAAKC,OAAM;SACR/D,KAAK4D,gBAAgB5D,KAAK4D,aAAaI,SAAS,KAC/CF,EAAA;QACEC,OAAO,oBAAoBP;QAAsB,cACrC,GAAGrC,EAAAnB,MAAIF,GAAA,KAAmBmE,UACpC9C,EAAAnB,MAAIF,GAAA,KAAmB6D,WAAWC;QAEpCM,OAAO,GAAG/C,EAAAnB,MAAIF,GAAA,KAAmBmE,UAC/B9C,EAAAnB,MAAIF,GAAA,KAAmB6D,WAAWC;QAEpCO,SAAShD,EAAAnB,MAAI+C,GAAA;QACbqB,WAAWjD,EAAAnB,MAAIsD,GAAA;SAEfQ,EAAA;QAAUC,OAAM;QAAUM,KAAK3E;WAGnCoE,EAAA;QACEC,OAAO,oBAAoBN;QAC3BU,SAAShD,EAAAnB,MAAIsC,GAAA;QACb8B,WAAWjD,EAAAnB,MAAIsD,GAAA;QAAiB,cACpB,GAAGnC,EAAAnB,MAAIF,GAAA,KAAmBmE,UACpC9C,EAAAnB,MAAIF,GAAA,KAAmB6D,WAAWE;QAEpCK,OAAO,GAAG/C,EAAAnB,MAAIF,GAAA,KAAmBmE,UAC/B9C,EAAAnB,MAAIF,GAAA,KAAmB6D,WAAWE;SAClC,QAIH7D,KAAKsE,WAAWhG,KAAIV;QACnB,MAAM2G,IACJ3G,EAASG,SAASiC,KAAK8C,mBACnB,qBACA;QAEN,OACEgB,EAAA;UACEC,OAAO,oBAAoBQ;UAAa,cAC5B3G,EAASG;UACrBmG,OAAOtG,EAASG;UAChBoG,SAASnE,KAAKiD;UACdmB,WAAWjD,EAAAnB,MAAIsD,GAAA;UAAiB,aACrB1F,EAASG;WAEpB+F,EAAA;UAAUC,OAAM;UAAUM,KAAKzG,EAASe;;AACjC,YAIfmF,EAAA;QAAGC,OAAM;SACNL;AAEI;IAIbc,EAAAzE,IAAAC,OAAYyE;MACV,IAAItD,EAAAnB,MAAIU,GAAA,MAAmB;QACzB;;MAEF,IAAIgE;MAEJC,YAAW;;QAET,IACE3E,KAAK4E,cAAc,cACnBzD,EAAAnB,MAAIO,GAAA,KAAsBC,cAC1BW,EAAAnB,MAAIO,GAAA,KAAsBE,YAC1B;;UAEA,MAAMoE,IAAqB1D,EAAAnB,MAAIW,GAAA,KAAeoB,WAAW+C,eACvD3D,EAAAnB,MAAIO,GAAA,KAAsBE;UAE5B,IAAIoE,GAAoB;YACtBH,IAAmBG;;eAEhB;;UAEL,MAAME,IACJ5D,EAAAnB,MAAIW,GAAA,KAAeoB,WAAWC;UAEhC,MAAMgD,IAAcD,EAAqBhD,WAAWC;UACpD0C,IAAmBM;;QAGrBN,KAAqBA,EAAiCO;QACtDtD,EAAA3B,MAAIU,GAAoB,MAAI;AAAA,UAC3B;AAAI;kCAvSgD;;uCAED;mBAC5B;iCACc;+BACF;sBAKc1B;;;qBAiDK;wBAKX;;EApDhD,iBAAAkG,CAAkBC;IAChB,MAAKA,MAAa,QAAbA,WAAa,aAAbA,EAAenB,SAAQ;MAC1B;;IAGF7C,EAAAnB,MAAIE,GAAA,KAAmCkF;IACvCD,EAAcE,SAAQzH;MACpB,MAAM0H,IAAuB3H,2BAA2BC;MACxDuD,EAAAnB,MAAIE,GAAA,KAAmCH,IACrCnC,EAASG,MACTuH;MAEF1H,EAASS,MAAMgH,SAAQpH;QACrB,MAAMsH,IAAatH,EAAKM;QACxB,IAAIgH,GAAY;;UAEdpE,EAAAnB,MAAIO,GAAA,KAAsBC,aAAa5C,EAASG;UAChDoD,EAAAnB,MAAIO,GAAA,KAAsBE,aAAaxC,EAAKF;;QAG9CoD,EAAAnB,MAAII,GAAA,KAAsBL,IAAI9B,EAAKF,MAAMH,EAASI;QAClDmD,EAAAnB,MAAIK,GAAA,KAAoBN,IAAI9B,EAAKF,MAAM;UACrCC,IAAIJ,EAASI;UACbD,MAAME,EAAKF;UACXY,MAAMV,EAAKU;UACXJ,UAAUN,EAAKM;;AACf;AACF;IAEJyB,KAAKwF,UAAU;IACfrE,EAAAnB,MAAIsC,GAAA,KAAgBJ,KAApBlC;IACAA,KAAKyF,wBAAwB;;EAuB/B,mBAAAC,CAAoBC;IAClB3F,KAAKgD,8BAA8B;IACnChD,KAAKgD,8BAA8BpE,mBAAmB+G;;EAGxD,uBAAMC;IACJjE,EAAA3B,MAAIF,SAA2B+F,EAAOC,oBAAoB9F,KAAKgB,KAAG;;QAElEhB,KAAK4D,aAAaI,UAAUhE,KAAK0F,oBAAoB1F,KAAK4D;;EAgO5D,MAAAmC;IACE,OACEjC,EAACkC,GAAI;MAACjC,OAAM;OACVD,EAAA;MAAUmC,OAAO9G;QAChBa,KAAKwF,UACJ1B,EAAA;MACEoC,aAAa/E,EAAAnB,MAAIF,GAAA,KAAmBqG,OAAOjC;MAC3CkC,aAAajF,EAAAnB,MAAIF,GAAA,KAAmBqG,OAAOC;MAC3CC,MAAI;SAGNvC,EAAA;MAASC,OAAM;OACbD,EAAA;MACEwC,KAAK7B,MAAMzD;QACTW,EAAA3B,MAAIW,GAAiBK,GAAmC;QACxDG,EAAAnB,MAAIwE,GAAA,KAAUtC,KAAdlC;AAAgB;MAElB+D,OAAM;MACNkC,OAAOjG,KAAK6C;MACZ0D,WAAU;MACVnC,WAAWjD,EAAAnB,MAAIsB,GAAA;MACf6C,SAAShD,EAAAnB,MAAIoC,GAAA;QAEdjB,EAAAnB,MAAIuD,GAAA,KAAcrB,KAAlBlC"}