@genexus/genexus-ide-ui 1.1.13 → 1.1.14

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 (124) hide show
  1. package/dist/cjs/genexus-ide-ui.cjs.js +1 -1
  2. package/dist/cjs/gx-ide-about.cjs.entry.js +29 -15
  3. package/dist/cjs/gx-ide-about.cjs.entry.js.map +1 -1
  4. package/dist/cjs/gx-ide-bpm-export-xpdl.cjs.entry.js +2 -2
  5. package/dist/cjs/gx-ide-bpm-export-xpdl.cjs.entry.js.map +1 -1
  6. package/dist/cjs/gx-ide-empty-state.cjs.entry.js +2 -2
  7. package/dist/cjs/gx-ide-empty-state.cjs.entry.js.map +1 -1
  8. package/dist/cjs/gx-ide-file-uploader.cjs.entry.js +0 -13
  9. package/dist/cjs/gx-ide-file-uploader.cjs.entry.js.map +1 -1
  10. package/dist/cjs/gx-ide-plugin-details.cjs.entry.js +201 -0
  11. package/dist/cjs/gx-ide-plugin-details.cjs.entry.js.map +1 -0
  12. package/dist/cjs/gx-ide-plugin-explorer.cjs.entry.js +159 -0
  13. package/dist/cjs/gx-ide-plugin-explorer.cjs.entry.js.map +1 -0
  14. package/dist/cjs/gx-ide-sc-chat-container.cjs.entry.js +0 -1
  15. package/dist/cjs/gx-ide-sc-chat-container.cjs.entry.js.map +1 -1
  16. package/dist/cjs/loader.cjs.js +1 -1
  17. package/dist/collection/collection-manifest.json +3 -1
  18. package/dist/collection/components/_helpers/empty-state/gx-ide-empty-state.css +4 -0
  19. package/dist/collection/components/_helpers/empty-state/gx-ide-empty-state.js +1 -1
  20. package/dist/collection/components/_helpers/empty-state/gx-ide-empty-state.js.map +1 -1
  21. package/dist/collection/components/{_branding/about → about}/about.css +44 -15
  22. package/dist/collection/components/{_branding/about → about}/about.js +46 -62
  23. package/dist/collection/components/about/about.js.map +1 -0
  24. package/dist/collection/components/{_branding/about → about}/gx-ide-assets/about/langs/about.lang.en.json +3 -3
  25. package/dist/collection/components/{_branding/about → about}/gx-ide-assets/about/langs/about.lang.ja.json +3 -3
  26. package/dist/collection/components/{_branding/about → about}/gx-ide-assets/about/langs/about.lang.zh.json +3 -3
  27. package/dist/collection/components/bpm/export-xpdl/bpm-export-xpdl.js +2 -2
  28. package/dist/collection/components/bpm/export-xpdl/bpm-export-xpdl.js.map +1 -1
  29. package/dist/collection/components/file-uploader/file-uploader.js +0 -13
  30. package/dist/collection/components/file-uploader/file-uploader.js.map +1 -1
  31. package/dist/collection/components/plugin-details/gx-ide-assets/plugin-details/langs/plugin-details.lang.en.json +9 -0
  32. package/dist/collection/components/plugin-details/gx-ide-assets/plugin-details/langs/plugin-details.lang.ja.json +9 -0
  33. package/dist/collection/components/plugin-details/gx-ide-assets/plugin-details/langs/plugin-details.lang.zh.json +9 -0
  34. package/dist/collection/components/plugin-details/plugin-details.css +168 -0
  35. package/dist/collection/components/plugin-details/plugin-details.js +292 -0
  36. package/dist/collection/components/plugin-details/plugin-details.js.map +1 -0
  37. package/dist/collection/components/plugin-explorer/gx-ide-assets/plugin-explorer/images/plugin-icon.svg +10 -0
  38. package/dist/collection/components/plugin-explorer/gx-ide-assets/plugin-explorer/langs/plugin-explorer.lang.en.json +10 -0
  39. package/dist/collection/components/plugin-explorer/gx-ide-assets/plugin-explorer/langs/plugin-explorer.lang.ja.json +10 -0
  40. package/dist/collection/components/plugin-explorer/gx-ide-assets/plugin-explorer/langs/plugin-explorer.lang.zh.json +10 -0
  41. package/dist/collection/components/plugin-explorer/plugin-explorer.css +106 -0
  42. package/dist/collection/components/plugin-explorer/plugin-explorer.js +263 -0
  43. package/dist/collection/components/plugin-explorer/plugin-explorer.js.map +1 -0
  44. package/dist/collection/components/team-dev/bring-changes/gx-ide-assets/team-dev-bring-changes/langs/team-dev-bring-changes.lang.ja.json +45 -45
  45. package/dist/collection/pages/assets/images/plugin/docker-iso.svg +12 -0
  46. package/dist/collection/showcase/chat-container/callbacks.js +0 -1
  47. package/dist/collection/showcase/chat-container/callbacks.js.map +1 -1
  48. package/dist/collection/testing/locale.e2e.js +2 -0
  49. package/dist/collection/testing/locale.e2e.js.map +1 -1
  50. package/dist/components/gx-ide-about.js +32 -19
  51. package/dist/components/gx-ide-about.js.map +1 -1
  52. package/dist/components/gx-ide-bpm-export-xpdl.js +2 -2
  53. package/dist/components/gx-ide-bpm-export-xpdl.js.map +1 -1
  54. package/dist/components/gx-ide-empty-state2.js +2 -2
  55. package/dist/components/gx-ide-empty-state2.js.map +1 -1
  56. package/dist/components/gx-ide-file-uploader.js +0 -13
  57. package/dist/components/gx-ide-file-uploader.js.map +1 -1
  58. package/dist/components/gx-ide-plugin-details.d.ts +11 -0
  59. package/dist/components/gx-ide-plugin-details.js +222 -0
  60. package/dist/components/gx-ide-plugin-details.js.map +1 -0
  61. package/dist/components/gx-ide-plugin-explorer.d.ts +11 -0
  62. package/dist/components/gx-ide-plugin-explorer.js +194 -0
  63. package/dist/components/gx-ide-plugin-explorer.js.map +1 -0
  64. package/dist/components/gx-ide-sc-chat-container.js +0 -1
  65. package/dist/components/gx-ide-sc-chat-container.js.map +1 -1
  66. package/dist/esm/genexus-ide-ui.js +1 -1
  67. package/dist/esm/gx-ide-about.entry.js +29 -15
  68. package/dist/esm/gx-ide-about.entry.js.map +1 -1
  69. package/dist/esm/gx-ide-bpm-export-xpdl.entry.js +2 -2
  70. package/dist/esm/gx-ide-bpm-export-xpdl.entry.js.map +1 -1
  71. package/dist/esm/gx-ide-empty-state.entry.js +2 -2
  72. package/dist/esm/gx-ide-empty-state.entry.js.map +1 -1
  73. package/dist/esm/gx-ide-file-uploader.entry.js +0 -13
  74. package/dist/esm/gx-ide-file-uploader.entry.js.map +1 -1
  75. package/dist/esm/gx-ide-plugin-details.entry.js +197 -0
  76. package/dist/esm/gx-ide-plugin-details.entry.js.map +1 -0
  77. package/dist/esm/gx-ide-plugin-explorer.entry.js +155 -0
  78. package/dist/esm/gx-ide-plugin-explorer.entry.js.map +1 -0
  79. package/dist/esm/gx-ide-sc-chat-container.entry.js +0 -1
  80. package/dist/esm/gx-ide-sc-chat-container.entry.js.map +1 -1
  81. package/dist/esm/loader.js +1 -1
  82. package/dist/genexus-ide-ui/genexus-ide-ui.esm.js +1 -1
  83. package/dist/genexus-ide-ui/genexus-ide-ui.esm.js.map +1 -1
  84. package/dist/genexus-ide-ui/gx-ide-assets/about/langs/about.lang.en.json +3 -3
  85. package/dist/genexus-ide-ui/gx-ide-assets/about/langs/about.lang.ja.json +3 -3
  86. package/dist/genexus-ide-ui/gx-ide-assets/about/langs/about.lang.zh.json +3 -3
  87. package/dist/genexus-ide-ui/gx-ide-assets/plugin-details/langs/plugin-details.lang.en.json +9 -0
  88. package/dist/genexus-ide-ui/gx-ide-assets/plugin-details/langs/plugin-details.lang.ja.json +9 -0
  89. package/dist/genexus-ide-ui/gx-ide-assets/plugin-details/langs/plugin-details.lang.zh.json +9 -0
  90. package/dist/genexus-ide-ui/gx-ide-assets/plugin-explorer/images/plugin-icon.svg +10 -0
  91. package/dist/genexus-ide-ui/gx-ide-assets/plugin-explorer/langs/plugin-explorer.lang.en.json +10 -0
  92. package/dist/genexus-ide-ui/gx-ide-assets/plugin-explorer/langs/plugin-explorer.lang.ja.json +10 -0
  93. package/dist/genexus-ide-ui/gx-ide-assets/plugin-explorer/langs/plugin-explorer.lang.zh.json +10 -0
  94. package/dist/genexus-ide-ui/gx-ide-assets/team-dev-bring-changes/langs/team-dev-bring-changes.lang.ja.json +45 -45
  95. package/dist/genexus-ide-ui/{p-a47d71eb.entry.js → p-4328be14.entry.js} +7 -7
  96. package/dist/genexus-ide-ui/p-4328be14.entry.js.map +1 -0
  97. package/dist/genexus-ide-ui/p-476b74a1.entry.js +109 -0
  98. package/dist/genexus-ide-ui/p-476b74a1.entry.js.map +1 -0
  99. package/dist/genexus-ide-ui/{p-6d996621.entry.js → p-4e6425f3.entry.js} +1 -2
  100. package/dist/genexus-ide-ui/p-4e6425f3.entry.js.map +1 -0
  101. package/dist/genexus-ide-ui/p-641c79a9.entry.js +198 -0
  102. package/dist/genexus-ide-ui/p-641c79a9.entry.js.map +1 -0
  103. package/dist/genexus-ide-ui/{p-17dc4c9c.entry.js → p-7d7cf30d.entry.js} +35 -51
  104. package/dist/genexus-ide-ui/p-7d7cf30d.entry.js.map +1 -0
  105. package/dist/genexus-ide-ui/p-84c1c1bb.entry.js +270 -0
  106. package/dist/genexus-ide-ui/p-84c1c1bb.entry.js.map +1 -0
  107. package/dist/genexus-ide-ui/{p-844b7117.entry.js → p-86365635.entry.js} +3 -3
  108. package/dist/genexus-ide-ui/p-86365635.entry.js.map +1 -0
  109. package/dist/types/components/{_branding/about → about}/about.d.ts +6 -10
  110. package/dist/types/components/plugin-details/plugin-details.d.ts +55 -0
  111. package/dist/types/components/plugin-explorer/plugin-explorer.d.ts +43 -0
  112. package/dist/types/components.d.ts +106 -22
  113. package/package.json +1 -1
  114. package/dist/collection/components/_branding/about/about.js.map +0 -1
  115. package/dist/genexus-ide-ui/p-0550fd5f.entry.js +0 -96
  116. package/dist/genexus-ide-ui/p-0550fd5f.entry.js.map +0 -1
  117. package/dist/genexus-ide-ui/p-17dc4c9c.entry.js.map +0 -1
  118. package/dist/genexus-ide-ui/p-6d996621.entry.js.map +0 -1
  119. package/dist/genexus-ide-ui/p-844b7117.entry.js.map +0 -1
  120. package/dist/genexus-ide-ui/p-a47d71eb.entry.js.map +0 -1
  121. /package/dist/collection/components/{_branding/about → about}/gx-ide-assets/about/images/copyrights-illustration.png +0 -0
  122. /package/dist/collection/components/{_branding/about → about}/gx-ide-assets/about/images/next-arrow.svg +0 -0
  123. /package/dist/collection/components/{_branding/about → about}/gx-ide-assets/about/images/next-logo.svg +0 -0
  124. /package/dist/collection/components/{_branding/about → about}/gx-ide-assets/about/images/next-square.svg +0 -0
@@ -1,8 +1,8 @@
1
1
  import { r as e, h as i, H as t, a } from "./p-25a9f1d7.js";
2
2
 
3
- import { g as o } from "./p-2987a259.js";
3
+ import { g as r } from "./p-2987a259.js";
4
4
 
5
- import { L as r } from "./p-311eedf3.js";
5
+ import { L as o } from "./p-311eedf3.js";
6
6
 
7
7
  const s = ":root{--ui-animaton-speed:0.2s}.gxg-title-01{font-family:var(--ds-base-font-family-primary);font-weight:var(--ds-title-01-font-weight);font-size:var(--ds-title-01-font-size);letter-spacing:var(--ds-base-font-letter-spacing--comfortable);color:var(--ds-base-font-color);text-align:start;line-height:var(--ds-base-font-line-height--comfortable)}.gxg-title-01--negative{font-family:var(--ds-base-font-family-primary);font-weight:var(--ds-title-01-font-weight);font-size:var(--ds-title-01-font-size);letter-spacing:var(--ds-base-font-letter-spacing--comfortable);color:var(--ds-base-font-color);text-align:start;line-height:var(--ds-base-font-line-height--comfortable);color:var(--ds-base-font-color--negative)}.gxg-title-02{font-family:var(--ds-base-font-family-primary);font-weight:var(--ds-title-02-font-weight);font-size:var(--ds-title-02-font-size);letter-spacing:var(--ds-base-font-letter-spacing--regular);color:var(--ds-base-font-color);text-align:start;text-transform:uppercase;line-height:var(--ds-base-font-line-height--comfortable)}.gxg-title-02--negative{font-family:var(--ds-base-font-family-primary);font-weight:var(--ds-title-02-font-weight);font-size:var(--ds-title-02-font-size);letter-spacing:var(--ds-base-font-letter-spacing--regular);color:var(--ds-base-font-color);text-align:start;text-transform:uppercase;line-height:var(--ds-base-font-line-height--comfortable);color:var(--color-on-primary)}.gxg-title-03{font-family:var(--ds-base-font-family-primary);font-weight:var(--ds-title-03-font-weight);font-size:var(--ds-title-03-font-size);letter-spacing:var(--ds-base-font-letter-spacing--regular);color:var(--ds-base-font-color);text-align:start;text-transform:uppercase;line-height:var(--ds-base-font-line-height--comfortable)}.gxg-title-03--negative{font-family:var(--ds-base-font-family-primary);font-weight:var(--ds-title-03-font-weight);font-size:var(--ds-title-03-font-size);letter-spacing:var(--ds-base-font-letter-spacing--regular);color:var(--ds-base-font-color);text-align:start;text-transform:uppercase;line-height:var(--ds-base-font-line-height--comfortable);color:var(--ds-base-font-color--negative)}.gxg-title-04{font-family:var(--ds-base-font-family-primary);font-weight:var(--ds-title-04-font-weight);font-size:var(--ds-title-04-font-size);letter-spacing:var(--ds-base-font-letter-spacing--comfortable);color:var(--ds-base-font-color);text-align:start;line-height:var(--ds-base-font-line-height--comfortable)}.gxg-title-04--negative{font-family:var(--ds-base-font-family-primary);font-weight:var(--ds-title-04-font-weight);font-size:var(--ds-title-04-font-size);letter-spacing:var(--ds-base-font-letter-spacing--comfortable);color:var(--ds-base-font-color);text-align:start;line-height:var(--ds-base-font-line-height--comfortable);color:var(--ds-base-font-color--negative)}.gxg-title-05{font-family:var(--ds-base-font-family-primary);font-weight:var(--ds-title-05-font-weight);font-size:var(--ds-title-05-font-size);letter-spacing:var(--ds-base-font-letter-spacing--regular);color:var(--ds-base-font-color);text-align:start;line-height:var(--ds-base-font-line-height--comfortable)}.gxg-title-05--negative{font-family:var(--ds-base-font-family-primary);font-weight:var(--ds-title-05-font-weight);font-size:var(--ds-title-05-font-size);letter-spacing:var(--ds-base-font-letter-spacing--regular);color:var(--ds-base-font-color);text-align:start;line-height:var(--ds-base-font-line-height--comfortable);color:var(--ds-base-font-color--negative)}.gxg-text{font-family:var(--ds-base-font-family-primary);font-size:var(--ds-base-font-size);color:var(--ds-base-font-size-color);font-weight:var(--ds-base-font-size-weight);line-height:var(--ds-base-font-line-height--comfortable)}.gxg-text--negative{font-family:var(--ds-base-font-family-primary);font-size:var(--ds-base-font-size);color:var(--ds-base-font-size-color);font-weight:var(--ds-base-font-size-weight);line-height:var(--ds-base-font-line-height--comfortable);color:var(--ds-base-font-color--negative)}.gxg-text--gray{font-family:var(--ds-base-font-family-primary);font-size:var(--ds-base-font-size);color:var(--ds-base-font-size-color);font-weight:var(--ds-base-font-size-weight);line-height:var(--ds-base-font-line-height--comfortable);color:var(--ds-base-font-color--dimmed)}.gxg-quote{font-family:var(--ds-base-font-family-primary);font-size:var(--ds-base-font-size);color:var(--ds-base-font-size-color);font-weight:var(--ds-base-font-size-weight);line-height:var(--ds-base-font-line-height--comfortable);font-style:italic}.gxg-quote--negative{color:var(--ds-base-font-color--negative)}.gxg-link{line-height:unset;font-family:var(--ds-base-font-family-primary);font-size:var(--ds-base-font-size);color:var(--ds-base-font-size-color);font-weight:var(--ds-base-font-size-weight);line-height:var(--ds-base-font-line-height--comfortable);color:var(--ds-base-font-color--link);text-decoration:underline;cursor:pointer;display:inline-block}.gxg-link:hover{color:var(--ds-base-font-color--link-hover)}.gxg-link:active{color:var(--ds-base-font-color--link-active)}.gxg-link-gray{line-height:unset;font-family:var(--ds-base-font-family-primary);font-size:var(--ds-base-font-size);color:var(--ds-base-font-size-color);font-weight:var(--ds-base-font-size-weight);line-height:var(--ds-base-font-line-height--comfortable);color:var(--ds-base-font-color--link);text-decoration:underline;cursor:pointer;display:inline-block;color:var(--ds-base-font-color--dimmed)}.gxg-link-gray:hover{line-height:unset;font-family:var(--ds-base-font-family-primary);font-size:var(--ds-base-font-size);color:var(--ds-base-font-size-color);font-weight:var(--ds-base-font-size-weight);line-height:var(--ds-base-font-line-height--comfortable);color:var(--ds-base-font-color--link);text-decoration:underline;cursor:pointer;display:inline-block;color:var(--ds-base-font-color--dimmed);filter:brightness(1.4)}.gxg-alert-error{font-family:var(--ds-base-font-family-primary);font-size:var(--ds-base-font-size);color:var(--ds-base-font-size-color);font-weight:var(--ds-base-font-size-weight);line-height:var(--ds-base-font-line-height--comfortable);color:var(--ds-base-font-color--error);display:inline-block}.gxg-alert-warning{font-family:var(--ds-base-font-family-primary);font-size:var(--ds-base-font-size);color:var(--ds-base-font-size-color);font-weight:var(--ds-base-font-size-weight);line-height:var(--ds-base-font-line-height--comfortable);color:var(--ds-base-font-color--warning);display:inline-block}.gxg-alert-success{font-family:var(--ds-base-font-family-primary);font-size:var(--ds-base-font-size);color:var(--ds-base-font-size-color);font-weight:var(--ds-base-font-size-weight);line-height:var(--ds-base-font-line-height--comfortable);color:var(--ds-base-font-color--success);display:inline-block}.gxg-tab--disabled{color:var(--color-primary-disabled);pointer-events:none}.gxg-tab--disabled[disabled]{color:var(--color-primary-disabled);pointer-events:none}.gxg-label{font-family:var(--ds-base-font-family-primary);font-weight:var(--gxg-label-font-weight);font-size:var(--gxg-label-font-size);color:var(--gxg-label-color);text-align:center;line-height:1.455em;display:flex;align-items:center}.gxg-label:hover{color:var(--color-primary-hover)}.gxg-label:focus{color:var(--color-primary-active)}.gxg-label:active{color:var(--color-primary-active)}.gxg-label[disabled]{color:var(--color-primary-disabled)}.gxg-label--negative{color:var(--color-on-primary)}.gxg-label--negative[disabled]{color:var(--color-on-disabled)}.gxg-scrollbar{}.gxg-scrollbar::-webkit-scrollbar{width:var(--gxg-scrollbar-width);height:var(--gxg-scrollbar-width)}.gxg-scrollbar::-webkit-scrollbar-track{background-color:var(--gxg-scrollbar-track-background);border-radius:var(--gxg-scrollbar-track-border-radius)}.gxg-scrollbar::-webkit-scrollbar-thumb{background-color:var(--gxg-scrollbar-track-thumb-background);border-radius:var(--gxg-scrollbar-track-thumb-radius)}.gxg-scrollbar::-webkit-scrollbar-thumb:hover{background-color:var(--gxg-scrollbar-track-thumb-hover-background)}.gxg-scrollbar::-webkit-scrollbar-corner{background:rgba(0, 0, 0, 0)}:host{display:grid;block-size:100%}.card-regular{background-color:var(--mer-surface__elevation--01);border:var(--mer-border__width--sm) solid var(--mer-border-color__on-elevation--01);border-radius:var(--mer-border__radius--md);padding:var(--mer-spacing--md) var(--mer-spacing--md);display:grid}.card-small{background-color:var(--mer-surface__elevation--02);border-radius:var(--mer-border__radius--sm);padding:var(--mer-spacing--sm) var(--mer-spacing--sm)}.card-small--actionable:hover{background-color:var(--mer-color__neutral-gray--600)}.card-small--actionable:active{background-color:var(--mer-color__neutral-gray--650)}.card-small:focus-visible{outline:var(--focus__outline-width) var(--focus__outline-style) var(--focus__outline-color);outline-offset:var(--focus__outline-offset)}.empty-state{block-size:100%;display:flex;align-items:center;justify-content:center;flex-direction:column;gap:var(--mer-spacing--sm);text-align:center}.empty-state__title,.empty-state__button,.empty-state__link{max-inline-size:300px}.opacity-0{opacity:0}.opacity-1{opacity:1}.display-contents{display:contents}.pill-tag{padding:1px 4px;border-radius:2px;min-inline-size:40px;text-align:center;margin-inline-end:10px;font-size:11px}.gxi-hidden{display:none !important}.gxi-full-height{height:100%}.gxi-overflow-auto{overflow:auto}.gxi-display-flex{display:flex}.align-start{display:flex;align-items:start}.align-center{display:flex;align-items:center}.align-end{display:flex;align-items:end}.overflow-auto{overflow:auto}.justify-start{display:flex;justify-content:start}.justify-center{display:flex;justify-content:center}.justify-end{display:flex;justify-content:end}.grid{display:grid;grid-row-gap:var(--gx-ide-grid-row-gap);grid-column-gap:var(--gx-ide-grid-column-gap);grid-template-rows:auto}ch-grid-cell{display:flex}ch-grid{overflow:auto;height:100%}ch-grid-column{z-index:99;border-bottom:1px solid var(--mer-color__neutral-gray--800)}ch-grid-column:first-child{padding-inline-start:var(--gx-ide-container__padding) !important}ch-grid-column:last-child{padding-inline-end:var(--gx-ide-container__padding) !important}ch-grid-cell{--mer-spacing--xs:var(--gx-ide-container__padding)}.layout{display:grid;gap:var(--mer-spacing--lg);box-sizing:border-box}.layout--two-cols{grid-template-columns:1fr 1fr}.layout--space-above{padding-block-start:var(--mer-spacing--lg)}gxg-tabs{box-shadow:none}:host(.gx-ide-component){height:100% !important;display:flex !important;flex-direction:column !important}:host(:focus-within) gx-ide-top-bar::part(wrapper){background-color:var(--color-secondary-enabled)}.gx-ide-main-wrapper{color:var(--gx-ide-component-text-color);font-weight:var(--mer-font__weight--regular);font-size:var(--mer-font__size--xs);font-family:var(--mer-font-family--primary);height:100%;background-color:var(--gx-ide-component-background-color);display:flex;flex-direction:column;flex-grow:1;box-sizing:border-box}.gx-ide-main{flex-grow:1;overflow-y:auto;}.gx-ide-main::-webkit-scrollbar{width:var(--gxg-scrollbar-width);height:var(--gxg-scrollbar-width)}.gx-ide-main::-webkit-scrollbar-track{background-color:var(--gxg-scrollbar-track-background);border-radius:var(--gxg-scrollbar-track-border-radius)}.gx-ide-main::-webkit-scrollbar-thumb{background-color:var(--gxg-scrollbar-track-thumb-background);border-radius:var(--gxg-scrollbar-track-thumb-radius)}.gx-ide-main::-webkit-scrollbar-thumb:hover{background-color:var(--gxg-scrollbar-track-thumb-hover-background)}.gx-ide-main::-webkit-scrollbar-corner{background:rgba(0, 0, 0, 0)}.gx-ide-overflow{overflow-y:auto;}.gx-ide-overflow::-webkit-scrollbar{width:var(--gxg-scrollbar-width);height:var(--gxg-scrollbar-width)}.gx-ide-overflow::-webkit-scrollbar-track{background-color:var(--gxg-scrollbar-track-background);border-radius:var(--gxg-scrollbar-track-border-radius)}.gx-ide-overflow::-webkit-scrollbar-thumb{background-color:var(--gxg-scrollbar-track-thumb-background);border-radius:var(--gxg-scrollbar-track-thumb-radius)}.gx-ide-overflow::-webkit-scrollbar-thumb:hover{background-color:var(--gxg-scrollbar-track-thumb-hover-background)}.gx-ide-overflow::-webkit-scrollbar-corner{background:rgba(0, 0, 0, 0)}.tree-view-primary{font-size:var(--mer-font__size--2xs)}p{margin:0;font-size:var(--mer-font__size--xxs)}.buttons-container{display:flex;gap:var(--mer-spacing--xs)}:host{display:block;inline-size:100%;block-size:100%;padding-inline-end:0 !important}.file-uploader-dialog{display:flex;flex-direction:column;block-size:100%;background-color:var(--mer-surface__background);position:relative}.file-uploader-dialog .dialog-content{flex:1;min-block-size:0;overflow:auto}.file-uploader-dialog .dialog-footer{padding-inline-end:var(--spacing-body-inline-end)}.file-uploader{display:flex;flex-direction:column;inline-size:100%;block-size:100%}.file-uploader__list{display:flex;flex-direction:column;inline-size:100%;block-size:100%}.file-uploader__list-header{position:sticky;top:0;z-index:1;background-color:var(--mer-surface__elevation--01);display:flex;justify-content:space-between;align-items:center;padding-inline-end:var(--spacing-body-inline-end)}.file-uploader__list-content{flex:1;overflow-y:auto;display:flex;flex-direction:column;gap:var(--mer-spacing--xs);padding-inline-end:var(--spacing-body-inline-end);padding-block-end:var(--mer-spacing--md)}.file-uploader__list-title-container{display:flex;align-items:center;gap:var(--mer-spacing--2xs);white-space:nowrap}.file-uploader__drop-zone{display:flex;flex-direction:column;align-items:center;justify-content:center;inline-size:calc(100% - var(--spacing-body-inline-end));block-size:calc(100% - var(--mer-spacing--sm));min-block-size:200px;margin-block-end:var(--mer-spacing--sm);background:var(--mer-surface__elevation--01);border:var(--mer-border__width--md) dashed var(--mer-border-color__dim);border-radius:var(--mer-border__radius--md);transition:border-color 0.3s ease, background-color 0.3s ease, opacity 0.3s ease}.file-uploader__drop-zone--dragging{border-color:var(--mer-accent__primary);background:var(--mer-accent__primary--hover);opacity:0.7}.file-uploader__drop-zone .text-container{display:flex;flex-direction:column;align-items:center;gap:var(--mer-spacing--2xs);margin-block-start:var(--mer-spacing--xs)}.hidden-input{display:none}.label-primary-row{display:flex;align-items:center;gap:var(--mer-spacing--xs)}";
8
8
 
@@ -12,16 +12,16 @@ var n = undefined && undefined.__classPrivateFieldGet || function(e, i, t, a) {
12
12
  return t === "m" ? a : t === "a" ? a.call(e) : a ? a.value : i.get(e);
13
13
  };
14
14
 
15
- var l = undefined && undefined.__classPrivateFieldSet || function(e, i, t, a, o) {
15
+ var l = undefined && undefined.__classPrivateFieldSet || function(e, i, t, a, r) {
16
16
  if (a === "m") throw new TypeError("Private method is not writable");
17
- if (a === "a" && !o) throw new TypeError("Private accessor was defined without a setter");
18
- if (typeof i === "function" ? e !== i || !o : !i.has(e)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
19
- return a === "a" ? o.call(e, t) : o ? o.value = t : i.set(e, t), t;
17
+ if (a === "a" && !r) throw new TypeError("Private accessor was defined without a setter");
18
+ if (typeof i === "function" ? e !== i || !r : !i.has(e)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
19
+ return a === "a" ? r.call(e, t) : r ? r.value = t : i.set(e, t), t;
20
20
  };
21
21
 
22
22
  var d, c, f, g, h, b, v, p, m, u, y, x, w, k, _, z, M, j;
23
23
 
24
- const W = o({
24
+ const W = r({
25
25
  category: "gemini-tools",
26
26
  name: "add",
27
27
  colorType: "primary"
@@ -29,7 +29,7 @@ const W = o({
29
29
 
30
30
  const O = [ "resets/box-sizing", "components/button", "components/icon", "components/list-box", "components/edit", "utils/typography", "utils/spacing", "utils/form", "utils/layout", "utils/elevation", "chameleon/scrollbar" ];
31
31
 
32
- const F = class {
32
+ const C = class {
33
33
  constructor(i) {
34
34
  e(this, i);
35
35
  d.add(this);
@@ -83,7 +83,7 @@ const F = class {
83
83
  i.forEach((async e => {
84
84
  var i, t;
85
85
  const a = n(this, h, "f").call(this);
86
- const o = {
86
+ const r = {
87
87
  id: a,
88
88
  name: e.name,
89
89
  file: e,
@@ -93,10 +93,10 @@ const F = class {
93
93
  if (!this.multiple) {
94
94
  this.fileStates.clear();
95
95
  }
96
- this.fileStates = new Map(this.fileStates.set(a, o));
96
+ this.fileStates = new Map(this.fileStates.set(a, r));
97
97
  if (this.uploadFunction) {
98
98
  try {
99
- const o = this.uploadFunction(e, (e => {
99
+ const r = this.uploadFunction(e, (e => {
100
100
  const i = this.fileStates.get(a);
101
101
  if (i) {
102
102
  const t = Object.assign(Object.assign({}, i), {
@@ -107,15 +107,11 @@ const F = class {
107
107
  }
108
108
  }));
109
109
  // Store the upload promise/object for potential cancellation
110
- const r = Object.assign(Object.assign({}, this.fileStates.get(a)), {
111
- uploadPromise: o
112
- });
113
- this.fileStates = new Map(this.fileStates.set(a, r));
114
- const s = await o;
115
- console.log("Upload result:", {
116
- id: a,
117
- result: s
110
+ const o = Object.assign(Object.assign({}, this.fileStates.get(a)), {
111
+ uploadPromise: r
118
112
  });
113
+ this.fileStates = new Map(this.fileStates.set(a, o));
114
+ const s = await r;
119
115
  const n = this.fileStates.get(a);
120
116
  if (n) {
121
117
  if (s.success && s.remoteId) {
@@ -125,7 +121,6 @@ const F = class {
125
121
  progress: 100
126
122
  });
127
123
  this.fileStates = new Map(this.fileStates.set(a, e));
128
- console.log("File uploaded successfully:", e);
129
124
  await ((i = this.fileUploadedCallback) === null || i === void 0 ? void 0 : i.call(this, {
130
125
  name: n.name,
131
126
  originalName: n.file.name,
@@ -137,7 +132,6 @@ const F = class {
137
132
  pending: false
138
133
  });
139
134
  this.fileStates = new Map(this.fileStates.set(a, e));
140
- console.log("File upload failed:", e);
141
135
  }
142
136
  }
143
137
  } catch (e) {
@@ -148,7 +142,6 @@ const F = class {
148
142
  pending: false
149
143
  });
150
144
  this.fileStates = new Map(this.fileStates.set(a, t));
151
- console.log("File upload error:", t);
152
145
  }
153
146
  }
154
147
  }
@@ -160,9 +153,9 @@ const F = class {
160
153
  /** Handles file name change */ _.set(this, (async e => {
161
154
  var i;
162
155
  const {id: t, name: a} = e.detail;
163
- const o = this.fileStates.get(t);
164
- if (o) {
165
- const e = Object.assign(Object.assign({}, o), {
156
+ const r = this.fileStates.get(t);
157
+ if (r) {
158
+ const e = Object.assign(Object.assign({}, r), {
166
159
  name: a.trim(),
167
160
  isEditing: false
168
161
  });
@@ -174,9 +167,9 @@ const F = class {
174
167
  }
175
168
  }));
176
169
  /** Handles individual file cancellation or deletion */ z.set(this, (async e => {
177
- var i, t, a, o;
178
- const r = e.detail;
179
- const s = this.fileStates.get(r);
170
+ var i, t, a, r;
171
+ const o = e.detail;
172
+ const s = this.fileStates.get(o);
180
173
  if (s) {
181
174
  try {
182
175
  if (s.pending) {
@@ -184,10 +177,10 @@ const F = class {
184
177
  if (s.uploadPromise && typeof s.uploadPromise.cancel === "function") {
185
178
  s.uploadPromise.cancel();
186
179
  } else if (this.cancelUploadFunction) {
187
- await this.cancelUploadFunction(r);
180
+ await this.cancelUploadFunction(o);
188
181
  }
189
- await ((i = this.uploadCancelledCallback) === null || i === void 0 ? void 0 : i.call(this, r));
190
- this.fileStates.delete(r);
182
+ await ((i = this.uploadCancelledCallback) === null || i === void 0 ? void 0 : i.call(this, o));
183
+ this.fileStates.delete(o);
191
184
  this.fileStates = new Map(this.fileStates);
192
185
  } else {
193
186
  const e = {
@@ -198,12 +191,12 @@ const F = class {
198
191
  const i = await ((t = this.onBeforeDelete) === null || t === void 0 ? void 0 : t.call(this, e));
199
192
  if (i) {
200
193
  await ((a = this.fileDeletedCallback) === null || a === void 0 ? void 0 : a.call(this, e));
201
- this.fileStates.delete(r);
194
+ this.fileStates.delete(o);
202
195
  this.fileStates = new Map(this.fileStates);
203
196
  }
204
197
  }
205
198
  } catch (e) {
206
- await ((o = this.fileDeletionErrorCallback) === null || o === void 0 ? void 0 : o.call(this, {
199
+ await ((r = this.fileDeletionErrorCallback) === null || r === void 0 ? void 0 : r.call(this, {
207
200
  fileName: s.name,
208
201
  error: e instanceof Error ? e.message : "Unknown error occurred"
209
202
  }));
@@ -221,21 +214,12 @@ const F = class {
221
214
  // Obtener todos los archivos que están completamente subidos
222
215
  const t = Array.from(this.fileStates.values()).filter((e => {
223
216
  const i = !e.pending && e.remoteId && !e.error;
224
- console.log("File validation:", {
225
- id: e.id,
226
- name: e.name,
227
- pending: e.pending,
228
- remoteId: e.remoteId,
229
- error: e.error,
230
- isValid: i
231
- });
232
217
  return i;
233
218
  })).map((e => ({
234
219
  name: e.name,
235
220
  originalName: e.file.name,
236
221
  remoteId: e.remoteId
237
222
  })));
238
- console.log("Files to be confirmed:", t);
239
223
  if (t.length > 0) {
240
224
  await ((e = this.dialogConfirmedCallback) === null || e === void 0 ? void 0 : e.call(this, t));
241
225
  }
@@ -293,7 +277,7 @@ const F = class {
293
277
  this.isDragging = false;
294
278
  }
295
279
  /** Initializes component with locale strings */ async componentWillLoad() {
296
- l(this, c, await r.getComponentStrings(this.el), "f");
280
+ l(this, c, await o.getComponentStrings(this.el), "f");
297
281
  }
298
282
  /** Clears the current file selection */ async clear() {
299
283
  var e;
@@ -310,7 +294,7 @@ const F = class {
310
294
  this.fileStates.clear();
311
295
  }
312
296
  render() {
313
- var e, a, o, r, s, d, g, h, b, v, k, F, C;
297
+ var e, a, r, o, s, d, g, h, b, v, k, C, E;
314
298
  return i(t, {
315
299
  class: "widget"
316
300
  }, i("ch-theme", {
@@ -349,13 +333,13 @@ const F = class {
349
333
  src: W
350
334
  }), i("label", {
351
335
  class: "label"
352
- }, this.multiple ? (a = n(this, c, "f")) === null || a === void 0 ? void 0 : a.header.uploadButtonMultiple : (o = n(this, c, "f")) === null || o === void 0 ? void 0 : o.header.uploadButtonSingle)), i("div", {
336
+ }, this.multiple ? (a = n(this, c, "f")) === null || a === void 0 ? void 0 : a.header.uploadButtonMultiple : (r = n(this, c, "f")) === null || r === void 0 ? void 0 : r.header.uploadButtonSingle)), i("div", {
353
337
  class: "text-container"
354
338
  }, i("div", {
355
339
  class: "label-primary-row"
356
340
  }, i("label", {
357
341
  class: "label"
358
- }, this.label || ((r = n(this, c, "f")) === null || r === void 0 ? void 0 : r.header.orText)), i("label", {
342
+ }, this.label || ((o = n(this, c, "f")) === null || o === void 0 ? void 0 : o.header.orText)), i("label", {
359
343
  class: "label"
360
344
  }, (s = n(this, c, "f")) === null || s === void 0 ? void 0 : s.header.dragAndDrop)), i("span", {
361
345
  class: "caption"
@@ -395,12 +379,12 @@ const F = class {
395
379
  class: "button-secondary",
396
380
  type: "button",
397
381
  onClick: n(this, j, "f")
398
- }, (F = n(this, c, "f")) === null || F === void 0 ? void 0 : F.buttons.cancel), i("button", {
382
+ }, (C = n(this, c, "f")) === null || C === void 0 ? void 0 : C.buttons.cancel), i("button", {
399
383
  class: "button-primary",
400
384
  type: "button",
401
385
  onClick: n(this, M, "f"),
402
386
  disabled: this.fileStates.size === 0 || Array.from(this.fileStates.values()).some((e => e.pending))
403
- }, (C = n(this, c, "f")) === null || C === void 0 ? void 0 : C.buttons.confirm)))));
387
+ }, (E = n(this, c, "f")) === null || E === void 0 ? void 0 : E.buttons.confirm)))));
404
388
  }
405
389
  static get assetsDirs() {
406
390
  return [ "gx-ide-assets/file-uploader" ];
@@ -467,7 +451,7 @@ d = new WeakSet, b = function _FileUploader_isValidFile(e) {
467
451
  return i;
468
452
  };
469
453
 
470
- F.style = s;
454
+ C.style = s;
471
455
 
472
- export { F as gx_ide_file_uploader };
473
- //# sourceMappingURL=p-17dc4c9c.entry.js.map
456
+ export { C as gx_ide_file_uploader };
457
+ //# sourceMappingURL=p-7d7cf30d.entry.js.map
@@ -0,0 +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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"}
@@ -0,0 +1,270 @@
1
+ import { g as i, r as e, h as t, H as s, a } from "./p-25a9f1d7.js";
2
+
3
+ import { g as n } from "./p-2987a259.js";
4
+
5
+ import { L as o } from "./p-311eedf3.js";
6
+
7
+ const r = ':host{display:grid;block-size:100%;grid-template-areas:"header header" "main aside";grid-template-rows:max-content 1fr;grid-template-columns:1fr 280px;row-gap:12px}.section{display:contents}.header{display:grid;grid-area:header;grid-template-areas:"plugin-icon plugin-details";grid-template-columns:64px 1fr;column-gap:16px;padding:24px 24px 16px 24px}.plugin__icon{grid-area:plugin-icon;max-width:100%}.plugin__details{grid-area:plugin-details;display:flex;flex-direction:column;gap:8px}.plugin__publisher{display:flex;align-items:center;gap:4px}.plugin__description{line-height:1.5}.plugin__actions-container{margin-block-start:8px;align-items:center}.action-button{min-inline-size:100px}.action-button.more-versions-available{border-start-end-radius:0 !important;border-end-end-radius:0 !important}.installed-container{display:flex;align-items:center;gap:6px}.installed-container ch-image{--ch-image-size:20px}.main{grid-area:main}.docsTab{block-size:100%}.aside{grid-area:aside;overflow:auto;border-block-start:1px solid var(--items-container__border-color)}.fields__list{list-style:none;padding:0;margin:0;font-size:12px}.plugin__info-category{display:flex;flex-direction:column;gap:8px}.plugin__info-category:not(:first-child){padding-block-start:16px;margin-block-start:16px;border-block-start:1px solid var(--mer-border-color__on-elevation--01)}.fields__list:not(.fields__list--as-tags){display:flex;flex-direction:column;gap:8px}.fields__list:not(.fields__list--as-tags) .field__li{display:flex;gap:16px}.fields__list--as-tags{display:flex;flex-wrap:wrap;gap:6px}.fields__list--as-tags .field__li{border:1px solid var(--mer-border-color__on-elevation--01);padding:2px 8px;border-radius:4px;text-transform:lowercase}.fields__list--as-tags .field__link{color:var(--mer-text__on-surface)}.fields__list--as-tags .field__link:hover{color:var(--mer-accent__primary)}.fields__list--as-tags .field__link:active{color:var(--mer-accent__primary--hover)}.field__name,.field__value{flex:1}.field__link{color:var(--mer-accent__primary)}.field__link:hover{color:var(--mer-accent__primary--hover)}.field__link:active{color:var(--mer-accent__primary--active)}.docsTab{background-color:transparent !important}.dropdown.button-icon-only::part(expandable-button){padding:calc( ( var(--control__block-size) - 2 * var(--control__border-width) - var(--mer-icon__box--md) ) / 2 ) !important;border-start-start-radius:0 !important;border-end-start-radius:0 !important}.version-buttons-container{display:flex;align-items:center;gap:1px}ch-markdown-viewer{block-size:100%;overflow:auto}.text-underline{text-decoration:underline}';
8
+
9
+ var l = undefined && undefined.__classPrivateFieldGet || function(i, e, t, s) {
10
+ if (t === "a" && !s) throw new TypeError("Private accessor was defined without a getter");
11
+ if (typeof e === "function" ? i !== e || !s : !e.has(i)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
12
+ return t === "m" ? s : t === "a" ? s.call(i) : s ? s.value : e.get(i);
13
+ };
14
+
15
+ var c = undefined && undefined.__classPrivateFieldSet || function(i, e, t, s, a) {
16
+ if (s === "m") throw new TypeError("Private method is not writable");
17
+ if (s === "a" && !a) throw new TypeError("Private accessor was defined without a setter");
18
+ if (typeof e === "function" ? i !== e || !a : !e.has(i)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
19
+ return s === "a" ? a.call(i, t) : a ? a.value = t : e.set(i, t), t;
20
+ };
21
+
22
+ var d, p, h, m, f, u, _, g, b, v, x, w, y, k;
23
+
24
+ const M = n({
25
+ category: "system",
26
+ name: "user",
27
+ colorType: "on-elevation"
28
+ });
29
+
30
+ const W = n({
31
+ category: "system",
32
+ name: "chevron-down",
33
+ colorType: "on-primary"
34
+ });
35
+
36
+ const T = n({
37
+ category: "system",
38
+ name: "check-circle",
39
+ colorType: "success"
40
+ });
41
+
42
+ // plugin icon if no iconUri was provided
43
+ const z = i(`./gx-ide-assets/plugin-manager/images/plugin-icon.svg`);
44
+
45
+ const C = [ "resets/box-sizing", "chameleon/scrollbar", "components/button", "components/dropdown", "components/edit", "components/icon", "components/list-box", "components/tab", "utils/form", "utils/layout", "utils/spacing", "utils/typography" ];
46
+
47
+ const j = class {
48
+ constructor(i) {
49
+ e(this, i);
50
+ /**
51
+ * The component hard-coded strings translations.
52
+ */
53
+ // eslint-disable-next-line @stencil-community/own-props-must-be-private
54
+ d.set(this, void 0);
55
+ // A map between docSection "id", and docSection "description".
56
+ // "id" is generated inside this component.
57
+ p.set(this, new Map);
58
+ h.set(this, (() => {
59
+ var i;
60
+ const e = (i = this.data.versions) === null || i === void 0 ? void 0 : i.map((i => ({
61
+ id: i,
62
+ caption: i
63
+ })));
64
+ return e;
65
+ }));
66
+ m.set(this, (i => {
67
+ const e = i.detail.id;
68
+ this.installCallback(e);
69
+ }));
70
+ f.set(this, (() => t("button", {
71
+ class: "button-tertiary",
72
+ onClick: l(this, b, "f")
73
+ }, l(this, d, "f").actions.uninstall)));
74
+ u.set(this, (() => {
75
+ this.installCallback();
76
+ }));
77
+ _.set(this, (i => () => {
78
+ this.installCallback(i);
79
+ }));
80
+ g.set(this, (i => e => {
81
+ e.preventDefault();
82
+ this.openLinkCallback(i);
83
+ }));
84
+ b.set(this, (() => {
85
+ this.uninstallCallback();
86
+ }));
87
+ v.set(this, (() => {
88
+ var i;
89
+ let e;
90
+ let s = "button-primary action-button";
91
+ let a;
92
+ const n = (i = this.data.versions) === null || i === void 0 ? void 0 : i.length;
93
+ if (!this.data.installed) {
94
+ e = l(this, d, "f").actions.install;
95
+ a = l(this, u, "f");
96
+ } else if (this.data.updateVersion) {
97
+ e = `${l(this, d, "f").actions.updateTo} ${this.data.updateVersion}`;
98
+ a = l(this, _, "f").call(this, this.data.updateVersion);
99
+ } else {
100
+ e = l(this, d, "f").actions.installed;
101
+ }
102
+ if (n) {
103
+ s = `${s} more-versions-available`;
104
+ }
105
+ return [ t("div", {
106
+ class: "version-buttons-container"
107
+ }, t("button", {
108
+ class: s,
109
+ onClick: a
110
+ }, e), n ? t("ch-action-menu-render", {
111
+ class: "dropdown button-primary button-icon-only",
112
+ blockAlign: "outside-end",
113
+ inlineAlign: "inside-start",
114
+ model: l(this, h, "f").call(this),
115
+ onButtonClick: l(this, m, "f")
116
+ }, t("ch-image", {
117
+ src: W,
118
+ class: "icon-md"
119
+ })) : null) ];
120
+ }));
121
+ x.set(this, (i => {
122
+ this.selectedTabId = i.detail.newSelectedId;
123
+ }));
124
+ w.set(this, (() => this.docsTabModel.map((i => {
125
+ if (i.id === this.selectedTabId) {
126
+ const e = l(this, p, "f").get(i.id);
127
+ return t("ch-markdown-viewer", {
128
+ slot: i.id,
129
+ key: i.id,
130
+ class: "markdown spacing-body scrollable",
131
+ theme: "components/markdown-viewer",
132
+ value: e
133
+ });
134
+ }
135
+ }))));
136
+ y.set(this, (i => i.toLowerCase().replace(/\s+/g, "-")));
137
+ k.set(this, (() => this.data.infoCategories.map((i => t("div", {
138
+ class: "plugin__info-category"
139
+ }, t("h3", {
140
+ class: "subtitle-semi-bold-s"
141
+ }, i.name), t("ul", {
142
+ class: {
143
+ fields__list: true,
144
+ "fields__list--as-tags": i.displayAsTags
145
+ }
146
+ }, i.fields.map((e => {
147
+ // If the field name isn’t specified, only the value is shown — usually a link.
148
+ const s = typeof e.value === "string" ? e.value : t("a", {
149
+ class: "field__link",
150
+ onClick: l(this, g, "f").call(this, e.value.url)
151
+ }, e.value.text);
152
+ return t("li", {
153
+ class: "field__li"
154
+ }, e.name && !i.displayAsTags ? // displaysAsTags forces the items to be displayed as tags
155
+ // no span.field__name and span.field__value
156
+ [ t("span", {
157
+ class: "field__name body-semi-bold-s"
158
+ }, e.name), t("span", {
159
+ class: "field__value body-regular-s"
160
+ }, s) ] : s);
161
+ }))))))));
162
+ this.docsTabModel = [];
163
+ this.selectedTabId = undefined;
164
+ this.data = undefined;
165
+ this.installCallback = undefined;
166
+ this.openLinkCallback = undefined;
167
+ this.uninstallCallback = undefined;
168
+ }
169
+ async componentWillLoad() {
170
+ var i;
171
+ c(this, d, await o.getComponentStrings(this.el), "f");
172
+ if ((i = this.data.docSections) === null || i === void 0 ? void 0 : i.length) {
173
+ this.docsTabModel = this.data.docSections.map(((i, e) => {
174
+ const t = l(this, y, "f").call(this, i.name);
175
+ l(this, p, "f").set(t, i.content);
176
+ if (e === 0) {
177
+ this.selectedTabId = t;
178
+ }
179
+ return {
180
+ id: t,
181
+ name: i.name
182
+ };
183
+ }));
184
+ }
185
+ }
186
+ render() {
187
+ const i = !this.data.installed || this.data.installed && !!this.data.updateVersion;
188
+ const e = this.data.name.text;
189
+ const a = this.data.name.url;
190
+ const n = e && a;
191
+ const o = e || this.data.name;
192
+ const r = this.data.publisher.text;
193
+ const c = this.data.publisher.url;
194
+ const p = r && c;
195
+ const h = r || this.data.publisher;
196
+ return t(s, {
197
+ class: "widget"
198
+ }, t("ch-theme", {
199
+ model: C
200
+ }), t("section", {
201
+ class: "section"
202
+ }, t("header", {
203
+ class: "header"
204
+ }, t("img", {
205
+ class: "plugin__icon",
206
+ src: this.data.iconUrl || z,
207
+ alt: "plugin extension icon"
208
+ }), t("div", {
209
+ class: "plugin__details"
210
+ }, n ? t("h2", {
211
+ class: "heading-5"
212
+ }, t("a", {
213
+ href: a,
214
+ onClick: l(this, g, "f").call(this, a),
215
+ class: "text-underline"
216
+ }, o)) : t("h2", {
217
+ class: "heading-5"
218
+ }, o), p ? t("a", {
219
+ href: c,
220
+ onClick: l(this, g, "f").call(this, c),
221
+ class: "text-underline plugin__publisher tiny-semi-bold-l"
222
+ }, t("ch-image", {
223
+ src: M,
224
+ class: "icon-md"
225
+ }), h) : t("p", {
226
+ class: "plugin__publisher tiny-semi-bold-l"
227
+ }, t("ch-image", {
228
+ src: M,
229
+ class: "icon-md"
230
+ }), h), t("p", {
231
+ class: "plugin__description"
232
+ }, this.data.description), t("div", {
233
+ class: "buttons-spacer plugin__actions-container"
234
+ }, i ? l(this, v, "f").call(this) :
235
+ // installed and no updates
236
+ t("p", {
237
+ class: "installed-container subtitle-semi-bold-s"
238
+ }, t("ch-image", {
239
+ src: T,
240
+ class: "icon-md"
241
+ }), l(this, d, "f").actions.installed), this.data.installed && l(this, f, "f").call(this)))), t("div", {
242
+ class: "main"
243
+ }, this.docsTabModel.length > 0 && t("ch-tab-render", {
244
+ class: "tab docsTab scrollable",
245
+ tabListPosition: "block-start",
246
+ overflow: "auto",
247
+ contain: "size",
248
+ model: this.docsTabModel,
249
+ onSelectedItemChange: l(this, x, "f"),
250
+ selectedId: this.selectedTabId
251
+ }, l(this, w, "f").call(this))), t("div", {
252
+ class: "aside spacing-body scrollable"
253
+ }, l(this, k, "f").call(this))));
254
+ }
255
+ static get assetsDirs() {
256
+ return [ "gx-ide-assets/plugin-details" ];
257
+ }
258
+ get el() {
259
+ return a(this);
260
+ }
261
+ };
262
+
263
+ d = new WeakMap, p = new WeakMap, h = new WeakMap, m = new WeakMap, f = new WeakMap,
264
+ u = new WeakMap, _ = new WeakMap, g = new WeakMap, b = new WeakMap, v = new WeakMap,
265
+ x = new WeakMap, w = new WeakMap, y = new WeakMap, k = new WeakMap;
266
+
267
+ j.style = r;
268
+
269
+ export { j as gx_ide_plugin_details };
270
+ //# sourceMappingURL=p-84c1c1bb.entry.js.map