@genexus/genexus-ide-ui 3.0.2 → 3.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/genexus-ide-ui.cjs.js +1 -1
- package/dist/cjs/gx-ide-file-item.cjs.entry.js +21 -2
- package/dist/cjs/gx-ide-file-item.cjs.entry.js.map +1 -1
- package/dist/cjs/gx-ide-file-uploader.cjs.entry.js +11 -8
- package/dist/cjs/gx-ide-file-uploader.cjs.entry.js.map +1 -1
- package/dist/cjs/gx-ide-launchpad.cjs.entry.js +4 -16
- package/dist/cjs/gx-ide-launchpad.cjs.entry.js.map +1 -1
- package/dist/cjs/gx-ide-multi-select.cjs.entry.js +113 -0
- package/dist/cjs/gx-ide-multi-select.cjs.entry.js.map +1 -0
- package/dist/cjs/gx-ide-search.cjs.entry.js +171 -0
- package/dist/cjs/gx-ide-search.cjs.entry.js.map +1 -0
- package/dist/cjs/gx-ide-ww-files.cjs.entry.js +3 -4
- package/dist/cjs/gx-ide-ww-files.cjs.entry.js.map +1 -1
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/collection/collection-manifest.json +2 -0
- package/dist/collection/components/_helpers/multi-select/gx-ide-multi-select.css +193 -0
- package/dist/collection/components/_helpers/multi-select/gx-ide-multi-select.js +209 -0
- package/dist/collection/components/_helpers/multi-select/gx-ide-multi-select.js.map +1 -0
- package/dist/collection/components/file-uploader/file-item/file-item.css +23 -28
- package/dist/collection/components/file-uploader/file-item/file-item.js +37 -1
- package/dist/collection/components/file-uploader/file-item/file-item.js.map +1 -1
- package/dist/collection/components/file-uploader/file-uploader.css +11 -22
- package/dist/collection/components/file-uploader/file-uploader.js +10 -7
- package/dist/collection/components/file-uploader/file-uploader.js.map +1 -1
- package/dist/collection/components/file-uploader/gx-ide-assets/file-uploader/langs/file-uploader.lang.en.json +7 -3
- package/dist/collection/components/file-uploader/gx-ide-assets/file-uploader/langs/file-uploader.lang.ja.json +7 -3
- package/dist/collection/components/file-uploader/gx-ide-assets/file-uploader/langs/file-uploader.lang.zh.json +8 -3
- package/dist/collection/components/launchpad/root/gx-ide-assets/launchpad/shortcuts.json +1 -26
- package/dist/collection/components/launchpad/root/launchpad.js +5 -42
- package/dist/collection/components/launchpad/root/launchpad.js.map +1 -1
- package/dist/collection/components/search/gx-ide-assets/search/langs/search.lang.en.json +37 -0
- package/dist/collection/components/search/gx-ide-assets/search/langs/search.lang.ja.json +37 -0
- package/dist/collection/components/search/gx-ide-assets/search/langs/search.lang.zh.json +37 -0
- package/dist/collection/components/search/search.css +44 -0
- package/dist/collection/components/search/search.js +275 -0
- package/dist/collection/components/search/search.js.map +1 -0
- package/dist/collection/components/ww-files/ww-files.js +3 -4
- package/dist/collection/components/ww-files/ww-files.js.map +1 -1
- package/dist/collection/testing/locale.e2e.js +4 -1
- package/dist/collection/testing/locale.e2e.js.map +1 -1
- package/dist/components/file-item.js +22 -2
- package/dist/components/file-item.js.map +1 -1
- package/dist/components/gx-ide-file-uploader.js +11 -8
- package/dist/components/gx-ide-file-uploader.js.map +1 -1
- package/dist/components/gx-ide-launchpad.js +6 -19
- package/dist/components/gx-ide-launchpad.js.map +1 -1
- package/dist/components/gx-ide-multi-select.d.ts +11 -0
- package/dist/components/gx-ide-multi-select.js +132 -0
- package/dist/components/gx-ide-multi-select.js.map +1 -0
- package/dist/components/gx-ide-search.d.ts +11 -0
- package/dist/components/gx-ide-search.js +206 -0
- package/dist/components/gx-ide-search.js.map +1 -0
- package/dist/components/gx-ide-ww-files.js +3 -4
- package/dist/components/gx-ide-ww-files.js.map +1 -1
- package/dist/esm/genexus-ide-ui.js +1 -1
- package/dist/esm/gx-ide-file-item.entry.js +21 -2
- package/dist/esm/gx-ide-file-item.entry.js.map +1 -1
- package/dist/esm/gx-ide-file-uploader.entry.js +11 -8
- package/dist/esm/gx-ide-file-uploader.entry.js.map +1 -1
- package/dist/esm/gx-ide-launchpad.entry.js +5 -17
- package/dist/esm/gx-ide-launchpad.entry.js.map +1 -1
- package/dist/esm/gx-ide-multi-select.entry.js +109 -0
- package/dist/esm/gx-ide-multi-select.entry.js.map +1 -0
- package/dist/esm/gx-ide-search.entry.js +167 -0
- package/dist/esm/gx-ide-search.entry.js.map +1 -0
- package/dist/esm/gx-ide-ww-files.entry.js +3 -4
- package/dist/esm/gx-ide-ww-files.entry.js.map +1 -1
- package/dist/esm/loader.js +1 -1
- package/dist/genexus-ide-ui/genexus-ide-ui.esm.js +1 -1
- package/dist/genexus-ide-ui/genexus-ide-ui.esm.js.map +1 -1
- package/dist/genexus-ide-ui/gx-ide-assets/file-uploader/langs/file-uploader.lang.en.json +7 -3
- package/dist/genexus-ide-ui/gx-ide-assets/file-uploader/langs/file-uploader.lang.ja.json +7 -3
- package/dist/genexus-ide-ui/gx-ide-assets/file-uploader/langs/file-uploader.lang.zh.json +8 -3
- package/dist/genexus-ide-ui/gx-ide-assets/launchpad/shortcuts.json +1 -26
- package/dist/genexus-ide-ui/gx-ide-assets/search/langs/search.lang.en.json +37 -0
- package/dist/genexus-ide-ui/gx-ide-assets/search/langs/search.lang.ja.json +37 -0
- package/dist/genexus-ide-ui/gx-ide-assets/search/langs/search.lang.zh.json +37 -0
- package/dist/genexus-ide-ui/p-0745a565.entry.js +152 -0
- package/dist/genexus-ide-ui/p-0745a565.entry.js.map +1 -0
- package/dist/genexus-ide-ui/{p-6246204f.entry.js → p-25e749c7.entry.js} +44 -57
- package/dist/genexus-ide-ui/p-25e749c7.entry.js.map +1 -0
- package/dist/genexus-ide-ui/{p-50dae653.entry.js → p-7bdeae77.entry.js} +211 -213
- package/dist/genexus-ide-ui/p-7bdeae77.entry.js.map +1 -0
- package/dist/genexus-ide-ui/p-8b5c826b.entry.js +212 -0
- package/dist/genexus-ide-ui/p-8b5c826b.entry.js.map +1 -0
- package/dist/genexus-ide-ui/p-c460c9e7.entry.js +187 -0
- package/dist/genexus-ide-ui/p-c460c9e7.entry.js.map +1 -0
- package/dist/genexus-ide-ui/{p-aad714a5.entry.js → p-e2b88bea.entry.js} +70 -67
- package/dist/genexus-ide-ui/p-e2b88bea.entry.js.map +1 -0
- package/dist/types/components/_helpers/multi-select/gx-ide-multi-select.d.ts +29 -0
- package/dist/types/components/file-uploader/file-item/file-item.d.ts +2 -0
- package/dist/types/components/launchpad/root/launchpad.d.ts +0 -4
- package/dist/types/components/search/search.d.ts +60 -0
- package/dist/types/components.d.ts +121 -4
- package/package.json +1 -1
- package/dist/genexus-ide-ui/p-50dae653.entry.js.map +0 -1
- package/dist/genexus-ide-ui/p-6246204f.entry.js.map +0 -1
- package/dist/genexus-ide-ui/p-aad714a5.entry.js.map +0 -1
- package/dist/genexus-ide-ui/p-f3c3e830.entry.js +0 -163
- package/dist/genexus-ide-ui/p-f3c3e830.entry.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["wwFilesCss","CSS_BUNDLES","CLEAR_ICON","getIconPath","category","name","colorType","FILTER_ICON","INFO_ICON","ACCORDION_FILTER_ID","FILTER_AFTER_DATE_TIME","FILTER_AFTER_LAST_BUILD","FILTER_AFTER_IMPORT","CHECKBOX_CHECKED_VALUE","CHECKBOX_UNCHECKED_VALUE","GxIdeWWFiles","_GxIdeWWFiles_componentLocale","set","this","_GxIdeWWFiles_ACCORDION_MODEL","_GxIdeWWFiles_nameValue","_GxIdeWWFiles_moduleValue","_GxIdeWWFiles_searchContentsValue","_GxIdeWWFiles_categoryValue","_GxIdeWWFiles_allDescendants","_GxIdeWWFiles_userValue","_GxIdeWWFiles_selectedObjectsIds","_GxIdeWWFiles_chGridEl","_GxIdeWWFiles_setFilterDefaultValues","__classPrivateFieldSet","Object","assign","defaultModule","defaultCategory","categoriesComboBoxModel","length","value","afterValue","filterAfterComboBoxModel","dateTimeValue","undefined","_GxIdeWWFiles_allDescendantsCheckboxHandler","event","detail","__classPrivateFieldGet","_GxIdeWWFiles_getObjects","call","_GxIdeWWFiles_handleSelectionChanged","ev","rowsId","selectionChangeCallback","_GxIdeWWFiles_handleRowDoubleClicked","_GxIdeWWFiles_openSelectionCallbackHandler","_GxIdeWWFiles_handleRowContextMenu","preventDefault","stopPropagation","contextMenuCallback","selection","selectedRowsId","clientX","clientY","_GxIdeWWFiles_attachGridListeners","addEventListener","_GxIdeWWFiles_categoryInputHandler","async","_GxIdeWWFiles_clearDateTimeValue","_GxIdeWWFiles_dateTimeInputHandler","_GxIdeWWFiles_deleteSelectionCallbackHandler","deleteSelectionCallback","_GxIdeWWFiles_deselectAll","selectAllRows","_GxIdeWWFiles_evaluateModifiedDates","objectModifiedDate","filterSelectedModifiedDate","filterSelectedModifiedDateAsDate","Date","h","class","_GxIdeWWFiles_formatDate","_GxIdeWWFiles_filterAfterTypeCallbackHandler","date","formatDate","_GxIdeWWFiles_setLoadingState","parentId","id","filtersValues","searchContents","parent","allDescendants","modifiedAfter","showModified","modifiedBy","modifiedDate","loadCallback","then","items","objects","isLoading","_GxIdeWWFiles_renderHeader","htmlFor","filter","onInput","_GxIdeWWFiles_nameInputHandler","part","debounce","config","inputDebounce","disabled","moduleFolder","labelPosition","defaultValue","selectEntityCallback","selectModuleCallback","onValueChanged","_GxIdeWWFiles_moduleValueChangedHandler","model","slot","showSearchContents","content","_GxIdeWWFiles_searchContentsInputHandler","categories","caption","checkedValue","unCheckedValue","modified","_GxIdeWWFiles_showModifiedCheckboxHandler","after","user","_GxIdeWWFiles_userInputHandler","hide","dateTime","src","actionElement","blockAlign","inlineAlign","delay","tooltipSettings","dateTimeTooltip","type","onClick","_GxIdeWWFiles_renderObjects","gridIsEmpty","ref","el","loading","empty","rowSelectionMode","columnName","columnNameHidden","settingable","sortable","size","tabularGrid","colSize","maxContent","tableHead","module","gridColumnsVisibility","description","auto","lastUser","importDate","lastBuildDate","_a","map","object","rowid","icon","hiChar","toLowerCase","loaderTitle","loader","title","show","isAnimated","stateIconSrc","stateTitle","emptyState","_GxIdeWWFiles_newFileCallbackHandler","newFileCallback","openSelectionCallback","_GxIdeWWFiles_selectAll","dateTimeValueChanged","categoriesChanged","newCategories","mapOptionsToComboBoxItemModel","componentWillLoad","Locale","getComponentStrings","accordionCaption","expanded","componentDidLoad","keyDownHandler","eventInfo","document","activeElement","key","reload","error","console","fallbackError","render","Host","objCount","matching","footer","btnSelectAll","btnNew"],"sources":["src/components/ww-files/ww-files.scss?tag=gx-ide-ww-files&encapsulation=shadow","src/components/ww-files/ww-files.tsx"],"sourcesContent":["@import \"../../global/gx-ide-mixins.scss\";\n@import \"../../global/temporary-mercury-overrides/_button.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\n.section {\n display: contents;\n}\n\n// - - - - - - - - - - - -\n// Header\n// - - - - - - - - - - - -\n\n.header {\n grid-template-areas:\n \"name module-folder\"\n \"advanced-filter advanced-filter\";\n grid-template-columns: 1fr 1fr;\n grid-auto-rows: max-content max-content;\n}\n.name {\n grid-area: name;\n}\n.module-folder {\n grid-area: module-folder;\n}\n.advanced-filter {\n grid-area: advanced-filter;\n}\n\n// Advanced Filter\n.advanced-filter {\n &__container {\n display: grid;\n grid-auto-rows: max-content;\n }\n &__first-row {\n grid-template-columns: 1fr 1fr;\n }\n &__second-row {\n grid-template-columns: 1fr 1fr 1fr;\n }\n .all-descendants__modified {\n display: flex;\n flex-direction: row;\n align-items: center;\n block-size: 32px;\n gap: var(--spacing-gap-xl);\n align-self: self-end;\n }\n}\n// date/time\n.field-date {\n grid-template-areas:\n \"label-date-time label-date-time\"\n \"input-date-time icon-clear-date-time\";\n grid-template-columns: 1fr max-content;\n column-gap: var(--spacing-gap-xs);\n}\n.label-date-time {\n // WA: There is no official way to use an icon (ch-image) within a label\n display: flex;\n align-items: center;\n gap: var(--spacing-gap-m);\n .icon-s {\n // WA: Icon looks so small that it is not recognizable\n }\n grid-area: label-date-time;\n}\n.input-date-time {\n block-size: 32px;\n grid-area: input-date-time;\n}\n.icon-clear-date-time {\n grid-area: icon-clear-date-time;\n}\n\n// - - - - - - - - - - - -\n// Grid\n// - - - - - - - - - - - -\n\n.tabular-grid {\n overflow: auto;\n inline-size: 100%;\n border-inline-end: var(--section-common-border);\n}\n.tabular-grid.empty::part(main),\n.tabular-grid.loading::part(main) {\n // WA to avoid scrollbar flickering when displaying the empty-state message\n overflow: hidden;\n}\nch-tabular-grid-rowset-empty {\n position: relative;\n}\n.main__files-container {\n display: grid;\n grid-template-columns: repeat(4, 1fr);\n gap: var(--spacing-gap-m);\n position: relative;\n z-index: 1;\n}\n\n@include hiChar;\n\n@include tabular-grid-cell-layout(\n $tabular-grid-selector: \".tabular-grid\",\n $tabular-grid-cell-node-type: \"text\",\n $tabular-grid-cell-apply-ellipsis: true,\n $tabular-grid-affected-columns-nth-list: (\n 4\n )\n);\n.tabular-grid-cell-description {\n min-inline-size: max-content !important; // TODO: See how to remove the !important\n}\n\n@include hiChar();\n\n// - - - - - - - - - - - -\n// Responsive\n// - - - - - - - - - - - -\n\n// @container (max-width: 992px) {\n// .main__files-container {\n// grid-template-columns: repeat(3, 1fr);\n// }\n// }\n","import {\n Component,\n Host,\n h,\n Prop,\n Element,\n State,\n Method,\n Listen,\n Watch\n} from \"@stencil/core\";\n\nimport {\n ChCheckboxCustomEvent,\n TabularGridRowContextMenuEvent\n} from \"@genexus/chameleon-controls-library\";\n\nimport { getIconPath, MercuryBundles } from \"@genexus/mercury\";\n\nimport { Locale } from \"../../common/locale\";\nimport { GxOption } from \"../../common/types\";\nimport { EntityData, ContextMenuInfo } from \"../../common/types\";\nimport { config } from \"../../common/config\";\nimport { mapOptionsToComboBoxItemModel, hiChar } from \"./helpers\";\nimport {\n AccordionModel,\n ComboBoxModel\n} from \"@genexus/chameleon-controls-library\";\nimport { formatDate } from \"../../common/helpers\";\nimport { GxIdeEntitySelectorCustomEvent } from \"../..\";\n\ninterface TabularGridWithSelection extends HTMLChTabularGridElement {\n selectAllRows: (select?: boolean) => Promise<void>;\n}\n\nconst CSS_BUNDLES: MercuryBundles = [\n \"resets/box-sizing\",\n \"components/button\",\n \"components/checkbox\",\n \"components/combo-box\",\n \"components/accordion\",\n \"components/edit\",\n \"components/icon\",\n \"components/tooltip\",\n \"components/tabular-grid\",\n \"utils/form\",\n \"utils/layout\",\n \"utils/typography\",\n \"utils/spacing\"\n];\n\nconst CLEAR_ICON = getIconPath({\n category: \"system\",\n name: \"close\",\n colorType: \"interactive\"\n});\nconst FILTER_ICON = getIconPath({\n category: \"window-tools\",\n name: \"filter\",\n colorType: \"on-surface\"\n});\nconst INFO_ICON = getIconPath({\n category: \"system\",\n name: \"information\",\n colorType: \"on-surface\"\n});\n\nconst ACCORDION_FILTER_ID = \"advanced-filter\";\nconst FILTER_AFTER_DATE_TIME = \"afterDateTime\";\nconst FILTER_AFTER_LAST_BUILD = \"afterLastBuild\";\nconst FILTER_AFTER_IMPORT = \"afterImport\";\n\nconst CHECKBOX_CHECKED_VALUE = \"checked\";\nconst CHECKBOX_UNCHECKED_VALUE = \"unchecked\";\n\n@Component({\n tag: \"gx-ide-ww-files\",\n styleUrl: \"ww-files.scss\",\n shadow: true,\n assetsDirs: [\"gx-ide-assets/ww-files\"]\n})\nexport class GxIdeWWFiles {\n #componentLocale: any;\n #ACCORDION_MODEL: AccordionModel = [];\n\n // Filter Values\n #nameValue: string;\n #moduleValue: EntityData;\n // Advanced Filter Values\n #searchContentsValue: string;\n #categoryValue: string;\n #allDescendants: CheckboxState;\n #userValue: string;\n // Other\n #selectedObjectsIds: string[] = [];\n\n @Element() el: HTMLGxIdeWwFilesElement;\n #chGridEl!: HTMLChTabularGridElement;\n\n /**\n * The \"After\" control value. Controls the visibility of the \"Date/Time\" control.\n */\n @State() afterValue: string;\n\n /**\n * The \"Category\" options as combo box model\n */\n @State() categoriesComboBoxModel: ComboBoxModel = [];\n\n /**\n * Value of the Date/Time control\n */\n @State() dateTimeValue: string;\n @Watch(\"dateTimeValue\")\n dateTimeValueChanged() {\n this.#getObjects();\n }\n\n /**\n * A loader that is shown when the filter changes and the server has to retrieve new data.\n */\n @State() isLoading: boolean = true;\n\n /**\n * The options for the \"After\" combo-box\n */\n @State() filterAfterComboBoxModel: ComboBoxModel;\n\n /**\n * For show or hide the filters relative to modifiers\n */\n @State() showModified: CheckboxState = CHECKBOX_CHECKED_VALUE;\n\n /**\n * The files rendered in the table\n */\n @State() objects: ObjectData[] = [];\n\n /**\n * The categories render in the filter category selector\n */\n @Prop() readonly categories!: GxOption[];\n @Watch(\"categories\")\n categoriesChanged(newCategories: GxOption[]) {\n this.categoriesComboBoxModel = mapOptionsToComboBoxItemModel(newCategories);\n }\n\n /**\n * This is a function provided by the developer for show the context menu of the selected files.\n */\n @Prop() readonly contextMenuCallback!: ContextMenuCallback;\n\n /**\n * The default value for the category filter\n */\n @Prop() readonly defaultCategory: string;\n\n /**\n * The default value for the module/folder filter\n */\n @Prop() readonly defaultModule: EntityData;\n\n /**\n * This is a function provided by the developer for delete the selected files.\n */\n @Prop() readonly deleteSelectionCallback!: DeleteSelectionCallback;\n\n /**\n * Controls the visibility of the tabular grid cell columns, and respective cells.\n */\n @Prop() readonly gridColumnsVisibility: GridColumnsVisibility = {\n description: true,\n importDate: true,\n lastBuildDate: true,\n lastUser: true,\n modifiedDate: true\n };\n\n /**\n * This is a function provided by the developer that return a list of files to populate the table of files.\n */\n @Prop() readonly loadCallback!: LoadCallback;\n\n /**\n *\n */\n @Prop() readonly newFileCallback!: NewFileCallback;\n\n /**\n * This is a function provided by the developer to expand the data of files that is double-clicked or entered.\n */\n @Prop() readonly openSelectionCallback!: OpenSelectionCallback;\n\n /**\n * Callback invoked when the action is executed on the Module/Folder filter (button '...'). It returns the information of the selected object (id and name) or 'undefined' if it was canceled.\n */\n @Prop() readonly selectModuleCallback!: SelectModuleCallback;\n\n /**\n * This is a function provided by the developer for expanded the data of files that is double-clicked or entered.\n */\n @Prop() readonly selectionChangeCallback!: SelectionChangeCallback;\n\n /**\n * Controls whether to show the Search contents field in the advanced filter section (Not available at the time of writting, since the server is not handling this feature yet.)\n */\n @Prop() readonly showSearchContents = false;\n\n async componentWillLoad() {\n this.#componentLocale = await Locale.getComponentStrings(this.el);\n\n // initialize combo-box models∂\n this.categoriesChanged(this.categories);\n\n // initialize \"After\" combo-box options\n this.filterAfterComboBoxModel = [\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_LAST_BUILD],\n value: FILTER_AFTER_LAST_BUILD\n },\n {\n caption: this.#componentLocale.filter[FILTER_AFTER_IMPORT],\n value: FILTER_AFTER_IMPORT\n }\n ];\n\n // initialize accordion model with proper configuration\n this.#ACCORDION_MODEL = [\n {\n id: ACCORDION_FILTER_ID,\n caption: this.#componentLocale.filter.accordionCaption,\n expanded: false\n }\n ];\n\n this.#setFilterDefaultValues();\n }\n #setFilterDefaultValues = () => {\n this.#nameValue = \"\";\n this.#moduleValue = { ...this.defaultModule };\n this.#searchContentsValue = \"\";\n\n this.#categoryValue =\n this.defaultCategory ||\n (this.categoriesComboBoxModel && this.categoriesComboBoxModel.length > 0\n ? this.categoriesComboBoxModel[0].value\n : \"\");\n\n this.#allDescendants = CHECKBOX_UNCHECKED_VALUE;\n\n this.afterValue =\n this.filterAfterComboBoxModel && this.filterAfterComboBoxModel.length > 0\n ? this.filterAfterComboBoxModel[0].value\n : FILTER_AFTER_DATE_TIME;\n\n this.#userValue = \"\";\n this.dateTimeValue = undefined;\n };\n\n componentDidLoad() {\n this.#attachGridListeners();\n this.#getObjects();\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 eventInfo.preventDefault();\n this.#openSelectionCallbackHandler();\n break;\n case \"Delete\":\n eventInfo.preventDefault();\n this.#deleteSelectionCallbackHandler();\n break;\n case \"Escape\":\n eventInfo.preventDefault();\n this.#deselectAll();\n break;\n }\n }\n }\n\n /**\n * Reloads the view, refreshing the filters and the table of files.\n */\n @Method()\n async reload(): Promise<void> {\n try {\n if (this.#componentLocale && this.filterAfterComboBoxModel) {\n this.#setFilterDefaultValues();\n this.#getObjects();\n }\n } catch (error) {\n console.error(\"Error in reload method:\");\n // Fallback: try only getObjects if setFilterDefaultValues fails\n try {\n this.#getObjects();\n } catch (fallbackError) {\n console.error(\"Fallback also failed:\");\n }\n }\n }\n\n #allDescendantsCheckboxHandler = (\n event: ChCheckboxCustomEvent<any> | InputEvent\n ) => {\n this.#allDescendants =\n event.detail === CHECKBOX_CHECKED_VALUE\n ? CHECKBOX_CHECKED_VALUE\n : CHECKBOX_UNCHECKED_VALUE;\n this.#getObjects();\n };\n\n #handleSelectionChanged = (ev: CustomEvent<{ rowsId: string[] }>): void => {\n this.#selectedObjectsIds = ev.detail.rowsId;\n this.selectionChangeCallback(this.#selectedObjectsIds);\n };\n\n #handleRowDoubleClicked = (): void => {\n this.#openSelectionCallbackHandler();\n };\n\n #handleRowContextMenu = (\n ev: CustomEvent<TabularGridRowContextMenuEvent>\n ): 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 #attachGridListeners = (): void => {\n this.#chGridEl.addEventListener(\n \"selectionChanged\",\n this.#handleSelectionChanged\n );\n this.#chGridEl.addEventListener(\n \"rowDoubleClicked\",\n this.#handleRowDoubleClicked\n );\n this.#chGridEl.addEventListener(\n \"rowContextMenu\",\n this.#handleRowContextMenu\n );\n };\n\n #categoryInputHandler = async (event: CustomEvent<string> | InputEvent) => {\n this.#categoryValue = event.detail as string;\n this.#getObjects();\n };\n\n #clearDateTimeValue = () => {\n this.dateTimeValue = undefined;\n };\n\n #dateTimeInputHandler = (event: CustomEvent<any> | InputEvent) => {\n this.dateTimeValue = event.detail;\n this.#getObjects();\n };\n\n #deleteSelectionCallbackHandler = (): void => {\n this.deleteSelectionCallback(this.#selectedObjectsIds);\n };\n\n #deselectAll = (): void => {\n if (\n this.#chGridEl &&\n typeof (this.#chGridEl as TabularGridWithSelection).selectAllRows ===\n \"function\"\n ) {\n (this.#chGridEl as TabularGridWithSelection).selectAllRows(false);\n }\n };\n\n #evaluateModifiedDates = (\n objectModifiedDate: Date,\n filterSelectedModifiedDate: string\n ) => {\n const filterSelectedModifiedDateAsDate = new Date(\n filterSelectedModifiedDate\n );\n if (filterSelectedModifiedDateAsDate >= objectModifiedDate) {\n // Object modifed date matches with filter date, or was modified after that date.\n // Highlight to show that it matches.\n return <span class=\"hiChar\">{this.#formatDate(objectModifiedDate)}</span>;\n } else {\n return this.#formatDate(objectModifiedDate);\n }\n };\n\n #filterAfterTypeCallbackHandler = (\n event: CustomEvent<string> | InputEvent\n ) => {\n this.afterValue = event.detail as string;\n this.#getObjects();\n };\n\n #formatDate = (date: Date): string => {\n return formatDate(date, \"date-time-short\");\n };\n\n #getObjects = () => {\n this.#setLoadingState();\n\n const parentId = this.#moduleValue ? this.#moduleValue.id : \"\";\n\n const filtersValues: ObjectFiltersData = {\n name: this.#nameValue,\n searchContents: this.#searchContentsValue,\n category: this.#categoryValue,\n parent: parentId,\n allDescendants: this.#allDescendants === CHECKBOX_CHECKED_VALUE,\n modifiedAfter: this.showModified ? this.afterValue : undefined,\n modifiedBy: this.showModified ? this.#userValue : undefined,\n modifiedDate: this.showModified ? new Date(this.dateTimeValue) : undefined\n };\n\n this.loadCallback(filtersValues).then((items: ObjectData[]) => {\n this.objects = items;\n this.#selectedObjectsIds = [];\n\n if (this.#chGridEl) {\n this.#deselectAll();\n }\n\n this.isLoading = false;\n });\n };\n\n #renderHeader = (): Element[] => {\n return [\n <div\n // Name\n class=\"field field-block field-name\"\n >\n <label class=\"label\" htmlFor=\"name\">\n {this.#componentLocale.filter.name}\n </label>\n <ch-edit\n id=\"name\"\n class=\"input\"\n value={this.#nameValue}\n onInput={this.#nameInputHandler}\n part=\"filter-files\"\n debounce={config.inputDebounce}\n disabled={this.isLoading}\n ></ch-edit>\n </div>,\n\n <div\n // Module\n class=\"field field-block field-module-folder\"\n >\n <label class=\"label\" htmlFor=\"module-folder\">\n {this.#componentLocale.filter.moduleFolder}\n </label>\n <gx-ide-entity-selector\n part=\"filter-module-folder\"\n id=\"module/folder\"\n labelPosition=\"none\"\n value={this.#moduleValue}\n defaultValue={this.defaultModule}\n selectEntityCallback={this.selectModuleCallback}\n onValueChanged={this.#moduleValueChangedHandler}\n disabled={this.isLoading}\n ></gx-ide-entity-selector>\n </div>,\n\n <ch-accordion-render\n class=\"accordion-outlined advanced-filter\"\n model={this.#ACCORDION_MODEL}\n >\n <div\n slot={ACCORDION_FILTER_ID}\n class=\"spacing-body field-group advanced-filter__container\"\n >\n {this.showSearchContents && (\n <div\n // Search contents\n class=\"field field-block field-search-contents\"\n >\n <label class=\"label\" htmlFor=\"filter-content\">\n {this.#componentLocale.filter.content}\n </label>\n <ch-edit\n id=\"filter-content\"\n class=\"input\"\n onInput={this.#searchContentsInputHandler}\n part=\"filter-content\"\n ></ch-edit>\n </div>\n )}\n\n <div class=\"field-group advanced-filter__first-row\">\n <div\n // Category\n class=\"field field-block field-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 disabled\"\n value={this.#categoryValue}\n disabled={!this.categories || this.isLoading}\n model={this.categoriesComboBoxModel}\n part=\"filter-category\"\n onInput={this.#categoryInputHandler}\n ></ch-combo-box-render>\n </div>\n\n <div\n // All descendants / Modified\n class=\"all-descendants__modified field field-inline\"\n >\n <ch-checkbox\n // All descendants\n class=\"checkbox\"\n caption={this.#componentLocale.filter.allDescendants}\n checkedValue={CHECKBOX_CHECKED_VALUE}\n unCheckedValue={CHECKBOX_UNCHECKED_VALUE}\n value={this.#allDescendants}\n onInput={this.#allDescendantsCheckboxHandler}\n part=\"filter-all-descendants\"\n disabled={this.isLoading}\n ></ch-checkbox>\n\n <ch-checkbox\n // Modified\n class=\"checkbox align-center\"\n caption={this.#componentLocale.filter.modified}\n checkedValue={CHECKBOX_CHECKED_VALUE}\n unCheckedValue={CHECKBOX_UNCHECKED_VALUE}\n value={this.showModified}\n onInput={this.#showModifiedCheckboxHandler}\n part=\"filter-modified\"\n ></ch-checkbox>\n </div>\n </div>\n\n {this.showModified === CHECKBOX_CHECKED_VALUE && (\n <div class=\"field-group advanced-filter__second-row\">\n <div\n // After\n class=\"field field-block field-after\"\n >\n <label class=\"label\" htmlFor=\"filter-after-type\">\n {this.#componentLocale.filter.after}\n </label>\n <ch-combo-box-render\n id=\"filter-after-type\"\n class=\"combo-box\"\n value={this.afterValue}\n model={this.filterAfterComboBoxModel}\n onInput={this.#filterAfterTypeCallbackHandler}\n part=\"filter-after-type\"\n disabled={this.isLoading}\n ></ch-combo-box-render>\n </div>\n\n <div\n // User\n class=\"field field-block field-user\"\n >\n <label class=\"label\" htmlFor=\"filter-user\">\n {this.#componentLocale.filter.user}\n </label>\n <ch-edit\n id=\"filter-user\"\n class=\"input\"\n value={this.#userValue}\n onInput={this.#userInputHandler}\n part=\"filter-user\"\n debounce={config.inputDebounce}\n disabled={this.isLoading}\n ></ch-edit>\n </div>\n\n {this.afterValue === FILTER_AFTER_DATE_TIME && (\n <div\n // Date/Time\n class={{\n \"field field-block field-date\": true,\n \"hide\": this.afterValue !== FILTER_AFTER_DATE_TIME\n }}\n >\n <label\n class=\"label label-date-time\"\n htmlFor=\"filter-date-time\"\n >\n {this.#componentLocale.filter.dateTime}\n <ch-image\n class=\"icon-s icon-clear-date-time\"\n src={INFO_ICON}\n ></ch-image>\n <ch-tooltip\n class=\"tooltip\"\n actionElement={null}\n blockAlign=\"outside-start\"\n inlineAlign=\"inside-start\"\n delay={config.tooltipSettings.delay}\n >\n {this.#componentLocale.filter.dateTimeTooltip}\n </ch-tooltip>\n </label>\n\n <ch-edit\n id=\"filter-date-time\"\n type=\"datetime-local\"\n class=\"input input-date-time\"\n value={this.dateTimeValue}\n onInput={this.#dateTimeInputHandler}\n part=\"filter-date-time\"\n disabled={this.isLoading}\n ></ch-edit>\n\n <button\n class=\"button-tertiary button-icon-only\"\n onClick={this.#clearDateTimeValue}\n disabled={this.isLoading}\n >\n <ch-image class=\"icon-m\" src={CLEAR_ICON} type=\"mask\" />\n </button>\n </div>\n )}\n </div>\n )}\n </div>\n </ch-accordion-render>\n ];\n };\n\n #renderObjects = (): Element => {\n const gridIsEmpty = !this.objects.length;\n\n return (\n <ch-tabular-grid\n ref={(el: HTMLChTabularGridElement) => (this.#chGridEl = el)}\n class={{\n \"tabular-grid\": true,\n \"loading\": this.isLoading,\n \"empty\": this.objects.length === 0\n }}\n rowSelectionMode=\"multiple\"\n part=\"ch-grid-files\"\n >\n <ch-tabular-grid-columnset class=\"tabular-grid-column-set\">\n <ch-tabular-grid-column\n columnName=\"\"\n columnNameHidden={false}\n settingable={false}\n sortable={false}\n size={config.tabularGrid.colSize.maxContent}\n class=\"tabular-grid-column\"\n ></ch-tabular-grid-column>\n\n <ch-tabular-grid-column\n columnName={this.#componentLocale.tableHead.name}\n columnNameHidden={false}\n settingable={false}\n sortable={false}\n size={config.tabularGrid.colSize.maxContent}\n class=\"tabular-grid-column\"\n ></ch-tabular-grid-column>\n\n <ch-tabular-grid-column\n columnName={this.#componentLocale.tableHead.module}\n columnNameHidden={false}\n settingable={false}\n sortable={false}\n size={config.tabularGrid.colSize.maxContent}\n class=\"tabular-grid-column\"\n ></ch-tabular-grid-column>\n\n {this.gridColumnsVisibility.description && (\n <ch-tabular-grid-column\n columnName={this.#componentLocale.tableHead.description}\n columnNameHidden={false}\n settingable={false}\n sortable={false}\n size={config.tabularGrid.colSize.auto}\n class=\"tabular-grid-column\"\n ></ch-tabular-grid-column>\n )}\n\n {this.gridColumnsVisibility.modifiedDate && (\n <ch-tabular-grid-column\n columnName={this.#componentLocale.tableHead.modifiedDate}\n columnNameHidden={false}\n settingable={false}\n sortable={false}\n size={config.tabularGrid.colSize.maxContent}\n class=\"tabular-grid-column\"\n ></ch-tabular-grid-column>\n )}\n\n {this.gridColumnsVisibility.lastUser && (\n <ch-tabular-grid-column\n columnName={this.#componentLocale.tableHead.lastUser}\n columnNameHidden={false}\n settingable={false}\n sortable={false}\n size={config.tabularGrid.colSize.maxContent}\n class=\"tabular-grid-column\"\n ></ch-tabular-grid-column>\n )}\n\n {this.gridColumnsVisibility.importDate && (\n <ch-tabular-grid-column\n columnName={this.#componentLocale.tableHead.importDate}\n columnNameHidden={false}\n settingable={false}\n sortable={false}\n size={config.tabularGrid.colSize.maxContent}\n class=\"tabular-grid-column\"\n ></ch-tabular-grid-column>\n )}\n\n {this.gridColumnsVisibility.lastBuildDate && (\n <ch-tabular-grid-column\n columnName={this.#componentLocale.tableHead.lastBuildDate}\n columnNameHidden={false}\n settingable={false}\n sortable={false}\n size={config.tabularGrid.colSize.maxContent}\n class=\"tabular-grid-column\"\n ></ch-tabular-grid-column>\n )}\n </ch-tabular-grid-columnset>\n\n {!gridIsEmpty ? (\n <ch-tabular-grid-rowset class=\"tabular-grid-rowset\">\n {this.objects?.map((object: ObjectData) => (\n <ch-tabular-grid-row rowid={object.id} class=\"tabular-grid-row\">\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n <ch-image src={object.icon}></ch-image>\n </ch-tabular-grid-cell>\n\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {hiChar(\n object.name.toLowerCase(),\n this.#nameValue.toLowerCase()\n )}\n </ch-tabular-grid-cell>\n\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {object.parent}\n </ch-tabular-grid-cell>\n\n {this.gridColumnsVisibility.description && (\n <ch-tabular-grid-cell class=\"tabular-grid-cell tabular-grid-cell-description\">\n {object.description}\n </ch-tabular-grid-cell>\n )}\n\n {this.gridColumnsVisibility.modifiedDate && (\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {this.#evaluateModifiedDates(\n object.modifiedDate,\n this.dateTimeValue\n )}\n </ch-tabular-grid-cell>\n )}\n\n {this.gridColumnsVisibility.lastUser && (\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {hiChar(object.lastUser?.toLowerCase(), this.#userValue)}\n </ch-tabular-grid-cell>\n )}\n\n {this.gridColumnsVisibility.importDate && (\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {hiChar(\n object.importDate\n ? this.#formatDate(object.importDate)\n : \"\",\n this.#nameValue\n )}\n </ch-tabular-grid-cell>\n )}\n\n {this.gridColumnsVisibility.lastBuildDate && (\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {hiChar(\n object.lastBuildDate\n ? this.#formatDate(object.lastBuildDate)\n : \"\",\n this.#nameValue\n )}\n </ch-tabular-grid-cell>\n )}\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 {this.isLoading ? (\n <gx-ide-loader\n loaderTitle={this.#componentLocale.loader.title}\n description={this.#componentLocale.loader.description}\n show\n ></gx-ide-loader>\n ) : (\n <gx-ide-empty-state\n isAnimated={true}\n stateIconSrc={FILTER_ICON}\n stateTitle={this.#componentLocale.emptyState.title}\n ></gx-ide-empty-state>\n )}\n </ch-tabular-grid-rowset-empty>\n </ch-tabular-grid-rowset>\n )}\n </ch-tabular-grid>\n );\n };\n\n #moduleValueChangedHandler = (\n event: GxIdeEntitySelectorCustomEvent<EntityData>\n ) => {\n this.#moduleValue = event.detail;\n this.#getObjects();\n };\n\n #nameInputHandler = (event: CustomEvent<any> | InputEvent) => {\n this.#nameValue = event.detail;\n this.#getObjects();\n };\n\n #newFileCallbackHandler = (): void => {\n this.newFileCallback();\n };\n\n #openSelectionCallbackHandler = (): void => {\n this.openSelectionCallback(this.#selectedObjectsIds);\n };\n\n #searchContentsInputHandler = (event: CustomEvent<any> | InputEvent) => {\n this.#searchContentsValue = event.detail;\n this.#getObjects();\n };\n\n #setLoadingState = () => {\n // Only clear if no objects or first load\n if (!this.objects || this.objects.length === 0) {\n this.objects = [];\n }\n this.isLoading = true;\n };\n\n #userInputHandler = (event: CustomEvent<any> | InputEvent) => {\n this.#userValue = event.detail;\n this.#getObjects();\n };\n\n #showModifiedCheckboxHandler = (\n event: ChCheckboxCustomEvent<any> | InputEvent\n ) => {\n this.showModified = event.detail;\n };\n\n #selectAll = (): void => {\n if (\n this.#chGridEl &&\n typeof (this.#chGridEl as TabularGridWithSelection).selectAllRows ===\n \"function\"\n ) {\n (this.#chGridEl as TabularGridWithSelection).selectAllRows();\n }\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 dialog-header-with-border spacing-body-inline spacing-body-block-start field-group\">\n {this.#renderHeader()}\n </header>\n\n {this.#renderObjects()}\n\n <footer class=\"dialog-footer-with-border dialog-footer-space-between spacing-body\">\n <p\n // matching objects\n class=\"text-body\"\n part=\"objects-matching\"\n >\n {`${this.objects?.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 part=\"button button--select-all\"\n disabled={this.isLoading}\n >\n {this.#componentLocale.footer.btnSelectAll}\n </button>\n\n <button\n // new file button\n id=\"button-new-file\"\n class=\"button-primary button-icon-and-text\"\n onClick={this.#newFileCallbackHandler}\n part=\"button button--new-file\"\n disabled={this.isLoading}\n >\n {this.#componentLocale.footer.btnNew}\n </button>\n </div>\n </footer>\n </section>\n </Host>\n );\n }\n}\n\nexport type SelectionChangeCallback = (ids: string[]) => Promise<void>;\nexport type OpenSelectionCallback = (ids: string[]) => Promise<void>;\nexport type DeleteSelectionCallback = (ids: string[]) => Promise<void>;\nexport type SelectModuleCallback = () => Promise<EntityData | undefined>;\n// export type ContextMenuCallback = (ids: string[]) => Promise<void>;\nexport type ContextMenuCallback = (\n contextMenuInfo: ContextMenuInfo\n) => Promise<void>;\nexport type NewFileCallback = () => Promise<void>;\nexport type LoadCallback = (\n filters: ObjectFiltersData\n) => Promise<ObjectData[]>;\n\nexport interface ObjectFiltersData {\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}\nexport interface ObjectData {\n id: string;\n icon: string;\n name: string;\n description: string;\n parent: string;\n modifiedDate?: Date;\n lastUser?: string;\n importDate?: Date;\n lastBuildDate: Date;\n}\n\nexport type GridColumnsVisibility = {\n description: boolean;\n importDate: boolean;\n lastBuildDate: boolean;\n lastUser: boolean;\n modifiedDate: boolean;\n};\n\ntype CheckboxState =\n | typeof CHECKBOX_CHECKED_VALUE\n | typeof CHECKBOX_UNCHECKED_VALUE;\n"],"mappings":"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"}
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
import { r as e, h as t, H as i, a as s } from "./p-9b9ccd0c.js";
|
|
2
|
+
|
|
3
|
+
import { g as r } from "./p-d42e842b.js";
|
|
4
|
+
|
|
5
|
+
import "./p-6534555e.js";
|
|
6
|
+
|
|
7
|
+
import "lit";
|
|
8
|
+
|
|
9
|
+
import "lit/directives/when.js";
|
|
10
|
+
|
|
11
|
+
import "lit/directives/if-defined.js";
|
|
12
|
+
|
|
13
|
+
import { c as a } from "./p-c5196b3b.js";
|
|
14
|
+
|
|
15
|
+
import { L as n } from "./p-311eedf3.js";
|
|
16
|
+
|
|
17
|
+
const o = ":host{display:grid;block-size:100%}.search{display:grid;grid-template-rows:max-content 1fr;gap:var(--spacing-gap-xl)}.search__header{display:grid;grid-template-columns:1fr}.search__results{position:relative}ch-tree-view-render::part(root-item item__header){padding-inline-start:0;font-weight:var(--font-style-semi-bold);font-size:var(--font-size-body-s);line-height:var(--line-height-relaxed);font-family:var(--font-family-body)}ch-tree-view-render::part(search-item item__header){padding-inline-start:0;font-weight:var(--font-style-regular);font-size:var(--font-size-body-s);line-height:var(--line-height-relaxed);font-family:var(--font-family-body);color:var(--color-text-neutral-neutral) !important}.input--loading::part(start-img){animation:spin 1s linear infinite}@keyframes spin{100%{transform:rotate(360deg)}}";
|
|
18
|
+
|
|
19
|
+
var h = undefined && undefined.__classPrivateFieldSet || function(e, t, i, s, r) {
|
|
20
|
+
if (s === "m") throw new TypeError("Private method is not writable");
|
|
21
|
+
if (s === "a" && !r) throw new TypeError("Private accessor was defined without a setter");
|
|
22
|
+
if (typeof t === "function" ? e !== t || !r : !t.has(e)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
23
|
+
return s === "a" ? r.call(e, i) : r ? r.value = i : t.set(e, i), i;
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
var l = undefined && undefined.__classPrivateFieldGet || function(e, t, i, s) {
|
|
27
|
+
if (i === "a" && !s) throw new TypeError("Private accessor was defined without a getter");
|
|
28
|
+
if (typeof t === "function" ? e !== t || !s : !t.has(e)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
29
|
+
return i === "m" ? s : i === "a" ? s.call(e) : s ? s.value : t.get(e);
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
var c, d, f, p, m, u, g;
|
|
33
|
+
|
|
34
|
+
const w = [ "resets/box-sizing", "components/edit", "components/tree-view", "utils/typography", "utils/spacing", "chameleon/scrollbar" ];
|
|
35
|
+
|
|
36
|
+
const y = r({
|
|
37
|
+
category: "system",
|
|
38
|
+
name: "search",
|
|
39
|
+
colorType: "on-surface"
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
const v = r({
|
|
43
|
+
category: "system",
|
|
44
|
+
name: "information",
|
|
45
|
+
colorType: "on-interactive"
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
const b = class {
|
|
49
|
+
constructor(i) {
|
|
50
|
+
e(this, i);
|
|
51
|
+
c.set(this, void 0);
|
|
52
|
+
d.set(this, "");
|
|
53
|
+
f.set(this, (async e => {
|
|
54
|
+
var t;
|
|
55
|
+
if (!this.isKbOpen) {
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
const i = e.target;
|
|
59
|
+
const s = (t = i === null || i === void 0 ? void 0 : i.value) === null || t === void 0 ? void 0 : t.trim();
|
|
60
|
+
h(this, d, s, "f");
|
|
61
|
+
if (!s) {
|
|
62
|
+
this.searchResultModel = [];
|
|
63
|
+
this.hasSearched = false;
|
|
64
|
+
this.isSearching = false;
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
this.hasSearched = true;
|
|
68
|
+
this.isSearching = true;
|
|
69
|
+
this.searchResultModel = [];
|
|
70
|
+
try {
|
|
71
|
+
const e = await this.searchCallback({
|
|
72
|
+
text: s,
|
|
73
|
+
onlyTitles: false,
|
|
74
|
+
includeSubModules: true,
|
|
75
|
+
allBranches: false,
|
|
76
|
+
forLLM: false
|
|
77
|
+
});
|
|
78
|
+
this.searchResultModel = l(this, m, "f").call(this, e);
|
|
79
|
+
} finally {
|
|
80
|
+
this.isSearching = false;
|
|
81
|
+
}
|
|
82
|
+
}));
|
|
83
|
+
p.set(this, (e => {
|
|
84
|
+
if (e.key === "Enter") {
|
|
85
|
+
l(this, f, "f").call(this, e);
|
|
86
|
+
}
|
|
87
|
+
}));
|
|
88
|
+
m.set(this, (e => {
|
|
89
|
+
if (!e || e.length === 0) {
|
|
90
|
+
return [];
|
|
91
|
+
}
|
|
92
|
+
return [ {
|
|
93
|
+
id: "root",
|
|
94
|
+
caption: `${l(this, c, "f").labels.results} (${e.length})`,
|
|
95
|
+
expanded: true,
|
|
96
|
+
parts: "root-item",
|
|
97
|
+
items: e.map((e => ({
|
|
98
|
+
id: e.objectId,
|
|
99
|
+
startImgSrc: e.objectIcon,
|
|
100
|
+
caption: e.objectName,
|
|
101
|
+
leaf: true,
|
|
102
|
+
parts: "search-item"
|
|
103
|
+
})))
|
|
104
|
+
} ];
|
|
105
|
+
}));
|
|
106
|
+
u.set(this, (async e => {
|
|
107
|
+
var t;
|
|
108
|
+
const i = e.detail.id;
|
|
109
|
+
await ((t = this.itemDoubleClickCallback) === null || t === void 0 ? void 0 : t.call(this, i));
|
|
110
|
+
}));
|
|
111
|
+
g.set(this, (() => {
|
|
112
|
+
if (!this.isKbOpen) {
|
|
113
|
+
return t("gx-ide-empty-state", {
|
|
114
|
+
stateTitle: l(this, c, "f").noKbOpenState.title,
|
|
115
|
+
stateDescription: l(this, c, "f").noKbOpenState.description,
|
|
116
|
+
stateIconSrc: v,
|
|
117
|
+
isAnimated: true
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
if (this.isSearching) {
|
|
121
|
+
return t("gx-ide-loader", {
|
|
122
|
+
loaderTitle: l(this, c, "f").loader.title,
|
|
123
|
+
show: true
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
if (this.searchResultModel.length > 0) {
|
|
127
|
+
return t("ch-tree-view-render", {
|
|
128
|
+
class: "tree-view",
|
|
129
|
+
model: this.searchResultModel,
|
|
130
|
+
expandableButton: "no",
|
|
131
|
+
expandOnClick: false,
|
|
132
|
+
onItemOpenReference: l(this, u, "f")
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
if (this.hasSearched) {
|
|
136
|
+
return t("gx-ide-empty-state", {
|
|
137
|
+
stateTitle: l(this, c, "f").emptyState.title,
|
|
138
|
+
stateDescription: l(this, c, "f").emptyState.description,
|
|
139
|
+
stateIconSrc: v,
|
|
140
|
+
isAnimated: true
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
return null;
|
|
144
|
+
}));
|
|
145
|
+
this.searchResultModel = [];
|
|
146
|
+
this.hasSearched = false;
|
|
147
|
+
this.isSearching = false;
|
|
148
|
+
this.isKbOpen = false;
|
|
149
|
+
this.searchCallback = undefined;
|
|
150
|
+
this.itemDoubleClickCallback = undefined;
|
|
151
|
+
}
|
|
152
|
+
valueChangeHandler(e) {
|
|
153
|
+
if (!e) {
|
|
154
|
+
h(this, d, "", "f");
|
|
155
|
+
this.searchResultModel = [];
|
|
156
|
+
this.hasSearched = false;
|
|
157
|
+
this.isSearching = false;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Method to show or hide the settings panel, can be called from the outside to control the visibility of the settings
|
|
162
|
+
*/ async showSettings(e) {
|
|
163
|
+
return Promise.resolve();
|
|
164
|
+
}
|
|
165
|
+
async componentWillLoad() {
|
|
166
|
+
h(this, c, await n.getComponentStrings(this.el), "f");
|
|
167
|
+
}
|
|
168
|
+
render() {
|
|
169
|
+
return t(i, {
|
|
170
|
+
class: "widget"
|
|
171
|
+
}, t("ch-theme", {
|
|
172
|
+
model: w
|
|
173
|
+
}), t("section", {
|
|
174
|
+
class: "spacing-body search"
|
|
175
|
+
}, t("header", {
|
|
176
|
+
class: "search__header"
|
|
177
|
+
}, t("ch-edit", {
|
|
178
|
+
id: "search-input",
|
|
179
|
+
class: "input",
|
|
180
|
+
accessibleName: l(this, c, "f").accessibleName,
|
|
181
|
+
placeholder: l(this, c, "f").placeholders.search,
|
|
182
|
+
debounce: a.inputDebounce,
|
|
183
|
+
onInput: l(this, f, "f"),
|
|
184
|
+
onKeyDown: l(this, p, "f"),
|
|
185
|
+
type: "search",
|
|
186
|
+
startImgSrc: y,
|
|
187
|
+
disabled: !this.isKbOpen,
|
|
188
|
+
value: l(this, d, "f")
|
|
189
|
+
})), t("main", {
|
|
190
|
+
class: "search__results"
|
|
191
|
+
}, l(this, g, "f").call(this))));
|
|
192
|
+
}
|
|
193
|
+
static get assetsDirs() {
|
|
194
|
+
return [ "gx-ide-assets/search" ];
|
|
195
|
+
}
|
|
196
|
+
get el() {
|
|
197
|
+
return s(this);
|
|
198
|
+
}
|
|
199
|
+
static get watchers() {
|
|
200
|
+
return {
|
|
201
|
+
isKbOpen: [ "valueChangeHandler" ]
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
};
|
|
205
|
+
|
|
206
|
+
c = new WeakMap, d = new WeakMap, f = new WeakMap, p = new WeakMap, m = new WeakMap,
|
|
207
|
+
u = new WeakMap, g = new WeakMap;
|
|
208
|
+
|
|
209
|
+
b.style = o;
|
|
210
|
+
|
|
211
|
+
export { b as gx_ide_search };
|
|
212
|
+
//# sourceMappingURL=p-8b5c826b.entry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["searchCss","CSS_BUNDLES","SEARCH_ICON","getIconPath","category","name","colorType","INFORMATION_ICON","GxIdeSearch","_GxIdeSearch_componentLocale","set","this","_GxIdeSearch_searchInputValue","_GxIdeSearch_searchInputHandler","async","event","isKbOpen","inputElement","target","searchText","_a","value","trim","__classPrivateFieldSet","searchResultModel","hasSearched","isSearching","searchResultData","searchCallback","text","onlyTitles","includeSubModules","allBranches","forLLM","__classPrivateFieldGet","_GxIdeSearch_mapSearchResultToTreeViewModel","call","_GxIdeSearch_searchInputKeyDownHandler","key","length","id","caption","labels","results","expanded","parts","items","map","item","objectId","startImgSrc","objectIcon","objectName","leaf","_GxIdeSearch_treeItemDoubleClickHandler","itemId","detail","itemDoubleClickCallback","_GxIdeSearch_renderSearchResults","h","stateTitle","noKbOpenState","title","stateDescription","description","stateIconSrc","isAnimated","loaderTitle","loader","show","class","model","expandableButton","expandOnClick","onItemOpenReference","emptyState","valueChangeHandler","newValue","showSettings","_show","Promise","resolve","componentWillLoad","Locale","getComponentStrings","el","render","Host","accessibleName","placeholder","placeholders","search","debounce","config","inputDebounce","onInput","onKeyDown","type","disabled"],"sources":["src/components/search/search.scss?tag=gx-ide-search&encapsulation=shadow","src/components/search/search.tsx"],"sourcesContent":[":host {\n display: grid;\n block-size: 100%;\n}\n\n.search {\n display: grid;\n grid-template-rows: max-content 1fr;\n gap: var(--spacing-gap-xl);\n\n &__header {\n display: grid;\n grid-template-columns: 1fr;\n }\n\n &__results {\n position: relative;\n }\n}\nch-tree-view-render::part(root-item item__header) {\n padding-inline-start: 0;\n font-weight: var(--font-style-semi-bold);\n font-size: var(--font-size-body-s);\n line-height: var(--line-height-relaxed);\n font-family: var(--font-family-body);\n}\nch-tree-view-render::part(search-item item__header) {\n padding-inline-start: 0;\n font-weight: var(--font-style-regular);\n font-size: var(--font-size-body-s);\n line-height: var(--line-height-relaxed);\n font-family: var(--font-family-body);\n color: var(--color-text-neutral-neutral) !important;\n}\n.input--loading::part(start-img) {\n animation: spin 1s linear infinite;\n}\n\n@keyframes spin {\n 100% {\n transform: rotate(360deg);\n }\n}\n","import {\n Component,\n Element,\n h,\n Host,\n Method,\n Prop,\n State,\n Watch\n} from \"@stencil/core\";\n\nimport {\n ChTreeViewRenderCustomEvent,\n TreeViewItemModel,\n TreeViewItemOpenReferenceInfo,\n TreeViewModel\n} from \"@genexus/chameleon-controls-library\";\nimport { getIconPath, MercuryBundles } from \"@genexus/mercury\";\nimport { config } from \"../../common/config\";\nimport { Locale } from \"../../common/locale\";\n\nconst CSS_BUNDLES: MercuryBundles = [\n \"resets/box-sizing\",\n \"components/edit\",\n \"components/tree-view\",\n \"utils/typography\",\n \"utils/spacing\",\n \"chameleon/scrollbar\"\n];\nconst SEARCH_ICON = getIconPath({\n category: \"system\",\n name: \"search\",\n colorType: \"on-surface\"\n});\n\nconst INFORMATION_ICON = getIconPath({\n category: \"system\",\n name: \"information\",\n colorType: \"on-interactive\"\n});\n\n@Component({\n tag: \"gx-ide-search\",\n styleUrl: \"search.scss\",\n shadow: true,\n assetsDirs: [\"gx-ide-assets/search\"]\n})\nexport class GxIdeSearch {\n #componentLocale: any;\n #searchInputValue: string = \"\";\n\n @Element() el: HTMLGxIdeSearchElement;\n\n /**\n * Holds the search results as a TreeViewModel\n */\n @State() searchResultModel: TreeViewModel = [];\n\n /**\n * Tracks if a search has been performed\n */\n @State() hasSearched = false;\n\n /**\n * Tracks if a search is currently in progress\n */\n @State() isSearching = false;\n\n /**\n * Indicates whether a Knowledge Base is currently open\n */\n @Prop() readonly isKbOpen: boolean = false;\n @Watch(\"isKbOpen\")\n valueChangeHandler(newValue: boolean) {\n if (!newValue) {\n this.#searchInputValue = \"\";\n this.searchResultModel = [];\n this.hasSearched = false;\n this.isSearching = false;\n }\n }\n\n /**\n * Callback to fetch search results\n */\n @Prop() readonly searchCallback!: (\n searchParams: SearchParamsData\n ) => Promise<SearchResultData[]>;\n\n /**\n * Callback invoked when a search result item is double-clicked\n */\n @Prop() readonly itemDoubleClickCallback?: ItemDoubleClickCallback;\n\n /**\n * Method to show or hide the settings panel, can be called from the outside to control the visibility of the settings\n */\n @Method()\n async showSettings(_show: boolean): Promise<void> {\n return Promise.resolve();\n }\n\n async componentWillLoad() {\n this.#componentLocale = await Locale.getComponentStrings(this.el);\n }\n\n #searchInputHandler = async (event: CustomEvent<string> | InputEvent) => {\n if (!this.isKbOpen) {\n return;\n }\n\n const inputElement = event.target as HTMLChEditElement;\n const searchText = inputElement?.value?.trim();\n this.#searchInputValue = searchText;\n\n if (!searchText) {\n this.searchResultModel = [];\n this.hasSearched = false;\n this.isSearching = false;\n return;\n }\n\n this.hasSearched = true;\n this.isSearching = true;\n this.searchResultModel = [];\n\n try {\n const searchResultData = await this.searchCallback({\n text: searchText,\n onlyTitles: false,\n includeSubModules: true,\n allBranches: false,\n forLLM: false\n });\n\n this.searchResultModel =\n this.#mapSearchResultToTreeViewModel(searchResultData);\n } finally {\n this.isSearching = false;\n }\n };\n\n #searchInputKeyDownHandler = (event: KeyboardEvent) => {\n if (event.key === \"Enter\") {\n this.#searchInputHandler(event as any);\n }\n };\n\n #mapSearchResultToTreeViewModel = (\n searchResultData: SearchResultData[]\n ): TreeViewModel => {\n if (!searchResultData || searchResultData.length === 0) {\n return [];\n }\n return [\n {\n id: \"root\",\n caption: `${this.#componentLocale.labels.results} (${searchResultData.length})`,\n expanded: true,\n parts: \"root-item\",\n items: searchResultData.map(\n (item): TreeViewItemModel => ({\n id: item.objectId,\n startImgSrc: item.objectIcon,\n caption: item.objectName,\n leaf: true,\n parts: \"search-item\"\n })\n )\n }\n ];\n };\n\n #treeItemDoubleClickHandler = async (\n event: ChTreeViewRenderCustomEvent<TreeViewItemOpenReferenceInfo>\n ) => {\n const itemId = event.detail.id;\n await this.itemDoubleClickCallback?.(itemId);\n };\n\n #renderSearchResults = () => {\n if (!this.isKbOpen) {\n return (\n <gx-ide-empty-state\n stateTitle={this.#componentLocale.noKbOpenState.title}\n stateDescription={this.#componentLocale.noKbOpenState.description}\n stateIconSrc={INFORMATION_ICON}\n isAnimated={true}\n ></gx-ide-empty-state>\n );\n }\n\n if (this.isSearching) {\n return (\n <gx-ide-loader\n loaderTitle={this.#componentLocale.loader.title}\n show={true}\n ></gx-ide-loader>\n );\n }\n\n if (this.searchResultModel.length > 0) {\n return (\n <ch-tree-view-render\n class=\"tree-view\"\n model={this.searchResultModel}\n expandableButton=\"no\"\n expandOnClick={false}\n onItemOpenReference={this.#treeItemDoubleClickHandler}\n />\n );\n }\n\n if (this.hasSearched) {\n return (\n <gx-ide-empty-state\n stateTitle={this.#componentLocale.emptyState.title}\n stateDescription={this.#componentLocale.emptyState.description}\n stateIconSrc={INFORMATION_ICON}\n isAnimated={true}\n ></gx-ide-empty-state>\n );\n }\n\n return null;\n };\n\n render() {\n return (\n <Host class=\"widget\">\n <ch-theme model={CSS_BUNDLES}></ch-theme>\n <section class={\"spacing-body search\"}>\n <header class=\"search__header\">\n <ch-edit\n id=\"search-input\"\n class=\"input\"\n accessibleName={this.#componentLocale.accessibleName}\n placeholder={this.#componentLocale.placeholders.search}\n debounce={config.inputDebounce}\n onInput={this.#searchInputHandler}\n onKeyDown={this.#searchInputKeyDownHandler}\n type=\"search\"\n startImgSrc={SEARCH_ICON}\n disabled={!this.isKbOpen}\n value={this.#searchInputValue}\n ></ch-edit>\n </header>\n\n <main class=\"search__results\">{this.#renderSearchResults()}</main>\n </section>\n </Host>\n );\n }\n}\n\nexport type SearchResultData = {\n objectId: string;\n objectName: string;\n objectTypeName: string;\n objectTypeId: string;\n objectModuleName: string;\n objectUri: string;\n objectIcon: string;\n content: string;\n preview: string;\n};\n\nexport type SearchParamsData = {\n moduleGuid?: string;\n objectTypeName?: string;\n text: string;\n tags?: string;\n count?: number;\n onlyTitles: boolean;\n includeSubModules: boolean;\n allBranches: boolean;\n forLLM: boolean;\n};\n\nexport type ItemDoubleClickCallback = (itemId: string) => Promise<void>;\n\nexport type SearchCallback = (\n searchParams: SearchParamsData\n) => Promise<SearchResultData[]>;\n"],"mappings":"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"}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
import { r as i, c as e, h as t } from "./p-9b9ccd0c.js";
|
|
2
|
+
|
|
3
|
+
import { g as s } from "./p-d42e842b.js";
|
|
4
|
+
|
|
5
|
+
import "./p-6534555e.js";
|
|
6
|
+
|
|
7
|
+
import "lit";
|
|
8
|
+
|
|
9
|
+
import "lit/directives/when.js";
|
|
10
|
+
|
|
11
|
+
import "lit/directives/if-defined.js";
|
|
12
|
+
|
|
13
|
+
const a = ':host{display:block}.file-item{display:grid;column-gap:var(--spacing-gap-l);row-gap:var(--spacing-gap-s);align-items:center;border-radius:var(--border-radius-s)}.file-item--without-actions{grid-template-columns:max-content 1fr;grid-template-areas:"icon name"}.file-item--with-actions{grid-template-columns:max-content 1fr max-content;grid-template-areas:"icon name actions"}.file-item__icon{display:flex;align-items:center;grid-area:icon;padding-block:calc(32px - var(--ch-image-size))}.file-item__name{grid-area:name;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;min-inline-size:0}.file-item__name ch-edit{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.file-item__name .label{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.file-item__actions{grid-area:actions;display:flex}.file-item__cancel-upload{transform:translateX(7px)}.file-item__progress-container{grid-column:1/-1;display:flex;flex-direction:column;gap:var(--spacing-gap-xs);border:2px dashed var(--color-border-neutral-default);border-radius:var(--border-radius-m);padding:var(--spacing-padding-xxs) var(--spacing-padding-l) var(--spacing-padding-m) var(--spacing-padding-l)}.file-item__progress-header{display:flex;justify-content:space-between;align-items:center;gap:var(--spacing-gap-l)}.file-item__uploading-text{color:var(--color-text-neutral-disabled);overflow:hidden;white-space:nowrap;text-overflow:ellipsis;max-inline-size:calc(100% - 40px)}.file-item__progress-bar progress{block-size:8px;line-height:0;border:none;border-radius:var(--border-radius-s);overflow:hidden}.file-item__progress-bar progress::-webkit-progress-bar{background-color:transparent}.file-item__progress-bar progress::-webkit-progress-value{background-color:var(--color-accent-primary-default)}.file-item__progress-bar progress::-moz-progress-bar{background-color:var(--color-accent-primary-default)}';
|
|
14
|
+
|
|
15
|
+
var o = undefined && undefined.__classPrivateFieldGet || function(i, e, t, s) {
|
|
16
|
+
if (t === "a" && !s) throw new TypeError("Private accessor was defined without a getter");
|
|
17
|
+
if (typeof e === "function" ? i !== e || !s : !e.has(i)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
18
|
+
return t === "m" ? s : t === "a" ? s.call(i) : s ? s.value : e.get(i);
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
var l, r, n, c, d;
|
|
22
|
+
|
|
23
|
+
const p = s({
|
|
24
|
+
category: "gemini-tools",
|
|
25
|
+
name: "file",
|
|
26
|
+
colorType: "primary"
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
const m = s({
|
|
30
|
+
category: "gemini-tools",
|
|
31
|
+
name: "edit",
|
|
32
|
+
colorType: "primary"
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
const h = s({
|
|
36
|
+
category: "gemini-tools",
|
|
37
|
+
name: "delete",
|
|
38
|
+
colorType: "primary"
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
const f = s({
|
|
42
|
+
category: "gemini-tools",
|
|
43
|
+
name: "close",
|
|
44
|
+
colorType: "primary"
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
const u = [ "resets/box-sizing", "components/button", "components/icon", "components/edit", "utils/typography", "utils/spacing", "utils/form", "utils/layout", "utils/elevation" ];
|
|
48
|
+
|
|
49
|
+
const g = class {
|
|
50
|
+
constructor(t) {
|
|
51
|
+
i(this, t);
|
|
52
|
+
this.fileNameChange = e(this, "fileNameChange", 7);
|
|
53
|
+
this.fileDelete = e(this, "fileDelete", 7);
|
|
54
|
+
this.fileCancel = e(this, "fileCancel", 7);
|
|
55
|
+
l.set(this, (i => {
|
|
56
|
+
const e = i.detail;
|
|
57
|
+
if (e && e !== this.currentName) {
|
|
58
|
+
this.currentName = e;
|
|
59
|
+
this.fileNameChange.emit({
|
|
60
|
+
id: this.file.id,
|
|
61
|
+
name: e
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
}));
|
|
65
|
+
r.set(this, (() => {
|
|
66
|
+
this.isEditing = false;
|
|
67
|
+
}));
|
|
68
|
+
/** Handles file deletion */ n.set(this, (() => {
|
|
69
|
+
this.fileDelete.emit(this.file.id);
|
|
70
|
+
}));
|
|
71
|
+
/** Handles upload cancellation */ c.set(this, (i => {
|
|
72
|
+
i.preventDefault();
|
|
73
|
+
this.fileCancel.emit(this.file.id);
|
|
74
|
+
}));
|
|
75
|
+
/** Starts file name editing */ d.set(this, (() => {
|
|
76
|
+
if (this.editable) {
|
|
77
|
+
this.isEditing = true;
|
|
78
|
+
}
|
|
79
|
+
}));
|
|
80
|
+
this.file = undefined;
|
|
81
|
+
this.editable = false;
|
|
82
|
+
this.componentLocale = undefined;
|
|
83
|
+
this.fileDeletedCallback = undefined;
|
|
84
|
+
this.fileDeletionErrorCallback = undefined;
|
|
85
|
+
this.isEditing = false;
|
|
86
|
+
this.currentName = undefined;
|
|
87
|
+
}
|
|
88
|
+
/** Updates current name when file prop changes */ handleFileChange(i) {
|
|
89
|
+
this.currentName = i.name;
|
|
90
|
+
}
|
|
91
|
+
componentWillLoad() {
|
|
92
|
+
this.currentName = this.file.name;
|
|
93
|
+
}
|
|
94
|
+
render() {
|
|
95
|
+
var i, e, s, a, g, v, b, _, y, w, x, k, C;
|
|
96
|
+
const j = !this.file.pending;
|
|
97
|
+
const z = this.file.pending;
|
|
98
|
+
const N = "progress-label-" + this.file.id;
|
|
99
|
+
let T;
|
|
100
|
+
if (this.file.pending) {
|
|
101
|
+
T = ((a = (s = (e = (i = this.componentLocale) === null || i === void 0 ? void 0 : i.fileItem) === null || e === void 0 ? void 0 : e.uploadingAriaLabel) === null || s === void 0 ? void 0 : s.replace("{fileName}", this.currentName)) === null || a === void 0 ? void 0 : a.replace("{fileProgress}", this.file.progress.toString())) || this.currentName;
|
|
102
|
+
} else if (this.file.remoteId) {
|
|
103
|
+
T = ((b = (v = (g = this.componentLocale) === null || g === void 0 ? void 0 : g.fileItem) === null || v === void 0 ? void 0 : v.uploadedSuccessfullyAriaLabel) === null || b === void 0 ? void 0 : b.replace("{fileName}", this.currentName)) || this.currentName;
|
|
104
|
+
} else {
|
|
105
|
+
T = this.currentName;
|
|
106
|
+
}
|
|
107
|
+
return t("li", {
|
|
108
|
+
class: {
|
|
109
|
+
"file-item": true,
|
|
110
|
+
"file-item--without-actions": !j,
|
|
111
|
+
"file-item--with-actions": j
|
|
112
|
+
},
|
|
113
|
+
"aria-label": T
|
|
114
|
+
}, t("ch-theme", {
|
|
115
|
+
model: u
|
|
116
|
+
}), t("div", {
|
|
117
|
+
class: "file-item__icon"
|
|
118
|
+
}, t("ch-image", {
|
|
119
|
+
disabled: !this.file.pending,
|
|
120
|
+
src: p,
|
|
121
|
+
class: "icon-m"
|
|
122
|
+
})), t("div", {
|
|
123
|
+
class: "file-item__name"
|
|
124
|
+
}, this.isEditing ? t("ch-edit", {
|
|
125
|
+
accessibleName: (w = (y = (_ = this.componentLocale) === null || _ === void 0 ? void 0 : _.fileItem) === null || y === void 0 ? void 0 : y.editNamePlaceholderAriaLabel) === null || w === void 0 ? void 0 : w.replace("{fileName}", this.currentName),
|
|
126
|
+
value: this.currentName,
|
|
127
|
+
autoFocus: true,
|
|
128
|
+
onInput: o(this, l, "f"),
|
|
129
|
+
onBlur: o(this, r, "f"),
|
|
130
|
+
class: "input",
|
|
131
|
+
id: N
|
|
132
|
+
}) : t("span", {
|
|
133
|
+
class: "label",
|
|
134
|
+
id: N
|
|
135
|
+
}, this.currentName)), j ? t("div", {
|
|
136
|
+
class: "file-item__actions"
|
|
137
|
+
}, !this.file.pending && this.editable && t("button", {
|
|
138
|
+
class: "button-tertiary button-icon-only",
|
|
139
|
+
type: "button",
|
|
140
|
+
onClick: o(this, d, "f")
|
|
141
|
+
}, t("ch-image", {
|
|
142
|
+
src: m,
|
|
143
|
+
class: "icon-m"
|
|
144
|
+
})), !this.file.pending && t("button", {
|
|
145
|
+
class: "button-tertiary button-icon-only",
|
|
146
|
+
type: "button",
|
|
147
|
+
onClick: o(this, n, "f"),
|
|
148
|
+
"aria-label": "Delete file"
|
|
149
|
+
}, t("ch-image", {
|
|
150
|
+
src: h,
|
|
151
|
+
class: "icon-m"
|
|
152
|
+
}))) : null, z && t("div", {
|
|
153
|
+
class: "file-item__progress-container"
|
|
154
|
+
}, t("div", {
|
|
155
|
+
class: "file-item__progress-header"
|
|
156
|
+
}, t("span", {
|
|
157
|
+
class: "file-item__uploading-text typography-body-italic-s"
|
|
158
|
+
}, "Uploading ", this.currentName, "..."), t("button", {
|
|
159
|
+
"aria-label": ((C = (k = (x = this.componentLocale) === null || x === void 0 ? void 0 : x.fileItem) === null || k === void 0 ? void 0 : k.cancelUploadButtonAriaLabel) === null || C === void 0 ? void 0 : C.replace("{fileName}", this.currentName)) || "Cancel upload",
|
|
160
|
+
class: "button-tertiary button-icon-only file-item__cancel-upload",
|
|
161
|
+
type: "button",
|
|
162
|
+
onClick: o(this, c, "f")
|
|
163
|
+
}, t("ch-image", {
|
|
164
|
+
src: f,
|
|
165
|
+
class: "icon-m"
|
|
166
|
+
}))), t("div", {
|
|
167
|
+
class: "file-item__progress-bar"
|
|
168
|
+
}, t("progress", {
|
|
169
|
+
class: "elevation-1",
|
|
170
|
+
value: this.file.progress,
|
|
171
|
+
max: "100",
|
|
172
|
+
"aria-labelledby": N
|
|
173
|
+
}))));
|
|
174
|
+
}
|
|
175
|
+
static get watchers() {
|
|
176
|
+
return {
|
|
177
|
+
file: [ "handleFileChange" ]
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
};
|
|
181
|
+
|
|
182
|
+
l = new WeakMap, r = new WeakMap, n = new WeakMap, c = new WeakMap, d = new WeakMap;
|
|
183
|
+
|
|
184
|
+
g.style = a;
|
|
185
|
+
|
|
186
|
+
export { g as gx_ide_file_item };
|
|
187
|
+
//# sourceMappingURL=p-c460c9e7.entry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["fileItemCss","FILE_ICON","getIconPath","category","name","colorType","EDIT_ICON","DELETE_ICON","CANCEL_ICON","CSS_BUNDLES","FileItem","_FileItem_handleNameChange","set","this","event","newName","detail","currentName","fileNameChange","emit","id","file","_FileItem_handleBlur","isEditing","_FileItem_handleDelete","fileDelete","_FileItem_handleCancelClick","e","preventDefault","fileCancel","_FileItem_startEditing","editable","handleFileChange","newFile","componentWillLoad","render","displayItemActions","pending","displayProgressContainer","labelId","liAriaLabel","_d","_c","_b","_a","componentLocale","fileItem","uploadingAriaLabel","replace","progress","toString","remoteId","_g","_f","_e","uploadedSuccessfullyAriaLabel","h","class","model","disabled","src","accessibleName","_k","_j","_h","editNamePlaceholderAriaLabel","value","autoFocus","onInput","__classPrivateFieldGet","onBlur","type","onClick","_o","_m","_l","cancelUploadButtonAriaLabel","max"],"sources":["src/components/file-uploader/file-item/file-item.scss?tag=gx-ide-file-item&encapsulation=shadow","src/components/file-uploader/file-item/file-item.tsx"],"sourcesContent":["@import \"../../../global/gx-ide-mixins.scss\";\n\n$file-item-actions-inline-size: 40px;\n\n:host {\n display: block;\n}\n\n.file-item {\n display: grid;\n column-gap: var(--spacing-gap-l);\n row-gap: var(--spacing-gap-s);\n align-items: center;\n border-radius: var(--border-radius-s);\n \n &--without-actions {\n grid-template-columns: max-content 1fr;\n grid-template-areas: \"icon name\";\n }\n &--with-actions {\n grid-template-columns: max-content 1fr max-content;\n grid-template-areas: \"icon name actions\";\n }\n\n &__icon {\n display: flex;\n align-items: center;\n grid-area: icon;\n padding-block: calc(32px - var(--ch-image-size)); // prevent layout shift when file-item__actions are displayed\n }\n\n &__name {\n grid-area: name;\n @include ellipsis;\n min-inline-size: 0;\n\n ch-edit {\n @include ellipsis;\n }\n\n .label {\n @include ellipsis;\n }\n }\n\n &__actions {\n grid-area: actions;\n display: flex;\n }\n\n &__cancel-upload {\n transform: translateX(7px);\n }\n\n &__progress-container {\n grid-column: 1 / -1;\n display: flex;\n flex-direction: column;\n gap: var(--spacing-gap-xs);\n border: 2px dashed var(--color-border-neutral-default);\n border-radius: var(--border-radius-m);\n padding: var(--spacing-padding-xxs) var(--spacing-padding-l) var(--spacing-padding-m) var(--spacing-padding-l);\n }\n\n &__progress-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: var(--spacing-gap-l);\n }\n\n &__uploading-text {\n color: var(--color-text-neutral-disabled);\n @include ellipsis;\n max-inline-size: calc(100% - #{$file-item-actions-inline-size});\n }\n\n &__progress-bar {\n progress {\n block-size: 8px;\n line-height: 0;\n border: none;\n border-radius: var(--border-radius-s);\n overflow: hidden;\n\n &::-webkit-progress-bar {\n background-color: transparent;\n }\n\n &::-webkit-progress-value {\n background-color: var(--color-accent-primary-default);\n }\n\n &::-moz-progress-bar {\n background-color: var(--color-accent-primary-default);\n }\n }\n }\n}\n","import {\n Component,\n h,\n Prop,\n State,\n Event,\n EventEmitter,\n Watch\n} from \"@stencil/core\";\nimport { getIconPath, MercuryBundles } from \"@genexus/mercury\";\nimport { ChEditCustomEvent } from \"@genexus/chameleon-controls-library\";\nimport { FileUploadState } from \"../types\";\n\nconst FILE_ICON = getIconPath({\n category: \"gemini-tools\",\n name: \"file\",\n colorType: \"primary\"\n});\n\nconst EDIT_ICON = getIconPath({\n category: \"gemini-tools\",\n name: \"edit\",\n colorType: \"primary\"\n});\n\nconst DELETE_ICON = getIconPath({\n category: \"gemini-tools\",\n name: \"delete\",\n colorType: \"primary\"\n});\n\nconst CANCEL_ICON = getIconPath({\n category: \"gemini-tools\",\n name: \"close\",\n colorType: \"primary\"\n});\n\nconst CSS_BUNDLES: MercuryBundles = [\n \"resets/box-sizing\",\n \"components/button\",\n \"components/icon\",\n \"components/edit\",\n \"utils/typography\",\n \"utils/spacing\",\n \"utils/form\",\n \"utils/layout\",\n \"utils/elevation\"\n];\n\n@Component({\n tag: \"gx-ide-file-item\",\n styleUrl: \"file-item.scss\",\n shadow: true\n})\nexport class FileItem {\n /** File state containing upload information */\n @Prop() readonly file!: FileUploadState;\n\n /** Whether the file name can be edited */\n @Prop() readonly editable: boolean = false;\n\n /** Component locale strings */\n @Prop() readonly componentLocale?: any;\n\n /** Callback when a file is deleted */\n @Prop() readonly fileDeletedCallback?: (fileId: string) => Promise<void>;\n\n /** Callback when a file deletion error occurs */\n @Prop() readonly fileDeletionErrorCallback?: (data: {\n fileName: string;\n error: string;\n }) => Promise<void>;\n\n /** Updates current name when file prop changes */\n @Watch(\"file\")\n handleFileChange(newFile: FileUploadState) {\n this.currentName = newFile.name;\n }\n\n @State() isEditing: boolean = false;\n @State() currentName: string;\n\n /** Emitted when the file name is changed */\n @Event() fileNameChange: EventEmitter<{ id: string; name: string }>;\n\n /** Emitted when the file is deleted */\n @Event() fileDelete: EventEmitter<string>;\n\n /** Emitted when the file upload is cancelled */\n @Event() fileCancel: EventEmitter<string>;\n\n componentWillLoad() {\n this.currentName = this.file.name;\n }\n\n #handleNameChange = (event: ChEditCustomEvent<string> | InputEvent) => {\n const newName = (event as CustomEvent<string>).detail;\n\n if (newName && newName !== this.currentName) {\n this.currentName = newName;\n this.fileNameChange.emit({\n id: this.file.id,\n name: newName\n });\n }\n };\n\n #handleBlur = () => {\n this.isEditing = false;\n };\n\n /** Handles file deletion */\n #handleDelete = () => {\n this.fileDelete.emit(this.file.id);\n };\n\n /** Handles upload cancellation */\n #handleCancelClick = (e: MouseEvent) => {\n e.preventDefault();\n this.fileCancel.emit(this.file.id);\n };\n\n /** Starts file name editing */\n #startEditing = () => {\n if (this.editable) {\n this.isEditing = true;\n }\n };\n\n render() {\n\n const displayItemActions = !this.file.pending;\n const displayProgressContainer = this.file.pending;\n const labelId = \"progress-label-\" + this.file.id;\n\n let liAriaLabel: string;\n if (this.file.pending) {\n liAriaLabel = this.componentLocale?.fileItem?.uploadingAriaLabel\n ?.replace(\"{fileName}\", this.currentName)\n ?.replace(\"{fileProgress}\", this.file.progress.toString()) || this.currentName;\n } else if (this.file.remoteId) {\n liAriaLabel = this.componentLocale?.fileItem?.uploadedSuccessfullyAriaLabel\n ?.replace(\"{fileName}\", this.currentName) || this.currentName;\n } else {\n liAriaLabel = this.currentName;\n }\n\n return (\n <li class={{\n \"file-item\": true,\n \"file-item--without-actions\": !displayItemActions,\n \"file-item--with-actions\": displayItemActions\n }}\n aria-label={liAriaLabel}\n >\n\n <ch-theme model={CSS_BUNDLES}></ch-theme>\n\n <div class=\"file-item__icon\">\n <ch-image disabled={!this.file.pending} src={FILE_ICON} class=\"icon-m\" />\n </div>\n\n <div class=\"file-item__name\">\n {this.isEditing ? (\n <ch-edit\n accessibleName={this.componentLocale?.fileItem?.editNamePlaceholderAriaLabel\n ?.replace(\"{fileName}\", this.currentName)}\n value={this.currentName}\n autoFocus={true}\n onInput={this.#handleNameChange}\n onBlur={this.#handleBlur}\n class=\"input\"\n id={labelId}\n />\n ) : (\n <span class=\"label\" id={labelId}>{this.currentName}</span>\n )}\n </div>\n\n {displayItemActions ? (\n <div class=\"file-item__actions\">\n {!this.file.pending && this.editable && (\n <button\n class=\"button-tertiary button-icon-only\"\n type=\"button\"\n onClick={this.#startEditing}\n >\n <ch-image src={EDIT_ICON} class=\"icon-m\" />\n </button>\n )}\n {!this.file.pending && (\n <button\n class=\"button-tertiary button-icon-only\"\n type=\"button\"\n onClick={this.#handleDelete}\n aria-label=\"Delete file\"\n >\n <ch-image src={DELETE_ICON} class=\"icon-m\" />\n </button>\n )}\n </div>\n ) : (\n null\n )}\n\n {displayProgressContainer && (\n <div class=\"file-item__progress-container\">\n <div class=\"file-item__progress-header\">\n <span class=\"file-item__uploading-text typography-body-italic-s\">\n Uploading {this.currentName}...\n </span>\n <button\n aria-label={this.componentLocale?.fileItem?.cancelUploadButtonAriaLabel\n ?.replace(\"{fileName}\", this.currentName) || \"Cancel upload\"}\n class=\"button-tertiary button-icon-only file-item__cancel-upload\"\n type=\"button\"\n onClick={this.#handleCancelClick}\n >\n <ch-image src={CANCEL_ICON} class=\"icon-m\" />\n </button>\n </div>\n <div class=\"file-item__progress-bar\">\n <progress\n class=\"elevation-1\"\n value={this.file.progress}\n max=\"100\"\n aria-labelledby={labelId}\n />\n </div>\n </div>\n )}\n </li>\n );\n }\n}\n"],"mappings":"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"}
|