gridjs-spreadsheet 26.8.0 → 26.9.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.
package/readme.md CHANGED
@@ -110,7 +110,7 @@ spreadsheet.setFileName(workbookJson.filename);
110
110
  ```html
111
111
  <link
112
112
  rel="stylesheet"
113
- href="https://unpkg.com/gridjs-spreadsheet@26.7.0/xspreadsheet.css"
113
+ href="https://unpkg.com/gridjs-spreadsheet/xspreadsheet.css"
114
114
  >
115
115
 
116
116
  <script src="https://unpkg.com/jszip@3.10.1/dist/jszip.min.js"></script>
@@ -393,6 +393,18 @@ Modern browsers — Chrome, Firefox, Safari, Edge.
393
393
 
394
394
  ## Version History
395
395
 
396
+ <details>
397
+ <summary><strong>v26.9</strong> — Fix autofilter value for special characters </summary>
398
+
399
+ - Fix autofilter value for special characters
400
+ </details>
401
+
402
+ <details>
403
+ <summary><strong>v26.8.1</strong> — Support redaction for search matches</summary>
404
+
405
+ - Support redaction for search matches
406
+ </details>
407
+
396
408
  <details>
397
409
  <summary><strong>v26.8</strong> — Support redaction for entire sheet</summary>
398
410
 
@@ -580,6 +592,7 @@ Modern browsers — Chrome, Firefox, Safari, Edge.
580
592
  - [Developer's Guide — Java](https://docs.aspose.com/cells/java/aspose-cells-gridjs/)
581
593
  - [Developer's Guide — Python](https://docs.aspose.com/cells/python-net/aspose-cells-gridjs/)
582
594
  - [Client API How-To](https://docs.aspose.com/cells/net/aspose-cells-gridjs/how-to-use-gridjs-client-api/)
595
+ - [Skills](https://github.com/aspose-cells/skills/)
583
596
 
584
597
  ### Product Links
585
598
  - [Aspose.Cells Product Page](https://products.aspose.com/cells)
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 }));
package/xspreadsheet.css CHANGED
@@ -18,9 +18,24 @@ body {
18
18
  position: relative;
19
19
  overflow: hidden;
20
20
  }
21
+ .x-spreadsheet-sheet.x-spreadsheet-sheet-chart-mode > .x-spreadsheet-table {
22
+ visibility: hidden;
23
+ pointer-events: none;
24
+ }
25
+ .x-spreadsheet-sheet.x-spreadsheet-sheet-chart-mode > .x-spreadsheet-scrollbar.horizontal {
26
+ display: none !important;
27
+ }
28
+ .x-spreadsheet-sheet.x-spreadsheet-sheet-chart-mode > .x-spreadsheet-resizer,
29
+ .x-spreadsheet-sheet.x-spreadsheet-sheet-chart-mode > .x-spreadsheet-hover-highlight,
30
+ .x-spreadsheet-sheet.x-spreadsheet-sheet-chart-mode > .x-spreadsheet-selector-dropdown-button,
31
+ .x-spreadsheet-sheet.x-spreadsheet-sheet-chart-mode .x-spreadsheet-selectors,
32
+ .x-spreadsheet-sheet.x-spreadsheet-sheet-chart-mode .x-spreadsheet-editor {
33
+ display: none !important;
34
+ }
21
35
  .x-spreadsheet-workspace {
22
36
  display: grid;
23
37
  width: 100%;
38
+ min-height: 0;
24
39
  grid-template-columns: minmax(0, 1fr) 0;
25
40
  align-items: stretch;
26
41
  overflow: hidden;
@@ -30,6 +45,7 @@ body {
30
45
  }
31
46
  .x-spreadsheet-workspace-sheet-pane {
32
47
  min-width: 0;
48
+ min-height: 0;
33
49
  overflow: hidden;
34
50
  }
35
51
  .x-spreadsheet-workspace-sheet-pane > .x-spreadsheet-bottombar {
@@ -42,6 +58,7 @@ body {
42
58
  display: flex;
43
59
  width: 100%;
44
60
  min-width: 0;
61
+ min-height: 0;
45
62
  flex-direction: column;
46
63
  align-self: stretch;
47
64
  box-sizing: border-box;
@@ -65,6 +82,7 @@ body {
65
82
  }
66
83
  .x-spreadsheet-format-panel-header {
67
84
  display: flex;
85
+ flex: 0 0 52px;
68
86
  min-height: 52px;
69
87
  align-items: center;
70
88
  justify-content: space-between;
@@ -112,6 +130,7 @@ body {
112
130
  }
113
131
  .x-spreadsheet-format-panel-tabs {
114
132
  display: flex;
133
+ flex: 0 0 56px;
115
134
  min-height: 56px;
116
135
  align-items: stretch;
117
136
  justify-content: center;
@@ -154,11 +173,37 @@ body {
154
173
  background: #2f7d50;
155
174
  }
156
175
  .x-spreadsheet-format-panel-body {
157
- flex: 1;
176
+ flex: 1 1 0;
177
+ height: 0;
178
+ min-height: 0;
158
179
  box-sizing: border-box;
159
- overflow: auto;
180
+ padding-bottom: 24px;
181
+ overflow-x: hidden;
182
+ overflow-y: auto;
183
+ overscroll-behavior: contain;
184
+ scroll-padding-bottom: 24px;
185
+ scrollbar-color: #a7adb5 #f3f4f6;
186
+ scrollbar-gutter: stable;
187
+ scrollbar-width: thin;
188
+ -webkit-overflow-scrolling: touch;
160
189
  background: #fff;
161
190
  }
191
+ .x-spreadsheet-format-panel-body::-webkit-scrollbar {
192
+ width: 10px;
193
+ }
194
+ .x-spreadsheet-format-panel-body::-webkit-scrollbar-track {
195
+ background: #f3f4f6;
196
+ }
197
+ .x-spreadsheet-format-panel-body::-webkit-scrollbar-thumb {
198
+ background: #a7adb5;
199
+ background-clip: padding-box;
200
+ border: 2px solid #f3f4f6;
201
+ border-radius: 999px;
202
+ }
203
+ .x-spreadsheet-format-panel-body::-webkit-scrollbar-thumb:hover {
204
+ background: #858d97;
205
+ background-clip: padding-box;
206
+ }
162
207
  .x-spreadsheet-format-panel-empty-title {
163
208
  margin: 24px 20px 6px;
164
209
  font-size: 14px;
@@ -268,6 +313,27 @@ body {
268
313
  flex-direction: column;
269
314
  gap: 10px;
270
315
  }
316
+ .x-spreadsheet-format-panel-checkbox-field {
317
+ display: flex;
318
+ min-height: 30px;
319
+ align-items: center;
320
+ gap: 9px;
321
+ color: #374151;
322
+ font-size: 13px;
323
+ line-height: 18px;
324
+ cursor: pointer;
325
+ }
326
+ .x-spreadsheet-format-panel-checkbox {
327
+ width: 17px;
328
+ height: 17px;
329
+ flex: 0 0 auto;
330
+ margin: 0;
331
+ accent-color: #217346;
332
+ }
333
+ .x-spreadsheet-format-panel-checkbox:disabled {
334
+ cursor: not-allowed;
335
+ opacity: 0.5;
336
+ }
271
337
  .x-spreadsheet-format-panel-field {
272
338
  display: grid;
273
339
  min-width: 0;
@@ -306,6 +372,123 @@ body {
306
372
  margin: 14px 0;
307
373
  background: #d6d9dd;
308
374
  }
375
+ .x-spreadsheet-format-panel-fill-editor {
376
+ display: flex;
377
+ flex-direction: column;
378
+ gap: 12px;
379
+ }
380
+ .x-spreadsheet-format-panel-select {
381
+ width: 100%;
382
+ min-width: 0;
383
+ height: 36px;
384
+ box-sizing: border-box;
385
+ padding: 0 30px 0 10px;
386
+ color: #27313d;
387
+ font: inherit;
388
+ font-size: 13px;
389
+ background: #fff;
390
+ border: 1px solid #9aa1a9;
391
+ border-radius: 5px;
392
+ }
393
+ .x-spreadsheet-format-panel-select:hover:not(:disabled),
394
+ .x-spreadsheet-format-panel-select:focus-visible {
395
+ border-color: #217346;
396
+ box-shadow: 0 0 0 2px rgba(33, 115, 70, 0.14);
397
+ outline: none;
398
+ }
399
+ .x-spreadsheet-format-panel-select:disabled {
400
+ color: #89939f;
401
+ background: #f1f3f5;
402
+ border-color: #d4d8dd;
403
+ cursor: not-allowed;
404
+ }
405
+ .x-spreadsheet-format-panel-texture-trigger {
406
+ display: inline-flex;
407
+ width: 82px;
408
+ height: 42px;
409
+ align-items: center;
410
+ justify-self: end;
411
+ justify-content: space-between;
412
+ box-sizing: border-box;
413
+ padding: 4px 10px 4px 5px;
414
+ color: #27313d;
415
+ background: #fff;
416
+ border: 1px solid #8f969e;
417
+ border-radius: 6px;
418
+ cursor: pointer;
419
+ }
420
+ .x-spreadsheet-format-panel-texture-trigger:hover:not(:disabled),
421
+ .x-spreadsheet-format-panel-texture-trigger:focus-visible {
422
+ border-color: #217346;
423
+ box-shadow: 0 0 0 2px rgba(33, 115, 70, 0.14);
424
+ outline: none;
425
+ }
426
+ .x-spreadsheet-format-panel-texture-trigger:disabled {
427
+ cursor: not-allowed;
428
+ opacity: 0.48;
429
+ }
430
+ .x-spreadsheet-format-panel-texture-trigger-preview,
431
+ .x-spreadsheet-format-panel-texture-preview {
432
+ display: block;
433
+ flex: 0 0 auto;
434
+ background-image: url(d022c86edc5b2d12a8d3d4890df3bebb.jpg);
435
+ background-repeat: no-repeat;
436
+ background-size: 500% 500%;
437
+ }
438
+ .x-spreadsheet-format-panel-texture-trigger-preview {
439
+ width: 32px;
440
+ height: 32px;
441
+ border: 1px solid #c5c9ce;
442
+ }
443
+ .x-spreadsheet-format-panel-texture-trigger-arrow {
444
+ width: 7px;
445
+ height: 7px;
446
+ border-right: 1.5px solid currentColor;
447
+ border-bottom: 1.5px solid currentColor;
448
+ transform: translateY(-2px) rotate(45deg);
449
+ }
450
+ .x-spreadsheet-format-panel-texture-gallery {
451
+ display: none;
452
+ grid-template-columns: repeat(5, 64px);
453
+ gap: 4px;
454
+ box-sizing: border-box;
455
+ padding: 8px;
456
+ background: #fff;
457
+ border: 1px solid #8f969e;
458
+ border-radius: 6px;
459
+ box-shadow: 0 10px 28px rgba(31, 42, 55, 0.24);
460
+ }
461
+ .x-spreadsheet-format-panel-texture-option {
462
+ width: 64px;
463
+ height: 64px;
464
+ box-sizing: border-box;
465
+ padding: 2px;
466
+ background: #fff;
467
+ border: 1px solid transparent;
468
+ border-radius: 2px;
469
+ cursor: pointer;
470
+ }
471
+ .x-spreadsheet-format-panel-texture-option:hover,
472
+ .x-spreadsheet-format-panel-texture-option:focus-visible {
473
+ border-color: #66707a;
474
+ outline: none;
475
+ }
476
+ .x-spreadsheet-format-panel-texture-option.x-spreadsheet-format-panel-texture-option-selected {
477
+ border-color: #217346;
478
+ box-shadow: inset 0 0 0 1px #217346;
479
+ }
480
+ .x-spreadsheet-format-panel-texture-preview {
481
+ width: 58px;
482
+ height: 58px;
483
+ }
484
+ .x-spreadsheet-format-panel-unsupported-fill {
485
+ padding: 9px 10px;
486
+ color: #5f6874;
487
+ font-size: 12px;
488
+ line-height: 18px;
489
+ background: #f6f7f8;
490
+ border-radius: 4px;
491
+ }
309
492
  .x-spreadsheet-format-panel-label {
310
493
  min-width: 0;
311
494
  color: #374151;
@@ -378,6 +561,69 @@ body {
378
561
  .x-spreadsheet-format-panel-color-control {
379
562
  justify-self: end;
380
563
  }
564
+ .x-spreadsheet-format-panel-transparency-control {
565
+ display: grid;
566
+ min-width: 0;
567
+ grid-template-columns: minmax(58px, 1fr) 82px;
568
+ align-items: center;
569
+ gap: 8px;
570
+ }
571
+ .x-spreadsheet-format-panel-transparency-range {
572
+ width: 100%;
573
+ min-width: 0;
574
+ accent-color: #217346;
575
+ cursor: pointer;
576
+ }
577
+ .x-spreadsheet-format-panel-transparency-range:disabled {
578
+ cursor: not-allowed;
579
+ opacity: 0.5;
580
+ }
581
+ .x-spreadsheet-format-panel-percent-control {
582
+ width: 82px;
583
+ min-width: 0;
584
+ }
585
+ .x-spreadsheet-format-panel-pattern-label {
586
+ color: #374151;
587
+ font-size: 13px;
588
+ line-height: 18px;
589
+ }
590
+ .x-spreadsheet-format-panel-pattern-gallery {
591
+ display: grid;
592
+ grid-template-columns: repeat(6, 34px);
593
+ gap: 5px;
594
+ }
595
+ .x-spreadsheet-format-panel-pattern-button {
596
+ display: inline-flex;
597
+ width: 34px;
598
+ height: 30px;
599
+ align-items: center;
600
+ justify-content: center;
601
+ box-sizing: border-box;
602
+ padding: 1px;
603
+ overflow: hidden;
604
+ background: #fff;
605
+ border: 1px solid transparent;
606
+ border-radius: 2px;
607
+ cursor: pointer;
608
+ }
609
+ .x-spreadsheet-format-panel-pattern-button:hover:not(:disabled),
610
+ .x-spreadsheet-format-panel-pattern-button:focus-visible {
611
+ border-color: #7c8794;
612
+ outline: none;
613
+ }
614
+ .x-spreadsheet-format-panel-pattern-button:disabled {
615
+ cursor: not-allowed;
616
+ opacity: 0.48;
617
+ }
618
+ .x-spreadsheet-format-panel-pattern-button-selected {
619
+ border-color: #217346;
620
+ box-shadow: 0 0 0 1px #217346;
621
+ }
622
+ .x-spreadsheet-format-panel-pattern-preview {
623
+ display: block;
624
+ width: 30px;
625
+ height: 24px;
626
+ }
381
627
  .x-spreadsheet-format-panel-color-button {
382
628
  display: inline-flex;
383
629
  width: 72px;
@@ -454,6 +700,9 @@ body {
454
700
  .x-spreadsheet-format-panel-color-control {
455
701
  justify-self: start;
456
702
  }
703
+ .x-spreadsheet-format-panel-transparency-control {
704
+ width: 100%;
705
+ }
457
706
  .x-spreadsheet-format-panel-error {
458
707
  grid-column: 1;
459
708
  }
@@ -2581,11 +2830,27 @@ form fieldset select {
2581
2830
  display: inline-block;
2582
2831
  }
2583
2832
  .x-spreadsheet-icon .x-spreadsheet-icon-img {
2584
- background-image: url(9667af4182f3e39eec9844c10e1a6eb8.svg);
2833
+ background-image: url(2540ca97f0253f1cda1c125495bb90fe.svg);
2585
2834
  position: absolute;
2586
2835
  width: 262px;
2587
2836
  height: 444px;
2588
2837
  opacity: 0.86;
2838
+ /*
2839
+ // Search & Redact icon (text-based, no sprite dependency)
2840
+ &.searchRedact {
2841
+ background-image: none;
2842
+ width: auto;
2843
+ height: auto;
2844
+ &::before {
2845
+ content: '🔍';
2846
+ font-size: 14px;
2847
+ line-height: 18px;
2848
+ color: #555;
2849
+ display: block;
2850
+ text-align: center;
2851
+ }
2852
+ }
2853
+ */
2589
2854
  }
2590
2855
  .x-spreadsheet-icon .x-spreadsheet-icon-img.undo {
2591
2856
  left: 0;
@@ -2717,6 +2982,10 @@ form fieldset select {
2717
2982
  display: block;
2718
2983
  text-align: center;
2719
2984
  }
2985
+ .x-spreadsheet-icon .x-spreadsheet-icon-img.searchRedact {
2986
+ left: -180px;
2987
+ top: -126px;
2988
+ }
2720
2989
  .x-spreadsheet-icon .x-spreadsheet-icon-img.autofilter {
2721
2990
  left: -90px;
2722
2991
  top: -18px;