@genexus/genexus-ide-ui 1.1.53 → 1.1.55
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.
- package/dist/cjs/genexus-ide-ui.cjs.js +1 -1
- package/dist/cjs/gx-ide-about.cjs.entry.js +6 -3
- package/dist/cjs/gx-ide-about.cjs.entry.js.map +1 -1
- package/dist/cjs/gx-ide-select-kb-items.cjs.entry.js +2 -4
- package/dist/cjs/gx-ide-select-kb-items.cjs.entry.js.map +1 -1
- package/dist/cjs/gx-ide-splash.cjs.entry.js +3 -2
- package/dist/cjs/gx-ide-splash.cjs.entry.js.map +1 -1
- package/dist/cjs/gx-ide-team-dev-history.cjs.entry.js +20 -6
- package/dist/cjs/gx-ide-team-dev-history.cjs.entry.js.map +1 -1
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/collection/components/about/about.css +6 -0
- package/dist/collection/components/about/about.js +22 -2
- package/dist/collection/components/about/about.js.map +1 -1
- package/dist/collection/components/select-kb-items/select-kb-items.js +2 -4
- package/dist/collection/components/select-kb-items/select-kb-items.js.map +1 -1
- package/dist/collection/components/splash/splash.css +4 -0
- package/dist/collection/components/splash/splash.js +19 -1
- package/dist/collection/components/splash/splash.js.map +1 -1
- package/dist/collection/components/team-dev/history/history.js +21 -8
- package/dist/collection/components/team-dev/history/history.js.map +1 -1
- package/dist/components/gx-ide-about.js +7 -3
- package/dist/components/gx-ide-about.js.map +1 -1
- package/dist/components/gx-ide-splash.js +4 -2
- package/dist/components/gx-ide-splash.js.map +1 -1
- package/dist/components/gx-ide-team-dev-history.js +20 -6
- package/dist/components/gx-ide-team-dev-history.js.map +1 -1
- package/dist/components/select-kb-items.js +2 -4
- package/dist/components/select-kb-items.js.map +1 -1
- package/dist/esm/genexus-ide-ui.js +1 -1
- package/dist/esm/gx-ide-about.entry.js +6 -3
- package/dist/esm/gx-ide-about.entry.js.map +1 -1
- package/dist/esm/gx-ide-select-kb-items.entry.js +2 -4
- package/dist/esm/gx-ide-select-kb-items.entry.js.map +1 -1
- package/dist/esm/gx-ide-splash.entry.js +3 -2
- package/dist/esm/gx-ide-splash.entry.js.map +1 -1
- package/dist/esm/gx-ide-team-dev-history.entry.js +20 -6
- package/dist/esm/gx-ide-team-dev-history.entry.js.map +1 -1
- package/dist/esm/loader.js +1 -1
- package/dist/genexus-ide-ui/genexus-ide-ui.esm.js +1 -1
- package/dist/genexus-ide-ui/genexus-ide-ui.esm.js.map +1 -1
- package/dist/genexus-ide-ui/{p-50fad6eb.entry.js → p-410a35da.entry.js} +6 -3
- package/dist/genexus-ide-ui/p-410a35da.entry.js.map +1 -0
- package/dist/genexus-ide-ui/{p-57ed2623.entry.js → p-4f88fecd.entry.js} +21 -10
- package/dist/genexus-ide-ui/p-4f88fecd.entry.js.map +1 -0
- package/dist/genexus-ide-ui/{p-04308eaa.entry.js → p-5df733ed.entry.js} +23 -17
- package/dist/genexus-ide-ui/p-5df733ed.entry.js.map +1 -0
- package/dist/genexus-ide-ui/{p-46147e3c.entry.js → p-e1d0adf6.entry.js} +3 -5
- package/dist/genexus-ide-ui/p-e1d0adf6.entry.js.map +1 -0
- package/dist/types/components/about/about.d.ts +4 -0
- package/dist/types/components/splash/splash.d.ts +4 -0
- package/dist/types/components.d.ts +16 -0
- package/package.json +1 -1
- package/dist/genexus-ide-ui/p-04308eaa.entry.js.map +0 -1
- package/dist/genexus-ide-ui/p-46147e3c.entry.js.map +0 -1
- package/dist/genexus-ide-ui/p-50fad6eb.entry.js.map +0 -1
- package/dist/genexus-ide-ui/p-57ed2623.entry.js.map +0 -1
|
@@ -95,9 +95,17 @@ const $ = class {
|
|
|
95
95
|
user: h(this, y, "f").value ? h(this, y, "f").value : "",
|
|
96
96
|
type: h(this, w, "f").value === "all" ? "" : h(this, w, "f").value
|
|
97
97
|
};
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
98
|
+
try {
|
|
99
|
+
this.objects = await this.loadCallback(a, t, i);
|
|
100
|
+
await h(this, M, "f").call(this, (e = this.objects[0]) === null || e === void 0 ? void 0 : e.id);
|
|
101
|
+
} catch (t) {
|
|
102
|
+
this.versions = [];
|
|
103
|
+
this.objects = [];
|
|
104
|
+
this.historyDetail = null;
|
|
105
|
+
this.selectedRevisionId = null;
|
|
106
|
+
} finally {
|
|
107
|
+
this.loading = false;
|
|
108
|
+
}
|
|
101
109
|
}));
|
|
102
110
|
M.set(this, (async t => {
|
|
103
111
|
if (t) {
|
|
@@ -199,14 +207,14 @@ const $ = class {
|
|
|
199
207
|
}));
|
|
200
208
|
}));
|
|
201
209
|
T.set(this, (() => {
|
|
202
|
-
var t;
|
|
203
|
-
const
|
|
204
|
-
const
|
|
210
|
+
var t, e;
|
|
211
|
+
const a = this.historyDetail ? this.historyDetail.objects : [];
|
|
212
|
+
const s = ((e = (t = this.historyDetail) === null || t === void 0 ? void 0 : t.objects) === null || e === void 0 ? void 0 : e.length) === 0 || !this.historyDetail;
|
|
205
213
|
return i("ch-tabular-grid", {
|
|
206
214
|
class: {
|
|
207
215
|
"affected-objects-grid": true,
|
|
208
216
|
"tabular-grid": true,
|
|
209
|
-
"tabular-grid--empty":
|
|
217
|
+
"tabular-grid--empty": s
|
|
210
218
|
}
|
|
211
219
|
}, i("ch-tabular-grid-columnset", {
|
|
212
220
|
class: "tabular-grid-column-set"
|
|
@@ -236,7 +244,7 @@ const $ = class {
|
|
|
236
244
|
size: r.tabularGrid.colSize.maxContent
|
|
237
245
|
})), this.historyDetail && this.historyDetail.objects.length > 0 ? i("ch-tabular-grid-rowset", {
|
|
238
246
|
class: "tabular-grid-rowset"
|
|
239
|
-
},
|
|
247
|
+
}, a.map((t => i("ch-tabular-grid-row", {
|
|
240
248
|
class: "tabular-grid-row"
|
|
241
249
|
}, i("ch-tabular-grid-cell", {
|
|
242
250
|
class: "tabular-grid-cell"
|
|
@@ -281,7 +289,7 @@ const $ = class {
|
|
|
281
289
|
this.itemContextMenuCallback = undefined;
|
|
282
290
|
this.gridContextMenuCallback = undefined;
|
|
283
291
|
this.selectedVersionId = undefined;
|
|
284
|
-
this.versions =
|
|
292
|
+
this.versions = undefined;
|
|
285
293
|
this.loadCallback = undefined;
|
|
286
294
|
this.loadDetailCallback = undefined;
|
|
287
295
|
this.selectedVersionChangeCallback = undefined;
|
|
@@ -306,6 +314,9 @@ const $ = class {
|
|
|
306
314
|
if (t.length > 0 && this.selectedVersionId && this.isFirstLoad) {
|
|
307
315
|
await h(this, _, "f").call(this, this.selectedVersionId, false);
|
|
308
316
|
this.isFirstLoad = false;
|
|
317
|
+
} else if (t.length === 0 && this.isFirstLoad) {
|
|
318
|
+
this.loading = false;
|
|
319
|
+
this.isFirstLoad = false;
|
|
309
320
|
}
|
|
310
321
|
}
|
|
311
322
|
async componentWillLoad() {
|
|
@@ -483,4 +494,4 @@ z = new WeakMap, T = new WeakMap, E = new WeakMap, F = new WeakMap;
|
|
|
483
494
|
$.style = d;
|
|
484
495
|
|
|
485
496
|
export { $ as gx_ide_team_dev_history };
|
|
486
|
-
//# sourceMappingURL=p-
|
|
497
|
+
//# sourceMappingURL=p-4f88fecd.entry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["mapObjectTypeToComboBoxItemModel","objectTypeModel","map","objectType","value","id","caption","name","startImgSrc","icon","hasActiveNode","node","active","Array","isArray","nodes","some","hasActiveVersionInList","versionsList","historyCss","CSS_BUNDLES","FILTER_ICON_PRIMARY","getIconPath","category","colorType","FILTER_ICON","RESET_ICON","SEARCH_ICON","GxIdeTeamDevHistory","_GxIdeTeamDevHistory__componentLocale","set","this","_GxIdeTeamDevHistory_types","_GxIdeTeamDevHistory_fromEl","_GxIdeTeamDevHistory_revisionEl","_GxIdeTeamDevHistory_searchEl","_GxIdeTeamDevHistory_toEl","_GxIdeTeamDevHistory_typesEl","_GxIdeTeamDevHistory_userEl","_GxIdeTeamDevHistory_sidebarEl","_GxIdeTeamDevHistory_revisionsGridEl","_GxIdeTeamDevHistory_getObjectsFromVersion","async","versionId","isRefresh","loading","filters","search","__classPrivateFieldGet","from","Date","to","revision","user","type","objects","loadCallback","_GxIdeTeamDevHistory_getSelectedRevision","call","_a","error","versions","historyDetail","selectedRevisionId","revisionId","loadDetailCallback","title","_GxIdeTeamDevHistory_formatHistoryDetailDate","_GxIdeTeamDevHistory_registerGridContextMenuListener","addEventListener","ev","preventDefault","stopPropagation","_GxIdeTeamDevHistory_gridContextMenuCallbackHandler","gridContextMenuCallback","selection","clientX","clientY","_GxIdeTeamDevHistory_toggleFiltersHandler","filtersHidden","_GxIdeTeamDevHistory_renderCommitsGrid","tabularGridEmpty","length","h","class","onSelectionChanged","detail","rowsId","ref","el","__classPrivateFieldSet","selectRow","mainGrid","columns","settingable","size","comment","commitDate","obj","rowid","key","formatDate","stateTitle","emptyRevisionsText","isAnimated","_GxIdeTeamDevHistory_renderAffectedObjectsGrid","iterable","_b","affectedObjectsGrid","config","tabularGrid","colSize","maxContent","types","description","auto","action","renderObjectTypeWithIcon","renderObjectStateWithIcon","state","stateIconSrc","emptyHistoryDetailText","_GxIdeTeamDevHistory_renderLoader","loaderTitle","loader","show","parts","split","datePart","formattedDate","selectedVersionIdChanged","newSelectedVersionId","oldSelectedVersionId","versionsListChanged","newVersionsList","hasActiveVersion","selectedVersionId","isFirstLoad","componentWillLoad","Locale","getComponentStrings","componentDidLoad","e","sidebarExpanded","render","Host","model","expanded","expandButtonCollapseAccessibleName","sidebar","collapseAriaLabel","expandButtonExpandAccessibleName","expandAriaLabel","showExpandButton","checkboxType","itemsList","expandOnClick","selectionChanged","selectedVersionChangeCallback","itemContextMenuCallback","htmlFor","part","searchFilter","filterAriaLabel","onClick","src","reloadAriaLabel","inert","hidden","accessibleName","multiline","autoGrow","readonly"],"sources":["src/components/team-dev/history/helpers.ts","src/components/team-dev/history/history.scss?tag=gx-ide-team-dev-history&encapsulation=shadow","src/components/team-dev/history/history.tsx"],"sourcesContent":["import { ComboBoxModel } from \"@genexus/chameleon-controls-library\";\nimport { ObjectType, GxOption } from \"../../../common/types\";\nimport { ComboBoxItemModel } from \"@genexus/chameleon-controls-library/dist/types/components/combo-box/types\";\nimport { ItemNode } from \"../../select-kb-items/select-kb-items\";\n\nexport const mapObjectTypeToComboBoxItemModel = (\n objectTypeModel: ObjectType[]\n): ComboBoxItemModel[] =>\n objectTypeModel.map(objectType => ({\n value: objectType.id,\n caption: objectType.name,\n startImgSrc: objectType.icon\n }));\n\nexport const mapCategoryToComboBoxItemModel = (\n categoryModel: GxOption[]\n): ComboBoxModel =>\n categoryModel.map(category => ({\n value: category.id,\n caption: category.label\n }));\n\nconst hasActiveNode = (node: any): boolean => {\n if (node.active) {\n return true;\n }\n if (Array.isArray(node.nodes)) {\n return node.nodes.some(hasActiveNode);\n }\n return false;\n};\n\nexport const hasActiveVersionInList = (versionsList: ItemNode[]): boolean => {\n return versionsList.some(hasActiveNode);\n};\n","@import \"../../../../node_modules/@genexus/mercury/dist/assets/scss/helpers.scss\";\n@import \"../common/styles.scss\";\n\n// TODO: this should be a class on Mercury.\n// Not sure if applying \".field-group\" is the right thing to do.\n$commonRowGap: var(--mer-spacing--sm);\n\n:host {\n display: grid;\n grid-template-columns: max-content 1fr;\n block-size: 100%;\n overflow: auto;\n}\n\n.sidebar {\n background-color: transparent !important; // TODO: Apply elevation classes on Mercury.\n border-inline-end: var(--section-common-border);\n}\n\n.sidebar::part(expand-button) {\n border-radius: var(--control__border-radius);\n}\n\ngx-ide-select-kb-items {\n --search-input-max-inline-size: 300px;\n opacity: 0;\n transition: opacity var(--mer-timing--fast);\n}\ngx-ide-select-kb-items.sidebar-expanded {\n opacity: 1;\n}\n\nch-tabular-grid.tabular-grid--empty::part(main) {\n // WA to avoid scrollbar flickering when displaying the empty-state message\n overflow: hidden;\n}\n\nch-tabular-grid-rowset-empty {\n position: relative; // makes this the bounder element for the loader\n}\n\n.main {\n display: grid;\n grid-template-rows: max-content 1fr;\n grid-row-gap: $commonRowGap;\n overflow: auto;\n}\n.main__header {\n display: grid;\n}\n.main__content {\n position: relative;\n overflow: auto;\n display: grid;\n grid-template-rows: 1fr max-content 2fr;\n grid-row-gap: $commonRowGap;\n}\n\n.tabular-grid {\n overflow: auto;\n}\n\n/*SECOND GRID*/\n.search-filter {\n display: grid;\n grid-template-columns: 1fr max-content max-content;\n gap: var(--gx-ide-grid-column-gap);\n}\n\n.action-buttons {\n justify-self: flex-end;\n}\n\n.filters-grid {\n display: grid;\n grid-template-columns: repeat(6, 1fr);\n grid-template-areas:\n \"from from to to type type\"\n \"user user user revision revision revision\";\n grid-gap: var(--gx-ide-grid-column-gap);\n padding-block-start: $commonRowGap;\n}\n\n.filters-container {\n display: grid;\n grid-template-rows: 0fr;\n transition: grid-template-rows var(--mer-timing--fast);\n}\n\n.filters-container-visible {\n grid-template-rows: 1fr;\n}\n\n.filters-container > div {\n overflow: hidden;\n}\n\n.field-from {\n grid-area: from;\n}\n\n.field-to {\n grid-area: to;\n}\n.field-type {\n grid-area: type;\n}\n.field-user {\n grid-area: user;\n}\n.field-revision {\n grid-area: revision;\n}\n\n// commits grid \"comment\" column\n@include tabular-grid-cell-layout(\n $tabular-grid-selector: \".commits-grid\",\n $tabular-grid-cell-node-type: \"text\",\n $tabular-grid-cell-min-inline-size: 200px,\n $tabular-grid-affected-columns-nth-list: (\n 2\n )\n);\n\n// affected objects grid \"description\" column\n@include tabular-grid-cell-layout(\n $tabular-grid-selector: \".affected-objects-grid\",\n $tabular-grid-cell-node-type: \"text\",\n $tabular-grid-cell-min-inline-size: 200px,\n $tabular-grid-affected-columns-nth-list: (\n 5\n )\n);\n","/* STENCIL IMPORTS */\nimport { Component, Element, h, Host, Prop, State, Watch } from \"@stencil/core\";\n/* OTHER LIBRARIES IMPORTS */\n/* CUSTOM IMPORTS */\nimport { ComboBoxItemModel } from \"@genexus/chameleon-controls-library/dist/types/components/combo-box/types\";\nimport { getIconPath, MercuryBundles } from \"@genexus/mercury\";\nimport { config } from \"../../../common/config\";\nimport { formatDate } from \"../../../common/helpers\";\nimport { Locale } from \"../../../common/locale\";\nimport { ContextMenuInfo } from \"../../../components\";\nimport { ItemNode } from \"../../select-kb-items/select-kb-items\";\nimport {\n hasActiveVersionInList,\n mapObjectTypeToComboBoxItemModel\n} from \"./helpers\";\nimport {\n renderObjectStateWithIcon,\n renderObjectTypeWithIcon\n} from \"../common/utilities\";\nimport { ObjectState } from \"../version-control/common/types\";\n\nconst CSS_BUNDLES: MercuryBundles = [\n \"resets/box-sizing\",\n \"utils/form--full\",\n \"utils/layout\",\n \"utils/spacing\",\n \"utils/typography\",\n \"chameleon/scrollbar\",\n \"components/tabular-grid\",\n \"components/accordion\",\n \"components/sidebar\"\n];\n\nconst FILTER_ICON_PRIMARY = getIconPath({\n category: \"window-tools\",\n name: \"filter\",\n colorType: \"primary\"\n});\n\nconst FILTER_ICON = getIconPath({\n category: \"window-tools\",\n name: \"filter\",\n colorType: \"on-surface\"\n});\n\nconst RESET_ICON = getIconPath({\n category: \"gemini-tools\",\n name: \"reset\",\n colorType: \"primary\"\n});\n\nconst SEARCH_ICON = getIconPath({\n category: \"gemini-tools\",\n name: \"search\",\n colorType: \"on-surface\"\n});\n\n@Component({\n tag: \"gx-ide-team-dev-history\",\n styleUrl: \"history.scss\",\n shadow: true,\n assetsDirs: [\"gx-ide-assets/team-dev-history\"]\n})\nexport class GxIdeTeamDevHistory {\n #_componentLocale: any;\n\n #types: ComboBoxItemModel[] = [];\n\n @Element() el: HTMLGxIdeTeamDevHistoryElement;\n\n #fromEl?: HTMLChEditElement;\n #revisionEl?: HTMLChEditElement;\n #searchEl: HTMLChEditElement;\n #toEl?: HTMLChEditElement;\n #typesEl?: HTMLChComboBoxRenderElement;\n #userEl?: HTMLChEditElement;\n #sidebarEl: HTMLChSidebarElement;\n #revisionsGridEl: HTMLChTabularGridElement;\n\n @State() historyDetail: RevisionDetailData;\n\n /**\n * The files rendered in the table\n */\n @State() objects: RevisionData[] = [];\n\n /**\n * Used to call getObjectsFromVersion from the versionsChanged method only once after receiving the versions for the first time.\n */\n @State() isFirstLoad: boolean = true;\n\n /**\n * Used to hide the select-kb-items when collapsed\n */\n @State() sidebarExpanded: boolean = true;\n\n /**\n * Used to show or hide the filters section\n */\n @State() filtersHidden = true;\n\n /**\n * To show a loader when the component is loading\n */\n @State() loading: boolean = true;\n\n /**\n * The Id of the selected revision in the revisions grid\n */\n @State() selectedRevisionId: string;\n\n /**\n * Used to customize the select-kb-items \"header\" part grid layout\n */\n @State() hasActiveVersion: boolean = false; // TODO:\n\n /**\n * Possible values of type filter\n */\n @Prop() readonly types: ObjectType[];\n\n /**\n * Callback emitted when the user right click on an item\n */\n @Prop() readonly itemContextMenuCallback: (\n info: ContextMenuInfo\n ) => Promise<void>;\n\n /**\n * Callback invoked when user right-clicks on the grid\n */\n @Prop() readonly gridContextMenuCallback: (\n info: ContextMenuInfo\n ) => Promise<void>;\n\n /**\n * The Id of the selected version in the select-kb-items component\n */\n @Prop({ mutable: true }) selectedVersionId: string;\n @Watch(\"selectedVersionId\")\n async selectedVersionIdChanged(\n newSelectedVersionId: string,\n oldSelectedVersionId?: string\n ) {\n if (newSelectedVersionId === oldSelectedVersionId) {\n return;\n }\n\n // Reset filters\n this.#searchEl.value = null;\n this.#fromEl.value = null;\n this.#toEl.value = null;\n this.#revisionEl.value = null;\n this.#userEl.value = null;\n this.#typesEl.value = this.#types[0]?.value;\n\n await this.#getObjectsFromVersion(newSelectedVersionId, false);\n }\n\n /**\n * List of versions to show in the versions tree\n */\n @Prop({ mutable: true }) versions: ItemNode[];\n @Watch(\"versions\")\n async versionsListChanged(newVersionsList: ItemNode[]) {\n this.versions = newVersionsList;\n this.hasActiveVersion = hasActiveVersionInList(newVersionsList);\n\n if (\n newVersionsList.length > 0 &&\n this.selectedVersionId &&\n this.isFirstLoad\n ) {\n await this.#getObjectsFromVersion(this.selectedVersionId, false);\n this.isFirstLoad = false;\n } else if (newVersionsList.length === 0 && this.isFirstLoad) {\n this.loading = false;\n this.isFirstLoad = false;\n }\n }\n\n /**\n * Callback invoked when is necessary to reload the history info. Receive the filters as parameters and only returns the info corresponding to the master grid.\n\n */\n @Prop() readonly loadCallback: LoadCallback;\n\n /**\n * Callback invoked to obtain detailed info from a revision. As parameter receive internal revision id\n */\n @Prop() readonly loadDetailCallback: LoadDetailCallback;\n\n /**\n * Callback invoked when the selected version changes. As parameter receive the selected version id\n */\n @Prop() readonly selectedVersionChangeCallback: SelectedVersionChangeCallback;\n\n async componentWillLoad() {\n this.#_componentLocale = await Locale.getComponentStrings(this.el);\n this.#types = mapObjectTypeToComboBoxItemModel(this.types);\n }\n\n async componentDidLoad() {\n this.#sidebarEl.addEventListener(\n \"expandedChange\",\n (e: CustomEvent<boolean>) => {\n this.sidebarExpanded = e.detail;\n }\n );\n }\n\n #getObjectsFromVersion = async (\n versionId: string,\n isRefresh: boolean\n ): Promise<void> => {\n this.loading = true;\n\n const filters: FiltersData = {\n search: this.#searchEl.value ? this.#searchEl.value : \"\",\n from: this.#fromEl.value ? new Date(this.#fromEl.value) : null,\n to: this.#toEl.value ? new Date(this.#toEl.value) : null,\n revision: this.#revisionEl.value ? this.#revisionEl.value : \"\",\n user: this.#userEl.value ? this.#userEl.value : \"\",\n type: this.#typesEl.value === \"all\" ? \"\" : this.#typesEl.value\n };\n try {\n this.objects = await this.loadCallback(filters, versionId, isRefresh);\n await this.#getSelectedRevision(this.objects[0]?.id);\n } catch (error) {\n this.versions = [];\n this.objects = [];\n this.historyDetail = null;\n this.selectedRevisionId = null;\n } finally {\n this.loading = false;\n }\n };\n\n #getSelectedRevision = async (revisionId: string) => {\n if (revisionId) {\n this.historyDetail = await this.loadDetailCallback(revisionId);\n this.historyDetail.title = this.#formatHistoryDetailDate(\n this.historyDetail.title\n );\n this.selectedRevisionId = revisionId;\n } else {\n this.historyDetail = null;\n }\n };\n\n #registerGridContextMenuListener = (): void => {\n if (this.#revisionsGridEl) {\n this.#revisionsGridEl.addEventListener(\n \"contextmenu\",\n (ev: MouseEvent): void => {\n ev.preventDefault();\n ev.stopPropagation();\n this.#gridContextMenuCallbackHandler(ev);\n }\n );\n }\n };\n\n #gridContextMenuCallbackHandler = async (ev: MouseEvent): Promise<void> => {\n this.gridContextMenuCallback({\n selection: [this.selectedRevisionId],\n clientX: ev.clientX,\n clientY: ev.clientY\n });\n };\n\n #toggleFiltersHandler = () => {\n this.filtersHidden = !this.filtersHidden;\n };\n\n #renderCommitsGrid = (): Element => {\n const tabularGridEmpty = this.objects?.length === 0 || !this.objects;\n return (\n <ch-tabular-grid\n class={{\n \"commits-grid\": true,\n \"tabular-grid\": true,\n \"tabular-grid--empty\": tabularGridEmpty\n }}\n onSelectionChanged={(ev: any) => {\n this.objects.length > 0 &&\n this.#getSelectedRevision(ev.detail.rowsId[0]);\n }}\n ref={(el: HTMLChTabularGridElement) => {\n if (el && this.#revisionsGridEl !== el) {\n this.#revisionsGridEl = el as HTMLChTabularGridElement;\n\n this.#registerGridContextMenuListener();\n\n if (this.objects.length > 0) {\n this.#revisionsGridEl.selectRow(this.objects[0]?.id, true);\n }\n }\n }}\n >\n <ch-tabular-grid-columnset class=\"tabular-grid-column-set\">\n <ch-tabular-grid-column\n column-name={this.#_componentLocale.mainGrid.columns.id}\n column-name-position=\"text\"\n class=\"tabular-grid-column\"\n settingable={false}\n size=\"max-content\"\n ></ch-tabular-grid-column>\n <ch-tabular-grid-column\n column-name={this.#_componentLocale.mainGrid.columns.comment}\n column-name-position=\"text\"\n class=\"tabular-grid-column\"\n settingable={false}\n size=\"1fr\"\n ></ch-tabular-grid-column>\n <ch-tabular-grid-column\n column-name={this.#_componentLocale.mainGrid.columns.user}\n column-name-position=\"text\"\n class=\"tabular-grid-column\"\n settingable={false}\n size=\"max-content\"\n ></ch-tabular-grid-column>\n <ch-tabular-grid-column\n column-name={this.#_componentLocale.mainGrid.columns.commitDate}\n column-name-position=\"text\"\n class=\"tabular-grid-column\"\n settingable={false}\n size=\"max-content\"\n ></ch-tabular-grid-column>\n </ch-tabular-grid-columnset>\n {this.objects.length > 0 ? (\n <ch-tabular-grid-rowset class=\"tabular-grid-rowset\">\n {this.objects.map((obj: RevisionData) => (\n <ch-tabular-grid-row\n rowid={obj.id}\n key={obj.id}\n class=\"tabular-grid-row\"\n >\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {obj.id}\n </ch-tabular-grid-cell>\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {obj.comment}\n </ch-tabular-grid-cell>\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {obj.user}\n </ch-tabular-grid-cell>\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {`${formatDate(obj.commitDate, \"date-time\")}`}\n </ch-tabular-grid-cell>\n </ch-tabular-grid-row>\n ))}\n </ch-tabular-grid-rowset>\n ) : (\n <ch-tabular-grid-rowset class=\"tabular-grid-rowset\">\n <ch-tabular-grid-rowset-empty>\n <gx-ide-empty-state\n stateTitle={this.#_componentLocale.emptyRevisionsText}\n isAnimated={true}\n ></gx-ide-empty-state>\n </ch-tabular-grid-rowset-empty>\n </ch-tabular-grid-rowset>\n )}\n\n <ch-tabular-grid-row class=\"tabular-grid-row\"></ch-tabular-grid-row>\n </ch-tabular-grid>\n );\n };\n\n #renderAffectedObjectsGrid = (): Element => {\n const iterable = this.historyDetail ? this.historyDetail.objects : [];\n const tabularGridEmpty =\n this.historyDetail?.objects?.length === 0 || !this.historyDetail;\n return (\n <ch-tabular-grid\n class={{\n \"affected-objects-grid\": true,\n \"tabular-grid\": true,\n \"tabular-grid--empty\": tabularGridEmpty\n }}\n >\n <ch-tabular-grid-columnset class=\"tabular-grid-column-set\">\n <ch-tabular-grid-column\n column-name={\n this.#_componentLocale.affectedObjectsGrid.columns.name\n }\n column-name-position=\"text\"\n class=\"tabular-grid-column\"\n settingable={false}\n size={config.tabularGrid.colSize.maxContent}\n ></ch-tabular-grid-column>\n <ch-tabular-grid-column\n column-name={\n this.#_componentLocale.affectedObjectsGrid.columns.types\n }\n column-name-position=\"text\"\n class=\"tabular-grid-column\"\n settingable={false}\n size={config.tabularGrid.colSize.maxContent}\n ></ch-tabular-grid-column>\n <ch-tabular-grid-column\n column-name={\n this.#_componentLocale.affectedObjectsGrid.columns.description\n }\n column-name-position=\"text\"\n class=\"tabular-grid-column\"\n settingable={false}\n size={config.tabularGrid.colSize.auto}\n ></ch-tabular-grid-column>\n <ch-tabular-grid-column\n column-name={\n this.#_componentLocale.affectedObjectsGrid.columns.action\n }\n column-name-position=\"text\"\n class=\"tabular-grid-column\"\n settingable={false}\n size={config.tabularGrid.colSize.maxContent}\n ></ch-tabular-grid-column>\n </ch-tabular-grid-columnset>\n {this.historyDetail && this.historyDetail.objects.length > 0 ? (\n <ch-tabular-grid-rowset class=\"tabular-grid-rowset\">\n {iterable.map((obj: ObjectData) => (\n <ch-tabular-grid-row class=\"tabular-grid-row\">\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {obj.name}\n </ch-tabular-grid-cell>\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {renderObjectTypeWithIcon(obj.type)}\n </ch-tabular-grid-cell>\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {obj.description}\n </ch-tabular-grid-cell>\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {renderObjectStateWithIcon(obj.state)}\n </ch-tabular-grid-cell>\n </ch-tabular-grid-row>\n ))}\n </ch-tabular-grid-rowset>\n ) : (\n <ch-tabular-grid-rowset class=\"tabular-grid-rowset\">\n <ch-tabular-grid-rowset-empty>\n <gx-ide-empty-state\n stateIconSrc={FILTER_ICON}\n stateTitle={this.#_componentLocale.emptyHistoryDetailText}\n isAnimated={true}\n ></gx-ide-empty-state>\n </ch-tabular-grid-rowset-empty>\n </ch-tabular-grid-rowset>\n )}\n\n <ch-tabular-grid-row class=\"tabular-grid-row\"></ch-tabular-grid-row>\n </ch-tabular-grid>\n );\n };\n\n #renderLoader = (): Element => {\n return (\n this.loading && (\n <div class=\"main__content scrollable\">\n <gx-ide-loader\n loaderTitle={this.#_componentLocale.loader.title}\n show\n description={this.#_componentLocale.loader.description}\n ></gx-ide-loader>\n </div>\n )\n );\n };\n\n #formatHistoryDetailDate = (title: string): string => {\n const parts = title.split(\" - \");\n const datePart = new Date(parts[1]);\n const formattedDate = formatDate(datePart, \"date-time\");\n return `${parts[0]} - ${formattedDate} - ${parts[2]}`;\n };\n\n render() {\n return (\n <Host class=\"widget\">\n <ch-theme model={CSS_BUNDLES}></ch-theme>\n\n <ch-sidebar\n ref={(el: HTMLChSidebarElement) =>\n (this.#sidebarEl = el as HTMLChSidebarElement)\n }\n class=\"sidebar\"\n expanded={this.sidebarExpanded}\n expandButtonCollapseAccessibleName={\n this.#_componentLocale.sidebar.collapseAriaLabel\n }\n expandButtonExpandAccessibleName={\n this.#_componentLocale.sidebar.expandAriaLabel\n }\n showExpandButton\n >\n <gx-ide-select-kb-items\n class={{\n \"sidebar-expanded\": this.sidebarExpanded,\n \"has-active-version\": this.hasActiveVersion\n }}\n checkboxType=\"none\"\n itemsList={this.versions}\n expandOnClick={false}\n selectionChanged={this.selectedVersionChangeCallback}\n itemContextMenuCallback={this.itemContextMenuCallback}\n ></gx-ide-select-kb-items>\n </ch-sidebar>\n\n <main class=\"main spacing-body-block-start spacing-body-inline\">\n <div class=\"main__header\">\n <div class=\"search-filter\">\n <div class=\"field field-inline\">\n <label class=\"label\" htmlFor=\"search\">\n {this.#_componentLocale.filters.search}\n </label>\n <ch-edit\n value=\"\"\n class=\"input\"\n startImgSrc={SEARCH_ICON}\n part=\"search\"\n id=\"search\"\n ref={(el: HTMLChEditElement) =>\n (this.#searchEl = el as HTMLChEditElement)\n }\n ></ch-edit>\n </div>\n\n <button\n id=\"filter-toggle-button\"\n class=\"button-teritary button-icon-only\"\n aria-label={this.#_componentLocale.searchFilter.filterAriaLabel}\n aria-expanded={this.filtersHidden ? \"false\" : \"true\"}\n aria-controls=\"filters-container\"\n onClick={() => this.#toggleFiltersHandler()}\n >\n <ch-image class=\"icon-md\" src={FILTER_ICON_PRIMARY}></ch-image>\n </button>\n\n <button\n class=\"button-teritary button-icon-only\"\n aria-label={this.#_componentLocale.searchFilter.reloadAriaLabel}\n onClick={() =>\n this.#getObjectsFromVersion(this.selectedVersionId, true)\n }\n part={this.#_componentLocale.searchFilter.reloadAriaLabel}\n >\n <ch-image class=\"icon-md\" src={RESET_ICON}></ch-image>\n </button>\n </div>\n\n <div\n id=\"filters-container\"\n aria-labelledby=\"filter-toggle-button\"\n class={{\n \"filters-container-visible\": !this.filtersHidden,\n \"filters-container\": true\n }}\n inert={this.filtersHidden}\n hidden={this.filtersHidden}\n >\n <div>\n <div class=\"filters-grid\">\n <div class=\"field field-block field-from\">\n <label class=\"label\" htmlFor=\"from\">\n {this.#_componentLocale.filters.from}\n </label>\n <ch-edit\n value=\"\"\n class=\"input\"\n type=\"date\"\n part=\"from\"\n id=\"from\"\n ref={(el: HTMLChEditElement) =>\n (this.#fromEl = el as HTMLChEditElement)\n }\n ></ch-edit>\n </div>\n\n <div class=\"field field-block field-to\">\n <label class=\"label\" htmlFor=\"to\">\n {this.#_componentLocale.filters.to}\n </label>\n <ch-edit\n value=\"\"\n class=\"input\"\n type=\"date\"\n id=\"to\"\n ref={(el: HTMLChEditElement) =>\n (this.#toEl = el as HTMLChEditElement)\n }\n ></ch-edit>\n </div>\n\n <div class=\"field field-block field-type\">\n <label class=\"label\" htmlFor=\"type\">\n {this.#_componentLocale.filters.type}\n </label>\n\n <ch-combo-box-render\n accessibleName=\"types\"\n class=\"combo-box\"\n part=\"type\"\n model={this.#types}\n value={this.#types[0]?.value}\n ref={(el: HTMLChComboBoxRenderElement) =>\n (this.#typesEl = el as HTMLChComboBoxRenderElement)\n }\n ></ch-combo-box-render>\n </div>\n\n <div class=\"field field-block field-user\">\n <label class=\"label\" htmlFor=\"user\">\n {this.#_componentLocale.filters.user}\n </label>\n\n <ch-edit\n value=\"\"\n part=\"user\"\n class=\"input\"\n id=\"user\"\n ref={(el: HTMLChEditElement) =>\n (this.#userEl = el as HTMLChEditElement)\n }\n ></ch-edit>\n </div>\n\n <div class=\"field field-block field-revision\">\n <label class=\"label\" htmlFor=\"revision\">\n {this.#_componentLocale.filters.revision}\n </label>\n\n <ch-edit\n value=\"\"\n part=\"revision\"\n class=\"input\"\n id=\"revision\"\n ref={(el: HTMLChEditElement) =>\n (this.#revisionEl = el as HTMLChEditElement)\n }\n ></ch-edit>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n {this.#renderLoader()}\n\n {!this.loading && (\n <div class=\"main__content scrollable\">\n {this.#renderCommitsGrid()}\n\n <div class=\"field field-block\">\n <label class=\"label\" htmlFor=\"comment-area\">\n {this.historyDetail ? this.historyDetail.title : null}\n </label>\n <ch-edit\n class=\"input comment-text-area\"\n value={this.historyDetail ? this.historyDetail.comment : null}\n multiline\n autoGrow\n readonly={true}\n part=\"comment-area\"\n id=\"comment-area\"\n ></ch-edit>\n </div>\n\n {this.#renderAffectedObjectsGrid()}\n </div>\n )}\n </main>\n </Host>\n );\n }\n}\n\n// Types\nexport type ObjectType = {\n id: string;\n name: string;\n icon?: string;\n};\n\nexport type FiltersData = {\n search: string;\n from?: Date;\n to?: Date;\n user?: string;\n revision?: string;\n type?: string;\n};\nexport type RevisionData = {\n id: string;\n comment: string;\n user: string;\n commitDate: Date;\n};\n\nexport type RevisionDetailData = {\n title: string;\n comment: string;\n objects: ObjectData[];\n};\nexport type ObjectData = {\n typeIcon: string;\n state: ObjectState;\n name: string;\n type: ObjectType;\n description: string;\n action: string;\n};\n\nexport type LoadCallback = (\n filters: FiltersData,\n versionId: string,\n isRefresh: boolean\n) => Promise<RevisionData[]>;\n\nexport type LoadDetailCallback = (\n revision: string\n) => Promise<RevisionDetailData>;\n\nexport type SelectedVersionChangeCallback = (\n selectedVersion: string[]\n) => Promise<void>;\n"],"mappings":"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"}
|
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
import { r as e, g as t, h as i, H as
|
|
1
|
+
import { r as e, g as t, h as i, H as s, a as n } from "./p-97107ecc.js";
|
|
2
2
|
|
|
3
3
|
import { L as r } from "./p-311eedf3.js";
|
|
4
4
|
|
|
5
|
-
const o = ":host{--spacing-body-block-start:var(--mer-spacing--lg);--spacing-body-block-end:var(--mer-spacing--lg);--spacing-body-inline-start:var(--mer-spacing--md);--spacing-body-inline-end:var(--mer-spacing--md);display:grid;inline-size:100%;block-size:100%;gap:var(--mer-spacing--md);overflow:auto;grid-template-rows:max-content 1fr max-content;background-color:var(--elevation-background-color, var(--mer-surface__elevation--02));color:var(--mer-text__on-elevation);text-align:center}.section{display:contents}.main{overflow:auto;display:grid;grid-template-rows:1fr max-content;gap:var(--mer-spacing--lg)}.logo__container{display:flex;flex-direction:column;gap:var(--mer-spacing--sm);align-items:center;margin:unset}.logo__img{inline-size:28px;block-size:28px}.logotype{color:var(--mer-text__bright)}.versions__container{overflow:hidden;border:var(--mer-border__width--sm) solid var(--mer-border-color__on-elevation--01);border-radius:var(--mer-border__radius--sm);display:grid;grid-template-rows:1fr max-content;inline-size:100%}.versions__container button{justify-self:center;min-inline-size:72px}.versions__container-footer{padding:14px}.versions__list{overflow:auto;list-style:none;margin:0;padding:14px;display:flex;flex-direction:column;gap:var(--mer-spacing--xs)}.link-underlined{text-decoration:underline;color:var(--mer-text__on-elevation)}.link-underlined:hover{color:var(--mer-text__highlighted)}.link-underlined:active{color:var(--mer-text__elevation)}.links-container{display:flex;gap:var(--mer-spacing--xs)}.footer{display:flex;align-items:center;flex-direction:column;gap:var(--mer-spacing--xs);color:var(--mer-text__complementary)}";
|
|
5
|
+
const o = ":host{--spacing-body-block-start:var(--mer-spacing--lg);--spacing-body-block-end:var(--mer-spacing--lg);--spacing-body-inline-start:var(--mer-spacing--md);--spacing-body-inline-end:var(--mer-spacing--md);display:grid;inline-size:100%;block-size:100%;gap:var(--mer-spacing--md);overflow:auto;grid-template-rows:max-content 1fr max-content;background-color:var(--elevation-background-color, var(--mer-surface__elevation--02));color:var(--mer-text__on-elevation);text-align:center}.section{display:contents}.header{display:flex;flex-direction:column;gap:var(--mer-spacing--xs)}.main{overflow:auto;display:grid;grid-template-rows:1fr max-content;gap:var(--mer-spacing--lg)}.logo__container{display:flex;flex-direction:column;gap:var(--mer-spacing--sm);align-items:center;margin:unset}.logo__img{inline-size:28px;block-size:28px}.logotype{color:var(--mer-text__bright)}.versions__container{overflow:hidden;border:var(--mer-border__width--sm) solid var(--mer-border-color__on-elevation--01);border-radius:var(--mer-border__radius--sm);display:grid;grid-template-rows:1fr max-content;inline-size:100%}.versions__container button{justify-self:center;min-inline-size:72px}.versions__container-footer{padding:14px}.versions__list{overflow:auto;list-style:none;margin:0;padding:14px;display:flex;flex-direction:column;gap:var(--mer-spacing--xs)}.link-underlined{text-decoration:underline;color:var(--mer-text__on-elevation)}.link-underlined:hover{color:var(--mer-text__highlighted)}.link-underlined:active{color:var(--mer-text__elevation)}.links-container{display:flex;gap:var(--mer-spacing--xs)}.footer{display:flex;align-items:center;flex-direction:column;gap:var(--mer-spacing--xs);color:var(--mer-text__complementary)}";
|
|
6
6
|
|
|
7
|
-
var a = undefined && undefined.__classPrivateFieldGet || function(e, t, i,
|
|
8
|
-
if (i === "a" && !
|
|
9
|
-
if (typeof t === "function" ? e !== t || !
|
|
10
|
-
return i === "m" ?
|
|
7
|
+
var a = undefined && undefined.__classPrivateFieldGet || function(e, t, i, s) {
|
|
8
|
+
if (i === "a" && !s) throw new TypeError("Private accessor was defined without a getter");
|
|
9
|
+
if (typeof t === "function" ? e !== t || !s : !t.has(e)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
10
|
+
return i === "m" ? s : i === "a" ? s.call(e) : s ? s.value : t.get(e);
|
|
11
11
|
};
|
|
12
12
|
|
|
13
|
-
var l = undefined && undefined.__classPrivateFieldSet || function(e, t, i,
|
|
14
|
-
if (
|
|
15
|
-
if (
|
|
16
|
-
if (typeof t === "function" ? e !== t || !
|
|
17
|
-
return
|
|
13
|
+
var l = undefined && undefined.__classPrivateFieldSet || function(e, t, i, s, n) {
|
|
14
|
+
if (s === "m") throw new TypeError("Private method is not writable");
|
|
15
|
+
if (s === "a" && !n) throw new TypeError("Private accessor was defined without a setter");
|
|
16
|
+
if (typeof t === "function" ? e !== t || !n : !t.has(e)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
17
|
+
return s === "a" ? n.call(e, i) : n ? n.value = i : t.set(e, i), i;
|
|
18
18
|
};
|
|
19
19
|
|
|
20
20
|
var c, d, g;
|
|
@@ -31,8 +31,10 @@ const p = class {
|
|
|
31
31
|
setTimeout((() => {
|
|
32
32
|
this.copying = false;
|
|
33
33
|
}), 1e3);
|
|
34
|
-
|
|
34
|
+
// be cautions with spaces and indentaiton on the following .writeText
|
|
35
|
+
navigator.clipboard.writeText(`${this.appVersion}\n\n${a(this, c, "f").copyVersionsAdditionalText}${this.versions.map((e => `- ${e}`)).join("\n")}`);
|
|
35
36
|
}));
|
|
37
|
+
this.appVersion = undefined;
|
|
36
38
|
this.versions = [];
|
|
37
39
|
this.detailsCallback = undefined;
|
|
38
40
|
this.privacyPolicyCallback = undefined;
|
|
@@ -45,13 +47,15 @@ const p = class {
|
|
|
45
47
|
render() {
|
|
46
48
|
const e = this.privacyPolicyCallback && this.termsAndConditionsCallback;
|
|
47
49
|
const t = this.privacyPolicyCallback || this.termsAndConditionsCallback;
|
|
48
|
-
return i(
|
|
50
|
+
return i(s, {
|
|
49
51
|
class: "scrollable"
|
|
50
52
|
}, i("ch-theme", {
|
|
51
53
|
model: m
|
|
52
54
|
}), i("section", {
|
|
53
55
|
class: "section"
|
|
54
|
-
}, i("header",
|
|
56
|
+
}, i("header", {
|
|
57
|
+
class: "header"
|
|
58
|
+
}, i("figure", {
|
|
55
59
|
class: "logo__container"
|
|
56
60
|
}, i("img", {
|
|
57
61
|
class: "logo__img",
|
|
@@ -59,7 +63,9 @@ const p = class {
|
|
|
59
63
|
alt: a(this, c, "f").logoAlt
|
|
60
64
|
}), i("figcaption", {
|
|
61
65
|
class: "body-semi-bold-m logotype"
|
|
62
|
-
}, "GeneXus Next"))
|
|
66
|
+
}, "GeneXus Next")), this.appVersion && i("p", {
|
|
67
|
+
class: "body-reuglar-m"
|
|
68
|
+
}, a(this, c, "f").nextVersion, " ", i("span", null, this.appVersion))), i("div", {
|
|
63
69
|
class: "main"
|
|
64
70
|
}, this.versions.length ? i("div", {
|
|
65
71
|
class: "versions__container elevation-1"
|
|
@@ -97,7 +103,7 @@ const p = class {
|
|
|
97
103
|
return [ "gx-ide-assets/about" ];
|
|
98
104
|
}
|
|
99
105
|
get el() {
|
|
100
|
-
return
|
|
106
|
+
return n(this);
|
|
101
107
|
}
|
|
102
108
|
};
|
|
103
109
|
|
|
@@ -106,4 +112,4 @@ c = new WeakMap, d = new WeakMap, g = new WeakMap;
|
|
|
106
112
|
p.style = o;
|
|
107
113
|
|
|
108
114
|
export { p as gx_ide_about };
|
|
109
|
-
//# sourceMappingURL=p-
|
|
115
|
+
//# sourceMappingURL=p-5df733ed.entry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["aboutCss","CSS_BUNDLES","GxIdeAbout","_GxIdeAbout_componentLocale","set","this","_GxIdeAbout_nextLogo","getAssetPath","_GxIdeAbout_copyVersionsHandler","copying","setTimeout","navigator","clipboard","writeText","appVersion","__classPrivateFieldGet","copyVersionsAdditionalText","versions","map","version","join","componentWillLoad","__classPrivateFieldSet","Locale","getComponentStrings","el","render","renderPrivacyAndTerms","privacyPolicyCallback","termsAndConditionsCallback","renderPrivacyOrTerms","h","Host","class","model","src","alt","logoAlt","nextVersion","length","type","onClick","disabled","copied","copy","detailsCallback","detailsAndAcknowledgmentes","hidden","privacyPolicy","termsAndConditions","copyright"],"sources":["src/components/about/about.scss?tag=gx-ide-about&encapsulation=shadow","src/components/about/about.tsx"],"sourcesContent":["$versionsListPadding: 14px;\n\n:host {\n --spacing-body-block-start: var(--mer-spacing--lg);\n --spacing-body-block-end: var(--mer-spacing--lg);\n --spacing-body-inline-start: var(--mer-spacing--md);\n --spacing-body-inline-end: var(--mer-spacing--md);\n\n display: grid;\n inline-size: 100%;\n block-size: 100%;\n gap: var(--mer-spacing--md);\n overflow: auto;\n grid-template-rows: max-content 1fr max-content;\n background-color: var(\n --elevation-background-color,\n var(--mer-surface__elevation--02)\n );\n color: var(--mer-text__on-elevation);\n text-align: center;\n}\n.section {\n // section was addad for semantics, in order to allow a footer tag.\n display: contents;\n}\n\n.header {\n display: flex;\n flex-direction: column;\n gap: var(--mer-spacing--xs);\n}\n\n.main {\n overflow: auto;\n display: grid;\n grid-template-rows: 1fr max-content;\n gap: var(--mer-spacing--lg);\n}\n\n.logo {\n &__container {\n display: flex;\n flex-direction: column;\n gap: var(--mer-spacing--sm);\n align-items: center;\n margin: unset;\n }\n &__img {\n $logoSize: 28px;\n inline-size: $logoSize;\n block-size: $logoSize;\n }\n}\n.logotype {\n color: var(--mer-text__bright);\n}\n\n.versions__container {\n overflow: hidden;\n border: var(--mer-border__width--sm) solid\n var(--mer-border-color__on-elevation--01);\n border-radius: var(--mer-border__radius--sm);\n display: grid;\n grid-template-rows: 1fr max-content;\n inline-size: 100%;\n\n button {\n justify-self: center;\n min-inline-size: 72px;\n }\n}\n.versions__container-footer {\n padding: $versionsListPadding;\n}\n\n.versions__list {\n overflow: auto;\n list-style: none;\n margin: 0;\n padding: $versionsListPadding;\n display: flex;\n flex-direction: column;\n gap: var(--mer-spacing--xs);\n}\n\n.link-underlined {\n // TODO: Add link helper class in Mercury\n text-decoration: underline;\n color: var(--mer-text__on-elevation);\n &:hover {\n color: var(--mer-text__highlighted);\n }\n &:active {\n color: var(--mer-text__elevation);\n }\n}\n\n.links-container {\n display: flex;\n gap: var(--mer-spacing--xs);\n}\n\n.footer {\n // TODO: Add color helper classes in Mercury\n display: flex;\n align-items: center;\n flex-direction: column;\n gap: var(--mer-spacing--xs);\n color: var(--mer-text__complementary);\n}\n","import {\n Component,\n Host,\n h,\n Prop,\n State,\n Element,\n getAssetPath\n} from \"@stencil/core\";\n\nimport { MercuryBundles } from \"@genexus/mercury\";\nimport { Locale } from \"../../common/locale\";\n\nconst CSS_BUNDLES: MercuryBundles = [\n \"resets/box-sizing\",\n \"utils/typography\",\n \"utils/elevation\",\n \"components/button\",\n \"chameleon/scrollbar\"\n];\n\n@Component({\n tag: \"gx-ide-about\",\n styleUrl: \"about.scss\",\n shadow: true,\n assetsDirs: [\"gx-ide-assets/about\"]\n})\nexport class GxIdeAbout {\n #componentLocale: any;\n #nextLogo = getAssetPath(`./gx-ide-assets/about/images/next-logo.svg`);\n\n @Element() el: HTMLGxIdeAboutElement;\n\n /**\n * The application version to display in the dialog.\n */\n @Prop() readonly appVersion: string;\n\n /**\n * GeneXus Next version, and also related dependencies versions\n */\n @Prop() readonly versions: string[] = [];\n\n /**\n * Callback invoked when the user clicks on \"Details & Acknowledgements\"\n */\n @Prop() readonly detailsCallback: DetailsCallback;\n\n /**\n * Callback invoked when the user clicks on \"Privacy policy\"\n */\n @Prop() readonly privacyPolicyCallback: PrivacyPolicyCallback;\n\n /**\n * Callback invoked when the user clicks on \"Terms and conditions\"\n */\n @Prop() readonly termsAndConditionsCallback: TermsAndConditionsCallback;\n\n /**\n * True when the user copies the versions\n */\n @State() copying: boolean = false;\n\n async componentWillLoad() {\n this.#componentLocale = await Locale.getComponentStrings(this.el);\n }\n\n #copyVersionsHandler = () => {\n this.copying = true;\n setTimeout(() => {\n this.copying = false;\n }, 1000);\n\n // be cautions with spaces and indentaiton on the following .writeText\n navigator.clipboard.writeText(\n `${this.appVersion}\\n\n${this.#componentLocale.copyVersionsAdditionalText}${this.versions\n .map(version => `- ${version}`)\n .join(\"\\n\")}`\n );\n };\n\n render() {\n const renderPrivacyAndTerms =\n this.privacyPolicyCallback && this.termsAndConditionsCallback;\n const renderPrivacyOrTerms =\n this.privacyPolicyCallback || this.termsAndConditionsCallback;\n\n return (\n <Host class=\"scrollable\">\n <ch-theme model={CSS_BUNDLES}></ch-theme>\n <section class=\"section\">\n <header class=\"header\">\n <figure class=\"logo__container\">\n <img\n class=\"logo__img\"\n src={this.#nextLogo}\n alt={this.#componentLocale.logoAlt}\n />\n <figcaption class=\"body-semi-bold-m logotype\">\n GeneXus Next\n </figcaption>\n </figure>\n {this.appVersion && (\n <p class=\"body-reuglar-m\">\n {this.#componentLocale.nextVersion}{\" \"}\n <span>{this.appVersion}</span>\n </p>\n )}\n </header>\n <div class=\"main\">\n {this.versions.length ? (\n <div class=\"versions__container elevation-1\">\n <ul class=\"versions__list scrollable\">\n {this.versions.map(version => {\n return <li class=\"body-regular-s\">{version}</li>;\n })}\n </ul>\n <div class=\"versions__container-footer\">\n <button\n class=\"button-secondary\"\n type=\"button\"\n onClick={this.#copyVersionsHandler}\n disabled={this.copying}\n >\n {this.copying\n ? this.#componentLocale.copied\n : this.#componentLocale.copy}\n {}\n </button>\n </div>\n </div>\n ) : null}\n\n {this.detailsCallback && (\n <button\n class=\"button-tertiary\"\n type=\"button\"\n onClick={this.detailsCallback}\n >\n {this.#componentLocale.detailsAndAcknowledgmentes}\n </button>\n )}\n </div>\n\n <footer class=\"body-regular-s footer\">\n {renderPrivacyOrTerms && (\n <div class=\"links-container\" hidden={!renderPrivacyAndTerms}>\n {this.privacyPolicyCallback && (\n <button\n class=\"link-underlined tiny-regular-s\"\n type=\"button\"\n onClick={this.privacyPolicyCallback}\n >\n {this.#componentLocale.privacyPolicy}\n </button>\n )}\n\n {renderPrivacyAndTerms && \"|\"}\n\n {this.termsAndConditionsCallback && (\n <button\n class=\"link-underlined tiny-regular-s\"\n type=\"button\"\n onClick={this.termsAndConditionsCallback}\n >\n {this.#componentLocale.termsAndConditions}\n </button>\n )}\n </div>\n )}\n {this.#componentLocale.copyright}\n </footer>\n </section>\n </Host>\n );\n }\n}\n\nexport type DetailsCallback = () => Promise<void>;\nexport type PrivacyPolicyCallback = () => Promise<void>;\nexport type TermsAndConditionsCallback = () => Promise<void>;\n"],"mappings":";;;;AAAA,MAAMA,IAAW;;;;;;;;;;;;;;;;;ACajB,MAAMC,IAA8B,EAClC,qBACA,oBACA,mBACA,qBACA;;MASWC,IAAU;;;IACrBC,EAAAC,IAAAC,WAAA;IACAC,EAAAF,IAAAC,MAAYE,EAAa;IAsCzBC,EAAAJ,IAAAC,OAAuB;MACrBA,KAAKI,UAAU;MACfC,YAAW;QACTL,KAAKI,UAAU;AAAK,UACnB;;YAGHE,UAAUC,UAAUC,UAClB,GAAGR,KAAKS,iBACZC,EAAAV,MAAIF,GAAA,KAAkBa,6BAA6BX,KAAKY,SACjDC,KAAIC,KAAW,KAAKA,MACpBC,KAAK;AACT;;oBAtCmC;;;;mBAoBV;;EAE5B,uBAAMC;IACJC,EAAAjB,MAAIF,SAA0BoB,EAAOC,oBAAoBnB,KAAKoB,KAAG;;EAkBnE,MAAAC;IACE,MAAMC,IACJtB,KAAKuB,yBAAyBvB,KAAKwB;IACrC,MAAMC,IACJzB,KAAKuB,yBAAyBvB,KAAKwB;IAErC,OACEE,EAACC,GAAI;MAACC,OAAM;OACVF,EAAA;MAAUG,OAAOjC;QACjB8B,EAAA;MAASE,OAAM;OACbF,EAAA;MAAQE,OAAM;OACZF,EAAA;MAAQE,OAAM;OACZF,EAAA;MACEE,OAAM;MACNE,KAAKpB,EAAAV,MAAIC,GAAA;MACT8B,KAAKrB,EAAAV,MAAIF,GAAA,KAAkBkC;QAE7BN,EAAA;MAAYE,OAAM;OAA2B,kBAI9C5B,KAAKS,cACJiB,EAAA;MAAGE,OAAM;OACNlB,EAAAV,MAAIF,GAAA,KAAkBmC,aAAa,KACpCP,EAAA,cAAO1B,KAAKS,eAIlBiB,EAAA;MAAKE,OAAM;OACR5B,KAAKY,SAASsB,SACbR,EAAA;MAAKE,OAAM;OACTF,EAAA;MAAIE,OAAM;OACP5B,KAAKY,SAASC,KAAIC,KACVY,EAAA;MAAIE,OAAM;OAAkBd,OAGvCY,EAAA;MAAKE,OAAM;OACTF,EAAA;MACEE,OAAM;MACNO,MAAK;MACLC,SAAS1B,EAAAV,MAAIG,GAAA;MACbkC,UAAUrC,KAAKI;OAEdJ,KAAKI,UACFM,EAAAV,MAAIF,GAAA,KAAkBwC,SACtB5B,EAAAV,MAAIF,GAAA,KAAkByC,UAK9B,MAEHvC,KAAKwC,mBACJd,EAAA;MACEE,OAAM;MACNO,MAAK;MACLC,SAASpC,KAAKwC;OAEb9B,EAAAV,MAAIF,GAAA,KAAkB2C,8BAK7Bf,EAAA;MAAQE,OAAM;OACXH,KACCC,EAAA;MAAKE,OAAM;MAAkBc,SAASpB;OACnCtB,KAAKuB,yBACJG,EAAA;MACEE,OAAM;MACNO,MAAK;MACLC,SAASpC,KAAKuB;OAEbb,EAAAV,MAAIF,GAAA,KAAkB6C,gBAI1BrB,KAAyB,KAEzBtB,KAAKwB,8BACJE,EAAA;MACEE,OAAM;MACNO,MAAK;MACLC,SAASpC,KAAKwB;OAEbd,EAAAV,MAAIF,GAAA,KAAkB8C,sBAK9BlC,EAAAV,MAAIF,GAAA,KAAkB+C"}
|
|
@@ -420,11 +420,10 @@ const P = class {
|
|
|
420
420
|
l(this, T, "f").call(this, t);
|
|
421
421
|
// Check and update activeItem
|
|
422
422
|
this.activeItemNode = findFirstActiveNode(t);
|
|
423
|
-
|
|
424
|
-
this.loading = false;
|
|
425
|
-
}
|
|
423
|
+
this.loading = false;
|
|
426
424
|
}
|
|
427
425
|
async componentWillLoad() {
|
|
426
|
+
this.loading = true;
|
|
428
427
|
h(this, d, await r.getComponentStrings(this.el), "f");
|
|
429
428
|
this.toggleCheckboxes = this.showToggleCheckboxes;
|
|
430
429
|
h(this, v, [ {
|
|
@@ -434,7 +433,6 @@ const P = class {
|
|
|
434
433
|
value: H,
|
|
435
434
|
caption: "List"
|
|
436
435
|
} ], "f");
|
|
437
|
-
this.watchNodeListHandler(this.itemsList);
|
|
438
436
|
this.renderFooter = this.dialogActions.length > 0 || !!this.cancelCallback || !!this.confirmCallback;
|
|
439
437
|
}
|
|
440
438
|
/**
|
|
@@ -579,4 +577,4 @@ N = new WeakMap, j = new WeakMap;
|
|
|
579
577
|
P.style = c;
|
|
580
578
|
|
|
581
579
|
export { P as gx_ide_select_kb_items };
|
|
582
|
-
//# sourceMappingURL=p-
|
|
580
|
+
//# sourceMappingURL=p-e1d0adf6.entry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["ACTIVE_ITEM_DEFAULT_ICON","getIconPath","category","name","colorType","convertItemsNodeListToFlattenedTreeViewModel","itemsList","checkboxType","itemsListFlattenedTreeViewModel","processNode","item","startImgSrc","active","iconStart","leaf","_a","nodes","length","checkbox","metaData","JSON","stringify","versionType","type","push","caption","checked","endImgSrc","iconEnd","expanded","id","toString","items","metadata","parts","selected","forEach","childNode","convertItemsListToTreeViewModel","itemsListTreeViewModel","order","parseInt","findItemNode","itemNode","result","findItemInArray","itemsNodes","setAllLeafsCheckedFalse","uncheck","unselectAllNodes","unselect","checkItems","idsChecked","itemFind","expandItems","selectItems","idsSelected","searchInNode","node","parents","searchParentsItems","ids","rootItem","results","findFirstActiveNode","findActiveWithPath","nodeList","currentPath","nodePath","path","selectKbItemsCss","CSS_BUNDLES","SYSTEM_SEARCH_ICON","VIEW_AS_TREE_ID","VIEW_AS_LIST_ID","TOGGLE_CHECKBOXES_CHECKED_VALUE","GxIdeSelectKbItems","_GxIdeSelectKbItems__componentLocale","set","this","_GxIdeSelectKbItems_chShortcutsEl","_GxIdeSelectKbItems_selectedNodesIds","_GxIdeSelectKbItems_shortcutsSrc","getAssetPath","_GxIdeSelectKbItems_updatedModelList","_GxIdeSelectKbItems_viewItemsAsModel","_GxIdeSelectKbItems_treeViewRenderEl","_GxIdeSelectKbItems_cancelHandler","cancelCallback","_GxIdeSelectKbItems_checkedItemsChangeHandler","async","e","checkedNodesIds","detail","__classPrivateFieldSet","checkedChanged","_GxIdeSelectKbItems_confirmHandler","confirmCallback","_GxIdeSelectKbItems_contextMenuHandler","itemContextMenuCallback","info","isSelected","__classPrivateFieldGet","find","updateItemsProperties","clientX","contextmenuEvent","clientY","selection","_GxIdeSelectKbItems_executeDialogAction","callback","_GxIdeSelectKbItems_patternSearchValueChangedHandler","event","searchPatternValue","_GxIdeSelectKbItems_renderActionButtons","h","dialogActions","map","action","class","part","onClick","call","disabled","loading","_GxIdeSelectKbItems_renderFooter","footer","cancel","select","_GxIdeSelectKbItems_selectedItemsChangeHandler","selectedNodesIds","selectionChanged","_GxIdeSelectKbItems_toggleAndSelectNodesInModelItems","selectedItemsIds","nodesToToggle","newItemsSelected","newItemsExpanded","_GxIdeSelectKbItems_updateViews","_GxIdeSelectKbItems_toggleCheckedNodesInModelItems","newItemsList","nodeVersionsListTreeModel","nodeListFlattenedTreeModel","_GxIdeSelectKbItems_viewItemsAsChangedHandler","selectedViewType","nodesVersionsViewType","_GxIdeSelectKbItems_toggleCheckboxesChangedHandler","toggleCheckboxes","_GxIdeSelectKbItems_scrollIntoActiveVersionNode","doScrollIntoView","activeItemNode","scrollIntoVisible","activeItemCallback","watchNodeListHandler","componentWillLoad","Locale","getComponentStrings","el","showToggleCheckboxes","value","main","tree","renderFooter","suspendShortcuts","suspend","updateSelection","updateCheckedItems","checkedItemsIds","render","Host","widget","model","src","ref","htmlFor","onChange","checkedValue","onInput","showActiveItemLink","placeholder","header","searchPatternPlaceholder","accessibleName","containerRef","activeItem","loaderTitle","loader","title","description","show","expandableButton","onItemContextmenu","onCheckedItemsChange","onSelectedItemsChange","expandOnClick","multiSelection","filter","filterType"],"sources":["src/components/select-kb-items/helpers.tsx","src/components/select-kb-items/select-kb-items.scss?tag=gx-ide-select-kb-items&encapsulation=shadow","src/components/select-kb-items/select-kb-items.tsx"],"sourcesContent":["import { ItemNode, CheckboxType, ActiveNode } from \"./select-kb-items\";\nimport { TreeViewItemModel } from \"@genexus/chameleon-controls-library\";\nimport { getIconPath } from \"@genexus/mercury\";\n\nexport const ACTIVE_ITEM_DEFAULT_ICON = getIconPath({\n category: \"system\",\n name: \"check-circle\",\n colorType: \"primary\"\n});\n\nexport const convertItemsNodeListToFlattenedTreeViewModel = (\n itemsList: ItemNode[],\n checkboxType: CheckboxType\n): TreeViewItemModel[] => {\n const itemsListFlattenedTreeViewModel: TreeViewItemModel[] = [];\n\n const processNode = (item: ItemNode) => {\n const startImgSrc =\n item.active && !item.iconStart\n ? ACTIVE_ITEM_DEFAULT_ICON\n : item.iconStart;\n const leaf = !item.nodes?.length;\n const checkbox =\n checkboxType === \"all\" ||\n (checkboxType === \"custom\" && item.checkbox) ||\n (checkboxType === \"leaf\" && leaf);\n const metaData = JSON.stringify({\n versionType: item.type\n });\n itemsListFlattenedTreeViewModel.push({\n caption: item.name,\n checkbox: checkbox,\n checked: item.checked,\n startImgSrc: startImgSrc,\n endImgSrc: item.iconEnd,\n expanded: item.expanded,\n id: item.id.toString(),\n items: null,\n leaf: leaf,\n metadata: metaData,\n parts: item.parts,\n selected: item.selected\n });\n\n if (item.nodes) {\n item.nodes.forEach(childNode => processNode(childNode));\n }\n };\n\n itemsList.forEach(item => processNode(item));\n return itemsListFlattenedTreeViewModel;\n};\n\nexport const convertItemsListToTreeViewModel = (\n itemsList: ItemNode[],\n checkboxType: CheckboxType\n): TreeViewItemModel[] => {\n const itemsListTreeViewModel: TreeViewItemModel[] = [];\n itemsList.forEach(item => {\n const startImgSrc =\n item.active && !item.iconStart\n ? ACTIVE_ITEM_DEFAULT_ICON\n : item.iconStart;\n const leaf = !item.nodes?.length;\n const checkbox =\n checkboxType === \"all\" ||\n (checkboxType === \"custom\" && item.checkbox) ||\n (checkboxType === \"leaf\" && leaf);\n const expanded = item.expanded;\n const iconStart = startImgSrc;\n const iconEnd = item.iconEnd;\n const metaData = JSON.stringify({\n versionType: item.type\n });\n const order = parseInt(item.id);\n itemsListTreeViewModel.push({\n caption: item.name,\n checkbox: checkbox,\n checked: item.checked,\n startImgSrc: iconStart,\n endImgSrc: iconEnd,\n expanded: expanded,\n id: item.id.toString(),\n items: !leaf\n ? convertItemsListToTreeViewModel(item.nodes, checkboxType)\n : null,\n leaf: leaf,\n metadata: metaData,\n parts: item.parts,\n order: order,\n selected: item.selected\n });\n });\n\n return itemsListTreeViewModel;\n};\n\nconst findItemNode = (id: string, item: ItemNode): ItemNode | null => {\n if (item.id === id) {\n return item;\n }\n\n if (item.nodes) {\n for (const itemNode of item.nodes) {\n const result = findItemNode(id, itemNode);\n if (result) {\n return result;\n }\n }\n }\n return null;\n};\n\nfunction findItemInArray(itemsNodes: ItemNode[], id: string): ItemNode | null {\n for (const item of itemsNodes) {\n const result = findItemNode(id, item);\n if (result) {\n return result;\n }\n }\n return null;\n}\nconst setAllLeafsCheckedFalse = (itemsList: ItemNode[]): ItemNode[] => {\n const uncheck = (itemNode: ItemNode) => {\n itemNode.checked = false;\n if (itemNode.nodes?.length) {\n itemNode.nodes.forEach(childNode => uncheck(childNode));\n }\n };\n\n itemsList.forEach(item => uncheck(item));\n return itemsList;\n};\n\nexport const unselectAllNodes = (itemsList: ItemNode[]) => {\n const unselect = (itemNode: ItemNode) => {\n itemNode.selected = false;\n if (itemNode.nodes?.length) {\n itemNode.nodes.forEach(childNode => unselect(childNode));\n }\n };\n\n itemsList.forEach(item => unselect(item));\n};\n\nexport const checkItems = (\n itemsList: ItemNode[],\n idsChecked: string[]\n): ItemNode[] => {\n setAllLeafsCheckedFalse(itemsList);\n idsChecked.forEach(id => {\n const itemFind = findItemInArray(itemsList, id);\n if (itemFind) {\n itemFind.checked = true;\n }\n });\n\n return itemsList;\n};\n\nexport const expandItems = (\n itemsList: ItemNode[],\n idsChecked: string[]\n): ItemNode[] => {\n idsChecked.forEach(id => {\n const itemFind = findItemInArray(itemsList, id);\n if (itemFind) {\n itemFind.expanded = true;\n }\n });\n\n return itemsList;\n};\n\nexport const selectItems = (\n itemsList: ItemNode[],\n idsSelected: string[]\n): ItemNode[] => {\n idsSelected.forEach(id => {\n const itemFind = findItemInArray(itemsList, id);\n if (itemFind) {\n itemFind.selected = true;\n }\n });\n return itemsList;\n};\n\nfunction searchInNode(item: ItemNode, id: string): string[] | null {\n // If the current node is the searched node, we return an empty list (it has no parents in this branch)\n if (item.id === id) {\n return [];\n }\n\n // We traverse each child looking for the target node\n if (item.nodes?.length) {\n for (const node of item.nodes) {\n const parents = searchInNode(node, id);\n if (parents !== null) {\n // If we find it, we include the current node at the beginning of the path and return\n return [item.id, ...parents];\n }\n }\n }\n return null;\n}\n\nexport const searchParentsItems = (\n items: ItemNode[],\n ids: string[]\n): string[] | null => {\n const parents: string[] = [];\n for (const id of ids) {\n for (const rootItem of items) {\n const results = searchInNode(rootItem, id);\n if (results !== null) {\n results.forEach(result => {\n parents.push(result);\n });\n }\n }\n }\n return parents;\n};\n\n/**\n * Recursively searches for the first node with the active=true property\n * @param nodes Array of nodes to search through\n * @returns An object with caption, iconStart, and path to the first active node found, or null if none is found\n */\nexport const findFirstActiveNode = (nodes: ItemNode[]): ActiveNode | null => {\n // Helper function that keeps track of the path during recursion\n const findActiveWithPath = (\n nodeList: ItemNode[],\n currentPath: string[] = []\n ): ActiveNode | null => {\n // Base case: if nodes is undefined or empty\n if (!nodeList || nodeList.length === 0) {\n return null;\n }\n\n // Iterate through each node in the array\n for (const node of nodeList) {\n // Create a new path that includes the current node\n const nodePath = [...currentPath, node.id];\n\n // Check if the current node is active\n if (node.active === true) {\n return {\n caption: node.name,\n iconStart: node.iconStart,\n path: nodePath\n };\n }\n\n // If the node has children, search through them with the updated path\n if (node.nodes && node.nodes.length > 0) {\n const result = findActiveWithPath(node.nodes, nodePath);\n // If we find an active node in this subtree, return it immediately\n if (result !== null) {\n return result;\n }\n }\n }\n\n // No active node found in any of the nodes\n return null;\n };\n\n // Start the search with an empty path\n return findActiveWithPath(nodes);\n};\n",":host {\n --search-input-max-inline-size: 400px;\n display: grid;\n block-size: 100%;\n}\n:host(:not(.has-footer)) {\n grid-template-rows: max-content 1fr;\n}\n:host(.has-footer) {\n grid-template-rows: max-content 1fr max-content;\n}\n\n.header.has-active-item {\n grid-area: header;\n}\n\n.section {\n display: contents;\n}\n\n// header\n.header {\n &__first-row,\n &__second-row {\n display: grid;\n grid-auto-flow: column;\n }\n &__first-row {\n column-gap: var(--field-group__column-gap);\n grid-auto-columns: max-content;\n }\n &__second-row {\n column-gap: 12px;\n grid-template-columns: minmax(150px, var(--search-input-max-inline-size)) max-content;\n\n &--one-row {\n grid-template-columns: minmax(150px, var(--search-input-max-inline-size));\n }\n }\n}\n\n.active-item {\n background-color: var(--mer-surface__elevation--01);\n border-radius: var(--mer-border__radius--sm);\n padding: var(--mer-spacing--xs) var(--mer-spacing--sm);\n display: flex;\n align-items: center;\n gap: var(--mer-spacing--xs);\n}\n.active-item {\n &__icon-container {\n display: contents;\n }\n &__icon {\n pointer-events: none; // We do not want the icon to change the colors, since the clickable area is the caption only\n }\n &__link {\n text-decoration: underline;\n // TODO: There should be a class in Merucry to apply link styles\n color: var(--mer-text__primary);\n cursor: pointer;\n &:hover {\n color: var(--mer-text__primary--hover);\n }\n &:active {\n color: var(--mer-text__primary--active);\n }\n }\n}\n\n.dummy-control-block-size {\n // WA: Make as tall as a regular contorl (ie.: a input, a combo-box) in order to\n // make the label vertically aligned with this control.\n block-size: 32px;\n}\n\n.trees {\n position: relative;\n}\n","import {\n Component,\n Element,\n getAssetPath,\n Host,\n h,\n Prop,\n State,\n Watch,\n Method\n} from \"@stencil/core\";\n\nimport {\n ChCheckboxCustomEvent,\n TreeViewItemModel,\n TreeViewItemModelExtended\n} from \"@genexus/chameleon-controls-library\";\n\nimport {\n checkItems,\n convertItemsListToTreeViewModel,\n convertItemsNodeListToFlattenedTreeViewModel,\n expandItems,\n searchParentsItems,\n selectItems,\n unselectAllNodes,\n findFirstActiveNode\n} from \"./helpers\";\nimport { getIconPath, MercuryBundles } from \"@genexus/mercury\";\nimport { Locale } from \"../../common/locale\";\nimport { ContextMenuInfo } from \"../../common/types\";\nimport { RadioGroupItemModel } from \"@genexus/chameleon-controls-library/dist/types/components/radio-group/types\";\n\nimport { ACTIVE_ITEM_DEFAULT_ICON } from \"./helpers\";\n\nconst CSS_BUNDLES: MercuryBundles = [\n \"resets/box-sizing\",\n \"chameleon/scrollbar\",\n \"components/tooltip\",\n \"components/tree-view\",\n \"utils/form--full\",\n \"utils/layout\",\n \"utils/spacing\",\n \"utils/typography\"\n];\n\nconst SYSTEM_SEARCH_ICON = getIconPath({\n category: \"system\",\n name: \"search\",\n colorType: \"on-surface\"\n});\n\nconst VIEW_AS_TREE_ID: NodesVersionsViewType = \"tree\";\nconst VIEW_AS_LIST_ID: NodesVersionsViewType = \"list\";\n\nconst TOGGLE_CHECKBOXES_CHECKED_VALUE = \"on\";\n\n@Component({\n tag: \"gx-ide-select-kb-items\",\n styleUrl: \"select-kb-items.scss\",\n shadow: true,\n assetsDirs: [\"gx-ide-assets/select-kb-items\"]\n})\nexport class GxIdeSelectKbItems {\n #_componentLocale: any;\n\n #chShortcutsEl: HTMLChShortcutsElement;\n #selectedNodesIds: string[] = [];\n #shortcutsSrc = getAssetPath(\n `./gx-ide-assets/select-kb-items/shortcuts.json`\n );\n #updatedModelList: ItemNode[] = [];\n\n #viewItemsAsModel: RadioGroupItemModel[];\n\n @Element() el: HTMLGxIdeSelectKbItemsElement;\n #treeViewRenderEl: HTMLChTreeViewRenderElement;\n\n /**\n * Represents the active version node caption and icon (if any)\n */\n @State() activeItemNode: ActiveNode;\n\n /**\n * Represents the selected nodes ids\n */\n @State() checkedNodesIds: string[] = [];\n\n /**\n * If true, the footer will be rendered\n */\n @State() renderFooter: boolean = false;\n\n /**\n * Represents the nodes list model\n */\n @State() nodeListFlattenedTreeModel: TreeViewItemModel[] = [];\n\n /**\n * To show a loader when the component is loading\n */\n @State() loading: boolean = true;\n\n /**\n * View type for the nodes.\n */\n @State() nodesVersionsViewType: NodesVersionsViewType = \"tree\";\n\n /**\n * Represents the nodes tree model\n */\n @State() nodeVersionsListTreeModel: TreeViewItemModel[] = [];\n\n /**\n * \"Search Pattern\" input value, used to filter the nodes tree/list.\n */\n @State() searchPatternValue: string = null;\n\n /**\n * It maps to the ch-tree-view-render \"toggleCheckboxes\" property.\n */\n @State() toggleCheckboxes: boolean;\n\n /**\n * Callback emitted when the user clicks on the \"Active item\"\n */\n @Prop() readonly activeItemCallback?: () => Promise<void>;\n\n /**\n * Callback emitted when the 'cancel' button is pressed\n */\n @Prop() readonly cancelCallback?: () => Promise<void>;\n\n /**\n * Defines which nodes of the component have checkboxes.\n */\n @Prop() readonly checkboxType: CheckboxType;\n\n /**\n * Define if a item node is expanded on click interaction. If false item-node will only be expanded on double click.\n */\n @Prop() readonly expandOnClick: boolean = true;\n\n /**\n * Callback emitted when the items checked items change\n */\n @Prop() readonly checkedChanged?: (checkedItems: string[]) => Promise<void>;\n\n /**\n * Callback emitted when the 'select' button is pressed\n */\n @Prop() readonly confirmCallback?: (checkedItems: string[]) => Promise<void>;\n\n /**\n * Set of additional actions (callbacks) to those already provided by default by the selector (cancelCallback and selectCallback)\n */\n @Prop() readonly dialogActions: DialogAction[] = [];\n\n /**\n * Callback emitted when the user right click on an item\n */\n @Prop() readonly itemContextMenuCallback: (\n info: ContextMenuInfo\n ) => Promise<void>;\n\n /**\n * Represents the itemLis list model\n */\n @Prop() readonly itemsList: ItemNode[] = [];\n\n /**\n * Used to define if the component must show the \"Toggle Checkboxes\" option or not\n */\n @Prop() readonly showToggleCheckboxes: boolean = true;\n\n @Watch(\"itemsList\")\n watchNodeListHandler(newItemsList: ItemNode[]) {\n this.#updateViews(newItemsList);\n // Check and update activeItem\n this.activeItemNode = findFirstActiveNode(newItemsList);\n\n this.loading = false;\n }\n\n /**\n * This define if the selection is unique or not\n */\n @Prop() readonly multiSelection?: boolean = false;\n\n /**\n * Used to define if the component must show the \"Active item\" link or not\n */\n @Prop() readonly showActiveItemLink?: boolean = false;\n\n /**\n * Callback emitted when the items selection change\n */\n @Prop() readonly selectionChanged?: (selectedItem: string[]) => Promise<void>;\n\n async componentWillLoad() {\n this.loading = true;\n this.#_componentLocale = await Locale.getComponentStrings(this.el);\n this.toggleCheckboxes = this.showToggleCheckboxes;\n this.#viewItemsAsModel = [\n { value: VIEW_AS_TREE_ID, caption: this.#_componentLocale.main.tree },\n { value: VIEW_AS_LIST_ID, caption: \"List\" }\n ];\n this.renderFooter =\n this.dialogActions.length > 0 ||\n !!this.cancelCallback ||\n !!this.confirmCallback;\n }\n\n /**\n * Suspends or reactivates the shortcuts\n */\n @Method()\n async suspendShortcuts(suspendShortcuts: boolean) {\n if (suspendShortcuts) {\n this.#chShortcutsEl.suspend = true;\n } else {\n this.#chShortcutsEl.suspend = false;\n }\n }\n\n /**\n * Allow to update the selected items\n */\n @Method()\n async updateSelection(selectedItemsIds: string[]) {\n // first clear selected\n this.#treeViewRenderEl.updateItemsProperties(this.#selectedNodesIds, {\n selected: false\n });\n // then select\n this.#treeViewRenderEl.updateItemsProperties(selectedItemsIds, {\n selected: true\n });\n }\n\n /**\n * Allow to update the checked items\n */\n @Method()\n async updateCheckedItems(checkedItemsIds: string[]) {\n // first clear checks\n this.#treeViewRenderEl.updateItemsProperties(this.checkedNodesIds, {\n checked: false\n });\n // then select\n this.#treeViewRenderEl.updateItemsProperties(checkedItemsIds, {\n checked: true\n });\n this.checkedNodesIds = checkedItemsIds;\n }\n\n #cancelHandler = () => {\n if (this.cancelCallback) {\n this.cancelCallback();\n }\n };\n\n #checkedItemsChangeHandler = async (\n e: CustomEvent<Map<string, TreeViewItemModelExtended>>\n ) => {\n const checkedNodesIds: string[] = [];\n e.detail.forEach(node => {\n node.item.checked && checkedNodesIds.push(node.item.id);\n });\n this.checkedNodesIds = checkedNodesIds;\n this.#updatedModelList = checkItems(this.itemsList, this.checkedNodesIds);\n\n if (this.checkedChanged) {\n this.checkedChanged(this.checkedNodesIds);\n }\n };\n\n #confirmHandler = () => {\n if (this.confirmCallback) {\n this.confirmCallback(this.checkedNodesIds);\n }\n };\n\n #contextMenuHandler = async (\n e: CustomEvent<{\n id: string;\n itemRef: HTMLChTreeViewItemElement;\n metadata: string;\n contextmenuEvent: PointerEvent;\n }>\n ) => {\n if (this.itemContextMenuCallback) {\n let info: ContextMenuInfo;\n const isSelected = this.#selectedNodesIds.find(id => id === e.detail.id);\n if (!this.#selectedNodesIds.length || !isSelected) {\n await this.#treeViewRenderEl.updateItemsProperties(\n this.#selectedNodesIds,\n { selected: false }\n );\n await this.#treeViewRenderEl.updateItemsProperties([e.detail.id], {\n selected: true\n });\n info = {\n clientX: e.detail.contextmenuEvent.clientX,\n clientY: e.detail.contextmenuEvent.clientY,\n selection: [e.detail.id]\n };\n } else {\n info = {\n clientX: e.detail.contextmenuEvent.clientX,\n clientY: e.detail.contextmenuEvent.clientY,\n selection: this.#selectedNodesIds\n };\n }\n this.itemContextMenuCallback(info);\n }\n };\n\n #executeDialogAction = (\n callback: (checkedNodesIds: string[], selectedNodesIds: string[]) => void\n ) => {\n return () => {\n callback(this.checkedNodesIds, this.#selectedNodesIds);\n };\n };\n\n #patternSearchValueChangedHandler = (\n event: CustomEvent<string> | InputEvent\n ) => {\n this.searchPatternValue = event.detail.toString();\n };\n\n #renderActionButtons = (): HTMLElement[] => {\n return (\n <div>\n {this.dialogActions.map(action => {\n return (\n <button\n class={\"button-tertiary\"}\n part={`button button-${action.name}`}\n onClick={this.#executeDialogAction(action.callback)}\n disabled={this.loading}\n >\n {action.name}\n </button>\n );\n })}\n </div>\n );\n };\n\n #renderFooter = (): HTMLElement => {\n return (\n <footer class=\"footer control-footer-with-border spacing-body-inline spacing-body-block-end control-footer-space-between\">\n {this.#renderActionButtons()}\n <div class=\"buttons-spacer \">\n {this.cancelCallback && (\n <button\n class={\"button-secondary\"}\n part={\"cancel-button\"}\n onClick={this.#cancelHandler}\n >\n {this.#_componentLocale.footer.cancel}\n </button>\n )}\n {this.confirmCallback && (\n <button\n class={\"button-primary\"}\n part={\"confirm-button\"}\n onClick={this.#confirmHandler}\n disabled={this.loading || this.checkedNodesIds?.length === 0}\n >\n {this.#_componentLocale.footer.select}\n </button>\n )}\n </div>\n </footer>\n );\n };\n\n #selectedItemsChangeHandler = (\n e: CustomEvent<TreeViewItemModelExtended[]>\n ) => {\n const selectedNodesIds: string[] = [];\n unselectAllNodes(this.itemsList);\n e.detail.forEach(node => {\n selectedNodesIds.push(node.item.id);\n });\n this.#selectedNodesIds = selectedNodesIds;\n if (this.selectionChanged) {\n this.selectionChanged(this.#selectedNodesIds);\n }\n\n this.#updatedModelList = selectItems(this.itemsList, selectedNodesIds);\n };\n\n #toggleAndSelectNodesInModelItems = async (selectedItemsIds: string[]) => {\n const nodesToToggle = searchParentsItems(this.itemsList, selectedItemsIds);\n const newItemsSelected = selectItems(this.itemsList, selectedItemsIds);\n const newItemsExpanded = expandItems(newItemsSelected, nodesToToggle);\n this.#updateViews(newItemsExpanded);\n };\n\n #toggleCheckedNodesInModelItems = async (selectedItemsIds: string[]) => {\n const nodesToToggle = searchParentsItems(this.itemsList, selectedItemsIds);\n const newItemsExpanded = expandItems(this.itemsList, nodesToToggle);\n this.#updateViews(newItemsExpanded);\n };\n\n #updateViews = (newItemsList: ItemNode[]) => {\n this.nodeVersionsListTreeModel = convertItemsListToTreeViewModel(\n newItemsList,\n this.checkboxType\n );\n\n this.nodeListFlattenedTreeModel =\n convertItemsNodeListToFlattenedTreeViewModel(\n newItemsList,\n this.checkboxType\n );\n };\n\n #viewItemsAsChangedHandler = async (event: CustomEvent<string>) => {\n const selectedViewType = event.detail as NodesVersionsViewType;\n this.nodesVersionsViewType = selectedViewType;\n if (this.nodesVersionsViewType === \"tree\") {\n await this.#toggleAndSelectNodesInModelItems(this.#selectedNodesIds);\n await this.#toggleCheckedNodesInModelItems(this.checkedNodesIds);\n }\n this.#updateViews(this.#updatedModelList);\n };\n\n #toggleCheckboxesChangedHandler = (\n event: ChCheckboxCustomEvent<string> | InputEvent\n ) => {\n this.toggleCheckboxes = event.detail === TOGGLE_CHECKBOXES_CHECKED_VALUE;\n };\n\n #scrollIntoActiveVersionNode = () => {\n const doScrollIntoView =\n this.#treeViewRenderEl && this.activeItemNode?.path;\n if (doScrollIntoView) {\n this.#treeViewRenderEl.scrollIntoVisible(this.activeItemNode.path);\n }\n\n if (this.activeItemCallback) {\n this.activeItemCallback();\n }\n };\n\n render() {\n return (\n <Host class={{ \"widget\": true, \"has-footer\": this.renderFooter }}>\n <ch-theme model={CSS_BUNDLES}></ch-theme>\n <ch-shortcuts\n src={this.#shortcutsSrc}\n ref={(el: HTMLChShortcutsElement) =>\n (this.#chShortcutsEl = el as HTMLChShortcutsElement)\n }\n ></ch-shortcuts>\n <section class=\"section\">\n <header\n part=\"header\"\n class=\"header control-header field-group spacing-body-block-start spacing-body-inline\"\n >\n <div class=\"header__first-row\">\n <div class=\"field field-inline\">\n <label class=\"label\" htmlFor=\"view-mode\">\n Select view mode:\n </label>\n <ch-radio-group-render\n class=\"radio-group dummy-control-block-size\"\n id=\"view-mode\"\n model={this.#viewItemsAsModel}\n onChange={this.#viewItemsAsChangedHandler}\n value={this.#viewItemsAsModel[0].value}\n ></ch-radio-group-render>\n </div>\n\n {this.checkboxType !== \"none\" && this.showToggleCheckboxes && (\n <div class=\"field field-inline\">\n <label class=\"label\" htmlFor=\"toggle-checkboxes\">\n Toggle Checkboxes\n </label>\n <ch-checkbox\n class=\"checkbox dummy-control-block-size\"\n id=\"toggle-checkboxes\"\n checkedValue={TOGGLE_CHECKBOXES_CHECKED_VALUE}\n value={TOGGLE_CHECKBOXES_CHECKED_VALUE}\n onInput={this.#toggleCheckboxesChangedHandler}\n ></ch-checkbox>\n </div>\n )}\n </div>\n\n <div\n class={{\n \"header__second-row\": true,\n \"header__second-row--one-row\": !this.showActiveItemLink\n }}\n >\n <ch-edit\n class=\"input\"\n placeholder={\n this.#_componentLocale.header.searchPatternPlaceholder\n }\n startImgSrc={SYSTEM_SEARCH_ICON}\n onInput={this.#patternSearchValueChangedHandler}\n accessibleName=\"search pattern\"\n ></ch-edit>\n {this.activeItemNode && this.showActiveItemLink && (\n <div class=\"active-item\">\n <span\n class=\"active-item__icon-container\"\n // make this span the icon container, to prevent icon state changes when\n // interacting with div.active-item\n >\n <ch-image\n class=\"icon-md active-item__icon\"\n src={\n this.activeItemNode.iconStart ||\n ACTIVE_ITEM_DEFAULT_ICON\n }\n containerRef={null}\n ></ch-image>\n </span>\n {this.#_componentLocale.header.activeItem}\n <button\n class=\"active-item__link\"\n onClick={this.#scrollIntoActiveVersionNode}\n >\n {this.activeItemNode.caption}\n </button>\n </div>\n )}\n </div>\n </header>\n\n <div class=\"spacing-body-inline-start trees\">\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 <ch-tree-view-render\n class=\"tree-view\"\n model={\n this.nodesVersionsViewType === \"tree\"\n ? this.nodeVersionsListTreeModel\n : this.nodeListFlattenedTreeModel\n }\n show-lines={\n this.nodesVersionsViewType === \"tree\" ? \"all\" : \"none\"\n }\n expandableButton={\n this.nodesVersionsViewType === \"tree\" ? \"decorative\" : \"no\"\n }\n onItemContextmenu={this.#contextMenuHandler}\n onCheckedItemsChange={this.#checkedItemsChangeHandler}\n onSelectedItemsChange={this.#selectedItemsChangeHandler}\n expandOnClick={this.expandOnClick}\n multiSelection={this.multiSelection}\n filter={this.searchPatternValue}\n filterType=\"caption\"\n toggleCheckboxes={this.toggleCheckboxes}\n ref={(el: HTMLChTreeViewRenderElement) => {\n this.#treeViewRenderEl = el as HTMLChTreeViewRenderElement;\n }}\n ></ch-tree-view-render>\n )}\n </div>\n {this.renderFooter && this.#renderFooter()}\n </section>\n </Host>\n );\n }\n}\n\nexport type CheckboxType = \"none\" | \"all\" | \"leaf\" | \"custom\";\n\nexport type DialogAction = {\n name: string;\n callback: DialogActionCallback;\n};\n\nexport type DialogActionCallback = (...args: any[]) => void;\n\nexport type ItemCommon = {\n icon: string;\n expanded: boolean;\n};\n\nexport type ItemNode = {\n active?: boolean;\n checkbox?: boolean;\n checked?: boolean;\n expanded?: boolean;\n iconStart?: string;\n iconEnd?: string;\n id: string;\n name: string;\n nodes?: ItemNode[];\n parts?: string;\n selected?: boolean;\n type: ItemType;\n};\n\nexport type ActiveNode = {\n caption: string;\n iconStart?: string;\n path: string[]; // for using the scrollIntoVisible method of the tree-view-render\n};\n\nexport type ItemType = {\n id: string;\n name: string;\n};\n\ntype NodesVersionsViewType = \"tree\" | \"list\";\n"],"mappings":"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"}
|
|
@@ -5,6 +5,10 @@ export declare class GxIdeUiSplash {
|
|
|
5
5
|
* Set this to true if installation is in process
|
|
6
6
|
*/
|
|
7
7
|
ariaBusy: boolean;
|
|
8
|
+
/**
|
|
9
|
+
* The application version to display in the dialog.
|
|
10
|
+
*/
|
|
11
|
+
readonly appVersion: string;
|
|
8
12
|
/**
|
|
9
13
|
* Callback invoked when the user clicks the 'Download Docker' button.
|
|
10
14
|
*/
|
|
@@ -151,6 +151,10 @@ export { ContextMenuCallback as ContextMenuCallback4, DeleteSelectionCallback as
|
|
|
151
151
|
export { ContextMenuCallback as ContextMenuCallback5, DeleteSelectionCallback as DeleteSelectionCallback2, LoadCallback as LoadCallback9, LoadImageItemsCallback, NewObjectCallback as NewObjectCallback1, OpenSelectionCallback as OpenSelectionCallback3, SelectionObjectCallback, SelectModuleCallback as SelectModuleCallback6 } from "./components/ww-images/ww-images";
|
|
152
152
|
export namespace Components {
|
|
153
153
|
interface GxIdeAbout {
|
|
154
|
+
/**
|
|
155
|
+
* The application version to display in the dialog.
|
|
156
|
+
*/
|
|
157
|
+
"appVersion": string;
|
|
154
158
|
/**
|
|
155
159
|
* Callback invoked when the user clicks on "Details & Acknowledgements"
|
|
156
160
|
*/
|
|
@@ -2014,6 +2018,10 @@ export namespace Components {
|
|
|
2014
2018
|
"termsConfirmationRequired": boolean;
|
|
2015
2019
|
}
|
|
2016
2020
|
interface GxIdeSplash {
|
|
2021
|
+
/**
|
|
2022
|
+
* The application version to display in the dialog.
|
|
2023
|
+
*/
|
|
2024
|
+
"appVersion": string;
|
|
2017
2025
|
/**
|
|
2018
2026
|
* Callback invoked when the user clicks the 'Download Docker' button.
|
|
2019
2027
|
*/
|
|
@@ -3622,6 +3630,10 @@ declare global {
|
|
|
3622
3630
|
}
|
|
3623
3631
|
declare namespace LocalJSX {
|
|
3624
3632
|
interface GxIdeAbout {
|
|
3633
|
+
/**
|
|
3634
|
+
* The application version to display in the dialog.
|
|
3635
|
+
*/
|
|
3636
|
+
"appVersion"?: string;
|
|
3625
3637
|
/**
|
|
3626
3638
|
* Callback invoked when the user clicks on "Details & Acknowledgements"
|
|
3627
3639
|
*/
|
|
@@ -5513,6 +5525,10 @@ declare namespace LocalJSX {
|
|
|
5513
5525
|
"termsConfirmationRequired"?: boolean;
|
|
5514
5526
|
}
|
|
5515
5527
|
interface GxIdeSplash {
|
|
5528
|
+
/**
|
|
5529
|
+
* The application version to display in the dialog.
|
|
5530
|
+
*/
|
|
5531
|
+
"appVersion"?: string;
|
|
5516
5532
|
/**
|
|
5517
5533
|
* Callback invoked when the user clicks the 'Download Docker' button.
|
|
5518
5534
|
*/
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["aboutCss","CSS_BUNDLES","GxIdeAbout","_GxIdeAbout_componentLocale","set","this","_GxIdeAbout_nextLogo","getAssetPath","_GxIdeAbout_copyVersionsHandler","copying","setTimeout","navigator","clipboard","writeText","__classPrivateFieldGet","copyVersionsAdditionalText","versions","map","version","join","componentWillLoad","__classPrivateFieldSet","Locale","getComponentStrings","el","render","renderPrivacyAndTerms","privacyPolicyCallback","termsAndConditionsCallback","renderPrivacyOrTerms","h","Host","class","model","src","alt","logoAlt","length","type","onClick","disabled","copied","copy","detailsCallback","detailsAndAcknowledgmentes","hidden","privacyPolicy","termsAndConditions","copyright"],"sources":["src/components/about/about.scss?tag=gx-ide-about&encapsulation=shadow","src/components/about/about.tsx"],"sourcesContent":["$versionsListPadding: 14px;\n\n:host {\n --spacing-body-block-start: var(--mer-spacing--lg);\n --spacing-body-block-end: var(--mer-spacing--lg);\n --spacing-body-inline-start: var(--mer-spacing--md);\n --spacing-body-inline-end: var(--mer-spacing--md);\n\n display: grid;\n inline-size: 100%;\n block-size: 100%;\n gap: var(--mer-spacing--md);\n overflow: auto;\n grid-template-rows: max-content 1fr max-content;\n background-color: var(\n --elevation-background-color,\n var(--mer-surface__elevation--02)\n );\n color: var(--mer-text__on-elevation);\n text-align: center;\n}\n.section {\n // section was addad for semantics, in order to allow a footer tag.\n display: contents;\n}\n\n.main {\n overflow: auto;\n display: grid;\n grid-template-rows: 1fr max-content;\n gap: var(--mer-spacing--lg);\n}\n\n.logo {\n &__container {\n display: flex;\n flex-direction: column;\n gap: var(--mer-spacing--sm);\n align-items: center;\n margin: unset;\n }\n &__img {\n $logoSize: 28px;\n inline-size: $logoSize;\n block-size: $logoSize;\n }\n}\n.logotype {\n color: var(--mer-text__bright);\n}\n\n.versions__container {\n overflow: hidden;\n border: var(--mer-border__width--sm) solid\n var(--mer-border-color__on-elevation--01);\n border-radius: var(--mer-border__radius--sm);\n display: grid;\n grid-template-rows: 1fr max-content;\n inline-size: 100%;\n\n button {\n justify-self: center;\n min-inline-size: 72px;\n }\n}\n.versions__container-footer {\n padding: $versionsListPadding;\n}\n\n.versions__list {\n overflow: auto;\n list-style: none;\n margin: 0;\n padding: $versionsListPadding;\n display: flex;\n flex-direction: column;\n gap: var(--mer-spacing--xs);\n}\n\n.link-underlined {\n // TODO: Add link helper class in Mercury\n text-decoration: underline;\n color: var(--mer-text__on-elevation);\n &:hover {\n color: var(--mer-text__highlighted);\n }\n &:active {\n color: var(--mer-text__elevation);\n }\n}\n\n.links-container {\n display: flex;\n gap: var(--mer-spacing--xs);\n}\n\n.footer {\n // TODO: Add color helper classes in Mercury\n display: flex;\n align-items: center;\n flex-direction: column;\n gap: var(--mer-spacing--xs);\n color: var(--mer-text__complementary);\n}\n","import {\n Component,\n Host,\n h,\n Prop,\n State,\n Element,\n getAssetPath\n} from \"@stencil/core\";\n\nimport { MercuryBundles } from \"@genexus/mercury\";\nimport { Locale } from \"../../common/locale\";\n\nconst CSS_BUNDLES: MercuryBundles = [\n \"resets/box-sizing\",\n \"utils/typography\",\n \"utils/elevation\",\n \"components/button\",\n \"chameleon/scrollbar\"\n];\n\n@Component({\n tag: \"gx-ide-about\",\n styleUrl: \"about.scss\",\n shadow: true,\n assetsDirs: [\"gx-ide-assets/about\"]\n})\nexport class GxIdeAbout {\n #componentLocale: any;\n #nextLogo = getAssetPath(`./gx-ide-assets/about/images/next-logo.svg`);\n\n @Element() el: HTMLGxIdeAboutElement;\n\n /**\n * GeneXus Next version, and also related dependencies versions\n */\n @Prop() readonly versions: string[] = [];\n\n /**\n * Callback invoked when the user clicks on \"Details & Acknowledgements\"\n */\n @Prop() readonly detailsCallback: DetailsCallback;\n\n /**\n * Callback invoked when the user clicks on \"Privacy policy\"\n */\n @Prop() readonly privacyPolicyCallback: PrivacyPolicyCallback;\n\n /**\n * Callback invoked when the user clicks on \"Terms and conditions\"\n */\n @Prop() readonly termsAndConditionsCallback: TermsAndConditionsCallback;\n\n /**\n * True when the user copies the versions\n */\n @State() copying: boolean = false;\n\n async componentWillLoad() {\n this.#componentLocale = await Locale.getComponentStrings(this.el);\n }\n\n #copyVersionsHandler = () => {\n this.copying = true;\n setTimeout(() => {\n this.copying = false;\n }, 1000);\n\n navigator.clipboard.writeText(\n `${this.#componentLocale.copyVersionsAdditionalText}${this.versions\n .map(version => `- ${version}`)\n .join(\"\\n\")}`\n );\n };\n\n render() {\n const renderPrivacyAndTerms =\n this.privacyPolicyCallback && this.termsAndConditionsCallback;\n const renderPrivacyOrTerms =\n this.privacyPolicyCallback || this.termsAndConditionsCallback;\n\n return (\n <Host class=\"scrollable\">\n <ch-theme model={CSS_BUNDLES}></ch-theme>\n <section class=\"section\">\n <header>\n <figure class=\"logo__container\">\n <img\n class=\"logo__img\"\n src={this.#nextLogo}\n alt={this.#componentLocale.logoAlt}\n />\n <figcaption class=\"body-semi-bold-m logotype\">\n GeneXus Next\n </figcaption>\n </figure>\n </header>\n <div class=\"main\">\n {this.versions.length ? (\n <div class=\"versions__container elevation-1\">\n <ul class=\"versions__list scrollable\">\n {this.versions.map(version => {\n return <li class=\"body-regular-s\">{version}</li>;\n })}\n </ul>\n <div class=\"versions__container-footer\">\n <button\n class=\"button-secondary\"\n type=\"button\"\n onClick={this.#copyVersionsHandler}\n disabled={this.copying}\n >\n {this.copying\n ? this.#componentLocale.copied\n : this.#componentLocale.copy}\n {}\n </button>\n </div>\n </div>\n ) : null}\n\n {this.detailsCallback && (\n <button\n class=\"button-tertiary\"\n type=\"button\"\n onClick={this.detailsCallback}\n >\n {this.#componentLocale.detailsAndAcknowledgmentes}\n </button>\n )}\n </div>\n\n <footer class=\"body-regular-s footer\">\n {renderPrivacyOrTerms && (\n <div class=\"links-container\" hidden={!renderPrivacyAndTerms}>\n {this.privacyPolicyCallback && (\n <button\n class=\"link-underlined tiny-regular-s\"\n type=\"button\"\n onClick={this.privacyPolicyCallback}\n >\n {this.#componentLocale.privacyPolicy}\n </button>\n )}\n\n {renderPrivacyAndTerms && \"|\"}\n\n {this.termsAndConditionsCallback && (\n <button\n class=\"link-underlined tiny-regular-s\"\n type=\"button\"\n onClick={this.termsAndConditionsCallback}\n >\n {this.#componentLocale.termsAndConditions}\n </button>\n )}\n </div>\n )}\n {this.#componentLocale.copyright}\n </footer>\n </section>\n </Host>\n );\n }\n}\n\nexport type DetailsCallback = () => Promise<void>;\nexport type PrivacyPolicyCallback = () => Promise<void>;\nexport type TermsAndConditionsCallback = () => Promise<void>;\n"],"mappings":";;;;AAAA,MAAMA,IAAW;;;;;;;;;;;;;;;;;ACajB,MAAMC,IAA8B,EAClC,qBACA,oBACA,mBACA,qBACA;;MASWC,IAAU;;;IACrBC,EAAAC,IAAAC,WAAA;IACAC,EAAAF,IAAAC,MAAYE,EAAa;IAiCzBC,EAAAJ,IAAAC,OAAuB;MACrBA,KAAKI,UAAU;MACfC,YAAW;QACTL,KAAKI,UAAU;AAAK,UACnB;MAEHE,UAAUC,UAAUC,UAClB,GAAGC,EAAAT,MAAIF,GAAA,KAAkBY,6BAA6BV,KAAKW,SACxDC,KAAIC,KAAW,KAAKA,MACpBC,KAAK;AACT;oBApCmC;;;;mBAoBV;;EAE5B,uBAAMC;IACJC,EAAAhB,MAAIF,SAA0BmB,EAAOC,oBAAoBlB,KAAKmB,KAAG;;EAgBnE,MAAAC;IACE,MAAMC,IACJrB,KAAKsB,yBAAyBtB,KAAKuB;IACrC,MAAMC,IACJxB,KAAKsB,yBAAyBtB,KAAKuB;IAErC,OACEE,EAACC,GAAI;MAACC,OAAM;OACVF,EAAA;MAAUG,OAAOhC;QACjB6B,EAAA;MAASE,OAAM;OACbF,EAAA,gBACEA,EAAA;MAAQE,OAAM;OACZF,EAAA;MACEE,OAAM;MACNE,KAAKpB,EAAAT,MAAIC,GAAA;MACT6B,KAAKrB,EAAAT,MAAIF,GAAA,KAAkBiC;QAE7BN,EAAA;MAAYE,OAAM;OAA2B,mBAKjDF,EAAA;MAAKE,OAAM;OACR3B,KAAKW,SAASqB,SACbP,EAAA;MAAKE,OAAM;OACTF,EAAA;MAAIE,OAAM;OACP3B,KAAKW,SAASC,KAAIC,KACVY,EAAA;MAAIE,OAAM;OAAkBd,OAGvCY,EAAA;MAAKE,OAAM;OACTF,EAAA;MACEE,OAAM;MACNM,MAAK;MACLC,SAASzB,EAAAT,MAAIG,GAAA;MACbgC,UAAUnC,KAAKI;OAEdJ,KAAKI,UACFK,EAAAT,MAAIF,GAAA,KAAkBsC,SACtB3B,EAAAT,MAAIF,GAAA,KAAkBuC,UAK9B,MAEHrC,KAAKsC,mBACJb,EAAA;MACEE,OAAM;MACNM,MAAK;MACLC,SAASlC,KAAKsC;OAEb7B,EAAAT,MAAIF,GAAA,KAAkByC,8BAK7Bd,EAAA;MAAQE,OAAM;OACXH,KACCC,EAAA;MAAKE,OAAM;MAAkBa,SAASnB;OACnCrB,KAAKsB,yBACJG,EAAA;MACEE,OAAM;MACNM,MAAK;MACLC,SAASlC,KAAKsB;OAEbb,EAAAT,MAAIF,GAAA,KAAkB2C,gBAI1BpB,KAAyB,KAEzBrB,KAAKuB,8BACJE,EAAA;MACEE,OAAM;MACNM,MAAK;MACLC,SAASlC,KAAKuB;OAEbd,EAAAT,MAAIF,GAAA,KAAkB4C,sBAK9BjC,EAAAT,MAAIF,GAAA,KAAkB6C"}
|