@genexus/genexus-ide-ui 1.1.13 → 1.1.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 (124) 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-empty-state.cjs.entry.js +2 -2
  7. package/dist/cjs/gx-ide-empty-state.cjs.entry.js.map +1 -1
  8. package/dist/cjs/gx-ide-file-uploader.cjs.entry.js +0 -13
  9. package/dist/cjs/gx-ide-file-uploader.cjs.entry.js.map +1 -1
  10. package/dist/cjs/gx-ide-plugin-details.cjs.entry.js +201 -0
  11. package/dist/cjs/gx-ide-plugin-details.cjs.entry.js.map +1 -0
  12. package/dist/cjs/gx-ide-plugin-explorer.cjs.entry.js +159 -0
  13. package/dist/cjs/gx-ide-plugin-explorer.cjs.entry.js.map +1 -0
  14. package/dist/cjs/gx-ide-sc-chat-container.cjs.entry.js +0 -1
  15. package/dist/cjs/gx-ide-sc-chat-container.cjs.entry.js.map +1 -1
  16. package/dist/cjs/loader.cjs.js +1 -1
  17. package/dist/collection/collection-manifest.json +3 -1
  18. package/dist/collection/components/_helpers/empty-state/gx-ide-empty-state.css +4 -0
  19. package/dist/collection/components/_helpers/empty-state/gx-ide-empty-state.js +1 -1
  20. package/dist/collection/components/_helpers/empty-state/gx-ide-empty-state.js.map +1 -1
  21. package/dist/collection/components/{_branding/about → about}/about.css +44 -15
  22. package/dist/collection/components/{_branding/about → about}/about.js +46 -62
  23. package/dist/collection/components/about/about.js.map +1 -0
  24. package/dist/collection/components/{_branding/about → about}/gx-ide-assets/about/langs/about.lang.en.json +3 -3
  25. package/dist/collection/components/{_branding/about → about}/gx-ide-assets/about/langs/about.lang.ja.json +3 -3
  26. package/dist/collection/components/{_branding/about → about}/gx-ide-assets/about/langs/about.lang.zh.json +3 -3
  27. package/dist/collection/components/bpm/export-xpdl/bpm-export-xpdl.js +2 -2
  28. package/dist/collection/components/bpm/export-xpdl/bpm-export-xpdl.js.map +1 -1
  29. package/dist/collection/components/file-uploader/file-uploader.js +0 -13
  30. package/dist/collection/components/file-uploader/file-uploader.js.map +1 -1
  31. package/dist/collection/components/plugin-details/gx-ide-assets/plugin-details/langs/plugin-details.lang.en.json +9 -0
  32. package/dist/collection/components/plugin-details/gx-ide-assets/plugin-details/langs/plugin-details.lang.ja.json +9 -0
  33. package/dist/collection/components/plugin-details/gx-ide-assets/plugin-details/langs/plugin-details.lang.zh.json +9 -0
  34. package/dist/collection/components/plugin-details/plugin-details.css +168 -0
  35. package/dist/collection/components/plugin-details/plugin-details.js +292 -0
  36. package/dist/collection/components/plugin-details/plugin-details.js.map +1 -0
  37. package/dist/collection/components/plugin-explorer/gx-ide-assets/plugin-explorer/images/plugin-icon.svg +10 -0
  38. package/dist/collection/components/plugin-explorer/gx-ide-assets/plugin-explorer/langs/plugin-explorer.lang.en.json +10 -0
  39. package/dist/collection/components/plugin-explorer/gx-ide-assets/plugin-explorer/langs/plugin-explorer.lang.ja.json +10 -0
  40. package/dist/collection/components/plugin-explorer/gx-ide-assets/plugin-explorer/langs/plugin-explorer.lang.zh.json +10 -0
  41. package/dist/collection/components/plugin-explorer/plugin-explorer.css +106 -0
  42. package/dist/collection/components/plugin-explorer/plugin-explorer.js +263 -0
  43. package/dist/collection/components/plugin-explorer/plugin-explorer.js.map +1 -0
  44. 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
  45. package/dist/collection/pages/assets/images/plugin/docker-iso.svg +12 -0
  46. package/dist/collection/showcase/chat-container/callbacks.js +0 -1
  47. package/dist/collection/showcase/chat-container/callbacks.js.map +1 -1
  48. package/dist/collection/testing/locale.e2e.js +2 -0
  49. package/dist/collection/testing/locale.e2e.js.map +1 -1
  50. package/dist/components/gx-ide-about.js +32 -19
  51. package/dist/components/gx-ide-about.js.map +1 -1
  52. package/dist/components/gx-ide-bpm-export-xpdl.js +2 -2
  53. package/dist/components/gx-ide-bpm-export-xpdl.js.map +1 -1
  54. package/dist/components/gx-ide-empty-state2.js +2 -2
  55. package/dist/components/gx-ide-empty-state2.js.map +1 -1
  56. package/dist/components/gx-ide-file-uploader.js +0 -13
  57. package/dist/components/gx-ide-file-uploader.js.map +1 -1
  58. package/dist/components/gx-ide-plugin-details.d.ts +11 -0
  59. package/dist/components/gx-ide-plugin-details.js +222 -0
  60. package/dist/components/gx-ide-plugin-details.js.map +1 -0
  61. package/dist/components/gx-ide-plugin-explorer.d.ts +11 -0
  62. package/dist/components/gx-ide-plugin-explorer.js +194 -0
  63. package/dist/components/gx-ide-plugin-explorer.js.map +1 -0
  64. package/dist/components/gx-ide-sc-chat-container.js +0 -1
  65. package/dist/components/gx-ide-sc-chat-container.js.map +1 -1
  66. package/dist/esm/genexus-ide-ui.js +1 -1
  67. package/dist/esm/gx-ide-about.entry.js +29 -15
  68. package/dist/esm/gx-ide-about.entry.js.map +1 -1
  69. package/dist/esm/gx-ide-bpm-export-xpdl.entry.js +2 -2
  70. package/dist/esm/gx-ide-bpm-export-xpdl.entry.js.map +1 -1
  71. package/dist/esm/gx-ide-empty-state.entry.js +2 -2
  72. package/dist/esm/gx-ide-empty-state.entry.js.map +1 -1
  73. package/dist/esm/gx-ide-file-uploader.entry.js +0 -13
  74. package/dist/esm/gx-ide-file-uploader.entry.js.map +1 -1
  75. package/dist/esm/gx-ide-plugin-details.entry.js +197 -0
  76. package/dist/esm/gx-ide-plugin-details.entry.js.map +1 -0
  77. package/dist/esm/gx-ide-plugin-explorer.entry.js +155 -0
  78. package/dist/esm/gx-ide-plugin-explorer.entry.js.map +1 -0
  79. package/dist/esm/gx-ide-sc-chat-container.entry.js +0 -1
  80. package/dist/esm/gx-ide-sc-chat-container.entry.js.map +1 -1
  81. package/dist/esm/loader.js +1 -1
  82. package/dist/genexus-ide-ui/genexus-ide-ui.esm.js +1 -1
  83. package/dist/genexus-ide-ui/genexus-ide-ui.esm.js.map +1 -1
  84. package/dist/genexus-ide-ui/gx-ide-assets/about/langs/about.lang.en.json +3 -3
  85. package/dist/genexus-ide-ui/gx-ide-assets/about/langs/about.lang.ja.json +3 -3
  86. package/dist/genexus-ide-ui/gx-ide-assets/about/langs/about.lang.zh.json +3 -3
  87. package/dist/genexus-ide-ui/gx-ide-assets/plugin-details/langs/plugin-details.lang.en.json +9 -0
  88. package/dist/genexus-ide-ui/gx-ide-assets/plugin-details/langs/plugin-details.lang.ja.json +9 -0
  89. package/dist/genexus-ide-ui/gx-ide-assets/plugin-details/langs/plugin-details.lang.zh.json +9 -0
  90. package/dist/genexus-ide-ui/gx-ide-assets/plugin-explorer/images/plugin-icon.svg +10 -0
  91. package/dist/genexus-ide-ui/gx-ide-assets/plugin-explorer/langs/plugin-explorer.lang.en.json +10 -0
  92. package/dist/genexus-ide-ui/gx-ide-assets/plugin-explorer/langs/plugin-explorer.lang.ja.json +10 -0
  93. package/dist/genexus-ide-ui/gx-ide-assets/plugin-explorer/langs/plugin-explorer.lang.zh.json +10 -0
  94. package/dist/genexus-ide-ui/gx-ide-assets/team-dev-bring-changes/langs/team-dev-bring-changes.lang.ja.json +45 -45
  95. package/dist/genexus-ide-ui/{p-a47d71eb.entry.js → p-4328be14.entry.js} +7 -7
  96. package/dist/genexus-ide-ui/p-4328be14.entry.js.map +1 -0
  97. package/dist/genexus-ide-ui/p-476b74a1.entry.js +109 -0
  98. package/dist/genexus-ide-ui/p-476b74a1.entry.js.map +1 -0
  99. package/dist/genexus-ide-ui/{p-6d996621.entry.js → p-4e6425f3.entry.js} +1 -2
  100. package/dist/genexus-ide-ui/p-4e6425f3.entry.js.map +1 -0
  101. package/dist/genexus-ide-ui/p-641c79a9.entry.js +198 -0
  102. package/dist/genexus-ide-ui/p-641c79a9.entry.js.map +1 -0
  103. package/dist/genexus-ide-ui/{p-17dc4c9c.entry.js → p-7d7cf30d.entry.js} +35 -51
  104. package/dist/genexus-ide-ui/p-7d7cf30d.entry.js.map +1 -0
  105. package/dist/genexus-ide-ui/p-84c1c1bb.entry.js +270 -0
  106. package/dist/genexus-ide-ui/p-84c1c1bb.entry.js.map +1 -0
  107. package/dist/genexus-ide-ui/{p-844b7117.entry.js → p-86365635.entry.js} +3 -3
  108. package/dist/genexus-ide-ui/p-86365635.entry.js.map +1 -0
  109. package/dist/types/components/{_branding/about → about}/about.d.ts +6 -10
  110. package/dist/types/components/plugin-details/plugin-details.d.ts +55 -0
  111. package/dist/types/components/plugin-explorer/plugin-explorer.d.ts +43 -0
  112. package/dist/types/components.d.ts +106 -22
  113. package/package.json +1 -1
  114. package/dist/collection/components/_branding/about/about.js.map +0 -1
  115. package/dist/genexus-ide-ui/p-0550fd5f.entry.js +0 -96
  116. package/dist/genexus-ide-ui/p-0550fd5f.entry.js.map +0 -1
  117. package/dist/genexus-ide-ui/p-17dc4c9c.entry.js.map +0 -1
  118. package/dist/genexus-ide-ui/p-6d996621.entry.js.map +0 -1
  119. package/dist/genexus-ide-ui/p-844b7117.entry.js.map +0 -1
  120. package/dist/genexus-ide-ui/p-a47d71eb.entry.js.map +0 -1
  121. /package/dist/collection/components/{_branding/about → about}/gx-ide-assets/about/images/copyrights-illustration.png +0 -0
  122. /package/dist/collection/components/{_branding/about → about}/gx-ide-assets/about/images/next-arrow.svg +0 -0
  123. /package/dist/collection/components/{_branding/about → about}/gx-ide-assets/about/images/next-logo.svg +0 -0
  124. /package/dist/collection/components/{_branding/about → about}/gx-ide-assets/about/images/next-square.svg +0 -0
@@ -0,0 +1,168 @@
1
+ :host {
2
+ display: grid;
3
+ block-size: 100%;
4
+ grid-template-areas: "header header" "main aside";
5
+ grid-template-rows: max-content 1fr;
6
+ grid-template-columns: 1fr 280px;
7
+ row-gap: 12px;
8
+ }
9
+
10
+ .section {
11
+ display: contents;
12
+ }
13
+
14
+ .header {
15
+ display: grid;
16
+ grid-area: header;
17
+ grid-template-areas: "plugin-icon plugin-details";
18
+ grid-template-columns: 64px 1fr;
19
+ column-gap: 16px;
20
+ padding: 24px 24px 16px 24px;
21
+ }
22
+
23
+ .plugin__icon {
24
+ grid-area: plugin-icon;
25
+ max-width: 100%;
26
+ }
27
+
28
+ .plugin__details {
29
+ grid-area: plugin-details;
30
+ display: flex;
31
+ flex-direction: column;
32
+ gap: 8px;
33
+ }
34
+
35
+ .plugin__publisher {
36
+ display: flex;
37
+ align-items: center;
38
+ gap: 4px;
39
+ }
40
+
41
+ .plugin__description {
42
+ line-height: 1.5;
43
+ }
44
+
45
+ .plugin__actions-container {
46
+ margin-block-start: 8px;
47
+ align-items: center;
48
+ }
49
+
50
+ .action-button {
51
+ min-inline-size: 100px;
52
+ }
53
+ .action-button.more-versions-available {
54
+ border-start-end-radius: 0 !important;
55
+ border-end-end-radius: 0 !important;
56
+ }
57
+
58
+ .installed-container {
59
+ display: flex;
60
+ align-items: center;
61
+ gap: 6px;
62
+ }
63
+ .installed-container ch-image {
64
+ --ch-image-size: 20px;
65
+ }
66
+
67
+ .main {
68
+ grid-area: main;
69
+ }
70
+
71
+ .docsTab {
72
+ block-size: 100%;
73
+ }
74
+
75
+ .aside {
76
+ grid-area: aside;
77
+ overflow: auto;
78
+ border-block-start: 1px solid var(--items-container__border-color);
79
+ }
80
+
81
+ .fields__list {
82
+ list-style: none;
83
+ padding: 0;
84
+ margin: 0;
85
+ font-size: 12px;
86
+ }
87
+
88
+ .plugin__info-category {
89
+ display: flex;
90
+ flex-direction: column;
91
+ gap: 8px;
92
+ }
93
+ .plugin__info-category:not(:first-child) {
94
+ padding-block-start: 16px;
95
+ margin-block-start: 16px;
96
+ border-block-start: 1px solid var(--mer-border-color__on-elevation--01);
97
+ }
98
+
99
+ .fields__list:not(.fields__list--as-tags) {
100
+ display: flex;
101
+ flex-direction: column;
102
+ gap: 8px;
103
+ }
104
+ .fields__list:not(.fields__list--as-tags) .field__li {
105
+ display: flex;
106
+ gap: 16px;
107
+ }
108
+
109
+ .fields__list--as-tags {
110
+ display: flex;
111
+ flex-wrap: wrap;
112
+ gap: 6px;
113
+ }
114
+ .fields__list--as-tags .field__li {
115
+ border: 1px solid var(--mer-border-color__on-elevation--01);
116
+ padding: 2px 8px;
117
+ border-radius: 4px;
118
+ text-transform: lowercase;
119
+ }
120
+ .fields__list--as-tags .field__link {
121
+ color: var(--mer-text__on-surface);
122
+ }
123
+ .fields__list--as-tags .field__link:hover {
124
+ color: var(--mer-accent__primary);
125
+ }
126
+ .fields__list--as-tags .field__link:active {
127
+ color: var(--mer-accent__primary--hover);
128
+ }
129
+
130
+ .field__name,
131
+ .field__value {
132
+ flex: 1;
133
+ }
134
+
135
+ .field__link {
136
+ color: var(--mer-accent__primary);
137
+ }
138
+ .field__link:hover {
139
+ color: var(--mer-accent__primary--hover);
140
+ }
141
+ .field__link:active {
142
+ color: var(--mer-accent__primary--active);
143
+ }
144
+
145
+ .docsTab {
146
+ background-color: transparent !important;
147
+ }
148
+
149
+ .dropdown.button-icon-only::part(expandable-button) {
150
+ padding: calc( ( var(--control__block-size) - 2 * var(--control__border-width) - var(--mer-icon__box--md) ) / 2 ) !important;
151
+ border-start-start-radius: 0 !important;
152
+ border-end-start-radius: 0 !important;
153
+ }
154
+
155
+ .version-buttons-container {
156
+ display: flex;
157
+ align-items: center;
158
+ gap: 1px;
159
+ }
160
+
161
+ ch-markdown-viewer {
162
+ block-size: 100%;
163
+ overflow: auto;
164
+ }
165
+
166
+ .text-underline {
167
+ text-decoration: underline;
168
+ }
@@ -0,0 +1,292 @@
1
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
2
+ if (kind === "a" && !f)
3
+ throw new TypeError("Private accessor was defined without a getter");
4
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver))
5
+ throw new TypeError("Cannot read private member from an object whose class did not declare it");
6
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
7
+ };
8
+ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
9
+ if (kind === "m")
10
+ throw new TypeError("Private method is not writable");
11
+ if (kind === "a" && !f)
12
+ throw new TypeError("Private accessor was defined without a setter");
13
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver))
14
+ throw new TypeError("Cannot write private member to an object whose class did not declare it");
15
+ return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
16
+ };
17
+ var _GxIdePluginDetails_componentLocale, _GxIdePluginDetails_docSectionIdDescriptionMap, _GxIdePluginDetails_versionsMenuOptionsModel, _GxIdePluginDetails_menuVersionSelectedHandler, _GxIdePluginDetails_renderUninstallButton, _GxIdePluginDetails_installClickedHandler, _GxIdePluginDetails_updateVersionHandler, _GxIdePluginDetails_openLinkHandler, _GxIdePluginDetails_uninstallClickedHandler, _GxIdePluginDetails_renderActionButtons, _GxIdePluginDetails_tabSelectionChangedHandler, _GxIdePluginDetails_renderDocSectionsSlots, _GxIdePluginDetails_returnFormatedId, _GxIdePluginDetails_renderAsideContent;
18
+ import { Host, h, getAssetPath } from "@stencil/core";
19
+ import { getIconPath } from "@genexus/mercury";
20
+ import { Locale } from "../../common/locale";
21
+ const USER_ICON = getIconPath({
22
+ category: "system",
23
+ name: "user",
24
+ colorType: "on-elevation"
25
+ });
26
+ const CHEVRON_DOWN_ICON = getIconPath({
27
+ category: "system",
28
+ name: "chevron-down",
29
+ colorType: "on-primary"
30
+ });
31
+ const CHECK_CIRCLE_ICON = getIconPath({
32
+ category: "system",
33
+ name: "check-circle",
34
+ colorType: "success"
35
+ });
36
+ // plugin icon if no iconUri was provided
37
+ const EXTENSION_ICON_IMG = getAssetPath(`./gx-ide-assets/plugin-manager/images/plugin-icon.svg`);
38
+ const CSS_BUNDLES = [
39
+ "resets/box-sizing",
40
+ "chameleon/scrollbar",
41
+ "components/button",
42
+ "components/dropdown",
43
+ "components/edit",
44
+ "components/icon",
45
+ "components/list-box",
46
+ "components/tab",
47
+ "utils/form",
48
+ "utils/layout",
49
+ "utils/spacing",
50
+ "utils/typography"
51
+ ];
52
+ export class GxIdePluginDetails {
53
+ constructor() {
54
+ /**
55
+ * The component hard-coded strings translations.
56
+ */
57
+ // eslint-disable-next-line @stencil-community/own-props-must-be-private
58
+ _GxIdePluginDetails_componentLocale.set(this, void 0);
59
+ // A map between docSection "id", and docSection "description".
60
+ // "id" is generated inside this component.
61
+ _GxIdePluginDetails_docSectionIdDescriptionMap.set(this, new Map());
62
+ _GxIdePluginDetails_versionsMenuOptionsModel.set(this, () => {
63
+ var _a;
64
+ const versionsToUpdateMenusModel = (_a = this.data.versions) === null || _a === void 0 ? void 0 : _a.map(version => {
65
+ return { id: version, caption: version };
66
+ });
67
+ return versionsToUpdateMenusModel;
68
+ });
69
+ _GxIdePluginDetails_menuVersionSelectedHandler.set(this, (event) => {
70
+ const selectedVersion = event.detail.id;
71
+ this.installCallback(selectedVersion);
72
+ });
73
+ _GxIdePluginDetails_renderUninstallButton.set(this, () => {
74
+ return (h("button", { class: "button-tertiary", onClick: __classPrivateFieldGet(this, _GxIdePluginDetails_uninstallClickedHandler, "f") }, __classPrivateFieldGet(this, _GxIdePluginDetails_componentLocale, "f").actions.uninstall));
75
+ });
76
+ _GxIdePluginDetails_installClickedHandler.set(this, () => {
77
+ this.installCallback();
78
+ });
79
+ _GxIdePluginDetails_updateVersionHandler.set(this, (id) => () => {
80
+ this.installCallback(id);
81
+ });
82
+ _GxIdePluginDetails_openLinkHandler.set(this, (link) => (event) => {
83
+ event.preventDefault();
84
+ this.openLinkCallback(link);
85
+ });
86
+ _GxIdePluginDetails_uninstallClickedHandler.set(this, () => {
87
+ this.uninstallCallback();
88
+ });
89
+ _GxIdePluginDetails_renderActionButtons.set(this, () => {
90
+ var _a;
91
+ let actionButtonCaption;
92
+ let actionButtonClasses = "button-primary action-button";
93
+ let actionButtonCallback;
94
+ const moreVersionsToUpdate = (_a = this.data.versions) === null || _a === void 0 ? void 0 : _a.length;
95
+ if (!this.data.installed) {
96
+ actionButtonCaption = __classPrivateFieldGet(this, _GxIdePluginDetails_componentLocale, "f").actions.install;
97
+ actionButtonCallback = __classPrivateFieldGet(this, _GxIdePluginDetails_installClickedHandler, "f");
98
+ }
99
+ else if (this.data.updateVersion) {
100
+ actionButtonCaption = `${__classPrivateFieldGet(this, _GxIdePluginDetails_componentLocale, "f").actions.updateTo} ${this.data.updateVersion}`;
101
+ actionButtonCallback = __classPrivateFieldGet(this, _GxIdePluginDetails_updateVersionHandler, "f").call(this, this.data.updateVersion);
102
+ }
103
+ else {
104
+ actionButtonCaption = __classPrivateFieldGet(this, _GxIdePluginDetails_componentLocale, "f").actions.installed;
105
+ }
106
+ if (moreVersionsToUpdate) {
107
+ actionButtonClasses = `${actionButtonClasses} more-versions-available`;
108
+ }
109
+ return [
110
+ h("div", { class: "version-buttons-container" }, h("button", { class: actionButtonClasses, onClick: actionButtonCallback }, actionButtonCaption), moreVersionsToUpdate ? (h("ch-action-menu-render", { class: "dropdown button-primary button-icon-only", blockAlign: "outside-end", inlineAlign: "inside-start", model: __classPrivateFieldGet(this, _GxIdePluginDetails_versionsMenuOptionsModel, "f").call(this), onButtonClick: __classPrivateFieldGet(this, _GxIdePluginDetails_menuVersionSelectedHandler, "f") }, h("ch-image", { src: CHEVRON_DOWN_ICON, class: "icon-md" }))) : null)
111
+ ];
112
+ });
113
+ _GxIdePluginDetails_tabSelectionChangedHandler.set(this, (event) => {
114
+ this.selectedTabId = event.detail.newSelectedId;
115
+ });
116
+ _GxIdePluginDetails_renderDocSectionsSlots.set(this, () => {
117
+ return this.docsTabModel.map(docSectionTab => {
118
+ if (docSectionTab.id === this.selectedTabId) {
119
+ const markdownValue = __classPrivateFieldGet(this, _GxIdePluginDetails_docSectionIdDescriptionMap, "f").get(docSectionTab.id);
120
+ return (h("ch-markdown-viewer", { slot: docSectionTab.id, key: docSectionTab.id, class: "markdown spacing-body scrollable", theme: "components/markdown-viewer", value: markdownValue }));
121
+ }
122
+ });
123
+ });
124
+ _GxIdePluginDetails_returnFormatedId.set(this, (rawId) => {
125
+ return rawId.toLowerCase().replace(/\s+/g, "-");
126
+ });
127
+ _GxIdePluginDetails_renderAsideContent.set(this, () => {
128
+ return this.data.infoCategories.map(infoCategory => {
129
+ return (h("div", { class: "plugin__info-category" }, h("h3", { class: "subtitle-semi-bold-s" }, infoCategory.name), h("ul", { class: {
130
+ "fields__list": true,
131
+ "fields__list--as-tags": infoCategory.displayAsTags
132
+ } }, infoCategory.fields.map(field => {
133
+ // If the field name isn’t specified, only the value is shown — usually a link.
134
+ const fieldValue = typeof field.value === "string" ? field.value : (h("a", { class: "field__link", onClick: __classPrivateFieldGet(this, _GxIdePluginDetails_openLinkHandler, "f").call(this, field.value.url) }, field.value.text));
135
+ return (h("li", { class: "field__li" }, field.name && !infoCategory.displayAsTags
136
+ ? // displaysAsTags forces the items to be displayed as tags
137
+ // no span.field__name and span.field__value
138
+ [
139
+ h("span", { class: "field__name body-semi-bold-s" }, field.name),
140
+ h("span", { class: "field__value body-regular-s" }, fieldValue)
141
+ ]
142
+ : fieldValue));
143
+ }))));
144
+ });
145
+ });
146
+ this.docsTabModel = [];
147
+ this.selectedTabId = undefined;
148
+ this.data = undefined;
149
+ this.installCallback = undefined;
150
+ this.openLinkCallback = undefined;
151
+ this.uninstallCallback = undefined;
152
+ }
153
+ async componentWillLoad() {
154
+ var _a;
155
+ __classPrivateFieldSet(this, _GxIdePluginDetails_componentLocale, await Locale.getComponentStrings(this.el), "f");
156
+ if ((_a = this.data.docSections) === null || _a === void 0 ? void 0 : _a.length) {
157
+ this.docsTabModel = this.data.docSections.map((docSection, i) => {
158
+ const formatedId = __classPrivateFieldGet(this, _GxIdePluginDetails_returnFormatedId, "f").call(this, docSection.name);
159
+ __classPrivateFieldGet(this, _GxIdePluginDetails_docSectionIdDescriptionMap, "f").set(formatedId, docSection.content);
160
+ if (i === 0) {
161
+ this.selectedTabId = formatedId;
162
+ }
163
+ return {
164
+ id: formatedId,
165
+ name: docSection.name
166
+ };
167
+ });
168
+ }
169
+ }
170
+ render() {
171
+ const renderActionButtons = !this.data.installed ||
172
+ (this.data.installed && !!this.data.updateVersion);
173
+ const titleLinkDataText = this.data.name.text;
174
+ const titleLinkDataUrl = this.data.name.url;
175
+ const titleHasLink = titleLinkDataText && titleLinkDataUrl;
176
+ const titleText = titleLinkDataText || this.data.name;
177
+ const publisherDataText = this.data.publisher.text;
178
+ const publisherDataUrl = this.data.publisher.url;
179
+ const publisherHasLink = publisherDataText && publisherDataUrl;
180
+ const publisherText = publisherDataText || this.data.publisher;
181
+ return (h(Host, { class: "widget" }, h("ch-theme", { model: CSS_BUNDLES }), h("section", { class: "section" }, h("header", { class: "header" }, h("img", { class: "plugin__icon", src: this.data.iconUrl || EXTENSION_ICON_IMG, alt: "plugin extension icon" }), h("div", { class: "plugin__details" }, titleHasLink ? (h("h2", { class: "heading-5" }, h("a", { href: titleLinkDataUrl, onClick: __classPrivateFieldGet(this, _GxIdePluginDetails_openLinkHandler, "f").call(this, titleLinkDataUrl), class: "text-underline" }, titleText))) : (h("h2", { class: "heading-5" }, titleText)), publisherHasLink ? (h("a", { href: publisherDataUrl, onClick: __classPrivateFieldGet(this, _GxIdePluginDetails_openLinkHandler, "f").call(this, publisherDataUrl), class: "text-underline plugin__publisher tiny-semi-bold-l" }, h("ch-image", { src: USER_ICON, class: "icon-md" }), publisherText)) : (h("p", { class: "plugin__publisher tiny-semi-bold-l" }, h("ch-image", { src: USER_ICON, class: "icon-md" }), publisherText)), h("p", { class: "plugin__description" }, this.data.description), h("div", { class: "buttons-spacer plugin__actions-container" }, renderActionButtons ? (__classPrivateFieldGet(this, _GxIdePluginDetails_renderActionButtons, "f").call(this)) : (
182
+ // installed and no updates
183
+ h("p", { class: "installed-container subtitle-semi-bold-s" }, h("ch-image", { src: CHECK_CIRCLE_ICON, class: "icon-md" }), __classPrivateFieldGet(this, _GxIdePluginDetails_componentLocale, "f").actions.installed)), this.data.installed && __classPrivateFieldGet(this, _GxIdePluginDetails_renderUninstallButton, "f").call(this)))), h("div", { class: "main" }, this.docsTabModel.length > 0 && (h("ch-tab-render", { class: "tab docsTab scrollable", tabListPosition: "block-start", overflow: "auto", contain: "size", model: this.docsTabModel, onSelectedItemChange: __classPrivateFieldGet(this, _GxIdePluginDetails_tabSelectionChangedHandler, "f"), selectedId: this.selectedTabId }, __classPrivateFieldGet(this, _GxIdePluginDetails_renderDocSectionsSlots, "f").call(this)))), h("div", { class: "aside spacing-body scrollable" }, __classPrivateFieldGet(this, _GxIdePluginDetails_renderAsideContent, "f").call(this)))));
184
+ }
185
+ static get is() { return "gx-ide-plugin-details"; }
186
+ static get encapsulation() { return "shadow"; }
187
+ static get originalStyleUrls() {
188
+ return {
189
+ "$": ["plugin-details.scss"]
190
+ };
191
+ }
192
+ static get styleUrls() {
193
+ return {
194
+ "$": ["plugin-details.css"]
195
+ };
196
+ }
197
+ static get assetsDirs() { return ["gx-ide-assets/plugin-details"]; }
198
+ static get properties() {
199
+ return {
200
+ "data": {
201
+ "type": "unknown",
202
+ "mutable": false,
203
+ "complexType": {
204
+ "original": "PluginDetailsData",
205
+ "resolved": "{ id: string; name: string | LinkData; publisher: string | LinkData; installed: boolean; updateVersion?: string; versions: string[]; iconUrl: string; description: string; docSections: DocSectionData[]; infoCategories: PluginInfoCategoryData[]; }",
206
+ "references": {
207
+ "PluginDetailsData": {
208
+ "location": "local",
209
+ "path": "/home/runner/work/genexus-ide-ui/genexus-ide-ui/src/components/plugin-details/plugin-details.tsx",
210
+ "id": "src/components/plugin-details/plugin-details.tsx::PluginDetailsData"
211
+ }
212
+ }
213
+ },
214
+ "required": true,
215
+ "optional": false,
216
+ "docs": {
217
+ "tags": [],
218
+ "text": "Specifies all the information related to a plugin."
219
+ }
220
+ },
221
+ "installCallback": {
222
+ "type": "unknown",
223
+ "mutable": false,
224
+ "complexType": {
225
+ "original": "(version?: string) => Promise<void>",
226
+ "resolved": "(version?: string) => Promise<void>",
227
+ "references": {
228
+ "Promise": {
229
+ "location": "global",
230
+ "id": "global::Promise"
231
+ }
232
+ }
233
+ },
234
+ "required": true,
235
+ "optional": false,
236
+ "docs": {
237
+ "tags": [],
238
+ "text": "Callback that should be invoked when the user performs the install or update action.\nReceives an optional version string when a specific version is selected."
239
+ }
240
+ },
241
+ "openLinkCallback": {
242
+ "type": "unknown",
243
+ "mutable": false,
244
+ "complexType": {
245
+ "original": "(url: string) => Promise<void>",
246
+ "resolved": "(url: string) => Promise<void>",
247
+ "references": {
248
+ "Promise": {
249
+ "location": "global",
250
+ "id": "global::Promise"
251
+ }
252
+ }
253
+ },
254
+ "required": true,
255
+ "optional": false,
256
+ "docs": {
257
+ "tags": [],
258
+ "text": "Callback that should be invoked when the user attempts to open any link displayed in this component."
259
+ }
260
+ },
261
+ "uninstallCallback": {
262
+ "type": "unknown",
263
+ "mutable": false,
264
+ "complexType": {
265
+ "original": "() => Promise<void>",
266
+ "resolved": "() => Promise<void>",
267
+ "references": {
268
+ "Promise": {
269
+ "location": "global",
270
+ "id": "global::Promise"
271
+ }
272
+ }
273
+ },
274
+ "required": true,
275
+ "optional": false,
276
+ "docs": {
277
+ "tags": [],
278
+ "text": "Callback that should be invoked when the user performs the uninstall action."
279
+ }
280
+ }
281
+ };
282
+ }
283
+ static get states() {
284
+ return {
285
+ "docsTabModel": {},
286
+ "selectedTabId": {}
287
+ };
288
+ }
289
+ static get elementRef() { return "el"; }
290
+ }
291
+ _GxIdePluginDetails_componentLocale = new WeakMap(), _GxIdePluginDetails_docSectionIdDescriptionMap = new WeakMap(), _GxIdePluginDetails_versionsMenuOptionsModel = new WeakMap(), _GxIdePluginDetails_menuVersionSelectedHandler = new WeakMap(), _GxIdePluginDetails_renderUninstallButton = new WeakMap(), _GxIdePluginDetails_installClickedHandler = new WeakMap(), _GxIdePluginDetails_updateVersionHandler = new WeakMap(), _GxIdePluginDetails_openLinkHandler = new WeakMap(), _GxIdePluginDetails_uninstallClickedHandler = new WeakMap(), _GxIdePluginDetails_renderActionButtons = new WeakMap(), _GxIdePluginDetails_tabSelectionChangedHandler = new WeakMap(), _GxIdePluginDetails_renderDocSectionsSlots = new WeakMap(), _GxIdePluginDetails_returnFormatedId = new WeakMap(), _GxIdePluginDetails_renderAsideContent = new WeakMap();
292
+ //# sourceMappingURL=plugin-details.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-details.js","sourceRoot":"","sources":["../../../src/components/plugin-details/plugin-details.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n Host,\n State,\n Prop,\n Element,\n h,\n getAssetPath,\n JSX\n} from \"@stencil/core\";\n\nimport { getIconPath, MercuryBundles } from \"@genexus/mercury\";\nimport { Locale } from \"../../common/locale\";\nimport { ActionMenuModel, TabModel } from \"@genexus/chameleon-controls-library\";\nimport { TabItemModel } from \"@genexus/chameleon-controls-library/dist/types/components/tab/types\";\n\nconst USER_ICON = getIconPath({\n category: \"system\",\n name: \"user\",\n colorType: \"on-elevation\"\n});\nconst CHEVRON_DOWN_ICON = getIconPath({\n category: \"system\",\n name: \"chevron-down\",\n colorType: \"on-primary\"\n});\nconst CHECK_CIRCLE_ICON = getIconPath({\n category: \"system\",\n name: \"check-circle\",\n colorType: \"success\"\n});\n\n// plugin icon if no iconUri 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 \"chameleon/scrollbar\",\n \"components/button\",\n \"components/dropdown\",\n \"components/edit\",\n \"components/icon\",\n \"components/list-box\",\n \"components/tab\",\n \"utils/form\",\n \"utils/layout\",\n \"utils/spacing\",\n \"utils/typography\"\n];\n\n@Component({\n tag: \"gx-ide-plugin-details\",\n styleUrl: \"plugin-details.scss\",\n shadow: true,\n assetsDirs: [\"gx-ide-assets/plugin-details\"]\n})\nexport class GxIdePluginDetails {\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\n // A map between docSection \"id\", and docSection \"description\".\n // \"id\" is generated inside this component.\n #docSectionIdDescriptionMap: Map<string, string> = new Map();\n\n @Element() el: HTMLGxIdePluginDetailsElement;\n\n @State() docsTabModel: TabModel = [];\n @State() selectedTabId: string;\n\n /**\n * Specifies all the information related to a plugin.\n */\n @Prop() readonly data!: PluginDetailsData;\n\n /**\n * Callback that should be invoked when the user performs the install or update action.\n * Receives an optional version string when a specific version is selected.\n */\n @Prop() readonly installCallback!: (version?: string) => Promise<void>;\n\n /**\n * Callback that should be invoked when the user attempts to open any link displayed in this component.\n */\n @Prop() readonly openLinkCallback!: (url: string) => Promise<void>;\n\n /**\n * Callback that should be invoked when the user performs the uninstall action.\n */\n @Prop() readonly uninstallCallback!: () => Promise<void>;\n\n async componentWillLoad() {\n this.#componentLocale = await Locale.getComponentStrings(this.el);\n\n if (this.data.docSections?.length) {\n this.docsTabModel = this.data.docSections.map((docSection, i) => {\n const formatedId = this.#returnFormatedId(docSection.name);\n\n this.#docSectionIdDescriptionMap.set(formatedId, docSection.content);\n\n if (i === 0) {\n this.selectedTabId = formatedId;\n }\n return {\n id: formatedId,\n name: docSection.name\n } as TabItemModel;\n });\n }\n }\n\n #versionsMenuOptionsModel = (): ActionMenuModel => {\n const versionsToUpdateMenusModel: ActionMenuModel = this.data.versions?.map(\n version => {\n return { id: version, caption: version };\n }\n );\n return versionsToUpdateMenusModel;\n };\n\n #menuVersionSelectedHandler = (\n event: CustomEvent<{\n id?: string;\n }>\n ) => {\n const selectedVersion = event.detail.id;\n this.installCallback(selectedVersion);\n };\n\n #renderUninstallButton = (): JSX.Element => {\n return (\n <button class=\"button-tertiary\" onClick={this.#uninstallClickedHandler}>\n {this.#componentLocale.actions.uninstall}\n </button>\n );\n };\n\n #installClickedHandler = () => {\n this.installCallback();\n };\n\n #updateVersionHandler = (id: string) => () => {\n this.installCallback(id);\n };\n\n #openLinkHandler = (link: string) => (event: MouseEvent) => {\n event.preventDefault();\n this.openLinkCallback(link);\n };\n\n #uninstallClickedHandler = () => {\n this.uninstallCallback();\n };\n\n #renderActionButtons = (): JSX.Element => {\n let actionButtonCaption;\n let actionButtonClasses = \"button-primary action-button\";\n let actionButtonCallback;\n const moreVersionsToUpdate = this.data.versions?.length;\n\n if (!this.data.installed) {\n actionButtonCaption = this.#componentLocale.actions.install;\n actionButtonCallback = this.#installClickedHandler;\n } else if (this.data.updateVersion) {\n actionButtonCaption = `${this.#componentLocale.actions.updateTo} ${\n this.data.updateVersion\n }`;\n actionButtonCallback = this.#updateVersionHandler(\n this.data.updateVersion\n );\n } else {\n actionButtonCaption = this.#componentLocale.actions.installed;\n }\n\n if (moreVersionsToUpdate) {\n actionButtonClasses = `${actionButtonClasses} more-versions-available`;\n }\n\n return [\n <div class=\"version-buttons-container\">\n <button class={actionButtonClasses} onClick={actionButtonCallback}>\n {actionButtonCaption}\n </button>\n {moreVersionsToUpdate ? (\n <ch-action-menu-render\n class=\"dropdown button-primary button-icon-only\"\n blockAlign=\"outside-end\"\n inlineAlign=\"inside-start\"\n model={this.#versionsMenuOptionsModel()}\n onButtonClick={this.#menuVersionSelectedHandler}\n >\n <ch-image src={CHEVRON_DOWN_ICON} class=\"icon-md\"></ch-image>\n </ch-action-menu-render>\n ) : null}\n </div>\n ];\n };\n\n #tabSelectionChangedHandler = (\n event: CustomEvent<{\n lastSelectedIndex: number;\n newSelectedId: string;\n newSelectedIndex: number;\n }>\n ): void => {\n this.selectedTabId = event.detail.newSelectedId;\n };\n\n #renderDocSectionsSlots = (): JSX.Element => {\n return this.docsTabModel.map(docSectionTab => {\n if (docSectionTab.id === this.selectedTabId) {\n const markdownValue = this.#docSectionIdDescriptionMap.get(\n docSectionTab.id\n );\n\n return (\n <ch-markdown-viewer\n slot={docSectionTab.id}\n key={docSectionTab.id}\n class=\"markdown spacing-body scrollable\"\n theme=\"components/markdown-viewer\"\n value={markdownValue}\n ></ch-markdown-viewer>\n );\n }\n });\n };\n\n #returnFormatedId = (rawId: string): string => {\n return rawId.toLowerCase().replace(/\\s+/g, \"-\");\n };\n\n #renderAsideContent = (): JSX.Element => {\n return this.data.infoCategories.map(infoCategory => {\n return (\n <div class=\"plugin__info-category\">\n <h3 class=\"subtitle-semi-bold-s\">{infoCategory.name}</h3>\n <ul\n class={{\n \"fields__list\": true,\n \"fields__list--as-tags\": infoCategory.displayAsTags\n }}\n >\n {infoCategory.fields.map(field => {\n // If the field name isn’t specified, only the value is shown — usually a link.\n const fieldValue: string | HTMLAnchorElement =\n typeof field.value === \"string\" ? (\n (field.value as string)\n ) : (\n <a\n class=\"field__link\"\n onClick={this.#openLinkHandler(\n (field.value as LinkData).url\n )}\n >\n {(field.value as LinkData).text}\n </a>\n );\n return (\n <li class=\"field__li\">\n {field.name && !infoCategory.displayAsTags\n ? // displaysAsTags forces the items to be displayed as tags\n // no span.field__name and span.field__value\n [\n <span class=\"field__name body-semi-bold-s\">\n {field.name}\n </span>,\n <span class=\"field__value body-regular-s\">\n {fieldValue}\n </span>\n ]\n : fieldValue}\n </li>\n );\n })}\n </ul>\n </div>\n );\n });\n };\n\n render() {\n const renderActionButtons =\n !this.data.installed ||\n (this.data.installed && !!this.data.updateVersion);\n\n const titleLinkDataText = (this.data.name as LinkData).text;\n const titleLinkDataUrl = (this.data.name as LinkData).url;\n const titleHasLink = titleLinkDataText && titleLinkDataUrl;\n const titleText = titleLinkDataText || this.data.name;\n\n const publisherDataText = (this.data.publisher as LinkData).text;\n const publisherDataUrl = (this.data.publisher as LinkData).url;\n const publisherHasLink = publisherDataText && publisherDataUrl;\n const publisherText = publisherDataText || this.data.publisher;\n\n return (\n <Host class=\"widget\">\n <ch-theme model={CSS_BUNDLES}></ch-theme>\n <section class=\"section\">\n <header class=\"header\">\n <img\n class=\"plugin__icon\"\n src={this.data.iconUrl || EXTENSION_ICON_IMG}\n alt=\"plugin extension icon\"\n />\n <div class=\"plugin__details\">\n {titleHasLink ? (\n <h2 class=\"heading-5\">\n <a\n href={titleLinkDataUrl}\n onClick={this.#openLinkHandler(titleLinkDataUrl)}\n class=\"text-underline\"\n >\n {titleText}\n </a>\n </h2>\n ) : (\n <h2 class=\"heading-5\">{titleText}</h2>\n )}\n\n {publisherHasLink ? (\n <a\n href={publisherDataUrl}\n onClick={this.#openLinkHandler(publisherDataUrl)}\n class=\"text-underline plugin__publisher tiny-semi-bold-l\"\n >\n <ch-image src={USER_ICON} class=\"icon-md\"></ch-image>\n {publisherText}\n </a>\n ) : (\n <p class=\"plugin__publisher tiny-semi-bold-l\">\n <ch-image src={USER_ICON} class=\"icon-md\"></ch-image>\n {publisherText}\n </p>\n )}\n\n <p class=\"plugin__description\">{this.data.description}</p>\n <div class=\"buttons-spacer plugin__actions-container\">\n {renderActionButtons ? (\n this.#renderActionButtons()\n ) : (\n // installed and no updates\n <p class=\"installed-container subtitle-semi-bold-s\">\n <ch-image\n src={CHECK_CIRCLE_ICON}\n class=\"icon-md\"\n ></ch-image>\n {this.#componentLocale.actions.installed}\n </p>\n )}\n {this.data.installed && this.#renderUninstallButton()}\n </div>\n </div>\n </header>\n <div class=\"main\">\n {this.docsTabModel.length > 0 && (\n <ch-tab-render\n class=\"tab docsTab scrollable\"\n tabListPosition=\"block-start\"\n overflow=\"auto\"\n contain=\"size\"\n model={this.docsTabModel}\n onSelectedItemChange={this.#tabSelectionChangedHandler}\n selectedId={this.selectedTabId}\n >\n {this.#renderDocSectionsSlots()}\n </ch-tab-render>\n )}\n </div>\n <div class=\"aside spacing-body scrollable\">\n {this.#renderAsideContent()}\n </div>\n </section>\n {/* <slot></slot> */}\n </Host>\n );\n }\n}\n\n// plugin-details.types.ts\n\nexport type LinkData = {\n text: string;\n url: string;\n};\n\nexport type PluginFieldData = {\n name?: string;\n value: string | LinkData;\n};\n\nexport type PluginInfoCategoryData = {\n name: string;\n fields: PluginFieldData[];\n displayAsTags: boolean;\n};\n\nexport type DocSectionData = {\n name: string;\n content: string;\n};\n\nexport type PluginDetailsData = {\n id: string;\n name: string | LinkData;\n publisher: string | LinkData;\n installed: boolean;\n updateVersion?: string;\n versions: string[];\n iconUrl: string;\n description: string;\n docSections: DocSectionData[];\n infoCategories: PluginInfoCategoryData[];\n};\n"]}
@@ -0,0 +1,10 @@
1
+ <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <g clip-path="url(#clip0_6_16126)">
3
+ <path d="M10.5 4.5C10.78 4.5 11 4.72 11 5V7H17V13H19C19.28 13 19.5 13.22 19.5 13.5C19.5 13.78 19.28 14 19 14H17V20H14.88C14.2 18.25 12.49 17 10.5 17C8.51 17 6.8 18.25 6.12 20H4V17.88C5.75 17.2 7 15.49 7 13.5C7 11.51 5.76 9.8 4.01 9.12L4 7H10V5C10 4.72 10.22 4.5 10.5 4.5ZM10.5 2.5C9.12 2.5 8 3.62 8 5H4C2.9 5 2.01 5.9 2.01 7V10.8H2.3C3.79 10.8 5 12.01 5 13.5C5 14.99 3.79 16.2 2.3 16.2H2V20C2 21.1 2.9 22 4 22H7.8V21.7C7.8 20.21 9.01 19 10.5 19C11.99 19 13.2 20.21 13.2 21.7V22H17C18.1 22 19 21.1 19 20V16C20.38 16 21.5 14.88 21.5 13.5C21.5 12.12 20.38 11 19 11V7C19 5.9 18.1 5 17 5H13C13 3.62 11.88 2.5 10.5 2.5Z" fill="#394552"/>
4
+ </g>
5
+ <defs>
6
+ <clipPath id="clip0_6_16126">
7
+ <rect width="24" height="24" fill="white"/>
8
+ </clipPath>
9
+ </defs>
10
+ </svg>
@@ -0,0 +1,10 @@
1
+ {
2
+ "componentName": "Plugin Manager",
3
+ "searchInputAccesibleName": "Search Plugins in MarketPlace",
4
+ "searchInputPlaceholder": "Search Plugins in MarketPlace",
5
+ "loaderTitle": "Loading Plugins",
6
+ "loaderDescription": "Hang on please...",
7
+ "emptyStateTitle": "No Plugins Found",
8
+ "emptyStateDescription": "Try adjusting your search or check if the plugin is available under a different name.",
9
+ "logotype": "PLUGIN_NAME_PLACEHOLDER logotype"
10
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "componentName": "プラグイン管理",
3
+ "searchInputAccesibleName": "マーケットプレイスでプラグインを検索",
4
+ "searchInputPlaceholder": "マーケットプレイスでプラグインを検索",
5
+ "loaderTitle": "プラグインを読み込み中",
6
+ "loaderDescription": "しばらくお待ちください...",
7
+ "emptyStateTitle": "プラグインが見つかりません",
8
+ "emptyStateDescription": "検索条件を調整するか、別の名前でプラグインが利用可能かどうか確認してください。",
9
+ "logotype": "PLUGIN_NAME_PLACEHOLDER ロゴタイプ"
10
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "componentName": "Plugin Manager",
3
+ "searchInputAccesibleName": "Search Plugins in MarketPlace",
4
+ "searchInputPlaceholder": "Search Plugins in MarketPlace",
5
+ "loaderTitle": "Loading Plugins",
6
+ "loaderDescription": "Hang on please...",
7
+ "emptyStateTitle": "No Plugins Found",
8
+ "emptyStateDescription": "Try adjusting your search or check if the plugin is available under a different name.",
9
+ "logotype": "PLUGIN_NAME_PLACEHOLDER logotype"
10
+ }
@@ -0,0 +1,106 @@
1
+ /*Gx Ide*/
2
+ /*@container queries*/
3
+ /* hiChar styles
4
+ Found on /common/helpers.tsx hiChar function is used to add a span/class to every character that matches a search value. It is used to help the user see why the filter results are filtered. The span/class on the characters are useless without proper styling.
5
+ */
6
+ :host {
7
+ display: grid;
8
+ block-size: 100%;
9
+ position: relative;
10
+ }
11
+
12
+ .outer-container {
13
+ grid-template-rows: max-content 1fr;
14
+ }
15
+
16
+ .inner-container {
17
+ position: relative;
18
+ }
19
+
20
+ .list-box::part(item) {
21
+ width: 100%;
22
+ min-width: 100%;
23
+ }
24
+
25
+ .list-box::part(item__action) {
26
+ gap: 4px;
27
+ }
28
+
29
+ .list-box::part(item__caption) {
30
+ font-weight: 600;
31
+ }
32
+
33
+ .list-box::part(custom-container) {
34
+ display: flex;
35
+ flex-direction: column;
36
+ gap: 4px;
37
+ width: 100%;
38
+ }
39
+
40
+ .list-box::part(custom-image) {
41
+ block-size: 32px;
42
+ inline-size: 32px;
43
+ margin-inline-end: 12px;
44
+ }
45
+
46
+ .list-box::part(custom-description) {
47
+ font-size: 12px;
48
+ margin: 0;
49
+ opacity: 0.8;
50
+ line-height: 1.4;
51
+ margin-inline-end: 8px;
52
+ overflow: hidden;
53
+ white-space: nowrap;
54
+ text-overflow: ellipsis;
55
+ }
56
+
57
+ .list-box::part(item__block-end start) {
58
+ width: 100%;
59
+ min-width: 100%;
60
+ }
61
+
62
+ .list-box::part(custom-brand) {
63
+ font-weight: 600;
64
+ display: flex;
65
+ gap: 4px;
66
+ align-items: center;
67
+ }
68
+
69
+ .list-box::part(custom-brand-icon) {
70
+ --icon-path: var(--icon__system_user_neutral--enabled);
71
+ display: inline-block;
72
+ background-image: var(--icon-path);
73
+ background-size: contain;
74
+ background-repeat: no-repeat;
75
+ background-position: center center;
76
+ block-size: 16px;
77
+ inline-size: 16px;
78
+ }
79
+
80
+ .list-box::part(custom-button) {
81
+ --control__border-color: var(--button-background-color);
82
+ --button-color: var(--mer-text__primary);
83
+ --button-color--enabled: var(--mer-text__on-primary);
84
+ --button-color--active: var(--mer-text__on-primary--active);
85
+ display: inline-grid;
86
+ grid-auto-flow: column;
87
+ grid-auto-columns: max-content;
88
+ justify-content: center;
89
+ padding-block: var(--control__padding-block);
90
+ padding-inline: var(--control__padding-inline);
91
+ box-sizing: border-box;
92
+ background-color: var(--button-background-color);
93
+ color: var(--button-color);
94
+ font-weight: 600;
95
+ margin-block-end: auto;
96
+ margin-block-start: auto;
97
+ text-transform: capitalize;
98
+ }
99
+
100
+ .list-box::part(custom-button):hover {
101
+ --button-color: var(--mer-text__primary--hover);
102
+ }
103
+
104
+ .list-box::part(custom-button):active {
105
+ --button-color: var(--mer-text__primary--active);
106
+ }