@orangelogic/design-system 2.132.0 → 2.134.0

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 (136) hide show
  1. package/library/chunks/{asset.D_VITxRH.js → asset.CcxcYY9d.js} +2 -2
  2. package/library/chunks/{button.DcInI7IV.js → button.DYoFn504.js} +1 -1
  3. package/library/chunks/calendar-grid.CvdcwfTo.js +34 -0
  4. package/library/chunks/checkbox.BzbWmmJ0.js +198 -0
  5. package/library/chunks/{color-swatch-group.Cy-M_lbx.js → color-swatch-group.Dx6-kWC-.js} +3 -3
  6. package/library/chunks/{color-swatch.U-wztpLf.js → color-swatch.0zyBEfL_.js} +1 -1
  7. package/library/chunks/{confirm-popover.DfAd2F8S.js → confirm-popover.DpVYvK20.js} +3 -3
  8. package/library/chunks/{date-picker.D0SJADN6.js → date-picker.DTUICGb9.js} +2 -2
  9. package/library/chunks/date.dSYNLBVO.js +77 -0
  10. package/library/chunks/{dialog.BlKHLwFx.js → dialog.BwBD_hJi.js} +2 -2
  11. package/library/chunks/{document-viewer.CzGnnA_9.js → document-viewer.BM716ovi.js} +7 -7
  12. package/library/chunks/{dot-pagination.CNJWQ4zf.js → dot-pagination.B70lV5Av.js} +1 -1
  13. package/library/chunks/{file-on-demand.Dr05DdkU.js → file-on-demand.CsT96fvk.js} +9 -9
  14. package/library/chunks/{folder-select.CHzRsSGM.js → folder-select.DwZ7lczk.js} +4 -4
  15. package/library/chunks/{header.WRWyUU36.js → header.BMGvKrdP.js} +1 -1
  16. package/library/chunks/{i18n.NAH4U8Lw.js → i18n.DoMIwXr2.js} +61 -45
  17. package/library/chunks/{icon-button.COTH_z-J.js → icon-button.B-Jf9W3v.js} +1 -1
  18. package/library/chunks/{iframe.DvBR4KYU.js → iframe.Cdv6esyS.js} +1 -1
  19. package/library/chunks/{image.DAtx64Jj.js → image.SLqIVjqc.js} +2 -2
  20. package/library/chunks/{input.BRgVRr2i.js → input.CQNhMu4z.js} +1 -1
  21. package/library/chunks/{list-editor.CwCdVzMl.js → list-editor.BhMNYL8R.js} +9 -9
  22. package/library/chunks/{option.BH13eKSl.js → option.SCVixE2L.js} +1 -1
  23. package/library/chunks/{pagination.tSkuYrqk.js → pagination.BFE6Nk3_.js} +5 -5
  24. package/library/chunks/{resizable-component.styles.B5N-oYx6.js → resizable-component.styles.BVhOesNE.js} +1 -1
  25. package/library/chunks/{tab-group.GA4X3LL2.js → tab-group.C-p2Dljr.js} +3 -3
  26. package/library/chunks/{table.C6YsaNOh.js → table.DWcxLbq6.js} +3581 -2656
  27. package/library/chunks/{tree.CbeHY8pn.js → tree.C2mLhREj.js} +2 -2
  28. package/library/components/alert.js +2 -2
  29. package/library/components/asset-link-format.js +7 -7
  30. package/library/components/atoms.js +22 -22
  31. package/library/components/audio.js +3 -3
  32. package/library/components/border-input-group.js +2 -2
  33. package/library/components/breadcrumb.js +1 -1
  34. package/library/components/button.js +2 -2
  35. package/library/components/checkbox.js +18 -195
  36. package/library/components/color-picker.js +3 -3
  37. package/library/components/color-swatch-group.js +4 -4
  38. package/library/components/color-swatch.js +2 -2
  39. package/library/components/confirm-popover.js +4 -4
  40. package/library/components/copy-button.js +1 -1
  41. package/library/components/corner-position-input-group.js +3 -3
  42. package/library/components/date-calendar.js +10 -9
  43. package/library/components/details.js +1 -1
  44. package/library/components/dialog.js +3 -3
  45. package/library/components/diff.js +77 -51
  46. package/library/components/document-viewer.js +4 -4
  47. package/library/components/dot-pagination.js +2 -2
  48. package/library/components/drawer.js +2 -2
  49. package/library/components/dropdown.js +2 -2
  50. package/library/components/dynamic-select.js +4 -4
  51. package/library/components/e-chart.js +1 -1
  52. package/library/components/element-clamp.js +2 -2
  53. package/library/components/file-on-demand.js +10 -10
  54. package/library/components/folder-select.js +4 -4
  55. package/library/components/format-bytes.js +1 -1
  56. package/library/components/format-date.js +38 -23
  57. package/library/components/format-number.js +1 -1
  58. package/library/components/format-time.js +1 -1
  59. package/library/components/header.js +2 -2
  60. package/library/components/icon-button.js +2 -2
  61. package/library/components/iframe.js +2 -2
  62. package/library/components/image-comparer.js +1 -1
  63. package/library/components/image.js +3 -3
  64. package/library/components/input.js +2 -2
  65. package/library/components/line-clamp.js +1 -1
  66. package/library/components/list-editor.js +7 -7
  67. package/library/components/masonry.js +2 -2
  68. package/library/components/menu-item.js +2 -2
  69. package/library/components/menu.js +1 -1
  70. package/library/components/molecules.js +4 -4
  71. package/library/components/option.js +2 -2
  72. package/library/components/organisms.js +2 -2
  73. package/library/components/padding-input-group.js +1 -1
  74. package/library/components/pagination.js +6 -6
  75. package/library/components/popup.js +1 -1
  76. package/library/components/position-picker.js +1 -1
  77. package/library/components/progress-bar.js +1 -1
  78. package/library/components/progress-ring.js +1 -1
  79. package/library/components/range.js +1 -1
  80. package/library/components/rating.js +1 -1
  81. package/library/components/relative-time.js +1 -1
  82. package/library/components/select.js +2 -2
  83. package/library/components/shadow-input-group.js +1 -1
  84. package/library/components/share-option-list.js +1 -1
  85. package/library/components/sidebar.js +1 -1
  86. package/library/components/size-input-group.js +3 -3
  87. package/library/components/spinner.js +1 -1
  88. package/library/components/split-panel.js +1 -1
  89. package/library/components/tab-group.js +4 -4
  90. package/library/components/tab.js +2 -2
  91. package/library/components/table.js +16 -16
  92. package/library/components/tag.js +2 -2
  93. package/library/components/tooltip.js +1 -1
  94. package/library/components/tree-item.js +3 -3
  95. package/library/components/tree.js +2 -2
  96. package/library/components/typeface.js +2 -2
  97. package/library/components/types.js +38201 -38461
  98. package/library/components/video.js +3 -3
  99. package/library/package.json +1 -1
  100. package/library/packages/atoms/src/components/checkbox/checkbox.d.ts +3 -0
  101. package/library/packages/atoms/src/components/diff/utils/diff-worker-client.d.ts +2 -1
  102. package/library/packages/atoms/src/components/format-date/format-date.d.ts +8 -0
  103. package/library/packages/atoms/src/components/menu-item/menu-item.d.ts +2 -0
  104. package/library/packages/atoms/src/components/table/components/table-toolbar/table-dropdown-filter.d.ts +1 -1
  105. package/library/packages/atoms/src/components/table/components/table-toolbar/table-group-by-dropdown.d.ts +44 -0
  106. package/library/packages/atoms/src/components/table/components/table-toolbar/table-saved-search-dropdown.d.ts +1 -1
  107. package/library/packages/atoms/src/components/table/components/table-toolbar/table-toolbar.d.ts +33 -1
  108. package/library/packages/atoms/src/components/table/controllers/ajax-facets/ajax-facet-data-controller.d.ts +39 -0
  109. package/library/packages/atoms/src/components/table/controllers/ajax-facets/ajax-facet-filter-controller.d.ts +27 -0
  110. package/library/packages/atoms/src/components/table/{filter-controller.d.ts → controllers/filter-controller.d.ts} +24 -3
  111. package/library/packages/atoms/src/components/table/controllers/select-all-controller.d.ts +55 -0
  112. package/library/packages/atoms/src/components/table/table.d.ts +70 -1
  113. package/library/packages/events/src/cx-table-dropdown-filter-change.d.ts +1 -1
  114. package/library/packages/events/src/cx-table-export.d.ts +1 -1
  115. package/library/packages/events/src/cx-table-group-by-change.d.ts +8 -0
  116. package/library/packages/events/src/cx-table-select-all-change.d.ts +8 -0
  117. package/library/packages/events/src/events.d.ts +2 -0
  118. package/library/packages/hybrid/table-core/src/tabulator-tables/core/TabulatorFull.d.ts +1 -1
  119. package/library/packages/hybrid/table-core/src/tabulator-tables/modules/Format/defaults/formatters/avatar.d.ts +5 -0
  120. package/library/packages/hybrid/table-core/src/tabulator-tables/modules/Format/defaults/formatters/date.d.ts +12 -0
  121. package/library/packages/hybrid/table-core/src/tabulator-tables/modules/Format/defaults/formatters/diff.d.ts +2 -1
  122. package/library/packages/hybrid/table-core/src/tabulator-tables/modules/Format/defaults/formatters.d.ts +4 -0
  123. package/library/packages/hybrid/table-core/src/tabulator-tables/modules/GroupRows/Group.d.ts +1 -0
  124. package/library/packages/hybrid/table-core/src/tabulator-tables/modules/GroupRows/GroupRows.d.ts +7 -0
  125. package/library/packages/hybrid/table-core/src/tabulator-tables/modules/SelectRow/extensions/formatters/rowSelection.d.ts +1 -1
  126. package/library/packages/molecules/src/faceted-filter/faceted-filter.d.ts +2 -0
  127. package/library/packages/types/src/faceted-filter.d.ts +11 -0
  128. package/library/packages/types/src/format-date.d.ts +12 -0
  129. package/library/packages/types/src/table.d.ts +40 -21
  130. package/library/packages/utils/src/custom-element/i18n-utils.d.ts +7 -0
  131. package/library/packages/utils/src/custom-element/i18n.d.ts +1 -0
  132. package/library/react-web-component.d.ts +278 -246
  133. package/library/utils.js +86 -85
  134. package/package.json +1 -1
  135. package/library/assets/diff.worker-ClilI1xm.js +0 -1
  136. package/library/chunks/calendar-grid.CXYoS6VA.js +0 -108
@@ -1,13 +1,13 @@
1
1
  import { _ as kd, a as Sa, b as Be, c as Je } from "../chunks/inheritsLoose.BuSn_CvZ.js";
2
2
  import { c as ps, a as Bn } from "../chunks/_commonjsHelpers.DQNKXVTB.js";
3
3
  import { r as Sb } from "../chunks/___vite-browser-external_commonjs-proxy.C2tf3HsQ.js";
4
- import { C as Cb } from "../chunks/image.DAtx64Jj.js";
4
+ import { C as Cb } from "../chunks/image.SLqIVjqc.js";
5
5
  import Mb from "./resize-observer.js";
6
- import { r as Db, R as Pb, a as Rp, b as Lb } from "../chunks/resizable-component.styles.B5N-oYx6.js";
6
+ import { r as Db, R as Pb, a as Rp, b as Lb } from "../chunks/resizable-component.styles.BVhOesNE.js";
7
7
  import { c as Rb } from "../chunks/component.styles.CRO4Odto.js";
8
8
  import { b as Ib } from "../chunks/browser.BHOCIF_A.js";
9
9
  import { c as Ob } from "../chunks/custom-element.L4WJXn1j.js";
10
- import { L as kb } from "../chunks/i18n.NAH4U8Lw.js";
10
+ import { L as kb } from "../chunks/i18n.DoMIwXr2.js";
11
11
  import { w as Ki } from "../chunks/watch.CThbualB.js";
12
12
  import { i as Bb, x as Qc } from "../chunks/lit-element.jLBm65_O.js";
13
13
  import { n as Ri } from "../chunks/lib-cortex-element.CVMmyPMC.js";
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@orangelogic/design-system",
3
3
  "type": "module",
4
- "version": "2.132.0",
4
+ "version": "2.134.0",
5
5
  "license": "UNLICENSED",
6
6
  "types": "library/types.d.ts",
7
7
  "scripts": {
@@ -25,6 +25,9 @@ import { default as CxIcon } from '../icon/icon';
25
25
  * @csspart indeterminate-icon - The indeterminate icon, an `<cx-icon>` element.
26
26
  * @csspart label - The container that wraps the checkbox's label.
27
27
  * @csspart form-control-help-text - The help text's wrapper.
28
+ *
29
+ * @cssproperty [--cx-checkbox-disabled-background=var(--cx-input-background-color)] - Background color of the control box when disabled. Override to customize the disabled appearance without affecting the shared opacity behavior.
30
+ * @cssproperty [--cx-checkbox-disabled-border-color=var(--cx-input-border-color)] - Border color of the control box when disabled.
28
31
  */
29
32
  export default class CxCheckbox extends CortexElement implements CortexFormControl {
30
33
  static readonly styles: CSSResultGroup;
@@ -5,6 +5,7 @@
5
5
  * their responses by an internal id. Mounting many consumers therefore neither
6
6
  * spawns multiple workers nor accumulates per-request listeners.
7
7
  *
8
- * Resolves with the diff HTML, or an empty string if the worker errors.
8
+ * Resolves with the diff HTML, or an empty string if the worker cannot be
9
+ * created or errors while computing.
9
10
  */
10
11
  export declare function computeDiff(oldValue: string, newValue: string): Promise<string>;
@@ -37,6 +37,14 @@ export default class CxFormatDate extends CortexElement {
37
37
  timeZone: string;
38
38
  /** The format for displaying the hour. */
39
39
  hourFormat: FormatDateTimeZoneHour;
40
+ /**
41
+ * When true, removes the locale separator (e.g. " at " in en-US) that
42
+ * appears between date and time parts.
43
+ */
44
+ noDatetimeSeparator: boolean;
45
+ private buildDateTimeOptions;
46
+ private hasDateParts;
47
+ private hasTimeParts;
40
48
  render(): import('lit').TemplateResult<1> | undefined;
41
49
  }
42
50
  declare global {
@@ -30,6 +30,8 @@ import { default as CxSpinner } from '../spinner/spinner';
30
30
  * @csspart submenu-icon - The submenu icon, visible only when the menu item has a submenu (not yet implemented).
31
31
  *
32
32
  * @cssproperty [--submenu-offset=-2px] - The distance submenus shift to overlap the parent menu.
33
+ * @cssproperty [--checked-icon-size=1.5em] - The size of the checked icon.
34
+ * @cssproperty [--checked-icon-color=var(--cx-color-primary)] - The color of the checked icon when the item is checked.
33
35
  */
34
36
  export default class CxMenuItem extends CortexElement {
35
37
  static readonly styles: CSSResultGroup;
@@ -3,7 +3,7 @@ import { default as CxDropdown } from '../../../dropdown/dropdown.ts';
3
3
  import { default as CxMenu } from '../../../menu/menu.ts';
4
4
  import { default as CxMenuItem } from '../../../menu-item/menu-item.ts';
5
5
  import { default as CortexElement } from '../../../../../../base/src/cortex-element.ts';
6
- import { TableDropdownFilterData, TableDropdownFilterDataOption } from '../../../../../../types/src/table';
6
+ import { TableDropdownFilterData, TableDropdownFilterDataOption } from '../../../../../../types/src/table-toolbar';
7
7
  import { CSSResultGroup } from 'lit';
8
8
 
9
9
  /**
@@ -0,0 +1,44 @@
1
+ import { default as CxButton } from '../../../button/button.ts';
2
+ import { default as CxDropdown } from '../../../dropdown/dropdown.ts';
3
+ import { default as CxMenu } from '../../../menu/menu.ts';
4
+ import { default as CxMenuItem } from '../../../menu-item/menu-item.ts';
5
+ import { default as CortexElement } from '../../../../../../base/src/cortex-element.ts';
6
+ import { TableGroupByOption } from '../../../../../../types/src/table-toolbar';
7
+ import { CSSResultGroup } from 'lit';
8
+
9
+ /**
10
+ * @summary CxTableGroupByDropdown is a dropdown component for grouping table rows.
11
+ *
12
+ * @event {{ id: string | null }} cx-table-group-by-change - Emitted when the group-by selection changes. The id is null when grouping is cleared.
13
+ */
14
+ export default class CxTableGroupByDropdown extends CortexElement {
15
+ static readonly styles: CSSResultGroup;
16
+ static readonly dependencies: {
17
+ 'cx-button': typeof CxButton;
18
+ 'cx-dropdown': typeof CxDropdown;
19
+ 'cx-menu': typeof CxMenu;
20
+ 'cx-menu-item': typeof CxMenuItem;
21
+ };
22
+ private readonly localize;
23
+ private groupByOptionIdSet;
24
+ handleGroupByOptionsChange(): void;
25
+ /**
26
+ * The group by options.
27
+ */
28
+ groupByOptions: TableGroupByOption[];
29
+ /**
30
+ * The currently selected table group field.
31
+ */
32
+ groupByValue: string;
33
+ createRenderRoot(): this;
34
+ private handleMenuSelect;
35
+ private emitGroupByChange;
36
+ private renderOption;
37
+ private renderOffOption;
38
+ render(): import('lit').TemplateResult<1>;
39
+ }
40
+ declare global {
41
+ interface HTMLElementTagNameMap {
42
+ 'cx-table-group-by-dropdown': CxTableGroupByDropdown;
43
+ }
44
+ }
@@ -4,7 +4,7 @@ import { default as CxIcon } from '../../../icon/icon.ts';
4
4
  import { default as CxMenu } from '../../../menu/menu.ts';
5
5
  import { default as CxMenuItem } from '../../../menu-item/menu-item.ts';
6
6
  import { default as CortexElement } from '../../../../../../base/src/cortex-element.ts';
7
- import { SavedSearchItem } from '../../../../../../types/src/table';
7
+ import { SavedSearchItem } from '../../../../../../types/src/table-toolbar';
8
8
  import { CSSResultGroup } from 'lit';
9
9
 
10
10
  /**
@@ -1,4 +1,5 @@
1
1
  import { default as CxButton } from '../../../button/button.ts';
2
+ import { default as CxCheckbox } from '../../../checkbox/checkbox.ts';
2
3
  import { default as CxDropdown } from '../../../dropdown/dropdown.ts';
3
4
  import { default as CxIcon } from '../../../icon/icon.ts';
4
5
  import { default as CxIconButton } from '../../../icon-button/icon-button.ts';
@@ -10,9 +11,11 @@ import { default as CxSpace } from '../../../space/space.ts';
10
11
  import { default as CxTooltip } from '../../../tooltip/tooltip.ts';
11
12
  import { default as CxTypography } from '../../../typography/typography.ts';
12
13
  import { default as CortexElement } from '../../../../../../base/src/cortex-element.ts';
13
- import { PaginationPlacement, SavedSearchItem, TableDropdownFilterData } from '../../../../../../types/src/table';
14
+ import { PaginationPlacement } from '../../../../../../types/src/table';
15
+ import { SavedSearchItem, TableDropdownFilterData, TableGroupByOption } from '../../../../../../types/src/table-toolbar';
14
16
  import { CSSResultGroup } from 'lit';
15
17
  import { default as CxTableDropdownFilter } from './table-dropdown-filter';
18
+ import { default as CxTableGroupByDropdown } from './table-group-by-dropdown';
16
19
  import { default as CxTableSavedSearchDropdown } from './table-saved-search-dropdown';
17
20
 
18
21
  /**
@@ -21,6 +24,7 @@ import { default as CxTableSavedSearchDropdown } from './table-saved-search-drop
21
24
  *
22
25
  * @slot label - Optional label content that replaces the label property fallback.
23
26
  * @slot pagination - Optional pagination content displayed opposite the label.
27
+ * @slot dialog-dynamic-filter - Filter UI shown beside the toolbar actions and hidden while rows are selected. `cx-table` renders a `cx-faceted-filter` here when facets are available.
24
28
  *
25
29
  * @event {{ value: string }} cx-search - Emitted when the search value is submitted or cleared.
26
30
  * @event cx-table-advanced-search-click - Emitted when the advanced search action is clicked.
@@ -35,6 +39,7 @@ export default class CxTableToolbar extends CortexElement {
35
39
  private readonly hasSlotController;
36
40
  static readonly dependencies: {
37
41
  'cx-button': typeof CxButton;
42
+ 'cx-checkbox': typeof CxCheckbox;
38
43
  'cx-dropdown': typeof CxDropdown;
39
44
  'cx-icon': typeof CxIcon;
40
45
  'cx-icon-button': typeof CxIconButton;
@@ -44,6 +49,7 @@ export default class CxTableToolbar extends CortexElement {
44
49
  'cx-pagination': typeof CxPagination;
45
50
  'cx-space': typeof CxSpace;
46
51
  'cx-table-dropdown-filter': typeof CxTableDropdownFilter;
52
+ 'cx-table-group-by-dropdown': typeof CxTableGroupByDropdown;
47
53
  'cx-table-saved-search-dropdown': typeof CxTableSavedSearchDropdown;
48
54
  'cx-tooltip': typeof CxTooltip;
49
55
  'cx-typography': typeof CxTypography;
@@ -78,6 +84,10 @@ export default class CxTableToolbar extends CortexElement {
78
84
  * Whether to display a export XML button
79
85
  */
80
86
  canExportXml: boolean;
87
+ /**
88
+ * Whether to display a export PDF button
89
+ */
90
+ canExportPdf: boolean;
81
91
  /**
82
92
  * Whether to display a export custom button
83
93
  */
@@ -114,28 +124,50 @@ export default class CxTableToolbar extends CortexElement {
114
124
  * Whether to display the saved search dropdown
115
125
  */
116
126
  showSavedSearch: boolean;
127
+ /**
128
+ * The group by options.
129
+ */
130
+ groupByOptions: TableGroupByOption[];
131
+ /**
132
+ * The currently selected group-by field.
133
+ */
134
+ groupByValue: string;
117
135
  searchValue: string;
136
+ /**
137
+ * Set by cx-table to drive the select-all checkbox.
138
+ * `null` = feature disabled. Object = feature enabled with checkbox + slot state.
139
+ * Intended for cx-table ownership, not direct consumer assignment.
140
+ */
141
+ selectAllState: {
142
+ checked: boolean;
143
+ count: number;
144
+ indeterminate: boolean;
145
+ } | null;
118
146
  /**
119
147
  * Where the pagination control is placed. Only the `top*` values render the
120
148
  * paginator inside this toolbar; the value drives the header alignment.
121
149
  */
122
150
  paginationPlacement: PaginationPlacement;
151
+ private handleSelectAllChange;
123
152
  /**
124
153
  * Whether pagination is enabled on the table. Reserves stable height for the
125
154
  * height when pagination moves between `top-*`/`bottom-*` placements.
126
155
  */
127
156
  pagination: boolean;
157
+ private renderSelectAll;
128
158
  private handleSearchSubmit;
129
159
  private handleAdvancedSearchClick;
130
160
  private handleClearSearch;
131
161
  private handleAdd;
132
162
  private handleExportCsv;
133
163
  private handleExportXml;
164
+ private handleExportPdf;
134
165
  private handleExportCustom;
135
166
  private handleSaveReport;
136
167
  private renderSearch;
137
168
  private renderAddButton;
138
169
  private renderSavedSearchDropdown;
170
+ private renderGroupByDropdown;
139
171
  private renderExportDropdown;
140
172
  private renderDropdownFilters;
141
173
  private renderPagination;
@@ -0,0 +1,39 @@
1
+ import { Facet, FacetDetails } from '../../../../../../types/src/faceted-filter';
2
+ import { ReactiveController, ReactiveControllerHost } from 'lit';
3
+
4
+ interface FacetDataHost extends ReactiveControllerHost, HTMLElement {
5
+ ajaxURL: string | undefined;
6
+ facetConfig: string | undefined;
7
+ hasFacets: boolean;
8
+ }
9
+ /**
10
+ * FacetDataController
11
+ *
12
+ * When `ajaxURL` is set and an AJAX response contains a `facets` map,
13
+ * this controller builds `Facet[]` from the response and exposes them via
14
+ * the `facets` / `availableFacets` fields, which `cx-table` binds onto the
15
+ * `cx-faceted-filter` it renders in the `dialog-dynamic-filter` slot.
16
+ *
17
+ * The optional `facetConfig` prop on `cx-table` provides the schema for
18
+ * date-picker, date-range-picker, and checkbox selection-mode facets.
19
+ * All other response keys default to checkbox. Requires either `facetConfig` or `response.facets` to be
20
+ * present — if neither exists the controller is a no-op.
21
+ *
22
+ * `facetConfig` format: `"FieldName:type-option1-option2 …"`
23
+ * - `checkbox` — required option: `single` or `multiple`
24
+ * - `datePicker` — options: `showTime`
25
+ * - `dateRangePicker` — options: `showTime`, `showPreset`
26
+ */
27
+ export declare class FacetDataController implements ReactiveController {
28
+ private readonly host;
29
+ /** Built facets bound onto the table-rendered `cx-faceted-filter`. */
30
+ facets: Facet[];
31
+ /** Facet schema (details only) bound onto the `cx-faceted-filter`. */
32
+ availableFacets: FacetDetails[];
33
+ constructor(host: FacetDataHost);
34
+ hostConnected(): void;
35
+ hostDisconnected(): void;
36
+ hostUpdated(): void;
37
+ handleAjaxResponse(result: unknown): void;
38
+ }
39
+ export {};
@@ -0,0 +1,27 @@
1
+ import { DateFilterCompareFormat } from '../../../../../../types/src/table';
2
+ import { ReactiveController, ReactiveControllerHost } from 'lit';
3
+ import { FilterController } from '../filter-controller';
4
+
5
+ interface FacetFilterHost extends ReactiveControllerHost, HTMLElement {
6
+ dateFilterCompareFormat: DateFilterCompareFormat;
7
+ }
8
+ /**
9
+ * FacetFilterController
10
+ *
11
+ * Bridges `cx-faceted-filter` (placed in the `dialog-dynamic-filter` slot) with
12
+ * `FilterController`. Listens for `cx-faceted-filter-change` events bubbling out
13
+ * of the slot and translates the detail into Tabulator filter calls.
14
+ *
15
+ * Works in both filter modes:
16
+ * - **local** — Tabulator compares filter values against in-memory row data.
17
+ * - **remote** — Tabulator puts active filters in `params` for `ajaxURLGenerator`.
18
+ */
19
+ export declare class FacetFilterController implements ReactiveController {
20
+ private readonly host;
21
+ private readonly filterController;
22
+ constructor(host: FacetFilterHost, filterController: FilterController);
23
+ hostConnected(): void;
24
+ hostDisconnected(): void;
25
+ private handleFacetedFilterChange;
26
+ }
27
+ export {};
@@ -1,8 +1,10 @@
1
- import { Filter, TableDropdownFilterData } from '../../../../types/src/table';
1
+ import { SelectedDateRanges } from '../../../../../types/src/faceted-filter';
2
+ import { DateFilterCompareFormat, Filter } from '../../../../../types/src/table';
3
+ import { TableDropdownFilterData } from '../../../../../types/src/table-toolbar';
2
4
  import { ReactiveController, ReactiveControllerHost } from 'lit';
3
- import { default as CxTable } from './table';
5
+ import { default as CxTable } from '../table';
4
6
 
5
- export type FilterSource = 'search' | `dropdown:${string}`;
7
+ export type FilterSource = 'search' | `dropdown:${string}` | `dynamic:${string}`;
6
8
  /**
7
9
  * A reactive controller to manage programmatic filter state across multiple sources (search, dropdowns).
8
10
  * Coordinates filter operations to prevent conflicts between different filter sources.
@@ -44,6 +46,25 @@ export declare class FilterController implements ReactiveController {
44
46
  * and applies filters for each configured `defaultOption`
45
47
  */
46
48
  syncDropdownFilterSources(configs: readonly TableDropdownFilterData[]): void;
49
+ /**
50
+ * Reconcile faceted-filter sources from a full selection map keyed by field name
51
+ * (the `cx-faceted-filter-change` detail). Each field with values becomes an `in`
52
+ * filter under `dynamic:facet:<field>`; fields that are absent or empty are cleared.
53
+ * Mirrors {@link syncDropdownFilterSources} for the faceted-filter use case.
54
+ */
55
+ syncFacetedFilters(selection: Record<string, string[]>): void;
56
+ /**
57
+ * Reconcile date-range facet sources from the `dateRanges` map emitted by
58
+ * `cx-faceted-filter` (keyed by field).
59
+ *
60
+ * - `date-picker` → single `=` filter on `fromDate`
61
+ * - `date-range` → `>=` on `fromDate` + `<=` on `toDate`
62
+ *
63
+ * When `dateFilterCompareFormat` is `'timestamp'`, values are converted to
64
+ * Unix ms via `new Date(...).getTime()` so numeric `>=`/`<=` comparison
65
+ * works when cell data is a timestamp. Default (`'iso'`) keeps ISO strings.
66
+ */
67
+ syncDateRangeFilters(dateRanges: SelectedDateRanges, dateFilterCompareFormat?: DateFilterCompareFormat): void;
47
68
  /**
48
69
  * Remove filters for a specific field, optionally scoped to a specific source.
49
70
  * @param field - The field name to remove filters for
@@ -0,0 +1,55 @@
1
+ import { ReactiveController, ReactiveControllerHost } from 'lit';
2
+ import { default as CxTable } from '../table';
3
+
4
+ export interface SelectAllState {
5
+ checked: boolean;
6
+ count: number;
7
+ indeterminate: boolean;
8
+ }
9
+ export declare class SelectAllController implements ReactiveController {
10
+ private readonly host;
11
+ private isSelectAllMode;
12
+ /** Remote select-all: IDs of rows explicitly unchecked by the user. */
13
+ private deselectedIds;
14
+ /** Remote individual selection: IDs of rows explicitly checked by the user. */
15
+ private selectedIdsForRemote;
16
+ private remoteTotalCount;
17
+ /**
18
+ * Cross-page selection count. Cannot derive from Tabulator's getSelectedRows()
19
+ * because in remote mode only the current page's rows exist in memory.
20
+ */
21
+ private selectedRowsCount;
22
+ /** Prevents rowSelectionChanged from syncing count during clearTabulatorSelection(). */
23
+ private selectionSyncSkip;
24
+ /** True while Tabulator is loading a new page — suppresses rowSelectionChanged. */
25
+ private isPageTransition;
26
+ constructor(host: ReactiveControllerHost & CxTable);
27
+ hostConnected(): void;
28
+ hostDisconnected(): void;
29
+ hostUpdated(): void;
30
+ /**
31
+ * Use this instead of tabulatorInstance.getSelectedRows().length when
32
+ * remote pagination is active — Tabulator only holds the current page
33
+ * in memory, so getSelectedRows() would return an incomplete count.
34
+ */
35
+ get selectedCount(): number;
36
+ get selectAllActive(): boolean;
37
+ get state(): SelectAllState;
38
+ canSelectRow(rowData: Record<string, unknown>): boolean;
39
+ private get isRemoteMode();
40
+ private get checked();
41
+ private get indeterminate();
42
+ private get activeEnabledRows();
43
+ selectAll(): void;
44
+ deselectAll(): void;
45
+ resetSelection(): void;
46
+ onTableInit(): void;
47
+ handleSelectAllChange(checked: boolean): void;
48
+ handleAjaxResponse(userAjaxResponse: CxTable['ajaxResponse'], url: string, config: unknown, response: unknown): any;
49
+ private handleDataLoading;
50
+ private handleRowSelectionChanged;
51
+ private handleDataLoaded;
52
+ private clearTabulatorSelection;
53
+ private purgeStaleSelectedRows;
54
+ private findDisabledFn;
55
+ }
@@ -8,15 +8,19 @@ import { default as CxSpace } from '../space/space.ts';
8
8
  import { default as CxSpinner } from '../spinner/spinner.ts';
9
9
  import { default as CxTooltip } from '../tooltip/tooltip.ts';
10
10
  import { default as CortexElement } from '../../../../base/src/cortex-element.ts';
11
+ import { default as CxFacetedFilter } from '../../../../molecules/src/faceted-filter/faceted-filter.ts';
11
12
  import { RowComponent, TabulatorFull as Tabulator } from '../../../../hybrid/table-core/src/index.ts';
12
13
  import { PaginationCounter } from '../../../../types/src/pagination';
13
- import { HoverMenuOptions, PaginationPlacement, SavedSearchItem, TableClipboardAction, TableDropdownFilterData, ColumnDefinition, Options, OptionsColumns, OptionsSpreadsheet, SheetDefinition, TableDataFormat } from '../../../../types/src/table';
14
+ import { DateFilterCompareFormat, HoverMenuOptions, HttpMethod, PaginationPlacement, TableClipboardAction, ColumnDefinition, Options, OptionsColumns, OptionsSpreadsheet, SheetDefinition, TableDataFormat } from '../../../../types/src/table';
15
+ import { SavedSearchItem, TableDropdownFilterData, TableGroupByOption } from '../../../../types/src/table-toolbar';
14
16
  import { CSSResultGroup, TemplateResult } from 'lit';
15
17
  import { CxTableFooter, CxTableRowActions, CxTableToolbar } from './components';
16
18
 
17
19
  /**
18
20
  * @summary Tables are used to display data in a structured format.
19
21
  *
22
+ * @description When `facet-config` and `ajax-url` are set, the table renders its own `cx-faceted-filter` in the toolbar and listens for `cx-faceted-filter-change`: checkbox-facet `selection` becomes `in` filters and `dateRanges` (from a `date-range` facet) become `>=` / `<=` filters, applied in both local and remote `filter-mode`. Hidden while rows are selected.
23
+ *
20
24
  * @csspart table - The table element.
21
25
  * @csspart pagination-footer - The footer container that holds the pagination control when `pagination-placement` is a `bottom*` value.
22
26
  *
@@ -76,6 +80,7 @@ export default class CxTable extends CortexElement {
76
80
  'cx-button': typeof CxButton;
77
81
  'cx-checkbox': typeof CxCheckbox;
78
82
  'cx-divider': typeof CxDivider;
83
+ 'cx-faceted-filter': typeof CxFacetedFilter;
79
84
  'cx-format-number': typeof CxFormatNumber;
80
85
  'cx-icon-button': typeof CxIconButton;
81
86
  'cx-select': typeof CxSelect;
@@ -90,7 +95,10 @@ export default class CxTable extends CortexElement {
90
95
  private horizontalOsInstance;
91
96
  private resizeObserver;
92
97
  private overflowObserver;
98
+ private readonly ajaxFacetsController;
93
99
  private readonly filterController;
100
+ private readonly ajaxFacetFilterController;
101
+ private readonly selectAllController;
94
102
  private readonly shadowRootAutoloader;
95
103
  private readonly tabulatorHolder;
96
104
  private readonly tabulatorElement;
@@ -242,6 +250,10 @@ export default class CxTable extends CortexElement {
242
250
  * Whether to display a export XML button
243
251
  */
244
252
  canExportXml: boolean;
253
+ /**
254
+ * Whether to display a export PDF button
255
+ */
256
+ canExportPdf: boolean;
245
257
  /**
246
258
  * Whether to display a export custom button
247
259
  */
@@ -273,10 +285,20 @@ export default class CxTable extends CortexElement {
273
285
  * The dropdown filters to display in the toolbar.
274
286
  */
275
287
  dropdownFilters: TableDropdownFilterData[];
288
+ /**
289
+ * The group by options to display in the toolbar.
290
+ */
291
+ groupByOptions: TableGroupByOption[];
276
292
  /**
277
293
  * The URL to load the data from.
278
294
  */
279
295
  ajaxURL: string | undefined;
296
+ /**
297
+ * HTTP method for the remote ajax data request. When `POST`, parameters
298
+ * (page/size/sort/search/filters) are sent in the JSON request body instead of the URL query string.
299
+ * Defaults to `GET`.
300
+ */
301
+ ajaxMethod: HttpMethod;
280
302
  /**
281
303
  * If you need more control over the url of the request that you can get from the ajaxURL and ajaxParams properties, the you can use the ajaxURLGenerator property to pass in a callback that will generate the URL for you.
282
304
  *
@@ -288,6 +310,17 @@ export default class CxTable extends CortexElement {
288
310
  */
289
311
  ajaxParams: Record<string, string> | undefined;
290
312
  ajaxResponse: Options['ajaxResponse'] | undefined;
313
+ /**
314
+ * Schema string for AJAX facets when using `ajax-url`.
315
+ * Format: `"FieldName|Display Name:type-option1-option2,FieldName:type-option"` (comma-separated tokens).
316
+ * - `FieldName` — key returned in `response.facets` (required).
317
+ * - `Display Name` — human-readable UI label, separated from the field name by `|` (optional; defaults to `FieldName`).
318
+ * - `type` — `checkbox`, `datePicker`, or `dateRangePicker`.
319
+ * - options — `single` / `multiple` (required for `checkbox`), `showTime` (date types), `showPreset` (`dateRangePicker` only).
320
+ * Checkbox facets are inferred automatically from the AJAX response when omitted; configure them only to set selection mode. Checkbox config does not create config-only facets.
321
+ * Example: `"country:checkbox-multiple,createdAt|Create Date:datePicker-showTime,updatedAt|Updated At:dateRangePicker-showTime-showPreset"`
322
+ */
323
+ facetConfig: string | undefined;
291
324
  /**
292
325
  * Lookup list to link fields expected by the server to their function
293
326
  * ```typescript
@@ -359,6 +392,13 @@ export default class CxTable extends CortexElement {
359
392
  * Whether to display the item count in the group header.
360
393
  */
361
394
  groupHeaderCount: boolean;
395
+ /**
396
+ * When true, the default group header reuses the grouped column's formatter
397
+ * (e.g. composite avatar + name) instead of rendering plain text. Defaults to
398
+ * false to preserve existing group-header behavior. Ignored when a custom
399
+ * `group-header` function is supplied.
400
+ */
401
+ groupHeaderUseFormatter: boolean;
362
402
  /**
363
403
  * The amount of pixels to indent group rows per level
364
404
  */
@@ -714,8 +754,22 @@ export default class CxTable extends CortexElement {
714
754
  * the externally set state, not the internal data fetch.
715
755
  */
716
756
  loading: boolean;
757
+ /**
758
+ * Enables the select-all checkbox in the toolbar.
759
+ */
760
+ canSelectAll: boolean;
761
+ /**
762
+ * The field used as the unique row identifier for cross-page selection tracking
763
+ * when `can-select-all` is active with remote pagination.
764
+ *
765
+ * Defaults to `'id'`. Set this to match your data's actual unique key
766
+ * (e.g. `'recordID'`) — otherwise deselected/selected IDs will not be
767
+ * tracked correctly across pages.
768
+ */
769
+ rowIdField: string;
717
770
  /** URL to fetch tabular data from. When set, the table fetches, parses, and populates columns and data. */
718
771
  dataUrl: string;
772
+ dateFilterCompareFormat: DateFilterCompareFormat;
719
773
  /** Format of the data at dataUrl. Use 'auto' to detect from URL extension or Content-Type header. */
720
774
  dataFormat: TableDataFormat;
721
775
  tabulatorInstance: Tabulator | null;
@@ -727,11 +781,22 @@ export default class CxTable extends CortexElement {
727
781
  private activeSearchValue;
728
782
  /** Monotonic counter to discard responses from superseded dataUrl fetches. */
729
783
  private dataUrlRequestId;
784
+ /** True when facets are available — either from facet-config or from an AJAX response. Controls toolbar visibility. */
785
+ hasFacets: boolean;
730
786
  get initialized(): boolean | undefined;
731
787
  get searchValue(): string;
732
788
  get isBottomPlacement(): boolean;
733
789
  get showPaginationFooter(): boolean;
734
790
  get showTableToolbar(): string | boolean;
791
+ /** True when all active enabled rows are selected (local) or select-all mode with no exclusions (remote). */
792
+ get selectAllActive(): boolean;
793
+ /** Effective selected count — cross-page total in remote select-all mode, Tabulator count otherwise. */
794
+ get selectedCount(): number;
795
+ selectAll(): void;
796
+ deselectAll(): void;
797
+ resetSelection(): void;
798
+ canSelectRow(rowData: Record<string, unknown>): boolean;
799
+ handleSelectableRowsCheck(row: RowComponent): boolean;
735
800
  get clipboardOption(): Options['clipboard'];
736
801
  initTable(): Promise<void>;
737
802
  handleUseOverlayScrollbarChange(): void;
@@ -776,6 +841,7 @@ export default class CxTable extends CortexElement {
776
841
  handleNoColumnPlaceholderTextChange(): void;
777
842
  handleGroupByChange(): void;
778
843
  handleGroupHeaderChange(): void;
844
+ handleGroupHeaderUseFormatterChange(): void;
779
845
  handleGroupValuesChange(): void;
780
846
  handleGroupLoadMoreMetaChange(): void;
781
847
  handlePaginationSizeChange(): void;
@@ -794,10 +860,13 @@ export default class CxTable extends CortexElement {
794
860
  handleDataUrlChange(): void;
795
861
  private handleTableExport;
796
862
  private handleDropdownFilterChange;
863
+ private handleTableGroupByChange;
864
+ private handleSelectAllChange;
797
865
  private streamCsvData;
798
866
  private streamJsonData;
799
867
  private streamXmlData;
800
868
  private loadFromDataUrl;
869
+ private handleTabulatorAjaxResponse;
801
870
  render(): TemplateResult;
802
871
  }
803
872
  declare global {
@@ -1,4 +1,4 @@
1
- import { TableDropdownFilterDataOption } from '../../types/src/table';
1
+ import { TableDropdownFilterDataOption } from '../../types/src/table-toolbar';
2
2
 
3
3
  export type CxTableDropdownFilterChangeEvent = CustomEvent<{
4
4
  data: {
@@ -1,7 +1,7 @@
1
1
  export type CxTableExportEvent = CustomEvent<{
2
2
  data?: unknown[];
3
3
  searchValue?: string;
4
- type: 'csv' | 'xml' | 'custom' | 'report';
4
+ type: 'csv' | 'xml' | 'custom' | 'report' | 'pdf';
5
5
  }>;
6
6
  declare global {
7
7
  interface GlobalEventHandlersEventMap {
@@ -0,0 +1,8 @@
1
+ export type CxTableGroupByChangeEvent = CustomEvent<{
2
+ id: string | null;
3
+ }>;
4
+ declare global {
5
+ interface GlobalEventHandlersEventMap {
6
+ 'cx-table-group-by-change': CxTableGroupByChangeEvent;
7
+ }
8
+ }
@@ -0,0 +1,8 @@
1
+ export type CxTableSelectAllChangeEvent = CustomEvent<{
2
+ checked: boolean;
3
+ }>;
4
+ declare global {
5
+ interface GlobalEventHandlersEventMap {
6
+ 'cx-table-select-all-change': CxTableSelectAllChangeEvent;
7
+ }
8
+ }
@@ -179,8 +179,10 @@ export * from './cx-table-advanced-search-click';
179
179
  export * from './cx-table-data-load';
180
180
  export * from './cx-table-dropdown-filter-change';
181
181
  export * from './cx-table-export';
182
+ export * from './cx-table-group-by-change';
182
183
  export * from './cx-table-row-action-click';
183
184
  export * from './cx-table-save-search-select';
185
+ export * from './cx-table-select-all-change';
184
186
  export * from './cx-table-switch-change';
185
187
  export * from './cx-table-validation-change';
186
188
  export * from './cx-time-based-change';
@@ -12,7 +12,7 @@ declare class TabulatorFull extends Tabulator implements ITabulatorFull {
12
12
  /**
13
13
  * You can use the setGroupBy function to change the fields that rows are grouped by. This function has one argument and takes the same values as passed to the groupBy setup option.
14
14
  */
15
- setGroupBy: (groups: GroupArg) => void;
15
+ setGroupBy: (groups: GroupArg | false) => void;
16
16
  /**
17
17
  * You can use the setGroupHeader function to change the header generation function for each group. This function has one argument and takes the same values as passed to the groupHeader setup option.
18
18
  */
@@ -0,0 +1,5 @@
1
+ import { AvatarFormatterParams } from '../../../../../../../../types/src/table';
2
+ import { default as CellComponent } from '../../../../core/cell/CellComponent';
3
+ import { default as Format } from '../../Format';
4
+
5
+ export default function avatar(this: Format, cell: CellComponent, formatterParams: AvatarFormatterParams): HTMLElement | string;