@a3s-lab/office 0.17.0 → 0.19.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 (30) hide show
  1. package/README.md +14 -3
  2. package/dist/0~spreadsheet-editor.js +4567 -4014
  3. package/dist/0~work-office-diagnostics.js +1 -1
  4. package/dist/4104.js +27 -19
  5. package/dist/{2180.js → 6164.js} +165 -1
  6. package/dist/core.js +1 -1
  7. package/dist/index.js +1 -1
  8. package/dist/internal/features/work/editors/spreadsheet-alignment-ribbon.d.ts +7 -0
  9. package/dist/internal/features/work/editors/spreadsheet-cell-format.d.ts +4 -1
  10. package/dist/internal/features/work/editors/spreadsheet-clipboard-ribbon.d.ts +7 -0
  11. package/dist/internal/features/work/editors/spreadsheet-command-catalog.d.ts +110 -0
  12. package/dist/internal/features/work/editors/spreadsheet-command-controller.d.ts +4 -2
  13. package/dist/internal/features/work/editors/spreadsheet-command-selection.d.ts +3 -0
  14. package/dist/internal/features/work/editors/spreadsheet-editing-ribbon.d.ts +6 -0
  15. package/dist/internal/features/work/editors/spreadsheet-format-cells-dialog-model.d.ts +3 -2
  16. package/dist/internal/features/work/editors/spreadsheet-keyboard-shortcut-runners.d.ts +16 -0
  17. package/dist/internal/features/work/editors/spreadsheet-keyboard-shortcuts.d.ts +3 -0
  18. package/dist/internal/features/work/editors/spreadsheet-rows-columns-ribbon.d.ts +5 -0
  19. package/dist/internal/features/work/editors/spreadsheet-selection-navigation-command.d.ts +3 -0
  20. package/dist/internal/features/work/editors/spreadsheet-structure-command.d.ts +5 -0
  21. package/dist/internal/features/work/editors/spreadsheet-text-orientation-command.d.ts +18 -0
  22. package/dist/internal/features/work/editors/spreadsheet-underline-ribbon.d.ts +6 -0
  23. package/dist/internal/features/work/editors/spreadsheet-view-ribbon.d.ts +8 -0
  24. package/dist/internal/features/work/editors/spreadsheet-visibility-shortcuts.d.ts +3 -0
  25. package/dist/internal/features/work/work-spreadsheet-text-orientation.d.ts +21 -0
  26. package/dist/internal/features/work/work-spreadsheet-underline.d.ts +8 -0
  27. package/dist/internal/features/work/work-xlsx-cell-style-xml.d.ts +2 -1
  28. package/dist/office-kernel.wasm +0 -0
  29. package/dist/styles.css +161 -1
  30. package/package.json +6 -1
@@ -0,0 +1,18 @@
1
+ import type { Cell } from '@fortune-sheet/core';
2
+ import { type SpreadsheetTextOrientationId } from '../work-spreadsheet-text-orientation';
3
+ import { type OfficeEditorExtension } from './office-editor-extension';
4
+ import type { SpreadsheetCommandContext, SpreadsheetCommandRange, SpreadsheetEditorCommands } from './spreadsheet-command-controller';
5
+ export declare const MAX_SPREADSHEET_TEXT_ORIENTATION_CELLS = 10000;
6
+ export interface SpreadsheetTextOrientationApiCall {
7
+ name: 'setCellFormatByRange';
8
+ args: [
9
+ 'rt' | 'tr',
10
+ Cell['rt'] | Cell['tr'] | undefined,
11
+ SpreadsheetCommandRange,
12
+ {
13
+ id: string;
14
+ }
15
+ ];
16
+ }
17
+ export declare function createSpreadsheetTextOrientationExtension(): OfficeEditorExtension<SpreadsheetCommandContext, SpreadsheetEditorCommands>;
18
+ export declare function spreadsheetTextOrientationApiCalls(range: SpreadsheetCommandRange, sheetId: string, choice: SpreadsheetTextOrientationId): SpreadsheetTextOrientationApiCall[];
@@ -0,0 +1,6 @@
1
+ import type { SpreadsheetEditorCanCommands, SpreadsheetEditorCommands } from './spreadsheet-command-controller';
2
+ export declare function SpreadsheetUnderlineRibbon({ can, commands, value, }: {
3
+ can: SpreadsheetEditorCanCommands;
4
+ commands: SpreadsheetEditorCommands;
5
+ value: unknown;
6
+ }): import("react").JSX.Element;
@@ -0,0 +1,8 @@
1
+ import type { Selection } from '@fortune-sheet/core';
2
+ import type { SpreadsheetEditorCanCommands, SpreadsheetEditorCommands } from './spreadsheet-command-controller';
3
+ export declare function SpreadsheetFreezePanesMenu({ active, can, commands, selection, }: {
4
+ active: boolean;
5
+ can: SpreadsheetEditorCanCommands;
6
+ commands: SpreadsheetEditorCommands;
7
+ selection: Selection;
8
+ }): import("react").JSX.Element;
@@ -0,0 +1,3 @@
1
+ import { type OfficeEditorExtension } from './office-editor-extension';
2
+ import type { SpreadsheetCommandContext, SpreadsheetEditorCommands } from './spreadsheet-command-controller';
3
+ export declare function createSpreadsheetVisibilityShortcutExtension(): OfficeEditorExtension<SpreadsheetCommandContext, SpreadsheetEditorCommands>;
@@ -0,0 +1,21 @@
1
+ import type { Cell } from '@fortune-sheet/core';
2
+ export declare const spreadsheetTextOrientationIds: readonly ["horizontal", "angleCounterclockwise", "angleClockwise", "vertical", "rotateUp", "rotateDown"];
3
+ export type SpreadsheetTextOrientationId = (typeof spreadsheetTextOrientationIds)[number];
4
+ export type SpreadsheetTextOrientation = {
5
+ kind: 'rotation';
6
+ angle: number;
7
+ } | {
8
+ kind: 'stacked';
9
+ };
10
+ export type SpreadsheetTextOrientationCellStyle = Pick<Cell, 'rt' | 'tr'>;
11
+ export declare function isSpreadsheetTextOrientationId(value: unknown): value is SpreadsheetTextOrientationId;
12
+ export declare function spreadsheetTextOrientationFromChoice(choice: SpreadsheetTextOrientationId): SpreadsheetTextOrientation;
13
+ export declare function spreadsheetTextOrientationFromAngle(value: unknown): SpreadsheetTextOrientation | null;
14
+ export declare function spreadsheetTextOrientationFromXlsx(value: unknown): SpreadsheetTextOrientation | null;
15
+ export declare function spreadsheetExplicitTextOrientationFromCell(cell: Pick<Cell, 'rt' | 'tr'> | null | undefined): SpreadsheetTextOrientation | null;
16
+ export declare function spreadsheetTextOrientationFromCell(cell: Pick<Cell, 'rt' | 'tr'> | null | undefined): SpreadsheetTextOrientation;
17
+ export declare function spreadsheetTextOrientationCellStyle(orientation: SpreadsheetTextOrientation | null | undefined): SpreadsheetTextOrientationCellStyle | null;
18
+ export declare function spreadsheetTextOrientationXlsxValue(orientation: SpreadsheetTextOrientation | null | undefined): number | null;
19
+ export declare function spreadsheetTextOrientationXlsxValueFromCell(cell: Pick<Cell, 'rt' | 'tr'> | null | undefined): number | null;
20
+ export declare function spreadsheetVisibleTextRotationFromCell(cell: Pick<Cell, 'rt' | 'tr'> | null | undefined): number;
21
+ export declare function spreadsheetTextOrientationChoiceFromCell(cell: Pick<Cell, 'rt' | 'tr'> | null | undefined): SpreadsheetTextOrientationId | null;
@@ -0,0 +1,8 @@
1
+ export declare const spreadsheetUnderlineStyles: readonly ["none", "single", "double", "singleAccounting", "doubleAccounting"];
2
+ export type SpreadsheetUnderlineStyle = (typeof spreadsheetUnderlineStyles)[number];
3
+ export type SpreadsheetUnderlineCellValue = 0 | 1 | 2 | 3 | 4;
4
+ export declare function isSpreadsheetUnderlineStyle(value: unknown): value is SpreadsheetUnderlineStyle;
5
+ export declare function spreadsheetUnderlineCellValue(style: SpreadsheetUnderlineStyle): SpreadsheetUnderlineCellValue;
6
+ export declare function spreadsheetUnderlineStyle(value: unknown): SpreadsheetUnderlineStyle;
7
+ export declare function spreadsheetUnderlineCellValueFromXlsx(value: string | null): SpreadsheetUnderlineCellValue;
8
+ export declare function spreadsheetUnderlineCellValueFromSheetJs(value: unknown): SpreadsheetUnderlineCellValue;
@@ -1,4 +1,5 @@
1
1
  import type { XlsxCellBorderLine } from './work-xlsx-cell-borders';
2
+ import type { SpreadsheetUnderlineStyle } from './work-spreadsheet-underline';
2
3
  export interface XlsxDirectAlignmentStyle {
3
4
  horizontal?: 'center' | 'left' | 'right';
4
5
  textRotation?: number;
@@ -13,5 +14,5 @@ export declare function writeXlsxAlignment(document: Document, xf: Element, styl
13
14
  export declare function setXlsxValueChild(document: Document, parent: Element, name: string, value: string, order: readonly string[]): void;
14
15
  export declare function setXlsxColorChild(document: Document, parent: Element, color: string, order: readonly string[]): void;
15
16
  export declare function setXlsxToggleChild(document: Document, parent: Element, name: string, enabled: boolean, order: readonly string[]): void;
16
- export declare function setXlsxUnderlineChild(document: Document, parent: Element, enabled: boolean, order: readonly string[]): void;
17
+ export declare function setXlsxUnderlineChild(document: Document, parent: Element, style: SpreadsheetUnderlineStyle, order: readonly string[]): void;
17
18
  export declare function xlsxRgbColor(value: unknown): string | null;
Binary file
package/dist/styles.css CHANGED
@@ -14985,6 +14985,37 @@ 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-orientation-menu > button, .work-spreadsheet-rows-columns-menu > button {
14989
+ grid-template-columns: 20px minmax(0, 1fr) auto;
14990
+ }
14991
+
14992
+ .work-spreadsheet-orientation-menu > button:after {
14993
+ border: 1px solid var(--a3s-faint);
14994
+ content: "";
14995
+ border-radius: 50%;
14996
+ width: 9px;
14997
+ height: 9px;
14998
+ }
14999
+
15000
+ .work-spreadsheet-orientation-menu > button[aria-checked="true"]:after {
15001
+ border-color: var(--work-office-menu-accent);
15002
+ background: var(--work-office-menu-accent);
15003
+ box-shadow: inset 0 0 0 2px var(--a3s-overlay-surface);
15004
+ }
15005
+
15006
+ .work-spreadsheet-orientation-glyph {
15007
+ stroke: currentColor;
15008
+ stroke-width: 1.45px;
15009
+ stroke-linecap: round;
15010
+ stroke-linejoin: round;
15011
+ flex: none;
15012
+ overflow: visible;
15013
+ }
15014
+
15015
+ .work-spreadsheet-orientation-trigger.active .work-spreadsheet-orientation-glyph {
15016
+ color: var(--work-spreadsheet-accent);
15017
+ }
15018
+
14988
15019
  .work-spreadsheet-find-select-menu > button, .work-spreadsheet-paste-menu > button {
14989
15020
  grid-template-columns: 20px minmax(0, 1fr) auto;
14990
15021
  }
@@ -15021,6 +15052,23 @@ button.work-office-collaboration-participant:hover .work-office-collaboration-lo
15021
15052
  color: currentColor;
15022
15053
  }
15023
15054
 
15055
+ @media (width <= 640px) {
15056
+ .work-spreadsheet-orientation-menu, .work-spreadsheet-rows-columns-menu {
15057
+ border-radius: 12px;
15058
+ width: calc(100vw - 16px);
15059
+ max-width: none;
15060
+ max-height: min(68dvh, 520px);
15061
+ padding: 8px;
15062
+ }
15063
+
15064
+ .work-spreadsheet-orientation-menu > button, .work-spreadsheet-rows-columns-menu > button {
15065
+ gap: 10px;
15066
+ min-height: 44px;
15067
+ padding: 9px 10px;
15068
+ font-size: 12px;
15069
+ }
15070
+ }
15071
+
15024
15072
  .work-spreadsheet-cell-style-panel {
15025
15073
  gap: 10px;
15026
15074
  width: min(440px, 100vw - 32px);
@@ -15138,7 +15186,7 @@ button.work-office-collaboration-participant:hover .work-office-collaboration-lo
15138
15186
  }
15139
15187
  }
15140
15188
 
15141
- .work-spreadsheet-border-split-root {
15189
+ .work-spreadsheet-border-split-root, .work-spreadsheet-underline-split-root {
15142
15190
  border-radius: 6px;
15143
15191
  flex: none;
15144
15192
  align-items: stretch;
@@ -15146,6 +15194,118 @@ button.work-office-collaboration-participant:hover .work-office-collaboration-lo
15146
15194
  display: inline-flex;
15147
15195
  }
15148
15196
 
15197
+ .work-office-ribbon .work-office-toolbar .work-spreadsheet-underline-primary, .work-office-ribbon .work-office-toolbar .work-spreadsheet-underline-disclosure {
15198
+ border-radius: 0;
15199
+ height: 29px;
15200
+ padding: 0;
15201
+ }
15202
+
15203
+ .work-office-ribbon .work-office-toolbar .work-spreadsheet-underline-primary {
15204
+ border-radius: 6px 0 0 6px;
15205
+ width: 29px;
15206
+ min-width: 29px;
15207
+ }
15208
+
15209
+ .work-office-ribbon .work-office-toolbar .work-spreadsheet-underline-disclosure {
15210
+ border-left: 1px solid color-mix(in srgb, var(--a3s-line) 72%, transparent);
15211
+ border-radius: 0 6px 6px 0;
15212
+ width: 16px;
15213
+ min-width: 16px;
15214
+ }
15215
+
15216
+ .work-spreadsheet-underline-disclosure svg {
15217
+ transition: transform .12s;
15218
+ }
15219
+
15220
+ .work-spreadsheet-underline-disclosure[aria-expanded="true"] svg {
15221
+ transform: rotate(180deg);
15222
+ }
15223
+
15224
+ .work-spreadsheet-underline-primary:focus-visible, .work-spreadsheet-underline-disclosure:focus-visible {
15225
+ box-shadow: inset 0 0 0 1px var(--work-spreadsheet-accent);
15226
+ outline: 0;
15227
+ }
15228
+
15229
+ .work-spreadsheet-underline-menu {
15230
+ width: min(252px, 100vw - 32px);
15231
+ }
15232
+
15233
+ .work-spreadsheet-underline-menu > button {
15234
+ grid-template-columns: 22px minmax(0, 1fr) 14px;
15235
+ }
15236
+
15237
+ .work-spreadsheet-underline-menu > button[aria-checked="true"] {
15238
+ background: color-mix(in srgb,
15239
+ var(--work-office-menu-accent) 9%,
15240
+ transparent);
15241
+ }
15242
+
15243
+ .work-spreadsheet-underline-menu > button[aria-checked="true"]:after {
15244
+ color: var(--work-office-menu-accent);
15245
+ content: "✓";
15246
+ text-align: center;
15247
+ grid-column: 3;
15248
+ font-size: 12px;
15249
+ font-weight: 700;
15250
+ }
15251
+
15252
+ .work-spreadsheet-underline-glyph {
15253
+ width: 20px;
15254
+ height: 20px;
15255
+ color: var(--work-office-menu-accent);
15256
+ place-items: center;
15257
+ display: grid;
15258
+ position: relative;
15259
+ }
15260
+
15261
+ .work-spreadsheet-underline-glyph[data-underline-style="none"] {
15262
+ opacity: .42;
15263
+ }
15264
+
15265
+ .work-spreadsheet-underline-glyph[data-underline-style="none"]:after {
15266
+ content: "";
15267
+ background: currentColor;
15268
+ width: 18px;
15269
+ height: 1px;
15270
+ position: absolute;
15271
+ transform: rotate(-38deg);
15272
+ }
15273
+
15274
+ .work-spreadsheet-underline-glyph[data-underline-style="double"]:before {
15275
+ content: "";
15276
+ background: currentColor;
15277
+ height: 1px;
15278
+ position: absolute;
15279
+ bottom: 1px;
15280
+ left: 2px;
15281
+ right: 2px;
15282
+ }
15283
+
15284
+ .work-spreadsheet-underline-glyph[data-underline-style="singleAccounting"] svg line, .work-spreadsheet-underline-glyph[data-underline-style="doubleAccounting"] svg line {
15285
+ display: none;
15286
+ }
15287
+
15288
+ .work-spreadsheet-underline-glyph[data-underline-style="singleAccounting"]:after, .work-spreadsheet-underline-glyph[data-underline-style="doubleAccounting"]:before, .work-spreadsheet-underline-glyph[data-underline-style="doubleAccounting"]:after {
15289
+ content: "";
15290
+ background: currentColor;
15291
+ height: 1px;
15292
+ position: absolute;
15293
+ left: 0;
15294
+ right: 0;
15295
+ }
15296
+
15297
+ .work-spreadsheet-underline-glyph[data-underline-style="singleAccounting"]:after {
15298
+ bottom: 1px;
15299
+ }
15300
+
15301
+ .work-spreadsheet-underline-glyph[data-underline-style="doubleAccounting"]:before {
15302
+ bottom: 3px;
15303
+ }
15304
+
15305
+ .work-spreadsheet-underline-glyph[data-underline-style="doubleAccounting"]:after {
15306
+ bottom: 0;
15307
+ }
15308
+
15149
15309
  .work-office-ribbon .work-office-toolbar .work-spreadsheet-border-primary, .work-office-ribbon .work-office-toolbar .work-spreadsheet-border-disclosure {
15150
15310
  border-radius: 0;
15151
15311
  height: 29px;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@a3s-lab/office",
3
- "version": "0.17.0",
3
+ "version": "0.19.0",
4
4
  "description": "Open-source collaborative browser editors for documents, Markdown, spreadsheets, presentations, and PDFs.",
5
5
  "keywords": [
6
6
  "office",
@@ -90,6 +90,7 @@
90
90
  "playground:visual:spreadsheet-data-validation": "playwright test visual-tests/spreadsheet-data-validation.functional.spec.ts --config playwright.config.ts",
91
91
  "playground:visual:spreadsheet-hyperlink": "playwright test visual-tests/spreadsheet-hyperlink.functional.spec.ts --config playwright.config.ts",
92
92
  "playground:visual:spreadsheet-ribbon": "playwright test visual-tests/spreadsheet-ribbon.functional.spec.ts --config playwright.config.ts",
93
+ "playground:visual:spreadsheet-underline": "playwright test visual-tests/spreadsheet-underline.functional.spec.ts --config playwright.config.ts",
93
94
  "playground:visual:spreadsheet-table": "playwright test visual-tests/spreadsheet-table.functional.spec.ts --config playwright.config.ts",
94
95
  "playground:visual:update": "playwright test --config playwright.config.ts --update-snapshots",
95
96
  "performance:fixtures": "bun .a3s-test/performance/generate-fixtures.ts",
@@ -133,10 +134,14 @@
133
134
  "test:e2e:writer-ribbon:check": "a3s-test check tests/e2e/word-ribbon-collapse.acl --json",
134
135
  "test:e2e:spreadsheet-ribbon": "a3s-test run tests/e2e/spreadsheet-ribbon-alignment.acl --json",
135
136
  "test:e2e:spreadsheet-ribbon:check": "a3s-test check tests/e2e/spreadsheet-ribbon-alignment.acl --json",
137
+ "test:e2e:spreadsheet-orientation-visibility": "a3s-test run tests/e2e/spreadsheet-ribbon-orientation-visibility.acl --json",
138
+ "test:e2e:spreadsheet-orientation-visibility:check": "a3s-test check tests/e2e/spreadsheet-ribbon-orientation-visibility.acl --json",
136
139
  "test:e2e:spreadsheet-cell-style": "a3s-test run tests/e2e/spreadsheet-cell-style.acl --json",
137
140
  "test:e2e:spreadsheet-cell-style:check": "a3s-test check tests/e2e/spreadsheet-cell-style.acl --json",
138
141
  "test:e2e:spreadsheet-font-size-border-shortcuts": "a3s-test run tests/e2e/spreadsheet-font-size-border-shortcuts.acl --json",
139
142
  "test:e2e:spreadsheet-font-size-border-shortcuts:check": "a3s-test check tests/e2e/spreadsheet-font-size-border-shortcuts.acl --json",
143
+ "test:e2e:spreadsheet-underline-styles": "a3s-test run tests/e2e/spreadsheet-underline-styles.acl --json",
144
+ "test:e2e:spreadsheet-underline-styles:check": "a3s-test check tests/e2e/spreadsheet-underline-styles.acl --json",
140
145
  "test:e2e:spreadsheet-table": "a3s-test run tests/e2e/spreadsheet-table.acl --json",
141
146
  "test:e2e:spreadsheet-table:check": "a3s-test check tests/e2e/spreadsheet-table.acl --json",
142
147
  "test:e2e:spreadsheet-cell-fill": "a3s-test run tests/e2e/spreadsheet-cell-fill.acl --json",