gridjs-spreadsheet 26.7.1 → 26.8.1

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.
@@ -26,13 +26,13 @@
26
26
  inkscape:pageopacity="0.0"
27
27
  inkscape:pagecheckerboard="0"
28
28
  showgrid="false"
29
- inkscape:zoom="5.802608"
30
- inkscape:cx="118.05037"
31
- inkscape:cy="125.547"
29
+ inkscape:zoom="2.9236653"
30
+ inkscape:cx="118.68663"
31
+ inkscape:cy="116.80543"
32
32
  inkscape:window-width="1296"
33
33
  inkscape:window-height="732"
34
- inkscape:window-x="221"
35
- inkscape:window-y="33"
34
+ inkscape:window-x="234"
35
+ inkscape:window-y="30"
36
36
  inkscape:window-maximized="0"
37
37
  inkscape:current-layer="g48"
38
38
  inkscape:showpageshadow="2"
@@ -999,7 +999,14 @@
999
999
  xlink:href="data:image/png;base64,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
klu3dJ9tAAAAAElFTkSuQmCC
"
1000
1000
  id="image1-0"
1001
1001
  x="-58.971634"
1002
- y="32.29039" /></g>&#10;<g
1002
+ y="32.29039" /><image
1003
+ width="16.223984"
1004
+ height="9.5827017"
1005
+ preserveAspectRatio="none"
1006
+ xlink:href="data:image/png;base64,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&#10;+yIAAAAASUVORK5CYII=&#10;"
1007
+ id="image1-03"
1008
+ x="-37.960953"
1009
+ y="32.470234" /></g>&#10;<g
1003
1010
  id="gchecksyntax"
1004
1011
  transform="matrix(0.0135 ,0,0,0.0135 ,18.5,108)">&#10; <path
1005
1012
  d="M189.44 5.632c-37.888 6.144-96.256 35.328-122.368 61.44-26.624 27.136-55.296 84.992-61.44 126.464-10.24 64.512 10.24 127.488 58.88 179.712 49.152 53.248 108.544 76.8 176.64 70.144 107.008-9.728 185.344-83.968 200.704-189.44C462.848 108.544 334.848-17.408 189.44 5.632z m-5.12 115.712l40.96 38.912 40.448-38.912c34.304-33.792 43.008-39.424 57.856-39.424 31.232 0 51.712 35.84 35.84 64-3.072 5.632-20.48 25.088-38.912 43.008l-33.28 33.28 37.888 39.424c20.48 21.504 38.4 45.056 39.424 51.712 5.12 31.232-20.48 56.832-51.2 51.2-7.168-1.536-30.72-19.456-52.224-39.936l-38.912-37.376-33.28 33.28c-17.92 18.432-37.376 35.84-43.008 38.912-28.16 15.872-64-4.608-64-35.84 0-14.848 5.632-23.552 39.424-57.856l38.912-40.448-38.912-40.96C87.04 148.992 81.92 140.8 81.92 125.44c0-24.064 19.968-43.52 44.544-43.52 14.336 0 23.552 6.144 57.856 39.424zM512 119.808v53.248l119.296 2.048c118.784 1.536 118.784 1.536 148.48 15.872C838.656 220.16 849.92 254.976 849.92 405.504V512h107.52V372.736c0-157.184-3.072-176.64-34.816-224.256-11.264-16.896-30.208-35.84-47.104-47.104-47.616-31.744-67.072-34.816-224.256-34.816H512v53.248zM66.56 651.264c0 157.184 3.072 176.64 34.816 224.256 11.264 16.896 30.208 35.84 47.104 47.104 47.616 31.744 67.072 34.816 224.256 34.816H512v-107.52H406.016c-151.04 0-185.856-11.264-215.04-70.144-14.336-29.696-14.336-29.696-15.872-148.992l-2.048-118.784H66.56v139.264zM752.64 584.192c-29.184 5.632-79.872 31.232-100.864 51.2-40.448 37.376-66.048 90.112-71.168 147.456-6.144 65.536 18.432 128 70.144 177.152 68.608 65.536 160.256 78.848 248.32 35.84 46.08-22.528 74.24-50.688 96.768-96.768 82.432-168.96-57.856-350.72-243.2-314.88z m193.024 118.272c14.336 16.384 17.408 27.648 11.264 44.032-7.168 18.944-156.672 168.96-177.152 178.176-25.088 10.752-42.496 1.024-94.72-52.736-50.176-51.712-53.76-61.952-31.744-88.064 10.24-12.288 17.408-15.872 31.232-15.872 14.336 0 23.04 5.12 48.128 29.184l30.72 29.184 68.096-67.584c60.928-60.928 69.632-67.584 86.016-67.584 11.776 0 20.992 3.584 28.16 11.264z"
@@ -1167,4 +1174,49 @@
1167
1174
  stroke="#FF0000"
1168
1175
  stroke-width="4"
1169
1176
  stroke-linecap="round"
1170
- id="line58" />&#10; </g>&#10; &#10;&#10; </svg>
1177
+ id="line58" />&#10; </g>&#10;
1178
+
1179
+ <g id="RedactionEntireSheet" transform="matrix(0.3333,0,0,0.3333,162,126)">
1180
+
1181
+ <rect x="4" y="4" width="46" height="46" fill="none" stroke="#607D8B" stroke-width="3" rx="3" ry="3" id="worksheet-bg" />
1182
+
1183
+
1184
+ <line x1="4" y1="19" x2="50" y2="19" stroke="#607D8B" stroke-width="2" id="grid-h1" />
1185
+ <line x1="4" y1="35" x2="50" y2="35" stroke="#607D8B" stroke-width="2" id="grid-h2" />
1186
+ <line x1="19" y1="4" x2="19" y2="50" stroke="#607D8B" stroke-width="2" id="grid-v1" />
1187
+ <line x1="35" y1="4" x2="35" y2="50" stroke="#607D8B" stroke-width="2" id="grid-v2" />
1188
+
1189
+
1190
+ <g transform="translate(27, 27) scale(0.65) translate(-27, -27)">
1191
+ <rect x="9" y="9" width="36" height="36" fill="#E53935" rx="4" ry="4" id="redact-rect" />
1192
+ <line x1="9" y1="9" x2="45" y2="45" stroke="#FFFFFF" stroke-width="4" stroke-linecap="round" id="redact-line" />
1193
+ <rect x="17" y="24" width="20" height="6" fill="#FFFFFF" id="redact-plus-h" />
1194
+ <rect x="24" y="17" width="6" height="20" fill="#FFFFFF" id="redact-plus-v" />
1195
+ </g>
1196
+ </g>
1197
+ &#10;
1198
+ <g id="RedactionSearchResult" transform="matrix(0.3033,0,0,0.3033,180,126)">
1199
+
1200
+
1201
+
1202
+ <!-- Unified blue-grey rounded background to indicate 'search' context -->
1203
+ <rect x="4" y="4" width="54" height="54" fill="#56754B" rx="4" ry="4" id="bg-rect" />
1204
+ <!-- Search results list: two white horizontal lines representing the searched content -->
1205
+ <rect x="10" y="10" width="14" height="3" fill="#FFFFFF" rx="1.5" id="search-line-1" />
1206
+ <rect x="10" y="16" width="14" height="3" fill="#FFFFFF" rx="1.5" id="search-line-2" />
1207
+
1208
+ <!-- Magnifying glass: represents the 'search' action, positioned on the right side of the list -->
1209
+ <circle cx="35" cy="18" r="7" fill="none" stroke="#FFFFFF" stroke-width="2.5" id="search-glass" />
1210
+ <line x1="42" y1="23" x2="47" y2="28" stroke="#FFFFFF" stroke-width="4" stroke-linecap="round" id="search-handle" />
1211
+
1212
+ <g transform="translate(27, 27) scale(0.66) translate(-32, -16)">
1213
+ <rect x="9" y="9" width="36" height="36" fill="#E53935" rx="4" ry="4" id="redact-rect" />
1214
+ <line x1="9" y1="9" x2="45" y2="45" stroke="#FFFFFF" stroke-width="4" stroke-linecap="round" id="redact-line" />
1215
+ <rect x="17" y="24" width="20" height="6" fill="#FFFFFF" id="redact-plus-h" />
1216
+ <rect x="24" y="17" width="6" height="20" fill="#FFFFFF" id="redact-plus-v" />
1217
+ </g>
1218
+
1219
+
1220
+ </g> &#10;
1221
+
1222
+ </svg>
package/angular.d.ts CHANGED
@@ -8,7 +8,7 @@ import type {
8
8
  SimpleChanges,
9
9
  } from '@angular/core';
10
10
  import type * as i0 from '@angular/core';
11
- import type Spreadsheet from 'gridjs-spreadsheet';
11
+ import type Spreadsheet, { SemanticAutomationOptions } from 'gridjs-spreadsheet';
12
12
  import type { GridJsAdapter } from './shared';
13
13
 
14
14
  export declare class GridJsSpreadsheetComponent implements AfterViewInit, OnChanges, OnDestroy {
@@ -21,6 +21,7 @@ export declare class GridJsSpreadsheetComponent implements AfterViewInit, OnChan
21
21
  height: string;
22
22
  showToolbar: boolean;
23
23
  showContextmenu: boolean;
24
+ semanticAutomation: SemanticAutomationOptions | null;
24
25
  ready: EventEmitter<{ instance: Spreadsheet; adapter: GridJsAdapter }>;
25
26
  change: EventEmitter<any[]>;
26
27
  error: EventEmitter<any>;
@@ -47,6 +48,7 @@ export declare class GridJsSpreadsheetComponent implements AfterViewInit, OnChan
47
48
  height: { alias: 'height'; required: false };
48
49
  showToolbar: { alias: 'showToolbar'; required: false };
49
50
  showContextmenu: { alias: 'showContextmenu'; required: false };
51
+ semanticAutomation: { alias: 'semanticAutomation'; required: false };
50
52
  },
51
53
  {
52
54
  ready: 'ready';
package/angular.js CHANGED
@@ -29,6 +29,7 @@ export class GridJsSpreadsheetComponent {
29
29
  height = 'calc(100vh - 96px)';
30
30
  showToolbar = true;
31
31
  showContextmenu = true;
32
+ semanticAutomation = null;
32
33
 
33
34
  ready = new EventEmitter();
34
35
  change = new EventEmitter();
@@ -80,6 +81,7 @@ export class GridJsSpreadsheetComponent {
80
81
  this.locale,
81
82
  String(this.showToolbar),
82
83
  String(this.showContextmenu),
84
+ JSON.stringify(this.semanticAutomation || null),
83
85
  ].join('|');
84
86
 
85
87
  if (mountKey === this.lastMountKey && this.adapter) return;
@@ -100,6 +102,7 @@ export class GridJsSpreadsheetComponent {
100
102
  token: this.token,
101
103
  showToolbar: this.showToolbar,
102
104
  showContextmenu: this.showContextmenu,
105
+ semanticAutomation: this.semanticAutomation,
103
106
  callbacks: {
104
107
  ready: (instance, activeAdapter) => this.zone.run(() => this.ready.emit({ instance, adapter: activeAdapter })),
105
108
  change: (...args) => this.zone.run(() => this.change.emit(args)),
@@ -154,6 +157,7 @@ GridJsSpreadsheetComponent.ɵcmp = /* @__PURE__ */ i0.ɵɵngDeclareComponent({
154
157
  height: 'height',
155
158
  showToolbar: 'showToolbar',
156
159
  showContextmenu: 'showContextmenu',
160
+ semanticAutomation: 'semanticAutomation',
157
161
  },
158
162
  outputs: {
159
163
  ready: 'ready',
package/example/pom.xml CHANGED
@@ -17,7 +17,7 @@
17
17
  </repositories>
18
18
  <groupId>com.aspose.gridjs</groupId>
19
19
  <artifactId>gridjsdemo</artifactId>
20
- <version>26.7</version>
20
+ <version>26.8</version>
21
21
  <name>gridjsdemo</name>
22
22
  <description>GridJs Demo project for Spring Boot</description>
23
23
  <properties>
package/index.d.ts CHANGED
@@ -41,6 +41,16 @@ declare module 'gridjs-spreadsheet' {
41
41
  italic: false;
42
42
  };
43
43
  };
44
+ /**
45
+ * Shared canvas render font for both column headers (A, B, C, ...)
46
+ * and row headers (1, 2, 3, ...).
47
+ * Fields in colHeaderFont / rowHeaderFont override it field by field.
48
+ */
49
+ headerFont?: HeaderFont;
50
+ /** Canvas render font for column headers (A, B, C, ...), overrides headerFont */
51
+ colHeaderFont?: HeaderFont;
52
+ /** Canvas render font for row headers (1, 2, 3, ...), overrides headerFont */
53
+ rowHeaderFont?: HeaderFont;
44
54
  /** Enable redaction feature */
45
55
  enableRedactionShape?: boolean;
46
56
  /** Predefined redaction reasons */
@@ -59,6 +69,123 @@ declare module 'gridjs-spreadsheet' {
59
69
  * @returns Promise<string> for the new reason, or null to cancel
60
70
  */
61
71
  onRedactionAddReason?: (existingReasons: string[]) => Promise<string | null>;
72
+ /** Versioned Object API for AI Agent and automated tests. Disabled by default. */
73
+ semanticAutomation?: SemanticAutomationOptions;
74
+ }
75
+
76
+ export interface SemanticAutomationOptions {
77
+ enabled?: boolean;
78
+ instanceId?: string;
79
+ }
80
+
81
+ export type SemanticRuntimePhase =
82
+ | 'disabled'
83
+ | 'initializing'
84
+ | 'loading'
85
+ | 'rendering'
86
+ | 'ready'
87
+ | 'updating'
88
+ | 'failed'
89
+ | 'destroyed';
90
+
91
+ export interface SemanticRuntimeState {
92
+ contractVersion: string;
93
+ instanceId: string;
94
+ instanceGeneration: string;
95
+ workbookSessionId: string | null;
96
+ phase: SemanticRuntimePhase;
97
+ revision: number;
98
+ failure: { code: string; message: string; retryable: boolean } | null;
99
+ activeOperationIds: string[];
100
+ lastOperationId: string | null;
101
+ activeSheetId: string | null;
102
+ }
103
+
104
+ export interface SemanticOperation {
105
+ operationId: string;
106
+ kind: string;
107
+ action: string;
108
+ instanceGeneration: string;
109
+ workbookSessionId: string | null;
110
+ parentOperationId: string | null;
111
+ phase: 'pending' | 'running' | 'completed' | 'failed' | 'cancelled';
112
+ progress: number;
113
+ revision: number | null;
114
+ result: Record<string, any> | null;
115
+ error: { code: string; message: string; retryable: boolean } | null;
116
+ }
117
+
118
+ export interface SemanticStateRequest {
119
+ kind: 'workbook' | 'sheets' | 'sheet' | 'cell' | 'range' | 'selection';
120
+ sheetId?: string;
121
+ address?: string;
122
+ range?: string;
123
+ offset?: number;
124
+ limit?: number;
125
+ }
126
+
127
+ export interface SemanticStateSnapshot {
128
+ contractVersion: string;
129
+ instanceId: string;
130
+ instanceGeneration: string;
131
+ workbookSessionId: string;
132
+ revision: number;
133
+ target: Record<string, any>;
134
+ state: Record<string, any>;
135
+ }
136
+
137
+ export type SemanticCellValue =
138
+ | { kind: 'blank' }
139
+ | { kind: 'text'; value: string }
140
+ | { kind: 'number'; value: number }
141
+ | { kind: 'boolean'; value: boolean };
142
+
143
+ export type SemanticEditableCellValue =
144
+ | { kind: 'blank' }
145
+ | { kind: 'text'; value: string };
146
+
147
+ export type SemanticActionRequest =
148
+ | { action: 'sheet.activate'; parameters: { sheetId: string }; invocationId?: string }
149
+ | { action: 'cell.activate'; parameters: { sheetId: string; address: string }; invocationId?: string }
150
+ | { action: 'range.select'; parameters: { sheetId: string; address?: string; range?: string }; invocationId?: string }
151
+ | { action: 'cell.setValue'; parameters: { sheetId: string; address: string; value: SemanticEditableCellValue }; invocationId?: string };
152
+
153
+ export interface SemanticActionReceipt {
154
+ operationId: string;
155
+ action: string;
156
+ instanceGeneration: string;
157
+ workbookSessionId: string;
158
+ phase: 'running';
159
+ }
160
+
161
+ export interface SemanticFacade {
162
+ describeContract(): Record<string, any>;
163
+ getCapabilities(): Record<string, any>;
164
+ getContract(): Record<string, any>;
165
+ getRuntimeState(): SemanticRuntimeState;
166
+ waitForRuntime(options?: { phase?: SemanticRuntimePhase; timeoutMs?: number; signal?: AbortSignal }): Promise<SemanticRuntimeState>;
167
+ subscribe(options: { event?: 'runtimechange' | 'operationchange' | 'sheetchange' | 'selectionchange' | 'cellchange' | '*'; fromRevision?: number; onEvent: (event: Record<string, any>) => void }): { unsubscribe(): void };
168
+ getOperation(operationId: string): SemanticOperation;
169
+ listOperations(): SemanticOperation[];
170
+ waitForOperation(options: { operationId: string; timeoutMs?: number; signal?: AbortSignal }): Promise<SemanticOperation>;
171
+ getState(request: SemanticStateRequest): SemanticStateSnapshot;
172
+ query(request: SemanticStateRequest): SemanticStateSnapshot;
173
+ getAvailableActions(request?: Pick<SemanticStateRequest, 'kind' | 'sheetId'>): ReadonlyArray<{ action: string; capability: string }>;
174
+ perform(request: SemanticActionRequest): SemanticActionReceipt;
175
+ }
176
+
177
+ export interface SemanticInstanceDescriptor {
178
+ instanceId: string;
179
+ instanceGeneration: string;
180
+ contractVersion: string;
181
+ runtimePhase: SemanticRuntimePhase;
182
+ workbookSessionId: string | null;
183
+ }
184
+
185
+ export interface GridJSSemanticAutomationRegistry {
186
+ readonly version: '1.0.0';
187
+ listInstances(): SemanticInstanceDescriptor[];
188
+ getInstance(instanceId: string): SemanticFacade | null;
62
189
  }
63
190
 
64
191
  export type CELL_SELECTED = 'cell-selected';
@@ -82,12 +209,28 @@ declare module 'gridjs-spreadsheet' {
82
209
  export type REDACTION_UPDATED = 'redaction-updated';
83
210
  export type REDACTION_REASON_INSERTED = 'redactionReason-inserted';
84
211
  export type REDACTION_TRANSPARENCY_TOGGLED = 'redactionTransparency-toggled';
212
+ export type SEARCH_REDACTED = 'search-redacted';
85
213
  export type CUSTOM_BUTTON = 'custom-button';
86
214
  export type UPDATE_SERVER_ERROR = 'updateServerError';
87
215
  export type UPDATE_CELL_ERROR = 'updateCellError';
88
216
 
89
217
  export type CellMerge = [number, number];
90
218
 
219
+ /** Font setting for fixed headers rendered on canvas */
220
+ export interface HeaderFont {
221
+ /** Font family name, e.g. 'Arial' */
222
+ name?: string;
223
+ /** Font size in px (canvas font size before dpr scaling) */
224
+ size?: number;
225
+ /** Font weight, e.g. 400 | 500 | 'bold' */
226
+ weight?: number | 'normal' | 'bold' | 'lighter' | 'bolder';
227
+ /** Shorthand for weight: 'bold' */
228
+ bold?: boolean;
229
+ italic?: boolean;
230
+ /** Text color */
231
+ color?: string;
232
+ }
233
+
91
234
  export interface CellRange {
92
235
  sri: number;
93
236
  sci: number;
@@ -254,6 +397,10 @@ declare module 'gridjs-spreadsheet' {
254
397
  envt: REDACTION_TRANSPARENCY_TOGGLED,
255
398
  callback: (isTransparent: boolean) => void
256
399
  ): void;
400
+ (
401
+ envt: SEARCH_REDACTED,
402
+ callback: (sheetNames: string[], detail: { keywords: string, isCaseSensitive: boolean, matchWholeCell: boolean, reason: string, color: string, baseId: string }) => void
403
+ ): void;
257
404
  (
258
405
  envt: CUSTOM_BUTTON,
259
406
  callback: (tag: string, button: CustomToolbarButton) => void
@@ -341,6 +488,8 @@ declare module 'gridjs-spreadsheet' {
341
488
  constructor(container: string | HTMLElement, opts?: Options);
342
489
  /** Build version string (injected at compile time) */
343
490
  readonly version: string;
491
+ /** Public Semantic Automation facade. */
492
+ semantic: SemanticFacade;
344
493
  on: SpreadsheetEventHandler;
345
494
  /**
346
495
  * retrieve cell
@@ -523,6 +672,7 @@ declare module 'gridjs-spreadsheet' {
523
672
  global {
524
673
  interface Window {
525
674
  x_spreadsheet(container: string | HTMLElement, opts?: Options): Spreadsheet;
675
+ GridJSSemanticAutomation?: GridJSSemanticAutomationRegistry;
526
676
  }
527
677
  }
528
678
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gridjs-spreadsheet",
3
- "version": "26.7.1",
3
+ "version": "26.8.1",
4
4
  "description": "Lightweight, high-performance JavaScript spreadsheet component for building online Excel editors and web spreadsheet apps. Supports React, Vue 3, and Angular with TypeScript declarations. Features include formulas, charts, formatting, data validation, copy/paste from Excel, and server-side integration.",
5
5
  "types": "index.d.ts",
6
6
  "main": "xspreadsheet.js",
package/react.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import type { CSSProperties } from 'react';
2
- import type Spreadsheet from 'gridjs-spreadsheet';
2
+ import type Spreadsheet, { SemanticAutomationOptions } from 'gridjs-spreadsheet';
3
3
  import type { GridJsAdapter } from './shared';
4
4
 
5
5
  export interface GridJsSpreadsheetProps {
@@ -12,6 +12,7 @@ export interface GridJsSpreadsheetProps {
12
12
  height?: string | number;
13
13
  showToolbar?: boolean;
14
14
  showContextmenu?: boolean;
15
+ semanticAutomation?: SemanticAutomationOptions;
15
16
  className?: string;
16
17
  style?: CSSProperties;
17
18
  onReady?: (instance: Spreadsheet, adapter: GridJsAdapter) => void;
package/react.js CHANGED
@@ -22,6 +22,7 @@ export function GridJsSpreadsheet({
22
22
  height = 'calc(100vh - 96px)',
23
23
  showToolbar = true,
24
24
  showContextmenu = true,
25
+ semanticAutomation,
25
26
  className = 'gridjs-react-host',
26
27
  style,
27
28
  onReady,
@@ -54,6 +55,7 @@ export function GridJsSpreadsheet({
54
55
  token,
55
56
  showToolbar,
56
57
  showContextmenu,
58
+ semanticAutomation,
57
59
  callbacks: {
58
60
  ready: onReady,
59
61
  change: onChange,
@@ -88,7 +90,7 @@ export function GridJsSpreadsheet({
88
90
  adapterRef.current = null;
89
91
  if (hostRef.current) hostRef.current.innerHTML = '';
90
92
  };
91
- }, [apiBase, dataKey, loader, mode, locale, token, showToolbar, showContextmenu]);
93
+ }, [apiBase, dataKey, loader, mode, locale, token, showToolbar, showContextmenu, semanticAutomation]);
92
94
 
93
95
  useEffect(() => {
94
96
  if (adapterRef.current && token) {
package/readme.md CHANGED
@@ -371,7 +371,7 @@ The adapters use the standard Aspose.Cells GridJs endpoints:
371
371
 
372
372
  ## Example Project
373
373
 
374
- From version 26.7.0 the package includes a complete `example/` directory with a Spring Boot backend and five independent frontend demos (React, Vue 3, Angular, Vanilla npm, Vanilla CDN).
374
+ The package includes a complete `example/` directory with a Spring Boot backend and five independent frontend demos (React, Vue 3, Angular, Vanilla npm, Vanilla CDN).
375
375
 
376
376
  ```bash
377
377
  cp -R node_modules/gridjs-spreadsheet/example ./gridjs-example
@@ -393,6 +393,19 @@ Modern browsers — Chrome, Firefox, Safari, Edge.
393
393
 
394
394
  ## Version History
395
395
 
396
+ <details>
397
+ <summary><strong>v26.8.1</strong> — Support redaction for search matches</summary>
398
+
399
+ - Support redaction for search matches
400
+ </details>
401
+
402
+ <details>
403
+ <summary><strong>v26.8</strong> — Support redaction for entire sheet</summary>
404
+
405
+ - Support redaction for entire sheet
406
+ - Support redaction for sheet name
407
+ </details>
408
+
396
409
  <details>
397
410
  <summary><strong>v26.7.1</strong> — Improve performance for redaction</summary>
398
411
 
package/shared.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type Spreadsheet from 'gridjs-spreadsheet';
1
+ import type Spreadsheet, { SemanticAutomationOptions } from 'gridjs-spreadsheet';
2
2
 
3
3
  export interface GridJsEndpoints {
4
4
  updateCell: string;
@@ -48,6 +48,7 @@ export interface GridJsAdapterConfig {
48
48
  fileName?: string;
49
49
  basicZorder?: number;
50
50
  view?: Record<string, any>;
51
+ semanticAutomation?: SemanticAutomationOptions;
51
52
  callbacks?: GridJsAdapterCallbacks;
52
53
  dependencies?: GridJsAdapterDependencies;
53
54
  }
package/shared.js CHANGED
@@ -119,6 +119,7 @@ function buildSpreadsheetOptions(config, endpoints) {
119
119
  ...(config.token ? { token: config.token } : {}),
120
120
  ...(config.loadingGif ? { loadingGif: config.loadingGif } : {}),
121
121
  ...(config.view ? { view: config.view } : {}),
122
+ ...(config.semanticAutomation ? { semanticAutomation: config.semanticAutomation } : {}),
122
123
  };
123
124
  }
124
125
 
package/vue.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import type { DefineComponent } from 'vue';
2
- import type Spreadsheet from 'gridjs-spreadsheet';
2
+ import type Spreadsheet, { SemanticAutomationOptions } from 'gridjs-spreadsheet';
3
3
  import type { GridJsAdapter } from './shared';
4
4
 
5
5
  export interface GridJsSpreadsheetProps {
@@ -12,6 +12,7 @@ export interface GridJsSpreadsheetProps {
12
12
  height?: string | number;
13
13
  showToolbar?: boolean;
14
14
  showContextmenu?: boolean;
15
+ semanticAutomation?: SemanticAutomationOptions;
15
16
  }
16
17
 
17
18
  export declare const GridJsSpreadsheet: DefineComponent<GridJsSpreadsheetProps, {}, any>;
package/vue.js CHANGED
@@ -30,6 +30,7 @@ export const GridJsSpreadsheet = defineComponent({
30
30
  height: { type: [String, Number], default: 'calc(100vh - 96px)' },
31
31
  showToolbar: { type: Boolean, default: true },
32
32
  showContextmenu: { type: Boolean, default: true },
33
+ semanticAutomation: { type: Object, default: null },
33
34
  },
34
35
  emits: [
35
36
  'ready',
@@ -59,6 +60,7 @@ export const GridJsSpreadsheet = defineComponent({
59
60
  token: props.token,
60
61
  showToolbar: props.showToolbar,
61
62
  showContextmenu: props.showContextmenu,
63
+ semanticAutomation: props.semanticAutomation,
62
64
  callbacks: {
63
65
  ready: (instance, activeAdapter) => emit('ready', instance, activeAdapter),
64
66
  change: (...args) => emit('change', ...args),
@@ -84,6 +86,7 @@ export const GridJsSpreadsheet = defineComponent({
84
86
  props.locale,
85
87
  props.showToolbar,
86
88
  props.showContextmenu,
89
+ props.semanticAutomation,
87
90
  ],
88
91
  () => {
89
92
  mountGridJs().catch(error => emit('error', { type: 'mountError', error }));