superdoc 2.4.0 → 2.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/README.md +12 -90
  2. package/dist/chunks/{create-super-doc-ui-CqGmoMMA.cjs → create-super-doc-ui-Bom7oDPv.cjs} +194 -29
  3. package/dist/chunks/{create-super-doc-ui-CmOSA_lN.es.js → create-super-doc-ui-DbzVC0rr.es.js} +194 -29
  4. package/dist/chunks/{eventemitter3-DEIiXiH2.es.js → eventemitter3-CMOjDs74.es.js} +1 -1
  5. package/dist/chunks/{eventemitter3-C_TAnXOl.cjs → eventemitter3-D38u8ta_.cjs} +1 -1
  6. package/dist/chunks/{jszip-D8mAFF-r.cjs → jszip-RC64TPzL.cjs} +1 -1
  7. package/dist/chunks/{jszip-BzJ3CyxR.es.js → jszip-VxCFV9YS.es.js} +1 -1
  8. package/dist/chunks/{rolldown-runtime-0pSA04fp.es.js → rolldown-runtime-B5TtN50X.es.js} +1 -1
  9. package/dist/chunks/{rolldown-runtime-74VwNCz7.cjs → rolldown-runtime-DtsSbkrh.cjs} +1 -1
  10. package/dist/collaboration-upgrade-engine.cjs +1 -1
  11. package/dist/collaboration-upgrade-engine.es.js +1 -1
  12. package/dist/document-api/src/types/track-changes.types.d.ts +17 -0
  13. package/dist/layout-engine/contracts/src/graphic-placement.d.ts +35 -6
  14. package/dist/layout-engine/contracts/src/index.d.ts +296 -13
  15. package/dist/layout-engine/contracts/src/resolved-layout.d.ts +5 -0
  16. package/dist/layout-engine/dom-contract/src/class-names.d.ts +2 -0
  17. package/dist/layout-engine/layout-bridge/src/footnote-scorer.d.ts +1 -1
  18. package/dist/layout-engine/layout-bridge/src/hydrateTableTextboxMeasures.d.ts +9 -0
  19. package/dist/layout-engine/layout-bridge/src/incrementalLayout.d.ts +40 -12
  20. package/dist/layout-engine/layout-bridge/src/index.d.ts +3 -2
  21. package/dist/layout-engine/layout-bridge/src/layoutHeaderFooter.d.ts +10 -7
  22. package/dist/layout-engine/layout-bridge/src/remeasure.d.ts +2 -2
  23. package/dist/layout-engine/layout-engine/src/anchors.d.ts +4 -0
  24. package/dist/layout-engine/layout-engine/src/execution.d.ts +21 -0
  25. package/dist/layout-engine/layout-engine/src/floating-objects.d.ts +15 -2
  26. package/dist/layout-engine/layout-engine/src/floating-table-anchor.d.ts +2 -0
  27. package/dist/layout-engine/layout-engine/src/footnote-anchor-index.d.ts +17 -0
  28. package/dist/layout-engine/layout-engine/src/index.d.ts +13 -10
  29. package/dist/layout-engine/layout-engine/src/inline-drawing-alignment.d.ts +9 -0
  30. package/dist/layout-engine/layout-engine/src/layout-drawing.d.ts +3 -3
  31. package/dist/layout-engine/layout-engine/src/layout-paragraph.d.ts +2 -2
  32. package/dist/layout-engine/layout-engine/src/layout-textbox.d.ts +3 -3
  33. package/dist/layout-engine/layout-engine/src/pageNumbering.d.ts +3 -41
  34. package/dist/layout-engine/layout-engine/src/paginator.d.ts +7 -2
  35. package/dist/layout-engine/layout-engine/src/resolvePageTokens.d.ts +2 -0
  36. package/dist/layout-engine/layout-engine/src/section-breaks.d.ts +1 -0
  37. package/dist/layout-engine/layout-engine/src/section-props.d.ts +5 -0
  38. package/dist/layout-engine/painters/dom/src/chart-renderer.d.ts +3 -3
  39. package/dist/layout-engine/painters/dom/src/images/image-outline.d.ts +7 -0
  40. package/dist/layout-engine/painters/dom/src/images/render-placeholder.d.ts +12 -0
  41. package/dist/layout-engine/painters/dom/src/renderer.d.ts +54 -0
  42. package/dist/layout-engine/painters/dom/src/runs/text-effects.d.ts +30 -0
  43. package/dist/layout-engine/painters/dom/src/runs/text-run.d.ts +6 -4
  44. package/dist/layout-engine/painters/dom/src/shapes/preset-text-warp-data.d.ts +32 -0
  45. package/dist/layout-engine/painters/dom/src/shapes/wordart-warp.d.ts +39 -0
  46. package/dist/layout-engine/painters/dom/src/table/border-utils.d.ts +20 -27
  47. package/dist/layout-engine/painters/dom/src/table/renderTableFragment.d.ts +1 -1
  48. package/dist/layout-engine/style-engine/src/ooxml/word-style-model/parse-theme.d.ts +7 -0
  49. package/dist/public/ui-react.cjs +1 -1
  50. package/dist/public/ui-react.es.js +1 -1
  51. package/dist/public/ui.cjs +1 -1
  52. package/dist/public/ui.es.js +1 -1
  53. package/dist/style.css +87 -87
  54. package/dist/style.layered.css +87 -87
  55. package/dist/superdoc/src/core/config/normalize-ui-config.d.ts +5 -0
  56. package/dist/superdoc/src/core/types/index.d.ts +24 -0
  57. package/dist/superdoc.cjs +88 -79
  58. package/dist/superdoc.es.js +88 -79
  59. package/dist-cdn/style.layered.css +1 -1
  60. package/dist-cdn/superdoc.min.css +1 -1
  61. package/dist-cdn/superdoc.min.js +37 -37
  62. package/package.json +2 -6
  63. package/AGENTS.md +0 -337
@@ -1014,7 +1014,7 @@ img[data-v-c95b2073] {
1014
1014
  box-shadow: 0 0 0 2px rgba(79, 124, 255, 0.16);
1015
1015
  }
1016
1016
 
1017
- .comments-dialog[data-v-0277e53b] {
1017
+ .comments-dialog[data-v-fd214e1f] {
1018
1018
  display: flex;
1019
1019
  flex-direction: column;
1020
1020
  padding: var(--sd-ui-comments-card-padding, 16px);
@@ -1033,73 +1033,73 @@ img[data-v-c95b2073] {
1033
1033
  overflow-wrap: break-word;
1034
1034
  word-break: break-word;
1035
1035
  }
1036
- .comments-dialog[data-v-0277e53b]:not(.is-active) {
1036
+ .comments-dialog[data-v-fd214e1f]:not(.is-active) {
1037
1037
  cursor: pointer;
1038
1038
  }
1039
- .comments-dialog[data-v-0277e53b]:not(.is-active):not(.is-resolved):hover {
1039
+ .comments-dialog[data-v-fd214e1f]:not(.is-active):not(.is-resolved):hover {
1040
1040
  background-color: var(--sd-ui-comments-card-hover-bg, #f3f6fd);
1041
1041
  }
1042
- .comments-dialog[data-v-0277e53b]:not(.is-resolved):hover .overflow-menu {
1042
+ .comments-dialog[data-v-fd214e1f]:not(.is-resolved):hover .overflow-menu {
1043
1043
  opacity: 1;
1044
1044
  pointer-events: auto;
1045
1045
  }
1046
- .comments-dialog.is-active[data-v-0277e53b] {
1046
+ .comments-dialog.is-active[data-v-fd214e1f] {
1047
1047
  background-color: var(--sd-ui-comments-card-active-bg, #ffffff);
1048
1048
  border-color: var(--sd-ui-comments-card-active-border, #e0e0e0);
1049
1049
  box-shadow: var(--sd-ui-comments-card-shadow, 0px 4px 12px 0px rgba(50, 50, 50, 0.15));
1050
1050
  z-index: 10;
1051
1051
  }
1052
- .comments-dialog.is-resolved[data-v-0277e53b] {
1052
+ .comments-dialog.is-resolved[data-v-fd214e1f] {
1053
1053
  background-color: var(--sd-ui-comments-card-resolved-bg, #f0f0f0);
1054
1054
  }
1055
- .comment-separator[data-v-0277e53b] {
1055
+ .comment-separator[data-v-fd214e1f] {
1056
1056
  background-color: var(--sd-ui-comments-separator, #e0e0e0);
1057
1057
  height: 1px;
1058
1058
  width: 100%;
1059
1059
  margin: 10px 0;
1060
1060
  }
1061
- .comment[data-v-0277e53b] {
1061
+ .comment[data-v-fd214e1f] {
1062
1062
  font-size: var(--sd-ui-comments-body-size, 14px);
1063
1063
  line-height: 1.5;
1064
1064
  color: var(--sd-ui-comments-body-text, #212121);
1065
1065
  margin: 4px 0 0 0;
1066
1066
  }
1067
- .comment[data-v-0277e53b] p {
1067
+ .comment[data-v-fd214e1f] p {
1068
1068
  margin: 0;
1069
1069
  }
1070
- .tracked-change[data-v-0277e53b] {
1070
+ .tracked-change[data-v-fd214e1f] {
1071
1071
  font-size: var(--sd-ui-comments-body-size, 14px);
1072
1072
  line-height: 1.5;
1073
1073
  color: var(--sd-ui-comments-body-text, #212121);
1074
1074
  margin: 4px 0 0 0;
1075
1075
  }
1076
- .change-type[data-v-0277e53b] {
1076
+ .change-type[data-v-fd214e1f] {
1077
1077
  color: var(--sd-ui-comments-body-text, #212121);
1078
1078
  }
1079
- .tracked-change-text[data-v-0277e53b] {
1079
+ .tracked-change-text[data-v-fd214e1f] {
1080
1080
  color: var(--sd-ui-comments-body-text, #212121);
1081
1081
  }
1082
- .tracked-change-text.is-deleted[data-v-0277e53b] {
1082
+ .tracked-change-text.is-deleted[data-v-fd214e1f] {
1083
1083
  color: var(--sd-ui-comments-delete-text, #cb0e47);
1084
1084
  }
1085
- .tracked-change-text.is-inserted[data-v-0277e53b] {
1085
+ .tracked-change-text.is-inserted[data-v-fd214e1f] {
1086
1086
  color: var(--sd-ui-comments-insert-text, #1f6feb);
1087
1087
  font-weight: 500;
1088
1088
  }
1089
- .tracked-change[data-track-change-semantic-color-key='move-from'] .tracked-change-text.is-deleted[data-v-0277e53b] {
1089
+ .tracked-change[data-track-change-semantic-color-key='move-from'] .tracked-change-text.is-deleted[data-v-fd214e1f] {
1090
1090
  color: var(--sd-ui-comments-move-from-text, #00853d);
1091
1091
  }
1092
- .tracked-change[data-track-change-semantic-color-key='move-to'] .tracked-change-text.is-inserted[data-v-0277e53b] {
1092
+ .tracked-change[data-track-change-semantic-color-key='move-to'] .tracked-change-text.is-inserted[data-v-fd214e1f] {
1093
1093
  color: var(--sd-ui-comments-move-to-text, #00853d);
1094
1094
  }
1095
- .tracked-change-detail-lines[data-v-0277e53b] {
1095
+ .tracked-change-detail-lines[data-v-fd214e1f] {
1096
1096
  margin-top: 4px;
1097
1097
  }
1098
- .tracked-change-detail-line[data-v-0277e53b] {
1098
+ .tracked-change-detail-line[data-v-fd214e1f] {
1099
1099
  font-size: 12px;
1100
1100
  line-height: 1.4;
1101
1101
  }
1102
- .tracked-change-image-preview[data-v-0277e53b] {
1102
+ .tracked-change-image-preview[data-v-fd214e1f] {
1103
1103
  display: inline-flex;
1104
1104
  align-items: center;
1105
1105
  justify-content: center;
@@ -1110,7 +1110,7 @@ img[data-v-c95b2073] {
1110
1110
  max-width: 96px;
1111
1111
  max-height: 96px;
1112
1112
  }
1113
- .tracked-change-image-preview__image[data-v-0277e53b] {
1113
+ .tracked-change-image-preview__image[data-v-fd214e1f] {
1114
1114
  display: block;
1115
1115
  width: auto;
1116
1116
  height: auto;
@@ -1120,7 +1120,7 @@ img[data-v-c95b2073] {
1120
1120
  }
1121
1121
 
1122
1122
  /* ── Failed tracked-change decision alert (SD-3772 §6) ── */
1123
- .tracked-change-decision-alert[data-v-0277e53b] {
1123
+ .tracked-change-decision-alert[data-v-fd214e1f] {
1124
1124
  display: flex;
1125
1125
  align-items: center;
1126
1126
  justify-content: space-between;
@@ -1134,12 +1134,12 @@ img[data-v-c95b2073] {
1134
1134
  font-size: var(--sd-ui-comments-body-size, 14px);
1135
1135
  line-height: 1.4;
1136
1136
  }
1137
- .tracked-change-decision-alert__retry[data-v-0277e53b] {
1137
+ .tracked-change-decision-alert__retry[data-v-fd214e1f] {
1138
1138
  flex-shrink: 0;
1139
1139
  }
1140
1140
 
1141
1141
  /* ── Resolved badge ── */
1142
- .resolved-badge[data-v-0277e53b] {
1142
+ .resolved-badge[data-v-fd214e1f] {
1143
1143
  display: inline-flex;
1144
1144
  align-items: center;
1145
1145
  gap: 4px;
@@ -1148,33 +1148,33 @@ img[data-v-c95b2073] {
1148
1148
  color: var(--sd-ui-comments-resolved-text, #00853d);
1149
1149
  margin-bottom: 4px;
1150
1150
  }
1151
- .resolved-badge__icon[data-v-0277e53b] {
1151
+ .resolved-badge__icon[data-v-fd214e1f] {
1152
1152
  display: inline-flex;
1153
1153
  width: 12px;
1154
1154
  height: 12px;
1155
1155
  }
1156
- .resolved-badge__icon[data-v-0277e53b] svg {
1156
+ .resolved-badge__icon[data-v-fd214e1f] svg {
1157
1157
  width: 100%;
1158
1158
  height: 100%;
1159
1159
  fill: currentColor;
1160
1160
  }
1161
1161
 
1162
1162
  /* ── Text truncation ── */
1163
- .comment.is-truncated[data-v-0277e53b],
1164
- .tracked-change.is-truncated[data-v-0277e53b] {
1163
+ .comment.is-truncated[data-v-fd214e1f],
1164
+ .tracked-change.is-truncated[data-v-fd214e1f] {
1165
1165
  display: -webkit-box;
1166
1166
  -webkit-line-clamp: 3;
1167
1167
  -webkit-box-orient: vertical;
1168
1168
  max-height: 4.5em;
1169
1169
  overflow: hidden;
1170
1170
  }
1171
- .comment.is-scrollable[data-v-0277e53b],
1172
- .tracked-change.is-scrollable[data-v-0277e53b] {
1171
+ .comment.is-scrollable[data-v-fd214e1f],
1172
+ .tracked-change.is-scrollable[data-v-fd214e1f] {
1173
1173
  max-height: 220px;
1174
1174
  overflow-y: auto;
1175
1175
  padding-right: 4px;
1176
1176
  }
1177
- .show-more-toggle[data-v-0277e53b] {
1177
+ .show-more-toggle[data-v-fd214e1f] {
1178
1178
  font-size: 12px;
1179
1179
  color: var(--sd-ui-action, #1355ff);
1180
1180
  cursor: pointer;
@@ -1182,12 +1182,12 @@ img[data-v-c95b2073] {
1182
1182
  margin-top: 4px;
1183
1183
  user-select: none;
1184
1184
  }
1185
- .show-more-toggle[data-v-0277e53b]:hover {
1185
+ .show-more-toggle[data-v-fd214e1f]:hover {
1186
1186
  text-decoration: underline;
1187
1187
  }
1188
1188
 
1189
1189
  /* ── Thread collapse ── */
1190
- .collapsed-replies[data-v-0277e53b] {
1190
+ .collapsed-replies[data-v-fd214e1f] {
1191
1191
  display: flex;
1192
1192
  align-items: center;
1193
1193
  gap: 6px;
@@ -1198,24 +1198,24 @@ img[data-v-c95b2073] {
1198
1198
  cursor: pointer;
1199
1199
  user-select: none;
1200
1200
  }
1201
- .collapsed-replies[data-v-0277e53b]:hover {
1201
+ .collapsed-replies[data-v-fd214e1f]:hover {
1202
1202
  text-decoration: underline;
1203
1203
  }
1204
- .collapsed-avatars[data-v-0277e53b] {
1204
+ .collapsed-avatars[data-v-fd214e1f] {
1205
1205
  display: flex;
1206
1206
  }
1207
- .collapsed-avatars .mini-avatar[data-v-0277e53b] {
1207
+ .collapsed-avatars .mini-avatar[data-v-fd214e1f] {
1208
1208
  --sd-comment-avatar-size: 20px;
1209
1209
  --sd-comment-avatar-font-size: 8px;
1210
1210
  margin-left: -4px;
1211
1211
  border: 2px solid var(--sd-ui-comments-card-active-bg, #ffffff);
1212
1212
  }
1213
- .collapsed-avatars .mini-avatar[data-v-0277e53b]:first-child {
1213
+ .collapsed-avatars .mini-avatar[data-v-fd214e1f]:first-child {
1214
1214
  margin-left: 0;
1215
1215
  }
1216
1216
 
1217
1217
  /* ── New comment input ── */
1218
- .new-comment-input-wrapper[data-v-0277e53b] {
1218
+ .new-comment-input-wrapper[data-v-fd214e1f] {
1219
1219
  border: 1.5px solid var(--sd-ui-comments-input-border, #dbdbdb);
1220
1220
  border-radius: 12px;
1221
1221
  padding: 8.5px 10.5px;
@@ -1224,17 +1224,17 @@ img[data-v-c95b2073] {
1224
1224
  max-height: 150px;
1225
1225
  overflow-y: auto;
1226
1226
  }
1227
- .new-comment-input-wrapper[data-v-0277e53b]:focus-within {
1227
+ .new-comment-input-wrapper[data-v-fd214e1f]:focus-within {
1228
1228
  border-color: var(--sd-ui-comments-input-focus-border, #4f7cff);
1229
1229
  box-shadow: 0 0 0 2px rgba(79, 124, 255, 0.16);
1230
1230
  }
1231
- .new-comment-input-wrapper[data-v-0277e53b] .comment-entry {
1231
+ .new-comment-input-wrapper[data-v-fd214e1f] .comment-entry {
1232
1232
  border-radius: 0;
1233
1233
  }
1234
- .new-comment-input-wrapper[data-v-0277e53b] .input-section {
1234
+ .new-comment-input-wrapper[data-v-fd214e1f] .input-section {
1235
1235
  margin: 0;
1236
1236
  }
1237
- .new-comment-input-wrapper[data-v-0277e53b] .superdoc-field {
1237
+ .new-comment-input-wrapper[data-v-fd214e1f] .superdoc-field {
1238
1238
  font-size: 14px;
1239
1239
  line-height: 20px;
1240
1240
  border: none;
@@ -1245,18 +1245,18 @@ img[data-v-c95b2073] {
1245
1245
  max-height: 132px;
1246
1246
  resize: none;
1247
1247
  }
1248
- .new-comment-input-wrapper[data-v-0277e53b] .superdoc-field:focus,
1249
- .new-comment-input-wrapper[data-v-0277e53b] .superdoc-field:active {
1248
+ .new-comment-input-wrapper[data-v-fd214e1f] .superdoc-field:focus,
1249
+ .new-comment-input-wrapper[data-v-fd214e1f] .superdoc-field:active {
1250
1250
  border: none;
1251
1251
  box-shadow: none;
1252
1252
  outline: none;
1253
1253
  }
1254
- .new-comment-input-wrapper[data-v-0277e53b] .sd-editor-placeholder::before {
1254
+ .new-comment-input-wrapper[data-v-fd214e1f] .sd-editor-placeholder::before {
1255
1255
  content: 'Comment or add others with @';
1256
1256
  }
1257
1257
 
1258
1258
  /* ── Reply pill & expanded input ── */
1259
- .reply-pill[data-v-0277e53b] {
1259
+ .reply-pill[data-v-fd214e1f] {
1260
1260
  width: 100%;
1261
1261
  padding: 8.5px 10.5px;
1262
1262
  border: 1.5px solid transparent;
@@ -1270,16 +1270,16 @@ img[data-v-c95b2073] {
1270
1270
  cursor: text;
1271
1271
  transition: background 150ms ease;
1272
1272
  }
1273
- .reply-pill[data-v-0277e53b]:hover {
1273
+ .reply-pill[data-v-fd214e1f]:hover {
1274
1274
  background: var(--sd-color-gray-200, #f2f2f2);
1275
1275
  }
1276
- .reply-pill[data-v-0277e53b]:disabled {
1276
+ .reply-pill[data-v-fd214e1f]:disabled {
1277
1277
  cursor: not-allowed;
1278
1278
  }
1279
- .reply-expanded[data-v-0277e53b] {
1279
+ .reply-expanded[data-v-fd214e1f] {
1280
1280
  margin-top: 10px;
1281
1281
  }
1282
- .reply-input-wrapper[data-v-0277e53b] {
1282
+ .reply-input-wrapper[data-v-fd214e1f] {
1283
1283
  border: 1.5px solid var(--sd-ui-comments-input-border, #dbdbdb);
1284
1284
  border-radius: 12px;
1285
1285
  padding: 8.5px 10.5px;
@@ -1287,17 +1287,17 @@ img[data-v-c95b2073] {
1287
1287
  max-height: 150px;
1288
1288
  overflow-y: auto;
1289
1289
  }
1290
- .reply-input-wrapper[data-v-0277e53b]:focus-within {
1290
+ .reply-input-wrapper[data-v-fd214e1f]:focus-within {
1291
1291
  border-color: var(--sd-ui-comments-input-focus-border, #4f7cff);
1292
1292
  box-shadow: 0 0 0 2px rgba(79, 124, 255, 0.16);
1293
1293
  }
1294
- .reply-input-wrapper[data-v-0277e53b] .comment-entry {
1294
+ .reply-input-wrapper[data-v-fd214e1f] .comment-entry {
1295
1295
  border-radius: 0;
1296
1296
  }
1297
- .reply-input-wrapper[data-v-0277e53b] .input-section {
1297
+ .reply-input-wrapper[data-v-fd214e1f] .input-section {
1298
1298
  margin: 0;
1299
1299
  }
1300
- .reply-input-wrapper[data-v-0277e53b] .superdoc-field {
1300
+ .reply-input-wrapper[data-v-fd214e1f] .superdoc-field {
1301
1301
  font-size: 14px;
1302
1302
  line-height: 20px;
1303
1303
  border: none;
@@ -1308,23 +1308,23 @@ img[data-v-c95b2073] {
1308
1308
  max-height: 132px;
1309
1309
  resize: none;
1310
1310
  }
1311
- .reply-input-wrapper[data-v-0277e53b] .superdoc-field:focus,
1312
- .reply-input-wrapper[data-v-0277e53b] .superdoc-field:active {
1311
+ .reply-input-wrapper[data-v-fd214e1f] .superdoc-field:focus,
1312
+ .reply-input-wrapper[data-v-fd214e1f] .superdoc-field:active {
1313
1313
  border: none;
1314
1314
  box-shadow: none;
1315
1315
  outline: none;
1316
1316
  }
1317
- .reply-input-wrapper[data-v-0277e53b] .sd-editor-placeholder::before {
1317
+ .reply-input-wrapper[data-v-fd214e1f] .sd-editor-placeholder::before {
1318
1318
  content: 'Reply or add others with @';
1319
1319
  }
1320
- .reply-actions[data-v-0277e53b] {
1320
+ .reply-actions[data-v-fd214e1f] {
1321
1321
  display: flex;
1322
1322
  justify-content: flex-end;
1323
1323
  align-items: center;
1324
1324
  gap: 16px;
1325
1325
  margin-top: 8px;
1326
1326
  }
1327
- .reply-btn-cancel[data-v-0277e53b] {
1327
+ .reply-btn-cancel[data-v-fd214e1f] {
1328
1328
  background: none;
1329
1329
  border: none;
1330
1330
  font-size: 13px;
@@ -1335,10 +1335,10 @@ img[data-v-c95b2073] {
1335
1335
  font-family: inherit;
1336
1336
  transition: color 150ms;
1337
1337
  }
1338
- .reply-btn-cancel[data-v-0277e53b]:hover {
1338
+ .reply-btn-cancel[data-v-fd214e1f]:hover {
1339
1339
  color: var(--sd-ui-text, #212121);
1340
1340
  }
1341
- .reply-btn-primary[data-v-0277e53b] {
1341
+ .reply-btn-primary[data-v-fd214e1f] {
1342
1342
  background: var(--sd-ui-action, #1355ff);
1343
1343
  border: none;
1344
1344
  font-size: 13px;
@@ -1350,19 +1350,19 @@ img[data-v-c95b2073] {
1350
1350
  font-family: inherit;
1351
1351
  transition: background 150ms;
1352
1352
  }
1353
- .reply-btn-primary[data-v-0277e53b]:hover {
1353
+ .reply-btn-primary[data-v-fd214e1f]:hover {
1354
1354
  background: var(--sd-ui-action-hover, #0f44cc);
1355
1355
  }
1356
- .reply-btn-primary.sd-is-disabled[data-v-0277e53b] {
1356
+ .reply-btn-primary.sd-is-disabled[data-v-fd214e1f] {
1357
1357
  background: var(--sd-color-gray-400, #dbdbdb);
1358
1358
  color: var(--sd-color-gray-600, #888888);
1359
1359
  cursor: default;
1360
1360
  pointer-events: none;
1361
1361
  }
1362
- .existing-internal-input[data-v-0277e53b] {
1362
+ .existing-internal-input[data-v-fd214e1f] {
1363
1363
  margin-bottom: 10px;
1364
1364
  }
1365
- .sd-internal-dropdown[data-v-0277e53b] {
1365
+ .sd-internal-dropdown[data-v-fd214e1f] {
1366
1366
  display: inline-block;
1367
1367
  }
1368
1368
 
@@ -1770,11 +1770,11 @@ img[data-v-c95b2073] {
1770
1770
  pointer-events: auto;
1771
1771
  }
1772
1772
 
1773
- .superdoc[data-v-7770edae] {
1773
+ .superdoc[data-v-af3574db] {
1774
1774
  display: flex;
1775
1775
  position: relative;
1776
1776
  }
1777
- .sd-visually-hidden[data-v-7770edae] {
1777
+ .sd-visually-hidden[data-v-af3574db] {
1778
1778
  position: absolute;
1779
1779
  width: 1px;
1780
1780
  height: 1px;
@@ -1785,30 +1785,30 @@ img[data-v-c95b2073] {
1785
1785
  white-space: nowrap;
1786
1786
  border: 0;
1787
1787
  }
1788
- .right-sidebar[data-v-7770edae] {
1788
+ .right-sidebar[data-v-af3574db] {
1789
1789
  min-width: 320px;
1790
1790
  height: 100%;
1791
1791
  }
1792
- .floating-comments[data-v-7770edae] {
1792
+ .floating-comments[data-v-af3574db] {
1793
1793
  min-width: 300px;
1794
1794
  width: 300px;
1795
1795
  height: 100%;
1796
1796
  overflow: visible;
1797
1797
  }
1798
- .superdoc__layers[data-v-7770edae] {
1798
+ .superdoc__layers[data-v-af3574db] {
1799
1799
  height: 100%;
1800
1800
  position: relative;
1801
1801
  box-sizing: border-box;
1802
1802
  }
1803
- .superdoc__document[data-v-7770edae] {
1803
+ .superdoc__document[data-v-af3574db] {
1804
1804
  width: 100%;
1805
1805
  position: relative;
1806
1806
  }
1807
- .superdoc__sub-document[data-v-7770edae] {
1807
+ .superdoc__sub-document[data-v-af3574db] {
1808
1808
  width: 100%;
1809
1809
  position: relative;
1810
1810
  }
1811
- .superdoc__selection-layer[data-v-7770edae] {
1811
+ .superdoc__selection-layer[data-v-af3574db] {
1812
1812
  position: absolute;
1813
1813
  min-width: 100%;
1814
1814
  min-height: 100%;
@@ -1819,13 +1819,13 @@ img[data-v-c95b2073] {
1819
1819
  /* SD-3497: PDF whiteboard overlay sits above the rendered PDF canvas but below
1820
1820
  the PDF comment anchors (z-index 6 in PdfCommentsLayer) so anchors stay
1821
1821
  clickable, and below the selection layer (z-index 10). */
1822
- .superdoc__whiteboard-layer[data-v-7770edae] {
1822
+ .superdoc__whiteboard-layer[data-v-af3574db] {
1823
1823
  z-index: 4;
1824
1824
  }
1825
- .superdoc__temp-selection[data-v-7770edae] {
1825
+ .superdoc__temp-selection[data-v-af3574db] {
1826
1826
  position: absolute;
1827
1827
  }
1828
- .superdoc__right-sidebar[data-v-7770edae] {
1828
+ .superdoc__right-sidebar[data-v-af3574db] {
1829
1829
  width: 320px;
1830
1830
  min-width: 320px;
1831
1831
  padding: 0 10px;
@@ -1833,7 +1833,7 @@ img[data-v-c95b2073] {
1833
1833
  position: relative;
1834
1834
  z-index: 2;
1835
1835
  }
1836
- .superdoc__compact-comment-popover[data-v-7770edae] {
1836
+ .superdoc__compact-comment-popover[data-v-af3574db] {
1837
1837
  position: absolute;
1838
1838
  top: 12px;
1839
1839
  right: 12px;
@@ -1842,14 +1842,14 @@ img[data-v-c95b2073] {
1842
1842
  }
1843
1843
 
1844
1844
  /* Tools styles */
1845
- .tools[data-v-7770edae] {
1845
+ .tools[data-v-af3574db] {
1846
1846
  position: absolute;
1847
1847
  z-index: 3;
1848
1848
  display: flex;
1849
1849
  flex-direction: column;
1850
1850
  gap: var(--sd-ui-tools-gap, 6px);
1851
1851
  }
1852
- .tools-item[data-v-7770edae] {
1852
+ .tools-item[data-v-af3574db] {
1853
1853
  display: flex;
1854
1854
  align-items: center;
1855
1855
  justify-content: center;
@@ -1860,10 +1860,10 @@ img[data-v-c95b2073] {
1860
1860
  cursor: pointer;
1861
1861
  position: relative;
1862
1862
  }
1863
- .tools-item i[data-v-7770edae] {
1863
+ .tools-item i[data-v-af3574db] {
1864
1864
  cursor: pointer;
1865
1865
  }
1866
- .superdoc__tools-icon[data-v-7770edae] {
1866
+ .superdoc__tools-icon[data-v-af3574db] {
1867
1867
  width: var(--sd-ui-tools-icon-size, 20px);
1868
1868
  height: var(--sd-ui-tools-icon-size, 20px);
1869
1869
  flex-shrink: 0;
@@ -1878,22 +1878,22 @@ img[data-v-c95b2073] {
1878
1878
 
1879
1879
  /* 834px is iPad screen size in portrait orientation */
1880
1880
  @media (max-width: 834px) {
1881
- .superdoc .superdoc__layers[data-v-7770edae] {
1881
+ .superdoc .superdoc__layers[data-v-af3574db] {
1882
1882
  margin: 0;
1883
1883
  border: 0 !important;
1884
1884
  box-shadow: none;
1885
1885
  }
1886
- .superdoc__sub-document[data-v-7770edae] {
1886
+ .superdoc__sub-document[data-v-af3574db] {
1887
1887
  max-width: 100%;
1888
1888
  }
1889
- .superdoc__right-sidebar[data-v-7770edae] {
1889
+ .superdoc__right-sidebar[data-v-af3574db] {
1890
1890
  padding: 10px;
1891
1891
  position: relative;
1892
1892
  }
1893
1893
  }
1894
1894
 
1895
1895
  /* AI Writer styles */
1896
- .ai-writer-container[data-v-7770edae] {
1896
+ .ai-writer-container[data-v-af3574db] {
1897
1897
  position: fixed;
1898
1898
  z-index: 1000;
1899
1899
  background: white;
@@ -1909,10 +1909,10 @@ img[data-v-c95b2073] {
1909
1909
  transform: translateY(-50%);
1910
1910
  z-index: 50;
1911
1911
  } */
1912
- .ai-tool > svg[data-v-7770edae] {
1912
+ .ai-tool > svg[data-v-af3574db] {
1913
1913
  fill: transparent;
1914
1914
  }
1915
- .ai-tool[data-v-7770edae]::before {
1915
+ .ai-tool[data-v-af3574db]::before {
1916
1916
  content: '';
1917
1917
  position: absolute;
1918
1918
  width: 20px;
@@ -1933,7 +1933,7 @@ img[data-v-c95b2073] {
1933
1933
  filter: brightness(1.2);
1934
1934
  transition: filter 0.2s ease;
1935
1935
  }
1936
- .ai-tool[data-v-7770edae]:hover::before {
1936
+ .ai-tool[data-v-af3574db]:hover::before {
1937
1937
  filter: brightness(1.3);
1938
1938
  }
1939
1939
 
@@ -7,6 +7,7 @@
7
7
  * toolbar: { enabled: boolean, container: string | HTMLElement | null, options: Record<string, unknown> },
8
8
  * comments: { enabled: boolean, options: Record<string, unknown> },
9
9
  * contextMenu: { enabled: boolean, suppressed: boolean, options: Record<string, unknown> },
10
+ * loading: { enabled: boolean },
10
11
  * search: { enabled: boolean, options: Record<string, unknown> },
11
12
  * linkPopover: { enabled: boolean, suppressed: boolean, options: Record<string, unknown> },
12
13
  * ruler: { enabled: boolean, suppressed: boolean, container: string | HTMLElement | null },
@@ -29,6 +30,9 @@ export function normalizeUiConfig(config?: Record<string, any>): {
29
30
  suppressed: boolean;
30
31
  options: Record<string, unknown>;
31
32
  };
33
+ loading: {
34
+ enabled: boolean;
35
+ };
32
36
  search: {
33
37
  enabled: boolean;
34
38
  options: Record<string, unknown>;
@@ -55,6 +59,7 @@ export const HISTORICAL_DEFAULTS: Readonly<{
55
59
  toolbar: true;
56
60
  comments: true;
57
61
  contextMenu: true;
62
+ loading: true;
58
63
  search: false;
59
64
  linkPopover: false;
60
65
  ruler: false;
@@ -3116,6 +3116,19 @@ export interface UIConfig {
3116
3116
  comments?: boolean | CommentsConfig;
3117
3117
  /** Built-in right-click and slash context menu. Enabled by default. */
3118
3118
  contextMenu?: boolean | ContextMenuConfig;
3119
+ /**
3120
+ * Built-in loading overlay shown while a document opens. Enabled by default.
3121
+ * Set to `false` to show your own loading UI instead.
3122
+ *
3123
+ * This only decides whether SuperDoc draws the overlay. It does not change
3124
+ * how long a document takes to open, and it does not affect loading UI the
3125
+ * host renders (such as `renderLoading` in `@superdoc/react`).
3126
+ *
3127
+ * The built-in overlay also masks the document while it opens. Turning it
3128
+ * off hands that responsibility to your UI: keep yours up until `onReady`,
3129
+ * and around a replacement await `superdoc.replaceFile(...)`.
3130
+ */
3131
+ loading?: boolean;
3119
3132
  /**
3120
3133
  * Built-in find/replace surface. Disabled by default. Enabling it lets
3121
3134
  * SuperDoc intercept Cmd+F / Ctrl+F; `editor.ui.search` stays available to
@@ -3580,6 +3593,17 @@ export interface Config {
3580
3593
  * Omitted entries keep SuperDoc's bundled worker URLs.
3581
3594
  */
3582
3595
  workerUrls?: V2WorkerUrlsConfig;
3596
+ /**
3597
+ * Budget for the document worker to start up, in milliseconds
3598
+ * (default: 30000). Measured from worker spawn, so it covers script
3599
+ * download, parsing, evaluation, and the worker's first response to
3600
+ * SuperDoc. Raise it when a large worker chunk is served
3601
+ * over a slow connection or a cold dev-server cache; lower it to fail faster.
3602
+ * Worker load errors are reported immediately and do not wait for this
3603
+ * budget. Must be a finite positive number no greater than 2147483647, the
3604
+ * platform timer ceiling above which a delay would fire immediately.
3605
+ */
3606
+ workerStartupTimeoutMs?: number;
3583
3607
  /**
3584
3608
  * Opt-in toggle for the layout engine. Auto-disabled when web layout is
3585
3609
  * requested without `layoutEngineOptions.flowMode === 'semantic'`; the