@a3s-lab/office 0.29.0 → 0.30.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 (50) hide show
  1. package/README.md +100 -3
  2. package/dist/{0~7043.js → 0~7231.js} +160 -2
  3. package/dist/{0~5093.js → 0~7360.js} +233 -52
  4. package/dist/0~document-editor.js +1159 -149
  5. package/dist/0~spreadsheet-editor.js +183 -34
  6. package/dist/0~work-docx-export.js +299 -11
  7. package/dist/0~work-docx-import.js +30 -7
  8. package/dist/0~work-office-diagnostics.js +125 -5
  9. package/dist/1544.js +13 -1
  10. package/dist/4104.js +29 -6
  11. package/dist/4121.js +1939 -1
  12. package/dist/6282.js +501 -1006
  13. package/dist/internal/features/work/editors/document-command-catalog.d.ts +18 -0
  14. package/dist/internal/features/work/editors/document-font-dialog-model.d.ts +5 -2
  15. package/dist/internal/features/work/editors/document-font-dialog-run-shading-model.d.ts +23 -0
  16. package/dist/internal/features/work/editors/document-font-dialog-run-shading-section.d.ts +8 -0
  17. package/dist/internal/features/work/editors/document-page-chrome-ribbon.d.ts +2 -1
  18. package/dist/internal/features/work/editors/document-proofing-dialog-model.d.ts +22 -0
  19. package/dist/internal/features/work/editors/document-proofing-dialog.d.ts +7 -0
  20. package/dist/internal/features/work/editors/document-table-of-contents-dialog.d.ts +10 -0
  21. package/dist/internal/features/work/editors/document-toolbar.d.ts +3 -1
  22. package/dist/internal/features/work/editors/spreadsheet-data-validation.d.ts +7 -1
  23. package/dist/internal/features/work/editors/use-document-insert-commands.d.ts +2 -0
  24. package/dist/internal/features/work/work-document-character-formatting.d.ts +8 -0
  25. package/dist/internal/features/work/work-document-format-changes.d.ts +6 -0
  26. package/dist/internal/features/work/work-document-highlight.d.ts +9 -0
  27. package/dist/internal/features/work/work-document-outline.d.ts +1 -0
  28. package/dist/internal/features/work/work-document-paragraph-shading.d.ts +6 -0
  29. package/dist/internal/features/work/work-document-proofing.d.ts +19 -0
  30. package/dist/internal/features/work/work-document-run-shading.d.ts +12 -0
  31. package/dist/internal/features/work/work-document-table-of-contents-node.d.ts +18 -0
  32. package/dist/internal/features/work/work-document-table-of-contents.d.ts +51 -0
  33. package/dist/internal/features/work/work-document-word-line-metrics.d.ts +3 -0
  34. package/dist/internal/features/work/work-docx-field-instructions.d.ts +1 -1
  35. package/dist/internal/features/work/work-docx-import.d.ts +3 -1
  36. package/dist/internal/features/work/work-docx-proofing-diagnostics.d.ts +3 -0
  37. package/dist/internal/features/work/work-docx-proofing.d.ts +38 -0
  38. package/dist/internal/features/work/work-docx-run-formatting-import.d.ts +7 -0
  39. package/dist/internal/features/work/work-docx-run-shading-diagnostics.d.ts +3 -0
  40. package/dist/internal/features/work/work-docx-run-shading-export.d.ts +17 -0
  41. package/dist/internal/features/work/work-docx-run-shading.d.ts +20 -0
  42. package/dist/internal/features/work/work-docx-table-of-contents-export.d.ts +11 -0
  43. package/dist/internal/features/work/work-docx-table-of-contents-import.d.ts +15 -0
  44. package/dist/internal/features/work/work-spreadsheet-data-validation.d.ts +7 -0
  45. package/dist/internal/features/work/work-types.d.ts +9 -0
  46. package/dist/internal/kernel/office-kernel-protocol.d.ts +1 -0
  47. package/dist/office-kernel.wasm +0 -0
  48. package/dist/styles.css +311 -4
  49. package/docs/latest/en/browser-editor-architecture.md +50 -1
  50. package/package.json +12 -2
@@ -196,6 +196,7 @@ export interface WorkSpreadsheetCellRange {
196
196
  row: [number, number];
197
197
  column: [number, number];
198
198
  }
199
+ export type WorkSpreadsheetDataValidationErrorStyle = 'information' | 'stop' | 'warning';
199
200
  export interface WorkSpreadsheetDataValidationItem {
200
201
  type: string;
201
202
  type2: string;
@@ -204,8 +205,16 @@ export interface WorkSpreadsheetDataValidationItem {
204
205
  value2: string;
205
206
  validity: string;
206
207
  remote: boolean;
208
+ /** Defaults to true for legacy A3S artifacts. */
209
+ allowBlank?: boolean;
210
+ /** Product semantic; OOXML stores the inverse in `showDropDown`. */
211
+ showDropdownArrow?: boolean;
207
212
  prohibitInput: boolean;
213
+ errorStyle?: WorkSpreadsheetDataValidationErrorStyle;
214
+ errorTitle?: string;
215
+ errorMessage?: string;
208
216
  hintShow: boolean;
217
+ hintTitle?: string;
209
218
  hintValue: string;
210
219
  checked?: boolean;
211
220
  }
@@ -140,6 +140,7 @@ export interface OfficeKernelTextLayoutRun {
140
140
  fallbackFontIds?: string[];
141
141
  fontSize: number;
142
142
  lineHeight: number;
143
+ language?: string;
143
144
  letterSpacing?: number;
144
145
  ligatures?: boolean;
145
146
  kerning?: boolean;
Binary file
package/dist/styles.css CHANGED
@@ -9718,7 +9718,7 @@ button.work-office-collaboration-participant:hover .work-office-collaboration-lo
9718
9718
  display: grid;
9719
9719
  }
9720
9720
 
9721
- .work-document-font-dialog-run-border {
9721
+ .work-document-font-dialog-run-border, .work-document-font-dialog-run-shading {
9722
9722
  border: 1px solid color-mix(in srgb, var(--a3s-line) 78%, transparent);
9723
9723
  background: var(--a3s-panel-soft);
9724
9724
  border-radius: 8px;
@@ -9731,7 +9731,11 @@ button.work-office-collaboration-participant:hover .work-office-collaboration-lo
9731
9731
  display: grid;
9732
9732
  }
9733
9733
 
9734
- .work-document-font-dialog-run-border > legend {
9734
+ .work-document-font-dialog-run-shading {
9735
+ grid-template-columns: repeat(4, minmax(0, 1fr));
9736
+ }
9737
+
9738
+ .work-document-font-dialog-run-border > legend, .work-document-font-dialog-run-shading > legend {
9735
9739
  color: var(--a3s-muted);
9736
9740
  padding: 0 4px;
9737
9741
  font-size: 11px;
@@ -9815,7 +9819,7 @@ button.work-office-collaboration-participant:hover .work-office-collaboration-lo
9815
9819
  grid-template-columns: repeat(2, minmax(0, 1fr));
9816
9820
  }
9817
9821
 
9818
- .work-document-font-dialog-run-border {
9822
+ .work-document-font-dialog-run-border, .work-document-font-dialog-run-shading {
9819
9823
  grid-template-columns: minmax(0, 1fr);
9820
9824
  }
9821
9825
 
@@ -9828,6 +9832,104 @@ button.work-office-collaboration-participant:hover .work-office-collaboration-lo
9828
9832
  }
9829
9833
  }
9830
9834
 
9835
+ .work-document-proofing-dialog {
9836
+ width: min(640px, 100%);
9837
+ }
9838
+
9839
+ .work-document-proofing-dialog form {
9840
+ gap: 16px;
9841
+ display: grid;
9842
+ }
9843
+
9844
+ .work-document-proofing-dialog fieldset {
9845
+ border: 1px solid var(--a3s-line);
9846
+ border-radius: 10px;
9847
+ grid-template-columns: repeat(3, minmax(0, 1fr));
9848
+ gap: 14px;
9849
+ margin: 0;
9850
+ padding: 15px 16px 17px;
9851
+ display: grid;
9852
+ }
9853
+
9854
+ .work-document-proofing-dialog legend {
9855
+ color: var(--a3s-ink);
9856
+ padding: 0 5px;
9857
+ font-size: 11px;
9858
+ font-weight: 700;
9859
+ }
9860
+
9861
+ .work-document-proofing-dialog-language {
9862
+ align-content: start;
9863
+ gap: 6px;
9864
+ min-width: 0;
9865
+ display: grid;
9866
+ }
9867
+
9868
+ .work-document-proofing-dialog-language > label, .work-document-proofing-dialog-state-label {
9869
+ color: var(--a3s-muted);
9870
+ font-size: 11px;
9871
+ font-weight: 650;
9872
+ }
9873
+
9874
+ .work-document-proofing-dialog-language > div {
9875
+ grid-template-columns: minmax(0, 1fr) auto;
9876
+ gap: 6px;
9877
+ display: grid;
9878
+ }
9879
+
9880
+ .work-document-proofing-dialog-language .work-office-text-field {
9881
+ width: 100%;
9882
+ min-width: 0;
9883
+ }
9884
+
9885
+ .work-document-proofing-dialog-language .ds-button {
9886
+ white-space: nowrap;
9887
+ padding-inline: 9px;
9888
+ }
9889
+
9890
+ .work-document-proofing-dialog-language > p, .work-document-proofing-dialog-state > p, .work-document-proofing-dialog-help, .work-document-proofing-dialog-error {
9891
+ margin: 0;
9892
+ font-size: 11px;
9893
+ line-height: 1.5;
9894
+ }
9895
+
9896
+ .work-document-proofing-dialog-language > p, .work-document-proofing-dialog-state > p, .work-document-proofing-dialog-help {
9897
+ color: var(--a3s-muted);
9898
+ }
9899
+
9900
+ .work-document-proofing-dialog-state {
9901
+ border: 1px solid var(--a3s-line);
9902
+ background: var(--a3s-panel-soft);
9903
+ border-radius: 10px;
9904
+ grid-template-columns: minmax(110px, auto) minmax(220px, 1fr);
9905
+ align-items: center;
9906
+ gap: 8px 14px;
9907
+ padding: 14px 16px;
9908
+ display: grid;
9909
+ }
9910
+
9911
+ .work-document-proofing-dialog-state > p {
9912
+ grid-column: 1 / -1;
9913
+ }
9914
+
9915
+ .work-document-proofing-dialog-state .work-office-select, .work-document-proofing-dialog-state button[role="combobox"] {
9916
+ width: 100%;
9917
+ }
9918
+
9919
+ .work-document-proofing-dialog-help code {
9920
+ color: var(--a3s-ink);
9921
+ }
9922
+
9923
+ .work-document-proofing-dialog-error {
9924
+ color: var(--a3s-red);
9925
+ }
9926
+
9927
+ @media (width <= 620px) {
9928
+ .work-document-proofing-dialog fieldset, .work-document-proofing-dialog-state {
9929
+ grid-template-columns: minmax(0, 1fr);
9930
+ }
9931
+ }
9932
+
9831
9933
  [data-office-character-position-half-points] {
9832
9934
  vertical-align: var(--work-document-character-position);
9833
9935
  }
@@ -12453,6 +12555,200 @@ sub [data-office-character-position-half-points], sup [data-office-character-pos
12453
12555
  padding: 0;
12454
12556
  }
12455
12557
 
12558
+ .work-document-table-of-contents {
12559
+ box-sizing: border-box;
12560
+ border: 1px solid color-mix(in srgb, var(--a3s-line) 82%, #8aa7d8);
12561
+ background: color-mix(in srgb, var(--a3s-panel) 96%, #edf4ff);
12562
+ width: 100%;
12563
+ color: var(--a3s-ink);
12564
+ cursor: default;
12565
+ border-radius: 6px;
12566
+ margin: 14px 0 20px;
12567
+ padding: 14px 16px 16px;
12568
+ }
12569
+
12570
+ .work-document-table-of-contents.ProseMirror-selectednode {
12571
+ border-color: var(--a3s-blue);
12572
+ outline: 2px solid color-mix(in srgb, var(--a3s-blue) 22%, transparent);
12573
+ outline-offset: 2px;
12574
+ }
12575
+
12576
+ .work-document-table-of-contents-header {
12577
+ border-bottom: 1px solid var(--a3s-line);
12578
+ justify-content: space-between;
12579
+ align-items: baseline;
12580
+ gap: 12px;
12581
+ margin-bottom: 10px;
12582
+ padding-bottom: 7px;
12583
+ display: flex;
12584
+ }
12585
+
12586
+ .work-document-table-of-contents-header strong {
12587
+ font-family: var(--a3s-font-display, inherit);
12588
+ letter-spacing: -.02em;
12589
+ font-size: 18px;
12590
+ font-weight: 680;
12591
+ }
12592
+
12593
+ .work-document-table-of-contents-header span {
12594
+ color: var(--a3s-muted);
12595
+ font-variant-numeric: tabular-nums;
12596
+ font-size: 9px;
12597
+ }
12598
+
12599
+ .work-document-table-of-contents-list {
12600
+ gap: 3px;
12601
+ margin: 0;
12602
+ padding: 0;
12603
+ list-style: none;
12604
+ display: grid;
12605
+ }
12606
+
12607
+ .work-document-table-of-contents-list > li {
12608
+ min-width: 0;
12609
+ padding-left: calc((var(--work-toc-level, 1) - 1) * 16px);
12610
+ align-items: baseline;
12611
+ gap: 5px;
12612
+ font-size: 11px;
12613
+ line-height: 1.6;
12614
+ display: flex;
12615
+ }
12616
+
12617
+ .work-document-table-of-contents-list a, .work-document-table-of-contents-list li > span:first-child {
12618
+ color: inherit;
12619
+ text-overflow: ellipsis;
12620
+ white-space: nowrap;
12621
+ text-decoration: none;
12622
+ overflow: hidden;
12623
+ }
12624
+
12625
+ .work-document-table-of-contents-list a:hover {
12626
+ color: var(--a3s-blue);
12627
+ text-decoration: underline;
12628
+ }
12629
+
12630
+ .work-document-table-of-contents-list i {
12631
+ border-bottom: 1px dotted
12632
+ color-mix(in srgb, var(--a3s-muted) 68%, transparent);
12633
+ flex: 24px;
12634
+ min-width: 12px;
12635
+ transform: translateY(-2px);
12636
+ }
12637
+
12638
+ .work-document-table-of-contents[data-toc-leader="dash"] .work-document-table-of-contents-list i {
12639
+ border-bottom-style: dashed;
12640
+ }
12641
+
12642
+ .work-document-table-of-contents[data-toc-leader="underline"] .work-document-table-of-contents-list i {
12643
+ border-bottom-style: solid;
12644
+ }
12645
+
12646
+ .work-document-table-of-contents[data-toc-leader="none"] .work-document-table-of-contents-list i, .work-document-table-of-contents[data-toc-right-align-page-numbers="false"] .work-document-table-of-contents-list i {
12647
+ border: 0;
12648
+ flex: 0 0 5px;
12649
+ min-width: 5px;
12650
+ }
12651
+
12652
+ .work-document-table-of-contents-page {
12653
+ font-variant-numeric: tabular-nums;
12654
+ flex: none;
12655
+ }
12656
+
12657
+ .work-document-table-of-contents-empty {
12658
+ color: var(--a3s-muted);
12659
+ font-style: italic;
12660
+ padding-left: 0 !important;
12661
+ }
12662
+
12663
+ .work-document-table-of-contents-dialog {
12664
+ width: min(520px, 100%);
12665
+ }
12666
+
12667
+ .work-document-table-of-contents-dialog-grid {
12668
+ grid-template-columns: repeat(2, minmax(0, 1fr));
12669
+ gap: 10px;
12670
+ display: grid;
12671
+ }
12672
+
12673
+ .work-document-table-of-contents-dialog-field, .work-document-table-of-contents-dialog-leader {
12674
+ min-width: 0;
12675
+ color: var(--a3s-muted);
12676
+ gap: 6px;
12677
+ font-size: 10px;
12678
+ display: grid;
12679
+ }
12680
+
12681
+ .work-document-table-of-contents-dialog-grid .work-office-select, .work-document-table-of-contents-dialog-leader .work-office-select {
12682
+ width: 100%;
12683
+ }
12684
+
12685
+ .work-document-table-of-contents-dialog-options {
12686
+ border: 1px solid var(--a3s-line);
12687
+ background: var(--a3s-panel-soft);
12688
+ border-radius: 7px;
12689
+ grid-template-columns: repeat(3, minmax(0, 1fr));
12690
+ gap: 8px;
12691
+ margin: 14px 0;
12692
+ padding: 10px;
12693
+ display: grid;
12694
+ }
12695
+
12696
+ .work-document-table-of-contents-dialog-preview {
12697
+ border: 1px solid var(--a3s-line);
12698
+ background: var(--a3s-bg);
12699
+ min-width: 0;
12700
+ color: var(--a3s-ink);
12701
+ border-radius: 7px;
12702
+ gap: 5px;
12703
+ margin-top: 14px;
12704
+ padding: 14px;
12705
+ font-size: 10px;
12706
+ display: grid;
12707
+ }
12708
+
12709
+ .work-document-table-of-contents-dialog-preview > legend {
12710
+ margin-bottom: 4px;
12711
+ font-size: 14px;
12712
+ }
12713
+
12714
+ .work-document-table-of-contents-dialog-preview > span {
12715
+ align-items: baseline;
12716
+ gap: 5px;
12717
+ display: flex;
12718
+ }
12719
+
12720
+ .work-document-table-of-contents-dialog-preview > span.nested {
12721
+ padding-left: 16px;
12722
+ }
12723
+
12724
+ .work-document-table-of-contents-dialog-preview i {
12725
+ border-bottom: 1px dotted var(--a3s-muted);
12726
+ flex: 1;
12727
+ }
12728
+
12729
+ .work-document-table-of-contents-dialog-preview[data-toc-leader="dash"] i {
12730
+ border-bottom-style: dashed;
12731
+ }
12732
+
12733
+ .work-document-table-of-contents-dialog-preview[data-toc-leader="underline"] i {
12734
+ border-bottom-style: solid;
12735
+ }
12736
+
12737
+ .work-document-table-of-contents-dialog-preview[data-toc-leader="none"] i, .work-document-table-of-contents-dialog-preview[data-toc-right-align-page-numbers="false"] i {
12738
+ border: 0;
12739
+ flex: 0 0 5px;
12740
+ }
12741
+
12742
+ @media (width <= 520px) {
12743
+ .work-document-table-of-contents {
12744
+ padding-inline: 12px;
12745
+ }
12746
+
12747
+ .work-document-table-of-contents-dialog-grid, .work-document-table-of-contents-dialog-options {
12748
+ grid-template-columns: 1fr;
12749
+ }
12750
+ }
12751
+
12456
12752
  .work-document-equation {
12457
12753
  vertical-align: -.12em;
12458
12754
  border-radius: .2em;
@@ -17080,6 +17376,17 @@ sub [data-office-character-position-half-points], sup [data-office-character-pos
17080
17376
  padding: 8px 10px;
17081
17377
  }
17082
17378
 
17379
+ .work-spreadsheet-data-validation-message-grid {
17380
+ grid-template-columns: minmax(0, .7fr) minmax(0, 1.3fr);
17381
+ align-items: start;
17382
+ gap: 10px;
17383
+ display: grid;
17384
+ }
17385
+
17386
+ .work-spreadsheet-data-validation-message-grid .ds-field.message {
17387
+ grid-column: 1 / -1;
17388
+ }
17389
+
17083
17390
  .work-spreadsheet-data-validation-dialog textarea {
17084
17391
  resize: vertical;
17085
17392
  min-height: 70px;
@@ -17096,7 +17403,7 @@ sub [data-office-character-position-half-points], sup [data-office-character-pos
17096
17403
  }
17097
17404
 
17098
17405
  @media (width <= 560px) {
17099
- .work-spreadsheet-data-validation-condition-grid, .work-spreadsheet-data-validation-values.two, .work-spreadsheet-data-validation-behavior {
17406
+ .work-spreadsheet-data-validation-condition-grid, .work-spreadsheet-data-validation-values.two, .work-spreadsheet-data-validation-behavior, .work-spreadsheet-data-validation-message-grid {
17100
17407
  grid-template-columns: minmax(0, 1fr);
17101
17408
  }
17102
17409
  }
@@ -94,7 +94,22 @@ model:
94
94
  instructionless structures keep their rendered result as text and emit a
95
95
  structural compatibility warning instead of being flattened into a false
96
96
  editable field. Native export writes live simple fields and requests a Word
97
- field update on open. Page Layout keeps direct margin, orientation, paper,
97
+ field update on open. Table of Contents is a separate block atom because its
98
+ native field spans cached paragraphs. It reads semantic headings and native
99
+ outline-level paragraphs only from the shared outline collector, reads page
100
+ numbers only from the pagination field resolver, and stores bounded options
101
+ plus at most 512 cached entries. Included outline items without a native
102
+ paragraph identity receive one in the insert/update transaction, so a block
103
+ insertion cannot invalidate its own targets. One
104
+ References dialog owns insert and selected-block customization; explicit
105
+ refresh updates every TOC in one transaction. DOCX export emits a real
106
+ `w:sdt`/`TOC` field, patches native leader and alignment semantics, and adds
107
+ stable heading bookmarks. Import accepts only the lossless common switch
108
+ subset and removes the complete content control before Mammoth conversion,
109
+ then restores one typed block after paragraph identities are applied. Each
110
+ imported TOC matches its cached rows independently, so repeated TOCs can
111
+ target the same heading.
112
+ Page Layout keeps direct margin, orientation, paper,
98
113
  and equal-column presets in the ribbon; custom margins and advanced columns
99
114
  open the corresponding controlled Page Setup tab instead of duplicating a
100
115
  second settings model. References separates footnotes, captions, citations
@@ -721,6 +736,40 @@ written. This keeps direct/style inheritance and prior `w:rPrChange` values
721
736
  exact while treating browser and PDF line-style paint as a bounded visual
722
737
  approximation.
723
738
 
739
+ Native character shading follows a separate paint-only TextStyle path. The
740
+ closed `w:shd` model accepts every schema pattern, independent direct,
741
+ automatic, or resolved-theme foreground/background channels, tint and shade,
742
+ and explicit `nil`. Property sources are resolved from document defaults,
743
+ paragraph and character styles, conditional table styles, and direct run
744
+ properties in native precedence order. Invalid direct leaves normalize to
745
+ `nil`, so stale inherited paint cannot reappear.
746
+
747
+ The canonical mark stores bounded JSON in `data-office-run-shading`; CSS
748
+ projects solid, line, cross, and percentage masks with cloned fragments. These
749
+ declarations do not alter advances, so shading remains Worker/WASM eligible.
750
+ Native highlight is retained as an independent mark and paints above shading.
751
+ Export allocates a collision-checked temporary fill only on generated text
752
+ runs, patches it to the exact `w:shd` attributes across editable stories, and
753
+ then writes exact prior values into `w:rPrChange`.
754
+
755
+ Native proofing metadata follows a separate semantic TextStyle path. A closed
756
+ `w:lang` model retains Latin `w:val`, East Asian `w:eastAsia`, and bidi `w:bidi` slots
757
+ plus explicit `w:noProof` true or false state across style resolution and every
758
+ editable story. The canonical DOM mark uses bounded JSON in
759
+ `data-office-proofing-languages` and an explicit Boolean in
760
+ `data-office-no-proof`; derived `lang` and `spellcheck` attributes are display
761
+ and browser-proofing projections, not replacement source state. Duplicate,
762
+ misplaced, nested, text-bearing, extra-attribute, namespace-spoofed, invalid-tag,
763
+ or invalid on/off leaves fail closed and emit compatibility diagnostics.
764
+
765
+ The text-layout collector resolves the effective inherited `lang` for each DOM
766
+ run, validates the same bounded tag grammar, and includes it in the run-style
767
+ coalescing key. The optional protocol field is backward compatible: missing
768
+ language keeps existing shaping, while a valid value is validated again in
769
+ Rust and set on the RustyBuzz `UnicodeBuffer` before segment-property guessing
770
+ and shaping. This makes language-sensitive glyph selection deterministic
771
+ without coupling pagination to a browser dictionary or host grammar service.
772
+
724
773
  Tables, images, code blocks, and other complex content use explicit
725
774
  format-specific measurement. Top-level tables are row flows; eligible rows can
726
775
  additionally expose synchronized direct-cell block fragments. Ordered and bullet
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@a3s-lab/office",
3
- "version": "0.29.0",
3
+ "version": "0.30.0",
4
4
  "description": "Open-source collaborative browser editors for documents, Markdown, spreadsheets, presentations, and PDFs.",
5
5
  "keywords": [
6
6
  "office",
@@ -90,7 +90,9 @@
90
90
  "playground:visual:document-emphasis": "playwright test visual-tests/document-emphasis.functional.spec.ts --config playwright.config.ts",
91
91
  "playground:visual:document-hidden-text": "playwright test visual-tests/document-hidden-text.functional.spec.ts --config playwright.config.ts",
92
92
  "playground:visual:document-legacy-text-effects": "playwright test visual-tests/document-legacy-text-effects.functional.spec.ts --config playwright.config.ts",
93
+ "playground:visual:document-proofing-languages": "playwright test visual-tests/document-proofing-languages.functional.spec.ts --config playwright.config.ts",
93
94
  "playground:visual:document-run-border": "playwright test visual-tests/document-run-border.functional.spec.ts --config playwright.config.ts",
95
+ "playground:visual:document-run-shading": "playwright test visual-tests/document-run-shading.functional.spec.ts --config playwright.config.ts",
94
96
  "playground:visual:document-kerning": "playwright test visual-tests/document-kerning.functional.spec.ts --config playwright.config.ts",
95
97
  "playground:visual:document-character-scale": "playwright test visual-tests/document-character-scale.functional.spec.ts --config playwright.config.ts",
96
98
  "playground:visual:document-character-position": "playwright test visual-tests/document-character-position.functional.spec.ts --config playwright.config.ts",
@@ -132,6 +134,8 @@
132
134
  "test:e2e:initial-focus:check": "a3s-test check tests/e2e/office-editor-initial-focus.acl --json",
133
135
  "test:e2e:docs": "a3s-test run tests/e2e/office-docs-navigation.acl --json",
134
136
  "test:e2e:docs:check": "a3s-test check tests/e2e/office-docs-navigation.acl --json",
137
+ "test:e2e:latest-capabilities": "A3S_TEST_SUITE=tests/e2e/latest-capabilities-discoverability.acl bash scripts/run-a3s-test-web-gate.sh",
138
+ "test:e2e:latest-capabilities:check": "a3s-test check tests/e2e/latest-capabilities-discoverability.acl --json",
135
139
  "test:e2e:collaboration-participants": "a3s-test run tests/e2e/collaboration-participants.acl --json",
136
140
  "test:e2e:collaboration-participants:check": "a3s-test check tests/e2e/collaboration-participants.acl --json",
137
141
  "test:e2e:collaboration-playground": "a3s-test run tests/e2e/collaboration-playground-entry.acl --json",
@@ -176,7 +180,7 @@
176
180
  "test:e2e:spreadsheet-gradient-fill:check": "a3s-test check tests/e2e/spreadsheet-gradient-fill.acl --json",
177
181
  "test:e2e:spreadsheet-go-to": "a3s-test run tests/e2e/spreadsheet-go-to.acl --json",
178
182
  "test:e2e:spreadsheet-go-to:check": "a3s-test check tests/e2e/spreadsheet-go-to.acl --json",
179
- "test:e2e:spreadsheet-data-validation": "a3s-test run tests/e2e/spreadsheet-data-validation.acl --json",
183
+ "test:e2e:spreadsheet-data-validation": "A3S_TEST_SUITE=tests/e2e/spreadsheet-data-validation.acl bash scripts/run-a3s-test-web-gate.sh",
180
184
  "test:e2e:spreadsheet-data-validation:check": "a3s-test check tests/e2e/spreadsheet-data-validation.acl --json",
181
185
  "test:e2e:spreadsheet-diagonal-borders": "a3s-test run tests/e2e/spreadsheet-diagonal-borders.acl --json",
182
186
  "test:e2e:spreadsheet-diagonal-borders:check": "a3s-test check tests/e2e/spreadsheet-diagonal-borders.acl --json",
@@ -202,8 +206,14 @@
202
206
  "test:e2e:writer-hidden-text:check": "a3s-test check tests/e2e/word-hidden-text.acl --json",
203
207
  "test:e2e:writer-legacy-text-effects": "A3S_TEST_SUITE=tests/e2e/word-legacy-text-effects.acl bash scripts/run-a3s-test-web-gate.sh",
204
208
  "test:e2e:writer-legacy-text-effects:check": "a3s-test check tests/e2e/word-legacy-text-effects.acl --json",
209
+ "test:e2e:writer-proofing-languages": "A3S_TEST_SUITE=tests/e2e/word-proofing-languages.acl bash scripts/run-a3s-test-web-gate.sh",
210
+ "test:e2e:writer-proofing-languages:check": "a3s-test check tests/e2e/word-proofing-languages.acl --json",
211
+ "test:e2e:writer-table-of-contents": "A3S_TEST_SUITE=tests/e2e/word-table-of-contents.acl bash scripts/run-a3s-test-web-gate.sh",
212
+ "test:e2e:writer-table-of-contents:check": "a3s-test check tests/e2e/word-table-of-contents.acl --json",
205
213
  "test:e2e:writer-run-border": "A3S_TEST_SUITE=tests/e2e/word-run-border.acl bash scripts/run-a3s-test-web-gate.sh",
206
214
  "test:e2e:writer-run-border:check": "a3s-test check tests/e2e/word-run-border.acl --json",
215
+ "test:e2e:writer-run-shading": "A3S_TEST_SUITE=tests/e2e/word-run-shading.acl bash scripts/run-a3s-test-web-gate.sh",
216
+ "test:e2e:writer-run-shading:check": "a3s-test check tests/e2e/word-run-shading.acl --json",
207
217
  "test:e2e:writer-kerning": "A3S_TEST_SUITE=tests/e2e/word-kerning.acl bash scripts/run-a3s-test-web-gate.sh",
208
218
  "test:e2e:writer-kerning:check": "a3s-test check tests/e2e/word-kerning.acl --json",
209
219
  "test:e2e:writer-character-scale": "A3S_TEST_SUITE=tests/e2e/word-character-scale.acl bash scripts/run-a3s-test-web-gate.sh",