ooxml-ui 1.18.2 → 1.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 (75) hide show
  1. package/README.md +54 -0
  2. package/dist/building-block-styles.d.ts +5 -0
  3. package/dist/building-block-styles.d.ts.map +1 -0
  4. package/dist/chunk-6Y7KR2I3.js +299 -0
  5. package/dist/{chunk-EVL7GFC7.js → chunk-KH2ZG3N6.js} +2 -2
  6. package/dist/{chunk-MSXUCINT.js → chunk-QEIGB73C.js} +1 -1
  7. package/dist/docx/building-blocks.d.ts +31 -0
  8. package/dist/docx/component.d.ts +1 -1
  9. package/dist/docx/editor-core.d.ts +3 -0
  10. package/dist/docx/element-api.d.ts +8 -0
  11. package/dist/docx/index.d.ts +1 -0
  12. package/dist/docx/styles/index.d.ts +0 -4
  13. package/dist/docx.js +154 -38
  14. package/dist/index.js +3 -3
  15. package/dist/pptx/chunk-NDAE3JFO.cjs +1014 -0
  16. package/dist/pptx/{chunk-AUCJIB3M.mjs → chunk-NLUVYOKN.mjs} +113 -381
  17. package/dist/pptx/{chunk-S2Y3VUNC.cjs → chunk-OQQQ2GBW.cjs} +134 -402
  18. package/dist/pptx/chunk-UTFFX4M7.mjs +989 -0
  19. package/dist/pptx/dom/index.cjs +205 -205
  20. package/dist/pptx/dom/index.mjs +3 -3
  21. package/dist/pptx/index.cjs +2888 -2880
  22. package/dist/pptx/index.mjs +2 -2
  23. package/dist/pptx/render/morph-predicates.d.ts.map +1 -1
  24. package/dist/pptx/theme/index.cjs +24 -16
  25. package/dist/pptx/theme/index.d.ts +1 -0
  26. package/dist/pptx/theme/index.d.ts.map +1 -1
  27. package/dist/pptx/theme/index.mjs +1 -1
  28. package/dist/pptx/theme/office-css.d.ts +6 -0
  29. package/dist/pptx/theme/office-css.d.ts.map +1 -0
  30. package/dist/pptx/web-components/chart-format-pane-styles.d.ts +1 -1
  31. package/dist/pptx/web-components/chart-format-pane-styles.d.ts.map +1 -1
  32. package/dist/pptx/web-components/control-styles.d.ts.map +1 -1
  33. package/dist/pptx/web-components/index.d.ts.map +1 -1
  34. package/dist/pptx/web-components/mobile-bar-styles.d.ts +2 -2
  35. package/dist/pptx/web-components/mobile-bar-styles.d.ts.map +1 -1
  36. package/dist/pptx/web-components/mobile-insert-styles.d.ts +1 -1
  37. package/dist/pptx/web-components/mobile-insert-styles.d.ts.map +1 -1
  38. package/dist/pptx/web-components/notes-toolbar-styles.d.ts +1 -1
  39. package/dist/pptx/web-components/notes-toolbar-styles.d.ts.map +1 -1
  40. package/dist/pptx/web-components/office-token-bridge.d.ts.map +1 -1
  41. package/dist/pptx/web-components/subtitle-settings-styles.d.ts +1 -1
  42. package/dist/pptx/web-components/subtitle-settings-styles.d.ts.map +1 -1
  43. package/dist/pptx/web-components/theme-editor-styles.d.ts +1 -1
  44. package/dist/pptx/web-components/theme-editor-styles.d.ts.map +1 -1
  45. package/dist/teams.js +2 -2
  46. package/dist/theme-bridge.d.ts +28 -0
  47. package/dist/theme-bridge.d.ts.map +1 -0
  48. package/dist/theme.d.ts +10 -3
  49. package/dist/theme.d.ts.map +1 -0
  50. package/dist/theme.js +1 -1
  51. package/dist/visio/building-blocks.d.ts +37 -0
  52. package/dist/visio/controller.d.ts +6 -0
  53. package/dist/visio/index.d.ts +1 -0
  54. package/dist/visio/styles/theme.d.ts +1 -1
  55. package/dist/visio/styles.d.ts +1 -1
  56. package/dist/visio/viewer-element.d.ts +2 -0
  57. package/dist/visio.js +7446 -7321
  58. package/dist/xlsx/building-blocks.d.ts +55 -0
  59. package/dist/xlsx/component.d.ts +3 -1
  60. package/dist/xlsx/dialogs/styles.d.ts +1 -1
  61. package/dist/xlsx/editor-core.d.ts +1 -0
  62. package/dist/xlsx/element-api.d.ts +6 -0
  63. package/dist/xlsx/formula-bar/styles.d.ts +1 -1
  64. package/dist/xlsx/grid/page-break-layer.d.ts +1 -1
  65. package/dist/xlsx/grid/styles.d.ts +1 -1
  66. package/dist/xlsx/index.d.ts +1 -0
  67. package/dist/xlsx/page-views/page-layout-css.d.ts +1 -1
  68. package/dist/xlsx/sheet-tabs/styles.d.ts +1 -1
  69. package/dist/xlsx/surface-shell.d.ts +3 -0
  70. package/dist/xlsx/theme/styles.d.ts +1 -4
  71. package/dist/xlsx.js +412 -268
  72. package/package.json +4 -4
  73. package/dist/chunk-7E3HU7RL.js +0 -123
  74. package/dist/pptx/chunk-BDXQX6RA.cjs +0 -373
  75. package/dist/pptx/chunk-ZAOD6O2D.mjs +0 -357
@@ -0,0 +1,55 @@
1
+ import type { EditorCore } from './editor-core.js';
2
+ import { type HorizontalAlignment } from 'ooxml-core/xlsx';
3
+ /** Commands always re-read permission and commit cell input before changing their target. */
4
+ export declare function spreadsheetToolbarProps(core: EditorCore): {
5
+ bold: boolean | null;
6
+ italic: boolean | null;
7
+ underline: boolean | null;
8
+ fontFamily: string | null;
9
+ fontSize: number | null;
10
+ alignment: string | null;
11
+ numberFormat: string | null;
12
+ formattingComplete: boolean;
13
+ enabled: {
14
+ bold: boolean;
15
+ italic: boolean;
16
+ underline: boolean;
17
+ fontFamily: boolean;
18
+ fontSize: boolean;
19
+ numberFormat: boolean;
20
+ };
21
+ labels: {
22
+ [k: string]: string;
23
+ };
24
+ canEdit: boolean;
25
+ selection: string;
26
+ activeCell: string;
27
+ activeSheet: number;
28
+ editing: boolean;
29
+ editMode: import("ooxml-core/xlsx/ui").EditMode;
30
+ formulaCaret: number;
31
+ sheets: {
32
+ name: string;
33
+ index: number;
34
+ state: import("ooxml-core/xlsx").SheetState;
35
+ }[];
36
+ canUndo: boolean;
37
+ canRedo: boolean;
38
+ formula: string;
39
+ onBold: () => Promise<boolean>;
40
+ onItalic: () => Promise<boolean>;
41
+ onUnderline: () => Promise<boolean>;
42
+ onFontFamilyChange: (family: string) => Promise<boolean>;
43
+ onFontSizeChange: (size: number) => Promise<boolean>;
44
+ onNumberFormatChange: (format: string) => Promise<boolean>;
45
+ onAlignmentChange: (alignment: HorizontalAlignment) => Promise<boolean>;
46
+ onUndo: () => Promise<boolean>;
47
+ onRedo: () => Promise<boolean>;
48
+ onSelect: (ref: string) => boolean;
49
+ onSheetChange: (index: number) => boolean;
50
+ onFormulaInput: (text: string, caret?: number) => boolean;
51
+ onFormulaChange: (text: string) => boolean;
52
+ onCancelEdit: () => void;
53
+ commitEdit: () => boolean;
54
+ };
55
+ export type SpreadsheetToolbarProps = ReturnType<typeof spreadsheetToolbarProps>;
@@ -24,9 +24,11 @@ export interface XlsxEditorElement {
24
24
  export declare class XlsxEditorElement extends XlsxEditorApi {
25
25
  static get observedAttributes(): readonly string[];
26
26
  private shell;
27
+ private disposeSurface;
27
28
  private addIns;
28
29
  connectedCallback(): void;
29
30
  attributeChangedCallback(name: string, _old: string | null, value: string | null): void;
31
+ disconnectedCallback(): void;
30
32
  /** Interface language: `en`, `fr`, `de`, `es`, `zh-CN` (any tag mapping to one). */
31
33
  get locale(): EditorLocale;
32
34
  set locale(value: EditorLocaleInput);
@@ -38,7 +40,7 @@ export declare class XlsxEditorElement extends XlsxEditorApi {
38
40
  /** Author recorded on new comments. Default `Author`. */
39
41
  get authorName(): string;
40
42
  set authorName(value: string);
41
- /** `light`, `dark` or `auto` (default, follows the OS). */
43
+ /** `light`, `dark` or `auto` (default, inherits the Office scope and system appearance). */
42
44
  get theme(): EditorThemeMode;
43
45
  set theme(value: EditorThemeMode);
44
46
  get showToolbar(): boolean;
@@ -1 +1 @@
1
- export declare const DIALOG_CSS = "\n.xve-cmd-dialog { --office-background: var(--xve-popover, var(--xve-background, #fff));\n\t--office-foreground: var(--xve-popover-foreground, var(--xve-foreground, #1f2937));\n\t--office-border: var(--xve-border, #d1d5db); --office-ring: var(--xve-ring, #217346); }\n.xve-dialog-body { display: flex; flex-direction: column; gap: 10px; min-width: min(360px, 86vw);\n\tfont: 13px/1.4 var(--xve-font, system-ui, \"Segoe UI\", sans-serif); color: var(--office-foreground); }\n.xve-cmd-dialog-wide .xve-dialog-body { min-width: min(560px, 90vw); }\n.xve-dialog-footer { display: flex; gap: 8px; justify-content: flex-end; flex-wrap: wrap; }\n.xve-btn { min-height: 28px; padding: 3px 14px; border-radius: var(--xve-radius, 4px); cursor: pointer;\n\tborder: 1px solid var(--xve-border, #c8c6c4); background: var(--xve-secondary, #fff); color: inherit; font: inherit; }\n.xve-btn:hover:not(:disabled) { background: var(--xve-accent, #f3f2f1); }\n.xve-btn:focus-visible, .xve-input:focus-visible, .xve-tab:focus-visible, .xve-listbox:focus-visible,\n\t.xve-tile:focus-visible { outline: 2px solid var(--xve-ring, #217346); outline-offset: 1px; }\n.xve-btn-primary { background: var(--xve-primary, #217346); color: var(--xve-primary-foreground, #fff);\n\tborder-color: var(--xve-primary, #217346); }\n.xve-btn-primary:hover:not(:disabled) { background: var(--xve-primary, #1b5e38); filter: brightness(.95); }\n.xve-btn:disabled { opacity: .5; cursor: default; }\n.xve-field { display: grid; grid-template-columns: minmax(110px, auto) 1fr; align-items: center; gap: 8px; }\n.xve-field-label { color: var(--xve-muted-foreground, #605e5c); }\n.xve-input { box-sizing: border-box; min-height: 28px; padding: 3px 6px; border-radius: var(--xve-radius, 4px);\n\tborder: 1px solid var(--xve-input, #c8c6c4); background: var(--xve-background, #fff); color: inherit; font: inherit; min-width: 0; }\ntextarea.xve-input { resize: vertical; }\n.xve-input[aria-invalid=\"true\"] { border-color: var(--xve-destructive, #c50f1f); }\n.xve-check { display: flex; align-items: center; gap: 6px; }\n.xve-checklist { display: flex; flex-direction: column; gap: 4px; max-height: 240px; overflow: auto; padding: 4px 2px; }\n.xve-fieldset { border: 1px solid var(--xve-border, #e1dfdd); border-radius: var(--xve-radius, 4px);\n\tpadding: 8px 10px; margin: 0; display: flex; flex-direction: column; gap: 6px; min-width: 0; }\n.xve-fieldset legend { padding: 0 4px; font-weight: 600; }\n.xve-row { display: flex; gap: 10px; align-items: flex-start; flex-wrap: wrap; }\n.xve-row > * { flex: 1 1 160px; }\n.xve-note { margin: 0; color: var(--xve-muted-foreground, #605e5c); font-size: 12px; }\n.xve-tablist { display: flex; gap: 2px; border-bottom: 1px solid var(--xve-border, #e1dfdd); flex-wrap: wrap; }\n.xve-tab { border: 0; background: transparent; color: inherit; font: inherit; padding: 6px 10px; cursor: pointer;\n\tborder-bottom: 2px solid transparent; }\n.xve-tab[aria-selected=\"true\"] { border-bottom-color: var(--xve-primary, #217346); font-weight: 600; }\n.xve-tabpanel { padding-top: 10px; display: flex; flex-direction: column; gap: 10px; }\n.xve-tabpanel[hidden] { display: none; }\n.xve-listbox { border: 1px solid var(--xve-input, #c8c6c4); border-radius: var(--xve-radius, 4px);\n\tmin-height: 120px; max-height: 220px; overflow: auto; background: var(--xve-background, #fff); }\n.xve-option { padding: 3px 8px; cursor: default; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }\n.xve-option[aria-selected=\"true\"] { background: var(--xve-selection, #cce8d6); color: inherit; }\n.xve-sample { min-height: 40px; display: flex; align-items: center; justify-content: center; padding: 6px;\n\tborder: 1px solid var(--xve-border, #e1dfdd); background: var(--xve-sheet-bg, #fff); color: #000; overflow: hidden; }\n.xve-tiles { display: grid; grid-template-columns: repeat(auto-fill, minmax(84px, 1fr)); gap: 6px; }\n.xve-tile { display: flex; flex-direction: column; align-items: center; gap: 4px; padding: 6px; cursor: pointer;\n\tborder: 1px solid var(--xve-border, #e1dfdd); border-radius: var(--xve-radius, 4px); background: transparent; color: inherit; font: inherit; }\n.xve-tile[aria-pressed=\"true\"] { border-color: var(--xve-primary, #217346); background: var(--xve-selection, #e6f2ea); }\n.xve-symbols { display: grid; grid-template-columns: repeat(16, 28px); gap: 2px; max-height: 240px; overflow: auto; }\n.xve-symbols button { width: 28px; height: 28px; padding: 0; font-size: 16px; }\n.xve-preview { border: 1px solid var(--xve-border, #e1dfdd); background: #fff; min-height: 160px; display: flex;\n\talign-items: center; justify-content: center; }\n.xve-preview svg { max-width: 100%; height: auto; }\n.xve-results { max-height: 160px; overflow: auto; border: 1px solid var(--xve-border, #e1dfdd); }\n.xve-results table { border-collapse: collapse; width: 100%; font-size: 12px; }\n.xve-results th, .xve-results td { text-align: left; padding: 2px 6px; border-bottom: 1px solid var(--xve-border, #f3f2f1); }\n.xve-results tr[aria-selected=\"true\"] td { background: var(--xve-selection, #cce8d6); }\n.xve-border-box { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }\n.xve-border-preview { width: 120px; height: 80px; position: relative; background: #fff; border: 1px dashed #c8c6c4; }\n@media (max-width: 600px) { .xve-field { grid-template-columns: 1fr; } .xve-symbols { grid-template-columns: repeat(8, 28px); } }\n";
1
+ export declare const DIALOG_CSS = "\n.xve-cmd-dialog { --office-background: var(--xlsx-theme-popover);\n --office-foreground: var(--xlsx-theme-popover-foreground);\n --office-border: var(--xlsx-theme-border); --office-ring: var(--xlsx-theme-ring); }\n.xve-dialog-body { display: flex; flex-direction: column; gap: 10px; min-width: min(360px, 86vw);\n\tfont: var(--office-font-size,13px)/var(--office-line-height,1.4) var(--xve-font, var(--office-font, system-ui, sans-serif)); color: var(--office-foreground); }\n.xve-cmd-dialog-wide .xve-dialog-body { min-width: min(560px, 90vw); }\n.xve-dialog-footer { display: flex; gap: 8px; justify-content: flex-end; flex-wrap: wrap; }\n.xve-btn { min-height: 28px; padding: 3px 14px; border-radius: var(--xve-radius, var(--office-radius, 4px)); cursor: pointer;\n\tborder: 1px solid var(--xve-border, var(--office-border, #c8c6c4)); background: var(--xve-secondary, var(--office-surface, #fff)); color: inherit; font: inherit; }\n.xve-btn:hover:not(:disabled) { background: var(--xve-accent, var(--office-selected, #f3f2f1)); }\n.xve-btn:focus-visible, .xve-input:focus-visible, .xve-tab:focus-visible, .xve-listbox:focus-visible,\n\t.xve-tile:focus-visible { outline: 2px solid var(--xve-ring, var(--office-ring, #217346)); outline-offset: 1px; }\n.xve-btn-primary { background: var(--xve-primary, var(--office-accent, #217346)); color: var(--xve-primary-foreground, var(--office-accent-foreground, #fff));\n\tborder-color: var(--xve-primary, var(--office-accent, #217346)); }\n.xve-btn-primary:hover:not(:disabled) { background: var(--xve-primary, var(--office-accent, #1b5e38)); filter: brightness(.95); }\n.xve-btn:disabled { opacity: .5; cursor: default; }\n.xve-field { display: grid; grid-template-columns: minmax(110px, auto) 1fr; align-items: center; gap: 8px; }\n.xve-field-label { color: var(--xve-muted-foreground, var(--office-muted-foreground, #605e5c)); }\n.xve-input { box-sizing: border-box; min-height: 28px; padding: 3px 6px; border-radius: var(--xve-radius, var(--office-radius, 4px));\n\tborder: 1px solid var(--xve-input, var(--office-border, #c8c6c4)); background: var(--xve-background, var(--office-background, #fff)); color: inherit; font: inherit; min-width: 0; }\ntextarea.xve-input { resize: vertical; }\n.xve-input[aria-invalid=\"true\"] { border-color: var(--xve-destructive, var(--office-danger, #c50f1f)); }\n.xve-check { display: flex; align-items: center; gap: 6px; }\n.xve-checklist { display: flex; flex-direction: column; gap: 4px; max-height: 240px; overflow: auto; padding: 4px 2px; }\n.xve-fieldset { border: 1px solid var(--xve-border, var(--office-border, #e1dfdd)); border-radius: var(--xve-radius, var(--office-radius, 4px));\n\tpadding: 8px 10px; margin: 0; display: flex; flex-direction: column; gap: 6px; min-width: 0; }\n.xve-fieldset legend { padding: 0 4px; font-weight: 600; }\n.xve-row { display: flex; gap: 10px; align-items: flex-start; flex-wrap: wrap; }\n.xve-row > * { flex: 1 1 160px; }\n.xve-note { margin: 0; color: var(--xve-muted-foreground, var(--office-muted-foreground, #605e5c)); font-size: 12px; }\n.xve-tablist { display: flex; gap: 2px; border-bottom: 1px solid var(--xve-border, var(--office-border, #e1dfdd)); flex-wrap: wrap; }\n.xve-tab { border: 0; background: transparent; color: inherit; font: inherit; padding: 6px 10px; cursor: pointer;\n\tborder-bottom: 2px solid transparent; }\n.xve-tab[aria-selected=\"true\"] { border-bottom-color: var(--xve-primary, var(--office-accent, #217346)); font-weight: 600; }\n.xve-tabpanel { padding-top: 10px; display: flex; flex-direction: column; gap: 10px; }\n.xve-tabpanel[hidden] { display: none; }\n.xve-listbox { border: 1px solid var(--xve-input, var(--office-border, #c8c6c4)); border-radius: var(--xve-radius, var(--office-radius, 4px));\n\tmin-height: 120px; max-height: 220px; overflow: auto; background: var(--xve-background, var(--office-background, #fff)); }\n.xve-option { padding: 3px 8px; cursor: default; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }\n.xve-option[aria-selected=\"true\"] { background: var(--xve-selection, var(--office-selected, #cce8d6)); color: inherit; }\n.xve-sample { min-height: 40px; display: flex; align-items: center; justify-content: center; padding: 6px;\n\tborder: 1px solid var(--xve-border, var(--office-border, #e1dfdd)); background: var(--xve-sheet-bg, var(--office-paper, #fff)); color: #000; overflow: hidden; }\n.xve-tiles { display: grid; grid-template-columns: repeat(auto-fill, minmax(84px, 1fr)); gap: 6px; }\n.xve-tile { display: flex; flex-direction: column; align-items: center; gap: 4px; padding: 6px; cursor: pointer;\n\tborder: 1px solid var(--xve-border, var(--office-border, #e1dfdd)); border-radius: var(--xve-radius, var(--office-radius, 4px)); background: transparent; color: inherit; font: inherit; }\n.xve-tile[aria-pressed=\"true\"] { border-color: var(--xve-primary, var(--office-accent, #217346)); background: var(--xve-selection, var(--office-selected, #e6f2ea)); }\n.xve-symbols { display: grid; grid-template-columns: repeat(16, 28px); gap: 2px; max-height: 240px; overflow: auto; }\n.xve-symbols button { width: 28px; height: 28px; padding: 0; font-size: 16px; }\n.xve-preview { border: 1px solid var(--xve-border, var(--office-border, #e1dfdd)); background: #fff; min-height: 160px; display: flex;\n\talign-items: center; justify-content: center; }\n.xve-preview svg { max-width: 100%; height: auto; }\n.xve-results { max-height: 160px; overflow: auto; border: 1px solid var(--xve-border, var(--office-border, #e1dfdd)); }\n.xve-results table { border-collapse: collapse; width: 100%; font-size: 12px; }\n.xve-results th, .xve-results td { text-align: left; padding: 2px 6px; border-bottom: 1px solid var(--xve-border, var(--office-border, #f3f2f1)); }\n.xve-results tr[aria-selected=\"true\"] td { background: var(--xve-selection, var(--office-selected, #cce8d6)); }\n.xve-border-box { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }\n.xve-border-preview { width: 120px; height: 80px; position: relative; background: #fff; border: 1px dashed #c8c6c4; }\n@media (max-width: 600px) { .xve-field { grid-template-columns: 1fr; } .xve-symbols { grid-template-columns: repeat(8, 28px); } }\n";
@@ -36,6 +36,7 @@ export declare class EditorCore {
36
36
  appliedThemeVars: string[];
37
37
  hiddenActions: string[];
38
38
  loadGeneration: number;
39
+ loading: boolean;
39
40
  savePassword: string | undefined;
40
41
  shell: ShellHooks | undefined;
41
42
  readonly selection: SelectionModel;
@@ -6,9 +6,15 @@
6
6
  import { EditorCore } from './editor-core.js';
7
7
  import { type FileChrome } from './editor-files.js';
8
8
  import type { XlsxCollaborationOptions, XlsxCollaborationState } from './collaboration-types.js';
9
+ import { type SpreadsheetToolbarProps } from './building-blocks.js';
9
10
  /** Server rendering has no HTMLElement; the class still has to be definable there. */
10
11
  export declare const HTMLElementBase: typeof HTMLElement;
11
12
  export declare class XlsxEditorApi extends HTMLElementBase {
13
+ /** Set before mounting to omit application UI. */
14
+ surfaceOnly: boolean;
15
+ getToolbarProps(): SpreadsheetToolbarProps;
16
+ get loading(): boolean;
17
+ subscribeEditorState(listener: () => void): () => void;
12
18
  protected readonly core: EditorCore;
13
19
  /** Set by the shell once connected. */
14
20
  protected chrome: FileChrome | undefined;
@@ -1 +1 @@
1
- export declare const FORMULA_BAR_CSS = "\n.xfb{position:relative;display:flex;align-items:stretch;gap:0;min-height:26px;padding:3px 6px;box-sizing:border-box;background:var(--xve-background,#fff);border-bottom:1px solid var(--xve-border,#e1dfdd);font:12px/1.4 'Segoe UI',system-ui,sans-serif;color:var(--xve-foreground,#252423)}\n.xfb-namebox{position:relative;display:flex;align-items:center;width:110px;flex:none;border:1px solid var(--xve-input,#c8c6c4);border-radius:var(--xve-radius,2px);background:var(--xve-background,#fff)}\n.xfb-name{flex:1;min-width:0;border:0;outline:0;background:transparent;color:inherit;font:inherit;padding:0 4px;height:20px}\n.xfb-namebox:focus-within{border-color:var(--xve-ring,#217346)}\n.xfb-name-toggle{border:0;background:transparent;color:inherit;width:16px;height:20px;padding:0;display:flex;align-items:center;justify-content:center;cursor:pointer}\n.xfb-name-list{position:absolute;left:-1px;top:100%;z-index:50;min-width:100%;max-height:240px;overflow:auto;margin:2px 0 0;padding:2px 0;list-style:none;background:var(--xve-popover,#fff);border:1px solid var(--xve-border,#c8c6c4);box-shadow:0 4px 12px rgba(0,0,0,.16)}\n.xfb-name-item{padding:3px 8px;cursor:default;white-space:nowrap}\n.xfb-name-item:hover{background:var(--xve-accent,#e1dfdd)}\n.xfb-name-empty{padding:3px 8px;color:var(--xve-muted-foreground,#605e5c)}\n.xfb-actions{display:flex;align-items:center;flex:none;padding:0 4px;margin-left:4px;border-left:1px solid var(--xve-border,#e1dfdd)}\n.xfb-btn{border:0;background:transparent;color:inherit;width:24px;height:22px;padding:0;display:flex;align-items:center;justify-content:center;border-radius:var(--xve-radius,2px);cursor:pointer}\n.xfb-btn:hover:not(:disabled){background:var(--xve-accent,#edebe9)}\n.xfb-btn:disabled{opacity:.45;cursor:default}\n.xfb-cancel,.xfb-enter{display:none}\n.xfb-editing .xfb-cancel,.xfb-editing .xfb-enter{display:flex}\n.xfb-fx i{font-family:Cambria,'Times New Roman',serif;font-size:13px}\n.xfb-input{flex:1;min-width:0;height:20px;border:1px solid transparent;border-radius:var(--xve-radius,2px)}\n.xfb-input:focus-within{border-color:var(--xve-input,#c8c6c4)}\n.xfb-expanded .xfb-input{height:76px}\n.xfb-expand{align-self:flex-start;flex:none;margin-left:2px}\n.xfb-expanded .xfb-expand svg{transform:rotate(180deg)}\n.xfb .xg-field{position:relative;overflow:hidden}\n.xfb .xg-field-backdrop,.xfb .xg-field-input{position:absolute;inset:0;box-sizing:border-box;margin:0;border:0;padding:1px 4px;font:13px/18px Calibri,Carlito,'Segoe UI',sans-serif;white-space:pre-wrap;word-wrap:break-word;overflow:hidden}\n.xfb .xg-field-backdrop{color:var(--xve-foreground,#252423);pointer-events:none;visibility:hidden}\n.xfb .xg-field-input{resize:none;outline:0;background:transparent;color:inherit}\n.xfb-expanded .xg-field-input{overflow:auto}\n.xfb .xg-formula .xg-field-backdrop{visibility:visible}\n.xfb .xg-formula .xg-field-input{color:transparent;caret-color:var(--xve-foreground,#252423)}\n.xfb .xg-assist{top:100%}\n@media (pointer: coarse), (max-width: 767px){\n.xfb{min-height:52px}\n.xfb-btn,.xfb-name-toggle{min-width:44px;min-height:44px}\n.xfb-namebox{height:44px;width:104px;min-width:104px}\n.xfb-name,.xfb-input{height:44px}\n.xfb .xg-field-input{font-size:16px;line-height:24px;padding-top:9px}\n.xfb-name-item{min-height:44px;display:flex;align-items:center}\n}\n";
1
+ export declare const FORMULA_BAR_CSS = "\n.xfb{position:relative;display:flex;align-items:stretch;gap:0;min-height:26px;padding:3px 6px;box-sizing:border-box;background:var(--xve-background, var(--office-background, #fff));border-bottom:1px solid var(--xve-border, var(--office-border, #e1dfdd));font:var(--office-font-size,13px)/var(--office-line-height,1.4) var(--xve-font, var(--office-font, system-ui, sans-serif));color:var(--xve-foreground, var(--office-foreground, #252423))}\n.xfb-namebox{position:relative;display:flex;align-items:center;width:110px;flex:none;border:1px solid var(--xve-input, var(--office-border, #c8c6c4));border-radius:var(--xve-radius, var(--office-radius, 2px));background:var(--xve-background, var(--office-background, #fff))}\n.xfb-name{flex:1;min-width:0;border:0;outline:0;background:transparent;color:inherit;font:inherit;padding:0 4px;height:20px}\n.xfb-namebox:focus-within{border-color:var(--xve-ring, var(--office-ring, #217346))}\n.xfb-name-toggle{border:0;background:transparent;color:inherit;width:16px;height:20px;padding:0;display:flex;align-items:center;justify-content:center;cursor:pointer}\n.xfb-name-list{position:absolute;left:-1px;top:100%;z-index:50;min-width:100%;max-height:240px;overflow:auto;margin:2px 0 0;padding:2px 0;list-style:none;background:var(--xve-popover, var(--office-popover, #fff));border:1px solid var(--xve-border, var(--office-border, #c8c6c4));box-shadow:0 4px 12px rgba(0,0,0,.16)}\n.xfb-name-item{padding:3px 8px;cursor:default;white-space:nowrap}\n.xfb-name-item:hover{background:var(--xve-accent, var(--office-selected, #e1dfdd))}\n.xfb-name-empty{padding:3px 8px;color:var(--xve-muted-foreground, var(--office-muted-foreground, #605e5c))}\n.xfb-actions{display:flex;align-items:center;flex:none;padding:0 4px;margin-left:4px;border-left:1px solid var(--xve-border, var(--office-border, #e1dfdd))}\n.xfb-btn{border:0;background:transparent;color:inherit;width:24px;height:22px;padding:0;display:flex;align-items:center;justify-content:center;border-radius:var(--xve-radius, var(--office-radius, 2px));cursor:pointer}\n.xfb-btn:hover:not(:disabled){background:var(--xve-accent, var(--office-selected, #edebe9))}\n.xfb-btn:disabled{opacity:.45;cursor:default}\n.xfb-cancel,.xfb-enter{display:none}\n.xfb-editing .xfb-cancel,.xfb-editing .xfb-enter{display:flex}\n.xfb-fx i{font-family:Cambria,'Times New Roman',serif;font-size:13px}\n.xfb-input{flex:1;min-width:0;height:20px;border:1px solid transparent;border-radius:var(--xve-radius, var(--office-radius, 2px))}\n.xfb-input:focus-within{border-color:var(--xve-input, var(--office-border, #c8c6c4))}\n.xfb-expanded .xfb-input{height:76px}\n.xfb-expand{align-self:flex-start;flex:none;margin-left:2px}\n.xfb-expanded .xfb-expand svg{transform:rotate(180deg)}\n.xfb .xg-field{position:relative;overflow:hidden}\n.xfb .xg-field-backdrop,.xfb .xg-field-input{position:absolute;inset:0;box-sizing:border-box;margin:0;border:0;padding:1px 4px;font:var(--office-font-size,13px)/var(--office-line-height,1.4) var(--xve-font, var(--office-font, system-ui, sans-serif));white-space:pre-wrap;word-wrap:break-word;overflow:hidden}\n.xfb .xg-field-backdrop{color:var(--xve-foreground, var(--office-foreground, #252423));pointer-events:none;visibility:hidden}\n.xfb .xg-field-input{resize:none;outline:0;background:transparent;color:inherit}\n.xfb-expanded .xg-field-input{overflow:auto}\n.xfb .xg-formula .xg-field-backdrop{visibility:visible}\n.xfb .xg-formula .xg-field-input{color:transparent;caret-color:var(--xve-foreground, var(--office-foreground, #252423))}\n.xfb .xg-assist{top:100%}\n@media (pointer: coarse), (max-width: 767px){\n.xfb{min-height:52px}\n.xfb-btn,.xfb-name-toggle{min-width:44px;min-height:44px}\n.xfb-namebox{height:44px;width:104px;min-width:104px}\n.xfb-name,.xfb-input{height:44px}\n.xfb .xg-field-input{font-size:16px;line-height:24px;padding-top:9px}\n.xfb-name-item{min-height:44px;display:flex;align-items:center}\n}\n";
@@ -1,3 +1,3 @@
1
1
  import type { GridView } from './grid-view.js';
2
- export declare const PAGE_BREAK_CSS = "\n.xgpb-layer{position:absolute;inset:0;pointer-events:none;z-index:3;overflow:hidden}\n.xgpb-layer[hidden]{display:none}\n.xgpb-shade{position:absolute;background:rgba(128,128,128,.32)}\n.xgpb-area{position:absolute;box-sizing:border-box;border:2px solid #2b579a}\n.xgpb-mark{position:absolute;display:flex;align-items:center;justify-content:center;overflow:hidden;\n\tfont:700 clamp(28px,6vw,72px)/1 \"Segoe UI\",system-ui,sans-serif;color:rgba(128,128,128,.42);white-space:nowrap}\n.xgpb-line{position:absolute;pointer-events:none;background:#2b579a}\n.xgpb-line.xgpb-auto{background:none}\n.xgpb-line.xgpb-auto.xgpb-row{border-top:2px dashed #2b579a}\n.xgpb-line.xgpb-auto.xgpb-col{border-left:2px dashed #2b579a}\n.xgpb-grab{position:absolute;pointer-events:auto;z-index:1;touch-action:none}\n.xgpb-grab.xgpb-row{cursor:ns-resize}\n.xgpb-grab.xgpb-col{cursor:ew-resize}\n.xgpb-ghost{position:absolute;pointer-events:none;background:rgba(43,87,154,.55);z-index:2}\n";
2
+ export declare const PAGE_BREAK_CSS = "\n.xgpb-layer{position:absolute;inset:0;pointer-events:none;z-index:3;overflow:hidden}\n.xgpb-layer[hidden]{display:none}\n.xgpb-shade{position:absolute;background:color-mix(in srgb,var(--office-muted-foreground,#808080) 32%,transparent)}\n.xgpb-area{position:absolute;box-sizing:border-box;border:2px solid var(--office-accent,#2b579a)}\n.xgpb-mark{position:absolute;display:flex;align-items:center;justify-content:center;overflow:hidden;\n\tfont:700 clamp(28px,6vw,72px)/1 var(--xve-font,var(--office-font,system-ui,sans-serif));color:color-mix(in srgb,var(--office-muted-foreground,#808080) 42%,transparent);white-space:nowrap}\n.xgpb-line{position:absolute;pointer-events:none;background:var(--office-accent,#2b579a)}\n.xgpb-line.xgpb-auto{background:none}\n.xgpb-line.xgpb-auto.xgpb-row{border-top:2px dashed var(--office-accent,#2b579a)}\n.xgpb-line.xgpb-auto.xgpb-col{border-left:2px dashed var(--office-accent,#2b579a)}\n.xgpb-grab{position:absolute;pointer-events:auto;z-index:1;touch-action:none}\n.xgpb-grab.xgpb-row{cursor:ns-resize}\n.xgpb-grab.xgpb-col{cursor:ew-resize}\n.xgpb-ghost{position:absolute;pointer-events:none;background:color-mix(in srgb,var(--office-accent,#2b579a) 55%,transparent);z-index:2}\n";
3
3
  export declare function installPageBreakPreview(view: GridView): () => void;
@@ -1 +1 @@
1
- export declare const GRID_CSS = "\n.xg-root [hidden]{display:none!important}\n.xg-root{position:relative;overflow:hidden;width:100%;height:100%;min-height:0;outline:none;\n\tbackground:var(--xve-sheet-bg,#fff);color:#000;font-family:\"Segoe UI\",system-ui,sans-serif;\n\t-webkit-user-select:none;user-select:none;contain:strict}\n.xg-scroller{position:absolute;inset:0;overflow:auto;overscroll-behavior:contain;touch-action:pan-x pan-y}\n.xg-space{position:relative}\n.xg-view{position:sticky;left:0;top:0;overflow:hidden;cursor:cell;touch-action:pan-x pan-y}\n.xg-q,.xg-hbox{position:absolute;overflow:hidden}\n.xg-plane{position:absolute;left:0;top:0;will-change:transform}\n.xg-cells,.xg-lines,.xg-overlay,.xg-drawings{position:absolute;left:0;top:0}\n.xg-gl{position:absolute;background:var(--xve-grid-line,#e1e1e1)}\n.xg-c{position:absolute;box-sizing:border-box;overflow:visible}\n.xg-c[hidden],.xg-gl[hidden],.xg-hd[hidden]{display:none}\n.xg-c-over{z-index:1}\n.xg-t{position:absolute;top:0;bottom:0;display:flex;box-sizing:border-box;overflow:hidden;line-height:1.15}\n.xg-t.xg-wrap{white-space:pre-wrap;overflow-wrap:anywhere}\n.xg-t.xg-wrap>.xg-tx{display:block;width:100%}\n.xg-t.xg-vert{writing-mode:vertical-rl;text-orientation:upright}\n.xg-t.xg-over{background:var(--xve-sheet-bg,#fff)}\n.xg-c[style*=\"background-color\"]>.xg-t.xg-over,.xg-c-fill>.xg-t.xg-over{background:transparent}\n.xg-tx{display:inline-block;white-space:inherit}\n.xg-link{cursor:pointer}\n.xg-b{position:absolute;left:-1px;top:-1px;box-sizing:border-box;pointer-events:none}\n.xg-diag{position:absolute;left:0;top:0;pointer-events:none}\n.xg-spark{position:absolute;left:0;top:0;pointer-events:none;overflow:hidden}\n.xg-db{position:absolute;left:2px;top:2px;bottom:2px;border:1px solid;box-sizing:border-box}\n.xg-ic{position:absolute;left:2px;top:50%;transform:translateY(-50%)}\n.xg-cm{position:absolute;right:0;top:0;width:0;height:0;border-left:6px solid transparent;border-top:6px solid #d13438;z-index:2}\n.xg-er{position:absolute;left:0;top:0;width:0;height:0;border-right:6px solid transparent;border-top:6px solid #107c41;z-index:2}\n.xg-overlay{pointer-events:none;z-index:3}\n.xg-shade{position:absolute;background:var(--xve-selection,rgba(33,115,70,.12))}\n.xg-outline{position:absolute;box-sizing:border-box;border:2px solid var(--xve-selection-border,#217346)}\n.xg-active{position:absolute;box-sizing:border-box;border:1px solid var(--xve-selection-border,#217346)}\n.xg-handle{position:absolute;box-sizing:border-box;background:var(--xve-selection-border,#217346);border:1px solid #fff;pointer-events:auto;cursor:crosshair}\n.xg-ants{position:absolute;box-sizing:border-box;--a:var(--xve-selection-border,#217346);\n\tbackground-image:linear-gradient(90deg,var(--a) 50%,transparent 50%),linear-gradient(90deg,var(--a) 50%,transparent 50%),linear-gradient(0deg,var(--a) 50%,transparent 50%),linear-gradient(0deg,var(--a) 50%,transparent 50%);\n\tbackground-repeat:repeat-x,repeat-x,repeat-y,repeat-y;background-size:8px 2px,8px 2px,2px 8px,2px 8px;\n\tbackground-position:0 0,0 100%,0 0,100% 0;animation:xg-ants .5s linear infinite}\n@keyframes xg-ants{to{background-position:8px 0,-8px 100%,0 -8px,100% 8px}}\n@media (prefers-reduced-motion:reduce){.xg-ants{animation:none}}\n.xg-fill-preview{position:absolute;box-sizing:border-box;border:1px dashed #666}\n.xg-refbox{position:absolute;box-sizing:border-box;border:2px solid}\n.xg-remote-layer{position:absolute;left:0;top:0;pointer-events:none;z-index:3}\n.xg-remote{position:absolute;box-sizing:border-box;border:2px solid}\n.xg-remote[hidden]{display:none}\n.xg-remote-tag{position:absolute;left:-2px;bottom:100%;max-width:160px;padding:0 4px;height:16px;line-height:16px;\n\tfont:600 11px/16px var(--xve-font,system-ui,sans-serif);color:#fff;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;border-radius:2px 2px 2px 0}\n.xg-remote[data-tag=\"inside\"] .xg-remote-tag{bottom:auto;top:0;left:0;border-radius:0 0 2px 0}\n.xg-hbox{background:var(--xve-header-bg,#f3f3f3);z-index:4}\n.xg-hdr-plane{position:absolute;left:0;top:0;will-change:transform}\n.xg-hd{position:absolute;box-sizing:border-box;display:flex;align-items:center;justify-content:center;\n\tcolor:var(--xve-header-fg,#444);border-right:1px solid var(--xve-header-line,#d4d4d4);border-bottom:1px solid var(--xve-header-line,#d4d4d4);overflow:hidden;white-space:nowrap}\n.xg-hdr-col .xg-hd{top:0;height:100%}\n.xg-hdr-row .xg-hd{left:0;width:100%}\n.xg-hd-sel{background:var(--xve-header-active-bg,#e1e1e1);color:var(--xve-selection-border,#217346);font-weight:600}\n.xg-hdr-col .xg-hd-sel{box-shadow:inset 0 -2px 0 var(--xve-selection-border,#217346)}\n.xg-hdr-row .xg-hd-sel{box-shadow:inset -2px 0 0 var(--xve-selection-border,#217346)}\n.xg-hd-full{background:var(--xve-header-full-bg,#cde6d7);color:var(--xve-selection-border,#185c37);font-weight:600}\n.xg-hdr-col{cursor:s-resize}.xg-hdr-row{cursor:e-resize}\n.xg-hdr-col .xg-hd,.xg-hdr-row .xg-hd{cursor:inherit}\n.xg-corner{position:absolute;left:0;top:0;background:var(--xve-header-bg,#f3f3f3);z-index:5;box-sizing:border-box;\n\tborder-right:1px solid var(--xve-header-line,#d4d4d4);border-bottom:1px solid var(--xve-header-line,#d4d4d4);cursor:default}\n.xg-corner::after{content:\"\";position:absolute;right:3px;bottom:3px;border-left:9px solid transparent;border-bottom:9px solid #b4b4b4}\n.xg-freeze-h,.xg-freeze-v{position:absolute;background:var(--xve-freeze-line,#9b9b9b);z-index:6;pointer-events:none}\n.xg-col-resize{cursor:col-resize!important}.xg-row-resize{cursor:row-resize!important}\n.xg-resize-guide{position:absolute;z-index:8;border:0 dashed #666;pointer-events:none}\n.xg-editor-host{position:absolute;z-index:7;box-sizing:border-box;opacity:0;overflow:hidden;pointer-events:none;background:#fff;color:#000;line-height:1.25}\n.xg-editor-host.xg-editing{opacity:1;pointer-events:auto;overflow:visible;cursor:text;\n\tbox-shadow:0 0 0 2px var(--xve-selection-border,#217346),0 2px 6px rgba(0,0,0,.25)}\n.xg-editor-host .xg-field-backdrop,.xg-editor-host .xg-field-input{padding:1px 3px}\n.xg-sink{position:absolute;left:0;top:0;width:1px;height:1px;opacity:0;padding:0;border:0;resize:none;overflow:hidden;pointer-events:none}\n.xg-field{position:relative}\n.xg-field-backdrop,.xg-field-input{margin:0;border:0;box-sizing:border-box;font:inherit;line-height:inherit;letter-spacing:inherit;\n\tpadding:inherit;white-space:pre-wrap;overflow-wrap:anywhere;word-break:normal;tab-size:4}\n.xg-field-backdrop{position:absolute;inset:0;overflow:hidden;color:inherit;pointer-events:none;visibility:hidden}\n.xg-field.xg-formula .xg-field-backdrop{visibility:visible}\n.xg-field-input{position:relative;display:block;width:100%;height:100%;resize:none;outline:none;background:transparent;color:inherit;overflow:hidden}\n.xg-field.xg-formula .xg-field-input{color:transparent;caret-color:#000}\n.xg-ref{font:inherit}\n.xg-editor-host .xg-field{width:100%;height:100%}\n.xg-dd{position:absolute;z-index:6;width:17px;height:17px;box-sizing:border-box;border:1px solid #c8c8c8;background:#f3f3f3;\n\tdisplay:flex;align-items:center;justify-content:center;cursor:default;pointer-events:auto}\n.xg-dd::before{content:\"\";border-left:4px solid transparent;border-right:4px solid transparent;border-top:5px solid #444}\n.xg-popup{position:absolute;z-index:20;background:var(--xve-popover,#fff);color:var(--xve-popover-foreground,#222);\n\tborder:1px solid var(--xve-border,#c8c8c8);box-shadow:0 4px 12px rgba(0,0,0,.18);font-size:13px;border-radius:4px}\n.xg-list{max-height:220px;overflow:auto;min-width:120px;padding:2px 0;margin:0;list-style:none}\n.xg-list [role=option]{padding:3px 10px;cursor:default;white-space:nowrap}\n.xg-list [aria-selected=true]{background:var(--xve-accent,#e1efe6)}\n.xg-tip{padding:6px 8px;max-width:260px;white-space:pre-wrap;background:#fffbe6;color:#222;pointer-events:none}\n.xg-tip b{display:block;margin-bottom:2px}\n.xg-alert{padding:12px 14px;max-width:340px}\n.xg-alert h3{margin:0 0 6px;font-size:14px}\n.xg-alert p{margin:0 0 10px;white-space:pre-wrap}\n.xg-alert .xg-actions{display:flex;gap:6px;justify-content:flex-end}\n.xg-alert button{min-width:64px;padding:4px 10px;border:1px solid var(--xve-border,#c8c8c8);border-radius:3px;background:var(--xve-secondary,#f3f3f3);color:inherit;font:inherit}\n.xg-alert button:first-child{background:var(--xve-selection-border,#217346);color:#fff;border-color:transparent}\n.xg-drawings{z-index:4}\n.xg-obj{position:absolute;box-sizing:border-box;pointer-events:auto;cursor:default;touch-action:none}\n.xg-obj img,.xg-obj svg{display:block;width:100%;height:100%;pointer-events:none}\n.xg-chart svg [data-chart-series],.xg-chart svg [data-chart-part]{pointer-events:auto}\n.xg-obj.xg-chart{background:#fff;outline:1px solid #d9d9d9;outline-offset:-1px}\n.xg-obj.xg-obj-sel{outline:1px solid #8a8a8a;outline-offset:0}\n.xg-obj .xg-grip{position:absolute;width:8px;height:8px;background:#fff;border:1px solid #555;box-sizing:border-box;border-radius:50%}\n@media(pointer:coarse){.xg-grip::before{content:'';position:absolute;inset:-18px;touch-action:none}}\n.xg-obj-unsupported{background:repeating-linear-gradient(45deg,#f6f6f6,#f6f6f6 6px,#ececec 6px,#ececec 12px);border:1px dashed #aaa;\n\tfont-size:11px;color:#555;display:flex;align-items:center;justify-content:center;text-align:center}\n.xg-obj.xg-smartart{overflow:hidden}\n.xg-obj.xg-smartart office-ui-smartart{display:block;pointer-events:none}\n.xg-smartart-placeholder{background:#fafafa;border:1px dashed #aaa;font-size:11px;color:#333;padding:4px;overflow:auto}\n.xg-smartart-nodes{margin:0;padding-left:16px}\n.xg-smartart-nodes .xg-smartart-child{margin-left:12px}\n.xg-smartart-notice{display:none;position:absolute;left:0;bottom:0;padding:1px 4px;font-size:10px;background:rgba(255,255,255,.9);color:#555;border-top-right-radius:3px}\n.xg-obj-sel .xg-smartart-notice,.xg-smartart-placeholder .xg-smartart-notice{display:block}\n.xg-obj.xg-slicer{background:var(--sl-bg,#fff);border:1px solid var(--sl-border,#a6a6a6);overflow:hidden;\n\tfont:12px/1.2 var(--xve-font,\"Segoe UI\",system-ui,sans-serif);color:var(--sl-un-fg,#000)}\n.xg-slicer button{font:inherit;color:inherit;margin:0;padding:0;box-sizing:border-box;cursor:pointer;touch-action:manipulation}\n.xg-sl-head{display:flex;align-items:center;justify-content:space-between;box-sizing:border-box;padding:0 4px 0 8px;\n\tbackground:var(--sl-head-bg,#fff);color:var(--sl-head-fg,#000);border-bottom:1px solid var(--sl-head-line,#5b9bd5)}\n.xg-sl-caption{font-weight:600;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}\n.xg-sl-tools{display:flex;gap:2px;flex:none}\n.xg-sl-tool{width:20px;height:20px;display:flex;align-items:center;justify-content:center;background:transparent;border:1px solid transparent;border-radius:2px}\n.xg-sl-tool:hover:not([disabled]){border-color:var(--sl-sel-line,#5b9bd5);background:var(--sl-sel-bg,#deebf7)}\n.xg-sl-tool.xg-sl-on{background:var(--sl-sel-bg,#deebf7);border-color:var(--sl-sel-line,#5b9bd5)}\n.xg-sl-tool[disabled]{opacity:.4;cursor:default}\n@media(pointer:coarse){.xg-sl-tool{position:relative}.xg-sl-tool::before{content:'';position:absolute;inset:-12px}}\n.xg-sl-body{position:absolute;overflow-x:hidden;overflow-y:auto}\n.xg-sl-grid{position:relative;width:100%}\n.xg-sl-item{position:absolute;display:block;text-align:left;padding:0 8px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;\n\tbackground:var(--sl-un-bg,#fff);color:var(--sl-un-fg,#000);border:1px solid var(--sl-un-line,#bfbfbf)}\n.xg-sl-item:hover{background:var(--sl-hover,#eaf3fa);border-color:var(--sl-sel-line,#5b9bd5)}\n.xg-sl-selected:hover,.xg-sl-selectedNoData:hover{background:var(--sl-sel-bg,#deebf7)}\n.xg-sl-selected,.xg-sl-selectedNoData{background:var(--sl-sel-bg,#deebf7);color:var(--sl-sel-fg,#000);border-color:var(--sl-sel-line,#5b9bd5)}\n.xg-sl-unselectedNoData,.xg-sl-selectedNoData{color:var(--sl-nd-fg,#8a8a8a)}\n.xg-sl-selectedNoData{background:var(--sl-nd-bg,#f2f7fb)}\n.xg-slicer button:focus-visible{outline:2px solid var(--xve-selection-border,#217346);outline-offset:-2px}\n.xg-obj.xg-timeline{background:var(--sl-bg,#fff);border:1px solid var(--sl-border,#a6a6a6);overflow:hidden;\n\tfont:12px/1.2 var(--xve-font,\"Segoe UI\",system-ui,sans-serif);color:var(--sl-un-fg,#000)}\n.xg-timeline button,.xg-timeline select{font:inherit;color:inherit;margin:0;box-sizing:border-box;cursor:pointer}\n.xg-tl-head{display:flex;align-items:center;gap:8px;padding:0 4px 0 8px;border-bottom:1px solid var(--sl-head-line,#5b9bd5);box-sizing:border-box}\n.xg-tl-caption{font-weight:600;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}\n.xg-tl-selection{flex:1;min-width:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;color:var(--sl-nd-fg,#5a5a5a);text-align:center}\n.xg-tl-level{height:22px;padding:0 4px;border:1px solid var(--sl-un-line,#bfbfbf);background:var(--sl-un-bg,#fff);border-radius:2px}\n.xg-tl-body{position:absolute;overflow-x:auto;overflow-y:hidden}\n.xg-tl-track{position:relative;height:100%;min-height:50px}\n.xg-tl-group{position:absolute;top:0;box-sizing:border-box;padding:2px 0;border-left:1px solid var(--sl-un-line,#bfbfbf);color:var(--sl-un-fg,#000);font-weight:600;white-space:nowrap}\n.xg-tl-group>span{position:sticky;left:0;padding:0 6px}\n.xg-tl-cell:not(.xg-tl-on):hover{background:var(--sl-hover,#eaf3fa)}\n.xg-tl-cell{position:absolute;padding:0;text-align:center;background:var(--sl-un-bg,#fff);border:1px solid var(--sl-un-line,#bfbfbf)}\n.xg-tl-cell.xg-tl-on{background:var(--sl-sel-bg,#deebf7);border-color:var(--sl-sel-line,#5b9bd5)}\n.xg-timeline button:focus-visible,.xg-timeline select:focus-visible{outline:2px solid var(--xve-selection-border,#217346);outline-offset:-2px}\n.xg-live{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}\n";
1
+ export declare const GRID_CSS = "\n.xg-root [hidden]{display:none!important}\n.xg-root{position:relative;overflow:hidden;width:100%;height:100%;min-height:0;outline:none;\n\tbackground:var(--xve-sheet-bg, var(--office-paper, #fff));color:#000;font-family:var(--xve-font, var(--office-font, system-ui, sans-serif));\n\t-webkit-user-select:none;user-select:none;contain:strict}\n.xg-scroller{position:absolute;inset:0;overflow:auto;overscroll-behavior:contain;touch-action:pan-x pan-y}\n.xg-space{position:relative}\n.xg-view{position:sticky;left:0;top:0;overflow:hidden;cursor:cell;touch-action:pan-x pan-y}\n.xg-q,.xg-hbox{position:absolute;overflow:hidden}\n.xg-plane{position:absolute;left:0;top:0;will-change:transform}\n.xg-cells,.xg-lines,.xg-overlay,.xg-drawings{position:absolute;left:0;top:0}\n.xg-gl{position:absolute;background:var(--xve-grid-line, var(--office-border, #e1e1e1))}\n.xg-c{position:absolute;box-sizing:border-box;overflow:visible}\n.xg-c[hidden],.xg-gl[hidden],.xg-hd[hidden]{display:none}\n.xg-c-over{z-index:1}\n.xg-t{position:absolute;top:0;bottom:0;display:flex;box-sizing:border-box;overflow:hidden;line-height:1.15}\n.xg-t.xg-wrap{white-space:pre-wrap;overflow-wrap:anywhere}\n.xg-t.xg-wrap>.xg-tx{display:block;width:100%}\n.xg-t.xg-vert{writing-mode:vertical-rl;text-orientation:upright}\n.xg-t.xg-over{background:var(--xve-sheet-bg, var(--office-paper, #fff))}\n.xg-c[style*=\"background-color\"]>.xg-t.xg-over,.xg-c-fill>.xg-t.xg-over{background:transparent}\n.xg-tx{display:inline-block;white-space:inherit}\n.xg-link{cursor:pointer}\n.xg-b{position:absolute;left:-1px;top:-1px;box-sizing:border-box;pointer-events:none}\n.xg-diag{position:absolute;left:0;top:0;pointer-events:none}\n.xg-spark{position:absolute;left:0;top:0;pointer-events:none;overflow:hidden}\n.xg-db{position:absolute;left:2px;top:2px;bottom:2px;border:1px solid;box-sizing:border-box}\n.xg-ic{position:absolute;left:2px;top:50%;transform:translateY(-50%)}\n.xg-cm{position:absolute;right:0;top:0;width:0;height:0;border-left:6px solid transparent;border-top:6px solid #d13438;z-index:2}\n.xg-er{position:absolute;left:0;top:0;width:0;height:0;border-right:6px solid transparent;border-top:6px solid #107c41;z-index:2}\n.xg-overlay{pointer-events:none;z-index:3}\n.xg-shade{position:absolute;background:var(--xve-selection, color-mix(in srgb, var(--office-accent, #217346) 12%, transparent))}\n.xg-outline{position:absolute;box-sizing:border-box;border:2px solid var(--xve-selection-border, var(--office-accent, #217346))}\n.xg-active{position:absolute;box-sizing:border-box;border:1px solid var(--xve-selection-border, var(--office-accent, #217346))}\n.xg-handle{position:absolute;box-sizing:border-box;background:var(--xve-selection-border, var(--office-accent, #217346));border:1px solid #fff;pointer-events:auto;cursor:crosshair}\n.xg-ants{position:absolute;box-sizing:border-box;--a:var(--xve-selection-border, var(--office-accent, #217346));\n\tbackground-image:linear-gradient(90deg,var(--a) 50%,transparent 50%),linear-gradient(90deg,var(--a) 50%,transparent 50%),linear-gradient(0deg,var(--a) 50%,transparent 50%),linear-gradient(0deg,var(--a) 50%,transparent 50%);\n\tbackground-repeat:repeat-x,repeat-x,repeat-y,repeat-y;background-size:8px 2px,8px 2px,2px 8px,2px 8px;\n\tbackground-position:0 0,0 100%,0 0,100% 0;animation:xg-ants .5s linear infinite}\n@keyframes xg-ants{to{background-position:8px 0,-8px 100%,0 -8px,100% 8px}}\n@media (prefers-reduced-motion:reduce){.xg-ants{animation:none}}\n.xg-fill-preview{position:absolute;box-sizing:border-box;border:1px dashed #666}\n.xg-refbox{position:absolute;box-sizing:border-box;border:2px solid}\n.xg-remote-layer{position:absolute;left:0;top:0;pointer-events:none;z-index:3}\n.xg-remote{position:absolute;box-sizing:border-box;border:2px solid}\n.xg-remote[hidden]{display:none}\n.xg-remote-tag{position:absolute;left:-2px;bottom:100%;max-width:160px;padding:0 4px;height:16px;line-height:16px;\n\tfont:600 11px/16px var(--xve-font, var(--office-font, system-ui,sans-serif));color:#fff;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;border-radius:2px 2px 2px 0}\n.xg-remote[data-tag=\"inside\"] .xg-remote-tag{bottom:auto;top:0;left:0;border-radius:0 0 2px 0}\n.xg-hbox{background:var(--xve-header-bg, var(--office-surface, #f3f3f3));z-index:4}\n.xg-hdr-plane{position:absolute;left:0;top:0;will-change:transform}\n.xg-hd{position:absolute;box-sizing:border-box;display:flex;align-items:center;justify-content:center;\n\tcolor:var(--xve-header-fg, var(--office-foreground, #444));border-right:1px solid var(--xve-header-line, var(--office-border, #d4d4d4));border-bottom:1px solid var(--xve-header-line, var(--office-border, #d4d4d4));overflow:hidden;white-space:nowrap}\n.xg-hdr-col .xg-hd{top:0;height:100%}\n.xg-hdr-row .xg-hd{left:0;width:100%}\n.xg-hd-sel{background:var(--xve-header-active-bg, var(--office-selected, #e1e1e1));color:var(--xve-selection-border, var(--office-accent, #217346));font-weight:600}\n.xg-hdr-col .xg-hd-sel{box-shadow:inset 0 -2px 0 var(--xve-selection-border, var(--office-accent, #217346))}\n.xg-hdr-row .xg-hd-sel{box-shadow:inset -2px 0 0 var(--xve-selection-border, var(--office-accent, #217346))}\n.xg-hd-full{background:var(--xve-header-full-bg, var(--office-selected, #cde6d7));color:var(--xve-selection-border, var(--office-accent, #185c37));font-weight:600}\n.xg-hdr-col{cursor:s-resize}.xg-hdr-row{cursor:e-resize}\n.xg-hdr-col .xg-hd,.xg-hdr-row .xg-hd{cursor:inherit}\n.xg-corner{position:absolute;left:0;top:0;background:var(--xve-header-bg, var(--office-surface, #f3f3f3));z-index:5;box-sizing:border-box;\n\tborder-right:1px solid var(--xve-header-line, var(--office-border, #d4d4d4));border-bottom:1px solid var(--xve-header-line, var(--office-border, #d4d4d4));cursor:default}\n.xg-corner::after{content:\"\";position:absolute;right:3px;bottom:3px;border-left:9px solid transparent;border-bottom:9px solid #b4b4b4}\n.xg-freeze-h,.xg-freeze-v{position:absolute;background:var(--xve-freeze-line, var(--office-border, #9b9b9b));z-index:6;pointer-events:none}\n.xg-col-resize{cursor:col-resize!important}.xg-row-resize{cursor:row-resize!important}\n.xg-resize-guide{position:absolute;z-index:8;border:0 dashed #666;pointer-events:none}\n.xg-editor-host{position:absolute;z-index:7;box-sizing:border-box;opacity:0;overflow:hidden;pointer-events:none;background:#fff;color:#000;line-height:1.25}\n.xg-editor-host.xg-editing{opacity:1;pointer-events:auto;overflow:visible;cursor:text;\n\tbox-shadow:0 0 0 2px var(--xve-selection-border, var(--office-accent, #217346)),0 2px 6px rgba(0,0,0,.25)}\n.xg-editor-host .xg-field-backdrop,.xg-editor-host .xg-field-input{padding:1px 3px}\n.xg-sink{position:absolute;left:0;top:0;width:1px;height:1px;opacity:0;padding:0;border:0;resize:none;overflow:hidden;pointer-events:none}\n.xg-field{position:relative}\n.xg-field-backdrop,.xg-field-input{margin:0;border:0;box-sizing:border-box;font:inherit;line-height:inherit;letter-spacing:inherit;\n\tpadding:inherit;white-space:pre-wrap;overflow-wrap:anywhere;word-break:normal;tab-size:4}\n.xg-field-backdrop{position:absolute;inset:0;overflow:hidden;color:inherit;pointer-events:none;visibility:hidden}\n.xg-field.xg-formula .xg-field-backdrop{visibility:visible}\n.xg-field-input{position:relative;display:block;width:100%;height:100%;resize:none;outline:none;background:transparent;color:inherit;overflow:hidden}\n.xg-field.xg-formula .xg-field-input{color:transparent;caret-color:#000}\n.xg-ref{font:inherit}\n.xg-editor-host .xg-field{width:100%;height:100%}\n.xg-dd{position:absolute;z-index:6;width:17px;height:17px;box-sizing:border-box;border:1px solid #c8c8c8;background:#f3f3f3;\n\tdisplay:flex;align-items:center;justify-content:center;cursor:default;pointer-events:auto}\n.xg-dd::before{content:\"\";border-left:4px solid transparent;border-right:4px solid transparent;border-top:5px solid #444}\n.xg-popup{position:absolute;z-index:20;background:var(--xve-popover, var(--office-popover, #fff));color:var(--xve-popover-foreground, var(--office-popover-foreground, #222));\n\tborder:1px solid var(--xve-border, var(--office-border, #c8c8c8));box-shadow:0 4px 12px rgba(0,0,0,.18);font-size:13px;border-radius:4px}\n.xg-list{max-height:220px;overflow:auto;min-width:120px;padding:2px 0;margin:0;list-style:none}\n.xg-list [role=option]{padding:3px 10px;cursor:default;white-space:nowrap}\n.xg-list [aria-selected=true]{background:var(--xve-accent, var(--office-selected, #e1efe6))}\n.xg-tip{padding:6px 8px;max-width:260px;white-space:pre-wrap;background:#fffbe6;color:#222;pointer-events:none}\n.xg-tip b{display:block;margin-bottom:2px}\n.xg-alert{padding:12px 14px;max-width:340px}\n.xg-alert h3{margin:0 0 6px;font-size:14px}\n.xg-alert p{margin:0 0 10px;white-space:pre-wrap}\n.xg-alert .xg-actions{display:flex;gap:6px;justify-content:flex-end}\n.xg-alert button{min-width:64px;padding:4px 10px;border:1px solid var(--xve-border, var(--office-border, #c8c8c8));border-radius:3px;background:var(--xve-secondary, var(--office-surface, #f3f3f3));color:inherit;font:inherit}\n.xg-alert button:first-child{background:var(--xve-selection-border, var(--office-accent, #217346));color:#fff;border-color:transparent}\n.xg-drawings{z-index:4}\n.xg-obj{position:absolute;box-sizing:border-box;pointer-events:auto;cursor:default;touch-action:none}\n.xg-obj img,.xg-obj svg{display:block;width:100%;height:100%;pointer-events:none}\n.xg-chart svg [data-chart-series],.xg-chart svg [data-chart-part]{pointer-events:auto}\n.xg-obj.xg-chart{background:#fff;outline:1px solid #d9d9d9;outline-offset:-1px}\n.xg-obj.xg-obj-sel{outline:1px solid #8a8a8a;outline-offset:0}\n.xg-obj .xg-grip{position:absolute;width:8px;height:8px;background:#fff;border:1px solid #555;box-sizing:border-box;border-radius:50%}\n@media(pointer:coarse){.xg-grip::before{content:'';position:absolute;inset:-18px;touch-action:none}}\n.xg-obj-unsupported{background:repeating-linear-gradient(45deg,#f6f6f6,#f6f6f6 6px,#ececec 6px,#ececec 12px);border:1px dashed #aaa;\n\tfont-size:11px;color:#555;display:flex;align-items:center;justify-content:center;text-align:center}\n.xg-obj.xg-smartart{overflow:hidden}\n.xg-obj.xg-smartart office-ui-smartart{display:block;pointer-events:none}\n.xg-smartart-placeholder{background:#fafafa;border:1px dashed #aaa;font-size:11px;color:#333;padding:4px;overflow:auto}\n.xg-smartart-nodes{margin:0;padding-left:16px}\n.xg-smartart-nodes .xg-smartart-child{margin-left:12px}\n.xg-smartart-notice{display:none;position:absolute;left:0;bottom:0;padding:1px 4px;font-size:10px;background:rgba(255,255,255,.9);color:#555;border-top-right-radius:3px}\n.xg-obj-sel .xg-smartart-notice,.xg-smartart-placeholder .xg-smartart-notice{display:block}\n.xg-obj.xg-slicer{background:var(--sl-bg,#fff);border:1px solid var(--sl-border,#a6a6a6);overflow:hidden;\n\tfont:12px/1.2 var(--xve-font, var(--office-font, \"Segoe UI\",system-ui,sans-serif));color:var(--sl-un-fg,#000)}\n.xg-slicer button{font:inherit;color:inherit;margin:0;padding:0;box-sizing:border-box;cursor:pointer;touch-action:manipulation}\n.xg-sl-head{display:flex;align-items:center;justify-content:space-between;box-sizing:border-box;padding:0 4px 0 8px;\n\tbackground:var(--sl-head-bg,#fff);color:var(--sl-head-fg,#000);border-bottom:1px solid var(--sl-head-line,#5b9bd5)}\n.xg-sl-caption{font-weight:600;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}\n.xg-sl-tools{display:flex;gap:2px;flex:none}\n.xg-sl-tool{width:20px;height:20px;display:flex;align-items:center;justify-content:center;background:transparent;border:1px solid transparent;border-radius:2px}\n.xg-sl-tool:hover:not([disabled]){border-color:var(--sl-sel-line,#5b9bd5);background:var(--sl-sel-bg,#deebf7)}\n.xg-sl-tool.xg-sl-on{background:var(--sl-sel-bg,#deebf7);border-color:var(--sl-sel-line,#5b9bd5)}\n.xg-sl-tool[disabled]{opacity:.4;cursor:default}\n@media(pointer:coarse){.xg-sl-tool{position:relative}.xg-sl-tool::before{content:'';position:absolute;inset:-12px}}\n.xg-sl-body{position:absolute;overflow-x:hidden;overflow-y:auto}\n.xg-sl-grid{position:relative;width:100%}\n.xg-sl-item{position:absolute;display:block;text-align:left;padding:0 8px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;\n\tbackground:var(--sl-un-bg,#fff);color:var(--sl-un-fg,#000);border:1px solid var(--sl-un-line,#bfbfbf)}\n.xg-sl-item:hover{background:var(--sl-hover,#eaf3fa);border-color:var(--sl-sel-line,#5b9bd5)}\n.xg-sl-selected:hover,.xg-sl-selectedNoData:hover{background:var(--sl-sel-bg,#deebf7)}\n.xg-sl-selected,.xg-sl-selectedNoData{background:var(--sl-sel-bg,#deebf7);color:var(--sl-sel-fg,#000);border-color:var(--sl-sel-line,#5b9bd5)}\n.xg-sl-unselectedNoData,.xg-sl-selectedNoData{color:var(--sl-nd-fg,#8a8a8a)}\n.xg-sl-selectedNoData{background:var(--sl-nd-bg,#f2f7fb)}\n.xg-slicer button:focus-visible{outline:2px solid var(--xve-selection-border, var(--office-accent, #217346));outline-offset:-2px}\n.xg-obj.xg-timeline{background:var(--sl-bg,#fff);border:1px solid var(--sl-border,#a6a6a6);overflow:hidden;\n\tfont:12px/1.2 var(--xve-font, var(--office-font, \"Segoe UI\",system-ui,sans-serif));color:var(--sl-un-fg,#000)}\n.xg-timeline button,.xg-timeline select{font:inherit;color:inherit;margin:0;box-sizing:border-box;cursor:pointer}\n.xg-tl-head{display:flex;align-items:center;gap:8px;padding:0 4px 0 8px;border-bottom:1px solid var(--sl-head-line,#5b9bd5);box-sizing:border-box}\n.xg-tl-caption{font-weight:600;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}\n.xg-tl-selection{flex:1;min-width:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;color:var(--sl-nd-fg,#5a5a5a);text-align:center}\n.xg-tl-level{height:22px;padding:0 4px;border:1px solid var(--sl-un-line,#bfbfbf);background:var(--sl-un-bg,#fff);border-radius:2px}\n.xg-tl-body{position:absolute;overflow-x:auto;overflow-y:hidden}\n.xg-tl-track{position:relative;height:100%;min-height:50px}\n.xg-tl-group{position:absolute;top:0;box-sizing:border-box;padding:2px 0;border-left:1px solid var(--sl-un-line,#bfbfbf);color:var(--sl-un-fg,#000);font-weight:600;white-space:nowrap}\n.xg-tl-group>span{position:sticky;left:0;padding:0 6px}\n.xg-tl-cell:not(.xg-tl-on):hover{background:var(--sl-hover,#eaf3fa)}\n.xg-tl-cell{position:absolute;padding:0;text-align:center;background:var(--sl-un-bg,#fff);border:1px solid var(--sl-un-line,#bfbfbf)}\n.xg-tl-cell.xg-tl-on{background:var(--sl-sel-bg,#deebf7);border-color:var(--sl-sel-line,#5b9bd5)}\n.xg-timeline button:focus-visible,.xg-timeline select:focus-visible{outline:2px solid var(--xve-selection-border, var(--office-accent, #217346));outline-offset:-2px}\n.xg-live{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}\n";
@@ -10,3 +10,4 @@ export type { DialogRegistry } from 'ooxml-core/xlsx/ui';
10
10
  export { registerRibbonTabs, type RibbonControl, type RibbonGroup, type RibbonMenuItem, type RibbonTab, } from 'ooxml-core/xlsx/ui';
11
11
  export { registerRibbonIcon } from './ribbon/icons.js';
12
12
  export { RIBBON_ADD_IN_EVENT, type OfficeRibbonAddInEvent, type RibbonAddInCommand, type RibbonAddInCommandDetail, type RibbonAddInGroup, type RibbonAddInTab, } from '../ribbon/add-in-tabs.js';
13
+ export type { SpreadsheetToolbarProps } from './building-blocks.js';
@@ -1 +1 @@
1
- export declare const PAGE_LAYOUT_CSS = "\n.xve-grid-host[data-view=\"pageLayout\"]>.xg-root{display:none}\n.xpl-root{position:absolute;inset:0;overflow:auto;background:var(--xve-page-surround,#e6e6e6);\n\tfont-family:\"Segoe UI\",system-ui,sans-serif;outline:none;color:#000;-webkit-user-select:none;user-select:none}\n.xpl-root[hidden]{display:none}\n.xpl-sizer{display:grid;grid-template-columns:20px 1fr;grid-template-rows:20px 1fr;position:relative}\n.xpl-corner{position:sticky;left:0;top:0;z-index:7;background:var(--xve-header-bg,#f3f3f3);border-right:1px solid #c6c6c6;border-bottom:1px solid #c6c6c6}\n.xpl-ruler-h{position:sticky;top:0;z-index:6;height:20px;background:var(--xve-header-bg,#f3f3f3);overflow:hidden;border-bottom:1px solid #c6c6c6}\n.xpl-ruler-v{position:sticky;left:0;z-index:6;width:20px;background:var(--xve-header-bg,#f3f3f3);overflow:hidden;border-right:1px solid #c6c6c6}\n.xpl-ruler-area{position:absolute;background:#fff}\n.xpl-ruler-margin{position:absolute;background:#c8c8c8}\n.xpl-ruler-h .xpl-ruler-area,.xpl-ruler-h .xpl-ruler-margin{top:0;bottom:0}\n.xpl-ruler-v .xpl-ruler-area,.xpl-ruler-v .xpl-ruler-margin{left:0;right:0}\n.xpl-tick{position:absolute;background:#767676}\n.xpl-ruler-h .xpl-tick{bottom:0;width:1px}\n.xpl-ruler-v .xpl-tick{right:0;height:1px}\n.xpl-ruler-num{position:absolute;font-size:10px;line-height:1;color:#444}\n.xpl-ruler-v .xpl-ruler-num{left:2px}\n.xpl-canvas{position:relative;overflow:hidden}\n.xpl-scaled{position:absolute;left:0;top:0;transform-origin:0 0}\n.xpl-page{position:absolute;box-sizing:border-box;background:#fff;box-shadow:0 1px 5px rgba(0,0,0,.3)}\n.xpl-content{position:absolute;overflow:hidden}\n.xpl-inner{position:absolute;left:0;top:0;transform-origin:0 0;font-family:Calibri,sans-serif}\n.xpl-inner table{border-collapse:collapse;table-layout:fixed}\n.xpl-inner td{overflow:hidden;padding:0 3px;box-sizing:border-box;line-height:1.2}\n.xpl-colhdr,.xpl-rowhdr{position:absolute;box-sizing:border-box;display:flex;align-items:center;justify-content:center;\n\tfont-size:11px;color:var(--xve-header-fg,#444);background:var(--xve-header-bg,#f3f3f3);border:1px solid var(--xve-header-line,#d4d4d4);overflow:hidden}\n.xpl-blank{position:absolute;inset:0;pointer-events:none;z-index:1;display:flex;align-items:center;justify-content:center;color:#767676;font-size:14px;cursor:cell}\n.xpl-band{position:absolute;display:flex;line-height:1.2;box-sizing:border-box;cursor:text}\n.xpl-section{flex:1 1 0;min-width:0;white-space:pre-wrap;overflow:hidden;padding:0 2px;border:1px solid transparent}\n.xpl-band:hover .xpl-section{border-color:#bbb;border-style:dashed}\n.xpl-placeholder{color:#8a8a8a;text-align:center!important}\n.xpl-band.xpl-editing{background:#fff;z-index:4;box-shadow:0 0 0 1px #217346}\n.xpl-band-input{flex:1 1 0;min-width:0;box-sizing:border-box;font:inherit;font-size:13px;border:1px solid #bbb;padding:1px 3px;margin:0}\n.xpl-sel{position:absolute;left:0;top:0;pointer-events:none;z-index:3}\n.xpl-shade{position:absolute;background:var(--xve-selection,rgba(33,115,70,.12))}\n.xpl-active{position:absolute;box-sizing:border-box;border:2px solid var(--xve-selection-border,#217346)}\n.xpl-edit{position:absolute;box-sizing:border-box;z-index:5;border:2px solid var(--xve-selection-border,#217346);\n\tbackground:#fff;font-family:Calibri,sans-serif;padding:0 3px;margin:0;outline:none}\n.xpl-error{padding:24px;color:#a4262c}\n";
1
+ export declare const PAGE_LAYOUT_CSS = "\n.xve-grid-host[data-view=\"pageLayout\"]>.xg-root{display:none}\n.xpl-root{position:absolute;inset:0;overflow:auto;background:var(--xve-page-surround, var(--office-surface, #e6e6e6));\n\tfont-family:var(--xve-font,var(--office-font,system-ui,sans-serif));outline:none;color:#000;-webkit-user-select:none;user-select:none}\n.xpl-root[hidden]{display:none}\n.xpl-sizer{display:grid;grid-template-columns:20px 1fr;grid-template-rows:20px 1fr;position:relative}\n.xpl-corner{position:sticky;left:0;top:0;z-index:7;background:var(--xve-header-bg, var(--office-surface, #f3f3f3));border-right:1px solid var(--xve-border,var(--office-border,#c6c6c6));border-bottom:1px solid var(--xve-border,var(--office-border,#c6c6c6))}\n.xpl-ruler-h{position:sticky;top:0;z-index:6;height:20px;background:var(--xve-header-bg, var(--office-surface, #f3f3f3));overflow:hidden;border-bottom:1px solid var(--xve-border,var(--office-border,#c6c6c6))}\n.xpl-ruler-v{position:sticky;left:0;z-index:6;width:20px;background:var(--xve-header-bg, var(--office-surface, #f3f3f3));overflow:hidden;border-right:1px solid var(--xve-border,var(--office-border,#c6c6c6))}\n.xpl-ruler-area{position:absolute;background:var(--office-background,#fff)}\n.xpl-ruler-margin{position:absolute;background:var(--office-selected,#c8c8c8)}\n.xpl-ruler-h .xpl-ruler-area,.xpl-ruler-h .xpl-ruler-margin{top:0;bottom:0}\n.xpl-ruler-v .xpl-ruler-area,.xpl-ruler-v .xpl-ruler-margin{left:0;right:0}\n.xpl-tick{position:absolute;background:var(--office-muted-foreground,#767676)}\n.xpl-ruler-h .xpl-tick{bottom:0;width:1px}\n.xpl-ruler-v .xpl-tick{right:0;height:1px}\n.xpl-ruler-num{position:absolute;font-size:var(--office-font-size-2xs,10px);line-height:1;color:var(--office-foreground,#444)}\n.xpl-ruler-v .xpl-ruler-num{left:2px}\n.xpl-canvas{position:relative;overflow:hidden}\n.xpl-scaled{position:absolute;left:0;top:0;transform-origin:0 0}\n.xpl-page{position:absolute;box-sizing:border-box;background:#fff;box-shadow:0 1px 5px rgba(0,0,0,.3)}\n.xpl-content{position:absolute;overflow:hidden}\n.xpl-inner{position:absolute;left:0;top:0;transform-origin:0 0;font-family:Calibri,sans-serif}\n.xpl-inner table{border-collapse:collapse;table-layout:fixed}\n.xpl-inner td{overflow:hidden;padding:0 3px;box-sizing:border-box;line-height:1.2}\n.xpl-colhdr,.xpl-rowhdr{position:absolute;box-sizing:border-box;display:flex;align-items:center;justify-content:center;\n\tfont-size:var(--office-font-size-xs,11px);color:var(--xve-header-fg, var(--office-foreground, #444));background:var(--xve-header-bg, var(--office-surface, #f3f3f3));border:1px solid var(--xve-header-line, var(--office-border, #d4d4d4));overflow:hidden}\n.xpl-blank{position:absolute;inset:0;pointer-events:none;z-index:1;display:flex;align-items:center;justify-content:center;color:#767676;font-size:14px;cursor:cell}\n.xpl-band{position:absolute;display:flex;line-height:1.2;box-sizing:border-box;cursor:text}\n.xpl-section{flex:1 1 0;min-width:0;white-space:pre-wrap;overflow:hidden;padding:0 2px;border:1px solid transparent}\n.xpl-band:hover .xpl-section{border-color:#bbb;border-style:dashed}\n.xpl-placeholder{color:#8a8a8a;text-align:center!important}\n.xpl-band.xpl-editing{background:#fff;z-index:4;box-shadow:0 0 0 1px #217346}\n.xpl-band-input{flex:1 1 0;min-width:0;box-sizing:border-box;font:inherit;font-size:13px;border:1px solid #bbb;padding:1px 3px;margin:0}\n.xpl-sel{position:absolute;left:0;top:0;pointer-events:none;z-index:3}\n.xpl-shade{position:absolute;background:var(--xve-selection, color-mix(in srgb, var(--office-accent, #217346) 12%, transparent))}\n.xpl-active{position:absolute;box-sizing:border-box;border:2px solid var(--xve-selection-border, var(--office-accent, #217346))}\n.xpl-edit{position:absolute;box-sizing:border-box;z-index:5;border:2px solid var(--xve-selection-border, var(--office-accent, #217346));\n\tbackground:#fff;font-family:Calibri,sans-serif;padding:0 3px;margin:0;outline:none}\n.xpl-error{padding:24px;color:#a4262c}\n";
@@ -1 +1 @@
1
- export declare const TABS_CSS = "\n.xst {\n\tdisplay: flex;\n\talign-items: stretch;\n\theight: 32px;\n\tbox-sizing: border-box;\n\tborder-top: 1px solid var(--xve-border, #e1dfdd);\n\tbackground: var(--xve-secondary, #f3f2f1);\n\tcolor: var(--xve-foreground, #242424);\n\tfont: 13px/1 'Segoe UI', system-ui, -apple-system, sans-serif;\n\tuser-select: none;\n\toverflow: hidden;\n}\n.xst-nav {\n\tdisplay: flex;\n\talign-items: center;\n\tgap: 2px;\n\tpadding: 0 4px;\n\tflex: none;\n}\n.xst-btn {\n\tdisplay: inline-flex;\n\talign-items: center;\n\tjustify-content: center;\n\twidth: 28px;\n\theight: 26px;\n\tpadding: 0;\n\tborder: 0;\n\tborder-radius: 4px;\n\tbackground: transparent;\n\tcolor: inherit;\n\tfont: inherit;\n\tfont-size: 14px;\n\tcursor: pointer;\n}\n.xst-btn:hover:not(:disabled) { background: var(--xve-accent, #e1dfdd); }\n.xst-btn:disabled { color: var(--xve-muted-foreground, #a19f9d); cursor: default; }\n.xst-btn:focus-visible, .xst-tab:focus-visible {\n\toutline: 2px solid var(--xve-ring, #616161);\n\toutline-offset: -2px;\n}\n.xst-btn[hidden] { display: none; }\n.xst-strip {\n\tposition: relative;\n\tdisplay: flex;\n\talign-items: stretch;\n\tflex: 1;\n\tmin-width: 0;\n\toverflow: hidden;\n\tscroll-behavior: smooth;\n}\n.xst-tab {\n\tposition: relative;\n\tdisplay: inline-flex;\n\talign-items: center;\n\tflex: none;\n\tmax-width: 240px;\n\tpadding: 0 14px;\n\tborder: 0;\n\tborder-right: 1px solid var(--xve-border, #e1dfdd);\n\tbackground: transparent;\n\tcolor: inherit;\n\tfont: inherit;\n\twhite-space: nowrap;\n\tcursor: pointer;\n}\n.xst-tab:hover:not(.xst-active) { background: var(--xve-accent, #e9e8e7); }\n.xst-tab .xst-label { overflow: hidden; text-overflow: ellipsis; }\n.xst-tab::after {\n\tcontent: '';\n\tposition: absolute;\n\tleft: 8px;\n\tright: 8px;\n\tbottom: 2px;\n\theight: 3px;\n\tborder-radius: 2px;\n\tbackground: var(--xst-color, transparent);\n}\n.xst-tab.xst-colored:not(.xst-active) {\n\tbackground: color-mix(in srgb, var(--xst-color) 22%, transparent);\n}\n.xst-tab.xst-active {\n\tbackground: var(--xve-sheet-bg, #ffffff);\n\tcolor: var(--xve-selection-border, #217346);\n\tfont-weight: 600;\n}\n.xst-tab.xst-active::after {\n\tbackground: var(--xve-selection-border, #217346);\n}\n.xst-tab.xst-active.xst-colored::after { background: var(--xst-color); }\n.xst-tab.xst-dragging { opacity: 0.6; }\n.xst-rename {\n\twidth: 120px;\n\theight: 22px;\n\tbox-sizing: border-box;\n\tpadding: 0 4px;\n\tborder: 1px solid var(--xve-selection-border, #217346);\n\tborder-radius: 2px;\n\tfont: inherit;\n\tcolor: var(--xve-foreground, #242424);\n\tbackground: var(--xve-sheet-bg, #ffffff);\n}\n.xst-marker {\n\tposition: absolute;\n\ttop: 4px;\n\tbottom: 4px;\n\twidth: 2px;\n\tmargin-left: -1px;\n\tbackground: var(--xve-selection-border, #217346);\n\tpointer-events: none;\n}\n@media (pointer: coarse), (max-width: 767px) {\n.xst{height:48px}\n.xst-btn{width:44px;height:44px}\n.xst-tab{min-width:44px;min-height:44px}\n}\n";
1
+ export declare const TABS_CSS = "\n.xst {\n\tdisplay: flex;\n\talign-items: stretch;\n\theight: 32px;\n\tbox-sizing: border-box;\n\tborder-top: 1px solid var(--xve-border, var(--office-border, #e1dfdd));\n\tbackground: var(--xve-secondary, var(--office-surface, #f3f2f1));\n\tcolor: var(--xve-foreground, var(--office-foreground, #242424));\n\tfont: var(--office-font-size, 13px)/var(--office-line-height, 1.4) var(--xve-font, var(--office-font, system-ui, sans-serif));\n\tuser-select: none;\n\toverflow: hidden;\n}\n.xst-nav {\n\tdisplay: flex;\n\talign-items: center;\n\tgap: 2px;\n\tpadding: 0 4px;\n\tflex: none;\n}\n.xst-btn {\n\tdisplay: inline-flex;\n\talign-items: center;\n\tjustify-content: center;\n\twidth: 28px;\n\theight: 26px;\n\tpadding: 0;\n\tborder: 0;\n\tborder-radius: 4px;\n\tbackground: transparent;\n\tcolor: inherit;\n\tfont: inherit;\n\tfont-size: 14px;\n\tcursor: pointer;\n}\n.xst-btn:hover:not(:disabled) { background: var(--xve-accent, var(--office-selected, #e1dfdd)); }\n.xst-btn:disabled { color: var(--xve-muted-foreground, var(--office-muted-foreground, #a19f9d)); cursor: default; }\n.xst-btn:focus-visible, .xst-tab:focus-visible {\n\toutline: 2px solid var(--xve-ring, var(--office-ring, #616161));\n\toutline-offset: -2px;\n}\n.xst-btn[hidden] { display: none; }\n.xst-strip {\n\tposition: relative;\n\tdisplay: flex;\n\talign-items: stretch;\n\tflex: 1;\n\tmin-width: 0;\n\toverflow: hidden;\n\tscroll-behavior: smooth;\n}\n.xst-tab {\n\tposition: relative;\n\tdisplay: inline-flex;\n\talign-items: center;\n\tflex: none;\n\tmax-width: 240px;\n\tpadding: 0 14px;\n\tborder: 0;\n\tborder-right: 1px solid var(--xve-border, var(--office-border, #e1dfdd));\n\tbackground: transparent;\n\tcolor: inherit;\n\tfont: inherit;\n\twhite-space: nowrap;\n\tcursor: pointer;\n}\n.xst-tab:hover:not(.xst-active) { background: var(--xve-accent, var(--office-selected, #e9e8e7)); }\n.xst-tab .xst-label { overflow: hidden; text-overflow: ellipsis; }\n.xst-tab::after {\n\tcontent: '';\n\tposition: absolute;\n\tleft: 8px;\n\tright: 8px;\n\tbottom: 2px;\n\theight: 3px;\n\tborder-radius: 2px;\n\tbackground: var(--xst-color, transparent);\n}\n.xst-tab.xst-colored:not(.xst-active) {\n\tbackground: color-mix(in srgb, var(--xst-color) 22%, transparent);\n}\n.xst-tab.xst-active {\n\tbackground: var(--xve-sheet-bg, var(--office-paper, #ffffff));\n\tcolor: var(--xve-selection-border, var(--office-accent, #217346));\n\tfont-weight: 600;\n}\n.xst-tab.xst-active::after {\n\tbackground: var(--xve-selection-border, var(--office-accent, #217346));\n}\n.xst-tab.xst-active.xst-colored::after { background: var(--xst-color); }\n.xst-tab.xst-dragging { opacity: 0.6; }\n.xst-rename {\n\twidth: 120px;\n\theight: 22px;\n\tbox-sizing: border-box;\n\tpadding: 0 4px;\n\tborder: 1px solid var(--xve-selection-border, var(--office-accent, #217346));\n\tborder-radius: 2px;\n\tfont: inherit;\n\tcolor: var(--xve-foreground, var(--office-foreground, #242424));\n\tbackground: var(--xve-sheet-bg, var(--office-paper, #ffffff));\n}\n.xst-marker {\n\tposition: absolute;\n\ttop: 4px;\n\tbottom: 4px;\n\twidth: 2px;\n\tmargin-left: -1px;\n\tbackground: var(--xve-selection-border, var(--office-accent, #217346));\n\tpointer-events: none;\n}\n@media (pointer: coarse), (max-width: 767px) {\n.xst{height:48px}\n.xst-btn{width:44px;height:44px}\n.xst-tab{min-width:44px;min-height:44px}\n}\n";
@@ -0,0 +1,3 @@
1
+ import type { EditorCore } from './editor-core.js';
2
+ /** The existing grid engine with no application chrome, dialogs or file shortcuts. */
3
+ export declare function buildSurface(core: EditorCore): () => void;
@@ -1,7 +1,4 @@
1
- /**
2
- * Token presets generated from theme/defaults.ts so the TypeScript presets and the shadow-root CSS
3
- * cannot drift. `theme="auto"` (the default) follows the OS; explicit values always win.
4
- */
1
+ /** Host-computed aliases keep legacy overrides compatible without masking inherited Office tokens. */
5
2
  export declare const themeTokenText: string;
6
3
  /** The shell stylesheet (tokens, chrome, ribbon, popups, backstage) for the shadow root. */
7
4
  export declare const editorStyleText: string;