@genexus/genexus-ide-ui 1.1.47 → 1.1.49

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 (137) hide show
  1. package/dist/cjs/genexus-ide-ui.cjs.js +1 -1
  2. package/dist/cjs/gx-ide-ai-message.cjs.entry.js +1 -1
  3. package/dist/cjs/gx-ide-dashboard-home.cjs.entry.js +1 -1
  4. package/dist/cjs/gx-ide-name-picker.cjs.entry.js +109 -0
  5. package/dist/cjs/gx-ide-name-picker.cjs.entry.js.map +1 -0
  6. package/dist/cjs/gx-ide-new-environment.cjs.entry.js +1 -1
  7. package/dist/cjs/gx-ide-new-kb.cjs.entry.js +1 -1
  8. package/dist/cjs/gx-ide-object-selector.cjs.entry.js +1 -1
  9. package/dist/cjs/gx-ide-plugin-details.cjs.entry.js +1 -1
  10. package/dist/cjs/gx-ide-plugin-details.cjs.entry.js.map +1 -1
  11. package/dist/cjs/gx-ide-select-user-team.cjs.entry.js +1 -1
  12. package/dist/cjs/gx-ide-select-user-team.cjs.entry.js.map +1 -1
  13. package/dist/cjs/gx-ide-start-page.cjs.entry.js +20 -38
  14. package/dist/cjs/gx-ide-start-page.cjs.entry.js.map +1 -1
  15. package/dist/cjs/gx-ide-team-dev-bring-changes.cjs.entry.js +2 -2
  16. package/dist/cjs/gx-ide-team-dev-commit.cjs.entry.js +2 -2
  17. package/dist/cjs/gx-ide-team-dev-history.cjs.entry.js +1 -1
  18. package/dist/cjs/gx-ide-team-dev-update-partial-selection.cjs.entry.js +1 -1
  19. package/dist/cjs/gx-ide-team-dev-update.cjs.entry.js +2 -2
  20. package/dist/cjs/gx-ide-ww-files.cjs.entry.js +1 -1
  21. package/dist/cjs/gx-ide-ww-images.cjs.entry.js +1 -1
  22. package/dist/cjs/{helpers-263b5f4e.js → helpers-21c9cd02.js} +7 -3
  23. package/dist/cjs/helpers-21c9cd02.js.map +1 -0
  24. package/dist/cjs/loader.cjs.js +1 -1
  25. package/dist/cjs/{tabular-grid-render-b1767da2.js → tabular-grid-render-4350dbaf.js} +2 -2
  26. package/dist/cjs/{tabular-grid-render-b1767da2.js.map → tabular-grid-render-4350dbaf.js.map} +1 -1
  27. package/dist/collection/collection-manifest.json +1 -0
  28. package/dist/collection/common/helpers.js +7 -3
  29. package/dist/collection/common/helpers.js.map +1 -1
  30. package/dist/collection/components/name-picker/gx-ide-assets/name-picker/langs/name-picker.lang.en.json +13 -0
  31. package/dist/collection/components/name-picker/gx-ide-assets/name-picker/langs/name-picker.lang.ja.json +13 -0
  32. package/dist/collection/components/name-picker/gx-ide-assets/name-picker/langs/name-picker.lang.zh.json +13 -0
  33. package/dist/collection/components/name-picker/name-picker.css +21 -0
  34. package/dist/collection/components/name-picker/name-picker.js +184 -0
  35. package/dist/collection/components/name-picker/name-picker.js.map +1 -0
  36. package/dist/collection/components/plugin-details/plugin-details.css +1 -3
  37. package/dist/collection/components/select-user-team/select-user-team.css +2 -0
  38. package/dist/collection/components/start-page/gx-ide-assets/start-page/langs/start-page.lang.en.json +0 -4
  39. package/dist/collection/components/start-page/gx-ide-assets/start-page/langs/start-page.lang.ja.json +0 -4
  40. package/dist/collection/components/start-page/gx-ide-assets/start-page/langs/start-page.lang.zh.json +0 -4
  41. package/dist/collection/components/start-page/start-page.css +13 -100
  42. package/dist/collection/components/start-page/start-page.js +44 -109
  43. package/dist/collection/components/start-page/start-page.js.map +1 -1
  44. package/dist/collection/testing/locale.e2e.js +1 -0
  45. package/dist/collection/testing/locale.e2e.js.map +1 -1
  46. package/dist/components/gx-ide-name-picker.d.ts +11 -0
  47. package/dist/components/gx-ide-name-picker.js +131 -0
  48. package/dist/components/gx-ide-name-picker.js.map +1 -0
  49. package/dist/components/gx-ide-plugin-details.js +1 -1
  50. package/dist/components/gx-ide-plugin-details.js.map +1 -1
  51. package/dist/components/gx-ide-select-user-team.js +1 -1
  52. package/dist/components/gx-ide-select-user-team.js.map +1 -1
  53. package/dist/components/gx-ide-start-page.js +23 -43
  54. package/dist/components/gx-ide-start-page.js.map +1 -1
  55. package/dist/components/helpers.js +6 -2
  56. package/dist/components/helpers.js.map +1 -1
  57. package/dist/esm/genexus-ide-ui.js +1 -1
  58. package/dist/esm/gx-ide-ai-message.entry.js +1 -1
  59. package/dist/esm/gx-ide-dashboard-home.entry.js +1 -1
  60. package/dist/esm/gx-ide-name-picker.entry.js +105 -0
  61. package/dist/esm/gx-ide-name-picker.entry.js.map +1 -0
  62. package/dist/esm/gx-ide-new-environment.entry.js +1 -1
  63. package/dist/esm/gx-ide-new-kb.entry.js +1 -1
  64. package/dist/esm/gx-ide-object-selector.entry.js +1 -1
  65. package/dist/esm/gx-ide-plugin-details.entry.js +1 -1
  66. package/dist/esm/gx-ide-plugin-details.entry.js.map +1 -1
  67. package/dist/esm/gx-ide-select-user-team.entry.js +1 -1
  68. package/dist/esm/gx-ide-select-user-team.entry.js.map +1 -1
  69. package/dist/esm/gx-ide-start-page.entry.js +20 -38
  70. package/dist/esm/gx-ide-start-page.entry.js.map +1 -1
  71. package/dist/esm/gx-ide-team-dev-bring-changes.entry.js +2 -2
  72. package/dist/esm/gx-ide-team-dev-commit.entry.js +2 -2
  73. package/dist/esm/gx-ide-team-dev-history.entry.js +1 -1
  74. package/dist/esm/gx-ide-team-dev-update-partial-selection.entry.js +1 -1
  75. package/dist/esm/gx-ide-team-dev-update.entry.js +2 -2
  76. package/dist/esm/gx-ide-ww-files.entry.js +1 -1
  77. package/dist/esm/gx-ide-ww-images.entry.js +1 -1
  78. package/dist/esm/{helpers-b180a2d1.js → helpers-7960f084.js} +7 -3
  79. package/dist/esm/helpers-7960f084.js.map +1 -0
  80. package/dist/esm/loader.js +1 -1
  81. package/dist/esm/{tabular-grid-render-96d67a8c.js → tabular-grid-render-f7eb612b.js} +2 -2
  82. package/dist/esm/{tabular-grid-render-96d67a8c.js.map → tabular-grid-render-f7eb612b.js.map} +1 -1
  83. package/dist/genexus-ide-ui/genexus-ide-ui.esm.js +1 -1
  84. package/dist/genexus-ide-ui/genexus-ide-ui.esm.js.map +1 -1
  85. package/dist/genexus-ide-ui/gx-ide-assets/name-picker/langs/name-picker.lang.en.json +13 -0
  86. package/dist/genexus-ide-ui/gx-ide-assets/name-picker/langs/name-picker.lang.ja.json +13 -0
  87. package/dist/genexus-ide-ui/gx-ide-assets/name-picker/langs/name-picker.lang.zh.json +13 -0
  88. package/dist/genexus-ide-ui/gx-ide-assets/start-page/langs/start-page.lang.en.json +0 -4
  89. package/dist/genexus-ide-ui/gx-ide-assets/start-page/langs/start-page.lang.ja.json +0 -4
  90. package/dist/genexus-ide-ui/gx-ide-assets/start-page/langs/start-page.lang.zh.json +0 -4
  91. package/dist/genexus-ide-ui/{p-137a252f.entry.js → p-12b563fe.entry.js} +2 -2
  92. package/dist/genexus-ide-ui/{p-57ed2623.entry.js → p-2b38e18e.entry.js} +2 -2
  93. package/dist/genexus-ide-ui/{p-af975c83.entry.js → p-4b680e46.entry.js} +2 -2
  94. package/dist/genexus-ide-ui/{p-6f5cf136.entry.js → p-4cc2b3e6.entry.js} +6 -6
  95. package/dist/genexus-ide-ui/p-4cc2b3e6.entry.js.map +1 -0
  96. package/dist/genexus-ide-ui/{p-a58048e9.entry.js → p-4e3ad78d.entry.js} +3 -3
  97. package/dist/genexus-ide-ui/{p-3ccd331f.entry.js → p-5624d287.entry.js} +2 -2
  98. package/dist/genexus-ide-ui/{p-24573081.entry.js → p-59908901.entry.js} +2 -2
  99. package/dist/genexus-ide-ui/{p-18bbaa49.entry.js → p-60302626.entry.js} +26 -26
  100. package/dist/genexus-ide-ui/p-60302626.entry.js.map +1 -0
  101. package/dist/genexus-ide-ui/{p-11a60dbe.entry.js → p-646ddf49.entry.js} +2 -2
  102. package/dist/genexus-ide-ui/{p-c8270f7d.js → p-77c2e69d.js} +2 -2
  103. package/dist/genexus-ide-ui/{p-31c1b79d.entry.js → p-7f091892.entry.js} +2 -2
  104. package/dist/genexus-ide-ui/{p-1972b953.js → p-8c15538c.js} +13 -10
  105. package/dist/genexus-ide-ui/p-8c15538c.js.map +1 -0
  106. package/dist/genexus-ide-ui/{p-072419f9.entry.js → p-8c867f9a.entry.js} +2 -2
  107. package/dist/genexus-ide-ui/{p-d18c51fe.entry.js → p-a7883e6b.entry.js} +3 -3
  108. package/dist/genexus-ide-ui/{p-7a28161f.entry.js → p-c1ad1cc6.entry.js} +2 -2
  109. package/dist/genexus-ide-ui/{p-ab1e2886.entry.js → p-e2b0ee82.entry.js} +549 -575
  110. package/dist/genexus-ide-ui/p-e2b0ee82.entry.js.map +1 -0
  111. package/dist/genexus-ide-ui/p-e3bce13e.entry.js +143 -0
  112. package/dist/genexus-ide-ui/p-e3bce13e.entry.js.map +1 -0
  113. package/dist/genexus-ide-ui/{p-083d8e94.entry.js → p-ed87224f.entry.js} +3 -3
  114. package/dist/types/components/name-picker/name-picker.d.ts +27 -0
  115. package/dist/types/components/start-page/start-page.d.ts +19 -32
  116. package/dist/types/components.d.ts +45 -20
  117. package/package.json +1 -1
  118. package/dist/cjs/helpers-263b5f4e.js.map +0 -1
  119. package/dist/collection/pages/assets/images/plugin/python-logo.svg +0 -16
  120. package/dist/esm/helpers-b180a2d1.js.map +0 -1
  121. package/dist/genexus-ide-ui/p-18bbaa49.entry.js.map +0 -1
  122. package/dist/genexus-ide-ui/p-1972b953.js.map +0 -1
  123. package/dist/genexus-ide-ui/p-6f5cf136.entry.js.map +0 -1
  124. package/dist/genexus-ide-ui/p-ab1e2886.entry.js.map +0 -1
  125. /package/dist/genexus-ide-ui/{p-137a252f.entry.js.map → p-12b563fe.entry.js.map} +0 -0
  126. /package/dist/genexus-ide-ui/{p-57ed2623.entry.js.map → p-2b38e18e.entry.js.map} +0 -0
  127. /package/dist/genexus-ide-ui/{p-af975c83.entry.js.map → p-4b680e46.entry.js.map} +0 -0
  128. /package/dist/genexus-ide-ui/{p-a58048e9.entry.js.map → p-4e3ad78d.entry.js.map} +0 -0
  129. /package/dist/genexus-ide-ui/{p-3ccd331f.entry.js.map → p-5624d287.entry.js.map} +0 -0
  130. /package/dist/genexus-ide-ui/{p-24573081.entry.js.map → p-59908901.entry.js.map} +0 -0
  131. /package/dist/genexus-ide-ui/{p-11a60dbe.entry.js.map → p-646ddf49.entry.js.map} +0 -0
  132. /package/dist/genexus-ide-ui/{p-c8270f7d.js.map → p-77c2e69d.js.map} +0 -0
  133. /package/dist/genexus-ide-ui/{p-31c1b79d.entry.js.map → p-7f091892.entry.js.map} +0 -0
  134. /package/dist/genexus-ide-ui/{p-072419f9.entry.js.map → p-8c867f9a.entry.js.map} +0 -0
  135. /package/dist/genexus-ide-ui/{p-d18c51fe.entry.js.map → p-a7883e6b.entry.js.map} +0 -0
  136. /package/dist/genexus-ide-ui/{p-7a28161f.entry.js.map → p-c1ad1cc6.entry.js.map} +0 -0
  137. /package/dist/genexus-ide-ui/{p-083d8e94.entry.js.map → p-ed87224f.entry.js.map} +0 -0
@@ -4,37 +4,11 @@
4
4
  Found on /common/helpers.tsx hiChar function is used to add a span/class to every character that matches a search value. It is used to help the user see why the filter results are filtered. The span/class on the characters are useless without proper styling.
5
5
  */
6
6
  :host {
7
- --common-spacing: var(--mer-spacing--lg);
8
- --spacing-body-block-start: var(--common-spacing);
9
- --spacing-body-block-end: var(--common-spacing);
10
- --spacing-body-inline-start: var(--common-spacing);
11
- --spacing-body-inline-end: 0;
12
- --spacing-body-inline-start: 0;
13
7
  display: grid;
14
8
  block-size: 100%;
15
9
  overflow: auto;
16
10
  }
17
11
 
18
- :host(.spacing-body) .section-secondary,
19
- :host(.spacing-body) .section-create-new-kb__header,
20
- :host(.spacing-body) .section-create-new-kb__actions,
21
- :host(.spacing-body-inline) .section-secondary,
22
- :host(.spacing-body-inline) .section-create-new-kb__header,
23
- :host(.spacing-body-inline) .section-create-new-kb__actions {
24
- padding-inline-start: var(--common-spacing);
25
- padding-inline-end: var(--common-spacing);
26
- }
27
-
28
- :host(.spacing-body-inline-start) .section-secondary,
29
- :host(.spacing-body-inline-start) .section-create-new-kb__actions {
30
- padding-inline-start: var(--common-spacing);
31
- }
32
-
33
- :host(.spacing-body-inline-end) .section-secondary,
34
- :host(.spacing-body-inline-end) .section-create-new-kb__actions {
35
- padding-inline-end: var(--common-spacing);
36
- }
37
-
38
12
  .main {
39
13
  animation: fadeIn var(--mer-timing--fast) forwards;
40
14
  display: grid;
@@ -42,7 +16,8 @@ Found on /common/helpers.tsx hiChar function is used to add a span/class to ever
42
16
  overflow: auto;
43
17
  opacity: 0;
44
18
  grid-template-rows: max-content 1fr;
45
- gap: var(--mer-spacing--lg);
19
+ gap: var(--mer-spacing--xl);
20
+ min-block-size: 635px;
46
21
  }
47
22
 
48
23
  @keyframes bounce {
@@ -73,21 +48,15 @@ Found on /common/helpers.tsx hiChar function is used to add a span/class to ever
73
48
  .card-filled,
74
49
  .card-outlined {
75
50
  display: grid;
76
- gap: var(--mer-spacing--md);
51
+ gap: var(--mer-spacing--xl);
77
52
  align-content: space-between;
78
- border-radius: var(--mer-border__radius--md);
53
+ border: var(--mer-border__width--sm) solid var(--mer-border-color__on-surface);
54
+ border-radius: var(--mer-border__radius--sm);
55
+ padding: var(--mer-spacing--lg);
79
56
  }
80
57
 
81
58
  .card-filled {
82
59
  background-color: var(--mer-surface__elevation--01);
83
- padding: var(--mer-spacing--md);
84
- }
85
-
86
- .card-outlined {
87
- border: var(--mer-border__width--sm) solid var(--mer-border-color__on-surface);
88
- grid-template-columns: max-content 1fr;
89
- align-items: center;
90
- padding: var(--mer-spacing--md) var(--mer-spacing--md) var(--mer-spacing--xs) var(--mer-spacing--md);
91
60
  }
92
61
 
93
62
  .icon-capsule {
@@ -100,20 +69,15 @@ Found on /common/helpers.tsx hiChar function is used to add a span/class to ever
100
69
  border-radius: 50%;
101
70
  border: var(--mer-border__width--sm) dashed var(--mer-border-color__on-elevation--02);
102
71
  }
103
- .icon-capsule .icon-circular {
104
- --ch-image-size: 20px;
105
- }
106
72
 
107
73
  .card__header {
108
74
  display: grid;
109
75
  gap: var(--mer-spacing--sm);
110
- justify-items: self-start;
111
76
  }
112
77
 
113
78
  .card__header-description {
114
79
  display: grid;
115
- gap: var(--mer-spacing--xs);
116
- --font-weight-regular: 300;
80
+ gap: var(--mer-spacing--2xs);
117
81
  }
118
82
 
119
83
  .section-create-new-kb {
@@ -123,22 +87,14 @@ Found on /common/helpers.tsx hiChar function is used to add a span/class to ever
123
87
  }
124
88
  .section-create-new-kb__header {
125
89
  display: grid;
126
- gap: var(--mer-spacing--xs);
127
- }
128
- .section-create-new-kb__title {
129
- color: var(--mer-text__bright);
130
- font-weight: 500;
90
+ gap: var(--mer-spacing--2xs);
131
91
  }
132
92
  .section-create-new-kb__actions {
133
93
  display: grid;
134
94
  gap: var(--mer-spacing--md);
135
95
  overflow-x: auto;
136
96
  grid-auto-flow: column;
137
- grid-auto-columns: 330px;
138
- }
139
-
140
- .samples-buttons-container {
141
- flex-wrap: wrap;
97
+ grid-auto-columns: 430px;
142
98
  }
143
99
 
144
100
  .section-secondary {
@@ -147,20 +103,9 @@ Found on /common/helpers.tsx hiChar function is used to add a span/class to ever
147
103
  position: relative;
148
104
  overflow: auto;
149
105
  }
150
- .section-secondary__title {
151
- display: grid;
152
- grid-template-columns: 1fr max-content 1fr;
153
- gap: var(--mer-spacing--md);
154
- align-items: center;
155
- font-weight: 300;
156
- }
157
- .section-secondary__title::before, .section-secondary__title::after {
158
- content: "";
159
- block-size: var(--mer-border__width--sm);
160
- background-color: var(--mer-border-color__on-elevation--01);
161
- }
162
106
  .section-secondary__actions {
163
107
  display: grid;
108
+ gap: var(--mer-spacing--sm);
164
109
  }
165
110
  .section-secondary__actions--two-cards {
166
111
  grid-template-columns: repeat(2, minmax(430px, 1fr));
@@ -169,21 +114,11 @@ Found on /common/helpers.tsx hiChar function is used to add a span/class to ever
169
114
  grid-auto-columns: 670px;
170
115
  }
171
116
 
172
- .section-no-kbs {
173
- display: grid;
174
- block-size: 100%;
175
- position: relative;
176
- overflow: auto;
177
- grid-template-rows: max-content max-content;
178
- gap: var(--mer-spacing--md);
179
- }
180
-
181
117
  .section-kbs {
182
118
  background-color: var(--mer-surface__elevation--01);
183
119
  border-radius: var(--mer-border__radius--sm);
184
120
  padding: var(--mer-spacing--sm);
185
121
  display: grid;
186
- container-type: inline-size;
187
122
  grid-template-rows: auto 1fr;
188
123
  overflow: hidden;
189
124
  }
@@ -192,7 +127,7 @@ Found on /common/helpers.tsx hiChar function is used to add a span/class to ever
192
127
  grid-template-columns: max-content 230px;
193
128
  align-items: center;
194
129
  gap: var(--mer-spacing--xl);
195
- border-block-end: var(--mer-border__width--sm) solid var(--mer-border-color__on-elevation--01);
130
+ border-block-end: var(--mer-border__width--sm) solid var(--mer-border-color__on-elevation--03);
196
131
  padding-block-end: var(--mer-spacing--sm);
197
132
  }
198
133
  .section-kbs__header--no-border {
@@ -221,19 +156,13 @@ Found on /common/helpers.tsx hiChar function is used to add a span/class to ever
221
156
  grid-auto-rows: 1fr;
222
157
  overflow: hidden;
223
158
  }
224
- @container (max-width: 768px) {
225
- .section-kbs__list {
226
- grid-template-columns: 1fr;
227
- }
228
- }
229
159
 
230
160
  .kb__item {
231
- --font-weight-regular: 300;
232
161
  background-color: var(--mer-surface__elevation--02);
233
162
  padding: var(--mer-spacing--sm);
234
163
  display: grid;
235
- grid-template-columns: auto max-content;
236
- gap: var(--mer-spacing--3xl);
164
+ grid-template-columns: 284px 1fr;
165
+ gap: var(--mer-spacing--md);
237
166
  }
238
167
  .kb__details {
239
168
  display: grid;
@@ -247,7 +176,6 @@ Found on /common/helpers.tsx hiChar function is used to add a span/class to ever
247
176
  text-overflow: ellipsis;
248
177
  text-decoration: underline;
249
178
  cursor: pointer;
250
- display: inline-block;
251
179
  }
252
180
  .kb__name:hover {
253
181
  color: var(--mer-text__bright);
@@ -256,8 +184,6 @@ Found on /common/helpers.tsx hiChar function is used to add a span/class to ever
256
184
  overflow: hidden;
257
185
  white-space: nowrap;
258
186
  text-overflow: ellipsis;
259
- text-align: end;
260
- font-variant-numeric: tabular-nums;
261
187
  }
262
188
 
263
189
  .hiChar {
@@ -284,17 +210,4 @@ Found on /common/helpers.tsx hiChar function is used to add a span/class to ever
284
210
  .card__footer {
285
211
  font-weight: var(--mer-font__weight--light) !important;
286
212
  --control__font-weight--regular: var(--mer-font__weight--light);
287
- }
288
-
289
- .card__header-description {
290
- --line-height-tight: 1.7;
291
- --font-weight-regular: 300;
292
- }
293
-
294
- .card__header-title {
295
- color: var(--mer-text__bright);
296
- }
297
-
298
- .button-tertiary-no-padding-inline-start.button-tertiary {
299
- padding-inline-start: 0;
300
213
  }
@@ -14,7 +14,7 @@ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (
14
14
  throw new TypeError("Cannot write private member to an object whose class did not declare it");
15
15
  return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
16
16
  };
17
- var _GxIdeStartPage_instances, _GxIdeStartPage_componentLocale, _GxIdeStartPage_userLanguage, _GxIdeStartPage_createKBClickHandler, _GxIdeStartPage_filterKbs, _GxIdeStartPage_openKbClickHandler, _GxIdeStartPage_evaluateContentToRender, _GxIdeStartPage_renderKbsSection, _GxIdeStartPage_renderKbs, _GxIdeStartPage_renderSecondarySection;
17
+ var _GxIdeStartPage_instances, _GxIdeStartPage_componentLocale, _GxIdeStartPage_userLanguage, _GxIdeStartPage_createKBClickHandler, _GxIdeStartPage_openKbClickHandler, _GxIdeStartPage_filterKbs, _GxIdeStartPage_renderKbsSection, _GxIdeStartPage_renderKbs, _GxIdeStartPage_evaluateContentToRender, _GxIdeStartPage_renderSecondarySection;
18
18
  // Stencil
19
19
  import { Host, h } from "@stencil/core";
20
20
  // Other Libraries
@@ -24,7 +24,6 @@ import { ja, zhCN, enUS } from "date-fns/locale";
24
24
  // Custom
25
25
  import { Locale } from "../../common/locale";
26
26
  // const locale = enUS; // use `zhCN` for Chinese, `ja` for Japanese, `enUS` for English
27
- import { formatDate } from "../../common/helpers";
28
27
  const LANGS_DATE_FNS_MAP = {
29
28
  "en": enUS,
30
29
  "ja": ja,
@@ -74,13 +73,13 @@ export class GxIdeStartPage {
74
73
  event.stopPropagation();
75
74
  this.createKBCallback(fromServer);
76
75
  });
77
- _GxIdeStartPage_filterKbs.set(this, (event) => {
78
- this.kbFilterValue = event.detail;
79
- });
80
76
  _GxIdeStartPage_openKbClickHandler.set(this, (kbId) => (event) => {
81
77
  event.stopPropagation();
82
78
  this.openKbCallback(kbId);
83
79
  });
80
+ _GxIdeStartPage_filterKbs.set(this, (event) => {
81
+ this.kbFilterValue = event.detail;
82
+ });
84
83
  _GxIdeStartPage_renderKbsSection.set(this, () => {
85
84
  const hideKbsFilter = this.kbs.length < this.kbsFilterThreshold;
86
85
  const kbsListEmpty = this.filteredKbs.length === 0;
@@ -119,14 +118,9 @@ export class GxIdeStartPage {
119
118
  locale: __classPrivateFieldGet(this, _GxIdeStartPage_userLanguage, "f")
120
119
  })
121
120
  : undefined;
122
- // convert date to date format, since toISOString() requires date as Date.
123
- const dateAsDate = kb.lastOpenedDate
124
- ? new Date(kb.lastOpenedDate)
125
- : undefined;
126
- let dateFormated = formatDate(dateAsDate, "date-time-short");
127
121
  // icon
128
122
  const kbIcon = (_a = kb.icon) !== null && _a !== void 0 ? _a : KB_DEFAULT_ICON;
129
- return (h("article", { class: "kb__item", key: index }, h("div", { class: "kb__details" }, h("ch-image", { class: "icon-md", src: kbIcon }), h("button", { class: "body-regular-m kb__name", onClick: __classPrivateFieldGet(this, _GxIdeStartPage_openKbClickHandler, "f").call(this, kb.id) }, kb.name)), relativeDate && (h("p", { class: "body-regular-m kb__modified" }, `${__classPrivateFieldGet(this, _GxIdeStartPage_componentLocale, "f").recentKBs.opened}`, " ", h("time", { dateTime: dateFormated }, dateFormated)))));
123
+ return (h("article", { class: "kb__item", key: index }, h("div", { class: "kb__details" }, h("ch-image", { class: "icon-md", src: kbIcon }), h("p", { class: "body-regular-m kb__name", onClick: __classPrivateFieldGet(this, _GxIdeStartPage_openKbClickHandler, "f").call(this, kb.id) }, kb.name)), relativeDate && (h("div", { class: "body-regular-m kb__modified" }, `${__classPrivateFieldGet(this, _GxIdeStartPage_componentLocale, "f").recentKBs.opened} ${relativeDate}`))));
130
124
  });
131
125
  });
132
126
  _GxIdeStartPage_renderSecondarySection.set(this, () => {
@@ -136,26 +130,24 @@ export class GxIdeStartPage {
136
130
  const multipleCards = this.secondarySection.cards.length > 2;
137
131
  return (h("section", {
138
132
  // Recent Knowledge Bases
139
- class: "section-no-kbs"
140
- }, h("header", null, h("h2", { class: "body-regular-s section-secondary__title" }, this.secondarySection.title)), h("section", { class: {
133
+ class: "section-secondary"
134
+ }, h("header", null, h("h2", { class: "subtitle-regular-s" }, this.secondarySection.title)), h("section", { class: {
141
135
  "section-secondary__actions": true,
142
136
  "section-secondary__actions--two-cards": !multipleCards,
143
137
  "section-secondary__actions--multiple-cards": multipleCards,
144
138
  "scrollable": true
145
139
  } }, this.secondarySection.cards.map((card, index) => {
146
- return (h("article", { class: "card card-outlined", key: index }, h("span", { class: "icon-capsule" }, h("ch-image", { class: "icon-md icon-circular", src: card.icon.src, "aria-label": card.icon.ariaLabel })), h("header", { class: "card__header" }, h("h2", { class: "subtitle-semi-bold-xs card__header-title" }, card.title), card.description.map(paragraph => (h("p", { class: "body-regular-s card__header-description" }, paragraph))), card.action && (h("button", { class: "button-tertiary button-icon-and-text button-tertiary-no-padding-inline-start", onClick: card.action.callback && card.action.callback }, h("ch-image", { class: "icon-md", src: DETAIL_ICON }), card.action.caption)))));
140
+ return (h("article", { class: "card card-outlined", key: index }, h("header", { class: "card__header" }, h("span", { class: "icon-capsule" }, h("ch-image", { class: "icon-md icon-circular", src: card.icon.src, "aria-label": card.icon.ariaLabel })), h("div", { class: "card__header-description" }, h("h2", { class: "subtitle-regular-s" }, card.title), card.description.map(paragraph => (h("p", { class: "body-regular-m" }, paragraph))))), h("footer", { class: "card__footer" }, card.action && (h("button", { class: "button-tertiary button-icon-and-text", onClick: card.action.callback && card.action.callback }, h("ch-image", { class: "icon-md", src: DETAIL_ICON }), card.action.caption)))));
147
141
  }))));
148
142
  });
149
- this.filteredKbs = undefined;
150
143
  this.kbFilterValue = "";
144
+ this.filteredKbs = undefined;
151
145
  this.loading = true;
152
146
  this.createKBCallback = undefined;
153
- this.kbs = undefined;
154
- this.kbsFilterThreshold = undefined;
155
147
  this.openKbCallback = undefined;
156
- this.openSampleCallback = undefined;
157
- this.samples = undefined;
158
148
  this.secondarySection = undefined;
149
+ this.kbs = undefined;
150
+ this.kbsFilterThreshold = undefined;
159
151
  }
160
152
  kbFilterValueChanged(newKbFilterValue) {
161
153
  this.filteredKbs = this.kbs.filter(kb => kb.name.toLowerCase().includes(newKbFilterValue.toLocaleLowerCase()));
@@ -174,33 +166,22 @@ export class GxIdeStartPage {
174
166
  __classPrivateFieldSet(this, _GxIdeStartPage_userLanguage, LANGS_DATE_FNS_MAP[userLanguage], "f");
175
167
  }
176
168
  render() {
177
- var _a, _b;
169
+ var _a;
178
170
  this.loading =
179
171
  (!this.kbs || ((_a = this.kbs) === null || _a === void 0 ? void 0 : _a.length) === 0) && !this.secondarySection;
180
- const renderCreateProjectCard = this.createKBCallback;
181
- const renderOpenProjectCard = this.openKbCallback;
182
- const renderViewSamplesCard = ((_b = this.samples) === null || _b === void 0 ? void 0 : _b.length) && this.openSampleCallback;
183
- const renderCardsContainer = renderCreateProjectCard || renderOpenProjectCard || renderViewSamplesCard;
184
- return (h(Host, { class: "scrollable" }, h("ch-theme", { model: CSS_BUNDLES }), h("main", { class: "main scrollable" }, h("section", {
172
+ return (h(Host, { class: "widget scrollable spacing-body" }, h("ch-theme", { model: CSS_BUNDLES }), h("main", { class: "main scrollable" }, h("section", {
185
173
  // Create a new Knowledge Base
186
174
  class: "section-create-new-kb"
187
175
  }, h("header", {
188
176
  // main header
189
- class: "section-create-new-kb__header"
190
- }, h("h1", { class: "heading-5 section-create-new-kb__title" }, __classPrivateFieldGet(this, _GxIdeStartPage_componentLocale, "f").createKB.title), h("p", { class: "body-regular-m" }, __classPrivateFieldGet(this, _GxIdeStartPage_componentLocale, "f").createKB.description)), renderCardsContainer && (h("section", { class: "section-create-new-kb__actions scrollable" }, renderCreateProjectCard && (h("article", {
177
+ class: "section-create-new__header"
178
+ }, h("h1", { class: "heading-4" }, __classPrivateFieldGet(this, _GxIdeStartPage_componentLocale, "f").createKB.title), h("p", { class: "body-regular-m" }, __classPrivateFieldGet(this, _GxIdeStartPage_componentLocale, "f").createKB.description)), h("section", { class: "section-create-new-kb__actions scrollable" }, h("article", {
191
179
  // create project
192
180
  class: "card card-filled"
193
- }, h("header", { class: "card__header" }, h("div", { class: "card__header-description" }, h("h2", { class: "subtitle-semi-bold-xs card__header-title" }, __classPrivateFieldGet(this, _GxIdeStartPage_componentLocale, "f").createProject.title), h("p", { class: "body-regular-s" }, __classPrivateFieldGet(this, _GxIdeStartPage_componentLocale, "f").createProject.description))), h("footer", { class: "card__footer" }, h("button", { class: "button-primary", onClick: __classPrivateFieldGet(this, _GxIdeStartPage_createKBClickHandler, "f").call(this, false) }, __classPrivateFieldGet(this, _GxIdeStartPage_componentLocale, "f").createProject.buttonCaption)))), renderOpenProjectCard && (h("article", {
181
+ }, h("header", { class: "card__header" }, h("div", { class: "card__header-description" }, h("h2", { class: "subtitle-regular-s" }, __classPrivateFieldGet(this, _GxIdeStartPage_componentLocale, "f").createProject.title), h("p", { class: "body-regular-m" }, __classPrivateFieldGet(this, _GxIdeStartPage_componentLocale, "f").createProject.description))), h("footer", { class: "card__footer" }, h("button", { class: "button-primary", onClick: __classPrivateFieldGet(this, _GxIdeStartPage_createKBClickHandler, "f").call(this, false) }, __classPrivateFieldGet(this, _GxIdeStartPage_componentLocale, "f").createProject.buttonCaption))), h("article", {
194
182
  // open existing project
195
183
  class: "card-filled"
196
- }, h("header", { class: "card__header" }, h("div", { class: "card__header-description" }, h("h2", { class: "subtitle-semi-bold-xs" }, __classPrivateFieldGet(this, _GxIdeStartPage_componentLocale, "f").openExistingProject.title), h("p", { class: "body-regular-s" }, __classPrivateFieldGet(this, _GxIdeStartPage_componentLocale, "f").openExistingProject
197
- .description))), h("footer", { class: "card__footer" }, h("button", { class: "button-secondary cancel-btn", onClick: __classPrivateFieldGet(this, _GxIdeStartPage_createKBClickHandler, "f").call(this, true) }, __classPrivateFieldGet(this, _GxIdeStartPage_componentLocale, "f").openExistingProject
198
- .buttonCaption)))), renderViewSamplesCard ? (h("article", {
199
- // view samples
200
- class: "card-filled"
201
- }, h("header", { class: "card__header" }, h("div", { class: "card__header-description" }, h("h2", { class: "subtitle-semi-bold-xs" }, __classPrivateFieldGet(this, _GxIdeStartPage_componentLocale, "f").viewSamples.title), h("p", { class: "body-regular-s" }, __classPrivateFieldGet(this, _GxIdeStartPage_componentLocale, "f").viewSamples.description))), h("footer", { class: "card__footer" }, h("div", { class: "buttons-spacer samples-buttons-container" }, this.samples.map(sample => {
202
- return (h("button", { class: "button-secondary", onClick: () => this.openSampleCallback(sample) }, sample.name));
203
- }))))) : null))), h("section", { class: "section-secondary scrollable" }, this.loading ? (h("gx-ide-loader", { class: "loader", loaderTitle: __classPrivateFieldGet(this, _GxIdeStartPage_componentLocale, "f").recentKBs.loaderTitle, description: __classPrivateFieldGet(this, _GxIdeStartPage_componentLocale, "f").recentKBs.loaderDescription, show: true })) : (__classPrivateFieldGet(this, _GxIdeStartPage_instances, "m", _GxIdeStartPage_evaluateContentToRender).call(this))))));
184
+ }, h("header", { class: "card__header" }, h("div", { class: "card__header-description" }, h("h2", { class: "subtitle-regular-s" }, __classPrivateFieldGet(this, _GxIdeStartPage_componentLocale, "f").openExistingProject.title), h("p", { class: "body-regular-m" }, __classPrivateFieldGet(this, _GxIdeStartPage_componentLocale, "f").openExistingProject.description))), h("footer", { class: "card__footer" }, h("button", { class: "button-secondary cancel-btn", onClick: __classPrivateFieldGet(this, _GxIdeStartPage_createKBClickHandler, "f").call(this, true) }, __classPrivateFieldGet(this, _GxIdeStartPage_componentLocale, "f").openExistingProject.buttonCaption))))), h("section", { class: "section-secondary scrollable" }, this.loading ? (h("gx-ide-loader", { class: "loader", loaderTitle: __classPrivateFieldGet(this, _GxIdeStartPage_componentLocale, "f").recentKBs.loaderTitle, description: __classPrivateFieldGet(this, _GxIdeStartPage_componentLocale, "f").recentKBs.loaderDescription, show: true })) : (__classPrivateFieldGet(this, _GxIdeStartPage_instances, "m", _GxIdeStartPage_evaluateContentToRender).call(this))))));
204
185
  }
205
186
  static get is() { return "gx-ide-start-page"; }
206
187
  static get encapsulation() { return "shadow"; }
@@ -237,44 +218,6 @@ export class GxIdeStartPage {
237
218
  "text": "Callback invoked to create a new KB. It must be specified whether this create is create from server or not, through the parameter 'fromServer'."
238
219
  }
239
220
  },
240
- "kbs": {
241
- "type": "unknown",
242
- "mutable": false,
243
- "complexType": {
244
- "original": "RecentKBData[]",
245
- "resolved": "RecentKBData[]",
246
- "references": {
247
- "RecentKBData": {
248
- "location": "local",
249
- "path": "/home/runner/work/genexus-ide-ui/genexus-ide-ui/src/components/start-page/start-page.tsx",
250
- "id": "src/components/start-page/start-page.tsx::RecentKBData"
251
- }
252
- }
253
- },
254
- "required": false,
255
- "optional": false,
256
- "docs": {
257
- "tags": [],
258
- "text": "User's kbs array"
259
- }
260
- },
261
- "kbsFilterThreshold": {
262
- "type": "number",
263
- "mutable": false,
264
- "complexType": {
265
- "original": "number",
266
- "resolved": "number",
267
- "references": {}
268
- },
269
- "required": false,
270
- "optional": false,
271
- "docs": {
272
- "tags": [],
273
- "text": "The minimum required of kbs to display a filter."
274
- },
275
- "attribute": "kbs-filter-threshold",
276
- "reflect": false
277
- },
278
221
  "openKbCallback": {
279
222
  "type": "unknown",
280
223
  "mutable": false,
@@ -295,79 +238,71 @@ export class GxIdeStartPage {
295
238
  "text": "Callback invoked to open a KB when the user clicks on a KB card."
296
239
  }
297
240
  },
298
- "openSampleCallback": {
241
+ "secondarySection": {
299
242
  "type": "unknown",
300
243
  "mutable": false,
301
244
  "complexType": {
302
- "original": "(sample: SampleData) => Promise<void>",
303
- "resolved": "(sample: SampleData) => Promise<void>",
245
+ "original": "SecondarySection",
246
+ "resolved": "{ title: string; cards: CardInfo[]; }",
304
247
  "references": {
305
- "SampleData": {
248
+ "SecondarySection": {
306
249
  "location": "local",
307
250
  "path": "/home/runner/work/genexus-ide-ui/genexus-ide-ui/src/components/start-page/start-page.tsx",
308
- "id": "src/components/start-page/start-page.tsx::SampleData"
309
- },
310
- "Promise": {
311
- "location": "global",
312
- "id": "global::Promise"
251
+ "id": "src/components/start-page/start-page.tsx::SecondarySection"
313
252
  }
314
253
  }
315
254
  },
316
- "required": true,
317
- "optional": false,
255
+ "required": false,
256
+ "optional": true,
318
257
  "docs": {
319
258
  "tags": [],
320
- "text": "Callback invoked when the user clicks a button to open a sample."
259
+ "text": "The secondary section that will appear below the \"Create a new Knowledge Base\" main section. This section will be displayed if there are no recent kbs."
321
260
  }
322
261
  },
323
- "samples": {
262
+ "kbs": {
324
263
  "type": "unknown",
325
264
  "mutable": false,
326
265
  "complexType": {
327
- "original": "SampleData[]",
328
- "resolved": "SampleData[]",
266
+ "original": "RecentKBData[]",
267
+ "resolved": "RecentKBData[]",
329
268
  "references": {
330
- "SampleData": {
269
+ "RecentKBData": {
331
270
  "location": "local",
332
271
  "path": "/home/runner/work/genexus-ide-ui/genexus-ide-ui/src/components/start-page/start-page.tsx",
333
- "id": "src/components/start-page/start-page.tsx::SampleData"
272
+ "id": "src/components/start-page/start-page.tsx::RecentKBData"
334
273
  }
335
274
  }
336
275
  },
337
276
  "required": false,
338
- "optional": true,
277
+ "optional": false,
339
278
  "docs": {
340
279
  "tags": [],
341
- "text": "List of samples available to be displayed in the samples card."
280
+ "text": "User's kbs array"
342
281
  }
343
282
  },
344
- "secondarySection": {
345
- "type": "unknown",
283
+ "kbsFilterThreshold": {
284
+ "type": "number",
346
285
  "mutable": false,
347
286
  "complexType": {
348
- "original": "SecondarySection",
349
- "resolved": "{ title: string; cards: CardInfo[]; }",
350
- "references": {
351
- "SecondarySection": {
352
- "location": "local",
353
- "path": "/home/runner/work/genexus-ide-ui/genexus-ide-ui/src/components/start-page/start-page.tsx",
354
- "id": "src/components/start-page/start-page.tsx::SecondarySection"
355
- }
356
- }
287
+ "original": "number",
288
+ "resolved": "number",
289
+ "references": {}
357
290
  },
358
291
  "required": false,
359
- "optional": true,
292
+ "optional": false,
360
293
  "docs": {
361
294
  "tags": [],
362
- "text": "The secondary section that will appear below the \"Create a new Knowledge Base\" main section. This section will be displayed if there are no recent kbs."
363
- }
295
+ "text": "The minimum required of kbs to display a filter."
296
+ },
297
+ "attribute": "kbs-filter-threshold",
298
+ "reflect": false
364
299
  }
365
300
  };
366
301
  }
367
302
  static get states() {
368
303
  return {
369
- "filteredKbs": {},
370
304
  "kbFilterValue": {},
305
+ "filteredKbs": {},
371
306
  "loading": {}
372
307
  };
373
308
  }
@@ -382,7 +317,7 @@ export class GxIdeStartPage {
382
317
  }];
383
318
  }
384
319
  }
385
- _GxIdeStartPage_componentLocale = new WeakMap(), _GxIdeStartPage_userLanguage = new WeakMap(), _GxIdeStartPage_createKBClickHandler = new WeakMap(), _GxIdeStartPage_filterKbs = new WeakMap(), _GxIdeStartPage_openKbClickHandler = new WeakMap(), _GxIdeStartPage_renderKbsSection = new WeakMap(), _GxIdeStartPage_renderKbs = new WeakMap(), _GxIdeStartPage_renderSecondarySection = new WeakMap(), _GxIdeStartPage_instances = new WeakSet(), _GxIdeStartPage_evaluateContentToRender = function _GxIdeStartPage_evaluateContentToRender() {
320
+ _GxIdeStartPage_componentLocale = new WeakMap(), _GxIdeStartPage_userLanguage = new WeakMap(), _GxIdeStartPage_createKBClickHandler = new WeakMap(), _GxIdeStartPage_openKbClickHandler = new WeakMap(), _GxIdeStartPage_filterKbs = new WeakMap(), _GxIdeStartPage_renderKbsSection = new WeakMap(), _GxIdeStartPage_renderKbs = new WeakMap(), _GxIdeStartPage_renderSecondarySection = new WeakMap(), _GxIdeStartPage_instances = new WeakSet(), _GxIdeStartPage_evaluateContentToRender = function _GxIdeStartPage_evaluateContentToRender() {
386
321
  return this.kbs && this.kbs.length > 0
387
322
  ? __classPrivateFieldGet(this, _GxIdeStartPage_renderKbsSection, "f").call(this)
388
323
  : __classPrivateFieldGet(this, _GxIdeStartPage_renderSecondarySection, "f").call(this);
@@ -1 +1 @@
1
- {"version":3,"file":"start-page.js","sourceRoot":"","sources":["../../../src/components/start-page/start-page.tsx"],"names":[],"mappings":"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","sourcesContent":["// Stencil\nimport { Component, Host, h, Prop, State, Element, Watch } from \"@stencil/core\";\n// Other Libraries\nimport { MercuryBundles, getIconPath } from \"@genexus/mercury\";\nimport { formatDistanceToNow, Locale as LocaleDateFns } from \"date-fns\";\nimport { ja, zhCN, enUS } from \"date-fns/locale\";\n// import { enUS } from \"date-fns/locale\";\nimport { ChEditCustomEvent } from \"@genexus/chameleon-controls-library\";\n// Custom\nimport { Locale } from \"../../common/locale\";\n\n// const locale = enUS; // use `zhCN` for Chinese, `ja` for Japanese, `enUS` for English\n\nimport { formatDate } from \"../../common/helpers\";\n\nconst LANGS_DATE_FNS_MAP: LanguageMap = {\n \"en\": enUS,\n \"ja\": ja,\n \"zh-CN\": zhCN,\n \"zh-TW\": zhCN,\n \"zh-HK\": zhCN\n};\n\nconst DETAIL_ICON = getIconPath({\n category: \"system\",\n name: \"detail\",\n colorType: \"primary\"\n});\nconst FILTER_ICON = getIconPath({\n category: \"window-tools\",\n name: \"filter\",\n colorType: \"on-elevation\"\n});\nconst KB_DEFAULT_ICON = getIconPath({\n category: \"objects\",\n name: \"knowledge-base\"\n});\nconst SEARCH_ICON = getIconPath({\n category: \"system\",\n name: \"search\",\n colorType: \"on-elevation\"\n});\n\nconst CSS_BUNDLES: MercuryBundles = [\n \"resets/box-sizing\",\n \"utils/typography\",\n \"utils/layout\",\n \"components/edit\",\n \"components/icon\",\n \"components/button\",\n \"chameleon/scrollbar\",\n \"utils/typography\"\n];\n\n@Component({\n tag: \"gx-ide-start-page\",\n styleUrl: \"start-page.scss\",\n shadow: true,\n assetsDirs: [\"gx-ide-assets/start-page\"]\n})\nexport class GxIdeStartPage {\n /**\n * The component hard-coded strings translations.\n */\n // eslint-disable-next-line @stencil-community/own-props-must-be-private\n #componentLocale: any;\n #userLanguage: LocaleDateFns;\n\n @Element() el: HTMLGxIdeStartPageElement;\n\n /**\n * The kbs after the filter value.\n */\n @State() filteredKbs: RecentKBData[];\n\n @State() kbFilterValue: string = \"\";\n @Watch(\"kbFilterValue\")\n kbFilterValueChanged(newKbFilterValue: string) {\n this.filteredKbs = this.kbs.filter(kb =>\n kb.name.toLowerCase().includes(newKbFilterValue.toLocaleLowerCase())\n );\n }\n\n /**\n * True if the start page is waiting, either for the kb's list or the secondary section.\n */\n @State() loading: boolean = true;\n\n /**\n * Callback invoked to create a new KB. It must be specified whether this create is create from server or not, through the parameter 'fromServer'.\n */\n @Prop() readonly createKBCallback!: (fromServer: boolean) => Promise<void>;\n\n /**\n * User's kbs array\n */\n @Prop() readonly kbs: RecentKBData[];\n @Watch(\"kbs\")\n kbsChanged(newKbs: RecentKBData[]) {\n this.filteredKbs = newKbs;\n this.kbFilterValue = \"\"; // clear filter\n }\n\n /**\n * The minimum required of kbs to display a filter.\n */\n @Prop() readonly kbsFilterThreshold: number;\n\n /**\n * Callback invoked to open a KB when the user clicks on a KB card.\n */\n @Prop() readonly openKbCallback!: (id: string) => Promise<void>;\n\n /**\n * Callback invoked when the user clicks a button to open a sample.\n */\n @Prop() readonly openSampleCallback!: (sample: SampleData) => Promise<void>;\n\n /**\n * List of samples available to be displayed in the samples card.\n */\n @Prop() readonly samples?: SampleData[];\n\n /**\n * The secondary section that will appear below the \"Create a new Knowledge Base\" main section. This section will be displayed if there are no recent kbs.\n */\n @Prop() readonly secondarySection?: SecondarySection;\n\n async componentWillLoad() {\n this.#componentLocale = await Locale.getComponentStrings(this.el);\n\n // initialize filteredKbs\n this.kbsChanged(this.kbs);\n\n // get user language to display the kb \"last opened\" value in the appropriate language.\n const userLanguage: keyof LanguageMap = document.documentElement\n .lang as keyof LanguageMap;\n this.#userLanguage = LANGS_DATE_FNS_MAP[userLanguage];\n }\n\n #createKBClickHandler = (fromServer: boolean) => (event: MouseEvent) => {\n event.stopPropagation();\n this.createKBCallback(fromServer);\n };\n\n #filterKbs = (event: ChEditCustomEvent<string> | InputEvent) => {\n this.kbFilterValue = event.detail as string;\n };\n\n #openKbClickHandler = (kbId: string) => (event: MouseEvent) => {\n event.stopPropagation();\n this.openKbCallback(kbId);\n };\n\n // renders\n\n #evaluateContentToRender() {\n return this.kbs && this.kbs.length > 0\n ? this.#renderKbsSection()\n : this.#renderSecondarySection();\n }\n\n #renderKbsSection = () => {\n const hideKbsFilter = this.kbs.length < this.kbsFilterThreshold;\n const kbsListEmpty = this.filteredKbs.length === 0;\n let contentToRender: HTMLGxgIdeLoaderElement | HTMLElement[];\n\n // Evaluate what is the content to display.\n if (this.filteredKbs.length > 0) {\n contentToRender = this.#renderKbs();\n } else {\n // No kb has pass the filter. Display an empty-state.\n contentToRender = (\n <gx-ide-empty-state\n isAnimated\n stateIconSrc={FILTER_ICON}\n stateTitle={this.#componentLocale.recentKBs.noMatches}\n ></gx-ide-empty-state>\n );\n }\n\n return (\n <section class=\"section-kbs\">\n <header\n class={{\n \"section-kbs__header\": true\n }}\n >\n <label\n class=\"subtitle-regular-s section-kbs__title\"\n htmlFor=\"filter-kbs\"\n >\n {this.#componentLocale.recentKBs.title}\n </label>\n <ch-edit\n // Render always, and display or hide, ro prevent FOUC, and also prevent\n // the header block-size from growing a little bit when the input renders.\n id=\"filter-kbs\"\n value={this.kbFilterValue}\n class={{\n \"input\": true,\n \"section-kbs__filter--hidden\": hideKbsFilter\n }}\n startImgSrc={SEARCH_ICON}\n placeholder={this.#componentLocale.recentKBs.filterKbsPlaceholder}\n onInput={!hideKbsFilter && this.#filterKbs}\n disabled={hideKbsFilter}\n ></ch-edit>\n </header>\n\n <div\n class={{\n \"section-kbs__list\": true,\n \"section-kbs__list--empty\": kbsListEmpty,\n \"scrollable\": true\n }}\n >\n {this.filteredKbs.length > 0 ? this.#renderKbs() : contentToRender}\n </div>\n </section>\n );\n };\n\n #renderKbs = (): HTMLElement[] => {\n return this.filteredKbs?.map((kb, index) => {\n // relative time ago\n\n const relativeDate = kb.lastOpenedDate\n ? formatDistanceToNow(new Date(kb.lastOpenedDate), {\n addSuffix: true,\n locale: this.#userLanguage\n })\n : undefined;\n\n // convert date to date format, since toISOString() requires date as Date.\n const dateAsDate = kb.lastOpenedDate\n ? new Date(kb.lastOpenedDate)\n : undefined;\n\n let dateFormated = formatDate(dateAsDate, \"date-time-short\");\n\n // icon\n const kbIcon = kb.icon ?? KB_DEFAULT_ICON;\n\n return (\n <article class=\"kb__item\" key={index}>\n <div class=\"kb__details\">\n <ch-image class=\"icon-md\" src={kbIcon}></ch-image>\n <button\n class=\"body-regular-m kb__name\"\n onClick={this.#openKbClickHandler(kb.id)}\n >\n {kb.name}\n </button>\n </div>\n {relativeDate && (\n <p class=\"body-regular-m kb__modified\">\n {`${this.#componentLocale.recentKBs.opened}`}{\" \"}\n <time dateTime={dateFormated}>{dateFormated}</time>\n </p>\n )}\n </article>\n );\n });\n };\n\n #renderSecondarySection = (): HTMLElement | null => {\n if (!this.secondarySection) {\n return null;\n }\n\n const multipleCards = this.secondarySection.cards.length > 2;\n\n return (\n <section\n // Recent Knowledge Bases\n class=\"section-no-kbs\"\n >\n <header>\n <h2 class=\"body-regular-s section-secondary__title\">\n {this.secondarySection.title}\n </h2>\n </header>\n\n <section\n class={{\n \"section-secondary__actions\": true,\n \"section-secondary__actions--two-cards\": !multipleCards,\n \"section-secondary__actions--multiple-cards\": multipleCards,\n \"scrollable\": true\n }}\n >\n {this.secondarySection.cards.map((card, index) => {\n return (\n <article class=\"card card-outlined\" key={index}>\n <span class=\"icon-capsule\">\n <ch-image\n class=\"icon-md icon-circular\"\n src={card.icon.src}\n aria-label={card.icon.ariaLabel}\n ></ch-image>\n </span>\n <header class=\"card__header\">\n <h2 class=\"subtitle-semi-bold-xs card__header-title\">\n {card.title}\n </h2>\n {card.description.map(paragraph => (\n <p class=\"body-regular-s card__header-description\">\n {paragraph}\n </p>\n ))}\n {card.action && (\n <button\n class=\"button-tertiary button-icon-and-text button-tertiary-no-padding-inline-start\"\n onClick={card.action.callback && card.action.callback}\n >\n <ch-image class=\"icon-md\" src={DETAIL_ICON}></ch-image>\n {card.action.caption}\n </button>\n )}\n </header>\n </article>\n );\n })}\n </section>\n </section>\n );\n };\n\n render() {\n this.loading =\n (!this.kbs || this.kbs?.length === 0) && !this.secondarySection;\n\n const renderCreateProjectCard = this.createKBCallback;\n const renderOpenProjectCard = this.openKbCallback;\n const renderViewSamplesCard =\n this.samples?.length && this.openSampleCallback;\n const renderCardsContainer =\n renderCreateProjectCard || renderOpenProjectCard || renderViewSamplesCard;\n\n return (\n <Host class=\"scrollable\">\n <ch-theme model={CSS_BUNDLES}></ch-theme>\n <main class=\"main scrollable\">\n <section\n // Create a new Knowledge Base\n class=\"section-create-new-kb\"\n >\n <header\n // main header\n class=\"section-create-new-kb__header\"\n >\n <h1 class=\"heading-5 section-create-new-kb__title\">\n {this.#componentLocale.createKB.title}\n </h1>\n <p class=\"body-regular-m\">\n {this.#componentLocale.createKB.description}\n </p>\n </header>\n\n {renderCardsContainer && (\n <section class=\"section-create-new-kb__actions scrollable\">\n {renderCreateProjectCard && (\n <article\n // create project\n class=\"card card-filled\"\n >\n <header class=\"card__header\">\n <div class=\"card__header-description\">\n <h2 class=\"subtitle-semi-bold-xs card__header-title\">\n {this.#componentLocale.createProject.title}\n </h2>\n <p class=\"body-regular-s\">\n {this.#componentLocale.createProject.description}\n </p>\n </div>\n </header>\n <footer class=\"card__footer\">\n <button\n class=\"button-primary\"\n onClick={this.#createKBClickHandler(false)}\n >\n {this.#componentLocale.createProject.buttonCaption}\n </button>\n </footer>\n </article>\n )}\n\n {renderOpenProjectCard && (\n <article\n // open existing project\n class=\"card-filled\"\n >\n <header class=\"card__header\">\n <div class=\"card__header-description\">\n <h2 class=\"subtitle-semi-bold-xs\">\n {this.#componentLocale.openExistingProject.title}\n </h2>\n <p class=\"body-regular-s\">\n {\n this.#componentLocale.openExistingProject\n .description\n }\n </p>\n </div>\n </header>\n <footer class=\"card__footer\">\n <button\n class=\"button-secondary cancel-btn\"\n onClick={this.#createKBClickHandler(true)}\n >\n {\n this.#componentLocale.openExistingProject\n .buttonCaption\n }\n </button>\n </footer>\n </article>\n )}\n\n {renderViewSamplesCard ? (\n <article\n // view samples\n class=\"card-filled\"\n >\n <header class=\"card__header\">\n <div class=\"card__header-description\">\n <h2 class=\"subtitle-semi-bold-xs\">\n {this.#componentLocale.viewSamples.title}\n </h2>\n <p class=\"body-regular-s\">\n {this.#componentLocale.viewSamples.description}\n </p>\n </div>\n </header>\n <footer class=\"card__footer\">\n <div class=\"buttons-spacer samples-buttons-container\">\n {this.samples.map(sample => {\n return (\n <button\n class=\"button-secondary\"\n onClick={() => this.openSampleCallback(sample)}\n >\n {sample.name}\n </button>\n );\n })}\n </div>\n </footer>\n </article>\n ) : null}\n </section>\n )}\n </section>\n <section class=\"section-secondary scrollable\">\n {this.loading ? (\n <gx-ide-loader\n class=\"loader\"\n loaderTitle={this.#componentLocale.recentKBs.loaderTitle}\n description={this.#componentLocale.recentKBs.loaderDescription}\n show\n ></gx-ide-loader>\n ) : (\n this.#evaluateContentToRender()\n )}\n </section>\n </main>\n </Host>\n );\n }\n}\n\nexport type CardInfo = {\n icon?: {\n src: string;\n ariaLabel: string;\n };\n title: string;\n description: string[];\n action?: {\n iconSrc: string;\n caption: string;\n callback?: () => void;\n };\n};\n\ntype LanguageMap = {\n \"en\": LocaleDateFns;\n \"ja\": LocaleDateFns;\n \"zh-CN\": LocaleDateFns;\n \"zh-TW\": LocaleDateFns;\n \"zh-HK\": LocaleDateFns;\n};\n\nexport type RecentKBData = {\n id?: string;\n name: string;\n lastOpenedDate?: Date;\n icon: string;\n};\n\nexport type SampleData = {\n name: string;\n serverUrl: string;\n kbName: string;\n};\n\nexport type SecondarySection = {\n title: string;\n cards: CardInfo[];\n};\n"]}
1
+ {"version":3,"file":"start-page.js","sourceRoot":"","sources":["../../../src/components/start-page/start-page.tsx"],"names":[],"mappings":";;;;;;;;;;;;AAAA,UAAU;AACV,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAChF,kBAAkB;AAClB,OAAO,EAAkB,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAA2B,MAAM,UAAU,CAAC;AACxE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAGjD,SAAS;AACT,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAE7C,wFAAwF;AAExF,MAAM,kBAAkB,GAAgB;IACtC,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,EAAE;IACR,OAAO,EAAE,IAAI;IACb,OAAO,EAAE,IAAI;IACb,OAAO,EAAE,IAAI;CACd,CAAC;AAEF,MAAM,WAAW,GAAG,WAAW,CAAC;IAC9B,QAAQ,EAAE,QAAQ;IAClB,IAAI,EAAE,QAAQ;IACd,SAAS,EAAE,SAAS;CACrB,CAAC,CAAC;AACH,MAAM,WAAW,GAAG,WAAW,CAAC;IAC9B,QAAQ,EAAE,cAAc;IACxB,IAAI,EAAE,QAAQ;IACd,SAAS,EAAE,cAAc;CAC1B,CAAC,CAAC;AACH,MAAM,eAAe,GAAG,WAAW,CAAC;IAClC,QAAQ,EAAE,SAAS;IACnB,IAAI,EAAE,gBAAgB;CACvB,CAAC,CAAC;AACH,MAAM,WAAW,GAAG,WAAW,CAAC;IAC9B,QAAQ,EAAE,QAAQ;IAClB,IAAI,EAAE,QAAQ;IACd,SAAS,EAAE,cAAc;CAC1B,CAAC,CAAC;AAEH,MAAM,WAAW,GAAmB;IAClC,mBAAmB;IACnB,kBAAkB;IAClB,cAAc;IACd,iBAAiB;IACjB,iBAAiB;IACjB,mBAAmB;IACnB,qBAAqB;IACrB,kBAAkB;CACnB,CAAC;AAQF,MAAM,OAAO,cAAc;;;QACzB;;WAEG;QACH,wEAAwE;QACxE,kDAAsB;QACtB,+CAA6B;QAgE7B,+CAAwB,CAAC,UAAmB,EAAE,EAAE,CAAC,CAAC,KAAiB,EAAE,EAAE;YACrE,KAAK,CAAC,eAAe,EAAE,CAAC;YACxB,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;QACpC,CAAC,EAAC;QAEF,6CAAsB,CAAC,IAAY,EAAE,EAAE,CAAC,CAAC,KAAiB,EAAE,EAAE;YAC5D,KAAK,CAAC,eAAe,EAAE,CAAC;YACxB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC,EAAC;QAEF,oCAAa,CAAC,KAA6C,EAAE,EAAE;YAC7D,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,MAAgB,CAAC;QAC9C,CAAC,EAAC;QAEF,2CAAoB,GAAG,EAAE;YACvB,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC;YAChE,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,CAAC;YACnD,IAAI,eAAwD,CAAC;YAE7D,2CAA2C;YAC3C,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC/B,eAAe,GAAG,uBAAA,IAAI,iCAAW,MAAf,IAAI,CAAa,CAAC;aACrC;iBAAM;gBACL,qDAAqD;gBACrD,eAAe,GAAG,CAChB,0BACE,UAAU,QACV,YAAY,EAAE,WAAW,EACzB,UAAU,EAAE,uBAAA,IAAI,uCAAiB,CAAC,SAAS,CAAC,SAAS,GACjC,CACvB,CAAC;aACH;YAED,OAAO,CACL,eAAS,KAAK,EAAC,aAAa;gBAC1B,cACE,KAAK,EAAE;wBACL,qBAAqB,EAAE,IAAI;qBAC5B;oBAED,aACE,KAAK,EAAC,uCAAuC,EAC7C,OAAO,EAAC,YAAY,IAEnB,uBAAA,IAAI,uCAAiB,CAAC,SAAS,CAAC,KAAK,CAChC;oBACR;wBACE,wEAAwE;wBACxE,0EAA0E;wBAC1E,EAAE,EAAC,YAAY,EACf,KAAK,EAAE,IAAI,CAAC,aAAa,EACzB,KAAK,EAAE;4BACL,OAAO,EAAE,IAAI;4BACb,6BAA6B,EAAE,aAAa;yBAC7C,EACD,WAAW,EAAE,WAAW,EACxB,WAAW,EAAE,uBAAA,IAAI,uCAAiB,CAAC,SAAS,CAAC,oBAAoB,EACjE,OAAO,EAAE,CAAC,aAAa,IAAI,uBAAA,IAAI,iCAAW,EAC1C,QAAQ,EAAE,aAAa,GACd,CACJ;gBAET,WACE,KAAK,EAAE;wBACL,mBAAmB,EAAE,IAAI;wBACzB,0BAA0B,EAAE,YAAY;wBACxC,YAAY,EAAE,IAAI;qBACnB,IAEA,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,uBAAA,IAAI,iCAAW,MAAf,IAAI,CAAa,CAAC,CAAC,CAAC,eAAe,CAC9D,CACE,CACX,CAAC;QACJ,CAAC,EAAC;QAEF,oCAAa,GAAkB,EAAE;;YAC/B,OAAO,MAAA,IAAI,CAAC,WAAW,0CAAE,GAAG,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE;gBACzC,oBAAoB;;gBAEpB,MAAM,YAAY,GAAG,EAAE,CAAC,cAAc;oBACpC,CAAC,CAAC,mBAAmB,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,EAAE;wBAC/C,SAAS,EAAE,IAAI;wBACf,MAAM,EAAE,uBAAA,IAAI,oCAAc;qBAC3B,CAAC;oBACJ,CAAC,CAAC,SAAS,CAAC;gBAEd,OAAO;gBACP,MAAM,MAAM,GAAG,MAAA,EAAE,CAAC,IAAI,mCAAI,eAAe,CAAC;gBAE1C,OAAO,CACL,eAAS,KAAK,EAAC,UAAU,EAAC,GAAG,EAAE,KAAK;oBAClC,WAAK,KAAK,EAAC,aAAa;wBACtB,gBAAU,KAAK,EAAC,SAAS,EAAC,GAAG,EAAE,MAAM,GAAa;wBAClD,SACE,KAAK,EAAC,yBAAyB,EAC/B,OAAO,EAAE,uBAAA,IAAI,0CAAoB,MAAxB,IAAI,EAAqB,EAAE,CAAC,EAAE,CAAC,IAEvC,EAAE,CAAC,IAAI,CACN,CACA;oBACL,YAAY,IAAI,CACf,WAAK,KAAK,EAAC,6BAA6B,IACrC,GAAG,uBAAA,IAAI,uCAAiB,CAAC,SAAS,CAAC,MAAM,IAAI,YAAY,EAAE,CACxD,CACP,CACO,CACX,CAAC;YACJ,CAAC,CAAC,CAAC;QACL,CAAC,EAAC;QAQF,iDAA0B,GAAuB,EAAE;YACjD,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;gBAC1B,OAAO,IAAI,CAAC;aACb;YAED,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;YAE7D,OAAO,CACL;gBACE,yBAAyB;gBACzB,KAAK,EAAC,mBAAmB;gBAEzB;oBACE,UAAI,KAAK,EAAC,oBAAoB,IAAE,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAM,CAC1D;gBAET,eACE,KAAK,EAAE;wBACL,4BAA4B,EAAE,IAAI;wBAClC,uCAAuC,EAAE,CAAC,aAAa;wBACvD,4CAA4C,EAAE,aAAa;wBAC3D,YAAY,EAAE,IAAI;qBACnB,IAEA,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;oBAC/C,OAAO,CACL,eAAS,KAAK,EAAC,oBAAoB,EAAC,GAAG,EAAE,KAAK;wBAC5C,cAAQ,KAAK,EAAC,cAAc;4BAC1B,YAAM,KAAK,EAAC,cAAc;gCACxB,gBACE,KAAK,EAAC,uBAAuB,EAC7B,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,gBACN,IAAI,CAAC,IAAI,CAAC,SAAS,GACrB,CACP;4BACP,WAAK,KAAK,EAAC,0BAA0B;gCACnC,UAAI,KAAK,EAAC,oBAAoB,IAAE,IAAI,CAAC,KAAK,CAAM;gCAC/C,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CACjC,SAAG,KAAK,EAAC,gBAAgB,IAAE,SAAS,CAAK,CAC1C,CAAC,CACE,CACC;wBACT,cAAQ,KAAK,EAAC,cAAc,IACzB,IAAI,CAAC,MAAM,IAAI,CACd,cACE,KAAK,EAAC,sCAAsC,EAC5C,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ;4BAErD,gBAAU,KAAK,EAAC,SAAS,EAAC,GAAG,EAAE,WAAW,GAAa;4BACtD,IAAI,CAAC,MAAM,CAAC,OAAO,CACb,CACV,CACM,CACD,CACX,CAAC;gBACJ,CAAC,CAAC,CACM,CACF,CACX,CAAC;QACJ,CAAC,EAAC;6BA3O+B,EAAE;;uBAgBP,IAAI;;;;;;;IAdhC,oBAAoB,CAAC,gBAAwB;QAC3C,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CACtC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC,iBAAiB,EAAE,CAAC,CACrE,CAAC;IACJ,CAAC;IAgCD,UAAU,CAAC,MAAsB;QAC/B,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC;QAC1B,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC,CAAC,eAAe;IAC1C,CAAC;IAOD,KAAK,CAAC,iBAAiB;QACrB,uBAAA,IAAI,mCAAoB,MAAM,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC,MAAA,CAAC;QAElE,yBAAyB;QACzB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAE1B,uFAAuF;QACvF,MAAM,YAAY,GAAsB,QAAQ,CAAC,eAAe;aAC7D,IAAyB,CAAC;QAC7B,uBAAA,IAAI,gCAAiB,kBAAkB,CAAC,YAAY,CAAC,MAAA,CAAC;IACxD,CAAC;IAmLD,MAAM;;QACJ,IAAI,CAAC,OAAO;YACV,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA,MAAA,IAAI,CAAC,GAAG,0CAAE,MAAM,MAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC;QAClE,OAAO,CACL,EAAC,IAAI,IAAC,KAAK,EAAC,gCAAgC;YAC1C,gBAAU,KAAK,EAAE,WAAW,GAAa;YACzC,YAAM,KAAK,EAAC,iBAAiB;gBAC3B;oBACE,8BAA8B;oBAC9B,KAAK,EAAC,uBAAuB;oBAE7B;wBACE,cAAc;wBACd,KAAK,EAAC,4BAA4B;wBAElC,UAAI,KAAK,EAAC,WAAW,IAAE,uBAAA,IAAI,uCAAiB,CAAC,QAAQ,CAAC,KAAK,CAAM;wBACjE,SAAG,KAAK,EAAC,gBAAgB,IACtB,uBAAA,IAAI,uCAAiB,CAAC,QAAQ,CAAC,WAAW,CACzC,CACG;oBAET,eAAS,KAAK,EAAC,2CAA2C;wBACxD;4BACE,iBAAiB;4BACjB,KAAK,EAAC,kBAAkB;4BAExB,cAAQ,KAAK,EAAC,cAAc;gCAC1B,WAAK,KAAK,EAAC,0BAA0B;oCACnC,UAAI,KAAK,EAAC,oBAAoB,IAC3B,uBAAA,IAAI,uCAAiB,CAAC,aAAa,CAAC,KAAK,CACvC;oCACL,SAAG,KAAK,EAAC,gBAAgB,IACtB,uBAAA,IAAI,uCAAiB,CAAC,aAAa,CAAC,WAAW,CAC9C,CACA,CACC;4BACT,cAAQ,KAAK,EAAC,cAAc;gCAC1B,cACE,KAAK,EAAC,gBAAgB,EACtB,OAAO,EAAE,uBAAA,IAAI,4CAAsB,MAA1B,IAAI,EAAuB,KAAK,CAAC,IAEzC,uBAAA,IAAI,uCAAiB,CAAC,aAAa,CAAC,aAAa,CAC3C,CACF,CACD;wBAEV;4BACE,wBAAwB;4BACxB,KAAK,EAAC,aAAa;4BAEnB,cAAQ,KAAK,EAAC,cAAc;gCAC1B,WAAK,KAAK,EAAC,0BAA0B;oCACnC,UAAI,KAAK,EAAC,oBAAoB,IAC3B,uBAAA,IAAI,uCAAiB,CAAC,mBAAmB,CAAC,KAAK,CAC7C;oCACL,SAAG,KAAK,EAAC,gBAAgB,IACtB,uBAAA,IAAI,uCAAiB,CAAC,mBAAmB,CAAC,WAAW,CACpD,CACA,CACC;4BACT,cAAQ,KAAK,EAAC,cAAc;gCAC1B,cACE,KAAK,EAAC,6BAA6B,EACnC,OAAO,EAAE,uBAAA,IAAI,4CAAsB,MAA1B,IAAI,EAAuB,IAAI,CAAC,IAExC,uBAAA,IAAI,uCAAiB,CAAC,mBAAmB,CAAC,aAAa,CACjD,CACF,CACD,CACF,CACF;gBACV,eAAS,KAAK,EAAC,8BAA8B,IAC1C,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CACd,qBACE,KAAK,EAAC,QAAQ,EACd,WAAW,EAAE,uBAAA,IAAI,uCAAiB,CAAC,SAAS,CAAC,WAAW,EACxD,WAAW,EAAE,uBAAA,IAAI,uCAAiB,CAAC,SAAS,CAAC,iBAAiB,EAC9D,IAAI,SACW,CAClB,CAAC,CAAC,CAAC,CACF,uBAAA,IAAI,0EAAyB,MAA7B,IAAI,CAA2B,CAChC,CACO,CACL,CACF,CACR,CAAC;IACJ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACF;;IAzJG,OAAO,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC;QACpC,CAAC,CAAC,uBAAA,IAAI,wCAAkB,MAAtB,IAAI,CAAoB;QAC1B,CAAC,CAAC,uBAAA,IAAI,8CAAwB,MAA5B,IAAI,CAA0B,CAAC;AACrC,CAAC","sourcesContent":["// Stencil\nimport { Component, Host, h, Prop, State, Element, Watch } from \"@stencil/core\";\n// Other Libraries\nimport { MercuryBundles, getIconPath } from \"@genexus/mercury\";\nimport { formatDistanceToNow, Locale as LocaleDateFns } from \"date-fns\";\nimport { ja, zhCN, enUS } from \"date-fns/locale\";\n// import { enUS } from \"date-fns/locale\";\nimport { ChEditCustomEvent } from \"@genexus/chameleon-controls-library\";\n// Custom\nimport { Locale } from \"../../common/locale\";\n\n// const locale = enUS; // use `zhCN` for Chinese, `ja` for Japanese, `enUS` for English\n\nconst LANGS_DATE_FNS_MAP: LanguageMap = {\n \"en\": enUS,\n \"ja\": ja,\n \"zh-CN\": zhCN,\n \"zh-TW\": zhCN,\n \"zh-HK\": zhCN\n};\n\nconst DETAIL_ICON = getIconPath({\n category: \"system\",\n name: \"detail\",\n colorType: \"primary\"\n});\nconst FILTER_ICON = getIconPath({\n category: \"window-tools\",\n name: \"filter\",\n colorType: \"on-elevation\"\n});\nconst KB_DEFAULT_ICON = getIconPath({\n category: \"objects\",\n name: \"knowledge-base\"\n});\nconst SEARCH_ICON = getIconPath({\n category: \"system\",\n name: \"search\",\n colorType: \"on-elevation\"\n});\n\nconst CSS_BUNDLES: MercuryBundles = [\n \"resets/box-sizing\",\n \"utils/typography\",\n \"utils/layout\",\n \"components/edit\",\n \"components/icon\",\n \"components/button\",\n \"chameleon/scrollbar\",\n \"utils/typography\"\n];\n\n@Component({\n tag: \"gx-ide-start-page\",\n styleUrl: \"start-page.scss\",\n shadow: true,\n assetsDirs: [\"gx-ide-assets/start-page\"]\n})\nexport class GxIdeStartPage {\n /**\n * The component hard-coded strings translations.\n */\n // eslint-disable-next-line @stencil-community/own-props-must-be-private\n #componentLocale: any;\n #userLanguage: LocaleDateFns;\n\n @Element() el: HTMLGxIdeStartPageElement;\n\n @State() kbFilterValue: string = \"\";\n @Watch(\"kbFilterValue\")\n kbFilterValueChanged(newKbFilterValue: string) {\n this.filteredKbs = this.kbs.filter(kb =>\n kb.name.toLowerCase().includes(newKbFilterValue.toLocaleLowerCase())\n );\n }\n\n /**\n * The kbs after the filter value.\n */\n @State() filteredKbs: RecentKBData[];\n\n /**\n * True if the start page is waiting, either for the kb's list or the secondary section.\n */\n @State() loading: boolean = true;\n\n /**\n * Callback invoked to create a new KB. It must be specified whether this create is create from server or not, through the parameter 'fromServer'.\n */\n @Prop() readonly createKBCallback!: (fromServer: boolean) => Promise<void>;\n\n /**\n * Callback invoked to open a KB when the user clicks on a KB card.\n */\n @Prop() readonly openKbCallback!: (id: string) => Promise<void>;\n\n /**\n * The secondary section that will appear below the \"Create a new Knowledge Base\" main section. This section will be displayed if there are no recent kbs.\n */\n @Prop() readonly secondarySection?: SecondarySection;\n\n /**\n * User's kbs array\n */\n @Prop() readonly kbs: RecentKBData[];\n @Watch(\"kbs\")\n kbsChanged(newKbs: RecentKBData[]) {\n this.filteredKbs = newKbs;\n this.kbFilterValue = \"\"; // clear filter\n }\n\n /**\n * The minimum required of kbs to display a filter.\n */\n @Prop() readonly kbsFilterThreshold: number;\n\n async componentWillLoad() {\n this.#componentLocale = await Locale.getComponentStrings(this.el);\n\n // initialize filteredKbs\n this.kbsChanged(this.kbs);\n\n // get user language to display the kb \"last opened\" value in the appropriate language.\n const userLanguage: keyof LanguageMap = document.documentElement\n .lang as keyof LanguageMap;\n this.#userLanguage = LANGS_DATE_FNS_MAP[userLanguage];\n }\n\n #createKBClickHandler = (fromServer: boolean) => (event: MouseEvent) => {\n event.stopPropagation();\n this.createKBCallback(fromServer);\n };\n\n #openKbClickHandler = (kbId: string) => (event: MouseEvent) => {\n event.stopPropagation();\n this.openKbCallback(kbId);\n };\n\n #filterKbs = (event: ChEditCustomEvent<string> | InputEvent) => {\n this.kbFilterValue = event.detail as string;\n };\n\n #renderKbsSection = () => {\n const hideKbsFilter = this.kbs.length < this.kbsFilterThreshold;\n const kbsListEmpty = this.filteredKbs.length === 0;\n let contentToRender: HTMLGxgIdeLoaderElement | HTMLElement[];\n\n // Evaluate what is the content to display.\n if (this.filteredKbs.length > 0) {\n contentToRender = this.#renderKbs();\n } else {\n // No kb has pass the filter. Display an empty-state.\n contentToRender = (\n <gx-ide-empty-state\n isAnimated\n stateIconSrc={FILTER_ICON}\n stateTitle={this.#componentLocale.recentKBs.noMatches}\n ></gx-ide-empty-state>\n );\n }\n\n return (\n <section class=\"section-kbs\">\n <header\n class={{\n \"section-kbs__header\": true\n }}\n >\n <label\n class=\"subtitle-regular-s section-kbs__title\"\n htmlFor=\"filter-kbs\"\n >\n {this.#componentLocale.recentKBs.title}\n </label>\n <ch-edit\n // Render always, and display or hide, ro prevent FOUC, and also prevent\n // the header block-size from growing a little bit when the input renders.\n id=\"filter-kbs\"\n value={this.kbFilterValue}\n class={{\n \"input\": true,\n \"section-kbs__filter--hidden\": hideKbsFilter\n }}\n startImgSrc={SEARCH_ICON}\n placeholder={this.#componentLocale.recentKBs.filterKbsPlaceholder}\n onInput={!hideKbsFilter && this.#filterKbs}\n disabled={hideKbsFilter}\n ></ch-edit>\n </header>\n\n <div\n class={{\n \"section-kbs__list\": true,\n \"section-kbs__list--empty\": kbsListEmpty,\n \"scrollable\": true\n }}\n >\n {this.filteredKbs.length > 0 ? this.#renderKbs() : contentToRender}\n </div>\n </section>\n );\n };\n\n #renderKbs = (): HTMLElement[] => {\n return this.filteredKbs?.map((kb, index) => {\n // relative time ago\n\n const relativeDate = kb.lastOpenedDate\n ? formatDistanceToNow(new Date(kb.lastOpenedDate), {\n addSuffix: true,\n locale: this.#userLanguage\n })\n : undefined;\n\n // icon\n const kbIcon = kb.icon ?? KB_DEFAULT_ICON;\n\n return (\n <article class=\"kb__item\" key={index}>\n <div class=\"kb__details\">\n <ch-image class=\"icon-md\" src={kbIcon}></ch-image>\n <p\n class=\"body-regular-m kb__name\"\n onClick={this.#openKbClickHandler(kb.id)}\n >\n {kb.name}\n </p>\n </div>\n {relativeDate && (\n <div class=\"body-regular-m kb__modified\">\n {`${this.#componentLocale.recentKBs.opened} ${relativeDate}`}\n </div>\n )}\n </article>\n );\n });\n };\n\n #evaluateContentToRender() {\n return this.kbs && this.kbs.length > 0\n ? this.#renderKbsSection()\n : this.#renderSecondarySection();\n }\n\n #renderSecondarySection = (): HTMLElement | null => {\n if (!this.secondarySection) {\n return null;\n }\n\n const multipleCards = this.secondarySection.cards.length > 2;\n\n return (\n <section\n // Recent Knowledge Bases\n class=\"section-secondary\"\n >\n <header>\n <h2 class=\"subtitle-regular-s\">{this.secondarySection.title}</h2>\n </header>\n\n <section\n class={{\n \"section-secondary__actions\": true,\n \"section-secondary__actions--two-cards\": !multipleCards,\n \"section-secondary__actions--multiple-cards\": multipleCards,\n \"scrollable\": true\n }}\n >\n {this.secondarySection.cards.map((card, index) => {\n return (\n <article class=\"card card-outlined\" key={index}>\n <header class=\"card__header\">\n <span class=\"icon-capsule\">\n <ch-image\n class=\"icon-md icon-circular\"\n src={card.icon.src}\n aria-label={card.icon.ariaLabel}\n ></ch-image>\n </span>\n <div class=\"card__header-description\">\n <h2 class=\"subtitle-regular-s\">{card.title}</h2>\n {card.description.map(paragraph => (\n <p class=\"body-regular-m\">{paragraph}</p>\n ))}\n </div>\n </header>\n <footer class=\"card__footer\">\n {card.action && (\n <button\n class=\"button-tertiary button-icon-and-text\"\n onClick={card.action.callback && card.action.callback}\n >\n <ch-image class=\"icon-md\" src={DETAIL_ICON}></ch-image>\n {card.action.caption}\n </button>\n )}\n </footer>\n </article>\n );\n })}\n </section>\n </section>\n );\n };\n\n render() {\n this.loading =\n (!this.kbs || this.kbs?.length === 0) && !this.secondarySection;\n return (\n <Host class=\"widget scrollable spacing-body\">\n <ch-theme model={CSS_BUNDLES}></ch-theme>\n <main class=\"main scrollable\">\n <section\n // Create a new Knowledge Base\n class=\"section-create-new-kb\"\n >\n <header\n // main header\n class=\"section-create-new__header\"\n >\n <h1 class=\"heading-4\">{this.#componentLocale.createKB.title}</h1>\n <p class=\"body-regular-m\">\n {this.#componentLocale.createKB.description}\n </p>\n </header>\n\n <section class=\"section-create-new-kb__actions scrollable\">\n <article\n // create project\n class=\"card card-filled\"\n >\n <header class=\"card__header\">\n <div class=\"card__header-description\">\n <h2 class=\"subtitle-regular-s\">\n {this.#componentLocale.createProject.title}\n </h2>\n <p class=\"body-regular-m\">\n {this.#componentLocale.createProject.description}\n </p>\n </div>\n </header>\n <footer class=\"card__footer\">\n <button\n class=\"button-primary\"\n onClick={this.#createKBClickHandler(false)}\n >\n {this.#componentLocale.createProject.buttonCaption}\n </button>\n </footer>\n </article>\n\n <article\n // open existing project\n class=\"card-filled\"\n >\n <header class=\"card__header\">\n <div class=\"card__header-description\">\n <h2 class=\"subtitle-regular-s\">\n {this.#componentLocale.openExistingProject.title}\n </h2>\n <p class=\"body-regular-m\">\n {this.#componentLocale.openExistingProject.description}\n </p>\n </div>\n </header>\n <footer class=\"card__footer\">\n <button\n class=\"button-secondary cancel-btn\"\n onClick={this.#createKBClickHandler(true)}\n >\n {this.#componentLocale.openExistingProject.buttonCaption}\n </button>\n </footer>\n </article>\n </section>\n </section>\n <section class=\"section-secondary scrollable\">\n {this.loading ? (\n <gx-ide-loader\n class=\"loader\"\n loaderTitle={this.#componentLocale.recentKBs.loaderTitle}\n description={this.#componentLocale.recentKBs.loaderDescription}\n show\n ></gx-ide-loader>\n ) : (\n this.#evaluateContentToRender()\n )}\n </section>\n </main>\n </Host>\n );\n }\n}\n\nexport type RecentKBData = {\n id?: string;\n name: string;\n lastOpenedDate?: Date;\n icon: string;\n};\n\nexport type SecondarySection = {\n title: string;\n cards: CardInfo[];\n};\n\nexport type CardInfo = {\n icon?: {\n src: string;\n ariaLabel: string;\n };\n title: string;\n description: string[];\n action?: {\n iconSrc: string;\n caption: string;\n callback?: () => void;\n };\n};\n\ntype LanguageMap = {\n \"en\": LocaleDateFns;\n \"ja\": LocaleDateFns;\n \"zh-CN\": LocaleDateFns;\n \"zh-TW\": LocaleDateFns;\n \"zh-HK\": LocaleDateFns;\n};\n"]}