@genexus/genexus-ide-ui 0.0.136 → 0.0.137

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 (80) hide show
  1. package/dist/cjs/genexus-ide-ui.cjs.js +1 -1
  2. package/dist/cjs/gx-ide-bpm-files-selector.cjs.entry.js +101 -0
  3. package/dist/cjs/gx-ide-bpm-files-selector.cjs.entry.js.map +1 -0
  4. package/dist/cjs/gx-ide-list-selector_2.cjs.entry.js +18 -2
  5. package/dist/cjs/gx-ide-list-selector_2.cjs.entry.js.map +1 -1
  6. package/dist/cjs/gx-ide-team-dev-select-recent-comment.cjs.entry.js +8 -14
  7. package/dist/cjs/gx-ide-team-dev-select-recent-comment.cjs.entry.js.map +1 -1
  8. package/dist/cjs/loader.cjs.js +1 -1
  9. package/dist/cjs/render-list-item-c7e24eb8.js +19 -0
  10. package/dist/cjs/render-list-item-c7e24eb8.js.map +1 -0
  11. package/dist/collection/collection-manifest.json +2 -2
  12. package/dist/collection/common/render-list-item.js +1 -1
  13. package/dist/collection/common/render-list-item.js.map +1 -1
  14. package/dist/collection/components/_helpers/list-selector/list-selector-item/list-selector-item.js +4 -2
  15. package/dist/collection/components/_helpers/list-selector/list-selector-item/list-selector-item.js.map +1 -1
  16. package/dist/collection/components/_helpers/list-selector/list-selector.js +15 -1
  17. package/dist/collection/components/_helpers/list-selector/list-selector.js.map +1 -1
  18. package/dist/collection/components/{file-selector/file-selector.css → bpm/files-selector/files-selector.css} +232 -17
  19. package/dist/collection/components/bpm/files-selector/files-selector.js +215 -0
  20. package/dist/collection/components/bpm/files-selector/files-selector.js.map +1 -0
  21. package/dist/collection/components/bpm/files-selector/gx-ide-assets/bpm-files-selector/langs/bpm-files-selector.lang.en.json +14 -0
  22. package/dist/collection/components/bpm/files-selector/gx-ide-assets/bpm-files-selector/langs/bpm-files-selector.lang.ja.json +3 -0
  23. package/dist/collection/components/bpm/files-selector/gx-ide-assets/bpm-files-selector/langs/bpm-files-selector.lang.zh.json +3 -0
  24. package/dist/collection/components/bpm/files-selector/helpers.js +17 -0
  25. package/dist/collection/components/bpm/files-selector/helpers.js.map +1 -0
  26. package/dist/collection/components/team-dev/select-recent-comment/helpers.js +6 -1
  27. package/dist/collection/components/team-dev/select-recent-comment/helpers.js.map +1 -1
  28. package/dist/components/gx-ide-bpm-files-selector.d.ts +11 -0
  29. package/dist/components/gx-ide-bpm-files-selector.js +164 -0
  30. package/dist/components/gx-ide-bpm-files-selector.js.map +1 -0
  31. package/dist/components/gx-ide-team-dev-select-recent-comment.js +8 -14
  32. package/dist/components/gx-ide-team-dev-select-recent-comment.js.map +1 -1
  33. package/dist/components/list-selector-item.js +3 -1
  34. package/dist/components/list-selector-item.js.map +1 -1
  35. package/dist/components/list-selector.js +15 -1
  36. package/dist/components/list-selector.js.map +1 -1
  37. package/dist/components/render-list-item.js +17 -0
  38. package/dist/components/render-list-item.js.map +1 -0
  39. package/dist/esm/genexus-ide-ui.js +1 -1
  40. package/dist/esm/gx-ide-bpm-files-selector.entry.js +97 -0
  41. package/dist/esm/gx-ide-bpm-files-selector.entry.js.map +1 -0
  42. package/dist/esm/gx-ide-list-selector_2.entry.js +18 -2
  43. package/dist/esm/gx-ide-list-selector_2.entry.js.map +1 -1
  44. package/dist/esm/gx-ide-team-dev-select-recent-comment.entry.js +8 -14
  45. package/dist/esm/gx-ide-team-dev-select-recent-comment.entry.js.map +1 -1
  46. package/dist/esm/loader.js +1 -1
  47. package/dist/esm/render-list-item-9953ed8a.js +17 -0
  48. package/dist/esm/render-list-item-9953ed8a.js.map +1 -0
  49. package/dist/genexus-ide-ui/genexus-ide-ui.esm.js +1 -1
  50. package/dist/genexus-ide-ui/genexus-ide-ui.esm.js.map +1 -1
  51. package/dist/genexus-ide-ui/gx-ide-assets/bpm-files-selector/langs/bpm-files-selector.lang.en.json +14 -0
  52. package/dist/genexus-ide-ui/gx-ide-assets/bpm-files-selector/langs/bpm-files-selector.lang.ja.json +3 -0
  53. package/dist/genexus-ide-ui/gx-ide-assets/bpm-files-selector/langs/bpm-files-selector.lang.zh.json +3 -0
  54. package/dist/genexus-ide-ui/{p-84c20e24.entry.js → p-0aa83432.entry.js} +20 -31
  55. package/dist/genexus-ide-ui/p-0aa83432.entry.js.map +1 -0
  56. package/dist/genexus-ide-ui/{p-bd9cbfaf.entry.js → p-12d70e04.entry.js} +35 -19
  57. package/dist/genexus-ide-ui/p-12d70e04.entry.js.map +1 -0
  58. package/dist/genexus-ide-ui/{p-e497877c.entry.js → p-5d1135f5.entry.js} +120 -46
  59. package/dist/genexus-ide-ui/p-5d1135f5.entry.js.map +1 -0
  60. package/dist/genexus-ide-ui/p-6c2ecbac.js +20 -0
  61. package/dist/genexus-ide-ui/p-6c2ecbac.js.map +1 -0
  62. package/dist/types/components/_helpers/list-selector/list-selector-item/list-selector-item.d.ts +1 -0
  63. package/dist/types/components/_helpers/list-selector/list-selector.d.ts +1 -0
  64. package/dist/types/components/bpm/files-selector/files-selector.d.ts +50 -0
  65. package/dist/types/components/bpm/files-selector/helpers.d.ts +2 -0
  66. package/dist/types/components.d.ts +69 -71
  67. package/package.json +1 -1
  68. package/dist/cjs/gx-ide-file-selector.cjs.entry.js +0 -49
  69. package/dist/cjs/gx-ide-file-selector.cjs.entry.js.map +0 -1
  70. package/dist/collection/components/file-selector/file-selector.js +0 -191
  71. package/dist/collection/components/file-selector/file-selector.js.map +0 -1
  72. package/dist/components/gx-ide-file-selector.d.ts +0 -11
  73. package/dist/components/gx-ide-file-selector.js +0 -107
  74. package/dist/components/gx-ide-file-selector.js.map +0 -1
  75. package/dist/esm/gx-ide-file-selector.entry.js +0 -45
  76. package/dist/esm/gx-ide-file-selector.entry.js.map +0 -1
  77. package/dist/genexus-ide-ui/p-84c20e24.entry.js.map +0 -1
  78. package/dist/genexus-ide-ui/p-bd9cbfaf.entry.js.map +0 -1
  79. package/dist/genexus-ide-ui/p-e497877c.entry.js.map +0 -1
  80. package/dist/types/components/file-selector/file-selector.d.ts +0 -38
@@ -0,0 +1,97 @@
1
+ import { r as registerInstance, c as createEvent, h, H as Host, g as getElement } from './index-5bd24426.js';
2
+ import { c as config } from './config-a492e15e.js';
3
+ import { L as Locale } from './locale-3c32f251.js';
4
+ import { r as renderListItems } from './render-list-item-9953ed8a.js';
5
+
6
+ const filesToListItemsData = (files) => {
7
+ const itemsData = [];
8
+ files.forEach(file => {
9
+ const itemId = typeof file === "string" ? file : file.name;
10
+ const itemValue = typeof file === "string" ? file : file.name;
11
+ const itemIcon = undefined;
12
+ const itemChecked = false;
13
+ itemsData.push({
14
+ itemId: itemId,
15
+ itemValue: itemValue,
16
+ itemIcon: itemIcon,
17
+ itemChecked: itemChecked
18
+ });
19
+ });
20
+ return itemsData;
21
+ };
22
+
23
+ const filesSelectorCss = ":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)}.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-container{display:flex;height:100%;width:100%;box-sizing:border-box}p{margin:0}.control-wrapper{display:flex;gap:var(--mer-spacing--xs);align-items:center}.control-wrapper--vertical{flex-direction:column;align-items:start}.controls-wrapper{display:flex;gap:var(--mer-spacing--xs)}.controls-wrapper--vertical{flex-direction:column;align-items:start}.input-text{box-sizing:border-box;background-color:transparent;border:var(--mer-border__width--sm) solid var(--mer-border-color__dim);border-radius:var(--mer-border__width--lg);height:26px;color:var(--mer-text__bright);font-size:var(--mer-font__size--xxs)}.input-text--full-width{align-self:stretch}:host{display:block}.hidden-input{display:none}";
24
+
25
+ const GxIdeTemplate = class {
26
+ constructor(hostRef) {
27
+ registerInstance(this, hostRef);
28
+ this.componentDidRenderFirstTime = createEvent(this, "componentDidRenderFirstTime", 7);
29
+ this.selectionChanged = createEvent(this, "selectionChanged", 7);
30
+ this.renderedFirstTime = false;
31
+ // 7.LISTENERS //
32
+ // 8.PUBLIC METHODS API //
33
+ // 9.LOCAL METHODS //
34
+ this.fileSelectionChangedHandler = (selectedItem) => {
35
+ this.selectionChanged.emit();
36
+ const selectedFiles = Array.isArray(selectedItem.detail)
37
+ ? selectedItem.detail
38
+ : [selectedItem.detail];
39
+ this.selectedFiles = selectedFiles.map(item => item.itemValue);
40
+ };
41
+ this.loadFileHandle = async () => {
42
+ this.fileInput.click();
43
+ };
44
+ this.handleFileInputChange = async (event) => {
45
+ const fileInput = event.target;
46
+ if (fileInput.files && fileInput.files.length > 0) {
47
+ const newFiles = Array.from(fileInput.files);
48
+ const uniqueFiles = newFiles.filter(newFile => !this.files.some(existingFile => existingFile.name === newFile.name));
49
+ this.files = [...this.files, ...uniqueFiles];
50
+ }
51
+ if (this.addCallback) {
52
+ await this.addCallback(this.files);
53
+ }
54
+ this.fileInput.value = null;
55
+ };
56
+ this.removeFiles = (filesToRemove) => {
57
+ const removedFiles = this.files.filter(file => filesToRemove.includes(file.name));
58
+ this.files = this.files.filter(file => !filesToRemove.includes(file.name));
59
+ if (this.removeCallback) {
60
+ this.removeCallback(removedFiles);
61
+ this.selectedFiles = [];
62
+ this.fileInput.value = null;
63
+ }
64
+ };
65
+ this.handleRemoveButtonClick = () => {
66
+ this.removeFiles(this.selectedFiles);
67
+ };
68
+ this.files = [];
69
+ this.selectedFiles = [];
70
+ this.displayTitle = false;
71
+ this.allowedExtensions = undefined;
72
+ this.addCallback = undefined;
73
+ this.removeCallback = undefined;
74
+ }
75
+ // 6.COMPONENT LIFECYCLE METHODS //
76
+ async componentWillLoad() {
77
+ this._componentLocale = await Locale.getComponentStrings(this.el);
78
+ }
79
+ componentDidRender() {
80
+ if (!this.renderedFirstTime) {
81
+ this.componentDidRenderFirstTime.emit(this._componentLocale.componentName);
82
+ this.renderedFirstTime = true;
83
+ }
84
+ }
85
+ // 10.RENDER() FUNCTION //
86
+ render() {
87
+ var _a;
88
+ return (h(Host, { class: "gx-ide-component" }, h("div", { class: "gx-ide-main-wrapper" }, h("gx-ide-container", { containerTitle: this.displayTitle ? this._componentLocale.componentName : null, slimmerFooter: config.gxIdeContainer.slimmerFooter }, h("label", { htmlFor: "path-list" }, this._componentLocale.main.listLabel), h("gx-ide-list-selector", { id: "path-list", type: "multi-selection", listName: "path-list", noListBorder: true, ordered: true, onSelectionChanged: this.fileSelectionChangedHandler, class: "path-list" }, renderListItems(filesToListItemsData(this.files))), h("div", { class: "controls-wrapper" }, h("input", { type: "file", id: "input_file", accept: (_a = this.allowedExtensions) === null || _a === void 0 ? void 0 : _a.join(", "), ref: el => (this.fileInput = el), onChange: this.handleFileInputChange, class: "hidden-input", multiple: true }), h("button", { onClick: this.loadFileHandle }, this._componentLocale.main.addFilesButton), h("button", { onClick: this.handleRemoveButtonClick, disabled: this.selectedFiles.length === 0 }, this._componentLocale.main.removeFilesButton, " (", this.selectedFiles.length, ")"))))));
89
+ }
90
+ static get assetsDirs() { return ["gx-ide-assets/bpm-files-selector"]; }
91
+ get el() { return getElement(this); }
92
+ };
93
+ GxIdeTemplate.style = filesSelectorCss;
94
+
95
+ export { GxIdeTemplate as gx_ide_bpm_files_selector };
96
+
97
+ //# sourceMappingURL=gx-ide-bpm-files-selector.entry.js.map
@@ -0,0 +1 @@
1
+ {"file":"gx-ide-bpm-files-selector.entry.js","mappings":"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","names":[],"sources":["src/components/bpm/files-selector/helpers.ts","src/components/bpm/files-selector/files-selector.scss?tag=gx-ide-bpm-files-selector&encapsulation=shadow","src/components/bpm/files-selector/files-selector.tsx"],"sourcesContent":["import { ItemData } from \"../../_helpers/list-selector/list-selector-item/list-selector-item\";\n\nexport const filesToListItemsData = (files: string[] | File[]): ItemData[] => {\n const itemsData: ItemData[] = [];\n files.forEach(file => {\n const itemId = typeof file === \"string\" ? file : file.name;\n const itemValue = typeof file === \"string\" ? file : file.name;\n const itemIcon: string = undefined;\n const itemChecked: boolean = false;\n itemsData.push({\n itemId: itemId,\n itemValue: itemValue,\n itemIcon: itemIcon,\n itemChecked: itemChecked\n });\n });\n return itemsData;\n};\n","@import \"../../../global/gx-ide-common.scss\";\n@import \"../../../global/gx-ide-mixins.scss\";\n@import \"../../../global/temporary-tokens-chameleon.scss\";\n\n:host {\n display: block;\n}\n.hidden-input {\n display: none;\n}\n","/* STENCIL IMPORTS */\nimport {\n Component,\n Host,\n h,\n Prop,\n Element,\n Event,\n EventEmitter,\n State\n} from \"@stencil/core\";\n/* OTHER LIBRARIES IMPORTS */\nimport { CheckedItemsInfo } from \"../../_helpers/list-selector/list-selector\";\n/* CUSTOM IMPORTS */\nimport { config } from \"../../../common/config\";\nimport { Locale } from \"../../../common/locale\";\nimport { renderListItems } from \"../../../common/render-list-item\";\nimport { filesToListItemsData } from \"./helpers\";\n\n@Component({\n tag: \"gx-ide-bpm-files-selector\",\n styleUrl: \"files-selector.scss\",\n shadow: true,\n assetsDirs: [\"gx-ide-assets/bpm-files-selector\"]\n})\nexport class GxIdeTemplate {\n // 1.OWN PROPERTIES //\n\n /**\n * The component hard-coded strings translations.\n */\n private _componentLocale: any;\n\n private renderedFirstTime = false;\n\n // 2. REFERENCE TO ELEMENTS //\n\n @Element() el: HTMLGxIdeBpmFilesSelectorElement;\n\n private fileInput: HTMLInputElement;\n\n // 3.STATE() VARIABLES //\n /**\n * Contains the list of files\n */\n @State() files: File[] = [];\n\n /**\n * Contains the list of selected files\n */\n @State() selectedFiles: string[] = [];\n\n // 4.PUBLIC PROPERTY API | WATCH'S //\n\n /**\n * If true it displays the component title on the header\n */\n @Prop() readonly displayTitle = false;\n\n /**\n * Allowed extensions when 'Add files' button is pressed\n */\n @Prop() readonly allowedExtensions: string[];\n\n /**\n * Callback invoked when user press 'Add files' button. Returns a list with selected files.\n */\n @Prop() readonly addCallback: (files: File[]) => Promise<void>;\n\n /**\n * Callback invoked when remove button is pressed.\n */\n @Prop() readonly removeCallback: (files: File[] | string[]) => Promise<void>;\n\n // 5.EVENTS (EMIT) //\n\n /**\n * @description Gets fired when the component has rendered for the first time.\n */\n @Event() componentDidRenderFirstTime: EventEmitter<string>;\n\n /**\n * @description Gets fired when something changes on items section.\n */\n @Event() selectionChanged: EventEmitter<void>;\n\n // 6.COMPONENT LIFECYCLE METHODS //\n\n async componentWillLoad() {\n this._componentLocale = await Locale.getComponentStrings(this.el);\n }\n\n componentDidRender() {\n if (!this.renderedFirstTime) {\n this.componentDidRenderFirstTime.emit(\n this._componentLocale.componentName\n );\n this.renderedFirstTime = true;\n }\n }\n\n // 7.LISTENERS //\n\n // 8.PUBLIC METHODS API //\n\n // 9.LOCAL METHODS //\n\n private fileSelectionChangedHandler = (\n selectedItem: CustomEvent<CheckedItemsInfo>\n ) => {\n this.selectionChanged.emit();\n\n const selectedFiles = Array.isArray(selectedItem.detail)\n ? selectedItem.detail\n : [selectedItem.detail];\n\n this.selectedFiles = selectedFiles.map(item => item.itemValue);\n };\n\n private loadFileHandle = async () => {\n this.fileInput.click();\n };\n\n private handleFileInputChange = async (event: Event) => {\n const fileInput = event.target as HTMLInputElement;\n\n if (fileInput.files && fileInput.files.length > 0) {\n const newFiles: File[] = Array.from(fileInput.files);\n const uniqueFiles = newFiles.filter(\n newFile =>\n !this.files.some(existingFile => existingFile.name === newFile.name)\n );\n this.files = [...this.files, ...uniqueFiles];\n }\n if (this.addCallback) {\n await this.addCallback(this.files);\n }\n\n this.fileInput.value = null;\n };\n\n private removeFiles = (filesToRemove: string[]) => {\n const removedFiles = this.files.filter(file =>\n filesToRemove.includes(file.name)\n );\n\n this.files = this.files.filter(file => !filesToRemove.includes(file.name));\n\n if (this.removeCallback) {\n this.removeCallback(removedFiles);\n this.selectedFiles = [];\n this.fileInput.value = null;\n }\n };\n\n private handleRemoveButtonClick = () => {\n this.removeFiles(this.selectedFiles);\n };\n\n // 10.RENDER() FUNCTION //\n\n render() {\n return (\n <Host class=\"gx-ide-component\">\n <div class=\"gx-ide-main-wrapper\">\n <gx-ide-container\n containerTitle={\n this.displayTitle ? this._componentLocale.componentName : null\n }\n slimmerFooter={config.gxIdeContainer.slimmerFooter}\n >\n {/* path list*/}\n <label htmlFor=\"path-list\">\n {this._componentLocale.main.listLabel}\n </label>\n <gx-ide-list-selector\n id=\"path-list\"\n type=\"multi-selection\"\n listName=\"path-list\"\n noListBorder\n ordered\n onSelectionChanged={this.fileSelectionChangedHandler}\n class=\"path-list\"\n >\n {renderListItems(filesToListItemsData(this.files))}\n </gx-ide-list-selector>\n\n <div class=\"controls-wrapper\">\n <input\n type=\"file\"\n id=\"input_file\"\n accept={this.allowedExtensions?.join(\", \")}\n ref={el => (this.fileInput = el as HTMLInputElement)}\n onChange={this.handleFileInputChange}\n class=\"hidden-input\"\n multiple\n />\n <button onClick={this.loadFileHandle}>\n {this._componentLocale.main.addFilesButton}\n </button>\n <button\n onClick={this.handleRemoveButtonClick}\n disabled={this.selectedFiles.length === 0}\n >\n {this._componentLocale.main.removeFilesButton} (\n {this.selectedFiles.length})\n </button>\n </div>\n </gx-ide-container>\n </div>\n </Host>\n );\n }\n}\n"],"version":3}
@@ -58,6 +58,14 @@ const GxIdeListSelector = class {
58
58
  });
59
59
  return checkedItems;
60
60
  };
61
+ this.clearPrevSelected = (currentSelected) => {
62
+ const allItems = this.el.querySelectorAll("gx-ide-list-selector-item");
63
+ allItems.forEach(item => {
64
+ if (item.itemChecked && item.itemId !== currentSelected.itemId) {
65
+ item.itemChecked = false;
66
+ }
67
+ });
68
+ };
61
69
  this.listTitle = undefined;
62
70
  this.ordered = false;
63
71
  this.readonly = false;
@@ -79,6 +87,10 @@ const GxIdeListSelector = class {
79
87
  // 7.LISTENERS //
80
88
  itemSelectionChangedHandler(event) {
81
89
  event.stopPropagation();
90
+ const selectedItem = event.detail;
91
+ if (this.type === "single-selection") {
92
+ this.clearPrevSelected(selectedItem);
93
+ }
82
94
  const checkedItemsInfo = [];
83
95
  const checkedItems = this.getChecked();
84
96
  const newValue = [];
@@ -87,7 +99,9 @@ const GxIdeListSelector = class {
87
99
  newValue.push(value);
88
100
  checkedItemsInfo.push({
89
101
  itemId: item.itemId,
90
- itemValue: value
102
+ itemValue: value,
103
+ itemIcon: item.icon,
104
+ itemChecked: true
91
105
  });
92
106
  });
93
107
  /* update this.value*/
@@ -208,7 +222,9 @@ const GxIdeListSelectorItem = class {
208
222
  this.itemChecked = e.target.checked;
209
223
  this.itemSelectionChanged.emit({
210
224
  itemId: this.itemId,
211
- itemValue: this.itemValue
225
+ itemValue: this.itemValue,
226
+ itemIcon: this.icon,
227
+ itemChecked: this.itemChecked
212
228
  });
213
229
  };
214
230
  this.itemId = undefined;
@@ -1 +1 @@
1
- {"file":"gx-ide-list-selector.gx-ide-list-selector-item.entry.js","mappings":"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","names":[],"sources":["src/components/_helpers/list-selector/list-selector.scss?tag=gx-ide-list-selector&encapsulation=shadow","src/components/_helpers/list-selector/list-selector.tsx","src/components/_helpers/list-selector/list-selector-item/list-selector-item.scss?tag=gx-ide-list-selector-item","src/components/_helpers/list-selector/list-selector-item/list-selector-item.tsx"],"sourcesContent":["@import \"../../../global/reset.scss\";\n@import \"../../../global/gx-ide-mixins.scss\";\n@import \"../../../global/gx-ide-common.scss\";\n@include box-sizing;\n\n:host {\n display: flex;\n flex-direction: column;\n max-height: 100%;\n font-family: var(--mer-font-family--primary);\n}\ngxg-title {\n display: block;\n margin-block-end: var(--gxg-label-margin-vertical);\n}\n.list {\n @include reset-defaults;\n @include reset-list;\n @include base-component-styles;\n @include gxg-scrollbar;\n display: block;\n background-color: var(--mer-color__surface);\n max-height: 100%;\n overflow-y: auto;\n border: 1px solid var(--gx-ide-container-border-color);\n border-radius: var(--ds-form-control-border-radius);\n}\n/*no border*/\n:host([no-list-border]) {\n .list {\n border: none;\n }\n}\n","/* STENCIL IMPORTS */\nimport {\n Component,\n Host,\n h,\n Prop,\n Listen,\n // Watch,\n Element,\n Event,\n EventEmitter\n} from \"@stencil/core\";\n/* OTHER LIBRARIES IMPORTS */\nimport { Color, Size } from \"@genexus/gemini/dist/types/components/icon/icon\";\n/* CUSTOM IMPORTS */\nimport { ItemData } from \"./list-selector-item/list-selector-item\";\n\n@Component({\n tag: \"gx-ide-list-selector\",\n styleUrl: \"list-selector.scss\",\n shadow: true\n})\nexport class GxIdeListSelector {\n /*\nINDEX:\n1.OWN PROPERTIES \n2.REFERENCE TO ELEMENTS\n3.STATE() VARIABLES\n4.PUBLIC PROPERTY API | WATCH'S\n5.EVENTS (EMIT)\n6.COMPONENT LIFECYCLE METHODS\n7.LISTENERS\n8.PUBLIC METHODS API\n9.LOCAL METHODS\n10.RENDER() FUNCTION\n*/\n\n // 1.OWN PROPERTIES | WATCH'S //\n\n // 2. REFERENCE TO ELEMENTS //\n\n @Element() el: HTMLGxIdeListSelectorElement;\n\n // 3.STATE() VARIABLES //\n\n // 4.PUBLIC PROPERTY API | WATCH'S //\n\n /**\n * The list title (optional)\n */\n @Prop() readonly listTitle: string;\n\n /**\n * It determines if the list is ordered, or unordered\n */\n @Prop() readonly ordered: boolean = false;\n\n /**\n * Makes the list readonly\n */\n @Prop() readonly readonly: boolean = false;\n\n /**\n * It determines the type of list: single-selection or multi-selection\n */\n @Prop() readonly type: \"single-selection\" | \"multi-selection\" =\n \"single-selection\";\n\n /**\n * Makes the list required\n */\n @Prop() readonly required: boolean = false;\n\n /**\n * The presence of this property will force all the items to not-wrap, and have ellipsis\n */\n @Prop() readonly ellipsis: boolean = false;\n\n /**\n * The value of the initial (or initials) checked list-item/s\n */\n @Prop({ mutable: true }) value: string | string[];\n\n /**\n * Icons color\n */\n @Prop() readonly iconsColor: Color = \"auto\";\n\n /**\n * Icons size\n */\n @Prop() readonly iconsSize: Size = \"small\";\n\n // @Watch(\"value\")\n // valueHandler(newValue: string) {\n // const foundItem = this.getItemByValue(newValue);\n // if (foundItem) {\n // const input = foundItem.querySelector(\"input\");\n // input.checked = true;\n // }\n // }\n\n /**\n * The name of this list. This is a required attribute for the list to work.\n */\n @Prop() readonly listName!: string;\n\n /**\n * Disables the items border\n */\n @Prop() readonly noItemsBorder: boolean = false;\n\n /**\n * Disables the list border\n */\n @Prop({ reflect: true }) readonly noListBorder: boolean = false;\n\n // 5.EVENTS (EMIT) //\n\n /**\n * Emits the actual selection\n */\n @Event() selectionChanged: EventEmitter<CheckedItemsInfo>;\n\n // 6.COMPONENT LIFECYCLE METHODS //\n\n componentWillLoad() {\n this.evaluateChecked();\n this.evaluateInitialValue();\n }\n\n // 7.LISTENERS //\n\n @Listen(\"itemSelectionChanged\", { capture: true })\n itemSelectionChangedHandler(event: CustomEvent<ItemData>) {\n event.stopPropagation();\n const checkedItemsInfo: CheckedItemsInfo = [];\n const checkedItems: HTMLGxIdeListSelectorItemElement[] = this.getChecked();\n const newValue: string | string[] = [];\n checkedItems.forEach(item => {\n const value = item.itemValue;\n newValue.push(value);\n checkedItemsInfo.push({\n itemId: item.itemId,\n itemValue: value\n });\n });\n /* update this.value*/\n if (this.type === \"single-selection\" && newValue.length > 0) {\n this.value = newValue[0] || undefined;\n } else {\n /* multi-selection*/\n this.value = newValue;\n }\n /* emit selectionChanged*/\n this.selectionChanged.emit(checkedItemsInfo);\n }\n\n // 8.PUBLIC METHODS API //\n\n // 9.LOCAL METHODS //\n\n /**\n * It evaluates the checked items, and checks or unchecks if needed\n */\n private evaluateChecked = () => {\n const allListItems = Array.from(\n this.el.querySelectorAll(\"gx-ide-list-selector-item\")\n );\n const checkedItems = allListItems.filter(item => item.itemChecked);\n /**\n * INDEX\n * 1.required and no one checked\n * 2.single-selection, and more than one checked\n */\n\n /* 1.required and no one checked*/\n if (this.required && checkedItems.length === 0) {\n allListItems[0].itemChecked = true;\n } else if (this.type === \"single-selection\" && checkedItems.length > 1) {\n /* 2.single-selection, and more than one checked*/\n checkedItems.forEach((item, i) => {\n if (i !== 0) {\n item.itemChecked = false;\n }\n });\n }\n };\n\n /**\n * It evaluates the initial value/s\n */\n private evaluateInitialValue = () => {\n const checkedItems = this.getChecked();\n if (this.type === \"single-selection\" && checkedItems.length > 0) {\n this.value = checkedItems[0].itemValue;\n } else if (this.type === \"multi-selection\" && checkedItems.length > 0) {\n const values: string[] = [];\n checkedItems.forEach(checked => {\n values.push(checked.itemValue);\n });\n this.value = values;\n }\n };\n\n private getChecked = (): HTMLGxIdeListSelectorItemElement[] => {\n const checkedItems: HTMLGxIdeListSelectorItemElement[] = [];\n const allItems = this.el.querySelectorAll(\"gx-ide-list-selector-item\");\n allItems.forEach(item => {\n if (item.itemChecked) {\n checkedItems.push(item);\n }\n });\n return checkedItems;\n };\n\n // 10.RENDER() FUNCTION //\n\n render() {\n return (\n <Host exportparts=\"input:input\">\n {this.listTitle ? (\n <gxg-title type=\"title-04\">{this.listTitle}</gxg-title>\n ) : null}\n {this.ordered ? (\n <ol class=\"list\" part=\"list\">\n <slot></slot>\n </ol>\n ) : (\n <ul class=\"list\" part=\"list\">\n <slot></slot>\n </ul>\n )}\n </Host>\n );\n }\n}\n\nexport type CheckedItemsInfo = ItemData[];\n","@import \"../../../../global/gx-ide-mixins.scss\";\n@import \"../../../../../node_modules/@genexus/gemini/dist/collection/globals/mixins.scss\";\n@include box-sizing;\n\ngx-ide-list-selector-item {\n display: block;\n max-width: 100%;\n display: flex;\n font-size: inherit;\n\n &:hover {\n .label {\n background-color: var(--ds-item-background-color--hover);\n cursor: pointer;\n }\n input:checked + .label {\n background-color: var(--ds-item-background-color--selected-hover);\n }\n }\n}\ngx-ide-list-selector-item:not(:first-child) {\n border-block-start: var(--gx-ide-list-items-border);\n}\n/*change border color if checked*/\ngx-ide-list-selector-item:not(:first-child):has(input:checked) {\n border-block-color: var(--ds-item-border-color--selected);\n}\n/*readonly*/\ngx-ide-list-selector-item[readonly]:not([readonly=\"false\"]) {\n .label {\n pointer-events: none;\n background-color: transparent;\n }\n}\n/*ellipsis*/\ngx-ide-list-selector-item[ellipsis]:not([ellipsis=\"false\"]) {\n .label {\n &__description {\n @include elipsis;\n }\n }\n}\ninput {\n width: 0;\n height: 0;\n opacity: 0;\n margin: 0;\n\n &:focus + .label {\n @include form-element-common-styles-focus-type-1();\n outline-offset: var(--gxg-tree-view-item__outline-offset--active);\n }\n &:checked + .label {\n background-color: var(--ds-item-background-color--selected);\n color: var(--gxg-grid-row-cell__color--selected);\n }\n}\n\n/*label-wrapper*/\n.label {\n width: 100%;\n}\n/*label*/\n.label {\n &__index {\n }\n &__wrapper {\n display: flex;\n min-height: 28px; /*this prevents height difference between items that have icons and items that do not*/\n align-items: center;\n gap: var(--mer-spacing--xs);\n padding: var(--mer-spacing--xxs) var(--mer-spacing--xs);\n width: 100%;\n }\n &__description {\n flex: 1;\n display: flex;\n align-items: center;\n gap: var(--mer-spacing--xs);\n }\n}\n\n/*no border*/\ngx-ide-list-selector-item[no-border] {\n border-block-start: none;\n}\n\n/*universal slot*/\n.label__universal-slot {\n display: flex;\n align-items: center;\n justify-content: center;\n}\n/*universal slot end*/\n:host([unversal-slot-end]) {\n}\n","/* STENCIL IMPORTS */\nimport {\n Component,\n Host,\n h,\n Prop,\n Event,\n EventEmitter,\n Element\n} from \"@stencil/core\";\n/* OTHER LIBRARIES IMPORTS */\nimport { Color, Size } from \"@genexus/gemini/dist/types/components/icon/icon\";\n/* CUSTOM IMPORTS */\n@Component({\n tag: \"gx-ide-list-selector-item\",\n styleUrl: \"list-selector-item.scss\",\n shadow: false\n})\nexport class GxIdeListSelectorItem {\n /*\nINDEX:\n1.OWN PROPERTIES \n2.REFERENCE TO ELEMENTS\n3.STATE() VARIABLES\n4.PUBLIC PROPERTY API | WATCH'S\n5.EVENTS (EMIT)\n6.COMPONENT LIFECYCLE METHODS\n7.LISTENERS\n8.PUBLIC METHODS API\n9.LOCAL METHODS\n10.RENDER() FUNCTION\n*/\n\n // 1.OWN PROPERTIES | WATCH'S //\n\n private parentIsListSelector: boolean;\n private parentList: HTMLGxIdeListSelectorElement;\n private checked: boolean;\n private name: string;\n private type: string;\n private hasUniversalSlot = false;\n private index: string = undefined;\n\n // 2. REFERENCE TO ELEMENTS //\n\n @Element() el: HTMLGxIdeListSelectorItemElement;\n\n // 3.STATE() VARIABLES //\n\n // 4.PUBLIC PROPERTY API | WATCH'S //\n\n /**\n * The item id\n */\n @Prop({ reflect: true }) readonly itemId!: string;\n\n /**\n * The item value, that acts as a label as well\n */\n @Prop() readonly itemValue!: string;\n\n /**\n * This will set the input as checked\n */\n @Prop({ mutable: true }) itemChecked = false;\n\n /**\n * It allows to select the item by clicking on it. It will emit the item-id\n */\n @Prop({ mutable: true, reflect: true }) readonly: boolean;\n\n /**\n * The presence of this property will force the item text to not-wrap, and have ellipsis\n */\n @Prop({ mutable: true, reflect: true }) ellipsis: boolean;\n\n /**\n * The gemini icon name\n */\n @Prop() readonly icon: string;\n\n /**\n * The gemini icon color. If no one provided, it will inherit the value from the list-selector\n */\n @Prop({ mutable: true }) iconColor: Color;\n\n /**\n * The gemini icon size. Inherited from the parent.\n */\n @Prop({ mutable: true }) iconSize: Size;\n\n /**\n * Disables the item border\n */\n @Prop({ mutable: true, reflect: true }) noBorder = false;\n\n /**\n * Displays the universal slot at the end, instead of at the benign\n */\n @Prop({ reflect: true }) readonly universalSlotEnd = false;\n\n // 5.EVENTS (EMIT) //\n\n componentWillLoad() {\n this.evaluateParentIsListSelector();\n this.evaluateType();\n this.evaluateSelectable();\n this.evaluateEllipsis();\n this.evaluateChecked();\n this.evaluateIconColor();\n this.evaluateIconSize();\n this.evaluateBorder();\n this.evaluateUniversalSlot();\n this.assignName();\n this.evaluateOrderedList();\n }\n\n /**\n * Emits the item data\n */\n @Event() itemSelectionChanged: EventEmitter<ItemData>;\n\n // 6.COMPONENT LIFECYCLE METHODS //\n\n // 7.LISTENERS //\n\n // 8.PUBLIC METHODS API //\n\n // 9.LOCAL METHODS //\n\n /**\n * Checks if this item parentElement is a gx-ide-list-selector, and assigns a reference\n */\n private evaluateParentIsListSelector = () => {\n const parentList = this.el.parentElement as HTMLGxIdeListSelectorElement;\n this.parentIsListSelector = parentList?.nodeName === \"GX-IDE-LIST-SELECTOR\";\n this.parentIsListSelector && (this.parentList = parentList);\n };\n\n /**\n * Determines the type of item, based on the parent list-selector 'type' property value\n */\n private evaluateType = () => {\n const parentList: HTMLGxIdeListSelectorElement = this.el\n .parentElement as HTMLGxIdeListSelectorElement;\n this.type = parentList.type === \"single-selection\" ? \"radio\" : \"checkbox\";\n };\n\n /**\n * Evaluates if is selectable, considering the parent list-selector 'selectable' property value, only if it is undefined on this item\n */\n private evaluateSelectable = () => {\n if (this.readonly === undefined && this.parentIsListSelector) {\n this.readonly = this.parentList.readonly;\n }\n };\n\n /**\n * Evaluates if text should truncate with ellipsis, considering the parent list-selector 'ellipsis' property value, only if it is undefined on this item\n */\n private evaluateEllipsis = () => {\n if (this.ellipsis === undefined && this.parentIsListSelector) {\n this.ellipsis = this.parentList.ellipsis;\n }\n };\n\n /**\n * Evaluates if this item should be initially checked, only if the parent list-selector listValue equals this item value.\n */\n private evaluateChecked = () => {\n if (\n this.checked === undefined &&\n this.parentIsListSelector &&\n this.parentList.value !== undefined &&\n this.parentList.value === this.itemValue\n ) {\n this.checked = true;\n }\n };\n\n private evaluateBorder = () => {\n if (this.parentIsListSelector) {\n this.noBorder = this.parentList.noItemsBorder;\n }\n };\n\n private evaluateUniversalSlot = () => {\n this.hasUniversalSlot = !!this.el.querySelector(\"[slot=universal]\");\n };\n\n /**\n * Gets the listName required value, that is needed for the list selection to properly work\n */\n private assignName = () => {\n this.parentIsListSelector &&\n this.parentList.listName &&\n (this.name = this.parentList.listName);\n };\n\n private evaluateOrderedList = () => {\n if (this.parentIsListSelector && this.parentList.ordered) {\n let index: number | string =\n Array.from(this.parentList.children).indexOf(this.el) + 1;\n if (index < 10) {\n // This will make descriptions to be nicely aligned, between one digit, and two digit indexes items.\n index = `0${index}`;\n } else {\n index = `${index}`;\n }\n this.index = index;\n }\n };\n\n private evaluateIconColor = () => {\n this.parentIsListSelector &&\n this.parentList.iconsColor &&\n this.iconColor === undefined &&\n (this.iconColor = this.parentList.iconsColor);\n };\n\n private evaluateIconSize = () => {\n this.parentIsListSelector &&\n this.parentList.iconsSize &&\n (this.iconSize = this.parentList.iconsSize);\n };\n\n private onChangeHandler = (e: Event) => {\n this.itemChecked = (e.target as HTMLInputElement).checked;\n this.itemSelectionChanged.emit({\n itemId: this.itemId,\n itemValue: this.itemValue\n });\n };\n\n // 10.RENDER() FUNCTION //\n\n render() {\n return (\n <Host role=\"listitem\">\n <input\n type={this.type}\n id={this.itemId}\n name={this.name}\n value={this.itemValue}\n checked={this.itemChecked}\n onChange={this.onChangeHandler}\n disabled={this.readonly}\n part=\"input\"\n />\n <label class=\"label\" htmlFor={this.itemId} part=\"label\">\n <div class=\"label__wrapper\">\n {this.index ? (\n <span class=\"label__index\">{this.index}. </span>\n ) : null}\n {this.icon ? (\n <gxg-icon\n class=\"label__icon\"\n type={this.icon}\n size=\"small\"\n color={this.iconColor}\n part=\"icon\"\n ></gxg-icon>\n ) : null}\n {this.hasUniversalSlot ? (\n <span class=\"label__universal-slot\" part=\"universal-slot\">\n <slot name=\"universal\"></slot>\n </span>\n ) : null}\n <span class=\"label__description\" part=\"description\">\n {this.itemValue ? this.itemValue : <slot></slot>}\n </span>\n </div>\n </label>\n </Host>\n );\n }\n}\n\nexport type ItemData = {\n itemId: string;\n itemValue: string;\n itemIcon?: string;\n};\n"],"version":3}
1
+ {"file":"gx-ide-list-selector.gx-ide-list-selector-item.entry.js","mappings":"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","names":[],"sources":["src/components/_helpers/list-selector/list-selector.scss?tag=gx-ide-list-selector&encapsulation=shadow","src/components/_helpers/list-selector/list-selector.tsx","src/components/_helpers/list-selector/list-selector-item/list-selector-item.scss?tag=gx-ide-list-selector-item","src/components/_helpers/list-selector/list-selector-item/list-selector-item.tsx"],"sourcesContent":["@import \"../../../global/reset.scss\";\n@import \"../../../global/gx-ide-mixins.scss\";\n@import \"../../../global/gx-ide-common.scss\";\n@include box-sizing;\n\n:host {\n display: flex;\n flex-direction: column;\n max-height: 100%;\n font-family: var(--mer-font-family--primary);\n}\ngxg-title {\n display: block;\n margin-block-end: var(--gxg-label-margin-vertical);\n}\n.list {\n @include reset-defaults;\n @include reset-list;\n @include base-component-styles;\n @include gxg-scrollbar;\n display: block;\n background-color: var(--mer-color__surface);\n max-height: 100%;\n overflow-y: auto;\n border: 1px solid var(--gx-ide-container-border-color);\n border-radius: var(--ds-form-control-border-radius);\n}\n/*no border*/\n:host([no-list-border]) {\n .list {\n border: none;\n }\n}\n","/* STENCIL IMPORTS */\nimport {\n Component,\n Host,\n h,\n Prop,\n Listen,\n // Watch,\n Element,\n Event,\n EventEmitter\n} from \"@stencil/core\";\n/* OTHER LIBRARIES IMPORTS */\nimport { Color, Size } from \"@genexus/gemini/dist/types/components/icon/icon\";\n/* CUSTOM IMPORTS */\nimport { ItemData } from \"./list-selector-item/list-selector-item\";\n\n@Component({\n tag: \"gx-ide-list-selector\",\n styleUrl: \"list-selector.scss\",\n shadow: true\n})\nexport class GxIdeListSelector {\n // 1.OWN PROPERTIES | WATCH'S //\n\n // 2. REFERENCE TO ELEMENTS //\n\n @Element() el: HTMLGxIdeListSelectorElement;\n\n // 3.STATE() VARIABLES //\n\n // 4.PUBLIC PROPERTY API | WATCH'S //\n\n /**\n * The list title (optional)\n */\n @Prop() readonly listTitle: string;\n\n /**\n * It determines if the list is ordered, or unordered\n */\n @Prop() readonly ordered: boolean = false;\n\n /**\n * Makes the list readonly\n */\n @Prop() readonly readonly: boolean = false;\n\n /**\n * It determines the type of list: single-selection or multi-selection\n */\n @Prop() readonly type: \"single-selection\" | \"multi-selection\" =\n \"single-selection\";\n\n /**\n * Makes the list required\n */\n @Prop() readonly required: boolean = false;\n\n /**\n * The presence of this property will force all the items to not-wrap, and have ellipsis\n */\n @Prop() readonly ellipsis: boolean = false;\n\n /**\n * The value of the initial (or initials) checked list-item/s\n */\n @Prop({ mutable: true }) value: string | string[];\n\n /**\n * Icons color\n */\n @Prop() readonly iconsColor: Color = \"auto\";\n\n /**\n * Icons size\n */\n @Prop() readonly iconsSize: Size = \"small\";\n\n // @Watch(\"value\")\n // valueHandler(newValue: string) {\n // const foundItem = this.getItemByValue(newValue);\n // if (foundItem) {\n // const input = foundItem.querySelector(\"input\");\n // input.checked = true;\n // }\n // }\n\n /**\n * The name of this list. This is a required attribute for the list to work.\n */\n @Prop() readonly listName!: string;\n\n /**\n * Disables the items border\n */\n @Prop() readonly noItemsBorder: boolean = false;\n\n /**\n * Disables the list border\n */\n @Prop({ reflect: true }) readonly noListBorder: boolean = false;\n\n // 5.EVENTS (EMIT) //\n\n /**\n * Emits the actual selection\n */\n @Event() selectionChanged: EventEmitter<CheckedItemsInfo>;\n\n // 6.COMPONENT LIFECYCLE METHODS //\n\n componentWillLoad() {\n this.evaluateChecked();\n this.evaluateInitialValue();\n }\n\n // 7.LISTENERS //\n\n @Listen(\"itemSelectionChanged\", { capture: true })\n itemSelectionChangedHandler(event: CustomEvent<ItemData>) {\n event.stopPropagation();\n const selectedItem = event.detail;\n if (this.type === \"single-selection\") {\n this.clearPrevSelected(selectedItem);\n }\n const checkedItemsInfo: CheckedItemsInfo = [];\n const checkedItems: HTMLGxIdeListSelectorItemElement[] = this.getChecked();\n const newValue: string | string[] = [];\n checkedItems.forEach(item => {\n const value = item.itemValue;\n newValue.push(value);\n checkedItemsInfo.push({\n itemId: item.itemId,\n itemValue: value,\n itemIcon: item.icon,\n itemChecked: true\n });\n });\n /* update this.value*/\n if (this.type === \"single-selection\" && newValue.length > 0) {\n this.value = newValue[0] || undefined;\n } else {\n /* multi-selection*/\n this.value = newValue;\n }\n /* emit selectionChanged*/\n this.selectionChanged.emit(checkedItemsInfo);\n }\n\n // 8.PUBLIC METHODS API //\n\n // 9.LOCAL METHODS //\n\n /**\n * It evaluates the checked items, and checks or unchecks if needed\n */\n private evaluateChecked = () => {\n const allListItems = Array.from(\n this.el.querySelectorAll(\"gx-ide-list-selector-item\")\n );\n const checkedItems = allListItems.filter(item => item.itemChecked);\n /**\n * INDEX\n * 1.required and no one checked\n * 2.single-selection, and more than one checked\n */\n\n /* 1.required and no one checked*/\n if (this.required && checkedItems.length === 0) {\n allListItems[0].itemChecked = true;\n } else if (this.type === \"single-selection\" && checkedItems.length > 1) {\n /* 2.single-selection, and more than one checked*/\n checkedItems.forEach((item, i) => {\n if (i !== 0) {\n item.itemChecked = false;\n }\n });\n }\n };\n\n /**\n * It evaluates the initial value/s\n */\n private evaluateInitialValue = () => {\n const checkedItems = this.getChecked();\n if (this.type === \"single-selection\" && checkedItems.length > 0) {\n this.value = checkedItems[0].itemValue;\n } else if (this.type === \"multi-selection\" && checkedItems.length > 0) {\n const values: string[] = [];\n checkedItems.forEach(checked => {\n values.push(checked.itemValue);\n });\n this.value = values;\n }\n };\n\n private getChecked = (): HTMLGxIdeListSelectorItemElement[] => {\n const checkedItems: HTMLGxIdeListSelectorItemElement[] = [];\n const allItems = this.el.querySelectorAll(\"gx-ide-list-selector-item\");\n allItems.forEach(item => {\n if (item.itemChecked) {\n checkedItems.push(item);\n }\n });\n return checkedItems;\n };\n\n private clearPrevSelected = (currentSelected: ItemData) => {\n const allItems = this.el.querySelectorAll(\"gx-ide-list-selector-item\");\n allItems.forEach(item => {\n if (item.itemChecked && item.itemId !== currentSelected.itemId) {\n item.itemChecked = false;\n }\n });\n };\n\n // 10.RENDER() FUNCTION //\n\n render() {\n return (\n <Host exportparts=\"input:input\">\n {this.listTitle ? (\n <gxg-title type=\"title-04\">{this.listTitle}</gxg-title>\n ) : null}\n {this.ordered ? (\n <ol class=\"list\" part=\"list\">\n <slot></slot>\n </ol>\n ) : (\n <ul class=\"list\" part=\"list\">\n <slot></slot>\n </ul>\n )}\n </Host>\n );\n }\n}\n\nexport type CheckedItemsInfo = ItemData[];\n","@import \"../../../../global/gx-ide-mixins.scss\";\n@import \"../../../../../node_modules/@genexus/gemini/dist/collection/globals/mixins.scss\";\n@include box-sizing;\n\ngx-ide-list-selector-item {\n display: block;\n max-width: 100%;\n display: flex;\n font-size: inherit;\n\n &:hover {\n .label {\n background-color: var(--ds-item-background-color--hover);\n cursor: pointer;\n }\n input:checked + .label {\n background-color: var(--ds-item-background-color--selected-hover);\n }\n }\n}\ngx-ide-list-selector-item:not(:first-child) {\n border-block-start: var(--gx-ide-list-items-border);\n}\n/*change border color if checked*/\ngx-ide-list-selector-item:not(:first-child):has(input:checked) {\n border-block-color: var(--ds-item-border-color--selected);\n}\n/*readonly*/\ngx-ide-list-selector-item[readonly]:not([readonly=\"false\"]) {\n .label {\n pointer-events: none;\n background-color: transparent;\n }\n}\n/*ellipsis*/\ngx-ide-list-selector-item[ellipsis]:not([ellipsis=\"false\"]) {\n .label {\n &__description {\n @include elipsis;\n }\n }\n}\ninput {\n width: 0;\n height: 0;\n opacity: 0;\n margin: 0;\n\n &:focus + .label {\n @include form-element-common-styles-focus-type-1();\n outline-offset: var(--gxg-tree-view-item__outline-offset--active);\n }\n &:checked + .label {\n background-color: var(--ds-item-background-color--selected);\n color: var(--gxg-grid-row-cell__color--selected);\n }\n}\n\n/*label-wrapper*/\n.label {\n width: 100%;\n}\n/*label*/\n.label {\n &__index {\n }\n &__wrapper {\n display: flex;\n min-height: 28px; /*this prevents height difference between items that have icons and items that do not*/\n align-items: center;\n gap: var(--mer-spacing--xs);\n padding: var(--mer-spacing--xxs) var(--mer-spacing--xs);\n width: 100%;\n }\n &__description {\n flex: 1;\n display: flex;\n align-items: center;\n gap: var(--mer-spacing--xs);\n }\n}\n\n/*no border*/\ngx-ide-list-selector-item[no-border] {\n border-block-start: none;\n}\n\n/*universal slot*/\n.label__universal-slot {\n display: flex;\n align-items: center;\n justify-content: center;\n}\n/*universal slot end*/\n:host([unversal-slot-end]) {\n}\n","/* STENCIL IMPORTS */\nimport {\n Component,\n Host,\n h,\n Prop,\n Event,\n EventEmitter,\n Element\n} from \"@stencil/core\";\n/* OTHER LIBRARIES IMPORTS */\nimport { Color, Size } from \"@genexus/gemini/dist/types/components/icon/icon\";\n/* CUSTOM IMPORTS */\n@Component({\n tag: \"gx-ide-list-selector-item\",\n styleUrl: \"list-selector-item.scss\",\n shadow: false\n})\nexport class GxIdeListSelectorItem {\n /*\nINDEX:\n1.OWN PROPERTIES \n2.REFERENCE TO ELEMENTS\n3.STATE() VARIABLES\n4.PUBLIC PROPERTY API | WATCH'S\n5.EVENTS (EMIT)\n6.COMPONENT LIFECYCLE METHODS\n7.LISTENERS\n8.PUBLIC METHODS API\n9.LOCAL METHODS\n10.RENDER() FUNCTION\n*/\n\n // 1.OWN PROPERTIES | WATCH'S //\n\n private parentIsListSelector: boolean;\n private parentList: HTMLGxIdeListSelectorElement;\n private checked: boolean;\n private name: string;\n private type: string;\n private hasUniversalSlot = false;\n private index: string = undefined;\n\n // 2. REFERENCE TO ELEMENTS //\n\n @Element() el: HTMLGxIdeListSelectorItemElement;\n\n // 3.STATE() VARIABLES //\n\n // 4.PUBLIC PROPERTY API | WATCH'S //\n\n /**\n * The item id\n */\n @Prop({ reflect: true }) readonly itemId!: string;\n\n /**\n * The item value, that acts as a label as well\n */\n @Prop() readonly itemValue!: string;\n\n /**\n * This will set the input as checked\n */\n @Prop({ mutable: true }) itemChecked = false;\n\n /**\n * It allows to select the item by clicking on it. It will emit the item-id\n */\n @Prop({ mutable: true, reflect: true }) readonly: boolean;\n\n /**\n * The presence of this property will force the item text to not-wrap, and have ellipsis\n */\n @Prop({ mutable: true, reflect: true }) ellipsis: boolean;\n\n /**\n * The gemini icon name\n */\n @Prop() readonly icon: string;\n\n /**\n * The gemini icon color. If no one provided, it will inherit the value from the list-selector\n */\n @Prop({ mutable: true }) iconColor: Color;\n\n /**\n * The gemini icon size. Inherited from the parent.\n */\n @Prop({ mutable: true }) iconSize: Size;\n\n /**\n * Disables the item border\n */\n @Prop({ mutable: true, reflect: true }) noBorder = false;\n\n /**\n * Displays the universal slot at the end, instead of at the benign\n */\n @Prop({ reflect: true }) readonly universalSlotEnd = false;\n\n // 5.EVENTS (EMIT) //\n\n componentWillLoad() {\n this.evaluateParentIsListSelector();\n this.evaluateType();\n this.evaluateSelectable();\n this.evaluateEllipsis();\n this.evaluateChecked();\n this.evaluateIconColor();\n this.evaluateIconSize();\n this.evaluateBorder();\n this.evaluateUniversalSlot();\n this.assignName();\n this.evaluateOrderedList();\n }\n\n /**\n * Emits the item data\n */\n @Event() itemSelectionChanged: EventEmitter<ItemData>;\n\n // 6.COMPONENT LIFECYCLE METHODS //\n\n // 7.LISTENERS //\n\n // 8.PUBLIC METHODS API //\n\n // 9.LOCAL METHODS //\n\n /**\n * Checks if this item parentElement is a gx-ide-list-selector, and assigns a reference\n */\n private evaluateParentIsListSelector = () => {\n const parentList = this.el.parentElement as HTMLGxIdeListSelectorElement;\n this.parentIsListSelector = parentList?.nodeName === \"GX-IDE-LIST-SELECTOR\";\n this.parentIsListSelector && (this.parentList = parentList);\n };\n\n /**\n * Determines the type of item, based on the parent list-selector 'type' property value\n */\n private evaluateType = () => {\n const parentList: HTMLGxIdeListSelectorElement = this.el\n .parentElement as HTMLGxIdeListSelectorElement;\n this.type = parentList.type === \"single-selection\" ? \"radio\" : \"checkbox\";\n };\n\n /**\n * Evaluates if is selectable, considering the parent list-selector 'selectable' property value, only if it is undefined on this item\n */\n private evaluateSelectable = () => {\n if (this.readonly === undefined && this.parentIsListSelector) {\n this.readonly = this.parentList.readonly;\n }\n };\n\n /**\n * Evaluates if text should truncate with ellipsis, considering the parent list-selector 'ellipsis' property value, only if it is undefined on this item\n */\n private evaluateEllipsis = () => {\n if (this.ellipsis === undefined && this.parentIsListSelector) {\n this.ellipsis = this.parentList.ellipsis;\n }\n };\n\n /**\n * Evaluates if this item should be initially checked, only if the parent list-selector listValue equals this item value.\n */\n private evaluateChecked = () => {\n if (\n this.checked === undefined &&\n this.parentIsListSelector &&\n this.parentList.value !== undefined &&\n this.parentList.value === this.itemValue\n ) {\n this.checked = true;\n }\n };\n\n private evaluateBorder = () => {\n if (this.parentIsListSelector) {\n this.noBorder = this.parentList.noItemsBorder;\n }\n };\n\n private evaluateUniversalSlot = () => {\n this.hasUniversalSlot = !!this.el.querySelector(\"[slot=universal]\");\n };\n\n /**\n * Gets the listName required value, that is needed for the list selection to properly work\n */\n private assignName = () => {\n this.parentIsListSelector &&\n this.parentList.listName &&\n (this.name = this.parentList.listName);\n };\n\n private evaluateOrderedList = () => {\n if (this.parentIsListSelector && this.parentList.ordered) {\n let index: number | string =\n Array.from(this.parentList.children).indexOf(this.el) + 1;\n if (index < 10) {\n // This will make descriptions to be nicely aligned, between one digit, and two digit indexes items.\n index = `0${index}`;\n } else {\n index = `${index}`;\n }\n this.index = index;\n }\n };\n\n private evaluateIconColor = () => {\n this.parentIsListSelector &&\n this.parentList.iconsColor &&\n this.iconColor === undefined &&\n (this.iconColor = this.parentList.iconsColor);\n };\n\n private evaluateIconSize = () => {\n this.parentIsListSelector &&\n this.parentList.iconsSize &&\n (this.iconSize = this.parentList.iconsSize);\n };\n\n private onChangeHandler = (e: Event) => {\n this.itemChecked = (e.target as HTMLInputElement).checked;\n this.itemSelectionChanged.emit({\n itemId: this.itemId,\n itemValue: this.itemValue,\n itemIcon: this.icon,\n itemChecked: this.itemChecked\n });\n };\n\n // 10.RENDER() FUNCTION //\n\n render() {\n return (\n <Host role=\"listitem\">\n <input\n type={this.type}\n id={this.itemId}\n name={this.name}\n value={this.itemValue}\n checked={this.itemChecked}\n onChange={this.onChangeHandler}\n disabled={this.readonly}\n part=\"input\"\n />\n <label class=\"label\" htmlFor={this.itemId} part=\"label\">\n <div class=\"label__wrapper\">\n {this.index ? (\n <span class=\"label__index\">{this.index}. </span>\n ) : null}\n {this.icon ? (\n <gxg-icon\n class=\"label__icon\"\n type={this.icon}\n size=\"small\"\n color={this.iconColor}\n part=\"icon\"\n ></gxg-icon>\n ) : null}\n {this.hasUniversalSlot ? (\n <span class=\"label__universal-slot\" part=\"universal-slot\">\n <slot name=\"universal\"></slot>\n </span>\n ) : null}\n <span class=\"label__description\" part=\"description\">\n {this.itemValue ? this.itemValue : <slot></slot>}\n </span>\n </div>\n </label>\n </Host>\n );\n }\n}\n\nexport type ItemData = {\n itemId: string;\n itemValue: string;\n itemIcon?: string;\n itemChecked: boolean;\n};\n"],"version":3}
@@ -1,23 +1,17 @@
1
- import { h, r as registerInstance, c as createEvent, H as Host, g as getElement } from './index-5bd24426.js';
1
+ import { r as registerInstance, c as createEvent, h, H as Host, g as getElement } from './index-5bd24426.js';
2
2
  import { L as Locale } from './locale-3c32f251.js';
3
3
  import { c as config } from './config-a492e15e.js';
4
-
5
- /* STENCIL IMPORTS */
6
- const renderListItems = (itemsData) => {
7
- const listItemsArray = [];
8
- itemsData.forEach(item => {
9
- const id = item.itemId;
10
- const value = item.itemValue;
11
- const icon = item.itemIcon;
12
- listItemsArray.push(h("gx-ide-list-selector-item", { itemId: id, itemValue: value, icon: icon }));
13
- });
14
- return listItemsArray;
15
- };
4
+ import { r as renderListItems } from './render-list-item-9953ed8a.js';
16
5
 
17
6
  const commentsToListItemsData = (comments) => {
18
7
  const itemsData = [];
19
8
  comments.forEach(comment => {
20
- itemsData.push({ itemId: comment, itemValue: comment });
9
+ itemsData.push({
10
+ itemId: comment,
11
+ itemValue: comment,
12
+ itemIcon: undefined,
13
+ itemChecked: false
14
+ });
21
15
  });
22
16
  return itemsData;
23
17
  };
@@ -1 +1 @@
1
- {"file":"gx-ide-team-dev-select-recent-comment.entry.js","mappings":"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","names":[],"sources":["src/common/render-list-item.tsx","src/components/team-dev/select-recent-comment/helpers.ts","src/components/team-dev/select-recent-comment/select-recent-comment.scss?tag=gx-ide-team-dev-select-recent-comment&encapsulation=shadow","src/components/team-dev/select-recent-comment/select-recent-comment.tsx"],"sourcesContent":["/* STENCIL IMPORTS */\nimport { h } from \"@stencil/core\";\n/* OTHER LIBRARIES IMPORTS */\n/* CUSTOM IMPORTS */\nimport { ItemData } from \"../components/_helpers/list-selector/list-selector-item/list-selector-item\";\n\nexport const renderListItems = (\n itemsData: ItemData[]\n): HTMLGxIdeListSelectorItemElement[] => {\n const listItemsArray: HTMLGxIdeListSelectorItemElement[] = [];\n itemsData.forEach(item => {\n const id = item.itemId;\n const value = item.itemValue;\n const icon = item.itemIcon;\n listItemsArray.push(\n <gx-ide-list-selector-item\n itemId={id}\n itemValue={value}\n icon={icon}\n ></gx-ide-list-selector-item>\n );\n });\n return listItemsArray;\n};\n","import { ItemData } from \"../../_helpers/list-selector/list-selector-item/list-selector-item\";\n\nexport const commentsToListItemsData = (comments: string[]): ItemData[] => {\n const itemsData: ItemData[] = [];\n comments.forEach(comment => {\n itemsData.push({ itemId: comment, itemValue: comment });\n });\n return itemsData;\n};\n","@import \"../../../global/gx-ide-common.scss\";\n@import \"../../../global/gx-ide-mixins.scss\";\n\n:host {\n display: block;\n}\n.recent-comments-list {\n height: 100%;\n}\n","/* STENCIL IMPORTS */\nimport {\n Component,\n Host,\n h,\n Prop,\n Element,\n Event,\n EventEmitter\n} from \"@stencil/core\";\n/* OTHER LIBRARIES IMPORTS */\nimport { CheckedItemsInfo } from \"../../_helpers/list-selector/list-selector\";\n/* CUSTOM IMPORTS */\nimport { Locale } from \"../../../common/locale\";\nimport { config } from \"../../../common/config\";\nimport { renderListItems } from \"../../../common/render-list-item\";\nimport { commentsToListItemsData } from \"./helpers\";\n@Component({\n tag: \"gx-ide-team-dev-select-recent-comment\",\n styleUrl: \"select-recent-comment.scss\",\n shadow: true,\n assetsDirs: [\"gx-ide-assets/team-dev-select-recent-comment\"]\n})\nexport class GxIdeTeamDevSelectRecentComment {\n /*\nINDEX:\n1.OWN PROPERTIES\n2.REFERENCE TO ELEMENTS\n3.STATE() VARIABLES\n4.PUBLIC PROPERTY API | WATCH'S\n5.EVENTS (EMIT)\n6.COMPONENT LIFECYCLE EVENTS\n7.LISTENERS\n8.PUBLIC METHODS API\n9.LOCAL METHODS\n10.RENDER() FUNCTION\n*/\n\n // 1.OWN PROPERTIES //\n\n /**\n * The component hard-coded strings translations.\n */\n private _componentLocale: any;\n private selectedComment: string = null;\n private renderedFirstTime = false;\n\n // 2. REFERENCE TO ELEMENTS //\n\n @Element() el: HTMLGxIdeTeamDevSelectRecentCommentElement;\n\n // 3.STATE() VARIABLES //\n\n // 4.PUBLIC PROPERTY API | WATCH'S //\n\n /**\n * If true it displays the component title on the header\n */\n @Prop() readonly displayTitle = false;\n\n /**\n * Recent comments list\n */\n @Prop() readonly comments: string[];\n\n /**\n * Callback invoked when user confirms selection\n */\n @Prop() readonly confirmCallback: confirmCallback;\n\n /**\n * Callback invoked when user cancel selection\n */\n @Prop() readonly cancelCallback: cancelCallback;\n\n // 5.EVENTS (EMIT) //\n\n /**\n * This event is emitted once just after the component is fully loaded and the first render() occurs.\n */\n @Event() componentDidLoadEvent: EventEmitter<boolean>;\n\n /**\n * @description Gets fired when the component has rendered for the first time.\n */\n @Event() componentDidRenderFirstTime: EventEmitter<string>;\n\n // 6.COMPONENT LIFECYCLE EVENTS //\n\n async componentWillLoad() {\n this._componentLocale = await Locale.getComponentStrings(this.el);\n this.componentDidLoadEvent.emit(true);\n }\n\n componentDidRender() {\n if (!this.renderedFirstTime) {\n this.componentDidRenderFirstTime.emit(\n this._componentLocale.componentName\n );\n this.renderedFirstTime = true;\n }\n }\n\n // 7.LISTENERS //\n\n // 8.PUBLIC METHODS API //\n\n // 9.LOCAL METHODS //\n\n private commentSelectionChangedHandler = (\n selectedItem: CustomEvent<CheckedItemsInfo>\n ) => {\n if (selectedItem.detail.length > 0) {\n this.selectedComment = selectedItem.detail[0].itemValue;\n }\n };\n\n private confirmCallbackHandle = async () => {\n await this.confirmCallback(this.selectedComment);\n };\n\n private cancelCallbackHandle = async () => {\n await this.cancelCallback();\n };\n\n // 10.RENDER() FUNCTION //\n\n render() {\n return (\n <Host class=\"gx-ide-component\">\n <div class=\"gx-ide-main-wrapper\">\n <gx-ide-container\n containerTitle={\n this.displayTitle ? this._componentLocale.componentName : null\n }\n displayBorder\n noContentPadding\n slimmerFooter={config.gxIdeContainer.slimmerFooter}\n >\n <gx-ide-list-selector\n type=\"single-selection\"\n listName=\"recent-comments\"\n noListBorder\n ordered\n onSelectionChanged={this.commentSelectionChangedHandler}\n class=\"recent-comments-list\"\n >\n {renderListItems(commentsToListItemsData(this.comments))}\n </gx-ide-list-selector>\n\n <gxg-button\n type=\"outlined\"\n onClick={this.cancelCallbackHandle}\n slot=\"footer-end\"\n >\n {this._componentLocale.cancelButton}\n </gxg-button>\n <gxg-button\n type=\"primary-text-only\"\n onClick={this.confirmCallbackHandle}\n slot=\"footer-end\"\n >\n {this._componentLocale.confirmButton}\n </gxg-button>\n </gx-ide-container>\n </div>\n </Host>\n );\n }\n}\nexport type confirmCallback = (comment: string) => Promise<void>;\nexport type cancelCallback = () => Promise<void>;\n"],"version":3}
1
+ {"file":"gx-ide-team-dev-select-recent-comment.entry.js","mappings":";;;;;AAEO,MAAM,uBAAuB,GAAG,CAAC,QAAkB;IACxD,MAAM,SAAS,GAAe,EAAE,CAAC;IACjC,QAAQ,CAAC,OAAO,CAAC,OAAO;QACtB,SAAS,CAAC,IAAI,CAAC;YACb,MAAM,EAAE,OAAO;YACf,SAAS,EAAE,OAAO;YAClB,QAAQ,EAAE,SAAS;YACnB,WAAW,EAAE,KAAK;SACnB,CAAC,CAAC;KACJ,CAAC,CAAC;IACH,OAAO,SAAS,CAAC;AACnB,CAAC;;ACbD,MAAM,sBAAsB,GAAG,+5VAA+5V;;MCuBj7V,+BAA+B;;;;;QAqBlC,oBAAe,GAAW,IAAI,CAAC;QAC/B,sBAAiB,GAAG,KAAK,CAAC;;;;QAgE1B,mCAA8B,GAAG,CACvC,YAA2C;YAE3C,IAAI,YAAY,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;gBAClC,IAAI,CAAC,eAAe,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;aACzD;SACF,CAAC;QAEM,0BAAqB,GAAG;YAC9B,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;SAClD,CAAC;QAEM,yBAAoB,GAAG;YAC7B,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;SAC7B,CAAC;4BAjE8B,KAAK;;;;;;IA+BrC,MAAM,iBAAiB;QACrB,IAAI,CAAC,gBAAgB,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAClE,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KACvC;IAED,kBAAkB;QAChB,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;YAC3B,IAAI,CAAC,2BAA2B,CAAC,IAAI,CACnC,IAAI,CAAC,gBAAgB,CAAC,aAAa,CACpC,CAAC;YACF,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;SAC/B;KACF;;IA0BD,MAAM;QACJ,QACE,EAAC,IAAI,IAAC,KAAK,EAAC,kBAAkB,IAC5B,WAAK,KAAK,EAAC,qBAAqB,IAC9B,wBACE,cAAc,EACZ,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,aAAa,GAAG,IAAI,EAEhE,aAAa,QACb,gBAAgB,QAChB,aAAa,EAAE,MAAM,CAAC,cAAc,CAAC,aAAa,IAElD,4BACE,IAAI,EAAC,kBAAkB,EACvB,QAAQ,EAAC,iBAAiB,EAC1B,YAAY,QACZ,OAAO,QACP,kBAAkB,EAAE,IAAI,CAAC,8BAA8B,EACvD,KAAK,EAAC,sBAAsB,IAE3B,eAAe,CAAC,uBAAuB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CACnC,EAEvB,kBACE,IAAI,EAAC,UAAU,EACf,OAAO,EAAE,IAAI,CAAC,oBAAoB,EAClC,IAAI,EAAC,YAAY,IAEhB,IAAI,CAAC,gBAAgB,CAAC,YAAY,CACxB,EACb,kBACE,IAAI,EAAC,mBAAmB,EACxB,OAAO,EAAE,IAAI,CAAC,qBAAqB,EACnC,IAAI,EAAC,YAAY,IAEhB,IAAI,CAAC,gBAAgB,CAAC,aAAa,CACzB,CACI,CACf,CACD,EACP;KACH;;;;;;;;","names":[],"sources":["src/components/team-dev/select-recent-comment/helpers.ts","src/components/team-dev/select-recent-comment/select-recent-comment.scss?tag=gx-ide-team-dev-select-recent-comment&encapsulation=shadow","src/components/team-dev/select-recent-comment/select-recent-comment.tsx"],"sourcesContent":["import { ItemData } from \"../../_helpers/list-selector/list-selector-item/list-selector-item\";\n\nexport const commentsToListItemsData = (comments: string[]): ItemData[] => {\n const itemsData: ItemData[] = [];\n comments.forEach(comment => {\n itemsData.push({\n itemId: comment,\n itemValue: comment,\n itemIcon: undefined,\n itemChecked: false\n });\n });\n return itemsData;\n};\n","@import \"../../../global/gx-ide-common.scss\";\n@import \"../../../global/gx-ide-mixins.scss\";\n\n:host {\n display: block;\n}\n.recent-comments-list {\n height: 100%;\n}\n","/* STENCIL IMPORTS */\nimport {\n Component,\n Host,\n h,\n Prop,\n Element,\n Event,\n EventEmitter\n} from \"@stencil/core\";\n/* OTHER LIBRARIES IMPORTS */\nimport { CheckedItemsInfo } from \"../../_helpers/list-selector/list-selector\";\n/* CUSTOM IMPORTS */\nimport { Locale } from \"../../../common/locale\";\nimport { config } from \"../../../common/config\";\nimport { renderListItems } from \"../../../common/render-list-item\";\nimport { commentsToListItemsData } from \"./helpers\";\n@Component({\n tag: \"gx-ide-team-dev-select-recent-comment\",\n styleUrl: \"select-recent-comment.scss\",\n shadow: true,\n assetsDirs: [\"gx-ide-assets/team-dev-select-recent-comment\"]\n})\nexport class GxIdeTeamDevSelectRecentComment {\n /*\nINDEX:\n1.OWN PROPERTIES\n2.REFERENCE TO ELEMENTS\n3.STATE() VARIABLES\n4.PUBLIC PROPERTY API | WATCH'S\n5.EVENTS (EMIT)\n6.COMPONENT LIFECYCLE EVENTS\n7.LISTENERS\n8.PUBLIC METHODS API\n9.LOCAL METHODS\n10.RENDER() FUNCTION\n*/\n\n // 1.OWN PROPERTIES //\n\n /**\n * The component hard-coded strings translations.\n */\n private _componentLocale: any;\n private selectedComment: string = null;\n private renderedFirstTime = false;\n\n // 2. REFERENCE TO ELEMENTS //\n\n @Element() el: HTMLGxIdeTeamDevSelectRecentCommentElement;\n\n // 3.STATE() VARIABLES //\n\n // 4.PUBLIC PROPERTY API | WATCH'S //\n\n /**\n * If true it displays the component title on the header\n */\n @Prop() readonly displayTitle = false;\n\n /**\n * Recent comments list\n */\n @Prop() readonly comments: string[];\n\n /**\n * Callback invoked when user confirms selection\n */\n @Prop() readonly confirmCallback: confirmCallback;\n\n /**\n * Callback invoked when user cancel selection\n */\n @Prop() readonly cancelCallback: cancelCallback;\n\n // 5.EVENTS (EMIT) //\n\n /**\n * This event is emitted once just after the component is fully loaded and the first render() occurs.\n */\n @Event() componentDidLoadEvent: EventEmitter<boolean>;\n\n /**\n * @description Gets fired when the component has rendered for the first time.\n */\n @Event() componentDidRenderFirstTime: EventEmitter<string>;\n\n // 6.COMPONENT LIFECYCLE EVENTS //\n\n async componentWillLoad() {\n this._componentLocale = await Locale.getComponentStrings(this.el);\n this.componentDidLoadEvent.emit(true);\n }\n\n componentDidRender() {\n if (!this.renderedFirstTime) {\n this.componentDidRenderFirstTime.emit(\n this._componentLocale.componentName\n );\n this.renderedFirstTime = true;\n }\n }\n\n // 7.LISTENERS //\n\n // 8.PUBLIC METHODS API //\n\n // 9.LOCAL METHODS //\n\n private commentSelectionChangedHandler = (\n selectedItem: CustomEvent<CheckedItemsInfo>\n ) => {\n if (selectedItem.detail.length > 0) {\n this.selectedComment = selectedItem.detail[0].itemValue;\n }\n };\n\n private confirmCallbackHandle = async () => {\n await this.confirmCallback(this.selectedComment);\n };\n\n private cancelCallbackHandle = async () => {\n await this.cancelCallback();\n };\n\n // 10.RENDER() FUNCTION //\n\n render() {\n return (\n <Host class=\"gx-ide-component\">\n <div class=\"gx-ide-main-wrapper\">\n <gx-ide-container\n containerTitle={\n this.displayTitle ? this._componentLocale.componentName : null\n }\n displayBorder\n noContentPadding\n slimmerFooter={config.gxIdeContainer.slimmerFooter}\n >\n <gx-ide-list-selector\n type=\"single-selection\"\n listName=\"recent-comments\"\n noListBorder\n ordered\n onSelectionChanged={this.commentSelectionChangedHandler}\n class=\"recent-comments-list\"\n >\n {renderListItems(commentsToListItemsData(this.comments))}\n </gx-ide-list-selector>\n\n <gxg-button\n type=\"outlined\"\n onClick={this.cancelCallbackHandle}\n slot=\"footer-end\"\n >\n {this._componentLocale.cancelButton}\n </gxg-button>\n <gxg-button\n type=\"primary-text-only\"\n onClick={this.confirmCallbackHandle}\n slot=\"footer-end\"\n >\n {this._componentLocale.confirmButton}\n </gxg-button>\n </gx-ide-container>\n </div>\n </Host>\n );\n }\n}\nexport type confirmCallback = (comment: string) => Promise<void>;\nexport type cancelCallback = () => Promise<void>;\n"],"version":3}