ooxml-ui 1.1.0 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +38 -36
- package/custom-elements.json +372 -4
- package/dist/chrome/ruler.d.ts +60 -2
- package/dist/chrome/ruler.d.ts.map +1 -1
- package/dist/chrome/status-bar.d.ts +3 -1
- package/dist/chrome/status-bar.d.ts.map +1 -1
- package/dist/{chunk-JFJXBYRD.js → chunk-2WLRFPMW.js} +9 -0
- package/dist/{chunk-X7RINDJQ.js → chunk-56A2JK63.js} +1 -1
- package/dist/{chunk-KVKKXRL7.js → chunk-5OFAJDMQ.js} +93 -14
- package/dist/{chunk-M5DTJSOV.js → chunk-723JC3OC.js} +461 -16
- package/dist/{chunk-USDLALB5.js → chunk-IY7QJLQG.js} +1 -1
- package/dist/{chunk-BOX43CZD.js → chunk-M6GF5ED2.js} +2 -1
- package/dist/{chunk-BEN3453I.js → chunk-NYRRH2MD.js} +1 -1
- package/dist/{chunk-3FPW7M6U.js → chunk-TWQ45BFL.js} +1 -1
- package/dist/{chunk-ZU7GX4SY.js → chunk-V6P6KZCO.js} +7 -5
- package/dist/comments/comments-pane.d.ts +116 -0
- package/dist/comments/comments-pane.d.ts.map +1 -0
- package/dist/comments/types.d.ts +80 -0
- package/dist/comments/types.d.ts.map +1 -0
- package/dist/controls.d.ts +6 -2
- package/dist/controls.d.ts.map +1 -1
- package/dist/controls.js +5 -5
- package/dist/docx/comments-panel.d.ts +8 -1
- package/dist/docx/editor-chrome.d.ts +8 -1
- package/dist/docx/file-commands.d.ts +1 -1
- package/dist/docx/image-media.d.ts +1 -1
- package/dist/docx/locales/en-app.d.ts +1 -0
- package/dist/docx/locales/en-ribbon.d.ts +1 -0
- package/dist/docx/locales/en.d.ts +2 -0
- package/dist/docx/localization-strings.d.ts +2 -0
- package/dist/docx/localization.d.ts +7 -0
- package/dist/docx/print-layout.d.ts +2 -2
- package/dist/docx/print-picture.d.ts +12 -0
- package/dist/docx/review-controller.d.ts +2 -0
- package/dist/docx/ribbon-actions.d.ts +22 -0
- package/dist/docx/ruler.d.ts +7 -10
- package/dist/docx/title-bar.d.ts +3 -5
- package/dist/docx.js +342 -362
- package/dist/form/gradient-preset-gallery.d.ts +2 -2
- package/dist/icons.d.ts.map +1 -1
- package/dist/icons.js +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +9 -9
- package/dist/pptx/{chart-3d-view-scene-2KRQ5667.mjs → chart-3d-view-scene-OYJ4CDCO.mjs} +4 -5
- package/dist/pptx/{chart-3d-view-scene-36DMZWZ3.cjs → chart-3d-view-scene-SE2Y6QRE.cjs} +38 -39
- package/dist/pptx/{chunk-YOGDIDPB.mjs → chunk-CIVA3MLN.mjs} +8 -2
- package/dist/pptx/{chunk-KPZWYF44.cjs → chunk-FPE5PZMI.cjs} +789 -491
- package/dist/pptx/{chunk-AIL3BNZS.cjs → chunk-IURZJAWP.cjs} +529 -387
- package/dist/pptx/{chunk-YHA6XAB3.cjs → chunk-KRMMJUCO.cjs} +83 -1
- package/dist/pptx/{chunk-Y2W4SZER.mjs → chunk-MWHGUEIJ.mjs} +637 -348
- package/dist/pptx/{chunk-YARCML7O.mjs → chunk-STLXPKJJ.mjs} +519 -388
- package/dist/pptx/{chunk-ADOC5JLI.mjs → chunk-TC7HCF5M.mjs} +76 -2
- package/dist/pptx/{chunk-CJU4P5FT.cjs → chunk-WKLHJEPD.cjs} +18 -12
- package/dist/pptx/dom/element-styles.d.ts.map +1 -1
- package/dist/pptx/dom/elements/chart.d.ts +2 -3
- package/dist/pptx/dom/elements/chart.d.ts.map +1 -1
- package/dist/pptx/dom/elements/connector.d.ts.map +1 -1
- package/dist/pptx/dom/elements/shape-filter-defs.d.ts.map +1 -1
- package/dist/pptx/dom/elements/table.d.ts.map +1 -1
- package/dist/pptx/dom/index.cjs +272 -261
- package/dist/pptx/dom/index.mjs +46 -35
- package/dist/pptx/dom/slide-stage.d.ts.map +1 -1
- package/dist/pptx/export/html2canvas-clone.cjs +2 -2
- package/dist/pptx/export/html2canvas-clone.mjs +1 -1
- package/dist/pptx/index.cjs +3065 -2993
- package/dist/pptx/index.mjs +4 -4
- package/dist/pptx/render/chart-3d-oblique-layout.d.ts.map +1 -1
- package/dist/pptx/render/chart-3d-persp-bars.d.ts.map +1 -1
- package/dist/pptx/render/chart-3d-persp-layout.d.ts.map +1 -1
- package/dist/pptx/render/chart-axis-range.d.ts +7 -0
- package/dist/pptx/render/chart-axis-range.d.ts.map +1 -1
- package/dist/pptx/render/chart-axis-render.d.ts +3 -1
- package/dist/pptx/render/chart-axis-render.d.ts.map +1 -1
- package/dist/pptx/render/chart-axis-style.d.ts +5 -0
- package/dist/pptx/render/chart-axis-style.d.ts.map +1 -1
- package/dist/pptx/render/chart-axis.d.ts +1 -1
- package/dist/pptx/render/chart-axis.d.ts.map +1 -1
- package/dist/pptx/render/chart-bar-cluster-geometry.d.ts +1 -1
- package/dist/pptx/render/chart-bar-cluster-geometry.d.ts.map +1 -1
- package/dist/pptx/render/chart-cartesian-area.d.ts.map +1 -1
- package/dist/pptx/render/chart-cartesian-axes.d.ts.map +1 -1
- package/dist/pptx/render/chart-cartesian-bars.d.ts +3 -3
- package/dist/pptx/render/chart-cartesian-line-area.d.ts.map +1 -1
- package/dist/pptx/render/chart-cartesian-percent-stacked.d.ts.map +1 -1
- package/dist/pptx/render/chart-cartesian-stacked-labels.d.ts +11 -7
- package/dist/pptx/render/chart-cartesian-stacked-labels.d.ts.map +1 -1
- package/dist/pptx/render/chart-cartesian.d.ts.map +1 -1
- package/dist/pptx/render/chart-combo-stock.cjs +3 -3
- package/dist/pptx/render/chart-combo-stock.mjs +1 -1
- package/dist/pptx/render/chart-combo.d.ts.map +1 -1
- package/dist/pptx/render/chart-data-label-anchor.d.ts +4 -1
- package/dist/pptx/render/chart-data-label-anchor.d.ts.map +1 -1
- package/dist/pptx/render/chart-gridlines-toggle.d.ts +13 -1
- package/dist/pptx/render/chart-gridlines-toggle.d.ts.map +1 -1
- package/dist/pptx/render/chart-helpers.d.ts +13 -13
- package/dist/pptx/render/chart-helpers.d.ts.map +1 -1
- package/dist/pptx/render/chart-horizontal-bars-helpers.d.ts +7 -3
- package/dist/pptx/render/chart-horizontal-bars-helpers.d.ts.map +1 -1
- package/dist/pptx/render/chart-horizontal-bars.d.ts.map +1 -1
- package/dist/pptx/render/chart-interaction-stacked.d.ts.map +1 -1
- package/dist/pptx/render/chart-line-path.d.ts +9 -0
- package/dist/pptx/render/chart-line-path.d.ts.map +1 -1
- package/dist/pptx/render/chart-overlays.cjs +7 -7
- package/dist/pptx/render/chart-overlays.mjs +1 -1
- package/dist/pptx/render/chart-palette.d.ts +5 -14
- package/dist/pptx/render/chart-palette.d.ts.map +1 -1
- package/dist/pptx/render/chart-plot-clip.d.ts +37 -0
- package/dist/pptx/render/chart-plot-clip.d.ts.map +1 -0
- package/dist/pptx/render/chart-quick-action-styles.d.ts +5 -3
- package/dist/pptx/render/chart-quick-action-styles.d.ts.map +1 -1
- package/dist/pptx/render/chart-scatter-x-axis.d.ts.map +1 -1
- package/dist/pptx/render/chart-style-palette.d.ts +52 -0
- package/dist/pptx/render/chart-style-palette.d.ts.map +1 -0
- package/dist/pptx/render/chart-surface-treemap.cjs +4 -4
- package/dist/pptx/render/chart-surface-treemap.mjs +1 -1
- package/dist/pptx/render/chart-view-model-bars.d.ts +32 -1
- package/dist/pptx/render/chart-view-model-bars.d.ts.map +1 -1
- package/dist/pptx/render/chart-view-model-build.d.ts.map +1 -1
- package/dist/pptx/render/chart-view-model.cjs +53 -41
- package/dist/pptx/render/chart-view-model.mjs +1 -1
- package/dist/pptx/render/chart-waterfall-map.cjs +6 -6
- package/dist/pptx/render/chart-waterfall-map.mjs +1 -1
- package/dist/pptx/render/device-pixel-stroke.d.ts +101 -0
- package/dist/pptx/render/device-pixel-stroke.d.ts.map +1 -0
- package/dist/pptx/render/export-clone.d.ts +4 -0
- package/dist/pptx/render/export-clone.d.ts.map +1 -1
- package/dist/pptx/render/foreign-object-svg-document.d.ts +12 -0
- package/dist/pptx/render/foreign-object-svg-document.d.ts.map +1 -1
- package/dist/pptx/render/index.d.ts +3 -0
- package/dist/pptx/render/index.d.ts.map +1 -1
- package/dist/pptx/render/stroke-outline.d.ts +6 -0
- package/dist/pptx/render/stroke-outline.d.ts.map +1 -1
- package/dist/pptx/render/stroke-style.d.ts +8 -2
- package/dist/pptx/render/stroke-style.d.ts.map +1 -1
- package/dist/pptx/render/tab-row-actions.d.ts +40 -0
- package/dist/pptx/render/tab-row-actions.d.ts.map +1 -0
- package/dist/pptx/render/table-cell-css.d.ts +3 -2
- package/dist/pptx/render/table-cell-css.d.ts.map +1 -1
- package/dist/pptx/render/table-cell-edit.d.ts +1 -1
- package/dist/pptx/render/table-cell-edit.d.ts.map +1 -1
- package/dist/pptx/render/table-cell-paragraphs.d.ts +29 -0
- package/dist/pptx/render/table-cell-paragraphs.d.ts.map +1 -0
- package/dist/pptx/render/table-style-borders.d.ts.map +1 -1
- package/dist/pptx/render/table-style.d.ts +2 -0
- package/dist/pptx/render/table-style.d.ts.map +1 -1
- package/dist/pptx/render/title-bar.d.ts +5 -0
- package/dist/pptx/render/title-bar.d.ts.map +1 -1
- package/dist/pptx/render/viewer-root-options.d.ts +11 -3
- package/dist/pptx/render/viewer-root-options.d.ts.map +1 -1
- package/dist/pptx/web-components/index.d.ts.map +1 -1
- package/dist/pptx/web-components/office-token-bridge.d.ts +1 -1
- package/dist/pptx/web-components/office-token-bridge.d.ts.map +1 -1
- package/dist/pptx/web-components/ribbon-actions.d.ts +8 -0
- package/dist/pptx/web-components/ribbon-actions.d.ts.map +1 -0
- package/dist/presence.js +3 -3
- package/dist/ribbon/ribbon-actions.d.ts +119 -0
- package/dist/ribbon/ribbon-actions.d.ts.map +1 -0
- package/dist/ribbon/ribbon-tabs.d.ts +2 -1
- package/dist/ribbon/ribbon-tabs.d.ts.map +1 -1
- package/dist/smartart/smartart-svg.d.ts +3 -2
- package/dist/smartart.js +3 -3
- package/dist/suite/attachment-store.d.ts +13 -0
- package/dist/suite/document-store.d.ts +31 -0
- package/dist/suite/index.d.ts +2 -0
- package/dist/suite.js +132 -1
- package/dist/teams/app/channel-tab.d.ts +5 -0
- package/dist/teams/chat-composer.d.ts +3 -0
- package/dist/teams.js +7 -7
- package/dist/theme.js +2 -2
- package/dist/tokens.d.ts +9 -0
- package/dist/tokens.d.ts.map +1 -1
- package/dist/visio/styles/index.d.ts +2 -0
- package/dist/visio/styles/theme.d.ts +11 -0
- package/dist/visio/styles.d.ts +2 -2
- package/dist/visio.js +66 -21
- package/dist/xlsx/backstage/index.d.ts +4 -1
- package/dist/xlsx/backstage/pages-share.d.ts +19 -0
- package/dist/xlsx/backstage/parts.d.ts +3 -0
- package/dist/xlsx/calc-preparation.d.ts +44 -0
- package/dist/xlsx/chart-fill-binding.d.ts +2 -2
- package/dist/xlsx/chart-series-gradient-type.d.ts +3 -2
- package/dist/xlsx/collaboration-session.d.ts +9 -0
- package/dist/xlsx/collaboration-types.d.ts +41 -0
- package/dist/xlsx/collaboration.d.ts +56 -0
- package/dist/xlsx/component.d.ts +8 -0
- package/dist/xlsx/dialogs/comments-list.d.ts +4 -0
- package/dist/xlsx/dialogs/help-dialogs.d.ts +1 -1
- package/dist/xlsx/editor-core.d.ts +6 -0
- package/dist/xlsx/element-api.d.ts +19 -1
- package/dist/xlsx/events.d.ts +4 -1
- package/dist/xlsx/grid/remote-layer.d.ts +3 -0
- package/dist/xlsx/grid/sparkline.d.ts +3 -0
- package/dist/xlsx/grid/styles.d.ts +1 -1
- package/dist/xlsx/index.d.ts +1 -0
- package/dist/xlsx/ribbon-actions.d.ts +22 -0
- package/dist/xlsx/shell-commands.d.ts +1 -1
- package/dist/xlsx/title-bar.d.ts +4 -2
- package/dist/xlsx.js +801 -92
- package/package.json +2 -2
- package/dist/pptx/web-components/status-bar-styles.d.ts +0 -3
- package/dist/pptx/web-components/status-bar-styles.d.ts.map +0 -1
- package/dist/pptx/web-components/title-bar-styles.d.ts +0 -7
- package/dist/pptx/web-components/title-bar-styles.d.ts.map +0 -1
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import type { CellRange, EditSession, RemoteRange } from 'ooxml-core/xlsx';
|
|
2
|
+
import type { EditHistory, Selection, SelectionModel } from 'ooxml-core/xlsx/ui';
|
|
3
|
+
import { type CollabRuntime } from './collaboration-session.js';
|
|
4
|
+
import type { EditorCore } from './editor-core.js';
|
|
5
|
+
import { type XlsxCollaborationOptions, type XlsxCollaborationState } from './collaboration-types.js';
|
|
6
|
+
/** What the controller needs from the editor. */
|
|
7
|
+
export interface CollaborationHost {
|
|
8
|
+
edit(): EditSession | undefined;
|
|
9
|
+
readonly selection: SelectionModel;
|
|
10
|
+
userName(): string;
|
|
11
|
+
t(key: string, vars?: Record<string, string | number>): string;
|
|
12
|
+
toast(message: string, kind: 'info' | 'warning' | 'error'): void;
|
|
13
|
+
/** Reports a failure as `workbook-error`. */
|
|
14
|
+
error(error: Error): void;
|
|
15
|
+
/** Announces `collaboration-change` and refreshes the title bar. */
|
|
16
|
+
changed(state: XlsxCollaborationState): void;
|
|
17
|
+
setReadOnly(readOnly: boolean): void;
|
|
18
|
+
}
|
|
19
|
+
/** The part of the selection a collaborator sees: the range holding the active cell. */
|
|
20
|
+
export declare function presenceRange(selection: Selection): CellRange;
|
|
21
|
+
export declare class XlsxCollaboration {
|
|
22
|
+
#private;
|
|
23
|
+
private readonly host;
|
|
24
|
+
private readonly load;
|
|
25
|
+
constructor(host: CollaborationHost, load?: () => Promise<CollabRuntime>);
|
|
26
|
+
get active(): boolean;
|
|
27
|
+
/** Joined or joining. */
|
|
28
|
+
get busy(): boolean;
|
|
29
|
+
/** The options of the declarative `collaboration` property, if set. */
|
|
30
|
+
get wanted(): XlsxCollaborationOptions | undefined;
|
|
31
|
+
/**
|
|
32
|
+
* Declarative sharing: while set, the open workbook is shared in that room, and a workbook
|
|
33
|
+
* opened later joins it too (the room's content wins when it already has one). Undefined stops.
|
|
34
|
+
*/
|
|
35
|
+
want(options: XlsxCollaborationOptions | undefined): void;
|
|
36
|
+
/** Leaves the room before the workbook is replaced; true when it was shared. */
|
|
37
|
+
suspend(): boolean;
|
|
38
|
+
/** Joins the wanted room with the workbook now open. */
|
|
39
|
+
resume(): void;
|
|
40
|
+
/** Joins a room. Rejects when one is active, no workbook is open or the room is invalid. */
|
|
41
|
+
start(options: XlsxCollaborationOptions): Promise<void>;
|
|
42
|
+
/**
|
|
43
|
+
* Leaves the room and forgets the `collaboration` property. A session the host passed in stays
|
|
44
|
+
* alive; one the editor made is destroyed.
|
|
45
|
+
*/
|
|
46
|
+
stop(): void;
|
|
47
|
+
/** Restarts the connection, keeping the shared workbook and queued changes. */
|
|
48
|
+
reconnect(): void;
|
|
49
|
+
/** The binding's history while shared (only this window's edits), else undefined. */
|
|
50
|
+
history(): EditHistory | undefined;
|
|
51
|
+
remoteSelections(): readonly RemoteRange[];
|
|
52
|
+
onRemoteChange(listener: () => void): () => void;
|
|
53
|
+
state(): XlsxCollaborationState;
|
|
54
|
+
}
|
|
55
|
+
/** The controller of one editor, reporting through its toasts, events and render loop. */
|
|
56
|
+
export declare function collaborationFor(core: EditorCore): XlsxCollaboration;
|
package/dist/xlsx/component.d.ts
CHANGED
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
import type { Workbook } from 'ooxml-core/xlsx';
|
|
6
6
|
import { XlsxEditorApi } from './element-api.js';
|
|
7
7
|
import type { XlsxEditorEventMap } from './events.js';
|
|
8
|
+
import type { XlsxCollaborationOptions } from './collaboration-types.js';
|
|
8
9
|
import type { EditorLocale, EditorLocaleInput } from 'ooxml-core/xlsx/ui';
|
|
9
10
|
import { type EditorThemeMode, type XlsxTheme } from './theme/index.js';
|
|
10
11
|
/** Theme tokens, applied to the host as `--xve-<kebab-key>` custom properties. */
|
|
@@ -53,6 +54,13 @@ export declare class XlsxEditorElement extends XlsxEditorApi {
|
|
|
53
54
|
set workbook(value: Workbook | null);
|
|
54
55
|
/** Unsaved changes since the last load, save or `markClean()`. */
|
|
55
56
|
get dirty(): boolean;
|
|
57
|
+
/**
|
|
58
|
+
* Shares the open workbook in a room while set: a workbook opened later joins the same room
|
|
59
|
+
* (the room's content wins when it already has a workbook); `null` leaves it. A window joining
|
|
60
|
+
* an existing room still needs a workbook open (`newWorkbook()` is enough).
|
|
61
|
+
*/
|
|
62
|
+
get collaboration(): XlsxCollaborationOptions | null;
|
|
63
|
+
set collaboration(value: XlsxCollaborationOptions | null | undefined);
|
|
56
64
|
get activeSheet(): number;
|
|
57
65
|
set activeSheet(index: number);
|
|
58
66
|
}
|
|
@@ -1,2 +1,6 @@
|
|
|
1
|
+
import { type Comment } from 'ooxml-core/xlsx';
|
|
1
2
|
import type { EditorContext } from 'ooxml-core/xlsx/ui';
|
|
3
|
+
import type { OfficeCommentThread } from '../../comments/types.js';
|
|
4
|
+
/** Excel notes and threaded comments as neutral threads, in sheet order, keyed by address. */
|
|
5
|
+
export declare function excelCommentThreads(comments: readonly Comment[]): OfficeCommentThread[];
|
|
2
6
|
export declare function openCommentsList(ctx: EditorContext): Promise<string | undefined>;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { EditorContext } from 'ooxml-core/xlsx/ui';
|
|
2
2
|
export declare function openShortcutHelp(ctx: EditorContext): Promise<undefined>;
|
|
3
3
|
export declare const SUPPORTED_FEATURES: readonly ['Cell editing with undo and redo', 'Formulas calculated by the built-in calculation engine', 'Number formats', 'Conditional formatting display', 'Tables', 'Charts (display and basic editing)', 'Comments and notes', 'Hyperlinks', 'Data validation', 'Sort and filter', 'Freeze panes'];
|
|
4
|
-
export declare const UNSUPPORTED_FEATURES: readonly ['Pivot tables
|
|
4
|
+
export declare const UNSUPPORTED_FEATURES: readonly ['Pivot tables (kept in the file but not shown)', 'Creating or editing sparklines (existing ones are shown)', 'Show Formulas', 'Manual calculation', 'Outline (grouping) for columns', 'Password protection hashes', 'Editing threaded comment replies', 'Macros (VBA is kept in the file but never run)', 'Changing the workbook theme', 'Page Layout view'];
|
|
5
5
|
export declare function openFeatureStatus(ctx: EditorContext): Promise<undefined>;
|
|
@@ -11,6 +11,8 @@ import { type DialogRegistry } from 'ooxml-core/xlsx/ui';
|
|
|
11
11
|
import { DirtyState } from 'ooxml-core/xlsx/ui';
|
|
12
12
|
import { type EditorLocale } from 'ooxml-core/xlsx/ui';
|
|
13
13
|
import type { CalculationMode } from './backstage/index.js';
|
|
14
|
+
import { CalcPreparation } from './calc-preparation.js';
|
|
15
|
+
import { type XlsxCollaboration } from './collaboration.js';
|
|
14
16
|
import type { EditorThemeMode, XlsxTheme } from './theme/index.js';
|
|
15
17
|
/** What the shell exposes back to the core (filled in when the element connects). */
|
|
16
18
|
export interface ShellHooks {
|
|
@@ -41,6 +43,10 @@ export declare class EditorCore {
|
|
|
41
43
|
readonly dialogs: DialogRegistry;
|
|
42
44
|
readonly dirty: DirtyState;
|
|
43
45
|
readonly ctx: EditorContext;
|
|
46
|
+
/** Co-editing over `ooxml-core/collab`; undo and redo go through it while shared. */
|
|
47
|
+
readonly collab: XlsxCollaboration;
|
|
48
|
+
/** Builds the formula graph in idle time after a workbook opens. */
|
|
49
|
+
readonly calcPreparation: CalcPreparation;
|
|
44
50
|
private gridController;
|
|
45
51
|
private readonly modelListeners;
|
|
46
52
|
private stopSession;
|
|
@@ -1,16 +1,19 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* The public methods of `<xlsx-editor>` (load, newWorkbook, save, saveBytes, download, markClean,
|
|
3
|
-
* select, getSelection, setActiveSheet, undo, redo, focusGrid). The properties and lifecycle are
|
|
3
|
+
* select, getSelection, setActiveSheet, collaboration, share, undo, redo, focusGrid). The properties and lifecycle are
|
|
4
4
|
* in component.ts; the state is the EditorCore.
|
|
5
5
|
*/
|
|
6
6
|
import { EditorCore } from './editor-core.js';
|
|
7
7
|
import { type FileChrome } from './editor-files.js';
|
|
8
|
+
import type { XlsxCollaborationOptions, XlsxCollaborationState } from './collaboration-types.js';
|
|
8
9
|
/** Server rendering has no HTMLElement; the class still has to be definable there. */
|
|
9
10
|
export declare const HTMLElementBase: typeof HTMLElement;
|
|
10
11
|
export declare class XlsxEditorApi extends HTMLElementBase {
|
|
11
12
|
protected readonly core: EditorCore;
|
|
12
13
|
/** Set by the shell once connected. */
|
|
13
14
|
protected chrome: FileChrome | undefined;
|
|
15
|
+
/** Set by the shell once connected: opens File > Share. */
|
|
16
|
+
protected openShare: (() => void) | undefined;
|
|
14
17
|
/** Opens .xlsx, .xlsm, .xltx, .xls or .csv bytes; `fileName` helps detection and names the file. */
|
|
15
18
|
load(bytes: Uint8Array | ArrayBuffer, fileName?: string): Promise<void>;
|
|
16
19
|
/** Starts a blank workbook named Book1.xlsx. */
|
|
@@ -30,6 +33,21 @@ export declare class XlsxEditorApi extends HTMLElementBase {
|
|
|
30
33
|
/** The selection as A1 text (`B2:C5`, several ranges joined by commas). */
|
|
31
34
|
getSelection(): string;
|
|
32
35
|
setActiveSheet(index: number): void;
|
|
36
|
+
/**
|
|
37
|
+
* Shares the open workbook in a room (see `XlsxCollaborationOptions`). Resolves once joined;
|
|
38
|
+
* the room's workbook replaces this one when the room already has one. Rejects when sharing is
|
|
39
|
+
* already active or no workbook is open.
|
|
40
|
+
*/
|
|
41
|
+
startCollaboration(options: XlsxCollaborationOptions): Promise<void>;
|
|
42
|
+
/** Leaves the room (and clears `collaboration`). The workbook stays as it is. */
|
|
43
|
+
stopCollaboration(): void;
|
|
44
|
+
/** Restarts the connection, keeping the shared workbook and changes made offline. */
|
|
45
|
+
reconnectCollaboration(): void;
|
|
46
|
+
/** Who is in the room and how the connection is. */
|
|
47
|
+
get collaborationState(): XlsxCollaborationState;
|
|
48
|
+
/** Opens File > Share, where the user starts or stops sharing and sees who is in the room. */
|
|
49
|
+
share(): void;
|
|
50
|
+
/** Undo the last edit; while shared, only this window's edits are undone. */
|
|
33
51
|
undo(): void;
|
|
34
52
|
redo(): void;
|
|
35
53
|
focusGrid(): void;
|
package/dist/xlsx/events.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { Workbook } from 'ooxml-core/xlsx';
|
|
2
|
+
import type { XlsxCollaborationState } from './collaboration-types.js';
|
|
2
3
|
export type FileCommand = 'new' | 'open' | 'save' | 'saveAs' | 'export' | 'exportCsv' | 'print';
|
|
3
4
|
export interface FileCommandDetail {
|
|
4
5
|
command: FileCommand;
|
|
@@ -50,11 +51,13 @@ export interface XlsxEditorEventMap {
|
|
|
50
51
|
'dirty-change': {
|
|
51
52
|
dirty: boolean;
|
|
52
53
|
};
|
|
54
|
+
/** Sharing started or stopped, the connection changed, or someone joined, left or synced. */
|
|
55
|
+
'collaboration-change': XlsxCollaborationState;
|
|
53
56
|
}
|
|
54
57
|
export type XlsxEditorEventName = keyof XlsxEditorEventMap;
|
|
55
58
|
export type XlsxEditorEventDetail<K extends XlsxEditorEventName> = XlsxEditorEventMap[K];
|
|
56
59
|
/** Runtime list of every event name; the `satisfies` check keeps it a subset of the map. */
|
|
57
|
-
export declare const XLSX_EDITOR_EVENTS: readonly ["workbook-change", "workbook-error", "workbook-warning", "readonly-change", "ribbon-action", "ribbon-customize", "file-command", "selection-change", "sheet-change", "dirty-change"];
|
|
60
|
+
export declare const XLSX_EDITOR_EVENTS: readonly ["workbook-change", "workbook-error", "workbook-warning", "readonly-change", "ribbon-action", "ribbon-customize", "file-command", "selection-change", "sheet-change", "dirty-change", "collaboration-change"];
|
|
58
61
|
/**
|
|
59
62
|
* Dispatches a bubbling, composed CustomEvent. Returns false when a cancelable event was canceled
|
|
60
63
|
* (the `EventTarget.dispatchEvent` contract).
|
|
@@ -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-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-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}\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.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-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,#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}\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.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-live{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}\n";
|
package/dist/xlsx/index.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export { XlsxEditorElement, defineXlsxEditor, type XlsxThemeColors } from './component.js';
|
|
2
2
|
export { XLSX_EDITOR_EVENTS, type FileCommand, type FileCommandDetail, type SelectionChangeDetail, type XlsxEditorEventDetail, type XlsxEditorEventMap, type XlsxEditorEventName, } from './events.js';
|
|
3
|
+
export type { XlsxCollaborationOptions, XlsxCollaborationState, XlsxCollaborator, } from './collaboration-types.js';
|
|
3
4
|
export { XLSX_EDITOR_ATTRIBUTES, DEFAULT_AUTHOR_NAME, DEFAULT_FILE_NAME, } from './editor-attributes.js';
|
|
4
5
|
export { EDITOR_LOCALES, normalizeEditorLocale, type EditorLocale, type EditorLocaleInput, } from 'ooxml-core/xlsx/ui';
|
|
5
6
|
export { THEME_KEYS, darkTheme as xlsxDarkTheme, lightTheme as xlsxLightTheme, themeToCssVars, type EditorThemeMode, type XlsxTheme, } from './theme/index.js';
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The controls at the right end of Excel's ribbon tab row: the Editing / Viewing selector, the
|
|
3
|
+
* Comments toggle and Share, in that order, as Excel 365 places them. The shared
|
|
4
|
+
* `office-ui-ribbon-actions` element draws them (Word uses the same one) in the shared ribbon's
|
|
5
|
+
* `actions` slot; the title bar keeps the file name, search and the people in a shared session.
|
|
6
|
+
*/
|
|
7
|
+
import type { EditorContext } from 'ooxml-core/xlsx/ui';
|
|
8
|
+
import { type OfficeUiRibbonActions } from '../ribbon/ribbon-actions.js';
|
|
9
|
+
import type { XlsxCollaborationState } from './collaboration-types.js';
|
|
10
|
+
export interface RibbonActionsHandlers {
|
|
11
|
+
setReadOnly(readOnly: boolean): void;
|
|
12
|
+
isHidden(id: string): boolean;
|
|
13
|
+
/** Sharing state, for Share's pressed state; absent leaves it unpressed. */
|
|
14
|
+
collaboration?(): XlsxCollaborationState;
|
|
15
|
+
}
|
|
16
|
+
export interface RibbonActions {
|
|
17
|
+
readonly element: OfficeUiRibbonActions;
|
|
18
|
+
/** Re-reads read-only, sharing and the comments pane state. */
|
|
19
|
+
refresh(): void;
|
|
20
|
+
relocalize(): void;
|
|
21
|
+
}
|
|
22
|
+
export declare function createRibbonActions(ctx: EditorContext, handlers: RibbonActionsHandlers): RibbonActions;
|
|
@@ -3,7 +3,7 @@ import type { EditorContext } from 'ooxml-core/xlsx/ui';
|
|
|
3
3
|
import type { FileCommand } from './events.js';
|
|
4
4
|
export interface ShellCommandHandlers {
|
|
5
5
|
fileCommand(command: FileCommand): void;
|
|
6
|
-
openBackstage(page: 'info' | 'saveAs' | 'options' | 'new'): void;
|
|
6
|
+
openBackstage(page: 'info' | 'saveAs' | 'options' | 'new' | 'share'): void;
|
|
7
7
|
showShortcuts(): void;
|
|
8
8
|
formulaBarShown(): boolean;
|
|
9
9
|
setFormulaBarShown(shown: boolean): void;
|
package/dist/xlsx/title-bar.d.ts
CHANGED
|
@@ -1,15 +1,17 @@
|
|
|
1
1
|
import type { EditorContext } from 'ooxml-core/xlsx/ui';
|
|
2
2
|
import { type TellMeHandlers } from 'ooxml-core/xlsx/ui';
|
|
3
|
+
import type { XlsxCollaborationState } from './collaboration-types.js';
|
|
3
4
|
export type SaveState = 'saved' | 'dirty' | 'saving' | 'saved-local';
|
|
4
5
|
export interface TitleBarHandlers extends TellMeHandlers {
|
|
5
6
|
save(): void;
|
|
6
|
-
|
|
7
|
+
/** Sharing state for the presence stack; absent hides it. */
|
|
8
|
+
collaboration?(): XlsxCollaborationState;
|
|
7
9
|
}
|
|
8
10
|
export interface TitleBar {
|
|
9
11
|
readonly element: HTMLElement;
|
|
10
12
|
setFileName(name: string): void;
|
|
11
13
|
setSaveState(state: SaveState): void;
|
|
12
|
-
/** Re-reads
|
|
14
|
+
/** Re-reads undo/redo and the people in a shared session. */
|
|
13
15
|
refresh(): void;
|
|
14
16
|
relocalize(): void;
|
|
15
17
|
focusTellMe(): void;
|