@genexus/genexus-ide-ui 2.1.0 → 2.1.2
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/gx-ide-sign-in-result.cjs.entry.js +5 -3
- package/dist/cjs/gx-ide-sign-in-result.cjs.entry.js.map +1 -1
- package/dist/cjs/gx-ide-ww-images.cjs.entry.js +1 -1
- package/dist/cjs/gx-ide-ww-images.cjs.entry.js.map +1 -1
- package/dist/collection/components/sign-in-result/sign-in-result.css +5 -2
- package/dist/collection/components/sign-in-result/sign-in-result.js +4 -2
- package/dist/collection/components/sign-in-result/sign-in-result.js.map +1 -1
- package/dist/collection/components/ww-images/ww-images.css +14 -5
- package/dist/components/gx-ide-sign-in-result.js +5 -3
- package/dist/components/gx-ide-sign-in-result.js.map +1 -1
- package/dist/components/gx-ide-ww-images.js +1 -1
- package/dist/components/gx-ide-ww-images.js.map +1 -1
- package/dist/esm/gx-ide-sign-in-result.entry.js +5 -3
- package/dist/esm/gx-ide-sign-in-result.entry.js.map +1 -1
- package/dist/esm/gx-ide-ww-images.entry.js +1 -1
- package/dist/esm/gx-ide-ww-images.entry.js.map +1 -1
- package/dist/genexus-ide-ui/genexus-ide-ui.esm.js +1 -1
- package/dist/genexus-ide-ui/{p-2d60e5d9.entry.js → p-520c3763.entry.js} +22 -22
- package/dist/genexus-ide-ui/p-520c3763.entry.js.map +1 -0
- package/dist/genexus-ide-ui/{p-38ae0c55.entry.js → p-ca1b9b8a.entry.js} +11 -10
- package/dist/genexus-ide-ui/p-ca1b9b8a.entry.js.map +1 -0
- package/package.json +1 -1
- package/dist/genexus-ide-ui/p-2d60e5d9.entry.js.map +0 -1
- package/dist/genexus-ide-ui/p-38ae0c55.entry.js.map +0 -1
|
@@ -32,7 +32,7 @@ const mapOptionsToComboBoxItemModel = e => {
|
|
|
32
32
|
}));
|
|
33
33
|
};
|
|
34
34
|
|
|
35
|
-
const h = '/*@container queries*/\n/* hiChar styles\nFound 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.\n*/\n:host {\n container-type: inline-size;\n display: grid;\n block-size: 100%;\n overflow: auto;\n grid-template-rows: max-content 1fr max-content;\n}\n\n.section {\n display: contents;\n}\n\n.header {\n grid-template-areas: "name module-folder" "advanced-filter-accordion advanced-filter-accordion";\n grid-template-columns: 1fr 1fr;\n grid-auto-rows: max-content max-content;\n}\n\n.name {\n grid-area: name;\n}\n\n.module-folder {\n grid-area: module-folder;\n}\n\n.advanced-filter-accordion {\n grid-area: advanced-filter-accordion;\n}\n\n.main {\n --sidebar-width:
|
|
35
|
+
const h = '/*@container queries*/\n/* hiChar styles\nFound 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.\n*/\n:host {\n container-type: inline-size;\n display: grid;\n block-size: 100%;\n overflow: auto;\n grid-template-rows: max-content 1fr max-content;\n}\n\n.section {\n display: contents;\n}\n\n.header {\n grid-template-areas: "name module-folder" "advanced-filter-accordion advanced-filter-accordion";\n grid-template-columns: 1fr 1fr;\n grid-auto-rows: max-content max-content;\n}\n\n.name {\n grid-area: name;\n}\n\n.module-folder {\n grid-area: module-folder;\n}\n\n.advanced-filter-accordion {\n grid-area: advanced-filter-accordion;\n}\n\n.main {\n --sidebar-width: 376px;\n display: grid;\n grid-template-columns: 1fr var(--sidebar-width);\n overflow: auto;\n padding-block-start: var(--size-16);\n}\n\n.main__grid {\n overflow: auto;\n position: relative;\n}\n\n.tabular-grid-ww-images {\n overflow: auto;\n border-inline-end: var(--section-common-border);\n}\n\nch-tabular-grid-rowset-empty {\n position: absolute;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n inline-size: 100%;\n z-index: 1;\n}\n\n.main__aside {\n overflow: auto;\n display: grid;\n grid-template-rows: max-content 1fr;\n}\n\n.main__filter {\n display: grid;\n grid-auto-rows: max-content;\n grid-template-columns: 1fr 1fr 1fr;\n grid-template-areas: "category options after" "style language user" "density layer date-time" "search-by-contents search-by-contents button-reset";\n overflow: auto;\n}\n\n.category {\n grid-area: category;\n}\n\n.options {\n grid-area: options;\n}\n\n.after-date-time {\n grid-area: after;\n}\n\n.user {\n grid-area: user;\n}\n\n.date-time {\n grid-area: date-time;\n}\n\n.style {\n grid-area: style;\n}\n\n.language {\n grid-area: language;\n}\n\n.density {\n grid-area: density;\n}\n\n.layer {\n grid-area: layer;\n}\n\n.search-by-contents {\n grid-area: search-by-contents;\n}\n\n.button-reset {\n grid-area: button-reset;\n align-self: end;\n justify-self: end;\n}\n\n.main__images-container {\n display: grid;\n grid-template-columns: repeat(4, 1fr);\n gap: var(--size-8);\n position: relative;\n z-index: 1;\n}\n.main__images-container .figure {\n margin: 0;\n background-color: var(--color-accent-surface-elevation-2);\n display: grid;\n grid-template-rows: minmax(0, 1fr) max-content;\n gap: var(--size-4);\n padding: var(--size-8);\n border-radius: var(--size-4);\n opacity: 0;\n animation: fadeIn 300ms forwards;\n aspect-ratio: 1/1;\n}\n.main__images-container .figure__picture {\n display: flex;\n align-items: center;\n justify-content: center;\n min-block-size: 0;\n}\n.main__images-container .figure__img {\n display: block;\n max-inline-size: 100%;\n max-block-size: 100%;\n inline-size: auto;\n block-size: auto;\n object-fit: contain;\n}\n.main__images-container .figure__figcaption {\n text-align: center;\n font-size: var(--font-size-body-xs);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n inline-size: 100%;\n}\n\n.tabular-grid-ww-images ch-tabular-grid-cell:is(:nth-child(1), :nth-child(2), :nth-child(3), :nth-child(4), :nth-child(5), :nth-child(6), :nth-child(7)) {\n align-items: start;\n justify-content: start;\n display: inline-block;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n min-inline-size: 0;\n}\n@keyframes fadeIn {\n to {\n opacity: 1;\n }\n}\n@container (max-width: 992px) {\n .main {\n --sidebar-width: 288px;\n }\n\n .main__images-container {\n grid-template-columns: repeat(3, 1fr);\n }\n}\n@container (max-width: 768px) {\n .main {\n --sidebar-width: 200px;\n }\n\n .main__images-container {\n grid-template-columns: repeat(2, 1fr);\n }\n}\n@container (max-width: 640px) {\n .main {\n --sidebar-width: 112px;\n }\n\n .main__images-container {\n grid-template-columns: 1fr;\n }\n}';
|
|
36
36
|
|
|
37
37
|
var d = undefined && undefined.__classPrivateFieldGet || function(e, t, i, s) {
|
|
38
38
|
if (i === "a" && !s) throw new TypeError("Private accessor was defined without a getter");
|
|
@@ -47,7 +47,7 @@ var c = undefined && undefined.__classPrivateFieldSet || function(e, t, i, s, a)
|
|
|
47
47
|
return s === "a" ? a.call(e, i) : a ? a.value = i : t.set(e, i), i;
|
|
48
48
|
};
|
|
49
49
|
|
|
50
|
-
var f, u, m, g, b, p,
|
|
50
|
+
var f, u, m, g, b, p, y, w, v, k, C, x, M, _, W, V, z, I, D, T, j, S, F, N, A, L, E, U, P, $, H, q, B, G, R, X, Y, J, K, O, Q;
|
|
51
51
|
|
|
52
52
|
const Z = [ "resets/box-sizing", "components/accordion", "components/button", "components/checkbox", "components/combo-box", "components/edit", "components/icon", "components/tabular-grid", "components/sidebar", "utils/form", "utils/layout", "utils/typography", "utils/spacing", "chameleon/scrollbar" ];
|
|
53
53
|
|
|
@@ -87,9 +87,9 @@ const le = class {
|
|
|
87
87
|
g.set(this, []);
|
|
88
88
|
b.set(this, "advanced-filter");
|
|
89
89
|
p.set(this, new Map);
|
|
90
|
-
|
|
90
|
+
y.set(this, void 0);
|
|
91
91
|
// Only keep refs that are actually needed for operations (event listeners)
|
|
92
|
-
|
|
92
|
+
w.set(this, void 0);
|
|
93
93
|
/**
|
|
94
94
|
* Flag to prevent triggering #getImages on initial load
|
|
95
95
|
*/ v.set(this, true);
|
|
@@ -97,7 +97,7 @@ const le = class {
|
|
|
97
97
|
this.deleteSelectionCallback(this.selectedObjectsIds);
|
|
98
98
|
}));
|
|
99
99
|
C.set(this, (() => {
|
|
100
|
-
d(this,
|
|
100
|
+
d(this, y, "f").selectAllRows(false);
|
|
101
101
|
}));
|
|
102
102
|
/**
|
|
103
103
|
* Individual handler functions for each filter control
|
|
@@ -134,10 +134,10 @@ const le = class {
|
|
|
134
134
|
T.set(this, (e => {
|
|
135
135
|
this.filterStyleValue = e.detail;
|
|
136
136
|
}));
|
|
137
|
-
|
|
137
|
+
j.set(this, (e => {
|
|
138
138
|
this.filterLanguageValue = e.detail;
|
|
139
139
|
}));
|
|
140
|
-
|
|
140
|
+
S.set(this, (e => {
|
|
141
141
|
this.filterDensityValue = e.detail;
|
|
142
142
|
}));
|
|
143
143
|
F.set(this, (e => {
|
|
@@ -145,8 +145,8 @@ const le = class {
|
|
|
145
145
|
}));
|
|
146
146
|
N.set(this, (() => {
|
|
147
147
|
// Module change is handled via event listener, but we update state
|
|
148
|
-
if (d(this,
|
|
149
|
-
this.filterModuleValue = d(this,
|
|
148
|
+
if (d(this, w, "f")) {
|
|
149
|
+
this.filterModuleValue = d(this, w, "f").value;
|
|
150
150
|
}
|
|
151
151
|
}));
|
|
152
152
|
A.set(this, (() => {
|
|
@@ -185,11 +185,11 @@ const le = class {
|
|
|
185
185
|
}));
|
|
186
186
|
U.set(this, (() => {
|
|
187
187
|
/* module/folder */
|
|
188
|
-
d(this,
|
|
188
|
+
d(this, w, "f").addEventListener("valueChanged", (() => {
|
|
189
189
|
d(this, N, "f").call(this);
|
|
190
190
|
}));
|
|
191
191
|
// for grid selection
|
|
192
|
-
d(this,
|
|
192
|
+
d(this, y, "f").addEventListener("selectionChanged", (e => {
|
|
193
193
|
this.selectedObjectsIds = e.detail.rowsId;
|
|
194
194
|
this.selectionObjectChangedCallback(this.selectedObjectsIds);
|
|
195
195
|
if (this.selectedObjectsIds.length === 0) {
|
|
@@ -238,10 +238,10 @@ const le = class {
|
|
|
238
238
|
this.imagesSelectedItems = a;
|
|
239
239
|
}));
|
|
240
240
|
}));
|
|
241
|
-
d(this,
|
|
241
|
+
d(this, y, "f").addEventListener("rowDoubleClicked", (() => {
|
|
242
242
|
d(this, B, "f").call(this);
|
|
243
243
|
}));
|
|
244
|
-
d(this,
|
|
244
|
+
d(this, y, "f").addEventListener("rowContextMenu", (e => {
|
|
245
245
|
e.preventDefault();
|
|
246
246
|
e.stopPropagation();
|
|
247
247
|
this.contextMenuCallback({
|
|
@@ -309,7 +309,7 @@ const le = class {
|
|
|
309
309
|
value: this.filterModuleValue,
|
|
310
310
|
defaultValue: this.defaultModule,
|
|
311
311
|
selectEntityCallback: this.selectModuleCallback,
|
|
312
|
-
ref: e => c(this,
|
|
312
|
+
ref: e => c(this, w, e, "f")
|
|
313
313
|
})), t("ch-accordion-render", {
|
|
314
314
|
// modified
|
|
315
315
|
class: "accordion-outlined advanced-filter-accordion",
|
|
@@ -427,7 +427,7 @@ const le = class {
|
|
|
427
427
|
value: this.filterLanguageValue,
|
|
428
428
|
disabled: !this.languages,
|
|
429
429
|
model: this.languagesComboBoxModel,
|
|
430
|
-
onInput: d(this,
|
|
430
|
+
onInput: d(this, j, "f")
|
|
431
431
|
})), t("div", {
|
|
432
432
|
// density
|
|
433
433
|
class: "field field-block"
|
|
@@ -440,7 +440,7 @@ const le = class {
|
|
|
440
440
|
value: this.filterDensityValue,
|
|
441
441
|
disabled: !this.densities,
|
|
442
442
|
model: this.densitiesComboBoxModel,
|
|
443
|
-
onInput: d(this,
|
|
443
|
+
onInput: d(this, S, "f")
|
|
444
444
|
})), t("div", {
|
|
445
445
|
// layer
|
|
446
446
|
class: "field field-block"
|
|
@@ -503,7 +503,7 @@ const le = class {
|
|
|
503
503
|
main__grid: true
|
|
504
504
|
}
|
|
505
505
|
}, t("ch-tabular-grid", {
|
|
506
|
-
ref: e => c(this,
|
|
506
|
+
ref: e => c(this, y, e, "f"),
|
|
507
507
|
rowSelectionMode: "multiple",
|
|
508
508
|
class: "tabular-grid tabular-grid-ww-images",
|
|
509
509
|
columnResizeMode: "splitter"
|
|
@@ -635,7 +635,7 @@ const le = class {
|
|
|
635
635
|
}, "f");
|
|
636
636
|
}));
|
|
637
637
|
Q.set(this, (() => {
|
|
638
|
-
d(this,
|
|
638
|
+
d(this, y, "f").selectAllRows();
|
|
639
639
|
}));
|
|
640
640
|
this.categoriesComboBoxModel = [];
|
|
641
641
|
this.densitiesComboBoxModel = [];
|
|
@@ -897,10 +897,10 @@ const le = class {
|
|
|
897
897
|
};
|
|
898
898
|
|
|
899
899
|
u = new WeakMap, m = new WeakMap, g = new WeakMap, b = new WeakMap, p = new WeakMap,
|
|
900
|
-
|
|
900
|
+
y = new WeakMap, w = new WeakMap, v = new WeakMap, k = new WeakMap, C = new WeakMap,
|
|
901
901
|
x = new WeakMap, M = new WeakMap, _ = new WeakMap, W = new WeakMap, V = new WeakMap,
|
|
902
|
-
z = new WeakMap, I = new WeakMap, D = new WeakMap, T = new WeakMap,
|
|
903
|
-
|
|
902
|
+
z = new WeakMap, I = new WeakMap, D = new WeakMap, T = new WeakMap, j = new WeakMap,
|
|
903
|
+
S = new WeakMap, F = new WeakMap, N = new WeakMap, A = new WeakMap, L = new WeakMap,
|
|
904
904
|
E = new WeakMap, U = new WeakMap, $ = new WeakMap, H = new WeakMap, q = new WeakMap,
|
|
905
905
|
B = new WeakMap, G = new WeakMap, R = new WeakMap, X = new WeakMap, Y = new WeakMap,
|
|
906
906
|
J = new WeakMap, K = new WeakMap, O = new WeakMap, Q = new WeakMap, f = new WeakSet,
|
|
@@ -933,4 +933,4 @@ P = function _GxIdeWWImages_getImageValue(e, t) {
|
|
|
933
933
|
le.style = h;
|
|
934
934
|
|
|
935
935
|
export { le as gx_ide_ww_images };
|
|
936
|
-
//# sourceMappingURL=p-
|
|
936
|
+
//# sourceMappingURL=p-520c3763.entry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["mapOptionsToComboBoxItemModel","options","map","option","value","id","caption","label","startImgSrc","_a","iconName","wwImagesCss","CSS_BUNDLES","ALL_DESCENDANTS_VALUE","MODIFIED_VALUE","TODAY","RESET_ICON","getIconPath","category","name","colorType","SEARCH_ICON","NOTICE_ICON","GxIdeWWImages","_GxIdeWWImages_componentLocale","set","this","_GxIdeWWImages_filterInitialData","_GxIdeWWImages_ACCORDION_MODEL","_GxIdeWWImages_ACCORDION_FILTER_ID","_GxIdeWWImages_imagesMap","Map","_GxIdeWWImages_chGridEl","_GxIdeWWImages_filterModuleEl","_GxIdeWWImages_isInitialLoad","_GxIdeWWImages_deleteSelectionCallbackHandler","deleteSelectionCallback","selectedObjectsIds","_GxIdeWWImages_deselectAll","__classPrivateFieldGet","selectAllRows","_GxIdeWWImages_handleNameChange","event","filterNameValue","detail","target","_GxIdeWWImages_handleSearchContentsChange","filterSearchContentsValue","_GxIdeWWImages_applyDefaultCategory","defaultCategory","categoriesComboBoxModel","length","categoryExists","some","item","filterCategoryValue","_GxIdeWWImages_handleCategoryChange","_GxIdeWWImages_handleAllDescendantsChange","filterAllDescendantsValue","_GxIdeWWImages_handleAfterTypeChange","filterAfterTypeValue","afterCurrentValue","_GxIdeWWImages_handleUserChange","filterUserValue","_GxIdeWWImages_handleModifiedDateChange","filterModifiedDateValue","_GxIdeWWImages_handleStyleChange","filterStyleValue","_GxIdeWWImages_handleLanguageChange","filterLanguageValue","_GxIdeWWImages_handleDensityChange","filterDensityValue","_GxIdeWWImages_handleLayerChange","filterLayerValue","_GxIdeWWImages_handleModuleChange","filterModuleValue","_GxIdeWWImages_filterImagesInformationHandler","tabularGridData","images","_GxIdeWWImages_getImages","clear","filters","searchContents","parent","allDescendants","modifiedAfter","modifiedBy","modifiedDate","Date","undefined","style","language","density","layer","loadCallback","then","items","call","_GxIdeWWImages_getToday","now","date","toISOString","split","time","slice","_GxIdeWWImages_addEventListeners","addEventListener","ev","rowsId","selectionObjectChangedCallback","imagesSelectedItems","cachedItems","idsToLoad","forEach","selectedId","has","get","push","currentSelection","sort","join","loadPromises","loadImageItemsCallback","Promise","all","loadedItemsArrays","currentSelectionAfterLoad","allImageItems","_GxIdeWWImages_openSelectionCallBackHandler","preventDefault","stopPropagation","contextMenuCallback","selection","selectedRowsId","clientX","clientY","_GxIdeWWImages_sortImages","a","b","order","orderCriteria","valueA","_GxIdeWWImages_instances","_GxIdeWWImages_getImageValue","toUpperCase","valueB","ascending","_GxIdeWWImages_handleColumnSortChanged","e","columnId","sortDirection","_GxIdeWWImages_newObjectCallbackHandler","newObjectCallback","openSelectionCallback","_GxIdeWWImages_toggleModifiedControls","enabledModifiedControls","_GxIdeWWImages_renderHeader","h","class","htmlFor","filter","autoFocus","debounce","config","inputDebounce","onInput","moduleFolder","labelPosition","defaultValue","defaultModule","selectEntityCallback","selectModuleCallback","ref","el","__classPrivateFieldSet","model","slot","disabled","categories","checkedValue","modified","afterLabel","filterAfterOptions","user","FILTER_AFTER","DATE_TIME","dateTime","type","max","styles","stylesComboBoxModel","languages","languagesComboBoxModel","densities","densitiesComboBoxModel","layers","layersComboBoxModel","search","placeholder","searchContentsPlaceholder","onClick","_GxIdeWWImages_resetFilterHandler","src","resetFilters","_GxIdeWWImages_renderFilter","_GxIdeWWImages_renderImages","url","alt","_GxIdeWWImages_renderTabularGrid","commonColSize","main__grid","rowSelectionMode","columnResizeMode","columnName","settingable","size","tabularGrid","colSize","maxContent","resizable","sortable","tableHead","onColumnSortChanged","module","description","lastUser","importDate","obj","rowid","icon","formatDate","isAnimated","stateIconSrc","stateTitle","emptyState","title","key","modifiedDateTime","modifiedUser","_GxIdeWWImages_saveInitialFilterData","_GxIdeWWImages_selectAll","categoriesChanged","newCategories","defaultCategoryChanged","densitiesChanged","newDensities","languagesChanged","newLanguages","layersChanged","newLayers","stylesChanged","newStyles","connectedCallback","componentDidLoad","componentWillLoad","Locale","getComponentStrings","afterNone","NONE","IMPORT","LAST_BUILD","accordionCaption","expanded","keyDownHandler","eventInfo","document","activeElement","reload","filterNameValueChanged","filterSearchContentsValueChanged","filterCategoryValueChanged","filterAllDescendantsValueChanged","filterAfterTypeValueChanged","filterUserValueChanged","filterModifiedDateValueChanged","filterStyleValueChanged","filterLanguageValueChanged","filterDensityValueChanged","filterLayerValueChanged","filterModuleValueChanged","render","Host","objCount","matching","footer","btnSelectAll","btnNew","image","toLowerCase"],"sources":["src/components/ww-images/helpers.tsx","src/components/ww-images/ww-images.scss?tag=gx-ide-ww-images&encapsulation=shadow","src/components/ww-images/ww-images.tsx"],"sourcesContent":["import { ComboBoxModel } from \"@genexus/chameleon-controls-library\";\nimport { GxOption } from \"../..\";\n\nexport const mapOptionsToComboBoxItemModel = (\n options: GxOption[]\n): ComboBoxModel => {\n if (!options) {\n return [];\n }\n return options.map(option => {\n return {\n value: option.id,\n caption: option.label,\n startImgSrc: option.iconName ?? \"\"\n };\n });\n};\n","@import \"../../global/gx-ide-mixins.scss\";\n@import \"../../../node_modules/@genexus/mercury/dist/assets/scss/helpers.scss\";\n\n:host {\n container-type: inline-size;\n display: grid;\n block-size: 100%;\n overflow: auto;\n grid-template-rows: max-content 1fr max-content;\n}\n.section {\n display: contents;\n}\n\n// - - - - - - - - - - - -\n// Header\n// - - - - - - - - - - - -\n\n// First row\n.header {\n grid-template-areas:\n \"name module-folder\"\n \"advanced-filter-accordion advanced-filter-accordion\";\n grid-template-columns: 1fr 1fr;\n grid-auto-rows: max-content max-content;\n}\n\n// Accordion Advanced Filter\n.name {\n grid-area: name;\n}\n.module-folder {\n grid-area: module-folder;\n}\n.advanced-filter-accordion {\n grid-area: advanced-filter-accordion;\n}\n\n// - - - - - - - - - - - -\n// Main\n// - - - - - - - - - - - -\n\n.main {\n --sidebar-width: 376px;\n display: grid;\n grid-template-columns: 1fr var(--sidebar-width);\n overflow: auto;\n padding-block-start: var(--size-16);\n}\n\n.main__grid {\n overflow: auto;\n position: relative;\n}\n.tabular-grid-ww-images {\n overflow: auto;\n border-inline-end: var(--section-common-border);\n}\n\nch-tabular-grid-rowset-empty {\n position: absolute;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n inline-size: 100%;\n z-index: 1;\n}\n\n// main aside\n.main__aside {\n overflow: auto;\n display: grid;\n grid-template-rows: max-content 1fr;\n}\n.main__filter {\n display: grid;\n grid-auto-rows: max-content;\n grid-template-columns: 1fr 1fr 1fr;\n grid-template-areas:\n \"category options after\"\n \"style language user\"\n \"density layer date-time\"\n \"search-by-contents search-by-contents button-reset\";\n overflow: auto;\n}\n.category {\n grid-area: category;\n}\n.options {\n grid-area: options;\n}\n.after-date-time {\n grid-area: after;\n}\n.user {\n grid-area: user;\n}\n.date-time {\n grid-area: date-time;\n}\n.style {\n grid-area: style;\n}\n.language {\n grid-area: language;\n}\n.density {\n grid-area: density;\n}\n.layer {\n grid-area: layer;\n}\n.search-by-contents {\n grid-area: search-by-contents;\n}\n.button-reset {\n grid-area: button-reset;\n align-self: end;\n justify-self: end;\n}\n\n// - - - - - - - - - - - -\n// Images Grid\n// - - - - - - - - - - - -\n\n.main__images-container {\n display: grid;\n grid-template-columns: repeat(4, 1fr);\n gap: var(--size-8);\n position: relative;\n z-index: 1;\n\n .figure {\n margin: 0;\n background-color: var(--color-accent-surface-elevation-2);\n display: grid;\n grid-template-rows: minmax(0, 1fr) max-content;\n gap: var(--size-4);\n padding: var(--size-8);\n border-radius: var(--size-4);\n opacity: 0;\n animation: fadeIn 300ms forwards;\n aspect-ratio: 1 / 1;\n }\n .figure__picture {\n display: flex;\n align-items: center;\n justify-content: center;\n min-block-size: 0;\n }\n .figure__img {\n display: block;\n max-inline-size: 100%;\n max-block-size: 100%;\n inline-size: auto;\n block-size: auto;\n object-fit: contain;\n }\n .figure__figcaption {\n text-align: center;\n font-size: var(--font-size-body-xs);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n inline-size: 100%;\n }\n}\n\n@include tabular-grid-cell-layout(\n $tabular-grid-selector: \".tabular-grid-ww-images\",\n $tabular-grid-cell-node-type: \"text\",\n $tabular-grid-cell-apply-ellipsis: true,\n $tabular-grid-affected-columns-nth-list: (\n 1,\n 2,\n 3,\n 4,\n 5,\n 6,\n 7\n )\n);\n\n@keyframes fadeIn {\n to {\n opacity: 1;\n }\n}\n\n// - - - - - - - - - - - -\n// Responsive\n// - - - - - - - - - - - -\n\n@container (max-width: 992px) {\n .main {\n --sidebar-width: 288px;\n }\n .main__images-container {\n grid-template-columns: repeat(3, 1fr);\n }\n}\n\n@container (max-width: 768px) {\n .main {\n --sidebar-width: 200px;\n }\n .main__images-container {\n grid-template-columns: repeat(2, 1fr);\n }\n}\n\n@container (max-width: 640px) {\n .main {\n --sidebar-width: 112px;\n }\n .main__images-container {\n grid-template-columns: 1fr;\n }\n}\n","/* eslint-disable @stencil-community/own-props-must-be-private */\n/* STENCIL IMPORTS */\nimport {\n Component,\n Element,\n Host,\n Listen,\n Method,\n Prop,\n State,\n Watch,\n h\n} from \"@stencil/core\";\n/* OTHER LIBRARIES IMPORTS */\nimport {\n AccordionModel,\n ChGridRowContextMenuEvent,\n ComboBoxModel\n} from \"@genexus/chameleon-controls-library\";\nimport { getIconPath, MercuryBundles } from \"@genexus/mercury\";\n/* CUSTOM IMPORTS */\nimport { FILTER_AFTER } from \"../../common/constants\";\nimport { config } from \"../../common/config\";\nimport { formatDate } from \"../../common/helpers\";\nimport { Locale } from \"../../common/locale\";\nimport { ContextMenuInfo, EntityData, GxOption } from \"../../common/types\";\nimport { mapOptionsToComboBoxItemModel } from \"./helpers\";\n\nconst CSS_BUNDLES: MercuryBundles = [\n \"resets/box-sizing\",\n \"components/accordion\",\n \"components/button\",\n \"components/checkbox\",\n \"components/combo-box\",\n \"components/edit\",\n \"components/icon\",\n \"components/tabular-grid\",\n \"components/sidebar\",\n \"utils/form\",\n \"utils/layout\",\n \"utils/typography\",\n \"utils/spacing\",\n \"chameleon/scrollbar\"\n];\n\nconst ALL_DESCENDANTS_VALUE = \"all-descendants\";\nconst MODIFIED_VALUE = \"modified\";\n\nlet TODAY: string = null;\n\n// icons\nconst RESET_ICON = getIconPath({\n category: \"gemini-tools\",\n name: \"reset\",\n colorType: \"interactive\"\n});\nconst SEARCH_ICON = getIconPath({\n category: \"gemini-tools\",\n name: \"search\",\n colorType: \"neutral\"\n});\nconst NOTICE_ICON = getIconPath({\n category: \"gemini-tools\",\n name: \"notice\",\n colorType: \"on-elevation\"\n});\n\n@Component({\n tag: \"gx-ide-ww-images\",\n styleUrl: \"ww-images.scss\",\n shadow: true,\n assetsDirs: [\"gx-ide-assets/ww-images\"]\n})\nexport class GxIdeWWImages {\n /**\n * The component hard-coded strings translations.\n */\n #componentLocale: any;\n #filterInitialData: FilerInitialData;\n #ACCORDION_MODEL: AccordionModel = [];\n #ACCORDION_FILTER_ID = \"advanced-filter\";\n\n #imagesMap: Map<string, ImageItemData[]> = new Map();\n\n @Element() el: HTMLGxIdeWwImagesElement;\n\n #chGridEl!: HTMLChTabularGridElement;\n // Only keep refs that are actually needed for operations (event listeners)\n #filterModuleEl!: HTMLGxIdeEntitySelectorElement;\n\n // representations of GxOption[] as ComboBoxModel.\n @State() categoriesComboBoxModel: ComboBoxModel = [];\n @State() densitiesComboBoxModel: ComboBoxModel = [];\n @State() languagesComboBoxModel: ComboBoxModel = [];\n @State() layersComboBoxModel: ComboBoxModel = [];\n @State() stylesComboBoxModel: ComboBoxModel = [];\n\n /**\n * The current value of the \"After\" combo box options.\n */\n @State() afterCurrentValue: string;\n\n /**\n * The options for the \"After\" combo-box\n */\n @State() filterAfterOptions: ComboBoxModel;\n\n /**\n * Image data to be displayed in the tabular grid (filtered from server and sorted)\n */\n @State() tabularGridData: ImageData[] = [];\n\n /**\n * Images rendered in the table\n */\n @State() images: ImageData[] = [];\n\n /**\n * Items of the selected image\n */\n @State() imagesSelectedItems: ImageItemData[] = [];\n\n /**\n * Selected images in the images table\n */\n @State() selectedObjectsIds: string[] = [];\n\n /**\n * When true, modified controls will be enabled, otherwise disabled.\n */\n @State() enabledModifiedControls: boolean = false;\n\n /**\n * Sorting order for images table\n */\n @State() order: { orderCriteria: string | null; ascending: boolean | null } =\n {\n orderCriteria: null,\n ascending: null\n };\n\n /**\n * Filter state variables\n */\n @State() filterNameValue = \"\";\n @State() filterSearchContentsValue = \"\";\n @State() filterCategoryValue: string;\n @State() filterAllDescendantsValue = false;\n @State() filterAfterTypeValue: string;\n @State() filterUserValue = \"\";\n @State() filterModifiedDateValue = \"\";\n @State() filterStyleValue: string;\n @State() filterLanguageValue: string;\n @State() filterDensityValue: string;\n @State() filterLayerValue: string;\n @State() filterModuleValue: EntityData;\n\n /**\n * Flag to prevent triggering #getImages on initial load\n */\n #isInitialLoad = true;\n\n /**\n * Categories rendered in the filter selector\n */\n @Prop() readonly categories!: GxOption[];\n @Watch(\"categories\")\n categoriesChanged(newCategories: GxOption[]) {\n this.categoriesComboBoxModel = mapOptionsToComboBoxItemModel(newCategories);\n this.#applyDefaultCategory();\n }\n\n /**\n * Function to expand data when right-click\n */\n @Prop() readonly contextMenuCallback!: ContextMenuCallback;\n\n /**\n * Default value for the 'categories' filter\n */\n @Prop() readonly defaultCategory: string;\n @Watch(\"defaultCategory\")\n defaultCategoryChanged() {\n this.#applyDefaultCategory();\n }\n\n /**\n * Default value for the module/folder filter\n */\n @Prop() readonly defaultModule: EntityData;\n\n /**\n * Function to delete the selected images.\n */\n @Prop() readonly deleteSelectionCallback!: DeleteSelectionCallback;\n\n /**\n * Densities rendered in the filter selector\n */\n @Prop() readonly densities!: GxOption[];\n @Watch(\"densities\")\n densitiesChanged(newDensities: GxOption[]) {\n this.densitiesComboBoxModel = mapOptionsToComboBoxItemModel(newDensities);\n }\n\n /**\n * Languages rendered in the filter selector\n */\n @Prop() readonly languages!: GxOption[];\n @Watch(\"languages\")\n languagesChanged(newLanguages: GxOption[]) {\n this.languagesComboBoxModel = mapOptionsToComboBoxItemModel(newLanguages);\n }\n\n /**\n * Layers rendered in the filter selector\n */\n @Prop() readonly layers!: GxOption[];\n @Watch(\"layers\")\n layersChanged(newLayers: GxOption[]) {\n this.layersComboBoxModel = mapOptionsToComboBoxItemModel(newLayers);\n }\n\n /**\n * Function that returns a list of images for the table\n */\n @Prop() readonly loadCallback!: LoadCallback;\n\n /**\n * Function that returns a list of items for the selected image\n */\n @Prop() readonly loadImageItemsCallback!: LoadImageItemsCallback;\n\n /**\n * Callback invoked when user press New button.\n */\n @Prop() readonly newObjectCallback!: NewObjectCallback;\n\n /**\n * Function to expand data for double-clicked or entered images\n */\n @Prop() readonly openSelectionCallback!: OpenSelectionCallback;\n\n /**\n * Callback invoked when an action is executed on the Module/Folder filter.\n */\n @Prop() readonly selectModuleCallback!: SelectModuleCallback;\n\n /**\n * Callback invoked when an item is selected\n */\n @Prop() readonly selectionObjectChangedCallback!: SelectionObjectCallback;\n\n /**\n * Styles rendered in the filter style selector\n */\n @Prop() readonly styles!: GxOption[];\n @Watch(\"styles\")\n stylesChanged(newStyles: GxOption[]) {\n this.stylesComboBoxModel = mapOptionsToComboBoxItemModel(newStyles);\n }\n\n async connectedCallback() {\n TODAY = this.#getToday();\n }\n\n componentDidLoad() {\n this.#addEventListeners();\n this.#getImages();\n this.#saveInitialFilterData();\n this.#isInitialLoad = false;\n }\n\n async componentWillLoad() {\n this.#componentLocale = await Locale.getComponentStrings(this.el);\n\n // initialize combo-box models\n this.categoriesChanged(this.categories);\n this.densitiesChanged(this.densities);\n this.languagesChanged(this.languages);\n this.layersChanged(this.layers);\n this.stylesChanged(this.styles);\n\n // initialize \"After\" combo-box options\n this.filterAfterOptions = [\n {\n caption: this.#componentLocale.filter.afterNone,\n value: FILTER_AFTER.NONE\n },\n {\n caption: this.#componentLocale.filter[FILTER_AFTER.DATE_TIME],\n value: FILTER_AFTER.DATE_TIME\n },\n {\n caption: this.#componentLocale.filter[FILTER_AFTER.IMPORT],\n value: FILTER_AFTER.IMPORT\n },\n {\n caption: this.#componentLocale.filter[FILTER_AFTER.LAST_BUILD],\n value: FILTER_AFTER.LAST_BUILD\n }\n ];\n this.afterCurrentValue = this.filterAfterOptions[0].value;\n this.filterAfterTypeValue = this.filterAfterOptions[0].value;\n\n // Initialize filter state values\n this.#applyDefaultCategory();\n this.filterModuleValue = this.defaultModule;\n if (this.stylesComboBoxModel.length > 0) {\n this.filterStyleValue = this.stylesComboBoxModel[0].value;\n }\n if (this.languagesComboBoxModel.length > 0) {\n this.filterLanguageValue = this.languagesComboBoxModel[0].value;\n }\n if (this.densitiesComboBoxModel.length > 0) {\n this.filterDensityValue = this.densitiesComboBoxModel[0].value;\n }\n if (this.layersComboBoxModel.length > 0) {\n this.filterLayerValue = this.layersComboBoxModel[0].value;\n }\n\n this.#ACCORDION_MODEL = [\n {\n id: this.#ACCORDION_FILTER_ID,\n caption: this.#componentLocale.filter.accordionCaption,\n expanded: false\n }\n ];\n }\n\n @Listen(\"keydown\", { passive: true })\n keyDownHandler(eventInfo: KeyboardEvent) {\n if (document.activeElement === this.el) {\n switch (eventInfo.key) {\n case \"Enter\":\n this.#openSelectionCallBackHandler();\n break;\n case \"Delete\":\n this.#deleteSelectionCallbackHandler();\n break;\n }\n }\n }\n\n /**\n * Reloads the view, refreshing the filters and the images table.\n */\n @Method()\n async reload(): Promise<void> {\n this.#getImages();\n }\n\n #deleteSelectionCallbackHandler = (): void => {\n this.deleteSelectionCallback(this.selectedObjectsIds);\n };\n\n #deselectAll = (): void => {\n (this.#chGridEl as any).selectAllRows(false);\n };\n\n /**\n * Watch filter state variables and trigger #getImages when they change\n */\n @Watch(\"filterNameValue\")\n filterNameValueChanged() {\n if (!this.#isInitialLoad) {\n this.#getImages();\n }\n }\n\n @Watch(\"filterSearchContentsValue\")\n filterSearchContentsValueChanged() {\n if (!this.#isInitialLoad) {\n this.#getImages();\n }\n }\n\n @Watch(\"filterCategoryValue\")\n filterCategoryValueChanged() {\n if (!this.#isInitialLoad) {\n this.#getImages();\n }\n }\n\n @Watch(\"filterAllDescendantsValue\")\n filterAllDescendantsValueChanged() {\n if (!this.#isInitialLoad) {\n this.#getImages();\n }\n }\n\n @Watch(\"filterAfterTypeValue\")\n filterAfterTypeValueChanged() {\n if (!this.#isInitialLoad) {\n this.#getImages();\n }\n }\n\n @Watch(\"filterUserValue\")\n filterUserValueChanged() {\n if (!this.#isInitialLoad) {\n this.#getImages();\n }\n }\n\n @Watch(\"filterModifiedDateValue\")\n filterModifiedDateValueChanged() {\n if (!this.#isInitialLoad) {\n this.#getImages();\n }\n }\n\n @Watch(\"filterStyleValue\")\n filterStyleValueChanged() {\n if (!this.#isInitialLoad) {\n this.#getImages();\n }\n }\n\n @Watch(\"filterLanguageValue\")\n filterLanguageValueChanged() {\n if (!this.#isInitialLoad) {\n this.#getImages();\n }\n }\n\n @Watch(\"filterDensityValue\")\n filterDensityValueChanged() {\n if (!this.#isInitialLoad) {\n this.#getImages();\n }\n }\n\n @Watch(\"filterLayerValue\")\n filterLayerValueChanged() {\n if (!this.#isInitialLoad) {\n this.#getImages();\n }\n }\n\n @Watch(\"filterModuleValue\")\n filterModuleValueChanged() {\n if (!this.#isInitialLoad) {\n this.#getImages();\n }\n }\n\n /**\n * Individual handler functions for each filter control\n */\n #handleNameChange = (event: CustomEvent<string> | InputEvent) => {\n this.filterNameValue = (event.detail ||\n (event.target as HTMLInputElement).value) as string;\n };\n\n #handleSearchContentsChange = (event: CustomEvent<string> | InputEvent) => {\n this.filterSearchContentsValue = (event.detail ||\n (event.target as HTMLInputElement).value) as string;\n };\n\n #applyDefaultCategory = () => {\n if (this.defaultCategory && this.categoriesComboBoxModel.length > 0) {\n const categoryExists = this.categoriesComboBoxModel.some(\n item => item.value === this.defaultCategory\n );\n if (categoryExists) {\n this.filterCategoryValue = this.defaultCategory;\n }\n }\n };\n\n #handleCategoryChange = (event: CustomEvent<string> | InputEvent) => {\n this.filterCategoryValue = event.detail as string;\n };\n\n #handleAllDescendantsChange = (event: CustomEvent<string> | InputEvent) => {\n this.filterAllDescendantsValue = event.detail === ALL_DESCENDANTS_VALUE;\n };\n\n #handleAfterTypeChange = (event: CustomEvent<string> | InputEvent) => {\n this.filterAfterTypeValue = event.detail as string;\n this.afterCurrentValue = event.detail as string;\n };\n\n #handleUserChange = (event: CustomEvent<string> | InputEvent) => {\n this.filterUserValue = (event.detail ||\n (event.target as HTMLInputElement).value) as string;\n };\n\n #handleModifiedDateChange = (event: InputEvent) => {\n this.filterModifiedDateValue = (event.target as HTMLInputElement).value;\n };\n\n #handleStyleChange = (event: CustomEvent<string> | InputEvent) => {\n this.filterStyleValue = event.detail as string;\n };\n\n #handleLanguageChange = (event: CustomEvent<string> | InputEvent) => {\n this.filterLanguageValue = event.detail as string;\n };\n\n #handleDensityChange = (event: CustomEvent<string> | InputEvent) => {\n this.filterDensityValue = event.detail as string;\n };\n\n #handleLayerChange = (event: CustomEvent<string> | InputEvent) => {\n this.filterLayerValue = event.detail as string;\n };\n\n #handleModuleChange = () => {\n // Module change is handled via event listener, but we update state\n if (this.#filterModuleEl) {\n this.filterModuleValue = this.#filterModuleEl.value;\n }\n };\n\n #filterImagesInformationHandler = () => {\n // Copy images from server to tabularGridData (will be sorted before rendering)\n this.tabularGridData = [...this.images];\n };\n\n #getImages = (): void => {\n this.#imagesMap.clear();\n\n const filters: ImageFiltersData = {\n name: this.filterNameValue,\n searchContents: this.filterSearchContentsValue,\n category: this.filterCategoryValue,\n parent: this.filterModuleValue ? this.filterModuleValue.id : null,\n allDescendants: this.filterAllDescendantsValue,\n modifiedAfter: this.filterAfterTypeValue,\n modifiedBy: this.filterUserValue,\n modifiedDate: this.filterModifiedDateValue\n ? new Date(this.filterModifiedDateValue)\n : undefined,\n style: this.filterStyleValue,\n language: this.filterLanguageValue,\n density: this.filterDensityValue,\n layer: this.filterLayerValue\n };\n\n this.loadCallback(filters).then((items: ImageData[]) => {\n this.images = items;\n this.selectedObjectsIds = [];\n this.#deselectAll();\n this.#filterImagesInformationHandler();\n });\n };\n\n #getToday = (): string => {\n const now = new Date();\n const date = now.toISOString().split(\"T\")[0];\n const time = now.toISOString().split(\"T\")[1].slice(0, 5); // Only take 'HH:MM' part\n return `${date}T${time}`;\n };\n #addEventListeners = (): void => {\n /* module/folder */\n this.#filterModuleEl.addEventListener(\"valueChanged\", () => {\n this.#handleModuleChange();\n });\n\n // for grid selection\n this.#chGridEl.addEventListener(\"selectionChanged\", (ev: any): void => {\n this.selectedObjectsIds = ev.detail.rowsId;\n this.selectionObjectChangedCallback(this.selectedObjectsIds);\n\n if (this.selectedObjectsIds.length === 0) {\n this.imagesSelectedItems = [];\n return;\n }\n\n // Collect cached items immediately\n const cachedItems: ImageItemData[] = [];\n const idsToLoad: string[] = [];\n\n this.selectedObjectsIds.forEach((selectedId: string) => {\n if (this.#imagesMap.has(selectedId)) {\n const items = this.#imagesMap.get(selectedId);\n if (items) {\n cachedItems.push(...items);\n }\n } else {\n idsToLoad.push(selectedId);\n }\n });\n\n // If all items were cached, update immediately\n if (idsToLoad.length === 0) {\n this.imagesSelectedItems = cachedItems;\n return;\n }\n\n // Store current selection to verify later (prevents race conditions)\n const currentSelection = [...this.selectedObjectsIds].sort().join(\",\");\n\n // Load missing items and combine with cached ones\n // loadImageItemsCallback must be invoked the first time a user selects an image\n const loadPromises = idsToLoad.map((selectedId: string) =>\n this.loadImageItemsCallback(selectedId).then(\n (items: ImageItemData[]) => {\n // Cache the items for future use\n this.#imagesMap.set(selectedId, items);\n return items;\n }\n )\n );\n\n Promise.all(loadPromises).then((loadedItemsArrays: ImageItemData[][]) => {\n // Verify that selection hasn't changed while loading\n const currentSelectionAfterLoad = [...this.selectedObjectsIds]\n .sort()\n .join(\",\");\n if (currentSelection !== currentSelectionAfterLoad) {\n // Selection changed, ignore this result\n return;\n }\n\n // Combine cached items with newly loaded items\n const allImageItems = [...cachedItems];\n loadedItemsArrays.forEach(items => {\n allImageItems.push(...items);\n });\n this.imagesSelectedItems = allImageItems;\n });\n });\n\n this.#chGridEl.addEventListener(\"rowDoubleClicked\", (): void => {\n this.#openSelectionCallBackHandler();\n });\n\n this.#chGridEl.addEventListener(\n \"rowContextMenu\",\n (ev: CustomEvent<ChGridRowContextMenuEvent>): void => {\n ev.preventDefault();\n ev.stopPropagation();\n this.contextMenuCallback({\n selection: ev.detail.selectedRowsId,\n clientX: ev.detail.clientX,\n clientY: ev.detail.clientY\n });\n }\n );\n };\n\n /**\n * Helper function to safely get image values for sorting\n */\n #getImageValue(image: ImageData, key: string): string {\n switch (key) {\n case \"name\":\n return image.name || \"\";\n case \"module\":\n return image.module || \"\";\n case \"description\":\n return image.description || \"\";\n case \"modifiedDate\":\n return image.modifiedDate\n ? formatDate(image.modifiedDate).toLowerCase()\n : \"\";\n case \"lastUser\":\n return image.lastUser?.toLowerCase() || \"\";\n case \"importDate\":\n return image.importDate\n ? formatDate(image.importDate).toLowerCase()\n : \"\";\n default:\n return \"\";\n }\n }\n\n /**\n * Sorts images based on the current order criteria\n */\n #sortImages = (a: ImageData, b: ImageData): number => {\n if (this.order.orderCriteria) {\n const valueA = this.#getImageValue(\n a,\n this.order.orderCriteria\n ).toUpperCase();\n const valueB = this.#getImageValue(\n b,\n this.order.orderCriteria\n ).toUpperCase();\n if (valueA < valueB) {\n return this.order.ascending ? -1 : 1;\n }\n if (valueA > valueB) {\n return this.order.ascending ? 1 : -1;\n }\n }\n return 0;\n };\n\n /**\n * Handles column sort changes\n */\n #handleColumnSortChanged = (e: CustomEvent) => {\n const { columnId, sortDirection } = e.detail;\n this.order = {\n orderCriteria: columnId,\n ascending: sortDirection === \"asc\"\n };\n };\n\n #newObjectCallbackHandler = (): void => {\n this.newObjectCallback();\n };\n #openSelectionCallBackHandler = (): void => {\n this.openSelectionCallback(this.selectedObjectsIds);\n };\n\n #toggleModifiedControls = (event: CustomEvent<string> | InputEvent) => {\n this.enabledModifiedControls = event.detail === MODIFIED_VALUE;\n };\n\n #renderHeader = (): Element[] => {\n return [\n <div\n // name\n class=\"field field-block name\"\n >\n <label class=\"label\" htmlFor=\"filter-name\">\n {this.#componentLocale.filter.name}\n </label>\n <ch-edit\n id=\"filter-name\"\n class=\"input\"\n autoFocus={true}\n value={this.filterNameValue}\n debounce={config.inputDebounce}\n onInput={this.#handleNameChange}\n ></ch-edit>\n </div>,\n\n <div class=\"field field-block module-folder\">\n <label class=\"label\" htmlFor=\"module-folder\">\n {this.#componentLocale.filter.moduleFolder}\n </label>\n\n <gx-ide-entity-selector\n // module/folder\n id=\"module/folder\"\n labelPosition=\"none\"\n value={this.filterModuleValue}\n defaultValue={this.defaultModule}\n selectEntityCallback={this.selectModuleCallback}\n ref={(el: HTMLGxIdeEntitySelectorElement) =>\n (this.#filterModuleEl = el as HTMLGxIdeEntitySelectorElement)\n }\n ></gx-ide-entity-selector>\n </div>,\n\n <ch-accordion-render\n // modified\n class=\"accordion-outlined advanced-filter-accordion\"\n model={this.#ACCORDION_MODEL}\n >\n <div slot={this.#ACCORDION_FILTER_ID} class=\"spacing-body\">\n <div class=\"main__filter field-group scrollable\">\n <div\n // category\n class=\"field field-block category\"\n >\n <label class=\"label\" htmlFor=\"filter-category\">\n {this.#componentLocale.filter.category}\n </label>\n <ch-combo-box-render\n id=\"filter-category\"\n class=\"combo-box\"\n value={this.filterCategoryValue}\n disabled={!this.categories}\n model={this.categoriesComboBoxModel}\n onInput={this.#handleCategoryChange}\n ></ch-combo-box-render>\n </div>\n\n <div\n // category\n class=\"field-group options\"\n >\n <label class=\"label\" htmlFor=\"filter-category\">\n {this.#componentLocale.filter.options}\n </label>\n <div\n // options\n class=\"field field-inline\"\n >\n <ch-checkbox\n class=\"checkbox all-descendants\"\n caption={this.#componentLocale.filter.allDescendants}\n checkedValue={ALL_DESCENDANTS_VALUE}\n value={\n this.filterAllDescendantsValue\n ? ALL_DESCENDANTS_VALUE\n : undefined\n }\n onInput={this.#handleAllDescendantsChange}\n ></ch-checkbox>\n\n <ch-checkbox\n class=\"checkbox modified\"\n caption={this.#componentLocale.filter.modified}\n checkedValue={MODIFIED_VALUE}\n onInput={this.#toggleModifiedControls}\n ></ch-checkbox>\n </div>\n </div>\n\n <div\n // after\n class=\"field field-block after-date-time\"\n >\n <label\n class={{\n \"label\": true,\n \"label--disabled\": !this.enabledModifiedControls\n }}\n htmlFor=\"filter-after-type\"\n >\n {this.#componentLocale.filter.afterLabel}\n </label>\n <ch-combo-box-render\n id=\"filter-after-type\"\n class=\"combo-box\"\n value={this.filterAfterTypeValue}\n disabled={!this.enabledModifiedControls}\n model={this.filterAfterOptions}\n onInput={this.#handleAfterTypeChange}\n ></ch-combo-box-render>\n </div>\n\n <div\n // user\n class=\"field field-block user\"\n >\n <label\n class={{\n \"label\": true,\n \"label--disabled\": !this.enabledModifiedControls\n }}\n htmlFor=\"filter-user\"\n >\n {this.#componentLocale.filter.user}\n </label>\n <ch-edit\n id=\"filter-user\"\n value={this.filterUserValue}\n class=\"input\"\n disabled={!this.enabledModifiedControls}\n debounce={config.inputDebounce}\n onInput={this.#handleUserChange}\n ></ch-edit>\n </div>\n\n <div\n // date/time\n class=\"field field-block date-time\"\n >\n <label\n class={{\n \"label\": true,\n \"label--disabled\":\n this.afterCurrentValue !== FILTER_AFTER.DATE_TIME\n }}\n htmlFor=\"modified-date\"\n >\n {this.#componentLocale.filter.dateTime}\n </label>\n <input\n type=\"datetime-local\"\n class=\"input \"\n id=\"modified-date\"\n name=\"modifiedDate\"\n value={this.filterModifiedDateValue}\n max={TODAY}\n disabled={this.afterCurrentValue !== FILTER_AFTER.DATE_TIME}\n onInput={this.#handleModifiedDateChange}\n ></input>\n </div>\n\n <div\n // style\n class=\"field field-block style\"\n >\n <label class=\"label\" htmlFor=\"filter-style\">\n {this.#componentLocale.filter.style}\n </label>\n <ch-combo-box-render\n id=\"filter-style\"\n class=\"combo-box\"\n value={this.filterStyleValue}\n disabled={!this.styles}\n model={this.stylesComboBoxModel}\n onInput={this.#handleStyleChange}\n ></ch-combo-box-render>\n </div>\n\n <div\n // language\n class=\"field field-block language\"\n >\n <label class=\"label\" htmlFor=\"filter-language\">\n {this.#componentLocale.filter.language}\n </label>\n <ch-combo-box-render\n id=\"filter-language\"\n class=\"combo-box\"\n value={this.filterLanguageValue}\n disabled={!this.languages}\n model={this.languagesComboBoxModel}\n onInput={this.#handleLanguageChange}\n ></ch-combo-box-render>\n </div>\n\n <div\n // density\n class=\"field field-block\"\n >\n <label class=\"label\" htmlFor=\"filter-density\">\n {this.#componentLocale.filter.density}\n </label>\n <ch-combo-box-render\n id=\"filter-density\"\n class=\"combo-box\"\n value={this.filterDensityValue}\n disabled={!this.densities}\n model={this.densitiesComboBoxModel}\n onInput={this.#handleDensityChange}\n ></ch-combo-box-render>\n </div>\n\n <div\n // layer\n class=\"field field-block\"\n >\n <label class=\"label\" htmlFor=\"filter-layer\">\n {this.#componentLocale.filter.layer}\n </label>\n <ch-combo-box-render\n id=\"filter-layer\"\n class=\"combo-box\"\n value={this.filterLayerValue}\n disabled={!this.layers}\n model={this.layersComboBoxModel}\n onInput={this.#handleLayerChange}\n ></ch-combo-box-render>\n </div>\n\n <div\n // search contents\n class=\"field field-block search-by-contents\"\n >\n <label class=\"label\" htmlFor=\"search-input\">\n {this.#componentLocale.filter.search}\n </label>\n <ch-edit\n id=\"search-input\"\n debounce={config.inputDebounce}\n class=\"input\"\n value={this.filterSearchContentsValue}\n placeholder={\n this.#componentLocale.filter.searchContentsPlaceholder\n }\n onInput={this.#handleSearchContentsChange}\n startImgSrc={SEARCH_ICON}\n type=\"search\"\n ></ch-edit>\n </div>\n\n <button\n // reset filter button\n class=\"button-secondary button-icon-and-text button-reset\"\n onClick={this.#resetFilterHandler}\n >\n <ch-image class=\"icon-sm\" src={RESET_ICON} type=\"mask\"></ch-image>\n {this.#componentLocale.filter.resetFilters}\n </button>\n </div>\n </div>\n </ch-accordion-render>\n ];\n };\n\n #renderFilter = (): Element[] => {\n return (\n <div class=\"sidebar-container scrollable\">{this.#renderImages()}</div>\n );\n };\n\n #renderImages = (): Element => {\n return (\n /* tiles */\n\n <div class=\"main__images-container spacing-body-inline\">\n {this.imagesSelectedItems.map(item => (\n <figure class=\"figure\">\n <picture class=\"figure__picture\">\n <img class=\"figure__img\" src={item.url} alt={item.name} />\n </picture>\n <figcaption class=\"figure__figcaption\">{item.name}</figcaption>\n </figure>\n ))}\n </div>\n );\n };\n #renderTabularGrid = (): Element => {\n const commonColSize = \"minmax(max-content, auto)\";\n\n return (\n <div\n class={{\n \"field-group\": true,\n \"main__grid\": true\n }}\n >\n <ch-tabular-grid\n ref={(el: HTMLChTabularGridElement) => (this.#chGridEl = el)}\n rowSelectionMode=\"multiple\"\n class=\"tabular-grid tabular-grid-ww-images\"\n columnResizeMode=\"splitter\"\n >\n <ch-tabular-grid-columnset class=\"tabular-grid-column-set\">\n <ch-tabular-grid-column\n columnId=\"icon\"\n columnName=\"\"\n settingable={false}\n size={config.tabularGrid.colSize.maxContent}\n class=\"tabular-grid-column\"\n resizable={true}\n sortable={false}\n ></ch-tabular-grid-column>\n <ch-tabular-grid-column\n columnId=\"name\"\n columnName={this.#componentLocale.tableHead.name}\n settingable={false}\n class=\"tabular-grid-column\"\n column-name-position=\"text\"\n size={commonColSize}\n resizable={true}\n sortable={true}\n onColumnSortChanged={this.#handleColumnSortChanged}\n ></ch-tabular-grid-column>\n <ch-tabular-grid-column\n columnId=\"module\"\n columnName={this.#componentLocale.tableHead.module}\n settingable={false}\n size={commonColSize}\n class=\"tabular-grid-column\"\n resizable={true}\n sortable={true}\n onColumnSortChanged={this.#handleColumnSortChanged}\n ></ch-tabular-grid-column>\n <ch-tabular-grid-column\n columnId=\"description\"\n columnName={this.#componentLocale.tableHead.description}\n settingable={false}\n size=\"minmax(300px, 1fr)\"\n class=\"tabular-grid-column\"\n resizable={false}\n sortable={false}\n ></ch-tabular-grid-column>\n <ch-tabular-grid-column\n columnId=\"modifiedDate\"\n columnName={this.#componentLocale.tableHead.modifiedDate}\n settingable={false}\n size={commonColSize}\n class=\"tabular-grid-column\"\n resizable={true}\n sortable={true}\n onColumnSortChanged={this.#handleColumnSortChanged}\n ></ch-tabular-grid-column>\n <ch-tabular-grid-column\n columnId=\"lastUser\"\n columnName={this.#componentLocale.tableHead.lastUser}\n settingable={false}\n size={commonColSize}\n class=\"tabular-grid-column\"\n resizable={true}\n sortable={true}\n onColumnSortChanged={this.#handleColumnSortChanged}\n ></ch-tabular-grid-column>\n <ch-tabular-grid-column\n columnId=\"importDate\"\n columnName={this.#componentLocale.tableHead.importDate}\n settingable={false}\n size={commonColSize}\n class=\"tabular-grid-column\"\n resizable={true}\n sortable={true}\n onColumnSortChanged={this.#handleColumnSortChanged}\n ></ch-tabular-grid-column>\n </ch-tabular-grid-columnset>\n\n {this.tabularGridData.length ? (\n <ch-tabular-grid-rowset class=\"tabular-grid-rowset\">\n {[...this.tabularGridData]\n .sort(this.#sortImages)\n .map((obj: ImageData) => (\n <ch-tabular-grid-row rowid={obj.id} class=\"tabular-grid-row\">\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n <ch-image src={obj.icon}></ch-image>\n </ch-tabular-grid-cell>\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 {obj.module}\n </ch-tabular-grid-cell>\n <ch-tabular-grid-cell class=\"tabular-grid-cell tabular-grid-cell-description\">\n {obj.description}\n </ch-tabular-grid-cell>\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {formatDate(obj.modifiedDate)}\n </ch-tabular-grid-cell>\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {obj.lastUser}\n </ch-tabular-grid-cell>\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {formatDate(obj.importDate)}\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 isAnimated={false}\n stateIconSrc={NOTICE_ICON}\n stateTitle={this.#componentLocale.emptyState.title}\n key=\"no-images-empty-state\"\n ></gx-ide-empty-state>\n </ch-tabular-grid-rowset-empty>\n </ch-tabular-grid-rowset>\n )}\n </ch-tabular-grid>\n </div>\n );\n };\n\n #resetFilterHandler = () => {\n if (this.#filterInitialData) {\n this.filterNameValue = this.#filterInitialData.name;\n this.filterModuleValue = this.#filterInitialData.module;\n this.filterSearchContentsValue = this.#filterInitialData.searchContents;\n this.filterCategoryValue = this.#filterInitialData.category;\n this.filterAllDescendantsValue =\n this.#filterInitialData.allDescendants === ALL_DESCENDANTS_VALUE;\n this.filterAfterTypeValue = this.#filterInitialData.modifiedAfter;\n this.filterModifiedDateValue = this.#filterInitialData.modifiedDateTime;\n this.filterUserValue = this.#filterInitialData.modifiedUser;\n this.filterStyleValue = this.#filterInitialData.style;\n this.filterLanguageValue = this.#filterInitialData.language;\n this.filterDensityValue = this.#filterInitialData.density;\n this.filterLayerValue = this.#filterInitialData.layer;\n this.afterCurrentValue = this.filterAfterTypeValue;\n }\n };\n\n #saveInitialFilterData = () => {\n this.#filterInitialData = {\n name: this.filterNameValue,\n module: this.filterModuleValue,\n searchContents: this.filterSearchContentsValue,\n category: this.filterCategoryValue,\n allDescendants: this.filterAllDescendantsValue\n ? ALL_DESCENDANTS_VALUE\n : \"\",\n modifiedAfter: this.filterAfterTypeValue,\n modifiedDateTime: this.filterModifiedDateValue,\n modifiedUser: this.filterUserValue,\n style: this.filterStyleValue,\n language: this.filterLanguageValue,\n density: this.filterDensityValue,\n layer: this.filterLayerValue\n };\n };\n\n #selectAll = (): void => {\n (this.#chGridEl as any).selectAllRows();\n };\n\n render(): void {\n return (\n <Host class=\"widget\">\n <ch-theme model={CSS_BUNDLES}></ch-theme>\n\n <section class=\"section\">\n <header class=\"header control-header-with-border spacing-body-inline spacing-body-block-start field-group\">\n {this.#renderHeader()}\n </header>\n\n <div class=\"main\">\n {this.#renderTabularGrid()}\n <div class=\"main__aside field-group\">{this.#renderFilter()}</div>\n </div>\n\n <footer class=\"dialog-footer-with-border dialog-footer-space-between spacing-body\">\n <p\n // matching objects\n class=\"text-body\"\n >\n {`${this.tabularGridData.length} ${\n this.#componentLocale.objCount.matching\n }`}\n </p>\n\n <div class=\"buttons-spacer\">\n <button\n // select all button\n id=\"button-select-all\"\n class=\"button-secondary\"\n onClick={this.#selectAll}\n >\n {this.#componentLocale.footer.btnSelectAll}\n </button>\n\n <button\n // new image button\n id=\"button-new-file\"\n class=\"button-primary button-icon-and-text\"\n onClick={this.#newObjectCallbackHandler}\n >\n {this.#componentLocale.footer.btnNew}\n </button>\n </div>\n </footer>\n </section>\n </Host>\n );\n }\n}\nexport type ContextMenuCallback = (\n contextMenuInfo: ContextMenuInfo\n) => Promise<void>;\n\nexport type DeleteSelectionCallback = (ids: string[]) => Promise<void>;\n\nexport type FilerInitialData = {\n name: string;\n module: EntityData;\n searchContents: string;\n category: string;\n allDescendants: string;\n modifiedAfter: string;\n modifiedDateTime: string;\n modifiedUser: string;\n style: string;\n language: string;\n density: string;\n layer: string;\n};\n\nexport type ImageData = {\n id: string;\n icon: string;\n name: string;\n description: string;\n parent: string;\n module: string;\n modifiedDate?: Date;\n lastUser?: string;\n importDate?: Date;\n};\n\nexport type ImageFiltersData = {\n name?: string;\n searchContents?: string;\n category?: string;\n parent?: string;\n allDescendants?: boolean;\n modifiedAfter?: string;\n modifiedBy?: string;\n modifiedDate?: Date;\n style?: string;\n language?: string;\n density?: string;\n layer?: string;\n};\n\nexport type ImageItemData = {\n id: string;\n name: string;\n url: string;\n};\n\nexport type LoadCallback = (filters: ImageFiltersData) => Promise<ImageData[]>;\n\nexport type LoadImageItemsCallback = (id: string) => Promise<ImageItemData[]>;\n\nexport type NewObjectCallback = () => Promise<void>;\n\nexport type OpenSelectionCallback = (ids: string[]) => Promise<void>;\n\nexport type SelectModuleCallback = () => Promise<EntityData | undefined>;\n\nexport type SelectionObjectCallback = (ids: string[]) => Promise<void>;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAGO,MAAMA,gCACXC;EAEA,KAAKA,GAAS;IACZ,OAAO;;EAET,OAAOA,EAAQC,KAAIC;;IACjB,OAAO;MACLC,OAAOD,EAAOE;MACdC,SAASH,EAAOI;MAChBC,cAAaC,IAAAN,EAAOO,cAAQ,QAAAD,WAAA,IAAAA,IAAI;;AACjC;AACD;;ACfJ,MAAME,IAAc;;;;;;;;;;;;;;;;;AC4BpB,MAAMC,IAA8B,EAClC,qBACA,wBACA,qBACA,uBACA,wBACA,mBACA,mBACA,2BACA,sBACA,cACA,gBACA,oBACA,iBACA;;AAGF,MAAMC,KAAwB;;AAC9B,MAAMC,KAAiB;;AAEvB,IAAIC,KAAgB;;QAGpB;MAAMC,KAAaC,EAAY;EAC7BC,UAAU;EACVC,MAAM;EACNC,WAAW;;;AAEb,MAAMC,KAAcJ,EAAY;EAC9BC,UAAU;EACVC,MAAM;EACNC,WAAW;;;AAEb,MAAME,KAAcL,EAAY;EAC9BC,UAAU;EACVC,MAAM;EACNC,WAAW;;;MASAG,KAAa;;;;;;eAIxBC,EAAAC,IAAAC,WAAA;IACAC,EAAAF,IAAAC,WAAA;IACAE,EAAAH,IAAAC,MAAmC;IACnCG,EAAAJ,IAAAC,MAAuB;IAEvBI,EAAAL,IAAAC,MAA2C,IAAIK;IAI/CC,EAAAP,IAAAC,WAAA;;QAEAO,EAAAR,IAAAC,WAAA;;;eAwEAQ,EAAAT,IAAAC,MAAiB;IAgMjBS,EAAAV,IAAAC,OAAkC;MAChCA,KAAKU,wBAAwBV,KAAKW;AAAmB;IAGvDC,EAAAb,IAAAC,OAAe;MACZa,EAAAb,MAAIM,GAAA,KAAmBQ,cAAc;AAAM;;;eA6F9CC,EAAAhB,IAAAC,OAAqBgB;MACnBhB,KAAKiB,kBAAmBD,EAAME,UAC3BF,EAAMG,OAA4BzC;AAAgB;IAGvD0C,EAAArB,IAAAC,OAA+BgB;MAC7BhB,KAAKqB,4BAA6BL,EAAME,UACrCF,EAAMG,OAA4BzC;AAAgB;IAGvD4C,EAAAvB,IAAAC,OAAwB;MACtB,IAAIA,KAAKuB,mBAAmBvB,KAAKwB,wBAAwBC,SAAS,GAAG;QACnE,MAAMC,IAAiB1B,KAAKwB,wBAAwBG,MAClDC,KAAQA,EAAKlD,UAAUsB,KAAKuB;QAE9B,IAAIG,GAAgB;UAClB1B,KAAK6B,sBAAsB7B,KAAKuB;;;;IAKtCO,EAAA/B,IAAAC,OAAyBgB;MACvBhB,KAAK6B,sBAAsBb,EAAME;AAAgB;IAGnDa,EAAAhC,IAAAC,OAA+BgB;MAC7BhB,KAAKgC,4BAA4BhB,EAAME,WAAW/B;AAAqB;IAGzE8C,EAAAlC,IAAAC,OAA0BgB;MACxBhB,KAAKkC,uBAAuBlB,EAAME;MAClClB,KAAKmC,oBAAoBnB,EAAME;AAAgB;IAGjDkB,EAAArC,IAAAC,OAAqBgB;MACnBhB,KAAKqC,kBAAmBrB,EAAME,UAC3BF,EAAMG,OAA4BzC;AAAgB;IAGvD4D,EAAAvC,IAAAC,OAA6BgB;MAC3BhB,KAAKuC,0BAA2BvB,EAAMG,OAA4BzC;AAAK;IAGzE8D,EAAAzC,IAAAC,OAAsBgB;MACpBhB,KAAKyC,mBAAmBzB,EAAME;AAAgB;IAGhDwB,EAAA3C,IAAAC,OAAyBgB;MACvBhB,KAAK2C,sBAAsB3B,EAAME;AAAgB;IAGnD0B,EAAA7C,IAAAC,OAAwBgB;MACtBhB,KAAK6C,qBAAqB7B,EAAME;AAAgB;IAGlD4B,EAAA/C,IAAAC,OAAsBgB;MACpBhB,KAAK+C,mBAAmB/B,EAAME;AAAgB;IAGhD8B,EAAAjD,IAAAC,OAAsB;;MAEpB,IAAIa,EAAAb,MAAIO,GAAA,MAAkB;QACxBP,KAAKiD,oBAAoBpC,EAAAb,MAAIO,GAAA,KAAiB7B;;;IAIlDwE,EAAAnD,IAAAC,OAAkC;;MAEhCA,KAAKmD,kBAAkB,KAAInD,KAAKoD;AAAO;IAGzCC,EAAAtD,IAAAC,OAAa;MACXa,EAAAb,MAAII,GAAA,KAAYkD;MAEhB,MAAMC,IAA4B;QAChC9D,MAAMO,KAAKiB;QACXuC,gBAAgBxD,KAAKqB;QACrB7B,UAAUQ,KAAK6B;QACf4B,QAAQzD,KAAKiD,oBAAoBjD,KAAKiD,kBAAkBtE,KAAK;QAC7D+E,gBAAgB1D,KAAKgC;QACrB2B,eAAe3D,KAAKkC;QACpB0B,YAAY5D,KAAKqC;QACjBwB,cAAc7D,KAAKuC,0BACf,IAAIuB,KAAK9D,KAAKuC,2BACdwB;QACJC,OAAOhE,KAAKyC;QACZwB,UAAUjE,KAAK2C;QACfuB,SAASlE,KAAK6C;QACdsB,OAAOnE,KAAK+C;;MAGd/C,KAAKoE,aAAab,GAASc,MAAMC;QAC/BtE,KAAKoD,SAASkB;QACdtE,KAAKW,qBAAqB;QAC1BE,EAAAb,MAAIY,GAAA,KAAa2D,KAAjBvE;QACAa,EAAAb,MAAIkD,GAAA,KAAgCqB,KAApCvE;AAAsC;AACtC;IAGJwE,EAAAzE,IAAAC,OAAY;MACV,MAAMyE,IAAM,IAAIX;MAChB,MAAMY,IAAOD,EAAIE,cAAcC,MAAM,KAAK;MAC1C,MAAMC,IAAOJ,EAAIE,cAAcC,MAAM,KAAK,GAAGE,MAAM,GAAG;;YACtD,OAAO,GAAGJ,KAAQG;AAAM;IAE1BE,EAAAhF,IAAAC,OAAqB;;MAEnBa,EAAAb,MAAIO,GAAA,KAAiByE,iBAAiB,iBAAgB;QACpDnE,EAAAb,MAAIgD,GAAA,KAAoBuB,KAAxBvE;AAA0B;;YAI5Ba,EAAAb,MAAIM,GAAA,KAAW0E,iBAAiB,qBAAqBC;QACnDjF,KAAKW,qBAAqBsE,EAAG/D,OAAOgE;QACpClF,KAAKmF,+BAA+BnF,KAAKW;QAEzC,IAAIX,KAAKW,mBAAmBc,WAAW,GAAG;UACxCzB,KAAKoF,sBAAsB;UAC3B;;;gBAIF,MAAMC,IAA+B;QACrC,MAAMC,IAAsB;QAE5BtF,KAAKW,mBAAmB4E,SAASC;UAC/B,IAAI3E,EAAAb,MAAII,GAAA,KAAYqF,IAAID,IAAa;YACnC,MAAMlB,IAAQzD,EAAAb,MAAII,GAAA,KAAYsF,IAAIF;YAClC,IAAIlB,GAAO;cACTe,EAAYM,QAAQrB;;iBAEjB;YACLgB,EAAUK,KAAKH;;;;gBAKnB,IAAIF,EAAU7D,WAAW,GAAG;UAC1BzB,KAAKoF,sBAAsBC;UAC3B;;;gBAIF,MAAMO,IAAmB,KAAI5F,KAAKW,qBAAoBkF,OAAOC,KAAK;;;gBAIlE,MAAMC,IAAeT,EAAU9G,KAAKgH,KAClCxF,KAAKgG,uBAAuBR,GAAYnB,MACrCC;;UAECzD,EAAAb,MAAII,GAAA,KAAYL,IAAIyF,GAAYlB;UAChC,OAAOA;AAAK;QAKlB2B,QAAQC,IAAIH,GAAc1B,MAAM8B;;UAE9B,MAAMC,IAA4B,KAAIpG,KAAKW,qBACxCkF,OACAC,KAAK;UACR,IAAIF,MAAqBQ,GAA2B;;YAElD;;;oBAIF,MAAMC,IAAgB,KAAIhB;UAC1Bc,EAAkBZ,SAAQjB;YACxB+B,EAAcV,QAAQrB;AAAM;UAE9BtE,KAAKoF,sBAAsBiB;AAAa;AACxC;MAGJxF,EAAAb,MAAIM,GAAA,KAAW0E,iBAAiB,qBAAoB;QAClDnE,EAAAb,MAAIsG,GAAA,KAA8B/B,KAAlCvE;AAAoC;MAGtCa,EAAAb,MAAIM,GAAA,KAAW0E,iBACb,mBACCC;QACCA,EAAGsB;QACHtB,EAAGuB;QACHxG,KAAKyG,oBAAoB;UACvBC,WAAWzB,EAAG/D,OAAOyF;UACrBC,SAAS3B,EAAG/D,OAAO0F;UACnBC,SAAS5B,EAAG/D,OAAO2F;;AACnB;AAEL;;;eAgCHC,EAAA/G,IAAAC,OAAc,CAAC+G,GAAcC;MAC3B,IAAIhH,KAAKiH,MAAMC,eAAe;QAC5B,MAAMC,IAAStG,EAAAb,MAAIoH,GAAA,KAAAC,GAAe9C,KAAnBvE,MACb+G,GACA/G,KAAKiH,MAAMC,eACXI;QACF,MAAMC,IAAS1G,EAAAb,MAAIoH,GAAA,KAAAC,GAAe9C,KAAnBvE,MACbgH,GACAhH,KAAKiH,MAAMC,eACXI;QACF,IAAIH,IAASI,GAAQ;UACnB,OAAOvH,KAAKiH,MAAMO,aAAa,IAAI;;QAErC,IAAIL,IAASI,GAAQ;UACnB,OAAOvH,KAAKiH,MAAMO,YAAY,KAAK;;;MAGvC,OAAO;AAAC;;;eAMVC,EAAA1H,IAAAC,OAA4B0H;MAC1B,OAAMC,UAAEA,GAAQC,eAAEA,KAAkBF,EAAExG;MACtClB,KAAKiH,QAAQ;QACXC,eAAeS;QACfH,WAAWI,MAAkB;;AAC9B;IAGHC,EAAA9H,IAAAC,OAA4B;MAC1BA,KAAK8H;AAAmB;IAE1BxB,EAAAvG,IAAAC,OAAgC;MAC9BA,KAAK+H,sBAAsB/H,KAAKW;AAAmB;IAGrDqH,EAAAjI,IAAAC,OAA2BgB;MACzBhB,KAAKiI,0BAA0BjH,EAAME,WAAW9B;AAAc;IAGhE8I,EAAAnI,IAAAC,OAAgB,MACP,EACLmI,EAAA;;MAEEC,OAAM;OAEND,EAAA;MAAOC,OAAM;MAAQC,SAAQ;OAC1BxH,EAAAb,MAAIF,GAAA,KAAkBwI,OAAO7I,OAEhC0I,EAAA;MACExJ,IAAG;MACHyJ,OAAM;MACNG,WAAW;MACX7J,OAAOsB,KAAKiB;MACZuH,UAAUC,EAAOC;MACjBC,SAAS9H,EAAAb,MAAIe,GAAA;SAIjBoH,EAAA;MAAKC,OAAM;OACTD,EAAA;MAAOC,OAAM;MAAQC,SAAQ;OAC1BxH,EAAAb,MAAIF,GAAA,KAAkBwI,OAAOM,eAGhCT,EAAA;;MAEExJ,IAAG;MACHkK,eAAc;MACdnK,OAAOsB,KAAKiD;MACZ6F,cAAc9I,KAAK+I;MACnBC,sBAAsBhJ,KAAKiJ;MAC3BC,KAAMC,KACHC,EAAApJ,MAAIO,GAAmB4I,GAAoC;SAKlEhB,EAAA;;MAEEC,OAAM;MACNiB,OAAOxI,EAAAb,MAAIE,GAAA;OAEXiI,EAAA;MAAKmB,MAAMzI,EAAAb,MAAIG,GAAA;MAAuBiI,OAAM;OAC1CD,EAAA;MAAKC,OAAM;OACTD,EAAA;;MAEEC,OAAM;OAEND,EAAA;MAAOC,OAAM;MAAQC,SAAQ;OAC1BxH,EAAAb,MAAIF,GAAA,KAAkBwI,OAAO9I,WAEhC2I,EAAA;MACExJ,IAAG;MACHyJ,OAAM;MACN1J,OAAOsB,KAAK6B;MACZ0H,WAAWvJ,KAAKwJ;MAChBH,OAAOrJ,KAAKwB;MACZmH,SAAS9H,EAAAb,MAAI8B,GAAA;SAIjBqG,EAAA;;MAEEC,OAAM;OAEND,EAAA;MAAOC,OAAM;MAAQC,SAAQ;OAC1BxH,EAAAb,MAAIF,GAAA,KAAkBwI,OAAO/J,UAEhC4J,EAAA;;MAEEC,OAAM;OAEND,EAAA;MACEC,OAAM;MACNxJ,SAASiC,EAAAb,MAAIF,GAAA,KAAkBwI,OAAO5E;MACtC+F,cAActK;MACdT,OACEsB,KAAKgC,4BACD7C,KACA4E;MAEN4E,SAAS9H,EAAAb,MAAI+B,GAAA;QAGfoG,EAAA;MACEC,OAAM;MACNxJ,SAASiC,EAAAb,MAAIF,GAAA,KAAkBwI,OAAOoB;MACtCD,cAAcrK;MACduJ,SAAS9H,EAAAb,MAAIgI,GAAA;UAKnBG,EAAA;;MAEEC,OAAM;OAEND,EAAA;MACEC,OAAO;QACLvJ,OAAS;QACT,oBAAoBmB,KAAKiI;;MAE3BI,SAAQ;OAEPxH,EAAAb,MAAIF,GAAA,KAAkBwI,OAAOqB,aAEhCxB,EAAA;MACExJ,IAAG;MACHyJ,OAAM;MACN1J,OAAOsB,KAAKkC;MACZqH,WAAWvJ,KAAKiI;MAChBoB,OAAOrJ,KAAK4J;MACZjB,SAAS9H,EAAAb,MAAIiC,GAAA;SAIjBkG,EAAA;;MAEEC,OAAM;OAEND,EAAA;MACEC,OAAO;QACLvJ,OAAS;QACT,oBAAoBmB,KAAKiI;;MAE3BI,SAAQ;OAEPxH,EAAAb,MAAIF,GAAA,KAAkBwI,OAAOuB,OAEhC1B,EAAA;MACExJ,IAAG;MACHD,OAAOsB,KAAKqC;MACZ+F,OAAM;MACNmB,WAAWvJ,KAAKiI;MAChBO,UAAUC,EAAOC;MACjBC,SAAS9H,EAAAb,MAAIoC,GAAA;SAIjB+F,EAAA;;MAEEC,OAAM;OAEND,EAAA;MACEC,OAAO;QACLvJ,OAAS;QACT,mBACEmB,KAAKmC,sBAAsB2H,EAAaC;;MAE5C1B,SAAQ;OAEPxH,EAAAb,MAAIF,GAAA,KAAkBwI,OAAO0B,WAEhC7B,EAAA;MACE8B,MAAK;MACL7B,OAAM;MACNzJ,IAAG;MACHc,MAAK;MACLf,OAAOsB,KAAKuC;MACZ2H,KAAK7K;MACLkK,UAAUvJ,KAAKmC,sBAAsB2H,EAAaC;MAClDpB,SAAS9H,EAAAb,MAAIsC,GAAA;SAIjB6F,EAAA;;MAEEC,OAAM;OAEND,EAAA;MAAOC,OAAM;MAAQC,SAAQ;OAC1BxH,EAAAb,MAAIF,GAAA,KAAkBwI,OAAOtE,QAEhCmE,EAAA;MACExJ,IAAG;MACHyJ,OAAM;MACN1J,OAAOsB,KAAKyC;MACZ8G,WAAWvJ,KAAKmK;MAChBd,OAAOrJ,KAAKoK;MACZzB,SAAS9H,EAAAb,MAAIwC,GAAA;SAIjB2F,EAAA;;MAEEC,OAAM;OAEND,EAAA;MAAOC,OAAM;MAAQC,SAAQ;OAC1BxH,EAAAb,MAAIF,GAAA,KAAkBwI,OAAOrE,WAEhCkE,EAAA;MACExJ,IAAG;MACHyJ,OAAM;MACN1J,OAAOsB,KAAK2C;MACZ4G,WAAWvJ,KAAKqK;MAChBhB,OAAOrJ,KAAKsK;MACZ3B,SAAS9H,EAAAb,MAAI0C,GAAA;SAIjByF,EAAA;;MAEEC,OAAM;OAEND,EAAA;MAAOC,OAAM;MAAQC,SAAQ;OAC1BxH,EAAAb,MAAIF,GAAA,KAAkBwI,OAAOpE,UAEhCiE,EAAA;MACExJ,IAAG;MACHyJ,OAAM;MACN1J,OAAOsB,KAAK6C;MACZ0G,WAAWvJ,KAAKuK;MAChBlB,OAAOrJ,KAAKwK;MACZ7B,SAAS9H,EAAAb,MAAI4C,GAAA;SAIjBuF,EAAA;;MAEEC,OAAM;OAEND,EAAA;MAAOC,OAAM;MAAQC,SAAQ;OAC1BxH,EAAAb,MAAIF,GAAA,KAAkBwI,OAAOnE,QAEhCgE,EAAA;MACExJ,IAAG;MACHyJ,OAAM;MACN1J,OAAOsB,KAAK+C;MACZwG,WAAWvJ,KAAKyK;MAChBpB,OAAOrJ,KAAK0K;MACZ/B,SAAS9H,EAAAb,MAAI8C,GAAA;SAIjBqF,EAAA;;MAEEC,OAAM;OAEND,EAAA;MAAOC,OAAM;MAAQC,SAAQ;OAC1BxH,EAAAb,MAAIF,GAAA,KAAkBwI,OAAOqC,SAEhCxC,EAAA;MACExJ,IAAG;MACH6J,UAAUC,EAAOC;MACjBN,OAAM;MACN1J,OAAOsB,KAAKqB;MACZuJ,aACE/J,EAAAb,MAAIF,GAAA,KAAkBwI,OAAOuC;MAE/BlC,SAAS9H,EAAAb,MAAIoB,GAAA;MACbtC,aAAaa;MACbsK,MAAK;SAIT9B,EAAA;;MAEEC,OAAM;MACN0C,SAASjK,EAAAb,MAAI+K,GAAA;OAEb5C,EAAA;MAAUC,OAAM;MAAU4C,KAAK1L;MAAY2K,MAAK;QAC/CpJ,EAAAb,MAAIF,GAAA,KAAkBwI,OAAO2C;IAQ1CC,EAAAnL,IAAAC,OAAgB,MAEZmI,EAAA;MAAKC,OAAM;OAAgCvH,EAAAb,MAAImL,GAAA,KAAc5G,KAAlBvE;IAI/CmL,EAAApL,IAAAC,OAAgB;gBAIZmI,EAAA;MAAKC,OAAM;OACRpI,KAAKoF,oBAAoB5G,KAAIoD,KAC5BuG,EAAA;MAAQC,OAAM;OACZD,EAAA;MAASC,OAAM;OACbD,EAAA;MAAKC,OAAM;MAAc4C,KAAKpJ,EAAKwJ;MAAKC,KAAKzJ,EAAKnC;SAEpD0I,EAAA;MAAYC,OAAM;OAAsBxG,EAAKnC;IAMvD6L,EAAAvL,IAAAC,OAAqB;MACnB,MAAMuL,IAAgB;MAEtB,OACEpD,EAAA;QACEC,OAAO;UACL,eAAe;UACfoD,YAAc;;SAGhBrD,EAAA;QACEe,KAAMC,KAAkCC,EAAApJ,MAAIM,GAAa6I,GAAE;QAC3DsC,kBAAiB;QACjBrD,OAAM;QACNsD,kBAAiB;SAEjBvD,EAAA;QAA2BC,OAAM;SAC/BD,EAAA;QACER,UAAS;QACTgE,YAAW;QACXC,aAAa;QACbC,MAAMpD,EAAOqD,YAAYC,QAAQC;QACjC5D,OAAM;QACN6D,WAAW;QACXC,UAAU;UAEZ/D,EAAA;QACER,UAAS;QACTgE,YAAY9K,EAAAb,MAAIF,GAAA,KAAkBqM,UAAU1M;QAC5CmM,aAAa;QACbxD,OAAM;QAAqB,wBACN;QACrByD,MAAMN;QACNU,WAAW;QACXC,UAAU;QACVE,qBAAqBvL,EAAAb,MAAIyH,GAAA;UAE3BU,EAAA;QACER,UAAS;QACTgE,YAAY9K,EAAAb,MAAIF,GAAA,KAAkBqM,UAAUE;QAC5CT,aAAa;QACbC,MAAMN;QACNnD,OAAM;QACN6D,WAAW;QACXC,UAAU;QACVE,qBAAqBvL,EAAAb,MAAIyH,GAAA;UAE3BU,EAAA;QACER,UAAS;QACTgE,YAAY9K,EAAAb,MAAIF,GAAA,KAAkBqM,UAAUG;QAC5CV,aAAa;QACbC,MAAK;QACLzD,OAAM;QACN6D,WAAW;QACXC,UAAU;UAEZ/D,EAAA;QACER,UAAS;QACTgE,YAAY9K,EAAAb,MAAIF,GAAA,KAAkBqM,UAAUtI;QAC5C+H,aAAa;QACbC,MAAMN;QACNnD,OAAM;QACN6D,WAAW;QACXC,UAAU;QACVE,qBAAqBvL,EAAAb,MAAIyH,GAAA;UAE3BU,EAAA;QACER,UAAS;QACTgE,YAAY9K,EAAAb,MAAIF,GAAA,KAAkBqM,UAAUI;QAC5CX,aAAa;QACbC,MAAMN;QACNnD,OAAM;QACN6D,WAAW;QACXC,UAAU;QACVE,qBAAqBvL,EAAAb,MAAIyH,GAAA;UAE3BU,EAAA;QACER,UAAS;QACTgE,YAAY9K,EAAAb,MAAIF,GAAA,KAAkBqM,UAAUK;QAC5CZ,aAAa;QACbC,MAAMN;QACNnD,OAAM;QACN6D,WAAW;QACXC,UAAU;QACVE,qBAAqBvL,EAAAb,MAAIyH,GAAA;WAI5BzH,KAAKmD,gBAAgB1B,SACpB0G,EAAA;QAAwBC,OAAM;SAC3B,KAAIpI,KAAKmD,kBACP0C,KAAKhF,EAAAb,MAAI8G,GAAA,MACTtI,KAAKiO,KACJtE,EAAA;QAAqBuE,OAAOD,EAAI9N;QAAIyJ,OAAM;SACxCD,EAAA;QAAsBC,OAAM;SAC1BD,EAAA;QAAU6C,KAAKyB,EAAIE;WAErBxE,EAAA;QAAsBC,OAAM;SACzBqE,EAAIhN,OAEP0I,EAAA;QAAsBC,OAAM;SACzBqE,EAAIJ,SAEPlE,EAAA;QAAsBC,OAAM;SACzBqE,EAAIH,cAEPnE,EAAA;QAAsBC,OAAM;SACzBwE,EAAWH,EAAI5I,gBAElBsE,EAAA;QAAsBC,OAAM;SACzBqE,EAAIF,WAEPpE,EAAA;QAAsBC,OAAM;SACzBwE,EAAWH,EAAID,mBAM1BrE,EAAA;QAAwBC,OAAM;SAC5BD,EAAA,sCACEA,EAAA;QACE0E,YAAY;QACZC,cAAclN;QACdmN,YAAYlM,EAAAb,MAAIF,GAAA,KAAkBkN,WAAWC;QAC7CC,KAAI;;AAMV;IAIVnC,EAAAhL,IAAAC,OAAsB;MACpB,IAAIa,EAAAb,MAAIC,GAAA,MAAqB;QAC3BD,KAAKiB,kBAAkBJ,EAAAb,MAAIC,GAAA,KAAoBR;QAC/CO,KAAKiD,oBAAoBpC,EAAAb,MAAIC,GAAA,KAAoBoM;QACjDrM,KAAKqB,4BAA4BR,EAAAb,MAAIC,GAAA,KAAoBuD;QACzDxD,KAAK6B,sBAAsBhB,EAAAb,MAAIC,GAAA,KAAoBT;QACnDQ,KAAKgC,4BACHnB,EAAAb,MAAIC,GAAA,KAAoByD,mBAAmBvE;QAC7Ca,KAAKkC,uBAAuBrB,EAAAb,MAAIC,GAAA,KAAoB0D;QACpD3D,KAAKuC,0BAA0B1B,EAAAb,MAAIC,GAAA,KAAoBkN;QACvDnN,KAAKqC,kBAAkBxB,EAAAb,MAAIC,GAAA,KAAoBmN;QAC/CpN,KAAKyC,mBAAmB5B,EAAAb,MAAIC,GAAA,KAAoB+D;QAChDhE,KAAK2C,sBAAsB9B,EAAAb,MAAIC,GAAA,KAAoBgE;QACnDjE,KAAK6C,qBAAqBhC,EAAAb,MAAIC,GAAA,KAAoBiE;QAClDlE,KAAK+C,mBAAmBlC,EAAAb,MAAIC,GAAA,KAAoBkE;QAChDnE,KAAKmC,oBAAoBnC,KAAKkC;;;IAIlCmL,EAAAtN,IAAAC,OAAyB;MACvBoJ,EAAApJ,MAAIC,GAAsB;QACxBR,MAAMO,KAAKiB;QACXoL,QAAQrM,KAAKiD;QACbO,gBAAgBxD,KAAKqB;QACrB7B,UAAUQ,KAAK6B;QACf6B,gBAAgB1D,KAAKgC,4BACjB7C,KACA;QACJwE,eAAe3D,KAAKkC;QACpBiL,kBAAkBnN,KAAKuC;QACvB6K,cAAcpN,KAAKqC;QACnB2B,OAAOhE,KAAKyC;QACZwB,UAAUjE,KAAK2C;QACfuB,SAASlE,KAAK6C;QACdsB,OAAOnE,KAAK+C;SACb;AAAA;IAGHuK,EAAAvN,IAAAC,OAAa;MACVa,EAAAb,MAAIM,GAAA,KAAmBQ;AAAe;mCAhkCS;kCACD;kCACA;+BACH;+BACA;;;2BAeN;kBAKT;+BAKiB;8BAKR;mCAKI;iBAM1C;MACEoG,eAAe;MACfM,WAAW;;2BAMY;qCACU;;qCAEA;;2BAEV;mCACQ;;;;;;;;;;;;;;;;;;;;;;EAiBnC,iBAAA+F,CAAkBC;IAChBxN,KAAKwB,0BAA0BlD,8BAA8BkP;IAC7D3M,EAAAb,MAAIsB,GAAA,KAAsBiD,KAA1BvE;;EAaF,sBAAAyN;IACE5M,EAAAb,MAAIsB,GAAA,KAAsBiD,KAA1BvE;;EAkBF,gBAAA0N,CAAiBC;IACf3N,KAAKwK,yBAAyBlM,8BAA8BqP;;EAQ9D,gBAAAC,CAAiBC;IACf7N,KAAKsK,yBAAyBhM,8BAA8BuP;;EAQ9D,aAAAC,CAAcC;IACZ/N,KAAK0K,sBAAsBpM,8BAA8ByP;;EAsC3D,aAAAC,CAAcC;IACZjO,KAAKoK,sBAAsB9L,8BAA8B2P;;EAG3D,uBAAMC;IACJ7O,KAAQwB,EAAAb,MAAIwE,GAAA,KAAUD,KAAdvE;;EAGV,gBAAAmO;IACEtN,EAAAb,MAAI+E,GAAA,KAAmBR,KAAvBvE;IACAa,EAAAb,MAAIqD,GAAA,KAAWkB,KAAfvE;IACAa,EAAAb,MAAIqN,GAAA,KAAuB9I,KAA3BvE;IACAoJ,EAAApJ,MAAIQ,GAAkB,OAAK;;EAG7B,uBAAM4N;IACJhF,EAAApJ,MAAIF,SAA0BuO,EAAOC,oBAAoBtO,KAAKmJ,KAAG;;QAGjEnJ,KAAKuN,kBAAkBvN,KAAKwJ;IAC5BxJ,KAAK0N,iBAAiB1N,KAAKuK;IAC3BvK,KAAK4N,iBAAiB5N,KAAKqK;IAC3BrK,KAAK8N,cAAc9N,KAAKyK;IACxBzK,KAAKgO,cAAchO,KAAKmK;;QAGxBnK,KAAK4J,qBAAqB,EACxB;MACEhL,SAASiC,EAAAb,MAAIF,GAAA,KAAkBwI,OAAOiG;MACtC7P,OAAOoL,EAAa0E;OAEtB;MACE5P,SAASiC,EAAAb,MAAIF,GAAA,KAAkBwI,OAAOwB,EAAaC;MACnDrL,OAAOoL,EAAaC;OAEtB;MACEnL,SAASiC,EAAAb,MAAIF,GAAA,KAAkBwI,OAAOwB,EAAa2E;MACnD/P,OAAOoL,EAAa2E;OAEtB;MACE7P,SAASiC,EAAAb,MAAIF,GAAA,KAAkBwI,OAAOwB,EAAa4E;MACnDhQ,OAAOoL,EAAa4E;;IAGxB1O,KAAKmC,oBAAoBnC,KAAK4J,mBAAmB,GAAGlL;IACpDsB,KAAKkC,uBAAuBlC,KAAK4J,mBAAmB,GAAGlL;;QAGvDmC,EAAAb,MAAIsB,GAAA,KAAsBiD,KAA1BvE;IACAA,KAAKiD,oBAAoBjD,KAAK+I;IAC9B,IAAI/I,KAAKoK,oBAAoB3I,SAAS,GAAG;MACvCzB,KAAKyC,mBAAmBzC,KAAKoK,oBAAoB,GAAG1L;;IAEtD,IAAIsB,KAAKsK,uBAAuB7I,SAAS,GAAG;MAC1CzB,KAAK2C,sBAAsB3C,KAAKsK,uBAAuB,GAAG5L;;IAE5D,IAAIsB,KAAKwK,uBAAuB/I,SAAS,GAAG;MAC1CzB,KAAK6C,qBAAqB7C,KAAKwK,uBAAuB,GAAG9L;;IAE3D,IAAIsB,KAAK0K,oBAAoBjJ,SAAS,GAAG;MACvCzB,KAAK+C,mBAAmB/C,KAAK0K,oBAAoB,GAAGhM;;IAGtD0K,EAAApJ,MAAIE,GAAoB,EACtB;MACEvB,IAAIkC,EAAAb,MAAIG,GAAA;MACRvB,SAASiC,EAAAb,MAAIF,GAAA,KAAkBwI,OAAOqG;MACtCC,UAAU;SAEb;;EAIH,cAAAC,CAAeC;IACb,IAAIC,SAASC,kBAAkBhP,KAAKmJ,IAAI;MACtC,QAAQ2F,EAAU5B;OAChB,KAAK;QACHrM,EAAAb,MAAIsG,GAAA,KAA8B/B,KAAlCvE;QACA;;OACF,KAAK;QACHa,EAAAb,MAAIS,GAAA,KAAgC8D,KAApCvE;QACA;;;;;;SASR,YAAMiP;IACJpO,EAAAb,MAAIqD,GAAA,KAAWkB,KAAfvE;;;;SAeF,sBAAAkP;IACE,KAAKrO,EAAAb,MAAIQ,GAAA,MAAiB;MACxBK,EAAAb,MAAIqD,GAAA,KAAWkB,KAAfvE;;;EAKJ,gCAAAmP;IACE,KAAKtO,EAAAb,MAAIQ,GAAA,MAAiB;MACxBK,EAAAb,MAAIqD,GAAA,KAAWkB,KAAfvE;;;EAKJ,0BAAAoP;IACE,KAAKvO,EAAAb,MAAIQ,GAAA,MAAiB;MACxBK,EAAAb,MAAIqD,GAAA,KAAWkB,KAAfvE;;;EAKJ,gCAAAqP;IACE,KAAKxO,EAAAb,MAAIQ,GAAA,MAAiB;MACxBK,EAAAb,MAAIqD,GAAA,KAAWkB,KAAfvE;;;EAKJ,2BAAAsP;IACE,KAAKzO,EAAAb,MAAIQ,GAAA,MAAiB;MACxBK,EAAAb,MAAIqD,GAAA,KAAWkB,KAAfvE;;;EAKJ,sBAAAuP;IACE,KAAK1O,EAAAb,MAAIQ,GAAA,MAAiB;MACxBK,EAAAb,MAAIqD,GAAA,KAAWkB,KAAfvE;;;EAKJ,8BAAAwP;IACE,KAAK3O,EAAAb,MAAIQ,GAAA,MAAiB;MACxBK,EAAAb,MAAIqD,GAAA,KAAWkB,KAAfvE;;;EAKJ,uBAAAyP;IACE,KAAK5O,EAAAb,MAAIQ,GAAA,MAAiB;MACxBK,EAAAb,MAAIqD,GAAA,KAAWkB,KAAfvE;;;EAKJ,0BAAA0P;IACE,KAAK7O,EAAAb,MAAIQ,GAAA,MAAiB;MACxBK,EAAAb,MAAIqD,GAAA,KAAWkB,KAAfvE;;;EAKJ,yBAAA2P;IACE,KAAK9O,EAAAb,MAAIQ,GAAA,MAAiB;MACxBK,EAAAb,MAAIqD,GAAA,KAAWkB,KAAfvE;;;EAKJ,uBAAA4P;IACE,KAAK/O,EAAAb,MAAIQ,GAAA,MAAiB;MACxBK,EAAAb,MAAIqD,GAAA,KAAWkB,KAAfvE;;;EAKJ,wBAAA6P;IACE,KAAKhP,EAAAb,MAAIQ,GAAA,MAAiB;MACxBK,EAAAb,MAAIqD,GAAA,KAAWkB,KAAfvE;;;EAmuBJ,MAAA8P;IACE,OACE3H,EAAC4H,GAAI;MAAC3H,OAAM;OACVD,EAAA;MAAUkB,OAAOnK;QAEjBiJ,EAAA;MAASC,OAAM;OACbD,EAAA;MAAQC,OAAM;OACXvH,EAAAb,MAAIkI,GAAA,KAAc3D,KAAlBvE,QAGHmI,EAAA;MAAKC,OAAM;OACRvH,EAAAb,MAAIsL,GAAA,KAAmB/G,KAAvBvE,OACDmI,EAAA;MAAKC,OAAM;OAA2BvH,EAAAb,MAAIkL,GAAA,KAAc3G,KAAlBvE,SAGxCmI,EAAA;MAAQC,OAAM;OACZD,EAAA;;MAEEC,OAAM;OAEL,GAAGpI,KAAKmD,gBAAgB1B,UACvBZ,EAAAb,MAAIF,GAAA,KAAkBkQ,SAASC,aAInC9H,EAAA;MAAKC,OAAM;OACTD,EAAA;;MAEExJ,IAAG;MACHyJ,OAAM;MACN0C,SAASjK,EAAAb,MAAIsN,GAAA;OAEZzM,EAAAb,MAAIF,GAAA,KAAkBoQ,OAAOC,eAGhChI,EAAA;;MAEExJ,IAAG;MACHyJ,OAAM;MACN0C,SAASjK,EAAAb,MAAI6H,GAAA;OAEZhH,EAAAb,MAAIF,GAAA,KAAkBoQ,OAAOE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;0CAhkB7BC,GAAkBnD;;EAC/B,QAAQA;GACN,KAAK;IACH,OAAOmD,EAAM5Q,QAAQ;;GACvB,KAAK;IACH,OAAO4Q,EAAMhE,UAAU;;GACzB,KAAK;IACH,OAAOgE,EAAM/D,eAAe;;GAC9B,KAAK;IACH,OAAO+D,EAAMxM,eACT+I,EAAWyD,EAAMxM,cAAcyM,gBAC/B;;GACN,KAAK;IACH,SAAOvR,IAAAsR,EAAM9D,cAAQ,QAAAxN,WAAA,aAAAA,EAAEuR,kBAAiB;;GAC1C,KAAK;IACH,OAAOD,EAAM7D,aACTI,EAAWyD,EAAM7D,YAAY8D,gBAC7B;;GACN;IACE,OAAO;;AAEb"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { g as e, r as s, h as t, H as n, a
|
|
1
|
+
import { g as e, r as s, h as t, H as n, a } from "./p-9b9ccd0c.js";
|
|
2
2
|
|
|
3
|
-
import { L as
|
|
3
|
+
import { L as o } from "./p-311eedf3.js";
|
|
4
4
|
|
|
5
|
-
const
|
|
5
|
+
const i = ":host{display:grid;block-size:100%;overflow:auto;display:flex;align-items:center;justify-content:center}.content{display:flex;align-items:center;flex-direction:column;color:var(--color-text-neutral-default);gap:var(--spacing-gap-xl);text-align:center;padding:var(--spacing-padding-xxl)}.check-icon{block-size:64px;inline-size:64px;border-radius:50%;background-color:var(--color-accent-success-contrast);background-image:var(--icon__system_check_on-surface--enabled);background-repeat:no-repeat;background-position:center center;background-size:32px;margin-block-end:16px}.genexus-next-logo{inline-size:140px;block-size:30px;margin-block-start:108px;mask-size:contain;background-color:var(--color-icon-neutral-default)}";
|
|
6
6
|
|
|
7
7
|
const c = "gx-ide-assets/sign-in-result";
|
|
8
8
|
|
|
@@ -21,7 +21,7 @@ const u = class {
|
|
|
21
21
|
s(this, e);
|
|
22
22
|
}
|
|
23
23
|
async componentWillLoad() {
|
|
24
|
-
this._componentLocale = await
|
|
24
|
+
this._componentLocale = await o.getComponentStrings(this.el);
|
|
25
25
|
}
|
|
26
26
|
componentDidLoad() {}
|
|
27
27
|
render() {
|
|
@@ -43,9 +43,10 @@ const u = class {
|
|
|
43
43
|
class: "heading-3"
|
|
44
44
|
}, this._componentLocale.title), t("p", {
|
|
45
45
|
class: "subtitle-regular-s"
|
|
46
|
-
}, this._componentLocale.description), t("
|
|
47
|
-
|
|
48
|
-
|
|
46
|
+
}, this._componentLocale.description), t("div", {
|
|
47
|
+
style: {
|
|
48
|
+
mask: `url(${g}) no-repeat center / contain`
|
|
49
|
+
},
|
|
49
50
|
class: "genexus-next-logo"
|
|
50
51
|
})));
|
|
51
52
|
}
|
|
@@ -53,11 +54,11 @@ const u = class {
|
|
|
53
54
|
return [ "gx-ide-assets/sign-in-result" ];
|
|
54
55
|
}
|
|
55
56
|
get el() {
|
|
56
|
-
return
|
|
57
|
+
return a(this);
|
|
57
58
|
}
|
|
58
59
|
};
|
|
59
60
|
|
|
60
|
-
u.style =
|
|
61
|
+
u.style = i;
|
|
61
62
|
|
|
62
63
|
export { u as gx_ide_sign_in_result };
|
|
63
|
-
//# sourceMappingURL=p-
|
|
64
|
+
//# sourceMappingURL=p-ca1b9b8a.entry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["signInResultCss","ASSETS_DIR","LEFT_SIDE_ILLUSTRATION","getAssetPath","RIGHT_SIDE_ILLUSTRATION","GENEXUS_NEXT_LOGO_SRC","CSS_BUNDLES","GxIdeSignInResult","componentWillLoad","this","_componentLocale","Locale","getComponentStrings","el","componentDidLoad","render","h","Host","class","style","backgroundImage","backgroundRepeat","backgroundPosition","backgroundSize","model","title","description","mask"],"sources":["src/components/sign-in-result/sign-in-result.scss?tag=gx-ide-sign-in-result&encapsulation=shadow","src/components/sign-in-result/sign-in-result.tsx"],"sourcesContent":[":host {\n display: grid;\n block-size: 100%;\n overflow: auto;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.content {\n display: flex;\n align-items: center;\n flex-direction: column;\n color: var(--color-text-neutral-default);\n gap: var(--spacing-gap-xl);\n text-align: center;\n padding: var(--spacing-padding-xxl);\n}\n\n.check-icon {\n $checkIconSize: 64px;\n block-size: $checkIconSize;\n inline-size: $checkIconSize;\n border-radius: 50%;\n background-color: var(--color-accent-success-contrast);\n background-image: var(--icon__system_check_on-surface--enabled);\n background-repeat: no-repeat;\n background-position: center center;\n background-size: 32px;\n margin-block-end: 16px;\n}\n\n.genexus-next-logo {\n inline-size: 140px;\n block-size: 30px;\n margin-block-start: 108px;\n mask-size: contain;\n background-color: var(--color-icon-neutral-default);\n}\n","// This is a starting template. Do not edit this file directly.\n// Dupicate it and modify the new file as needed.\n\nimport { Component, Host, Element, getAssetPath, h } from \"@stencil/core\";\n\nimport { MercuryBundles } from \"@genexus/mercury\";\n\nimport { Locale } from \"../../common/locale\";\n\nconst ASSETS_DIR = \"gx-ide-assets/sign-in-result\";\n\nconst LEFT_SIDE_ILLUSTRATION = getAssetPath(\n `./${ASSETS_DIR}/images/left-side-illustration.svg`\n);\nconst RIGHT_SIDE_ILLUSTRATION = getAssetPath(\n `./${ASSETS_DIR}/images/right-side-illustration.svg`\n);\nconst GENEXUS_NEXT_LOGO_SRC = getAssetPath(\n `./${ASSETS_DIR}/images/genexus-next-logo.svg`\n);\n\nconst CSS_BUNDLES: MercuryBundles = [\n // Use only the bundles that are needed for this component.\n \"resets/box-sizing\",\n \"utils/typography\",\n \"utils/spacing\"\n];\n\n@Component({\n tag: \"gx-ide-sign-in-result\",\n styleUrl: \"sign-in-result.scss\",\n shadow: true,\n assetsDirs: [\"gx-ide-assets/sign-in-result\"]\n})\nexport class GxIdeSignInResult {\n _componentLocale: any;\n\n @Element() el: HTMLGxIdeSignInResultElement;\n\n async componentWillLoad() {\n this._componentLocale = await Locale.getComponentStrings(this.el);\n }\n\n componentDidLoad() {}\n\n render() {\n return (\n <Host\n class=\"widget spacing-body\"\n style={{\n backgroundImage: `url('${LEFT_SIDE_ILLUSTRATION}'), url('${RIGHT_SIDE_ILLUSTRATION}')`,\n backgroundRepeat: \"no-repeat, no-repeat\",\n backgroundPosition: \"left, right bottom\",\n backgroundSize: \"auto 100%, auto 55%\"\n }}\n >\n <ch-theme model={CSS_BUNDLES}></ch-theme>\n <div class=\"content\">\n <span class=\"check-icon\"></span>\n <h1 class=\"heading-3\">{this._componentLocale.title}</h1>\n <p class=\"subtitle-regular-s\">{this._componentLocale.description}</p>\n <div\n style={{\n mask: `url(${GENEXUS_NEXT_LOGO_SRC}) no-repeat center / contain`\n }}\n class=\"genexus-next-logo\"\n />\n </div>\n </Host>\n );\n }\n}\n\nexport type CancelCallback = () => Promise<void>;\n\nexport type SaveCallback = () => Promise<string>;\n"],"mappings":";;;;AAAA,MAAMA,IAAkB;;ACSxB,MAAMC,IAAa;;AAEnB,MAAMC,IAAyBC,EAC7B,KAAKF;;AAEP,MAAMG,IAA0BD,EAC9B,KAAKF;;AAEP,MAAMI,IAAwBF,EAC5B,KAAKF;;AAGP,MAAMK,IAA8B;;AAElC,qBACA,oBACA;;MASWC,IAAiB;;;;EAK5B,uBAAMC;IACJC,KAAKC,yBAAyBC,EAAOC,oBAAoBH,KAAKI;;EAGhE,gBAAAC,IAAgB;EAEhB,MAAAC;IACE,OACEC,EAACC,GAAI;MACHC,OAAM;MACNC,OAAO;QACLC,iBAAiB,QAAQlB,aAAkCE;QAC3DiB,kBAAkB;QAClBC,oBAAoB;QACpBC,gBAAgB;;OAGlBP,EAAA;MAAUQ,OAAOlB;QACjBU,EAAA;MAAKE,OAAM;OACTF,EAAA;MAAME,OAAM;QACZF,EAAA;MAAIE,OAAM;OAAaT,KAAKC,iBAAiBe,QAC7CT,EAAA;MAAGE,OAAM;OAAsBT,KAAKC,iBAAiBgB,cACrDV,EAAA;MACEG,OAAO;QACLQ,MAAM,OAAOtB;;MAEfa,OAAM"}
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["mapOptionsToComboBoxItemModel","options","map","option","value","id","caption","label","startImgSrc","_a","iconName","wwImagesCss","CSS_BUNDLES","ALL_DESCENDANTS_VALUE","MODIFIED_VALUE","TODAY","RESET_ICON","getIconPath","category","name","colorType","SEARCH_ICON","NOTICE_ICON","GxIdeWWImages","_GxIdeWWImages_componentLocale","set","this","_GxIdeWWImages_filterInitialData","_GxIdeWWImages_ACCORDION_MODEL","_GxIdeWWImages_ACCORDION_FILTER_ID","_GxIdeWWImages_imagesMap","Map","_GxIdeWWImages_chGridEl","_GxIdeWWImages_filterModuleEl","_GxIdeWWImages_isInitialLoad","_GxIdeWWImages_deleteSelectionCallbackHandler","deleteSelectionCallback","selectedObjectsIds","_GxIdeWWImages_deselectAll","__classPrivateFieldGet","selectAllRows","_GxIdeWWImages_handleNameChange","event","filterNameValue","detail","target","_GxIdeWWImages_handleSearchContentsChange","filterSearchContentsValue","_GxIdeWWImages_applyDefaultCategory","defaultCategory","categoriesComboBoxModel","length","categoryExists","some","item","filterCategoryValue","_GxIdeWWImages_handleCategoryChange","_GxIdeWWImages_handleAllDescendantsChange","filterAllDescendantsValue","_GxIdeWWImages_handleAfterTypeChange","filterAfterTypeValue","afterCurrentValue","_GxIdeWWImages_handleUserChange","filterUserValue","_GxIdeWWImages_handleModifiedDateChange","filterModifiedDateValue","_GxIdeWWImages_handleStyleChange","filterStyleValue","_GxIdeWWImages_handleLanguageChange","filterLanguageValue","_GxIdeWWImages_handleDensityChange","filterDensityValue","_GxIdeWWImages_handleLayerChange","filterLayerValue","_GxIdeWWImages_handleModuleChange","filterModuleValue","_GxIdeWWImages_filterImagesInformationHandler","tabularGridData","images","_GxIdeWWImages_getImages","clear","filters","searchContents","parent","allDescendants","modifiedAfter","modifiedBy","modifiedDate","Date","undefined","style","language","density","layer","loadCallback","then","items","call","_GxIdeWWImages_getToday","now","date","toISOString","split","time","slice","_GxIdeWWImages_addEventListeners","addEventListener","ev","rowsId","selectionObjectChangedCallback","imagesSelectedItems","cachedItems","idsToLoad","forEach","selectedId","has","get","push","currentSelection","sort","join","loadPromises","loadImageItemsCallback","Promise","all","loadedItemsArrays","currentSelectionAfterLoad","allImageItems","_GxIdeWWImages_openSelectionCallBackHandler","preventDefault","stopPropagation","contextMenuCallback","selection","selectedRowsId","clientX","clientY","_GxIdeWWImages_sortImages","a","b","order","orderCriteria","valueA","_GxIdeWWImages_instances","_GxIdeWWImages_getImageValue","toUpperCase","valueB","ascending","_GxIdeWWImages_handleColumnSortChanged","e","columnId","sortDirection","_GxIdeWWImages_newObjectCallbackHandler","newObjectCallback","openSelectionCallback","_GxIdeWWImages_toggleModifiedControls","enabledModifiedControls","_GxIdeWWImages_renderHeader","h","class","htmlFor","filter","autoFocus","debounce","config","inputDebounce","onInput","moduleFolder","labelPosition","defaultValue","defaultModule","selectEntityCallback","selectModuleCallback","ref","el","__classPrivateFieldSet","model","slot","disabled","categories","checkedValue","modified","afterLabel","filterAfterOptions","user","FILTER_AFTER","DATE_TIME","dateTime","type","max","styles","stylesComboBoxModel","languages","languagesComboBoxModel","densities","densitiesComboBoxModel","layers","layersComboBoxModel","search","placeholder","searchContentsPlaceholder","onClick","_GxIdeWWImages_resetFilterHandler","src","resetFilters","_GxIdeWWImages_renderFilter","_GxIdeWWImages_renderImages","url","alt","_GxIdeWWImages_renderTabularGrid","commonColSize","main__grid","rowSelectionMode","columnResizeMode","columnName","settingable","size","tabularGrid","colSize","maxContent","resizable","sortable","tableHead","onColumnSortChanged","module","description","lastUser","importDate","obj","rowid","icon","formatDate","isAnimated","stateIconSrc","stateTitle","emptyState","title","key","modifiedDateTime","modifiedUser","_GxIdeWWImages_saveInitialFilterData","_GxIdeWWImages_selectAll","categoriesChanged","newCategories","defaultCategoryChanged","densitiesChanged","newDensities","languagesChanged","newLanguages","layersChanged","newLayers","stylesChanged","newStyles","connectedCallback","componentDidLoad","componentWillLoad","Locale","getComponentStrings","afterNone","NONE","IMPORT","LAST_BUILD","accordionCaption","expanded","keyDownHandler","eventInfo","document","activeElement","reload","filterNameValueChanged","filterSearchContentsValueChanged","filterCategoryValueChanged","filterAllDescendantsValueChanged","filterAfterTypeValueChanged","filterUserValueChanged","filterModifiedDateValueChanged","filterStyleValueChanged","filterLanguageValueChanged","filterDensityValueChanged","filterLayerValueChanged","filterModuleValueChanged","render","Host","objCount","matching","footer","btnSelectAll","btnNew","image","toLowerCase"],"sources":["src/components/ww-images/helpers.tsx","src/components/ww-images/ww-images.scss?tag=gx-ide-ww-images&encapsulation=shadow","src/components/ww-images/ww-images.tsx"],"sourcesContent":["import { ComboBoxModel } from \"@genexus/chameleon-controls-library\";\nimport { GxOption } from \"../..\";\n\nexport const mapOptionsToComboBoxItemModel = (\n options: GxOption[]\n): ComboBoxModel => {\n if (!options) {\n return [];\n }\n return options.map(option => {\n return {\n value: option.id,\n caption: option.label,\n startImgSrc: option.iconName ?? \"\"\n };\n });\n};\n","@import \"../../global/gx-ide-mixins.scss\";\n@import \"../../../node_modules/@genexus/mercury/dist/assets/scss/helpers.scss\";\n\n:host {\n container-type: inline-size;\n display: grid;\n block-size: 100%;\n overflow: auto;\n grid-template-rows: max-content 1fr max-content;\n}\n.section {\n display: contents;\n}\n\n// - - - - - - - - - - - -\n// Header\n// - - - - - - - - - - - -\n\n// First row\n.header {\n grid-template-areas:\n \"name module-folder\"\n \"advanced-filter-accordion advanced-filter-accordion\";\n grid-template-columns: 1fr 1fr;\n grid-auto-rows: max-content max-content;\n}\n\n// Accordion Advanced Filter\n.name {\n grid-area: name;\n}\n.module-folder {\n grid-area: module-folder;\n}\n.advanced-filter-accordion {\n grid-area: advanced-filter-accordion;\n}\n\n// - - - - - - - - - - - -\n// Main\n// - - - - - - - - - - - -\n\n.main {\n --sidebar-width: 400px;\n display: grid;\n grid-template-columns: 1fr var(--sidebar-width);\n overflow: auto;\n padding-block-start: var(--size-16);\n}\n\n.main__grid {\n overflow: auto;\n position: relative;\n}\n.tabular-grid-ww-images {\n overflow: auto;\n border-inline-end: var(--section-common-border);\n}\n\nch-tabular-grid-rowset-empty {\n position: absolute;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n inline-size: 100%;\n z-index: 1;\n}\n\n// main aside\n.main__aside {\n overflow: auto;\n display: grid;\n grid-template-rows: max-content 1fr;\n}\n.main__filter {\n display: grid;\n grid-auto-rows: max-content;\n grid-template-columns: 1fr 1fr 1fr;\n grid-template-areas:\n \"category options after\"\n \"style language user\"\n \"density layer date-time\"\n \"search-by-contents search-by-contents button-reset\";\n overflow: auto;\n}\n.category {\n grid-area: category;\n}\n.options {\n grid-area: options;\n}\n.after-date-time {\n grid-area: after;\n}\n.user {\n grid-area: user;\n}\n.date-time {\n grid-area: date-time;\n}\n.style {\n grid-area: style;\n}\n.language {\n grid-area: language;\n}\n.density {\n grid-area: density;\n}\n.layer {\n grid-area: layer;\n}\n.search-by-contents {\n grid-area: search-by-contents;\n}\n.button-reset {\n grid-area: button-reset;\n align-self: end;\n justify-self: end;\n}\n\n// - - - - - - - - - - - -\n// Images Grid\n// - - - - - - - - - - - -\n\n.main__images-container {\n display: grid;\n grid-template-columns: repeat(4, 1fr);\n gap: var(--size-8);\n position: relative;\n z-index: 1;\n\n .figure {\n margin: 0;\n background-color: var(--color-accent-surface-elevation-2);\n display: grid;\n gap: var(--size-4);\n padding: var(--size-8);\n border-radius: var(--size-4);\n opacity: 0;\n animation: fadeIn 300ms forwards;\n }\n .figure__picture {\n object-fit: contain;\n }\n .figure__img {\n block-size: auto;\n inline-size: 100%;\n }\n .figure__figcaption {\n text-align: center;\n font-size: var(--font-size-body-xs);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n inline-size: 100%;\n }\n}\n\n@include tabular-grid-cell-layout(\n $tabular-grid-selector: \".tabular-grid-ww-images\",\n $tabular-grid-cell-node-type: \"text\",\n $tabular-grid-cell-apply-ellipsis: true,\n $tabular-grid-affected-columns-nth-list: (\n 1,\n 2,\n 3,\n 4,\n 5,\n 6,\n 7\n )\n);\n\n@keyframes fadeIn {\n to {\n opacity: 1;\n }\n}\n\n// - - - - - - - - - - - -\n// Responsive\n// - - - - - - - - - - - -\n\n@container (max-width: 992px) {\n .main {\n --sidebar-width: 300px;\n }\n .main__images-container {\n grid-template-columns: repeat(3, 1fr);\n }\n}\n\n@container (max-width: 768px) {\n .main {\n --sidebar-width: 200px;\n }\n .main__images-container {\n grid-template-columns: repeat(2, 1fr);\n }\n}\n\n@container (max-width: 640px) {\n .main {\n --sidebar-width: 100px;\n }\n .main__images-container {\n grid-template-columns: 1fr;\n }\n}\n","/* eslint-disable @stencil-community/own-props-must-be-private */\n/* STENCIL IMPORTS */\nimport {\n Component,\n Element,\n Host,\n Listen,\n Method,\n Prop,\n State,\n Watch,\n h\n} from \"@stencil/core\";\n/* OTHER LIBRARIES IMPORTS */\nimport {\n AccordionModel,\n ChGridRowContextMenuEvent,\n ComboBoxModel\n} from \"@genexus/chameleon-controls-library\";\nimport { getIconPath, MercuryBundles } from \"@genexus/mercury\";\n/* CUSTOM IMPORTS */\nimport { FILTER_AFTER } from \"../../common/constants\";\nimport { config } from \"../../common/config\";\nimport { formatDate } from \"../../common/helpers\";\nimport { Locale } from \"../../common/locale\";\nimport { ContextMenuInfo, EntityData, GxOption } from \"../../common/types\";\nimport { mapOptionsToComboBoxItemModel } from \"./helpers\";\n\nconst CSS_BUNDLES: MercuryBundles = [\n \"resets/box-sizing\",\n \"components/accordion\",\n \"components/button\",\n \"components/checkbox\",\n \"components/combo-box\",\n \"components/edit\",\n \"components/icon\",\n \"components/tabular-grid\",\n \"components/sidebar\",\n \"utils/form\",\n \"utils/layout\",\n \"utils/typography\",\n \"utils/spacing\",\n \"chameleon/scrollbar\"\n];\n\nconst ALL_DESCENDANTS_VALUE = \"all-descendants\";\nconst MODIFIED_VALUE = \"modified\";\n\nlet TODAY: string = null;\n\n// icons\nconst RESET_ICON = getIconPath({\n category: \"gemini-tools\",\n name: \"reset\",\n colorType: \"interactive\"\n});\nconst SEARCH_ICON = getIconPath({\n category: \"gemini-tools\",\n name: \"search\",\n colorType: \"neutral\"\n});\nconst NOTICE_ICON = getIconPath({\n category: \"gemini-tools\",\n name: \"notice\",\n colorType: \"on-elevation\"\n});\n\n@Component({\n tag: \"gx-ide-ww-images\",\n styleUrl: \"ww-images.scss\",\n shadow: true,\n assetsDirs: [\"gx-ide-assets/ww-images\"]\n})\nexport class GxIdeWWImages {\n /**\n * The component hard-coded strings translations.\n */\n #componentLocale: any;\n #filterInitialData: FilerInitialData;\n #ACCORDION_MODEL: AccordionModel = [];\n #ACCORDION_FILTER_ID = \"advanced-filter\";\n\n #imagesMap: Map<string, ImageItemData[]> = new Map();\n\n @Element() el: HTMLGxIdeWwImagesElement;\n\n #chGridEl!: HTMLChTabularGridElement;\n // Only keep refs that are actually needed for operations (event listeners)\n #filterModuleEl!: HTMLGxIdeEntitySelectorElement;\n\n // representations of GxOption[] as ComboBoxModel.\n @State() categoriesComboBoxModel: ComboBoxModel = [];\n @State() densitiesComboBoxModel: ComboBoxModel = [];\n @State() languagesComboBoxModel: ComboBoxModel = [];\n @State() layersComboBoxModel: ComboBoxModel = [];\n @State() stylesComboBoxModel: ComboBoxModel = [];\n\n /**\n * The current value of the \"After\" combo box options.\n */\n @State() afterCurrentValue: string;\n\n /**\n * The options for the \"After\" combo-box\n */\n @State() filterAfterOptions: ComboBoxModel;\n\n /**\n * Image data to be displayed in the tabular grid (filtered from server and sorted)\n */\n @State() tabularGridData: ImageData[] = [];\n\n /**\n * Images rendered in the table\n */\n @State() images: ImageData[] = [];\n\n /**\n * Items of the selected image\n */\n @State() imagesSelectedItems: ImageItemData[] = [];\n\n /**\n * Selected images in the images table\n */\n @State() selectedObjectsIds: string[] = [];\n\n /**\n * When true, modified controls will be enabled, otherwise disabled.\n */\n @State() enabledModifiedControls: boolean = false;\n\n /**\n * Sorting order for images table\n */\n @State() order: { orderCriteria: string | null; ascending: boolean | null } =\n {\n orderCriteria: null,\n ascending: null\n };\n\n /**\n * Filter state variables\n */\n @State() filterNameValue = \"\";\n @State() filterSearchContentsValue = \"\";\n @State() filterCategoryValue: string;\n @State() filterAllDescendantsValue = false;\n @State() filterAfterTypeValue: string;\n @State() filterUserValue = \"\";\n @State() filterModifiedDateValue = \"\";\n @State() filterStyleValue: string;\n @State() filterLanguageValue: string;\n @State() filterDensityValue: string;\n @State() filterLayerValue: string;\n @State() filterModuleValue: EntityData;\n\n /**\n * Flag to prevent triggering #getImages on initial load\n */\n #isInitialLoad = true;\n\n /**\n * Categories rendered in the filter selector\n */\n @Prop() readonly categories!: GxOption[];\n @Watch(\"categories\")\n categoriesChanged(newCategories: GxOption[]) {\n this.categoriesComboBoxModel = mapOptionsToComboBoxItemModel(newCategories);\n this.#applyDefaultCategory();\n }\n\n /**\n * Function to expand data when right-click\n */\n @Prop() readonly contextMenuCallback!: ContextMenuCallback;\n\n /**\n * Default value for the 'categories' filter\n */\n @Prop() readonly defaultCategory: string;\n @Watch(\"defaultCategory\")\n defaultCategoryChanged() {\n this.#applyDefaultCategory();\n }\n\n /**\n * Default value for the module/folder filter\n */\n @Prop() readonly defaultModule: EntityData;\n\n /**\n * Function to delete the selected images.\n */\n @Prop() readonly deleteSelectionCallback!: DeleteSelectionCallback;\n\n /**\n * Densities rendered in the filter selector\n */\n @Prop() readonly densities!: GxOption[];\n @Watch(\"densities\")\n densitiesChanged(newDensities: GxOption[]) {\n this.densitiesComboBoxModel = mapOptionsToComboBoxItemModel(newDensities);\n }\n\n /**\n * Languages rendered in the filter selector\n */\n @Prop() readonly languages!: GxOption[];\n @Watch(\"languages\")\n languagesChanged(newLanguages: GxOption[]) {\n this.languagesComboBoxModel = mapOptionsToComboBoxItemModel(newLanguages);\n }\n\n /**\n * Layers rendered in the filter selector\n */\n @Prop() readonly layers!: GxOption[];\n @Watch(\"layers\")\n layersChanged(newLayers: GxOption[]) {\n this.layersComboBoxModel = mapOptionsToComboBoxItemModel(newLayers);\n }\n\n /**\n * Function that returns a list of images for the table\n */\n @Prop() readonly loadCallback!: LoadCallback;\n\n /**\n * Function that returns a list of items for the selected image\n */\n @Prop() readonly loadImageItemsCallback!: LoadImageItemsCallback;\n\n /**\n * Callback invoked when user press New button.\n */\n @Prop() readonly newObjectCallback!: NewObjectCallback;\n\n /**\n * Function to expand data for double-clicked or entered images\n */\n @Prop() readonly openSelectionCallback!: OpenSelectionCallback;\n\n /**\n * Callback invoked when an action is executed on the Module/Folder filter.\n */\n @Prop() readonly selectModuleCallback!: SelectModuleCallback;\n\n /**\n * Callback invoked when an item is selected\n */\n @Prop() readonly selectionObjectChangedCallback!: SelectionObjectCallback;\n\n /**\n * Styles rendered in the filter style selector\n */\n @Prop() readonly styles!: GxOption[];\n @Watch(\"styles\")\n stylesChanged(newStyles: GxOption[]) {\n this.stylesComboBoxModel = mapOptionsToComboBoxItemModel(newStyles);\n }\n\n async connectedCallback() {\n TODAY = this.#getToday();\n }\n\n componentDidLoad() {\n this.#addEventListeners();\n this.#getImages();\n this.#saveInitialFilterData();\n this.#isInitialLoad = false;\n }\n\n async componentWillLoad() {\n this.#componentLocale = await Locale.getComponentStrings(this.el);\n\n // initialize combo-box models\n this.categoriesChanged(this.categories);\n this.densitiesChanged(this.densities);\n this.languagesChanged(this.languages);\n this.layersChanged(this.layers);\n this.stylesChanged(this.styles);\n\n // initialize \"After\" combo-box options\n this.filterAfterOptions = [\n {\n caption: this.#componentLocale.filter.afterNone,\n value: FILTER_AFTER.NONE\n },\n {\n caption: this.#componentLocale.filter[FILTER_AFTER.DATE_TIME],\n value: FILTER_AFTER.DATE_TIME\n },\n {\n caption: this.#componentLocale.filter[FILTER_AFTER.IMPORT],\n value: FILTER_AFTER.IMPORT\n },\n {\n caption: this.#componentLocale.filter[FILTER_AFTER.LAST_BUILD],\n value: FILTER_AFTER.LAST_BUILD\n }\n ];\n this.afterCurrentValue = this.filterAfterOptions[0].value;\n this.filterAfterTypeValue = this.filterAfterOptions[0].value;\n\n // Initialize filter state values\n this.#applyDefaultCategory();\n this.filterModuleValue = this.defaultModule;\n if (this.stylesComboBoxModel.length > 0) {\n this.filterStyleValue = this.stylesComboBoxModel[0].value;\n }\n if (this.languagesComboBoxModel.length > 0) {\n this.filterLanguageValue = this.languagesComboBoxModel[0].value;\n }\n if (this.densitiesComboBoxModel.length > 0) {\n this.filterDensityValue = this.densitiesComboBoxModel[0].value;\n }\n if (this.layersComboBoxModel.length > 0) {\n this.filterLayerValue = this.layersComboBoxModel[0].value;\n }\n\n this.#ACCORDION_MODEL = [\n {\n id: this.#ACCORDION_FILTER_ID,\n caption: this.#componentLocale.filter.accordionCaption,\n expanded: false\n }\n ];\n }\n\n @Listen(\"keydown\", { passive: true })\n keyDownHandler(eventInfo: KeyboardEvent) {\n if (document.activeElement === this.el) {\n switch (eventInfo.key) {\n case \"Enter\":\n this.#openSelectionCallBackHandler();\n break;\n case \"Delete\":\n this.#deleteSelectionCallbackHandler();\n break;\n }\n }\n }\n\n /**\n * Reloads the view, refreshing the filters and the images table.\n */\n @Method()\n async reload(): Promise<void> {\n this.#getImages();\n }\n\n #deleteSelectionCallbackHandler = (): void => {\n this.deleteSelectionCallback(this.selectedObjectsIds);\n };\n\n #deselectAll = (): void => {\n (this.#chGridEl as any).selectAllRows(false);\n };\n\n /**\n * Watch filter state variables and trigger #getImages when they change\n */\n @Watch(\"filterNameValue\")\n filterNameValueChanged() {\n if (!this.#isInitialLoad) {\n this.#getImages();\n }\n }\n\n @Watch(\"filterSearchContentsValue\")\n filterSearchContentsValueChanged() {\n if (!this.#isInitialLoad) {\n this.#getImages();\n }\n }\n\n @Watch(\"filterCategoryValue\")\n filterCategoryValueChanged() {\n if (!this.#isInitialLoad) {\n this.#getImages();\n }\n }\n\n @Watch(\"filterAllDescendantsValue\")\n filterAllDescendantsValueChanged() {\n if (!this.#isInitialLoad) {\n this.#getImages();\n }\n }\n\n @Watch(\"filterAfterTypeValue\")\n filterAfterTypeValueChanged() {\n if (!this.#isInitialLoad) {\n this.#getImages();\n }\n }\n\n @Watch(\"filterUserValue\")\n filterUserValueChanged() {\n if (!this.#isInitialLoad) {\n this.#getImages();\n }\n }\n\n @Watch(\"filterModifiedDateValue\")\n filterModifiedDateValueChanged() {\n if (!this.#isInitialLoad) {\n this.#getImages();\n }\n }\n\n @Watch(\"filterStyleValue\")\n filterStyleValueChanged() {\n if (!this.#isInitialLoad) {\n this.#getImages();\n }\n }\n\n @Watch(\"filterLanguageValue\")\n filterLanguageValueChanged() {\n if (!this.#isInitialLoad) {\n this.#getImages();\n }\n }\n\n @Watch(\"filterDensityValue\")\n filterDensityValueChanged() {\n if (!this.#isInitialLoad) {\n this.#getImages();\n }\n }\n\n @Watch(\"filterLayerValue\")\n filterLayerValueChanged() {\n if (!this.#isInitialLoad) {\n this.#getImages();\n }\n }\n\n @Watch(\"filterModuleValue\")\n filterModuleValueChanged() {\n if (!this.#isInitialLoad) {\n this.#getImages();\n }\n }\n\n /**\n * Individual handler functions for each filter control\n */\n #handleNameChange = (event: CustomEvent<string> | InputEvent) => {\n this.filterNameValue = (event.detail ||\n (event.target as HTMLInputElement).value) as string;\n };\n\n #handleSearchContentsChange = (event: CustomEvent<string> | InputEvent) => {\n this.filterSearchContentsValue = (event.detail ||\n (event.target as HTMLInputElement).value) as string;\n };\n\n #applyDefaultCategory = () => {\n if (this.defaultCategory && this.categoriesComboBoxModel.length > 0) {\n const categoryExists = this.categoriesComboBoxModel.some(\n item => item.value === this.defaultCategory\n );\n if (categoryExists) {\n this.filterCategoryValue = this.defaultCategory;\n }\n }\n };\n\n #handleCategoryChange = (event: CustomEvent<string> | InputEvent) => {\n this.filterCategoryValue = event.detail as string;\n };\n\n #handleAllDescendantsChange = (event: CustomEvent<string> | InputEvent) => {\n this.filterAllDescendantsValue = event.detail === ALL_DESCENDANTS_VALUE;\n };\n\n #handleAfterTypeChange = (event: CustomEvent<string> | InputEvent) => {\n this.filterAfterTypeValue = event.detail as string;\n this.afterCurrentValue = event.detail as string;\n };\n\n #handleUserChange = (event: CustomEvent<string> | InputEvent) => {\n this.filterUserValue = (event.detail ||\n (event.target as HTMLInputElement).value) as string;\n };\n\n #handleModifiedDateChange = (event: InputEvent) => {\n this.filterModifiedDateValue = (event.target as HTMLInputElement).value;\n };\n\n #handleStyleChange = (event: CustomEvent<string> | InputEvent) => {\n this.filterStyleValue = event.detail as string;\n };\n\n #handleLanguageChange = (event: CustomEvent<string> | InputEvent) => {\n this.filterLanguageValue = event.detail as string;\n };\n\n #handleDensityChange = (event: CustomEvent<string> | InputEvent) => {\n this.filterDensityValue = event.detail as string;\n };\n\n #handleLayerChange = (event: CustomEvent<string> | InputEvent) => {\n this.filterLayerValue = event.detail as string;\n };\n\n #handleModuleChange = () => {\n // Module change is handled via event listener, but we update state\n if (this.#filterModuleEl) {\n this.filterModuleValue = this.#filterModuleEl.value;\n }\n };\n\n #filterImagesInformationHandler = () => {\n // Copy images from server to tabularGridData (will be sorted before rendering)\n this.tabularGridData = [...this.images];\n };\n\n #getImages = (): void => {\n this.#imagesMap.clear();\n\n const filters: ImageFiltersData = {\n name: this.filterNameValue,\n searchContents: this.filterSearchContentsValue,\n category: this.filterCategoryValue,\n parent: this.filterModuleValue ? this.filterModuleValue.id : null,\n allDescendants: this.filterAllDescendantsValue,\n modifiedAfter: this.filterAfterTypeValue,\n modifiedBy: this.filterUserValue,\n modifiedDate: this.filterModifiedDateValue\n ? new Date(this.filterModifiedDateValue)\n : undefined,\n style: this.filterStyleValue,\n language: this.filterLanguageValue,\n density: this.filterDensityValue,\n layer: this.filterLayerValue\n };\n\n this.loadCallback(filters).then((items: ImageData[]) => {\n this.images = items;\n this.selectedObjectsIds = [];\n this.#deselectAll();\n this.#filterImagesInformationHandler();\n });\n };\n\n #getToday = (): string => {\n const now = new Date();\n const date = now.toISOString().split(\"T\")[0];\n const time = now.toISOString().split(\"T\")[1].slice(0, 5); // Only take 'HH:MM' part\n return `${date}T${time}`;\n };\n #addEventListeners = (): void => {\n /* module/folder */\n this.#filterModuleEl.addEventListener(\"valueChanged\", () => {\n this.#handleModuleChange();\n });\n\n // for grid selection\n this.#chGridEl.addEventListener(\"selectionChanged\", (ev: any): void => {\n this.selectedObjectsIds = ev.detail.rowsId;\n this.selectionObjectChangedCallback(this.selectedObjectsIds);\n\n if (this.selectedObjectsIds.length === 0) {\n this.imagesSelectedItems = [];\n return;\n }\n\n // Collect cached items immediately\n const cachedItems: ImageItemData[] = [];\n const idsToLoad: string[] = [];\n\n this.selectedObjectsIds.forEach((selectedId: string) => {\n if (this.#imagesMap.has(selectedId)) {\n const items = this.#imagesMap.get(selectedId);\n if (items) {\n cachedItems.push(...items);\n }\n } else {\n idsToLoad.push(selectedId);\n }\n });\n\n // If all items were cached, update immediately\n if (idsToLoad.length === 0) {\n this.imagesSelectedItems = cachedItems;\n return;\n }\n\n // Store current selection to verify later (prevents race conditions)\n const currentSelection = [...this.selectedObjectsIds].sort().join(\",\");\n\n // Load missing items and combine with cached ones\n // loadImageItemsCallback must be invoked the first time a user selects an image\n const loadPromises = idsToLoad.map((selectedId: string) =>\n this.loadImageItemsCallback(selectedId).then(\n (items: ImageItemData[]) => {\n // Cache the items for future use\n this.#imagesMap.set(selectedId, items);\n return items;\n }\n )\n );\n\n Promise.all(loadPromises).then((loadedItemsArrays: ImageItemData[][]) => {\n // Verify that selection hasn't changed while loading\n const currentSelectionAfterLoad = [...this.selectedObjectsIds]\n .sort()\n .join(\",\");\n if (currentSelection !== currentSelectionAfterLoad) {\n // Selection changed, ignore this result\n return;\n }\n\n // Combine cached items with newly loaded items\n const allImageItems = [...cachedItems];\n loadedItemsArrays.forEach(items => {\n allImageItems.push(...items);\n });\n this.imagesSelectedItems = allImageItems;\n });\n });\n\n this.#chGridEl.addEventListener(\"rowDoubleClicked\", (): void => {\n this.#openSelectionCallBackHandler();\n });\n\n this.#chGridEl.addEventListener(\n \"rowContextMenu\",\n (ev: CustomEvent<ChGridRowContextMenuEvent>): void => {\n ev.preventDefault();\n ev.stopPropagation();\n this.contextMenuCallback({\n selection: ev.detail.selectedRowsId,\n clientX: ev.detail.clientX,\n clientY: ev.detail.clientY\n });\n }\n );\n };\n\n /**\n * Helper function to safely get image values for sorting\n */\n #getImageValue(image: ImageData, key: string): string {\n switch (key) {\n case \"name\":\n return image.name || \"\";\n case \"module\":\n return image.module || \"\";\n case \"description\":\n return image.description || \"\";\n case \"modifiedDate\":\n return image.modifiedDate\n ? formatDate(image.modifiedDate).toLowerCase()\n : \"\";\n case \"lastUser\":\n return image.lastUser?.toLowerCase() || \"\";\n case \"importDate\":\n return image.importDate\n ? formatDate(image.importDate).toLowerCase()\n : \"\";\n default:\n return \"\";\n }\n }\n\n /**\n * Sorts images based on the current order criteria\n */\n #sortImages = (a: ImageData, b: ImageData): number => {\n if (this.order.orderCriteria) {\n const valueA = this.#getImageValue(\n a,\n this.order.orderCriteria\n ).toUpperCase();\n const valueB = this.#getImageValue(\n b,\n this.order.orderCriteria\n ).toUpperCase();\n if (valueA < valueB) {\n return this.order.ascending ? -1 : 1;\n }\n if (valueA > valueB) {\n return this.order.ascending ? 1 : -1;\n }\n }\n return 0;\n };\n\n /**\n * Handles column sort changes\n */\n #handleColumnSortChanged = (e: CustomEvent) => {\n const { columnId, sortDirection } = e.detail;\n this.order = {\n orderCriteria: columnId,\n ascending: sortDirection === \"asc\"\n };\n };\n\n #newObjectCallbackHandler = (): void => {\n this.newObjectCallback();\n };\n #openSelectionCallBackHandler = (): void => {\n this.openSelectionCallback(this.selectedObjectsIds);\n };\n\n #toggleModifiedControls = (event: CustomEvent<string> | InputEvent) => {\n this.enabledModifiedControls = event.detail === MODIFIED_VALUE;\n };\n\n #renderHeader = (): Element[] => {\n return [\n <div\n // name\n class=\"field field-block name\"\n >\n <label class=\"label\" htmlFor=\"filter-name\">\n {this.#componentLocale.filter.name}\n </label>\n <ch-edit\n id=\"filter-name\"\n class=\"input\"\n autoFocus={true}\n value={this.filterNameValue}\n debounce={config.inputDebounce}\n onInput={this.#handleNameChange}\n ></ch-edit>\n </div>,\n\n <div class=\"field field-block module-folder\">\n <label class=\"label\" htmlFor=\"module-folder\">\n {this.#componentLocale.filter.moduleFolder}\n </label>\n\n <gx-ide-entity-selector\n // module/folder\n id=\"module/folder\"\n labelPosition=\"none\"\n value={this.filterModuleValue}\n defaultValue={this.defaultModule}\n selectEntityCallback={this.selectModuleCallback}\n ref={(el: HTMLGxIdeEntitySelectorElement) =>\n (this.#filterModuleEl = el as HTMLGxIdeEntitySelectorElement)\n }\n ></gx-ide-entity-selector>\n </div>,\n\n <ch-accordion-render\n // modified\n class=\"accordion-outlined advanced-filter-accordion\"\n model={this.#ACCORDION_MODEL}\n >\n <div slot={this.#ACCORDION_FILTER_ID} class=\"spacing-body\">\n <div class=\"main__filter field-group scrollable\">\n <div\n // category\n class=\"field field-block category\"\n >\n <label class=\"label\" htmlFor=\"filter-category\">\n {this.#componentLocale.filter.category}\n </label>\n <ch-combo-box-render\n id=\"filter-category\"\n class=\"combo-box\"\n value={this.filterCategoryValue}\n disabled={!this.categories}\n model={this.categoriesComboBoxModel}\n onInput={this.#handleCategoryChange}\n ></ch-combo-box-render>\n </div>\n\n <div\n // category\n class=\"field-group options\"\n >\n <label class=\"label\" htmlFor=\"filter-category\">\n {this.#componentLocale.filter.options}\n </label>\n <div\n // options\n class=\"field field-inline\"\n >\n <ch-checkbox\n class=\"checkbox all-descendants\"\n caption={this.#componentLocale.filter.allDescendants}\n checkedValue={ALL_DESCENDANTS_VALUE}\n value={\n this.filterAllDescendantsValue\n ? ALL_DESCENDANTS_VALUE\n : undefined\n }\n onInput={this.#handleAllDescendantsChange}\n ></ch-checkbox>\n\n <ch-checkbox\n class=\"checkbox modified\"\n caption={this.#componentLocale.filter.modified}\n checkedValue={MODIFIED_VALUE}\n onInput={this.#toggleModifiedControls}\n ></ch-checkbox>\n </div>\n </div>\n\n <div\n // after\n class=\"field field-block after-date-time\"\n >\n <label\n class={{\n \"label\": true,\n \"label--disabled\": !this.enabledModifiedControls\n }}\n htmlFor=\"filter-after-type\"\n >\n {this.#componentLocale.filter.afterLabel}\n </label>\n <ch-combo-box-render\n id=\"filter-after-type\"\n class=\"combo-box\"\n value={this.filterAfterTypeValue}\n disabled={!this.enabledModifiedControls}\n model={this.filterAfterOptions}\n onInput={this.#handleAfterTypeChange}\n ></ch-combo-box-render>\n </div>\n\n <div\n // user\n class=\"field field-block user\"\n >\n <label\n class={{\n \"label\": true,\n \"label--disabled\": !this.enabledModifiedControls\n }}\n htmlFor=\"filter-user\"\n >\n {this.#componentLocale.filter.user}\n </label>\n <ch-edit\n id=\"filter-user\"\n value={this.filterUserValue}\n class=\"input\"\n disabled={!this.enabledModifiedControls}\n debounce={config.inputDebounce}\n onInput={this.#handleUserChange}\n ></ch-edit>\n </div>\n\n <div\n // date/time\n class=\"field field-block date-time\"\n >\n <label\n class={{\n \"label\": true,\n \"label--disabled\":\n this.afterCurrentValue !== FILTER_AFTER.DATE_TIME\n }}\n htmlFor=\"modified-date\"\n >\n {this.#componentLocale.filter.dateTime}\n </label>\n <input\n type=\"datetime-local\"\n class=\"input \"\n id=\"modified-date\"\n name=\"modifiedDate\"\n value={this.filterModifiedDateValue}\n max={TODAY}\n disabled={this.afterCurrentValue !== FILTER_AFTER.DATE_TIME}\n onInput={this.#handleModifiedDateChange}\n ></input>\n </div>\n\n <div\n // style\n class=\"field field-block style\"\n >\n <label class=\"label\" htmlFor=\"filter-style\">\n {this.#componentLocale.filter.style}\n </label>\n <ch-combo-box-render\n id=\"filter-style\"\n class=\"combo-box\"\n value={this.filterStyleValue}\n disabled={!this.styles}\n model={this.stylesComboBoxModel}\n onInput={this.#handleStyleChange}\n ></ch-combo-box-render>\n </div>\n\n <div\n // language\n class=\"field field-block language\"\n >\n <label class=\"label\" htmlFor=\"filter-language\">\n {this.#componentLocale.filter.language}\n </label>\n <ch-combo-box-render\n id=\"filter-language\"\n class=\"combo-box\"\n value={this.filterLanguageValue}\n disabled={!this.languages}\n model={this.languagesComboBoxModel}\n onInput={this.#handleLanguageChange}\n ></ch-combo-box-render>\n </div>\n\n <div\n // density\n class=\"field field-block\"\n >\n <label class=\"label\" htmlFor=\"filter-density\">\n {this.#componentLocale.filter.density}\n </label>\n <ch-combo-box-render\n id=\"filter-density\"\n class=\"combo-box\"\n value={this.filterDensityValue}\n disabled={!this.densities}\n model={this.densitiesComboBoxModel}\n onInput={this.#handleDensityChange}\n ></ch-combo-box-render>\n </div>\n\n <div\n // layer\n class=\"field field-block\"\n >\n <label class=\"label\" htmlFor=\"filter-layer\">\n {this.#componentLocale.filter.layer}\n </label>\n <ch-combo-box-render\n id=\"filter-layer\"\n class=\"combo-box\"\n value={this.filterLayerValue}\n disabled={!this.layers}\n model={this.layersComboBoxModel}\n onInput={this.#handleLayerChange}\n ></ch-combo-box-render>\n </div>\n\n <div\n // search contents\n class=\"field field-block search-by-contents\"\n >\n <label class=\"label\" htmlFor=\"search-input\">\n {this.#componentLocale.filter.search}\n </label>\n <ch-edit\n id=\"search-input\"\n debounce={config.inputDebounce}\n class=\"input\"\n value={this.filterSearchContentsValue}\n placeholder={\n this.#componentLocale.filter.searchContentsPlaceholder\n }\n onInput={this.#handleSearchContentsChange}\n startImgSrc={SEARCH_ICON}\n type=\"search\"\n ></ch-edit>\n </div>\n\n <button\n // reset filter button\n class=\"button-secondary button-icon-and-text button-reset\"\n onClick={this.#resetFilterHandler}\n >\n <ch-image class=\"icon-sm\" src={RESET_ICON} type=\"mask\"></ch-image>\n {this.#componentLocale.filter.resetFilters}\n </button>\n </div>\n </div>\n </ch-accordion-render>\n ];\n };\n\n #renderFilter = (): Element[] => {\n return (\n <div class=\"sidebar-container scrollable\">{this.#renderImages()}</div>\n );\n };\n\n #renderImages = (): Element => {\n return (\n /* tiles */\n\n <div class=\"main__images-container spacing-body-inline\">\n {this.imagesSelectedItems.map(item => (\n <figure class=\"figure\">\n <picture class=\"figure__picture\">\n <img class=\"figure__img\" src={item.url} alt={item.name} />\n </picture>\n <figcaption class=\"figure__figcaption\">{item.name}</figcaption>\n </figure>\n ))}\n </div>\n );\n };\n #renderTabularGrid = (): Element => {\n const commonColSize = \"minmax(max-content, auto)\";\n\n return (\n <div\n class={{\n \"field-group\": true,\n \"main__grid\": true\n }}\n >\n <ch-tabular-grid\n ref={(el: HTMLChTabularGridElement) => (this.#chGridEl = el)}\n rowSelectionMode=\"multiple\"\n class=\"tabular-grid tabular-grid-ww-images\"\n columnResizeMode=\"splitter\"\n >\n <ch-tabular-grid-columnset class=\"tabular-grid-column-set\">\n <ch-tabular-grid-column\n columnId=\"icon\"\n columnName=\"\"\n settingable={false}\n size={config.tabularGrid.colSize.maxContent}\n class=\"tabular-grid-column\"\n resizable={true}\n sortable={false}\n ></ch-tabular-grid-column>\n <ch-tabular-grid-column\n columnId=\"name\"\n columnName={this.#componentLocale.tableHead.name}\n settingable={false}\n class=\"tabular-grid-column\"\n column-name-position=\"text\"\n size={commonColSize}\n resizable={true}\n sortable={true}\n onColumnSortChanged={this.#handleColumnSortChanged}\n ></ch-tabular-grid-column>\n <ch-tabular-grid-column\n columnId=\"module\"\n columnName={this.#componentLocale.tableHead.module}\n settingable={false}\n size={commonColSize}\n class=\"tabular-grid-column\"\n resizable={true}\n sortable={true}\n onColumnSortChanged={this.#handleColumnSortChanged}\n ></ch-tabular-grid-column>\n <ch-tabular-grid-column\n columnId=\"description\"\n columnName={this.#componentLocale.tableHead.description}\n settingable={false}\n size=\"minmax(300px, 1fr)\"\n class=\"tabular-grid-column\"\n resizable={false}\n sortable={false}\n ></ch-tabular-grid-column>\n <ch-tabular-grid-column\n columnId=\"modifiedDate\"\n columnName={this.#componentLocale.tableHead.modifiedDate}\n settingable={false}\n size={commonColSize}\n class=\"tabular-grid-column\"\n resizable={true}\n sortable={true}\n onColumnSortChanged={this.#handleColumnSortChanged}\n ></ch-tabular-grid-column>\n <ch-tabular-grid-column\n columnId=\"lastUser\"\n columnName={this.#componentLocale.tableHead.lastUser}\n settingable={false}\n size={commonColSize}\n class=\"tabular-grid-column\"\n resizable={true}\n sortable={true}\n onColumnSortChanged={this.#handleColumnSortChanged}\n ></ch-tabular-grid-column>\n <ch-tabular-grid-column\n columnId=\"importDate\"\n columnName={this.#componentLocale.tableHead.importDate}\n settingable={false}\n size={commonColSize}\n class=\"tabular-grid-column\"\n resizable={true}\n sortable={true}\n onColumnSortChanged={this.#handleColumnSortChanged}\n ></ch-tabular-grid-column>\n </ch-tabular-grid-columnset>\n\n {this.tabularGridData.length ? (\n <ch-tabular-grid-rowset class=\"tabular-grid-rowset\">\n {[...this.tabularGridData]\n .sort(this.#sortImages)\n .map((obj: ImageData) => (\n <ch-tabular-grid-row rowid={obj.id} class=\"tabular-grid-row\">\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n <ch-image src={obj.icon}></ch-image>\n </ch-tabular-grid-cell>\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 {obj.module}\n </ch-tabular-grid-cell>\n <ch-tabular-grid-cell class=\"tabular-grid-cell tabular-grid-cell-description\">\n {obj.description}\n </ch-tabular-grid-cell>\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {formatDate(obj.modifiedDate)}\n </ch-tabular-grid-cell>\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {obj.lastUser}\n </ch-tabular-grid-cell>\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {formatDate(obj.importDate)}\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 isAnimated={false}\n stateIconSrc={NOTICE_ICON}\n stateTitle={this.#componentLocale.emptyState.title}\n key=\"no-images-empty-state\"\n ></gx-ide-empty-state>\n </ch-tabular-grid-rowset-empty>\n </ch-tabular-grid-rowset>\n )}\n </ch-tabular-grid>\n </div>\n );\n };\n\n #resetFilterHandler = () => {\n if (this.#filterInitialData) {\n this.filterNameValue = this.#filterInitialData.name;\n this.filterModuleValue = this.#filterInitialData.module;\n this.filterSearchContentsValue = this.#filterInitialData.searchContents;\n this.filterCategoryValue = this.#filterInitialData.category;\n this.filterAllDescendantsValue =\n this.#filterInitialData.allDescendants === ALL_DESCENDANTS_VALUE;\n this.filterAfterTypeValue = this.#filterInitialData.modifiedAfter;\n this.filterModifiedDateValue = this.#filterInitialData.modifiedDateTime;\n this.filterUserValue = this.#filterInitialData.modifiedUser;\n this.filterStyleValue = this.#filterInitialData.style;\n this.filterLanguageValue = this.#filterInitialData.language;\n this.filterDensityValue = this.#filterInitialData.density;\n this.filterLayerValue = this.#filterInitialData.layer;\n this.afterCurrentValue = this.filterAfterTypeValue;\n }\n };\n\n #saveInitialFilterData = () => {\n this.#filterInitialData = {\n name: this.filterNameValue,\n module: this.filterModuleValue,\n searchContents: this.filterSearchContentsValue,\n category: this.filterCategoryValue,\n allDescendants: this.filterAllDescendantsValue\n ? ALL_DESCENDANTS_VALUE\n : \"\",\n modifiedAfter: this.filterAfterTypeValue,\n modifiedDateTime: this.filterModifiedDateValue,\n modifiedUser: this.filterUserValue,\n style: this.filterStyleValue,\n language: this.filterLanguageValue,\n density: this.filterDensityValue,\n layer: this.filterLayerValue\n };\n };\n\n #selectAll = (): void => {\n (this.#chGridEl as any).selectAllRows();\n };\n\n render(): void {\n return (\n <Host class=\"widget\">\n <ch-theme model={CSS_BUNDLES}></ch-theme>\n\n <section class=\"section\">\n <header class=\"header control-header-with-border spacing-body-inline spacing-body-block-start field-group\">\n {this.#renderHeader()}\n </header>\n\n <div class=\"main\">\n {this.#renderTabularGrid()}\n <div class=\"main__aside field-group\">{this.#renderFilter()}</div>\n </div>\n\n <footer class=\"dialog-footer-with-border dialog-footer-space-between spacing-body\">\n <p\n // matching objects\n class=\"text-body\"\n >\n {`${this.tabularGridData.length} ${\n this.#componentLocale.objCount.matching\n }`}\n </p>\n\n <div class=\"buttons-spacer\">\n <button\n // select all button\n id=\"button-select-all\"\n class=\"button-secondary\"\n onClick={this.#selectAll}\n >\n {this.#componentLocale.footer.btnSelectAll}\n </button>\n\n <button\n // new image button\n id=\"button-new-file\"\n class=\"button-primary button-icon-and-text\"\n onClick={this.#newObjectCallbackHandler}\n >\n {this.#componentLocale.footer.btnNew}\n </button>\n </div>\n </footer>\n </section>\n </Host>\n );\n }\n}\nexport type ContextMenuCallback = (\n contextMenuInfo: ContextMenuInfo\n) => Promise<void>;\n\nexport type DeleteSelectionCallback = (ids: string[]) => Promise<void>;\n\nexport type FilerInitialData = {\n name: string;\n module: EntityData;\n searchContents: string;\n category: string;\n allDescendants: string;\n modifiedAfter: string;\n modifiedDateTime: string;\n modifiedUser: string;\n style: string;\n language: string;\n density: string;\n layer: string;\n};\n\nexport type ImageData = {\n id: string;\n icon: string;\n name: string;\n description: string;\n parent: string;\n module: string;\n modifiedDate?: Date;\n lastUser?: string;\n importDate?: Date;\n};\n\nexport type ImageFiltersData = {\n name?: string;\n searchContents?: string;\n category?: string;\n parent?: string;\n allDescendants?: boolean;\n modifiedAfter?: string;\n modifiedBy?: string;\n modifiedDate?: Date;\n style?: string;\n language?: string;\n density?: string;\n layer?: string;\n};\n\nexport type ImageItemData = {\n id: string;\n name: string;\n url: string;\n};\n\nexport type LoadCallback = (filters: ImageFiltersData) => Promise<ImageData[]>;\n\nexport type LoadImageItemsCallback = (id: string) => Promise<ImageItemData[]>;\n\nexport type NewObjectCallback = () => Promise<void>;\n\nexport type OpenSelectionCallback = (ids: string[]) => Promise<void>;\n\nexport type SelectModuleCallback = () => Promise<EntityData | undefined>;\n\nexport type SelectionObjectCallback = (ids: string[]) => Promise<void>;\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["signInResultCss","ASSETS_DIR","LEFT_SIDE_ILLUSTRATION","getAssetPath","RIGHT_SIDE_ILLUSTRATION","GENEXUS_NEXT_LOGO","CSS_BUNDLES","GxIdeSignInResult","componentWillLoad","this","_componentLocale","Locale","getComponentStrings","el","componentDidLoad","render","h","Host","class","style","backgroundImage","backgroundRepeat","backgroundPosition","backgroundSize","model","title","description","src","alt"],"sources":["src/components/sign-in-result/sign-in-result.scss?tag=gx-ide-sign-in-result&encapsulation=shadow","src/components/sign-in-result/sign-in-result.tsx"],"sourcesContent":[":host {\n display: grid;\n block-size: 100%;\n overflow: auto;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.content {\n display: flex;\n align-items: center;\n flex-direction: column;\n color: var(--color-neutral-300);\n gap: var(--spacing-gap-xl);\n text-align: center;\n padding: var(--spacing-padding-xxl);\n}\n\n.check-icon {\n $checkIconSize: 64px;\n block-size: $checkIconSize;\n inline-size: $checkIconSize;\n border-radius: 50%;\n background-color: var(--color-accent-success-pressed);\n background-image: var(--icon__system_check_on-surface--enabled);\n background-repeat: no-repeat;\n background-position: center center;\n background-size: 32px;\n margin-block-end: 16px;\n}\n\n.genexus-next-logo {\n inline-size: 140px;\n margin-block-start: 108px;\n}\n","// This is a starting template. Do not edit this file directly.\n// Dupicate it and modify the new file as needed.\n\nimport { Component, Host, Element, getAssetPath, h } from \"@stencil/core\";\n\nimport { MercuryBundles } from \"@genexus/mercury\";\n\nimport { Locale } from \"../../common/locale\";\n\nconst ASSETS_DIR = \"gx-ide-assets/sign-in-result\";\n\nconst LEFT_SIDE_ILLUSTRATION = getAssetPath(\n `./${ASSETS_DIR}/images/left-side-illustration.svg`\n);\nconst RIGHT_SIDE_ILLUSTRATION = getAssetPath(\n `./${ASSETS_DIR}/images/right-side-illustration.svg`\n);\nconst GENEXUS_NEXT_LOGO = getAssetPath(\n `./${ASSETS_DIR}/images/genexus-next-logo.svg`\n);\n\nconst CSS_BUNDLES: MercuryBundles = [\n // Use only the bundles that are needed for this component.\n \"resets/box-sizing\",\n \"utils/typography\",\n \"utils/spacing\"\n];\n\n@Component({\n tag: \"gx-ide-sign-in-result\",\n styleUrl: \"sign-in-result.scss\",\n shadow: true,\n assetsDirs: [\"gx-ide-assets/sign-in-result\"]\n})\nexport class GxIdeSignInResult {\n _componentLocale: any;\n\n @Element() el: HTMLGxIdeSignInResultElement;\n\n async componentWillLoad() {\n this._componentLocale = await Locale.getComponentStrings(this.el);\n }\n\n componentDidLoad() {}\n\n render() {\n return (\n <Host\n class=\"widget spacing-body\"\n style={{\n backgroundImage: `url('${LEFT_SIDE_ILLUSTRATION}'), url('${RIGHT_SIDE_ILLUSTRATION}')`,\n backgroundRepeat: \"no-repeat, no-repeat\",\n backgroundPosition: \"left, right bottom\",\n backgroundSize: \"auto 100%, auto 55%\"\n }}\n >\n <ch-theme model={CSS_BUNDLES}></ch-theme>\n <div class=\"content\">\n <span class=\"check-icon\"></span>\n <h1 class=\"heading-3\">{this._componentLocale.title}</h1>\n <p class=\"subtitle-regular-s\">{this._componentLocale.description}</p>\n <img src={GENEXUS_NEXT_LOGO} alt=\"\" class=\"genexus-next-logo\" />\n </div>\n </Host>\n );\n }\n}\n\nexport type CancelCallback = () => Promise<void>;\n\nexport type SaveCallback = () => Promise<string>;\n"],"mappings":";;;;AAAA,MAAMA,IAAkB;;ACSxB,MAAMC,IAAa;;AAEnB,MAAMC,IAAyBC,EAC7B,KAAKF;;AAEP,MAAMG,IAA0BD,EAC9B,KAAKF;;AAEP,MAAMI,IAAoBF,EACxB,KAAKF;;AAGP,MAAMK,IAA8B;;AAElC,qBACA,oBACA;;MASWC,IAAiB;;;;EAK5B,uBAAMC;IACJC,KAAKC,yBAAyBC,EAAOC,oBAAoBH,KAAKI;;EAGhE,gBAAAC,IAAgB;EAEhB,MAAAC;IACE,OACEC,EAACC,GAAI;MACHC,OAAM;MACNC,OAAO;QACLC,iBAAiB,QAAQlB,aAAkCE;QAC3DiB,kBAAkB;QAClBC,oBAAoB;QACpBC,gBAAgB;;OAGlBP,EAAA;MAAUQ,OAAOlB;QACjBU,EAAA;MAAKE,OAAM;OACTF,EAAA;MAAME,OAAM;QACZF,EAAA;MAAIE,OAAM;OAAaT,KAAKC,iBAAiBe,QAC7CT,EAAA;MAAGE,OAAM;OAAsBT,KAAKC,iBAAiBgB,cACrDV,EAAA;MAAKW,KAAKtB;MAAmBuB,KAAI;MAAGV,OAAM"}
|