@genexus/genexus-ide-ui 2.0.0 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (112) hide show
  1. package/dist/cjs/{common-9020d675.js → common-82ec668f.js} +1 -26
  2. package/dist/cjs/common-82ec668f.js.map +1 -0
  3. package/dist/cjs/genexus-ide-ui.cjs.js +1 -1
  4. package/dist/cjs/gx-ide-comments-viewer.cjs.entry.js +1 -1
  5. package/dist/cjs/gx-ide-manage-module-references.cjs.entry.js +1 -1
  6. package/dist/cjs/gx-ide-new-environment.cjs.entry.js +2 -2
  7. package/dist/cjs/gx-ide-new-kb.cjs.entry.js +2 -2
  8. package/dist/cjs/gx-ide-object-selector.cjs.entry.js +1 -1
  9. package/dist/cjs/gx-ide-splash.cjs.entry.js +1 -1
  10. package/dist/cjs/gx-ide-start-page.cjs.entry.js +1 -1
  11. package/dist/cjs/gx-ide-team-dev-bring-changes.cjs.entry.js +2 -2
  12. package/dist/cjs/gx-ide-team-dev-commit.cjs.entry.js +2 -2
  13. package/dist/cjs/gx-ide-team-dev-history.cjs.entry.js +1 -1
  14. package/dist/cjs/gx-ide-team-dev-update-partial-selection.cjs.entry.js +1 -1
  15. package/dist/cjs/gx-ide-team-dev-update.cjs.entry.js +2 -2
  16. package/dist/cjs/gx-ide-ww-files.cjs.entry.js +1 -1
  17. package/dist/cjs/gx-ide-ww-images.cjs.entry.js +604 -283
  18. package/dist/cjs/gx-ide-ww-images.cjs.entry.js.map +1 -1
  19. package/dist/cjs/{helpers-b1b58657.js → helpers-bb6622f5.js} +1 -7
  20. package/dist/cjs/helpers-bb6622f5.js.map +1 -0
  21. package/dist/cjs/loader.cjs.js +1 -1
  22. package/dist/cjs/{tabular-grid-render-80aa5fd2.js → tabular-grid-render-96542933.js} +2 -2
  23. package/dist/cjs/{tabular-grid-render-80aa5fd2.js.map → tabular-grid-render-96542933.js.map} +1 -1
  24. package/dist/collection/components/ww-images/gx-ide-assets/ww-images/langs/ww-images.lang.en.json +11 -4
  25. package/dist/collection/components/ww-images/gx-ide-assets/ww-images/langs/ww-images.lang.ja.json +11 -4
  26. package/dist/collection/components/ww-images/gx-ide-assets/ww-images/langs/ww-images.lang.zh.json +45 -38
  27. package/dist/collection/components/ww-images/helpers.js +14 -0
  28. package/dist/collection/components/ww-images/helpers.js.map +1 -0
  29. package/dist/collection/components/ww-images/ww-images.css +126 -248
  30. package/dist/collection/components/ww-images/ww-images.js +682 -490
  31. package/dist/collection/components/ww-images/ww-images.js.map +1 -1
  32. package/dist/components/common.js +1 -25
  33. package/dist/components/common.js.map +1 -1
  34. package/dist/components/gx-ide-ww-images.js +650 -303
  35. package/dist/components/gx-ide-ww-images.js.map +1 -1
  36. package/dist/components/helpers.js +1 -6
  37. package/dist/components/helpers.js.map +1 -1
  38. package/dist/esm/{common-074a209e.js → common-ceaf354a.js} +2 -26
  39. package/dist/esm/common-ceaf354a.js.map +1 -0
  40. package/dist/esm/genexus-ide-ui.js +1 -1
  41. package/dist/esm/gx-ide-comments-viewer.entry.js +1 -1
  42. package/dist/esm/gx-ide-manage-module-references.entry.js +1 -1
  43. package/dist/esm/gx-ide-new-environment.entry.js +2 -2
  44. package/dist/esm/gx-ide-new-kb.entry.js +2 -2
  45. package/dist/esm/gx-ide-object-selector.entry.js +1 -1
  46. package/dist/esm/gx-ide-splash.entry.js +1 -1
  47. package/dist/esm/gx-ide-start-page.entry.js +1 -1
  48. package/dist/esm/gx-ide-team-dev-bring-changes.entry.js +2 -2
  49. package/dist/esm/gx-ide-team-dev-commit.entry.js +2 -2
  50. package/dist/esm/gx-ide-team-dev-history.entry.js +1 -1
  51. package/dist/esm/gx-ide-team-dev-update-partial-selection.entry.js +1 -1
  52. package/dist/esm/gx-ide-team-dev-update.entry.js +2 -2
  53. package/dist/esm/gx-ide-ww-files.entry.js +1 -1
  54. package/dist/esm/gx-ide-ww-images.entry.js +605 -284
  55. package/dist/esm/gx-ide-ww-images.entry.js.map +1 -1
  56. package/dist/esm/{helpers-7800bea2.js → helpers-b443f9e9.js} +2 -7
  57. package/dist/esm/helpers-b443f9e9.js.map +1 -0
  58. package/dist/esm/loader.js +1 -1
  59. package/dist/esm/{tabular-grid-render-12c1cc4b.js → tabular-grid-render-adb3f7e5.js} +2 -2
  60. package/dist/esm/{tabular-grid-render-12c1cc4b.js.map → tabular-grid-render-adb3f7e5.js.map} +1 -1
  61. package/dist/genexus-ide-ui/genexus-ide-ui.esm.js +1 -1
  62. package/dist/genexus-ide-ui/genexus-ide-ui.esm.js.map +1 -1
  63. package/dist/genexus-ide-ui/gx-ide-assets/ww-images/langs/ww-images.lang.en.json +11 -4
  64. package/dist/genexus-ide-ui/gx-ide-assets/ww-images/langs/ww-images.lang.ja.json +11 -4
  65. package/dist/genexus-ide-ui/gx-ide-assets/ww-images/langs/ww-images.lang.zh.json +45 -38
  66. package/dist/genexus-ide-ui/{p-dc399624.entry.js → p-1356ec09.entry.js} +3 -3
  67. package/dist/genexus-ide-ui/{p-c51f87fb.entry.js → p-18c3c961.entry.js} +2 -2
  68. package/dist/genexus-ide-ui/{p-c583252c.entry.js → p-1d3da80d.entry.js} +3 -3
  69. package/dist/genexus-ide-ui/{p-57c550b7.entry.js → p-21775439.entry.js} +2 -2
  70. package/dist/genexus-ide-ui/{p-d08fc16d.entry.js → p-27786355.entry.js} +6 -6
  71. package/dist/genexus-ide-ui/{p-c1f4458c.entry.js → p-2a59b523.entry.js} +2 -2
  72. package/dist/genexus-ide-ui/p-2d60e5d9.entry.js +936 -0
  73. package/dist/genexus-ide-ui/p-2d60e5d9.entry.js.map +1 -0
  74. package/dist/genexus-ide-ui/{p-5bab65ea.js → p-4d330836.js} +13 -19
  75. package/dist/genexus-ide-ui/p-4d330836.js.map +1 -0
  76. package/dist/genexus-ide-ui/{p-e5e38589.entry.js → p-5929f575.entry.js} +2 -2
  77. package/dist/genexus-ide-ui/{p-e8cd797d.entry.js → p-6b430ac1.entry.js} +3 -3
  78. package/dist/genexus-ide-ui/{p-70707166.entry.js → p-70cd77bc.entry.js} +3 -3
  79. package/dist/genexus-ide-ui/{p-401989bf.entry.js → p-750eb88a.entry.js} +2 -2
  80. package/dist/genexus-ide-ui/{p-ddfba1c8.entry.js → p-885e5d1c.entry.js} +2 -2
  81. package/dist/genexus-ide-ui/p-91e2ebb0.js +86 -0
  82. package/dist/genexus-ide-ui/p-91e2ebb0.js.map +1 -0
  83. package/dist/genexus-ide-ui/{p-2eec8e65.entry.js → p-b44a875d.entry.js} +3 -3
  84. package/dist/genexus-ide-ui/{p-532c2e0f.entry.js → p-ca47bb29.entry.js} +2 -2
  85. package/dist/genexus-ide-ui/{p-528ba8bb.js → p-e2b6d62b.js} +2 -2
  86. package/dist/types/components/ww-images/helpers.d.ts +3 -0
  87. package/dist/types/components/ww-images/ww-images.d.ts +116 -134
  88. package/dist/types/components.d.ts +31 -107
  89. package/package.json +1 -1
  90. package/dist/cjs/common-9020d675.js.map +0 -1
  91. package/dist/cjs/helpers-b1b58657.js.map +0 -1
  92. package/dist/esm/common-074a209e.js.map +0 -1
  93. package/dist/esm/helpers-7800bea2.js.map +0 -1
  94. package/dist/genexus-ide-ui/p-3f89ddf4.js +0 -133
  95. package/dist/genexus-ide-ui/p-3f89ddf4.js.map +0 -1
  96. package/dist/genexus-ide-ui/p-5bab65ea.js.map +0 -1
  97. package/dist/genexus-ide-ui/p-80c25124.entry.js +0 -610
  98. package/dist/genexus-ide-ui/p-80c25124.entry.js.map +0 -1
  99. /package/dist/genexus-ide-ui/{p-dc399624.entry.js.map → p-1356ec09.entry.js.map} +0 -0
  100. /package/dist/genexus-ide-ui/{p-c51f87fb.entry.js.map → p-18c3c961.entry.js.map} +0 -0
  101. /package/dist/genexus-ide-ui/{p-c583252c.entry.js.map → p-1d3da80d.entry.js.map} +0 -0
  102. /package/dist/genexus-ide-ui/{p-57c550b7.entry.js.map → p-21775439.entry.js.map} +0 -0
  103. /package/dist/genexus-ide-ui/{p-d08fc16d.entry.js.map → p-27786355.entry.js.map} +0 -0
  104. /package/dist/genexus-ide-ui/{p-c1f4458c.entry.js.map → p-2a59b523.entry.js.map} +0 -0
  105. /package/dist/genexus-ide-ui/{p-e5e38589.entry.js.map → p-5929f575.entry.js.map} +0 -0
  106. /package/dist/genexus-ide-ui/{p-e8cd797d.entry.js.map → p-6b430ac1.entry.js.map} +0 -0
  107. /package/dist/genexus-ide-ui/{p-70707166.entry.js.map → p-70cd77bc.entry.js.map} +0 -0
  108. /package/dist/genexus-ide-ui/{p-401989bf.entry.js.map → p-750eb88a.entry.js.map} +0 -0
  109. /package/dist/genexus-ide-ui/{p-ddfba1c8.entry.js.map → p-885e5d1c.entry.js.map} +0 -0
  110. /package/dist/genexus-ide-ui/{p-2eec8e65.entry.js.map → p-b44a875d.entry.js.map} +0 -0
  111. /package/dist/genexus-ide-ui/{p-532c2e0f.entry.js.map → p-ca47bb29.entry.js.map} +0 -0
  112. /package/dist/genexus-ide-ui/{p-528ba8bb.js.map → p-e2b6d62b.js.map} +0 -0
@@ -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: 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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"}
@@ -51,39 +51,39 @@ const formatDate = (e, t = "date-time") => {
51
51
  }
52
52
  o = e.toLocaleDateString(c);
53
53
  const i = e.getFullYear();
54
- const u = String(e.getMonth() + 1).padStart(2, "0");
55
- const l = String(e.getDate()).padStart(2, "0");
54
+ const l = String(e.getMonth() + 1).padStart(2, "0");
55
+ const u = String(e.getDate()).padStart(2, "0");
56
56
  const d = String(e.getHours()).padStart(2, "0");
57
- const f = String(e.getMinutes()).padStart(2, "0");
58
- const $ = `${d}:${f}`;
57
+ const $ = String(e.getMinutes()).padStart(2, "0");
58
+ const f = `${d}:${$}`;
59
59
  if (t === "date-time") {
60
60
  o += ` ${e.toLocaleTimeString()}`;
61
61
  } else if (t === "date-time-short") {
62
62
  // No seconds
63
- o = `${i}/${u}/${l} ${$}`;
63
+ o = `${i}/${l}/${u} ${f}`;
64
64
  } else {
65
65
  // pretty
66
66
  const t = daysFromToday(e);
67
67
  const s = new Date;
68
68
  const r = s.getFullYear();
69
69
  if (isToday(e)) {
70
- return `Today ${$}`;
70
+ return `Today ${f}`;
71
71
  } else if (isYesterday(e)) {
72
- return `Yesterday ${$}`;
72
+ return `Yesterday ${f}`;
73
73
  } else if (t <= 7) {
74
74
  // If one week or less, just show the day of the week, and the time
75
75
  const t = n[e.getDay()];
76
- return `${t} ${$}`;
76
+ return `${t} ${f}`;
77
77
  } else if (r === i) {
78
78
  // If current year, show day number and month name. Example: November 17th
79
79
  if (c === "es-ES") {
80
- o = `${l} de ${e.toLocaleString("es-ES", {
80
+ o = `${u} de ${e.toLocaleString("es-ES", {
81
81
  month: "long"
82
- })} ${$}`;
82
+ })} ${f}`;
83
83
  } else {
84
84
  o = `${e.toLocaleString("en-US", {
85
85
  month: "long"
86
- })} ${l} ${$}`;
86
+ })} ${u} ${f}`;
87
87
  }
88
88
  } else {
89
89
  // Display date as usual
@@ -113,12 +113,6 @@ const escapeRegExp = e => e.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
113
113
  }
114
114
  };
115
115
 
116
- const closeOnOutsideClickHandler = (e, n) => {
117
- if (!e.composedPath().includes(n)) {
118
- return true;
119
- }
120
- };
121
-
122
116
  const mapOptionsToComboBoxItemModel = e => e.map((e => ({
123
117
  value: e.id,
124
118
  caption: e.label
@@ -139,5 +133,5 @@ const renderChCheckboxItems = (n, t, s) => n === null || n === void 0 ? void 0 :
139
133
  });
140
134
  }));
141
135
 
142
- export { closeOnOutsideClickHandler as c, formatDate as f, hiChar as h, mapOptionsToComboBoxItemModel as m, renderChCheckboxItems as r };
143
- //# sourceMappingURL=p-5bab65ea.js.map
136
+ export { formatDate as f, hiChar as h, mapOptionsToComboBoxItemModel as m, renderChCheckboxItems as r };
137
+ //# sourceMappingURL=p-4d330836.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["daysOfWeek","daysFromToday","date","today","Date","timeDifference","getTime","daysDifference","Math","floor","isToday","toDateString","isYesterday","yesterday","setDate","getDate","formatDate","type","formattedDate","undefined","dateIsValid","locale","lang","_a","document","getElementsByTagName","getAttribute","valueOf","toLocaleDateString","year","getFullYear","month","String","getMonth","padStart","day","hours","getHours","minutes","getMinutes","time","toLocaleTimeString","daysPassedFromToday","currentYear","getDay","toLocaleString","escapeRegExp","str","replace","hiChar","text","filterValue","escapedFilterValue","re","RegExp","h","innerHTML","mapOptionsToComboBoxItemModel","options","map","option","value","id","caption","label","renderChCheckboxItems","frontEndCheckboxInputHandler","checkedIds","find","name","class","checkedValue","disabled","onInput","startImgSrc","iconName","key"],"sources":["src/common/helpers.tsx"],"sourcesContent":["import { h } from \"@stencil/core\";\n\nimport {\n ChCheckboxCustomEvent,\n ComboBoxModel,\n TreeViewItemModel\n} from \"@genexus/chameleon-controls-library\";\nexport type ChCheckboxArray = HTMLChCheckboxElement[] | null;\n\nimport { GxOption } from \"./types\";\n\nconst daysOfWeek = [\n \"Sunday\",\n \"Monday\",\n \"Tuesday\",\n \"Wednesday\",\n \"Thursday\",\n \"Friday\",\n \"Saturday\"\n];\n\n/**\n * @param element an HTMLElement\n * @returns an alphabetically ordered array of all the parts and exportparts the element contains.\n */\nexport const getElementSelectorParts = (element: HTMLElement) => {\n const queries: string[] = [];\n const elementParts = element.shadowRoot?.querySelectorAll(`[part]`);\n const elementExportParts =\n element.shadowRoot?.querySelectorAll(`[exportparts]`);\n\n elementParts?.forEach(el => {\n queries.push(\n `${element.tagName.toLowerCase()}::part(${el.getAttribute(\"part\")})`\n );\n });\n elementExportParts?.forEach(el => {\n queries.push(\n ...[\n ...el.getAttribute(\"exportparts\").matchAll(/(?:[\\w-]+:)?([\\w-]+)/g)\n ].map(item => `${element.tagName.toLowerCase()}::part(${item[1]})`)\n );\n });\n\n return queries.sort();\n};\n\n/**\n * @param selector a part selector\n * @returns A reference to the element the part belongs to.\n */\nexport const querySelectorPart = (selector: string) => {\n const querySelectorDeep = (\n element: HTMLElement,\n parts: string\n ): HTMLElement => {\n const shadow = element.shadowRoot;\n const partList = parts.split(\" \");\n\n const partElement: HTMLElement = shadow.querySelector(\n partList.map(partName => `[part~=\"${partName}\"]`).join(\"\")\n );\n if (partElement) {\n return partElement;\n }\n\n const exportPartElement: HTMLElement = shadow.querySelector(\n partList.map(partName => `[exportparts*=\"${partName}\"]`).join(\"\")\n );\n if (exportPartElement) {\n const exportPartList: string[] = [];\n const exportparts = exportPartElement.getAttribute(\"exportparts\");\n\n partList.forEach(partItem => {\n const exportPartName = exportparts.match(\n `(?:([\\\\w-]+):)?(${partItem})`\n )[1];\n if (exportPartName) {\n exportPartList.push(exportPartName);\n }\n });\n\n if (partList.length === exportPartList.length) {\n return querySelectorDeep(exportPartElement, exportPartList.join(\" \"));\n }\n }\n\n return null;\n };\n\n const selectorItems = selector.match(\"(.*)::part\\\\(([^)]+)\\\\)\");\n const entity = selectorItems[1];\n const partName = selectorItems[2];\n\n return querySelectorDeep(document.querySelector(entity), partName);\n};\n\nconst daysFromToday = (date: Date): number => {\n const today = new Date();\n // To calculate the time difference of two dates\n const timeDifference = today.getTime() - date.getTime();\n // To calculate the no. of days between two dates\n const daysDifference = timeDifference / (1000 * 3600 * 24);\n return Math.floor(daysDifference);\n};\n\n// - - - - - - - - - - - -\n// Date Functions\n// - - - - - - - - - - - -\n\nconst isToday = (date: Date): boolean => {\n const today = new Date();\n if (today.toDateString() === date.toDateString()) {\n return true;\n }\n return false;\n};\n\nconst isYesterday = (date: Date): boolean => {\n const yesterday = new Date();\n yesterday.setDate(yesterday.getDate() - 1);\n if (yesterday.toDateString() === date.toDateString()) {\n return true;\n }\n return false;\n};\n\nexport const formatDate = (\n date: Date,\n type: FormatDateType = \"date-time\"\n): string => {\n let formattedDate;\n // validate date\n // undefined or null\n if (date === undefined || date === null) {\n return \"\";\n }\n // If the date object is invalid it will return 'NaN' on getTime() and NaN is never equal to itself\n const dateIsValid = date.getTime() === date.getTime();\n if (!dateIsValid) {\n return \"Invalid date\";\n }\n let locale = \"en-US\";\n const lang = document\n .getElementsByTagName(\"html\")[0]\n .getAttribute(\"lang\")\n ?.valueOf();\n if (lang === \"es\") {\n locale = \"es-ES\";\n }\n formattedDate = date.toLocaleDateString(locale);\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, \"0\");\n const day = String(date.getDate()).padStart(2, \"0\");\n const hours = String(date.getHours()).padStart(2, \"0\");\n const minutes = String(date.getMinutes()).padStart(2, \"0\");\n const time = `${hours}:${minutes}`;\n if (type === \"date-time\") {\n formattedDate += ` ${date.toLocaleTimeString()}`;\n } else if (type === \"date-time-short\") {\n // No seconds\n formattedDate = `${year}/${month}/${day} ${time}`;\n } else {\n // pretty\n const daysPassedFromToday = daysFromToday(date);\n const today = new Date();\n const currentYear = today.getFullYear();\n if (isToday(date)) {\n return `Today ${time}`;\n } else if (isYesterday(date)) {\n return `Yesterday ${time}`;\n } else if (daysPassedFromToday <= 7) {\n // If one week or less, just show the day of the week, and the time\n const day = daysOfWeek[date.getDay()];\n return `${day} ${time}`;\n } else if (currentYear === year) {\n // If current year, show day number and month name. Example: November 17th\n if (locale === \"es-ES\") {\n formattedDate = `${day} de ${date.toLocaleString(\"es-ES\", {\n month: \"long\"\n })} ${time}`;\n } else {\n formattedDate = `${date.toLocaleString(\"en-US\", {\n month: \"long\"\n })} ${day} ${time}`;\n }\n } else {\n // Display date as usual\n formattedDate = formatDate(date, \"date-time-short\");\n }\n }\n return formattedDate;\n};\n\nexport type FormatDateType =\n | \"date\"\n | \"date-time\"\n | \"date-time-short\"\n | \"pretty\";\n\n// - - - - - - - - - - - -\n// /End of Date Functions\n// - - - - - - - - - - - -\n\n/* Count the total tree nodes (by default it does not count the first level nodes)*/\nexport const countTreeItems = (\n treeModel: TreeViewItemModel[],\n children = false\n): number => {\n let totalNodes = 0;\n treeModel.forEach(node => {\n children && totalNodes++;\n if (node.items) {\n totalNodes += countTreeItems(node.items, true);\n }\n });\n return totalNodes;\n};\n\n/**\n * @description it evaluates the initial selected combo item\n * @param options an array of GxOption\n * @returns the initial combo value, which in this case is the id\n */\nexport const setInitialComboValue = (options: GxOption[]): string => {\n const selected = options.find(option => option.selected);\n if (selected) {\n return selected.value || selected.id;\n } else {\n return options[0].value || options[0].id;\n }\n};\n\nexport const escapeRegExp = (str: string) => {\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n};\n\n/**\n * @description this function highlights the character(s) that match(es) the filter value.\n * hiChar comes from (hi)light (Char)acters\n * @param text the string to find the filter value on\n * @param filterValue the filter value\n * @returns a span element\n */\nexport const hiChar = function (text: string, filterValue: string) {\n if (text && filterValue) {\n const escapedFilterValue = escapeRegExp(filterValue);\n const re = new RegExp(escapedFilterValue, \"gi\");\n return (\n <span\n innerHTML={text.replace(re, '<span class=\"hiChar\">$&</span>')}\n ></span>\n );\n } else {\n return text;\n }\n};\n\nexport const closeOnOutsideClickHandler = (\n eventInfo: PointerEvent,\n ref: HTMLElement\n): true | void => {\n if (!eventInfo.composedPath().includes(ref)) {\n return true;\n }\n};\n\nexport const mapOptionsToComboBoxItemModel = (\n options: GxOption[]\n): ComboBoxModel =>\n options.map(option => ({\n value: option.id,\n caption: option.label\n // startImgSrc: option.iconName\n }));\n\nexport const renderChCheckboxItems = (\n options: GxOption[] | undefined,\n frontEndCheckboxInputHandler: (\n event: ChCheckboxCustomEvent<string> | InputEvent\n ) => void,\n checkedIds: string[]\n): HTMLChCheckboxElement[] => {\n return options?.map(option => {\n const value = checkedIds?.find(\n id => option.value === id || option.id === id\n );\n return (\n <ch-checkbox\n name={option.name}\n class=\"checkbox\"\n checkedValue={option.value || option.id}\n caption={option.label}\n disabled={option.disabled}\n value={value}\n onInput={frontEndCheckboxInputHandler}\n startImgSrc={option.iconName}\n key={option.value || option.id}\n ></ch-checkbox>\n );\n });\n};\n"],"mappings":"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"}
@@ -14,7 +14,7 @@ import { L as o } from "./p-311eedf3.js";
14
14
 
15
15
  import { c as r } from "./p-c5196b3b.js";
16
16
 
17
- import { f as n } from "./p-5bab65ea.js";
17
+ import { f as n } from "./p-4d330836.js";
18
18
 
19
19
  import { F as c } from "./p-13feb5cf.js";
20
20
 
@@ -537,4 +537,4 @@ _ = new WeakMap, K = new WeakMap, V = new WeakMap, A = new WeakMap, B = new Weak
537
537
  O.style = d;
538
538
 
539
539
  export { O as gx_ide_object_selector };
540
- //# sourceMappingURL=p-e5e38589.entry.js.map
540
+ //# sourceMappingURL=p-5929f575.entry.js.map
@@ -4,9 +4,9 @@ import { c as n } from "./p-c5196b3b.js";
4
4
 
5
5
  import { L as o } from "./p-311eedf3.js";
6
6
 
7
- import { r, m as h } from "./p-5bab65ea.js";
7
+ import { r, m as h } from "./p-4d330836.js";
8
8
 
9
- import { s as d, g as l } from "./p-3f89ddf4.js";
9
+ import { s as d, g as l } from "./p-91e2ebb0.js";
10
10
 
11
11
  import { v as c } from "./p-b32b6b1f.js";
12
12
 
@@ -442,4 +442,4 @@ N = new WeakMap;
442
442
  Z.style = u;
443
443
 
444
444
  export { Z as gx_ide_new_environment };
445
- //# sourceMappingURL=p-e8cd797d.entry.js.map
445
+ //# sourceMappingURL=p-6b430ac1.entry.js.map
@@ -14,9 +14,9 @@ import { c as n } from "./p-c5196b3b.js";
14
14
 
15
15
  import { L as h } from "./p-311eedf3.js";
16
16
 
17
- import { s as l, g as d } from "./p-3f89ddf4.js";
17
+ import { s as l, g as d } from "./p-91e2ebb0.js";
18
18
 
19
- import { r, m as c } from "./p-5bab65ea.js";
19
+ import { r, m as c } from "./p-4d330836.js";
20
20
 
21
21
  import { v as f } from "./p-b32b6b1f.js";
22
22
 
@@ -758,4 +758,4 @@ st = new WeakMap, at = new WeakMap, ot = new WeakMap, nt = new WeakMap;
758
758
  ut.style = u;
759
759
 
760
760
  export { ut as gx_ide_new_kb };
761
- //# sourceMappingURL=p-70707166.entry.js.map
761
+ //# sourceMappingURL=p-70cd77bc.entry.js.map
@@ -14,7 +14,7 @@ import { c as n } from "./p-c5196b3b.js";
14
14
 
15
15
  import { L as l } from "./p-311eedf3.js";
16
16
 
17
- import { f as c } from "./p-5bab65ea.js";
17
+ import { f as c } from "./p-4d330836.js";
18
18
 
19
19
  const d = ":host{display:grid;block-size:100%;grid-template-rows:max-content 1fr max-content;overflow:auto}.section{display:contents}.header{justify-content:end}.tabular-grid-main{overflow:auto;block-size:100%}.tabular-grid-main ch-tabular-grid-cell:is(:nth-child(2),:nth-child(3),:nth-child(4)){align-items:start;justify-content:start;display:inline-block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-inline-size:0}";
20
20
 
@@ -231,4 +231,4 @@ x = new WeakMap;
231
231
  z.style = d;
232
232
 
233
233
  export { z as gx_ide_team_dev_update_partial_selection };
234
- //# sourceMappingURL=p-401989bf.entry.js.map
234
+ //# sourceMappingURL=p-750eb88a.entry.js.map
@@ -2,7 +2,7 @@ import { r as t, h as i, H as e, a } from "./p-9b9ccd0c.js";
2
2
 
3
3
  import { c as s } from "./p-c5196b3b.js";
4
4
 
5
- import { f as r } from "./p-5bab65ea.js";
5
+ import { f as r } from "./p-4d330836.js";
6
6
 
7
7
  import { L as l } from "./p-311eedf3.js";
8
8
 
@@ -448,4 +448,4 @@ I = new WeakMap, A = new WeakMap;
448
448
  $.style = d;
449
449
 
450
450
  export { $ as gx_ide_team_dev_history };
451
- //# sourceMappingURL=p-ddfba1c8.entry.js.map
451
+ //# sourceMappingURL=p-885e5d1c.entry.js.map
@@ -0,0 +1,86 @@
1
+ import { h as e } from "./p-9b9ccd0c.js";
2
+
3
+ /* STENCIL IMPORTS */
4
+ /**
5
+ * @param gxOptions An array of GxOptions's
6
+ * @returns The value of the selected item, or the first item, if no one is selected.
7
+ */ const getSelectedItem = e => {
8
+ const t = e.find((e => e.selected));
9
+ if (t) {
10
+ return t.id;
11
+ } else {
12
+ return e[0].id;
13
+ }
14
+ };
15
+
16
+ const setSelectedItem = (e, t) => e.map((e => Object.assign(Object.assign({}, e), {
17
+ selected: e.id === t
18
+ })))
19
+ // Dots animation used in ch-chat code-render (or other components)
20
+ ;
21
+
22
+ const ANIMATION_DOTS = (t = "regular", a = "primary", i = "dynamic", r = "1s") => {
23
+ const n = t === "regular" ? 1.5 : 4;
24
+ let c, l, s;
25
+ if (a === "nexa") {
26
+ c = "#5ba7ff";
27
+ l = "#00CCFF";
28
+ s = "#CF7AFF";
29
+ } else if (a === "on-surface") {
30
+ c = l = s = "var(--color-text-neutral-strawberry)";
31
+ } else {
32
+ // primary
33
+ c = l = s = "var(--color-primary-600)";
34
+ // mer token
35
+ }
36
+ const animateRadiusSize = (t = "0") => e("animate", {
37
+ attributeName: "r",
38
+ values: `${2 / n};${4 / n};${2 / n}`,
39
+ dur: r,
40
+ begin: t,
41
+ repeatCount: "indefinite"
42
+ });
43
+ return e("svg", {
44
+ width: 36 / n,
45
+ height: 8 / n,
46
+ fill: "transparent"
47
+ }, e("circle", {
48
+ cx: 4 / n,
49
+ cy: 4 / n,
50
+ r: 4 / n,
51
+ opacity: "0",
52
+ fill: c
53
+ }, e("animate", {
54
+ attributeName: "opacity",
55
+ values: "0;1;0",
56
+ dur: r,
57
+ repeatCount: "indefinite"
58
+ }), i === "dynamic" ? animateRadiusSize("0") : null), e("circle", {
59
+ cx: 18 / n,
60
+ cy: 4 / n,
61
+ r: 4 / n,
62
+ opacity: "0",
63
+ fill: l
64
+ }, e("animate", {
65
+ attributeName: "opacity",
66
+ values: "0;1;0",
67
+ dur: r,
68
+ begin: "0.15s",
69
+ repeatCount: "indefinite"
70
+ }), i === "dynamic" ? animateRadiusSize("0.33s") : null), e("circle", {
71
+ cx: 32 / n,
72
+ cy: 4 / n,
73
+ r: 4 / n,
74
+ opacity: "0",
75
+ fill: s
76
+ }, e("animate", {
77
+ attributeName: "opacity",
78
+ values: "0;1;0",
79
+ dur: r,
80
+ begin: "0.30s",
81
+ repeatCount: "indefinite"
82
+ }), i === "dynamic" ? animateRadiusSize("0.66s") : null));
83
+ };
84
+
85
+ export { ANIMATION_DOTS as A, getSelectedItem as g, setSelectedItem as s };
86
+ //# sourceMappingURL=p-91e2ebb0.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["getSelectedItem","gxOptions","found","find","item","selected","id","setSelectedItem","selectedItemId","map","Object","assign","ANIMATION_DOTS","size","color","sizeType","duration","n","colorDot1","colorDot2","colorDot3","animateRadiusSize","begin","h","attributeName","values","dur","repeatCount","width","height","fill","cx","cy","r","opacity"],"sources":["src/common/common.tsx"],"sourcesContent":["/* STENCIL IMPORTS */\nimport { h } from \"@stencil/core\";\n/* OTHER LIBRARIES IMPORTS */\n/* CUSTOM IMPORTS */\nimport { GxgFormItemsArray, GxOption } from \"./types\";\n\nexport const renderFormItems = (\n componentType:\n | \"gxg-combo-box-item\"\n | \"gxg-form-checkbox\"\n | \"gxg-form-radio\" = \"gxg-combo-box-item\",\n options: Array<GxOption>,\n group = \"undefined-group\",\n callback?: any\n): GxgFormItemsArray => {\n if (options.length) {\n const items: GxgFormItemsArray = [];\n options.forEach(option => {\n let item;\n switch (componentType) {\n case \"gxg-form-checkbox\":\n item = (\n <gxg-form-checkbox\n checkboxId={option.id}\n checked={option.checked}\n disabled={option.disabled}\n label={option.label}\n value={option.value}\n onChange={callback ? callback : null}\n iconName={option.iconName}\n part={`${group}-${option.id}`}\n ></gxg-form-checkbox>\n );\n items.push(item);\n break;\n case \"gxg-combo-box-item\":\n item = (\n <gxg-combo-box-item\n value={option.id}\n icon={option.iconName}\n part={`${group}-${option.id}`}\n >\n {option.label}\n </gxg-combo-box-item>\n );\n items.push(item);\n break;\n case \"gxg-form-radio\":\n item = (\n <gxg-form-radio\n radioId={option.id}\n checked={option.checked}\n disabled={option.disabled}\n label={option.label}\n value={option.value}\n name={group}\n part={`${group}-${option.id}`}\n ></gxg-form-radio>\n );\n items.push(item);\n break;\n default:\n break;\n }\n });\n return items;\n }\n return null;\n};\n\n/**\n * @param gxOptions An array of GxOptions's\n * @returns The first option in the array that is 'selected'. If no one found it returns null.\n */\nexport const getSelectedGxOption = (\n gxOptions: GxOption[],\n onlyId = true\n): GxOption | string | void => {\n if (gxOptions?.length > 0) {\n let found = null;\n for (let i = 0; i < gxOptions.length; i++) {\n if (gxOptions[i].selected) {\n found = gxOptions[i];\n break;\n }\n }\n if (found && onlyId) {\n return found.id;\n } else if (!found && onlyId) {\n return gxOptions[0].id;\n }\n return found;\n }\n};\n\n/**\n * @param gxOptions An array of GxOptions's\n * @returns The value of the selected item, or the first item, if no one is selected.\n */\nexport const getSelectedItem = (gxOptions: GxOption[]): string => {\n const found = gxOptions.find(item => item.selected);\n if (found) {\n return found.id;\n } else {\n return gxOptions[0].id;\n }\n};\n\nexport const setSelectedItem = (\n gxOptions: GxOption[],\n selectedItemId: string\n): GxOption[] =>\n gxOptions.map(item => ({\n ...item,\n selected: item.id === selectedItemId\n }));\n\nexport const getSelectedItem2 = (\n gxOptions: GxOption[] | undefined\n): string | undefined =>\n gxOptions\n ? (gxOptions.find(item => item.selected) ?? gxOptions[0]).id\n : undefined;\n\n// Dots animation used in ch-chat code-render (or other components)\nexport const ANIMATION_DOTS = (\n size: \"regular\" | \"tiny\" = \"regular\",\n color: \"primary\" | \"on-surface\" | \"nexa\" = \"primary\",\n sizeType: \"static\" | \"dynamic\" = \"dynamic\",\n duration: string = \"1s\"\n): SVGElement => {\n const n = size === \"regular\" ? 1.5 : 4;\n let colorDot1, colorDot2, colorDot3;\n if (color === \"nexa\") {\n colorDot1 = \"#5ba7ff\";\n colorDot2 = \"#00CCFF\";\n colorDot3 = \"#CF7AFF\";\n } else if (color === \"on-surface\") {\n colorDot1 = colorDot2 = colorDot3 = \"var(--color-text-neutral-strawberry)\";\n } else {\n // primary\n colorDot1 = colorDot2 = colorDot3 = \"var(--color-primary-600)\"; // mer token\n }\n\n const animateRadiusSize = (begin: string = \"0\") => {\n return (\n <animate\n attributeName=\"r\"\n values={`${2 / n};${4 / n};${2 / n}`}\n dur={duration}\n begin={begin}\n repeatCount=\"indefinite\"\n />\n );\n };\n\n return (\n <svg width={36 / n} height={8 / n} fill=\"transparent\">\n <circle cx={4 / n} cy={4 / n} r={4 / n} opacity=\"0\" fill={colorDot1}>\n <animate\n attributeName=\"opacity\"\n values=\"0;1;0\"\n dur={duration}\n repeatCount=\"indefinite\"\n />\n {sizeType === \"dynamic\" ? animateRadiusSize(\"0\") : null}\n </circle>\n <circle cx={18 / n} cy={4 / n} r={4 / n} opacity=\"0\" fill={colorDot2}>\n <animate\n attributeName=\"opacity\"\n values=\"0;1;0\"\n dur={duration}\n begin=\"0.15s\"\n repeatCount=\"indefinite\"\n />\n {sizeType === \"dynamic\" ? animateRadiusSize(\"0.33s\") : null}\n </circle>\n <circle cx={32 / n} cy={4 / n} r={4 / n} opacity=\"0\" fill={colorDot3}>\n <animate\n attributeName=\"opacity\"\n values=\"0;1;0\"\n dur={duration}\n begin=\"0.30s\"\n repeatCount=\"indefinite\"\n />\n {sizeType === \"dynamic\" ? animateRadiusSize(\"0.66s\") : null}\n </circle>\n </svg>\n );\n};\n"],"mappings":";;;;;;UAmGaA,kBAAmBC;EAC9B,MAAMC,IAAQD,EAAUE,MAAKC,KAAQA,EAAKC;EAC1C,IAAIH,GAAO;IACT,OAAOA,EAAMI;SACR;IACL,OAAOL,EAAU,GAAGK;;;;MAIXC,kBAAkB,CAC7BN,GACAO,MAEAP,EAAUQ,KAAIL,KAAIM,OAAAC,OAAAD,OAAAC,OAAA,IACbP,IAAI;EACPC,UAAUD,EAAKE,OAAOE;;;;;MAWbI,iBAAiB,CAC5BC,IAA2B,WAC3BC,IAA2C,WAC3CC,IAAiC,WACjCC,IAAmB;EAEnB,MAAMC,IAAIJ,MAAS,YAAY,MAAM;EACrC,IAAIK,GAAWC,GAAWC;EAC1B,IAAIN,MAAU,QAAQ;IACpBI,IAAY;IACZC,IAAY;IACZC,IAAY;SACP,IAAIN,MAAU,cAAc;IACjCI,IAAYC,IAAYC,IAAY;SAC/B;;IAELF,IAAYC,IAAYC,IAAY;;;EAGtC,MAAMC,oBAAoB,CAACC,IAAgB,QAEvCC,EAAA;IACEC,eAAc;IACdC,QAAQ,GAAG,IAAIR,KAAK,IAAIA,KAAK,IAAIA;IACjCS,KAAKV;IACLM,OAAOA;IACPK,aAAY;;EAKlB,OACEJ,EAAA;IAAKK,OAAO,KAAKX;IAAGY,QAAQ,IAAIZ;IAAGa,MAAK;KACtCP,EAAA;IAAQQ,IAAI,IAAId;IAAGe,IAAI,IAAIf;IAAGgB,GAAG,IAAIhB;IAAGiB,SAAQ;IAAIJ,MAAMZ;KACxDK,EAAA;IACEC,eAAc;IACdC,QAAO;IACPC,KAAKV;IACLW,aAAY;MAEbZ,MAAa,YAAYM,kBAAkB,OAAO,OAErDE,EAAA;IAAQQ,IAAI,KAAKd;IAAGe,IAAI,IAAIf;IAAGgB,GAAG,IAAIhB;IAAGiB,SAAQ;IAAIJ,MAAMX;KACzDI,EAAA;IACEC,eAAc;IACdC,QAAO;IACPC,KAAKV;IACLM,OAAM;IACNK,aAAY;MAEbZ,MAAa,YAAYM,kBAAkB,WAAW,OAEzDE,EAAA;IAAQQ,IAAI,KAAKd;IAAGe,IAAI,IAAIf;IAAGgB,GAAG,IAAIhB;IAAGiB,SAAQ;IAAIJ,MAAMV;KACzDG,EAAA;IACEC,eAAc;IACdC,QAAO;IACPC,KAAKV;IACLM,OAAM;IACNK,aAAY;MAEbZ,MAAa,YAAYM,kBAAkB,WAAW;AAErD"}
@@ -16,11 +16,11 @@ import { u as r, a as l } from "./p-c9b9e260.js";
16
16
 
17
17
  import { r as o } from "./p-2eae8843.js";
18
18
 
19
- import { f as c } from "./p-5bab65ea.js";
19
+ import { f as c } from "./p-4d330836.js";
20
20
 
21
21
  import { c as d } from "./p-c5196b3b.js";
22
22
 
23
- import { C as p } from "./p-528ba8bb.js";
23
+ import { C as p } from "./p-e2b6d62b.js";
24
24
 
25
25
  import { s as h } from "./p-02fb496a.js";
26
26
 
@@ -816,4 +816,4 @@ D = new WeakMap;
816
816
  ne.style = u;
817
817
 
818
818
  export { ne as gx_ide_team_dev_update };
819
- //# sourceMappingURL=p-2eec8e65.entry.js.map
819
+ //# sourceMappingURL=p-b44a875d.entry.js.map
@@ -12,7 +12,7 @@ import "lit/directives/if-defined.js";
12
12
 
13
13
  import { L as o } from "./p-311eedf3.js";
14
14
 
15
- import { f as r } from "./p-5bab65ea.js";
15
+ import { f as r } from "./p-4d330836.js";
16
16
 
17
17
  /**
18
18
  * @module constants
@@ -2452,4 +2452,4 @@ Vn = new WeakMap, Kn = new WeakMap, Gn = new WeakMap, qn = new WeakSet, Bn = fun
2452
2452
  oe.style = Nn;
2453
2453
 
2454
2454
  export { oe as gx_ide_start_page };
2455
- //# sourceMappingURL=p-532c2e0f.entry.js.map
2455
+ //# sourceMappingURL=p-ca47bb29.entry.js.map
@@ -2,7 +2,7 @@ import { h as l } from "./p-9b9ccd0c.js";
2
2
 
3
3
  import { C as e, r as a, I as r } from "./p-2eae8843.js";
4
4
 
5
- import { f as t } from "./p-5bab65ea.js";
5
+ import { f as t } from "./p-4d330836.js";
6
6
 
7
7
  import { h as s } from "./p-9663f418.js";
8
8
 
@@ -241,4 +241,4 @@ const renderTabularGridColumns = (e, a = false, r, t, s, o) => {
241
241
  };
242
242
 
243
243
  export { n as C, renderTabularGridRows as a, renderTabularGridColumns as r };
244
- //# sourceMappingURL=p-528ba8bb.js.map
244
+ //# sourceMappingURL=p-e2b6d62b.js.map
@@ -0,0 +1,3 @@
1
+ import { ComboBoxModel } from "@genexus/chameleon-controls-library";
2
+ import { GxOption } from "../..";
3
+ export declare const mapOptionsToComboBoxItemModel: (options: GxOption[]) => ComboBoxModel;