superdoc 2.27.0 → 2.28.0-next.1

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 (38) hide show
  1. package/dist/chunks/{create-super-doc-ui-cHUUipYM.es.js → create-super-doc-ui-B29zw5qD.es.js} +155 -2
  2. package/dist/chunks/{create-super-doc-ui-DpVh2nQH.cjs → create-super-doc-ui-D1eOhAjv.cjs} +155 -2
  3. package/dist/collaboration-upgrade-engine.cjs +1 -1
  4. package/dist/collaboration-upgrade-engine.es.js +1 -1
  5. package/dist/document-api/src/contract/operation-definitions.d.ts +2 -2
  6. package/dist/document-api/src/index.d.ts +3 -3
  7. package/dist/document-api/src/styles/apply.d.ts +26 -2
  8. package/dist/document-api/src/styles/index.d.ts +3 -3
  9. package/dist/document-api/src/styles/schema.d.ts +3 -1
  10. package/dist/document-api/src/styles/validation.d.ts +10 -9
  11. package/dist/document-api/src/types/mutation-plan.types.d.ts +11 -4
  12. package/dist/document-api/src/types/temporary-mutation.d.ts +5 -1
  13. package/dist/layout-engine/contracts/src/index.d.ts +1 -1
  14. package/dist/layout-engine/contracts/src/run-helpers.d.ts +7 -0
  15. package/dist/layout-engine/painters/dom/src/page-content.d.ts +1 -0
  16. package/dist/layout-engine/painters/dom/src/review-markers.d.ts +3 -0
  17. package/dist/layout-engine/painters/dom/src/table/renderTableCell.d.ts +1 -0
  18. package/dist/public/ui-react.cjs +1 -1
  19. package/dist/public/ui-react.es.js +1 -1
  20. package/dist/public/ui-vue.cjs +1 -1
  21. package/dist/public/ui-vue.es.js +1 -1
  22. package/dist/public/ui.cjs +1 -1
  23. package/dist/public/ui.es.js +1 -1
  24. package/dist/style.css +1 -1
  25. package/dist/style.layered.css +1 -1
  26. package/dist/superdoc/src/internal/toolbar/built-in/LinkedStyle.vue.d.ts +3 -1
  27. package/dist/superdoc/src/internal/toolbar/built-in/toolbarTexts.d.ts +1 -0
  28. package/dist/superdoc/src/internal/toolbar/built-in-toolbar.d.ts +1 -0
  29. package/dist/superdoc/src/public/ui/style-match-patch.d.ts +7 -0
  30. package/dist/superdoc/src/public/ui/types.d.ts +5 -1
  31. package/dist/superdoc/src/public/ui.d.cts +4 -0
  32. package/dist/superdoc/src/public/ui.d.ts +1 -1
  33. package/dist/superdoc.cjs +118 -62
  34. package/dist/superdoc.es.js +115 -61
  35. package/dist-cdn/style.layered.css +1 -1
  36. package/dist-cdn/superdoc.min.css +1 -1
  37. package/dist-cdn/superdoc.min.js +38 -38
  38. package/package.json +2 -2
@@ -1,6 +1,6 @@
1
1
  import { i as __toESM$2 } from "./chunks/rolldown-runtime-0pSA04fp.es.js";
2
2
  import { t as blank_default } from "./chunks/blank-docx-DzQccOlW.es.js";
3
- import { _ as getWorkflowRecording, a as registerFirstPartyCommandMutation, c as getV2TrackedChangeMutationImpact, d as resolveImageSrc, g as createInteractionHistory, h as closeInteractionHistory, i as readFirstPartyPageNumbers, l as isPlainObject$1, m as DOM_CLASS_NAMES, n as executeFirstPartyCommandAsync, p as isSyntheticTrackedChangeCommentLaneItem, r as executeFirstPartyShortcutAsync, s as applyV2CommentInvalidationFromMutation, t as createSuperDocUI, u as createImageFilePicker, v as isWorkflowRecordingEnabled, y as recordInteraction } from "./chunks/create-super-doc-ui-cHUUipYM.es.js";
3
+ import { _ as getWorkflowRecording, a as registerFirstPartyCommandMutation, c as getV2TrackedChangeMutationImpact, d as resolveImageSrc, g as createInteractionHistory, h as closeInteractionHistory, i as readFirstPartyPageNumbers, l as isPlainObject$1, m as DOM_CLASS_NAMES, n as executeFirstPartyCommandAsync, p as isSyntheticTrackedChangeCommentLaneItem, r as executeFirstPartyShortcutAsync, s as applyV2CommentInvalidationFromMutation, t as createSuperDocUI, u as createImageFilePicker, v as isWorkflowRecordingEnabled, y as recordInteraction } from "./chunks/create-super-doc-ui-B29zw5qD.es.js";
4
4
  import { t as import_eventemitter3 } from "./chunks/eventemitter3-DEIiXiH2.es.js";
5
5
  import { t as v4 } from "./chunks/uuid-H0Xcmmhy.es.js";
6
6
  import { $ as vModelText, A as onActivated, B as renderSlot, C as isRef$1, D as normalizeClass, E as nextTick, F as openBlock, G as toRaw$2, H as resolveDynamicComponent, I as provide$1, J as unref, K as toRef, L as reactive, M as onDeactivated, N as onMounted, O as normalizeProps, P as onScopeDispose$1, Q as vModelSelect, R as ref, S as isReactive$1, T as mergeProps, U as shallowRef$1, V as resolveDirective, W as toDisplayString, X as useSlots, Y as useAttrs, Z as vModelCheckbox, _ as getCurrentInstance, a as computed$1, b as hasInjectionContext, c as createCommentVNode, d as createStaticVNode, et as watch$1, f as createTextVNode, g as effectScope, h as defineComponent, i as Transition, it as withModifiers, j as onBeforeUnmount, k as normalizeStyle, l as createElementBlock, m as defineAsyncComponent, n as Fragment, nt as withDirectives, o as createApp, p as createVNode, q as toRefs, r as Teleport, rt as withKeys, s as createBlock, t as _plugin_vue_export_helper_default, tt as withCtx, u as createElementVNode, v as getCurrentScope, w as markRaw, x as inject$1, y as h, z as renderList } from "./chunks/_plugin-vue_export-helper-7ZiLY07t.es.js";
@@ -258,7 +258,7 @@ var v_click_outside_default = {
258
258
  var DEFAULT_ENDPOINT = "https://ingest.superdoc.dev/v1/collect";
259
259
  function getSuperdocVersion() {
260
260
  try {
261
- return "2.27.0";
261
+ return "2.28.0-next.1";
262
262
  } catch {
263
263
  return "unknown";
264
264
  }
@@ -12253,11 +12253,11 @@ function useUiFontFamily() {
12253
12253
  //#region src/components/CommentsLayer/CommentsDropdown.vue
12254
12254
  var _hoisted_1$31 = { class: "comments-dropdown" };
12255
12255
  var _hoisted_2$24 = ["onClick"];
12256
- var _hoisted_3$20 = {
12256
+ var _hoisted_3$21 = {
12257
12257
  key: 0,
12258
12258
  class: "comments-dropdown__option-icon"
12259
12259
  };
12260
- var _hoisted_4$14 = ["innerHTML"];
12260
+ var _hoisted_4$15 = ["innerHTML"];
12261
12261
  var _hoisted_5$11 = { class: "comments-dropdown__option-label" };
12262
12262
  var CommentsDropdown_default = /*#__PURE__*/ _plugin_vue_export_helper_default({
12263
12263
  __name: "CommentsDropdown",
@@ -12398,10 +12398,10 @@ var CommentsDropdown_default = /*#__PURE__*/ _plugin_vue_export_helper_default({
12398
12398
  key: option.key,
12399
12399
  class: normalizeClass(["comments-dropdown__option", { "sd-disabled": option.disabled }]),
12400
12400
  onClick: ($event) => onOptionClick(option)
12401
- }, [hasIcon(option) ? (openBlock(), createElementBlock("span", _hoisted_3$20, [option.iconString ? (openBlock(), createElementBlock("span", {
12401
+ }, [hasIcon(option) ? (openBlock(), createElementBlock("span", _hoisted_3$21, [option.iconString ? (openBlock(), createElementBlock("span", {
12402
12402
  key: 0,
12403
12403
  innerHTML: option.iconString
12404
- }, null, 8, _hoisted_4$14)) : (openBlock(), createBlock(unref(OptionIcon), {
12404
+ }, null, 8, _hoisted_4$15)) : (openBlock(), createBlock(unref(OptionIcon), {
12405
12405
  key: 1,
12406
12406
  option
12407
12407
  }, null, 8, ["option"]))])) : createCommentVNode("", true), createElementVNode("span", _hoisted_5$11, toDisplayString(option.label), 1)], 10, _hoisted_2$24);
@@ -12413,8 +12413,8 @@ var CommentsDropdown_default = /*#__PURE__*/ _plugin_vue_export_helper_default({
12413
12413
  //#region src/components/CommentsLayer/InternalDropdown.vue
12414
12414
  var _hoisted_1$30 = { class: "sd-comment-option" };
12415
12415
  var _hoisted_2$23 = ["innerHTML"];
12416
- var _hoisted_3$19 = { class: "sd-option-state" };
12417
- var _hoisted_4$13 = ["innerHTML"];
12416
+ var _hoisted_3$20 = { class: "sd-option-state" };
12417
+ var _hoisted_4$14 = ["innerHTML"];
12418
12418
  var InternalDropdown_default = /*#__PURE__*/ _plugin_vue_export_helper_default({
12419
12419
  __name: "InternalDropdown",
12420
12420
  props: {
@@ -12487,11 +12487,11 @@ var InternalDropdown_default = /*#__PURE__*/ _plugin_vue_export_helper_default({
12487
12487
  class: "sd-active-icon",
12488
12488
  innerHTML: activeIcon.value
12489
12489
  }, null, 8, _hoisted_2$23),
12490
- createElementVNode("div", _hoisted_3$19, toDisplayString(getState.value), 1),
12490
+ createElementVNode("div", _hoisted_3$20, toDisplayString(getState.value), 1),
12491
12491
  createElementVNode("div", {
12492
12492
  class: "sd-dropdown-caret",
12493
12493
  innerHTML: unref(superdocIcons).caretDown
12494
- }, null, 8, _hoisted_4$13)
12494
+ }, null, 8, _hoisted_4$14)
12495
12495
  ])]),
12496
12496
  _: 1
12497
12497
  }, 8, ["disabled", "content-style"])], 4);
@@ -12649,7 +12649,7 @@ var isAllowed = (permission, role, isInternal, context = {}) => {
12649
12649
  //#region src/components/general/Avatar.vue
12650
12650
  var _hoisted_1$29 = { class: "user-container" };
12651
12651
  var _hoisted_2$22 = ["src"];
12652
- var _hoisted_3$18 = {
12652
+ var _hoisted_3$19 = {
12653
12653
  key: 1,
12654
12654
  class: "user-bg"
12655
12655
  };
@@ -12674,7 +12674,7 @@ var Avatar_default = /*#__PURE__*/ _plugin_vue_export_helper_default({
12674
12674
  key: 0,
12675
12675
  class: "user-bg",
12676
12676
  src: __props.user.image.startsWith("http") ? __props.user.image : `data:image/png;base64,${__props.user.image}`
12677
- }, null, 8, _hoisted_2$22)) : (openBlock(), createElementBlock("span", _hoisted_3$18, toDisplayString(getInitials(__props.user.name, __props.user.email)), 1))]);
12677
+ }, null, 8, _hoisted_2$22)) : (openBlock(), createElementBlock("span", _hoisted_3$19, toDisplayString(getInitials(__props.user.name, __props.user.email)), 1))]);
12678
12678
  };
12679
12679
  }
12680
12680
  }, [["__scopeId", "data-v-c95b2073"]]);
@@ -12682,8 +12682,8 @@ var Avatar_default = /*#__PURE__*/ _plugin_vue_export_helper_default({
12682
12682
  //#region src/components/CommentsLayer/CommentHeader.vue
12683
12683
  var _hoisted_1$28 = { class: "card-section comment-header" };
12684
12684
  var _hoisted_2$21 = { class: "comment-header-left" };
12685
- var _hoisted_3$17 = { class: "user-info" };
12686
- var _hoisted_4$12 = { class: "user-name" };
12685
+ var _hoisted_3$18 = { class: "user-info" };
12686
+ var _hoisted_4$13 = { class: "user-name" };
12687
12687
  var _hoisted_5$10 = {
12688
12688
  key: 0,
12689
12689
  class: "imported-tag"
@@ -12943,7 +12943,7 @@ var CommentHeader_default = /*#__PURE__*/ _plugin_vue_export_helper_default({
12943
12943
  return openBlock(), createElementBlock("div", _hoisted_1$28, [createElementVNode("div", _hoisted_2$21, [createVNode(Avatar_default, {
12944
12944
  user: getCurrentUser.value,
12945
12945
  class: "avatar"
12946
- }, null, 8, ["user"]), createElementVNode("div", _hoisted_3$17, [createElementVNode("div", _hoisted_4$12, [createTextVNode(toDisplayString(getCurrentUser.value.name), 1), isImported.value ? (openBlock(), createElementBlock("span", _hoisted_5$10, "IMPORTED")) : createCommentVNode("", true)]), props.comment.createdTime ? (openBlock(), createElementBlock("div", _hoisted_6$8, toDisplayString(unref(formatDate)(props.comment.createdTime)), 1)) : createCommentVNode("", true)])]), createElementVNode("div", { class: normalizeClass(["overflow-menu", { "is-visible": props.isActive }]) }, [
12946
+ }, null, 8, ["user"]), createElementVNode("div", _hoisted_3$18, [createElementVNode("div", _hoisted_4$13, [createTextVNode(toDisplayString(getCurrentUser.value.name), 1), isImported.value ? (openBlock(), createElementBlock("span", _hoisted_5$10, "IMPORTED")) : createCommentVNode("", true)]), props.comment.createdTime ? (openBlock(), createElementBlock("div", _hoisted_6$8, toDisplayString(unref(formatDate)(props.comment.createdTime)), 1)) : createCommentVNode("", true)])]), createElementVNode("div", { class: normalizeClass(["overflow-menu", { "is-visible": props.isActive }]) }, [
12947
12947
  allowResolve.value ? (openBlock(), createElementBlock("div", {
12948
12948
  key: 0,
12949
12949
  class: normalizeClass(["overflow-menu__icon", { "sd-is-disabled": Boolean(__props.resolveDisabledReason) }]),
@@ -12993,12 +12993,12 @@ var CommentHeader_default = /*#__PURE__*/ _plugin_vue_export_helper_default({
12993
12993
  //#region src/components/CommentsLayer/CommentInput.vue
12994
12994
  var _hoisted_1$27 = { class: "input-section" };
12995
12995
  var _hoisted_2$20 = { class: "comment-composer" };
12996
- var _hoisted_3$16 = [
12996
+ var _hoisted_3$17 = [
12997
12997
  "aria-expanded",
12998
12998
  "aria-controls",
12999
12999
  "aria-activedescendant"
13000
13000
  ];
13001
- var _hoisted_4$11 = [
13001
+ var _hoisted_4$12 = [
13002
13002
  "id",
13003
13003
  "aria-selected",
13004
13004
  "data-sd-comment-mention-option",
@@ -13188,7 +13188,7 @@ var CommentInput_default = /*#__PURE__*/ _plugin_vue_export_helper_default({
13188
13188
  onKeydown,
13189
13189
  onFocus: _cache[1] || (_cache[1] = ($event) => handleFocusChange(true)),
13190
13190
  onBlur: _cache[2] || (_cache[2] = ($event) => handleFocusChange(false))
13191
- }, null, 40, _hoisted_3$16), [[vModelText, commentDraft.value]]), mentionListOpen.value ? (openBlock(), createElementBlock("div", {
13191
+ }, null, 40, _hoisted_3$17), [[vModelText, commentDraft.value]]), mentionListOpen.value ? (openBlock(), createElementBlock("div", {
13192
13192
  key: 0,
13193
13193
  id: mentionListId,
13194
13194
  class: "comment-mention-list",
@@ -13204,7 +13204,7 @@ var CommentInput_default = /*#__PURE__*/ _plugin_vue_export_helper_default({
13204
13204
  "aria-selected": index === highlightedMentionIndex.value,
13205
13205
  "data-sd-comment-mention-option": userKey(user),
13206
13206
  onMousedown: withModifiers(($event) => selectMention(user), ["prevent"])
13207
- }, [createElementVNode("span", _hoisted_5$9, toDisplayString(displayName(user)), 1), user.email ? (openBlock(), createElementBlock("span", _hoisted_6$7, toDisplayString(user.email), 1)) : createCommentVNode("", true)], 42, _hoisted_4$11);
13207
+ }, [createElementVNode("span", _hoisted_5$9, toDisplayString(displayName(user)), 1), user.email ? (openBlock(), createElementBlock("span", _hoisted_6$7, toDisplayString(user.email), 1)) : createCommentVNode("", true)], 42, _hoisted_4$12);
13208
13208
  }), 128))])) : createCommentVNode("", true)])], 2)]);
13209
13209
  };
13210
13210
  }
@@ -13330,8 +13330,8 @@ var _hoisted_2$19 = {
13330
13330
  key: 0,
13331
13331
  class: "existing-internal-input"
13332
13332
  };
13333
- var _hoisted_3$15 = { class: "new-comment-input-wrapper" };
13334
- var _hoisted_4$10 = { class: "reply-actions" };
13333
+ var _hoisted_3$16 = { class: "new-comment-input-wrapper" };
13334
+ var _hoisted_4$11 = { class: "reply-actions" };
13335
13335
  var _hoisted_5$8 = ["disabled"];
13336
13336
  var _hoisted_6$6 = {
13337
13337
  key: 0,
@@ -14410,7 +14410,7 @@ var CommentDialog_default = /*#__PURE__*/ _plugin_vue_export_helper_default({
14410
14410
  comment: props.comment,
14411
14411
  "is-pending-input": true
14412
14412
  }, null, 8, ["config", "comment"]),
14413
- createElementVNode("div", _hoisted_3$15, [createVNode(CommentInput_default, {
14413
+ createElementVNode("div", _hoisted_3$16, [createVNode(CommentInput_default, {
14414
14414
  ref_key: "commentInput",
14415
14415
  ref: commentInput,
14416
14416
  users: usersFiltered.value,
@@ -14422,7 +14422,7 @@ var CommentDialog_default = /*#__PURE__*/ _plugin_vue_export_helper_default({
14422
14422
  "config",
14423
14423
  "comment"
14424
14424
  ])]),
14425
- createElementVNode("div", _hoisted_4$10, [createElementVNode("button", {
14425
+ createElementVNode("div", _hoisted_4$11, [createElementVNode("button", {
14426
14426
  class: "sd-button reply-btn-cancel",
14427
14427
  onClick: withModifiers(handleCancel, ["stop", "prevent"])
14428
14428
  }, "Cancel"), createElementVNode("button", {
@@ -14747,7 +14747,7 @@ var ReviewDirectoryListItem_default = /*#__PURE__*/ _plugin_vue_export_helper_de
14747
14747
  //#region src/components/CommentsLayer/commentsList/commentsList.vue
14748
14748
  var _hoisted_1$24 = ["aria-busy"];
14749
14749
  var _hoisted_2$18 = { key: 0 };
14750
- var _hoisted_3$14 = { key: 1 };
14750
+ var _hoisted_3$15 = { key: 1 };
14751
14751
  var REPEATED_HEADER_FOOTER_STORY_TYPE = "headerFooterPart";
14752
14752
  var commentsList_default = /*#__PURE__*/ _plugin_vue_export_helper_default({
14753
14753
  __name: "commentsList",
@@ -14891,7 +14891,7 @@ var commentsList_default = /*#__PURE__*/ _plugin_vue_export_helper_default({
14891
14891
  "total",
14892
14892
  "tab-index"
14893
14893
  ]);
14894
- }), 128))])) : createCommentVNode("", true), shouldShowResolvedComments.value ? (openBlock(), createElementBlock("div", _hoisted_3$14, [_cache[2] || (_cache[2] = createElementVNode("div", { class: "comment-title" }, "Resolved", -1)), (openBlock(true), createElementBlock(Fragment, null, renderList(resolvedCommentDisplayItems.value, (item, index) => {
14894
+ }), 128))])) : createCommentVNode("", true), shouldShowResolvedComments.value ? (openBlock(), createElementBlock("div", _hoisted_3$15, [_cache[2] || (_cache[2] = createElementVNode("div", { class: "comment-title" }, "Resolved", -1)), (openBlock(true), createElementBlock(Fragment, null, renderList(resolvedCommentDisplayItems.value, (item, index) => {
14895
14895
  return openBlock(), createBlock(ReviewDirectoryListItem_default, {
14896
14896
  key: item.id,
14897
14897
  item,
@@ -19011,11 +19011,11 @@ var _hoisted_2$16 = {
19011
19011
  key: 1,
19012
19012
  class: "link-title"
19013
19013
  };
19014
- var _hoisted_3$13 = {
19014
+ var _hoisted_3$14 = {
19015
19015
  key: 2,
19016
19016
  class: "link-title"
19017
19017
  };
19018
- var _hoisted_4$9 = {
19018
+ var _hoisted_4$10 = {
19019
19019
  key: 3,
19020
19020
  class: "link-title"
19021
19021
  };
@@ -19258,7 +19258,7 @@ var LinkInput_default = /*#__PURE__*/ _plugin_vue_export_helper_default({
19258
19258
  };
19259
19259
  return (_ctx, _cache) => {
19260
19260
  return openBlock(), createElementBlock("div", { class: normalizeClass(["link-input-ctn", { "high-contrast": unref(isHighContrastMode) }]) }, [
19261
- isAnchor.value ? (openBlock(), createElementBlock("div", _hoisted_1$20, "Page anchor")) : isViewingMode.value ? (openBlock(), createElementBlock("div", _hoisted_2$16, "Link details")) : isEditing.value ? (openBlock(), createElementBlock("div", _hoisted_3$13, "Edit link")) : (openBlock(), createElementBlock("div", _hoisted_4$9, "Add link")),
19261
+ isAnchor.value ? (openBlock(), createElementBlock("div", _hoisted_1$20, "Page anchor")) : isViewingMode.value ? (openBlock(), createElementBlock("div", _hoisted_2$16, "Link details")) : isEditing.value ? (openBlock(), createElementBlock("div", _hoisted_3$14, "Edit link")) : (openBlock(), createElementBlock("div", _hoisted_4$10, "Add link")),
19262
19262
  __props.showInput && !isAnchor.value ? (openBlock(), createElementBlock("div", _hoisted_5$7, [
19263
19263
  createElementVNode("div", _hoisted_6$5, [_cache[5] || (_cache[5] = createElementVNode("div", { class: "input-icon text-input-icon" }, "T", -1)), withDirectives(createElementVNode("input", {
19264
19264
  type: "text",
@@ -21355,7 +21355,7 @@ var FOCUSABLE_SELECTOR = [
21355
21355
  //#region src/components/surfaces/SurfaceDialog.vue
21356
21356
  var _hoisted_1$19 = ["aria-labelledby", "aria-label"];
21357
21357
  var _hoisted_2$15 = ["id"];
21358
- var _hoisted_3$12 = { class: "sd-surface-dialog__content" };
21358
+ var _hoisted_3$13 = { class: "sd-surface-dialog__content" };
21359
21359
  var SurfaceDialog_default = /*#__PURE__*/ _plugin_vue_export_helper_default({
21360
21360
  __name: "SurfaceDialog",
21361
21361
  props: {
@@ -21487,7 +21487,7 @@ var SurfaceDialog_default = /*#__PURE__*/ _plugin_vue_export_helper_default({
21487
21487
  key: 0,
21488
21488
  id: titleId.value,
21489
21489
  class: "sd-surface-dialog__title"
21490
- }, toDisplayString(__props.surface.request.title), 9, _hoisted_2$15)) : createCommentVNode("", true), createElementVNode("div", _hoisted_3$12, [__props.surface.render ? (openBlock(), createBlock(SurfaceExternalMount_default, {
21490
+ }, toDisplayString(__props.surface.request.title), 9, _hoisted_2$15)) : createCommentVNode("", true), createElementVNode("div", _hoisted_3$13, [__props.surface.render ? (openBlock(), createBlock(SurfaceExternalMount_default, {
21491
21491
  key: 0,
21492
21492
  "surface-id": __props.surface.id,
21493
21493
  mode: "dialog",
@@ -21509,7 +21509,7 @@ var SurfaceDialog_default = /*#__PURE__*/ _plugin_vue_export_helper_default({
21509
21509
  //#region src/components/surfaces/SurfaceFloating.vue
21510
21510
  var _hoisted_1$18 = ["aria-labelledby", "aria-label"];
21511
21511
  var _hoisted_2$14 = ["id"];
21512
- var _hoisted_3$11 = { class: "sd-surface-floating__content" };
21512
+ var _hoisted_3$12 = { class: "sd-surface-floating__content" };
21513
21513
  var SurfaceFloating_default = /*#__PURE__*/ _plugin_vue_export_helper_default({
21514
21514
  __name: "SurfaceFloating",
21515
21515
  props: { surface: {
@@ -21641,7 +21641,7 @@ var SurfaceFloating_default = /*#__PURE__*/ _plugin_vue_export_helper_default({
21641
21641
  key: 0,
21642
21642
  id: titleId.value,
21643
21643
  class: "sd-surface-floating__title"
21644
- }, toDisplayString(__props.surface.request.title), 9, _hoisted_2$14)) : createCommentVNode("", true), createElementVNode("div", _hoisted_3$11, [__props.surface.render ? (openBlock(), createBlock(SurfaceExternalMount_default, {
21644
+ }, toDisplayString(__props.surface.request.title), 9, _hoisted_2$14)) : createCommentVNode("", true), createElementVNode("div", _hoisted_3$12, [__props.surface.render ? (openBlock(), createBlock(SurfaceExternalMount_default, {
21645
21645
  key: 0,
21646
21646
  "surface-id": __props.surface.id,
21647
21647
  mode: "floating",
@@ -21885,8 +21885,8 @@ var SurfaceHost_default = /*#__PURE__*/ _plugin_vue_export_helper_default({
21885
21885
  //#region src/SuperDoc.vue
21886
21886
  var _hoisted_1$17 = ["data-superdoc-ui-owner"];
21887
21887
  var _hoisted_2$13 = ["innerHTML"];
21888
- var _hoisted_3$10 = { class: "superdoc__document document" };
21889
- var _hoisted_4$8 = { class: "floating-comments" };
21888
+ var _hoisted_3$11 = { class: "superdoc__document document" };
21889
+ var _hoisted_4$9 = { class: "floating-comments" };
21890
21890
  var TRACKED_CHANGE_CARRIERS_RESTAMPED_EVENT = "superdoc:v2-tracked-change-carriers-restamped";
21891
21891
  var UNAVAILABLE_COMMAND_RESULT = false;
21892
21892
  var V2_SELECTION_TOOLBAR_SYNC_RETRY_FRAMES = 3;
@@ -24365,7 +24365,7 @@ var SuperDoc_default = /*#__PURE__*/ _plugin_vue_export_helper_default({
24365
24365
  }, [createElementVNode("div", {
24366
24366
  class: "superdoc__tools-icon",
24367
24367
  innerHTML: unref(superdocIcons).comment
24368
- }, null, 8, _hoisted_2$13)], 32)], 4)) : createCommentVNode("", true), createElementVNode("div", _hoisted_3$10, [
24368
+ }, null, 8, _hoisted_2$13)], 32)], 4)) : createCommentVNode("", true), createElementVNode("div", _hoisted_3$11, [
24369
24369
  isCommentsEnabled.value ? (openBlock(), createElementBlock("div", {
24370
24370
  key: 0,
24371
24371
  class: "superdoc__selection-layer selection-layer",
@@ -24493,7 +24493,7 @@ var SuperDoc_default = /*#__PURE__*/ _plugin_vue_export_helper_default({
24493
24493
  ref_key: "rightSidebarRef",
24494
24494
  ref: rightSidebarRef,
24495
24495
  class: "superdoc__right-sidebar right-sidebar"
24496
- }, [createElementVNode("div", _hoisted_4$8, [unref(hasInitializedLocations) && (floatingComments.value.length > 0 || unref(pendingComment)) ? (openBlock(true), createElementBlock(Fragment, { key: 0 }, renderList(unref(documentsWithConverations), (doc) => {
24496
+ }, [createElementVNode("div", _hoisted_4$9, [unref(hasInitializedLocations) && (floatingComments.value.length > 0 || unref(pendingComment)) ? (openBlock(true), createElementBlock(Fragment, { key: 0 }, renderList(unref(documentsWithConverations), (doc) => {
24497
24497
  return openBlock(), createBlock(FloatingComments_default, {
24498
24498
  parent: layers.value,
24499
24499
  "current-document": doc
@@ -38997,8 +38997,8 @@ var _hoisted_1$15 = [
38997
38997
  "aria-disabled"
38998
38998
  ];
38999
38999
  var _hoisted_2$11 = ["data-item"];
39000
- var _hoisted_3$9 = ["data-item"];
39001
- var _hoisted_4$7 = {
39000
+ var _hoisted_3$10 = ["data-item"];
39001
+ var _hoisted_4$8 = {
39002
39002
  key: 1,
39003
39003
  class: "sd-button-label"
39004
39004
  };
@@ -39219,7 +39219,7 @@ var ToolbarButton_default = /*#__PURE__*/ _plugin_vue_export_helper_default({
39219
39219
  "color",
39220
39220
  "icon",
39221
39221
  "name"
39222
- ])) : createCommentVNode("", true), unref(label) && !unref(hideLabel) && !unref(inlineTextInputVisible) ? (openBlock(), createElementBlock("div", _hoisted_4$7, toDisplayString(unref(label)), 1)) : createCommentVNode("", true)], 8, _hoisted_3$9)) : createCommentVNode("", true),
39222
+ ])) : createCommentVNode("", true), unref(label) && !unref(hideLabel) && !unref(inlineTextInputVisible) ? (openBlock(), createElementBlock("div", _hoisted_4$8, toDisplayString(unref(label)), 1)) : createCommentVNode("", true)], 8, _hoisted_3$10)) : createCommentVNode("", true),
39223
39223
  isSplit.value ? (openBlock(), createElementBlock("div", {
39224
39224
  key: 1,
39225
39225
  class: "sd-toolbar-button__caret",
@@ -39321,8 +39321,8 @@ var ToolbarSeparator_default = /*#__PURE__*/ _plugin_vue_export_helper_default({
39321
39321
  //#region src/internal/toolbar/built-in/ToolbarDropdown.vue
39322
39322
  var _hoisted_1$13 = { class: "toolbar-dropdown" };
39323
39323
  var _hoisted_2$10 = ["data-superdoc-ui-owner"];
39324
- var _hoisted_3$8 = ["onClick"];
39325
- var _hoisted_4$6 = {
39324
+ var _hoisted_3$9 = ["onClick"];
39325
+ var _hoisted_4$7 = {
39326
39326
  key: 0,
39327
39327
  class: "toolbar-dropdown-option__icon"
39328
39328
  };
@@ -39711,7 +39711,7 @@ var ToolbarDropdown_default = /*#__PURE__*/ _plugin_vue_export_helper_default({
39711
39711
  }), [isRenderOption(option) ? (openBlock(), createBlock(unref(RenderOption), {
39712
39712
  key: 0,
39713
39713
  option
39714
- }, null, 8, ["option"])) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [hasIcon(option) ? (openBlock(), createElementBlock("span", _hoisted_4$6, [createVNode(unref(OptionIcon), { option }, null, 8, ["option"])])) : createCommentVNode("", true), createElementVNode("span", _hoisted_5$5, toDisplayString(option.label), 1)], 64))], 16, _hoisted_3$8);
39714
+ }, null, 8, ["option"])) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [hasIcon(option) ? (openBlock(), createElementBlock("span", _hoisted_4$7, [createVNode(unref(OptionIcon), { option }, null, 8, ["option"])])) : createCommentVNode("", true), createElementVNode("span", _hoisted_5$5, toDisplayString(option.label), 1)], 64))], 16, _hoisted_3$9);
39715
39715
  }), 128))], 16, _hoisted_2$10)) : createCommentVNode("", true)]),
39716
39716
  _: 3
39717
39717
  })], 8, ["to"]))]);
@@ -39950,12 +39950,12 @@ var _hoisted_2$9 = [
39950
39950
  "aria-activedescendant",
39951
39951
  "data-item"
39952
39952
  ];
39953
- var _hoisted_3$7 = [
39953
+ var _hoisted_3$8 = [
39954
39954
  "data-item",
39955
39955
  "aria-label",
39956
39956
  "disabled"
39957
39957
  ];
39958
- var _hoisted_4$5 = ["innerHTML"];
39958
+ var _hoisted_4$6 = ["innerHTML"];
39959
39959
  var _hoisted_5$4 = [
39960
39960
  "data-superdoc-ui-owner",
39961
39961
  "id",
@@ -40423,7 +40423,7 @@ var ToolbarComboBox_default = /*#__PURE__*/ _plugin_vue_export_helper_default({
40423
40423
  }, [createElementVNode("span", {
40424
40424
  class: "sd-dropdown-caret",
40425
40425
  innerHTML: caretIcon.value
40426
- }, null, 8, _hoisted_4$5)], 40, _hoisted_3$7),
40426
+ }, null, 8, _hoisted_4$6)], 40, _hoisted_3$8),
40427
40427
  (openBlock(), createBlock(Teleport, { to: "body" }, [isOpen.value ? (openBlock(), createElementBlock("div", {
40428
40428
  key: 0,
40429
40429
  ref_key: "popupRef",
@@ -40768,8 +40768,8 @@ var _hoisted_1$11 = [
40768
40768
  "data-item-id"
40769
40769
  ];
40770
40770
  var _hoisted_2$8 = { key: 0 };
40771
- var _hoisted_3$6 = { key: 0 };
40772
- var _hoisted_4$4 = { key: 0 };
40771
+ var _hoisted_3$7 = { key: 0 };
40772
+ var _hoisted_4$5 = { key: 0 };
40773
40773
  var _hoisted_5$3 = { key: 0 };
40774
40774
  var _hoisted_6$2 = { key: 0 };
40775
40775
  var ButtonGroup_default = /*#__PURE__*/ _plugin_vue_export_helper_default({
@@ -41173,7 +41173,7 @@ var ButtonGroup_default = /*#__PURE__*/ _plugin_vue_export_helper_default({
41173
41173
  onTabOut: _cache[1] || (_cache[1] = ($event) => handleFontSizeTabOut($event)),
41174
41174
  onEditorHandoff: handleEditorHandoff
41175
41175
  }, null, 8, ["item", "ui-font-family"])]),
41176
- default: withCtx(() => [createElementVNode("div", null, [createTextVNode(toDisplayString(item.tooltip) + " ", 1), item.disabled.value ? (openBlock(), createElementBlock("span", _hoisted_3$6, "(disabled)")) : createCommentVNode("", true)])]),
41176
+ default: withCtx(() => [createElementVNode("div", null, [createTextVNode(toDisplayString(item.tooltip) + " ", 1), item.disabled.value ? (openBlock(), createElementBlock("span", _hoisted_3$7, "(disabled)")) : createCommentVNode("", true)])]),
41177
41177
  _: 2
41178
41178
  }, 1032, ["disabled", "content-style"])) : isDropdown(item) && item.nestedOptions?.value?.length ? (openBlock(), createBlock(ToolbarDropdown_default, {
41179
41179
  key: 3,
@@ -41210,7 +41210,7 @@ var ButtonGroup_default = /*#__PURE__*/ _plugin_vue_export_helper_default({
41210
41210
  "onTextSubmit",
41211
41211
  "onMainClick"
41212
41212
  ])]),
41213
- default: withCtx(() => [createElementVNode("div", null, [createTextVNode(toDisplayString(item.tooltip) + " ", 1), item.disabled.value ? (openBlock(), createElementBlock("span", _hoisted_4$4, "(disabled)")) : createCommentVNode("", true)])]),
41213
+ default: withCtx(() => [createElementVNode("div", null, [createTextVNode(toDisplayString(item.tooltip) + " ", 1), item.disabled.value ? (openBlock(), createElementBlock("span", _hoisted_4$5, "(disabled)")) : createCommentVNode("", true)])]),
41214
41214
  _: 2
41215
41215
  }, 1032, ["disabled", "content-style"])]),
41216
41216
  _: 2
@@ -41577,7 +41577,13 @@ var Toolbar_default = /*#__PURE__*/ _plugin_vue_export_helper_default({
41577
41577
  proxy.$toolbar.pendingSelectionCapture = pendingSelectionCapture;
41578
41578
  };
41579
41579
  const handleCommand = ({ item, argument, option }) => {
41580
- restoreSelection();
41580
+ const commandId = resolveToolbarCommandId(item?.name?.value);
41581
+ if (!(item?.type === "button" && !item.isCustomToolbarItem && [
41582
+ "bold",
41583
+ "italic",
41584
+ "underline",
41585
+ "strikethrough"
41586
+ ].includes(commandId) && proxy.$toolbar.snapshot?.commands?.[commandId]?.source === "builtin")) restoreSelection();
41581
41587
  proxy.$toolbar.emitCommand({
41582
41588
  item,
41583
41589
  argument,
@@ -41655,7 +41661,7 @@ var Toolbar_default = /*#__PURE__*/ _plugin_vue_export_helper_default({
41655
41661
  ], 40, _hoisted_1$10);
41656
41662
  };
41657
41663
  }
41658
- }, [["__scopeId", "data-v-19ce2dae"]]);
41664
+ }, [["__scopeId", "data-v-9554df11"]]);
41659
41665
  //#endregion
41660
41666
  //#region src/internal/toolbar/built-in/font-options.js
41661
41667
  /**
@@ -42082,8 +42088,8 @@ var numberedStyleButtons = [
42082
42088
  //#region src/internal/toolbar/built-in/DocumentMode.vue
42083
42089
  var _hoisted_1$7 = ["onClick", "onKeydown"];
42084
42090
  var _hoisted_2$7 = { class: "document-mode-column icon-column" };
42085
- var _hoisted_3$5 = ["innerHTML"];
42086
- var _hoisted_4$3 = { class: "document-mode-column text-column" };
42091
+ var _hoisted_3$6 = ["innerHTML"];
42092
+ var _hoisted_4$4 = { class: "document-mode-column text-column" };
42087
42093
  var _hoisted_5$2 = { class: "document-mode-type" };
42088
42094
  var _hoisted_6$1 = { class: "document-mode-description" };
42089
42095
  var DocumentMode_default = /*#__PURE__*/ _plugin_vue_export_helper_default({
@@ -42146,7 +42152,7 @@ var DocumentMode_default = /*#__PURE__*/ _plugin_vue_export_helper_default({
42146
42152
  }, [createElementVNode("div", _hoisted_2$7, [createElementVNode("div", {
42147
42153
  class: "icon-column__icon",
42148
42154
  innerHTML: option.icon
42149
- }, null, 8, _hoisted_3$5)]), createElementVNode("div", _hoisted_4$3, [createElementVNode("div", _hoisted_5$2, toDisplayString(option.label), 1), createElementVNode("div", _hoisted_6$1, toDisplayString(option.description), 1)])], 42, _hoisted_1$7);
42155
+ }, null, 8, _hoisted_3$6)]), createElementVNode("div", _hoisted_4$4, [createElementVNode("div", _hoisted_5$2, toDisplayString(option.label), 1), createElementVNode("div", _hoisted_6$1, toDisplayString(option.description), 1)])], 42, _hoisted_1$7);
42150
42156
  }), 256))], 2);
42151
42157
  };
42152
42158
  }
@@ -42162,6 +42168,12 @@ var _hoisted_2$6 = [
42162
42168
  "onKeydown",
42163
42169
  "aria-label"
42164
42170
  ];
42171
+ var _hoisted_3$5 = [
42172
+ "title",
42173
+ "aria-label",
42174
+ "onClick"
42175
+ ];
42176
+ var _hoisted_4$3 = ["innerHTML"];
42165
42177
  var LinkedStyle_default = /*#__PURE__*/ _plugin_vue_export_helper_default({
42166
42178
  __name: "LinkedStyle",
42167
42179
  props: {
@@ -42172,9 +42184,13 @@ var LinkedStyle_default = /*#__PURE__*/ _plugin_vue_export_helper_default({
42172
42184
  selectedOption: {
42173
42185
  type: String,
42174
42186
  default: null
42187
+ },
42188
+ updateLabel: {
42189
+ type: String,
42190
+ default: "Update to match selection"
42175
42191
  }
42176
42192
  },
42177
- emits: ["select"],
42193
+ emits: ["select", "update"],
42178
42194
  setup(__props, { emit: __emit }) {
42179
42195
  const emit = __emit;
42180
42196
  const styleRefs = ref([]);
@@ -42182,6 +42198,9 @@ var LinkedStyle_default = /*#__PURE__*/ _plugin_vue_export_helper_default({
42182
42198
  const select = (style) => {
42183
42199
  emit("select", style);
42184
42200
  };
42201
+ const update = (style) => {
42202
+ emit("update", style);
42203
+ };
42185
42204
  const moveToNextStyle = (index) => {
42186
42205
  if (index === styleRefs.value.length - 1) return;
42187
42206
  const nextItem = styleRefs.value[index + 1];
@@ -42241,11 +42260,22 @@ var LinkedStyle_default = /*#__PURE__*/ _plugin_vue_export_helper_default({
42241
42260
  class: "style-name",
42242
42261
  "data-item": "btn-linkedStyles-option",
42243
42262
  style: normalizeStyle(previewStyle(style))
42244
- }, toDisplayString(styleLabel(style)), 5)], 42, _hoisted_2$6);
42263
+ }, toDisplayString(styleLabel(style)), 5), createElementVNode("button", {
42264
+ type: "button",
42265
+ class: "style-update",
42266
+ "data-item": "btn-linkedStyles-update",
42267
+ title: props.updateLabel,
42268
+ "aria-label": `${props.updateLabel}: ${styleLabel(style)}`,
42269
+ onClick: withModifiers(($event) => update(style), ["stop"]),
42270
+ onKeydown: _cache[0] || (_cache[0] = withModifiers(() => {}, ["stop"]))
42271
+ }, [createElementVNode("span", {
42272
+ class: "style-update-icon",
42273
+ innerHTML: unref(toolbarIcons).paintbrush
42274
+ }, null, 8, _hoisted_4$3)], 40, _hoisted_3$5)], 42, _hoisted_2$6);
42245
42275
  }), 128))]);
42246
42276
  };
42247
42277
  }
42248
- }, [["__scopeId", "data-v-74c8924b"]]);
42278
+ }, [["__scopeId", "data-v-b5a32523"]]);
42249
42279
  //#endregion
42250
42280
  //#region src/internal/toolbar/built-in/AIWriter.vue
42251
42281
  var _hoisted_1$5 = ["placeholder"];
@@ -44446,10 +44476,18 @@ var makeDefaultItems = ({ superToolbar, toolbarIcons, toolbarTexts, toolbarFonts
44446
44476
  argument: styleId
44447
44477
  });
44448
44478
  };
44479
+ const handleUpdate = (style) => {
44480
+ closeDropdown(linkedStyles);
44481
+ const styleId = typeof style === "string" ? style : style?.id ?? null;
44482
+ if (!styleId) return;
44483
+ superToolbar.updateLinkedStyleToMatchSelection?.(styleId);
44484
+ };
44449
44485
  const activeStyleId = superToolbar.getActiveLinkedStyleId?.() ?? null;
44450
44486
  return h("div", {}, [h(LinkedStyle_default, {
44451
44487
  styles: superToolbar.getLinkedStyleOptions?.() ?? [],
44452
44488
  onSelect: handleSelect,
44489
+ onUpdate: handleUpdate,
44490
+ updateLabel: toolbarTexts.updateLinkedStyle,
44453
44491
  selectedOption: activeStyleId
44454
44492
  })]);
44455
44493
  }
@@ -44708,7 +44746,8 @@ var toolbarTexts = {
44708
44746
  documentEditingModeDescription: "Edit document directly",
44709
44747
  documentSuggestingModeDescription: "Edits become suggestions",
44710
44748
  documentViewingModeDescription: "View clean version of document only",
44711
- linkedStyles: "Linked styles"
44749
+ linkedStyles: "Linked styles",
44750
+ updateLinkedStyle: "Update to match selection"
44712
44751
  };
44713
44752
  //#endregion
44714
44753
  //#region src/internal/toolbar/built-in/general.js
@@ -45200,12 +45239,16 @@ var BuiltInToolbar = class extends import_eventemitter3.default {
45200
45239
  return this._linkedStyleOptions.value;
45201
45240
  }
45202
45241
  #refreshLinkedStyleOptions() {
45203
- this.ui?.styles?.getCatalog?.({ includePreview: true });
45242
+ const allStyles = this.ui?.styles?.getCatalog?.({ includePreview: true });
45204
45243
  const options = (this.ui?.styles?.getCatalog?.({
45205
45244
  view: "quickGallery",
45206
45245
  includePreview: true
45207
45246
  }))?.items ?? this.ui?.styles?.getQuickGallery?.() ?? [];
45208
- if (options !== this._linkedStyleOptions.value) this._linkedStyleOptions.value = options;
45247
+ const activeStyleId = this.ui?.styles?.getActiveParagraphStyle?.()?.styleId;
45248
+ const activeStyle = activeStyleId && !options.some((style) => style.id === activeStyleId) ? allStyles?.styles?.find((style) => style.id === activeStyleId && (style.type === "paragraph" || style.type === "linked")) : null;
45249
+ const nextOptions = activeStyle ? [activeStyle, ...options] : options;
45250
+ const previousOptions = this._linkedStyleOptions.value;
45251
+ if (nextOptions.length !== previousOptions.length || nextOptions.some((style, index) => style !== previousOptions[index])) this._linkedStyleOptions.value = nextOptions;
45209
45252
  }
45210
45253
  /**
45211
45254
  * The stable style id active across the current selection's paragraph(s), or
@@ -45215,6 +45258,17 @@ var BuiltInToolbar = class extends import_eventemitter3.default {
45215
45258
  getActiveLinkedStyleId() {
45216
45259
  return this.ui?.styles?.getActiveParagraphStyle?.()?.styleId ?? null;
45217
45260
  }
45261
+ async updateLinkedStyleToMatchSelection(styleId) {
45262
+ if (!styleId || typeof this.ui?.styles?.updateToMatchSelection !== "function") return null;
45263
+ try {
45264
+ return await this.ui.styles.updateToMatchSelection({ styleId });
45265
+ } catch (error) {
45266
+ this.#emitCommandException(error, "linkedStyles");
45267
+ return null;
45268
+ } finally {
45269
+ this.updateToolbarState();
45270
+ }
45271
+ }
45218
45272
  /**
45219
45273
  * Compatibility hook: `SuperDoc` calls this when the active editor changes.
45220
45274
  * The shared controller already tracks selection/transaction state, so this
@@ -46154,7 +46208,7 @@ var SuperDoc = class extends import_eventemitter3.default {
46154
46208
  }
46155
46209
  this.userColorMap = /* @__PURE__ */ new Map();
46156
46210
  this.colorIndex = 0;
46157
- this.version = "2.27.0";
46211
+ this.version = "2.28.0-next.1";
46158
46212
  this.#log("🦋 [superdoc] Using SuperDoc version:", this.version);
46159
46213
  this.superdocId = config.superdocId || v4();
46160
46214
  this.colors = this.config.colors ?? [];