@genexus/genexus-ide-ui 3.0.2 → 3.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (100) hide show
  1. package/dist/cjs/genexus-ide-ui.cjs.js +1 -1
  2. package/dist/cjs/gx-ide-file-item.cjs.entry.js +21 -2
  3. package/dist/cjs/gx-ide-file-item.cjs.entry.js.map +1 -1
  4. package/dist/cjs/gx-ide-file-uploader.cjs.entry.js +11 -8
  5. package/dist/cjs/gx-ide-file-uploader.cjs.entry.js.map +1 -1
  6. package/dist/cjs/gx-ide-launchpad.cjs.entry.js +4 -16
  7. package/dist/cjs/gx-ide-launchpad.cjs.entry.js.map +1 -1
  8. package/dist/cjs/gx-ide-multi-select.cjs.entry.js +113 -0
  9. package/dist/cjs/gx-ide-multi-select.cjs.entry.js.map +1 -0
  10. package/dist/cjs/gx-ide-search.cjs.entry.js +171 -0
  11. package/dist/cjs/gx-ide-search.cjs.entry.js.map +1 -0
  12. package/dist/cjs/gx-ide-ww-files.cjs.entry.js +3 -4
  13. package/dist/cjs/gx-ide-ww-files.cjs.entry.js.map +1 -1
  14. package/dist/cjs/loader.cjs.js +1 -1
  15. package/dist/collection/collection-manifest.json +2 -0
  16. package/dist/collection/components/_helpers/multi-select/gx-ide-multi-select.css +193 -0
  17. package/dist/collection/components/_helpers/multi-select/gx-ide-multi-select.js +209 -0
  18. package/dist/collection/components/_helpers/multi-select/gx-ide-multi-select.js.map +1 -0
  19. package/dist/collection/components/file-uploader/file-item/file-item.css +23 -28
  20. package/dist/collection/components/file-uploader/file-item/file-item.js +37 -1
  21. package/dist/collection/components/file-uploader/file-item/file-item.js.map +1 -1
  22. package/dist/collection/components/file-uploader/file-uploader.css +11 -22
  23. package/dist/collection/components/file-uploader/file-uploader.js +10 -7
  24. package/dist/collection/components/file-uploader/file-uploader.js.map +1 -1
  25. package/dist/collection/components/file-uploader/gx-ide-assets/file-uploader/langs/file-uploader.lang.en.json +7 -3
  26. package/dist/collection/components/file-uploader/gx-ide-assets/file-uploader/langs/file-uploader.lang.ja.json +7 -3
  27. package/dist/collection/components/file-uploader/gx-ide-assets/file-uploader/langs/file-uploader.lang.zh.json +8 -3
  28. package/dist/collection/components/launchpad/root/gx-ide-assets/launchpad/shortcuts.json +1 -26
  29. package/dist/collection/components/launchpad/root/launchpad.js +5 -42
  30. package/dist/collection/components/launchpad/root/launchpad.js.map +1 -1
  31. package/dist/collection/components/search/gx-ide-assets/search/langs/search.lang.en.json +37 -0
  32. package/dist/collection/components/search/gx-ide-assets/search/langs/search.lang.ja.json +37 -0
  33. package/dist/collection/components/search/gx-ide-assets/search/langs/search.lang.zh.json +37 -0
  34. package/dist/collection/components/search/search.css +44 -0
  35. package/dist/collection/components/search/search.js +275 -0
  36. package/dist/collection/components/search/search.js.map +1 -0
  37. package/dist/collection/components/ww-files/ww-files.js +3 -4
  38. package/dist/collection/components/ww-files/ww-files.js.map +1 -1
  39. package/dist/collection/testing/locale.e2e.js +4 -1
  40. package/dist/collection/testing/locale.e2e.js.map +1 -1
  41. package/dist/components/file-item.js +22 -2
  42. package/dist/components/file-item.js.map +1 -1
  43. package/dist/components/gx-ide-file-uploader.js +11 -8
  44. package/dist/components/gx-ide-file-uploader.js.map +1 -1
  45. package/dist/components/gx-ide-launchpad.js +6 -19
  46. package/dist/components/gx-ide-launchpad.js.map +1 -1
  47. package/dist/components/gx-ide-multi-select.d.ts +11 -0
  48. package/dist/components/gx-ide-multi-select.js +132 -0
  49. package/dist/components/gx-ide-multi-select.js.map +1 -0
  50. package/dist/components/gx-ide-search.d.ts +11 -0
  51. package/dist/components/gx-ide-search.js +206 -0
  52. package/dist/components/gx-ide-search.js.map +1 -0
  53. package/dist/components/gx-ide-ww-files.js +3 -4
  54. package/dist/components/gx-ide-ww-files.js.map +1 -1
  55. package/dist/esm/genexus-ide-ui.js +1 -1
  56. package/dist/esm/gx-ide-file-item.entry.js +21 -2
  57. package/dist/esm/gx-ide-file-item.entry.js.map +1 -1
  58. package/dist/esm/gx-ide-file-uploader.entry.js +11 -8
  59. package/dist/esm/gx-ide-file-uploader.entry.js.map +1 -1
  60. package/dist/esm/gx-ide-launchpad.entry.js +5 -17
  61. package/dist/esm/gx-ide-launchpad.entry.js.map +1 -1
  62. package/dist/esm/gx-ide-multi-select.entry.js +109 -0
  63. package/dist/esm/gx-ide-multi-select.entry.js.map +1 -0
  64. package/dist/esm/gx-ide-search.entry.js +167 -0
  65. package/dist/esm/gx-ide-search.entry.js.map +1 -0
  66. package/dist/esm/gx-ide-ww-files.entry.js +3 -4
  67. package/dist/esm/gx-ide-ww-files.entry.js.map +1 -1
  68. package/dist/esm/loader.js +1 -1
  69. package/dist/genexus-ide-ui/genexus-ide-ui.esm.js +1 -1
  70. package/dist/genexus-ide-ui/genexus-ide-ui.esm.js.map +1 -1
  71. package/dist/genexus-ide-ui/gx-ide-assets/file-uploader/langs/file-uploader.lang.en.json +7 -3
  72. package/dist/genexus-ide-ui/gx-ide-assets/file-uploader/langs/file-uploader.lang.ja.json +7 -3
  73. package/dist/genexus-ide-ui/gx-ide-assets/file-uploader/langs/file-uploader.lang.zh.json +8 -3
  74. package/dist/genexus-ide-ui/gx-ide-assets/launchpad/shortcuts.json +1 -26
  75. package/dist/genexus-ide-ui/gx-ide-assets/search/langs/search.lang.en.json +37 -0
  76. package/dist/genexus-ide-ui/gx-ide-assets/search/langs/search.lang.ja.json +37 -0
  77. package/dist/genexus-ide-ui/gx-ide-assets/search/langs/search.lang.zh.json +37 -0
  78. package/dist/genexus-ide-ui/p-0745a565.entry.js +152 -0
  79. package/dist/genexus-ide-ui/p-0745a565.entry.js.map +1 -0
  80. package/dist/genexus-ide-ui/{p-6246204f.entry.js → p-25e749c7.entry.js} +44 -57
  81. package/dist/genexus-ide-ui/p-25e749c7.entry.js.map +1 -0
  82. package/dist/genexus-ide-ui/{p-50dae653.entry.js → p-7bdeae77.entry.js} +211 -213
  83. package/dist/genexus-ide-ui/p-7bdeae77.entry.js.map +1 -0
  84. package/dist/genexus-ide-ui/p-8b5c826b.entry.js +212 -0
  85. package/dist/genexus-ide-ui/p-8b5c826b.entry.js.map +1 -0
  86. package/dist/genexus-ide-ui/p-c460c9e7.entry.js +187 -0
  87. package/dist/genexus-ide-ui/p-c460c9e7.entry.js.map +1 -0
  88. package/dist/genexus-ide-ui/{p-aad714a5.entry.js → p-e2b88bea.entry.js} +70 -67
  89. package/dist/genexus-ide-ui/p-e2b88bea.entry.js.map +1 -0
  90. package/dist/types/components/_helpers/multi-select/gx-ide-multi-select.d.ts +29 -0
  91. package/dist/types/components/file-uploader/file-item/file-item.d.ts +2 -0
  92. package/dist/types/components/launchpad/root/launchpad.d.ts +0 -4
  93. package/dist/types/components/search/search.d.ts +60 -0
  94. package/dist/types/components.d.ts +121 -4
  95. package/package.json +1 -1
  96. package/dist/genexus-ide-ui/p-50dae653.entry.js.map +0 -1
  97. package/dist/genexus-ide-ui/p-6246204f.entry.js.map +0 -1
  98. package/dist/genexus-ide-ui/p-aad714a5.entry.js.map +0 -1
  99. package/dist/genexus-ide-ui/p-f3c3e830.entry.js +0 -163
  100. package/dist/genexus-ide-ui/p-f3c3e830.entry.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"file-item.js","sourceRoot":"","sources":["../../../../src/components/file-uploader/file-item/file-item.tsx"],"names":[],"mappings":"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","sourcesContent":["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-m\" />\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-m\" />\n </button>\n )}\n {!this.file.pending && (\n <button\n class=\"button-tertiary button-icon-only\"\n type=\"button\"\n onClick={this.#handleDelete}\n aria-label=\"Delete file\"\n >\n <ch-image src={DELETE_ICON} class=\"icon-m\" />\n </button>\n )}\n </div>\n\n {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-m\" />\n </button>\n </div>\n <div class=\"file-item__progress-bar\">\n <progress\n class=\"elevation-1\"\n value={this.file.progress}\n max=\"100\"\n />\n </div>\n </div>\n )}\n </div>\n );\n }\n}\n"]}
1
+ {"version":3,"file":"file-item.js","sourceRoot":"","sources":["../../../../src/components/file-uploader/file-item/file-item.tsx"],"names":[],"mappings":";;;;;;AAAA,OAAO,EACL,SAAS,EACT,CAAC,EACD,IAAI,EACJ,KAAK,EACL,KAAK,EAEL,KAAK,EACN,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,WAAW,EAAkB,MAAM,kBAAkB,CAAC;AAI/D,MAAM,SAAS,GAAG,WAAW,CAAC;IAC5B,QAAQ,EAAE,cAAc;IACxB,IAAI,EAAE,MAAM;IACZ,SAAS,EAAE,SAAS;CACrB,CAAC,CAAC;AAEH,MAAM,SAAS,GAAG,WAAW,CAAC;IAC5B,QAAQ,EAAE,cAAc;IACxB,IAAI,EAAE,MAAM;IACZ,SAAS,EAAE,SAAS;CACrB,CAAC,CAAC;AAEH,MAAM,WAAW,GAAG,WAAW,CAAC;IAC9B,QAAQ,EAAE,cAAc;IACxB,IAAI,EAAE,QAAQ;IACd,SAAS,EAAE,SAAS;CACrB,CAAC,CAAC;AAEH,MAAM,WAAW,GAAG,WAAW,CAAC;IAC9B,QAAQ,EAAE,cAAc;IACxB,IAAI,EAAE,OAAO;IACb,SAAS,EAAE,SAAS;CACrB,CAAC,CAAC;AAEH,MAAM,WAAW,GAAmB;IAClC,mBAAmB;IACnB,mBAAmB;IACnB,iBAAiB;IACjB,iBAAiB;IACjB,kBAAkB;IAClB,eAAe;IACf,YAAY;IACZ,cAAc;IACd,iBAAiB;CAClB,CAAC;AAOF,MAAM,OAAO,QAAQ;;QAyCnB,qCAAoB,CAAC,KAA6C,EAAE,EAAE;YACpE,MAAM,OAAO,GAAI,KAA6B,CAAC,MAAM,CAAC;YAEtD,IAAI,OAAO,IAAI,OAAO,KAAK,IAAI,CAAC,WAAW,EAAE;gBAC3C,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC;gBAC3B,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;oBACvB,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE;oBAChB,IAAI,EAAE,OAAO;iBACd,CAAC,CAAC;aACJ;QACH,CAAC,EAAC;QAEF,+BAAc,GAAG,EAAE;YACjB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACzB,CAAC,EAAC;QAEF,4BAA4B;QAC5B,iCAAgB,GAAG,EAAE;YACnB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACrC,CAAC,EAAC;QAEF,kCAAkC;QAClC,sCAAqB,CAAC,CAAa,EAAE,EAAE;YACrC,CAAC,CAAC,cAAc,EAAE,CAAC;YACnB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACrC,CAAC,EAAC;QAEF,+BAA+B;QAC/B,iCAAgB,GAAG,EAAE;YACnB,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACjB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;aACvB;QACH,CAAC,EAAC;;wBApEmC,KAAK;;;;yBAoBZ,KAAK;;;IANnC,kDAAkD;IAElD,gBAAgB,CAAC,OAAwB;QACvC,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAClC,CAAC;IAcD,iBAAiB;QACf,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IACpC,CAAC;IAoCD,MAAM;;QAEJ,MAAM,kBAAkB,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;QAC9C,MAAM,wBAAwB,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;QACnD,MAAM,OAAO,GAAG,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAEjD,IAAI,WAAmB,CAAC;QACxB,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACrB,WAAW,GAAG,CAAA,MAAA,MAAA,MAAA,MAAA,IAAI,CAAC,eAAe,0CAAE,QAAQ,0CAAE,kBAAkB,0CAC5D,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,0CACvC,OAAO,CAAC,gBAAgB,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,KAAI,IAAI,CAAC,WAAW,CAAC;SAClF;aAAM,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAC7B,WAAW,GAAG,CAAA,MAAA,MAAA,MAAA,IAAI,CAAC,eAAe,0CAAE,QAAQ,0CAAE,6BAA6B,0CACvE,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,KAAI,IAAI,CAAC,WAAW,CAAC;SACjE;aAAM;YACL,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;SAChC;QAED,OAAO,CACL,UAAI,KAAK,EAAE;gBACT,WAAW,EAAE,IAAI;gBACjB,4BAA4B,EAAE,CAAC,kBAAkB;gBACjD,yBAAyB,EAAE,kBAAkB;aAC9C,gBACa,WAAW;YAGvB,gBAAU,KAAK,EAAE,WAAW,GAAa;YAEzC,WAAK,KAAK,EAAC,iBAAiB;gBAC1B,gBAAU,QAAQ,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAC,QAAQ,GAAG,CACrE;YAEN,WAAK,KAAK,EAAC,iBAAiB,IACzB,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAChB,eACE,cAAc,EAAE,MAAA,MAAA,MAAA,IAAI,CAAC,eAAe,0CAAE,QAAQ,0CAAE,4BAA4B,0CACxE,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,EAC3C,KAAK,EAAE,IAAI,CAAC,WAAW,EACvB,SAAS,EAAE,IAAI,EACf,OAAO,EAAE,uBAAA,IAAI,kCAAkB,EAC/B,MAAM,EAAE,uBAAA,IAAI,4BAAY,EACxB,KAAK,EAAC,OAAO,EACb,EAAE,EAAE,OAAO,GACX,CACH,CAAC,CAAC,CAAC,CACF,YAAM,KAAK,EAAC,OAAO,EAAC,EAAE,EAAE,OAAO,IAAG,IAAI,CAAC,WAAW,CAAQ,CAC3D,CACG;YAEL,kBAAkB,CAAC,CAAC,CAAC,CACpB,WAAK,KAAK,EAAC,oBAAoB;gBAC5B,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,QAAQ,IAAI,CACtC,cACE,KAAK,EAAC,kCAAkC,EACxC,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,uBAAA,IAAI,8BAAc;oBAE3B,gBAAU,GAAG,EAAE,SAAS,EAAE,KAAK,EAAC,QAAQ,GAAG,CACpC,CACV;gBACA,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CACrB,cACE,KAAK,EAAC,kCAAkC,EACxC,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,uBAAA,IAAI,8BAAc,gBAChB,aAAa;oBAExB,gBAAU,GAAG,EAAE,WAAW,EAAE,KAAK,EAAC,QAAQ,GAAG,CACtC,CACV,CACG,CACP,CAAC,CAAC,CAAC,CACF,IAAI,CACL;YAEA,wBAAwB,IAAI,CAC3B,WAAK,KAAK,EAAC,+BAA+B;gBACxC,WAAK,KAAK,EAAC,4BAA4B;oBACrC,YAAM,KAAK,EAAC,oDAAoD;;wBACnD,IAAI,CAAC,WAAW;8BACtB;oBACP,4BACc,CAAA,MAAA,MAAA,MAAA,IAAI,CAAC,eAAe,0CAAE,QAAQ,0CAAE,2BAA2B,0CACnE,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,KAAI,eAAe,EAC9D,KAAK,EAAC,2DAA2D,EACjE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,uBAAA,IAAI,mCAAmB;wBAEhC,gBAAU,GAAG,EAAE,WAAW,EAAE,KAAK,EAAC,QAAQ,GAAG,CACtC,CACL;gBACN,WAAK,KAAK,EAAC,yBAAyB;oBAClC,gBACE,KAAK,EAAC,aAAa,EACnB,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EACzB,GAAG,EAAC,KAAK,qBACQ,OAAO,GACxB,CACE,CACF,CACP,CACE,CACN,CAAC;IACJ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACF","sourcesContent":["import {\n Component,\n h,\n Prop,\n State,\n Event,\n EventEmitter,\n Watch\n} from \"@stencil/core\";\nimport { getIconPath, MercuryBundles } from \"@genexus/mercury\";\nimport { ChEditCustomEvent } from \"@genexus/chameleon-controls-library\";\nimport { FileUploadState } from \"../types\";\n\nconst FILE_ICON = getIconPath({\n category: \"gemini-tools\",\n name: \"file\",\n colorType: \"primary\"\n});\n\nconst EDIT_ICON = getIconPath({\n category: \"gemini-tools\",\n name: \"edit\",\n colorType: \"primary\"\n});\n\nconst DELETE_ICON = getIconPath({\n category: \"gemini-tools\",\n name: \"delete\",\n colorType: \"primary\"\n});\n\nconst CANCEL_ICON = getIconPath({\n category: \"gemini-tools\",\n name: \"close\",\n colorType: \"primary\"\n});\n\nconst CSS_BUNDLES: MercuryBundles = [\n \"resets/box-sizing\",\n \"components/button\",\n \"components/icon\",\n \"components/edit\",\n \"utils/typography\",\n \"utils/spacing\",\n \"utils/form\",\n \"utils/layout\",\n \"utils/elevation\"\n];\n\n@Component({\n tag: \"gx-ide-file-item\",\n styleUrl: \"file-item.scss\",\n shadow: true\n})\nexport class FileItem {\n /** File state containing upload information */\n @Prop() readonly file!: FileUploadState;\n\n /** Whether the file name can be edited */\n @Prop() readonly editable: boolean = false;\n\n /** Component locale strings */\n @Prop() readonly componentLocale?: any;\n\n /** Callback when a file is deleted */\n @Prop() readonly fileDeletedCallback?: (fileId: string) => Promise<void>;\n\n /** Callback when a file deletion error occurs */\n @Prop() readonly fileDeletionErrorCallback?: (data: {\n fileName: string;\n error: string;\n }) => Promise<void>;\n\n /** Updates current name when file prop changes */\n @Watch(\"file\")\n handleFileChange(newFile: FileUploadState) {\n this.currentName = newFile.name;\n }\n\n @State() isEditing: boolean = false;\n @State() currentName: string;\n\n /** Emitted when the file name is changed */\n @Event() fileNameChange: EventEmitter<{ id: string; name: string }>;\n\n /** Emitted when the file is deleted */\n @Event() fileDelete: EventEmitter<string>;\n\n /** Emitted when the file upload is cancelled */\n @Event() fileCancel: EventEmitter<string>;\n\n componentWillLoad() {\n this.currentName = this.file.name;\n }\n\n #handleNameChange = (event: ChEditCustomEvent<string> | InputEvent) => {\n const newName = (event as CustomEvent<string>).detail;\n\n if (newName && newName !== this.currentName) {\n this.currentName = newName;\n this.fileNameChange.emit({\n id: this.file.id,\n name: newName\n });\n }\n };\n\n #handleBlur = () => {\n this.isEditing = false;\n };\n\n /** Handles file deletion */\n #handleDelete = () => {\n this.fileDelete.emit(this.file.id);\n };\n\n /** Handles upload cancellation */\n #handleCancelClick = (e: MouseEvent) => {\n e.preventDefault();\n this.fileCancel.emit(this.file.id);\n };\n\n /** Starts file name editing */\n #startEditing = () => {\n if (this.editable) {\n this.isEditing = true;\n }\n };\n\n render() {\n\n const displayItemActions = !this.file.pending;\n const displayProgressContainer = this.file.pending;\n const labelId = \"progress-label-\" + this.file.id;\n\n let liAriaLabel: string;\n if (this.file.pending) {\n liAriaLabel = this.componentLocale?.fileItem?.uploadingAriaLabel\n ?.replace(\"{fileName}\", this.currentName)\n ?.replace(\"{fileProgress}\", this.file.progress.toString()) || this.currentName;\n } else if (this.file.remoteId) {\n liAriaLabel = this.componentLocale?.fileItem?.uploadedSuccessfullyAriaLabel\n ?.replace(\"{fileName}\", this.currentName) || this.currentName;\n } else {\n liAriaLabel = this.currentName;\n }\n\n return (\n <li class={{\n \"file-item\": true,\n \"file-item--without-actions\": !displayItemActions,\n \"file-item--with-actions\": displayItemActions\n }}\n aria-label={liAriaLabel}\n >\n\n <ch-theme model={CSS_BUNDLES}></ch-theme>\n\n <div class=\"file-item__icon\">\n <ch-image disabled={!this.file.pending} src={FILE_ICON} class=\"icon-m\" />\n </div>\n\n <div class=\"file-item__name\">\n {this.isEditing ? (\n <ch-edit\n accessibleName={this.componentLocale?.fileItem?.editNamePlaceholderAriaLabel\n ?.replace(\"{fileName}\", this.currentName)}\n value={this.currentName}\n autoFocus={true}\n onInput={this.#handleNameChange}\n onBlur={this.#handleBlur}\n class=\"input\"\n id={labelId}\n />\n ) : (\n <span class=\"label\" id={labelId}>{this.currentName}</span>\n )}\n </div>\n\n {displayItemActions ? (\n <div class=\"file-item__actions\">\n {!this.file.pending && this.editable && (\n <button\n class=\"button-tertiary button-icon-only\"\n type=\"button\"\n onClick={this.#startEditing}\n >\n <ch-image src={EDIT_ICON} class=\"icon-m\" />\n </button>\n )}\n {!this.file.pending && (\n <button\n class=\"button-tertiary button-icon-only\"\n type=\"button\"\n onClick={this.#handleDelete}\n aria-label=\"Delete file\"\n >\n <ch-image src={DELETE_ICON} class=\"icon-m\" />\n </button>\n )}\n </div>\n ) : (\n null\n )}\n\n {displayProgressContainer && (\n <div class=\"file-item__progress-container\">\n <div class=\"file-item__progress-header\">\n <span class=\"file-item__uploading-text typography-body-italic-s\">\n Uploading {this.currentName}...\n </span>\n <button\n aria-label={this.componentLocale?.fileItem?.cancelUploadButtonAriaLabel\n ?.replace(\"{fileName}\", this.currentName) || \"Cancel upload\"}\n class=\"button-tertiary button-icon-only file-item__cancel-upload\"\n type=\"button\"\n onClick={this.#handleCancelClick}\n >\n <ch-image src={CANCEL_ICON} class=\"icon-m\" />\n </button>\n </div>\n <div class=\"file-item__progress-bar\">\n <progress\n class=\"elevation-1\"\n value={this.file.progress}\n max=\"100\"\n aria-labelledby={labelId}\n />\n </div>\n </div>\n )}\n </li>\n );\n }\n}\n"]}
@@ -119,26 +119,22 @@ button.button-secondary {
119
119
  }
120
120
 
121
121
  :host {
122
- display: block;
122
+ display: grid;
123
123
  inline-size: 100%;
124
124
  block-size: 100%;
125
- padding-inline-end: 0 !important;
126
125
  }
127
126
 
128
127
  .file-uploader-dialog {
129
- display: flex;
130
- flex-direction: column;
128
+ display: grid;
129
+ grid-template-rows: 1fr max-content;
131
130
  block-size: 100%;
131
+ min-block-size: 0;
132
132
  position: relative;
133
133
  }
134
134
  .file-uploader-dialog .dialog-content {
135
- flex: 1;
136
135
  min-block-size: 0;
137
136
  overflow: auto;
138
137
  }
139
- .file-uploader-dialog .dialog-footer {
140
- padding-inline-end: var(--spacing-body-inline-end);
141
- }
142
138
 
143
139
  .file-uploader {
144
140
  display: flex;
@@ -156,20 +152,20 @@ button.button-secondary {
156
152
  position: sticky;
157
153
  top: 0;
158
154
  z-index: 1;
159
- background-color: var(--color-accent-surface-elevation-1);
160
155
  display: flex;
161
156
  justify-content: space-between;
162
157
  align-items: center;
163
- padding-inline-end: var(--spacing-body-inline-end);
164
158
  }
165
159
  .file-uploader__list-content {
166
160
  flex: 1;
167
161
  overflow-y: auto;
168
162
  display: flex;
169
163
  flex-direction: column;
170
- gap: var(--spacing-gap-m);
171
- padding-inline-end: var(--spacing-body-inline-end);
172
- padding-block-end: 16px;
164
+ gap: var(--spacing-gap-l);
165
+ list-style: none;
166
+ margin: 0;
167
+ padding: 0;
168
+ padding-block-end: var(--spacing-padding-l);
173
169
  }
174
170
  .file-uploader__list-title-container {
175
171
  display: flex;
@@ -182,11 +178,8 @@ button.button-secondary {
182
178
  flex-direction: column;
183
179
  align-items: center;
184
180
  justify-content: center;
185
- inline-size: calc(100% - var(--spacing-body-inline-end));
186
- block-size: calc(100% - 12px);
187
- min-block-size: 200px;
188
- margin-block-end: 12px;
189
- background: var(--color-accent-surface-elevation-1);
181
+ inline-size: 100%;
182
+ block-size: 100%;
190
183
  border: 2px dashed var(--color-border-neutral-default);
191
184
  border-radius: 8px;
192
185
  transition: border-color 0.3s ease, background-color 0.3s ease, opacity 0.3s ease;
@@ -204,10 +197,6 @@ button.button-secondary {
204
197
  margin-block-start: 8px;
205
198
  }
206
199
 
207
- .hidden-input {
208
- display: none;
209
- }
210
-
211
200
  .label-primary-row {
212
201
  display: flex;
213
202
  align-items: center;
@@ -22,7 +22,7 @@ import { Host, h } from "@stencil/core";
22
22
  import { getIconPath } from "@genexus/mercury";
23
23
  import { Locale } from "../../common/locale";
24
24
  const PLUS_ICON = getIconPath({
25
- category: "gemini-tools",
25
+ category: "system",
26
26
  name: "add",
27
27
  colorType: "primary"
28
28
  });
@@ -310,19 +310,22 @@ export class FileUploader {
310
310
  this.fileStates.clear();
311
311
  }
312
312
  render() {
313
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;
314
- return (h(Host, { class: "widget" }, h("ch-theme", { model: CSS_BUNDLES }), h("input", { type: "file", class: "hidden-input", multiple: this.multiple, accept: (_a = this.types) === null || _a === void 0 ? void 0 : _a.map(type => (type.startsWith(".") ? type : `.${type}`)).join(","), onChange: __classPrivateFieldGet(this, _FileUploader_handleFileInput, "f"), ref: el => (__classPrivateFieldSet(this, _FileUploader_fileInputEl, el, "f")), "aria-hidden": "true", tabIndex: -1, style: { display: "none" } }), h("div", { class: "file-uploader-dialog" }, h("div", { class: "dialog-content" }, this.isDragging || this.fileStates.size === 0 ? (h("div", { class: {
315
- "file-uploader__drop-zone": true,
313
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p;
314
+ return (h(Host, { class: "widget" }, h("ch-theme", { model: CSS_BUNDLES }), h("input", { type: "file", hidden: true, multiple: this.multiple, accept: (_a = this.types) === null || _a === void 0 ? void 0 : _a.map(type => (type.startsWith(".") ? type : `.${type}`)).join(","), onChange: __classPrivateFieldGet(this, _FileUploader_handleFileInput, "f"), ref: el => (__classPrivateFieldSet(this, _FileUploader_fileInputEl, el, "f")), "aria-hidden": "true", tabIndex: -1 }), h("div", { class: "file-uploader-dialog" }, h("div", { class: "dialog-content" }, this.isDragging || this.fileStates.size === 0 ? (h("div", { class: {
315
+ "file-uploader__drop-zone elevation-1": true,
316
316
  "file-uploader__drop-zone--dragging": this.isDragging
317
317
  }, onDragEnter: __classPrivateFieldGet(this, _FileUploader_handleDragEnter, "f"), onDragLeave: __classPrivateFieldGet(this, _FileUploader_handleDragLeave, "f"), onDragOver: __classPrivateFieldGet(this, _FileUploader_handleDragOver, "f"), onDrop: __classPrivateFieldGet(this, _FileUploader_handleDrop, "f") }, h("button", { class: "button-tertiary button-icon-and-text", type: "button", onClick: __classPrivateFieldGet(this, _FileUploader_handleFileSelect, "f") }, h("ch-image", { class: "icon-m", src: PLUS_ICON }), h("label", { class: "label" }, this.multiple
318
318
  ? (_b = __classPrivateFieldGet(this, _FileUploader__componentLocale, "f")) === null || _b === void 0 ? void 0 : _b.header.uploadButtonMultiple
319
319
  : (_c = __classPrivateFieldGet(this, _FileUploader__componentLocale, "f")) === null || _c === void 0 ? void 0 : _c.header.uploadButtonSingle)), h("div", { class: "text-container" }, h("div", { class: "label-primary-row" }, h("label", { class: "label" }, this.label || ((_d = __classPrivateFieldGet(this, _FileUploader__componentLocale, "f")) === null || _d === void 0 ? void 0 : _d.header.orText)), h("label", { class: "label" }, (_e = __classPrivateFieldGet(this, _FileUploader__componentLocale, "f")) === null || _e === void 0 ? void 0 : _e.header.dragAndDrop)), h("span", { class: "caption" }, this.types && this.types.length > 0
320
320
  ? (_f = __classPrivateFieldGet(this, _FileUploader__componentLocale, "f")) === null || _f === void 0 ? void 0 : _f.header.acceptedFiles.replace("{0}", this.types.join(", "))
321
- : (_g = __classPrivateFieldGet(this, _FileUploader__componentLocale, "f")) === null || _g === void 0 ? void 0 : _g.header.allFilesAccepted)))) : (h("div", { class: "file-uploader__list" }, h("div", { class: "file-uploader__list-header spacing-body-block-end" }, h("div", { class: "file-uploader__list-title-container" }, h("label", { class: "label" }, this.label ||
321
+ : (_g = __classPrivateFieldGet(this, _FileUploader__componentLocale, "f")) === null || _g === void 0 ? void 0 : _g.header.allFilesAccepted)))) : (h("div", { class: "file-uploader__list" }, h("div", { class: "file-uploader__list-header elevation-1 spacing-body-block-end spacing-inline-end" }, h("div", { class: "file-uploader__list-title-container" }, h("label", { class: "label" }, this.label ||
322
322
  ((_h = __classPrivateFieldGet(this, _FileUploader__componentLocale, "f")) === null || _h === void 0 ? void 0 : _h.fileList.attachedFiles)), h("span", { class: "caption" }, (_j = __classPrivateFieldGet(this, _FileUploader__componentLocale, "f")) === null || _j === void 0 ? void 0 : _j.fileList.filesCount.replace("{0}", this.fileStates.size.toString()))), this.multiple && (h("button", { class: "button-tertiary button-icon-and-text", type: "button", onClick: __classPrivateFieldGet(this, _FileUploader_handleFileSelect, "f") }, h("ch-image", { class: "icon-m", src: PLUS_ICON }), h("label", { class: "label" }, this.multiple
323
323
  ? (_k = __classPrivateFieldGet(this, _FileUploader__componentLocale, "f")) === null || _k === void 0 ? void 0 : _k.header.uploadButtonMultiple
324
- : (_l = __classPrivateFieldGet(this, _FileUploader__componentLocale, "f")) === null || _l === void 0 ? void 0 : _l.header.uploadButtonSingle)))), h("div", { class: "file-uploader__list-content scrollable" }, Array.from(this.fileStates.values()).map(file => (h("gx-ide-file-item", { key: file.id, file: file, editable: this.canEditName, onFileNameChange: __classPrivateFieldGet(this, _FileUploader_handleNameChange, "f"), onFileDelete: __classPrivateFieldGet(this, _FileUploader_handleFileCancel, "f"), onFileCancel: __classPrivateFieldGet(this, _FileUploader_handleFileCancel, "f") }))))))), h("div", { class: "dialog-footer dialog-footer dialog-footer-with-border" }, h("div", { class: "buttons-spacer" }, h("button", { class: "button-secondary", type: "button", onClick: __classPrivateFieldGet(this, _FileUploader_handleCancel, "f") }, (_m = __classPrivateFieldGet(this, _FileUploader__componentLocale, "f")) === null || _m === void 0 ? void 0 : _m.buttons.cancel), h("button", { class: "button-primary", type: "button", onClick: __classPrivateFieldGet(this, _FileUploader_handleConfirm, "f"), disabled: this.fileStates.size === 0 ||
325
- Array.from(this.fileStates.values()).some(file => file.pending) }, (_o = __classPrivateFieldGet(this, _FileUploader__componentLocale, "f")) === null || _o === void 0 ? void 0 : _o.buttons.confirm))))));
324
+ : (_l = __classPrivateFieldGet(this, _FileUploader__componentLocale, "f")) === null || _l === void 0 ? void 0 : _l.header.uploadButtonSingle)))), h("ul", { class: "file-uploader__list-content scrollable spacing-inline-end spacing-block-end", "aria-live": "polite", "aria-label": (_m = __classPrivateFieldGet(this, _FileUploader__componentLocale, "f")) === null || _m === void 0 ? void 0 : _m.fileList.selectedFilesAriaLabel }, Array.from(this.fileStates.values()).map(file => (h("gx-ide-file-item", { key: file.id, file: file, editable: this.canEditName, componentLocale: __classPrivateFieldGet(this, _FileUploader__componentLocale, "f"), onFileNameChange: __classPrivateFieldGet(this, _FileUploader_handleNameChange, "f"), onFileDelete: __classPrivateFieldGet(this, _FileUploader_handleFileCancel, "f"), onFileCancel: __classPrivateFieldGet(this, _FileUploader_handleFileCancel, "f") }))))))), h("div", { class: {
325
+ "dialog-footer": true,
326
+ "dialog-footer-with-border": this.fileStates.size > 0
327
+ } }, h("div", { class: "buttons-spacer" }, h("button", { class: "button-secondary", type: "button", onClick: __classPrivateFieldGet(this, _FileUploader_handleCancel, "f") }, (_o = __classPrivateFieldGet(this, _FileUploader__componentLocale, "f")) === null || _o === void 0 ? void 0 : _o.buttons.cancel), h("button", { class: "button-primary", type: "button", onClick: __classPrivateFieldGet(this, _FileUploader_handleConfirm, "f"), disabled: this.fileStates.size === 0 ||
328
+ Array.from(this.fileStates.values()).some(file => file.pending) }, (_p = __classPrivateFieldGet(this, _FileUploader__componentLocale, "f")) === null || _p === void 0 ? void 0 : _p.buttons.confirm))))));
326
329
  }
327
330
  static get is() { return "gx-ide-file-uploader"; }
328
331
  static get encapsulation() { return "shadow"; }
@@ -1 +1 @@
1
- {"version":3,"file":"file-uploader.js","sourceRoot":"","sources":["../../../src/components/file-uploader/file-uploader.tsx"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @stencil-community/own-methods-must-be-private */\n/* eslint-disable @stencil-community/own-props-must-be-private */\n/* STENCIL IMPORTS */\nimport {\n Component,\n Host,\n h,\n Prop,\n Element,\n State,\n Method\n} from \"@stencil/core\";\n\nimport { MercuryBundles, getIconPath } from \"@genexus/mercury\";\nimport { Locale } from \"../../common/locale\";\nimport { UploadedFile, FileUploadState, UploadResult } from \"./types\";\n\nconst PLUS_ICON = getIconPath({\n category: \"gemini-tools\",\n name: \"add\",\n colorType: \"primary\"\n});\n\nconst CSS_BUNDLES: MercuryBundles = [\n \"resets/box-sizing\",\n \"components/button\",\n \"components/icon\",\n \"components/list-box\",\n \"components/edit\",\n \"utils/typography\",\n \"utils/spacing\",\n \"utils/form\",\n \"utils/layout\",\n \"utils/elevation\",\n \"chameleon/scrollbar\"\n];\n\ntype FileValidationResult = {\n isValid: boolean;\n error?: string;\n};\n\n@Component({\n tag: \"gx-ide-file-uploader\",\n styleUrl: \"file-uploader.scss\",\n shadow: true,\n assetsDirs: [\"gx-ide-assets/file-uploader\"]\n})\nexport class FileUploader {\n #_componentLocale: any;\n #fileInputEl!: HTMLInputElement;\n\n @Element() el!: HTMLGxIdeFileUploaderElement;\n\n /** Allowed file types/extensions (e.g. ['.jpg', '.png', 'image/*', 'application/pdf']) */\n @Prop() readonly types?: string[] = [];\n\n /** Whether multiple files can be selected */\n @Prop() readonly multiple: boolean = false;\n\n /** Whether file names can be edited */\n @Prop() readonly canEditName: boolean = false;\n\n /** Label to display in the uploader dialog */\n @Prop() readonly label?: string;\n\n /** Function to handle file upload */\n @Prop() readonly uploadFunction!: (\n file: File,\n progressCallback: (progress: number) => void\n ) => Promise<UploadResult>;\n\n /** Function to cancel file upload */\n @Prop() readonly cancelUploadFunction?: (fileId: string) => Promise<void>;\n\n /** Callback when a file is uploaded successfully */\n @Prop() readonly fileUploadedCallback?: (file: UploadedFile) => Promise<void>;\n\n /** Callback when the dialog is canceled */\n @Prop() readonly dialogCanceledCallback?: () => Promise<void>;\n\n /** Callback when the dialog is confirmed with files */\n @Prop() readonly dialogConfirmedCallback?: (\n files: UploadedFile[]\n ) => Promise<void>;\n\n /** Callback when upload is cancelled */\n @Prop() readonly uploadCancelledCallback?: (fileId: string) => Promise<void>;\n\n /** Callback when file is renamed */\n @Prop() readonly fileRenamedCallback?: (data: {\n fileId: string;\n newName: string;\n }) => Promise<void>;\n\n /** Callback when a file validation error occurs */\n @Prop() readonly fileValidationErrorCallback?: (data: {\n fileName: string;\n error: string;\n }) => Promise<void>;\n\n /** Callback when a file deletion error occurs */\n @Prop() readonly fileDeletionErrorCallback?: (data: {\n fileName: string;\n error: string;\n }) => Promise<void>;\n\n /** Callback when a file is deleted */\n @Prop() readonly fileDeletedCallback?: (file: UploadedFile) => Promise<void>;\n\n /** Callback before deleting a file to get confirmation */\n @Prop() readonly onBeforeDelete?: (file: UploadedFile) => Promise<boolean>;\n\n @State() private fileStates: Map<string, FileUploadState> = new Map();\n @State() private isDragging: boolean = false;\n #dragCounter = 0;\n\n /** Initializes component with locale strings */\n async componentWillLoad() {\n this.#_componentLocale = await Locale.getComponentStrings(this.el);\n }\n\n /** Generates a unique ID for file identification */\n #generateId = (): string => {\n return Math.random().toString(36).substr(2, 9);\n };\n\n /** Validates if a file matches the allowed types */\n #isValidFile(file: File): FileValidationResult {\n // If no types specified, accept any file\n if (!this.types || this.types.length === 0) {\n return { isValid: true };\n }\n\n for (const type of this.types) {\n // Handle wildcards like 'image/*'\n if (type.includes(\"/*\")) {\n const baseType = type.split(\"/\")[0];\n if (file.type.startsWith(baseType)) {\n return { isValid: true };\n }\n }\n // Handle extensions like '.jpg'\n else if (type.startsWith(\".\")) {\n if (file.name.toLowerCase().endsWith(type.toLowerCase())) {\n return { isValid: true };\n }\n }\n // Handle specific MIME types\n else if (file.type === type || file.type === `application/${type}`) {\n return { isValid: true };\n }\n }\n\n return {\n isValid: false,\n error:\n this.#_componentLocale?.errors?.invalidFileType || \"Invalid file type\"\n };\n }\n\n /** Filters valid files from a FileList */\n #getValidFiles(files: FileList): File[] {\n const validFiles: File[] = [];\n\n Array.from(files).forEach(file => {\n const validation = this.#isValidFile(file);\n if (validation.isValid) {\n validFiles.push(file);\n } else {\n this.fileValidationErrorCallback?.({\n fileName: file.name,\n error: validation.error\n });\n }\n });\n\n return validFiles;\n }\n\n /** Handles drag enter event */\n #handleDragEnter = (e: DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n this.#dragCounter++;\n this.isDragging = true;\n };\n\n /** Handles drag leave event */\n #handleDragLeave = (e: DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n this.#dragCounter--;\n if (this.#dragCounter === 0) {\n this.isDragging = false;\n }\n };\n\n /** Handles drag over event */\n #handleDragOver = (e: DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n };\n\n /** Handles drop event */\n #handleDrop = (e: DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n this.isDragging = false;\n this.#dragCounter = 0;\n\n const files = e.dataTransfer?.files;\n if (files) {\n this.#handleFiles(files);\n }\n };\n\n /** Triggers file input click */\n #handleFileSelect = () => {\n this.#fileInputEl?.click();\n };\n\n /** Handles file input change event */\n #handleFileInput = (e: Event) => {\n const files = (e.target as HTMLInputElement).files;\n if (files) {\n this.#handleFiles(files);\n }\n };\n\n /** Processes files and starts upload */\n #handleFiles = (files: FileList) => {\n const validFiles: File[] = this.#getValidFiles(files);\n\n validFiles.forEach(async file => {\n const id = this.#generateId();\n const fileState: FileUploadState = {\n id,\n name: file.name,\n file,\n pending: true,\n progress: 0\n };\n\n if (!this.multiple) {\n this.fileStates.clear();\n }\n\n this.fileStates = new Map(this.fileStates.set(id, fileState));\n\n if (this.uploadFunction) {\n try {\n const uploadPromise = this.uploadFunction(file, progress => {\n const state = this.fileStates.get(id);\n if (state) {\n const updatedState = {\n ...state,\n progress: progress,\n pending: progress < 100\n };\n this.fileStates = new Map(this.fileStates.set(id, updatedState));\n }\n });\n\n // Store the upload promise/object for potential cancellation\n const stateWithPromise = {\n ...this.fileStates.get(id),\n uploadPromise\n };\n this.fileStates = new Map(this.fileStates.set(id, stateWithPromise));\n\n const result = await uploadPromise;\n\n const state = this.fileStates.get(id);\n if (state) {\n if (result.success && result.remoteId) {\n const updatedState = {\n ...state,\n remoteId: result.remoteId,\n pending: false,\n progress: 100\n };\n this.fileStates = new Map(this.fileStates.set(id, updatedState));\n\n await this.fileUploadedCallback?.({\n name: state.name,\n originalName: state.file.name,\n remoteId: result.remoteId\n });\n } else {\n const updatedState = {\n ...state,\n error: result.errors?.upload || \"Upload failed\",\n pending: false\n };\n this.fileStates = new Map(this.fileStates.set(id, updatedState));\n }\n }\n } catch (error) {\n const state = this.fileStates.get(id);\n if (state) {\n const updatedState = {\n ...state,\n error:\n error instanceof Error\n ? error.message\n : \"Unknown error occurred\",\n pending: false\n };\n this.fileStates = new Map(this.fileStates.set(id, updatedState));\n }\n }\n }\n });\n\n if (this.#fileInputEl) {\n this.#fileInputEl.value = \"\";\n }\n };\n\n /** Handles file name change */\n #handleNameChange = async (\n event: CustomEvent<{ id: string; name: string }>\n ) => {\n const { id, name } = event.detail;\n const file = this.fileStates.get(id);\n\n if (file) {\n const updatedFile = {\n ...file,\n name: name.trim(),\n isEditing: false\n };\n\n this.fileStates = new Map(this.fileStates.set(id, updatedFile));\n await this.fileRenamedCallback?.({ fileId: id, newName: name.trim() });\n }\n };\n\n /** Handles individual file cancellation or deletion */\n #handleFileCancel = async (event: CustomEvent<string>) => {\n const id = event.detail;\n const state = this.fileStates.get(id);\n if (state) {\n try {\n if (state.pending) {\n // Cancel upload in progress\n if (\n state.uploadPromise &&\n typeof state.uploadPromise.cancel === \"function\"\n ) {\n state.uploadPromise.cancel();\n } else if (this.cancelUploadFunction) {\n await this.cancelUploadFunction(id);\n }\n\n await this.uploadCancelledCallback?.(id);\n\n this.fileStates.delete(id);\n this.fileStates = new Map(this.fileStates);\n } else {\n const fileToDelete: UploadedFile = {\n name: state.name,\n originalName: state.file.name,\n remoteId: state.remoteId\n };\n\n const shouldDelete = await this.onBeforeDelete?.(fileToDelete);\n\n if (shouldDelete) {\n await this.fileDeletedCallback?.(fileToDelete);\n this.fileStates.delete(id);\n this.fileStates = new Map(this.fileStates);\n }\n }\n } catch (error) {\n await this.fileDeletionErrorCallback?.({\n fileName: state.name,\n error:\n error instanceof Error ? error.message : \"Unknown error occurred\"\n });\n }\n }\n };\n\n /** Handles dialog confirmation */\n #handleConfirm = async () => {\n // Verificar si hay subidas en progreso\n const hasPendingUploads = Array.from(this.fileStates.values()).some(\n file => file.pending\n );\n\n if (hasPendingUploads) {\n return; // No permitir confirmar si hay subidas en progreso\n }\n\n // Obtener todos los archivos que están completamente subidos\n const uploadedFiles: UploadedFile[] = Array.from(this.fileStates.values())\n .filter(file => {\n const isValid = !file.pending && file.remoteId && !file.error;\n return isValid;\n })\n .map(file => ({\n name: file.name,\n originalName: file.file.name,\n remoteId: file.remoteId as string\n }));\n\n if (uploadedFiles.length > 0) {\n await this.dialogConfirmedCallback?.(uploadedFiles);\n }\n\n // Clear file states\n this.fileStates.clear();\n this.fileStates = new Map();\n\n // Reset file input\n if (this.#fileInputEl) {\n this.#fileInputEl.value = \"\";\n }\n };\n\n /** Handles dialog cancellation */\n #handleCancel = async () => {\n try {\n // Cancelamos todas las subidas en progreso\n for (const [id, state] of this.fileStates.entries()) {\n if (state.pending && this.cancelUploadFunction) {\n try {\n await this.cancelUploadFunction(id);\n await this.uploadCancelledCallback?.(id);\n } catch (error) {\n // Error handling for upload cancellation\n }\n }\n }\n\n // Limpiamos todos los estados\n this.fileStates.clear();\n this.fileStates = new Map();\n\n if (this.#fileInputEl) {\n this.#fileInputEl.value = \"\";\n }\n\n await this.dialogCanceledCallback?.();\n } catch (error) {\n this.fileStates.clear();\n this.fileStates = new Map();\n await this.dialogCanceledCallback?.();\n }\n };\n\n /** Clears the current file selection */\n @Method()\n async clear() {\n for (const [id, state] of this.fileStates.entries()) {\n if (state.pending && this.cancelUploadFunction) {\n try {\n await this.cancelUploadFunction(id);\n await this.uploadCancelledCallback?.(id);\n } catch (error) {\n // Error handling for upload cancellation\n }\n }\n }\n this.fileStates.clear();\n }\n\n render() {\n return (\n <Host class=\"widget\">\n <ch-theme model={CSS_BUNDLES}></ch-theme>\n <input\n type=\"file\"\n class=\"hidden-input\"\n multiple={this.multiple}\n accept={this.types\n ?.map(type => (type.startsWith(\".\") ? type : `.${type}`))\n .join(\",\")}\n onChange={this.#handleFileInput}\n ref={el => (this.#fileInputEl = el as HTMLInputElement)}\n aria-hidden=\"true\"\n tabIndex={-1}\n style={{ display: \"none\" }}\n />\n <div class=\"file-uploader-dialog\">\n <div class=\"dialog-content\">\n {this.isDragging || this.fileStates.size === 0 ? (\n <div\n class={{\n \"file-uploader__drop-zone\": true,\n \"file-uploader__drop-zone--dragging\": this.isDragging\n }}\n onDragEnter={this.#handleDragEnter}\n onDragLeave={this.#handleDragLeave}\n onDragOver={this.#handleDragOver}\n onDrop={this.#handleDrop}\n >\n <button\n class=\"button-tertiary button-icon-and-text\"\n type=\"button\"\n onClick={this.#handleFileSelect}\n >\n <ch-image class=\"icon-m\" src={PLUS_ICON}></ch-image>\n <label class=\"label\">\n {this.multiple\n ? this.#_componentLocale?.header.uploadButtonMultiple\n : this.#_componentLocale?.header.uploadButtonSingle}\n </label>\n </button>\n <div class=\"text-container\">\n <div class=\"label-primary-row\">\n <label class=\"label\">\n {this.label || this.#_componentLocale?.header.orText}\n </label>\n <label class=\"label\">\n {this.#_componentLocale?.header.dragAndDrop}\n </label>\n </div>\n <span class=\"caption\">\n {this.types && this.types.length > 0\n ? this.#_componentLocale?.header.acceptedFiles.replace(\n \"{0}\",\n this.types.join(\", \")\n )\n : this.#_componentLocale?.header.allFilesAccepted}\n </span>\n </div>\n </div>\n ) : (\n <div class=\"file-uploader__list\">\n <div class=\"file-uploader__list-header spacing-body-block-end\">\n <div class=\"file-uploader__list-title-container\">\n <label class=\"label\">\n {this.label ||\n this.#_componentLocale?.fileList.attachedFiles}\n </label>\n <span class=\"caption\">\n {this.#_componentLocale?.fileList.filesCount.replace(\n \"{0}\",\n this.fileStates.size.toString()\n )}\n </span>\n </div>\n {this.multiple && (\n <button\n class=\"button-tertiary button-icon-and-text\"\n type=\"button\"\n onClick={this.#handleFileSelect}\n >\n <ch-image class=\"icon-m\" src={PLUS_ICON}></ch-image>\n <label class=\"label\">\n {this.multiple\n ? this.#_componentLocale?.header.uploadButtonMultiple\n : this.#_componentLocale?.header.uploadButtonSingle}\n </label>\n </button>\n )}\n </div>\n <div class=\"file-uploader__list-content scrollable\">\n {Array.from(this.fileStates.values()).map(file => (\n <gx-ide-file-item\n key={file.id}\n file={file}\n editable={this.canEditName}\n onFileNameChange={this.#handleNameChange}\n onFileDelete={this.#handleFileCancel}\n onFileCancel={this.#handleFileCancel}\n />\n ))}\n </div>\n </div>\n )}\n </div>\n <div class=\"dialog-footer dialog-footer dialog-footer-with-border\">\n <div class=\"buttons-spacer\">\n <button\n class=\"button-secondary\"\n type=\"button\"\n onClick={this.#handleCancel}\n >\n {this.#_componentLocale?.buttons.cancel}\n </button>\n <button\n class=\"button-primary\"\n type=\"button\"\n onClick={this.#handleConfirm}\n disabled={\n this.fileStates.size === 0 ||\n Array.from(this.fileStates.values()).some(\n file => file.pending\n )\n }\n >\n {this.#_componentLocale?.buttons.confirm}\n </button>\n </div>\n </div>\n </div>\n </Host>\n );\n }\n}\n"]}
1
+ {"version":3,"file":"file-uploader.js","sourceRoot":"","sources":["../../../src/components/file-uploader/file-uploader.tsx"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @stencil-community/own-methods-must-be-private */\n/* eslint-disable @stencil-community/own-props-must-be-private */\n/* STENCIL IMPORTS */\nimport {\n Component,\n Host,\n h,\n Prop,\n Element,\n State,\n Method\n} from \"@stencil/core\";\n\nimport { MercuryBundles, getIconPath } from \"@genexus/mercury\";\nimport { Locale } from \"../../common/locale\";\nimport { UploadedFile, FileUploadState, UploadResult } from \"./types\";\n\nconst PLUS_ICON = getIconPath({\n category: \"system\",\n name: \"add\",\n colorType: \"primary\"\n});\n\nconst CSS_BUNDLES: MercuryBundles = [\n \"resets/box-sizing\",\n \"components/button\",\n \"components/icon\",\n \"components/list-box\",\n \"components/edit\",\n \"utils/typography\",\n \"utils/spacing\",\n \"utils/form\",\n \"utils/layout\",\n \"utils/elevation\",\n \"chameleon/scrollbar\"\n];\n\ntype FileValidationResult = {\n isValid: boolean;\n error?: string;\n};\n\n@Component({\n tag: \"gx-ide-file-uploader\",\n styleUrl: \"file-uploader.scss\",\n shadow: true,\n assetsDirs: [\"gx-ide-assets/file-uploader\"]\n})\nexport class FileUploader {\n #_componentLocale: any;\n #fileInputEl!: HTMLInputElement;\n\n @Element() el!: HTMLGxIdeFileUploaderElement;\n\n /** Allowed file types/extensions (e.g. ['.jpg', '.png', 'image/*', 'application/pdf']) */\n @Prop() readonly types?: string[] = [];\n\n /** Whether multiple files can be selected */\n @Prop() readonly multiple: boolean = false;\n\n /** Whether file names can be edited */\n @Prop() readonly canEditName: boolean = false;\n\n /** Label to display in the uploader dialog */\n @Prop() readonly label?: string;\n\n /** Function to handle file upload */\n @Prop() readonly uploadFunction!: (\n file: File,\n progressCallback: (progress: number) => void\n ) => Promise<UploadResult>;\n\n /** Function to cancel file upload */\n @Prop() readonly cancelUploadFunction?: (fileId: string) => Promise<void>;\n\n /** Callback when a file is uploaded successfully */\n @Prop() readonly fileUploadedCallback?: (file: UploadedFile) => Promise<void>;\n\n /** Callback when the dialog is canceled */\n @Prop() readonly dialogCanceledCallback?: () => Promise<void>;\n\n /** Callback when the dialog is confirmed with files */\n @Prop() readonly dialogConfirmedCallback?: (\n files: UploadedFile[]\n ) => Promise<void>;\n\n /** Callback when upload is cancelled */\n @Prop() readonly uploadCancelledCallback?: (fileId: string) => Promise<void>;\n\n /** Callback when file is renamed */\n @Prop() readonly fileRenamedCallback?: (data: {\n fileId: string;\n newName: string;\n }) => Promise<void>;\n\n /** Callback when a file validation error occurs */\n @Prop() readonly fileValidationErrorCallback?: (data: {\n fileName: string;\n error: string;\n }) => Promise<void>;\n\n /** Callback when a file deletion error occurs */\n @Prop() readonly fileDeletionErrorCallback?: (data: {\n fileName: string;\n error: string;\n }) => Promise<void>;\n\n /** Callback when a file is deleted */\n @Prop() readonly fileDeletedCallback?: (file: UploadedFile) => Promise<void>;\n\n /** Callback before deleting a file to get confirmation */\n @Prop() readonly onBeforeDelete?: (file: UploadedFile) => Promise<boolean>;\n\n @State() private fileStates: Map<string, FileUploadState> = new Map();\n @State() private isDragging: boolean = false;\n #dragCounter = 0;\n\n /** Initializes component with locale strings */\n async componentWillLoad() {\n this.#_componentLocale = await Locale.getComponentStrings(this.el);\n }\n\n /** Generates a unique ID for file identification */\n #generateId = (): string => {\n return Math.random().toString(36).substr(2, 9);\n };\n\n /** Validates if a file matches the allowed types */\n #isValidFile(file: File): FileValidationResult {\n // If no types specified, accept any file\n if (!this.types || this.types.length === 0) {\n return { isValid: true };\n }\n\n for (const type of this.types) {\n // Handle wildcards like 'image/*'\n if (type.includes(\"/*\")) {\n const baseType = type.split(\"/\")[0];\n if (file.type.startsWith(baseType)) {\n return { isValid: true };\n }\n }\n // Handle extensions like '.jpg'\n else if (type.startsWith(\".\")) {\n if (file.name.toLowerCase().endsWith(type.toLowerCase())) {\n return { isValid: true };\n }\n }\n // Handle specific MIME types\n else if (file.type === type || file.type === `application/${type}`) {\n return { isValid: true };\n }\n }\n\n return {\n isValid: false,\n error:\n this.#_componentLocale?.errors?.invalidFileType || \"Invalid file type\"\n };\n }\n\n /** Filters valid files from a FileList */\n #getValidFiles(files: FileList): File[] {\n const validFiles: File[] = [];\n\n Array.from(files).forEach(file => {\n const validation = this.#isValidFile(file);\n if (validation.isValid) {\n validFiles.push(file);\n } else {\n this.fileValidationErrorCallback?.({\n fileName: file.name,\n error: validation.error\n });\n }\n });\n\n return validFiles;\n }\n\n /** Handles drag enter event */\n #handleDragEnter = (e: DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n this.#dragCounter++;\n this.isDragging = true;\n };\n\n /** Handles drag leave event */\n #handleDragLeave = (e: DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n this.#dragCounter--;\n if (this.#dragCounter === 0) {\n this.isDragging = false;\n }\n };\n\n /** Handles drag over event */\n #handleDragOver = (e: DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n };\n\n /** Handles drop event */\n #handleDrop = (e: DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n this.isDragging = false;\n this.#dragCounter = 0;\n\n const files = e.dataTransfer?.files;\n if (files) {\n this.#handleFiles(files);\n }\n };\n\n /** Triggers file input click */\n #handleFileSelect = () => {\n this.#fileInputEl?.click();\n };\n\n /** Handles file input change event */\n #handleFileInput = (e: Event) => {\n const files = (e.target as HTMLInputElement).files;\n if (files) {\n this.#handleFiles(files);\n }\n };\n\n /** Processes files and starts upload */\n #handleFiles = (files: FileList) => {\n const validFiles: File[] = this.#getValidFiles(files);\n\n validFiles.forEach(async file => {\n const id = this.#generateId();\n const fileState: FileUploadState = {\n id,\n name: file.name,\n file,\n pending: true,\n progress: 0\n };\n\n if (!this.multiple) {\n this.fileStates.clear();\n }\n\n this.fileStates = new Map(this.fileStates.set(id, fileState));\n\n if (this.uploadFunction) {\n try {\n const uploadPromise = this.uploadFunction(file, progress => {\n const state = this.fileStates.get(id);\n if (state) {\n const updatedState = {\n ...state,\n progress: progress,\n pending: progress < 100\n };\n this.fileStates = new Map(this.fileStates.set(id, updatedState));\n }\n });\n\n // Store the upload promise/object for potential cancellation\n const stateWithPromise = {\n ...this.fileStates.get(id),\n uploadPromise\n };\n this.fileStates = new Map(this.fileStates.set(id, stateWithPromise));\n\n const result = await uploadPromise;\n\n const state = this.fileStates.get(id);\n if (state) {\n if (result.success && result.remoteId) {\n const updatedState = {\n ...state,\n remoteId: result.remoteId,\n pending: false,\n progress: 100\n };\n this.fileStates = new Map(this.fileStates.set(id, updatedState));\n\n await this.fileUploadedCallback?.({\n name: state.name,\n originalName: state.file.name,\n remoteId: result.remoteId\n });\n } else {\n const updatedState = {\n ...state,\n error: result.errors?.upload || \"Upload failed\",\n pending: false\n };\n this.fileStates = new Map(this.fileStates.set(id, updatedState));\n }\n }\n } catch (error) {\n const state = this.fileStates.get(id);\n if (state) {\n const updatedState = {\n ...state,\n error:\n error instanceof Error\n ? error.message\n : \"Unknown error occurred\",\n pending: false\n };\n this.fileStates = new Map(this.fileStates.set(id, updatedState));\n }\n }\n }\n });\n\n if (this.#fileInputEl) {\n this.#fileInputEl.value = \"\";\n }\n };\n\n /** Handles file name change */\n #handleNameChange = async (\n event: CustomEvent<{ id: string; name: string }>\n ) => {\n const { id, name } = event.detail;\n const file = this.fileStates.get(id);\n\n if (file) {\n const updatedFile = {\n ...file,\n name: name.trim(),\n isEditing: false\n };\n\n this.fileStates = new Map(this.fileStates.set(id, updatedFile));\n await this.fileRenamedCallback?.({ fileId: id, newName: name.trim() });\n }\n };\n\n /** Handles individual file cancellation or deletion */\n #handleFileCancel = async (event: CustomEvent<string>) => {\n const id = event.detail;\n const state = this.fileStates.get(id);\n if (state) {\n try {\n if (state.pending) {\n // Cancel upload in progress\n if (\n state.uploadPromise &&\n typeof state.uploadPromise.cancel === \"function\"\n ) {\n state.uploadPromise.cancel();\n } else if (this.cancelUploadFunction) {\n await this.cancelUploadFunction(id);\n }\n\n await this.uploadCancelledCallback?.(id);\n\n this.fileStates.delete(id);\n this.fileStates = new Map(this.fileStates);\n } else {\n const fileToDelete: UploadedFile = {\n name: state.name,\n originalName: state.file.name,\n remoteId: state.remoteId\n };\n\n const shouldDelete = await this.onBeforeDelete?.(fileToDelete);\n\n if (shouldDelete) {\n await this.fileDeletedCallback?.(fileToDelete);\n this.fileStates.delete(id);\n this.fileStates = new Map(this.fileStates);\n }\n }\n } catch (error) {\n await this.fileDeletionErrorCallback?.({\n fileName: state.name,\n error:\n error instanceof Error ? error.message : \"Unknown error occurred\"\n });\n }\n }\n };\n\n /** Handles dialog confirmation */\n #handleConfirm = async () => {\n // Verificar si hay subidas en progreso\n const hasPendingUploads = Array.from(this.fileStates.values()).some(\n file => file.pending\n );\n\n if (hasPendingUploads) {\n return; // No permitir confirmar si hay subidas en progreso\n }\n\n // Obtener todos los archivos que están completamente subidos\n const uploadedFiles: UploadedFile[] = Array.from(this.fileStates.values())\n .filter(file => {\n const isValid = !file.pending && file.remoteId && !file.error;\n return isValid;\n })\n .map(file => ({\n name: file.name,\n originalName: file.file.name,\n remoteId: file.remoteId as string\n }));\n\n if (uploadedFiles.length > 0) {\n await this.dialogConfirmedCallback?.(uploadedFiles);\n }\n\n // Clear file states\n this.fileStates.clear();\n this.fileStates = new Map();\n\n // Reset file input\n if (this.#fileInputEl) {\n this.#fileInputEl.value = \"\";\n }\n };\n\n /** Handles dialog cancellation */\n #handleCancel = async () => {\n try {\n // Cancelamos todas las subidas en progreso\n for (const [id, state] of this.fileStates.entries()) {\n if (state.pending && this.cancelUploadFunction) {\n try {\n await this.cancelUploadFunction(id);\n await this.uploadCancelledCallback?.(id);\n } catch (error) {\n // Error handling for upload cancellation\n }\n }\n }\n\n // Limpiamos todos los estados\n this.fileStates.clear();\n this.fileStates = new Map();\n\n if (this.#fileInputEl) {\n this.#fileInputEl.value = \"\";\n }\n\n await this.dialogCanceledCallback?.();\n } catch (error) {\n this.fileStates.clear();\n this.fileStates = new Map();\n await this.dialogCanceledCallback?.();\n }\n };\n\n /** Clears the current file selection */\n @Method()\n async clear() {\n for (const [id, state] of this.fileStates.entries()) {\n if (state.pending && this.cancelUploadFunction) {\n try {\n await this.cancelUploadFunction(id);\n await this.uploadCancelledCallback?.(id);\n } catch (error) {\n // Error handling for upload cancellation\n }\n }\n }\n this.fileStates.clear();\n }\n\n render() {\n return (\n <Host class=\"widget\">\n <ch-theme model={CSS_BUNDLES}></ch-theme>\n {/* Native file input required: ch-edit is for text only; no Chameleon file picker. */}\n <input\n type=\"file\"\n hidden\n multiple={this.multiple}\n accept={this.types\n ?.map(type => (type.startsWith(\".\") ? type : `.${type}`))\n .join(\",\")}\n onChange={this.#handleFileInput}\n ref={el => (this.#fileInputEl = el as HTMLInputElement)}\n aria-hidden=\"true\"\n tabIndex={-1}\n />\n <div class=\"file-uploader-dialog\">\n <div class=\"dialog-content\">\n {this.isDragging || this.fileStates.size === 0 ? (\n <div\n class={{\n \"file-uploader__drop-zone elevation-1\": true,\n \"file-uploader__drop-zone--dragging\": this.isDragging\n }}\n onDragEnter={this.#handleDragEnter}\n onDragLeave={this.#handleDragLeave}\n onDragOver={this.#handleDragOver}\n onDrop={this.#handleDrop}\n >\n <button\n class=\"button-tertiary button-icon-and-text\"\n type=\"button\"\n onClick={this.#handleFileSelect}\n >\n <ch-image class=\"icon-m\" src={PLUS_ICON}></ch-image>\n <label class=\"label\">\n {this.multiple\n ? this.#_componentLocale?.header.uploadButtonMultiple\n : this.#_componentLocale?.header.uploadButtonSingle}\n </label>\n </button>\n <div class=\"text-container\">\n <div class=\"label-primary-row\">\n <label class=\"label\">\n {this.label || this.#_componentLocale?.header.orText}\n </label>\n <label class=\"label\">\n {this.#_componentLocale?.header.dragAndDrop}\n </label>\n </div>\n <span class=\"caption\">\n {this.types && this.types.length > 0\n ? this.#_componentLocale?.header.acceptedFiles.replace(\n \"{0}\",\n this.types.join(\", \")\n )\n : this.#_componentLocale?.header.allFilesAccepted}\n </span>\n </div>\n </div>\n ) : (\n <div class=\"file-uploader__list\">\n <div class=\"file-uploader__list-header elevation-1 spacing-body-block-end spacing-inline-end\">\n <div class=\"file-uploader__list-title-container\">\n <label class=\"label\">\n {this.label ||\n this.#_componentLocale?.fileList.attachedFiles}\n </label>\n <span class=\"caption\">\n {this.#_componentLocale?.fileList.filesCount.replace(\n \"{0}\",\n this.fileStates.size.toString()\n )}\n </span>\n </div>\n {this.multiple && (\n <button\n class=\"button-tertiary button-icon-and-text\"\n type=\"button\"\n onClick={this.#handleFileSelect}\n >\n <ch-image class=\"icon-m\" src={PLUS_ICON}></ch-image>\n <label class=\"label\">\n {this.multiple\n ? this.#_componentLocale?.header.uploadButtonMultiple\n : this.#_componentLocale?.header.uploadButtonSingle}\n </label>\n </button>\n )}\n </div>\n <ul\n class=\"file-uploader__list-content scrollable spacing-inline-end spacing-block-end\"\n aria-live=\"polite\"\n aria-label={this.#_componentLocale?.fileList.selectedFilesAriaLabel}\n >\n {Array.from(this.fileStates.values()).map(file => (\n <gx-ide-file-item\n key={file.id}\n file={file}\n editable={this.canEditName}\n componentLocale={this.#_componentLocale}\n onFileNameChange={this.#handleNameChange}\n onFileDelete={this.#handleFileCancel}\n onFileCancel={this.#handleFileCancel}\n />\n ))}\n </ul>\n </div>\n )}\n </div>\n <div class={{\n \"dialog-footer\": true,\n \"dialog-footer-with-border\": this.fileStates.size > 0\n }}>\n <div class=\"buttons-spacer\">\n <button\n class=\"button-secondary\"\n type=\"button\"\n onClick={this.#handleCancel}\n >\n {this.#_componentLocale?.buttons.cancel}\n </button>\n <button\n class=\"button-primary\"\n type=\"button\"\n onClick={this.#handleConfirm}\n disabled={\n this.fileStates.size === 0 ||\n Array.from(this.fileStates.values()).some(\n file => file.pending\n )\n }\n >\n {this.#_componentLocale?.buttons.confirm}\n </button>\n </div>\n </div>\n </div>\n </Host>\n );\n }\n}\n"]}
@@ -10,13 +10,17 @@
10
10
  },
11
11
  "fileList": {
12
12
  "attachedFiles": "Attached files",
13
- "filesCount": "{0} file(s) attached"
13
+ "filesCount": "{0} file(s) attached",
14
+ "selectedFilesAriaLabel": "Selected files"
14
15
  },
15
16
  "fileItem": {
16
17
  "editButtonAriaLabel": "Edit file name",
17
18
  "deleteButtonAriaLabel": "Delete file",
18
- "cancelUploadButtonAriaLabel": "Cancel upload",
19
- "editNameAriaLabel": "Edit file name"
19
+ "cancelUploadButtonAriaLabel": "Cancel upload of {fileName}",
20
+ "editNameAriaLabel": "Edit file name",
21
+ "editNamePlaceholderAriaLabel": "Edit {fileName} file name",
22
+ "uploadingAriaLabel": "{fileName}, Uploading... {fileProgress}%",
23
+ "uploadedSuccessfullyAriaLabel": "{fileName}, Uploaded successfully"
20
24
  },
21
25
  "buttons": {
22
26
  "cancel": "Cancel",
@@ -10,13 +10,17 @@
10
10
  },
11
11
  "fileList": {
12
12
  "attachedFiles": "添付ファイル",
13
- "filesCount": "添付ファイル数: {0}"
13
+ "filesCount": "添付ファイル数: {0}",
14
+ "selectedFilesAriaLabel": "選択されたファイル"
14
15
  },
15
16
  "fileItem": {
16
17
  "editButtonAriaLabel": "ファイル名を編集",
17
18
  "deleteButtonAriaLabel": "ファイルを削除",
18
- "cancelUploadButtonAriaLabel": "アップロードをキャンセル",
19
- "editNameAriaLabel": "ファイル名を編集"
19
+ "cancelUploadButtonAriaLabel": "{fileName} のアップロードをキャンセル",
20
+ "editNameAriaLabel": "ファイル名を編集",
21
+ "editNamePlaceholderAriaLabel": "{fileName} ファイル名を編集",
22
+ "uploadingAriaLabel": "{fileName}、アップロード中... {fileProgress}%",
23
+ "uploadedSuccessfullyAriaLabel": "{fileName}、アップロード成功"
20
24
  },
21
25
  "buttons": {
22
26
  "cancel": "キャンセル",
@@ -10,13 +10,18 @@
10
10
  },
11
11
  "fileList": {
12
12
  "attachedFiles": "Attached files",
13
- "filesCount": "{0} file(s) attached"
13
+ "filesCount": "{0} file(s) attached",
14
+ "selectedFilesAriaLabel": "Selected files"
14
15
  },
15
16
  "fileItem": {
16
17
  "editButtonAriaLabel": "Edit file name",
17
18
  "deleteButtonAriaLabel": "Delete file",
18
- "cancelUploadButtonAriaLabel": "Cancel upload",
19
- "editNameAriaLabel": "Edit file name"
19
+ "cancelUploadButtonAriaLabel": "Cancel upload of {fileName}",
20
+ "editNameAriaLabel": "Edit file name",
21
+ "editNamePlaceholderAriaLabel": "Edit {fileName} file name",
22
+ "uploadingAriaLabel": "{fileName},上传中... {fileProgress}%",
23
+ "uploadedSuccessfullyAriaLabel": "{fileName},上传成功"
24
+
20
25
  },
21
26
  "buttons": {
22
27
  "cancel": "Cancel",
@@ -1,26 +1 @@
1
- [
2
- {
3
- "selector": "[part~='tab-web-apps']",
4
- "keyShortcuts": "1",
5
- "action": "click",
6
- "conditions": {
7
- "focusExclude": "[part~='tab-native-apps'], [part~='tab-apis']"
8
- }
9
- },
10
- {
11
- "selector": "[part~='tab-native-apps']",
12
- "keyShortcuts": "2",
13
- "action": "click",
14
- "conditions": {
15
- "focusExclude": "[part~='tab-web-apps'], [part~='tab-apis']"
16
- }
17
- },
18
- {
19
- "selector": "[part~='tab-apis']",
20
- "keyShortcuts": "3",
21
- "action": "click",
22
- "conditions": {
23
- "focusExclude": "[part~='tab-web-apps'], [part~='tab-native-apps']"
24
- }
25
- }
26
- ]
1
+ []
@@ -14,8 +14,8 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
14
14
  throw new TypeError("Cannot read private member from an object whose class did not declare it");
15
15
  return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
16
16
  };
17
- var _GxIdeLaunchpad_chShortcutsEl, _GxIdeLaunchpad_shortcutsSrc, _GxIdeLaunchpad_componentLocale;
18
- import { Host, getAssetPath, h } from "@stencil/core";
17
+ var _GxIdeLaunchpad_componentLocale;
18
+ import { Host, h } from "@stencil/core";
19
19
  import { Locale } from "../../../common/locale";
20
20
  const CSS_BUNDLES = [
21
21
  "resets/box-sizing",
@@ -34,8 +34,6 @@ const APIS_TAB_SELECTOR = "apis";
34
34
  const TAB_SLOT_SPACING_BODY_SELECTOR = "tab-slot-spacing-body";
35
35
  export class GxIdeLaunchpad {
36
36
  constructor() {
37
- _GxIdeLaunchpad_chShortcutsEl.set(this, void 0);
38
- _GxIdeLaunchpad_shortcutsSrc.set(this, getAssetPath(`./gx-ide-assets/launchpad/shortcuts.json`));
39
37
  _GxIdeLaunchpad_componentLocale.set(this, void 0);
40
38
  this.data = undefined;
41
39
  this.isStandalone = true;
@@ -66,17 +64,6 @@ export class GxIdeLaunchpad {
66
64
  }
67
65
  }
68
66
  componentDidLoad() { }
69
- /**
70
- * Suspends or reactivates the shortcuts
71
- */
72
- async suspendShortcuts(suspendShortcuts) {
73
- if (suspendShortcuts) {
74
- __classPrivateFieldGet(this, _GxIdeLaunchpad_chShortcutsEl, "f").suspend = true;
75
- }
76
- else {
77
- __classPrivateFieldGet(this, _GxIdeLaunchpad_chShortcutsEl, "f").suspend = false;
78
- }
79
- }
80
67
  /**
81
68
  * Organizes received data and builds tab model
82
69
  */
@@ -156,7 +143,8 @@ export class GxIdeLaunchpad {
156
143
  if (!this.data || !this.sections || this.sections.length === 0) {
157
144
  return null;
158
145
  }
159
- return (h(Host, null, h("ch-theme", { model: CSS_BUNDLES }), h("ch-shortcuts", { src: __classPrivateFieldGet(this, _GxIdeLaunchpad_shortcutsSrc, "f"), ref: (el) => (__classPrivateFieldSet(this, _GxIdeLaunchpad_chShortcutsEl, el, "f")) }), h("ch-tab-render", { class: {
146
+ // TODO: Revisit re-enabling keyboard shortcuts 1, 2, 3 for switching launchpad tabs (Web Apps, Native Apps, APIs)
147
+ return (h(Host, null, h("ch-theme", { model: CSS_BUNDLES }), h("ch-tab-render", { class: {
160
148
  scrollable: true,
161
149
  tab: true,
162
150
  [MAIN_SECTION_CLASSES]: true
@@ -286,31 +274,6 @@ export class GxIdeLaunchpad {
286
274
  }
287
275
  }];
288
276
  }
289
- static get methods() {
290
- return {
291
- "suspendShortcuts": {
292
- "complexType": {
293
- "signature": "(suspendShortcuts: boolean) => Promise<void>",
294
- "parameters": [{
295
- "name": "suspendShortcuts",
296
- "type": "boolean",
297
- "docs": ""
298
- }],
299
- "references": {
300
- "Promise": {
301
- "location": "global",
302
- "id": "global::Promise"
303
- }
304
- },
305
- "return": "Promise<void>"
306
- },
307
- "docs": {
308
- "text": "Suspends or reactivates the shortcuts",
309
- "tags": []
310
- }
311
- }
312
- };
313
- }
314
277
  static get elementRef() { return "el"; }
315
278
  static get watchers() {
316
279
  return [{
@@ -319,5 +282,5 @@ export class GxIdeLaunchpad {
319
282
  }];
320
283
  }
321
284
  }
322
- _GxIdeLaunchpad_chShortcutsEl = new WeakMap(), _GxIdeLaunchpad_shortcutsSrc = new WeakMap(), _GxIdeLaunchpad_componentLocale = new WeakMap();
285
+ _GxIdeLaunchpad_componentLocale = new WeakMap();
323
286
  //# sourceMappingURL=launchpad.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"launchpad.js","sourceRoot":"","sources":["../../../../src/components/launchpad/root/launchpad.tsx"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,EACL,SAAS,EACT,IAAI,EACJ,IAAI,EACJ,OAAO,EACP,KAAK,EACL,YAAY,EACZ,MAAM,EACN,CAAC,EACD,KAAK,EACL,KAAK,EAEN,MAAM,eAAe,CAAC;AAIvB,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAEhD,MAAM,WAAW,GAAmB;IAClC,mBAAmB;IACnB,gBAAgB;IAChB,kBAAkB;IAClB,cAAc;IACd,kBAAkB;IAClB,eAAe;IACf,qBAAqB;CACtB,CAAC;AAEF,MAAM,oBAAoB,GAAW,MAAM,CAAC;AAC5C,MAAM,qBAAqB,GAAW,UAAU,CAAC;AACjD,MAAM,wBAAwB,GAAW,aAAa,CAAC;AACvD,MAAM,iBAAiB,GAAW,MAAM,CAAC;AAEzC,2CAA2C;AAC3C,MAAM,8BAA8B,GAAW,uBAAuB,CAAC;AAQvE,MAAM,OAAO,cAAc;;QACzB,gDAAuC;QACvC,uCAAgB,YAAY,CAAC,0CAA0C,CAAC,EAAC;QACzE,kDAAsB;oBAOa,SAAS;4BAKZ,IAAI;wBAKJ,EAAE;wBAKJ,EAAE;;IAoBhC,gBAAgB,CAAC,QAA4B;QAC3C,IAAI,QAAQ,KAAK,SAAS,EAAE;YAC1B,IAAI,CAAC,YAAY,EAAE,CAAC;SACrB;IACH,CAAC;IAED,KAAK,CAAC,iBAAiB;QACrB,IAAI;YACF,uBAAA,IAAI,mCAAoB,MAAM,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC,MAAA,CAAC;SACnE;QAAC,OAAO,KAAK,EAAE;YACd,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAC;YAC9C,uBAAA,IAAI,mCAAoB;gBACtB,IAAI,EAAE;oBACJ,OAAO,EAAE,UAAU;oBACnB,UAAU,EAAE,aAAa;oBACzB,IAAI,EAAE,MAAM;iBACb;aACF,MAAA,CAAC;SACH;QAED,IAAI,IAAI,CAAC,IAAI,EAAE;YACb,IAAI,CAAC,YAAY,EAAE,CAAC;SACrB;IACH,CAAC;IAED,gBAAgB,KAAI,CAAC;IAErB;;OAEG;IAEH,KAAK,CAAC,gBAAgB,CAAC,gBAAyB;QAC9C,IAAI,gBAAgB,EAAE;YACpB,uBAAA,IAAI,qCAAe,CAAC,OAAO,GAAG,IAAI,CAAC;SACpC;aAAM;YACL,uBAAA,IAAI,qCAAe,CAAC,OAAO,GAAG,KAAK,CAAC;SACrC;IACH,CAAC;IAED;;OAEG;IACK,YAAY;QAClB,IAAI,IAAI,CAAC,IAAI,EAAE;YACb,IAAI;gBACF,MAAM,UAAU,GACd,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;gBACpE,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC,QAAQ,IAAI,EAAE,CAAC;gBAC1C,IAAI,CAAC,aAAa,EAAE,CAAC;aACtB;YAAC,OAAO,KAAK,EAAE;gBACd,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAK,CAAC,CAAC;gBACtD,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;gBACnB,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;aACpB;SACF;IACH,CAAC;IAED;;OAEG;IACK,aAAa;QACnB,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;YAC7C,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBAC5C,EAAE,EAAE,OAAO,CAAC,EAAE;gBACd,IAAI,EAAE,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,EAAE,CAAC;aAC3C,CAAC,CAAC,CAAC;SACL;IACH,CAAC;IAED;;OAEG;IACK,mBAAmB,CAAC,SAAiB;;QAC3C,MAAM,QAAQ,GAAG,CAAA,MAAA,uBAAA,IAAI,uCAAiB,0CAAE,IAAI,KAAI,EAAE,CAAC;QAEnD,QAAQ,SAAS,EAAE;YACjB,KAAK,UAAU;gBACb,OAAO,QAAQ,CAAC,OAAO,IAAI,UAAU,CAAC;YACxC,KAAK,aAAa;gBAChB,OAAO,QAAQ,CAAC,UAAU,IAAI,aAAa,CAAC;YAC9C,KAAK,MAAM;gBACT,OAAO,QAAQ,CAAC,IAAI,IAAI,MAAM,CAAC;YACjC;gBACE,OAAO,SAAS,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;SACrD;IACH,CAAC;IAED;;OAEG;IACK,qBAAqB,CAAC,KAAU;QACtC,IAAI,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC;QAE3B,mDAAmD;QACnD,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;YAChD,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC7B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;gBACtB,GAAG,GAAG;oBACJ,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;oBACd,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;iBACb,CAAC;aACH;SACF;QAED,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;IACpC,CAAC;IAED;;OAEG;IACK,qBAAqB,CAAC,KAAU;QACtC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;IACvD,CAAC;IAED;;OAEG;IACK,kBAAkB,CAAC,KAAU;QACnC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;IACzD,CAAC;IAED,MAAM;;QACJ,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;YAC9D,OAAO,IAAI,CAAC;SACb;QAED,OAAO,CACL,EAAC,IAAI;YACH,gBAAU,KAAK,EAAE,WAAW,GAAa;YACzC,oBACE,GAAG,EAAE,uBAAA,IAAI,oCAAc,EACvB,GAAG,EAAE,CAAC,EAA0B,EAAE,EAAE,CAClC,CAAC,uBAAA,IAAI,iCAAkB,EAA4B,MAAA,CAAC,GAExC;YAEhB,qBACE,KAAK,EAAE;oBACL,UAAU,EAAE,IAAI;oBAChB,GAAG,EAAE,IAAI;oBACT,CAAC,oBAAoB,CAAC,EAAE,IAAI;iBAC7B,EACD,eAAe,EAAC,aAAa,EAC7B,KAAK,EAAE,IAAI,CAAC,QAAQ,EACpB,UAAU,EAAE,qBAAqB,EACjC,QAAQ,EAAC,MAAM,EACf,OAAO,EAAC,MAAM;gBAEd,WACE,IAAI,EAAE,qBAAqB,EAC3B,KAAK,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,8BAA8B,CAAC,EAAE,IAAI,EAAE,EACnE,IAAI,EAAC,qBAAqB;oBAE1B,+CACE,OAAO,EACL,CAAA,MAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,UAAU,CAAC,0CAAE,OAAO,KAAI,EAAE,IAExD;wBACH,gBAAgB,EAAE,CAAC,KAAU,EAAE,EAAE,CAC/B,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC;qBAC5B,EACJ;wBACH,iBAAiB,EAAE,CAAC,KAAU,EAAE,EAAE,CAChC,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC;qBAC5B,EACT,CACE;gBAEN,WACE,IAAI,EAAE,wBAAwB,EAC9B,KAAK,EAAE;wBACL,aAAa,EAAE,IAAI;wBACnB,CAAC,8BAA8B,CAAC,EAAE,IAAI;qBACvC,EACD,IAAI,EAAC,wBAAwB;oBAE7B,kDACE,OAAO,EACL,CAAA,MAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,aAAa,CAAC,0CAAE,OAAO,KAAI,EAAE,IAE3D;wBACH,gBAAgB,EAAE,CAAC,KAAU,EAAE,EAAE,CAC/B,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC;qBAC5B,EACJ;wBACH,iBAAiB,EAAE,CAAC,KAAU,EAAE,EAAE,CAChC,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC;qBAC5B,EACJ;wBACH,mBAAmB,EAAE,CAAC,KAAU,EAAE,EAAE,CAClC,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC;qBACzB,EACT,CACE;gBAEN,WACE,IAAI,EAAE,iBAAiB,EACvB,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,8BAA8B,CAAC,EAAE,IAAI,EAAE,EAC7D,IAAI,EAAC,iBAAiB;oBAEtB,2CACE,IAAI,EAAE,CAAA,MAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,0CAAE,IAAI,KAAI,EAAE,IACrD;wBACH,gBAAgB,EAAE,CAAC,KAAU,EAAE,EAAE,CAC/B,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC;qBAC5B,EACJ;wBACH,iBAAiB,EAAE,CAAC,KAAU,EAAE,EAAE,CAChC,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC;qBAC5B,EACT,CACE,CACQ,CACX,CACR,CAAC;IACJ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACF","sourcesContent":["import {\n Component,\n Host,\n Prop,\n Element,\n State,\n getAssetPath,\n Method,\n h,\n Watch,\n Event,\n EventEmitter\n} from \"@stencil/core\";\n\nimport { MercuryBundles } from \"@genexus/mercury\";\nimport { TabModel } from \"@genexus/chameleon-controls-library\";\nimport { Locale } from \"../../../common/locale\";\n\nconst CSS_BUNDLES: MercuryBundles = [\n \"resets/box-sizing\",\n \"components/tab\",\n \"utils/form--full\",\n \"utils/layout\",\n \"utils/typography\",\n \"utils/spacing\",\n \"chameleon/scrollbar\"\n];\n\nconst MAIN_SECTION_CLASSES: string = \"main\";\nconst WEB_APPS_TAB_SELECTOR: string = \"web-apps\";\nconst NATIVE_APPS_TAB_SELECTOR: string = \"native-apps\";\nconst APIS_TAB_SELECTOR: string = \"apis\";\n\n// Temporary WA (Read WA in launchpad.scss)\nconst TAB_SLOT_SPACING_BODY_SELECTOR: string = \"tab-slot-spacing-body\";\n\n@Component({\n tag: \"gx-ide-launchpad\",\n styleUrl: \"launchpad.scss\",\n shadow: true,\n assetsDirs: [\"gx-ide-assets/launchpad\"]\n})\nexport class GxIdeLaunchpad {\n #chShortcutsEl: HTMLChShortcutsElement;\n #shortcutsSrc = getAssetPath(`./gx-ide-assets/launchpad/shortcuts.json`);\n #componentLocale: any;\n\n @Element() el: HTMLGxIdeLaunchpadElement;\n\n /**\n * JSON data containing section structure\n */\n @Prop() data: string | undefined = undefined;\n\n /**\n * Determines if the component runs in standalone mode\n */\n @Prop() isStandalone: boolean = true;\n\n /**\n * Array of sections for tabs\n */\n @State() sections: Array<any> = [];\n\n /**\n * Tab model for ch-tab-render\n */\n @State() tabModel: TabModel = [];\n\n /**\n * Event emitted when an object is selected for execution\n */\n @Event() objectSelected: EventEmitter<{\n key: { type: string; id: string } | string;\n }>;\n\n /**\n * Event emitted when copying to clipboard\n */\n @Event() copyToClipboard: EventEmitter<{ url: string }>;\n\n /**\n * Event emitted when opening app store\n */\n @Event() openOnTheAppStore: EventEmitter<{ url: string }>;\n\n @Watch(\"data\")\n watchDataHandler(newValue: string | undefined) {\n if (newValue !== undefined) {\n this.organizeData();\n }\n }\n\n async componentWillLoad() {\n try {\n this.#componentLocale = await Locale.getComponentStrings(this.el);\n } catch (error) {\n console.error(\"Error loading locale:\", error);\n this.#componentLocale = {\n tabs: {\n webApps: \"WEB APPS\",\n nativeApps: \"NATIVE APPS\",\n apis: \"APIS\"\n }\n };\n }\n\n if (this.data) {\n this.organizeData();\n }\n }\n\n componentDidLoad() {}\n\n /**\n * Suspends or reactivates the shortcuts\n */\n @Method()\n async suspendShortcuts(suspendShortcuts: boolean) {\n if (suspendShortcuts) {\n this.#chShortcutsEl.suspend = true;\n } else {\n this.#chShortcutsEl.suspend = false;\n }\n }\n\n /**\n * Organizes received data and builds tab model\n */\n private organizeData(): void {\n if (this.data) {\n try {\n const parsedData =\n typeof this.data === \"string\" ? JSON.parse(this.data) : this.data;\n this.sections = parsedData.sections || [];\n this.buildTabModel();\n } catch (error) {\n console.error(\"Error parsing launchpad data:\", error);\n this.sections = [];\n this.tabModel = [];\n }\n }\n }\n\n /**\n * Builds tab model based on sections\n */\n private buildTabModel(): void {\n if (this.sections && this.sections.length > 0) {\n this.tabModel = this.sections.map(section => ({\n id: section.id,\n name: this.getLocalizedTabName(section.id)\n }));\n }\n }\n\n /**\n * Gets localized tab name based on section ID\n */\n private getLocalizedTabName(sectionId: string): string {\n const tabNames = this.#componentLocale?.tabs || {};\n\n switch (sectionId) {\n case \"web-apps\":\n return tabNames.webApps || \"WEB APPS\";\n case \"native-apps\":\n return tabNames.nativeApps || \"NATIVE APPS\";\n case \"apis\":\n return tabNames.apis || \"APIS\";\n default:\n return sectionId.toUpperCase().replace(/-/g, \" \");\n }\n }\n\n /**\n * Handles object selection from subcomponents\n */\n private handleObjectSelection(event: any) {\n let key = event.detail.key;\n\n // Convert string format \"type|id\" to object format\n if (typeof key === \"string\" && key.includes(\"|\")) {\n const parts = key.split(\"|\");\n if (parts.length === 2) {\n key = {\n type: parts[0],\n id: parts[1]\n };\n }\n }\n\n this.objectSelected.emit({ key });\n }\n\n /**\n * Handles copy to clipboard from subcomponents\n */\n private handleCopyToClipboard(event: any) {\n this.copyToClipboard.emit({ url: event.detail.url });\n }\n\n /**\n * Handles open app store from subcomponents\n */\n private handleOpenAppStore(event: any) {\n this.openOnTheAppStore.emit({ url: event.detail.url });\n }\n\n render() {\n if (!this.data || !this.sections || this.sections.length === 0) {\n return null;\n }\n\n return (\n <Host>\n <ch-theme model={CSS_BUNDLES}></ch-theme>\n <ch-shortcuts\n src={this.#shortcutsSrc}\n ref={(el: HTMLChShortcutsElement) =>\n (this.#chShortcutsEl = el as HTMLChShortcutsElement)\n }\n ></ch-shortcuts>\n\n <ch-tab-render\n class={{\n scrollable: true,\n tab: true,\n [MAIN_SECTION_CLASSES]: true\n }}\n tabListPosition=\"block-start\"\n model={this.tabModel}\n selectedId={WEB_APPS_TAB_SELECTOR}\n overflow=\"auto\"\n contain=\"size\"\n >\n <div\n slot={WEB_APPS_TAB_SELECTOR}\n class={{ \"web-apps\": true, [TAB_SLOT_SPACING_BODY_SELECTOR]: true }}\n part=\"tab-button-web-apps\"\n >\n <gx-ide-launchpad-web-apps\n objects={\n this.sections.find(s => s.id === \"web-apps\")?.objects || []\n }\n {...({\n onObjectSelected: (event: any) =>\n this.handleObjectSelection(event)\n } as any)}\n {...({\n onCopyToClipboard: (event: any) =>\n this.handleCopyToClipboard(event)\n } as any)}\n />\n </div>\n\n <div\n slot={NATIVE_APPS_TAB_SELECTOR}\n class={{\n \"native-apps\": true,\n [TAB_SLOT_SPACING_BODY_SELECTOR]: true\n }}\n part=\"tab-button-native-apps\"\n >\n <gx-ide-launchpad-native-apps\n objects={\n this.sections.find(s => s.id === \"native-apps\")?.objects || []\n }\n {...({\n onObjectSelected: (event: any) =>\n this.handleObjectSelection(event)\n } as any)}\n {...({\n onCopyToClipboard: (event: any) =>\n this.handleCopyToClipboard(event)\n } as any)}\n {...({\n onOpenOnTheAppStore: (event: any) =>\n this.handleOpenAppStore(event)\n } as any)}\n />\n </div>\n\n <div\n slot={APIS_TAB_SELECTOR}\n class={{ apis: true, [TAB_SLOT_SPACING_BODY_SELECTOR]: true }}\n part=\"tab-button-apis\"\n >\n <gx-ide-launchpad-apis\n apis={this.sections.find(s => s.id === \"apis\")?.apis || []}\n {...({\n onObjectSelected: (event: any) =>\n this.handleObjectSelection(event)\n } as any)}\n {...({\n onCopyToClipboard: (event: any) =>\n this.handleCopyToClipboard(event)\n } as any)}\n />\n </div>\n </ch-tab-render>\n </Host>\n );\n }\n}\n"]}
1
+ {"version":3,"file":"launchpad.js","sourceRoot":"","sources":["../../../../src/components/launchpad/root/launchpad.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n Host,\n Prop,\n Element,\n State,\n h,\n Watch,\n Event,\n EventEmitter\n} from \"@stencil/core\";\n\nimport { MercuryBundles } from \"@genexus/mercury\";\nimport { TabModel } from \"@genexus/chameleon-controls-library\";\nimport { Locale } from \"../../../common/locale\";\n\nconst CSS_BUNDLES: MercuryBundles = [\n \"resets/box-sizing\",\n \"components/tab\",\n \"utils/form--full\",\n \"utils/layout\",\n \"utils/typography\",\n \"utils/spacing\",\n \"chameleon/scrollbar\"\n];\n\nconst MAIN_SECTION_CLASSES: string = \"main\";\nconst WEB_APPS_TAB_SELECTOR: string = \"web-apps\";\nconst NATIVE_APPS_TAB_SELECTOR: string = \"native-apps\";\nconst APIS_TAB_SELECTOR: string = \"apis\";\n\n// Temporary WA (Read WA in launchpad.scss)\nconst TAB_SLOT_SPACING_BODY_SELECTOR: string = \"tab-slot-spacing-body\";\n\n@Component({\n tag: \"gx-ide-launchpad\",\n styleUrl: \"launchpad.scss\",\n shadow: true,\n assetsDirs: [\"gx-ide-assets/launchpad\"]\n})\nexport class GxIdeLaunchpad {\n #componentLocale: any;\n\n @Element() el: HTMLGxIdeLaunchpadElement;\n\n /**\n * JSON data containing section structure\n */\n @Prop() data: string | undefined = undefined;\n\n /**\n * Determines if the component runs in standalone mode\n */\n @Prop() isStandalone: boolean = true;\n\n /**\n * Array of sections for tabs\n */\n @State() sections: Array<any> = [];\n\n /**\n * Tab model for ch-tab-render\n */\n @State() tabModel: TabModel = [];\n\n /**\n * Event emitted when an object is selected for execution\n */\n @Event() objectSelected: EventEmitter<{\n key: { type: string; id: string } | string;\n }>;\n\n /**\n * Event emitted when copying to clipboard\n */\n @Event() copyToClipboard: EventEmitter<{ url: string }>;\n\n /**\n * Event emitted when opening app store\n */\n @Event() openOnTheAppStore: EventEmitter<{ url: string }>;\n\n @Watch(\"data\")\n watchDataHandler(newValue: string | undefined) {\n if (newValue !== undefined) {\n this.organizeData();\n }\n }\n\n async componentWillLoad() {\n try {\n this.#componentLocale = await Locale.getComponentStrings(this.el);\n } catch (error) {\n console.error(\"Error loading locale:\", error);\n this.#componentLocale = {\n tabs: {\n webApps: \"WEB APPS\",\n nativeApps: \"NATIVE APPS\",\n apis: \"APIS\"\n }\n };\n }\n\n if (this.data) {\n this.organizeData();\n }\n }\n\n componentDidLoad() {}\n\n /**\n * Organizes received data and builds tab model\n */\n private organizeData(): void {\n if (this.data) {\n try {\n const parsedData =\n typeof this.data === \"string\" ? JSON.parse(this.data) : this.data;\n this.sections = parsedData.sections || [];\n this.buildTabModel();\n } catch (error) {\n console.error(\"Error parsing launchpad data:\", error);\n this.sections = [];\n this.tabModel = [];\n }\n }\n }\n\n /**\n * Builds tab model based on sections\n */\n private buildTabModel(): void {\n if (this.sections && this.sections.length > 0) {\n this.tabModel = this.sections.map(section => ({\n id: section.id,\n name: this.getLocalizedTabName(section.id)\n }));\n }\n }\n\n /**\n * Gets localized tab name based on section ID\n */\n private getLocalizedTabName(sectionId: string): string {\n const tabNames = this.#componentLocale?.tabs || {};\n\n switch (sectionId) {\n case \"web-apps\":\n return tabNames.webApps || \"WEB APPS\";\n case \"native-apps\":\n return tabNames.nativeApps || \"NATIVE APPS\";\n case \"apis\":\n return tabNames.apis || \"APIS\";\n default:\n return sectionId.toUpperCase().replace(/-/g, \" \");\n }\n }\n\n /**\n * Handles object selection from subcomponents\n */\n private handleObjectSelection(event: any) {\n let key = event.detail.key;\n\n // Convert string format \"type|id\" to object format\n if (typeof key === \"string\" && key.includes(\"|\")) {\n const parts = key.split(\"|\");\n if (parts.length === 2) {\n key = {\n type: parts[0],\n id: parts[1]\n };\n }\n }\n\n this.objectSelected.emit({ key });\n }\n\n /**\n * Handles copy to clipboard from subcomponents\n */\n private handleCopyToClipboard(event: any) {\n this.copyToClipboard.emit({ url: event.detail.url });\n }\n\n /**\n * Handles open app store from subcomponents\n */\n private handleOpenAppStore(event: any) {\n this.openOnTheAppStore.emit({ url: event.detail.url });\n }\n\n render() {\n if (!this.data || !this.sections || this.sections.length === 0) {\n return null;\n }\n\n // TODO: Revisit re-enabling keyboard shortcuts 1, 2, 3 for switching launchpad tabs (Web Apps, Native Apps, APIs)\n return (\n <Host>\n <ch-theme model={CSS_BUNDLES}></ch-theme>\n\n <ch-tab-render\n class={{\n scrollable: true,\n tab: true,\n [MAIN_SECTION_CLASSES]: true\n }}\n tabListPosition=\"block-start\"\n model={this.tabModel}\n selectedId={WEB_APPS_TAB_SELECTOR}\n overflow=\"auto\"\n contain=\"size\"\n >\n <div\n slot={WEB_APPS_TAB_SELECTOR}\n class={{ \"web-apps\": true, [TAB_SLOT_SPACING_BODY_SELECTOR]: true }}\n part=\"tab-button-web-apps\"\n >\n <gx-ide-launchpad-web-apps\n objects={\n this.sections.find(s => s.id === \"web-apps\")?.objects || []\n }\n {...({\n onObjectSelected: (event: any) =>\n this.handleObjectSelection(event)\n } as any)}\n {...({\n onCopyToClipboard: (event: any) =>\n this.handleCopyToClipboard(event)\n } as any)}\n />\n </div>\n\n <div\n slot={NATIVE_APPS_TAB_SELECTOR}\n class={{\n \"native-apps\": true,\n [TAB_SLOT_SPACING_BODY_SELECTOR]: true\n }}\n part=\"tab-button-native-apps\"\n >\n <gx-ide-launchpad-native-apps\n objects={\n this.sections.find(s => s.id === \"native-apps\")?.objects || []\n }\n {...({\n onObjectSelected: (event: any) =>\n this.handleObjectSelection(event)\n } as any)}\n {...({\n onCopyToClipboard: (event: any) =>\n this.handleCopyToClipboard(event)\n } as any)}\n {...({\n onOpenOnTheAppStore: (event: any) =>\n this.handleOpenAppStore(event)\n } as any)}\n />\n </div>\n\n <div\n slot={APIS_TAB_SELECTOR}\n class={{ apis: true, [TAB_SLOT_SPACING_BODY_SELECTOR]: true }}\n part=\"tab-button-apis\"\n >\n <gx-ide-launchpad-apis\n apis={this.sections.find(s => s.id === \"apis\")?.apis || []}\n {...({\n onObjectSelected: (event: any) =>\n this.handleObjectSelection(event)\n } as any)}\n {...({\n onCopyToClipboard: (event: any) =>\n this.handleCopyToClipboard(event)\n } as any)}\n />\n </div>\n </ch-tab-render>\n </Host>\n );\n }\n}\n"]}