superdoc 2.6.0-next.8 → 2.6.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.
@@ -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.8",
22
+ superdocVersion: "2.6.0",
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.8",
21
+ superdocVersion: "2.6.0",
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
@@ -24,5 +24,19 @@ export type HeaderFooterEffectiveRefResult = {
24
24
  matchedSectionIndex: number;
25
25
  matchedVariant: HeaderFooterVariant;
26
26
  };
27
+ /**
28
+ * Ordered, snapshot-backed resolver for repeated header/footer lookups.
29
+ * Runtime section updates must go through `updateSection` so cached inherited
30
+ * results cannot outlive a reference change.
31
+ */
32
+ export declare class HeaderFooterResolutionIndex {
33
+ #private;
34
+ constructor(sections: readonly HeaderFooterResolutionSection[]);
35
+ get revision(): number;
36
+ hasAny(kind: HeaderFooterKind): boolean;
37
+ resolve(sectionIndex: number, kind: HeaderFooterKind, variant: HeaderFooterVariant): HeaderFooterEffectiveRefResult | null;
38
+ updateSection(section: HeaderFooterResolutionSection): boolean;
39
+ }
40
+ export declare function createHeaderFooterResolutionIndex(sections: readonly HeaderFooterResolutionSection[]): HeaderFooterResolutionIndex;
27
41
  export declare function selectHeaderFooterVariantForPage({ documentPageNumber, sectionPageNumber, titlePg, alternateHeaders, }: HeaderFooterVariantSelectionInput): HeaderFooterVariant | null;
28
42
  export declare function resolveEffectiveHeaderFooterRef({ sections, sectionIndex, kind, variant, }: HeaderFooterEffectiveRefInput): HeaderFooterEffectiveRefResult | null;
@@ -10,7 +10,7 @@ export type { BaseDirection, WritingMode, SectionDirectionContext, TableDirectio
10
10
  export { getParagraphInlineDirection, getTableVisualDirection } from './direction-context.js';
11
11
  export { OOXML_PCT_DIVISOR, resolveTableWidthAttr, type TableWidthAttr, type TableColumnSpec, } from './engines/tables.js';
12
12
  export { effectiveTableCellSpacing } from './table-cell-spacing.js';
13
- export { selectHeaderFooterVariantForPage, resolveEffectiveHeaderFooterRef, type HeaderFooterKind, type HeaderFooterVariant, type HeaderFooterSectionRefs, type HeaderFooterResolutionSection, type HeaderFooterVariantSelectionInput, type HeaderFooterEffectiveRefInput, type HeaderFooterEffectiveRefResult, } from './header-footer-resolution.js';
13
+ export { createHeaderFooterResolutionIndex, selectHeaderFooterVariantForPage, resolveEffectiveHeaderFooterRef, type HeaderFooterResolutionIndex, type HeaderFooterKind, type HeaderFooterVariant, type HeaderFooterSectionRefs, type HeaderFooterResolutionSection, type HeaderFooterVariantSelectionInput, type HeaderFooterEffectiveRefInput, type HeaderFooterEffectiveRefResult, } from './header-footer-resolution.js';
14
14
  export { rescaleColumnWidths } from './table-column-rescale.js';
15
15
  export { getCellSpacingPx } from './cell-spacing.js';
16
16
  export { normalizeZIndex, coerceRelativeHeight, isPlainObject, OOXML_Z_INDEX_BASE, resolveFloatingZIndex, getFragmentZIndex, } from './ooxml-z-index.js';
@@ -538,6 +538,8 @@ export type ImageRun = {
538
538
  placeholder?: RenderPlaceholder;
539
539
  /** DrawingML docPr/@id of the picture (used to target the Document API for interactive resize). */
540
540
  imageId?: string;
541
+ /** Opaque Document API identity when projection can resolve it without a catalog read. */
542
+ imageMutationId?: string;
541
543
  /** Clip-path value for cropped images. */
542
544
  clipPath?: string;
543
545
  /** DrawingML picture frame; paint-only and excluded from layout sizing. */
@@ -932,6 +934,8 @@ export type ImageBlock = {
932
934
  placeholder?: RenderPlaceholder;
933
935
  /** DrawingML docPr/@id of the picture (used to target the Document API for interactive resize). */
934
936
  imageId?: string;
937
+ /** Opaque Document API identity when projection can resolve it without a catalog read. */
938
+ imageMutationId?: string;
935
939
  objectFit?: 'contain' | 'cover' | 'fill' | 'scale-down';
936
940
  display?: 'inline' | 'block';
937
941
  padding?: BoxSpacing;
@@ -46,6 +46,10 @@ export type MeasureCacheStats = {
46
46
  */
47
47
  memorySizeEstimate: number;
48
48
  };
49
+ declare const preparedMeasureCacheKeyBrand: unique symbol;
50
+ export type PreparedMeasureCacheKey = string & {
51
+ readonly [preparedMeasureCacheKeyBrand]: true;
52
+ };
49
53
  /**
50
54
  * LRU-enhanced MeasureCache
51
55
  *
@@ -77,6 +81,12 @@ export declare class MeasureCache<T> {
77
81
  * @returns The cached value or undefined
78
82
  */
79
83
  get(block: FlowBlock | null | undefined, width: number, height: number, fontSignature?: string): T | undefined;
84
+ /**
85
+ * Compose the complete content, constraint, and font key once for a cache
86
+ * read followed by an insertion in the same measurement transaction.
87
+ */
88
+ prepareKey(block: FlowBlock | null | undefined, width: number, height: number, fontSignature?: string): PreparedMeasureCacheKey | undefined;
89
+ getPrepared(key: PreparedMeasureCacheKey | undefined): T | undefined;
80
90
  /**
81
91
  * Store a measure in the cache for the given block and dimensions.
82
92
  * Silently returns if the block is null/undefined or lacks an ID.
@@ -87,6 +97,7 @@ export declare class MeasureCache<T> {
87
97
  * @param value - The value to cache
88
98
  */
89
99
  set(block: FlowBlock | null | undefined, width: number, height: number, value: T, fontSignature?: string): void;
100
+ setPrepared(key: PreparedMeasureCacheKey | undefined, blockId: string | undefined, value: T): void;
90
101
  /**
91
102
  * Invalidates cached measurements for specific block IDs.
92
103
  * Removes all cache entries whose keys start with any of the provided block IDs.
@@ -144,3 +155,4 @@ export declare class MeasureCache<T> {
144
155
  */
145
156
  private composeKey;
146
157
  }
158
+ export {};
@@ -95,6 +95,10 @@ export type IncrementalLayoutBridgeTiming = {
95
95
  /** Union wall time spent inside caller-owned measure callbacks across body and furniture. */
96
96
  measureCallbackWallMs: number;
97
97
  measureCacheLookupMs: number;
98
+ /** Body-measure cache insertion wall time, including content-key composition. */
99
+ measureCacheWriteMs: number;
100
+ /** Previous-measure content-adoption lookup/build wall time. */
101
+ measureContentAdoptionMs: number;
98
102
  measureActualMs: number;
99
103
  headerFooterPreLayoutMs: number;
100
104
  headerPreLayoutMs: number;
@@ -104,6 +108,14 @@ export type IncrementalLayoutBridgeTiming = {
104
108
  layoutDocumentMs: number;
105
109
  /** Initial body-layout wrapper work outside `layoutDocument` (proof, slice, convergence, splice). */
106
110
  layoutReuseOrchestrationMs: number;
111
+ /** Initial pagination invocation including bridge reuse orchestration. */
112
+ paginationInitialMs: number;
113
+ /** Body page-token convergence pagination only. */
114
+ paginationPageTokenMs: number;
115
+ /** Footnote convergence pagination only; overlaps `footnoteMs`. */
116
+ paginationFootnoteMs: number;
117
+ /** All initial, page-token, and footnote pagination invocation wall time. */
118
+ paginationTotalMs: number;
107
119
  paginationMs: number;
108
120
  pageTokenSetupMs: number;
109
121
  pageTokenTotalMs: number;
@@ -116,8 +128,16 @@ export type IncrementalLayoutBridgeTiming = {
116
128
  unattributedMs: number;
117
129
  counters: {
118
130
  blocksRead: number;
131
+ blocksByKind?: Record<FlowBlock['kind'], number>;
132
+ bodyBlocksMeasuredByKind: Record<FlowBlock['kind'], number>;
119
133
  cacheHits: number;
120
134
  cacheMisses: number;
135
+ bodyMeasureCacheReads: number;
136
+ bodyMeasureCacheWrites: number;
137
+ bodyMeasureCacheKeyComputations: number;
138
+ measureContentSignatureComputations: number;
139
+ fontSignaturePresent: number;
140
+ fontSignatureChanged: number;
121
141
  measuresAdopted: number;
122
142
  pagesPaginated: number | null;
123
143
  pagesSplicedByReuse: number;
package/dist/style.css CHANGED
@@ -1056,7 +1056,7 @@ img[data-v-c95b2073] {
1056
1056
  font-size: 11px;
1057
1057
  }
1058
1058
 
1059
- .comments-dialog[data-v-f4c743f2] {
1059
+ .comments-dialog[data-v-50d8ea52] {
1060
1060
  display: flex;
1061
1061
  flex-direction: column;
1062
1062
  padding: var(--sd-ui-comments-card-padding, 16px);
@@ -1075,73 +1075,73 @@ img[data-v-c95b2073] {
1075
1075
  overflow-wrap: break-word;
1076
1076
  word-break: break-word;
1077
1077
  }
1078
- .comments-dialog[data-v-f4c743f2]:not(.is-active) {
1078
+ .comments-dialog[data-v-50d8ea52]:not(.is-active) {
1079
1079
  cursor: pointer;
1080
1080
  }
1081
- .comments-dialog[data-v-f4c743f2]:not(.is-active):not(.is-resolved):hover {
1081
+ .comments-dialog[data-v-50d8ea52]:not(.is-active):not(.is-resolved):hover {
1082
1082
  background-color: var(--sd-ui-comments-card-hover-bg, #f3f6fd);
1083
1083
  }
1084
- .comments-dialog[data-v-f4c743f2]:not(.is-resolved):hover .overflow-menu {
1084
+ .comments-dialog[data-v-50d8ea52]:not(.is-resolved):hover .overflow-menu {
1085
1085
  opacity: 1;
1086
1086
  pointer-events: auto;
1087
1087
  }
1088
- .comments-dialog.is-active[data-v-f4c743f2] {
1088
+ .comments-dialog.is-active[data-v-50d8ea52] {
1089
1089
  background-color: var(--sd-ui-comments-card-active-bg, #ffffff);
1090
1090
  border-color: var(--sd-ui-comments-card-active-border, #e0e0e0);
1091
1091
  box-shadow: var(--sd-ui-comments-card-shadow, 0px 4px 12px 0px rgba(50, 50, 50, 0.15));
1092
1092
  z-index: 10;
1093
1093
  }
1094
- .comments-dialog.is-resolved[data-v-f4c743f2] {
1094
+ .comments-dialog.is-resolved[data-v-50d8ea52] {
1095
1095
  background-color: var(--sd-ui-comments-card-resolved-bg, #f0f0f0);
1096
1096
  }
1097
- .comment-separator[data-v-f4c743f2] {
1097
+ .comment-separator[data-v-50d8ea52] {
1098
1098
  background-color: var(--sd-ui-comments-separator, #e0e0e0);
1099
1099
  height: 1px;
1100
1100
  width: 100%;
1101
1101
  margin: 10px 0;
1102
1102
  }
1103
- .comment[data-v-f4c743f2] {
1103
+ .comment[data-v-50d8ea52] {
1104
1104
  font-size: var(--sd-ui-comments-body-size, 14px);
1105
1105
  line-height: 1.5;
1106
1106
  color: var(--sd-ui-comments-body-text, #212121);
1107
1107
  margin: 4px 0 0 0;
1108
1108
  }
1109
- .comment[data-v-f4c743f2] p {
1109
+ .comment[data-v-50d8ea52] p {
1110
1110
  margin: 0;
1111
1111
  }
1112
- .tracked-change[data-v-f4c743f2] {
1112
+ .tracked-change[data-v-50d8ea52] {
1113
1113
  font-size: var(--sd-ui-comments-body-size, 14px);
1114
1114
  line-height: 1.5;
1115
1115
  color: var(--sd-ui-comments-body-text, #212121);
1116
1116
  margin: 4px 0 0 0;
1117
1117
  }
1118
- .change-type[data-v-f4c743f2] {
1118
+ .change-type[data-v-50d8ea52] {
1119
1119
  color: var(--sd-ui-comments-body-text, #212121);
1120
1120
  }
1121
- .tracked-change-text[data-v-f4c743f2] {
1121
+ .tracked-change-text[data-v-50d8ea52] {
1122
1122
  color: var(--sd-ui-comments-body-text, #212121);
1123
1123
  }
1124
- .tracked-change-text.is-deleted[data-v-f4c743f2] {
1124
+ .tracked-change-text.is-deleted[data-v-50d8ea52] {
1125
1125
  color: var(--sd-ui-comments-delete-text, #cb0e47);
1126
1126
  }
1127
- .tracked-change-text.is-inserted[data-v-f4c743f2] {
1127
+ .tracked-change-text.is-inserted[data-v-50d8ea52] {
1128
1128
  color: var(--sd-ui-comments-insert-text, #1f6feb);
1129
1129
  font-weight: 500;
1130
1130
  }
1131
- .tracked-change[data-track-change-semantic-color-key='move-from'] .tracked-change-text.is-deleted[data-v-f4c743f2] {
1131
+ .tracked-change[data-track-change-semantic-color-key='move-from'] .tracked-change-text.is-deleted[data-v-50d8ea52] {
1132
1132
  color: var(--sd-ui-comments-move-from-text, #00853d);
1133
1133
  }
1134
- .tracked-change[data-track-change-semantic-color-key='move-to'] .tracked-change-text.is-inserted[data-v-f4c743f2] {
1134
+ .tracked-change[data-track-change-semantic-color-key='move-to'] .tracked-change-text.is-inserted[data-v-50d8ea52] {
1135
1135
  color: var(--sd-ui-comments-move-to-text, #00853d);
1136
1136
  }
1137
- .tracked-change-detail-lines[data-v-f4c743f2] {
1137
+ .tracked-change-detail-lines[data-v-50d8ea52] {
1138
1138
  margin-top: 4px;
1139
1139
  }
1140
- .tracked-change-detail-line[data-v-f4c743f2] {
1140
+ .tracked-change-detail-line[data-v-50d8ea52] {
1141
1141
  font-size: 12px;
1142
1142
  line-height: 1.4;
1143
1143
  }
1144
- .tracked-change-image-preview[data-v-f4c743f2] {
1144
+ .tracked-change-image-preview[data-v-50d8ea52] {
1145
1145
  display: inline-flex;
1146
1146
  align-items: center;
1147
1147
  justify-content: center;
@@ -1152,7 +1152,7 @@ img[data-v-c95b2073] {
1152
1152
  max-width: 96px;
1153
1153
  max-height: 96px;
1154
1154
  }
1155
- .tracked-change-image-preview__image[data-v-f4c743f2] {
1155
+ .tracked-change-image-preview__image[data-v-50d8ea52] {
1156
1156
  display: block;
1157
1157
  width: auto;
1158
1158
  height: auto;
@@ -1162,7 +1162,7 @@ img[data-v-c95b2073] {
1162
1162
  }
1163
1163
 
1164
1164
  /* ── Failed tracked-change decision alert (SD-3772 §6) ── */
1165
- .tracked-change-decision-alert[data-v-f4c743f2] {
1165
+ .tracked-change-decision-alert[data-v-50d8ea52] {
1166
1166
  display: flex;
1167
1167
  align-items: center;
1168
1168
  justify-content: space-between;
@@ -1176,12 +1176,12 @@ img[data-v-c95b2073] {
1176
1176
  font-size: var(--sd-ui-comments-body-size, 14px);
1177
1177
  line-height: 1.4;
1178
1178
  }
1179
- .tracked-change-decision-alert__retry[data-v-f4c743f2] {
1179
+ .tracked-change-decision-alert__retry[data-v-50d8ea52] {
1180
1180
  flex-shrink: 0;
1181
1181
  }
1182
1182
 
1183
1183
  /* ── Resolved badge ── */
1184
- .resolved-badge[data-v-f4c743f2] {
1184
+ .resolved-badge[data-v-50d8ea52] {
1185
1185
  display: inline-flex;
1186
1186
  align-items: center;
1187
1187
  gap: 4px;
@@ -1190,33 +1190,33 @@ img[data-v-c95b2073] {
1190
1190
  color: var(--sd-ui-comments-resolved-text, #00853d);
1191
1191
  margin-bottom: 4px;
1192
1192
  }
1193
- .resolved-badge__icon[data-v-f4c743f2] {
1193
+ .resolved-badge__icon[data-v-50d8ea52] {
1194
1194
  display: inline-flex;
1195
1195
  width: 12px;
1196
1196
  height: 12px;
1197
1197
  }
1198
- .resolved-badge__icon[data-v-f4c743f2] svg {
1198
+ .resolved-badge__icon[data-v-50d8ea52] svg {
1199
1199
  width: 100%;
1200
1200
  height: 100%;
1201
1201
  fill: currentColor;
1202
1202
  }
1203
1203
 
1204
1204
  /* ── Text truncation ── */
1205
- .comment.is-truncated[data-v-f4c743f2],
1206
- .tracked-change.is-truncated[data-v-f4c743f2] {
1205
+ .comment.is-truncated[data-v-50d8ea52],
1206
+ .tracked-change.is-truncated[data-v-50d8ea52] {
1207
1207
  display: -webkit-box;
1208
1208
  -webkit-line-clamp: 3;
1209
1209
  -webkit-box-orient: vertical;
1210
1210
  max-height: 4.5em;
1211
1211
  overflow: hidden;
1212
1212
  }
1213
- .comment.is-scrollable[data-v-f4c743f2],
1214
- .tracked-change.is-scrollable[data-v-f4c743f2] {
1213
+ .comment.is-scrollable[data-v-50d8ea52],
1214
+ .tracked-change.is-scrollable[data-v-50d8ea52] {
1215
1215
  max-height: 220px;
1216
1216
  overflow-y: auto;
1217
1217
  padding-right: 4px;
1218
1218
  }
1219
- .show-more-toggle[data-v-f4c743f2] {
1219
+ .show-more-toggle[data-v-50d8ea52] {
1220
1220
  font-size: 12px;
1221
1221
  color: var(--sd-ui-action, #1355ff);
1222
1222
  cursor: pointer;
@@ -1224,12 +1224,12 @@ img[data-v-c95b2073] {
1224
1224
  margin-top: 4px;
1225
1225
  user-select: none;
1226
1226
  }
1227
- .show-more-toggle[data-v-f4c743f2]:hover {
1227
+ .show-more-toggle[data-v-50d8ea52]:hover {
1228
1228
  text-decoration: underline;
1229
1229
  }
1230
1230
 
1231
1231
  /* ── Thread collapse ── */
1232
- .collapsed-replies[data-v-f4c743f2] {
1232
+ .collapsed-replies[data-v-50d8ea52] {
1233
1233
  display: flex;
1234
1234
  align-items: center;
1235
1235
  gap: 6px;
@@ -1240,24 +1240,24 @@ img[data-v-c95b2073] {
1240
1240
  cursor: pointer;
1241
1241
  user-select: none;
1242
1242
  }
1243
- .collapsed-replies[data-v-f4c743f2]:hover {
1243
+ .collapsed-replies[data-v-50d8ea52]:hover {
1244
1244
  text-decoration: underline;
1245
1245
  }
1246
- .collapsed-avatars[data-v-f4c743f2] {
1246
+ .collapsed-avatars[data-v-50d8ea52] {
1247
1247
  display: flex;
1248
1248
  }
1249
- .collapsed-avatars .mini-avatar[data-v-f4c743f2] {
1249
+ .collapsed-avatars .mini-avatar[data-v-50d8ea52] {
1250
1250
  --sd-comment-avatar-size: 20px;
1251
1251
  --sd-comment-avatar-font-size: 8px;
1252
1252
  margin-left: -4px;
1253
1253
  border: 2px solid var(--sd-ui-comments-card-active-bg, #ffffff);
1254
1254
  }
1255
- .collapsed-avatars .mini-avatar[data-v-f4c743f2]:first-child {
1255
+ .collapsed-avatars .mini-avatar[data-v-50d8ea52]:first-child {
1256
1256
  margin-left: 0;
1257
1257
  }
1258
1258
 
1259
1259
  /* ── New comment input ── */
1260
- .new-comment-input-wrapper[data-v-f4c743f2] {
1260
+ .new-comment-input-wrapper[data-v-50d8ea52] {
1261
1261
  border: 1.5px solid var(--sd-ui-comments-input-border, #dbdbdb);
1262
1262
  border-radius: 12px;
1263
1263
  padding: 8.5px 10.5px;
@@ -1266,17 +1266,17 @@ img[data-v-c95b2073] {
1266
1266
  max-height: 150px;
1267
1267
  overflow: visible;
1268
1268
  }
1269
- .new-comment-input-wrapper[data-v-f4c743f2]:focus-within {
1269
+ .new-comment-input-wrapper[data-v-50d8ea52]:focus-within {
1270
1270
  border-color: var(--sd-ui-comments-input-focus-border, #4f7cff);
1271
1271
  box-shadow: 0 0 0 2px rgba(79, 124, 255, 0.16);
1272
1272
  }
1273
- .new-comment-input-wrapper[data-v-f4c743f2] .comment-entry {
1273
+ .new-comment-input-wrapper[data-v-50d8ea52] .comment-entry {
1274
1274
  border-radius: 0;
1275
1275
  }
1276
- .new-comment-input-wrapper[data-v-f4c743f2] .input-section {
1276
+ .new-comment-input-wrapper[data-v-50d8ea52] .input-section {
1277
1277
  margin: 0;
1278
1278
  }
1279
- .new-comment-input-wrapper[data-v-f4c743f2] .superdoc-field {
1279
+ .new-comment-input-wrapper[data-v-50d8ea52] .superdoc-field {
1280
1280
  font-size: 14px;
1281
1281
  line-height: 20px;
1282
1282
  border: none;
@@ -1287,18 +1287,18 @@ img[data-v-c95b2073] {
1287
1287
  max-height: 132px;
1288
1288
  resize: none;
1289
1289
  }
1290
- .new-comment-input-wrapper[data-v-f4c743f2] .superdoc-field:focus,
1291
- .new-comment-input-wrapper[data-v-f4c743f2] .superdoc-field:active {
1290
+ .new-comment-input-wrapper[data-v-50d8ea52] .superdoc-field:focus,
1291
+ .new-comment-input-wrapper[data-v-50d8ea52] .superdoc-field:active {
1292
1292
  border: none;
1293
1293
  box-shadow: none;
1294
1294
  outline: none;
1295
1295
  }
1296
- .new-comment-input-wrapper[data-v-f4c743f2] .sd-editor-placeholder::before {
1296
+ .new-comment-input-wrapper[data-v-50d8ea52] .sd-editor-placeholder::before {
1297
1297
  content: 'Comment or add others with @';
1298
1298
  }
1299
1299
 
1300
1300
  /* ── Reply pill & expanded input ── */
1301
- .reply-pill[data-v-f4c743f2] {
1301
+ .reply-pill[data-v-50d8ea52] {
1302
1302
  width: 100%;
1303
1303
  padding: 8.5px 10.5px;
1304
1304
  border: 1.5px solid transparent;
@@ -1312,16 +1312,16 @@ img[data-v-c95b2073] {
1312
1312
  cursor: text;
1313
1313
  transition: background 150ms ease;
1314
1314
  }
1315
- .reply-pill[data-v-f4c743f2]:hover {
1315
+ .reply-pill[data-v-50d8ea52]:hover {
1316
1316
  background: var(--sd-color-gray-200, #f2f2f2);
1317
1317
  }
1318
- .reply-pill[data-v-f4c743f2]:disabled {
1318
+ .reply-pill[data-v-50d8ea52]:disabled {
1319
1319
  cursor: not-allowed;
1320
1320
  }
1321
- .reply-expanded[data-v-f4c743f2] {
1321
+ .reply-expanded[data-v-50d8ea52] {
1322
1322
  margin-top: 10px;
1323
1323
  }
1324
- .reply-input-wrapper[data-v-f4c743f2] {
1324
+ .reply-input-wrapper[data-v-50d8ea52] {
1325
1325
  border: 1.5px solid var(--sd-ui-comments-input-border, #dbdbdb);
1326
1326
  border-radius: 12px;
1327
1327
  padding: 8.5px 10.5px;
@@ -1329,17 +1329,17 @@ img[data-v-c95b2073] {
1329
1329
  max-height: 150px;
1330
1330
  overflow: visible;
1331
1331
  }
1332
- .reply-input-wrapper[data-v-f4c743f2]:focus-within {
1332
+ .reply-input-wrapper[data-v-50d8ea52]:focus-within {
1333
1333
  border-color: var(--sd-ui-comments-input-focus-border, #4f7cff);
1334
1334
  box-shadow: 0 0 0 2px rgba(79, 124, 255, 0.16);
1335
1335
  }
1336
- .reply-input-wrapper[data-v-f4c743f2] .comment-entry {
1336
+ .reply-input-wrapper[data-v-50d8ea52] .comment-entry {
1337
1337
  border-radius: 0;
1338
1338
  }
1339
- .reply-input-wrapper[data-v-f4c743f2] .input-section {
1339
+ .reply-input-wrapper[data-v-50d8ea52] .input-section {
1340
1340
  margin: 0;
1341
1341
  }
1342
- .reply-input-wrapper[data-v-f4c743f2] .superdoc-field {
1342
+ .reply-input-wrapper[data-v-50d8ea52] .superdoc-field {
1343
1343
  font-size: 14px;
1344
1344
  line-height: 20px;
1345
1345
  border: none;
@@ -1350,23 +1350,23 @@ img[data-v-c95b2073] {
1350
1350
  max-height: 132px;
1351
1351
  resize: none;
1352
1352
  }
1353
- .reply-input-wrapper[data-v-f4c743f2] .superdoc-field:focus,
1354
- .reply-input-wrapper[data-v-f4c743f2] .superdoc-field:active {
1353
+ .reply-input-wrapper[data-v-50d8ea52] .superdoc-field:focus,
1354
+ .reply-input-wrapper[data-v-50d8ea52] .superdoc-field:active {
1355
1355
  border: none;
1356
1356
  box-shadow: none;
1357
1357
  outline: none;
1358
1358
  }
1359
- .reply-input-wrapper[data-v-f4c743f2] .sd-editor-placeholder::before {
1359
+ .reply-input-wrapper[data-v-50d8ea52] .sd-editor-placeholder::before {
1360
1360
  content: 'Reply or add others with @';
1361
1361
  }
1362
- .reply-actions[data-v-f4c743f2] {
1362
+ .reply-actions[data-v-50d8ea52] {
1363
1363
  display: flex;
1364
1364
  justify-content: flex-end;
1365
1365
  align-items: center;
1366
1366
  gap: 16px;
1367
1367
  margin-top: 8px;
1368
1368
  }
1369
- .reply-btn-cancel[data-v-f4c743f2] {
1369
+ .reply-btn-cancel[data-v-50d8ea52] {
1370
1370
  background: none;
1371
1371
  border: none;
1372
1372
  font-size: 13px;
@@ -1377,10 +1377,10 @@ img[data-v-c95b2073] {
1377
1377
  font-family: inherit;
1378
1378
  transition: color 150ms;
1379
1379
  }
1380
- .reply-btn-cancel[data-v-f4c743f2]:hover {
1380
+ .reply-btn-cancel[data-v-50d8ea52]:hover {
1381
1381
  color: var(--sd-ui-text, #212121);
1382
1382
  }
1383
- .reply-btn-primary[data-v-f4c743f2] {
1383
+ .reply-btn-primary[data-v-50d8ea52] {
1384
1384
  background: var(--sd-ui-action, #1355ff);
1385
1385
  border: none;
1386
1386
  font-size: 13px;
@@ -1392,19 +1392,19 @@ img[data-v-c95b2073] {
1392
1392
  font-family: inherit;
1393
1393
  transition: background 150ms;
1394
1394
  }
1395
- .reply-btn-primary[data-v-f4c743f2]:hover {
1395
+ .reply-btn-primary[data-v-50d8ea52]:hover {
1396
1396
  background: var(--sd-ui-action-hover, #0f44cc);
1397
1397
  }
1398
- .reply-btn-primary.sd-is-disabled[data-v-f4c743f2] {
1398
+ .reply-btn-primary.sd-is-disabled[data-v-50d8ea52] {
1399
1399
  background: var(--sd-color-gray-400, #dbdbdb);
1400
1400
  color: var(--sd-color-gray-600, #888888);
1401
1401
  cursor: default;
1402
1402
  pointer-events: none;
1403
1403
  }
1404
- .existing-internal-input[data-v-f4c743f2] {
1404
+ .existing-internal-input[data-v-50d8ea52] {
1405
1405
  margin-bottom: 10px;
1406
1406
  }
1407
- .sd-internal-dropdown[data-v-f4c743f2] {
1407
+ .sd-internal-dropdown[data-v-50d8ea52] {
1408
1408
  display: inline-block;
1409
1409
  }
1410
1410