@beyondwork/docx-react-component 1.0.105 → 1.0.108

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 (193) hide show
  1. package/package.json +19 -5
  2. package/src/api/geometry-overlay-rects.ts +5 -0
  3. package/src/api/package-version.ts +1 -1
  4. package/src/api/page-anchor-id.ts +5 -0
  5. package/src/api/public-types.ts +16 -9
  6. package/src/api/table-node-specs.ts +6 -0
  7. package/src/api/v3/_create.ts +10 -2
  8. package/src/api/v3/_page-anchor-id.ts +52 -0
  9. package/src/api/v3/_runtime-handle.ts +92 -1
  10. package/src/api/v3/ai/_audit-reference.ts +28 -0
  11. package/src/api/v3/ai/_audit-time.ts +5 -0
  12. package/src/api/v3/ai/_pe2-evidence.ts +310 -6
  13. package/src/api/v3/ai/attach.ts +29 -4
  14. package/src/api/v3/ai/bundle.ts +6 -2
  15. package/src/api/v3/ai/inspect.ts +6 -2
  16. package/src/api/v3/ai/replacement.ts +112 -18
  17. package/src/api/v3/ai/resolve.ts +2 -2
  18. package/src/api/v3/ai/review.ts +177 -3
  19. package/src/api/v3/index.ts +8 -0
  20. package/src/api/v3/runtime/collab.ts +462 -0
  21. package/src/api/v3/runtime/document.ts +503 -20
  22. package/src/api/v3/runtime/geometry.ts +97 -0
  23. package/src/api/v3/runtime/layout.ts +744 -0
  24. package/src/api/v3/runtime/perf-probe.ts +14 -0
  25. package/src/api/v3/runtime/viewport.ts +9 -8
  26. package/src/api/v3/ui/_types.ts +202 -55
  27. package/src/api/v3/ui/chrome-preset-model.ts +5 -5
  28. package/src/api/v3/ui/debug.ts +115 -2
  29. package/src/api/v3/ui/index.ts +17 -0
  30. package/src/api/v3/ui/overlays.ts +0 -8
  31. package/src/api/v3/ui/surface.ts +56 -0
  32. package/src/api/v3/ui/viewport.ts +119 -9
  33. package/src/core/commands/image-commands.ts +1 -0
  34. package/src/core/commands/index.ts +6 -0
  35. package/src/core/schema/text-schema.ts +43 -5
  36. package/src/core/selection/mapping.ts +8 -1
  37. package/src/core/selection/review-anchors.ts +5 -1
  38. package/src/core/state/text-transaction.ts +8 -2
  39. package/src/io/export/serialize-revisions.ts +149 -1
  40. package/src/io/normalize/normalize-text.ts +6 -0
  41. package/src/io/ooxml/parse-bookmark-references.ts +55 -0
  42. package/src/io/ooxml/parse-fields.ts +24 -2
  43. package/src/io/ooxml/parse-headers-footers.ts +38 -5
  44. package/src/io/ooxml/parse-main-document.ts +153 -9
  45. package/src/io/ooxml/parse-numbering.ts +20 -0
  46. package/src/io/ooxml/parse-revisions.ts +19 -8
  47. package/src/io/opc/package-reader.ts +98 -8
  48. package/src/model/anchor.ts +4 -3
  49. package/src/model/canonical-document.ts +220 -2
  50. package/src/model/canonical-hash.ts +221 -0
  51. package/src/model/canonical-layout-inputs.ts +245 -6
  52. package/src/model/layout/index.ts +1 -0
  53. package/src/model/layout/page-graph-types.ts +147 -1
  54. package/src/model/review/revision-types.ts +14 -3
  55. package/src/preservation/store.ts +20 -4
  56. package/src/review/README.md +1 -1
  57. package/src/review/store/revision-actions.ts +14 -2
  58. package/src/runtime/collab/event-types.ts +67 -1
  59. package/src/runtime/collab/runtime-collab-sync.ts +177 -5
  60. package/src/runtime/diagnostics/layout-guard-warning.ts +18 -0
  61. package/src/runtime/document-heading-outline.ts +147 -0
  62. package/src/runtime/document-navigation.ts +8 -243
  63. package/src/runtime/document-runtime.ts +279 -115
  64. package/src/runtime/edit-dispatch/dispatch-text-command.ts +11 -0
  65. package/src/runtime/formatting/layout-inputs.ts +38 -5
  66. package/src/runtime/formatting/numbering/geometry.ts +28 -2
  67. package/src/runtime/geometry/adjacent-geometry-intake.ts +835 -0
  68. package/src/runtime/geometry/caret-geometry.ts +5 -6
  69. package/src/runtime/geometry/geometry-facet.ts +60 -10
  70. package/src/runtime/geometry/geometry-index.ts +661 -16
  71. package/src/runtime/geometry/geometry-types.ts +59 -0
  72. package/src/runtime/geometry/hit-test.ts +11 -1
  73. package/src/runtime/geometry/overlay-rects.ts +5 -3
  74. package/src/runtime/geometry/project-anchors.ts +1 -1
  75. package/src/runtime/geometry/word-layout-v2-line-intake.ts +323 -0
  76. package/src/runtime/layout/index.ts +6 -0
  77. package/src/runtime/layout/layout-engine-instance.ts +6 -1
  78. package/src/runtime/layout/layout-engine-version.ts +188 -16
  79. package/src/runtime/layout/layout-facet-types.ts +6 -0
  80. package/src/runtime/layout/page-graph.ts +23 -4
  81. package/src/runtime/layout/paginated-layout-engine.ts +149 -15
  82. package/src/runtime/layout/project-block-fragments.ts +351 -14
  83. package/src/runtime/layout/public-facet.ts +162 -24
  84. package/src/runtime/layout/table-row-continuation-contract.ts +107 -0
  85. package/src/runtime/layout/table-row-split.ts +92 -35
  86. package/src/runtime/prerender/cache-envelope.ts +2 -2
  87. package/src/runtime/prerender/cache-key.ts +5 -4
  88. package/src/runtime/prerender/customxml-cache.ts +0 -1
  89. package/src/runtime/render/render-kernel.ts +1 -1
  90. package/src/runtime/revision-runtime.ts +112 -10
  91. package/src/runtime/scopes/_scope-dependencies.ts +1 -0
  92. package/src/runtime/scopes/action-validation.ts +22 -2
  93. package/src/runtime/scopes/capabilities.ts +316 -0
  94. package/src/runtime/scopes/compile-scope-bundle.ts +14 -0
  95. package/src/runtime/scopes/compiler-service.ts +108 -4
  96. package/src/runtime/scopes/content-control-evidence.ts +79 -0
  97. package/src/runtime/scopes/create-issue.ts +5 -5
  98. package/src/runtime/scopes/evidence.ts +91 -0
  99. package/src/runtime/scopes/formatting/apply.ts +2 -0
  100. package/src/runtime/scopes/geometry-evidence.ts +130 -0
  101. package/src/runtime/scopes/index.ts +54 -0
  102. package/src/runtime/scopes/issue-lifecycle.ts +224 -0
  103. package/src/runtime/scopes/layout-evidence.ts +374 -0
  104. package/src/runtime/scopes/multi-paragraph-refusal.ts +37 -0
  105. package/src/runtime/scopes/preservation-boundary.ts +7 -1
  106. package/src/runtime/scopes/replacement/apply.ts +97 -34
  107. package/src/runtime/scopes/scope-kinds/paragraph.ts +108 -12
  108. package/src/runtime/scopes/semantic-scope-types.ts +242 -3
  109. package/src/runtime/scopes/visualization.ts +28 -0
  110. package/src/runtime/surface-projection.ts +44 -5
  111. package/src/runtime/telemetry/perf-probe.ts +216 -0
  112. package/src/runtime/virtualized-rendering.ts +36 -1
  113. package/src/runtime/workflow/ai-issue-lifecycle.ts +253 -0
  114. package/src/runtime/workflow/coordinator.ts +39 -11
  115. package/src/runtime/workflow/derived-scope-resolver.ts +63 -9
  116. package/src/runtime/workflow/index.ts +4 -0
  117. package/src/runtime/workflow/overlay-lane-types.ts +58 -0
  118. package/src/runtime/workflow/overlay-lanes.ts +386 -0
  119. package/src/runtime/workflow/overlay-store.ts +2 -2
  120. package/src/runtime/workflow/redline-posture-calibration.ts +257 -0
  121. package/src/runtime/workflow/word-field-matrix-calibration.ts +231 -0
  122. package/src/session/_sync-legacy.ts +17 -27
  123. package/src/session/import/loader.ts +6 -4
  124. package/src/session/import/source-package-evidence.ts +186 -2
  125. package/src/session/index.ts +5 -6
  126. package/src/session/session.ts +30 -56
  127. package/src/session/types.ts +8 -13
  128. package/src/shell/session-bootstrap.ts +155 -81
  129. package/src/ui/WordReviewEditor.tsx +520 -12
  130. package/src/ui/editor-shell-view.tsx +14 -4
  131. package/src/ui/editor-surface-controller.tsx +5 -3
  132. package/src/ui/headless/selection-tool-resolver.ts +1 -2
  133. package/src/ui/presence-overlay-lane.ts +130 -0
  134. package/src/ui/ui-controller-factory.ts +17 -0
  135. package/src/ui-tailwind/chrome/build-context-menu-entries.ts +5 -1
  136. package/src/ui-tailwind/chrome/editor-action-registry.ts +105 -5
  137. package/src/ui-tailwind/chrome/editor-actions-to-palette.ts +7 -0
  138. package/src/ui-tailwind/chrome/layer-debug-contracts.ts +208 -0
  139. package/src/ui-tailwind/chrome/resolve-target-kind.ts +13 -0
  140. package/src/ui-tailwind/chrome/tw-alert-banner.tsx +11 -3
  141. package/src/ui-tailwind/chrome/tw-command-palette.tsx +36 -6
  142. package/src/ui-tailwind/chrome/tw-context-menu.tsx +6 -1
  143. package/src/ui-tailwind/chrome/tw-display-mode-selector.tsx +42 -109
  144. package/src/ui-tailwind/chrome/tw-inline-find-bar.tsx +26 -6
  145. package/src/ui-tailwind/chrome/tw-navigation-command-bar.tsx +328 -0
  146. package/src/ui-tailwind/chrome/tw-object-context-toolbar.tsx +8 -4
  147. package/src/ui-tailwind/chrome/tw-runtime-repl-dialog.tsx +129 -1
  148. package/src/ui-tailwind/chrome/tw-selection-tool-host.tsx +19 -5
  149. package/src/ui-tailwind/chrome/tw-selection-tool-structure.tsx +5 -1
  150. package/src/ui-tailwind/chrome/tw-workspace-chrome-host.tsx +28 -12
  151. package/src/ui-tailwind/chrome-overlay/tw-chrome-overlay.tsx +30 -3
  152. package/src/ui-tailwind/chrome-overlay/tw-object-selection-overlay.tsx +116 -10
  153. package/src/ui-tailwind/chrome-overlay/tw-page-stack-overlay-layer.tsx +223 -94
  154. package/src/ui-tailwind/chrome-overlay/tw-presence-overlay-lane.tsx +157 -0
  155. package/src/ui-tailwind/chrome-overlay/tw-review-overlay-lane-markers.tsx +259 -0
  156. package/src/ui-tailwind/chrome-overlay/tw-scope-card-layer.tsx +5 -2
  157. package/src/ui-tailwind/chrome-overlay/tw-substrate-overlay-lanes.tsx +314 -0
  158. package/src/ui-tailwind/debug/README.md +4 -1
  159. package/src/ui-tailwind/debug/layer11-consumer-readiness.ts +272 -0
  160. package/src/ui-tailwind/debug/layer11-word-field-matrix-evidence.ts +160 -0
  161. package/src/ui-tailwind/editor-surface/perf-probe.ts +14 -215
  162. package/src/ui-tailwind/editor-surface/pm-decorations.ts +42 -0
  163. package/src/ui-tailwind/editor-surface/pm-position-map.ts +38 -2
  164. package/src/ui-tailwind/editor-surface/pm-schema.ts +14 -4
  165. package/src/ui-tailwind/editor-surface/pm-state-from-snapshot.ts +34 -5
  166. package/src/ui-tailwind/editor-surface/runtime-decoration-plugin.ts +9 -19
  167. package/src/ui-tailwind/editor-surface/surface-build-keys.ts +2 -2
  168. package/src/ui-tailwind/editor-surface/tw-page-block-view.helpers.ts +145 -0
  169. package/src/ui-tailwind/editor-surface/tw-page-block-view.tsx +16 -11
  170. package/src/ui-tailwind/editor-surface/tw-prosemirror-surface.tsx +8 -10
  171. package/src/ui-tailwind/editor-surface/tw-table-node-view.tsx +3 -0
  172. package/src/ui-tailwind/page-stack/tw-page-chrome-entry.tsx +4 -2
  173. package/src/ui-tailwind/page-stack/tw-page-stack-chrome-layer.tsx +60 -20
  174. package/src/ui-tailwind/page-stack/tw-region-block-renderer.tsx +16 -11
  175. package/src/ui-tailwind/review/tw-health-panel.tsx +36 -17
  176. package/src/ui-tailwind/review/tw-review-rail.tsx +7 -4
  177. package/src/ui-tailwind/review-workspace/diagnostics-visibility.ts +44 -0
  178. package/src/ui-tailwind/review-workspace/page-shell-metrics.ts +11 -0
  179. package/src/ui-tailwind/review-workspace/tw-review-workspace-rail.tsx +16 -1
  180. package/src/ui-tailwind/review-workspace/types.ts +26 -12
  181. package/src/ui-tailwind/review-workspace/use-diagnostics-signal.ts +40 -11
  182. package/src/ui-tailwind/review-workspace/use-layout-facet-render-signal.ts +2 -1
  183. package/src/ui-tailwind/review-workspace/use-page-markers.ts +15 -26
  184. package/src/ui-tailwind/review-workspace/use-scope-card-state.ts +35 -18
  185. package/src/ui-tailwind/review-workspace/use-selection-toolbar-placement.ts +41 -32
  186. package/src/ui-tailwind/review-workspace/use-status-bar-page-facts.ts +2 -1
  187. package/src/ui-tailwind/review-workspace/use-workspace-side-effects.ts +2 -1
  188. package/src/ui-tailwind/status/tw-status-bar.tsx +6 -5
  189. package/src/ui-tailwind/toolbar/tw-role-action-region.tsx +52 -80
  190. package/src/ui-tailwind/toolbar/tw-shell-header.tsx +12 -48
  191. package/src/ui-tailwind/toolbar/tw-toolbar-icon-button.tsx +9 -4
  192. package/src/ui-tailwind/toolbar/tw-toolbar.tsx +328 -361
  193. package/src/ui-tailwind/tw-review-workspace.tsx +152 -286
@@ -1,5 +1,4 @@
1
1
  import React, { type ReactNode } from "react";
2
- import * as Tabs from "@radix-ui/react-tabs";
3
2
 
4
3
  /**
5
4
  * TwShellHeader — the top "app chrome" bar above the document canvas.
@@ -7,20 +6,19 @@ import * as Tabs from "@radix-ui/react-tabs";
7
6
  * Designsystem §6.1 — three subregions on a single 48-px row:
8
7
  * ┌─────────────────────────────────────────────────────────────────────┐
9
8
  * │ LEFT │ CENTER │ RIGHT │
10
- * │ brand + slot │ mode tabs (always-on) │ icon actions + CTA │
9
+ * │ brand + slot │ host-neutral center gap │ icon actions + CTA │
11
10
  * └─────────────────────────────────────────────────────────────────────┘
12
11
  *
13
12
  * Layout is CSS-grid `grid-cols-[1fr_auto_1fr]` so the center zone is
14
- * always visually centred regardless of left / right slot width. The
15
- * 4-mode switcher (edit / review / workflow / more) renders
16
- * unconditionally — Lane 6b §6b.S1 flips it from opt-in to always-on.
13
+ * always visually centred regardless of left / right slot width. Product
14
+ * role switching belongs to the main toolbar, not this top shell.
17
15
  *
18
16
  * All colors, shadows, radius, and motion bind to the Lane 6a token
19
17
  * substrate (`var(--color-*)` / `var(--shadow-*)` / `var(--radius-*)` /
20
18
  * `var(--motion-*)`) — no hex literals or legacy Tailwind palette names.
21
19
  */
22
20
 
23
- export type ShellHeaderMode = "edit" | "review" | "workflow" | "more";
21
+ export type ShellHeaderMode = "edit" | "review" | "workflow";
24
22
 
25
23
  export interface ShellHeaderModeOption {
26
24
  id: ShellHeaderMode;
@@ -46,11 +44,13 @@ export interface ShellHeaderIconAction {
46
44
  export interface TwShellHeaderProps {
47
45
  brand?: ReactNode;
48
46
  /**
49
- * Mode tab options. When omitted, a default 4-mode set is rendered so
50
- * the center subregion always has tabs per designsystem §6.1.
47
+ * @deprecated Product mode tabs no longer render in the shell header.
48
+ * Use the main toolbar role toggle instead.
51
49
  */
52
50
  modes?: readonly ShellHeaderModeOption[];
51
+ /** @deprecated Product mode tabs no longer render in the shell header. */
53
52
  activeMode?: ShellHeaderMode;
53
+ /** @deprecated Product mode tabs no longer render in the shell header. */
54
54
  onModeChange?: (mode: ShellHeaderMode) => void;
55
55
  iconActions?: readonly ShellHeaderIconAction[];
56
56
  primaryAction?: ShellHeaderPrimaryAction;
@@ -60,26 +60,19 @@ export interface TwShellHeaderProps {
60
60
  }
61
61
 
62
62
  /**
63
- * Default 4-mode set designsystem §6.1. Exported so hosts can extend
64
- * / relabel without reconstructing the whole list.
63
+ * Default product roles for hosts migrating from the old shell tabs.
64
+ * Rendering now lives in the main toolbar role toggle.
65
65
  */
66
66
  export const DEFAULT_SHELL_HEADER_MODES: readonly ShellHeaderModeOption[] = [
67
67
  { id: "edit", label: "Edit" },
68
68
  { id: "review", label: "Review" },
69
69
  { id: "workflow", label: "Workflow" },
70
- { id: "more", label: "More" },
71
70
  ];
72
71
 
73
72
  const focusRingClass =
74
73
  "focus-visible:outline-none focus-visible:shadow-[var(--shadow-focus)]";
75
74
 
76
75
  export function TwShellHeader(props: TwShellHeaderProps): React.ReactElement {
77
- const modes =
78
- props.modes && props.modes.length > 0
79
- ? props.modes
80
- : DEFAULT_SHELL_HEADER_MODES;
81
- const activeMode: ShellHeaderMode = props.activeMode ?? modes[0]!.id;
82
-
83
76
  const className = [
84
77
  "grid h-12 shrink-0 grid-cols-[1fr_auto_1fr] items-center gap-2 px-4",
85
78
  "bg-[var(--color-bg-chrome)]/92 backdrop-blur-sm",
@@ -110,41 +103,12 @@ export function TwShellHeader(props: TwShellHeaderProps): React.ReactElement {
110
103
  ) : null}
111
104
  </div>
112
105
 
113
- {/* CENTER: mode tabs (always on) */}
106
+ {/* CENTER: intentionally empty; role mode lives in the main toolbar. */}
114
107
  <div
115
108
  className="flex items-center justify-center"
116
109
  data-region="center"
117
110
  data-testid="tw-shell-header__region-center"
118
- >
119
- <Tabs.Root
120
- value={activeMode}
121
- onValueChange={(v: string) =>
122
- props.onModeChange?.(v as ShellHeaderMode)
123
- }
124
- >
125
- <Tabs.List
126
- aria-label="Workspace modes"
127
- className="flex items-center gap-1"
128
- >
129
- {modes.map((mode) => (
130
- <Tabs.Trigger
131
- key={mode.id}
132
- value={mode.id}
133
- disabled={mode.disabled}
134
- onClick={() => {
135
- if (!mode.disabled) {
136
- props.onModeChange?.(mode.id);
137
- }
138
- }}
139
- className={`wre-rail-tab ${focusRingClass}`}
140
- data-testid={`tw-shell-header__mode-${mode.id}`}
141
- >
142
- {mode.label}
143
- </Tabs.Trigger>
144
- ))}
145
- </Tabs.List>
146
- </Tabs.Root>
147
- </div>
111
+ />
148
112
 
149
113
  {/* RIGHT: icon actions + primary CTA */}
150
114
  <div
@@ -7,6 +7,7 @@ export interface TwToolbarIconButtonProps {
7
7
  icon: React.ComponentType<{ className?: string }>;
8
8
  label: string;
9
9
  disabled?: boolean;
10
+ disabledReason?: string;
10
11
  /**
11
12
  * Active / pressed state. Designsystem §6.2 + Lane 6b §6b.S2: active
12
13
  * buttons paint an accent-soft tint with an accent border ring — NOT a
@@ -27,8 +28,6 @@ export interface TwToolbarIconButtonProps {
27
28
  * vs. Windows however they like.
28
29
  */
29
30
  shortcut?: string;
30
- /** Explanation surfaced when the button is disabled by selection/mode state. */
31
- disabledReason?: string;
32
31
  onClick?: () => void;
33
32
  }
34
33
 
@@ -36,6 +35,10 @@ const focusRingClass =
36
35
  "focus-visible:outline-none focus-visible:shadow-[var(--shadow-focus)]";
37
36
 
38
37
  export function TwToolbarIconButton(props: TwToolbarIconButtonProps) {
38
+ const titleAttr =
39
+ props.disabled && props.disabledReason
40
+ ? `Not available: ${props.disabledReason}`
41
+ : undefined;
39
42
  return (
40
43
  <Tooltip.Root>
41
44
  <Tooltip.Trigger asChild>
@@ -44,9 +47,11 @@ export function TwToolbarIconButton(props: TwToolbarIconButtonProps) {
44
47
  aria-label={props.label}
45
48
  aria-pressed={props.active ?? undefined}
46
49
  data-active={props.active ? "true" : undefined}
47
- data-disabled-reason={props.disabled && props.disabledReason ? props.disabledReason : undefined}
50
+ data-disabled-reason={
51
+ props.disabled && props.disabledReason ? props.disabledReason : undefined
52
+ }
48
53
  disabled={props.disabled}
49
- title={props.disabled && props.disabledReason ? `Not available: ${props.disabledReason}` : undefined}
54
+ title={titleAttr}
50
55
  onMouseDown={preserveEditorSelectionMouseDown}
51
56
  onClick={props.onClick}
52
57
  className={[