@genexus/genexus-ide-ui 1.1.55 → 1.1.57
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/assets-manager-089e91b1.js +7 -0
- package/dist/cjs/assets-manager-089e91b1.js.map +1 -0
- package/dist/cjs/genexus-ide-ui.cjs.js +1 -1
- package/dist/cjs/gx-ide-bpm-app-declaration.cjs.entry.js +8 -4
- package/dist/cjs/gx-ide-bpm-app-declaration.cjs.entry.js.map +1 -1
- package/dist/cjs/gx-ide-bpm-task-documents.cjs.entry.js +8 -4
- package/dist/cjs/gx-ide-bpm-task-documents.cjs.entry.js.map +1 -1
- package/dist/cjs/gx-ide-chat-container_2.cjs.entry.js +12 -16
- package/dist/cjs/gx-ide-chat-container_2.cjs.entry.js.map +1 -1
- package/dist/cjs/gx-ide-create-kb-from-server.cjs.entry.js +8 -4
- package/dist/cjs/gx-ide-create-kb-from-server.cjs.entry.js.map +1 -1
- package/dist/cjs/gx-ide-current-user-info.cjs.entry.js +6 -2
- package/dist/cjs/gx-ide-current-user-info.cjs.entry.js.map +1 -1
- package/dist/cjs/gx-ide-data-selector.cjs.entry.js +6 -2
- package/dist/cjs/gx-ide-data-selector.cjs.entry.js.map +1 -1
- package/dist/cjs/gx-ide-data-type-selector.cjs.entry.js +6 -2
- package/dist/cjs/gx-ide-data-type-selector.cjs.entry.js.map +1 -1
- package/dist/cjs/gx-ide-design-import.cjs.entry.js +11 -7
- package/dist/cjs/gx-ide-design-import.cjs.entry.js.map +1 -1
- package/dist/cjs/gx-ide-details-acknowledgements.cjs.entry.js +6 -2
- package/dist/cjs/gx-ide-details-acknowledgements.cjs.entry.js.map +1 -1
- package/dist/cjs/gx-ide-entity-selector.cjs.entry.js +7 -3
- package/dist/cjs/gx-ide-entity-selector.cjs.entry.js.map +1 -1
- package/dist/cjs/gx-ide-file-item.cjs.entry.js +9 -5
- package/dist/cjs/gx-ide-file-item.cjs.entry.js.map +1 -1
- package/dist/cjs/gx-ide-file-uploader.cjs.entry.js +6 -2
- package/dist/cjs/gx-ide-file-uploader.cjs.entry.js.map +1 -1
- package/dist/cjs/gx-ide-json-import.cjs.entry.js +7 -3
- package/dist/cjs/gx-ide-json-import.cjs.entry.js.map +1 -1
- package/dist/cjs/gx-ide-kb-manager-export.cjs.entry.js +10 -6
- package/dist/cjs/gx-ide-kb-manager-export.cjs.entry.js.map +1 -1
- package/dist/cjs/gx-ide-kb-manager-import.cjs.entry.js +9 -5
- package/dist/cjs/gx-ide-kb-manager-import.cjs.entry.js.map +1 -1
- package/dist/cjs/gx-ide-manage-module-references.cjs.entry.js +7 -3
- package/dist/cjs/gx-ide-manage-module-references.cjs.entry.js.map +1 -1
- package/dist/cjs/gx-ide-new-kb.cjs.entry.js +6 -2
- package/dist/cjs/gx-ide-new-kb.cjs.entry.js.map +1 -1
- package/dist/cjs/gx-ide-new-version.cjs.entry.js +15 -3
- package/dist/cjs/gx-ide-new-version.cjs.entry.js.map +1 -1
- package/dist/cjs/gx-ide-object-selector.cjs.entry.js +7 -3
- package/dist/cjs/gx-ide-object-selector.cjs.entry.js.map +1 -1
- package/dist/cjs/gx-ide-open-api-import.cjs.entry.js +7 -3
- package/dist/cjs/gx-ide-open-api-import.cjs.entry.js.map +1 -1
- package/dist/cjs/gx-ide-plugin-details.cjs.entry.js +8 -4
- package/dist/cjs/gx-ide-plugin-details.cjs.entry.js.map +1 -1
- package/dist/cjs/gx-ide-plugin-explorer.cjs.entry.js +6 -2
- package/dist/cjs/gx-ide-plugin-explorer.cjs.entry.js.map +1 -1
- package/dist/cjs/gx-ide-references.cjs.entry.js +7 -3
- package/dist/cjs/gx-ide-references.cjs.entry.js.map +1 -1
- package/dist/cjs/gx-ide-sc-chat-container.cjs.entry.js +263 -20
- package/dist/cjs/gx-ide-sc-chat-container.cjs.entry.js.map +1 -1
- package/dist/cjs/gx-ide-select-kb-items.cjs.entry.js +7 -3
- package/dist/cjs/gx-ide-select-kb-items.cjs.entry.js.map +1 -1
- package/dist/cjs/gx-ide-server-selector.cjs.entry.js +9 -5
- package/dist/cjs/gx-ide-server-selector.cjs.entry.js.map +1 -1
- package/dist/cjs/gx-ide-share-kb.cjs.entry.js +6 -2
- package/dist/cjs/gx-ide-share-kb.cjs.entry.js.map +1 -1
- package/dist/cjs/gx-ide-splash.cjs.entry.js +6 -2
- package/dist/cjs/gx-ide-splash.cjs.entry.js.map +1 -1
- package/dist/cjs/gx-ide-start-page.cjs.entry.js +9 -5
- package/dist/cjs/gx-ide-start-page.cjs.entry.js.map +1 -1
- package/dist/cjs/gx-ide-starting-template.cjs.entry.js +6 -2
- package/dist/cjs/gx-ide-starting-template.cjs.entry.js.map +1 -1
- package/dist/cjs/gx-ide-team-dev-bring-changes.cjs.entry.js +14 -10
- package/dist/cjs/gx-ide-team-dev-bring-changes.cjs.entry.js.map +1 -1
- package/dist/cjs/gx-ide-team-dev-commit.cjs.entry.js +7 -3
- package/dist/cjs/gx-ide-team-dev-commit.cjs.entry.js.map +1 -1
- package/dist/cjs/gx-ide-team-dev-history.cjs.entry.js +10 -6
- package/dist/cjs/gx-ide-team-dev-history.cjs.entry.js.map +1 -1
- package/dist/cjs/gx-ide-team-dev-update-partial-selection.cjs.entry.js +6 -2
- package/dist/cjs/gx-ide-team-dev-update-partial-selection.cjs.entry.js.map +1 -1
- package/dist/cjs/gx-ide-team-dev-update.cjs.entry.js +17 -13
- package/dist/cjs/gx-ide-team-dev-update.cjs.entry.js.map +1 -1
- package/dist/cjs/gx-ide-welcome-page.cjs.entry.js +6 -2
- package/dist/cjs/gx-ide-welcome-page.cjs.entry.js.map +1 -1
- package/dist/cjs/gx-ide-ww-attributes.cjs.entry.js +6 -2
- package/dist/cjs/gx-ide-ww-attributes.cjs.entry.js.map +1 -1
- package/dist/cjs/gx-ide-ww-files.cjs.entry.js +8 -4
- package/dist/cjs/gx-ide-ww-files.cjs.entry.js.map +1 -1
- package/dist/cjs/index.cjs.js +0 -3
- package/dist/cjs/index.cjs.js.map +1 -1
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/mer-animated-dots-001c7465.js +79 -0
- package/dist/cjs/mer-animated-dots-001c7465.js.map +1 -0
- package/dist/cjs/{tabular-grid-render-b1767da2.js → tabular-grid-render-f97a5ab3.js} +18 -14
- package/dist/cjs/tabular-grid-render-f97a5ab3.js.map +1 -0
- package/dist/cjs/{utilities-0e316b39.js → utilities-0815a260.js} +10 -6
- package/dist/cjs/utilities-0815a260.js.map +1 -0
- package/dist/collection/components/chat/chat-container/chat-container.js +2 -10
- package/dist/collection/components/chat/chat-container/chat-container.js.map +1 -1
- package/dist/collection/components/new-version/gx-ide-assets/new-version/shortcuts.json +15 -0
- package/dist/collection/components/new-version/new-version.js +17 -4
- package/dist/collection/components/new-version/new-version.js.map +1 -1
- package/dist/collection/index.js +0 -2
- package/dist/collection/index.js.map +1 -1
- package/dist/collection/showcase/chat-container/callbacks.js +9 -9
- package/dist/collection/showcase/chat-container/callbacks.js.map +1 -1
- package/dist/collection/showcase/chat-container/chat.showcase.js +4 -4
- package/dist/collection/showcase/chat-container/chat.showcase.js.map +1 -1
- package/dist/collection/showcase/chat-container/models.js +18 -18
- package/dist/collection/showcase/chat-container/models.js.map +1 -1
- package/dist/components/chat-container.js +6 -11
- package/dist/components/chat-container.js.map +1 -1
- package/dist/components/chat-welcome.js +4 -1
- package/dist/components/chat-welcome.js.map +1 -1
- package/dist/components/entity-selector.js +4 -1
- package/dist/components/entity-selector.js.map +1 -1
- package/dist/components/file-item.js +4 -1
- package/dist/components/file-item.js.map +1 -1
- package/dist/components/gx-ide-bpm-app-declaration.js +4 -1
- package/dist/components/gx-ide-bpm-app-declaration.js.map +1 -1
- package/dist/components/gx-ide-bpm-task-documents.js +4 -1
- package/dist/components/gx-ide-bpm-task-documents.js.map +1 -1
- package/dist/components/gx-ide-create-kb-from-server.js +4 -1
- package/dist/components/gx-ide-create-kb-from-server.js.map +1 -1
- package/dist/components/gx-ide-current-user-info.js +4 -1
- package/dist/components/gx-ide-current-user-info.js.map +1 -1
- package/dist/components/gx-ide-data-selector.js +4 -1
- package/dist/components/gx-ide-data-selector.js.map +1 -1
- package/dist/components/gx-ide-data-type-selector.js +4 -1
- package/dist/components/gx-ide-data-type-selector.js.map +1 -1
- package/dist/components/gx-ide-design-import.js +4 -1
- package/dist/components/gx-ide-design-import.js.map +1 -1
- package/dist/components/gx-ide-details-acknowledgements.js +4 -1
- package/dist/components/gx-ide-details-acknowledgements.js.map +1 -1
- package/dist/components/gx-ide-file-uploader.js +4 -1
- package/dist/components/gx-ide-file-uploader.js.map +1 -1
- package/dist/components/gx-ide-json-import.js +4 -1
- package/dist/components/gx-ide-json-import.js.map +1 -1
- package/dist/components/gx-ide-kb-manager-export.js +4 -1
- package/dist/components/gx-ide-kb-manager-export.js.map +1 -1
- package/dist/components/gx-ide-kb-manager-import.js +4 -1
- package/dist/components/gx-ide-kb-manager-import.js.map +1 -1
- package/dist/components/gx-ide-manage-module-references.js +4 -1
- package/dist/components/gx-ide-manage-module-references.js.map +1 -1
- package/dist/components/gx-ide-new-kb.js +4 -1
- package/dist/components/gx-ide-new-kb.js.map +1 -1
- package/dist/components/gx-ide-new-version.js +17 -4
- package/dist/components/gx-ide-new-version.js.map +1 -1
- package/dist/components/gx-ide-object-selector.js +4 -1
- package/dist/components/gx-ide-object-selector.js.map +1 -1
- package/dist/components/gx-ide-open-api-import.js +4 -1
- package/dist/components/gx-ide-open-api-import.js.map +1 -1
- package/dist/components/gx-ide-plugin-details.js +4 -1
- package/dist/components/gx-ide-plugin-details.js.map +1 -1
- package/dist/components/gx-ide-plugin-explorer.js +4 -1
- package/dist/components/gx-ide-plugin-explorer.js.map +1 -1
- package/dist/components/gx-ide-references.js +4 -1
- package/dist/components/gx-ide-references.js.map +1 -1
- package/dist/components/gx-ide-sc-chat-container.js +263 -20
- package/dist/components/gx-ide-sc-chat-container.js.map +1 -1
- package/dist/components/gx-ide-server-selector.js +4 -1
- package/dist/components/gx-ide-server-selector.js.map +1 -1
- package/dist/components/gx-ide-share-kb.js +4 -1
- package/dist/components/gx-ide-share-kb.js.map +1 -1
- package/dist/components/gx-ide-splash.js +4 -1
- package/dist/components/gx-ide-splash.js.map +1 -1
- package/dist/components/gx-ide-start-page.js +4 -1
- package/dist/components/gx-ide-start-page.js.map +1 -1
- package/dist/components/gx-ide-starting-template.js +4 -1
- package/dist/components/gx-ide-starting-template.js.map +1 -1
- package/dist/components/gx-ide-team-dev-bring-changes.js +4 -1
- package/dist/components/gx-ide-team-dev-bring-changes.js.map +1 -1
- package/dist/components/gx-ide-team-dev-history.js +4 -1
- package/dist/components/gx-ide-team-dev-history.js.map +1 -1
- package/dist/components/gx-ide-team-dev-update-partial-selection.js +4 -1
- package/dist/components/gx-ide-team-dev-update-partial-selection.js.map +1 -1
- package/dist/components/gx-ide-team-dev-update.js +4 -1
- package/dist/components/gx-ide-team-dev-update.js.map +1 -1
- package/dist/components/gx-ide-welcome-page.js +4 -1
- package/dist/components/gx-ide-welcome-page.js.map +1 -1
- package/dist/components/gx-ide-ww-attributes.js +4 -1
- package/dist/components/gx-ide-ww-attributes.js.map +1 -1
- package/dist/components/gx-ide-ww-files.js +4 -1
- package/dist/components/gx-ide-ww-files.js.map +1 -1
- package/dist/components/index.js +0 -1
- package/dist/components/index.js.map +1 -1
- package/dist/components/mer-animated-dots.js +81 -0
- package/dist/components/mer-animated-dots.js.map +1 -0
- package/dist/components/select-kb-items.js +4 -1
- package/dist/components/select-kb-items.js.map +1 -1
- package/dist/components/tabular-grid-render.js +4 -1
- package/dist/components/tabular-grid-render.js.map +1 -1
- package/dist/components/utilities.js +4 -1
- package/dist/components/utilities.js.map +1 -1
- package/dist/esm/assets-manager-7d6fc08f.js +5 -0
- package/dist/esm/assets-manager-7d6fc08f.js.map +1 -0
- package/dist/esm/genexus-ide-ui.js +1 -1
- package/dist/esm/gx-ide-bpm-app-declaration.entry.js +5 -1
- package/dist/esm/gx-ide-bpm-app-declaration.entry.js.map +1 -1
- package/dist/esm/gx-ide-bpm-task-documents.entry.js +5 -1
- package/dist/esm/gx-ide-bpm-task-documents.entry.js.map +1 -1
- package/dist/esm/gx-ide-chat-container_2.entry.js +7 -11
- package/dist/esm/gx-ide-chat-container_2.entry.js.map +1 -1
- package/dist/esm/gx-ide-create-kb-from-server.entry.js +5 -1
- package/dist/esm/gx-ide-create-kb-from-server.entry.js.map +1 -1
- package/dist/esm/gx-ide-current-user-info.entry.js +5 -1
- package/dist/esm/gx-ide-current-user-info.entry.js.map +1 -1
- package/dist/esm/gx-ide-data-selector.entry.js +5 -1
- package/dist/esm/gx-ide-data-selector.entry.js.map +1 -1
- package/dist/esm/gx-ide-data-type-selector.entry.js +5 -1
- package/dist/esm/gx-ide-data-type-selector.entry.js.map +1 -1
- package/dist/esm/gx-ide-design-import.entry.js +5 -1
- package/dist/esm/gx-ide-design-import.entry.js.map +1 -1
- package/dist/esm/gx-ide-details-acknowledgements.entry.js +5 -1
- package/dist/esm/gx-ide-details-acknowledgements.entry.js.map +1 -1
- package/dist/esm/gx-ide-entity-selector.entry.js +5 -1
- package/dist/esm/gx-ide-entity-selector.entry.js.map +1 -1
- package/dist/esm/gx-ide-file-item.entry.js +5 -1
- package/dist/esm/gx-ide-file-item.entry.js.map +1 -1
- package/dist/esm/gx-ide-file-uploader.entry.js +5 -1
- package/dist/esm/gx-ide-file-uploader.entry.js.map +1 -1
- package/dist/esm/gx-ide-json-import.entry.js +5 -1
- package/dist/esm/gx-ide-json-import.entry.js.map +1 -1
- package/dist/esm/gx-ide-kb-manager-export.entry.js +5 -1
- package/dist/esm/gx-ide-kb-manager-export.entry.js.map +1 -1
- package/dist/esm/gx-ide-kb-manager-import.entry.js +5 -1
- package/dist/esm/gx-ide-kb-manager-import.entry.js.map +1 -1
- package/dist/esm/gx-ide-manage-module-references.entry.js +5 -1
- package/dist/esm/gx-ide-manage-module-references.entry.js.map +1 -1
- package/dist/esm/gx-ide-new-kb.entry.js +5 -1
- package/dist/esm/gx-ide-new-kb.entry.js.map +1 -1
- package/dist/esm/gx-ide-new-version.entry.js +16 -4
- package/dist/esm/gx-ide-new-version.entry.js.map +1 -1
- package/dist/esm/gx-ide-object-selector.entry.js +5 -1
- package/dist/esm/gx-ide-object-selector.entry.js.map +1 -1
- package/dist/esm/gx-ide-open-api-import.entry.js +5 -1
- package/dist/esm/gx-ide-open-api-import.entry.js.map +1 -1
- package/dist/esm/gx-ide-plugin-details.entry.js +5 -1
- package/dist/esm/gx-ide-plugin-details.entry.js.map +1 -1
- package/dist/esm/gx-ide-plugin-explorer.entry.js +5 -1
- package/dist/esm/gx-ide-plugin-explorer.entry.js.map +1 -1
- package/dist/esm/gx-ide-references.entry.js +5 -1
- package/dist/esm/gx-ide-references.entry.js.map +1 -1
- package/dist/esm/gx-ide-sc-chat-container.entry.js +263 -20
- package/dist/esm/gx-ide-sc-chat-container.entry.js.map +1 -1
- package/dist/esm/gx-ide-select-kb-items.entry.js +5 -1
- package/dist/esm/gx-ide-select-kb-items.entry.js.map +1 -1
- package/dist/esm/gx-ide-server-selector.entry.js +5 -1
- package/dist/esm/gx-ide-server-selector.entry.js.map +1 -1
- package/dist/esm/gx-ide-share-kb.entry.js +5 -1
- package/dist/esm/gx-ide-share-kb.entry.js.map +1 -1
- package/dist/esm/gx-ide-splash.entry.js +5 -1
- package/dist/esm/gx-ide-splash.entry.js.map +1 -1
- package/dist/esm/gx-ide-start-page.entry.js +5 -1
- package/dist/esm/gx-ide-start-page.entry.js.map +1 -1
- package/dist/esm/gx-ide-starting-template.entry.js +5 -1
- package/dist/esm/gx-ide-starting-template.entry.js.map +1 -1
- package/dist/esm/gx-ide-team-dev-bring-changes.entry.js +7 -3
- package/dist/esm/gx-ide-team-dev-bring-changes.entry.js.map +1 -1
- package/dist/esm/gx-ide-team-dev-commit.entry.js +7 -3
- package/dist/esm/gx-ide-team-dev-commit.entry.js.map +1 -1
- package/dist/esm/gx-ide-team-dev-history.entry.js +6 -2
- package/dist/esm/gx-ide-team-dev-history.entry.js.map +1 -1
- package/dist/esm/gx-ide-team-dev-update-partial-selection.entry.js +5 -1
- package/dist/esm/gx-ide-team-dev-update-partial-selection.entry.js.map +1 -1
- package/dist/esm/gx-ide-team-dev-update.entry.js +7 -3
- package/dist/esm/gx-ide-team-dev-update.entry.js.map +1 -1
- package/dist/esm/gx-ide-welcome-page.entry.js +5 -1
- package/dist/esm/gx-ide-welcome-page.entry.js.map +1 -1
- package/dist/esm/gx-ide-ww-attributes.entry.js +5 -1
- package/dist/esm/gx-ide-ww-attributes.entry.js.map +1 -1
- package/dist/esm/gx-ide-ww-files.entry.js +5 -1
- package/dist/esm/gx-ide-ww-files.entry.js.map +1 -1
- package/dist/esm/index.js +0 -2
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/loader.js +1 -1
- package/dist/esm/mer-animated-dots-75d88f7e.js +77 -0
- package/dist/esm/mer-animated-dots-75d88f7e.js.map +1 -0
- package/dist/esm/{tabular-grid-render-96d67a8c.js → tabular-grid-render-2fca02f4.js} +7 -3
- package/dist/esm/tabular-grid-render-2fca02f4.js.map +1 -0
- package/dist/esm/{utilities-6624d90e.js → utilities-0cdc28eb.js} +6 -2
- package/dist/esm/utilities-0cdc28eb.js.map +1 -0
- 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/new-version/shortcuts.json +15 -0
- package/dist/genexus-ide-ui/index.esm.js +0 -2
- package/dist/genexus-ide-ui/index.esm.js.map +1 -1
- package/dist/genexus-ide-ui/{p-2ce60f4c.entry.js → p-02883452.entry.js} +28 -20
- package/dist/genexus-ide-ui/{p-2ce60f4c.entry.js.map → p-02883452.entry.js.map} +1 -1
- package/dist/genexus-ide-ui/{p-c5eac770.entry.js → p-0548097b.entry.js} +10 -2
- package/dist/genexus-ide-ui/{p-c5eac770.entry.js.map → p-0548097b.entry.js.map} +1 -1
- package/dist/genexus-ide-ui/{p-64dbc4c0.entry.js → p-082780cc.entry.js} +10 -2
- package/dist/genexus-ide-ui/{p-64dbc4c0.entry.js.map → p-082780cc.entry.js.map} +1 -1
- package/dist/genexus-ide-ui/{p-9ac4aaa0.entry.js → p-1baf026c.entry.js} +16 -8
- package/dist/genexus-ide-ui/{p-9ac4aaa0.entry.js.map → p-1baf026c.entry.js.map} +1 -1
- package/dist/genexus-ide-ui/{p-098a7288.entry.js → p-1d647672.entry.js} +19 -11
- package/dist/genexus-ide-ui/{p-098a7288.entry.js.map → p-1d647672.entry.js.map} +1 -1
- package/dist/genexus-ide-ui/{p-13630aa2.entry.js → p-1e1d2672.entry.js} +51 -43
- package/dist/genexus-ide-ui/{p-13630aa2.entry.js.map → p-1e1d2672.entry.js.map} +1 -1
- package/dist/genexus-ide-ui/{p-b6a75c44.entry.js → p-207a698a.entry.js} +57 -49
- package/dist/genexus-ide-ui/{p-b6a75c44.entry.js.map → p-207a698a.entry.js.map} +1 -1
- package/dist/genexus-ide-ui/{p-d18c51fe.entry.js → p-2726ab59.entry.js} +18 -10
- package/dist/genexus-ide-ui/{p-d18c51fe.entry.js.map → p-2726ab59.entry.js.map} +1 -1
- package/dist/genexus-ide-ui/{p-0c5b7e75.entry.js → p-27633aae.entry.js} +10 -2
- package/dist/genexus-ide-ui/{p-0c5b7e75.entry.js.map → p-27633aae.entry.js.map} +1 -1
- package/dist/genexus-ide-ui/{p-2fe7ffc8.entry.js → p-28c11aff.entry.js} +32 -24
- package/dist/genexus-ide-ui/{p-2fe7ffc8.entry.js.map → p-28c11aff.entry.js.map} +1 -1
- package/dist/genexus-ide-ui/{p-3b955964.entry.js → p-2a51ea80.entry.js} +10 -2
- package/dist/genexus-ide-ui/{p-3b955964.entry.js.map → p-2a51ea80.entry.js.map} +1 -1
- package/dist/genexus-ide-ui/{p-1056dfe7.entry.js → p-336bb2ce.entry.js} +28 -20
- package/dist/genexus-ide-ui/{p-1056dfe7.entry.js.map → p-336bb2ce.entry.js.map} +1 -1
- package/dist/genexus-ide-ui/{p-ac026635.entry.js → p-364e8ecb.entry.js} +16 -8
- package/dist/genexus-ide-ui/{p-ac026635.entry.js.map → p-364e8ecb.entry.js.map} +1 -1
- package/dist/genexus-ide-ui/p-3c14bdfc.entry.js +234 -0
- package/dist/genexus-ide-ui/p-3c14bdfc.entry.js.map +1 -0
- package/dist/genexus-ide-ui/{p-1d044bf5.entry.js → p-4548ae72.entry.js} +17 -9
- package/dist/genexus-ide-ui/{p-1d044bf5.entry.js.map → p-4548ae72.entry.js.map} +1 -1
- package/dist/genexus-ide-ui/{p-80e49324.entry.js → p-46bb921b.entry.js} +36 -28
- package/dist/genexus-ide-ui/{p-80e49324.entry.js.map → p-46bb921b.entry.js.map} +1 -1
- package/dist/genexus-ide-ui/{p-11a60dbe.entry.js → p-506760d7.entry.js} +10 -2
- package/dist/genexus-ide-ui/{p-11a60dbe.entry.js.map → p-506760d7.entry.js.map} +1 -1
- package/dist/genexus-ide-ui/p-6e29711e.entry.js +608 -0
- package/dist/genexus-ide-ui/p-6e29711e.entry.js.map +1 -0
- package/dist/genexus-ide-ui/{p-7b986243.entry.js → p-71d4d3dd.entry.js} +32 -24
- package/dist/genexus-ide-ui/{p-7b986243.entry.js.map → p-71d4d3dd.entry.js.map} +1 -1
- package/dist/genexus-ide-ui/{p-891faf90.entry.js → p-77c315d9.entry.js} +28 -20
- package/dist/genexus-ide-ui/{p-891faf90.entry.js.map → p-77c315d9.entry.js.map} +1 -1
- package/dist/genexus-ide-ui/{p-18bbaa49.entry.js → p-7c95f511.entry.js} +16 -8
- package/dist/genexus-ide-ui/{p-18bbaa49.entry.js.map → p-7c95f511.entry.js.map} +1 -1
- package/dist/genexus-ide-ui/{p-eedb407c.entry.js → p-7e3cccf7.entry.js} +10 -2
- package/dist/genexus-ide-ui/{p-eedb407c.entry.js.map → p-7e3cccf7.entry.js.map} +1 -1
- package/dist/genexus-ide-ui/{p-410a35da.entry.js → p-8925fc99.entry.js} +40 -32
- package/dist/genexus-ide-ui/{p-410a35da.entry.js.map → p-8925fc99.entry.js.map} +1 -1
- package/dist/genexus-ide-ui/{p-072419f9.entry.js → p-94f74c12.entry.js} +18 -10
- package/dist/genexus-ide-ui/{p-072419f9.entry.js.map → p-94f74c12.entry.js.map} +1 -1
- package/dist/genexus-ide-ui/{p-d24c1115.entry.js → p-97f6438c.entry.js} +67 -59
- package/dist/genexus-ide-ui/{p-d24c1115.entry.js.map → p-97f6438c.entry.js.map} +1 -1
- package/dist/genexus-ide-ui/{p-9270c80f.entry.js → p-981873da.entry.js} +114 -118
- package/dist/genexus-ide-ui/p-981873da.entry.js.map +1 -0
- package/dist/genexus-ide-ui/{p-17b54532.entry.js → p-99b1dfd7.entry.js} +39 -31
- package/dist/genexus-ide-ui/{p-17b54532.entry.js.map → p-99b1dfd7.entry.js.map} +1 -1
- package/dist/genexus-ide-ui/{p-e1d0adf6.entry.js → p-9f7c347c.entry.js} +24 -16
- package/dist/genexus-ide-ui/{p-e1d0adf6.entry.js.map → p-9f7c347c.entry.js.map} +1 -1
- package/dist/genexus-ide-ui/{p-eacc81c8.entry.js → p-a28c2a64.entry.js} +122 -114
- package/dist/genexus-ide-ui/{p-eacc81c8.entry.js.map → p-a28c2a64.entry.js.map} +1 -1
- package/dist/genexus-ide-ui/{p-cccd6565.entry.js → p-a73db549.entry.js} +10 -2
- package/dist/genexus-ide-ui/{p-cccd6565.entry.js.map → p-a73db549.entry.js.map} +1 -1
- package/dist/genexus-ide-ui/{p-547fbde8.entry.js → p-be1ceb01.entry.js} +28 -20
- package/dist/genexus-ide-ui/{p-547fbde8.entry.js.map → p-be1ceb01.entry.js.map} +1 -1
- package/dist/genexus-ide-ui/{p-7adb9d1f.entry.js → p-c133095b.entry.js} +78 -70
- package/dist/genexus-ide-ui/{p-7adb9d1f.entry.js.map → p-c133095b.entry.js.map} +1 -1
- package/dist/genexus-ide-ui/{p-a58048e9.entry.js → p-c1c3996c.entry.js} +12 -4
- package/dist/genexus-ide-ui/{p-a58048e9.entry.js.map → p-c1c3996c.entry.js.map} +1 -1
- package/dist/genexus-ide-ui/{p-7551c2e9.entry.js → p-c426a3e7.entry.js} +22 -14
- package/dist/genexus-ide-ui/{p-7551c2e9.entry.js.map → p-c426a3e7.entry.js.map} +1 -1
- package/dist/genexus-ide-ui/{p-4f88fecd.entry.js → p-d12739cf.entry.js} +17 -9
- package/dist/genexus-ide-ui/{p-4f88fecd.entry.js.map → p-d12739cf.entry.js.map} +1 -1
- package/dist/genexus-ide-ui/{p-c8270f7d.js → p-d3ee56a4.js} +45 -37
- package/dist/genexus-ide-ui/{p-c8270f7d.js.map → p-d3ee56a4.js.map} +1 -1
- package/dist/genexus-ide-ui/p-d42e842b.js +7 -0
- package/dist/genexus-ide-ui/p-d42e842b.js.map +1 -0
- package/dist/genexus-ide-ui/{p-401bfc97.js → p-d4ecd3bb.js} +9366 -7152
- package/dist/genexus-ide-ui/p-d4ecd3bb.js.map +1 -0
- package/dist/genexus-ide-ui/{p-48e87e4f.entry.js → p-de6e9132.entry.js} +71 -63
- package/dist/genexus-ide-ui/{p-48e87e4f.entry.js.map → p-de6e9132.entry.js.map} +1 -1
- package/dist/genexus-ide-ui/{p-05fa08d7.entry.js → p-e4e3a7af.entry.js} +19 -11
- package/dist/genexus-ide-ui/{p-05fa08d7.entry.js.map → p-e4e3a7af.entry.js.map} +1 -1
- package/dist/genexus-ide-ui/{p-a24571ca.js → p-ea4b35b6.js} +19 -11
- package/dist/genexus-ide-ui/{p-a24571ca.js.map → p-ea4b35b6.js.map} +1 -1
- package/dist/genexus-ide-ui/{p-bd0ffc08.entry.js → p-f47b08c5.entry.js} +44 -36
- package/dist/genexus-ide-ui/{p-bd0ffc08.entry.js.map → p-f47b08c5.entry.js.map} +1 -1
- package/dist/types/components/new-version/new-version.d.ts +4 -0
- package/dist/types/index.d.ts +0 -2
- package/package.json +9 -8
- package/dist/cjs/MERCURY_ASSETS-f14e91ff.js +0 -9
- package/dist/cjs/MERCURY_ASSETS-f14e91ff.js.map +0 -1
- package/dist/cjs/render-item.lit-3f18e009.js +0 -329
- package/dist/cjs/render-item.lit-3f18e009.js.map +0 -1
- package/dist/cjs/tabular-grid-render-b1767da2.js.map +0 -1
- package/dist/cjs/utilities-0e316b39.js.map +0 -1
- package/dist/collection/components/chat/chat-container/gx-ide-assets/chat-container/chat-lit.css +0 -376
- package/dist/collection/components/chat/lit-custom-render/actions.lit.js +0 -27
- package/dist/collection/components/chat/lit-custom-render/actions.lit.js.map +0 -1
- package/dist/collection/components/chat/lit-custom-render/code-block.lit.js +0 -46
- package/dist/collection/components/chat/lit-custom-render/code-block.lit.js.map +0 -1
- package/dist/collection/components/chat/lit-custom-render/dots-animation.js +0 -61
- package/dist/collection/components/chat/lit-custom-render/dots-animation.js.map +0 -1
- package/dist/collection/components/chat/lit-custom-render/render-item.lit.js +0 -122
- package/dist/collection/components/chat/lit-custom-render/render-item.lit.js.map +0 -1
- package/dist/collection/components/chat/lit-custom-render/spinner-animation.js +0 -58
- package/dist/collection/components/chat/lit-custom-render/spinner-animation.js.map +0 -1
- package/dist/collection/components/chat/lit-custom-render/types.js +0 -2
- package/dist/collection/components/chat/lit-custom-render/types.js.map +0 -1
- package/dist/collection/components/chat/lit-custom-render/utils.js +0 -50
- package/dist/collection/components/chat/lit-custom-render/utils.js.map +0 -1
- package/dist/components/MERCURY_ASSETS.js +0 -7
- package/dist/components/MERCURY_ASSETS.js.map +0 -1
- package/dist/components/render-item.lit.js +0 -327
- package/dist/components/render-item.lit.js.map +0 -1
- package/dist/esm/MERCURY_ASSETS-ccf43ae3.js +0 -7
- package/dist/esm/MERCURY_ASSETS-ccf43ae3.js.map +0 -1
- package/dist/esm/render-item.lit-449f2946.js +0 -327
- package/dist/esm/render-item.lit-449f2946.js.map +0 -1
- package/dist/esm/tabular-grid-render-96d67a8c.js.map +0 -1
- package/dist/esm/utilities-6624d90e.js.map +0 -1
- package/dist/genexus-ide-ui/gx-ide-assets/chat-container/chat-lit.css +0 -376
- package/dist/genexus-ide-ui/p-401bfc97.js.map +0 -1
- package/dist/genexus-ide-ui/p-5f65a4bb.entry.js +0 -218
- package/dist/genexus-ide-ui/p-5f65a4bb.entry.js.map +0 -1
- package/dist/genexus-ide-ui/p-8d6f2b4f.entry.js +0 -359
- package/dist/genexus-ide-ui/p-8d6f2b4f.entry.js.map +0 -1
- package/dist/genexus-ide-ui/p-9270c80f.entry.js.map +0 -1
- package/dist/genexus-ide-ui/p-fd4f9904.js +0 -955
- package/dist/genexus-ide-ui/p-fd4f9904.js.map +0 -1
- package/dist/types/components/chat/lit-custom-render/actions.lit.d.ts +0 -2
- package/dist/types/components/chat/lit-custom-render/code-block.lit.d.ts +0 -2
- package/dist/types/components/chat/lit-custom-render/dots-animation.d.ts +0 -5
- package/dist/types/components/chat/lit-custom-render/render-item.lit.d.ts +0 -3
- package/dist/types/components/chat/lit-custom-render/spinner-animation.d.ts +0 -5
- package/dist/types/components/chat/lit-custom-render/types.d.ts +0 -4
- package/dist/types/components/chat/lit-custom-render/utils.d.ts +0 -23
|
@@ -1,6 +1,14 @@
|
|
|
1
1
|
import { r as e, c as i, h as t } from "./p-97107ecc.js";
|
|
2
2
|
|
|
3
|
-
import { g as r } from "./p-
|
|
3
|
+
import { g as r } from "./p-d42e842b.js";
|
|
4
|
+
|
|
5
|
+
import "./p-d4ecd3bb.js";
|
|
6
|
+
|
|
7
|
+
import "lit";
|
|
8
|
+
|
|
9
|
+
import "lit/directives/when.js";
|
|
10
|
+
|
|
11
|
+
import "lit/directives/if-defined.js";
|
|
4
12
|
|
|
5
13
|
const s = ":host{display:block;inline-size:100%}.file-item{display:grid;grid-template-columns:auto 1fr auto;grid-template-rows:auto;gap:var(--mer-spacing--sm);align-items:center;border:var(--mer-border__width--sm) solid var(--mer-border__default);border-radius:var(--mer-border__radius--sm)}.file-item__icon{display:flex;align-items:center}.file-item__name{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;inline-size:100%;font-weight:var(--mer-font__weight--regular)}.file-item__name ch-edit{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;inline-size:100%;font-weight:var(--mer-font__weight--regular)}.file-item__name .label{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;inline-size:100%;font-weight:var(--mer-font__weight--regular)}.file-item__actions{display:flex;gap:var(--mer-spacing--xs)}.file-item__actions button:active,.file-item__actions button:focus,.file-item__actions button:hover{background-color:var(--mer-surface__hover)}.file-item__actions button:active{background-color:var(--mer-surface__pressed)}.file-item__progress-container{grid-column:1/-1;display:flex;flex-direction:column;gap:var(--mer-spacing--2xs);inline-size:100%;border:var(--mer-border__width--md) dashed var(--mer-border-color__dim);border-radius:var(--mer-border__radius--md);padding:var(--mer-spacing--sm)}.file-item__progress-header{display:flex;justify-content:space-between;align-items:center;gap:var(--mer-spacing--sm)}.file-item__uploading-text{font-style:italic;color:var(--mer-text__complementary);overflow:hidden;white-space:nowrap;text-overflow:ellipsis;max-inline-size:calc(100% - var(--mer-spacing--2xl))}.file-item__progress-bar{inline-size:100%}.file-item__progress-bar progress{inline-size:100%;height:var(--mer-spacing--xs);border:none;border-radius:var(--mer-border__radius--sm);overflow:hidden}.file-item__progress-bar progress::-webkit-progress-bar{background-color:transparent}.file-item__progress-bar progress::-webkit-progress-value{background-color:var(--mer-accent__primary)}.file-item__progress-bar progress::-moz-progress-bar{background-color:var(--mer-accent__primary)}";
|
|
6
14
|
|
|
@@ -152,4 +160,4 @@ a = new WeakMap, n = new WeakMap, l = new WeakMap, c = new WeakMap, m = new Weak
|
|
|
152
160
|
g.style = s;
|
|
153
161
|
|
|
154
162
|
export { g as gx_ide_file_item };
|
|
155
|
-
//# sourceMappingURL=p-
|
|
163
|
+
//# sourceMappingURL=p-082780cc.entry.js.map
|
|
@@ -1 +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","h","class","model","src","value","autoFocus","onInput","__classPrivateFieldGet","onBlur","pending","type","onClick","progress","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:host {\n display: block;\n inline-size: 100%;\n}\n\n.file-item {\n display: grid;\n grid-template-columns: auto 1fr auto;\n grid-template-rows: auto;\n gap: var(--mer-spacing--sm);\n align-items: center;\n border: var(--mer-border__width--sm) solid var(--mer-border__default);\n border-radius: var(--mer-border__radius--sm);\n\n &__icon {\n display: flex;\n align-items: center;\n }\n\n &__name {\n @include ellipsis;\n inline-size: 100%;\n font-weight: var(--mer-font__weight--regular);\n\n ch-edit {\n @include ellipsis;\n inline-size: 100%;\n font-weight: var(--mer-font__weight--regular);\n }\n\n .label {\n @include ellipsis;\n inline-size: 100%;\n font-weight: var(--mer-font__weight--regular);\n }\n }\n\n &__actions {\n display: flex;\n gap: var(--mer-spacing--xs);\n\n button {\n &:active,\n &:focus,\n &:hover {\n background-color: var(--mer-surface__hover);\n }\n\n &:active {\n background-color: var(--mer-surface__pressed);\n }\n }\n }\n\n &__progress-container {\n grid-column: 1 / -1;\n display: flex;\n flex-direction: column;\n gap: var(--mer-spacing--2xs);\n inline-size: 100%;\n border: var(--mer-border__width--md) dashed var(--mer-border-color__dim);\n border-radius: var(--mer-border__radius--md);\n padding: var(--mer-spacing--sm);\n }\n\n &__progress-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: var(--mer-spacing--sm);\n }\n\n &__uploading-text {\n font-style: italic;\n color: var(--mer-text__complementary);\n @include ellipsis;\n max-inline-size: calc(100% - var(--mer-spacing--2xl));\n }\n\n &__progress-bar {\n inline-size: 100%;\n\n progress {\n inline-size: 100%;\n height: var(--mer-spacing--xs);\n border: none;\n border-radius: var(--mer-border__radius--sm);\n overflow: hidden;\n\n &::-webkit-progress-bar {\n background-color: transparent;\n }\n\n &::-webkit-progress-value {\n background-color: var(--mer-accent__primary);\n }\n\n &::-moz-progress-bar {\n background-color: var(--mer-accent__primary);\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 /** 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 return (\n <div class=\"file-item\">\n <ch-theme model={CSS_BUNDLES}></ch-theme>\n <div class=\"file-item__icon\">\n <ch-image src={FILE_ICON} class=\"icon-md\" />\n </div>\n\n <div class=\"file-item__name\">\n {this.isEditing ? (\n <ch-edit\n value={this.currentName}\n autoFocus={true}\n onInput={this.#handleNameChange}\n onBlur={this.#handleBlur}\n class=\"input\"\n />\n ) : (\n <label class=\"label\">{this.currentName}</label>\n )}\n </div>\n\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-md\" />\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-md\" />\n </button>\n )}\n </div>\n\n {this.file.pending && (\n <div class=\"file-item__progress-container\">\n <div class=\"file-item__progress-header\">\n <span class=\"file-item__uploading-text\">\n Uploading {this.currentName}...\n </span>\n <button\n class=\"button-tertiary button-icon-only\"\n type=\"button\"\n onClick={this.#handleCancelClick}\n >\n <ch-image src={CANCEL_ICON} class=\"icon-md\" />\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 />\n </div>\n </div>\n )}\n </div>\n );\n }\n}\n"],"mappings":";;;;AAAA,MAAMA,IAAc;;;;;;;;;;ACapB,MAAMC,IAAYC,EAAY;EAC5BC,UAAU;EACVC,MAAM;EACNC,WAAW;;;AAGb,MAAMC,IAAYJ,EAAY;EAC5BC,UAAU;EACVC,MAAM;EACNC,WAAW;;;AAGb,MAAME,IAAcL,EAAY;EAC9BC,UAAU;EACVC,MAAM;EACNC,WAAW;;;AAGb,MAAMG,IAAcN,EAAY;EAC9BC,UAAU;EACVC,MAAM;EACNC,WAAW;;;AAGb,MAAMI,IAA8B,EAClC,qBACA,qBACA,mBACA,mBACA,oBACA,iBACA,cACA,gBACA;;MAQWC,IAAQ;;;;;;IAsCnBC,EAAAC,IAAAC,OAAqBC;MACnB,MAAMC,IAAWD,EAA8BE;MAE/C,IAAID,KAAWA,MAAYF,KAAKI,aAAa;QAC3CJ,KAAKI,cAAcF;QACnBF,KAAKK,eAAeC,KAAK;UACvBC,IAAIP,KAAKQ,KAAKD;UACdhB,MAAMW;;;;IAKZO,EAAAV,IAAAC,OAAc;MACZA,KAAKU,YAAY;AAAK;oCAIxBC,EAAAZ,IAAAC,OAAgB;MACdA,KAAKY,WAAWN,KAAKN,KAAKQ,KAAKD;AAAG;0CAIpCM,EAAAd,IAAAC,OAAsBc;MACpBA,EAAEC;MACFf,KAAKgB,WAAWV,KAAKN,KAAKQ,KAAKD;AAAG;uCAIpCU,EAAAlB,IAAAC,OAAgB;MACd,IAAIA,KAAKkB,UAAU;QACjBlB,KAAKU,YAAY;;;;oBA/DgB;;;qBAiBP;;;sDAJ9B,gBAAAS,CAAiBC;IACfpB,KAAKI,cAAcgB,EAAQ7B;;EAe7B,iBAAA8B;IACErB,KAAKI,cAAcJ,KAAKQ,KAAKjB;;EAqC/B,MAAA+B;IACE,OACEC,EAAA;MAAKC,OAAM;OACTD,EAAA;MAAUE,OAAO7B;QACjB2B,EAAA;MAAKC,OAAM;OACTD,EAAA;MAAUG,KAAKtC;MAAWoC,OAAM;SAGlCD,EAAA;MAAKC,OAAM;OACRxB,KAAKU,YACJa,EAAA;MACEI,OAAO3B,KAAKI;MACZwB,WAAW;MACXC,SAASC,EAAA9B,MAAIF,GAAA;MACbiC,QAAQD,EAAA9B,MAAIS,GAAA;MACZe,OAAM;SAGRD,EAAA;MAAOC,OAAM;OAASxB,KAAKI,eAI/BmB,EAAA;MAAKC,OAAM;QACPxB,KAAKQ,KAAKwB,WAAWhC,KAAKkB,YAC1BK,EAAA;MACEC,OAAM;MACNS,MAAK;MACLC,SAASJ,EAAA9B,MAAIiB,GAAA;OAEbM,EAAA;MAAUG,KAAKjC;MAAW+B,OAAM;UAGlCxB,KAAKQ,KAAKwB,WACVT,EAAA;MACEC,OAAM;MACNS,MAAK;MACLC,SAASJ,EAAA9B,MAAIW,GAAA;MAAc,cAChB;OAEXY,EAAA;MAAUG,KAAKhC;MAAa8B,OAAM;UAKvCxB,KAAKQ,KAAKwB,WACTT,EAAA;MAAKC,OAAM;OACTD,EAAA;MAAKC,OAAM;OACTD,EAAA;MAAMC,OAAM;OAA2B,cAC1BxB,KAAKI,aAAW,QAE7BmB,EAAA;MACEC,OAAM;MACNS,MAAK;MACLC,SAASJ,EAAA9B,MAAIa,GAAA;OAEbU,EAAA;MAAUG,KAAK/B;MAAa6B,OAAM;UAGtCD,EAAA;MAAKC,OAAM;OACTD,EAAA;MACEC,OAAM;MACNG,OAAO3B,KAAKQ,KAAK2B;MACjBC,KAAI"}
|
|
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","h","class","model","src","value","autoFocus","onInput","__classPrivateFieldGet","onBlur","pending","type","onClick","progress","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:host {\n display: block;\n inline-size: 100%;\n}\n\n.file-item {\n display: grid;\n grid-template-columns: auto 1fr auto;\n grid-template-rows: auto;\n gap: var(--mer-spacing--sm);\n align-items: center;\n border: var(--mer-border__width--sm) solid var(--mer-border__default);\n border-radius: var(--mer-border__radius--sm);\n\n &__icon {\n display: flex;\n align-items: center;\n }\n\n &__name {\n @include ellipsis;\n inline-size: 100%;\n font-weight: var(--mer-font__weight--regular);\n\n ch-edit {\n @include ellipsis;\n inline-size: 100%;\n font-weight: var(--mer-font__weight--regular);\n }\n\n .label {\n @include ellipsis;\n inline-size: 100%;\n font-weight: var(--mer-font__weight--regular);\n }\n }\n\n &__actions {\n display: flex;\n gap: var(--mer-spacing--xs);\n\n button {\n &:active,\n &:focus,\n &:hover {\n background-color: var(--mer-surface__hover);\n }\n\n &:active {\n background-color: var(--mer-surface__pressed);\n }\n }\n }\n\n &__progress-container {\n grid-column: 1 / -1;\n display: flex;\n flex-direction: column;\n gap: var(--mer-spacing--2xs);\n inline-size: 100%;\n border: var(--mer-border__width--md) dashed var(--mer-border-color__dim);\n border-radius: var(--mer-border__radius--md);\n padding: var(--mer-spacing--sm);\n }\n\n &__progress-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: var(--mer-spacing--sm);\n }\n\n &__uploading-text {\n font-style: italic;\n color: var(--mer-text__complementary);\n @include ellipsis;\n max-inline-size: calc(100% - var(--mer-spacing--2xl));\n }\n\n &__progress-bar {\n inline-size: 100%;\n\n progress {\n inline-size: 100%;\n height: var(--mer-spacing--xs);\n border: none;\n border-radius: var(--mer-border__radius--sm);\n overflow: hidden;\n\n &::-webkit-progress-bar {\n background-color: transparent;\n }\n\n &::-webkit-progress-value {\n background-color: var(--mer-accent__primary);\n }\n\n &::-moz-progress-bar {\n background-color: var(--mer-accent__primary);\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 /** 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 return (\n <div class=\"file-item\">\n <ch-theme model={CSS_BUNDLES}></ch-theme>\n <div class=\"file-item__icon\">\n <ch-image src={FILE_ICON} class=\"icon-md\" />\n </div>\n\n <div class=\"file-item__name\">\n {this.isEditing ? (\n <ch-edit\n value={this.currentName}\n autoFocus={true}\n onInput={this.#handleNameChange}\n onBlur={this.#handleBlur}\n class=\"input\"\n />\n ) : (\n <label class=\"label\">{this.currentName}</label>\n )}\n </div>\n\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-md\" />\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-md\" />\n </button>\n )}\n </div>\n\n {this.file.pending && (\n <div class=\"file-item__progress-container\">\n <div class=\"file-item__progress-header\">\n <span class=\"file-item__uploading-text\">\n Uploading {this.currentName}...\n </span>\n <button\n class=\"button-tertiary button-icon-only\"\n type=\"button\"\n onClick={this.#handleCancelClick}\n >\n <ch-image src={CANCEL_ICON} class=\"icon-md\" />\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 />\n </div>\n </div>\n )}\n </div>\n );\n }\n}\n"],"mappings":";;;;;;;;;;;;AAAA,MAAMA,IAAc;;;;;;;;;;ACapB,MAAMC,IAAYC,EAAY;EAC5BC,UAAU;EACVC,MAAM;EACNC,WAAW;;;AAGb,MAAMC,IAAYJ,EAAY;EAC5BC,UAAU;EACVC,MAAM;EACNC,WAAW;;;AAGb,MAAME,IAAcL,EAAY;EAC9BC,UAAU;EACVC,MAAM;EACNC,WAAW;;;AAGb,MAAMG,IAAcN,EAAY;EAC9BC,UAAU;EACVC,MAAM;EACNC,WAAW;;;AAGb,MAAMI,IAA8B,EAClC,qBACA,qBACA,mBACA,mBACA,oBACA,iBACA,cACA,gBACA;;MAQWC,IAAQ;;;;;;IAsCnBC,EAAAC,IAAAC,OAAqBC;MACnB,MAAMC,IAAWD,EAA8BE;MAE/C,IAAID,KAAWA,MAAYF,KAAKI,aAAa;QAC3CJ,KAAKI,cAAcF;QACnBF,KAAKK,eAAeC,KAAK;UACvBC,IAAIP,KAAKQ,KAAKD;UACdhB,MAAMW;;;;IAKZO,EAAAV,IAAAC,OAAc;MACZA,KAAKU,YAAY;AAAK;oCAIxBC,EAAAZ,IAAAC,OAAgB;MACdA,KAAKY,WAAWN,KAAKN,KAAKQ,KAAKD;AAAG;0CAIpCM,EAAAd,IAAAC,OAAsBc;MACpBA,EAAEC;MACFf,KAAKgB,WAAWV,KAAKN,KAAKQ,KAAKD;AAAG;uCAIpCU,EAAAlB,IAAAC,OAAgB;MACd,IAAIA,KAAKkB,UAAU;QACjBlB,KAAKU,YAAY;;;;oBA/DgB;;;qBAiBP;;;sDAJ9B,gBAAAS,CAAiBC;IACfpB,KAAKI,cAAcgB,EAAQ7B;;EAe7B,iBAAA8B;IACErB,KAAKI,cAAcJ,KAAKQ,KAAKjB;;EAqC/B,MAAA+B;IACE,OACEC,EAAA;MAAKC,OAAM;OACTD,EAAA;MAAUE,OAAO7B;QACjB2B,EAAA;MAAKC,OAAM;OACTD,EAAA;MAAUG,KAAKtC;MAAWoC,OAAM;SAGlCD,EAAA;MAAKC,OAAM;OACRxB,KAAKU,YACJa,EAAA;MACEI,OAAO3B,KAAKI;MACZwB,WAAW;MACXC,SAASC,EAAA9B,MAAIF,GAAA;MACbiC,QAAQD,EAAA9B,MAAIS,GAAA;MACZe,OAAM;SAGRD,EAAA;MAAOC,OAAM;OAASxB,KAAKI,eAI/BmB,EAAA;MAAKC,OAAM;QACPxB,KAAKQ,KAAKwB,WAAWhC,KAAKkB,YAC1BK,EAAA;MACEC,OAAM;MACNS,MAAK;MACLC,SAASJ,EAAA9B,MAAIiB,GAAA;OAEbM,EAAA;MAAUG,KAAKjC;MAAW+B,OAAM;UAGlCxB,KAAKQ,KAAKwB,WACVT,EAAA;MACEC,OAAM;MACNS,MAAK;MACLC,SAASJ,EAAA9B,MAAIW,GAAA;MAAc,cAChB;OAEXY,EAAA;MAAUG,KAAKhC;MAAa8B,OAAM;UAKvCxB,KAAKQ,KAAKwB,WACTT,EAAA;MAAKC,OAAM;OACTD,EAAA;MAAKC,OAAM;OACTD,EAAA;MAAMC,OAAM;OAA2B,cAC1BxB,KAAKI,aAAW,QAE7BmB,EAAA;MACEC,OAAM;MACNS,MAAK;MACLC,SAASJ,EAAA9B,MAAIa,GAAA;OAEbU,EAAA;MAAUG,KAAK/B;MAAa6B,OAAM;UAGtCD,EAAA;MAAKC,OAAM;OACTD,EAAA;MACEC,OAAM;MACNG,OAAO3B,KAAKQ,KAAK2B;MACjBC,KAAI"}
|
|
@@ -1,6 +1,14 @@
|
|
|
1
1
|
import { r as e, h as i, H as t, a } from "./p-97107ecc.js";
|
|
2
2
|
|
|
3
|
-
import { g as r } from "./p-
|
|
3
|
+
import { g as r } from "./p-d42e842b.js";
|
|
4
|
+
|
|
5
|
+
import "./p-d4ecd3bb.js";
|
|
6
|
+
|
|
7
|
+
import "lit";
|
|
8
|
+
|
|
9
|
+
import "lit/directives/when.js";
|
|
10
|
+
|
|
11
|
+
import "lit/directives/if-defined.js";
|
|
4
12
|
|
|
5
13
|
import { L as o } from "./p-311eedf3.js";
|
|
6
14
|
|
|
@@ -19,7 +27,7 @@ var l = undefined && undefined.__classPrivateFieldSet || function(e, i, t, a, r)
|
|
|
19
27
|
return a === "a" ? r.call(e, t) : r ? r.value = t : i.set(e, t), t;
|
|
20
28
|
};
|
|
21
29
|
|
|
22
|
-
var d, c, f, g, h, b, v, p, m, u, y, x, w, k, _, z,
|
|
30
|
+
var d, c, f, g, h, b, v, p, m, u, y, x, w, k, _, z, j, M;
|
|
23
31
|
|
|
24
32
|
const W = r({
|
|
25
33
|
category: "gemini-tools",
|
|
@@ -203,7 +211,7 @@ const C = class {
|
|
|
203
211
|
}
|
|
204
212
|
}
|
|
205
213
|
}));
|
|
206
|
-
/** Handles dialog confirmation */
|
|
214
|
+
/** Handles dialog confirmation */ j.set(this, (async () => {
|
|
207
215
|
var e;
|
|
208
216
|
// Verificar si hay subidas en progreso
|
|
209
217
|
const i = Array.from(this.fileStates.values()).some((e => e.pending));
|
|
@@ -231,7 +239,7 @@ const C = class {
|
|
|
231
239
|
n(this, f, "f").value = "";
|
|
232
240
|
}
|
|
233
241
|
}));
|
|
234
|
-
/** Handles dialog cancellation */
|
|
242
|
+
/** Handles dialog cancellation */ M.set(this, (async () => {
|
|
235
243
|
var e, i, t;
|
|
236
244
|
try {
|
|
237
245
|
// Cancelamos todas las subidas en progreso
|
|
@@ -378,11 +386,11 @@ const C = class {
|
|
|
378
386
|
}, i("button", {
|
|
379
387
|
class: "button-secondary",
|
|
380
388
|
type: "button",
|
|
381
|
-
onClick: n(this,
|
|
389
|
+
onClick: n(this, M, "f")
|
|
382
390
|
}, (C = n(this, c, "f")) === null || C === void 0 ? void 0 : C.buttons.cancel), i("button", {
|
|
383
391
|
class: "button-primary",
|
|
384
392
|
type: "button",
|
|
385
|
-
onClick: n(this,
|
|
393
|
+
onClick: n(this, j, "f"),
|
|
386
394
|
disabled: this.fileStates.size === 0 || Array.from(this.fileStates.values()).some((e => e.pending))
|
|
387
395
|
}, (E = n(this, c, "f")) === null || E === void 0 ? void 0 : E.buttons.confirm)))));
|
|
388
396
|
}
|
|
@@ -396,7 +404,7 @@ const C = class {
|
|
|
396
404
|
|
|
397
405
|
c = new WeakMap, f = new WeakMap, g = new WeakMap, h = new WeakMap, p = new WeakMap,
|
|
398
406
|
m = new WeakMap, u = new WeakMap, y = new WeakMap, x = new WeakMap, w = new WeakMap,
|
|
399
|
-
k = new WeakMap, _ = new WeakMap, z = new WeakMap,
|
|
407
|
+
k = new WeakMap, _ = new WeakMap, z = new WeakMap, j = new WeakMap, M = new WeakMap,
|
|
400
408
|
d = new WeakSet, b = function _FileUploader_isValidFile(e) {
|
|
401
409
|
var i, t;
|
|
402
410
|
// If no types specified, accept any file
|
|
@@ -454,4 +462,4 @@ d = new WeakSet, b = function _FileUploader_isValidFile(e) {
|
|
|
454
462
|
C.style = s;
|
|
455
463
|
|
|
456
464
|
export { C as gx_ide_file_uploader };
|
|
457
|
-
//# sourceMappingURL=p-
|
|
465
|
+
//# sourceMappingURL=p-1baf026c.entry.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["fileUploaderCss","PLUS_ICON","getIconPath","category","name","colorType","CSS_BUNDLES","FileUploader","_FileUploader__componentLocale","set","this","_FileUploader_fileInputEl","_FileUploader_dragCounter","_FileUploader_generateId","Math","random","toString","substr","_FileUploader_handleDragEnter","e","preventDefault","stopPropagation","__classPrivateFieldSet","_a","__classPrivateFieldGet","isDragging","_FileUploader_handleDragLeave","_FileUploader_handleDragOver","_FileUploader_handleDrop","files","dataTransfer","_FileUploader_handleFiles","call","_FileUploader_handleFileSelect","click","_FileUploader_handleFileInput","target","validFiles","_FileUploader_instances","_FileUploader_getValidFiles","forEach","async","file","id","fileState","pending","progress","multiple","fileStates","clear","Map","uploadFunction","uploadPromise","state","get","updatedState","Object","assign","stateWithPromise","result","success","remoteId","fileUploadedCallback","originalName","error","_b","errors","upload","Error","message","value","_FileUploader_handleNameChange","event","detail","updatedFile","trim","isEditing","fileRenamedCallback","fileId","newName","_FileUploader_handleFileCancel","cancel","cancelUploadFunction","uploadCancelledCallback","delete","fileToDelete","shouldDelete","onBeforeDelete","_c","fileDeletedCallback","_d","fileDeletionErrorCallback","fileName","_FileUploader_handleConfirm","hasPendingUploads","Array","from","values","some","uploadedFiles","filter","isValid","map","length","dialogConfirmedCallback","_FileUploader_handleCancel","entries","dialogCanceledCallback","componentWillLoad","Locale","getComponentStrings","el","render","h","Host","class","model","type","accept","types","startsWith","join","onChange","ref","tabIndex","style","display","size","onDragEnter","onDragLeave","onDragOver","onDrop","onClick","src","header","uploadButtonMultiple","uploadButtonSingle","label","orText","_e","dragAndDrop","_f","acceptedFiles","replace","_g","allFilesAccepted","_h","fileList","attachedFiles","_j","filesCount","_k","_l","key","editable","canEditName","onFileNameChange","onFileDelete","onFileCancel","_m","buttons","disabled","_o","confirm","includes","baseType","split","toLowerCase","endsWith","invalidFileType","validation","_FileUploader_isValidFile","push","fileValidationErrorCallback"],"sources":["src/components/file-uploader/file-uploader.scss?tag=gx-ide-file-uploader&encapsulation=shadow","src/components/file-uploader/file-uploader.tsx"],"sourcesContent":["@import \"../../global/gx-ide-common.scss\";\n@import \"../../global/gx-ide-mixins.scss\";\n@import \"../../../node_modules/@genexus/mercury/dist/assets/scss/helpers.scss\";\n\n:host {\n display: block;\n inline-size: 100%;\n block-size: 100%;\n padding-inline-end: 0 !important;\n}\n\n.file-uploader-dialog {\n display: flex;\n flex-direction: column;\n block-size: 100%;\n background-color: var(--mer-surface__background);\n position: relative;\n\n .dialog-content {\n flex: 1;\n min-block-size: 0;\n overflow: auto;\n }\n\n .dialog-footer {\n padding-inline-end: var(--spacing-body-inline-end);\n }\n}\n\n.file-uploader {\n display: flex;\n flex-direction: column;\n inline-size: 100%;\n block-size: 100%;\n\n &__list {\n display: flex;\n flex-direction: column;\n inline-size: 100%;\n block-size: 100%;\n\n &-header {\n position: sticky;\n top: 0;\n z-index: 1;\n background-color: var(--mer-surface__elevation--01);\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding-inline-end: var(--spacing-body-inline-end);\n }\n\n &-content {\n flex: 1;\n overflow-y: auto;\n display: flex;\n flex-direction: column;\n gap: var(--mer-spacing--xs);\n padding-inline-end: var(--spacing-body-inline-end);\n padding-block-end: var(--mer-spacing--md);\n }\n }\n\n &__list-title-container {\n display: flex;\n align-items: center;\n gap: var(--mer-spacing--2xs);\n white-space: nowrap;\n }\n\n &__drop-zone {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n inline-size: calc(100% - var(--spacing-body-inline-end));\n block-size: calc(100% - var(--mer-spacing--sm));\n min-block-size: 200px;\n margin-block-end: var(--mer-spacing--sm);\n background: var(--mer-surface__elevation--01);\n border: var(--mer-border__width--md) dashed var(--mer-border-color__dim);\n border-radius: var(--mer-border__radius--md);\n transition: border-color 0.3s ease, background-color 0.3s ease,\n opacity 0.3s ease;\n\n &--dragging {\n border-color: var(--mer-accent__primary);\n background: var(--mer-accent__primary--hover);\n opacity: 0.7;\n }\n\n .text-container {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--mer-spacing--2xs);\n margin-block-start: var(--mer-spacing--xs);\n }\n }\n}\n\n.hidden-input {\n display: none;\n}\n\n.label-primary-row {\n display: flex;\n align-items: center;\n gap: var(--mer-spacing--xs);\n}\n","/* 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-md\" 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-md\" 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 control-footer control-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"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["fileUploaderCss","PLUS_ICON","getIconPath","category","name","colorType","CSS_BUNDLES","FileUploader","_FileUploader__componentLocale","set","this","_FileUploader_fileInputEl","_FileUploader_dragCounter","_FileUploader_generateId","Math","random","toString","substr","_FileUploader_handleDragEnter","e","preventDefault","stopPropagation","__classPrivateFieldSet","_a","__classPrivateFieldGet","isDragging","_FileUploader_handleDragLeave","_FileUploader_handleDragOver","_FileUploader_handleDrop","files","dataTransfer","_FileUploader_handleFiles","call","_FileUploader_handleFileSelect","click","_FileUploader_handleFileInput","target","validFiles","_FileUploader_instances","_FileUploader_getValidFiles","forEach","async","file","id","fileState","pending","progress","multiple","fileStates","clear","Map","uploadFunction","uploadPromise","state","get","updatedState","Object","assign","stateWithPromise","result","success","remoteId","fileUploadedCallback","originalName","error","_b","errors","upload","Error","message","value","_FileUploader_handleNameChange","event","detail","updatedFile","trim","isEditing","fileRenamedCallback","fileId","newName","_FileUploader_handleFileCancel","cancel","cancelUploadFunction","uploadCancelledCallback","delete","fileToDelete","shouldDelete","onBeforeDelete","_c","fileDeletedCallback","_d","fileDeletionErrorCallback","fileName","_FileUploader_handleConfirm","hasPendingUploads","Array","from","values","some","uploadedFiles","filter","isValid","map","length","dialogConfirmedCallback","_FileUploader_handleCancel","entries","dialogCanceledCallback","componentWillLoad","Locale","getComponentStrings","el","render","h","Host","class","model","type","accept","types","startsWith","join","onChange","ref","tabIndex","style","display","size","onDragEnter","onDragLeave","onDragOver","onDrop","onClick","src","header","uploadButtonMultiple","uploadButtonSingle","label","orText","_e","dragAndDrop","_f","acceptedFiles","replace","_g","allFilesAccepted","_h","fileList","attachedFiles","_j","filesCount","_k","_l","key","editable","canEditName","onFileNameChange","onFileDelete","onFileCancel","_m","buttons","disabled","_o","confirm","includes","baseType","split","toLowerCase","endsWith","invalidFileType","validation","_FileUploader_isValidFile","push","fileValidationErrorCallback"],"sources":["src/components/file-uploader/file-uploader.scss?tag=gx-ide-file-uploader&encapsulation=shadow","src/components/file-uploader/file-uploader.tsx"],"sourcesContent":["@import \"../../global/gx-ide-common.scss\";\n@import \"../../global/gx-ide-mixins.scss\";\n@import \"../../../node_modules/@genexus/mercury/dist/assets/scss/helpers.scss\";\n\n:host {\n display: block;\n inline-size: 100%;\n block-size: 100%;\n padding-inline-end: 0 !important;\n}\n\n.file-uploader-dialog {\n display: flex;\n flex-direction: column;\n block-size: 100%;\n background-color: var(--mer-surface__background);\n position: relative;\n\n .dialog-content {\n flex: 1;\n min-block-size: 0;\n overflow: auto;\n }\n\n .dialog-footer {\n padding-inline-end: var(--spacing-body-inline-end);\n }\n}\n\n.file-uploader {\n display: flex;\n flex-direction: column;\n inline-size: 100%;\n block-size: 100%;\n\n &__list {\n display: flex;\n flex-direction: column;\n inline-size: 100%;\n block-size: 100%;\n\n &-header {\n position: sticky;\n top: 0;\n z-index: 1;\n background-color: var(--mer-surface__elevation--01);\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding-inline-end: var(--spacing-body-inline-end);\n }\n\n &-content {\n flex: 1;\n overflow-y: auto;\n display: flex;\n flex-direction: column;\n gap: var(--mer-spacing--xs);\n padding-inline-end: var(--spacing-body-inline-end);\n padding-block-end: var(--mer-spacing--md);\n }\n }\n\n &__list-title-container {\n display: flex;\n align-items: center;\n gap: var(--mer-spacing--2xs);\n white-space: nowrap;\n }\n\n &__drop-zone {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n inline-size: calc(100% - var(--spacing-body-inline-end));\n block-size: calc(100% - var(--mer-spacing--sm));\n min-block-size: 200px;\n margin-block-end: var(--mer-spacing--sm);\n background: var(--mer-surface__elevation--01);\n border: var(--mer-border__width--md) dashed var(--mer-border-color__dim);\n border-radius: var(--mer-border__radius--md);\n transition: border-color 0.3s ease, background-color 0.3s ease,\n opacity 0.3s ease;\n\n &--dragging {\n border-color: var(--mer-accent__primary);\n background: var(--mer-accent__primary--hover);\n opacity: 0.7;\n }\n\n .text-container {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--mer-spacing--2xs);\n margin-block-start: var(--mer-spacing--xs);\n }\n }\n}\n\n.hidden-input {\n display: none;\n}\n\n.label-primary-row {\n display: flex;\n align-items: center;\n gap: var(--mer-spacing--xs);\n}\n","/* 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-md\" 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-md\" 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 control-footer control-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"],"mappings":"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"}
|
|
@@ -1,6 +1,14 @@
|
|
|
1
|
-
import { r as t, c as e, g as i, h as s, H as n, a } from "./p-97107ecc.js";
|
|
1
|
+
import { r as t, c as e, g as i, h as s, H as n, a as o } from "./p-97107ecc.js";
|
|
2
2
|
|
|
3
|
-
import { g as
|
|
3
|
+
import { g as a } from "./p-d42e842b.js";
|
|
4
|
+
|
|
5
|
+
import "./p-d4ecd3bb.js";
|
|
6
|
+
|
|
7
|
+
import "lit";
|
|
8
|
+
|
|
9
|
+
import "lit/directives/when.js";
|
|
10
|
+
|
|
11
|
+
import "lit/directives/if-defined.js";
|
|
4
12
|
|
|
5
13
|
import { c as r } from "./p-9a03ac9f.js";
|
|
6
14
|
|
|
@@ -23,7 +31,7 @@ var f = undefined && undefined.__classPrivateFieldGet || function(t, e, i, s) {
|
|
|
23
31
|
return i === "m" ? s : i === "a" ? s.call(t) : s ? s.value : e.get(t);
|
|
24
32
|
};
|
|
25
33
|
|
|
26
|
-
var p, u, m, b, v, w, g, y, k, M, W, _, x,
|
|
34
|
+
var p, u, m, b, v, w, g, y, k, M, W, _, x, j, T, C, E, $;
|
|
27
35
|
|
|
28
36
|
const A = [ "resets/box-sizing", "utils/form--full", "utils/layout", "utils/typography", "utils/spacing", "components/list-box", "components/tooltip", "chameleon/scrollbar" ];
|
|
29
37
|
|
|
@@ -31,7 +39,7 @@ const S = class {
|
|
|
31
39
|
constructor(n) {
|
|
32
40
|
t(this, n);
|
|
33
41
|
this.componentDidRenderFirstTime = e(this, "componentDidRenderFirstTime", 7);
|
|
34
|
-
p.set(this,
|
|
42
|
+
p.set(this, a({
|
|
35
43
|
category: "gemini-tools",
|
|
36
44
|
name: "show-more-horizontal",
|
|
37
45
|
colorType: "on-elevation"
|
|
@@ -89,7 +97,7 @@ const S = class {
|
|
|
89
97
|
delay: r.tooltipSettings.delay
|
|
90
98
|
}, this.validatableControls.get(t.id).message);
|
|
91
99
|
}));
|
|
92
|
-
|
|
100
|
+
j.set(this, (() => {
|
|
93
101
|
// populate validatableControls with the controls that could have errors.
|
|
94
102
|
const t = [ f(this, k, "f") ];
|
|
95
103
|
t.forEach((t => {
|
|
@@ -102,7 +110,7 @@ const S = class {
|
|
|
102
110
|
}
|
|
103
111
|
}));
|
|
104
112
|
}));
|
|
105
|
-
|
|
113
|
+
T.set(this, (t => {
|
|
106
114
|
this.kbName = t.detail;
|
|
107
115
|
}));
|
|
108
116
|
C.set(this, (async () => {
|
|
@@ -167,7 +175,7 @@ const S = class {
|
|
|
167
175
|
}
|
|
168
176
|
componentDidLoad() {
|
|
169
177
|
this.versionSelectedType = f(this, y, "f").value;
|
|
170
|
-
f(this,
|
|
178
|
+
f(this, j, "f").call(this);
|
|
171
179
|
}
|
|
172
180
|
componentDidRender() {
|
|
173
181
|
if (!f(this, v, "f")) {
|
|
@@ -213,7 +221,7 @@ const S = class {
|
|
|
213
221
|
class: "input",
|
|
214
222
|
id: "kb-name",
|
|
215
223
|
value: this.kbName,
|
|
216
|
-
onInput: f(this,
|
|
224
|
+
onInput: f(this, T, "f"),
|
|
217
225
|
placeholder: f(this, m, "f").kb.localKbNamePlaceholder,
|
|
218
226
|
ref: t => d(this, k, t, "f")
|
|
219
227
|
}), f(this, x, "f").call(this, f(this, k, "f"))), s("div", {
|
|
@@ -251,16 +259,16 @@ const S = class {
|
|
|
251
259
|
return [ "gx-ide-assets/share-kb" ];
|
|
252
260
|
}
|
|
253
261
|
get el() {
|
|
254
|
-
return
|
|
262
|
+
return o(this);
|
|
255
263
|
}
|
|
256
264
|
};
|
|
257
265
|
|
|
258
266
|
p = new WeakMap, u = new WeakMap, m = new WeakMap, b = new WeakMap, v = new WeakMap,
|
|
259
267
|
w = new WeakMap, g = new WeakMap, y = new WeakMap, k = new WeakMap, M = new WeakMap,
|
|
260
|
-
W = new WeakMap, _ = new WeakMap, x = new WeakMap,
|
|
268
|
+
W = new WeakMap, _ = new WeakMap, x = new WeakMap, j = new WeakMap, T = new WeakMap,
|
|
261
269
|
C = new WeakMap, E = new WeakMap, $ = new WeakMap;
|
|
262
270
|
|
|
263
271
|
S.style = c;
|
|
264
272
|
|
|
265
273
|
export { S as gx_ide_share_kb };
|
|
266
|
-
//# sourceMappingURL=p-
|
|
274
|
+
//# sourceMappingURL=p-1d647672.entry.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["shareKbCss","CSS_BUNDLES","GxIdeShareKb","_GxIdeShareKb_showMoreIcon","set","this","getIconPath","category","name","colorType","_GxIdeShareKb_versionsSelect","value","caption","_GxIdeShareKb__componentLocale","_GxIdeShareKb_kbVersions","_GxIdeShareKb_renderedFirstTime","_GxIdeShareKb_shortcutsSrc","getAssetPath","_GxIdeShareKb_selectedKbId","_GxIdeShareKb_versionSelectedTypeEl","_GxIdeShareKb_KBNameEl","_GxIdeShareKb_cancelHandler","cancelCallback","_GxIdeShareKb_changeConnectionHandler","async","changeConnectionCallback","authenticationType","connectionData","serverUrl","userName","userPassword","_GxIdeShareKb_shareKBHandler","versionSelectedType","__classPrivateFieldSet","shareKBCallback","kbName","versionList","__classPrivateFieldGet","allVersions","then","formSubmitResult","validatableControls","validateControls","_GxIdeShareKb_evaluateTooltipRender","controlReference","_b","_a","get","id","hasError","_c","message","h","class","actionElement","blockAlign","config","tooltipSettings","inlineAlign","delay","_GxIdeShareKb_initializeValidatableControls","forEach","validatableControl","reference","undefined","_GxIdeShareKb_kbNameInputHandler","event","detail","_GxIdeShareKb_selectedVersionHandler","selectKBVersionsCallback","result","length","map","kbVersion","localKbNameInputValue","versionsValueInput","kb","versionsPlaceholder","toString","versionSelectedFieldValue","oneVersionSelectedFieldValue","_GxIdeShareKb_versionsChangedHandler","enableSelectVersionsButton","_GxIdeShareKb_renderFooter","disableShareKbButton","onClick","part","footer","cancel","disabled","shareKB","Map","componentDidLoad","call","componentDidRender","componentDidRenderFirstTime","emit","componentName","componentWillLoad","Locale","getComponentStrings","el","render","Host","model","src","ref","chShortcutsEl","header","user","change","htmlFor","aliasLabel","onInput","placeholder","localKbNamePlaceholder","onChange","versionsLabel","readonly","versionsPlaceholderDisabled"],"sources":["src/components/team-dev/share-kb/share-kb.scss?tag=gx-ide-share-kb&encapsulation=shadow","src/components/team-dev/share-kb/share-kb.tsx"],"sourcesContent":[":host {\n display: grid;\n block-size: 100%;\n grid-template-rows: max-content 1fr max-content;\n}\n\n.section {\n display: contents;\n}\n\n// - - - - - - - - - - -\n// Header\n// - - - - - - - - - - -\n\nheader {\n display: grid;\n grid-template-rows: max-content;\n grid-template-columns: 1fr 1fr max-content;\n}\n\n.button-change {\n align-self: center;\n justify-self: end;\n}\n\n// - - - - - - - - - - -\n// Main\n// - - - - - - - - - - -\n\n.main {\n display: grid;\n grid-template-columns: 1fr;\n grid-template-rows: max-content 1fr max-content max-content;\n}\n\n.search-kbs {\n inline-size: 50%;\n}\n\n.versions-container {\n grid-auto-rows: max-content;\n\n &__input {\n display: grid;\n grid-template-columns: 1fr max-content;\n gap: var(--mer-spacing--xs);\n }\n}\n\n.button-icon-only.button-tertiary {\n border-color: var(--mer-color__neutral-gray--500);\n border-width: var(--mer-border__width--sm);\n border-radius: var(--mer-border__radius--sm);\n}\n\n.button-icon-only:hover {\n border-color: var(--mer-color__neutral-gray--100);\n}\n","// Stencil\nimport {\n Component,\n Host,\n h,\n Prop,\n Event,\n EventEmitter,\n Element,\n State,\n getAssetPath\n} from \"@stencil/core\";\n\n// Other Libraries\nimport { getIconPath, MercuryBundles } from \"@genexus/mercury\";\n\n// Custom Imports\nimport { config } from \"../../../common/config\";\nimport { GXServerConnectionData } from \"../connect-gx-server/connect-gx-server\";\nimport { FormSubmitResult } from \"../../../common/types\";\nimport {\n ControlValidation,\n validateControls\n} from \"../../../common/form-validation\";\nimport { Locale } from \"../../../common/locale\";\nimport { RadioGroupItemModel } from \"@genexus/chameleon-controls-library/dist/types/components/radio-group/types\";\nimport { ChEditCustomEvent } from \"@genexus/chameleon-controls-library\";\n\nconst CSS_BUNDLES: MercuryBundles = [\n \"resets/box-sizing\",\n \"utils/form--full\",\n \"utils/layout\",\n \"utils/typography\",\n \"utils/spacing\",\n \"components/list-box\",\n \"components/tooltip\",\n \"chameleon/scrollbar\"\n];\n\n@Component({\n tag: \"gx-ide-share-kb\",\n styleUrl: \"share-kb.scss\",\n shadow: true,\n assetsDirs: [\"gx-ide-assets/share-kb\"]\n})\nexport class GxIdeShareKb {\n #showMoreIcon = getIconPath({\n category: \"gemini-tools\",\n name: \"show-more-horizontal\",\n colorType: \"on-elevation\"\n });\n\n #versionsSelect: RadioGroupItemModel[] = [\n { value: \"Trunk\", caption: \"Trunk Version\" },\n { value: \"All\", caption: \"All Versions\" },\n { value: \"Select\", caption: \"Select Version\" }\n ];\n\n [key: string]: any;\n\n #_componentLocale: any;\n #kbVersions: KBVersion[] = [];\n #renderedFirstTime = false;\n #shortcutsSrc = getAssetPath(\n `./gx-ide-assets/create-kb-from-server/shortcuts.json`\n );\n #selectedKbId: string;\n\n #versionSelectedTypeEl: HTMLChRadioGroupRenderElement;\n\n @Element() el: HTMLGxIdeShareKbElement;\n\n #KBNameEl!: HTMLChEditElement;\n\n /**\n * State to enable/disable the select versions button\n */\n @State() enableSelectVersionsButton: boolean = false;\n\n @State() validatableControls = new Map<string, ControlValidation>();\n\n /**\n * The version selected type\n */\n @State() versionSelectedType: VersionOption;\n\n /**\n * String value to show the number of versions selected (\"N versions selected\")\n */\n @State() versionsValueInput: string = \"\";\n\n /**\n * Set of data required when executing any of the callbacks that require a connection to the server.\n */\n @Prop() readonly connectionData: GXServerConnectionData;\n\n /**\n * Callback that is invoked when the dialog is closed\n */\n @Prop() readonly cancelCallback!: () => Promise<void>;\n\n /**\n * The host reopens the gx-ide-connect-server login modal with the previous data, and closes the current modal\n */\n @Prop() readonly changeConnectionCallback: (\n data: GXServerConnectionData\n ) => Promise<void>;\n\n /**\n * The name of the KB.\n */\n @Prop({ mutable: true }) kbName: string;\n\n /**\n * Callback that must be invoked when the Share button is pressed.\n */\n @Prop() readonly shareKBCallback: (\n data: ShareKBData\n ) => Promise<FormSubmitResult>;\n\n /**\n * Callback invoked by pressing the ellipsis in the version selector. Receives the KB selected by the user, and displays the version selector dialog. Returns a list of versions chosen by the user.\n */\n @Prop() readonly selectKBVersionsCallback: (\n selectedKB: string\n ) => Promise<KBVersion[]>;\n\n /**\n * Emitted once just after the component is fully loaded and the first render() occurs\n */\n @Event() componentDidRenderFirstTime: EventEmitter<boolean>;\n\n componentDidLoad() {\n this.versionSelectedType = this.#versionSelectedTypeEl\n .value as VersionOption;\n\n this.#initializeValidatableControls();\n }\n\n componentDidRender() {\n if (!this.#renderedFirstTime) {\n this.componentDidRenderFirstTime.emit(\n this.#_componentLocale.componentName\n );\n this.#renderedFirstTime = true;\n }\n }\n\n async componentWillLoad() {\n this.#_componentLocale = await Locale.getComponentStrings(this.el);\n }\n\n #cancelHandler = (): void => {\n this.cancelCallback();\n };\n\n #changeConnectionHandler = async (): Promise<void> => {\n this.changeConnectionCallback({\n authenticationType: this.connectionData.authenticationType,\n serverUrl: this.connectionData.serverUrl,\n userName: this.connectionData.userName,\n userPassword: this.connectionData.userPassword\n });\n };\n\n #shareKBHandler = async (): Promise<void> => {\n if (this.versionSelectedType !== \"Select\") {\n this.#kbVersions = [];\n }\n this.shareKBCallback({\n name: this.kbName,\n serverUrl: this.connectionData.serverUrl,\n versionList: this.#kbVersions,\n allVersions: this.versionSelectedType === \"All\"\n }).then((formSubmitResult: FormSubmitResult) => {\n this.validatableControls = validateControls(\n formSubmitResult,\n this.validatableControls\n );\n });\n };\n\n // TODO: evaluate if this should be a global helper function.\n // It is used on other dialogs as well.\n #evaluateTooltipRender = (\n controlReference: HTMLElement\n ): HTMLChTooltipElement =>\n this.validatableControls?.get(controlReference?.id)?.hasError &&\n this.validatableControls.get(controlReference.id)?.message && (\n <ch-tooltip\n class=\"tooltip\"\n actionElement={controlReference as unknown as HTMLButtonElement}\n blockAlign={config.tooltipSettings.blockAlign}\n inlineAlign={config.tooltipSettings.inlineAlign}\n delay={config.tooltipSettings.delay}\n >\n {this.validatableControls.get(controlReference.id).message}\n </ch-tooltip>\n );\n\n #initializeValidatableControls = () => {\n // populate validatableControls with the controls that could have errors.\n const validatableControls: HTMLElement[] = [this.#KBNameEl];\n validatableControls.forEach(validatableControl => {\n if (validatableControl.id) {\n this.validatableControls.set(validatableControl.id, {\n reference: validatableControl,\n hasError: false,\n message: undefined\n });\n }\n });\n };\n\n #kbNameInputHandler = (event: ChEditCustomEvent<string> | InputEvent) => {\n this.kbName = event.detail as string;\n };\n\n #selectedVersionHandler = async () => {\n if (this.selectKBVersionsCallback) {\n await this.selectKBVersionsCallback(this.#selectedKbId).then(result => {\n if (result?.length) {\n this.#kbVersions = result.map(kbVersion => ({\n id: kbVersion.id,\n name: kbVersion.name\n }));\n\n if (result.length === 1 && this.#kbVersions[0].id === 0) {\n this.localKbNameInputValue = this.#selectedKbId;\n this.versionsValueInput =\n this.#_componentLocale.kb.versionsPlaceholder;\n } else if (result.length > 1) {\n this.localKbNameInputValue = this.#selectedKbId;\n this.versionsValueInput = `${result.length.toString()} ${\n this.#_componentLocale.kb.versionSelectedFieldValue\n }`;\n } else {\n this.localKbNameInputValue = `${this.#selectedKbId}_${\n this.#kbVersions[0].name\n }`;\n this.versionsValueInput = `${result[0].name} ${\n this.#_componentLocale.kb.oneVersionSelectedFieldValue\n }`;\n }\n }\n });\n }\n };\n\n #versionsChangedHandler = (event: CustomEvent<string>) => {\n this.versionSelectedType = event.detail as VersionOption;\n if (this.versionSelectedType === \"Select\") {\n this.enableSelectVersionsButton = true;\n } else {\n this.enableSelectVersionsButton = false;\n }\n };\n\n #renderFooter = () => {\n const disableShareKbButton = !this.kbName.length;\n return (\n <footer class=\"footer control-footer-with-border spacing-body-inline spacing-body-block-end\">\n <div class=\"buttons-spacer\">\n <button\n // cancel button\n class=\"button-secondary\"\n onClick={this.#cancelHandler}\n part=\"button button-cancel\"\n >\n {this.#_componentLocale.footer.cancel}\n </button>\n\n <button\n // share kb button\n class=\"button-primary\"\n onClick={!disableShareKbButton && this.#shareKBHandler}\n disabled={disableShareKbButton}\n part=\"button button-create-kb\"\n >\n {this.#_componentLocale.footer.shareKB}\n </button>\n </div>\n </footer>\n );\n };\n\n render(): void {\n return (\n <Host class=\"widget\">\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 <section class=\"section\">\n <header class=\"header control-header-with-border space-body spacing-body-inline spacing-body-block-start\">\n <div class=\"field field-block\">\n <label class=\"label\">\n {this.#_componentLocale.header.serverUrl}\n </label>\n <p>{this.connectionData.serverUrl}</p>\n </div>\n\n <div class=\"field field-block\">\n <label class=\"label\">{this.#_componentLocale.header.user}</label>\n <p>{this.connectionData.userName}</p>\n </div>\n\n <button\n class=\"button-tertiary button-change\"\n onClick={this.#changeConnectionHandler}\n >\n {this.#_componentLocale.header.change}\n </button>\n </header>\n\n <section class=\"main field-group spacing-body\">\n <div class=\"field field-block\">\n <label class=\"label\" htmlFor=\"alias\">\n {this.#_componentLocale.kb.aliasLabel}\n </label>\n <ch-edit\n // alias\n class=\"input\"\n id=\"kb-name\"\n value={this.kbName}\n onInput={this.#kbNameInputHandler}\n placeholder={this.#_componentLocale.kb.localKbNamePlaceholder}\n ref={(el: HTMLChEditElement) =>\n (this.#KBNameEl = el as HTMLChEditElement)\n }\n ></ch-edit>\n {this.#evaluateTooltipRender(this.#KBNameEl)}\n </div>\n\n <div class=\"versions-container field-group\">\n <ch-radio-group-render\n class=\"radio-group\"\n model={this.#versionsSelect}\n onChange={this.#versionsChangedHandler}\n value={this.#versionsSelect[0].value}\n ref={(el: HTMLChRadioGroupRenderElement) =>\n (this.#versionSelectedTypeEl =\n el as HTMLChRadioGroupRenderElement)\n }\n ></ch-radio-group-render>\n\n {this.versionSelectedType === \"Select\" && (\n <div class=\"versions-container__item field-group\">\n <div class=\"field field-block\">\n <label class=\"label\" htmlFor=\"control-id-1\">\n {this.#_componentLocale.kb.versionsLabel}\n </label>\n <div class=\"versions-container__input\">\n <ch-edit\n class=\"input\"\n readonly\n placeholder={\n this.enableSelectVersionsButton\n ? this.#_componentLocale.kb.versionsPlaceholder\n : this.#_componentLocale.kb\n .versionsPlaceholderDisabled\n }\n value={this.versionsValueInput}\n ></ch-edit>\n <button\n class=\"button-tertiary button-icon-only\"\n onClick={this.#selectedVersionHandler}\n disabled={!this.enableSelectVersionsButton}\n >\n <ch-image\n src={this.#showMoreIcon}\n class=\"icon-sm\"\n ></ch-image>\n </button>\n </div>\n </div>\n </div>\n )}\n </div>\n </section>\n\n {this.#renderFooter()}\n </section>\n </Host>\n );\n }\n}\n\nexport type KBData = {\n id: string;\n name: string;\n};\n\nexport type KBVersion = {\n id: number;\n name: string;\n type?: VersionType;\n};\n\nexport type ConnectionResultData = {\n formResult: FormSubmitResult;\n kbs: KBData[];\n};\n\nexport type ShareKBData = {\n name: string;\n serverUrl: string;\n versionList: KBVersion[];\n allVersions: boolean;\n};\n\nexport type VersionOption = \"Trunk\" | \"All\" | \"Select\";\n\nexport type VersionType = \"Branch\" | \"Frozen\";\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["shareKbCss","CSS_BUNDLES","GxIdeShareKb","_GxIdeShareKb_showMoreIcon","set","this","getIconPath","category","name","colorType","_GxIdeShareKb_versionsSelect","value","caption","_GxIdeShareKb__componentLocale","_GxIdeShareKb_kbVersions","_GxIdeShareKb_renderedFirstTime","_GxIdeShareKb_shortcutsSrc","getAssetPath","_GxIdeShareKb_selectedKbId","_GxIdeShareKb_versionSelectedTypeEl","_GxIdeShareKb_KBNameEl","_GxIdeShareKb_cancelHandler","cancelCallback","_GxIdeShareKb_changeConnectionHandler","async","changeConnectionCallback","authenticationType","connectionData","serverUrl","userName","userPassword","_GxIdeShareKb_shareKBHandler","versionSelectedType","__classPrivateFieldSet","shareKBCallback","kbName","versionList","__classPrivateFieldGet","allVersions","then","formSubmitResult","validatableControls","validateControls","_GxIdeShareKb_evaluateTooltipRender","controlReference","_b","_a","get","id","hasError","_c","message","h","class","actionElement","blockAlign","config","tooltipSettings","inlineAlign","delay","_GxIdeShareKb_initializeValidatableControls","forEach","validatableControl","reference","undefined","_GxIdeShareKb_kbNameInputHandler","event","detail","_GxIdeShareKb_selectedVersionHandler","selectKBVersionsCallback","result","length","map","kbVersion","localKbNameInputValue","versionsValueInput","kb","versionsPlaceholder","toString","versionSelectedFieldValue","oneVersionSelectedFieldValue","_GxIdeShareKb_versionsChangedHandler","enableSelectVersionsButton","_GxIdeShareKb_renderFooter","disableShareKbButton","onClick","part","footer","cancel","disabled","shareKB","Map","componentDidLoad","call","componentDidRender","componentDidRenderFirstTime","emit","componentName","componentWillLoad","Locale","getComponentStrings","el","render","Host","model","src","ref","chShortcutsEl","header","user","change","htmlFor","aliasLabel","onInput","placeholder","localKbNamePlaceholder","onChange","versionsLabel","readonly","versionsPlaceholderDisabled"],"sources":["src/components/team-dev/share-kb/share-kb.scss?tag=gx-ide-share-kb&encapsulation=shadow","src/components/team-dev/share-kb/share-kb.tsx"],"sourcesContent":[":host {\n display: grid;\n block-size: 100%;\n grid-template-rows: max-content 1fr max-content;\n}\n\n.section {\n display: contents;\n}\n\n// - - - - - - - - - - -\n// Header\n// - - - - - - - - - - -\n\nheader {\n display: grid;\n grid-template-rows: max-content;\n grid-template-columns: 1fr 1fr max-content;\n}\n\n.button-change {\n align-self: center;\n justify-self: end;\n}\n\n// - - - - - - - - - - -\n// Main\n// - - - - - - - - - - -\n\n.main {\n display: grid;\n grid-template-columns: 1fr;\n grid-template-rows: max-content 1fr max-content max-content;\n}\n\n.search-kbs {\n inline-size: 50%;\n}\n\n.versions-container {\n grid-auto-rows: max-content;\n\n &__input {\n display: grid;\n grid-template-columns: 1fr max-content;\n gap: var(--mer-spacing--xs);\n }\n}\n\n.button-icon-only.button-tertiary {\n border-color: var(--mer-color__neutral-gray--500);\n border-width: var(--mer-border__width--sm);\n border-radius: var(--mer-border__radius--sm);\n}\n\n.button-icon-only:hover {\n border-color: var(--mer-color__neutral-gray--100);\n}\n","// Stencil\nimport {\n Component,\n Host,\n h,\n Prop,\n Event,\n EventEmitter,\n Element,\n State,\n getAssetPath\n} from \"@stencil/core\";\n\n// Other Libraries\nimport { getIconPath, MercuryBundles } from \"@genexus/mercury\";\n\n// Custom Imports\nimport { config } from \"../../../common/config\";\nimport { GXServerConnectionData } from \"../connect-gx-server/connect-gx-server\";\nimport { FormSubmitResult } from \"../../../common/types\";\nimport {\n ControlValidation,\n validateControls\n} from \"../../../common/form-validation\";\nimport { Locale } from \"../../../common/locale\";\nimport { RadioGroupItemModel } from \"@genexus/chameleon-controls-library/dist/types/components/radio-group/types\";\nimport { ChEditCustomEvent } from \"@genexus/chameleon-controls-library\";\n\nconst CSS_BUNDLES: MercuryBundles = [\n \"resets/box-sizing\",\n \"utils/form--full\",\n \"utils/layout\",\n \"utils/typography\",\n \"utils/spacing\",\n \"components/list-box\",\n \"components/tooltip\",\n \"chameleon/scrollbar\"\n];\n\n@Component({\n tag: \"gx-ide-share-kb\",\n styleUrl: \"share-kb.scss\",\n shadow: true,\n assetsDirs: [\"gx-ide-assets/share-kb\"]\n})\nexport class GxIdeShareKb {\n #showMoreIcon = getIconPath({\n category: \"gemini-tools\",\n name: \"show-more-horizontal\",\n colorType: \"on-elevation\"\n });\n\n #versionsSelect: RadioGroupItemModel[] = [\n { value: \"Trunk\", caption: \"Trunk Version\" },\n { value: \"All\", caption: \"All Versions\" },\n { value: \"Select\", caption: \"Select Version\" }\n ];\n\n [key: string]: any;\n\n #_componentLocale: any;\n #kbVersions: KBVersion[] = [];\n #renderedFirstTime = false;\n #shortcutsSrc = getAssetPath(\n `./gx-ide-assets/create-kb-from-server/shortcuts.json`\n );\n #selectedKbId: string;\n\n #versionSelectedTypeEl: HTMLChRadioGroupRenderElement;\n\n @Element() el: HTMLGxIdeShareKbElement;\n\n #KBNameEl!: HTMLChEditElement;\n\n /**\n * State to enable/disable the select versions button\n */\n @State() enableSelectVersionsButton: boolean = false;\n\n @State() validatableControls = new Map<string, ControlValidation>();\n\n /**\n * The version selected type\n */\n @State() versionSelectedType: VersionOption;\n\n /**\n * String value to show the number of versions selected (\"N versions selected\")\n */\n @State() versionsValueInput: string = \"\";\n\n /**\n * Set of data required when executing any of the callbacks that require a connection to the server.\n */\n @Prop() readonly connectionData: GXServerConnectionData;\n\n /**\n * Callback that is invoked when the dialog is closed\n */\n @Prop() readonly cancelCallback!: () => Promise<void>;\n\n /**\n * The host reopens the gx-ide-connect-server login modal with the previous data, and closes the current modal\n */\n @Prop() readonly changeConnectionCallback: (\n data: GXServerConnectionData\n ) => Promise<void>;\n\n /**\n * The name of the KB.\n */\n @Prop({ mutable: true }) kbName: string;\n\n /**\n * Callback that must be invoked when the Share button is pressed.\n */\n @Prop() readonly shareKBCallback: (\n data: ShareKBData\n ) => Promise<FormSubmitResult>;\n\n /**\n * Callback invoked by pressing the ellipsis in the version selector. Receives the KB selected by the user, and displays the version selector dialog. Returns a list of versions chosen by the user.\n */\n @Prop() readonly selectKBVersionsCallback: (\n selectedKB: string\n ) => Promise<KBVersion[]>;\n\n /**\n * Emitted once just after the component is fully loaded and the first render() occurs\n */\n @Event() componentDidRenderFirstTime: EventEmitter<boolean>;\n\n componentDidLoad() {\n this.versionSelectedType = this.#versionSelectedTypeEl\n .value as VersionOption;\n\n this.#initializeValidatableControls();\n }\n\n componentDidRender() {\n if (!this.#renderedFirstTime) {\n this.componentDidRenderFirstTime.emit(\n this.#_componentLocale.componentName\n );\n this.#renderedFirstTime = true;\n }\n }\n\n async componentWillLoad() {\n this.#_componentLocale = await Locale.getComponentStrings(this.el);\n }\n\n #cancelHandler = (): void => {\n this.cancelCallback();\n };\n\n #changeConnectionHandler = async (): Promise<void> => {\n this.changeConnectionCallback({\n authenticationType: this.connectionData.authenticationType,\n serverUrl: this.connectionData.serverUrl,\n userName: this.connectionData.userName,\n userPassword: this.connectionData.userPassword\n });\n };\n\n #shareKBHandler = async (): Promise<void> => {\n if (this.versionSelectedType !== \"Select\") {\n this.#kbVersions = [];\n }\n this.shareKBCallback({\n name: this.kbName,\n serverUrl: this.connectionData.serverUrl,\n versionList: this.#kbVersions,\n allVersions: this.versionSelectedType === \"All\"\n }).then((formSubmitResult: FormSubmitResult) => {\n this.validatableControls = validateControls(\n formSubmitResult,\n this.validatableControls\n );\n });\n };\n\n // TODO: evaluate if this should be a global helper function.\n // It is used on other dialogs as well.\n #evaluateTooltipRender = (\n controlReference: HTMLElement\n ): HTMLChTooltipElement =>\n this.validatableControls?.get(controlReference?.id)?.hasError &&\n this.validatableControls.get(controlReference.id)?.message && (\n <ch-tooltip\n class=\"tooltip\"\n actionElement={controlReference as unknown as HTMLButtonElement}\n blockAlign={config.tooltipSettings.blockAlign}\n inlineAlign={config.tooltipSettings.inlineAlign}\n delay={config.tooltipSettings.delay}\n >\n {this.validatableControls.get(controlReference.id).message}\n </ch-tooltip>\n );\n\n #initializeValidatableControls = () => {\n // populate validatableControls with the controls that could have errors.\n const validatableControls: HTMLElement[] = [this.#KBNameEl];\n validatableControls.forEach(validatableControl => {\n if (validatableControl.id) {\n this.validatableControls.set(validatableControl.id, {\n reference: validatableControl,\n hasError: false,\n message: undefined\n });\n }\n });\n };\n\n #kbNameInputHandler = (event: ChEditCustomEvent<string> | InputEvent) => {\n this.kbName = event.detail as string;\n };\n\n #selectedVersionHandler = async () => {\n if (this.selectKBVersionsCallback) {\n await this.selectKBVersionsCallback(this.#selectedKbId).then(result => {\n if (result?.length) {\n this.#kbVersions = result.map(kbVersion => ({\n id: kbVersion.id,\n name: kbVersion.name\n }));\n\n if (result.length === 1 && this.#kbVersions[0].id === 0) {\n this.localKbNameInputValue = this.#selectedKbId;\n this.versionsValueInput =\n this.#_componentLocale.kb.versionsPlaceholder;\n } else if (result.length > 1) {\n this.localKbNameInputValue = this.#selectedKbId;\n this.versionsValueInput = `${result.length.toString()} ${\n this.#_componentLocale.kb.versionSelectedFieldValue\n }`;\n } else {\n this.localKbNameInputValue = `${this.#selectedKbId}_${\n this.#kbVersions[0].name\n }`;\n this.versionsValueInput = `${result[0].name} ${\n this.#_componentLocale.kb.oneVersionSelectedFieldValue\n }`;\n }\n }\n });\n }\n };\n\n #versionsChangedHandler = (event: CustomEvent<string>) => {\n this.versionSelectedType = event.detail as VersionOption;\n if (this.versionSelectedType === \"Select\") {\n this.enableSelectVersionsButton = true;\n } else {\n this.enableSelectVersionsButton = false;\n }\n };\n\n #renderFooter = () => {\n const disableShareKbButton = !this.kbName.length;\n return (\n <footer class=\"footer control-footer-with-border spacing-body-inline spacing-body-block-end\">\n <div class=\"buttons-spacer\">\n <button\n // cancel button\n class=\"button-secondary\"\n onClick={this.#cancelHandler}\n part=\"button button-cancel\"\n >\n {this.#_componentLocale.footer.cancel}\n </button>\n\n <button\n // share kb button\n class=\"button-primary\"\n onClick={!disableShareKbButton && this.#shareKBHandler}\n disabled={disableShareKbButton}\n part=\"button button-create-kb\"\n >\n {this.#_componentLocale.footer.shareKB}\n </button>\n </div>\n </footer>\n );\n };\n\n render(): void {\n return (\n <Host class=\"widget\">\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 <section class=\"section\">\n <header class=\"header control-header-with-border space-body spacing-body-inline spacing-body-block-start\">\n <div class=\"field field-block\">\n <label class=\"label\">\n {this.#_componentLocale.header.serverUrl}\n </label>\n <p>{this.connectionData.serverUrl}</p>\n </div>\n\n <div class=\"field field-block\">\n <label class=\"label\">{this.#_componentLocale.header.user}</label>\n <p>{this.connectionData.userName}</p>\n </div>\n\n <button\n class=\"button-tertiary button-change\"\n onClick={this.#changeConnectionHandler}\n >\n {this.#_componentLocale.header.change}\n </button>\n </header>\n\n <section class=\"main field-group spacing-body\">\n <div class=\"field field-block\">\n <label class=\"label\" htmlFor=\"alias\">\n {this.#_componentLocale.kb.aliasLabel}\n </label>\n <ch-edit\n // alias\n class=\"input\"\n id=\"kb-name\"\n value={this.kbName}\n onInput={this.#kbNameInputHandler}\n placeholder={this.#_componentLocale.kb.localKbNamePlaceholder}\n ref={(el: HTMLChEditElement) =>\n (this.#KBNameEl = el as HTMLChEditElement)\n }\n ></ch-edit>\n {this.#evaluateTooltipRender(this.#KBNameEl)}\n </div>\n\n <div class=\"versions-container field-group\">\n <ch-radio-group-render\n class=\"radio-group\"\n model={this.#versionsSelect}\n onChange={this.#versionsChangedHandler}\n value={this.#versionsSelect[0].value}\n ref={(el: HTMLChRadioGroupRenderElement) =>\n (this.#versionSelectedTypeEl =\n el as HTMLChRadioGroupRenderElement)\n }\n ></ch-radio-group-render>\n\n {this.versionSelectedType === \"Select\" && (\n <div class=\"versions-container__item field-group\">\n <div class=\"field field-block\">\n <label class=\"label\" htmlFor=\"control-id-1\">\n {this.#_componentLocale.kb.versionsLabel}\n </label>\n <div class=\"versions-container__input\">\n <ch-edit\n class=\"input\"\n readonly\n placeholder={\n this.enableSelectVersionsButton\n ? this.#_componentLocale.kb.versionsPlaceholder\n : this.#_componentLocale.kb\n .versionsPlaceholderDisabled\n }\n value={this.versionsValueInput}\n ></ch-edit>\n <button\n class=\"button-tertiary button-icon-only\"\n onClick={this.#selectedVersionHandler}\n disabled={!this.enableSelectVersionsButton}\n >\n <ch-image\n src={this.#showMoreIcon}\n class=\"icon-sm\"\n ></ch-image>\n </button>\n </div>\n </div>\n </div>\n )}\n </div>\n </section>\n\n {this.#renderFooter()}\n </section>\n </Host>\n );\n }\n}\n\nexport type KBData = {\n id: string;\n name: string;\n};\n\nexport type KBVersion = {\n id: number;\n name: string;\n type?: VersionType;\n};\n\nexport type ConnectionResultData = {\n formResult: FormSubmitResult;\n kbs: KBData[];\n};\n\nexport type ShareKBData = {\n name: string;\n serverUrl: string;\n versionList: KBVersion[];\n allVersions: boolean;\n};\n\nexport type VersionOption = \"Trunk\" | \"All\" | \"Select\";\n\nexport type VersionType = \"Branch\" | \"Frozen\";\n"],"mappings":"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"}
|