@orangelogic/design-system 2.139.0 → 2.141.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 (85) hide show
  1. package/library/chunks/{asset-link-format.oOC8fxvV.js → asset-link-format.BDuHqEN5.js} +548 -493
  2. package/library/chunks/{button.J4LDuhyW.js → button.C6-GrLyD.js} +1 -1
  3. package/library/chunks/{checkbox.Cjcht4xR.js → checkbox.i5dgRvaf.js} +1 -1
  4. package/library/chunks/{color-swatch-group.CYI2N8gp.js → color-swatch-group.BqJHjmG5.js} +1099 -1026
  5. package/library/chunks/{confirm-popover.DV5q0KyE.js → confirm-popover.CTdjw4Mi.js} +1 -1
  6. package/library/chunks/{document-viewer.Ga2Ppgit.js → document-viewer.BqZzhJyR.js} +1267 -1245
  7. package/library/chunks/{dom.acWb8KCK.js → dom.CU_mBy9D.js} +1 -1
  8. package/library/chunks/{file-on-demand.C3ib6J00.js → file-on-demand.Bxq3-Dk1.js} +10 -10
  9. package/library/chunks/{folder-select.BQXuKb-8.js → folder-select.CpK1RX9O.js} +4 -4
  10. package/library/chunks/{form.K1XOtu3S.js → form.BSqXLytJ.js} +1 -1
  11. package/library/chunks/{input.DID1aXiO.js → input.ClJ4MEsk.js} +1 -1
  12. package/library/chunks/{pagination.BNU2UmTy.js → pagination.CNeaChqP.js} +2 -2
  13. package/library/chunks/{string.CjJ09HK3.js → string.BmBJ_BLT.js} +38 -34
  14. package/library/chunks/{tab-group.5O3lqvyG.js → tab-group.COQGzlw4.js} +2 -2
  15. package/library/chunks/{tree.CbwFiRJI.js → tree.DeIv5gWv.js} +1 -1
  16. package/library/components/asset-link-format.js +2 -2
  17. package/library/components/atoms.js +7 -7
  18. package/library/components/audio.js +6 -3
  19. package/library/components/border-input-group.js +1 -1
  20. package/library/components/button.js +2 -2
  21. package/library/components/checkbox.js +2 -2
  22. package/library/components/color-picker.js +3 -3
  23. package/library/components/color-swatch-group.js +1 -1
  24. package/library/components/confirm-popover.js +2 -2
  25. package/library/components/corner-position-input-group.js +1 -1
  26. package/library/components/diff.js +1 -1
  27. package/library/components/document-viewer.js +1 -1
  28. package/library/components/dropdown.js +1 -1
  29. package/library/components/dynamic-select.js +1 -1
  30. package/library/components/element-clamp.js +1 -1
  31. package/library/components/file-on-demand.js +7 -7
  32. package/library/components/folder-select.js +3 -3
  33. package/library/components/input.js +2 -2
  34. package/library/components/line-clamp.js +37 -31
  35. package/library/components/molecules.js +2 -2
  36. package/library/components/organisms.js +3 -3
  37. package/library/components/padding-input-group.js +1 -1
  38. package/library/components/pagination.js +3 -3
  39. package/library/components/radio-group.js +1 -1
  40. package/library/components/range.js +1 -1
  41. package/library/components/select.js +1 -1
  42. package/library/components/shadow-input-group.js +1 -1
  43. package/library/components/share-option-list.js +1 -1
  44. package/library/components/size-input-group.js +1 -1
  45. package/library/components/switch.js +1 -1
  46. package/library/components/tab-group.js +3 -3
  47. package/library/components/textarea.js +1 -1
  48. package/library/components/timecode.js +1 -1
  49. package/library/components/tree-item.js +2 -2
  50. package/library/components/tree.js +1 -1
  51. package/library/components/types.js +17490 -17591
  52. package/library/package.json +1 -1
  53. package/library/packages/atoms/src/components/audio/audio.d.ts +5 -0
  54. package/library/packages/atoms/src/components/line-clamp/line-clamp.d.ts +6 -0
  55. package/library/packages/events/src/cx-annotator-tool-change.d.ts +11 -0
  56. package/library/packages/events/src/events.d.ts +1 -0
  57. package/library/packages/hybrid/book-reader/src/react/constant.d.ts +2 -0
  58. package/library/packages/hybrid/book-reader/src/react/types.d.ts +2 -2
  59. package/library/packages/hybrid/table-core/src/table/components/table-toolbar/table-toolbar.d.ts +24 -4
  60. package/library/packages/hybrid/table-core/src/table/table.d.ts +33 -1
  61. package/library/packages/hybrid/table-core/src/tabulator-tables/modules/Validate/Validate.d.ts +10 -0
  62. package/library/packages/molecules/src/annotator/annotator.d.ts +2 -0
  63. package/library/packages/molecules/src/index.d.ts +1 -0
  64. package/library/packages/organisms/src/annotator-comment/annotator-comment.d.ts +2 -0
  65. package/library/packages/organisms/src/asset-link-format/asset-link-format.d.ts +9 -0
  66. package/library/packages/organisms/src/asset-link-format/components/asset-link-format-crop/asset-link-format-crop.d.ts +0 -4
  67. package/library/packages/organisms/src/asset-link-format/components/asset-link-format-quality/asset-link-format-quality.d.ts +0 -4
  68. package/library/packages/organisms/src/asset-link-format/components/asset-link-format-resize/asset-link-format-resize.d.ts +0 -4
  69. package/library/packages/organisms/src/asset-link-format/components/asset-link-format-rotation/asset-link-format-rotation.d.ts +5 -2
  70. package/library/packages/organisms/src/index.d.ts +0 -1
  71. package/library/packages/types/src/table.d.ts +8 -0
  72. package/library/packages/utils/src/string/string.d.ts +1 -0
  73. package/library/react-web-component.d.ts +62 -50
  74. package/library/utils.js +42 -41
  75. package/package.json +1 -1
  76. package/library/packages/organisms/src/_v1/comment-v1/extensions/time.d.ts +0 -63
  77. /package/library/packages/{organisms → molecules}/src/multi-select/components/board/board.d.ts +0 -0
  78. /package/library/packages/{organisms → molecules}/src/multi-select/components/board/board.styles.d.ts +0 -0
  79. /package/library/packages/{organisms → molecules}/src/multi-select/components/board/board.utils.d.ts +0 -0
  80. /package/library/packages/{organisms → molecules}/src/multi-select/components/board-list-item/board-list-item.d.ts +0 -0
  81. /package/library/packages/{organisms → molecules}/src/multi-select/components/board-list-item/board-list-item.styles.d.ts +0 -0
  82. /package/library/packages/{organisms → molecules}/src/multi-select/multi-select.d.ts +0 -0
  83. /package/library/packages/{organisms → molecules}/src/multi-select/multi-select.styles.d.ts +0 -0
  84. /package/library/packages/{organisms → molecules}/src/multi-select/multi-select.utils.d.ts +0 -0
  85. /package/library/packages/organisms/src/{annotator-comment → comment}/extensions/time.d.ts +0 -0
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@orangelogic/design-system",
3
3
  "type": "module",
4
- "version": "2.139.0",
4
+ "version": "2.141.0",
5
5
  "license": "UNLICENSED",
6
6
  "types": "library/types.d.ts",
7
7
  "scripts": {
@@ -110,6 +110,11 @@ export default class CxAudio extends ResizableElement {
110
110
  private audioSrc;
111
111
  /** Whether autoplay is deferred until the in-point seek completes after durationchange. */
112
112
  private pendingAutoplay;
113
+ /**
114
+ * Resolved filename override (e.g. an asset title fetched by subclasses). Falls back
115
+ * to `name` in the footer display when empty, without touching the `name` property.
116
+ */
117
+ protected resolvedName: string;
113
118
  private get clampedInPoint();
114
119
  runConnectedCallback(): void;
115
120
  disconnectedCallback(): void;
@@ -33,6 +33,11 @@ export default class CxLineClamp extends CortexElement {
33
33
  * The tooltip to show. When this prop is set, the component will always show a tooltip.
34
34
  */
35
35
  tooltip: string;
36
+ /**
37
+ * Consumer-provided tooltip text, shown only when the content is clamped. Overrides the
38
+ * auto-derived (scraped) text; leave empty ('') to fall back to it.
39
+ */
40
+ clampedTooltip: string;
36
41
  disabledTooltip: boolean;
37
42
  disabledHoverBridge: boolean;
38
43
  /** The flip boundary for the tooltip. */
@@ -81,6 +86,7 @@ export default class CxLineClamp extends CortexElement {
81
86
  isTextClamped(element: Element): boolean;
82
87
  handleResize(): void;
83
88
  toggleShowingMore(): void;
89
+ private get resolvedTooltipContent();
84
90
  render(): TemplateResult<1>;
85
91
  }
86
92
  declare global {
@@ -0,0 +1,11 @@
1
+ import { AnnotatorTool } from '../../types/src/annotator';
2
+
3
+ export type CxAnnotatorToolChangeEvent = CustomEvent<{
4
+ active: boolean;
5
+ tool: AnnotatorTool;
6
+ }>;
7
+ declare global {
8
+ interface GlobalEventHandlersEventMap {
9
+ 'cx-annotator-tool-change': CxAnnotatorToolChangeEvent;
10
+ }
11
+ }
@@ -10,6 +10,7 @@ export * from './cx-after-collapse';
10
10
  export * from './cx-after-expand';
11
11
  export * from './cx-after-hide';
12
12
  export * from './cx-after-show';
13
+ export * from './cx-annotator-tool-change';
13
14
  export * from './cx-asset-data-display-slot-change';
14
15
  export * from './cx-asset-format-picker-select';
15
16
  export * from './cx-asset-picker-delete';
@@ -18,6 +18,7 @@ export declare const IMAGES_LOAD_OFFSET = 15;
18
18
  export declare const MAX_STORED_PAGES = 10;
19
19
  export declare const MAX_CANVAS_SCALE = 2;
20
20
  export declare const MIN_CANVAS_SCALE = 1;
21
+ export declare const MAX_CANVAS_PIXELS: number;
21
22
  export declare const SPECIAL_SCALE_OPTION: {
22
23
  ACTUAL_SIZE: string;
23
24
  PAGE_FIT: string;
@@ -28,6 +29,7 @@ export declare const CORTEX_VIEW_MODE_MAP: {
28
29
  };
29
30
  export declare const DEBOUNCE_TIME = 300;
30
31
  export declare const THROTTLE_TIME = 700;
32
+ export declare const SCALE_RENDER_DEBOUNCE_TIME = 250;
31
33
  export declare const SCALE_OPTIONS: {
32
34
  label: string;
33
35
  value: number;
@@ -113,7 +113,7 @@ export type TextItem = {
113
113
  width: number;
114
114
  };
115
115
  export type PageView = {
116
- imageData?: ImageData | null;
116
+ bitmap?: ImageBitmap | null;
117
117
  isRendering?: boolean;
118
118
  loading: boolean;
119
119
  page: PDFPageProxy | null;
@@ -131,7 +131,7 @@ export type BookContext = {
131
131
  [key: number]: PageView;
132
132
  };
133
133
  requestPDFPageProxy: (pageNumbers: number[]) => void;
134
- requestRenderPDFPage: (pageNumber: number) => Promise<null | ImageData | undefined>;
134
+ requestRenderPDFPage: (pageNumber: number) => Promise<null | ImageBitmap | undefined>;
135
135
  } | null;
136
136
  export declare enum BookReaderMode {
137
137
  IMAGE = "Image",
@@ -24,14 +24,13 @@ import { default as CxTableSavedSearchDropdown } from './table-saved-search-drop
24
24
  *
25
25
  * @slot label - Optional label content that replaces the label property fallback.
26
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.
27
+ * @slot add-action - Replaces the default add button. When empty the default add button (controlled by `can-add`) is rendered unchanged.
28
+ * @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. Set `has-dynamic-filter` when slotting content here directly, so the actions row is rendered to receive it.
28
29
  *
29
30
  * @event {{ value: string }} cx-search - Emitted when the search value is submitted or cleared.
30
31
  * @event cx-table-advanced-search-click - Emitted when the advanced search action is clicked.
31
32
  * @event cx-add - Emitted when the add action is clicked.
32
33
  * @event {{ type: 'csv' | 'xml' | 'custom' | 'report' }} cx-table-export - Emitted when an export action is selected.
33
- *
34
- * @cssproperty [--header-pagination-min-height=var(--cx-input-height-medium)] - Reserved height for the label/pagination row when pagination is enabled.
35
34
  */
36
35
  export default class CxTableToolbar extends CortexElement {
37
36
  static readonly styles: CSSResultGroup;
@@ -154,6 +153,18 @@ export default class CxTableToolbar extends CortexElement {
154
153
  * height when pagination moves between `top-*`/`bottom-*` placements.
155
154
  */
156
155
  pagination: boolean;
156
+ /**
157
+ * When true, an empty header row collapses instead of reserving space.
158
+ * Ignored while the header has a label or a top-placed paginator — real
159
+ * content always keeps the row visible.
160
+ */
161
+ noHeaderRowReserve: boolean;
162
+ /**
163
+ * Set by cx-table when a dynamic (faceted) filter is slotted into
164
+ * `dialog-dynamic-filter`. A reactive property (not slot detection) so the
165
+ * actions row reliably renders when facets load asynchronously.
166
+ */
167
+ hasDynamicFilter: boolean;
157
168
  private renderSelectAll;
158
169
  private handleSearchSubmit;
159
170
  private handleAdvancedSearchClick;
@@ -170,7 +181,16 @@ export default class CxTableToolbar extends CortexElement {
170
181
  private renderGroupByDropdown;
171
182
  private renderExportDropdown;
172
183
  private renderDropdownFilters;
173
- private renderPagination;
184
+ private renderHeaderRow;
185
+ /**
186
+ * Whether the actions row has anything to show. When false the row is not
187
+ * rendered, so its inter-row gap does not add empty space below the header
188
+ * (e.g. a pagination-only table). Driven entirely by reactive properties.
189
+ */
190
+ private get hasHeaderActions();
191
+ /** True when either the default add button or a custom `add-action` slot should render. */
192
+ get hasAddAction(): boolean;
193
+ private renderHeaderActions;
174
194
  render(): import('lit').TemplateResult<1>;
175
195
  }
176
196
  declare global {
@@ -63,7 +63,7 @@ import { CxTableFooter, CxTableRowActions, CxTableToolbar } from './components';
63
63
  * @cssproperty [--table-active-cell-border-color=var(--cx-color-neutral-200)] - The border color of the active/hover range overlay cell outline.
64
64
  * @cssproperty [--table-selected-cell-border-width=1px] - The border width of the active selected cell.
65
65
  * @cssproperty [--table-selected-cell-border-style=solid] - The border style of the active selected cell.
66
- * @cssproperty [--header-pagination-min-height=var(--cx-input-height-medium)] - Reserved height for the toolbar's label/pagination row (`cx-table-toolbar`) when `pagination` is enabled, regardless of `pagination-placement`. Set to `0` to remove the reservation.
66
+ * @slot add-action - Passed through to `cx-table-toolbar`'s `add-action` slot. Replaces the default add button when provided; when empty the toolbar's default add button (controlled by `can-add`) is rendered unchanged.
67
67
  *
68
68
  * @event {{ args: any[] }} cx-table.[event_name] - Emitted when the event with such name is emitted on the table.
69
69
  * Must register the event listener on the table element to receive the event.
@@ -76,6 +76,7 @@ export default class CxTable extends CortexElement {
76
76
  #private;
77
77
  static readonly styles: CSSResultGroup;
78
78
  private readonly localize;
79
+ private readonly hasSlotController;
79
80
  static readonly dependencies: {
80
81
  'cx-button': typeof CxButton;
81
82
  'cx-checkbox': typeof CxCheckbox;
@@ -676,6 +677,14 @@ export default class CxTable extends CortexElement {
676
677
  * Where to place the pagination control relative to the table.
677
678
  */
678
679
  paginationPlacement: PaginationPlacement;
680
+ /**
681
+ * When true, the toolbar does not reserve an empty header row. A label or a
682
+ * top-placed paginator still shows (content always wins) — this only removes
683
+ * the reserved blank space, letting the table sit flush. Useful when the host
684
+ * renders its own header/label outside the table (e.g. a bottom-paginated
685
+ * table).
686
+ */
687
+ noHeaderRowReserve: boolean;
679
688
  /**
680
689
  * The hover menu options.
681
690
  */
@@ -772,6 +781,12 @@ export default class CxTable extends CortexElement {
772
781
  dateFilterCompareFormat: DateFilterCompareFormat;
773
782
  /** Format of the data at dataUrl. Use 'auto' to detect from URL extension or Content-Type header. */
774
783
  dataFormat: TableDataFormat;
784
+ /**
785
+ * When true, a `dataUrl` load keeps existing `columns` as-is instead of auto-populating them
786
+ * from the loaded file's headers. Has no effect when `columns` is empty — auto-detection still
787
+ * applies so the table has something to render.
788
+ */
789
+ preserveColumnsOnLoad: boolean;
775
790
  tabulatorInstance: Tabulator | null;
776
791
  /**
777
792
  * In case the table is re-initialized, we need to re-register the event listeners.
@@ -787,6 +802,15 @@ export default class CxTable extends CortexElement {
787
802
  get searchValue(): string;
788
803
  get isBottomPlacement(): boolean;
789
804
  get showPaginationFooter(): boolean;
805
+ /**
806
+ * Whether pagination alone should render the toolbar. A top-placed paginator
807
+ * sits in the toolbar header row, and by default the empty header row is
808
+ * reserved. A bottom paginator lives in the footer, so once that reserve is
809
+ * opted out via `no-header-row-reserve` there is no reason to render it.
810
+ */
811
+ private get paginationNeedsToolbar();
812
+ /** True when either the default add button or a custom `add-action` slot should render. */
813
+ get hasAddAction(): boolean;
790
814
  get showTableToolbar(): string | boolean;
791
815
  /** True when all active enabled rows are selected (local) or select-all mode with no exclusions (remote). */
792
816
  get selectAllActive(): boolean;
@@ -862,11 +886,19 @@ export default class CxTable extends CortexElement {
862
886
  private handleDropdownFilterChange;
863
887
  private handleTableGroupByChange;
864
888
  private handleSelectAllChange;
889
+ /**
890
+ * Controlled by `preserveColumnsOnLoad`: when enabled and the consumer already defined
891
+ * `columns` (e.g. a custom column with its own `mutator`), a `dataUrl` load keeps them as-is.
892
+ * Otherwise columns are auto-detected from the loaded data's headers, same as before.
893
+ */
894
+ private resolveColumnsAfterLoad;
865
895
  private streamCsvData;
866
896
  private streamJsonData;
867
897
  private streamXmlData;
868
898
  private loadFromDataUrl;
869
899
  private handleTabulatorAjaxResponse;
900
+ private renderToolbar;
901
+ private renderPaginationFooter;
870
902
  render(): TemplateResult;
871
903
  }
872
904
  declare global {
@@ -29,6 +29,8 @@ export default class Validate extends Module {
29
29
  * row/column (detached mocks) key by the cell itself.
30
30
  */
31
31
  private readonly invalidState;
32
+ /** Columns declaring `mutateOnValidate` — re-mutated whenever the row's validation state changes. */
33
+ private readonly mutateOnValidateColumns;
32
34
  get invalidCells(): Cell[];
33
35
  set invalidCells(cells: Cell[]);
34
36
  /**
@@ -60,6 +62,8 @@ export default class Validate extends Module {
60
62
  dataProcessed(): void;
61
63
  cellIsValid(cell: Cell): boolean;
62
64
  cellValidate(cell: Cell): CellValidationFailure[] | boolean;
65
+ /** Current validation failures for this cell — empty when the cell is valid or unvalidated. */
66
+ getCellValidationErrors(cell: Cell): CellValidationFailure[];
63
67
  columnValidate(column: Column): ICellComponent[] | boolean;
64
68
  rowValidate(row: Row): ICellComponent[] | boolean;
65
69
  userClearCellValidation(cells?: ICellComponent | ICellComponent[]): void;
@@ -80,6 +84,12 @@ export default class Validate extends Module {
80
84
  validate(validators: ValidatorConfig[] | false | undefined, cell: Cell, value: unknown): CellValidationFailure[] | boolean;
81
85
  getInvalidCells(): ICellComponent[];
82
86
  clearValidation(cell: Cell): void;
87
+ /**
88
+ * Forces every `mutateOnValidate` column to re-run its mutator (and re-render) for this row —
89
+ * called after this row's validation state changes, so a column aggregating row-level errors
90
+ * (e.g. via `getValidationErrors()` on sibling cells) stays in sync. No-op when no column opts in.
91
+ */
92
+ private refreshMutateOnValidateColumns;
83
93
  private rowKeyOf;
84
94
  private columnKeyOf;
85
95
  private getInvalidRecord;
@@ -8,6 +8,8 @@ import { default as CxAnnotatorLineWeight } from './components/annotator-line-we
8
8
 
9
9
  /**
10
10
  * @summary CxAnnotator - A component that allows users to annotate a specific element.
11
+ *
12
+ * @event {{ active: boolean; tool: AnnotatorTool }} cx-annotator-tool-change - Fired when a drawing tool is selected (`active: true`) or the active tool icon is clicked again to return to select mode (`active: false`). `tool` is the `AnnotatorTool` value (`arrow-marker`, `line-marker`, `rectangle-marker`, `freehand-marker`).
11
13
  */
12
14
  export default class CxAnnotator extends CortexElement {
13
15
  static readonly styles: CSSResultGroup;
@@ -25,6 +25,7 @@ export { default as CxGraphView } from './graph-view/graph-view';
25
25
  export { default as CxIconPicker } from './icon-picker/icon-picker';
26
26
  export { default as CxMasonry } from './masonry/masonry';
27
27
  export { default as CxMentions } from './mentions/mentions';
28
+ export { default as CxMultiSelect } from './multi-select/multi-select';
28
29
  export { default as CxPaddingInputGroup } from './padding-input-group/padding-input-group';
29
30
  export { default as CxPageOutline } from './page-outline/page-outline';
30
31
  export { default as CxPdfViewerToolbar } from './pdf-viewer-toolbar/pdf-viewer-toolbar';
@@ -12,6 +12,8 @@ declare global {
12
12
  }
13
13
  /**
14
14
  * @summary CxAnnotatorComment - An extension of the CxComment component that allows users to annotate a specific element.
15
+ *
16
+ * @event {{ active: boolean; tool: AnnotatorTool }} cx-annotator-tool-change - Emitted via the inner `cx-annotator` when a drawing tool is selected (`active: true`) or the active tool icon is clicked again to return to select mode (`active: false`). `tool` is the `AnnotatorTool` value (`arrow-marker`, `line-marker`, `rectangle-marker`, `freehand-marker`). Bubbles and composed.
15
17
  */
16
18
  export default class CxAnnotatorComment extends CxComment {
17
19
  static readonly styles: import('lit').CSSResult[];
@@ -248,6 +248,15 @@ export default class CxAssetLinkFormat extends CortexElement {
248
248
  width: number;
249
249
  };
250
250
  };
251
+ /**
252
+ * Returns the last applied rotation value. Without an asset, rotation applies replace
253
+ * (dedupe) a single Rotate entry, so this reflects the exact committed value — used to
254
+ * know when the rotation panel has no pending change to apply, and to restore this value
255
+ * when the panel is closed without applying. With an asset, rotation applies are
256
+ * cumulative deltas reprocessed by the backend, so there is no single "last applied"
257
+ * value and this always returns 0.
258
+ */
259
+ get lastRotation(): number;
251
260
  /**
252
261
  * Returns the transformation string for the asset link.
253
262
  */
@@ -106,10 +106,6 @@ export default class CxAssetLinkFormatCrop extends CortexElement {
106
106
  * Whether the apply button is disabled.
107
107
  */
108
108
  disabledApply: boolean;
109
- /**
110
- * When true, shows the apply button. When false (default), changes take effect immediately (standalone mode).
111
- */
112
- canApply: boolean;
113
109
  /**
114
110
  * The last applied crop settings for each unit.
115
111
  * This is used to restore the last applied settings when the component is closed.
@@ -48,10 +48,6 @@ export default class CxAssetLinkFormatQuality extends CortexElement {
48
48
  * @default false
49
49
  */
50
50
  loading: boolean;
51
- /**
52
- * When true, shows the apply button. When false (default), changes take effect immediately (standalone mode).
53
- */
54
- canApply: boolean;
55
51
  scopedValue: number;
56
52
  /**
57
53
  * A computed property that checks if the current quality value is invalid.
@@ -104,10 +104,6 @@ export default class CxAssetLinkFormatResize extends CortexElement {
104
104
  * @default false
105
105
  */
106
106
  loading: boolean;
107
- /**
108
- * When true, shows the apply button. When false (default), changes take effect immediately (standalone mode).
109
- */
110
- canApply: boolean;
111
107
  /**
112
108
  * Whether to keep the aspect ratio when changing width or height.
113
109
  * This is used to automatically adjust the other dimension when one is changed.
@@ -57,9 +57,12 @@ export default class CxAssetLinkFormatRotation extends CortexElement {
57
57
  */
58
58
  loading: boolean;
59
59
  /**
60
- * When true, shows the apply button. When false (default), changes take effect immediately (standalone mode).
60
+ * The last applied rotation value. Used to know when there is no pending change to apply
61
+ * (instead of assuming 0 always means "unchanged"), and to restore this value when the
62
+ * details section is closed without applying.
63
+ * @default 0
61
64
  */
62
- canApply: boolean;
65
+ lastAppliedValue: number;
63
66
  handleOpenChange(): void;
64
67
  private handleRotationChange;
65
68
  private handleButtonClick;
@@ -19,7 +19,6 @@ export { default as CxFileOnDemand } from './file-on-demand/file-on-demand';
19
19
  export { default as CxFindAndReplace } from './find-and-replace/find-and-replace';
20
20
  export { default as CxLightbox } from './lightbox/lightbox';
21
21
  export { default as CxListEditor } from './list-editor/list-editor';
22
- export { default as CxMultiSelect } from './multi-select/multi-select';
23
22
  export { default as CxSpecialCharactersDialog } from './special-characters-dialog/special-characters-dialog';
24
23
  export { default as CxTemplateSwitcher } from './template-switcher/template-switcher';
25
24
  export { default as CxTextToSpeech } from './text-to-speech/text-to-speech';
@@ -152,6 +152,7 @@ export interface ICellComponent {
152
152
  getType(): string;
153
153
  getField(): string;
154
154
  getColumn(): IColumnComponent;
155
+ getValidationErrors(): CellValidationFailure[];
155
156
  setValue(value: any, mutate?: boolean): void;
156
157
  restoreOldValue(): void;
157
158
  restoreInitialValue(): void;
@@ -2102,6 +2103,13 @@ export interface ColumnDefinition extends ColumnLayout, CellCallbacks, Formatter
2102
2103
  /** only called when data is changed via a user editing a cell. */
2103
2104
  mutatorClipboard?: CustomMutator;
2104
2105
  mutatorClipboardParams?: CustomMutatorParams;
2106
+ /**
2107
+ * When true, this column's mutator is re-run (and the cell re-rendered) whenever any cell's
2108
+ * validation state changes elsewhere in the same row — cell edit, `validateAsync()`/`validate()`,
2109
+ * or `clearCellValidation()`. Use this for a column that aggregates row-level validation errors,
2110
+ * e.g. reading sibling cells' `getValidationErrors()` inside the `mutator`.
2111
+ */
2112
+ mutateOnValidate?: boolean;
2105
2113
  /**
2106
2114
  * Accessors are used to alter data as it is extracted from the table, through commands, the clipboard, or download.
2107
2115
  *
@@ -148,6 +148,7 @@ export declare function reducePathToDirectChild(full: string, base: string): str
148
148
  export declare function formatTimeToSeconds(timeString: string, options?: TimeFormatOptions): number;
149
149
  export declare function extractExtension(filename: string): string | null;
150
150
  export declare function sanitizeHTML(html: string): string;
151
+ export declare function htmlToPlainText(html: string): string;
151
152
  export declare function safeString(value: any): string;
152
153
  export declare function emptyToSpace(value: any): string;
153
154
  export declare function isGalleryItemCardType(value: unknown): value is GalleryItemCardType;