@genexus/genexus-ide-ui 0.0.22 → 0.0.24

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 (144) hide show
  1. package/dist/cjs/ch-action-group_2.cjs.entry.js +211 -0
  2. package/dist/cjs/ch-dropdown-item.cjs.entry.js +36 -5
  3. package/dist/cjs/ch-dropdown.cjs.entry.js +50 -52
  4. package/dist/cjs/{ch-grid_4.cjs.entry.js → ch-grid_8.cjs.entry.js} +143 -0
  5. package/dist/cjs/{ch-suggest_5.cjs.entry.js → ch-suggest_4.cjs.entry.js} +0 -65
  6. package/dist/cjs/ch-test-action-group.cjs.entry.js +79 -0
  7. package/dist/cjs/ch-test-dropdown.cjs.entry.js +54 -0
  8. package/dist/cjs/ch-window_2.cjs.entry.js +25 -6
  9. package/dist/cjs/format-date-f2c49d1a.js +28 -0
  10. package/dist/cjs/genexus-ide-ui.cjs.js +1 -1
  11. package/dist/cjs/gx-ide-team-dev-commit.cjs.entry.js +15 -35
  12. package/dist/cjs/gx-ide-team-dev-select-recent-comment.cjs.entry.js +5 -15
  13. package/dist/cjs/gx-ide-team-dev-update-partial-selection.cjs.entry.js +102 -0
  14. package/dist/cjs/gx-ide-team-dev-update-to-revision.cjs.entry.js +53 -0
  15. package/dist/cjs/gx-ide-team-dev-update.cjs.entry.js +278 -0
  16. package/dist/cjs/gx-ide-top-bar.cjs.entry.js +37 -0
  17. package/dist/cjs/{gxg-combo-box_8.cjs.entry.js → gxg-combo-box_6.cjs.entry.js} +0 -132
  18. package/dist/cjs/gxg-form-checkbox-group_2.cjs.entry.js +140 -0
  19. package/dist/cjs/{gx-ide-top-bar_2.cjs.entry.js → gxg-form-radio-group.cjs.entry.js} +0 -31
  20. package/dist/cjs/gxg-text.cjs.entry.js +72 -0
  21. package/dist/cjs/loader.cjs.js +1 -1
  22. package/dist/collection/collection-manifest.json +7 -0
  23. package/dist/collection/common/format-date.js +11 -0
  24. package/dist/collection/components/team-dev-commit/gx-ide-assets/team-dev-commit/langs/team-dev-commit.lang.en.json +1 -1
  25. package/dist/collection/components/team-dev-commit/team-dev-commit.js +35 -26
  26. package/dist/collection/components/team-dev-select-recent-comment/team-dev-select-recent-comment.js +6 -16
  27. package/dist/collection/components/team-dev-update/gx-ide-assets/team-dev-update/langs/team-dev-update.lang.en.json +45 -0
  28. package/dist/collection/components/team-dev-update/gx-ide-assets/team-dev-update/langs/team-dev-update.lang.ja.json +3 -0
  29. package/dist/collection/components/team-dev-update/gx-ide-assets/team-dev-update/langs/team-dev-update.lang.zh.json +3 -0
  30. package/dist/collection/components/team-dev-update/team-dev-update.css +216 -0
  31. package/dist/collection/components/team-dev-update/team-dev-update.js +524 -0
  32. package/dist/collection/components/team-dev-update-partial-selection/gx-ide-assets/team-dev-update-partial-selection/langs/team-dev-update-partial-selection.lang.en.json +15 -0
  33. package/dist/collection/components/team-dev-update-partial-selection/gx-ide-assets/team-dev-update-partial-selection/langs/team-dev-update-partial-selection.lang.ja.json +3 -0
  34. package/dist/collection/components/team-dev-update-partial-selection/gx-ide-assets/team-dev-update-partial-selection/langs/team-dev-update-partial-selection.lang.zh.json +3 -0
  35. package/dist/collection/components/team-dev-update-partial-selection/team-dev-update-partial-selection.css +149 -0
  36. package/dist/collection/components/team-dev-update-partial-selection/team-dev-update-partial-selection.js +238 -0
  37. package/dist/collection/components/team-dev-update-to-revision/gx-ide-assets/team-dev-update-to-revision/langs/team-dev-update-to-revision.lang.en.json +11 -0
  38. package/dist/collection/components/team-dev-update-to-revision/gx-ide-assets/team-dev-update-to-revision/langs/team-dev-update-to-revision.lang.ja.json +3 -0
  39. package/dist/collection/components/team-dev-update-to-revision/gx-ide-assets/team-dev-update-to-revision/langs/team-dev-update-to-revision.lang.zh.json +3 -0
  40. package/dist/collection/components/team-dev-update-to-revision/team-dev-update-to-revision.css +147 -0
  41. package/dist/collection/components/team-dev-update-to-revision/team-dev-update-to-revision.js +136 -0
  42. package/dist/components/action-group-item.js +54 -0
  43. package/dist/components/action-group.js +214 -0
  44. package/dist/components/ch-action-group-item.js +6 -0
  45. package/dist/components/ch-action-group.js +6 -0
  46. package/dist/components/ch-dropdown-item-separator.js +1 -28
  47. package/dist/components/ch-dropdown-item.js +1 -53
  48. package/dist/components/ch-dropdown.js +1 -284
  49. package/dist/components/ch-grid-rowset-empty.js +1 -24
  50. package/dist/components/ch-grid-rowset-empty2.js +26 -0
  51. package/dist/components/ch-test-action-group.js +137 -0
  52. package/dist/components/ch-test-dropdown.js +104 -0
  53. package/dist/components/ch-window2.js +25 -6
  54. package/dist/components/dropdown-item-separator.js +30 -0
  55. package/dist/components/dropdown-item.js +109 -0
  56. package/dist/components/dropdown.js +294 -0
  57. package/dist/components/format-date.js +25 -0
  58. package/dist/components/gx-ide-team-dev-commit.js +16 -35
  59. package/dist/components/gx-ide-team-dev-select-recent-comment.js +5 -15
  60. package/dist/components/gx-ide-team-dev-update-partial-selection.d.ts +11 -0
  61. package/dist/components/gx-ide-team-dev-update-partial-selection.js +213 -0
  62. package/dist/components/gx-ide-team-dev-update-to-revision.d.ts +11 -0
  63. package/dist/components/gx-ide-team-dev-update-to-revision.js +131 -0
  64. package/dist/components/gx-ide-team-dev-update.d.ts +11 -0
  65. package/dist/components/gx-ide-team-dev-update.js +473 -0
  66. package/dist/components/index.d.ts +3 -0
  67. package/dist/components/index.js +7 -0
  68. package/dist/esm/ch-action-group_2.entry.js +206 -0
  69. package/dist/esm/ch-dropdown-item.entry.js +36 -5
  70. package/dist/esm/ch-dropdown.entry.js +50 -52
  71. package/dist/esm/{ch-grid_4.entry.js → ch-grid_8.entry.js} +140 -1
  72. package/dist/esm/{ch-suggest_5.entry.js → ch-suggest_4.entry.js} +1 -65
  73. package/dist/esm/ch-test-action-group.entry.js +75 -0
  74. package/dist/esm/ch-test-dropdown.entry.js +50 -0
  75. package/dist/esm/ch-window_2.entry.js +25 -6
  76. package/dist/esm/format-date-e9ca0786.js +25 -0
  77. package/dist/esm/genexus-ide-ui.js +1 -1
  78. package/dist/esm/gx-ide-team-dev-commit.entry.js +15 -35
  79. package/dist/esm/gx-ide-team-dev-select-recent-comment.entry.js +5 -15
  80. package/dist/esm/gx-ide-team-dev-update-partial-selection.entry.js +98 -0
  81. package/dist/esm/gx-ide-team-dev-update-to-revision.entry.js +49 -0
  82. package/dist/esm/gx-ide-team-dev-update.entry.js +274 -0
  83. package/dist/esm/gx-ide-top-bar.entry.js +33 -0
  84. package/dist/esm/{gxg-combo-box_8.entry.js → gxg-combo-box_6.entry.js} +2 -132
  85. package/dist/esm/gxg-form-checkbox-group_2.entry.js +135 -0
  86. package/dist/esm/{gx-ide-top-bar_2.entry.js → gxg-form-radio-group.entry.js} +2 -32
  87. package/dist/esm/gxg-text.entry.js +68 -0
  88. package/dist/esm/loader.js +1 -1
  89. package/dist/genexus-ide-ui/genexus-ide-ui.esm.js +1 -1
  90. package/dist/genexus-ide-ui/gx-ide-assets/team-dev-commit/langs/team-dev-commit.lang.en.json +1 -1
  91. package/dist/genexus-ide-ui/gx-ide-assets/team-dev-update/langs/team-dev-update.lang.en.json +45 -0
  92. package/dist/genexus-ide-ui/gx-ide-assets/team-dev-update/langs/team-dev-update.lang.ja.json +3 -0
  93. package/dist/genexus-ide-ui/gx-ide-assets/team-dev-update/langs/team-dev-update.lang.zh.json +3 -0
  94. package/dist/genexus-ide-ui/gx-ide-assets/team-dev-update-partial-selection/langs/team-dev-update-partial-selection.lang.en.json +15 -0
  95. package/dist/genexus-ide-ui/gx-ide-assets/team-dev-update-partial-selection/langs/team-dev-update-partial-selection.lang.ja.json +3 -0
  96. package/dist/genexus-ide-ui/gx-ide-assets/team-dev-update-partial-selection/langs/team-dev-update-partial-selection.lang.zh.json +3 -0
  97. package/dist/genexus-ide-ui/gx-ide-assets/team-dev-update-to-revision/langs/team-dev-update-to-revision.lang.en.json +11 -0
  98. package/dist/genexus-ide-ui/gx-ide-assets/team-dev-update-to-revision/langs/team-dev-update-to-revision.lang.ja.json +3 -0
  99. package/dist/genexus-ide-ui/gx-ide-assets/team-dev-update-to-revision/langs/team-dev-update-to-revision.lang.zh.json +3 -0
  100. package/dist/genexus-ide-ui/p-097a3eeb.entry.js +1 -0
  101. package/dist/genexus-ide-ui/p-16bd5578.entry.js +1 -0
  102. package/dist/genexus-ide-ui/p-32b8abf6.entry.js +1 -0
  103. package/dist/genexus-ide-ui/p-3bdcb73b.entry.js +1 -0
  104. package/dist/genexus-ide-ui/p-4bbe1c18.entry.js +1 -0
  105. package/dist/genexus-ide-ui/p-53d36ef7.entry.js +1 -0
  106. package/dist/genexus-ide-ui/p-5884a014.entry.js +1 -0
  107. package/dist/genexus-ide-ui/p-5c64c57f.entry.js +1 -0
  108. package/dist/genexus-ide-ui/p-5ff04ebe.entry.js +1 -0
  109. package/dist/genexus-ide-ui/p-6e80380b.entry.js +1 -0
  110. package/dist/genexus-ide-ui/p-718759e7.entry.js +1 -0
  111. package/dist/genexus-ide-ui/p-72303355.js +1 -0
  112. package/dist/genexus-ide-ui/p-757f8567.entry.js +1 -0
  113. package/dist/genexus-ide-ui/p-9c82381c.entry.js +1 -0
  114. package/dist/genexus-ide-ui/p-a0e85c2a.entry.js +1 -0
  115. package/dist/genexus-ide-ui/p-afe9515e.entry.js +1 -0
  116. package/dist/genexus-ide-ui/p-dbebb1a0.entry.js +1 -0
  117. package/dist/genexus-ide-ui/p-f8561da6.entry.js +1 -0
  118. package/dist/node_modules/@genexus/chameleon-controls-library/dist/collection/components/action-group/action-group.css +48 -0
  119. package/dist/node_modules/@genexus/chameleon-controls-library/dist/collection/components/action-group-item/action-group-item.css +4 -0
  120. package/dist/node_modules/@genexus/chameleon-controls-library/dist/collection/components/dropdown/dropdown.css +32 -88
  121. package/dist/node_modules/@genexus/chameleon-controls-library/dist/collection/components/dropdown-item/dropdown-item.css +9 -22
  122. package/dist/node_modules/@genexus/chameleon-controls-library/dist/collection/components/test/test-action-group/test-action-group.css +52 -0
  123. package/dist/node_modules/@genexus/chameleon-controls-library/dist/collection/components/test/test-dropdown/test-dropdown.css +36 -0
  124. package/dist/node_modules/@genexus/chameleon-controls-library/dist/collection/components/window/ch-window.css +3 -1
  125. package/dist/types/common/format-date.d.ts +1 -0
  126. package/dist/types/common/types.d.ts +1 -0
  127. package/dist/types/components/team-dev-commit/team-dev-commit.d.ts +13 -7
  128. package/dist/types/components/team-dev-select-recent-comment/team-dev-select-recent-comment.d.ts +1 -31
  129. package/dist/types/components/team-dev-update/team-dev-update.d.ts +173 -0
  130. package/dist/types/components/team-dev-update-partial-selection/team-dev-update-partial-selection.d.ts +61 -0
  131. package/dist/types/components/team-dev-update-to-revision/team-dev-update-to-revision.d.ts +41 -0
  132. package/dist/types/components.d.ts +216 -2
  133. package/package.json +3 -3
  134. package/dist/cjs/ch-grid-column-resize_4.cjs.entry.js +0 -150
  135. package/dist/esm/ch-grid-column-resize_4.entry.js +0 -143
  136. package/dist/genexus-ide-ui/p-04f094d1.entry.js +0 -1
  137. package/dist/genexus-ide-ui/p-192f1342.entry.js +0 -1
  138. package/dist/genexus-ide-ui/p-54cef7ae.entry.js +0 -1
  139. package/dist/genexus-ide-ui/p-554ed73a.entry.js +0 -1
  140. package/dist/genexus-ide-ui/p-6d378d61.entry.js +0 -1
  141. package/dist/genexus-ide-ui/p-b26b5d74.entry.js +0 -1
  142. package/dist/genexus-ide-ui/p-c10d5f34.entry.js +0 -1
  143. package/dist/genexus-ide-ui/p-d5c29251.entry.js +0 -1
  144. package/dist/genexus-ide-ui/p-f1a3397d.entry.js +0 -1
@@ -2662,6 +2662,91 @@ const ChGridColumn = class {
2662
2662
  };
2663
2663
  ChGridColumn.style = chGridColumnCss;
2664
2664
 
2665
+ const chGridColumnResizeCss = ":host{display:block;min-width:1px;height:100%;cursor:ew-resize}.resize-mask{position:fixed;inset:0}";
2666
+
2667
+ const ChGridColumnResize = class {
2668
+ constructor(hostRef) {
2669
+ index.registerInstance(this, hostRef);
2670
+ this.columnResizeStarted = index.createEvent(this, "columnResizeStarted", 7);
2671
+ this.columnResizeFinished = index.createEvent(this, "columnResizeFinished", 7);
2672
+ this.mousemoveFn = this.mousemoveHandler.bind(this);
2673
+ /**
2674
+ * Whether the component is currently resizing the column.
2675
+ */
2676
+ this.resizing = false;
2677
+ }
2678
+ componentDidLoad() {
2679
+ this.el.addEventListener("mousedown", this.mousedownHandler.bind(this));
2680
+ }
2681
+ clickHandler(eventInfo) {
2682
+ eventInfo.stopPropagation();
2683
+ }
2684
+ dblclickHandler(eventInfo) {
2685
+ eventInfo.stopPropagation();
2686
+ if (helpers.mouseEventModifierKey(eventInfo)) {
2687
+ this.column.size = "auto";
2688
+ }
2689
+ else {
2690
+ this.column.size = "max-content";
2691
+ }
2692
+ }
2693
+ columnResizeStartedHandler() {
2694
+ this.resizing = true;
2695
+ }
2696
+ columnResizeFinishedHandler() {
2697
+ this.resizing = false;
2698
+ }
2699
+ mousedownHandler(eventInfo) {
2700
+ eventInfo.stopPropagation();
2701
+ eventInfo.preventDefault();
2702
+ this.startPageX = eventInfo.pageX;
2703
+ this.startColumnWidth = this.column.getBoundingClientRect().width;
2704
+ document.addEventListener("mousemove", this.mousemoveFn, { passive: true });
2705
+ document.addEventListener("mouseup", this.mouseupHandler.bind(this), {
2706
+ once: true
2707
+ });
2708
+ this.columnResizeStarted.emit();
2709
+ }
2710
+ mousemoveHandler(eventInfo) {
2711
+ const columnSize = this.startColumnWidth - (this.startPageX - eventInfo.pageX);
2712
+ if (columnSize >= 0) {
2713
+ this.column.size = `minmax(min-content, ${columnSize}px)`;
2714
+ }
2715
+ }
2716
+ mouseupHandler() {
2717
+ document.removeEventListener("mousemove", this.mousemoveFn);
2718
+ this.columnResizeFinished.emit();
2719
+ }
2720
+ render() {
2721
+ return index.h("div", { class: "resize-mask", hidden: !this.resizing });
2722
+ }
2723
+ get el() { return index.getElement(this); }
2724
+ };
2725
+ ChGridColumnResize.style = chGridColumnResizeCss;
2726
+
2727
+ const chGridColumnSettingsCss = ":host{display:contents}";
2728
+
2729
+ const ChGridColumnSettings = class {
2730
+ constructor(hostRef) {
2731
+ index.registerInstance(this, hostRef);
2732
+ /**
2733
+ * Indicates whether the settings window is currently shown or not.
2734
+ */
2735
+ this.show = false;
2736
+ }
2737
+ windowClosedHandler(eventInfo) {
2738
+ eventInfo.stopPropagation();
2739
+ this.column.showSettings = false;
2740
+ }
2741
+ columnSettingsChangedHandler() {
2742
+ this.column.showSettings = false;
2743
+ }
2744
+ render() {
2745
+ return (index.h(index.Host, null, index.h("ch-window", { modal: true, container: this.column, xAlign: "inside-start", yAlign: "outside-end", caption: this.column.columnName, closeText: "Close", closeOnOutsideClick: true, closeOnEscape: true, allowDrag: "header", hidden: !this.show, exportparts: "mask,window,header,caption,close,main,footer" }, index.h("slot", null))));
2746
+ }
2747
+ };
2748
+ ChGridColumnSettings.style = chGridColumnSettingsCss;
2749
+
2665
2750
  const chGridColumnsetCss = "@layer ch-grid {\n ch-grid-columnset {\n display: contents;\n }\n}\n@layer ch-grid {\n ch-grid-row {\n display: contents;\n }\n\n ch-grid-row[collapsed] > ch-grid-rowset {\n display: none;\n }\n\n ch-grid-row:is([leaf=\"false\"], :has(> ch-grid-rowset)) > ch-grid-cell::part(caret) {\n visibility: visible;\n }\n\n ch-grid-row[dragging] {\n display: flex;\n position: fixed;\n pointer-events: none;\n box-shadow: rgba(0, 0, 0, 0.7) 0px 5px 15px;\n z-index: 1000;\n transition: top var(--row-drag-transition-duration, 0.1s);\n }\n}\n@layer ch-grid {\n ch-grid-rowset {\n display: contents;\n }\n\n ch-grid-rowset[collapsed] > :not(ch-grid-rowset-legend) {\n display: none;\n }\n}\n@layer ch-grid {\n ch-grid-cell {\n position: sticky;\n grid-column: var(--grid-column);\n transition: transform var(--column-drag-transition-duration, 0.2s);\n }\n\n ch-grid-cell[selected] {\n --ch-grid-cell-z-index-active: var(--ch-grid-cell-active-layer);\n }\n\n ch-grid-cell,\nch-grid-row[selected] > ch-grid-cell,\nch-grid-row[highlighted] > ch-grid-cell {\n background-color: inherit;\n margin-block-start: inherit;\n margin-block-end: inherit;\n border-block-start: inherit;\n border-block-end: inherit;\n padding-block-start: inherit;\n padding-block-end: inherit;\n }\n\n ch-grid-cell:before {\n margin-inline-start: calc(var(--indent) * var(--level));\n }\n\n ch-grid-cell::part(indent) {\n width: calc(var(--indent) * var(--level));\n }\n\n ch-grid-cell::part(caret) {\n visibility: hidden;\n }\n}";
2666
2751
 
2667
2752
  const ChGridColumnset = class {
@@ -2680,6 +2765,60 @@ const ChGridColumnset = class {
2680
2765
  };
2681
2766
  ChGridColumnset.style = chGridColumnsetCss;
2682
2767
 
2768
+ const chGridSettingsCss = ":host{display:contents;--ch-window-mask-z-index:var(--ch-grid-settings-layer)}";
2769
+
2770
+ const ChGridSettings = class {
2771
+ constructor(hostRef) {
2772
+ index.registerInstance(this, hostRef);
2773
+ this.settingsCloseClicked = index.createEvent(this, "settingsCloseClicked", 7);
2774
+ /**
2775
+ * Indicates whether the settings window is currently shown or not.
2776
+ */
2777
+ this.show = false;
2778
+ }
2779
+ windowClosedHandler(eventInfo) {
2780
+ eventInfo.stopPropagation();
2781
+ this.show = false;
2782
+ this.settingsCloseClicked.emit();
2783
+ }
2784
+ render() {
2785
+ return (index.h(index.Host, null, index.h("ch-window", { modal: true, container: this.grid, caption: "Options", closeText: "Close", closeOnOutsideClick: true, closeOnEscape: true, allowDrag: "header", hidden: !this.show, exportparts: "mask,window,header,caption,close,main,footer" }, index.h("slot", null))));
2786
+ }
2787
+ };
2788
+ ChGridSettings.style = chGridSettingsCss;
2789
+
2790
+ const chGridSettingsColumnsCss = ":host{display:flex;flex-direction:column}ul{display:contents;list-style-type:none}";
2791
+
2792
+ const ChGridSettingsColumns = class {
2793
+ constructor(hostRef) {
2794
+ index.registerInstance(this, hostRef);
2795
+ this.handleClick = (eventInfo) => {
2796
+ const checkbox = eventInfo.target;
2797
+ const column = this.columns.find(column => column.columnId === checkbox.name);
2798
+ column.hidden = !checkbox.checked;
2799
+ eventInfo.stopPropagation();
2800
+ };
2801
+ }
2802
+ getColumnsSorted() {
2803
+ return [...this.columns].sort((a, b) => {
2804
+ if (a.order < b.order) {
2805
+ return -1;
2806
+ }
2807
+ if (a.order > b.order) {
2808
+ return 1;
2809
+ }
2810
+ return 0;
2811
+ });
2812
+ }
2813
+ render() {
2814
+ const columnsSorted = this.getColumnsSorted();
2815
+ return (index.h("ul", null, columnsSorted.map(column => (index.h("li", { part: "column" }, index.h("label", { part: "column-label" }, index.h("input", { part: !column.hidden
2816
+ ? "column-visible column-visible-checked"
2817
+ : "column-visible", type: "checkbox", checked: !column.hidden, disabled: !column.hideable, name: column.columnId, onClick: this.handleClick }), column.columnName))))));
2818
+ }
2819
+ };
2820
+ ChGridSettingsColumns.style = chGridSettingsColumnsCss;
2821
+
2683
2822
  const gxgGridCss = ":root{--ui-animaton-speed:0.2s}.gxg-title-01{font-family:var(--font-family-primary);font-weight:var(--font-weight-bold);font-size:var(--font-size-md);letter-spacing:var(--letter-spacing-md);color:var(--color-on-background);text-align:start;line-height:1.455em}.gxg-title-01--negative{font-family:var(--font-family-primary);font-weight:var(--font-weight-bold);font-size:var(--font-size-md);letter-spacing:var(--letter-spacing-md);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--color-on-primary)}.gxg-title-02{font-family:var(--font-family-primary);font-weight:var(--font-weight-bold);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-sm);color:var(--color-on-background);text-align:start;text-transform:uppercase;line-height:1.556em}.gxg-title-02--negative{font-family:var(--font-family-primary);font-weight:var(--font-weight-bold);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-sm);color:var(--color-on-background);text-align:start;text-transform:uppercase;line-height:1.556em;color:var(--color-on-primary)}.gxg-title-03{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-xs);letter-spacing:var(--letter-spacing-sm);color:var(--color-on-background);text-align:start;text-transform:uppercase;line-height:1.556em}.gxg-title-03--negative{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-xs);letter-spacing:var(--letter-spacing-sm);color:var(--color-on-background);text-align:start;text-transform:uppercase;line-height:1.556em;color:var(--color-on-primary)}.gxg-title-04{font-family:var(--font-family-primary);font-weight:var(--font-weight-semibold);font-size:var(--font-size-md);letter-spacing:var(--letter-spacing-md);color:var(--color-on-background);text-align:start;line-height:1.455em}.gxg-title-04--negative{font-family:var(--font-family-primary);font-weight:var(--font-weight-semibold);font-size:var(--font-size-md);letter-spacing:var(--letter-spacing-md);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--color-on-primary)}.gxg-title-05{font-family:var(--font-family-primary);font-weight:var(--font-weight-semibold);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-sm);color:var(--color-on-background);text-align:start;line-height:1.556em}.gxg-title-05--negative{font-family:var(--font-family-primary);font-weight:var(--font-weight-semibold);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-sm);color:var(--color-on-background);text-align:start;line-height:1.556em;color:var(--color-on-primary)}.gxg-text{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em}.gxg-text--negative{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--color-on-primary)}.gxg-text--gray{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--gray-05)}.gxg-quote{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em;font-style:italic}.gxg-quote--negative{color:var(--color-on-primary)}.gxg-link{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--color-primary);text-decoration:underline;cursor:pointer;display:inline-block}.gxg-link:hover{color:var(--color-primary-hover)}.gxg-link:active{color:var(--color-primary-active)}.gxg-link-gray{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--color-primary);text-decoration:underline;cursor:pointer;display:inline-block;color:var(--gray-04)}.gxg-link-gray:hover{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--color-primary);text-decoration:underline;cursor:pointer;display:inline-block;color:var(--gray-04);color:var(--gray-06)}.gxg-alert-error{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--color-error-dark);display:inline-block}.gxg-alert-warning{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--color-warning-dark);display:inline-block}.gxg-alert-success{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--color-success-dark);display:inline-block}.gxg-tab--disabled{color:var(--color-primary-disabled);pointer-events:none}.gxg-tab--disabled[disabled]{color:var(--color-primary-disabled);pointer-events:none}.gxg-label{font-family:var(--font-family-primary) !important;font-weight:var(--font-weight-semibold);font-size:var(--font-size-sm) !important;letter-spacing:var(--letter-spacing-xs);color:var(--color-primary-enabled);text-align:center;line-height:1.455em}.gxg-label:hover{color:var(--color-primary-hover)}.gxg-label:focus{color:var(--color-primary-active)}.gxg-label:active{color:var(--color-primary-active)}.gxg-label[disabled]{color:var(--color-primary-disabled)}.gxg-label--negative{color:var(--color-on-primary)}.gxg-label--negative[disabled]{color:var(--color-on-disabled)}.gxg-button-styles{font-family:var(--font-family-primary) !important;font-weight:var(--font-weight-semibold);font-size:var(--font-size-sm) !important;letter-spacing:var(--letter-spacing-xs);color:var(--color-primary-enabled);text-align:center;line-height:1.455em}.gxg-scrollbar{}.gxg-scrollbar::-webkit-scrollbar{width:6px;height:6px}.gxg-scrollbar::-webkit-scrollbar-track{background-color:var(--gray-02);border-radius:10px}.gxg-scrollbar::-webkit-scrollbar-thumb{background:var(--gray-05);border-radius:10px}.gxg-scrollbar::-webkit-scrollbar-thumb:hover{background:var(--gray-04);cursor:pointer}:root{--indent:var(--spacing-comp-02)}:host{display:block}ch-grid{border:1px solid var(--gray-02);--focus-style:2px solid var(--color-primary-active)}ch-grid::part(main){}ch-grid::part(main)::-webkit-scrollbar{width:6px;height:6px}ch-grid::part(main)::-webkit-scrollbar-track{background-color:var(--gray-02);border-radius:10px}ch-grid::part(main)::-webkit-scrollbar-thumb{background:var(--gray-05);border-radius:10px}ch-grid::part(main)::-webkit-scrollbar-thumb:hover{background:var(--gray-04);cursor:pointer}gxg-grid.no-border ch-grid{border:0}gxg-grid:focus-visible,ch-grid:focus-visible{outline:none}ch-grid::part(header),ch-grid::part(footer){padding:var(--spacing-comp-01);background-color:var(--color-background)}ch-grid-actionbar ch-grid-action-refresh,ch-grid-actionbar ch-grid-action-settings,ch-grid-column::part(bar-sort-ascending),ch-grid-column::part(bar-sort-descending),ch-grid-column::part(bar-settings-button),ch-grid-column::part(settings-close),ch-grid::part(settings-close),ch-grid-cell::part(drag-icon),ch-grid-cell::part(caret),ch-grid-rowset-legend::part(caret){display:inline-flex;align-items:center;justify-content:center}ch-grid-actionbar ch-grid-action-refresh:before,ch-grid-actionbar ch-grid-action-settings:before,ch-grid-column::part(bar-sort-ascending):before,ch-grid-column::part(bar-sort-descending):before,ch-grid-column::part(bar-settings-button):before,ch-grid-column::part(settings-close):before,ch-grid::part(settings-close):before,ch-grid-cell::part(drag-icon):before,ch-grid-cell::part(caret):before,ch-grid-rowset-legend::part(caret):before{content:\"\";display:block;-webkit-mask-repeat:no-repeat;-webkit-mask-size:contain;-webkit-mask-position:center;width:70%;height:70%;background-color:var(--color-on-secondary)}ch-grid-action-refresh,ch-grid-action-settings{width:var(--spacing-comp-05);height:var(--spacing-comp-05);cursor:pointer;background-color:var(--color-secondary-enabled);display:inline-block}ch-grid-action-refresh:hover,ch-grid-action-settings:hover{background-color:var(--color-secondary-hover)}ch-grid-action-refresh:focus-visible,ch-grid-action-settings:focus-visible{outline:var(--focus-style)}ch-grid-action-refresh:before{-webkit-mask-image:var(--refreshIconUrl)}ch-grid-action-settings:before{-webkit-mask-image:var(--settingshIconUrl)}ch-grid{font-family:var(--font-family-primary);font-size:var(--font-size-sm);color:var(--gray-06)}ch-grid-column{background-color:var(--color-background);font-weight:var(--font-weight-bold);padding:var(--spacing-comp-02) !important;cursor:pointer}ch-grid-column::part(bar){gap:var(--spacing-comp-02);width:100%}ch-grid-column:not([sort-direction])::part(bar-sort){display:none}ch-grid-column::part(bar-settings){line-height:0}ch-grid-column::part(bar-sort-ascending),ch-grid-column::part(bar-sort-descending){width:var(--spacing-comp-03);height:var(--spacing-comp-03);margin-left:var(--spacing-comp-02);margin-right:var(--spacing-comp-01)}ch-grid-column::part(bar-sort-ascending):before,ch-grid-column::part(bar-sort-descending):before{width:100%;height:100%;-webkit-mask-size:200%}ch-grid-column::part(bar-sort-descending):before{-webkit-mask-image:var(--barSortDescendingIconUrl)}ch-grid-column::part(bar-sort-ascending):before{-webkit-mask-image:var(--barSortAscendingIconUrl)}ch-grid-column::part(bar-resize-split){width:3px;background-color:var(--gray-02)}ch-grid-column:last-child::part(bar-resize-split){display:none}ch-grid-column::part(bar-settings-button){padding:0;width:var(--spacing-comp-05);height:var(--spacing-comp-05);border:none;background-color:transparent;cursor:pointer}ch-grid-column::part(bar-settings-button):hover{background-color:var(--gray-02)}ch-grid-column::part(bar-settings-button):focus-visible{outline:var(--focus-style)}ch-grid-column::part(bar-settings-button):before{-webkit-mask-image:var(--barSettingsButtonIconUrl)}ch-grid-row{background-color:var(--color-background);color:var(--gray-04);border:2px solid transparent}ch-grid-row:nth-of-type(odd){background-color:var(--gray-00)}ch-grid-row[highlighted]{background-color:var(--color-hover)}ch-grid-row[dragging]{box-shadow:var(--box-shadow-03)}ch-grid-row[selected]>ch-grid-cell:not([selected]){background-color:var(--color-secondary-enabled)}ch-grid-cell[selected]{z-index:1;background-color:var(--color-secondary-enabled) !important}ch-grid-row[selected]>ch-grid-cell{color:var(--color-on-secondary)}ch-grid-row[selected]+ch-grid-row[selected] ch-grid-cell{border-top-color:var(--color-secondary-hover)}ch-grid-cell{box-sizing:border-box;padding-inline-start:var(--spacing-comp-02) !important;padding-inline-end:var(--spacing-comp-02) !important;padding-block-start:var(--spacing-comp-01);padding-block-end:var(--spacing-comp-01);align-items:center}ch-grid-column::part(settings-mask){cursor:default}ch-grid-column::part(settings-mask),ch-grid::part(settings-mask){background-color:rgba(0, 0, 0, 0.3);cursor:arrow;color:var(--color-on-secondary)}ch-grid-column::part(settings-window),ch-grid::part(settings-window){background-color:var(--color-background);width:100%;max-width:600px;padding:var(--spacing-comp-03);border-radius:var(--border-width-lg);box-shadow:var(--box-shadow-04)}ch-grid::part(settings-window){margin:0 var(--spacing-comp-05)}ch-grid-column::part(settings-header),ch-grid::part(settings-header){display:flex;align-items:center;gap:var(--spacing-comp-04);justify-content:space-between;border-bottom:var(--border-width-sm) solid var(--gray-02);padding-bottom:var(--spacing-comp-02);margin-bottom:var(--spacing-comp-03);font-weight:var(--font-weight-bold)}ch-grid-column::part(settings-close),ch-grid::part(settings-close){padding:0;width:var(--spacing-comp-05);height:var(--spacing-comp-05);cursor:pointer;background-color:var(--color-secondary-enabled);font-size:0;border:0}ch-grid-column::part(settings-close):hover,ch-grid::part(settings-close):hover{background-color:var(--color-secondary-hover)}ch-grid-column::part(settings-close):before,ch-grid::part(settings-close):before{-webkit-mask-image:var(--settingsCloseIconUrl)}ch-grid-column::part(settings-close):focus-visible,ch-grid::part(settings-close):focus-visible{outline:var(--focus-style)}ch-grid::part(settings-columns){gap:var(--spacing-comp-03)}ch-grid::part(settings-columns-label){display:inline-flex;align-items:center;gap:var(--spacing-comp-03);cursor:pointer;height:var(--spacing-comp-04)}ch-grid::part(settings-columns-visible),ch-grid-cell::part(selector),ch-grid-column::part(selector){position:relative;margin:0;height:var(--spacing-comp-04);width:var(--spacing-comp-04)}ch-grid::part(settings-columns-visible):focus-visible,ch-grid-cell::part(selector):focus-visible,ch-grid-column::part(selector):focus-visible{outline:var(--focus-style)}ch-grid::part(settings-columns-visible):before,ch-grid-cell::part(selector):before,ch-grid-column::part(selector):before{cursor:pointer;content:\"\";display:inline-block;position:relative;height:var(--spacing-comp-04);width:var(--spacing-comp-04);border-width:var(--border-width-sm);border-style:var(--border-style-regular);border-radius:var(--border-radius-md);border-color:var(--gray-04);box-sizing:border-box;flex-shrink:0;background:var(--color-background)}ch-grid::part(settings-columns-visible):after,ch-grid-cell::part(selector):after,ch-grid-column::part(selector):after{opacity:0;display:block;position:absolute;content:\"\";left:6px;top:3px;width:3px;height:7px;border:solid;border-color:var(--color-primary-hover);border-width:0 2px 2px 0;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);transition-property:opacity;transition-duration:var(--ui-animaton-speed);transition-timing-function:ease;cursor:pointer}ch-grid-column::part(indeterminate):after{opacity:1;display:block;position:absolute;content:\"\";left:50%;top:50%;width:8px;height:1.5px;border:0;background-color:var(--color-primary-hover);-webkit-transform:rotate(0) translateY(-50%) translateX(-50%);-ms-transform:rotate(0) translateY(-50%) translateX(-50%);transform:rotate(0) translateY(-50%) translateX(-50%)}ch-grid::part(settings-columns-visible-checked):before,ch-grid-cell::part(checked):before,ch-grid-column::part(checked):before{border-color:var(--color-primary-hover)}ch-grid::part(settings-columns-visible-checked):after,ch-grid-cell::part(checked):after,ch-grid-column::part(checked):after{opacity:1}ch-grid-cell::part(drag-icon):before{width:var(--spacing-comp-04);height:var(--spacing-comp-04);cursor:grab}ch-grid-cell::part(drag-icon):before{-webkit-mask-image:var(--dragIconUrl)}ch-grid::part(row-actions){padding-top:2px;right:var(--spacing-comp-02)}ch-grid-column::part(selector){margin-right:8px}ch-grid-rowset-legend{background-color:var(--gray-01);padding-inline-start:var(--spacing-comp-02);padding-inline-end:var(--spacing-comp-02);padding-block-start:var(--spacing-comp-01);padding-block-end:var(--spacing-comp-01)}ch-grid>ch-grid-rowset:first-of-type ch-grid-rowset-legend{border-top:1px solid var(--color-background)}ch-grid-rowset-legend{margin-inline-start:calc(var(--indent) * (var(--level) - 1));display:flex;align-items:center;gap:var(--spacing-comp-01);cursor:pointer}ch-grid-rowset-legend::part(caret),ch-grid-cell::part(caret){width:var(--spacing-comp-04);height:var(--spacing-comp-04)}ch-grid-cell::part(caret){cursor:pointer;margin-right:var(--spacing-comp-01)}ch-grid-rowset>ch-grid-rowset-legend::part(caret):before,ch-grid-row>ch-grid-cell::part(caret):before{-webkit-mask-image:var(--caretCollapseIconUrl)}ch-grid-rowset[collapsed]>ch-grid-rowset-legend::part(caret):before,ch-grid-row[collapsed]>ch-grid-cell::part(caret):before{-webkit-mask-image:var(--caretExpandIconUrl)}ch-grid-rowset[collapsed] ch-grid-rowset-legend{border-bottom:1px solid var(--color-background)}ch-grid gxg-paginator{padding-top:0;padding-bottom:0}gxg-grid.large ch-grid{font-size:var(--font-size-lg)}";
2684
2823
 
2685
2824
  const GxgGrid = class {
@@ -2708,5 +2847,9 @@ GxgGrid.style = gxgGridCss;
2708
2847
 
2709
2848
  exports.ch_grid = ChGrid;
2710
2849
  exports.ch_grid_column = ChGridColumn;
2850
+ exports.ch_grid_column_resize = ChGridColumnResize;
2851
+ exports.ch_grid_column_settings = ChGridColumnSettings;
2711
2852
  exports.ch_grid_columnset = ChGridColumnset;
2853
+ exports.ch_grid_settings = ChGridSettings;
2854
+ exports.ch_grid_settings_columns = ChGridSettingsColumns;
2712
2855
  exports.gxg_grid = GxgGrid;
@@ -311,72 +311,7 @@ const GxgSuggest = class {
311
311
  };
312
312
  GxgSuggest.style = stylesCss;
313
313
 
314
- const textCss = "/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-webkit-text-size-adjust:100%;}body{margin:0}main{display:block}h1{font-size:2em;margin:0.67em 0}hr{box-sizing:content-box;height:0;overflow:visible;}pre{font-family:monospace, monospace;font-size:1em;}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted;}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace, monospace;font-size:1em;}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0;}button,input{overflow:visible}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button}button::-moz-focus-inner,[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner{border-style:none;padding:0}button:-moz-focusring,[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:0.35em 0.75em 0.625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal;}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0;}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px;}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit;}details{display:block}summary{display:list-item}template{display:none}[hidden]{display:none}:root{--ui-animaton-speed:0.2s}.gxg-title-01{font-family:var(--font-family-primary);font-weight:var(--font-weight-bold);font-size:var(--font-size-md);letter-spacing:var(--letter-spacing-md);color:var(--color-on-background);text-align:start;line-height:1.455em}.gxg-title-01--negative{font-family:var(--font-family-primary);font-weight:var(--font-weight-bold);font-size:var(--font-size-md);letter-spacing:var(--letter-spacing-md);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--color-on-primary)}.gxg-title-02{font-family:var(--font-family-primary);font-weight:var(--font-weight-bold);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-sm);color:var(--color-on-background);text-align:start;text-transform:uppercase;line-height:1.556em}.gxg-title-02--negative{font-family:var(--font-family-primary);font-weight:var(--font-weight-bold);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-sm);color:var(--color-on-background);text-align:start;text-transform:uppercase;line-height:1.556em;color:var(--color-on-primary)}.gxg-title-03{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-xs);letter-spacing:var(--letter-spacing-sm);color:var(--color-on-background);text-align:start;text-transform:uppercase;line-height:1.556em}.gxg-title-03--negative{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-xs);letter-spacing:var(--letter-spacing-sm);color:var(--color-on-background);text-align:start;text-transform:uppercase;line-height:1.556em;color:var(--color-on-primary)}.gxg-title-04{font-family:var(--font-family-primary);font-weight:var(--font-weight-semibold);font-size:var(--font-size-md);letter-spacing:var(--letter-spacing-md);color:var(--color-on-background);text-align:start;line-height:1.455em}.gxg-title-04--negative{font-family:var(--font-family-primary);font-weight:var(--font-weight-semibold);font-size:var(--font-size-md);letter-spacing:var(--letter-spacing-md);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--color-on-primary)}.gxg-title-05{font-family:var(--font-family-primary);font-weight:var(--font-weight-semibold);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-sm);color:var(--color-on-background);text-align:start;line-height:1.556em}.gxg-title-05--negative{font-family:var(--font-family-primary);font-weight:var(--font-weight-semibold);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-sm);color:var(--color-on-background);text-align:start;line-height:1.556em;color:var(--color-on-primary)}.gxg-text{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em}.gxg-text--negative{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--color-on-primary)}.gxg-text--gray{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--gray-05)}.gxg-quote{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em;font-style:italic}.gxg-quote--negative{color:var(--color-on-primary)}.gxg-link{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--color-primary);text-decoration:underline;cursor:pointer;display:inline-block}.gxg-link:hover{color:var(--color-primary-hover)}.gxg-link:active{color:var(--color-primary-active)}.gxg-link-gray{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--color-primary);text-decoration:underline;cursor:pointer;display:inline-block;color:var(--gray-04)}.gxg-link-gray:hover{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--color-primary);text-decoration:underline;cursor:pointer;display:inline-block;color:var(--gray-04);color:var(--gray-06)}.gxg-alert-error{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--color-error-dark);display:inline-block}.gxg-alert-warning{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--color-warning-dark);display:inline-block}.gxg-alert-success{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--color-success-dark);display:inline-block}.gxg-tab--disabled{color:var(--color-primary-disabled);pointer-events:none}.gxg-tab--disabled[disabled]{color:var(--color-primary-disabled);pointer-events:none}.gxg-label{font-family:var(--font-family-primary) !important;font-weight:var(--font-weight-semibold);font-size:var(--font-size-sm) !important;letter-spacing:var(--letter-spacing-xs);color:var(--color-primary-enabled);text-align:center;line-height:1.455em}.gxg-label:hover{color:var(--color-primary-hover)}.gxg-label:focus{color:var(--color-primary-active)}.gxg-label:active{color:var(--color-primary-active)}.gxg-label[disabled]{color:var(--color-primary-disabled)}.gxg-label--negative{color:var(--color-on-primary)}.gxg-label--negative[disabled]{color:var(--color-on-disabled)}.gxg-button-styles{font-family:var(--font-family-primary) !important;font-weight:var(--font-weight-semibold);font-size:var(--font-size-sm) !important;letter-spacing:var(--letter-spacing-xs);color:var(--color-primary-enabled);text-align:center;line-height:1.455em}.gxg-scrollbar{}.gxg-scrollbar::-webkit-scrollbar{width:6px;height:6px}.gxg-scrollbar::-webkit-scrollbar-track{background-color:var(--gray-02);border-radius:10px}.gxg-scrollbar::-webkit-scrollbar-thumb{background:var(--gray-05);border-radius:10px}.gxg-scrollbar::-webkit-scrollbar-thumb:hover{background:var(--gray-04);cursor:pointer}:host{display:block;font-size:14px}:host p,:host q,:host a{display:block;margin:0;padding:0;margin:0 auto}:host([text-align=start]){text-align:start}:host([text-align=start]) *{text-align:start}:host([text-align=center]){text-align:center}:host([text-align=center]) *{text-align:center}:host([text-align=end]){text-align:end}:host([text-align=end]) *{text-align:end}:host([padding=s]){padding:var(--spacing-comp-01)}:host([padding=m]){padding:var(--spacing-comp-02)}:host(.large) .gxg-text,:host(.large) .gxg-text--gray,:host(.large) .gxg-quote,:host(.large) .gxg-link,:host(.large) .gxg-link-gray,:host(.large) .gxg-alert-error,:host(.large) .gxg-alert-warning,:host(.large) .gxg-alert-success{font-size:var(--font-size-lg)}";
315
-
316
- const GxgText = class {
317
- constructor(hostRef) {
318
- index.registerInstance(this, hostRef);
319
- /**
320
- * The target (for "link" or "link-gray" types
321
- * */
322
- this.target = "_self";
323
- /**
324
- * Text type
325
- */
326
- this.type = "text-regular";
327
- /**
328
- * Text alignment
329
- */
330
- this.textAlign = "start";
331
- /**
332
- * Text padding
333
- */
334
- this.padding = "none";
335
- /**
336
- * Max. width
337
- */
338
- this.maxWidth = "100%";
339
- }
340
- textType() {
341
- let text;
342
- switch (this.type) {
343
- case "text-regular":
344
- text = (index.h("p", { style: { maxWidth: this.maxWidth }, class: "gxg-text" }, index.h("slot", null)));
345
- break;
346
- case "text-gray":
347
- text = (index.h("p", { style: { maxWidth: this.maxWidth }, class: "gxg-text--gray" }, index.h("slot", null)));
348
- break;
349
- case "text-quote":
350
- text = (index.h("q", { style: { maxWidth: this.maxWidth }, class: "gxg-quote" }, index.h("slot", null)));
351
- break;
352
- case "text-link":
353
- text = (index.h("a", { style: { maxWidth: this.maxWidth }, href: this.href, target: this.target, class: "gxg-link" }, index.h("slot", null)));
354
- break;
355
- case "text-link-gray":
356
- text = (index.h("a", { style: { maxWidth: this.maxWidth }, href: this.href, target: this.target, class: "gxg-link-gray" }, index.h("slot", null)));
357
- break;
358
- case "text-alert-error":
359
- text = (index.h("p", { style: { maxWidth: this.maxWidth }, class: "gxg-alert-error" }, index.h("slot", null)));
360
- break;
361
- case "text-alert-warning":
362
- text = (index.h("p", { style: { maxWidth: this.maxWidth }, class: "gxg-alert-warning" }, index.h("slot", null)));
363
- break;
364
- case "text-alert-success":
365
- text = (index.h("p", { style: { maxWidth: this.maxWidth }, class: "gxg-alert-success" }, index.h("slot", null)));
366
- break;
367
- default:
368
- text = (index.h("p", { style: { maxWidth: this.maxWidth }, class: "gxg-text" }, index.h("slot", null)));
369
- }
370
- return text;
371
- }
372
- render() {
373
- return index.h(index.Host, { class: { large: store.state.large } }, this.textType(), " ");
374
- }
375
- };
376
- GxgText.style = textCss;
377
-
378
314
  exports.ch_suggest = ChSuggest;
379
315
  exports.ch_suggest_list = ChSuggestList;
380
316
  exports.ch_suggest_list_item = ChSuggestListItem;
381
317
  exports.gxg_suggest = GxgSuggest;
382
- exports.gxg_text = GxgText;
@@ -0,0 +1,79 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ const index = require('./index-5a32426a.js');
6
+
7
+ const testActionGroupCss = "ch-test-action-group{display:flex;border:2px dashed #00000080;resize:both;overflow:auto;width:500px}.action-group{padding:20px;margin:20px;background-color:#ffffff;border:1px solid}.action-group::part(actions){gap:12px}.action-group::part(more-actions-button){border-radius:50%;width:fit-content;height:fit-content;color:#313aa1;align-self:center;margin-inline-end:8px}.dropdown-item::part(action){--separation:8px;background-color:#f3d0c3;border-radius:4px;padding-inline:16px;padding-block:8px}.dropdown-item::part(action):focus-within{outline:1px solid}.dropdown-item::part(action):hover{background-color:#d3b1a4}.action-group::part(more-actions-list),.dropdown-item::part(list){row-gap:8px;margin-block:8px}.action-group::part(more-actions-section),.dropdown-item::part(section){background-color:#edeaff;padding:8px;box-shadow:0 4px 8px 1px #22222220}";
8
+
9
+ const ChTestActionGroup = class {
10
+ constructor(hostRef) {
11
+ index.registerInstance(this, hostRef);
12
+ this.displayedItemsCount = -1;
13
+ /**
14
+ * This attribute lets you specify the label for the expandable button.
15
+ * Important for accessibility.
16
+ */
17
+ this.buttonLabel = "Show options";
18
+ /**
19
+ * Determine which actions on the expandable button display the dropdown
20
+ * section.
21
+ */
22
+ this.expandBehavior = "ClickOrHover";
23
+ /**
24
+ * This attribute determines how items behave when the content of the ActionGroup overflows horizontal. This property is needed
25
+ * to make the control responsive to changes in the Width of the container of ActionGroup.
26
+ *
27
+ * | Value | Details |
28
+ * | --------------------- | ------------------------------------------------------------------------------------------------ |
29
+ * | `Add Scroll` | The items of the ActionGroup that overflow horizontally are shown by means of a scroll. |
30
+ * | `Multiline` | The ActionGroup items that overflow horizontally are shown in a second line of the control. |
31
+ * | `Responsive Collapse` | The Action Group items, when they start to overflow the control, are placed in the More Actions. |
32
+ */
33
+ this.itemsOverflowBehavior = "ResponsiveCollapse";
34
+ /**
35
+ * Determine if the dropdown section should be opened when the expandable
36
+ * button of the control is focused.
37
+ */
38
+ this.openOnFocus = false;
39
+ /**
40
+ * Specifies the position of the dropdown section that is placed relative to
41
+ * the more actions button.
42
+ */
43
+ this.moreActionsDropdownPosition = "InsideStart_OutsideEnd";
44
+ /**
45
+ * Specifies the separation (in pixels) between the expandable button and the
46
+ * dropdown section of the control.
47
+ */
48
+ this.separation = 0;
49
+ // /**
50
+ // * Fired when the visibility of the dropdown section is changed
51
+ // */
52
+ // @Event() expandedChange: EventEmitter<boolean>;
53
+ this.renderItem = (item) => (index.h("ch-dropdown-item", { slot: "items", id: item.id, class: item.class, expandBehavior: this.expandBehavior, href: item.target, leftImgSrc: item.leftIcon, openOnFocus: this.openOnFocus, position: item.position || "OutsideEnd_InsideStart", rightImgSrc: item.rightIcon }, item.title, item.items != null && item.items.map(this.renderItem)));
54
+ this.firstLevelRenderItem = (item, index$1) => (index.h("ch-dropdown-item", { id: item.id, class: item.class, expandBehavior: this.expandBehavior, forceContainingBlock: false, href: item.target, leftImgSrc: item.leftIcon, openOnFocus: this.openOnFocus, position: item.position || "Center_OutsideEnd", rightImgSrc: item.rightIcon }, item.title, this.itemsOverflowBehavior === "ResponsiveCollapse" &&
55
+ (this.displayedItemsCount === -1 || index$1 < this.displayedItemsCount) &&
56
+ item.items != null &&
57
+ item.items.map(this.renderItem)));
58
+ this.firstLevelRenderCollapsedItem = (item) => (index.h("ch-dropdown-item", { id: item.id, class: item.class, expandBehavior: this.expandBehavior, href: item.target, leftImgSrc: item.leftIcon, openOnFocus: this.openOnFocus, position: item.responsiveCollapsePosition || "OutsideEnd_InsideStart", rightImgSrc: item.rightIcon }, item.title, item.items != null && item.items.map(this.renderItem)));
59
+ this.handleDisplayedItemsCountChange = (event) => {
60
+ this.displayedItemsCount = event.detail;
61
+ };
62
+ }
63
+ render() {
64
+ return (index.h(index.Host, null, index.h("ch-action-group", { buttonLabel: this.buttonLabel, class: "action-group", expandBehavior: this.expandBehavior, itemsOverflowBehavior: this.itemsOverflowBehavior, openOnFocus: this.openOnFocus, moreActionsDropdownPosition: this.moreActionsDropdownPosition,
65
+ // style={{
66
+ // "--separation": `${this.separation}px`
67
+ // }}
68
+ onDisplayedItemsCountChange: this.handleDisplayedItemsCountChange }, this.itemsModel != null &&
69
+ this.itemsModel.map((item, index$1) => (index.h("ch-action-group-item", { slot: "items" }, this.firstLevelRenderItem(item, index$1)))), this.itemsOverflowBehavior === "ResponsiveCollapse" &&
70
+ this.itemsModel != null &&
71
+ this.itemsModel
72
+ .filter((_, index) => this.displayedItemsCount !== -1 &&
73
+ index >= this.displayedItemsCount)
74
+ .map(item => (index.h("ch-action-group-item", { slot: "more-items", avoidFloating: true }, this.firstLevelRenderCollapsedItem(item)))))));
75
+ }
76
+ };
77
+ ChTestActionGroup.style = testActionGroupCss;
78
+
79
+ exports.ch_test_action_group = ChTestActionGroup;
@@ -0,0 +1,54 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ const index = require('./index-5a32426a.js');
6
+
7
+ const testDropdownCss = ".dropdown::part(expandable-button){background-color:aliceblue;border:1px solid;border-radius:4px;padding-block:4px;padding-inline:16px}.dropdown::part(expandable-button):focus{box-shadow:0 0 0 1px black}.dropdown-item::part(action){--separation:8px;background-color:#f3d0c3;border-radius:4px;padding-inline:16px;padding-block:8px}.dropdown-item::part(action):focus-within{outline:1px solid}.dropdown-item::part(action):hover{background-color:#d3b1a4}.dropdown::part(section),.dropdown-item::part(section){background-color:#edeaff;padding:8px;box-shadow:0 4px 8px 1px #22222220}.dropdown::part(list),.dropdown-item::part(list){row-gap:8px;margin-block:8px}";
8
+
9
+ const ChTestDropdownX = class {
10
+ constructor(hostRef) {
11
+ index.registerInstance(this, hostRef);
12
+ /**
13
+ * This attribute lets you specify the label for the expandable button.
14
+ * Important for accessibility.
15
+ */
16
+ this.buttonLabel = "Show options";
17
+ /**
18
+ * Determine which actions on the expandable button display the dropdown
19
+ * section.
20
+ */
21
+ this.expandBehavior = "ClickOrHover";
22
+ /**
23
+ * Determine if the dropdown section should be opened when the expandable
24
+ * button of the control is focused.
25
+ */
26
+ this.openOnFocus = false;
27
+ /**
28
+ * Specifies the position of the dropdown section that is placed relative to
29
+ * the expandable button.
30
+ */
31
+ this.position = "Center_OutsideEnd";
32
+ /**
33
+ * Specifies the separation (in pixels) between the expandable button and the
34
+ * dropdown section of the control.
35
+ */
36
+ this.separation = 0;
37
+ // /**
38
+ // * Fired when the visibility of the dropdown section is changed
39
+ // */
40
+ // @Event() expandedChange: EventEmitter<boolean>;
41
+ this.renderItem = (item) => [
42
+ index.h("ch-dropdown-item", { slot: "items", id: item.id, class: item.class, expandBehavior: this.expandBehavior, href: item.target, leftImgSrc: item.leftIcon, openOnFocus: this.openOnFocus, position: "OutsideEnd_InsideStart", rightImgSrc: item.rightIcon }, item.title, item.items != null && item.items.map(this.renderItem)),
43
+ item.showSeparator && (index.h("ch-dropdown-item-separator", { class: item.separatorClass }))
44
+ ];
45
+ }
46
+ render() {
47
+ return (index.h(index.Host, null, index.h("ch-dropdown", { buttonLabel: this.buttonLabel, class: "dropdown", expandBehavior: this.expandBehavior, openOnFocus: this.openOnFocus, position: this.position, style: {
48
+ "--separation": `${this.separation}px`
49
+ } }, index.h("span", { slot: "action" }, "User info"), index.h("div", { slot: "header" }, index.h("h1", null, "John Doe"), index.h("span", null, "johndoe@example.com")), this.itemsModel != null && this.itemsModel.map(this.renderItem), index.h("div", { slot: "footer" }, "Footer"))));
50
+ }
51
+ };
52
+ ChTestDropdownX.style = testDropdownCss;
53
+
54
+ exports.ch_test_dropdown = ChTestDropdownX;
@@ -5,14 +5,16 @@ Object.defineProperty(exports, '__esModule', { value: true });
5
5
  const index = require('./index-5a32426a.js');
6
6
  const chGlobalStylesheet = require('./ch-global-stylesheet-145c4b20.js');
7
7
 
8
- const chWindowCss = ":host{--ch-window-offset-x:0px;--ch-window-offset-y:0px}:host(:not([hidden])){display:contents}:host(:is(:not([modal]),[modal=\"false\"])) .mask{pointer-events:none}.window{pointer-events:all}.mask{display:flex;position:fixed;inset:0;inset-inline-start:calc( var(--ch-window-inset-inline-start) + var(--ch-window-offset-x) );inset-block-start:calc( var(--ch-window-inset-block-start) + var(--ch-window-offset-y) );z-index:var(--ch-window-mask-z-index, 1000)}:host(:is([x-align=\"outside-start\"],[x-align=\"inside-start\"])) .mask{justify-content:flex-start}:host([x-align=center]) .mask{justify-content:center}:host(:is([x-align=\"outside-end\"],[x-align=\"inside-end\"])) .mask{justify-content:flex-end}:host(:is([y-align=\"outside-start\"],[y-align=\"inside-start\"])) .mask{align-items:flex-start}:host([y-align=center]) .mask{align-items:center}:host(:is([y-align=\"outside-end\"],[y-align=\"inside-end\"])) .mask{align-items:flex-end}.window{display:flex;flex-direction:column;transform:translate(var(--ch-window-x-outside, 0px), var(--ch-window-y-outside, 0px)) translate(var(--ch-window-x-drag, 0px), var(--ch-window-y-drag, 0px))}:host([x-align=outside-start]) .window{--ch-window-x-outside:-100%}:host([x-align=outside-end]) .window{--ch-window-x-outside:100%}:host([y-align=outside-start]) .window{--ch-window-y-outside:-100%}:host([y-align=outside-end]) .window{--ch-window-y-outside:100%}";
8
+ const chWindowCss = ":host{--ch-window-offset-x:0px;--ch-window-offset-y:0px;--ch-window-x-outside:0px;--ch-window-y-outside:0px}:host(:not([hidden])){display:contents}:host(:is(:not([modal]),[modal=\"false\"])) .mask{pointer-events:none}.window{pointer-events:all}.mask{display:flex;position:fixed;inset:0;inset-inline-start:calc( var(--ch-window-inset-inline-start) + var(--ch-window-offset-x) );inset-block-start:calc( var(--ch-window-inset-block-start) + var(--ch-window-offset-y) );z-index:var(--ch-window-mask-z-index, 1000)}:host(:is([x-align=\"outside-start\"],[x-align=\"inside-start\"])) .mask{justify-content:flex-start}:host([x-align=center]) .mask{justify-content:center}:host(:is([x-align=\"outside-end\"],[x-align=\"inside-end\"])) .mask{justify-content:flex-end}:host(:is([y-align=\"outside-start\"],[y-align=\"inside-start\"])) .mask{align-items:flex-start}:host([y-align=center]) .mask{align-items:center}:host(:is([y-align=\"outside-end\"],[y-align=\"inside-end\"])) .mask{align-items:flex-end}.window{display:flex;flex-direction:column;transform:translate(var(--ch-window-x-outside), var(--ch-window-y-outside)) translate(var(--ch-window-x-drag, 0px), var(--ch-window-y-drag, 0px))}:host([x-align=outside-start]) .window{--ch-window-x-outside:-100%}:host([x-align=outside-end]) .window{--ch-window-x-outside:100%}:host([y-align=outside-start]) .window{--ch-window-y-outside:-100%}:host([y-align=outside-end]) .window{--ch-window-y-outside:100%}";
9
9
 
10
+ const CONTAINING_BLOCK_RESET_CUSTOM_VAR = "--ch-window-relative-position";
10
11
  const ChWindow = class {
11
12
  constructor(hostRef) {
12
13
  index.registerInstance(this, hostRef);
13
14
  this.windowOpened = index.createEvent(this, "windowOpened", 7);
14
15
  this.windowClosed = index.createEvent(this, "windowClosed", 7);
15
16
  this.isContainerCssOverride = false;
17
+ this.relativeWindow = false;
16
18
  this.validCssAligns = [
17
19
  "outside-start",
18
20
  "inside-start",
@@ -60,17 +62,25 @@ const ChWindow = class {
60
62
  this.updatePosition = () => {
61
63
  if (!this.isContainerCssOverride && this.container && this.mask) {
62
64
  const rect = this.container.getBoundingClientRect();
65
+ this.mask.style.width = `${rect.width}px`;
66
+ this.mask.style.height = `${rect.height}px`;
67
+ // Nested windows are positioned relative to its initial containing block,
68
+ // so there is no need to align them relative to the document
69
+ if (this.relativeWindow) {
70
+ return;
71
+ }
63
72
  // TODO: RTL positioning bug
64
73
  this.mask.style.setProperty("--ch-window-inset-inline-start", `${rect.left}px`);
65
74
  this.mask.style.setProperty("--ch-window-inset-block-start", `${rect.top}px`);
66
- this.mask.style.width = `${rect.width}px`;
67
- this.mask.style.height = `${rect.height}px`;
68
75
  }
69
76
  else if (this.isContainerCssOverride || !this.container) {
70
- this.mask.style.removeProperty("--ch-window-inset-inline-start");
71
- this.mask.style.removeProperty("--ch-window-inset-block-start");
72
77
  this.mask.style.removeProperty("width");
73
78
  this.mask.style.removeProperty("height");
79
+ if (this.relativeWindow) {
80
+ return;
81
+ }
82
+ this.mask.style.removeProperty("--ch-window-inset-inline-start");
83
+ this.mask.style.removeProperty("--ch-window-inset-block-start");
74
84
  }
75
85
  };
76
86
  this.windowResizeHandler = () => {
@@ -92,6 +102,7 @@ const ChWindow = class {
92
102
  };
93
103
  }
94
104
  containerHandler(value, oldValue) {
105
+ this.checkRelativePosition();
95
106
  this.containerResizeObserverHandler(value, oldValue);
96
107
  this.updatePosition();
97
108
  }
@@ -102,6 +113,7 @@ const ChWindow = class {
102
113
  this.windowClosed.emit();
103
114
  }
104
115
  else {
116
+ this.checkRelativePosition();
105
117
  this.updatePosition();
106
118
  this.watchCSSAlign();
107
119
  this.addListeners();
@@ -129,6 +141,10 @@ const ChWindow = class {
129
141
  windowCloseClickedHandler() {
130
142
  this.hidden = true;
131
143
  }
144
+ checkRelativePosition() {
145
+ const computed = getComputedStyle(this.el);
146
+ this.relativeWindow = !!computed.getPropertyValue(CONTAINING_BLOCK_RESET_CUSTOM_VAR);
147
+ }
132
148
  resetDrag() {
133
149
  this.dragStartX = undefined;
134
150
  this.dragStartY = undefined;
@@ -204,7 +220,10 @@ const ChWindow = class {
204
220
  this.el.shadowRoot.adoptedStyleSheets.push(chGlobalStylesheet.CH_GLOBAL_STYLESHEET);
205
221
  }
206
222
  render() {
207
- return (index.h(index.Host, null, index.h("div", { class: "mask", part: "mask", ref: el => (this.mask = el), onClick: this.maskClickHandler }, index.h("section", { class: "window", part: "window", ref: el => (this.window = el) }, this.showHeader && (index.h("header", { part: "header", ref: el => (this.header = el) }, index.h("slot", { name: "header" }, index.h("span", { part: "caption" }, this.caption), index.h("ch-window-close", { part: "close", title: this.closeTooltip }, this.closeText)))), index.h("div", { part: "main" }, index.h("slot", null)), this.showFooter && (index.h("footer", { part: "footer" }, index.h("slot", { name: "footer" })))))));
223
+ return (index.h(index.Host, null, index.h("div", { class: "mask", part: "mask", style: this.relativeWindow && {
224
+ "--ch-window-inset-inline-start": "0px",
225
+ "--ch-window-inset-block-start": "0px"
226
+ }, ref: el => (this.mask = el), onClick: this.maskClickHandler }, index.h("section", { class: "window", part: "window", ref: el => (this.window = el) }, this.showHeader && (index.h("header", { part: "header", ref: el => (this.header = el) }, index.h("slot", { name: "header" }, index.h("span", { part: "caption" }, this.caption), index.h("ch-window-close", { part: "close", title: this.closeTooltip }, this.closeText)))), index.h("div", { part: "main" }, index.h("slot", null)), this.showFooter && (index.h("footer", { part: "footer" }, index.h("slot", { name: "footer" })))))));
208
227
  }
209
228
  get el() { return index.getElement(this); }
210
229
  static get watchers() { return {
@@ -0,0 +1,28 @@
1
+ 'use strict';
2
+
3
+ const index = require('./index-5a32426a.js');
4
+
5
+ /* STENCIL IMPORTS */
6
+ const renderComboItems = (gxOptions) => {
7
+ const comboItemsArray = [];
8
+ gxOptions.forEach((gxOption) => {
9
+ const iconName = gxOption.iconName || gxOption.icon;
10
+ comboItemsArray.push(index.h("gxg-combo-box-item", { value: gxOption.value, icon: iconName }, gxOption.label || gxOption.name));
11
+ });
12
+ return comboItemsArray;
13
+ };
14
+
15
+ const formatDate = (dateObject) => {
16
+ const date = dateObject.toISOString().slice(0, 10);
17
+ const hours = dateObject.getHours();
18
+ const minutes = dateObject.getMinutes();
19
+ const time = `${hours}:${minutes}`;
20
+ let period = "AM"; // Assume it's AM by default
21
+ if (hours >= 12) {
22
+ period = "PM";
23
+ }
24
+ return `${date} ${time}${period} `;
25
+ };
26
+
27
+ exports.formatDate = formatDate;
28
+ exports.renderComboItems = renderComboItems;