superdoc 2.29.0-next.13 → 2.29.0-next.17

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 (67) hide show
  1. package/dist/chunks/{FindReplaceSurface-BKVHzhQ4.es.js → FindReplaceSurface-B_5ggdWg.es.js} +1 -1
  2. package/dist/chunks/{FindReplaceSurface-BNDrJ6VS.cjs → FindReplaceSurface-fVHxPXtn.cjs} +1 -1
  3. package/dist/chunks/{PasswordPromptSurface-6mF6Azda.es.js → PasswordPromptSurface-CZqhDQQ1.es.js} +1 -1
  4. package/dist/chunks/{PasswordPromptSurface-BNkaztaP.cjs → PasswordPromptSurface-x8GNmMJT.cjs} +1 -1
  5. package/dist/chunks/{PdfViewer-aOWhUVI7.es.js → PdfViewer-CW09MNrB.es.js} +4 -10
  6. package/dist/chunks/{PdfViewer-DmSkZehl.cjs → PdfViewer-CkrAHpC-.cjs} +4 -10
  7. package/dist/chunks/{_plugin-vue_export-helper-6MBoygIY.cjs → _plugin-vue_export-helper-BkbCxNeT.cjs} +31 -7
  8. package/dist/chunks/{_plugin-vue_export-helper-CsJQtMvr.es.js → _plugin-vue_export-helper-DRPRMkeA.es.js} +20 -8
  9. package/dist/chunks/{create-super-doc-ui-DdT4b29f.es.js → create-super-doc-ui-Dc8dQAMc.es.js} +54 -77
  10. package/dist/chunks/{create-super-doc-ui-_SbygYQ4.cjs → create-super-doc-ui-L60GhVAX.cjs} +177 -206
  11. package/dist/collaboration-upgrade-engine.cjs +1 -1
  12. package/dist/collaboration-upgrade-engine.es.js +1 -1
  13. package/dist/document-api/src/contract/command-catalog.d.ts +1 -1
  14. package/dist/public/ui-react.cjs +1 -1
  15. package/dist/public/ui-react.es.js +1 -1
  16. package/dist/public/ui-vue.cjs +1 -1
  17. package/dist/public/ui-vue.es.js +1 -1
  18. package/dist/public/ui.cjs +1 -1
  19. package/dist/public/ui.es.js +1 -1
  20. package/dist/style.css +1 -1
  21. package/dist/style.layered.css +1 -1
  22. package/dist/superdoc/src/components/CommentsLayer/collect-removed-comment-ids.d.ts +11 -1
  23. package/dist/superdoc/src/components/CommentsLayer/collect-tracked-change-thread.d.ts +19 -2
  24. package/dist/superdoc/src/components/CommentsLayer/comment-urls.d.ts +1 -1
  25. package/dist/superdoc/src/components/CommentsLayer/commentsList/super-comments-list.d.ts +23 -20
  26. package/dist/superdoc/src/components/CommentsLayer/helpers.d.ts +1 -4
  27. package/dist/superdoc/src/components/CommentsLayer/tracked-change-threading.d.ts +16 -1
  28. package/dist/superdoc/src/components/Whiteboard/WhiteboardLayer.vue.d.ts +4 -5
  29. package/dist/superdoc/src/components/Whiteboard/WhiteboardPage.vue.d.ts +3 -4
  30. package/dist/superdoc/src/components/Whiteboard/whiteboard-types.d.ts +2 -0
  31. package/dist/superdoc/src/composables/use-find-replace.d.ts +13 -3
  32. package/dist/superdoc/src/composables/use-password-prompt.d.ts +1 -1
  33. package/dist/superdoc/src/composables/use-viewport-fit.d.ts +27 -5
  34. package/dist/superdoc/src/core/SuperDoc.d.ts +3 -3
  35. package/dist/superdoc/src/core/pdf/pdf-adapter.d.ts +6 -2
  36. package/dist/superdoc/src/core/types/index.d.ts +36 -4
  37. package/dist/superdoc/src/core/v2-integration/browser-peer-runtime.d.ts +5 -3
  38. package/dist/superdoc/src/core/v2-integration/cdn-engine-loader.d.ts +3 -13
  39. package/dist/superdoc/src/core/v2-integration/internal-vue-runtime.d.ts +64 -59
  40. package/dist/superdoc/src/helpers/object-guards.d.ts +1 -0
  41. package/dist/superdoc/src/internal/diagnostics/translate-diagnostic.d.ts +6 -4
  42. package/dist/superdoc/src/internal/toolbar/built-in/PageNumberMenu.vue.d.ts +25 -15
  43. package/dist/superdoc/src/internal/toolbar/built-in/constants.d.ts +3 -1
  44. package/dist/superdoc/src/internal/toolbar/built-in/font-options.d.ts +15 -1
  45. package/dist/superdoc/src/internal/toolbar/built-in/font-typeahead.d.ts +37 -7
  46. package/dist/superdoc/src/internal/toolbar/built-in/format-negation.d.ts +10 -4
  47. package/dist/superdoc/src/internal/toolbar/built-in/general.d.ts +12 -1
  48. package/dist/superdoc/src/internal/toolbar/built-in/helpers.d.ts +9 -4
  49. package/dist/superdoc/src/internal/toolbar/built-in/list-style-buttons.d.ts +2 -2
  50. package/dist/superdoc/src/internal/toolbar/built-in/page-number-feedback.d.ts +4 -5
  51. package/dist/superdoc/src/internal/toolbar/built-in/scroll-helpers.d.ts +3 -4
  52. package/dist/superdoc/src/internal/toolbar/built-in/toolbarIcons.d.ts +78 -145
  53. package/dist/superdoc/src/internal/toolbar/built-in/url-safety.d.ts +11 -3
  54. package/dist/superdoc/src/internal/toolbar/built-in-toolbar.d.ts +4 -3
  55. package/dist/superdoc/src/internal/toolbar/image-upload.d.ts +29 -39
  56. package/dist/superdoc/src/stores/comments-store.d.ts +7 -7
  57. package/dist/superdoc/src/stores/helpers/comment-document-scope.d.ts +22 -0
  58. package/dist/superdoc/src/stores/helpers/pending-selection-snapshot.d.ts +17 -0
  59. package/dist/superdoc/src/stores/helpers/tracked-change-compaction.d.ts +16 -0
  60. package/dist/superdoc/src/stores/helpers/tracked-change-decision.d.ts +45 -0
  61. package/dist/superdoc/src/stores/superdoc-store.d.ts +21 -21
  62. package/dist/superdoc.cjs +396 -423
  63. package/dist/superdoc.es.js +303 -330
  64. package/dist-cdn/style.layered.css +1 -1
  65. package/dist-cdn/superdoc.min.css +1 -1
  66. package/dist-cdn/superdoc.min.js +41 -41
  67. package/package.json +3 -2
@@ -1,11 +1,41 @@
1
- export function findPrefixMatchIndex(query: string, labels: ReadonlyArray<string>): number;
2
- export function computeTypeahead(query: string, labels: ReadonlyArray<string>, { autocomplete }?: {
3
- autocomplete?: boolean;
4
- }): {
1
+ /**
2
+ * Pure typeahead/autocomplete helpers for the font comboboxes (family + size).
3
+ *
4
+ * Matching is case-insensitive prefix matching on the logical font labels.
5
+ * Space is a normal query character, so the query is never split on spaces;
6
+ * only the outer whitespace is ignored when comparing.
7
+ *
8
+ * These functions hold no Vue or DOM state so CI can unit-test them in isolation.
9
+ */
10
+ interface TypeaheadResult {
5
11
  matchIndex: number;
6
12
  display: string;
7
13
  selectionStart: number;
8
14
  selectionEnd: number;
9
- };
10
- export function normalizeCustomFontFamily(value: any): string;
11
- export function normalizeCustomFontSize(value: string): string;
15
+ }
16
+ /**
17
+ * Index of the first label that starts with `query` (case-insensitive).
18
+ * An empty/whitespace query never matches. Returns the matching index or -1.
19
+ */
20
+ export declare const findPrefixMatchIndex: (query: string, labels: ReadonlyArray<string>) => number;
21
+ /**
22
+ * Resolve what the input should display after a keystroke.
23
+ *
24
+ * When `autocomplete` is true and a prefix match exists that is longer than the
25
+ * typed query, the completion is shown with the suffix selected so the next
26
+ * keystroke replaces it. When false (deletion) or no match exists, the raw
27
+ * query is shown with the caret at its end. `query` is the user-typed portion.
28
+ */
29
+ export declare const computeTypeahead: (query: string, labels: ReadonlyArray<string>, { autocomplete }?: {
30
+ autocomplete?: boolean;
31
+ }) => TypeaheadResult;
32
+ export declare const normalizeCustomFontFamily: (value: unknown) => string;
33
+ /**
34
+ * Normalize a typed font size to a supported point-size string.
35
+ * Parses the numeric value (ignoring any unit suffix) keeping its sign, rounds to
36
+ * the nearest half point (DOCX/Word support half points such as 10.5), and clamps
37
+ * to the supported range. Returns '' when nothing usable was typed, including
38
+ * negative or sub-minimum values.
39
+ */
40
+ export declare const normalizeCustomFontSize: (value: unknown) => string;
41
+ export {};
@@ -1,5 +1,11 @@
1
- export function isOffValue(value: unknown): boolean;
2
- /** @type {Record<string, (attrs?: Record<string, unknown>) => boolean>} */
3
- export const negationChecks: Record<string, (attrs?: Record<string, unknown>) => boolean>;
4
- export function isNegatedMark(name: string, attrs?: Record<string, unknown>): boolean;
1
+ type MarkAttrs = Record<string, unknown>;
2
+ /**
3
+ * Normalize "off" values used by cascade-aware formatting marks.
4
+ */
5
+ export declare const isOffValue: (value: unknown) => boolean;
6
+ export declare const negationChecks: Record<string, (attrs?: MarkAttrs) => boolean>;
7
+ /**
8
+ * Determine whether a mark is currently negated (explicitly turning formatting off).
9
+ */
10
+ export declare const isNegatedMark: (name: string, attrs?: MarkAttrs) => boolean;
5
11
  export default isNegatedMark;
@@ -1 +1,12 @@
1
- export function findElementBySelector(selector: string | HTMLElement | null | undefined): HTMLElement | null;
1
+ /**
2
+ * Minimal DOM helpers for the built-in toolbar shell.
3
+ *
4
+ * The v1 toolbar's `helpers/general.js` also exported a converter-backed
5
+ * paragraph-font-family fallback; that path depended on private v1 editor
6
+ * internals (`@core/super-converter`) and is intentionally dropped on V2, where
7
+ * font-family active state comes from the shared command controller snapshot.
8
+ */
9
+ /**
10
+ * Resolve a toolbar mount target from a selector string or element id.
11
+ */
12
+ export declare const findElementBySelector: (selector: string | HTMLElement | null | undefined) => HTMLElement | null;
@@ -1,5 +1,10 @@
1
- export function sanitizeNumber(value: any, defaultNumber: any): any;
2
- export function throttle(func: any, wait: any, options: any): {
3
- (...callArgs: any[]): any;
4
- cancel(): void;
1
+ interface ThrottleOptions {
2
+ leading?: boolean;
3
+ trailing?: boolean;
4
+ }
5
+ type Throttled<Args extends unknown[], Result> = ((...args: Args) => Result | undefined) & {
6
+ cancel: () => void;
5
7
  };
8
+ declare const sanitizeNumber: (value: unknown, defaultNumber: number) => number;
9
+ declare const throttle: <Args extends unknown[], Result>(func: (...args: Args) => Result, wait: number, options?: ThrottleOptions) => Throttled<Args, Result>;
10
+ export { sanitizeNumber, throttle };
@@ -1,9 +1,9 @@
1
- export const bulletStyleButtons: {
1
+ export declare const bulletStyleButtons: {
2
2
  key: string;
3
3
  icon: string;
4
4
  ariaLabel: string;
5
5
  }[];
6
- export const numberedStyleButtons: {
6
+ export declare const numberedStyleButtons: {
7
7
  key: string;
8
8
  icon: string;
9
9
  ariaLabel: string;
@@ -1,10 +1,9 @@
1
+ import { HeaderFooterKind } from '../../../../../document-api/src/index.js';
1
2
  /**
2
3
  * Briefly highlight the painted header or footer regions that are on screen,
3
4
  * so the user sees where page numbers landed without the caret leaving the
4
5
  * body. Regions are read after the repaint that follows the mutation; nothing
5
- * happens when none is visible or the host is unavailable.
6
- *
7
- * @param {HTMLElement | null | undefined} host Document viewport host element.
8
- * @param {'header' | 'footer'} kind
6
+ * happens when none is visible or the host is unavailable. `host` is the
7
+ * document viewport host element.
9
8
  */
10
- export function flashPageNumberRegions(host: HTMLElement | null | undefined, kind: "header" | "footer"): Promise<void>;
9
+ export declare function flashPageNumberRegions(host: HTMLElement | null | undefined, kind: HeaderFooterKind): Promise<void>;
@@ -1,4 +1,3 @@
1
- export function scrollToElement(targetElement: any, options?: {
2
- behavior: string;
3
- block: string;
4
- }): void;
1
+ type ScrollOptions = Pick<ScrollIntoViewOptions, 'behavior' | 'block'>;
2
+ export declare function scrollToElement(targetElement: HTMLElement | null | undefined, options?: ScrollOptions): void;
3
+ export {};
@@ -1,145 +1,78 @@
1
- import { default as rotateLeftIconSvg } from '../../../../../../shared/common/icons/rotate-left-solid.svg?raw';
2
- import { default as rotateRightIconSvg } from '../../../../../../shared/common/icons/rotate-right-solid.svg?raw';
3
- import { default as boldIconSvg } from '../../../../../../shared/common/icons/bold-solid.svg?raw';
4
- import { default as italicIconSvg } from '../../../../../../shared/common/icons/italic-solid.svg?raw';
5
- import { default as underlineIconSvg } from '../../../../../../shared/common/icons/underline-solid.svg?raw';
6
- import { default as fontIconSvg } from '../../../../../../shared/common/icons/font-solid.svg?raw';
7
- import { default as linkIconSvg } from '../../../../../../shared/common/icons/link-solid.svg?raw';
8
- import { default as imageIconSvg } from '../../../../../../shared/common/icons/image-solid.svg?raw';
9
- import { default as tocIconSvg } from '../../../../../../shared/common/icons/toc-solid.svg?raw';
10
- import { default as watermarkIconSvg } from '../../../../../../shared/common/icons/watermark.svg?raw';
11
- import { default as pageNumberIconSvg } from '../../../../../../shared/common/icons/page-number.svg?raw';
12
- import { default as alignLeftIconSvg } from '../../../../../../shared/common/icons/align-left-solid.svg?raw';
13
- import { default as alignRightIconSvg } from '../../../../../../shared/common/icons/align-right-solid.svg?raw';
14
- import { default as alignCenterIconSvg } from '../../../../../../shared/common/icons/align-center-solid.svg?raw';
15
- import { default as alignJustifyIconSvg } from '../../../../../../shared/common/icons/align-justify-solid.svg?raw';
16
- import { default as listIconSvg } from '../../../../../../shared/common/icons/list-solid.svg?raw';
17
- import { default as listCircleIconSvg } from '../../../../../../shared/common/icons/list-circle-solid.svg?raw';
18
- import { default as listSquareIconSvg } from '../../../../../../shared/common/icons/list-square-solid.svg?raw';
19
- import { default as listOlIconSvg } from '../../../../../../shared/common/icons/list-ol-solid.svg?raw';
20
- import { default as listDecimalIconSvg } from '../../../../../../shared/common/icons/list-decimal-solid.svg?raw';
21
- import { default as listDecimalParenIconSvg } from '../../../../../../shared/common/icons/list-decimal-paren-solid.svg?raw';
22
- import { default as listUpperRomanIconSvg } from '../../../../../../shared/common/icons/list-upper-roman-solid.svg?raw';
23
- import { default as listLowerRomanIconSvg } from '../../../../../../shared/common/icons/list-lower-roman-solid.svg?raw';
24
- import { default as listUpperAlphaIconSvg } from '../../../../../../shared/common/icons/list-upper-alpha-solid.svg?raw';
25
- import { default as listUpperAlphaParenIconSvg } from '../../../../../../shared/common/icons/list-upper-alpha-paren-solid.svg?raw';
26
- import { default as listLowerAlphaIconSvg } from '../../../../../../shared/common/icons/list-lower-alpha-solid.svg?raw';
27
- import { default as listLowerAlphaParenIconSvg } from '../../../../../../shared/common/icons/list-lower-alpha-paren-solid.svg?raw';
28
- import { default as outdentIconSvg } from '../../../../../../shared/common/icons/outdent-solid.svg?raw';
29
- import { default as indentIconSvg } from '../../../../../../shared/common/icons/indent-solid.svg?raw';
30
- import { default as paragraphLtrIconSvg } from '../../../../../../shared/common/icons/paragraph-ltr-solid.svg?raw';
31
- import { default as paragraphRtlIconSvg } from '../../../../../../shared/common/icons/paragraph-rtl-solid.svg?raw';
32
- import { default as fileHalfDashedIconSvg } from '../../../../../../shared/common/icons/file-half-dashed-solid.svg?raw';
33
- import { default as paintRollerIconSvg } from '../../../../../../shared/common/icons/paint-roller-solid.svg?raw';
34
- import { default as textSlashIconSvg } from '../../../../../../shared/common/icons/text-slash-solid.svg?raw';
35
- import { default as listCheckIconSvg } from '../../../../../../shared/common/icons/list-check-solid.svg?raw';
36
- import { default as fileIconSvg } from '../../../../../../shared/common/icons/file-solid.svg?raw';
37
- import { default as eyeIconSvg } from '../../../../../../shared/common/icons/eye-solid.svg?raw';
38
- import { default as calendarCheckIconSvg } from '../../../../../../shared/common/icons/calendar-check-solid.svg?raw';
39
- import { default as calendarXmarkIconSvg } from '../../../../../../shared/common/icons/calendar-xmark-solid.svg?raw';
40
- import { default as userEditIconSvg } from '../../../../../../shared/common/icons/user-edit-solid.svg?raw';
41
- import { default as commentIconSvg } from '../../../../../../shared/common/icons/comment-solid.svg?raw';
42
- import { default as circleIconSvg } from '../../../../../../shared/common/icons/circle-solid.svg?raw';
43
- import { default as checkIconSvg } from '../../../../../../shared/common/icons/check-solid.svg?raw';
44
- import { default as xmarkIconSvg } from '../../../../../../shared/common/icons/xmark-solid.svg?raw';
45
- import { default as upRightFromSquareIconSvg } from '../../../../../../shared/common/icons/up-right-from-square-solid.svg?raw';
46
- import { default as ellipsisVerticalIconSvg } from '../../../../../../shared/common/icons/ellipsis-vertical-solid.svg?raw';
47
- import { default as caretUpIconSvg } from '../../../../../../shared/common/icons/caret-up-solid.svg?raw';
48
- import { default as caretDownIconSvg } from '../../../../../../shared/common/icons/caret-down-solid.svg?raw';
49
- import { default as rulerSvg } from '../../../../../../shared/common/icons/ruler-solid.svg?raw';
50
- import { default as paintbrushSvg } from '../../../../../../shared/common/icons/paintbrush-solid.svg?raw';
51
- import { default as highlighterIcon } from '../../../../../../shared/common/icons/highlighter-icon.svg?raw';
52
- import { default as magicWandIcon } from '../../../../../../shared/common/icons/magic-wand-solid.svg?raw';
53
- import { default as tableIconSvg } from '../../../../../../shared/common/icons/table-solid.svg?raw';
54
- import { default as tableColumnsIconSvg } from '../../../../../../shared/common/icons/table-columns-solid.svg?raw';
55
- import { default as arrowsLeftRightIconSvg } from '../../../../../../shared/common/icons/arrows-left-right-solid.svg?raw';
56
- import { default as arrowsToDotIconSvg } from '../../../../../../shared/common/icons/arrows-to-dot-solid.svg?raw';
57
- import { default as plusIconSvg } from '../../../../../../shared/common/icons/plus-solid.svg?raw';
58
- import { default as trashIconSvg } from '../../../../../../shared/common/icons/trash-can-solid.svg?raw';
59
- import { default as borderNoneIconSvg } from '../../../../../../shared/common/icons/border-none-solid.svg?raw';
60
- import { default as wrenchIconSvg } from '../../../../../../shared/common/icons/wrench-solid.svg?raw';
61
- import { default as upDownIconSvg } from '../../../../../../shared/common/icons/up-down.svg?raw';
62
- import { default as magnifyingGlassSvg } from '../../../../../../shared/common/icons/magnifying-glass.svg?raw';
63
- import { default as scissorsIconSvg } from '../../../../../../shared/common/icons/scissors-solid.svg?raw';
64
- import { default as copyIconSvg } from '../../../../../../shared/common/icons/copy-solid.svg?raw';
65
- import { default as pasteIconSvg } from '../../../../../../shared/common/icons/paste-solid.svg?raw';
66
- import { default as strikethroughSvg } from '../../../../../../shared/common/icons/strikethrough.svg?raw';
67
- import { default as paragraphIconSvg } from '../../../../../../shared/common/icons/paragraph-solid.svg?raw';
68
- export namespace toolbarIcons {
69
- export { rotateLeftIconSvg as undo };
70
- export { rotateRightIconSvg as redo };
71
- export { boldIconSvg as bold };
72
- export { italicIconSvg as italic };
73
- export { underlineIconSvg as underline };
74
- export { fontIconSvg as color };
75
- export { linkIconSvg as link };
76
- export { imageIconSvg as image };
77
- export { tocIconSvg as tableOfContents };
78
- export { watermarkIconSvg as watermark };
79
- export { pageNumberIconSvg as pageNumber };
80
- export { alignLeftIconSvg as alignLeft };
81
- export { alignRightIconSvg as alignRight };
82
- export { alignCenterIconSvg as alignCenter };
83
- export { alignJustifyIconSvg as alignJustify };
84
- export { listIconSvg as bulletList };
85
- export { listIconSvg as bulletListDisc };
86
- export { listCircleIconSvg as bulletListCircle };
87
- export { listSquareIconSvg as bulletListSquare };
88
- export { listOlIconSvg as numberedList };
89
- export { listDecimalIconSvg as numberedListDecimal };
90
- export { listDecimalParenIconSvg as numberedListDecimalParen };
91
- export { listUpperRomanIconSvg as numberedListUpperRoman };
92
- export { listLowerRomanIconSvg as numberedListLowerRoman };
93
- export { listUpperAlphaIconSvg as numberedListUpperAlpha };
94
- export { listUpperAlphaParenIconSvg as numberedListUpperAlphaParen };
95
- export { listLowerAlphaIconSvg as numberedListLowerAlpha };
96
- export { listLowerAlphaParenIconSvg as numberedListLowerAlphaParen };
97
- export { outdentIconSvg as indentLeft };
98
- export { indentIconSvg as indentRight };
99
- export { paragraphLtrIconSvg as directionLtr };
100
- export { paragraphRtlIconSvg as directionRtl };
101
- export { fileHalfDashedIconSvg as pageBreak };
102
- export { paintRollerIconSvg as copyFormat };
103
- export { textSlashIconSvg as clearFormatting };
104
- export { listCheckIconSvg as trackChanges };
105
- export { fileIconSvg as trackChangesFinal };
106
- export { eyeIconSvg as trackChangesOriginal };
107
- export { calendarCheckIconSvg as trackChangesAccept };
108
- export { calendarXmarkIconSvg as trackChangesReject };
109
- export { userEditIconSvg as documentMode };
110
- export { userEditIconSvg as documentEditingMode };
111
- export { commentIconSvg as documentSuggestingMode };
112
- export { eyeIconSvg as documentViewingMode };
113
- export { circleIconSvg as colorOption };
114
- export { checkIconSvg as colorOptionCheck };
115
- export { linkIconSvg as linkInput };
116
- export { xmarkIconSvg as removeLink };
117
- export { upRightFromSquareIconSvg as openLink };
118
- export { ellipsisVerticalIconSvg as overflow };
119
- export { caretUpIconSvg as dropdownCaretUp };
120
- export { caretDownIconSvg as dropdownCaretDown };
121
- export { rulerSvg as ruler };
122
- export { paintbrushSvg as paintbrush };
123
- export { highlighterIcon as highlight };
124
- export { magicWandIcon as ai };
125
- export { tableIconSvg as table };
126
- export { tableColumnsIconSvg as tableActions };
127
- export { arrowsLeftRightIconSvg as splitCell };
128
- export { arrowsToDotIconSvg as mergeCells };
129
- export { plusIconSvg as addRowBefore };
130
- export { plusIconSvg as addRowAfter };
131
- export { plusIconSvg as addColumnBefore };
132
- export { plusIconSvg as addColumnAfter };
133
- export { trashIconSvg as deleteRow };
134
- export { trashIconSvg as deleteColumn };
135
- export { trashIconSvg as deleteTable };
136
- export { borderNoneIconSvg as deleteBorders };
137
- export { wrenchIconSvg as fixTables };
138
- export { upDownIconSvg as lineHeight };
139
- export { magnifyingGlassSvg as search };
140
- export { scissorsIconSvg as cut };
141
- export { copyIconSvg as copy };
142
- export { pasteIconSvg as paste };
143
- export { strikethroughSvg as strikethrough };
144
- export { paragraphIconSvg as formattingMarks };
145
- }
1
+ export declare const toolbarIcons: {
2
+ undo: string;
3
+ redo: string;
4
+ bold: string;
5
+ italic: string;
6
+ underline: string;
7
+ color: string;
8
+ link: string;
9
+ image: string;
10
+ tableOfContents: string;
11
+ watermark: string;
12
+ pageNumber: string;
13
+ alignLeft: string;
14
+ alignRight: string;
15
+ alignCenter: string;
16
+ alignJustify: string;
17
+ bulletList: string;
18
+ bulletListDisc: string;
19
+ bulletListCircle: string;
20
+ bulletListSquare: string;
21
+ numberedList: string;
22
+ numberedListDecimal: string;
23
+ numberedListDecimalParen: string;
24
+ numberedListUpperRoman: string;
25
+ numberedListLowerRoman: string;
26
+ numberedListUpperAlpha: string;
27
+ numberedListUpperAlphaParen: string;
28
+ numberedListLowerAlpha: string;
29
+ numberedListLowerAlphaParen: string;
30
+ indentLeft: string;
31
+ indentRight: string;
32
+ directionLtr: string;
33
+ directionRtl: string;
34
+ pageBreak: string;
35
+ copyFormat: string;
36
+ clearFormatting: string;
37
+ trackChanges: string;
38
+ trackChangesFinal: string;
39
+ trackChangesOriginal: string;
40
+ trackChangesAccept: string;
41
+ trackChangesReject: string;
42
+ documentMode: string;
43
+ documentEditingMode: string;
44
+ documentSuggestingMode: string;
45
+ documentViewingMode: string;
46
+ colorOption: string;
47
+ colorOptionCheck: string;
48
+ linkInput: string;
49
+ removeLink: string;
50
+ openLink: string;
51
+ overflow: string;
52
+ dropdownCaretUp: string;
53
+ dropdownCaretDown: string;
54
+ ruler: string;
55
+ paintbrush: string;
56
+ highlight: string;
57
+ ai: string;
58
+ table: string;
59
+ tableActions: string;
60
+ splitCell: string;
61
+ mergeCells: string;
62
+ addRowBefore: string;
63
+ addRowAfter: string;
64
+ addColumnBefore: string;
65
+ addColumnAfter: string;
66
+ deleteRow: string;
67
+ deleteColumn: string;
68
+ deleteTable: string;
69
+ deleteBorders: string;
70
+ fixTables: string;
71
+ lineHeight: string;
72
+ search: string;
73
+ cut: string;
74
+ copy: string;
75
+ paste: string;
76
+ strikethrough: string;
77
+ formattingMarks: string;
78
+ };
@@ -1,8 +1,16 @@
1
+ /**
2
+ * Minimal href sanitizer for the built-in link popover.
3
+ *
4
+ * The v1 toolbar used the shared `@superdoc/url-validation` package, which is not
5
+ * a resolvable runtime dependency of the published `superdoc` ES build. This
6
+ * keeps the same fail-closed posture (only known-safe schemes pass) without
7
+ * pulling in that package: dangerous schemes (`javascript:`, `data:`,
8
+ * `vbscript:`) return `null`, mirroring the v1 contract that callers treat a
9
+ * `null` result as an invalid URL.
10
+ */
1
11
  /**
2
12
  * Validate and normalize an href. Returns `{ href }` for safe values, or `null`.
3
- * @param {string} value
4
- * @returns {{ href: string }|null}
5
13
  */
6
- export function sanitizeHref(value: string): {
14
+ export declare function sanitizeHref(value: unknown): {
7
15
  href: string;
8
16
  } | null;
@@ -32,8 +32,9 @@ type BuiltInToolbarConfig = {
32
32
  showPageNumberButton: boolean;
33
33
  uiDisplayFallbackFont?: string;
34
34
  };
35
+ type ToolbarSuperDoc = Partial<Pick<SuperDoc, 'activeEditor' | 'config' | 'ui' | 'uiConfig' | 'fonts' | 'on' | 'off' | 'emit' | 'focus' | 'toggleRuler' | 'toggleFormattingMarks' | 'setShowFormattingMarks'>>;
35
36
  type BuiltInToolbarOptions = {
36
- superdoc?: SuperDoc | null;
37
+ superdoc?: ToolbarSuperDoc | null;
37
38
  editor?: Editor | null;
38
39
  selector?: string | HTMLElement | null;
39
40
  element?: string | HTMLElement | null;
@@ -58,7 +59,7 @@ export declare class BuiltInToolbar extends EventEmitter {
58
59
  pendingSelectionCapture: SelectionCapture | null | undefined;
59
60
  isDev: boolean;
60
61
  role: string;
61
- superdoc: SuperDoc | null | undefined;
62
+ superdoc: ToolbarSuperDoc | null | undefined;
62
63
  toolbarContainer: HTMLElement | null;
63
64
  toolbar: ComponentPublicInstance | null;
64
65
  _detachFontsChanged: (() => void) | null;
@@ -66,7 +67,7 @@ export declare class BuiltInToolbar extends EventEmitter {
66
67
  app?: App | null;
67
68
  activeEditor: Editor | null;
68
69
  ui: BorrowedSuperDocUI | null;
69
- snapshot: ToolbarSnapshotSlice | null;
70
+ snapshot: Partial<Pick<ToolbarSnapshotSlice, 'commands' | 'copyFormatActive'>> | null;
70
71
  _unsubscribeController: (() => void) | null;
71
72
  _detachFormatPainterModeChange: (() => void) | null;
72
73
  _customCommandRegs: Map<string, CustomCommandRegistrationResult<CustomButtonPayload>>;
@@ -1,10 +1,32 @@
1
+ /**
2
+ * Interactive image acquisition for the built-in toolbar (SD-3567).
3
+ *
4
+ * The toolbar image button routes through the shared controller command
5
+ * `image` → `create.image`, which requires a base64 PNG/JPEG data-URI `src`.
6
+ * This module owns the browser file picker and the File → data-URI
7
+ * conversion; the toolbar dispatches the resulting payload through the
8
+ * normal controller command path.
9
+ */
10
+ /** Accept filter for the picker: PNG and JPEG only (V1 parity; OOXML-native formats). */
11
+ export declare const IMAGE_PICKER_ACCEPT = ".png,.jpg,.jpeg,image/png,image/jpeg";
12
+ type NamedBlob = Blob & {
13
+ name?: string;
14
+ };
15
+ interface ImageFilePickerOptions {
16
+ ownerDocument?: Document;
17
+ onPick?: (file: File) => void | Promise<void>;
18
+ onError?: (error: unknown) => void;
19
+ }
20
+ interface ImageFilePicker {
21
+ input: HTMLInputElement;
22
+ open: () => void;
23
+ destroy: () => void;
24
+ }
1
25
  /**
2
26
  * Whether a picked/dropped file is an insertable image (PNG/JPEG). Falls back
3
27
  * to the file extension when the browser reports no MIME type.
4
- * @param {File | null | undefined} file
5
- * @returns {boolean}
6
28
  */
7
- export function isSupportedImageFile(file: File | null | undefined): boolean;
29
+ export declare function isSupportedImageFile(file: File | null | undefined): boolean;
8
30
  /**
9
31
  * Read a File/Blob into a base64 data URI.
10
32
  *
@@ -12,52 +34,20 @@ export function isSupportedImageFile(file: File | null | undefined): boolean;
12
34
  * accepts those by extension, but `readAsDataURL` would then produce an
13
35
  * `application/octet-stream` data URI that `create.image` rejects. Rewrite
14
36
  * the media type from the filename so extension-accepted files still insert.
15
- * @param {Blob & { name?: string }} file
16
- * @returns {Promise<string>}
17
37
  */
18
- export function fileToDataUri(file: Blob & {
19
- name?: string;
20
- }): Promise<string>;
38
+ export declare function fileToDataUri(file: NamedBlob): Promise<string>;
21
39
  /**
22
40
  * Resolve the `create.image` src for a picked file. Uses the consumer's
23
41
  * `handleImageUpload` callback when configured (V1 contract:
24
42
  * `(file: File) => Promise<string>`). A returned non-data URL is fetched and
25
43
  * embedded, because `create.image` requires an embedded base64 data URI.
26
- * @param {File} file
27
- * @param {((file: File) => Promise<string>) | null | undefined} handleImageUpload
28
- * @returns {Promise<string>}
29
44
  */
30
- export function resolveImageSrc(file: File, handleImageUpload: ((file: File) => Promise<string>) | null | undefined): Promise<string>;
45
+ export declare function resolveImageSrc(file: File, handleImageUpload: ((file: File) => Promise<string>) | null | undefined): Promise<string>;
31
46
  /**
32
47
  * Hidden `<input type=file>` picker bound to one toolbar instance. The input
33
48
  * stays attached (hidden) so automation and tests can drive it; `destroy()`
34
49
  * removes it. Picking a file calls `onPick(file)`; an unsupported type or a
35
50
  * failed pick routes through `onError(error)`.
36
- *
37
- * @param {{
38
- * ownerDocument?: Document,
39
- * onPick?: (file: File) => unknown,
40
- * onError?: (error: Error) => void,
41
- * }} options
42
- * @returns {{ input: HTMLInputElement, open: () => void, destroy: () => void }}
43
- */
44
- export function createImageFilePicker({ ownerDocument, onPick, onError }?: {
45
- ownerDocument?: Document;
46
- onPick?: (file: File) => unknown;
47
- onError?: (error: Error) => void;
48
- }): {
49
- input: HTMLInputElement;
50
- open: () => void;
51
- destroy: () => void;
52
- };
53
- /**
54
- * Interactive image acquisition for the built-in toolbar (SD-3567).
55
- *
56
- * The toolbar image button routes through the shared controller command
57
- * `image` → `create.image`, which requires a base64 PNG/JPEG data-URI `src`.
58
- * This module owns the browser file picker and the File → data-URI
59
- * conversion; the toolbar dispatches the resulting payload through the
60
- * normal controller command path.
61
51
  */
62
- /** Accept filter for the picker: PNG and JPEG only (V1 parity; OOXML-native formats). */
63
- export const IMAGE_PICKER_ACCEPT: ".png,.jpg,.jpeg,image/png,image/jpeg";
52
+ export declare function createImageFilePicker({ ownerDocument, onPick, onError, }?: ImageFilePickerOptions): ImageFilePicker;
53
+ export {};
@@ -91,8 +91,8 @@ export const useCommentsStore: import('pinia').StoreDefinition<"comments", Pick<
91
91
  key: null;
92
92
  entry: null;
93
93
  };
94
- getCommentDocumentId: (comment: any) => string | null;
95
- belongsToDocument: (comment: any, activeDocumentId: any, options?: {}) => any;
94
+ getCommentDocumentId: (comment: import('./helpers/comment-document-scope.js').DocumentScopedComment) => string | null;
95
+ belongsToDocument: (comment: import('./helpers/comment-document-scope.js').DocumentScopedComment, activeDocumentId: string | null | undefined, options?: import('./helpers/comment-document-scope.js').BelongsToDocumentOptions) => boolean;
96
96
  viewingVisibility: {
97
97
  documentMode: string;
98
98
  commentsVisible: boolean;
@@ -412,8 +412,8 @@ export const useCommentsStore: import('pinia').StoreDefinition<"comments", Pick<
412
412
  key: null;
413
413
  entry: null;
414
414
  };
415
- getCommentDocumentId: (comment: any) => string | null;
416
- belongsToDocument: (comment: any, activeDocumentId: any, options?: {}) => any;
415
+ getCommentDocumentId: (comment: import('./helpers/comment-document-scope.js').DocumentScopedComment) => string | null;
416
+ belongsToDocument: (comment: import('./helpers/comment-document-scope.js').DocumentScopedComment, activeDocumentId: string | null | undefined, options?: import('./helpers/comment-document-scope.js').BelongsToDocumentOptions) => boolean;
417
417
  viewingVisibility: {
418
418
  documentMode: string;
419
419
  commentsVisible: boolean;
@@ -733,8 +733,8 @@ export const useCommentsStore: import('pinia').StoreDefinition<"comments", Pick<
733
733
  key: null;
734
734
  entry: null;
735
735
  };
736
- getCommentDocumentId: (comment: any) => string | null;
737
- belongsToDocument: (comment: any, activeDocumentId: any, options?: {}) => any;
736
+ getCommentDocumentId: (comment: import('./helpers/comment-document-scope.js').DocumentScopedComment) => string | null;
737
+ belongsToDocument: (comment: import('./helpers/comment-document-scope.js').DocumentScopedComment, activeDocumentId: string | null | undefined, options?: import('./helpers/comment-document-scope.js').BelongsToDocumentOptions) => boolean;
738
738
  viewingVisibility: {
739
739
  documentMode: string;
740
740
  commentsVisible: boolean;
@@ -961,4 +961,4 @@ export const useCommentsStore: import('pinia').StoreDefinition<"comments", Pick<
961
961
  appliedCount: number;
962
962
  } | undefined;
963
963
  remapTrackedChangeIdentities: (pairs?: any[], { documentId }?: {}) => void;
964
- }, "resolveCommentPositionEntry" | "getCommentAliasIds" | "getCommentPositionKey" | "getComment" | "getTrackedChangeThread" | "getCommentPosition" | "getCommentDocumentId" | "belongsToDocument" | "init" | "setViewingVisibility" | "setActiveComment" | "getPendingComment" | "showAddComment" | "addComment" | "addHydratedComment" | "cancelComment" | "deleteComment" | "removePendingComment" | "removeCommentsForDocument" | "setReviewDirectoryFromV2" | "clearReviewDirectory" | "handleEditorLocationsUpdate" | "clearEditorCommentPositions" | "handleTrackedChangeUpdate" | "syncResolvedCommentsWithDocument" | "setActiveFloatingCommentInstance" | "requestInstantSidebarAlignment" | "peekInstantSidebarAlignment" | "clearInstantSidebarAlignment" | "decideTrackedChangeFromSidebar" | "setV2CommentsAdapter" | "getV2CommentsAdapter" | "applyReviewWindowFromV2" | "reconcileCommentsFromV2" | "announceV2CommentCreated" | "dropCommentsFromMutationImpact" | "isV2EditorActive" | "replyCommentV2" | "editCommentV2" | "resolveCommentV2" | "reopenCommentV2" | "setV2TrackedChangesAdapter" | "getV2TrackedChangesAdapter" | "getV2TrackedChangeRowCount" | "reconcileTrackedChangeMutationFromV2" | "reconcileTrackedChangesFromV2" | "remapTrackedChangeIdentities">>;
964
+ }, "resolveCommentPositionEntry" | "getCommentAliasIds" | "getCommentPositionKey" | "belongsToDocument" | "getComment" | "getTrackedChangeThread" | "getCommentPosition" | "getCommentDocumentId" | "init" | "setViewingVisibility" | "setActiveComment" | "getPendingComment" | "showAddComment" | "addComment" | "addHydratedComment" | "cancelComment" | "deleteComment" | "removePendingComment" | "removeCommentsForDocument" | "setReviewDirectoryFromV2" | "clearReviewDirectory" | "handleEditorLocationsUpdate" | "clearEditorCommentPositions" | "handleTrackedChangeUpdate" | "syncResolvedCommentsWithDocument" | "setActiveFloatingCommentInstance" | "requestInstantSidebarAlignment" | "peekInstantSidebarAlignment" | "clearInstantSidebarAlignment" | "decideTrackedChangeFromSidebar" | "setV2CommentsAdapter" | "getV2CommentsAdapter" | "applyReviewWindowFromV2" | "reconcileCommentsFromV2" | "announceV2CommentCreated" | "dropCommentsFromMutationImpact" | "isV2EditorActive" | "replyCommentV2" | "editCommentV2" | "resolveCommentV2" | "reopenCommentV2" | "setV2TrackedChangesAdapter" | "getV2TrackedChangesAdapter" | "getV2TrackedChangeRowCount" | "reconcileTrackedChangeMutationFromV2" | "reconcileTrackedChangesFromV2" | "remapTrackedChangeIdentities">>;
@@ -0,0 +1,22 @@
1
+ export type DocumentScopedComment = {
2
+ fileId?: unknown;
3
+ documentId?: unknown;
4
+ selection?: {
5
+ documentId?: unknown;
6
+ } | null;
7
+ } | null | undefined;
8
+ type OpenDocument = {
9
+ id?: unknown;
10
+ } | null | undefined;
11
+ export type OpenDocumentsSource = OpenDocument[] | {
12
+ value?: OpenDocument[] | null;
13
+ } | null | undefined;
14
+ export type BelongsToDocumentOptions = {
15
+ allowSingleDocumentMismatch?: boolean;
16
+ };
17
+ export declare const getCommentDocumentId: (comment: DocumentScopedComment) => string | null;
18
+ export declare const createCommentDocumentScope: (readOpenDocuments: () => OpenDocumentsSource) => {
19
+ belongsToDocument: (comment: DocumentScopedComment, activeDocumentId: string | null | undefined, options?: BelongsToDocumentOptions) => boolean;
20
+ belongsToTrackedChangeSyncDocument: (comment: DocumentScopedComment, activeDocumentId: string | null | undefined) => boolean;
21
+ };
22
+ export {};
@@ -0,0 +1,17 @@
1
+ export type PendingSelectionHost = {
2
+ activeEditor?: {
3
+ options?: {
4
+ documentId?: unknown;
5
+ } | null;
6
+ doc?: {
7
+ selection?: {
8
+ current?: () => unknown;
9
+ } | null;
10
+ } | null;
11
+ } | null;
12
+ } | null | undefined;
13
+ export type PendingActiveSelection = {
14
+ source?: unknown;
15
+ documentId?: unknown;
16
+ } | null | undefined;
17
+ export declare const getPendingSelectionSnapshot: (superdoc: PendingSelectionHost, activeSelection: PendingActiveSelection) => unknown;
@@ -0,0 +1,16 @@
1
+ export type CompactableTrackedChangeRow = {
2
+ commentId?: unknown;
3
+ importedId?: unknown;
4
+ trackedChangeCanonicalId?: unknown;
5
+ trackedChangeAnchorKey?: unknown;
6
+ trackedChangePositionAliases?: unknown;
7
+ resolvedTime?: unknown;
8
+ resolvedById?: unknown;
9
+ resolvedByEmail?: unknown;
10
+ resolvedByName?: unknown;
11
+ trackedChangeDecision?: unknown;
12
+ };
13
+ export declare const getBodyTrackedChangeIdentityIds: (comment: CompactableTrackedChangeRow) => string[];
14
+ export declare const groupBodyTrackedChangeCommentsByIdentity: <Row extends CompactableTrackedChangeRow>(comments: readonly Row[]) => Map<number, Row[]>;
15
+ export declare const mergeDuplicateBodyTrackedChangeComments: <Row extends CompactableTrackedChangeRow>(groups: ReadonlyMap<number, readonly Row[]>) => Map<Row, Row>;
16
+ export declare const createDroppedCommentIdMap: <Row extends CompactableTrackedChangeRow>(duplicates: ReadonlyMap<Row, Row>) => Map<string, string>;