@a3s-lab/office 0.13.1 → 0.14.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 (35) hide show
  1. package/README.md +28 -5
  2. package/dist/0~7048.js +14 -4
  3. package/dist/0~spreadsheet-editor.js +9329 -5294
  4. package/dist/internal/features/work/editors/office-checkbox.d.ts +3 -2
  5. package/dist/internal/features/work/editors/spreadsheet-auto-sum-command.d.ts +3 -0
  6. package/dist/internal/features/work/editors/spreadsheet-auto-sum.d.ts +19 -0
  7. package/dist/internal/features/work/editors/spreadsheet-cell-format-command.d.ts +3 -0
  8. package/dist/internal/features/work/editors/spreadsheet-cell-format.d.ts +36 -0
  9. package/dist/internal/features/work/editors/spreadsheet-cell-mutation-guard.d.ts +4 -0
  10. package/dist/internal/features/work/editors/spreadsheet-clipboard-shortcuts.d.ts +1 -0
  11. package/dist/internal/features/work/editors/spreadsheet-clipboard.d.ts +13 -0
  12. package/dist/internal/features/work/editors/spreadsheet-command-catalog.d.ts +119 -0
  13. package/dist/internal/features/work/editors/spreadsheet-command-controller.d.ts +38 -0
  14. package/dist/internal/features/work/editors/spreadsheet-context-menu.d.ts +5 -15
  15. package/dist/internal/features/work/editors/spreadsheet-editor-ribbon.d.ts +1 -2
  16. package/dist/internal/features/work/editors/spreadsheet-format-cells-dialog-model.d.ts +86 -0
  17. package/dist/internal/features/work/editors/spreadsheet-format-cells-dialog-panels.d.ts +15 -0
  18. package/dist/internal/features/work/editors/spreadsheet-format-cells-dialog.d.ts +8 -0
  19. package/dist/internal/features/work/editors/spreadsheet-go-to.d.ts +24 -0
  20. package/dist/internal/features/work/editors/spreadsheet-keyboard-navigation.d.ts +4 -0
  21. package/dist/internal/features/work/editors/spreadsheet-navigation-command.d.ts +3 -0
  22. package/dist/internal/features/work/editors/spreadsheet-number-format-command.d.ts +24 -0
  23. package/dist/internal/features/work/editors/spreadsheet-paste-special-cell.d.ts +17 -0
  24. package/dist/internal/features/work/editors/spreadsheet-paste-special-dialog.d.ts +9 -0
  25. package/dist/internal/features/work/editors/spreadsheet-paste-special-mode.d.ts +11 -0
  26. package/dist/internal/features/work/editors/spreadsheet-paste-special-plan.d.ts +4 -0
  27. package/dist/internal/features/work/editors/spreadsheet-paste-special-sheet.d.ts +23 -0
  28. package/dist/internal/features/work/editors/spreadsheet-paste-special-snapshot.d.ts +10 -0
  29. package/dist/internal/features/work/editors/spreadsheet-paste-special-types.d.ts +127 -0
  30. package/dist/internal/features/work/editors/spreadsheet-paste-special.d.ts +7 -0
  31. package/dist/internal/features/work/editors/use-spreadsheet-clipboard.d.ts +36 -0
  32. package/dist/office-kernel.wasm +0 -0
  33. package/dist/styles.css +548 -1
  34. package/docs/latest/en/browser-editor-architecture.md +12 -1
  35. package/package.json +9 -3
package/dist/styles.css CHANGED
@@ -4877,7 +4877,7 @@ html[data-ds-resizing="horizontal"], html[data-ds-resizing="horizontal"] * {
4877
4877
  display: grid;
4878
4878
  }
4879
4879
 
4880
- .work-office-checkbox.checked .work-office-checkbox-box {
4880
+ .work-office-checkbox.checked .work-office-checkbox-box, .work-office-checkbox.indeterminate .work-office-checkbox-box {
4881
4881
  border-color: var(--work-office-control-accent, var(--a3s-blue));
4882
4882
  background: var(--work-office-control-accent, var(--a3s-blue));
4883
4883
  }
@@ -14985,6 +14985,17 @@ button.work-office-collaboration-participant:hover .work-office-collaboration-lo
14985
14985
  grid-template-columns: 20px minmax(0, 1fr);
14986
14986
  }
14987
14987
 
14988
+ .work-spreadsheet-find-select-menu > button, .work-spreadsheet-paste-menu > button {
14989
+ grid-template-columns: 20px minmax(0, 1fr) auto;
14990
+ }
14991
+
14992
+ .work-spreadsheet-ribbon-menu-separator {
14993
+ background: var(--a3s-line);
14994
+ border: 0;
14995
+ height: 1px;
14996
+ margin: 4px 8px;
14997
+ }
14998
+
14988
14999
  .work-spreadsheet-ribbon-menu > button > span:last-child {
14989
15000
  white-space: normal;
14990
15001
  }
@@ -15592,6 +15603,542 @@ button.work-office-collaboration-participant:hover .work-office-collaboration-lo
15592
15603
  }
15593
15604
  }
15594
15605
 
15606
+ .work-spreadsheet-format-cells-dialog {
15607
+ width: min(680px, 100%);
15608
+ }
15609
+
15610
+ .work-spreadsheet-format-cells-dialog > .ds-dialog-body {
15611
+ padding-top: 0;
15612
+ }
15613
+
15614
+ .work-spreadsheet-format-cells-tabs.ds-tabs {
15615
+ border-bottom: 1px solid var(--a3s-line);
15616
+ scrollbar-width: thin;
15617
+ gap: 0;
15618
+ overflow-x: auto;
15619
+ }
15620
+
15621
+ .work-spreadsheet-format-cells-tabs.ds-tabs > button {
15622
+ flex: 1 0 auto;
15623
+ min-width: max-content;
15624
+ padding-inline: 13px;
15625
+ }
15626
+
15627
+ .work-spreadsheet-format-cells-dialog form {
15628
+ min-height: 290px;
15629
+ }
15630
+
15631
+ .work-spreadsheet-format-cells-panel {
15632
+ outline: 0;
15633
+ min-height: 270px;
15634
+ padding: 20px 2px 4px;
15635
+ }
15636
+
15637
+ .work-spreadsheet-format-cells-grid {
15638
+ grid-template-columns: repeat(2, minmax(0, 1fr));
15639
+ gap: 16px 20px;
15640
+ display: grid;
15641
+ }
15642
+
15643
+ .work-spreadsheet-format-cells-grid.font {
15644
+ align-items: start;
15645
+ }
15646
+
15647
+ .work-spreadsheet-format-cells-field {
15648
+ min-width: 0;
15649
+ color: var(--a3s-muted);
15650
+ gap: 6px;
15651
+ font-size: 11px;
15652
+ font-weight: 600;
15653
+ display: grid;
15654
+ }
15655
+
15656
+ .work-spreadsheet-format-cells-field > .work-office-select, .work-spreadsheet-format-cells-field > .work-office-number-field, .work-spreadsheet-format-cells-field > .work-office-text-field, .work-spreadsheet-format-cells-field > .work-office-color-picker, .work-spreadsheet-format-cells-field > .work-office-select > button[role="combobox"], .work-spreadsheet-format-cells-field .work-office-color-trigger {
15657
+ width: 100%;
15658
+ }
15659
+
15660
+ .work-spreadsheet-format-cells-field > .work-office-text-field {
15661
+ min-height: 29px;
15662
+ }
15663
+
15664
+ .work-spreadsheet-format-cells-number {
15665
+ grid-template-columns: minmax(150px, .7fr) minmax(240px, 1.3fr);
15666
+ gap: 16px 20px;
15667
+ display: grid;
15668
+ }
15669
+
15670
+ .work-spreadsheet-format-cells-number > [role="alert"], .work-spreadsheet-format-cells-grid > [role="alert"] {
15671
+ color: var(--a3s-red);
15672
+ grid-column: 1 / -1;
15673
+ margin: -8px 0 0;
15674
+ font-size: 11px;
15675
+ }
15676
+
15677
+ .work-spreadsheet-format-cells-sample {
15678
+ border: 1px solid var(--a3s-line);
15679
+ background: var(--a3s-panel-soft);
15680
+ border-radius: 10px;
15681
+ grid-column: 1 / -1;
15682
+ grid-template-columns: minmax(0, 1fr) auto;
15683
+ align-content: center;
15684
+ gap: 7px 16px;
15685
+ min-height: 104px;
15686
+ padding: 16px 18px;
15687
+ display: grid;
15688
+ }
15689
+
15690
+ .work-spreadsheet-format-cells-sample > span {
15691
+ color: var(--a3s-muted);
15692
+ grid-column: 1 / -1;
15693
+ font-size: 10px;
15694
+ font-weight: 650;
15695
+ }
15696
+
15697
+ .work-spreadsheet-format-cells-sample > output {
15698
+ color: var(--a3s-ink);
15699
+ text-overflow: ellipsis;
15700
+ white-space: nowrap;
15701
+ font-size: 22px;
15702
+ font-weight: 650;
15703
+ overflow: hidden;
15704
+ }
15705
+
15706
+ .work-spreadsheet-format-cells-sample > small {
15707
+ color: var(--a3s-muted);
15708
+ font-family: var(--font-mono);
15709
+ align-self: center;
15710
+ font-size: 10px;
15711
+ }
15712
+
15713
+ .work-spreadsheet-format-cells-options {
15714
+ border: 1px solid var(--a3s-line);
15715
+ border-radius: 8px;
15716
+ gap: 4px;
15717
+ min-width: 0;
15718
+ margin: 0;
15719
+ padding: 9px 12px;
15720
+ display: grid;
15721
+ }
15722
+
15723
+ .work-spreadsheet-format-cells-options > legend {
15724
+ color: var(--a3s-muted);
15725
+ padding: 0 4px;
15726
+ font-size: 10px;
15727
+ font-weight: 650;
15728
+ }
15729
+
15730
+ .work-spreadsheet-format-cells-options.emphasis {
15731
+ grid-template-columns: repeat(2, minmax(0, 1fr));
15732
+ }
15733
+
15734
+ .work-spreadsheet-format-cells-font-preview {
15735
+ border: 1px solid var(--a3s-line);
15736
+ background: var(--a3s-panel-soft);
15737
+ text-align: center;
15738
+ border-radius: 9px;
15739
+ grid-column: 1 / -1;
15740
+ place-items: center;
15741
+ min-height: 72px;
15742
+ padding: 12px;
15743
+ display: grid;
15744
+ overflow: hidden;
15745
+ }
15746
+
15747
+ .work-spreadsheet-format-cells-border {
15748
+ gap: 18px;
15749
+ display: grid;
15750
+ }
15751
+
15752
+ .work-spreadsheet-format-cells-border-tools {
15753
+ grid-template-columns: repeat(2, minmax(0, 1fr));
15754
+ gap: 20px;
15755
+ display: grid;
15756
+ }
15757
+
15758
+ .work-spreadsheet-format-cells-border-layout {
15759
+ grid-template-columns: minmax(190px, .8fr) minmax(220px, 1.2fr);
15760
+ align-items: center;
15761
+ gap: 24px;
15762
+ display: grid;
15763
+ }
15764
+
15765
+ .work-spreadsheet-format-cells-border-actions {
15766
+ grid-template-columns: repeat(5, 34px);
15767
+ gap: 8px;
15768
+ display: grid;
15769
+ }
15770
+
15771
+ .work-spreadsheet-format-cells-border-actions > .ds-button {
15772
+ grid-column: 1 / -1;
15773
+ justify-self: start;
15774
+ }
15775
+
15776
+ .work-spreadsheet-border-edge {
15777
+ border: 1px solid var(--a3s-line);
15778
+ background: var(--a3s-panel);
15779
+ cursor: pointer;
15780
+ border-radius: 7px;
15781
+ place-items: center;
15782
+ width: 34px;
15783
+ height: 34px;
15784
+ padding: 7px;
15785
+ display: grid;
15786
+ position: relative;
15787
+ }
15788
+
15789
+ .work-spreadsheet-border-edge:hover, .work-spreadsheet-border-edge[aria-pressed="true"] {
15790
+ border-color: color-mix(in srgb, var(--a3s-green) 48%, var(--a3s-line));
15791
+ background: color-mix(in srgb, var(--a3s-green) 9%, var(--a3s-panel));
15792
+ }
15793
+
15794
+ .work-spreadsheet-border-edge > span {
15795
+ border: 1px solid var(--a3s-line-strong);
15796
+ width: 18px;
15797
+ height: 18px;
15798
+ position: relative;
15799
+ }
15800
+
15801
+ .work-spreadsheet-border-edge.top > span {
15802
+ border-top: 2px solid;
15803
+ }
15804
+
15805
+ .work-spreadsheet-border-edge.bottom > span {
15806
+ border-bottom: 2px solid;
15807
+ }
15808
+
15809
+ .work-spreadsheet-border-edge.left > span {
15810
+ border-left: 2px solid;
15811
+ }
15812
+
15813
+ .work-spreadsheet-border-edge.right > span {
15814
+ border-right: 2px solid;
15815
+ }
15816
+
15817
+ .work-spreadsheet-border-edge.diagonal > span:after {
15818
+ content: "";
15819
+ border-top: 2px solid;
15820
+ width: 20px;
15821
+ position: absolute;
15822
+ top: 8px;
15823
+ left: -2px;
15824
+ transform: rotate(-45deg);
15825
+ }
15826
+
15827
+ .work-spreadsheet-format-cells-border-preview {
15828
+ border: 1px dashed var(--a3s-line-strong);
15829
+ background: var(--a3s-panel-soft);
15830
+ justify-self: center;
15831
+ place-items: center;
15832
+ width: min(220px, 100%);
15833
+ height: 126px;
15834
+ display: grid;
15835
+ position: relative;
15836
+ }
15837
+
15838
+ .work-spreadsheet-format-cells-border-preview > span {
15839
+ pointer-events: none;
15840
+ position: absolute;
15841
+ inset: 10px;
15842
+ }
15843
+
15844
+ .work-spreadsheet-format-cells-border-preview > .diagonal {
15845
+ inset: 50% 5%;
15846
+ transform: rotate(-26deg);
15847
+ }
15848
+
15849
+ .work-spreadsheet-format-cells-border-preview > strong {
15850
+ color: var(--a3s-muted);
15851
+ font-size: 12px;
15852
+ font-weight: 600;
15853
+ }
15854
+
15855
+ .work-spreadsheet-format-cells-fill {
15856
+ grid-template-columns: minmax(190px, 1fr) auto;
15857
+ align-items: end;
15858
+ gap: 16px;
15859
+ max-width: 430px;
15860
+ display: grid;
15861
+ }
15862
+
15863
+ .work-spreadsheet-format-cells-fill-preview {
15864
+ border: 1px solid var(--a3s-line);
15865
+ min-height: 118px;
15866
+ color: var(--a3s-ink);
15867
+ border-radius: 9px;
15868
+ grid-column: 1 / -1;
15869
+ place-items: center;
15870
+ font-size: 11px;
15871
+ font-weight: 650;
15872
+ display: grid;
15873
+ }
15874
+
15875
+ .work-spreadsheet-format-cells-fill-preview.empty {
15876
+ background: var(--a3s-panel-soft);
15877
+ color: var(--a3s-muted);
15878
+ }
15879
+
15880
+ .work-spreadsheet-format-cells-protection {
15881
+ gap: 8px;
15882
+ max-width: 460px;
15883
+ display: grid;
15884
+ }
15885
+
15886
+ .work-spreadsheet-format-cells-protection > p, .work-spreadsheet-format-cells-mixed {
15887
+ color: var(--a3s-muted);
15888
+ margin: 8px 0 0;
15889
+ font-size: 11px;
15890
+ line-height: 1.6;
15891
+ }
15892
+
15893
+ .work-spreadsheet-format-cells-mixed {
15894
+ grid-column: 1 / -1;
15895
+ }
15896
+
15897
+ @media (width <= 620px) {
15898
+ .work-spreadsheet-format-cells-dialog form {
15899
+ min-height: 360px;
15900
+ }
15901
+
15902
+ .work-spreadsheet-format-cells-panel {
15903
+ min-height: 340px;
15904
+ }
15905
+
15906
+ .work-spreadsheet-format-cells-grid, .work-spreadsheet-format-cells-number, .work-spreadsheet-format-cells-border-tools, .work-spreadsheet-format-cells-border-layout {
15907
+ grid-template-columns: minmax(0, 1fr);
15908
+ }
15909
+
15910
+ .work-spreadsheet-format-cells-border-layout {
15911
+ align-items: start;
15912
+ }
15913
+
15914
+ .work-spreadsheet-format-cells-border-preview {
15915
+ width: 100%;
15916
+ height: 100px;
15917
+ }
15918
+
15919
+ .work-spreadsheet-format-cells-fill {
15920
+ grid-template-columns: minmax(0, 1fr);
15921
+ }
15922
+
15923
+ .work-spreadsheet-format-cells-fill-preview {
15924
+ grid-column: 1;
15925
+ }
15926
+ }
15927
+
15928
+ .work-spreadsheet-paste-special-dialog {
15929
+ --work-office-control-accent: var(--work-spreadsheet-accent, #159469);
15930
+ width: min(660px, 100%);
15931
+ }
15932
+
15933
+ .work-spreadsheet-paste-special-dialog > .ds-dialog-body {
15934
+ padding-top: 0;
15935
+ }
15936
+
15937
+ .work-spreadsheet-paste-special-source {
15938
+ background: color-mix(in srgb,
15939
+ var(--work-spreadsheet-accent, #159469) 7%,
15940
+ var(--a3s-panel-soft));
15941
+ min-height: 34px;
15942
+ color: var(--a3s-muted);
15943
+ border-radius: 7px;
15944
+ justify-content: space-between;
15945
+ align-items: center;
15946
+ gap: 12px;
15947
+ margin-bottom: 15px;
15948
+ padding: 0 11px;
15949
+ font-size: 11px;
15950
+ display: flex;
15951
+ }
15952
+
15953
+ .work-spreadsheet-paste-special-source strong {
15954
+ color: var(--a3s-ink);
15955
+ font-weight: 650;
15956
+ }
15957
+
15958
+ .work-spreadsheet-paste-special-dialog form {
15959
+ grid-template-columns: minmax(0, 1.55fr) minmax(170px, .75fr);
15960
+ align-items: start;
15961
+ gap: 18px 22px;
15962
+ display: grid;
15963
+ }
15964
+
15965
+ .work-spreadsheet-paste-special-dialog fieldset {
15966
+ border: 0;
15967
+ min-width: 0;
15968
+ margin: 0;
15969
+ padding: 0;
15970
+ }
15971
+
15972
+ .work-spreadsheet-paste-special-dialog legend {
15973
+ width: 100%;
15974
+ color: var(--a3s-muted);
15975
+ margin-bottom: 8px;
15976
+ font-size: 11px;
15977
+ font-weight: 650;
15978
+ }
15979
+
15980
+ .work-spreadsheet-paste-special-modes {
15981
+ grid-row: span 2;
15982
+ }
15983
+
15984
+ .work-spreadsheet-paste-special-modes > div {
15985
+ grid-template-columns: repeat(2, minmax(0, 1fr));
15986
+ gap: 3px;
15987
+ display: grid;
15988
+ }
15989
+
15990
+ .work-spreadsheet-paste-special-modes label {
15991
+ min-height: 37px;
15992
+ color: var(--a3s-ink);
15993
+ cursor: pointer;
15994
+ border-radius: 7px;
15995
+ grid-template-columns: 14px minmax(0, 1fr);
15996
+ align-items: center;
15997
+ gap: 8px;
15998
+ padding: 6px 8px;
15999
+ font-size: 11px;
16000
+ display: grid;
16001
+ position: relative;
16002
+ }
16003
+
16004
+ .work-spreadsheet-paste-special-modes label:hover {
16005
+ background: var(--a3s-panel-soft);
16006
+ }
16007
+
16008
+ .work-spreadsheet-paste-special-modes label.selected {
16009
+ background: color-mix(in srgb,
16010
+ var(--work-spreadsheet-accent, #159469) 10%,
16011
+ var(--a3s-panel));
16012
+ }
16013
+
16014
+ .work-spreadsheet-paste-special-modes label:has(input:focus-visible), .work-spreadsheet-paste-special-operations label:has(input:focus-visible) {
16015
+ outline: 2px solid
16016
+ color-mix(in srgb, var(--work-spreadsheet-accent, #159469) 32%, transparent);
16017
+ outline-offset: 1px;
16018
+ }
16019
+
16020
+ .work-spreadsheet-paste-special-modes label:has(input:disabled) {
16021
+ cursor: not-allowed;
16022
+ opacity: .48;
16023
+ }
16024
+
16025
+ .work-spreadsheet-paste-special-modes input, .work-spreadsheet-paste-special-operations input {
16026
+ opacity: 0;
16027
+ width: 1px;
16028
+ height: 1px;
16029
+ position: absolute;
16030
+ }
16031
+
16032
+ .work-spreadsheet-paste-special-modes label > span[aria-hidden="true"] {
16033
+ box-sizing: border-box;
16034
+ border: 1px solid var(--a3s-line-strong);
16035
+ background: var(--a3s-panel);
16036
+ border-radius: 50%;
16037
+ place-items: center;
16038
+ width: 14px;
16039
+ height: 14px;
16040
+ display: grid;
16041
+ }
16042
+
16043
+ .work-spreadsheet-paste-special-modes label.selected > span[aria-hidden="true"] {
16044
+ border: 4px solid var(--work-spreadsheet-accent, #159469);
16045
+ }
16046
+
16047
+ .work-spreadsheet-paste-special-modes small {
16048
+ color: var(--a3s-muted);
16049
+ grid-column: 2;
16050
+ margin-top: -2px;
16051
+ font-size: 9px;
16052
+ line-height: 1.2;
16053
+ }
16054
+
16055
+ .work-spreadsheet-paste-special-operations > div {
16056
+ grid-template-columns: repeat(2, minmax(0, 1fr));
16057
+ gap: 4px;
16058
+ display: grid;
16059
+ }
16060
+
16061
+ .work-spreadsheet-paste-special-operations label {
16062
+ border: 1px solid var(--a3s-line);
16063
+ background: var(--a3s-panel);
16064
+ min-height: 30px;
16065
+ color: var(--a3s-muted);
16066
+ cursor: pointer;
16067
+ border-radius: 6px;
16068
+ place-items: center;
16069
+ font-size: 10px;
16070
+ display: grid;
16071
+ position: relative;
16072
+ }
16073
+
16074
+ .work-spreadsheet-paste-special-operations label:first-child {
16075
+ grid-column: 1 / -1;
16076
+ }
16077
+
16078
+ .work-spreadsheet-paste-special-operations label:hover {
16079
+ border-color: color-mix(in srgb,
16080
+ var(--work-spreadsheet-accent, #159469) 42%,
16081
+ var(--a3s-line));
16082
+ }
16083
+
16084
+ .work-spreadsheet-paste-special-operations label.selected {
16085
+ border-color: color-mix(in srgb,
16086
+ var(--work-spreadsheet-accent, #159469) 58%,
16087
+ var(--a3s-line));
16088
+ background: color-mix(in srgb,
16089
+ var(--work-spreadsheet-accent, #159469) 9%,
16090
+ var(--a3s-panel));
16091
+ color: var(--a3s-ink);
16092
+ font-weight: 650;
16093
+ }
16094
+
16095
+ .work-spreadsheet-paste-special-operations label:has(input:disabled) {
16096
+ cursor: not-allowed;
16097
+ opacity: .42;
16098
+ }
16099
+
16100
+ .work-spreadsheet-paste-special-options {
16101
+ gap: 8px;
16102
+ padding-top: 2px;
16103
+ display: grid;
16104
+ }
16105
+
16106
+ .work-spreadsheet-paste-special-options .work-office-checkbox {
16107
+ min-height: 28px;
16108
+ }
16109
+
16110
+ .work-spreadsheet-paste-special-error {
16111
+ background: color-mix(in srgb, var(--a3s-red) 8%, var(--a3s-panel));
16112
+ color: color-mix(in srgb, var(--a3s-red) 88%, var(--a3s-ink));
16113
+ border-radius: 6px;
16114
+ grid-column: 1 / -1;
16115
+ margin: -4px 0 0;
16116
+ padding: 8px 10px;
16117
+ font-size: 11px;
16118
+ line-height: 1.45;
16119
+ }
16120
+
16121
+ @media (width <= 620px) {
16122
+ .work-spreadsheet-paste-special-dialog form {
16123
+ grid-template-columns: minmax(0, 1fr);
16124
+ gap: 16px;
16125
+ }
16126
+
16127
+ .work-spreadsheet-paste-special-modes {
16128
+ grid-row: auto;
16129
+ }
16130
+
16131
+ .work-spreadsheet-paste-special-options {
16132
+ grid-template-columns: repeat(2, minmax(0, 1fr));
16133
+ }
16134
+ }
16135
+
16136
+ @media (width <= 420px) {
16137
+ .work-spreadsheet-paste-special-modes > div, .work-spreadsheet-paste-special-options {
16138
+ grid-template-columns: minmax(0, 1fr);
16139
+ }
16140
+ }
16141
+
15595
16142
  .work-spreadsheet-chart-manager {
15596
16143
  border: 0;
15597
16144
  grid-template-columns: minmax(180px, 230px) minmax(720px, 1fr);
@@ -110,7 +110,18 @@ model:
110
110
  Data, and owns F9 workbook recalculation in the root-scoped keyboard
111
111
  controller. Paste, Cut, and Copy live in the first Home group; both button
112
112
  clicks and WPS shortcuts cross one clipboard command port before using the
113
- permission-resilient browser/local clipboard implementation. Format Painter
113
+ permission-resilient browser/local clipboard implementation. Paste Special
114
+ extends that port with a versioned rich snapshot and a pure bounded planner
115
+ instead of delegating mutation to rendered vendor controls. Quick All,
116
+ Values, Formulas, and Formatting commands and the `Cmd/Ctrl+Alt+V` dialog
117
+ converge on the same request model. The planner tiles or transposes the
118
+ source, translates relative formula references, validates protection,
119
+ pivots, merges, bounds, unsupported formula state, and arithmetic, then
120
+ publishes one controlled workbook value and one Undo record for at most
121
+ 50,000 cells. External text enters through a rectangular TSV snapshot and
122
+ never gains rich-formatting authority. Dialog Apply resolves the current
123
+ grid again on the next frame so controlled remounts cannot strand keyboard
124
+ focus. Format Painter
114
125
  uses a dedicated format-pattern model and React session hook behind another
115
126
  typed command port. It captures owned native style attributes only, expands
116
127
  or tiles the pattern across same-sheet or cross-sheet targets, guards both
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@a3s-lab/office",
3
- "version": "0.13.1",
3
+ "version": "0.14.0",
4
4
  "description": "Open-source collaborative browser editors for documents, Markdown, spreadsheets, presentations, and PDFs.",
5
5
  "keywords": [
6
6
  "office",
@@ -97,8 +97,8 @@
97
97
  "performance:pdf": "bun .a3s-test/performance/generate-fixtures.ts --pdf-only && bun .a3s-test/performance/benchmark-pdf.ts --url http://127.0.0.1:4175/ --runs 3 --timeout-ms 120000",
98
98
  "performance:presentation": "bun .a3s-test/performance/generate-fixtures.ts --presentations-only && bun .a3s-test/performance/benchmark-presentation.ts --url http://127.0.0.1:4175/ --runs 3 --timeout-ms 120000 --modes default,content-visibility",
99
99
  "test": "rstest",
100
- "test:e2e": "bun run test:e2e:fixtures && a3s-test run tests/e2e/word-page-color.acl --json && a3s-test run tests/e2e/word-page-setup-phone.acl --json && a3s-test run tests/e2e/word-paragraph-layout-phone.acl --json && a3s-test run tests/e2e/word-list-formatting-phone.acl --json && a3s-test run tests/e2e/word-font-picker-phone.acl --json && a3s-test run tests/e2e/word-comments-drawer.acl --json && a3s-test run tests/e2e/word-comment-windowing.acl --json && a3s-test run tests/e2e/word-citations-phone.acl --json && a3s-test run tests/e2e/word-navigation-search.acl --json && a3s-test run tests/e2e/word-navigation-windowing.acl --json && a3s-test run tests/e2e/word-find-replace-phone.acl --json && a3s-test run tests/e2e/word-page-navigation.acl --json && a3s-test run tests/e2e/word-page-windowing.acl --json && a3s-test run tests/e2e/word-ai-question.acl --json && a3s-test run tests/e2e/word-picture-insert.acl --json && a3s-test run tests/e2e/word-picture-alt-text-phone.acl --json && a3s-test run tests/e2e/word-track-changes-phone.acl --json && a3s-test run tests/e2e/word-formatting-revision.acl --json && a3s-test run tests/e2e/word-paragraph-formatting-revision.acl --json && a3s-test run tests/e2e/word-review-conflict-phone.acl --json && a3s-test run tests/e2e/word-revision-windowing.acl --json && a3s-test run tests/e2e/word-table-phone.acl --json && a3s-test run tests/e2e/word-table-borders.acl --json && a3s-test run tests/e2e/word-theme-table.acl --json && a3s-test run tests/e2e/word-styled-table.acl --json && a3s-test run tests/e2e/word-multi-page-table.acl --json && a3s-test run tests/e2e/word-cross-reference-phone.acl --json && a3s-test run tests/e2e/word-bookmark-links-phone.acl --json && a3s-test run tests/e2e/word-notes-phone.acl --json && a3s-test run tests/e2e/word-fields-phone.acl --json && a3s-test run tests/e2e/spreadsheet-phone-rename.acl --json && a3s-test run tests/e2e/spreadsheet-phone-find.acl --json && a3s-test run tests/e2e/spreadsheet-phone-context-menu.acl --json && a3s-test run tests/e2e/spreadsheet-phone-task-pane.acl --json && a3s-test run tests/e2e/spreadsheet-maximum-sparse.acl --json && a3s-test run tests/e2e/spreadsheet-cell-style.acl --json && a3s-test run tests/e2e/presentation-cut-paste-focus.acl --json && a3s-test run tests/e2e/presentation-presenter-view.acl --json && a3s-test run tests/e2e/presentation-phone-chart-pane.acl --json && a3s-test run tests/e2e/presentation-phone-comments.acl --json && a3s-test run tests/e2e/pdf-thumbnail-keyboard.acl --json && a3s-test run tests/e2e/pdf-page-drawer-phone.acl --json && a3s-test run tests/e2e/markdown-phone-modes.acl --json && a3s-test run tests/e2e/office-sidebar-breakpoint.acl --json && a3s-test run tests/e2e/office-docs-navigation.acl --json && a3s-test run tests/e2e/collaboration-playground-entry.acl --json && a3s-test run tests/e2e/collaboration-document-comments.acl --command-timeout-ms 120000 --json && a3s-test run tests/e2e/collaboration-document-suggestions.acl --command-timeout-ms 120000 --json && a3s-test run tests/e2e/collaboration-participants.acl --json && a3s-test run tests/e2e/collaboration-pdf-annotations.acl --json && a3s-test run tests/e2e/collaboration-spreadsheet-cells.acl --json && a3s-test run tests/e2e/collaboration-presentation-elements.acl --json",
101
- "test:e2e:check": "bun run test:e2e:fixtures && a3s-test check tests/e2e/word-page-color.acl --json && a3s-test check tests/e2e/word-page-setup-phone.acl --json && a3s-test check tests/e2e/word-paragraph-layout-phone.acl --json && a3s-test check tests/e2e/word-list-formatting-phone.acl --json && a3s-test check tests/e2e/word-font-picker-phone.acl --json && a3s-test check tests/e2e/word-comments-drawer.acl --json && a3s-test check tests/e2e/word-comment-windowing.acl --json && a3s-test check tests/e2e/word-citations-phone.acl --json && a3s-test check tests/e2e/word-navigation-search.acl --json && a3s-test check tests/e2e/word-navigation-windowing.acl --json && a3s-test check tests/e2e/word-find-replace-phone.acl --json && a3s-test check tests/e2e/word-page-navigation.acl --json && a3s-test check tests/e2e/word-page-windowing.acl --json && a3s-test check tests/e2e/word-ai-question.acl --json && a3s-test check tests/e2e/word-picture-insert.acl --json && a3s-test check tests/e2e/word-picture-alt-text-phone.acl --json && a3s-test check tests/e2e/word-track-changes-phone.acl --json && a3s-test check tests/e2e/word-formatting-revision.acl --json && a3s-test check tests/e2e/word-paragraph-formatting-revision.acl --json && a3s-test check tests/e2e/word-review-conflict-phone.acl --json && a3s-test check tests/e2e/word-revision-windowing.acl --json && a3s-test check tests/e2e/word-table-phone.acl --json && a3s-test check tests/e2e/word-table-borders.acl --json && a3s-test check tests/e2e/word-theme-table.acl --json && a3s-test check tests/e2e/word-styled-table.acl --json && a3s-test check tests/e2e/word-multi-page-table.acl --json && a3s-test check tests/e2e/word-cross-reference-phone.acl --json && a3s-test check tests/e2e/word-bookmark-links-phone.acl --json && a3s-test check tests/e2e/word-notes-phone.acl --json && a3s-test check tests/e2e/word-fields-phone.acl --json && a3s-test check tests/e2e/spreadsheet-phone-rename.acl --json && a3s-test check tests/e2e/spreadsheet-phone-find.acl --json && a3s-test check tests/e2e/spreadsheet-phone-context-menu.acl --json && a3s-test check tests/e2e/spreadsheet-phone-task-pane.acl --json && a3s-test check tests/e2e/spreadsheet-maximum-sparse.acl --json && a3s-test check tests/e2e/spreadsheet-cell-style.acl --json && a3s-test check tests/e2e/presentation-cut-paste-focus.acl --json && a3s-test check tests/e2e/presentation-presenter-view.acl --json && a3s-test check tests/e2e/presentation-phone-chart-pane.acl --json && a3s-test check tests/e2e/presentation-phone-comments.acl --json && a3s-test check tests/e2e/pdf-thumbnail-keyboard.acl --json && a3s-test check tests/e2e/pdf-page-drawer-phone.acl --json && a3s-test check tests/e2e/markdown-phone-modes.acl --json && a3s-test check tests/e2e/office-sidebar-breakpoint.acl --json && a3s-test check tests/e2e/office-docs-navigation.acl --json && a3s-test check tests/e2e/collaboration-playground-entry.acl --json && a3s-test check tests/e2e/collaboration-document-comments.acl --json && a3s-test check tests/e2e/collaboration-document-suggestions.acl --json && a3s-test check tests/e2e/collaboration-participants.acl --json && a3s-test check tests/e2e/collaboration-pdf-annotations.acl --json && a3s-test check tests/e2e/collaboration-spreadsheet-cells.acl --json && a3s-test check tests/e2e/collaboration-presentation-elements.acl --json",
100
+ "test:e2e": "bun run test:e2e:fixtures && a3s-test run tests/e2e/word-page-color.acl --json && a3s-test run tests/e2e/word-page-setup-phone.acl --json && a3s-test run tests/e2e/word-paragraph-layout-phone.acl --json && a3s-test run tests/e2e/word-list-formatting-phone.acl --json && a3s-test run tests/e2e/word-font-picker-phone.acl --json && a3s-test run tests/e2e/word-comments-drawer.acl --json && a3s-test run tests/e2e/word-comment-windowing.acl --json && a3s-test run tests/e2e/word-citations-phone.acl --json && a3s-test run tests/e2e/word-navigation-search.acl --json && a3s-test run tests/e2e/word-navigation-windowing.acl --json && a3s-test run tests/e2e/word-find-replace-phone.acl --json && a3s-test run tests/e2e/word-page-navigation.acl --json && a3s-test run tests/e2e/word-page-windowing.acl --json && a3s-test run tests/e2e/word-ai-question.acl --json && a3s-test run tests/e2e/word-picture-insert.acl --json && a3s-test run tests/e2e/word-picture-alt-text-phone.acl --json && a3s-test run tests/e2e/word-track-changes-phone.acl --json && a3s-test run tests/e2e/word-formatting-revision.acl --json && a3s-test run tests/e2e/word-paragraph-formatting-revision.acl --json && a3s-test run tests/e2e/word-review-conflict-phone.acl --json && a3s-test run tests/e2e/word-revision-windowing.acl --json && a3s-test run tests/e2e/word-table-phone.acl --json && a3s-test run tests/e2e/word-table-borders.acl --json && a3s-test run tests/e2e/word-theme-table.acl --json && a3s-test run tests/e2e/word-styled-table.acl --json && a3s-test run tests/e2e/word-multi-page-table.acl --json && a3s-test run tests/e2e/word-cross-reference-phone.acl --json && a3s-test run tests/e2e/word-bookmark-links-phone.acl --json && a3s-test run tests/e2e/word-notes-phone.acl --json && a3s-test run tests/e2e/word-fields-phone.acl --json && a3s-test run tests/e2e/spreadsheet-phone-rename.acl --json && a3s-test run tests/e2e/spreadsheet-phone-find.acl --json && a3s-test run tests/e2e/spreadsheet-phone-context-menu.acl --json && a3s-test run tests/e2e/spreadsheet-phone-task-pane.acl --json && a3s-test run tests/e2e/spreadsheet-maximum-sparse.acl --json && a3s-test run tests/e2e/spreadsheet-cell-style.acl --json && a3s-test run tests/e2e/spreadsheet-paste-special.acl --json && a3s-test run tests/e2e/presentation-cut-paste-focus.acl --json && a3s-test run tests/e2e/presentation-presenter-view.acl --json && a3s-test run tests/e2e/presentation-phone-chart-pane.acl --json && a3s-test run tests/e2e/presentation-phone-comments.acl --json && a3s-test run tests/e2e/pdf-thumbnail-keyboard.acl --json && a3s-test run tests/e2e/pdf-page-drawer-phone.acl --json && a3s-test run tests/e2e/markdown-phone-modes.acl --json && a3s-test run tests/e2e/office-sidebar-breakpoint.acl --json && a3s-test run tests/e2e/office-docs-navigation.acl --json && a3s-test run tests/e2e/collaboration-playground-entry.acl --json && a3s-test run tests/e2e/collaboration-document-comments.acl --command-timeout-ms 120000 --json && a3s-test run tests/e2e/collaboration-document-suggestions.acl --command-timeout-ms 120000 --json && a3s-test run tests/e2e/collaboration-participants.acl --json && a3s-test run tests/e2e/collaboration-pdf-annotations.acl --json && a3s-test run tests/e2e/collaboration-spreadsheet-cells.acl --json && a3s-test run tests/e2e/collaboration-presentation-elements.acl --json",
101
+ "test:e2e:check": "bun run test:e2e:fixtures && a3s-test check tests/e2e/word-page-color.acl --json && a3s-test check tests/e2e/word-page-setup-phone.acl --json && a3s-test check tests/e2e/word-paragraph-layout-phone.acl --json && a3s-test check tests/e2e/word-list-formatting-phone.acl --json && a3s-test check tests/e2e/word-font-picker-phone.acl --json && a3s-test check tests/e2e/word-comments-drawer.acl --json && a3s-test check tests/e2e/word-comment-windowing.acl --json && a3s-test check tests/e2e/word-citations-phone.acl --json && a3s-test check tests/e2e/word-navigation-search.acl --json && a3s-test check tests/e2e/word-navigation-windowing.acl --json && a3s-test check tests/e2e/word-find-replace-phone.acl --json && a3s-test check tests/e2e/word-page-navigation.acl --json && a3s-test check tests/e2e/word-page-windowing.acl --json && a3s-test check tests/e2e/word-ai-question.acl --json && a3s-test check tests/e2e/word-picture-insert.acl --json && a3s-test check tests/e2e/word-picture-alt-text-phone.acl --json && a3s-test check tests/e2e/word-track-changes-phone.acl --json && a3s-test check tests/e2e/word-formatting-revision.acl --json && a3s-test check tests/e2e/word-paragraph-formatting-revision.acl --json && a3s-test check tests/e2e/word-review-conflict-phone.acl --json && a3s-test check tests/e2e/word-revision-windowing.acl --json && a3s-test check tests/e2e/word-table-phone.acl --json && a3s-test check tests/e2e/word-table-borders.acl --json && a3s-test check tests/e2e/word-theme-table.acl --json && a3s-test check tests/e2e/word-styled-table.acl --json && a3s-test check tests/e2e/word-multi-page-table.acl --json && a3s-test check tests/e2e/word-cross-reference-phone.acl --json && a3s-test check tests/e2e/word-bookmark-links-phone.acl --json && a3s-test check tests/e2e/word-notes-phone.acl --json && a3s-test check tests/e2e/word-fields-phone.acl --json && a3s-test check tests/e2e/spreadsheet-phone-rename.acl --json && a3s-test check tests/e2e/spreadsheet-phone-find.acl --json && a3s-test check tests/e2e/spreadsheet-phone-context-menu.acl --json && a3s-test check tests/e2e/spreadsheet-phone-task-pane.acl --json && a3s-test check tests/e2e/spreadsheet-maximum-sparse.acl --json && a3s-test check tests/e2e/spreadsheet-cell-style.acl --json && a3s-test check tests/e2e/spreadsheet-paste-special.acl --json && a3s-test check tests/e2e/presentation-cut-paste-focus.acl --json && a3s-test check tests/e2e/presentation-presenter-view.acl --json && a3s-test check tests/e2e/presentation-phone-chart-pane.acl --json && a3s-test check tests/e2e/presentation-phone-comments.acl --json && a3s-test check tests/e2e/pdf-thumbnail-keyboard.acl --json && a3s-test check tests/e2e/pdf-page-drawer-phone.acl --json && a3s-test check tests/e2e/markdown-phone-modes.acl --json && a3s-test check tests/e2e/office-sidebar-breakpoint.acl --json && a3s-test check tests/e2e/office-docs-navigation.acl --json && a3s-test check tests/e2e/collaboration-playground-entry.acl --json && a3s-test check tests/e2e/collaboration-document-comments.acl --json && a3s-test check tests/e2e/collaboration-document-suggestions.acl --json && a3s-test check tests/e2e/collaboration-participants.acl --json && a3s-test check tests/e2e/collaboration-pdf-annotations.acl --json && a3s-test check tests/e2e/collaboration-spreadsheet-cells.acl --json && a3s-test check tests/e2e/collaboration-presentation-elements.acl --json",
102
102
  "test:e2e:fixtures": "bun scripts/create-e2e-fixtures.ts",
103
103
  "test:e2e:large-documents": "bun .a3s-test/performance/generate-fixtures.ts --documents-only && a3s-test run tests/e2e/word-large-document-windowing.acl --json",
104
104
  "test:e2e:large-documents:check": "a3s-test check tests/e2e/word-large-document-windowing.acl --json",
@@ -134,6 +134,12 @@
134
134
  "test:e2e:spreadsheet-cell-style:check": "a3s-test check tests/e2e/spreadsheet-cell-style.acl --json",
135
135
  "test:e2e:spreadsheet-cell-fill": "a3s-test run tests/e2e/spreadsheet-cell-fill.acl --json",
136
136
  "test:e2e:spreadsheet-cell-fill:check": "a3s-test check tests/e2e/spreadsheet-cell-fill.acl --json",
137
+ "test:e2e:spreadsheet-auto-sum": "a3s-test run tests/e2e/spreadsheet-auto-sum.acl --json",
138
+ "test:e2e:spreadsheet-auto-sum:check": "a3s-test check tests/e2e/spreadsheet-auto-sum.acl --json",
139
+ "test:e2e:spreadsheet-paste-special": "a3s-test run tests/e2e/spreadsheet-paste-special.acl --json",
140
+ "test:e2e:spreadsheet-paste-special:check": "a3s-test check tests/e2e/spreadsheet-paste-special.acl --json",
141
+ "test:e2e:spreadsheet-go-to": "a3s-test run tests/e2e/spreadsheet-go-to.acl --json",
142
+ "test:e2e:spreadsheet-go-to:check": "a3s-test check tests/e2e/spreadsheet-go-to.acl --json",
137
143
  "test:e2e:spreadsheet-maximum-sparse": "a3s-test run tests/e2e/spreadsheet-maximum-sparse.acl --json",
138
144
  "test:e2e:spreadsheet-maximum-sparse:check": "a3s-test check tests/e2e/spreadsheet-maximum-sparse.acl --json",
139
145
  "test:e2e:spreadsheet-large": "bun .a3s-test/performance/generate-fixtures.ts --spreadsheets-only && a3s-test run tests/e2e/spreadsheet-large-controlled-editing.acl --json",