@genexus/genexus-ide-ui 3.0.1 → 3.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.
- 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 +4 -9
- 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 +4 -9
- 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 +4 -9
- 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 +4 -9
- 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-60db2f02.entry.js → p-7bdeae77.entry.js} +106 -108
- 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 +59 -0
- package/dist/types/components.d.ts +121 -4
- package/package.json +1 -1
- package/dist/genexus-ide-ui/p-60db2f02.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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-uploader.js","sourceRoot":"","sources":["../../../src/components/file-uploader/file-uploader.tsx"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @stencil-community/own-methods-must-be-private */\n/* eslint-disable @stencil-community/own-props-must-be-private */\n/* STENCIL IMPORTS */\nimport {\n Component,\n Host,\n h,\n Prop,\n Element,\n State,\n Method\n} from \"@stencil/core\";\n\nimport { MercuryBundles, getIconPath } from \"@genexus/mercury\";\nimport { Locale } from \"../../common/locale\";\nimport { UploadedFile, FileUploadState, UploadResult } from \"./types\";\n\nconst PLUS_ICON = getIconPath({\n category: \"gemini-tools\",\n name: \"add\",\n colorType: \"primary\"\n});\n\nconst CSS_BUNDLES: MercuryBundles = [\n \"resets/box-sizing\",\n \"components/button\",\n \"components/icon\",\n \"components/list-box\",\n \"components/edit\",\n \"utils/typography\",\n \"utils/spacing\",\n \"utils/form\",\n \"utils/layout\",\n \"utils/elevation\",\n \"chameleon/scrollbar\"\n];\n\ntype FileValidationResult = {\n isValid: boolean;\n error?: string;\n};\n\n@Component({\n tag: \"gx-ide-file-uploader\",\n styleUrl: \"file-uploader.scss\",\n shadow: true,\n assetsDirs: [\"gx-ide-assets/file-uploader\"]\n})\nexport class FileUploader {\n #_componentLocale: any;\n #fileInputEl!: HTMLInputElement;\n\n @Element() el!: HTMLGxIdeFileUploaderElement;\n\n /** Allowed file types/extensions (e.g. ['.jpg', '.png', 'image/*', 'application/pdf']) */\n @Prop() readonly types?: string[] = [];\n\n /** Whether multiple files can be selected */\n @Prop() readonly multiple: boolean = false;\n\n /** Whether file names can be edited */\n @Prop() readonly canEditName: boolean = false;\n\n /** Label to display in the uploader dialog */\n @Prop() readonly label?: string;\n\n /** Function to handle file upload */\n @Prop() readonly uploadFunction!: (\n file: File,\n progressCallback: (progress: number) => void\n ) => Promise<UploadResult>;\n\n /** Function to cancel file upload */\n @Prop() readonly cancelUploadFunction?: (fileId: string) => Promise<void>;\n\n /** Callback when a file is uploaded successfully */\n @Prop() readonly fileUploadedCallback?: (file: UploadedFile) => Promise<void>;\n\n /** Callback when the dialog is canceled */\n @Prop() readonly dialogCanceledCallback?: () => Promise<void>;\n\n /** Callback when the dialog is confirmed with files */\n @Prop() readonly dialogConfirmedCallback?: (\n files: UploadedFile[]\n ) => Promise<void>;\n\n /** Callback when upload is cancelled */\n @Prop() readonly uploadCancelledCallback?: (fileId: string) => Promise<void>;\n\n /** Callback when file is renamed */\n @Prop() readonly fileRenamedCallback?: (data: {\n fileId: string;\n newName: string;\n }) => Promise<void>;\n\n /** Callback when a file validation error occurs */\n @Prop() readonly fileValidationErrorCallback?: (data: {\n fileName: string;\n error: string;\n }) => 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 /** Callback when a file is deleted */\n @Prop() readonly fileDeletedCallback?: (file: UploadedFile) => Promise<void>;\n\n /** Callback before deleting a file to get confirmation */\n @Prop() readonly onBeforeDelete?: (file: UploadedFile) => Promise<boolean>;\n\n @State() private fileStates: Map<string, FileUploadState> = new Map();\n @State() private isDragging: boolean = false;\n #dragCounter = 0;\n\n /** Initializes component with locale strings */\n async componentWillLoad() {\n this.#_componentLocale = await Locale.getComponentStrings(this.el);\n }\n\n /** Generates a unique ID for file identification */\n #generateId = (): string => {\n return Math.random().toString(36).substr(2, 9);\n };\n\n /** Validates if a file matches the allowed types */\n #isValidFile(file: File): FileValidationResult {\n // If no types specified, accept any file\n if (!this.types || this.types.length === 0) {\n return { isValid: true };\n }\n\n for (const type of this.types) {\n // Handle wildcards like 'image/*'\n if (type.includes(\"/*\")) {\n const baseType = type.split(\"/\")[0];\n if (file.type.startsWith(baseType)) {\n return { isValid: true };\n }\n }\n // Handle extensions like '.jpg'\n else if (type.startsWith(\".\")) {\n if (file.name.toLowerCase().endsWith(type.toLowerCase())) {\n return { isValid: true };\n }\n }\n // Handle specific MIME types\n else if (file.type === type || file.type === `application/${type}`) {\n return { isValid: true };\n }\n }\n\n return {\n isValid: false,\n error:\n this.#_componentLocale?.errors?.invalidFileType || \"Invalid file type\"\n };\n }\n\n /** Filters valid files from a FileList */\n #getValidFiles(files: FileList): File[] {\n const validFiles: File[] = [];\n\n Array.from(files).forEach(file => {\n const validation = this.#isValidFile(file);\n if (validation.isValid) {\n validFiles.push(file);\n } else {\n this.fileValidationErrorCallback?.({\n fileName: file.name,\n error: validation.error\n });\n }\n });\n\n return validFiles;\n }\n\n /** Handles drag enter event */\n #handleDragEnter = (e: DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n this.#dragCounter++;\n this.isDragging = true;\n };\n\n /** Handles drag leave event */\n #handleDragLeave = (e: DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n this.#dragCounter--;\n if (this.#dragCounter === 0) {\n this.isDragging = false;\n }\n };\n\n /** Handles drag over event */\n #handleDragOver = (e: DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n };\n\n /** Handles drop event */\n #handleDrop = (e: DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n this.isDragging = false;\n this.#dragCounter = 0;\n\n const files = e.dataTransfer?.files;\n if (files) {\n this.#handleFiles(files);\n }\n };\n\n /** Triggers file input click */\n #handleFileSelect = () => {\n this.#fileInputEl?.click();\n };\n\n /** Handles file input change event */\n #handleFileInput = (e: Event) => {\n const files = (e.target as HTMLInputElement).files;\n if (files) {\n this.#handleFiles(files);\n }\n };\n\n /** Processes files and starts upload */\n #handleFiles = (files: FileList) => {\n const validFiles: File[] = this.#getValidFiles(files);\n\n validFiles.forEach(async file => {\n const id = this.#generateId();\n const fileState: FileUploadState = {\n id,\n name: file.name,\n file,\n pending: true,\n progress: 0\n };\n\n if (!this.multiple) {\n this.fileStates.clear();\n }\n\n this.fileStates = new Map(this.fileStates.set(id, fileState));\n\n if (this.uploadFunction) {\n try {\n const uploadPromise = this.uploadFunction(file, progress => {\n const state = this.fileStates.get(id);\n if (state) {\n const updatedState = {\n ...state,\n progress: progress,\n pending: progress < 100\n };\n this.fileStates = new Map(this.fileStates.set(id, updatedState));\n }\n });\n\n // Store the upload promise/object for potential cancellation\n const stateWithPromise = {\n ...this.fileStates.get(id),\n uploadPromise\n };\n this.fileStates = new Map(this.fileStates.set(id, stateWithPromise));\n\n const result = await uploadPromise;\n\n const state = this.fileStates.get(id);\n if (state) {\n if (result.success && result.remoteId) {\n const updatedState = {\n ...state,\n remoteId: result.remoteId,\n pending: false,\n progress: 100\n };\n this.fileStates = new Map(this.fileStates.set(id, updatedState));\n\n await this.fileUploadedCallback?.({\n name: state.name,\n originalName: state.file.name,\n remoteId: result.remoteId\n });\n } else {\n const updatedState = {\n ...state,\n error: result.errors?.upload || \"Upload failed\",\n pending: false\n };\n this.fileStates = new Map(this.fileStates.set(id, updatedState));\n }\n }\n } catch (error) {\n const state = this.fileStates.get(id);\n if (state) {\n const updatedState = {\n ...state,\n error:\n error instanceof Error\n ? error.message\n : \"Unknown error occurred\",\n pending: false\n };\n this.fileStates = new Map(this.fileStates.set(id, updatedState));\n }\n }\n }\n });\n\n if (this.#fileInputEl) {\n this.#fileInputEl.value = \"\";\n }\n };\n\n /** Handles file name change */\n #handleNameChange = async (\n event: CustomEvent<{ id: string; name: string }>\n ) => {\n const { id, name } = event.detail;\n const file = this.fileStates.get(id);\n\n if (file) {\n const updatedFile = {\n ...file,\n name: name.trim(),\n isEditing: false\n };\n\n this.fileStates = new Map(this.fileStates.set(id, updatedFile));\n await this.fileRenamedCallback?.({ fileId: id, newName: name.trim() });\n }\n };\n\n /** Handles individual file cancellation or deletion */\n #handleFileCancel = async (event: CustomEvent<string>) => {\n const id = event.detail;\n const state = this.fileStates.get(id);\n if (state) {\n try {\n if (state.pending) {\n // Cancel upload in progress\n if (\n state.uploadPromise &&\n typeof state.uploadPromise.cancel === \"function\"\n ) {\n state.uploadPromise.cancel();\n } else if (this.cancelUploadFunction) {\n await this.cancelUploadFunction(id);\n }\n\n await this.uploadCancelledCallback?.(id);\n\n this.fileStates.delete(id);\n this.fileStates = new Map(this.fileStates);\n } else {\n const fileToDelete: UploadedFile = {\n name: state.name,\n originalName: state.file.name,\n remoteId: state.remoteId\n };\n\n const shouldDelete = await this.onBeforeDelete?.(fileToDelete);\n\n if (shouldDelete) {\n await this.fileDeletedCallback?.(fileToDelete);\n this.fileStates.delete(id);\n this.fileStates = new Map(this.fileStates);\n }\n }\n } catch (error) {\n await this.fileDeletionErrorCallback?.({\n fileName: state.name,\n error:\n error instanceof Error ? error.message : \"Unknown error occurred\"\n });\n }\n }\n };\n\n /** Handles dialog confirmation */\n #handleConfirm = async () => {\n // Verificar si hay subidas en progreso\n const hasPendingUploads = Array.from(this.fileStates.values()).some(\n file => file.pending\n );\n\n if (hasPendingUploads) {\n return; // No permitir confirmar si hay subidas en progreso\n }\n\n // Obtener todos los archivos que están completamente subidos\n const uploadedFiles: UploadedFile[] = Array.from(this.fileStates.values())\n .filter(file => {\n const isValid = !file.pending && file.remoteId && !file.error;\n return isValid;\n })\n .map(file => ({\n name: file.name,\n originalName: file.file.name,\n remoteId: file.remoteId as string\n }));\n\n if (uploadedFiles.length > 0) {\n await this.dialogConfirmedCallback?.(uploadedFiles);\n }\n\n // Clear file states\n this.fileStates.clear();\n this.fileStates = new Map();\n\n // Reset file input\n if (this.#fileInputEl) {\n this.#fileInputEl.value = \"\";\n }\n };\n\n /** Handles dialog cancellation */\n #handleCancel = async () => {\n try {\n // Cancelamos todas las subidas en progreso\n for (const [id, state] of this.fileStates.entries()) {\n if (state.pending && this.cancelUploadFunction) {\n try {\n await this.cancelUploadFunction(id);\n await this.uploadCancelledCallback?.(id);\n } catch (error) {\n // Error handling for upload cancellation\n }\n }\n }\n\n // Limpiamos todos los estados\n this.fileStates.clear();\n this.fileStates = new Map();\n\n if (this.#fileInputEl) {\n this.#fileInputEl.value = \"\";\n }\n\n await this.dialogCanceledCallback?.();\n } catch (error) {\n this.fileStates.clear();\n this.fileStates = new Map();\n await this.dialogCanceledCallback?.();\n }\n };\n\n /** Clears the current file selection */\n @Method()\n async clear() {\n for (const [id, state] of this.fileStates.entries()) {\n if (state.pending && this.cancelUploadFunction) {\n try {\n await this.cancelUploadFunction(id);\n await this.uploadCancelledCallback?.(id);\n } catch (error) {\n // Error handling for upload cancellation\n }\n }\n }\n this.fileStates.clear();\n }\n\n render() {\n return (\n <Host class=\"widget\">\n <ch-theme model={CSS_BUNDLES}></ch-theme>\n <input\n type=\"file\"\n class=\"hidden-input\"\n multiple={this.multiple}\n accept={this.types\n ?.map(type => (type.startsWith(\".\") ? type : `.${type}`))\n .join(\",\")}\n onChange={this.#handleFileInput}\n ref={el => (this.#fileInputEl = el as HTMLInputElement)}\n aria-hidden=\"true\"\n tabIndex={-1}\n style={{ display: \"none\" }}\n />\n <div class=\"file-uploader-dialog\">\n <div class=\"dialog-content\">\n {this.isDragging || this.fileStates.size === 0 ? (\n <div\n class={{\n \"file-uploader__drop-zone\": true,\n \"file-uploader__drop-zone--dragging\": this.isDragging\n }}\n onDragEnter={this.#handleDragEnter}\n onDragLeave={this.#handleDragLeave}\n onDragOver={this.#handleDragOver}\n onDrop={this.#handleDrop}\n >\n <button\n class=\"button-tertiary button-icon-and-text\"\n type=\"button\"\n onClick={this.#handleFileSelect}\n >\n <ch-image class=\"icon-m\" src={PLUS_ICON}></ch-image>\n <label class=\"label\">\n {this.multiple\n ? this.#_componentLocale?.header.uploadButtonMultiple\n : this.#_componentLocale?.header.uploadButtonSingle}\n </label>\n </button>\n <div class=\"text-container\">\n <div class=\"label-primary-row\">\n <label class=\"label\">\n {this.label || this.#_componentLocale?.header.orText}\n </label>\n <label class=\"label\">\n {this.#_componentLocale?.header.dragAndDrop}\n </label>\n </div>\n <span class=\"caption\">\n {this.types && this.types.length > 0\n ? this.#_componentLocale?.header.acceptedFiles.replace(\n \"{0}\",\n this.types.join(\", \")\n )\n : this.#_componentLocale?.header.allFilesAccepted}\n </span>\n </div>\n </div>\n ) : (\n <div class=\"file-uploader__list\">\n <div class=\"file-uploader__list-header spacing-body-block-end\">\n <div class=\"file-uploader__list-title-container\">\n <label class=\"label\">\n {this.label ||\n this.#_componentLocale?.fileList.attachedFiles}\n </label>\n <span class=\"caption\">\n {this.#_componentLocale?.fileList.filesCount.replace(\n \"{0}\",\n this.fileStates.size.toString()\n )}\n </span>\n </div>\n {this.multiple && (\n <button\n class=\"button-tertiary button-icon-and-text\"\n type=\"button\"\n onClick={this.#handleFileSelect}\n >\n <ch-image class=\"icon-m\" src={PLUS_ICON}></ch-image>\n <label class=\"label\">\n {this.multiple\n ? this.#_componentLocale?.header.uploadButtonMultiple\n : this.#_componentLocale?.header.uploadButtonSingle}\n </label>\n </button>\n )}\n </div>\n <div class=\"file-uploader__list-content scrollable\">\n {Array.from(this.fileStates.values()).map(file => (\n <gx-ide-file-item\n key={file.id}\n file={file}\n editable={this.canEditName}\n onFileNameChange={this.#handleNameChange}\n onFileDelete={this.#handleFileCancel}\n onFileCancel={this.#handleFileCancel}\n />\n ))}\n </div>\n </div>\n )}\n </div>\n <div class=\"dialog-footer dialog-footer dialog-footer-with-border\">\n <div class=\"buttons-spacer\">\n <button\n class=\"button-secondary\"\n type=\"button\"\n onClick={this.#handleCancel}\n >\n {this.#_componentLocale?.buttons.cancel}\n </button>\n <button\n class=\"button-primary\"\n type=\"button\"\n onClick={this.#handleConfirm}\n disabled={\n this.fileStates.size === 0 ||\n Array.from(this.fileStates.values()).some(\n file => file.pending\n )\n }\n >\n {this.#_componentLocale?.buttons.confirm}\n </button>\n </div>\n </div>\n </div>\n </Host>\n );\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"file-uploader.js","sourceRoot":"","sources":["../../../src/components/file-uploader/file-uploader.tsx"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @stencil-community/own-methods-must-be-private */\n/* eslint-disable @stencil-community/own-props-must-be-private */\n/* STENCIL IMPORTS */\nimport {\n Component,\n Host,\n h,\n Prop,\n Element,\n State,\n Method\n} from \"@stencil/core\";\n\nimport { MercuryBundles, getIconPath } from \"@genexus/mercury\";\nimport { Locale } from \"../../common/locale\";\nimport { UploadedFile, FileUploadState, UploadResult } from \"./types\";\n\nconst PLUS_ICON = getIconPath({\n category: \"system\",\n name: \"add\",\n colorType: \"primary\"\n});\n\nconst CSS_BUNDLES: MercuryBundles = [\n \"resets/box-sizing\",\n \"components/button\",\n \"components/icon\",\n \"components/list-box\",\n \"components/edit\",\n \"utils/typography\",\n \"utils/spacing\",\n \"utils/form\",\n \"utils/layout\",\n \"utils/elevation\",\n \"chameleon/scrollbar\"\n];\n\ntype FileValidationResult = {\n isValid: boolean;\n error?: string;\n};\n\n@Component({\n tag: \"gx-ide-file-uploader\",\n styleUrl: \"file-uploader.scss\",\n shadow: true,\n assetsDirs: [\"gx-ide-assets/file-uploader\"]\n})\nexport class FileUploader {\n #_componentLocale: any;\n #fileInputEl!: HTMLInputElement;\n\n @Element() el!: HTMLGxIdeFileUploaderElement;\n\n /** Allowed file types/extensions (e.g. ['.jpg', '.png', 'image/*', 'application/pdf']) */\n @Prop() readonly types?: string[] = [];\n\n /** Whether multiple files can be selected */\n @Prop() readonly multiple: boolean = false;\n\n /** Whether file names can be edited */\n @Prop() readonly canEditName: boolean = false;\n\n /** Label to display in the uploader dialog */\n @Prop() readonly label?: string;\n\n /** Function to handle file upload */\n @Prop() readonly uploadFunction!: (\n file: File,\n progressCallback: (progress: number) => void\n ) => Promise<UploadResult>;\n\n /** Function to cancel file upload */\n @Prop() readonly cancelUploadFunction?: (fileId: string) => Promise<void>;\n\n /** Callback when a file is uploaded successfully */\n @Prop() readonly fileUploadedCallback?: (file: UploadedFile) => Promise<void>;\n\n /** Callback when the dialog is canceled */\n @Prop() readonly dialogCanceledCallback?: () => Promise<void>;\n\n /** Callback when the dialog is confirmed with files */\n @Prop() readonly dialogConfirmedCallback?: (\n files: UploadedFile[]\n ) => Promise<void>;\n\n /** Callback when upload is cancelled */\n @Prop() readonly uploadCancelledCallback?: (fileId: string) => Promise<void>;\n\n /** Callback when file is renamed */\n @Prop() readonly fileRenamedCallback?: (data: {\n fileId: string;\n newName: string;\n }) => Promise<void>;\n\n /** Callback when a file validation error occurs */\n @Prop() readonly fileValidationErrorCallback?: (data: {\n fileName: string;\n error: string;\n }) => 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 /** Callback when a file is deleted */\n @Prop() readonly fileDeletedCallback?: (file: UploadedFile) => Promise<void>;\n\n /** Callback before deleting a file to get confirmation */\n @Prop() readonly onBeforeDelete?: (file: UploadedFile) => Promise<boolean>;\n\n @State() private fileStates: Map<string, FileUploadState> = new Map();\n @State() private isDragging: boolean = false;\n #dragCounter = 0;\n\n /** Initializes component with locale strings */\n async componentWillLoad() {\n this.#_componentLocale = await Locale.getComponentStrings(this.el);\n }\n\n /** Generates a unique ID for file identification */\n #generateId = (): string => {\n return Math.random().toString(36).substr(2, 9);\n };\n\n /** Validates if a file matches the allowed types */\n #isValidFile(file: File): FileValidationResult {\n // If no types specified, accept any file\n if (!this.types || this.types.length === 0) {\n return { isValid: true };\n }\n\n for (const type of this.types) {\n // Handle wildcards like 'image/*'\n if (type.includes(\"/*\")) {\n const baseType = type.split(\"/\")[0];\n if (file.type.startsWith(baseType)) {\n return { isValid: true };\n }\n }\n // Handle extensions like '.jpg'\n else if (type.startsWith(\".\")) {\n if (file.name.toLowerCase().endsWith(type.toLowerCase())) {\n return { isValid: true };\n }\n }\n // Handle specific MIME types\n else if (file.type === type || file.type === `application/${type}`) {\n return { isValid: true };\n }\n }\n\n return {\n isValid: false,\n error:\n this.#_componentLocale?.errors?.invalidFileType || \"Invalid file type\"\n };\n }\n\n /** Filters valid files from a FileList */\n #getValidFiles(files: FileList): File[] {\n const validFiles: File[] = [];\n\n Array.from(files).forEach(file => {\n const validation = this.#isValidFile(file);\n if (validation.isValid) {\n validFiles.push(file);\n } else {\n this.fileValidationErrorCallback?.({\n fileName: file.name,\n error: validation.error\n });\n }\n });\n\n return validFiles;\n }\n\n /** Handles drag enter event */\n #handleDragEnter = (e: DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n this.#dragCounter++;\n this.isDragging = true;\n };\n\n /** Handles drag leave event */\n #handleDragLeave = (e: DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n this.#dragCounter--;\n if (this.#dragCounter === 0) {\n this.isDragging = false;\n }\n };\n\n /** Handles drag over event */\n #handleDragOver = (e: DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n };\n\n /** Handles drop event */\n #handleDrop = (e: DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n this.isDragging = false;\n this.#dragCounter = 0;\n\n const files = e.dataTransfer?.files;\n if (files) {\n this.#handleFiles(files);\n }\n };\n\n /** Triggers file input click */\n #handleFileSelect = () => {\n this.#fileInputEl?.click();\n };\n\n /** Handles file input change event */\n #handleFileInput = (e: Event) => {\n const files = (e.target as HTMLInputElement).files;\n if (files) {\n this.#handleFiles(files);\n }\n };\n\n /** Processes files and starts upload */\n #handleFiles = (files: FileList) => {\n const validFiles: File[] = this.#getValidFiles(files);\n\n validFiles.forEach(async file => {\n const id = this.#generateId();\n const fileState: FileUploadState = {\n id,\n name: file.name,\n file,\n pending: true,\n progress: 0\n };\n\n if (!this.multiple) {\n this.fileStates.clear();\n }\n\n this.fileStates = new Map(this.fileStates.set(id, fileState));\n\n if (this.uploadFunction) {\n try {\n const uploadPromise = this.uploadFunction(file, progress => {\n const state = this.fileStates.get(id);\n if (state) {\n const updatedState = {\n ...state,\n progress: progress,\n pending: progress < 100\n };\n this.fileStates = new Map(this.fileStates.set(id, updatedState));\n }\n });\n\n // Store the upload promise/object for potential cancellation\n const stateWithPromise = {\n ...this.fileStates.get(id),\n uploadPromise\n };\n this.fileStates = new Map(this.fileStates.set(id, stateWithPromise));\n\n const result = await uploadPromise;\n\n const state = this.fileStates.get(id);\n if (state) {\n if (result.success && result.remoteId) {\n const updatedState = {\n ...state,\n remoteId: result.remoteId,\n pending: false,\n progress: 100\n };\n this.fileStates = new Map(this.fileStates.set(id, updatedState));\n\n await this.fileUploadedCallback?.({\n name: state.name,\n originalName: state.file.name,\n remoteId: result.remoteId\n });\n } else {\n const updatedState = {\n ...state,\n error: result.errors?.upload || \"Upload failed\",\n pending: false\n };\n this.fileStates = new Map(this.fileStates.set(id, updatedState));\n }\n }\n } catch (error) {\n const state = this.fileStates.get(id);\n if (state) {\n const updatedState = {\n ...state,\n error:\n error instanceof Error\n ? error.message\n : \"Unknown error occurred\",\n pending: false\n };\n this.fileStates = new Map(this.fileStates.set(id, updatedState));\n }\n }\n }\n });\n\n if (this.#fileInputEl) {\n this.#fileInputEl.value = \"\";\n }\n };\n\n /** Handles file name change */\n #handleNameChange = async (\n event: CustomEvent<{ id: string; name: string }>\n ) => {\n const { id, name } = event.detail;\n const file = this.fileStates.get(id);\n\n if (file) {\n const updatedFile = {\n ...file,\n name: name.trim(),\n isEditing: false\n };\n\n this.fileStates = new Map(this.fileStates.set(id, updatedFile));\n await this.fileRenamedCallback?.({ fileId: id, newName: name.trim() });\n }\n };\n\n /** Handles individual file cancellation or deletion */\n #handleFileCancel = async (event: CustomEvent<string>) => {\n const id = event.detail;\n const state = this.fileStates.get(id);\n if (state) {\n try {\n if (state.pending) {\n // Cancel upload in progress\n if (\n state.uploadPromise &&\n typeof state.uploadPromise.cancel === \"function\"\n ) {\n state.uploadPromise.cancel();\n } else if (this.cancelUploadFunction) {\n await this.cancelUploadFunction(id);\n }\n\n await this.uploadCancelledCallback?.(id);\n\n this.fileStates.delete(id);\n this.fileStates = new Map(this.fileStates);\n } else {\n const fileToDelete: UploadedFile = {\n name: state.name,\n originalName: state.file.name,\n remoteId: state.remoteId\n };\n\n const shouldDelete = await this.onBeforeDelete?.(fileToDelete);\n\n if (shouldDelete) {\n await this.fileDeletedCallback?.(fileToDelete);\n this.fileStates.delete(id);\n this.fileStates = new Map(this.fileStates);\n }\n }\n } catch (error) {\n await this.fileDeletionErrorCallback?.({\n fileName: state.name,\n error:\n error instanceof Error ? error.message : \"Unknown error occurred\"\n });\n }\n }\n };\n\n /** Handles dialog confirmation */\n #handleConfirm = async () => {\n // Verificar si hay subidas en progreso\n const hasPendingUploads = Array.from(this.fileStates.values()).some(\n file => file.pending\n );\n\n if (hasPendingUploads) {\n return; // No permitir confirmar si hay subidas en progreso\n }\n\n // Obtener todos los archivos que están completamente subidos\n const uploadedFiles: UploadedFile[] = Array.from(this.fileStates.values())\n .filter(file => {\n const isValid = !file.pending && file.remoteId && !file.error;\n return isValid;\n })\n .map(file => ({\n name: file.name,\n originalName: file.file.name,\n remoteId: file.remoteId as string\n }));\n\n if (uploadedFiles.length > 0) {\n await this.dialogConfirmedCallback?.(uploadedFiles);\n }\n\n // Clear file states\n this.fileStates.clear();\n this.fileStates = new Map();\n\n // Reset file input\n if (this.#fileInputEl) {\n this.#fileInputEl.value = \"\";\n }\n };\n\n /** Handles dialog cancellation */\n #handleCancel = async () => {\n try {\n // Cancelamos todas las subidas en progreso\n for (const [id, state] of this.fileStates.entries()) {\n if (state.pending && this.cancelUploadFunction) {\n try {\n await this.cancelUploadFunction(id);\n await this.uploadCancelledCallback?.(id);\n } catch (error) {\n // Error handling for upload cancellation\n }\n }\n }\n\n // Limpiamos todos los estados\n this.fileStates.clear();\n this.fileStates = new Map();\n\n if (this.#fileInputEl) {\n this.#fileInputEl.value = \"\";\n }\n\n await this.dialogCanceledCallback?.();\n } catch (error) {\n this.fileStates.clear();\n this.fileStates = new Map();\n await this.dialogCanceledCallback?.();\n }\n };\n\n /** Clears the current file selection */\n @Method()\n async clear() {\n for (const [id, state] of this.fileStates.entries()) {\n if (state.pending && this.cancelUploadFunction) {\n try {\n await this.cancelUploadFunction(id);\n await this.uploadCancelledCallback?.(id);\n } catch (error) {\n // Error handling for upload cancellation\n }\n }\n }\n this.fileStates.clear();\n }\n\n render() {\n return (\n <Host class=\"widget\">\n <ch-theme model={CSS_BUNDLES}></ch-theme>\n {/* Native file input required: ch-edit is for text only; no Chameleon file picker. */}\n <input\n type=\"file\"\n hidden\n multiple={this.multiple}\n accept={this.types\n ?.map(type => (type.startsWith(\".\") ? type : `.${type}`))\n .join(\",\")}\n onChange={this.#handleFileInput}\n ref={el => (this.#fileInputEl = el as HTMLInputElement)}\n aria-hidden=\"true\"\n tabIndex={-1}\n />\n <div class=\"file-uploader-dialog\">\n <div class=\"dialog-content\">\n {this.isDragging || this.fileStates.size === 0 ? (\n <div\n class={{\n \"file-uploader__drop-zone elevation-1\": true,\n \"file-uploader__drop-zone--dragging\": this.isDragging\n }}\n onDragEnter={this.#handleDragEnter}\n onDragLeave={this.#handleDragLeave}\n onDragOver={this.#handleDragOver}\n onDrop={this.#handleDrop}\n >\n <button\n class=\"button-tertiary button-icon-and-text\"\n type=\"button\"\n onClick={this.#handleFileSelect}\n >\n <ch-image class=\"icon-m\" src={PLUS_ICON}></ch-image>\n <label class=\"label\">\n {this.multiple\n ? this.#_componentLocale?.header.uploadButtonMultiple\n : this.#_componentLocale?.header.uploadButtonSingle}\n </label>\n </button>\n <div class=\"text-container\">\n <div class=\"label-primary-row\">\n <label class=\"label\">\n {this.label || this.#_componentLocale?.header.orText}\n </label>\n <label class=\"label\">\n {this.#_componentLocale?.header.dragAndDrop}\n </label>\n </div>\n <span class=\"caption\">\n {this.types && this.types.length > 0\n ? this.#_componentLocale?.header.acceptedFiles.replace(\n \"{0}\",\n this.types.join(\", \")\n )\n : this.#_componentLocale?.header.allFilesAccepted}\n </span>\n </div>\n </div>\n ) : (\n <div class=\"file-uploader__list\">\n <div class=\"file-uploader__list-header elevation-1 spacing-body-block-end spacing-inline-end\">\n <div class=\"file-uploader__list-title-container\">\n <label class=\"label\">\n {this.label ||\n this.#_componentLocale?.fileList.attachedFiles}\n </label>\n <span class=\"caption\">\n {this.#_componentLocale?.fileList.filesCount.replace(\n \"{0}\",\n this.fileStates.size.toString()\n )}\n </span>\n </div>\n {this.multiple && (\n <button\n class=\"button-tertiary button-icon-and-text\"\n type=\"button\"\n onClick={this.#handleFileSelect}\n >\n <ch-image class=\"icon-m\" src={PLUS_ICON}></ch-image>\n <label class=\"label\">\n {this.multiple\n ? this.#_componentLocale?.header.uploadButtonMultiple\n : this.#_componentLocale?.header.uploadButtonSingle}\n </label>\n </button>\n )}\n </div>\n <ul\n class=\"file-uploader__list-content scrollable spacing-inline-end spacing-block-end\"\n aria-live=\"polite\"\n aria-label={this.#_componentLocale?.fileList.selectedFilesAriaLabel}\n >\n {Array.from(this.fileStates.values()).map(file => (\n <gx-ide-file-item\n key={file.id}\n file={file}\n editable={this.canEditName}\n componentLocale={this.#_componentLocale}\n onFileNameChange={this.#handleNameChange}\n onFileDelete={this.#handleFileCancel}\n onFileCancel={this.#handleFileCancel}\n />\n ))}\n </ul>\n </div>\n )}\n </div>\n <div class={{\n \"dialog-footer\": true,\n \"dialog-footer-with-border\": this.fileStates.size > 0\n }}>\n <div class=\"buttons-spacer\">\n <button\n class=\"button-secondary\"\n type=\"button\"\n onClick={this.#handleCancel}\n >\n {this.#_componentLocale?.buttons.cancel}\n </button>\n <button\n class=\"button-primary\"\n type=\"button\"\n onClick={this.#handleConfirm}\n disabled={\n this.fileStates.size === 0 ||\n Array.from(this.fileStates.values()).some(\n file => file.pending\n )\n }\n >\n {this.#_componentLocale?.buttons.confirm}\n </button>\n </div>\n </div>\n </div>\n </Host>\n );\n }\n}\n"]}
|
|
@@ -10,13 +10,17 @@
|
|
|
10
10
|
},
|
|
11
11
|
"fileList": {
|
|
12
12
|
"attachedFiles": "Attached files",
|
|
13
|
-
"filesCount": "{0} file(s) attached"
|
|
13
|
+
"filesCount": "{0} file(s) attached",
|
|
14
|
+
"selectedFilesAriaLabel": "Selected files"
|
|
14
15
|
},
|
|
15
16
|
"fileItem": {
|
|
16
17
|
"editButtonAriaLabel": "Edit file name",
|
|
17
18
|
"deleteButtonAriaLabel": "Delete file",
|
|
18
|
-
"cancelUploadButtonAriaLabel": "Cancel upload",
|
|
19
|
-
"editNameAriaLabel": "Edit file name"
|
|
19
|
+
"cancelUploadButtonAriaLabel": "Cancel upload of {fileName}",
|
|
20
|
+
"editNameAriaLabel": "Edit file name",
|
|
21
|
+
"editNamePlaceholderAriaLabel": "Edit {fileName} file name",
|
|
22
|
+
"uploadingAriaLabel": "{fileName}, Uploading... {fileProgress}%",
|
|
23
|
+
"uploadedSuccessfullyAriaLabel": "{fileName}, Uploaded successfully"
|
|
20
24
|
},
|
|
21
25
|
"buttons": {
|
|
22
26
|
"cancel": "Cancel",
|
|
@@ -10,13 +10,17 @@
|
|
|
10
10
|
},
|
|
11
11
|
"fileList": {
|
|
12
12
|
"attachedFiles": "添付ファイル",
|
|
13
|
-
"filesCount": "添付ファイル数: {0}"
|
|
13
|
+
"filesCount": "添付ファイル数: {0}",
|
|
14
|
+
"selectedFilesAriaLabel": "選択されたファイル"
|
|
14
15
|
},
|
|
15
16
|
"fileItem": {
|
|
16
17
|
"editButtonAriaLabel": "ファイル名を編集",
|
|
17
18
|
"deleteButtonAriaLabel": "ファイルを削除",
|
|
18
|
-
"cancelUploadButtonAriaLabel": "
|
|
19
|
-
"editNameAriaLabel": "ファイル名を編集"
|
|
19
|
+
"cancelUploadButtonAriaLabel": "{fileName} のアップロードをキャンセル",
|
|
20
|
+
"editNameAriaLabel": "ファイル名を編集",
|
|
21
|
+
"editNamePlaceholderAriaLabel": "{fileName} ファイル名を編集",
|
|
22
|
+
"uploadingAriaLabel": "{fileName}、アップロード中... {fileProgress}%",
|
|
23
|
+
"uploadedSuccessfullyAriaLabel": "{fileName}、アップロード成功"
|
|
20
24
|
},
|
|
21
25
|
"buttons": {
|
|
22
26
|
"cancel": "キャンセル",
|
|
@@ -10,13 +10,18 @@
|
|
|
10
10
|
},
|
|
11
11
|
"fileList": {
|
|
12
12
|
"attachedFiles": "Attached files",
|
|
13
|
-
"filesCount": "{0} file(s) attached"
|
|
13
|
+
"filesCount": "{0} file(s) attached",
|
|
14
|
+
"selectedFilesAriaLabel": "Selected files"
|
|
14
15
|
},
|
|
15
16
|
"fileItem": {
|
|
16
17
|
"editButtonAriaLabel": "Edit file name",
|
|
17
18
|
"deleteButtonAriaLabel": "Delete file",
|
|
18
|
-
"cancelUploadButtonAriaLabel": "Cancel upload",
|
|
19
|
-
"editNameAriaLabel": "Edit file name"
|
|
19
|
+
"cancelUploadButtonAriaLabel": "Cancel upload of {fileName}",
|
|
20
|
+
"editNameAriaLabel": "Edit file name",
|
|
21
|
+
"editNamePlaceholderAriaLabel": "Edit {fileName} file name",
|
|
22
|
+
"uploadingAriaLabel": "{fileName},上传中... {fileProgress}%",
|
|
23
|
+
"uploadedSuccessfullyAriaLabel": "{fileName},上传成功"
|
|
24
|
+
|
|
20
25
|
},
|
|
21
26
|
"buttons": {
|
|
22
27
|
"cancel": "Cancel",
|
|
@@ -1,26 +1 @@
|
|
|
1
|
-
[
|
|
2
|
-
{
|
|
3
|
-
"selector": "[part~='tab-web-apps']",
|
|
4
|
-
"keyShortcuts": "1",
|
|
5
|
-
"action": "click",
|
|
6
|
-
"conditions": {
|
|
7
|
-
"focusExclude": "[part~='tab-native-apps'], [part~='tab-apis']"
|
|
8
|
-
}
|
|
9
|
-
},
|
|
10
|
-
{
|
|
11
|
-
"selector": "[part~='tab-native-apps']",
|
|
12
|
-
"keyShortcuts": "2",
|
|
13
|
-
"action": "click",
|
|
14
|
-
"conditions": {
|
|
15
|
-
"focusExclude": "[part~='tab-web-apps'], [part~='tab-apis']"
|
|
16
|
-
}
|
|
17
|
-
},
|
|
18
|
-
{
|
|
19
|
-
"selector": "[part~='tab-apis']",
|
|
20
|
-
"keyShortcuts": "3",
|
|
21
|
-
"action": "click",
|
|
22
|
-
"conditions": {
|
|
23
|
-
"focusExclude": "[part~='tab-web-apps'], [part~='tab-native-apps']"
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
]
|
|
1
|
+
[]
|
|
@@ -14,8 +14,8 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
|
|
|
14
14
|
throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
15
15
|
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
16
16
|
};
|
|
17
|
-
var
|
|
18
|
-
import { Host,
|
|
17
|
+
var _GxIdeLaunchpad_componentLocale;
|
|
18
|
+
import { Host, h } from "@stencil/core";
|
|
19
19
|
import { Locale } from "../../../common/locale";
|
|
20
20
|
const CSS_BUNDLES = [
|
|
21
21
|
"resets/box-sizing",
|
|
@@ -34,8 +34,6 @@ const APIS_TAB_SELECTOR = "apis";
|
|
|
34
34
|
const TAB_SLOT_SPACING_BODY_SELECTOR = "tab-slot-spacing-body";
|
|
35
35
|
export class GxIdeLaunchpad {
|
|
36
36
|
constructor() {
|
|
37
|
-
_GxIdeLaunchpad_chShortcutsEl.set(this, void 0);
|
|
38
|
-
_GxIdeLaunchpad_shortcutsSrc.set(this, getAssetPath(`./gx-ide-assets/launchpad/shortcuts.json`));
|
|
39
37
|
_GxIdeLaunchpad_componentLocale.set(this, void 0);
|
|
40
38
|
this.data = undefined;
|
|
41
39
|
this.isStandalone = true;
|
|
@@ -66,17 +64,6 @@ export class GxIdeLaunchpad {
|
|
|
66
64
|
}
|
|
67
65
|
}
|
|
68
66
|
componentDidLoad() { }
|
|
69
|
-
/**
|
|
70
|
-
* Suspends or reactivates the shortcuts
|
|
71
|
-
*/
|
|
72
|
-
async suspendShortcuts(suspendShortcuts) {
|
|
73
|
-
if (suspendShortcuts) {
|
|
74
|
-
__classPrivateFieldGet(this, _GxIdeLaunchpad_chShortcutsEl, "f").suspend = true;
|
|
75
|
-
}
|
|
76
|
-
else {
|
|
77
|
-
__classPrivateFieldGet(this, _GxIdeLaunchpad_chShortcutsEl, "f").suspend = false;
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
67
|
/**
|
|
81
68
|
* Organizes received data and builds tab model
|
|
82
69
|
*/
|
|
@@ -156,7 +143,8 @@ export class GxIdeLaunchpad {
|
|
|
156
143
|
if (!this.data || !this.sections || this.sections.length === 0) {
|
|
157
144
|
return null;
|
|
158
145
|
}
|
|
159
|
-
|
|
146
|
+
// TODO: Revisit re-enabling keyboard shortcuts 1, 2, 3 for switching launchpad tabs (Web Apps, Native Apps, APIs)
|
|
147
|
+
return (h(Host, null, h("ch-theme", { model: CSS_BUNDLES }), h("ch-tab-render", { class: {
|
|
160
148
|
scrollable: true,
|
|
161
149
|
tab: true,
|
|
162
150
|
[MAIN_SECTION_CLASSES]: true
|
|
@@ -286,31 +274,6 @@ export class GxIdeLaunchpad {
|
|
|
286
274
|
}
|
|
287
275
|
}];
|
|
288
276
|
}
|
|
289
|
-
static get methods() {
|
|
290
|
-
return {
|
|
291
|
-
"suspendShortcuts": {
|
|
292
|
-
"complexType": {
|
|
293
|
-
"signature": "(suspendShortcuts: boolean) => Promise<void>",
|
|
294
|
-
"parameters": [{
|
|
295
|
-
"name": "suspendShortcuts",
|
|
296
|
-
"type": "boolean",
|
|
297
|
-
"docs": ""
|
|
298
|
-
}],
|
|
299
|
-
"references": {
|
|
300
|
-
"Promise": {
|
|
301
|
-
"location": "global",
|
|
302
|
-
"id": "global::Promise"
|
|
303
|
-
}
|
|
304
|
-
},
|
|
305
|
-
"return": "Promise<void>"
|
|
306
|
-
},
|
|
307
|
-
"docs": {
|
|
308
|
-
"text": "Suspends or reactivates the shortcuts",
|
|
309
|
-
"tags": []
|
|
310
|
-
}
|
|
311
|
-
}
|
|
312
|
-
};
|
|
313
|
-
}
|
|
314
277
|
static get elementRef() { return "el"; }
|
|
315
278
|
static get watchers() {
|
|
316
279
|
return [{
|
|
@@ -319,5 +282,5 @@ export class GxIdeLaunchpad {
|
|
|
319
282
|
}];
|
|
320
283
|
}
|
|
321
284
|
}
|
|
322
|
-
|
|
285
|
+
_GxIdeLaunchpad_componentLocale = new WeakMap();
|
|
323
286
|
//# sourceMappingURL=launchpad.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"launchpad.js","sourceRoot":"","sources":["../../../../src/components/launchpad/root/launchpad.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n Host,\n Prop,\n Element,\n State,\n getAssetPath,\n Method,\n h,\n Watch,\n Event,\n EventEmitter\n} from \"@stencil/core\";\n\nimport { MercuryBundles } from \"@genexus/mercury\";\nimport { TabModel } from \"@genexus/chameleon-controls-library\";\nimport { Locale } from \"../../../common/locale\";\n\nconst CSS_BUNDLES: MercuryBundles = [\n \"resets/box-sizing\",\n \"components/tab\",\n \"utils/form--full\",\n \"utils/layout\",\n \"utils/typography\",\n \"utils/spacing\",\n \"chameleon/scrollbar\"\n];\n\nconst MAIN_SECTION_CLASSES: string = \"main\";\nconst WEB_APPS_TAB_SELECTOR: string = \"web-apps\";\nconst NATIVE_APPS_TAB_SELECTOR: string = \"native-apps\";\nconst APIS_TAB_SELECTOR: string = \"apis\";\n\n// Temporary WA (Read WA in launchpad.scss)\nconst TAB_SLOT_SPACING_BODY_SELECTOR: string = \"tab-slot-spacing-body\";\n\n@Component({\n tag: \"gx-ide-launchpad\",\n styleUrl: \"launchpad.scss\",\n shadow: true,\n assetsDirs: [\"gx-ide-assets/launchpad\"]\n})\nexport class GxIdeLaunchpad {\n #chShortcutsEl: HTMLChShortcutsElement;\n #shortcutsSrc = getAssetPath(`./gx-ide-assets/launchpad/shortcuts.json`);\n #componentLocale: any;\n\n @Element() el: HTMLGxIdeLaunchpadElement;\n\n /**\n * JSON data containing section structure\n */\n @Prop() data: string | undefined = undefined;\n\n /**\n * Determines if the component runs in standalone mode\n */\n @Prop() isStandalone: boolean = true;\n\n /**\n * Array of sections for tabs\n */\n @State() sections: Array<any> = [];\n\n /**\n * Tab model for ch-tab-render\n */\n @State() tabModel: TabModel = [];\n\n /**\n * Event emitted when an object is selected for execution\n */\n @Event() objectSelected: EventEmitter<{\n key: { type: string; id: string } | string;\n }>;\n\n /**\n * Event emitted when copying to clipboard\n */\n @Event() copyToClipboard: EventEmitter<{ url: string }>;\n\n /**\n * Event emitted when opening app store\n */\n @Event() openOnTheAppStore: EventEmitter<{ url: string }>;\n\n @Watch(\"data\")\n watchDataHandler(newValue: string | undefined) {\n if (newValue !== undefined) {\n this.organizeData();\n }\n }\n\n async componentWillLoad() {\n try {\n this.#componentLocale = await Locale.getComponentStrings(this.el);\n } catch (error) {\n console.error(\"Error loading locale:\", error);\n this.#componentLocale = {\n tabs: {\n webApps: \"WEB APPS\",\n nativeApps: \"NATIVE APPS\",\n apis: \"APIS\"\n }\n };\n }\n\n if (this.data) {\n this.organizeData();\n }\n }\n\n componentDidLoad() {}\n\n /**\n * Suspends or reactivates the shortcuts\n */\n @Method()\n async suspendShortcuts(suspendShortcuts: boolean) {\n if (suspendShortcuts) {\n this.#chShortcutsEl.suspend = true;\n } else {\n this.#chShortcutsEl.suspend = false;\n }\n }\n\n /**\n * Organizes received data and builds tab model\n */\n private organizeData(): void {\n if (this.data) {\n try {\n const parsedData =\n typeof this.data === \"string\" ? JSON.parse(this.data) : this.data;\n this.sections = parsedData.sections || [];\n this.buildTabModel();\n } catch (error) {\n console.error(\"Error parsing launchpad data:\", error);\n this.sections = [];\n this.tabModel = [];\n }\n }\n }\n\n /**\n * Builds tab model based on sections\n */\n private buildTabModel(): void {\n if (this.sections && this.sections.length > 0) {\n this.tabModel = this.sections.map(section => ({\n id: section.id,\n name: this.getLocalizedTabName(section.id)\n }));\n }\n }\n\n /**\n * Gets localized tab name based on section ID\n */\n private getLocalizedTabName(sectionId: string): string {\n const tabNames = this.#componentLocale?.tabs || {};\n\n switch (sectionId) {\n case \"web-apps\":\n return tabNames.webApps || \"WEB APPS\";\n case \"native-apps\":\n return tabNames.nativeApps || \"NATIVE APPS\";\n case \"apis\":\n return tabNames.apis || \"APIS\";\n default:\n return sectionId.toUpperCase().replace(/-/g, \" \");\n }\n }\n\n /**\n * Handles object selection from subcomponents\n */\n private handleObjectSelection(event: any) {\n let key = event.detail.key;\n\n // Convert string format \"type|id\" to object format\n if (typeof key === \"string\" && key.includes(\"|\")) {\n const parts = key.split(\"|\");\n if (parts.length === 2) {\n key = {\n type: parts[0],\n id: parts[1]\n };\n }\n }\n\n this.objectSelected.emit({ key });\n }\n\n /**\n * Handles copy to clipboard from subcomponents\n */\n private handleCopyToClipboard(event: any) {\n this.copyToClipboard.emit({ url: event.detail.url });\n }\n\n /**\n * Handles open app store from subcomponents\n */\n private handleOpenAppStore(event: any) {\n this.openOnTheAppStore.emit({ url: event.detail.url });\n }\n\n render() {\n if (!this.data || !this.sections || this.sections.length === 0) {\n return null;\n }\n\n return (\n <Host>\n <ch-theme model={CSS_BUNDLES}></ch-theme>\n <ch-shortcuts\n src={this.#shortcutsSrc}\n ref={(el: HTMLChShortcutsElement) =>\n (this.#chShortcutsEl = el as HTMLChShortcutsElement)\n }\n ></ch-shortcuts>\n\n <ch-tab-render\n class={{\n scrollable: true,\n tab: true,\n [MAIN_SECTION_CLASSES]: true\n }}\n tabListPosition=\"block-start\"\n model={this.tabModel}\n selectedId={WEB_APPS_TAB_SELECTOR}\n overflow=\"auto\"\n contain=\"size\"\n >\n <div\n slot={WEB_APPS_TAB_SELECTOR}\n class={{ \"web-apps\": true, [TAB_SLOT_SPACING_BODY_SELECTOR]: true }}\n part=\"tab-button-web-apps\"\n >\n <gx-ide-launchpad-web-apps\n objects={\n this.sections.find(s => s.id === \"web-apps\")?.objects || []\n }\n {...({\n onObjectSelected: (event: any) =>\n this.handleObjectSelection(event)\n } as any)}\n {...({\n onCopyToClipboard: (event: any) =>\n this.handleCopyToClipboard(event)\n } as any)}\n />\n </div>\n\n <div\n slot={NATIVE_APPS_TAB_SELECTOR}\n class={{\n \"native-apps\": true,\n [TAB_SLOT_SPACING_BODY_SELECTOR]: true\n }}\n part=\"tab-button-native-apps\"\n >\n <gx-ide-launchpad-native-apps\n objects={\n this.sections.find(s => s.id === \"native-apps\")?.objects || []\n }\n {...({\n onObjectSelected: (event: any) =>\n this.handleObjectSelection(event)\n } as any)}\n {...({\n onCopyToClipboard: (event: any) =>\n this.handleCopyToClipboard(event)\n } as any)}\n {...({\n onOpenOnTheAppStore: (event: any) =>\n this.handleOpenAppStore(event)\n } as any)}\n />\n </div>\n\n <div\n slot={APIS_TAB_SELECTOR}\n class={{ apis: true, [TAB_SLOT_SPACING_BODY_SELECTOR]: true }}\n part=\"tab-button-apis\"\n >\n <gx-ide-launchpad-apis\n apis={this.sections.find(s => s.id === \"apis\")?.apis || []}\n {...({\n onObjectSelected: (event: any) =>\n this.handleObjectSelection(event)\n } as any)}\n {...({\n onCopyToClipboard: (event: any) =>\n this.handleCopyToClipboard(event)\n } as any)}\n />\n </div>\n </ch-tab-render>\n </Host>\n );\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"launchpad.js","sourceRoot":"","sources":["../../../../src/components/launchpad/root/launchpad.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n Host,\n Prop,\n Element,\n State,\n h,\n Watch,\n Event,\n EventEmitter\n} from \"@stencil/core\";\n\nimport { MercuryBundles } from \"@genexus/mercury\";\nimport { TabModel } from \"@genexus/chameleon-controls-library\";\nimport { Locale } from \"../../../common/locale\";\n\nconst CSS_BUNDLES: MercuryBundles = [\n \"resets/box-sizing\",\n \"components/tab\",\n \"utils/form--full\",\n \"utils/layout\",\n \"utils/typography\",\n \"utils/spacing\",\n \"chameleon/scrollbar\"\n];\n\nconst MAIN_SECTION_CLASSES: string = \"main\";\nconst WEB_APPS_TAB_SELECTOR: string = \"web-apps\";\nconst NATIVE_APPS_TAB_SELECTOR: string = \"native-apps\";\nconst APIS_TAB_SELECTOR: string = \"apis\";\n\n// Temporary WA (Read WA in launchpad.scss)\nconst TAB_SLOT_SPACING_BODY_SELECTOR: string = \"tab-slot-spacing-body\";\n\n@Component({\n tag: \"gx-ide-launchpad\",\n styleUrl: \"launchpad.scss\",\n shadow: true,\n assetsDirs: [\"gx-ide-assets/launchpad\"]\n})\nexport class GxIdeLaunchpad {\n #componentLocale: any;\n\n @Element() el: HTMLGxIdeLaunchpadElement;\n\n /**\n * JSON data containing section structure\n */\n @Prop() data: string | undefined = undefined;\n\n /**\n * Determines if the component runs in standalone mode\n */\n @Prop() isStandalone: boolean = true;\n\n /**\n * Array of sections for tabs\n */\n @State() sections: Array<any> = [];\n\n /**\n * Tab model for ch-tab-render\n */\n @State() tabModel: TabModel = [];\n\n /**\n * Event emitted when an object is selected for execution\n */\n @Event() objectSelected: EventEmitter<{\n key: { type: string; id: string } | string;\n }>;\n\n /**\n * Event emitted when copying to clipboard\n */\n @Event() copyToClipboard: EventEmitter<{ url: string }>;\n\n /**\n * Event emitted when opening app store\n */\n @Event() openOnTheAppStore: EventEmitter<{ url: string }>;\n\n @Watch(\"data\")\n watchDataHandler(newValue: string | undefined) {\n if (newValue !== undefined) {\n this.organizeData();\n }\n }\n\n async componentWillLoad() {\n try {\n this.#componentLocale = await Locale.getComponentStrings(this.el);\n } catch (error) {\n console.error(\"Error loading locale:\", error);\n this.#componentLocale = {\n tabs: {\n webApps: \"WEB APPS\",\n nativeApps: \"NATIVE APPS\",\n apis: \"APIS\"\n }\n };\n }\n\n if (this.data) {\n this.organizeData();\n }\n }\n\n componentDidLoad() {}\n\n /**\n * Organizes received data and builds tab model\n */\n private organizeData(): void {\n if (this.data) {\n try {\n const parsedData =\n typeof this.data === \"string\" ? JSON.parse(this.data) : this.data;\n this.sections = parsedData.sections || [];\n this.buildTabModel();\n } catch (error) {\n console.error(\"Error parsing launchpad data:\", error);\n this.sections = [];\n this.tabModel = [];\n }\n }\n }\n\n /**\n * Builds tab model based on sections\n */\n private buildTabModel(): void {\n if (this.sections && this.sections.length > 0) {\n this.tabModel = this.sections.map(section => ({\n id: section.id,\n name: this.getLocalizedTabName(section.id)\n }));\n }\n }\n\n /**\n * Gets localized tab name based on section ID\n */\n private getLocalizedTabName(sectionId: string): string {\n const tabNames = this.#componentLocale?.tabs || {};\n\n switch (sectionId) {\n case \"web-apps\":\n return tabNames.webApps || \"WEB APPS\";\n case \"native-apps\":\n return tabNames.nativeApps || \"NATIVE APPS\";\n case \"apis\":\n return tabNames.apis || \"APIS\";\n default:\n return sectionId.toUpperCase().replace(/-/g, \" \");\n }\n }\n\n /**\n * Handles object selection from subcomponents\n */\n private handleObjectSelection(event: any) {\n let key = event.detail.key;\n\n // Convert string format \"type|id\" to object format\n if (typeof key === \"string\" && key.includes(\"|\")) {\n const parts = key.split(\"|\");\n if (parts.length === 2) {\n key = {\n type: parts[0],\n id: parts[1]\n };\n }\n }\n\n this.objectSelected.emit({ key });\n }\n\n /**\n * Handles copy to clipboard from subcomponents\n */\n private handleCopyToClipboard(event: any) {\n this.copyToClipboard.emit({ url: event.detail.url });\n }\n\n /**\n * Handles open app store from subcomponents\n */\n private handleOpenAppStore(event: any) {\n this.openOnTheAppStore.emit({ url: event.detail.url });\n }\n\n render() {\n if (!this.data || !this.sections || this.sections.length === 0) {\n return null;\n }\n\n // TODO: Revisit re-enabling keyboard shortcuts 1, 2, 3 for switching launchpad tabs (Web Apps, Native Apps, APIs)\n return (\n <Host>\n <ch-theme model={CSS_BUNDLES}></ch-theme>\n\n <ch-tab-render\n class={{\n scrollable: true,\n tab: true,\n [MAIN_SECTION_CLASSES]: true\n }}\n tabListPosition=\"block-start\"\n model={this.tabModel}\n selectedId={WEB_APPS_TAB_SELECTOR}\n overflow=\"auto\"\n contain=\"size\"\n >\n <div\n slot={WEB_APPS_TAB_SELECTOR}\n class={{ \"web-apps\": true, [TAB_SLOT_SPACING_BODY_SELECTOR]: true }}\n part=\"tab-button-web-apps\"\n >\n <gx-ide-launchpad-web-apps\n objects={\n this.sections.find(s => s.id === \"web-apps\")?.objects || []\n }\n {...({\n onObjectSelected: (event: any) =>\n this.handleObjectSelection(event)\n } as any)}\n {...({\n onCopyToClipboard: (event: any) =>\n this.handleCopyToClipboard(event)\n } as any)}\n />\n </div>\n\n <div\n slot={NATIVE_APPS_TAB_SELECTOR}\n class={{\n \"native-apps\": true,\n [TAB_SLOT_SPACING_BODY_SELECTOR]: true\n }}\n part=\"tab-button-native-apps\"\n >\n <gx-ide-launchpad-native-apps\n objects={\n this.sections.find(s => s.id === \"native-apps\")?.objects || []\n }\n {...({\n onObjectSelected: (event: any) =>\n this.handleObjectSelection(event)\n } as any)}\n {...({\n onCopyToClipboard: (event: any) =>\n this.handleCopyToClipboard(event)\n } as any)}\n {...({\n onOpenOnTheAppStore: (event: any) =>\n this.handleOpenAppStore(event)\n } as any)}\n />\n </div>\n\n <div\n slot={APIS_TAB_SELECTOR}\n class={{ apis: true, [TAB_SLOT_SPACING_BODY_SELECTOR]: true }}\n part=\"tab-button-apis\"\n >\n <gx-ide-launchpad-apis\n apis={this.sections.find(s => s.id === \"apis\")?.apis || []}\n {...({\n onObjectSelected: (event: any) =>\n this.handleObjectSelection(event)\n } as any)}\n {...({\n onCopyToClipboard: (event: any) =>\n this.handleCopyToClipboard(event)\n } as any)}\n />\n </div>\n </ch-tab-render>\n </Host>\n );\n }\n}\n"]}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
{
|
|
2
|
+
"labels": {
|
|
3
|
+
"includeTypes": "Include types",
|
|
4
|
+
"excludeTypes": "Exclude types",
|
|
5
|
+
"module": "Module",
|
|
6
|
+
"properties": "Properties",
|
|
7
|
+
"results": "Results"
|
|
8
|
+
},
|
|
9
|
+
"buttons": {
|
|
10
|
+
"cancel": "Cancel",
|
|
11
|
+
"confirm": "Confirm"
|
|
12
|
+
},
|
|
13
|
+
"footer": {},
|
|
14
|
+
"placeholders": {
|
|
15
|
+
"search": "Search...",
|
|
16
|
+
"typesToInclude": "Types to include",
|
|
17
|
+
"typesToExclude": "Types to exclude",
|
|
18
|
+
"searchAModule": "Search a module ",
|
|
19
|
+
"addProperties": "Add properties"
|
|
20
|
+
},
|
|
21
|
+
"accessibleName": "Search in Knowledge Base",
|
|
22
|
+
"settingsButtonAriaLabel": "Toggle search settings",
|
|
23
|
+
"tooltips": {
|
|
24
|
+
"searchInAllSiblings": "Search in all siblings"
|
|
25
|
+
},
|
|
26
|
+
"emptyState": {
|
|
27
|
+
"title": "No results found",
|
|
28
|
+
"description": "Try adjusting your filters or checking your spelling to find what you’re looking for"
|
|
29
|
+
},
|
|
30
|
+
"noKbOpenState": {
|
|
31
|
+
"title": "No Knowledge Base open",
|
|
32
|
+
"description": "Open a Knowledge Base to start searching"
|
|
33
|
+
},
|
|
34
|
+
"loader": {
|
|
35
|
+
"title": "Loading..."
|
|
36
|
+
}
|
|
37
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
{
|
|
2
|
+
"labels": {
|
|
3
|
+
"includeTypes": "Include types",
|
|
4
|
+
"excludeTypes": "Exclude types",
|
|
5
|
+
"module": "Module",
|
|
6
|
+
"properties": "Properties",
|
|
7
|
+
"results": "Results"
|
|
8
|
+
},
|
|
9
|
+
"buttons": {
|
|
10
|
+
"cancel": "Cancel",
|
|
11
|
+
"confirm": "Confirm"
|
|
12
|
+
},
|
|
13
|
+
"footer": {},
|
|
14
|
+
"placeholders": {
|
|
15
|
+
"search": "Search...",
|
|
16
|
+
"typesToInclude": "Types to include",
|
|
17
|
+
"typesToExclude": "Types to exclude",
|
|
18
|
+
"searchAModule": "Search a module ",
|
|
19
|
+
"addProperties": "Add properties"
|
|
20
|
+
},
|
|
21
|
+
"accessibleName": "Search in Knowledge Base",
|
|
22
|
+
"settingsButtonAriaLabel": "Toggle search settings",
|
|
23
|
+
"tooltips": {
|
|
24
|
+
"searchInAllSiblings": "Search in all siblings"
|
|
25
|
+
},
|
|
26
|
+
"emptyState": {
|
|
27
|
+
"title": "No results found",
|
|
28
|
+
"description": "Try adjusting your filters or checking your spelling to find what you’re looking for"
|
|
29
|
+
},
|
|
30
|
+
"noKbOpenState": {
|
|
31
|
+
"title": "No Knowledge Base open",
|
|
32
|
+
"description": "Open a Knowledge Base to start searching"
|
|
33
|
+
},
|
|
34
|
+
"loader": {
|
|
35
|
+
"title": "Loading..."
|
|
36
|
+
}
|
|
37
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
{
|
|
2
|
+
"labels": {
|
|
3
|
+
"includeTypes": "Include types",
|
|
4
|
+
"excludeTypes": "Exclude types",
|
|
5
|
+
"module": "Module",
|
|
6
|
+
"properties": "Properties",
|
|
7
|
+
"results": "Results"
|
|
8
|
+
},
|
|
9
|
+
"buttons": {
|
|
10
|
+
"cancel": "Cancel",
|
|
11
|
+
"confirm": "Confirm"
|
|
12
|
+
},
|
|
13
|
+
"footer": {},
|
|
14
|
+
"placeholders": {
|
|
15
|
+
"search": "Search...",
|
|
16
|
+
"typesToInclude": "Types to include",
|
|
17
|
+
"typesToExclude": "Types to exclude",
|
|
18
|
+
"searchAModule": "Search a module ",
|
|
19
|
+
"addProperties": "Add properties"
|
|
20
|
+
},
|
|
21
|
+
"accessibleName": "Search in Knowledge Base",
|
|
22
|
+
"settingsButtonAriaLabel": "Toggle search settings",
|
|
23
|
+
"tooltips": {
|
|
24
|
+
"searchInAllSiblings": "Search in all siblings"
|
|
25
|
+
},
|
|
26
|
+
"emptyState": {
|
|
27
|
+
"title": "No results found",
|
|
28
|
+
"description": "Try adjusting your filters or checking your spelling to find what you’re looking for"
|
|
29
|
+
},
|
|
30
|
+
"noKbOpenState": {
|
|
31
|
+
"title": "No Knowledge Base open",
|
|
32
|
+
"description": "Open a Knowledge Base to start searching"
|
|
33
|
+
},
|
|
34
|
+
"loader": {
|
|
35
|
+
"title": "Loading..."
|
|
36
|
+
}
|
|
37
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
:host {
|
|
2
|
+
display: grid;
|
|
3
|
+
block-size: 100%;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
.search {
|
|
7
|
+
display: grid;
|
|
8
|
+
grid-template-rows: max-content 1fr;
|
|
9
|
+
gap: var(--spacing-gap-xl);
|
|
10
|
+
}
|
|
11
|
+
.search__header {
|
|
12
|
+
display: grid;
|
|
13
|
+
grid-template-columns: 1fr;
|
|
14
|
+
}
|
|
15
|
+
.search__results {
|
|
16
|
+
position: relative;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
ch-tree-view-render::part(root-item item__header) {
|
|
20
|
+
padding-inline-start: 0;
|
|
21
|
+
font-weight: var(--font-style-semi-bold);
|
|
22
|
+
font-size: var(--font-size-body-s);
|
|
23
|
+
line-height: var(--line-height-relaxed);
|
|
24
|
+
font-family: var(--font-family-body);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
ch-tree-view-render::part(search-item item__header) {
|
|
28
|
+
padding-inline-start: 0;
|
|
29
|
+
font-weight: var(--font-style-regular);
|
|
30
|
+
font-size: var(--font-size-body-s);
|
|
31
|
+
line-height: var(--line-height-relaxed);
|
|
32
|
+
font-family: var(--font-family-body);
|
|
33
|
+
color: var(--color-text-neutral-neutral) !important;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
.input--loading::part(start-img) {
|
|
37
|
+
animation: spin 1s linear infinite;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
@keyframes spin {
|
|
41
|
+
100% {
|
|
42
|
+
transform: rotate(360deg);
|
|
43
|
+
}
|
|
44
|
+
}
|