@doxi/core 0.11.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.
- package/LICENSE +21 -0
- package/README.md +81 -0
- package/dist/collab/port.d.ts +46 -0
- package/dist/collab/port.d.ts.map +1 -0
- package/dist/collab/port.js +11 -0
- package/dist/collab/port.js.map +1 -0
- package/dist/commands/block-commands.d.ts +62 -0
- package/dist/commands/block-commands.d.ts.map +1 -0
- package/dist/commands/block-commands.js +208 -0
- package/dist/commands/block-commands.js.map +1 -0
- package/dist/commands/command.d.ts +13 -0
- package/dist/commands/command.d.ts.map +1 -0
- package/dist/commands/command.js +13 -0
- package/dist/commands/command.js.map +1 -0
- package/dist/commands/edit-commands.d.ts +5 -0
- package/dist/commands/edit-commands.d.ts.map +1 -0
- package/dist/commands/edit-commands.js +147 -0
- package/dist/commands/edit-commands.js.map +1 -0
- package/dist/commands/image-commands.d.ts +31 -0
- package/dist/commands/image-commands.d.ts.map +1 -0
- package/dist/commands/image-commands.js +130 -0
- package/dist/commands/image-commands.js.map +1 -0
- package/dist/commands/index.d.ts +11 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +11 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/keymap.d.ts +34 -0
- package/dist/commands/keymap.d.ts.map +1 -0
- package/dist/commands/keymap.js +84 -0
- package/dist/commands/keymap.js.map +1 -0
- package/dist/commands/link-commands.d.ts +54 -0
- package/dist/commands/link-commands.d.ts.map +1 -0
- package/dist/commands/link-commands.js +151 -0
- package/dist/commands/link-commands.js.map +1 -0
- package/dist/commands/list-commands.d.ts +42 -0
- package/dist/commands/list-commands.d.ts.map +1 -0
- package/dist/commands/list-commands.js +316 -0
- package/dist/commands/list-commands.js.map +1 -0
- package/dist/commands/mark-commands.d.ts +53 -0
- package/dist/commands/mark-commands.d.ts.map +1 -0
- package/dist/commands/mark-commands.js +181 -0
- package/dist/commands/mark-commands.js.map +1 -0
- package/dist/commands/selection-commands.d.ts +3 -0
- package/dist/commands/selection-commands.d.ts.map +1 -0
- package/dist/commands/selection-commands.js +11 -0
- package/dist/commands/selection-commands.js.map +1 -0
- package/dist/commands/table-commands.d.ts +109 -0
- package/dist/commands/table-commands.d.ts.map +1 -0
- package/dist/commands/table-commands.js +884 -0
- package/dist/commands/table-commands.js.map +1 -0
- package/dist/history/history.d.ts +40 -0
- package/dist/history/history.d.ts.map +1 -0
- package/dist/history/history.js +139 -0
- package/dist/history/history.js.map +1 -0
- package/dist/history/index.d.ts +2 -0
- package/dist/history/index.d.ts.map +1 -0
- package/dist/history/index.js +2 -0
- package/dist/history/index.js.map +1 -0
- package/dist/html/index.d.ts +3 -0
- package/dist/html/index.d.ts.map +1 -0
- package/dist/html/index.js +3 -0
- package/dist/html/index.js.map +1 -0
- package/dist/html/parse.d.ts +4 -0
- package/dist/html/parse.d.ts.map +1 -0
- package/dist/html/parse.js +0 -0
- package/dist/html/parse.js.map +1 -0
- package/dist/html/serialize.d.ts +4 -0
- package/dist/html/serialize.d.ts.map +1 -0
- package/dist/html/serialize.js +75 -0
- package/dist/html/serialize.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -0
- package/dist/layout/index.d.ts +6 -0
- package/dist/layout/index.d.ts.map +1 -0
- package/dist/layout/index.js +6 -0
- package/dist/layout/index.js.map +1 -0
- package/dist/layout/layout-engine.d.ts +20 -0
- package/dist/layout/layout-engine.d.ts.map +1 -0
- package/dist/layout/layout-engine.js +198 -0
- package/dist/layout/layout-engine.js.map +1 -0
- package/dist/layout/measure.d.ts +9 -0
- package/dist/layout/measure.d.ts.map +1 -0
- package/dist/layout/measure.js +37 -0
- package/dist/layout/measure.js.map +1 -0
- package/dist/layout/split-paragraph.d.ts +28 -0
- package/dist/layout/split-paragraph.d.ts.map +1 -0
- package/dist/layout/split-paragraph.js +122 -0
- package/dist/layout/split-paragraph.js.map +1 -0
- package/dist/layout/split-table.d.ts +46 -0
- package/dist/layout/split-table.d.ts.map +1 -0
- package/dist/layout/split-table.js +84 -0
- package/dist/layout/split-table.js.map +1 -0
- package/dist/layout/types.d.ts +73 -0
- package/dist/layout/types.d.ts.map +1 -0
- package/dist/layout/types.js +36 -0
- package/dist/layout/types.js.map +1 -0
- package/dist/layout/widow-orphan.d.ts +15 -0
- package/dist/layout/widow-orphan.d.ts.map +1 -0
- package/dist/layout/widow-orphan.js +14 -0
- package/dist/layout/widow-orphan.js.map +1 -0
- package/dist/model/content-expr.d.ts +32 -0
- package/dist/model/content-expr.d.ts.map +1 -0
- package/dist/model/content-expr.js +106 -0
- package/dist/model/content-expr.js.map +1 -0
- package/dist/model/fragment.d.ts +17 -0
- package/dist/model/fragment.d.ts.map +1 -0
- package/dist/model/fragment.js +44 -0
- package/dist/model/fragment.js.map +1 -0
- package/dist/model/index.d.ts +10 -0
- package/dist/model/index.d.ts.map +1 -0
- package/dist/model/index.js +10 -0
- package/dist/model/index.js.map +1 -0
- package/dist/model/mark.d.ts +35 -0
- package/dist/model/mark.d.ts.map +1 -0
- package/dist/model/mark.js +89 -0
- package/dist/model/mark.js.map +1 -0
- package/dist/model/node-type.d.ts +36 -0
- package/dist/model/node-type.d.ts.map +1 -0
- package/dist/model/node-type.js +14 -0
- package/dist/model/node-type.js.map +1 -0
- package/dist/model/node.d.ts +36 -0
- package/dist/model/node.d.ts.map +1 -0
- package/dist/model/node.js +192 -0
- package/dist/model/node.js.map +1 -0
- package/dist/model/position.d.ts +66 -0
- package/dist/model/position.d.ts.map +1 -0
- package/dist/model/position.js +158 -0
- package/dist/model/position.js.map +1 -0
- package/dist/model/schema.d.ts +28 -0
- package/dist/model/schema.d.ts.map +1 -0
- package/dist/model/schema.js +195 -0
- package/dist/model/schema.js.map +1 -0
- package/dist/model/slice.d.ts +26 -0
- package/dist/model/slice.d.ts.map +1 -0
- package/dist/model/slice.js +56 -0
- package/dist/model/slice.js.map +1 -0
- package/dist/model/table-grid.d.ts +71 -0
- package/dist/model/table-grid.d.ts.map +1 -0
- package/dist/model/table-grid.js +130 -0
- package/dist/model/table-grid.js.map +1 -0
- package/dist/plugin/index.d.ts +3 -0
- package/dist/plugin/index.d.ts.map +1 -0
- package/dist/plugin/index.js +3 -0
- package/dist/plugin/index.js.map +1 -0
- package/dist/plugin/plugin-key.d.ts +13 -0
- package/dist/plugin/plugin-key.d.ts.map +1 -0
- package/dist/plugin/plugin-key.js +13 -0
- package/dist/plugin/plugin-key.js.map +1 -0
- package/dist/plugin/plugin-state.d.ts +2 -0
- package/dist/plugin/plugin-state.d.ts.map +1 -0
- package/dist/plugin/plugin-state.js +3 -0
- package/dist/plugin/plugin-state.js.map +1 -0
- package/dist/plugin/plugin.d.ts +39 -0
- package/dist/plugin/plugin.d.ts.map +1 -0
- package/dist/plugin/plugin.js +10 -0
- package/dist/plugin/plugin.js.map +1 -0
- package/dist/schema/default.d.ts +163 -0
- package/dist/schema/default.d.ts.map +1 -0
- package/dist/schema/default.js +94 -0
- package/dist/schema/default.js.map +1 -0
- package/dist/schema/index.d.ts +2 -0
- package/dist/schema/index.d.ts.map +1 -0
- package/dist/schema/index.js +2 -0
- package/dist/schema/index.js.map +1 -0
- package/dist/serialize/index.d.ts +2 -0
- package/dist/serialize/index.d.ts.map +1 -0
- package/dist/serialize/index.js +2 -0
- package/dist/serialize/index.js.map +1 -0
- package/dist/serialize/json.d.ts +15 -0
- package/dist/serialize/json.d.ts.map +1 -0
- package/dist/serialize/json.js +23 -0
- package/dist/serialize/json.js.map +1 -0
- package/dist/state/all-selection.d.ts +11 -0
- package/dist/state/all-selection.d.ts.map +1 -0
- package/dist/state/all-selection.js +17 -0
- package/dist/state/all-selection.js.map +1 -0
- package/dist/state/cell-selection.d.ts +30 -0
- package/dist/state/cell-selection.d.ts.map +1 -0
- package/dist/state/cell-selection.js +38 -0
- package/dist/state/cell-selection.js.map +1 -0
- package/dist/state/editor-state.d.ts +46 -0
- package/dist/state/editor-state.d.ts.map +1 -0
- package/dist/state/editor-state.js +211 -0
- package/dist/state/editor-state.js.map +1 -0
- package/dist/state/index.d.ts +7 -0
- package/dist/state/index.d.ts.map +1 -0
- package/dist/state/index.js +7 -0
- package/dist/state/index.js.map +1 -0
- package/dist/state/node-selection.d.ts +16 -0
- package/dist/state/node-selection.d.ts.map +1 -0
- package/dist/state/node-selection.js +51 -0
- package/dist/state/node-selection.js.map +1 -0
- package/dist/state/selection.d.ts +29 -0
- package/dist/state/selection.d.ts.map +1 -0
- package/dist/state/selection.js +24 -0
- package/dist/state/selection.js.map +1 -0
- package/dist/state/text-selection.d.ts +10 -0
- package/dist/state/text-selection.d.ts.map +1 -0
- package/dist/state/text-selection.js +26 -0
- package/dist/state/text-selection.js.map +1 -0
- package/dist/transform/attr-step.d.ts +16 -0
- package/dist/transform/attr-step.d.ts.map +1 -0
- package/dist/transform/attr-step.js +98 -0
- package/dist/transform/attr-step.js.map +1 -0
- package/dist/transform/index.d.ts +10 -0
- package/dist/transform/index.d.ts.map +1 -0
- package/dist/transform/index.js +10 -0
- package/dist/transform/index.js.map +1 -0
- package/dist/transform/mapping.d.ts +44 -0
- package/dist/transform/mapping.d.ts.map +1 -0
- package/dist/transform/mapping.js +101 -0
- package/dist/transform/mapping.js.map +1 -0
- package/dist/transform/mark-step.d.ts +27 -0
- package/dist/transform/mark-step.d.ts.map +1 -0
- package/dist/transform/mark-step.js +146 -0
- package/dist/transform/mark-step.js.map +1 -0
- package/dist/transform/replace-around-step.d.ts +35 -0
- package/dist/transform/replace-around-step.d.ts.map +1 -0
- package/dist/transform/replace-around-step.js +144 -0
- package/dist/transform/replace-around-step.js.map +1 -0
- package/dist/transform/replace-step.d.ts +17 -0
- package/dist/transform/replace-step.d.ts.map +1 -0
- package/dist/transform/replace-step.js +72 -0
- package/dist/transform/replace-step.js.map +1 -0
- package/dist/transform/replace.d.ts +18 -0
- package/dist/transform/replace.d.ts.map +1 -0
- package/dist/transform/replace.js +132 -0
- package/dist/transform/replace.js.map +1 -0
- package/dist/transform/set-page-meta-step.d.ts +42 -0
- package/dist/transform/set-page-meta-step.d.ts.map +1 -0
- package/dist/transform/set-page-meta-step.js +75 -0
- package/dist/transform/set-page-meta-step.js.map +1 -0
- package/dist/transform/step.d.ts +34 -0
- package/dist/transform/step.d.ts.map +1 -0
- package/dist/transform/step.js +23 -0
- package/dist/transform/step.js.map +1 -0
- package/dist/transform/transaction.d.ts +20 -0
- package/dist/transform/transaction.d.ts.map +1 -0
- package/dist/transform/transaction.js +38 -0
- package/dist/transform/transaction.js.map +1 -0
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +5 -0
- package/dist/version.js.map +1 -0
- package/dist/view/cell-drag.d.ts +33 -0
- package/dist/view/cell-drag.d.ts.map +1 -0
- package/dist/view/cell-drag.js +177 -0
- package/dist/view/cell-drag.js.map +1 -0
- package/dist/view/clipboard.d.ts +5 -0
- package/dist/view/clipboard.d.ts.map +1 -0
- package/dist/view/clipboard.js +97 -0
- package/dist/view/clipboard.js.map +1 -0
- package/dist/view/default-renderer.d.ts +3 -0
- package/dist/view/default-renderer.d.ts.map +1 -0
- package/dist/view/default-renderer.js +142 -0
- package/dist/view/default-renderer.js.map +1 -0
- package/dist/view/dom-spec.d.ts +11 -0
- package/dist/view/dom-spec.d.ts.map +1 -0
- package/dist/view/dom-spec.js +32 -0
- package/dist/view/dom-spec.js.map +1 -0
- package/dist/view/editor-view.d.ts +55 -0
- package/dist/view/editor-view.d.ts.map +1 -0
- package/dist/view/editor-view.js +143 -0
- package/dist/view/editor-view.js.map +1 -0
- package/dist/view/image-resize.d.ts +37 -0
- package/dist/view/image-resize.d.ts.map +1 -0
- package/dist/view/image-resize.js +191 -0
- package/dist/view/image-resize.js.map +1 -0
- package/dist/view/index.d.ts +15 -0
- package/dist/view/index.d.ts.map +1 -0
- package/dist/view/index.js +15 -0
- package/dist/view/index.js.map +1 -0
- package/dist/view/input-pipeline.d.ts +24 -0
- package/dist/view/input-pipeline.d.ts.map +1 -0
- package/dist/view/input-pipeline.js +226 -0
- package/dist/view/input-pipeline.js.map +1 -0
- package/dist/view/mutation-observer.d.ts +17 -0
- package/dist/view/mutation-observer.d.ts.map +1 -0
- package/dist/view/mutation-observer.js +62 -0
- package/dist/view/mutation-observer.js.map +1 -0
- package/dist/view/page-slots.d.ts +56 -0
- package/dist/view/page-slots.d.ts.map +1 -0
- package/dist/view/page-slots.js +230 -0
- package/dist/view/page-slots.js.map +1 -0
- package/dist/view/paginator.d.ts +17 -0
- package/dist/view/paginator.d.ts.map +1 -0
- package/dist/view/paginator.js +93 -0
- package/dist/view/paginator.js.map +1 -0
- package/dist/view/print.d.ts +42 -0
- package/dist/view/print.d.ts.map +1 -0
- package/dist/view/print.js +70 -0
- package/dist/view/print.js.map +1 -0
- package/dist/view/reconcile.d.ts +16 -0
- package/dist/view/reconcile.d.ts.map +1 -0
- package/dist/view/reconcile.js +158 -0
- package/dist/view/reconcile.js.map +1 -0
- package/dist/view/renderer.d.ts +31 -0
- package/dist/view/renderer.d.ts.map +1 -0
- package/dist/view/renderer.js +89 -0
- package/dist/view/renderer.js.map +1 -0
- package/dist/view/selection-sync.d.ts +35 -0
- package/dist/view/selection-sync.d.ts.map +1 -0
- package/dist/view/selection-sync.js +324 -0
- package/dist/view/selection-sync.js.map +1 -0
- package/dist/view/table-resize.d.ts +41 -0
- package/dist/view/table-resize.d.ts.map +1 -0
- package/dist/view/table-resize.js +216 -0
- package/dist/view/table-resize.js.map +1 -0
- package/package.json +93 -0
- package/styles/base.css +269 -0
- package/styles/dark.css +36 -0
- package/styles/light.css +13 -0
- package/styles/page.css +93 -0
- package/styles/print-a4.css +87 -0
- package/styles/print.css +88 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"image-resize.js","sourceRoot":"","sources":["../../src/view/image-resize.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export { type Attrs, type DOMSpec, HOLE, HOLE_MARKER_ATTR, renderSpec, } from './dom-spec.js';
|
|
2
|
+
export { Renderer, renderNode, getNodeRef, type NodeRenderFn, type MarkRenderFn, type RendererSpec, type NodeRef, } from './renderer.js';
|
|
3
|
+
export { defaultRenderer } from './default-renderer.js';
|
|
4
|
+
export { renderSelection, resolveDOMSelection, locateDomFromModelPos, type DomLoc } from './selection-sync.js';
|
|
5
|
+
export { EditorView, type EditorViewProps } from './editor-view.js';
|
|
6
|
+
export { reconcile } from './reconcile.js';
|
|
7
|
+
export { installInputPipeline, type InputPipelineOptions } from './input-pipeline.js';
|
|
8
|
+
export { installClipboardHandlers, type ClipboardHandlersOptions } from './clipboard.js';
|
|
9
|
+
export { installMutationObserver, type MutationObserverOptions } from './mutation-observer.js';
|
|
10
|
+
export { installTableResize } from './table-resize.js';
|
|
11
|
+
export { installImageResize } from './image-resize.js';
|
|
12
|
+
export { paginate } from './paginator.js';
|
|
13
|
+
export { installPageSlots, type PageSlotsController } from './page-slots.js';
|
|
14
|
+
export { printDocument, setPrintPageSize, type PrintOptions } from './print.js';
|
|
15
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/view/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,KAAK,EACV,KAAK,OAAO,EACZ,IAAI,EACJ,gBAAgB,EAChB,UAAU,GACX,MAAM,eAAe,CAAA;AACtB,OAAO,EACL,QAAQ,EACR,UAAU,EACV,UAAU,EACV,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,OAAO,GACb,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AACvD,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,KAAK,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAC9G,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAA;AACnE,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,OAAO,EAAE,oBAAoB,EAAE,KAAK,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AACrF,OAAO,EAAE,wBAAwB,EAAE,KAAK,wBAAwB,EAAE,MAAM,gBAAgB,CAAA;AACxF,OAAO,EAAE,uBAAuB,EAAE,KAAK,uBAAuB,EAAE,MAAM,wBAAwB,CAAA;AAC9F,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,gBAAgB,EAAE,KAAK,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AAC5E,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAA"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export { HOLE, HOLE_MARKER_ATTR, renderSpec, } from './dom-spec.js';
|
|
2
|
+
export { Renderer, renderNode, getNodeRef, } from './renderer.js';
|
|
3
|
+
export { defaultRenderer } from './default-renderer.js';
|
|
4
|
+
export { renderSelection, resolveDOMSelection, locateDomFromModelPos } from './selection-sync.js';
|
|
5
|
+
export { EditorView } from './editor-view.js';
|
|
6
|
+
export { reconcile } from './reconcile.js';
|
|
7
|
+
export { installInputPipeline } from './input-pipeline.js';
|
|
8
|
+
export { installClipboardHandlers } from './clipboard.js';
|
|
9
|
+
export { installMutationObserver } from './mutation-observer.js';
|
|
10
|
+
export { installTableResize } from './table-resize.js';
|
|
11
|
+
export { installImageResize } from './image-resize.js';
|
|
12
|
+
export { paginate } from './paginator.js';
|
|
13
|
+
export { installPageSlots } from './page-slots.js';
|
|
14
|
+
export { printDocument, setPrintPageSize } from './print.js';
|
|
15
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/view/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,IAAI,EACJ,gBAAgB,EAChB,UAAU,GACX,MAAM,eAAe,CAAA;AACtB,OAAO,EACL,QAAQ,EACR,UAAU,EACV,UAAU,GAKX,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AACvD,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,qBAAqB,EAAe,MAAM,qBAAqB,CAAA;AAC9G,OAAO,EAAE,UAAU,EAAwB,MAAM,kBAAkB,CAAA;AACnE,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,OAAO,EAAE,oBAAoB,EAA6B,MAAM,qBAAqB,CAAA;AACrF,OAAO,EAAE,wBAAwB,EAAiC,MAAM,gBAAgB,CAAA;AACxF,OAAO,EAAE,uBAAuB,EAAgC,MAAM,wBAAwB,CAAA;AAC9F,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,gBAAgB,EAA4B,MAAM,iBAAiB,CAAA;AAC5E,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAqB,MAAM,YAAY,CAAA"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { EditorView } from './editor-view.js';
|
|
2
|
+
export interface InputPipelineOptions {
|
|
3
|
+
/**
|
|
4
|
+
* Optional KeymapHandler-compatible function. Receives (event, state, dispatch)
|
|
5
|
+
* and returns true if the key was handled. If omitted, no keydown commands fire.
|
|
6
|
+
*/
|
|
7
|
+
keymap?: (event: KeyboardEvent, state: EditorView['state'], dispatch: (tr: import('../transform/transaction.js').Transaction) => void) => boolean;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Attach the v0.1 input pipeline to a view's contenteditable surface.
|
|
11
|
+
*
|
|
12
|
+
* Listens for:
|
|
13
|
+
* - beforeinput (insertText / insertParagraph / deleteContentBackward)
|
|
14
|
+
* - keydown (routed to opts.keymap if provided)
|
|
15
|
+
* - compositionstart / compositionend (IME suspend/resume)
|
|
16
|
+
*
|
|
17
|
+
* Returns an uninstall() function that removes all listeners.
|
|
18
|
+
*
|
|
19
|
+
* The pipeline is intentionally opt-in: EditorView's constructor does NOT call
|
|
20
|
+
* this. Phase 6 ships installInputPipeline as a separate export so the View
|
|
21
|
+
* remains a pure render target by default.
|
|
22
|
+
*/
|
|
23
|
+
export declare function installInputPipeline(view: EditorView, opts?: InputPipelineOptions): () => void;
|
|
24
|
+
//# sourceMappingURL=input-pipeline.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"input-pipeline.d.ts","sourceRoot":"","sources":["../../src/view/input-pipeline.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAclD,MAAM,WAAW,oBAAoB;IACnC;;;OAGG;IACH,MAAM,CAAC,EAAE,CACP,KAAK,EAAE,aAAa,EACpB,KAAK,EAAE,UAAU,CAAC,OAAO,CAAC,EAC1B,QAAQ,EAAE,CAAC,EAAE,EAAE,OAAO,6BAA6B,EAAE,WAAW,KAAK,IAAI,KACtE,OAAO,CAAA;CACb;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,GAAE,oBAAyB,GAAG,MAAM,IAAI,CAyKlG"}
|
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
import { deleteSelection, joinBackward, splitBlock } from '../commands/edit-commands.js';
|
|
2
|
+
import { Fragment } from '../model/fragment.js';
|
|
3
|
+
import { resolve } from '../model/position.js';
|
|
4
|
+
import { Slice } from '../model/slice.js';
|
|
5
|
+
import { CellSelection } from '../state/cell-selection.js';
|
|
6
|
+
import { TextSelection } from '../state/text-selection.js';
|
|
7
|
+
import { ReplaceStep } from '../transform/replace-step.js';
|
|
8
|
+
import { installMutationObserver } from './mutation-observer.js';
|
|
9
|
+
import { resolveDOMSelection } from './selection-sync.js';
|
|
10
|
+
function charBackspace(view) {
|
|
11
|
+
const state = view.state;
|
|
12
|
+
const { from, to } = state.selection;
|
|
13
|
+
if (from !== to)
|
|
14
|
+
return false;
|
|
15
|
+
if (from === 0)
|
|
16
|
+
return false;
|
|
17
|
+
const tr = state.tr.step(new ReplaceStep(from - 1, from, Slice.empty));
|
|
18
|
+
view.dispatch(tr);
|
|
19
|
+
return true;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Attach the v0.1 input pipeline to a view's contenteditable surface.
|
|
23
|
+
*
|
|
24
|
+
* Listens for:
|
|
25
|
+
* - beforeinput (insertText / insertParagraph / deleteContentBackward)
|
|
26
|
+
* - keydown (routed to opts.keymap if provided)
|
|
27
|
+
* - compositionstart / compositionend (IME suspend/resume)
|
|
28
|
+
*
|
|
29
|
+
* Returns an uninstall() function that removes all listeners.
|
|
30
|
+
*
|
|
31
|
+
* The pipeline is intentionally opt-in: EditorView's constructor does NOT call
|
|
32
|
+
* this. Phase 6 ships installInputPipeline as a separate export so the View
|
|
33
|
+
* remains a pure render target by default.
|
|
34
|
+
*/
|
|
35
|
+
export function installInputPipeline(view, opts = {}) {
|
|
36
|
+
const handlers = [];
|
|
37
|
+
function on(type, listener) {
|
|
38
|
+
view.dom.addEventListener(type, listener);
|
|
39
|
+
handlers.push([type, listener]);
|
|
40
|
+
}
|
|
41
|
+
let composing = false;
|
|
42
|
+
let compositionAnchor = null;
|
|
43
|
+
// Subsequent tasks fill in these handlers.
|
|
44
|
+
on('beforeinput', (event) => {
|
|
45
|
+
const e = event;
|
|
46
|
+
if (composing) {
|
|
47
|
+
event.preventDefault();
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
const type = e.inputType;
|
|
51
|
+
const state = view.state;
|
|
52
|
+
const sel = state.selection;
|
|
53
|
+
if (type === 'insertText') {
|
|
54
|
+
if (!e.data) {
|
|
55
|
+
event.preventDefault();
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
const slice = new Slice(Fragment.from([state.schema.text(e.data)]), 1, 1);
|
|
59
|
+
const tr = state.tr.step(new ReplaceStep(sel.from, sel.to, slice));
|
|
60
|
+
event.preventDefault();
|
|
61
|
+
view.dispatch(tr);
|
|
62
|
+
}
|
|
63
|
+
else if (type === 'insertParagraph') {
|
|
64
|
+
event.preventDefault();
|
|
65
|
+
splitBlock(state, (tr) => view.dispatch(tr));
|
|
66
|
+
}
|
|
67
|
+
else if (type === 'deleteContentBackward') {
|
|
68
|
+
event.preventDefault();
|
|
69
|
+
// Try join (cursor at start of block), then delete-selection, then char-delete.
|
|
70
|
+
if (joinBackward(state, (tr) => view.dispatch(tr)))
|
|
71
|
+
return;
|
|
72
|
+
if (deleteSelection(state, (tr) => view.dispatch(tr)))
|
|
73
|
+
return;
|
|
74
|
+
charBackspace(view);
|
|
75
|
+
}
|
|
76
|
+
else if (type === 'deleteContentForward') {
|
|
77
|
+
event.preventDefault();
|
|
78
|
+
if (deleteSelection(state, (tr) => view.dispatch(tr)))
|
|
79
|
+
return;
|
|
80
|
+
const { from } = state.selection;
|
|
81
|
+
if (from >= state.doc.content.size)
|
|
82
|
+
return;
|
|
83
|
+
const tr = state.tr.step(new ReplaceStep(from, from + 1, Slice.empty));
|
|
84
|
+
view.dispatch(tr);
|
|
85
|
+
}
|
|
86
|
+
else if (type === 'insertFromPaste') {
|
|
87
|
+
// Handled by clipboard handler; ignore here to avoid double-handling.
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
// Unhandled: cancel to avoid silent DOM divergence.
|
|
91
|
+
event.preventDefault();
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
on('keydown', (event) => {
|
|
95
|
+
if (!opts.keymap)
|
|
96
|
+
return;
|
|
97
|
+
const handled = opts.keymap(event, view.state, (tr) => view.dispatch(tr));
|
|
98
|
+
if (handled)
|
|
99
|
+
event.preventDefault();
|
|
100
|
+
});
|
|
101
|
+
on('compositionstart', () => {
|
|
102
|
+
composing = true;
|
|
103
|
+
compositionAnchor = view.state.selection.from;
|
|
104
|
+
});
|
|
105
|
+
on('compositionend', (event) => {
|
|
106
|
+
composing = false;
|
|
107
|
+
const e = event;
|
|
108
|
+
const data = e.data ?? '';
|
|
109
|
+
const anchor = compositionAnchor;
|
|
110
|
+
compositionAnchor = null;
|
|
111
|
+
if (!data || anchor === null)
|
|
112
|
+
return;
|
|
113
|
+
const state = view.state;
|
|
114
|
+
const slice = new Slice(Fragment.from([state.schema.text(data)]), 1, 1);
|
|
115
|
+
const tr = state.tr.step(new ReplaceStep(anchor, anchor, slice));
|
|
116
|
+
view.dispatch(tr);
|
|
117
|
+
});
|
|
118
|
+
// Propagate DOM selection changes (mouse click, arrow keys, triple-click) to
|
|
119
|
+
// the model.
|
|
120
|
+
//
|
|
121
|
+
// Skip rules (each protects against a real failure mode discovered during v0.2 e2e):
|
|
122
|
+
// 1. composition in progress — model selection is set on compositionend.
|
|
123
|
+
// 2. focus is outside the editor — clicking a toolbar button shouldn't move
|
|
124
|
+
// the model cursor to the (typically position-0) sentinel the browser
|
|
125
|
+
// assigns when the editor isn't focused.
|
|
126
|
+
// 3. anchorNode or focusNode IS view.dom itself — when the contenteditable
|
|
127
|
+
// element is focused but no text node is selected, the browser sometimes
|
|
128
|
+
// reports the element with offset 0. We don't treat that as a real
|
|
129
|
+
// selection; it would resolve to model position 0 (between blocks) and
|
|
130
|
+
// poison subsequent typing (depths 0/0 errors in replace()).
|
|
131
|
+
// 4. resolveDOMSelection returns null — happens for selections outside the
|
|
132
|
+
// editor or in regions without NodeRefs.
|
|
133
|
+
// 5. resolved positions equal current model selection — loop guard. Our own
|
|
134
|
+
// dispatch -> renderSelection -> selectionchange cycle would otherwise
|
|
135
|
+
// re-dispatch forever.
|
|
136
|
+
// 6. collapsed selection that resolves to depth 0 (between blocks) — same
|
|
137
|
+
// reasoning as #3: depth-0 cursors are not editable positions in v0.2.
|
|
138
|
+
const onSelectionChange = () => {
|
|
139
|
+
if (composing)
|
|
140
|
+
return;
|
|
141
|
+
const doc = view.dom.ownerDocument;
|
|
142
|
+
const active = doc.activeElement;
|
|
143
|
+
if (active && active !== view.dom && !view.dom.contains(active))
|
|
144
|
+
return;
|
|
145
|
+
const win = doc.defaultView;
|
|
146
|
+
if (!win)
|
|
147
|
+
return;
|
|
148
|
+
const domSel = win.getSelection();
|
|
149
|
+
if (!domSel || domSel.rangeCount === 0)
|
|
150
|
+
return;
|
|
151
|
+
if (domSel.anchorNode === view.dom || domSel.focusNode === view.dom)
|
|
152
|
+
return;
|
|
153
|
+
// While a CellSelection is active (e.g. during cross-cell drag), the
|
|
154
|
+
// browser keeps mutating the DOM range as the pointer moves. Don't
|
|
155
|
+
// demote the model selection back to a TextSelection on every
|
|
156
|
+
// selectionchange tick — the cell-drag controller (and Escape) are the
|
|
157
|
+
// canonical exits from a CellSelection. Re-render to clear any DOM
|
|
158
|
+
// range the browser just established.
|
|
159
|
+
if (view.state.selection instanceof CellSelection) {
|
|
160
|
+
domSel.removeAllRanges();
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
const resolved = resolveDOMSelection(view.dom, view.state.doc);
|
|
164
|
+
if (!resolved)
|
|
165
|
+
return;
|
|
166
|
+
const current = view.state.selection;
|
|
167
|
+
if (current instanceof TextSelection &&
|
|
168
|
+
current.anchor === resolved.anchor &&
|
|
169
|
+
current.head === resolved.head) {
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
let next = resolved;
|
|
173
|
+
if (next.anchor === next.head) {
|
|
174
|
+
let pos = next.anchor;
|
|
175
|
+
let depth;
|
|
176
|
+
try {
|
|
177
|
+
depth = resolve(view.state.doc, pos).depth;
|
|
178
|
+
}
|
|
179
|
+
catch {
|
|
180
|
+
return;
|
|
181
|
+
}
|
|
182
|
+
if (depth === 0) {
|
|
183
|
+
// Nudge into the nearest editable position. Prefer left (end of
|
|
184
|
+
// previous block); fall back right (start of next block).
|
|
185
|
+
let nudged = -1;
|
|
186
|
+
if (pos > 0) {
|
|
187
|
+
try {
|
|
188
|
+
if (resolve(view.state.doc, pos - 1).depth >= 1)
|
|
189
|
+
nudged = pos - 1;
|
|
190
|
+
}
|
|
191
|
+
catch { /* ignore */ }
|
|
192
|
+
}
|
|
193
|
+
if (nudged < 0 && pos < view.state.doc.content.size) {
|
|
194
|
+
try {
|
|
195
|
+
if (resolve(view.state.doc, pos + 1).depth >= 1)
|
|
196
|
+
nudged = pos + 1;
|
|
197
|
+
}
|
|
198
|
+
catch { /* ignore */ }
|
|
199
|
+
}
|
|
200
|
+
if (nudged < 0)
|
|
201
|
+
return;
|
|
202
|
+
next = new TextSelection(nudged, nudged);
|
|
203
|
+
if (current instanceof TextSelection &&
|
|
204
|
+
current.anchor === next.anchor &&
|
|
205
|
+
current.head === next.head)
|
|
206
|
+
return;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
const tr = view.state.tr;
|
|
210
|
+
tr.selectionOverride = next;
|
|
211
|
+
view.dispatch(tr);
|
|
212
|
+
};
|
|
213
|
+
const documentEl = view.dom.ownerDocument;
|
|
214
|
+
documentEl.addEventListener('selectionchange', onSelectionChange);
|
|
215
|
+
const uninstallObserver = installMutationObserver(view, {
|
|
216
|
+
shouldIgnore: () => composing,
|
|
217
|
+
});
|
|
218
|
+
return () => {
|
|
219
|
+
for (const [type, listener] of handlers) {
|
|
220
|
+
view.dom.removeEventListener(type, listener);
|
|
221
|
+
}
|
|
222
|
+
documentEl.removeEventListener('selectionchange', onSelectionChange);
|
|
223
|
+
uninstallObserver();
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
//# sourceMappingURL=input-pipeline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"input-pipeline.js","sourceRoot":"","sources":["../../src/view/input-pipeline.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { EditorView } from './editor-view.js';
|
|
2
|
+
export interface MutationObserverOptions {
|
|
3
|
+
/** Predicate consulted before reverting. Return true to ignore the mutation batch. */
|
|
4
|
+
shouldIgnore?: () => boolean;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Attach a MutationObserver to the editor's DOM that reverts any mutation
|
|
8
|
+
* the input pipeline didn't authorize, by triggering a full re-render from
|
|
9
|
+
* the current state. Returns an uninstall function.
|
|
10
|
+
*
|
|
11
|
+
* Authorized vs. unauthorized is decided by snapshotting view.state.doc on
|
|
12
|
+
* each observer fire. If doc has advanced since the last fire, the DOM is the
|
|
13
|
+
* result of our own updateState — skip reverting. If doc is unchanged but DOM
|
|
14
|
+
* mutated, the browser made an unauthorized change — revert.
|
|
15
|
+
*/
|
|
16
|
+
export declare function installMutationObserver(view: EditorView, opts?: MutationObserverOptions): () => void;
|
|
17
|
+
//# sourceMappingURL=mutation-observer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mutation-observer.d.ts","sourceRoot":"","sources":["../../src/view/mutation-observer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAElD,MAAM,WAAW,uBAAuB;IACtC,sFAAsF;IACtF,YAAY,CAAC,EAAE,MAAM,OAAO,CAAA;CAC7B;AAED;;;;;;;;;GASG;AACH,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,UAAU,EAChB,IAAI,GAAE,uBAA4B,GACjC,MAAM,IAAI,CAoCZ"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Attach a MutationObserver to the editor's DOM that reverts any mutation
|
|
3
|
+
* the input pipeline didn't authorize, by triggering a full re-render from
|
|
4
|
+
* the current state. Returns an uninstall function.
|
|
5
|
+
*
|
|
6
|
+
* Authorized vs. unauthorized is decided by snapshotting view.state.doc on
|
|
7
|
+
* each observer fire. If doc has advanced since the last fire, the DOM is the
|
|
8
|
+
* result of our own updateState — skip reverting. If doc is unchanged but DOM
|
|
9
|
+
* mutated, the browser made an unauthorized change — revert.
|
|
10
|
+
*/
|
|
11
|
+
export function installMutationObserver(view, opts = {}) {
|
|
12
|
+
let installed = true;
|
|
13
|
+
let lastDocSnapshot = view.state.doc;
|
|
14
|
+
const observer = new MutationObserver((mutations) => {
|
|
15
|
+
if (!installed)
|
|
16
|
+
return;
|
|
17
|
+
if (opts.shouldIgnore && opts.shouldIgnore())
|
|
18
|
+
return;
|
|
19
|
+
if (mutations.length === 0)
|
|
20
|
+
return;
|
|
21
|
+
if (view.state.doc !== lastDocSnapshot) {
|
|
22
|
+
lastDocSnapshot = view.state.doc;
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
// Filter out mutations that originate inside a page header/footer
|
|
26
|
+
// slot. Those slots are edited via their own SetPageMetaStep
|
|
27
|
+
// dispatch path (see installPageSlots) and live OUTSIDE the main
|
|
28
|
+
// doc's content model — they should never trigger a forceRender,
|
|
29
|
+
// which would tear down the focused slot mid-keystroke.
|
|
30
|
+
if (mutations.every((m) => isInsidePageSlot(m.target))) {
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
view.forceRender();
|
|
34
|
+
lastDocSnapshot = view.state.doc;
|
|
35
|
+
observer.takeRecords();
|
|
36
|
+
});
|
|
37
|
+
observer.observe(view.dom, {
|
|
38
|
+
childList: true,
|
|
39
|
+
subtree: true,
|
|
40
|
+
characterData: true,
|
|
41
|
+
characterDataOldValue: true,
|
|
42
|
+
});
|
|
43
|
+
return () => {
|
|
44
|
+
installed = false;
|
|
45
|
+
observer.disconnect();
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
/** True if `node` is, or is a descendant of, a `.dx-page-header` / `.dx-page-footer` slot. */
|
|
49
|
+
function isInsidePageSlot(node) {
|
|
50
|
+
let n = node;
|
|
51
|
+
while (n) {
|
|
52
|
+
if (n.nodeType === 1) {
|
|
53
|
+
const el = n;
|
|
54
|
+
if (el.classList.contains('dx-page-header') || el.classList.contains('dx-page-footer')) {
|
|
55
|
+
return true;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
n = n.parentNode;
|
|
59
|
+
}
|
|
60
|
+
return false;
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=mutation-observer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mutation-observer.js","sourceRoot":"","sources":["../../src/view/mutation-observer.ts"],"names":[],"mappings":"AAQA;;;;;;;;;GASG;AACH,MAAM,UAAU,uBAAuB,CACrC,IAAgB,EAChB,OAAgC,EAAE;IAElC,IAAI,SAAS,GAAG,IAAI,CAAA;IACpB,IAAI,eAAe,GAAW,IAAI,CAAC,KAAK,CAAC,GAAG,CAAA;IAE5C,MAAM,QAAQ,GAAG,IAAI,gBAAgB,CAAC,CAAC,SAAS,EAAE,EAAE;QAClD,IAAI,CAAC,SAAS;YAAE,OAAM;QACtB,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,EAAE;YAAE,OAAM;QACpD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;YAAE,OAAM;QAClC,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,KAAK,eAAe,EAAE,CAAC;YACvC,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAA;YAChC,OAAM;QACR,CAAC;QACD,kEAAkE;QAClE,6DAA6D;QAC7D,iEAAiE;QACjE,iEAAiE;QACjE,wDAAwD;QACxD,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;YACvD,OAAM;QACR,CAAC;QACD,IAAI,CAAC,WAAW,EAAE,CAAA;QAClB,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAA;QAChC,QAAQ,CAAC,WAAW,EAAE,CAAA;IACxB,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE;QACzB,SAAS,EAAE,IAAI;QACf,OAAO,EAAE,IAAI;QACb,aAAa,EAAE,IAAI;QACnB,qBAAqB,EAAE,IAAI;KAC5B,CAAC,CAAA;IAEF,OAAO,GAAG,EAAE;QACV,SAAS,GAAG,KAAK,CAAA;QACjB,QAAQ,CAAC,UAAU,EAAE,CAAA;IACvB,CAAC,CAAA;AACH,CAAC;AAED,8FAA8F;AAC9F,SAAS,gBAAgB,CAAC,IAAiB;IACzC,IAAI,CAAC,GAAgB,IAAI,CAAA;IACzB,OAAO,CAAC,EAAE,CAAC;QACT,IAAI,CAAC,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;YACrB,MAAM,EAAE,GAAG,CAAY,CAAA;YACvB,IAAI,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;gBACvF,OAAO,IAAI,CAAA;YACb,CAAC;QACH,CAAC;QACD,CAAC,GAAG,CAAC,CAAC,UAAU,CAAA;IAClB,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import type { EditorView } from './editor-view.js';
|
|
2
|
+
/**
|
|
3
|
+
* Controller that mounts editable header/footer "slots" into each
|
|
4
|
+
* `.dx-page` emitted by the Paginator.
|
|
5
|
+
*
|
|
6
|
+
* v0.4 simplifications:
|
|
7
|
+
* - The header/footer schema is restricted to "either empty OR a single
|
|
8
|
+
* `paragraph` containing inline content (text leaves + `page_var`
|
|
9
|
+
* atoms)". No headings, lists, tables, marks. This is the smallest
|
|
10
|
+
* shape that lets us ship the pageMeta-edit pipeline + page-number
|
|
11
|
+
* variables; richer header content is a v0.4b polish.
|
|
12
|
+
* - The first page's header and footer divs become `contenteditable`
|
|
13
|
+
* DOM nodes. Their `input` events read `slot.textContent` and
|
|
14
|
+
* dispatch a `SetPageMetaStep` through the main view. Other pages'
|
|
15
|
+
* slots are read-only mirrors re-rendered on every `refresh()`.
|
|
16
|
+
* - We deliberately do NOT mount a secondary EditorView per slot. A
|
|
17
|
+
* full sub-EditorView would let us reuse marks, decorations, the
|
|
18
|
+
* input pipeline — but it's a heavy lift relative to the v0.4 ship
|
|
19
|
+
* bar. The contenteditable + manual dispatch path is the cheapest
|
|
20
|
+
* way to drive the same `SetPageMetaStep` machinery so undo/redo
|
|
21
|
+
* crosses doc + header edits.
|
|
22
|
+
*
|
|
23
|
+
* v0.4 Track B — `page_var` substitution:
|
|
24
|
+
* - When the fragment contains `page_var` inline atoms with
|
|
25
|
+
* `kind: 'pageNumber'` or `kind: 'totalPages'`, we render those as
|
|
26
|
+
* `<span class="dx-page-var" data-kind="…">N</span>` with the
|
|
27
|
+
* per-page number substituted in. The displayed page number is
|
|
28
|
+
* `pageIndex + (pageMeta.pageNumberStartAt ?? 1)`. `totalPages` is
|
|
29
|
+
* the count of `.dx-page` elements emitted by the Paginator.
|
|
30
|
+
* - On the EDITABLE first-page slot we ALSO render `page_var` spans
|
|
31
|
+
* live (so users see "Page 1 of 3" rather than a literal "#"). The
|
|
32
|
+
* input handler still rebuilds the fragment from `slot.textContent`
|
|
33
|
+
* — which means typing into a slot that contains `page_var` nodes
|
|
34
|
+
* will replace those atoms with their last-rendered numeric text
|
|
35
|
+
* (e.g. "Page 1 of 3" becomes three text leaves). That's a known
|
|
36
|
+
* v0.4 limitation; programmatic insertion via
|
|
37
|
+
* `setHeaderWithPageNumber()` / `setFooterWithPageNumber()` is the
|
|
38
|
+
* supported authoring path until v0.4b adds a slot-aware toolbar.
|
|
39
|
+
*/
|
|
40
|
+
export interface PageSlotsController {
|
|
41
|
+
/**
|
|
42
|
+
* Called by EditorView after each paginate() pass with the freshly
|
|
43
|
+
* emitted page elements. Mounts the editable slot on the first page
|
|
44
|
+
* and renders read-only mirrors on the rest.
|
|
45
|
+
*/
|
|
46
|
+
attach(pages: HTMLElement[]): void;
|
|
47
|
+
/**
|
|
48
|
+
* Re-render every slot from the current `view.state.pageMeta`. Called
|
|
49
|
+
* after the main view updates, including selection-only updates that
|
|
50
|
+
* skip pagination.
|
|
51
|
+
*/
|
|
52
|
+
refresh(): void;
|
|
53
|
+
destroy(): void;
|
|
54
|
+
}
|
|
55
|
+
export declare function installPageSlots(view: EditorView): PageSlotsController;
|
|
56
|
+
//# sourceMappingURL=page-slots.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page-slots.d.ts","sourceRoot":"","sources":["../../src/view/page-slots.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAElD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;;OAIG;IACH,MAAM,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,IAAI,CAAA;IAClC;;;;OAIG;IACH,OAAO,IAAI,IAAI,CAAA;IACf,OAAO,IAAI,IAAI,CAAA;CAChB;AAgJD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,UAAU,GAAG,mBAAmB,CAkGtE"}
|