@genexus/genexus-ide-ui 3.2.1 → 3.2.3

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.
@@ -228,14 +228,21 @@ button.button-secondary {
228
228
  background-color: var(--color-accent-surface-elevation-2);
229
229
  padding: var(--spacing-padding-l);
230
230
  display: grid;
231
- grid-template-columns: auto max-content;
232
- gap: 48px;
231
+ grid-template-columns: minmax(0, 1fr) max-content;
232
+ align-items: center;
233
+ column-gap: 48px;
233
234
  }
234
235
  .kb__details {
235
236
  display: grid;
236
- grid-template-columns: max-content 1fr;
237
+ grid-template-columns: max-content minmax(0, 1fr);
237
238
  align-items: center;
238
239
  gap: var(--spacing-gap-l);
240
+ overflow: hidden;
241
+ }
242
+ .kb__info {
243
+ display: grid;
244
+ gap: var(--spacing-gap-xs);
245
+ overflow: hidden;
239
246
  }
240
247
  .kb__name {
241
248
  overflow: hidden;
@@ -254,6 +261,13 @@ button.button-secondary {
254
261
  text-overflow: ellipsis;
255
262
  text-align: end;
256
263
  font-variant-numeric: tabular-nums;
264
+ color: var(--color-text-neutral-disabled);
265
+ }
266
+ .kb__path {
267
+ overflow: hidden;
268
+ white-space: nowrap;
269
+ text-overflow: ellipsis;
270
+ color: var(--color-text-neutral-disabled);
257
271
  }
258
272
 
259
273
  .hiChar {
@@ -127,7 +127,7 @@ export class GxIdeStartPage {
127
127
  let dateFormated = formatDate(dateAsDate, "date-time-short");
128
128
  // icon
129
129
  const kbIcon = (_a = kb.icon) !== null && _a !== void 0 ? _a : KB_DEFAULT_ICON;
130
- return (h("article", { class: "kb__item", key: index }, h("div", { class: "kb__details" }, h("ch-image", { class: "icon-m", 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)))));
130
+ return (h("article", { class: "kb__item", key: index }, h("div", { class: "kb__details" }, h("ch-image", { class: "icon-m", src: kbIcon }), h("div", { class: "kb__info" }, h("button", { class: "body-regular-m kb__name", onClick: __classPrivateFieldGet(this, _GxIdeStartPage_openKbClickHandler, "f").call(this, kb.id) }, kb.name), kb.path && h("p", { class: "body-regular-xs kb__path" }, kb.path))), relativeDate && (h("p", { class: "body-regular-s kb__modified" }, `${__classPrivateFieldGet(this, _GxIdeStartPage_componentLocale, "f").recentKBs.opened}`, " ", h("time", { dateTime: dateFormated }, dateFormated)))));
131
131
  });
132
132
  });
133
133
  _GxIdeStartPage_renderSecondarySection.set(this, () => {
@@ -1 +1 @@
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,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAElD,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,YAAY;CACxB,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,YAAY;CACxB,CAAC,CAAC;AAEH,MAAM,wBAAwB,GAAG,eAAe,CAAC;AAEjD,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;QA+E7B,+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,oCAAa,CAAC,KAA6C,EAAE,EAAE;YAC7D,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,MAAgB,CAAC;QAC9C,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;QAUF,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,0EAA0E;gBAC1E,MAAM,UAAU,GAAG,EAAE,CAAC,cAAc;oBAClC,CAAC,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC;oBAC7B,CAAC,CAAC,SAAS,CAAC;gBAEd,IAAI,YAAY,GAAG,UAAU,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC;gBAE7D,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,QAAQ,EAAC,GAAG,EAAE,MAAM,GAAa;wBACjD,cACE,KAAK,EAAC,yBAAyB,EAC/B,OAAO,EAAE,uBAAA,IAAI,0CAAoB,MAAxB,IAAI,EAAqB,EAAE,CAAC,EAAE,CAAC,IAEvC,EAAE,CAAC,IAAI,CACD,CACL;oBACL,YAAY,IAAI,CACf,SAAG,KAAK,EAAC,6BAA6B;wBACnC,GAAG,uBAAA,IAAI,uCAAiB,CAAC,SAAS,CAAC,MAAM,EAAE;wBAAE,GAAG;wBACjD,YAAM,QAAQ,EAAE,YAAY,IAAG,YAAY,CAAQ,CACjD,CACL,CACO,CACX,CAAC;YACJ,CAAC,CAAC,CAAC;QACL,CAAC,EAAC;QAEF,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,gBAAgB;gBAEtB;oBACE,UAAI,KAAK,EAAC,yCAAyC,IAChD,IAAI,CAAC,gBAAgB,CAAC,KAAK,CACzB,CACE;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,YAAM,KAAK,EAAC,cAAc;4BACxB,gBACE,KAAK,EAAC,sBAAsB,EAC5B,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,gBACN,IAAI,CAAC,IAAI,CAAC,SAAS,GACrB,CACP;wBACP,cAAQ,KAAK,EAAC,cAAc;4BAC1B,UAAI,KAAK,EAAC,0CAA0C,IACjD,IAAI,CAAC,KAAK,CACR;4BACJ,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CACjC,SAAG,KAAK,EAAC,yCAAyC,IAC/C,SAAS,CACR,CACL,CAAC;4BACD,IAAI,CAAC,MAAM,IAAI,CACd,cACE,KAAK,EAAC,8EAA8E,EACpF,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ;gCAErD,gBAAU,KAAK,EAAC,QAAQ,EAAC,GAAG,EAAE,WAAW,GAAa;gCACrD,IAAI,CAAC,MAAM,CAAC,OAAO,CACb,CACV,CACM,CACD,CACX,CAAC;gBACJ,CAAC,CAAC,CACM,CACF,CACX,CAAC;QACJ,CAAC,EAAC;;6BAjQ+B,EAAE;uBAWP,IAAI;;uCAUoB,KAAK;;;;;;;;IAnBzD,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;IAsBD,UAAU,CAAC,MAAsB;QAC/B,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC;QAC1B,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC,CAAC,eAAe;IAC1C,CAAC;IA2BD,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;IA+LD,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;QAElE,MAAM,qBAAqB,GACzB,CAAA,MAAA,IAAI,CAAC,OAAO,0CAAE,MAAM,KAAI,IAAI,CAAC,kBAAkB,CAAC;QAElD,OAAO,CACL,EAAC,IAAI,IAAC,KAAK,EAAC,YAAY;YACtB,gBAAU,KAAK,EAAE,WAAW,GAAa;YACzC,YAAM,KAAK,EAAC,iBAAiB;gBAC3B;oBACE,8BAA8B;oBAC9B,KAAK,EAAC,uBAAuB;oBAE7B;wBACE,cAAc;wBACd,KAAK,EAAC,+BAA+B;wBAErC,UAAI,KAAK,EAAC,wCAAwC,IAC/C,uBAAA,IAAI,uCAAiB,CAAC,QAAQ,CAAC,KAAK,CAClC;wBACL,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,0CAA0C,IACjD,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;wBAET,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAC/B;4BACE,wBAAwB;4BACxB,KAAK,EAAC,aAAa;4BAEnB,cAAQ,KAAK,EAAC,cAAc;gCAC1B,WAAK,KAAK,EAAC,0BAA0B;oCACnC,UAAI,KAAK,EAAC,uBAAuB,IAC9B,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,CACX,CAAC,CAAC,CAAC,IAAI;wBAEP,qBAAqB,CAAC,CAAC,CAAC,CACvB;4BACE,eAAe;4BACf,KAAK,EAAC,aAAa;4BAEnB,cAAQ,KAAK,EAAC,cAAc;gCAC1B,WAAK,KAAK,EAAC,0BAA0B;oCACnC,UAAI,KAAK,EAAC,uBAAuB,IAC9B,uBAAA,IAAI,uCAAiB,CAAC,WAAW,CAAC,KAAK,CACrC;oCACL,SAAG,KAAK,EAAC,gBAAgB,IACtB,uBAAA,IAAI,uCAAiB,CAAC,WAAW,CAAC,WAAW,CAC5C,CACA,CACC;4BACT,cAAQ,KAAK,EAAC,cAAc;gCAC1B,WAAK,KAAK,EAAC,0CAA0C,IAClD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;oCACzB,OAAO,CACL,cACE,KAAK,EAAC,kBAAkB,EACxB,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC,IAEhD,uBAAA,IAAI,uCAAiB,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAC7C,wBAAwB,EACxB,MAAM,CAAC,IAAI,CACZ,CACM,CACV,CAAC;gCACJ,CAAC,CAAC,CACE,CACC,CACD,CACX,CAAC,CAAC,CAAC,IAAI,CACA,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;;IA9SG,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\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-surface\"\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-surface\"\n});\n\nconst PROJECT_NAME_PLACEHOLDER = \"[projectName]\";\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 * A temporary property to hide the \"Open Existing Project\" card.\n */\n @Prop() readonly hideOpenExistingProject: boolean = false;\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!: (sampleId: string) => 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-m\" 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-l 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-m\" 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 renderViewSamplesCard =\n this.samples?.length && this.openSampleCallback;\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 <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-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 {!this.hideOpenExistingProject ? (\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 {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 ) : null}\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.id)}\n >\n {this.#componentLocale.viewSamples.open.replace(\n PROJECT_NAME_PLACEHOLDER,\n sample.name\n )}\n </button>\n );\n })}\n </div>\n </footer>\n </article>\n ) : null}\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 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 id: string;\n name: 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":"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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-surface\"\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-surface\"\n});\n\nconst PROJECT_NAME_PLACEHOLDER = \"[projectName]\";\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 * A temporary property to hide the \"Open Existing Project\" card.\n */\n @Prop() readonly hideOpenExistingProject: boolean = false;\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!: (sampleId: string) => 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-m\" src={kbIcon}></ch-image>\n <div class=\"kb__info\">\n <button\n class=\"body-regular-m kb__name\"\n onClick={this.#openKbClickHandler(kb.id)}\n >\n {kb.name}\n </button>\n {kb.path && <p class=\"body-regular-xs kb__path\">{kb.path}</p>}\n </div>\n </div>\n {relativeDate && (\n <p class=\"body-regular-s 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-l 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-m\" 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 renderViewSamplesCard =\n this.samples?.length && this.openSampleCallback;\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 <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-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 {!this.hideOpenExistingProject ? (\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 {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 ) : null}\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.id)}\n >\n {this.#componentLocale.viewSamples.open.replace(\n PROJECT_NAME_PLACEHOLDER,\n sample.name\n )}\n </button>\n );\n })}\n </div>\n </footer>\n </article>\n ) : null}\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 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 path?: string;\n};\n\nexport type SampleData = {\n id: string;\n name: string;\n};\n\nexport type SecondarySection = {\n title: string;\n cards: CardInfo[];\n};\n"]}
@@ -2506,7 +2506,7 @@ const zhCN = {
2506
2506
  },
2507
2507
  };
2508
2508
 
2509
- const startPageCss = "/*@container queries*/\n/* hiChar styles\nFound 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.\n*/\nbutton.button-secondary {\n border-color: var(--color-border-neutral-default);\n}\n\n:host {\n --common-spacing: var(--spacing-padding-xxl);\n --spacing-body-block-start: var(--common-spacing);\n --spacing-body-block-end: var(--common-spacing);\n --spacing-body-inline-start: var(--common-spacing);\n --spacing-body-inline-end: 0;\n --spacing-body-inline-start: 0;\n display: grid;\n block-size: 100%;\n overflow: auto;\n}\n\n:host(.spacing-body) .section-secondary,\n:host(.spacing-body) .section-create-new-kb__header,\n:host(.spacing-body) .section-create-new-kb__actions,\n:host(.spacing-body-inline) .section-secondary,\n:host(.spacing-body-inline) .section-create-new-kb__header,\n:host(.spacing-body-inline) .section-create-new-kb__actions {\n padding-inline-start: var(--common-spacing);\n padding-inline-end: var(--common-spacing);\n}\n\n:host(.spacing-body-inline-start) .section-secondary,\n:host(.spacing-body-inline-start) .section-create-new-kb__actions {\n padding-inline-start: var(--common-spacing);\n}\n\n:host(.spacing-body-inline-end) .section-secondary,\n:host(.spacing-body-inline-end) .section-create-new-kb__actions {\n padding-inline-end: var(--common-spacing);\n}\n\n.main {\n animation: fadeIn var(--timing-fast) forwards;\n display: grid;\n block-size: 100%;\n overflow: auto;\n opacity: 0;\n grid-template-rows: max-content 1fr;\n gap: var(--spacing-gap-xxl);\n}\n\n@keyframes bounce {\n 0% {\n transform: translateY(0);\n }\n 100% {\n transform: translateY(calc(-1 * 32px));\n }\n}\n@keyframes fadeIn {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n.section-create-new-kb__actions,\n.section-secondary__actions {\n display: grid;\n grid-auto-flow: column;\n gap: var(--spacing-gap-xl);\n overflow-x: auto;\n padding-block-end: var(--spacing-padding-m);\n}\n\n.card-filled,\n.card-outlined {\n display: grid;\n gap: var(--spacing-gap-xl);\n align-content: space-between;\n border-radius: 8px;\n}\n\n.card-filled {\n background-color: var(--color-accent-surface-elevation-1);\n padding: var(--spacing-padding-xl);\n}\n\n.card-outlined {\n border: 1px solid var(--color-border-surface-on-surface);\n grid-template-columns: max-content 1fr;\n align-items: center;\n padding: var(--spacing-padding-xl) var(--spacing-padding-xl) var(--spacing-padding-m) var(--spacing-padding-xl);\n}\n\n.icon-capsule {\n pointer-events: none;\n display: inline-flex;\n block-size: 40px;\n inline-size: 40px;\n justify-content: center;\n align-items: center;\n border-radius: 50%;\n border: 1px dashed var(--color-border-surface-on-elevation-2);\n}\n\n.card__header {\n display: grid;\n gap: var(--spacing-gap-l);\n justify-items: self-start;\n}\n\n.card__header-description {\n display: grid;\n gap: var(--spacing-gap-m);\n}\n\n.section-create-new-kb {\n display: grid;\n grid-auto-rows: max-content;\n gap: var(--spacing-gap-xxl);\n}\n.section-create-new-kb__header {\n display: grid;\n gap: var(--spacing-gap-m);\n}\n.section-create-new-kb__title {\n color: var(--color-text-neutral-default);\n}\n.section-create-new-kb__actions {\n display: grid;\n gap: var(--spacing-gap-xl);\n overflow-x: auto;\n grid-auto-flow: column;\n grid-auto-columns: 330px;\n}\n\n.samples-buttons-container {\n flex-wrap: wrap;\n}\n\n.section-secondary {\n display: grid;\n block-size: 100%;\n position: relative;\n overflow: auto;\n}\n.section-secondary__title {\n display: grid;\n grid-template-columns: 1fr max-content 1fr;\n gap: var(--spacing-gap-xl);\n align-items: center;\n}\n.section-secondary__title::before, .section-secondary__title::after {\n content: \"\";\n block-size: 1px;\n background-color: var(--color-border-surface-on-elevation-1);\n}\n.section-secondary__actions {\n display: grid;\n}\n.section-secondary__actions--two-cards {\n grid-template-columns: repeat(2, minmax(430px, 1fr));\n}\n.section-secondary__actions--multiple-cards {\n grid-auto-columns: 670px;\n}\n\n.section-no-kbs {\n display: grid;\n block-size: 100%;\n position: relative;\n overflow: auto;\n grid-template-rows: max-content max-content;\n gap: var(--spacing-gap-xl);\n}\n\n.section-kbs {\n background-color: var(--color-accent-surface-elevation-1);\n border-radius: 4px;\n padding: var(--spacing-padding-l);\n display: grid;\n container-type: inline-size;\n grid-template-rows: auto 1fr;\n overflow: hidden;\n}\n.section-kbs__header {\n display: grid;\n grid-template-columns: max-content 230px;\n align-items: center;\n gap: var(--spacing-gap-xxxl);\n border-block-end: 1px solid var(--color-border-surface-on-elevation-1);\n padding-block-end: var(--spacing-padding-l);\n}\n.section-kbs__header--no-border {\n border-block-end-color: transparent !important;\n}\n.section-kbs__title {\n align-items: center;\n display: flex;\n min-block-size: calc(32px - 1px);\n}\n.section-kbs__filter--hidden {\n opacity: 0;\n}\n.section-kbs__list {\n display: grid;\n grid-auto-rows: max-content;\n grid-template-columns: 1fr 1fr;\n row-gap: var(--spacing-gap-m);\n column-gap: var(--spacing-gap-xl);\n overflow: auto;\n position: relative;\n padding-block-start: var(--spacing-padding-l);\n}\n.section-kbs__list--empty {\n grid-template-columns: 1fr;\n grid-auto-rows: 1fr;\n overflow: hidden;\n}\n@container (max-width: 768px) {\n .section-kbs__list {\n grid-template-columns: 1fr;\n }\n}\n\n.kb__item {\n background-color: var(--color-accent-surface-elevation-2);\n padding: var(--spacing-padding-l);\n display: grid;\n grid-template-columns: auto max-content;\n gap: 48px;\n}\n.kb__details {\n display: grid;\n grid-template-columns: max-content 1fr;\n align-items: center;\n gap: var(--spacing-gap-l);\n}\n.kb__name {\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n text-decoration: underline;\n cursor: pointer;\n display: inline-block;\n}\n.kb__name:hover {\n color: var(--color-text-neutral-default);\n}\n.kb__modified {\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n text-align: end;\n font-variant-numeric: tabular-nums;\n}\n\n.hiChar {\n color: var(--color-text-primary-default);\n filter: brightness(1.3);\n}\n\n.loader {\n border: 1px solid var(--color-border-surface-on-surface);\n}\n\n.heading-2,\n.heading-3 {\n margin: 0;\n color: #ffffff !important;\n}\n\n.card-filled .heading-3 {\n color: var(--color-text-neutral-strawberry) !important;\n}\n\n.card__header-title {\n color: var(--color-text-neutral-default);\n}\n\n.button-tertiary-no-padding-inline-start.button-tertiary {\n padding-inline-start: 0;\n}";
2509
+ const startPageCss = "/*@container queries*/\n/* hiChar styles\nFound 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.\n*/\nbutton.button-secondary {\n border-color: var(--color-border-neutral-default);\n}\n\n:host {\n --common-spacing: var(--spacing-padding-xxl);\n --spacing-body-block-start: var(--common-spacing);\n --spacing-body-block-end: var(--common-spacing);\n --spacing-body-inline-start: var(--common-spacing);\n --spacing-body-inline-end: 0;\n --spacing-body-inline-start: 0;\n display: grid;\n block-size: 100%;\n overflow: auto;\n}\n\n:host(.spacing-body) .section-secondary,\n:host(.spacing-body) .section-create-new-kb__header,\n:host(.spacing-body) .section-create-new-kb__actions,\n:host(.spacing-body-inline) .section-secondary,\n:host(.spacing-body-inline) .section-create-new-kb__header,\n:host(.spacing-body-inline) .section-create-new-kb__actions {\n padding-inline-start: var(--common-spacing);\n padding-inline-end: var(--common-spacing);\n}\n\n:host(.spacing-body-inline-start) .section-secondary,\n:host(.spacing-body-inline-start) .section-create-new-kb__actions {\n padding-inline-start: var(--common-spacing);\n}\n\n:host(.spacing-body-inline-end) .section-secondary,\n:host(.spacing-body-inline-end) .section-create-new-kb__actions {\n padding-inline-end: var(--common-spacing);\n}\n\n.main {\n animation: fadeIn var(--timing-fast) forwards;\n display: grid;\n block-size: 100%;\n overflow: auto;\n opacity: 0;\n grid-template-rows: max-content 1fr;\n gap: var(--spacing-gap-xxl);\n}\n\n@keyframes bounce {\n 0% {\n transform: translateY(0);\n }\n 100% {\n transform: translateY(calc(-1 * 32px));\n }\n}\n@keyframes fadeIn {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n.section-create-new-kb__actions,\n.section-secondary__actions {\n display: grid;\n grid-auto-flow: column;\n gap: var(--spacing-gap-xl);\n overflow-x: auto;\n padding-block-end: var(--spacing-padding-m);\n}\n\n.card-filled,\n.card-outlined {\n display: grid;\n gap: var(--spacing-gap-xl);\n align-content: space-between;\n border-radius: 8px;\n}\n\n.card-filled {\n background-color: var(--color-accent-surface-elevation-1);\n padding: var(--spacing-padding-xl);\n}\n\n.card-outlined {\n border: 1px solid var(--color-border-surface-on-surface);\n grid-template-columns: max-content 1fr;\n align-items: center;\n padding: var(--spacing-padding-xl) var(--spacing-padding-xl) var(--spacing-padding-m) var(--spacing-padding-xl);\n}\n\n.icon-capsule {\n pointer-events: none;\n display: inline-flex;\n block-size: 40px;\n inline-size: 40px;\n justify-content: center;\n align-items: center;\n border-radius: 50%;\n border: 1px dashed var(--color-border-surface-on-elevation-2);\n}\n\n.card__header {\n display: grid;\n gap: var(--spacing-gap-l);\n justify-items: self-start;\n}\n\n.card__header-description {\n display: grid;\n gap: var(--spacing-gap-m);\n}\n\n.section-create-new-kb {\n display: grid;\n grid-auto-rows: max-content;\n gap: var(--spacing-gap-xxl);\n}\n.section-create-new-kb__header {\n display: grid;\n gap: var(--spacing-gap-m);\n}\n.section-create-new-kb__title {\n color: var(--color-text-neutral-default);\n}\n.section-create-new-kb__actions {\n display: grid;\n gap: var(--spacing-gap-xl);\n overflow-x: auto;\n grid-auto-flow: column;\n grid-auto-columns: 330px;\n}\n\n.samples-buttons-container {\n flex-wrap: wrap;\n}\n\n.section-secondary {\n display: grid;\n block-size: 100%;\n position: relative;\n overflow: auto;\n}\n.section-secondary__title {\n display: grid;\n grid-template-columns: 1fr max-content 1fr;\n gap: var(--spacing-gap-xl);\n align-items: center;\n}\n.section-secondary__title::before, .section-secondary__title::after {\n content: \"\";\n block-size: 1px;\n background-color: var(--color-border-surface-on-elevation-1);\n}\n.section-secondary__actions {\n display: grid;\n}\n.section-secondary__actions--two-cards {\n grid-template-columns: repeat(2, minmax(430px, 1fr));\n}\n.section-secondary__actions--multiple-cards {\n grid-auto-columns: 670px;\n}\n\n.section-no-kbs {\n display: grid;\n block-size: 100%;\n position: relative;\n overflow: auto;\n grid-template-rows: max-content max-content;\n gap: var(--spacing-gap-xl);\n}\n\n.section-kbs {\n background-color: var(--color-accent-surface-elevation-1);\n border-radius: 4px;\n padding: var(--spacing-padding-l);\n display: grid;\n container-type: inline-size;\n grid-template-rows: auto 1fr;\n overflow: hidden;\n}\n.section-kbs__header {\n display: grid;\n grid-template-columns: max-content 230px;\n align-items: center;\n gap: var(--spacing-gap-xxxl);\n border-block-end: 1px solid var(--color-border-surface-on-elevation-1);\n padding-block-end: var(--spacing-padding-l);\n}\n.section-kbs__header--no-border {\n border-block-end-color: transparent !important;\n}\n.section-kbs__title {\n align-items: center;\n display: flex;\n min-block-size: calc(32px - 1px);\n}\n.section-kbs__filter--hidden {\n opacity: 0;\n}\n.section-kbs__list {\n display: grid;\n grid-auto-rows: max-content;\n grid-template-columns: 1fr 1fr;\n row-gap: var(--spacing-gap-m);\n column-gap: var(--spacing-gap-xl);\n overflow: auto;\n position: relative;\n padding-block-start: var(--spacing-padding-l);\n}\n.section-kbs__list--empty {\n grid-template-columns: 1fr;\n grid-auto-rows: 1fr;\n overflow: hidden;\n}\n@container (max-width: 768px) {\n .section-kbs__list {\n grid-template-columns: 1fr;\n }\n}\n\n.kb__item {\n background-color: var(--color-accent-surface-elevation-2);\n padding: var(--spacing-padding-l);\n display: grid;\n grid-template-columns: minmax(0, 1fr) max-content;\n align-items: center;\n column-gap: 48px;\n}\n.kb__details {\n display: grid;\n grid-template-columns: max-content minmax(0, 1fr);\n align-items: center;\n gap: var(--spacing-gap-l);\n overflow: hidden;\n}\n.kb__info {\n display: grid;\n gap: var(--spacing-gap-xs);\n overflow: hidden;\n}\n.kb__name {\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n text-decoration: underline;\n cursor: pointer;\n display: inline-block;\n}\n.kb__name:hover {\n color: var(--color-text-neutral-default);\n}\n.kb__modified {\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n text-align: end;\n font-variant-numeric: tabular-nums;\n color: var(--color-text-neutral-disabled);\n}\n.kb__path {\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n color: var(--color-text-neutral-disabled);\n}\n\n.hiChar {\n color: var(--color-text-primary-default);\n filter: brightness(1.3);\n}\n\n.loader {\n border: 1px solid var(--color-border-surface-on-surface);\n}\n\n.heading-2,\n.heading-3 {\n margin: 0;\n color: #ffffff !important;\n}\n\n.card-filled .heading-3 {\n color: var(--color-text-neutral-strawberry) !important;\n}\n\n.card__header-title {\n color: var(--color-text-neutral-default);\n}\n\n.button-tertiary-no-padding-inline-start.button-tertiary {\n padding-inline-start: 0;\n}";
2510
2510
 
2511
2511
  var __classPrivateFieldGet = (undefined && undefined.__classPrivateFieldGet) || function (receiver, state, kind, f) {
2512
2512
  if (kind === "a" && !f)
@@ -2630,7 +2630,7 @@ const GxIdeStartPage$1 = /*@__PURE__*/ proxyCustomElement(class GxIdeStartPage e
2630
2630
  let dateFormated = formatDate(dateAsDate, "date-time-short");
2631
2631
  // icon
2632
2632
  const kbIcon = (_a = kb.icon) !== null && _a !== void 0 ? _a : KB_DEFAULT_ICON;
2633
- return (h("article", { class: "kb__item", key: index }, h("div", { class: "kb__details" }, h("ch-image", { class: "icon-m", 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)))));
2633
+ return (h("article", { class: "kb__item", key: index }, h("div", { class: "kb__details" }, h("ch-image", { class: "icon-m", src: kbIcon }), h("div", { class: "kb__info" }, h("button", { class: "body-regular-m kb__name", onClick: __classPrivateFieldGet(this, _GxIdeStartPage_openKbClickHandler, "f").call(this, kb.id) }, kb.name), kb.path && h("p", { class: "body-regular-xs kb__path" }, kb.path))), relativeDate && (h("p", { class: "body-regular-s kb__modified" }, `${__classPrivateFieldGet(this, _GxIdeStartPage_componentLocale, "f").recentKBs.opened}`, " ", h("time", { dateTime: dateFormated }, dateFormated)))));
2634
2634
  });
2635
2635
  });
2636
2636
  _GxIdeStartPage_renderSecondarySection.set(this, () => {