superdoc 2.6.0-next.2 → 2.6.0-next.3

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.
@@ -19,7 +19,7 @@ var COLLABORATION_UPGRADE_ENGINE_MINIMUM_NODE_MAJOR = 20;
19
19
  var PRIVATE_ENGINE_INFO = (0, _superdoc_docx_engine_collaboration_upgrade_engine.getCollaborationUpgradeEngineInfo)();
20
20
  var ENGINE_INFO = Object.freeze({
21
21
  ...PRIVATE_ENGINE_INFO,
22
- superdocVersion: "2.6.0-next.2",
22
+ superdocVersion: "2.6.0-next.3",
23
23
  roomSchemaVersion: Object.freeze({ ...PRIVATE_ENGINE_INFO.roomSchemaVersion }),
24
24
  supportedBundleVersions: SUPPORTED_COLLABORATION_UPGRADE_BUNDLE_VERSIONS,
25
25
  supportedV1ReaderContractVersions: SUPPORTED_V1_READER_CONTRACT_VERSIONS
@@ -18,7 +18,7 @@ var COLLABORATION_UPGRADE_ENGINE_MINIMUM_NODE_MAJOR = 20;
18
18
  var PRIVATE_ENGINE_INFO = getCollaborationUpgradeEngineInfo$1();
19
19
  var ENGINE_INFO = Object.freeze({
20
20
  ...PRIVATE_ENGINE_INFO,
21
- superdocVersion: "2.6.0-next.2",
21
+ superdocVersion: "2.6.0-next.3",
22
22
  roomSchemaVersion: Object.freeze({ ...PRIVATE_ENGINE_INFO.roomSchemaVersion }),
23
23
  supportedBundleVersions: SUPPORTED_COLLABORATION_UPGRADE_BUNDLE_VERSIONS,
24
24
  supportedV1ReaderContractVersions: SUPPORTED_V1_READER_CONTRACT_VERSIONS
@@ -59,11 +59,13 @@ export type MeasureCacheStats = {
59
59
  * Performance characteristics:
60
60
  * - get(): O(1) - Map lookup + delete + re-insert for LRU tracking
61
61
  * - set(): O(1) - eviction (delete first key) + insert
62
- * - invalidate(): O(n) - where n = number of keys matching blockId prefix
62
+ * - invalidate(): O(k) - where k = cached variants for the requested block IDs
63
63
  * - Memory: Bounded at 10K entries ~= 50-100MB
64
64
  */
65
65
  export declare class MeasureCache<T> {
66
66
  private cache;
67
+ private keysByBlockId;
68
+ private blockIdByKey;
67
69
  private stats;
68
70
  /**
69
71
  * Retrieve a cached measure for the given block and dimensions.
@@ -130,6 +132,7 @@ export declare class MeasureCache<T> {
130
132
  * Update size statistics
131
133
  */
132
134
  private updateSizeStats;
135
+ private deleteKey;
133
136
  /**
134
137
  * Composes a cache key from block properties and dimensions.
135
138
  * Validates and clamps dimensions to prevent memory exhaustion.
@@ -1,4 +1,4 @@
1
- import { NonFlowingPageRelativeAnchorDependencyProof, PageCheckpointDependencyClass, FlowBlock, Layout, Measure, HeaderFooterLayout, ColumnLayout } from '../../contracts/src/index.js';
1
+ import { NonFlowingPageRelativeAnchorDependencyProof, PageCheckpointDependencyClass, FlowBlock, Layout, LayoutBlockResumeCheckpoint, Measure, HeaderFooterLayout, ColumnLayout } from '../../contracts/src/index.js';
2
2
  import { FontMeasureContext } from '../../../shared/font-system/src/index.js';
3
3
  import { LayoutOptions, HeaderFooterConstraints, LayoutExecutionCheckpoint } from '../../layout-engine/src/index.js';
4
4
  import { computeDirtyRegions } from './diff.js';
@@ -353,6 +353,11 @@ export declare function incrementalLayout(previousBlocks: FlowBlock[], _previous
353
353
  measures: Measure[];
354
354
  };
355
355
  }, layoutReuse?: IncrementalLayoutReuseOptions, measureReuseProof?: IncrementalMeasureReuseProof, execution?: IncrementalLayoutExecutionControl): Promise<IncrementalLayoutResult>;
356
+ export declare function __test_only_splicedCheckpointStats(map: ReadonlyMap<string, LayoutBlockResumeCheckpoint> | undefined): {
357
+ pieceCount: number;
358
+ sourceCount: number;
359
+ maximumTransformTreeDepth: number;
360
+ } | null;
356
361
  /**
357
362
  * Normalizes a margin value, using a fallback for undefined or non-finite values.
358
363
  * Prevents NaN content sizes when margin properties are partially defined.
@@ -5,6 +5,7 @@ export type FootnoteAnchorIndexInput = {
5
5
  refs?: Array<{
6
6
  id: string;
7
7
  pos: number;
8
+ blockId?: string;
8
9
  }>;
9
10
  bodyHeightById?: Map<string, number>;
10
11
  firstLineHeightById?: Map<string, number>;
@@ -229,9 +229,14 @@ export type PaintSnapshot = {
229
229
  pages: PaintSnapshotPage[];
230
230
  entities: PaintSnapshotEntities;
231
231
  };
232
+ type PainterFragmentFailure = {
233
+ readonly blockId: string;
234
+ readonly code: 'painter-fragment-unavailable';
235
+ };
232
236
  type PersistentPagePainterTransaction = {
233
237
  commit(): void;
234
238
  rollback(): void;
239
+ readFragmentFailures(): readonly PainterFragmentFailure[];
235
240
  };
236
241
  /**
237
242
  * DOM-based document painter that renders layout fragments to HTML elements.
@@ -478,14 +483,6 @@ export declare class DomPainter {
478
483
  * @returns HTMLElement containing the rendered fragment or error placeholder
479
484
  */
480
485
  private renderParagraphFragment;
481
- /**
482
- * Creates an error placeholder element for failed fragment renders.
483
- * Prevents entire paint operation from failing due to single fragment error.
484
- *
485
- * @param blockId - The block ID that failed to render
486
- * @param error - The error that occurred
487
- * @returns HTMLElement showing the error
488
- */
489
486
  private createErrorPlaceholder;
490
487
  private renderImageFragment;
491
488
  /**
@@ -628,6 +625,7 @@ export declare class DomPainter {
628
625
  * Selects the wrapper's section-scoped identity and legacy PM attributes.
629
626
  */
630
627
  private updateFragmentElement;
628
+ private applyRenderDiagnosticFragmentFrame;
631
629
  /**
632
630
  * Applies fragment positioning, dimensions, and metadata to an HTML element.
633
631
  *
package/dist/style.css CHANGED
@@ -1976,20 +1976,20 @@ img[data-v-c95b2073] {
1976
1976
  width: 16px;
1977
1977
  }
1978
1978
 
1979
- .sd-toolbar-item[data-v-dbdea151] {
1979
+ .sd-toolbar-item[data-v-22817fa7] {
1980
1980
  position: relative;
1981
1981
  z-index: 1;
1982
1982
  min-width: 30px;
1983
1983
  margin: 0 calc(var(--sd-ui-toolbar-item-gap, 2px) / 2);
1984
1984
  }
1985
- .sd-visually-hidden[data-v-dbdea151] {
1985
+ .sd-visually-hidden[data-v-22817fa7] {
1986
1986
  position: absolute;
1987
1987
  left: -9999px;
1988
1988
  height: 1px;
1989
1989
  width: 1px;
1990
1990
  overflow: hidden;
1991
1991
  }
1992
- .sd-toolbar-button[data-v-dbdea151] {
1992
+ .sd-toolbar-button[data-v-22817fa7] {
1993
1993
  padding: var(--sd-ui-toolbar-item-padding, 5px);
1994
1994
  height: var(--sd-ui-toolbar-height, 32px);
1995
1995
  max-height: var(--sd-ui-toolbar-height, 32px);
@@ -2005,21 +2005,21 @@ img[data-v-c95b2073] {
2005
2005
  position: relative;
2006
2006
  box-sizing: border-box;
2007
2007
  }
2008
- .sd-toolbar-button[data-v-dbdea151]:hover {
2008
+ .sd-toolbar-button[data-v-22817fa7]:hover {
2009
2009
  background-color: var(--sd-ui-toolbar-button-hover-bg, var(--sd-ui-hover-bg, #dbdbdb));
2010
2010
  }
2011
- .sd-toolbar-button:hover .sd-toolbar-icon.high-contrast[data-v-dbdea151] {
2011
+ .sd-toolbar-button:hover .sd-toolbar-icon.high-contrast[data-v-22817fa7] {
2012
2012
  color: #fff;
2013
2013
  }
2014
- .sd-toolbar-button:hover.high-contrast[data-v-dbdea151] {
2014
+ .sd-toolbar-button:hover.high-contrast[data-v-22817fa7] {
2015
2015
  background-color: #000;
2016
2016
  color: #fff;
2017
2017
  }
2018
- .sd-toolbar-button[data-v-dbdea151]:active,
2019
- .sd-active[data-v-dbdea151] {
2018
+ .sd-toolbar-button[data-v-22817fa7]:active,
2019
+ .sd-active[data-v-22817fa7] {
2020
2020
  background-color: var(--sd-ui-toolbar-button-active-bg, var(--sd-ui-active-bg, #c8d0d8));
2021
2021
  }
2022
- .sd-button-label[data-v-dbdea151] {
2022
+ .sd-button-label[data-v-22817fa7] {
2023
2023
  overflow: hidden;
2024
2024
  width: 100%;
2025
2025
  text-align: center;
@@ -2029,15 +2029,15 @@ img[data-v-c95b2073] {
2029
2029
  font-size: var(--sd-ui-font-size-500, 15px);
2030
2030
  margin: 5px;
2031
2031
  }
2032
- .sd-toolbar-icon + .sd-dropdown-caret[data-v-dbdea151] {
2032
+ .sd-toolbar-icon + .sd-dropdown-caret[data-v-22817fa7] {
2033
2033
  margin-left: 4px;
2034
2034
  }
2035
- .sd-toolbar-button.split[data-v-dbdea151] {
2035
+ .sd-toolbar-button.split[data-v-22817fa7] {
2036
2036
  padding: 0;
2037
2037
  gap: 0;
2038
2038
  }
2039
- .sd-toolbar-button.split .sd-toolbar-button__main[data-v-dbdea151],
2040
- .sd-toolbar-button.split .sd-toolbar-button__caret[data-v-dbdea151] {
2039
+ .sd-toolbar-button.split .sd-toolbar-button__main[data-v-22817fa7],
2040
+ .sd-toolbar-button.split .sd-toolbar-button__caret[data-v-22817fa7] {
2041
2041
  display: flex;
2042
2042
  align-items: center;
2043
2043
  justify-content: center;
@@ -2046,12 +2046,12 @@ img[data-v-c95b2073] {
2046
2046
  position: relative;
2047
2047
  z-index: 1;
2048
2048
  }
2049
- .sd-toolbar-button.split .sd-toolbar-button__main[data-v-dbdea151] {
2049
+ .sd-toolbar-button.split .sd-toolbar-button__main[data-v-22817fa7] {
2050
2050
  padding: 0 3px 0 var(--sd-ui-toolbar-item-padding, 5px);
2051
2051
  border-top-left-radius: var(--sd-ui-radius, 6px);
2052
2052
  border-bottom-left-radius: var(--sd-ui-radius, 6px);
2053
2053
  }
2054
- .sd-toolbar-button.split .sd-toolbar-button__caret[data-v-dbdea151] {
2054
+ .sd-toolbar-button.split .sd-toolbar-button__caret[data-v-22817fa7] {
2055
2055
  padding: 0 4px 0 2px;
2056
2056
  border-top-right-radius: var(--sd-ui-radius, 6px);
2057
2057
  border-bottom-right-radius: var(--sd-ui-radius, 6px);
@@ -2060,17 +2060,17 @@ img[data-v-c95b2073] {
2060
2060
  /* Unified hover: hovering anywhere on the split button highlights the whole
2061
2061
  button so it reads as a single grouped item, with a slightly darker tint
2062
2062
  on the half the cursor is actually over. */
2063
- .sd-toolbar-button.split[data-v-dbdea151]:hover {
2063
+ .sd-toolbar-button.split[data-v-22817fa7]:hover {
2064
2064
  background-color: var(--sd-ui-toolbar-button-hover-bg, var(--sd-ui-hover-bg, #dbdbdb));
2065
2065
  }
2066
- .sd-toolbar-button.split .sd-toolbar-button__main[data-v-dbdea151]:hover,
2067
- .sd-toolbar-button.split .sd-toolbar-button__caret[data-v-dbdea151]:hover {
2066
+ .sd-toolbar-button.split .sd-toolbar-button__main[data-v-22817fa7]:hover,
2067
+ .sd-toolbar-button.split .sd-toolbar-button__caret[data-v-22817fa7]:hover {
2068
2068
  background-color: var(--sd-ui-toolbar-button-active-bg, var(--sd-ui-active-bg, #c8d0d8));
2069
2069
  }
2070
2070
 
2071
2071
  /* Subtle divider only appears on hover, hinting at the two affordances
2072
2072
  without making them look like separate buttons at rest. */
2073
- .sd-toolbar-button.split .sd-toolbar-button__caret[data-v-dbdea151]::before {
2073
+ .sd-toolbar-button.split .sd-toolbar-button__caret[data-v-22817fa7]::before {
2074
2074
  content: '';
2075
2075
  position: absolute;
2076
2076
  left: 0;
@@ -2080,46 +2080,46 @@ img[data-v-c95b2073] {
2080
2080
  background-color: transparent;
2081
2081
  transition: background-color 0.15s ease-out;
2082
2082
  }
2083
- .sd-toolbar-button.split:hover .sd-toolbar-button__caret[data-v-dbdea151]::before {
2083
+ .sd-toolbar-button.split:hover .sd-toolbar-button__caret[data-v-22817fa7]::before {
2084
2084
  background-color: var(--sd-ui-border, rgba(71, 72, 74, 0.2));
2085
2085
  }
2086
- .sd-toolbar-button.split.sd-disabled[data-v-dbdea151],
2087
- .sd-toolbar-button.split.sd-disabled[data-v-dbdea151]:hover {
2086
+ .sd-toolbar-button.split.sd-disabled[data-v-22817fa7],
2087
+ .sd-toolbar-button.split.sd-disabled[data-v-22817fa7]:hover {
2088
2088
  background-color: initial;
2089
2089
  }
2090
- .sd-toolbar-button.split.sd-disabled .sd-toolbar-button__main[data-v-dbdea151],
2091
- .sd-toolbar-button.split.sd-disabled .sd-toolbar-button__caret[data-v-dbdea151] {
2090
+ .sd-toolbar-button.split.sd-disabled .sd-toolbar-button__main[data-v-22817fa7],
2091
+ .sd-toolbar-button.split.sd-disabled .sd-toolbar-button__caret[data-v-22817fa7] {
2092
2092
  cursor: default;
2093
2093
  }
2094
- .sd-toolbar-button.split.sd-disabled .sd-toolbar-button__main[data-v-dbdea151]:hover,
2095
- .sd-toolbar-button.split.sd-disabled .sd-toolbar-button__caret[data-v-dbdea151]:hover {
2094
+ .sd-toolbar-button.split.sd-disabled .sd-toolbar-button__main[data-v-22817fa7]:hover,
2095
+ .sd-toolbar-button.split.sd-disabled .sd-toolbar-button__caret[data-v-22817fa7]:hover {
2096
2096
  background-color: initial;
2097
2097
  }
2098
- .sd-toolbar-button.split.sd-disabled .sd-toolbar-button__caret[data-v-dbdea151]::before {
2098
+ .sd-toolbar-button.split.sd-disabled .sd-toolbar-button__caret[data-v-22817fa7]::before {
2099
2099
  background-color: transparent;
2100
2100
  }
2101
- .left[data-v-dbdea151],
2102
- .right[data-v-dbdea151] {
2101
+ .left[data-v-22817fa7],
2102
+ .right[data-v-22817fa7] {
2103
2103
  width: 50%;
2104
2104
  height: 100%;
2105
2105
  background-color: #dbdbdb;
2106
2106
  border-radius: 60%;
2107
2107
  }
2108
- .has-inline-text-input[data-v-dbdea151]:hover {
2108
+ .has-inline-text-input[data-v-22817fa7]:hover {
2109
2109
  cursor: text;
2110
2110
  }
2111
- .sd-disabled[data-v-dbdea151] {
2111
+ .sd-disabled[data-v-22817fa7] {
2112
2112
  cursor: default;
2113
2113
  }
2114
- .sd-disabled[data-v-dbdea151]:hover {
2114
+ .sd-disabled[data-v-22817fa7]:hover {
2115
2115
  cursor: default;
2116
2116
  background-color: initial;
2117
2117
  }
2118
- .sd-disabled .sd-toolbar-icon[data-v-dbdea151],
2119
- .sd-disabled .sd-button-label[data-v-dbdea151] {
2118
+ .sd-disabled .sd-toolbar-icon[data-v-22817fa7],
2119
+ .sd-disabled .sd-button-label[data-v-22817fa7] {
2120
2120
  opacity: 0.35;
2121
2121
  }
2122
- .button-text-input[data-v-dbdea151] {
2122
+ .button-text-input[data-v-22817fa7] {
2123
2123
  color: var(--sd-ui-toolbar-button-text, #47484a);
2124
2124
  border-radius: 4px;
2125
2125
  text-align: center;
@@ -2133,19 +2133,19 @@ img[data-v-c95b2073] {
2133
2133
  border: 1px solid var(--sd-ui-border, #dbdbdb);
2134
2134
  box-sizing: border-box;
2135
2135
  }
2136
- .button-text-input.high-contrast[data-v-dbdea151] {
2136
+ .button-text-input.high-contrast[data-v-22817fa7] {
2137
2137
  background-color: #fff;
2138
2138
  }
2139
- .button-text-input--font-size[data-v-dbdea151] {
2139
+ .button-text-input--font-size[data-v-22817fa7] {
2140
2140
  width: 36px;
2141
2141
  }
2142
- .button-text-input--font-family[data-v-dbdea151] {
2142
+ .button-text-input--font-family[data-v-22817fa7] {
2143
2143
  width: 88px;
2144
2144
  }
2145
- .button-text-input[data-v-dbdea151]::placeholder {
2145
+ .button-text-input[data-v-22817fa7]::placeholder {
2146
2146
  color: var(--sd-ui-toolbar-button-text, #47484a);
2147
2147
  }
2148
- .sd-dropdown-caret[data-v-dbdea151] {
2148
+ .sd-dropdown-caret[data-v-22817fa7] {
2149
2149
  display: inline-flex;
2150
2150
  align-items: center;
2151
2151
  justify-content: center;
@@ -2154,16 +2154,16 @@ img[data-v-c95b2073] {
2154
2154
  width: 10px;
2155
2155
  height: 10px;
2156
2156
  }
2157
- .sd-toolbar-item--doc-mode-compact .sd-button-label[data-v-dbdea151] {
2157
+ .sd-toolbar-item--doc-mode-compact .sd-button-label[data-v-22817fa7] {
2158
2158
  display: none;
2159
2159
  }
2160
- .sd-toolbar-item--doc-mode-compact .sd-toolbar-icon[data-v-dbdea151] {
2160
+ .sd-toolbar-item--doc-mode-compact .sd-toolbar-icon[data-v-22817fa7] {
2161
2161
  margin-right: 5px;
2162
2162
  }
2163
- .sd-toolbar-item--linked-styles-compact[data-v-dbdea151] {
2163
+ .sd-toolbar-item--linked-styles-compact[data-v-22817fa7] {
2164
2164
  width: auto !important;
2165
2165
  }
2166
- .sd-toolbar-item--linked-styles-compact .sd-button-label[data-v-dbdea151] {
2166
+ .sd-toolbar-item--linked-styles-compact .sd-button-label[data-v-22817fa7] {
2167
2167
  display: none;
2168
2168
  }
2169
2169
 
@@ -1976,20 +1976,20 @@ img[data-v-c95b2073] {
1976
1976
  width: 16px;
1977
1977
  }
1978
1978
 
1979
- .sd-toolbar-item[data-v-dbdea151] {
1979
+ .sd-toolbar-item[data-v-22817fa7] {
1980
1980
  position: relative;
1981
1981
  z-index: 1;
1982
1982
  min-width: 30px;
1983
1983
  margin: 0 calc(var(--sd-ui-toolbar-item-gap, 2px) / 2);
1984
1984
  }
1985
- .sd-visually-hidden[data-v-dbdea151] {
1985
+ .sd-visually-hidden[data-v-22817fa7] {
1986
1986
  position: absolute;
1987
1987
  left: -9999px;
1988
1988
  height: 1px;
1989
1989
  width: 1px;
1990
1990
  overflow: hidden;
1991
1991
  }
1992
- .sd-toolbar-button[data-v-dbdea151] {
1992
+ .sd-toolbar-button[data-v-22817fa7] {
1993
1993
  padding: var(--sd-ui-toolbar-item-padding, 5px);
1994
1994
  height: var(--sd-ui-toolbar-height, 32px);
1995
1995
  max-height: var(--sd-ui-toolbar-height, 32px);
@@ -2005,21 +2005,21 @@ img[data-v-c95b2073] {
2005
2005
  position: relative;
2006
2006
  box-sizing: border-box;
2007
2007
  }
2008
- .sd-toolbar-button[data-v-dbdea151]:hover {
2008
+ .sd-toolbar-button[data-v-22817fa7]:hover {
2009
2009
  background-color: var(--sd-ui-toolbar-button-hover-bg, var(--sd-ui-hover-bg, #dbdbdb));
2010
2010
  }
2011
- .sd-toolbar-button:hover .sd-toolbar-icon.high-contrast[data-v-dbdea151] {
2011
+ .sd-toolbar-button:hover .sd-toolbar-icon.high-contrast[data-v-22817fa7] {
2012
2012
  color: #fff;
2013
2013
  }
2014
- .sd-toolbar-button:hover.high-contrast[data-v-dbdea151] {
2014
+ .sd-toolbar-button:hover.high-contrast[data-v-22817fa7] {
2015
2015
  background-color: #000;
2016
2016
  color: #fff;
2017
2017
  }
2018
- .sd-toolbar-button[data-v-dbdea151]:active,
2019
- .sd-active[data-v-dbdea151] {
2018
+ .sd-toolbar-button[data-v-22817fa7]:active,
2019
+ .sd-active[data-v-22817fa7] {
2020
2020
  background-color: var(--sd-ui-toolbar-button-active-bg, var(--sd-ui-active-bg, #c8d0d8));
2021
2021
  }
2022
- .sd-button-label[data-v-dbdea151] {
2022
+ .sd-button-label[data-v-22817fa7] {
2023
2023
  overflow: hidden;
2024
2024
  width: 100%;
2025
2025
  text-align: center;
@@ -2029,15 +2029,15 @@ img[data-v-c95b2073] {
2029
2029
  font-size: var(--sd-ui-font-size-500, 15px);
2030
2030
  margin: 5px;
2031
2031
  }
2032
- .sd-toolbar-icon + .sd-dropdown-caret[data-v-dbdea151] {
2032
+ .sd-toolbar-icon + .sd-dropdown-caret[data-v-22817fa7] {
2033
2033
  margin-left: 4px;
2034
2034
  }
2035
- .sd-toolbar-button.split[data-v-dbdea151] {
2035
+ .sd-toolbar-button.split[data-v-22817fa7] {
2036
2036
  padding: 0;
2037
2037
  gap: 0;
2038
2038
  }
2039
- .sd-toolbar-button.split .sd-toolbar-button__main[data-v-dbdea151],
2040
- .sd-toolbar-button.split .sd-toolbar-button__caret[data-v-dbdea151] {
2039
+ .sd-toolbar-button.split .sd-toolbar-button__main[data-v-22817fa7],
2040
+ .sd-toolbar-button.split .sd-toolbar-button__caret[data-v-22817fa7] {
2041
2041
  display: flex;
2042
2042
  align-items: center;
2043
2043
  justify-content: center;
@@ -2046,12 +2046,12 @@ img[data-v-c95b2073] {
2046
2046
  position: relative;
2047
2047
  z-index: 1;
2048
2048
  }
2049
- .sd-toolbar-button.split .sd-toolbar-button__main[data-v-dbdea151] {
2049
+ .sd-toolbar-button.split .sd-toolbar-button__main[data-v-22817fa7] {
2050
2050
  padding: 0 3px 0 var(--sd-ui-toolbar-item-padding, 5px);
2051
2051
  border-top-left-radius: var(--sd-ui-radius, 6px);
2052
2052
  border-bottom-left-radius: var(--sd-ui-radius, 6px);
2053
2053
  }
2054
- .sd-toolbar-button.split .sd-toolbar-button__caret[data-v-dbdea151] {
2054
+ .sd-toolbar-button.split .sd-toolbar-button__caret[data-v-22817fa7] {
2055
2055
  padding: 0 4px 0 2px;
2056
2056
  border-top-right-radius: var(--sd-ui-radius, 6px);
2057
2057
  border-bottom-right-radius: var(--sd-ui-radius, 6px);
@@ -2060,17 +2060,17 @@ img[data-v-c95b2073] {
2060
2060
  /* Unified hover: hovering anywhere on the split button highlights the whole
2061
2061
  button so it reads as a single grouped item, with a slightly darker tint
2062
2062
  on the half the cursor is actually over. */
2063
- .sd-toolbar-button.split[data-v-dbdea151]:hover {
2063
+ .sd-toolbar-button.split[data-v-22817fa7]:hover {
2064
2064
  background-color: var(--sd-ui-toolbar-button-hover-bg, var(--sd-ui-hover-bg, #dbdbdb));
2065
2065
  }
2066
- .sd-toolbar-button.split .sd-toolbar-button__main[data-v-dbdea151]:hover,
2067
- .sd-toolbar-button.split .sd-toolbar-button__caret[data-v-dbdea151]:hover {
2066
+ .sd-toolbar-button.split .sd-toolbar-button__main[data-v-22817fa7]:hover,
2067
+ .sd-toolbar-button.split .sd-toolbar-button__caret[data-v-22817fa7]:hover {
2068
2068
  background-color: var(--sd-ui-toolbar-button-active-bg, var(--sd-ui-active-bg, #c8d0d8));
2069
2069
  }
2070
2070
 
2071
2071
  /* Subtle divider only appears on hover, hinting at the two affordances
2072
2072
  without making them look like separate buttons at rest. */
2073
- .sd-toolbar-button.split .sd-toolbar-button__caret[data-v-dbdea151]::before {
2073
+ .sd-toolbar-button.split .sd-toolbar-button__caret[data-v-22817fa7]::before {
2074
2074
  content: '';
2075
2075
  position: absolute;
2076
2076
  left: 0;
@@ -2080,46 +2080,46 @@ img[data-v-c95b2073] {
2080
2080
  background-color: transparent;
2081
2081
  transition: background-color 0.15s ease-out;
2082
2082
  }
2083
- .sd-toolbar-button.split:hover .sd-toolbar-button__caret[data-v-dbdea151]::before {
2083
+ .sd-toolbar-button.split:hover .sd-toolbar-button__caret[data-v-22817fa7]::before {
2084
2084
  background-color: var(--sd-ui-border, rgba(71, 72, 74, 0.2));
2085
2085
  }
2086
- .sd-toolbar-button.split.sd-disabled[data-v-dbdea151],
2087
- .sd-toolbar-button.split.sd-disabled[data-v-dbdea151]:hover {
2086
+ .sd-toolbar-button.split.sd-disabled[data-v-22817fa7],
2087
+ .sd-toolbar-button.split.sd-disabled[data-v-22817fa7]:hover {
2088
2088
  background-color: initial;
2089
2089
  }
2090
- .sd-toolbar-button.split.sd-disabled .sd-toolbar-button__main[data-v-dbdea151],
2091
- .sd-toolbar-button.split.sd-disabled .sd-toolbar-button__caret[data-v-dbdea151] {
2090
+ .sd-toolbar-button.split.sd-disabled .sd-toolbar-button__main[data-v-22817fa7],
2091
+ .sd-toolbar-button.split.sd-disabled .sd-toolbar-button__caret[data-v-22817fa7] {
2092
2092
  cursor: default;
2093
2093
  }
2094
- .sd-toolbar-button.split.sd-disabled .sd-toolbar-button__main[data-v-dbdea151]:hover,
2095
- .sd-toolbar-button.split.sd-disabled .sd-toolbar-button__caret[data-v-dbdea151]:hover {
2094
+ .sd-toolbar-button.split.sd-disabled .sd-toolbar-button__main[data-v-22817fa7]:hover,
2095
+ .sd-toolbar-button.split.sd-disabled .sd-toolbar-button__caret[data-v-22817fa7]:hover {
2096
2096
  background-color: initial;
2097
2097
  }
2098
- .sd-toolbar-button.split.sd-disabled .sd-toolbar-button__caret[data-v-dbdea151]::before {
2098
+ .sd-toolbar-button.split.sd-disabled .sd-toolbar-button__caret[data-v-22817fa7]::before {
2099
2099
  background-color: transparent;
2100
2100
  }
2101
- .left[data-v-dbdea151],
2102
- .right[data-v-dbdea151] {
2101
+ .left[data-v-22817fa7],
2102
+ .right[data-v-22817fa7] {
2103
2103
  width: 50%;
2104
2104
  height: 100%;
2105
2105
  background-color: #dbdbdb;
2106
2106
  border-radius: 60%;
2107
2107
  }
2108
- .has-inline-text-input[data-v-dbdea151]:hover {
2108
+ .has-inline-text-input[data-v-22817fa7]:hover {
2109
2109
  cursor: text;
2110
2110
  }
2111
- .sd-disabled[data-v-dbdea151] {
2111
+ .sd-disabled[data-v-22817fa7] {
2112
2112
  cursor: default;
2113
2113
  }
2114
- .sd-disabled[data-v-dbdea151]:hover {
2114
+ .sd-disabled[data-v-22817fa7]:hover {
2115
2115
  cursor: default;
2116
2116
  background-color: initial;
2117
2117
  }
2118
- .sd-disabled .sd-toolbar-icon[data-v-dbdea151],
2119
- .sd-disabled .sd-button-label[data-v-dbdea151] {
2118
+ .sd-disabled .sd-toolbar-icon[data-v-22817fa7],
2119
+ .sd-disabled .sd-button-label[data-v-22817fa7] {
2120
2120
  opacity: 0.35;
2121
2121
  }
2122
- .button-text-input[data-v-dbdea151] {
2122
+ .button-text-input[data-v-22817fa7] {
2123
2123
  color: var(--sd-ui-toolbar-button-text, #47484a);
2124
2124
  border-radius: 4px;
2125
2125
  text-align: center;
@@ -2133,19 +2133,19 @@ img[data-v-c95b2073] {
2133
2133
  border: 1px solid var(--sd-ui-border, #dbdbdb);
2134
2134
  box-sizing: border-box;
2135
2135
  }
2136
- .button-text-input.high-contrast[data-v-dbdea151] {
2136
+ .button-text-input.high-contrast[data-v-22817fa7] {
2137
2137
  background-color: #fff;
2138
2138
  }
2139
- .button-text-input--font-size[data-v-dbdea151] {
2139
+ .button-text-input--font-size[data-v-22817fa7] {
2140
2140
  width: 36px;
2141
2141
  }
2142
- .button-text-input--font-family[data-v-dbdea151] {
2142
+ .button-text-input--font-family[data-v-22817fa7] {
2143
2143
  width: 88px;
2144
2144
  }
2145
- .button-text-input[data-v-dbdea151]::placeholder {
2145
+ .button-text-input[data-v-22817fa7]::placeholder {
2146
2146
  color: var(--sd-ui-toolbar-button-text, #47484a);
2147
2147
  }
2148
- .sd-dropdown-caret[data-v-dbdea151] {
2148
+ .sd-dropdown-caret[data-v-22817fa7] {
2149
2149
  display: inline-flex;
2150
2150
  align-items: center;
2151
2151
  justify-content: center;
@@ -2154,16 +2154,16 @@ img[data-v-c95b2073] {
2154
2154
  width: 10px;
2155
2155
  height: 10px;
2156
2156
  }
2157
- .sd-toolbar-item--doc-mode-compact .sd-button-label[data-v-dbdea151] {
2157
+ .sd-toolbar-item--doc-mode-compact .sd-button-label[data-v-22817fa7] {
2158
2158
  display: none;
2159
2159
  }
2160
- .sd-toolbar-item--doc-mode-compact .sd-toolbar-icon[data-v-dbdea151] {
2160
+ .sd-toolbar-item--doc-mode-compact .sd-toolbar-icon[data-v-22817fa7] {
2161
2161
  margin-right: 5px;
2162
2162
  }
2163
- .sd-toolbar-item--linked-styles-compact[data-v-dbdea151] {
2163
+ .sd-toolbar-item--linked-styles-compact[data-v-22817fa7] {
2164
2164
  width: auto !important;
2165
2165
  }
2166
- .sd-toolbar-item--linked-styles-compact .sd-button-label[data-v-dbdea151] {
2166
+ .sd-toolbar-item--linked-styles-compact .sd-button-label[data-v-22817fa7] {
2167
2167
  display: none;
2168
2168
  }
2169
2169
 
package/dist/superdoc.cjs CHANGED
@@ -7443,9 +7443,10 @@ var useCommentsStore = defineStore("comments", () => {
7443
7443
  */
7444
7444
  const getComment = (id) => {
7445
7445
  if (id === void 0 || id === null) return null;
7446
- const directMatch = commentsList.value.find((c) => c.commentId == id || c.importedId == id || c.trackedChangeAnchorKey == id || c?.trackedChange && buildTrackedChangeImportedPositionId(c.importedId) == id);
7447
- if (directMatch) return directMatch;
7448
- return reviewDirectoryList.value.find((c) => c.commentId == id || c.importedId == id || c.trackedChangeAnchorKey == id || c?.trackedChange && buildTrackedChangeImportedPositionId(c.importedId) == id) || getTrackedChangeCommentByPositionAlias(id);
7446
+ const byPrimaryId = (c) => c.commentId == id;
7447
+ const byAliasId = (c) => c.importedId == id || c.trackedChangeAnchorKey == id || c?.trackedChange && buildTrackedChangeImportedPositionId(c.importedId) == id;
7448
+ const findIn = (list) => list.find(byPrimaryId) ?? list.find(byAliasId);
7449
+ return findIn(commentsList.value) ?? findIn(reviewDirectoryList.value) ?? getTrackedChangeCommentByPositionAlias(id);
7449
7450
  };
7450
7451
  const getThreadParent = (comment) => {
7451
7452
  if (!comment?.parentCommentId) return comment;
@@ -37087,7 +37088,11 @@ var _sfc_main$19 = {
37087
37088
  var ToolbarButtonIcon_default = /*#__PURE__*/ require__plugin_vue_export_helper._plugin_vue_export_helper_default(_sfc_main$19, [["__scopeId", "data-v-d7d79424"]]);
37088
37089
  //#endregion
37089
37090
  //#region src/internal/toolbar/built-in/ToolbarButton.vue
37090
- var _hoisted_1$14 = ["role", "aria-label"];
37091
+ var _hoisted_1$14 = [
37092
+ "role",
37093
+ "aria-label",
37094
+ "aria-disabled"
37095
+ ];
37091
37096
  var _hoisted_2$11 = ["data-item"];
37092
37097
  var _hoisted_3$9 = ["data-item"];
37093
37098
  var _hoisted_4$6 = {
@@ -37278,6 +37283,7 @@ var _sfc_main$18 = {
37278
37283
  style: (0, vue.normalizeStyle)(getStyle.value),
37279
37284
  role: __props.isOverflowItem ? "menuitem" : "button",
37280
37285
  "aria-label": (0, vue.unref)(attributes).ariaLabel,
37286
+ "aria-disabled": (0, vue.unref)(disabled) ? "true" : void 0,
37281
37287
  "data-sd-part": "toolbar-item",
37282
37288
  onClick: handleOuterClick,
37283
37289
  onKeydown: _cache[9] || (_cache[9] = (0, vue.withKeys)(($event) => onEnterKeydown($event), ["enter"])),
@@ -37379,7 +37385,7 @@ var _sfc_main$18 = {
37379
37385
  };
37380
37386
  }
37381
37387
  };
37382
- var ToolbarButton_default = /*#__PURE__*/ require__plugin_vue_export_helper._plugin_vue_export_helper_default(_sfc_main$18, [["__scopeId", "data-v-dbdea151"]]);
37388
+ var ToolbarButton_default = /*#__PURE__*/ require__plugin_vue_export_helper._plugin_vue_export_helper_default(_sfc_main$18, [["__scopeId", "data-v-22817fa7"]]);
37383
37389
  //#endregion
37384
37390
  //#region src/internal/toolbar/built-in/ToolbarSeparator.vue
37385
37391
  var _hoisted_1$13 = {
@@ -42535,7 +42541,7 @@ var BuiltInToolbar = class extends require_eventemitter3.import_eventemitter3.de
42535
42541
  return true;
42536
42542
  }
42537
42543
  if (name === "search") {
42538
- item.setDisabled(false);
42544
+ item.setDisabled(this.superdoc?.uiConfig?.search?.enabled !== true);
42539
42545
  return true;
42540
42546
  }
42541
42547
  if (getBuiltInToolbarItem(name)?.disposition === "host-routed") {
@@ -43277,7 +43283,7 @@ var SuperDoc = class extends require_eventemitter3.import_eventemitter3.default
43277
43283
  this.config.colors = shuffleArray(this.config.colors);
43278
43284
  this.userColorMap = /* @__PURE__ */ new Map();
43279
43285
  this.colorIndex = 0;
43280
- this.version = "2.6.0-next.2";
43286
+ this.version = "2.6.0-next.3";
43281
43287
  this.#log("🦋 [superdoc] Using SuperDoc version:", this.version);
43282
43288
  this.superdocId = config.superdocId || require_uuid.v4();
43283
43289
  this.colors = this.config.colors ?? [];
@@ -7442,9 +7442,10 @@ var useCommentsStore = defineStore("comments", () => {
7442
7442
  */
7443
7443
  const getComment = (id) => {
7444
7444
  if (id === void 0 || id === null) return null;
7445
- const directMatch = commentsList.value.find((c) => c.commentId == id || c.importedId == id || c.trackedChangeAnchorKey == id || c?.trackedChange && buildTrackedChangeImportedPositionId(c.importedId) == id);
7446
- if (directMatch) return directMatch;
7447
- return reviewDirectoryList.value.find((c) => c.commentId == id || c.importedId == id || c.trackedChangeAnchorKey == id || c?.trackedChange && buildTrackedChangeImportedPositionId(c.importedId) == id) || getTrackedChangeCommentByPositionAlias(id);
7445
+ const byPrimaryId = (c) => c.commentId == id;
7446
+ const byAliasId = (c) => c.importedId == id || c.trackedChangeAnchorKey == id || c?.trackedChange && buildTrackedChangeImportedPositionId(c.importedId) == id;
7447
+ const findIn = (list) => list.find(byPrimaryId) ?? list.find(byAliasId);
7448
+ return findIn(commentsList.value) ?? findIn(reviewDirectoryList.value) ?? getTrackedChangeCommentByPositionAlias(id);
7448
7449
  };
7449
7450
  const getThreadParent = (comment) => {
7450
7451
  if (!comment?.parentCommentId) return comment;
@@ -37046,7 +37047,11 @@ var ToolbarButtonIcon_default = /*#__PURE__*/ _plugin_vue_export_helper_default(
37046
37047
  }, [["__scopeId", "data-v-d7d79424"]]);
37047
37048
  //#endregion
37048
37049
  //#region src/internal/toolbar/built-in/ToolbarButton.vue
37049
- var _hoisted_1$14 = ["role", "aria-label"];
37050
+ var _hoisted_1$14 = [
37051
+ "role",
37052
+ "aria-label",
37053
+ "aria-disabled"
37054
+ ];
37050
37055
  var _hoisted_2$11 = ["data-item"];
37051
37056
  var _hoisted_3$9 = ["data-item"];
37052
37057
  var _hoisted_4$6 = {
@@ -37237,6 +37242,7 @@ var ToolbarButton_default = /*#__PURE__*/ _plugin_vue_export_helper_default({
37237
37242
  style: normalizeStyle(getStyle.value),
37238
37243
  role: __props.isOverflowItem ? "menuitem" : "button",
37239
37244
  "aria-label": unref(attributes).ariaLabel,
37245
+ "aria-disabled": unref(disabled) ? "true" : void 0,
37240
37246
  "data-sd-part": "toolbar-item",
37241
37247
  onClick: handleOuterClick,
37242
37248
  onKeydown: _cache[9] || (_cache[9] = withKeys(($event) => onEnterKeydown($event), ["enter"])),
@@ -37337,7 +37343,7 @@ var ToolbarButton_default = /*#__PURE__*/ _plugin_vue_export_helper_default({
37337
37343
  ], 10, _hoisted_2$11)], 46, _hoisted_1$14);
37338
37344
  };
37339
37345
  }
37340
- }, [["__scopeId", "data-v-dbdea151"]]);
37346
+ }, [["__scopeId", "data-v-22817fa7"]]);
37341
37347
  //#endregion
37342
37348
  //#region src/internal/toolbar/built-in/ToolbarSeparator.vue
37343
37349
  var _hoisted_1$13 = {
@@ -42468,7 +42474,7 @@ var BuiltInToolbar = class extends import_eventemitter3.default {
42468
42474
  return true;
42469
42475
  }
42470
42476
  if (name === "search") {
42471
- item.setDisabled(false);
42477
+ item.setDisabled(this.superdoc?.uiConfig?.search?.enabled !== true);
42472
42478
  return true;
42473
42479
  }
42474
42480
  if (getBuiltInToolbarItem(name)?.disposition === "host-routed") {
@@ -43210,7 +43216,7 @@ var SuperDoc = class extends import_eventemitter3.default {
43210
43216
  this.config.colors = shuffleArray(this.config.colors);
43211
43217
  this.userColorMap = /* @__PURE__ */ new Map();
43212
43218
  this.colorIndex = 0;
43213
- this.version = "2.6.0-next.2";
43219
+ this.version = "2.6.0-next.3";
43214
43220
  this.#log("🦋 [superdoc] Using SuperDoc version:", this.version);
43215
43221
  this.superdocId = config.superdocId || v4();
43216
43222
  this.colors = this.config.colors ?? [];