velo-text 1.0.0-beta.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.
- package/CHANGELOG.md +70 -0
- package/LICENSE +21 -0
- package/README.md +122 -0
- package/dist/adapters/backend/index.d.ts +4 -0
- package/dist/adapters/backend/index.d.ts.map +1 -0
- package/dist/adapters/backend/index.js +3 -0
- package/dist/adapters/backend/index.js.map +1 -0
- package/dist/adapters/backend/pdf-http.d.ts +48 -0
- package/dist/adapters/backend/pdf-http.d.ts.map +1 -0
- package/dist/adapters/backend/pdf-http.js +117 -0
- package/dist/adapters/backend/pdf-http.js.map +1 -0
- package/dist/adapters/backend/sinks.d.ts +7 -0
- package/dist/adapters/backend/sinks.d.ts.map +1 -0
- package/dist/adapters/backend/sinks.js +43 -0
- package/dist/adapters/backend/sinks.js.map +1 -0
- package/dist/adapters/browser/index.d.ts +11 -0
- package/dist/adapters/browser/index.d.ts.map +1 -0
- package/dist/adapters/browser/index.js +51 -0
- package/dist/adapters/browser/index.js.map +1 -0
- package/dist/adapters/postgres-contract/index.d.ts +45 -0
- package/dist/adapters/postgres-contract/index.d.ts.map +1 -0
- package/dist/adapters/postgres-contract/index.js +108 -0
- package/dist/adapters/postgres-contract/index.js.map +1 -0
- package/dist/adapters/s3-compatible/index.d.ts +46 -0
- package/dist/adapters/s3-compatible/index.d.ts.map +1 -0
- package/dist/adapters/s3-compatible/index.js +106 -0
- package/dist/adapters/s3-compatible/index.js.map +1 -0
- package/dist/adapters/vanilla.d.ts +5 -0
- package/dist/adapters/vanilla.d.ts.map +1 -0
- package/dist/adapters/vanilla.js +6 -0
- package/dist/adapters/vanilla.js.map +1 -0
- package/dist/assets/dimensions/index.d.ts +12 -0
- package/dist/assets/dimensions/index.d.ts.map +1 -0
- package/dist/assets/dimensions/index.js +46 -0
- package/dist/assets/dimensions/index.js.map +1 -0
- package/dist/assets/hashing/index.d.ts +7 -0
- package/dist/assets/hashing/index.d.ts.map +1 -0
- package/dist/assets/hashing/index.js +21 -0
- package/dist/assets/hashing/index.js.map +1 -0
- package/dist/assets/icons/index.d.ts +25 -0
- package/dist/assets/icons/index.d.ts.map +1 -0
- package/dist/assets/icons/index.js +107 -0
- package/dist/assets/icons/index.js.map +1 -0
- package/dist/assets/png/placeholder.d.ts +4 -0
- package/dist/assets/png/placeholder.d.ts.map +1 -0
- package/dist/assets/png/placeholder.js +13 -0
- package/dist/assets/png/placeholder.js.map +1 -0
- package/dist/assets/sniff/index.d.ts +13 -0
- package/dist/assets/sniff/index.d.ts.map +1 -0
- package/dist/assets/sniff/index.js +41 -0
- package/dist/assets/sniff/index.js.map +1 -0
- package/dist/assets/store/index.d.ts +56 -0
- package/dist/assets/store/index.d.ts.map +1 -0
- package/dist/assets/store/index.js +102 -0
- package/dist/assets/store/index.js.map +1 -0
- package/dist/assets/svg/index.d.ts +7 -0
- package/dist/assets/svg/index.d.ts.map +1 -0
- package/dist/assets/svg/index.js +82 -0
- package/dist/assets/svg/index.js.map +1 -0
- package/dist/core/equation/html.d.ts +3 -0
- package/dist/core/equation/html.d.ts.map +1 -0
- package/dist/core/equation/html.js +138 -0
- package/dist/core/equation/html.js.map +1 -0
- package/dist/core/equation/index.d.ts +19 -0
- package/dist/core/equation/index.d.ts.map +1 -0
- package/dist/core/equation/index.js +107 -0
- package/dist/core/equation/index.js.map +1 -0
- package/dist/core/events/index.d.ts +13 -0
- package/dist/core/events/index.d.ts.map +1 -0
- package/dist/core/events/index.js +18 -0
- package/dist/core/events/index.js.map +1 -0
- package/dist/core/history/history.d.ts +29 -0
- package/dist/core/history/history.d.ts.map +1 -0
- package/dist/core/history/history.js +55 -0
- package/dist/core/history/history.js.map +1 -0
- package/dist/core/history/index.d.ts +2 -0
- package/dist/core/history/index.d.ts.map +1 -0
- package/dist/core/history/index.js +2 -0
- package/dist/core/history/index.js.map +1 -0
- package/dist/core/model/block.d.ts +121 -0
- package/dist/core/model/block.d.ts.map +1 -0
- package/dist/core/model/block.js +2 -0
- package/dist/core/model/block.js.map +1 -0
- package/dist/core/model/document.d.ts +70 -0
- package/dist/core/model/document.d.ts.map +1 -0
- package/dist/core/model/document.js +2 -0
- package/dist/core/model/document.js.map +1 -0
- package/dist/core/model/factories.d.ts +35 -0
- package/dist/core/model/factories.d.ts.map +1 -0
- package/dist/core/model/factories.js +115 -0
- package/dist/core/model/factories.js.map +1 -0
- package/dist/core/model/index.d.ts +4 -0
- package/dist/core/model/index.d.ts.map +1 -0
- package/dist/core/model/index.js +4 -0
- package/dist/core/model/index.js.map +1 -0
- package/dist/core/model/inline.d.ts +43 -0
- package/dist/core/model/inline.d.ts.map +1 -0
- package/dist/core/model/inline.js +2 -0
- package/dist/core/model/inline.js.map +1 -0
- package/dist/core/model/primitives.d.ts +36 -0
- package/dist/core/model/primitives.d.ts.map +1 -0
- package/dist/core/model/primitives.js +3 -0
- package/dist/core/model/primitives.js.map +1 -0
- package/dist/core/model/table-look.d.ts +12 -0
- package/dist/core/model/table-look.d.ts.map +1 -0
- package/dist/core/model/table-look.js +99 -0
- package/dist/core/model/table-look.js.map +1 -0
- package/dist/core/model/types.d.ts +5 -0
- package/dist/core/model/types.d.ts.map +1 -0
- package/dist/core/model/types.js +5 -0
- package/dist/core/model/types.js.map +1 -0
- package/dist/core/normalize/index.d.ts +2 -0
- package/dist/core/normalize/index.d.ts.map +1 -0
- package/dist/core/normalize/index.js +2 -0
- package/dist/core/normalize/index.js.map +1 -0
- package/dist/core/normalize/normalize.d.ts +8 -0
- package/dist/core/normalize/normalize.d.ts.map +1 -0
- package/dist/core/normalize/normalize.js +145 -0
- package/dist/core/normalize/normalize.js.map +1 -0
- package/dist/core/operations/index.d.ts +2 -0
- package/dist/core/operations/index.d.ts.map +1 -0
- package/dist/core/operations/index.js +2 -0
- package/dist/core/operations/index.js.map +1 -0
- package/dist/core/operations/operations.d.ts +53 -0
- package/dist/core/operations/operations.d.ts.map +1 -0
- package/dist/core/operations/operations.js +92 -0
- package/dist/core/operations/operations.js.map +1 -0
- package/dist/core/plugin/index.d.ts +84 -0
- package/dist/core/plugin/index.d.ts.map +1 -0
- package/dist/core/plugin/index.js +137 -0
- package/dist/core/plugin/index.js.map +1 -0
- package/dist/core/schema/canonical.d.ts +6 -0
- package/dist/core/schema/canonical.d.ts.map +1 -0
- package/dist/core/schema/canonical.js +42 -0
- package/dist/core/schema/canonical.js.map +1 -0
- package/dist/core/schema/index.d.ts +3 -0
- package/dist/core/schema/index.d.ts.map +1 -0
- package/dist/core/schema/index.js +3 -0
- package/dist/core/schema/index.js.map +1 -0
- package/dist/core/schema/validator.d.ts +23 -0
- package/dist/core/schema/validator.d.ts.map +1 -0
- package/dist/core/schema/validator.js +276 -0
- package/dist/core/schema/validator.js.map +1 -0
- package/dist/core/selection/index.d.ts +2 -0
- package/dist/core/selection/index.d.ts.map +1 -0
- package/dist/core/selection/index.js +2 -0
- package/dist/core/selection/index.js.map +1 -0
- package/dist/core/selection/selection.d.ts +12 -0
- package/dist/core/selection/selection.d.ts.map +1 -0
- package/dist/core/selection/selection.js +38 -0
- package/dist/core/selection/selection.js.map +1 -0
- package/dist/editor-web/accessibility/index.d.ts +40 -0
- package/dist/editor-web/accessibility/index.d.ts.map +1 -0
- package/dist/editor-web/accessibility/index.js +170 -0
- package/dist/editor-web/accessibility/index.js.map +1 -0
- package/dist/editor-web/clipboard/index.d.ts +52 -0
- package/dist/editor-web/clipboard/index.d.ts.map +1 -0
- package/dist/editor-web/clipboard/index.js +154 -0
- package/dist/editor-web/clipboard/index.js.map +1 -0
- package/dist/editor-web/controller/column-presets.d.ts +9 -0
- package/dist/editor-web/controller/column-presets.d.ts.map +1 -0
- package/dist/editor-web/controller/column-presets.js +11 -0
- package/dist/editor-web/controller/column-presets.js.map +1 -0
- package/dist/editor-web/controller/column-resize.d.ts +6 -0
- package/dist/editor-web/controller/column-resize.d.ts.map +1 -0
- package/dist/editor-web/controller/column-resize.js +119 -0
- package/dist/editor-web/controller/column-resize.js.map +1 -0
- package/dist/editor-web/controller/columns-ui.d.ts +5 -0
- package/dist/editor-web/controller/columns-ui.d.ts.map +1 -0
- package/dist/editor-web/controller/columns-ui.js +107 -0
- package/dist/editor-web/controller/columns-ui.js.map +1 -0
- package/dist/editor-web/controller/commands.d.ts +27 -0
- package/dist/editor-web/controller/commands.d.ts.map +1 -0
- package/dist/editor-web/controller/commands.js +198 -0
- package/dist/editor-web/controller/commands.js.map +1 -0
- package/dist/editor-web/controller/format-commands.d.ts +12 -0
- package/dist/editor-web/controller/format-commands.d.ts.map +1 -0
- package/dist/editor-web/controller/format-commands.js +77 -0
- package/dist/editor-web/controller/format-commands.js.map +1 -0
- package/dist/editor-web/controller/handles.d.ts +7 -0
- package/dist/editor-web/controller/handles.d.ts.map +1 -0
- package/dist/editor-web/controller/handles.js +205 -0
- package/dist/editor-web/controller/handles.js.map +1 -0
- package/dist/editor-web/controller/host.d.ts +8 -0
- package/dist/editor-web/controller/host.d.ts.map +1 -0
- package/dist/editor-web/controller/host.js +48 -0
- package/dist/editor-web/controller/host.js.map +1 -0
- package/dist/editor-web/controller/image-resize.d.ts +9 -0
- package/dist/editor-web/controller/image-resize.d.ts.map +1 -0
- package/dist/editor-web/controller/image-resize.js +163 -0
- package/dist/editor-web/controller/image-resize.js.map +1 -0
- package/dist/editor-web/controller/index.d.ts +6 -0
- package/dist/editor-web/controller/index.d.ts.map +1 -0
- package/dist/editor-web/controller/index.js +190 -0
- package/dist/editor-web/controller/index.js.map +1 -0
- package/dist/editor-web/controller/nesting.d.ts +27 -0
- package/dist/editor-web/controller/nesting.d.ts.map +1 -0
- package/dist/editor-web/controller/nesting.js +218 -0
- package/dist/editor-web/controller/nesting.js.map +1 -0
- package/dist/editor-web/controller/place-overlay.d.ts +6 -0
- package/dist/editor-web/controller/place-overlay.d.ts.map +1 -0
- package/dist/editor-web/controller/place-overlay.js +55 -0
- package/dist/editor-web/controller/place-overlay.js.map +1 -0
- package/dist/editor-web/controller/size-picker.d.ts +28 -0
- package/dist/editor-web/controller/size-picker.d.ts.map +1 -0
- package/dist/editor-web/controller/size-picker.js +177 -0
- package/dist/editor-web/controller/size-picker.js.map +1 -0
- package/dist/editor-web/controller/table-resize.d.ts +14 -0
- package/dist/editor-web/controller/table-resize.d.ts.map +1 -0
- package/dist/editor-web/controller/table-resize.js +178 -0
- package/dist/editor-web/controller/table-resize.js.map +1 -0
- package/dist/editor-web/controller/table-ui.d.ts +5 -0
- package/dist/editor-web/controller/table-ui.d.ts.map +1 -0
- package/dist/editor-web/controller/table-ui.js +214 -0
- package/dist/editor-web/controller/table-ui.js.map +1 -0
- package/dist/editor-web/controller/types.d.ts +95 -0
- package/dist/editor-web/controller/types.d.ts.map +1 -0
- package/dist/editor-web/controller/types.js +4 -0
- package/dist/editor-web/controller/types.js.map +1 -0
- package/dist/editor-web/controller/variable-ui.d.ts +5 -0
- package/dist/editor-web/controller/variable-ui.d.ts.map +1 -0
- package/dist/editor-web/controller/variable-ui.js +75 -0
- package/dist/editor-web/controller/variable-ui.js.map +1 -0
- package/dist/editor-web/images/index.d.ts +9 -0
- package/dist/editor-web/images/index.d.ts.map +1 -0
- package/dist/editor-web/images/index.js +18 -0
- package/dist/editor-web/images/index.js.map +1 -0
- package/dist/editor-web/index.d.ts +10 -0
- package/dist/editor-web/index.d.ts.map +1 -0
- package/dist/editor-web/index.js +10 -0
- package/dist/editor-web/index.js.map +1 -0
- package/dist/editor-web/input/index.d.ts +75 -0
- package/dist/editor-web/input/index.d.ts.map +1 -0
- package/dist/editor-web/input/index.js +151 -0
- package/dist/editor-web/input/index.js.map +1 -0
- package/dist/editor-web/tables/index.d.ts +47 -0
- package/dist/editor-web/tables/index.d.ts.map +1 -0
- package/dist/editor-web/tables/index.js +159 -0
- package/dist/editor-web/tables/index.js.map +1 -0
- package/dist/editor-web/toolbar/index.d.ts +17 -0
- package/dist/editor-web/toolbar/index.d.ts.map +1 -0
- package/dist/editor-web/toolbar/index.js +36 -0
- package/dist/editor-web/toolbar/index.js.map +1 -0
- package/dist/editor-web/ux/attach.d.ts +21 -0
- package/dist/editor-web/ux/attach.d.ts.map +1 -0
- package/dist/editor-web/ux/attach.js +61 -0
- package/dist/editor-web/ux/attach.js.map +1 -0
- package/dist/editor-web/ux/command-palette.d.ts +11 -0
- package/dist/editor-web/ux/command-palette.d.ts.map +1 -0
- package/dist/editor-web/ux/command-palette.js +135 -0
- package/dist/editor-web/ux/command-palette.js.map +1 -0
- package/dist/editor-web/ux/equation-editor.d.ts +11 -0
- package/dist/editor-web/ux/equation-editor.d.ts.map +1 -0
- package/dist/editor-web/ux/equation-editor.js +130 -0
- package/dist/editor-web/ux/equation-editor.js.map +1 -0
- package/dist/editor-web/ux/equation-palette.d.ts +11 -0
- package/dist/editor-web/ux/equation-palette.d.ts.map +1 -0
- package/dist/editor-web/ux/equation-palette.js +90 -0
- package/dist/editor-web/ux/equation-palette.js.map +1 -0
- package/dist/editor-web/ux/find-replace.d.ts +6 -0
- package/dist/editor-web/ux/find-replace.d.ts.map +1 -0
- package/dist/editor-web/ux/find-replace.js +125 -0
- package/dist/editor-web/ux/find-replace.js.map +1 -0
- package/dist/editor-web/ux/find-text.d.ts +10 -0
- package/dist/editor-web/ux/find-text.d.ts.map +1 -0
- package/dist/editor-web/ux/find-text.js +101 -0
- package/dist/editor-web/ux/find-text.js.map +1 -0
- package/dist/editor-web/ux/image-drop.d.ts +7 -0
- package/dist/editor-web/ux/image-drop.d.ts.map +1 -0
- package/dist/editor-web/ux/image-drop.js +198 -0
- package/dist/editor-web/ux/image-drop.js.map +1 -0
- package/dist/editor-web/ux/link-ui.d.ts +6 -0
- package/dist/editor-web/ux/link-ui.d.ts.map +1 -0
- package/dist/editor-web/ux/link-ui.js +50 -0
- package/dist/editor-web/ux/link-ui.js.map +1 -0
- package/dist/editor-web/ux/outline.d.ts +9 -0
- package/dist/editor-web/ux/outline.d.ts.map +1 -0
- package/dist/editor-web/ux/outline.js +48 -0
- package/dist/editor-web/ux/outline.js.map +1 -0
- package/dist/editor-web/ux/page-preview.d.ts +6 -0
- package/dist/editor-web/ux/page-preview.d.ts.map +1 -0
- package/dist/editor-web/ux/page-preview.js +90 -0
- package/dist/editor-web/ux/page-preview.js.map +1 -0
- package/dist/editor-web/ux/selection-bubble.d.ts +6 -0
- package/dist/editor-web/ux/selection-bubble.d.ts.map +1 -0
- package/dist/editor-web/ux/selection-bubble.js +79 -0
- package/dist/editor-web/ux/selection-bubble.js.map +1 -0
- package/dist/editor-web/ux/shortcuts-sheet.d.ts +6 -0
- package/dist/editor-web/ux/shortcuts-sheet.d.ts.map +1 -0
- package/dist/editor-web/ux/shortcuts-sheet.js +58 -0
- package/dist/editor-web/ux/shortcuts-sheet.js.map +1 -0
- package/dist/editor-web/view/index.d.ts +3 -0
- package/dist/editor-web/view/index.d.ts.map +1 -0
- package/dist/editor-web/view/index.js +3 -0
- package/dist/editor-web/view/index.js.map +1 -0
- package/dist/editor-web/view/parse-inlines.d.ts +15 -0
- package/dist/editor-web/view/parse-inlines.d.ts.map +1 -0
- package/dist/editor-web/view/parse-inlines.js +107 -0
- package/dist/editor-web/view/parse-inlines.js.map +1 -0
- package/dist/editor-web/view/parse.d.ts +8 -0
- package/dist/editor-web/view/parse.d.ts.map +1 -0
- package/dist/editor-web/view/parse.js +238 -0
- package/dist/editor-web/view/parse.js.map +1 -0
- package/dist/editor-web/view/reconcile.d.ts +26 -0
- package/dist/editor-web/view/reconcile.d.ts.map +1 -0
- package/dist/editor-web/view/reconcile.js +142 -0
- package/dist/editor-web/view/reconcile.js.map +1 -0
- package/dist/editor-web/view/render.d.ts +14 -0
- package/dist/editor-web/view/render.d.ts.map +1 -0
- package/dist/editor-web/view/render.js +162 -0
- package/dist/editor-web/view/render.js.map +1 -0
- package/dist/export/docx/document-xml.d.ts +3 -0
- package/dist/export/docx/document-xml.d.ts.map +1 -0
- package/dist/export/docx/document-xml.js +218 -0
- package/dist/export/docx/document-xml.js.map +1 -0
- package/dist/export/docx/package-parts.d.ts +9 -0
- package/dist/export/docx/package-parts.d.ts.map +1 -0
- package/dist/export/docx/package-parts.js +91 -0
- package/dist/export/docx/package-parts.js.map +1 -0
- package/dist/export/docx/writer.d.ts +17 -0
- package/dist/export/docx/writer.d.ts.map +1 -0
- package/dist/export/docx/writer.js +48 -0
- package/dist/export/docx/writer.js.map +1 -0
- package/dist/export/images/downsample.d.ts +19 -0
- package/dist/export/images/downsample.d.ts.map +1 -0
- package/dist/export/images/downsample.js +64 -0
- package/dist/export/images/downsample.js.map +1 -0
- package/dist/export/images/png-encode.d.ts +4 -0
- package/dist/export/images/png-encode.d.ts.map +1 -0
- package/dist/export/images/png-encode.js +86 -0
- package/dist/export/images/png-encode.js.map +1 -0
- package/dist/export/images/prepare.d.ts +22 -0
- package/dist/export/images/prepare.d.ts.map +1 -0
- package/dist/export/images/prepare.js +29 -0
- package/dist/export/images/prepare.js.map +1 -0
- package/dist/export/images/rasterize.d.ts +7 -0
- package/dist/export/images/rasterize.d.ts.map +1 -0
- package/dist/export/images/rasterize.js +62 -0
- package/dist/export/images/rasterize.js.map +1 -0
- package/dist/export/index.d.ts +45 -0
- package/dist/export/index.d.ts.map +1 -0
- package/dist/export/index.js +52 -0
- package/dist/export/index.js.map +1 -0
- package/dist/export/layout/index.d.ts +23 -0
- package/dist/export/layout/index.d.ts.map +1 -0
- package/dist/export/layout/index.js +18 -0
- package/dist/export/layout/index.js.map +1 -0
- package/dist/export/layout/layout-blocks.d.ts +5 -0
- package/dist/export/layout/layout-blocks.d.ts.map +1 -0
- package/dist/export/layout/layout-blocks.js +91 -0
- package/dist/export/layout/layout-blocks.js.map +1 -0
- package/dist/export/layout/layout-flow.d.ts +25 -0
- package/dist/export/layout/layout-flow.d.ts.map +1 -0
- package/dist/export/layout/layout-flow.js +23 -0
- package/dist/export/layout/layout-flow.js.map +1 -0
- package/dist/export/layout/layout-structured.d.ts +4 -0
- package/dist/export/layout/layout-structured.d.ts.map +1 -0
- package/dist/export/layout/layout-structured.js +153 -0
- package/dist/export/layout/layout-structured.js.map +1 -0
- package/dist/export/layout/layout-types.d.ts +35 -0
- package/dist/export/layout/layout-types.d.ts.map +1 -0
- package/dist/export/layout/layout-types.js +2 -0
- package/dist/export/layout/layout-types.js.map +1 -0
- package/dist/export/layout/pagination.d.ts +9 -0
- package/dist/export/layout/pagination.d.ts.map +1 -0
- package/dist/export/layout/pagination.js +38 -0
- package/dist/export/layout/pagination.js.map +1 -0
- package/dist/export/layout/text.d.ts +47 -0
- package/dist/export/layout/text.d.ts.map +1 -0
- package/dist/export/layout/text.js +119 -0
- package/dist/export/layout/text.js.map +1 -0
- package/dist/export/layout/units.d.ts +30 -0
- package/dist/export/layout/units.d.ts.map +1 -0
- package/dist/export/layout/units.js +55 -0
- package/dist/export/layout/units.js.map +1 -0
- package/dist/export/odt/writer.d.ts +24 -0
- package/dist/export/odt/writer.d.ts.map +1 -0
- package/dist/export/odt/writer.js +258 -0
- package/dist/export/odt/writer.js.map +1 -0
- package/dist/export/pdf/assemble.d.ts +9 -0
- package/dist/export/pdf/assemble.d.ts.map +1 -0
- package/dist/export/pdf/assemble.js +105 -0
- package/dist/export/pdf/assemble.js.map +1 -0
- package/dist/export/pdf/diagnostics.d.ts +11 -0
- package/dist/export/pdf/diagnostics.d.ts.map +1 -0
- package/dist/export/pdf/diagnostics.js +88 -0
- package/dist/export/pdf/diagnostics.js.map +1 -0
- package/dist/export/pdf/equation.d.ts +55 -0
- package/dist/export/pdf/equation.d.ts.map +1 -0
- package/dist/export/pdf/equation.js +301 -0
- package/dist/export/pdf/equation.js.map +1 -0
- package/dist/export/pdf/export-pdf.d.ts +33 -0
- package/dist/export/pdf/export-pdf.d.ts.map +1 -0
- package/dist/export/pdf/export-pdf.js +54 -0
- package/dist/export/pdf/export-pdf.js.map +1 -0
- package/dist/export/pdf/fonts.d.ts +7 -0
- package/dist/export/pdf/fonts.d.ts.map +1 -0
- package/dist/export/pdf/fonts.js +15 -0
- package/dist/export/pdf/fonts.js.map +1 -0
- package/dist/export/pdf/image.d.ts +27 -0
- package/dist/export/pdf/image.d.ts.map +1 -0
- package/dist/export/pdf/image.js +271 -0
- package/dist/export/pdf/image.js.map +1 -0
- package/dist/export/pdf/layout-pages.d.ts +9 -0
- package/dist/export/pdf/layout-pages.d.ts.map +1 -0
- package/dist/export/pdf/layout-pages.js +174 -0
- package/dist/export/pdf/layout-pages.js.map +1 -0
- package/dist/export/pdf/layout-table.d.ts +29 -0
- package/dist/export/pdf/layout-table.d.ts.map +1 -0
- package/dist/export/pdf/layout-table.js +216 -0
- package/dist/export/pdf/layout-table.js.map +1 -0
- package/dist/export/pdf/page-metrics.d.ts +11 -0
- package/dist/export/pdf/page-metrics.d.ts.map +1 -0
- package/dist/export/pdf/page-metrics.js +14 -0
- package/dist/export/pdf/page-metrics.js.map +1 -0
- package/dist/export/pdf/pdf-model.d.ts +36 -0
- package/dist/export/pdf/pdf-model.d.ts.map +1 -0
- package/dist/export/pdf/pdf-model.js +4 -0
- package/dist/export/pdf/pdf-model.js.map +1 -0
- package/dist/export/pdf/stream.d.ts +6 -0
- package/dist/export/pdf/stream.d.ts.map +1 -0
- package/dist/export/pdf/stream.js +213 -0
- package/dist/export/pdf/stream.js.map +1 -0
- package/dist/export/pdf/writer.d.ts +26 -0
- package/dist/export/pdf/writer.d.ts.map +1 -0
- package/dist/export/pdf/writer.js +31 -0
- package/dist/export/pdf/writer.js.map +1 -0
- package/dist/export/validate.d.ts +29 -0
- package/dist/export/validate.d.ts.map +1 -0
- package/dist/export/validate.js +127 -0
- package/dist/export/validate.js.map +1 -0
- package/dist/export/xml/writer.d.ts +19 -0
- package/dist/export/xml/writer.d.ts.map +1 -0
- package/dist/export/xml/writer.js +57 -0
- package/dist/export/xml/writer.js.map +1 -0
- package/dist/export/zip/crc32.d.ts +2 -0
- package/dist/export/zip/crc32.d.ts.map +1 -0
- package/dist/export/zip/crc32.js +20 -0
- package/dist/export/zip/crc32.js.map +1 -0
- package/dist/export/zip/deflate.d.ts +15 -0
- package/dist/export/zip/deflate.d.ts.map +1 -0
- package/dist/export/zip/deflate.js +28 -0
- package/dist/export/zip/deflate.js.map +1 -0
- package/dist/export/zip/index.d.ts +3 -0
- package/dist/export/zip/index.d.ts.map +1 -0
- package/dist/export/zip/index.js +3 -0
- package/dist/export/zip/index.js.map +1 -0
- package/dist/export/zip/zipWriter.d.ts +23 -0
- package/dist/export/zip/zipWriter.d.ts.map +1 -0
- package/dist/export/zip/zipWriter.js +123 -0
- package/dist/export/zip/zipWriter.js.map +1 -0
- package/dist/public-api/index.d.ts +46 -0
- package/dist/public-api/index.d.ts.map +1 -0
- package/dist/public-api/index.js +40 -0
- package/dist/public-api/index.js.map +1 -0
- package/dist/template/diagnostics/index.d.ts +8 -0
- package/dist/template/diagnostics/index.d.ts.map +1 -0
- package/dist/template/diagnostics/index.js +4 -0
- package/dist/template/diagnostics/index.js.map +1 -0
- package/dist/template/formatter/index.d.ts +9 -0
- package/dist/template/formatter/index.d.ts.map +1 -0
- package/dist/template/formatter/index.js +27 -0
- package/dist/template/formatter/index.js.map +1 -0
- package/dist/template/index.d.ts +3 -0
- package/dist/template/index.d.ts.map +1 -0
- package/dist/template/index.js +3 -0
- package/dist/template/index.js.map +1 -0
- package/dist/template/parser/parser.d.ts +42 -0
- package/dist/template/parser/parser.d.ts.map +1 -0
- package/dist/template/parser/parser.js +135 -0
- package/dist/template/parser/parser.js.map +1 -0
- package/dist/template/resolver/format.d.ts +11 -0
- package/dist/template/resolver/format.d.ts.map +1 -0
- package/dist/template/resolver/format.js +80 -0
- package/dist/template/resolver/format.js.map +1 -0
- package/dist/template/resolver/resolver.d.ts +31 -0
- package/dist/template/resolver/resolver.d.ts.map +1 -0
- package/dist/template/resolver/resolver.js +218 -0
- package/dist/template/resolver/resolver.js.map +1 -0
- package/dist/theme/index.d.ts +26 -0
- package/dist/theme/index.d.ts.map +1 -0
- package/dist/theme/index.js +87 -0
- package/dist/theme/index.js.map +1 -0
- package/package.json +110 -0
- package/schemas/portable-doc-v1.json +250 -0
- package/themes/base.css +71 -0
- package/themes/components.css +135 -0
- package/themes/editor-chrome.css +174 -0
- package/themes/editor-columns.css +121 -0
- package/themes/editor-overlays.css +464 -0
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
import { sniffImage } from "../../assets/sniff/index.js";
|
|
2
|
+
import { createImageBlock } from "../../core/model/factories.js";
|
|
3
|
+
import { hideImageMeta, placeImageMeta, syncImageResizeOverlay } from "../controller/image-resize.js";
|
|
4
|
+
import { commitInsert, dropHostFromPoint, locFromHostEl, moveBlockToHost } from "../controller/nesting.js";
|
|
5
|
+
const BLOCK_MIME = "application/x-pde-block";
|
|
6
|
+
export function attachImageDrop(s, cmds) {
|
|
7
|
+
let hint = null;
|
|
8
|
+
let msg = null;
|
|
9
|
+
let movingId = "";
|
|
10
|
+
function hideMeta() { hideImageMeta(s); }
|
|
11
|
+
function clearHost() {
|
|
12
|
+
for (const el of s.container.querySelectorAll(".pde-drop-host"))
|
|
13
|
+
el.classList.remove("pde-drop-host");
|
|
14
|
+
}
|
|
15
|
+
function hostFrom(e) {
|
|
16
|
+
const t = e.target;
|
|
17
|
+
const fromPoint = Number.isFinite(e.clientX) ? dropHostFromPoint(s, e.clientX, e.clientY) : null;
|
|
18
|
+
if (fromPoint)
|
|
19
|
+
return fromPoint;
|
|
20
|
+
const cell = t?.closest?.("td, th, .pde-column");
|
|
21
|
+
if (cell && s.container.contains(cell))
|
|
22
|
+
return cell;
|
|
23
|
+
const table = t?.closest?.("table");
|
|
24
|
+
if (table && s.container.contains(table))
|
|
25
|
+
return table.querySelector("td, th");
|
|
26
|
+
const cols = t?.closest?.(".pde-columns");
|
|
27
|
+
if (cols && s.container.contains(cols))
|
|
28
|
+
return cols.querySelector(".pde-column");
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
function showHint(on) {
|
|
32
|
+
if (!on) {
|
|
33
|
+
hint?.remove();
|
|
34
|
+
hint = null;
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
if (hint)
|
|
38
|
+
return;
|
|
39
|
+
hint = s.ownerDoc.createElement("div");
|
|
40
|
+
hint.className = "pde-drop-hint";
|
|
41
|
+
hint.textContent = "Drop image";
|
|
42
|
+
s.wrapper.appendChild(hint);
|
|
43
|
+
}
|
|
44
|
+
function toast(text) {
|
|
45
|
+
msg?.remove();
|
|
46
|
+
msg = s.ownerDoc.createElement("div");
|
|
47
|
+
msg.className = "pde-drop-msg";
|
|
48
|
+
msg.setAttribute("role", "status");
|
|
49
|
+
msg.textContent = text;
|
|
50
|
+
s.wrapper.appendChild(msg);
|
|
51
|
+
s.ownerDoc.defaultView?.setTimeout(() => { msg?.remove(); msg = null; }, 2400);
|
|
52
|
+
}
|
|
53
|
+
async function ingest(file, at) {
|
|
54
|
+
const bytes = new Uint8Array(await file.arrayBuffer());
|
|
55
|
+
const sniff = sniffImage(bytes, file.type);
|
|
56
|
+
if (!sniff.valid) {
|
|
57
|
+
toast(sniff.reason ?? "Type not allowed");
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
const host = s.opts.onImageFile;
|
|
61
|
+
if (!host) {
|
|
62
|
+
toast("Host must handle image files");
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
try {
|
|
66
|
+
const res = await host(file);
|
|
67
|
+
if (res.error) {
|
|
68
|
+
toast(res.error);
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
const loc = locFromHostEl(s, at);
|
|
72
|
+
if (loc)
|
|
73
|
+
commitInsert(s, createImageBlock(s.idGen, res.assetId, { alt: "image", widthUm: res.widthUm, heightUm: res.heightUm }), loc);
|
|
74
|
+
else
|
|
75
|
+
cmds.insertImage(res.assetId, res.widthUm, res.heightUm);
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
toast("Could not add image");
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
const onDragStart = (e) => {
|
|
82
|
+
const fig = e.target.closest?.("figure[data-node-type='image']");
|
|
83
|
+
if (!fig || !s.container.contains(fig))
|
|
84
|
+
return;
|
|
85
|
+
movingId = fig.getAttribute("data-node-id") ?? "";
|
|
86
|
+
e.dataTransfer?.setData(BLOCK_MIME, movingId);
|
|
87
|
+
e.dataTransfer?.setData("text/plain", movingId);
|
|
88
|
+
if (e.dataTransfer) {
|
|
89
|
+
e.dataTransfer.effectAllowed = "move";
|
|
90
|
+
try {
|
|
91
|
+
e.dataTransfer.setDragImage(fig, 16, 16);
|
|
92
|
+
}
|
|
93
|
+
catch { /* jsdom */ }
|
|
94
|
+
}
|
|
95
|
+
};
|
|
96
|
+
const onDragOver = (e) => {
|
|
97
|
+
const types = [...(e.dataTransfer?.types ?? [])];
|
|
98
|
+
const host = hostFrom(e);
|
|
99
|
+
const moving = Boolean(movingId) || types.includes(BLOCK_MIME) || types.includes("text/plain");
|
|
100
|
+
if (types.includes("Files") || moving || host) {
|
|
101
|
+
e.preventDefault();
|
|
102
|
+
if (e.dataTransfer)
|
|
103
|
+
e.dataTransfer.dropEffect = moving ? "move" : "copy";
|
|
104
|
+
}
|
|
105
|
+
if (types.includes("Files"))
|
|
106
|
+
showHint(true);
|
|
107
|
+
clearHost();
|
|
108
|
+
host?.classList.add("pde-drop-host");
|
|
109
|
+
host?.closest("table, .pde-columns")?.classList.add("pde-drop-host");
|
|
110
|
+
};
|
|
111
|
+
const onDragLeave = () => { showHint(false); };
|
|
112
|
+
const onDragEnd = () => { movingId = ""; showHint(false); clearHost(); };
|
|
113
|
+
const onDrop = (e) => {
|
|
114
|
+
e.preventDefault();
|
|
115
|
+
showHint(false);
|
|
116
|
+
const at = hostFrom(e);
|
|
117
|
+
clearHost();
|
|
118
|
+
const blockId = movingId || e.dataTransfer?.getData(BLOCK_MIME) || e.dataTransfer?.getData("text/plain") || "";
|
|
119
|
+
movingId = "";
|
|
120
|
+
if (blockId && at && moveBlockToHost(s, blockId, at))
|
|
121
|
+
return;
|
|
122
|
+
const file = e.dataTransfer?.files?.[0];
|
|
123
|
+
if (file)
|
|
124
|
+
void ingest(file, at);
|
|
125
|
+
};
|
|
126
|
+
for (const el of [s.container, s.wrapper]) {
|
|
127
|
+
el.addEventListener("dragstart", onDragStart);
|
|
128
|
+
el.addEventListener("dragover", onDragOver);
|
|
129
|
+
el.addEventListener("dragleave", onDragLeave);
|
|
130
|
+
el.addEventListener("drop", onDrop);
|
|
131
|
+
}
|
|
132
|
+
s.container.addEventListener("dragend", onDragEnd);
|
|
133
|
+
const onDocDown = (e) => {
|
|
134
|
+
const n = e.target;
|
|
135
|
+
const t = (n && n.nodeType === 1 ? n : n?.parentElement);
|
|
136
|
+
if (t?.closest?.(".pde-img-meta, .pde-image-resize, figure[data-node-type='image']"))
|
|
137
|
+
return;
|
|
138
|
+
hideMeta();
|
|
139
|
+
};
|
|
140
|
+
const onKey = (e) => { if (e.key === "Escape")
|
|
141
|
+
hideMeta(); };
|
|
142
|
+
s.ownerDoc.addEventListener("pointerdown", onDocDown, true);
|
|
143
|
+
s.ownerDoc.addEventListener("keydown", onKey);
|
|
144
|
+
s.addBoth("click", ((e) => {
|
|
145
|
+
const t = e.target;
|
|
146
|
+
if (t.closest?.(".pde-img-meta"))
|
|
147
|
+
return;
|
|
148
|
+
const fig = t.closest?.("figure[data-node-type='image']");
|
|
149
|
+
if (!fig || !s.container.contains(fig)) {
|
|
150
|
+
hideMeta();
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
hideMeta();
|
|
154
|
+
const box = s.ownerDoc.createElement("div");
|
|
155
|
+
box.className = "pde-img-meta";
|
|
156
|
+
box.dataset.imgOwner = fig.getAttribute("data-node-id") ?? "";
|
|
157
|
+
const alt = fig.getAttribute("data-alt") ?? "";
|
|
158
|
+
const title = fig.getAttribute("data-title") ?? "";
|
|
159
|
+
box.innerHTML = `<label>Alt text<input data-alt value="${esc(alt)}" placeholder="Describe the image" /></label>
|
|
160
|
+
<label>Caption<input data-cap value="${esc(title)}" placeholder="Optional" /></label>`;
|
|
161
|
+
const apply = () => {
|
|
162
|
+
const a = box.querySelector("[data-alt]").value;
|
|
163
|
+
const c = box.querySelector("[data-cap]").value;
|
|
164
|
+
fig.setAttribute("data-alt", a);
|
|
165
|
+
fig.querySelector("img")?.setAttribute("alt", a);
|
|
166
|
+
if (c)
|
|
167
|
+
fig.setAttribute("data-title", c);
|
|
168
|
+
else
|
|
169
|
+
fig.removeAttribute("data-title");
|
|
170
|
+
s.syncFromDom(false);
|
|
171
|
+
};
|
|
172
|
+
box.querySelectorAll("input").forEach((inp) => inp.addEventListener("change", apply));
|
|
173
|
+
s.ui.appendChild(box);
|
|
174
|
+
placeImageMeta(s, box, fig);
|
|
175
|
+
syncImageResizeOverlay(s);
|
|
176
|
+
}));
|
|
177
|
+
return {
|
|
178
|
+
destroy() {
|
|
179
|
+
showHint(false);
|
|
180
|
+
msg?.remove();
|
|
181
|
+
hideMeta();
|
|
182
|
+
clearHost();
|
|
183
|
+
s.ownerDoc.removeEventListener("pointerdown", onDocDown, true);
|
|
184
|
+
s.ownerDoc.removeEventListener("keydown", onKey);
|
|
185
|
+
for (const el of [s.container, s.wrapper]) {
|
|
186
|
+
el.removeEventListener("dragstart", onDragStart);
|
|
187
|
+
el.removeEventListener("dragover", onDragOver);
|
|
188
|
+
el.removeEventListener("dragleave", onDragLeave);
|
|
189
|
+
el.removeEventListener("drop", onDrop);
|
|
190
|
+
}
|
|
191
|
+
s.container.removeEventListener("dragend", onDragEnd);
|
|
192
|
+
},
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
function esc(v) {
|
|
196
|
+
return v.replace(/&/g, "&").replace(/"/g, """).replace(/</g, "<");
|
|
197
|
+
}
|
|
198
|
+
//# sourceMappingURL=image-drop.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"image-drop.js","sourceRoot":"","sources":["../../../src/editor-web/ux/image-drop.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { bindCommands } from "../controller/commands.js";
|
|
2
|
+
import type { EditorState } from "../controller/types.js";
|
|
3
|
+
export declare function attachLinkUi(s: EditorState, cmds: ReturnType<typeof bindCommands>): {
|
|
4
|
+
destroy: () => void;
|
|
5
|
+
};
|
|
6
|
+
//# sourceMappingURL=link-ui.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"link-ui.d.ts","sourceRoot":"","sources":["../../../src/editor-web/ux/link-ui.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAG1D,wBAAgB,YAAY,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,CAAC,OAAO,YAAY,CAAC,GAAG;IAAE,OAAO,EAAE,MAAM,IAAI,CAAA;CAAE,CAsC3G"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { clampToWrapper } from "../controller/table-resize.js";
|
|
2
|
+
export function attachLinkUi(s, cmds) {
|
|
3
|
+
let pop = null;
|
|
4
|
+
function hide() { pop?.remove(); pop = null; }
|
|
5
|
+
s.addBoth("click", ((e) => {
|
|
6
|
+
const a = e.target.closest?.("a");
|
|
7
|
+
if (!a || !s.container.contains(a)) {
|
|
8
|
+
hide();
|
|
9
|
+
return;
|
|
10
|
+
}
|
|
11
|
+
e.preventDefault();
|
|
12
|
+
hide();
|
|
13
|
+
const r = a.getBoundingClientRect();
|
|
14
|
+
const w = s.wrapper.getBoundingClientRect();
|
|
15
|
+
pop = s.ownerDoc.createElement("div");
|
|
16
|
+
pop.className = "pde-link-pop";
|
|
17
|
+
pop.innerHTML = `<input data-href aria-label="URL" value="${esc(a.getAttribute("href") ?? "")}" />
|
|
18
|
+
<button type="button" data-ok>Save</button>
|
|
19
|
+
<button type="button" data-off>Unlink</button>`;
|
|
20
|
+
pop.style.left = `${r.left - w.left}px`;
|
|
21
|
+
pop.style.top = `${r.bottom - w.top + 4}px`;
|
|
22
|
+
pop.querySelector("[data-ok]").addEventListener("click", () => {
|
|
23
|
+
const href = pop.querySelector("[data-href]").value.trim();
|
|
24
|
+
if (!/^https?:|^mailto:|^#/i.test(href))
|
|
25
|
+
return;
|
|
26
|
+
a.setAttribute("href", href);
|
|
27
|
+
s.syncFromDom(false);
|
|
28
|
+
hide();
|
|
29
|
+
});
|
|
30
|
+
pop.querySelector("[data-off]").addEventListener("click", () => {
|
|
31
|
+
cmds.clearFormat();
|
|
32
|
+
try {
|
|
33
|
+
s.ownerDoc.execCommand("unlink");
|
|
34
|
+
}
|
|
35
|
+
catch { /* ignore */ }
|
|
36
|
+
s.syncFromDom(false);
|
|
37
|
+
hide();
|
|
38
|
+
});
|
|
39
|
+
s.wrapper.appendChild(pop);
|
|
40
|
+
clampToWrapper(s, pop);
|
|
41
|
+
}));
|
|
42
|
+
const onKey = (e) => { if (e.key === "Escape")
|
|
43
|
+
hide(); };
|
|
44
|
+
s.container.addEventListener("keydown", onKey);
|
|
45
|
+
return { destroy() { hide(); s.container.removeEventListener("keydown", onKey); } };
|
|
46
|
+
}
|
|
47
|
+
function esc(v) {
|
|
48
|
+
return v.replace(/&/g, "&").replace(/"/g, """).replace(/</g, "<");
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=link-ui.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"link-ui.js","sourceRoot":"","sources":["../../../src/editor-web/ux/link-ui.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { PortableDocument } from "../../core/model/types.js";
|
|
2
|
+
export interface OutlineEntry {
|
|
3
|
+
id: string;
|
|
4
|
+
level: 1 | 2 | 3;
|
|
5
|
+
text: string;
|
|
6
|
+
}
|
|
7
|
+
export declare function collectOutline(doc: PortableDocument): OutlineEntry[];
|
|
8
|
+
export declare function focusBlockEl(container: HTMLElement, id: string): boolean;
|
|
9
|
+
//# sourceMappingURL=outline.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"outline.d.ts","sourceRoot":"","sources":["../../../src/editor-web/ux/outline.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAyB,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAEzF,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAuBD,wBAAgB,cAAc,CAAC,GAAG,EAAE,gBAAgB,GAAG,YAAY,EAAE,CAIpE;AAED,wBAAgB,YAAY,CAAC,SAAS,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAaxE"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
function inlineText(nodes) {
|
|
2
|
+
return nodes.map((n) => {
|
|
3
|
+
if (n.type === "text")
|
|
4
|
+
return n.text;
|
|
5
|
+
if (n.type === "variable")
|
|
6
|
+
return n.source;
|
|
7
|
+
if (n.type === "link")
|
|
8
|
+
return inlineText(n.children);
|
|
9
|
+
return "";
|
|
10
|
+
}).join("");
|
|
11
|
+
}
|
|
12
|
+
function walk(blocks, out) {
|
|
13
|
+
for (const b of blocks) {
|
|
14
|
+
if (b.type === "heading" && b.level <= 3) {
|
|
15
|
+
out.push({ id: b.id, level: b.level, text: inlineText(b.children).trim() || "Untitled" });
|
|
16
|
+
}
|
|
17
|
+
else if (b.type === "table") {
|
|
18
|
+
for (const row of b.rows)
|
|
19
|
+
for (const cell of row.cells)
|
|
20
|
+
walk(cell.blocks, out);
|
|
21
|
+
}
|
|
22
|
+
else if (b.type === "columns") {
|
|
23
|
+
for (const col of b.columns)
|
|
24
|
+
walk(col.blocks, out);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
export function collectOutline(doc) {
|
|
29
|
+
const out = [];
|
|
30
|
+
walk(doc.root.children, out);
|
|
31
|
+
return out;
|
|
32
|
+
}
|
|
33
|
+
export function focusBlockEl(container, id) {
|
|
34
|
+
const el = container.querySelector(`[data-node-id="${id.replace(/"/g, "")}"]`);
|
|
35
|
+
if (!el)
|
|
36
|
+
return false;
|
|
37
|
+
el.scrollIntoView?.({ block: "center" });
|
|
38
|
+
const sel = container.ownerDocument.getSelection();
|
|
39
|
+
const range = container.ownerDocument.createRange();
|
|
40
|
+
range.selectNodeContents(el);
|
|
41
|
+
range.collapse(true);
|
|
42
|
+
sel?.removeAllRanges();
|
|
43
|
+
sel?.addRange(range);
|
|
44
|
+
el.focus?.();
|
|
45
|
+
container.focus();
|
|
46
|
+
return true;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=outline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"outline.js","sourceRoot":"","sources":["../../../src/editor-web/ux/outline.ts"],"names":[],"mappings":"AAQA,SAAS,UAAU,CAAC,KAAmB;IACrC,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACrB,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM;YAAE,OAAO,CAAC,CAAC,IAAI,CAAC;QACrC,IAAI,CAAC,CAAC,IAAI,KAAK,UAAU;YAAE,OAAO,CAAC,CAAC,MAAM,CAAC;QAC3C,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM;YAAE,OAAO,UAAU,CAAC,CAAC,CAAC,QAAwB,CAAC,CAAC;QACrE,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,CAAC;AAED,SAAS,IAAI,CAAC,MAAmB,EAAE,GAAmB;IACpD,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC;YACzC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,KAAkB,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,IAAI,UAAU,EAAE,CAAC,CAAC;QACzG,CAAC;aAAM,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAC9B,KAAK,MAAM,GAAG,IAAI,CAAC,CAAC,IAAI;gBAAE,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK;oBAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACjF,CAAC;aAAM,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAChC,KAAK,MAAM,GAAG,IAAI,CAAC,CAAC,OAAO;gBAAE,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,GAAqB;IAClD,MAAM,GAAG,GAAmB,EAAE,CAAC;IAC/B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IAC7B,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,SAAsB,EAAE,EAAU;IAC7D,MAAM,EAAE,GAAG,SAAS,CAAC,aAAa,CAAC,kBAAkB,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAuB,CAAC;IACrG,IAAI,CAAC,EAAE;QAAE,OAAO,KAAK,CAAC;IACtB,EAAE,CAAC,cAAc,EAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;IACzC,MAAM,GAAG,GAAG,SAAS,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC;IACnD,MAAM,KAAK,GAAG,SAAS,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC;IACpD,KAAK,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;IAC7B,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACrB,GAAG,EAAE,eAAe,EAAE,CAAC;IACvB,GAAG,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;IACrB,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC;IACb,SAAS,CAAC,KAAK,EAAE,CAAC;IAClB,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { EditorState } from "../controller/types.js";
|
|
2
|
+
export declare function applyPagePreview(s: EditorState, on: boolean): string[];
|
|
3
|
+
export declare function clearKeepTogether(container: HTMLElement): void;
|
|
4
|
+
/** Push a block to the next page when it would be split by a page band. */
|
|
5
|
+
export declare function keepBlocksOnPage(container: HTMLElement, pageH: number, mTop: number, mBot: number, gap: number): void;
|
|
6
|
+
//# sourceMappingURL=page-preview.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page-preview.d.ts","sourceRoot":"","sources":["../../../src/editor-web/ux/page-preview.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAI1D,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE,OAAO,GAAG,MAAM,EAAE,CAoCtE;AAED,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,WAAW,GAAG,IAAI,CAQ9D;AAED,2EAA2E;AAC3E,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,WAAW,EACtB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,GACV,IAAI,CAmCN"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { buildLayout } from "../../export/layout/index.js";
|
|
2
|
+
import { umToPx } from "../../export/layout/units.js";
|
|
3
|
+
const PAGE_GAP_PX = 24;
|
|
4
|
+
export function applyPagePreview(s, on) {
|
|
5
|
+
const page = s.getDoc().page;
|
|
6
|
+
s.wrapper.classList.toggle("pde-page-preview", on);
|
|
7
|
+
if (!on) {
|
|
8
|
+
s.wrapper.style.removeProperty("--pde-page-w");
|
|
9
|
+
s.wrapper.style.removeProperty("--pde-page-h");
|
|
10
|
+
s.wrapper.style.removeProperty("--pde-page-gap");
|
|
11
|
+
s.wrapper.style.removeProperty("--pde-m-t");
|
|
12
|
+
s.wrapper.style.removeProperty("--pde-m-r");
|
|
13
|
+
s.wrapper.style.removeProperty("--pde-m-b");
|
|
14
|
+
s.wrapper.style.removeProperty("--pde-m-l");
|
|
15
|
+
s.wrapper.querySelector(".pde-page-diag")?.remove();
|
|
16
|
+
clearKeepTogether(s.container);
|
|
17
|
+
return [];
|
|
18
|
+
}
|
|
19
|
+
const pageH = Math.round(umToPx(page.heightUm));
|
|
20
|
+
const mTop = Math.round(umToPx(page.marginUm.top));
|
|
21
|
+
const mBot = Math.round(umToPx(page.marginUm.bottom));
|
|
22
|
+
s.wrapper.style.setProperty("--pde-page-w", `${Math.round(umToPx(page.widthUm))}px`);
|
|
23
|
+
s.wrapper.style.setProperty("--pde-page-h", `${pageH}px`);
|
|
24
|
+
s.wrapper.style.setProperty("--pde-page-gap", `${PAGE_GAP_PX}px`);
|
|
25
|
+
s.wrapper.style.setProperty("--pde-m-t", `${mTop}px`);
|
|
26
|
+
s.wrapper.style.setProperty("--pde-m-r", `${Math.round(umToPx(page.marginUm.right))}px`);
|
|
27
|
+
s.wrapper.style.setProperty("--pde-m-b", `${mBot}px`);
|
|
28
|
+
s.wrapper.style.setProperty("--pde-m-l", `${Math.round(umToPx(page.marginUm.left))}px`);
|
|
29
|
+
keepBlocksOnPage(s.container, pageH, mTop, mBot, PAGE_GAP_PX);
|
|
30
|
+
const layout = buildLayout(s.getDoc());
|
|
31
|
+
const texts = layout.diagnostics.map((d) => d.message);
|
|
32
|
+
s.wrapper.querySelector(".pde-page-diag")?.remove();
|
|
33
|
+
if (texts.length) {
|
|
34
|
+
const el = s.ownerDoc.createElement("div");
|
|
35
|
+
el.className = "pde-page-diag";
|
|
36
|
+
el.textContent = texts.join(" · ");
|
|
37
|
+
s.wrapper.appendChild(el);
|
|
38
|
+
}
|
|
39
|
+
return texts;
|
|
40
|
+
}
|
|
41
|
+
export function clearKeepTogether(container) {
|
|
42
|
+
for (const node of Array.from(container.children)) {
|
|
43
|
+
const el = node;
|
|
44
|
+
if (el.dataset.pdeKeep) {
|
|
45
|
+
el.style.marginTop = "";
|
|
46
|
+
delete el.dataset.pdeKeep;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/** Push a block to the next page when it would be split by a page band. */
|
|
51
|
+
export function keepBlocksOnPage(container, pageH, mTop, mBot, gap) {
|
|
52
|
+
if (pageH <= 0)
|
|
53
|
+
return;
|
|
54
|
+
const cycle = pageH + gap;
|
|
55
|
+
const usable = Math.max(24, pageH - mTop - mBot);
|
|
56
|
+
clearKeepTogether(container);
|
|
57
|
+
for (const node of Array.from(container.children)) {
|
|
58
|
+
const el = node;
|
|
59
|
+
if (el.dataset.pdeUi)
|
|
60
|
+
continue;
|
|
61
|
+
const top = el.offsetTop;
|
|
62
|
+
const h = el.offsetHeight;
|
|
63
|
+
if (h <= 0)
|
|
64
|
+
continue;
|
|
65
|
+
const inCycle = ((top % cycle) + cycle) % cycle;
|
|
66
|
+
const isBreak = el.getAttribute("data-node-type") === "page-break";
|
|
67
|
+
if (isBreak) {
|
|
68
|
+
const rest = pageH - inCycle;
|
|
69
|
+
const push = Math.max(0, rest + gap);
|
|
70
|
+
if (push > 1) {
|
|
71
|
+
el.style.marginTop = `${Math.round(push)}px`;
|
|
72
|
+
el.dataset.pdeKeep = "1";
|
|
73
|
+
}
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
if (inCycle >= pageH) {
|
|
77
|
+
const push = cycle - inCycle + mTop;
|
|
78
|
+
el.style.marginTop = `${Math.round(push)}px`;
|
|
79
|
+
el.dataset.pdeKeep = "1";
|
|
80
|
+
continue;
|
|
81
|
+
}
|
|
82
|
+
const room = pageH - mBot - inCycle;
|
|
83
|
+
if (h > room && h <= usable && inCycle > mTop) {
|
|
84
|
+
const push = room + mBot + gap + mTop;
|
|
85
|
+
el.style.marginTop = `${Math.round(push)}px`;
|
|
86
|
+
el.dataset.pdeKeep = "1";
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=page-preview.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page-preview.js","sourceRoot":"","sources":["../../../src/editor-web/ux/page-preview.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { bindCommands } from "../controller/commands.js";
|
|
2
|
+
import type { EditorState } from "../controller/types.js";
|
|
3
|
+
export declare function attachSelectionBubble(s: EditorState, cmds: ReturnType<typeof bindCommands>): {
|
|
4
|
+
destroy: () => void;
|
|
5
|
+
};
|
|
6
|
+
//# sourceMappingURL=selection-bubble.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"selection-bubble.d.ts","sourceRoot":"","sources":["../../../src/editor-web/ux/selection-bubble.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAG1D,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,CAAC,OAAO,YAAY,CAAC,GAAG;IAAE,OAAO,EAAE,MAAM,IAAI,CAAA;CAAE,CAsEpH"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { getIconSvg } from "../../assets/icons/index.js";
|
|
2
|
+
import { clampToWrapper } from "../controller/table-resize.js";
|
|
3
|
+
export function attachSelectionBubble(s, cmds) {
|
|
4
|
+
let bubble = null;
|
|
5
|
+
function hide() { bubble?.remove(); bubble = null; }
|
|
6
|
+
function show() {
|
|
7
|
+
const sel = s.selection();
|
|
8
|
+
if (!sel || sel.isCollapsed || !sel.rangeCount) {
|
|
9
|
+
hide();
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
const range = sel.getRangeAt(0);
|
|
13
|
+
if (!s.container.contains(range.commonAncestorContainer)) {
|
|
14
|
+
hide();
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
hide();
|
|
18
|
+
const r = typeof range.getBoundingClientRect === "function"
|
|
19
|
+
? range.getBoundingClientRect()
|
|
20
|
+
: { left: 8, top: 24, bottom: 24 };
|
|
21
|
+
const w = s.wrapper.getBoundingClientRect();
|
|
22
|
+
bubble = s.ownerDoc.createElement("div");
|
|
23
|
+
bubble.className = "pde-sel-bubble";
|
|
24
|
+
bubble.setAttribute("role", "toolbar");
|
|
25
|
+
bubble.setAttribute("aria-label", "Selection formatting");
|
|
26
|
+
const actions = [
|
|
27
|
+
["bold", "Bold", () => cmds.toggleMark("bold")],
|
|
28
|
+
["italic", "Italic", () => cmds.toggleMark("italic")],
|
|
29
|
+
["underline", "Underline", () => cmds.toggleMark("underline")],
|
|
30
|
+
["alignLeft", "Align left", () => cmds.setAlign("left")],
|
|
31
|
+
["alignCenter", "Align center", () => cmds.setAlign("center")],
|
|
32
|
+
["alignRight", "Align right", () => cmds.setAlign("right")],
|
|
33
|
+
["alignJustify", "Justify", () => cmds.setAlign("justify")],
|
|
34
|
+
["link", "Link", () => {
|
|
35
|
+
const href = s.ownerDoc.defaultView?.prompt?.("Link (https://, mailto:, #)", "https://") ?? "";
|
|
36
|
+
if (href)
|
|
37
|
+
cmds.insertLink(href);
|
|
38
|
+
}],
|
|
39
|
+
["eraser", "Clear formatting", () => cmds.clearFormat()],
|
|
40
|
+
];
|
|
41
|
+
for (const [icon, label, run] of actions) {
|
|
42
|
+
const b = s.ownerDoc.createElement("button");
|
|
43
|
+
b.type = "button";
|
|
44
|
+
b.innerHTML = getIconSvg(icon, { size: 16 });
|
|
45
|
+
b.setAttribute("aria-label", label);
|
|
46
|
+
b.title = label;
|
|
47
|
+
b.onmousedown = (ev) => ev.preventDefault();
|
|
48
|
+
b.onclick = () => { run(); hide(); };
|
|
49
|
+
bubble.appendChild(b);
|
|
50
|
+
}
|
|
51
|
+
bubble.style.left = `${Math.max(8, r.left - w.left)}px`;
|
|
52
|
+
bubble.style.top = `${Math.max(0, r.top - w.top - 40)}px`;
|
|
53
|
+
s.wrapper.appendChild(bubble);
|
|
54
|
+
clampToWrapper(s, bubble);
|
|
55
|
+
}
|
|
56
|
+
const onSel = () => {
|
|
57
|
+
if (s.destroyed)
|
|
58
|
+
return;
|
|
59
|
+
show();
|
|
60
|
+
};
|
|
61
|
+
const onKey = (e) => {
|
|
62
|
+
if (e.key === "Escape")
|
|
63
|
+
hide();
|
|
64
|
+
};
|
|
65
|
+
s.ownerDoc.addEventListener("selectionchange", onSel);
|
|
66
|
+
s.container.addEventListener("keyup", onSel);
|
|
67
|
+
s.container.addEventListener("mouseup", onSel);
|
|
68
|
+
s.container.addEventListener("keydown", onKey);
|
|
69
|
+
return {
|
|
70
|
+
destroy() {
|
|
71
|
+
hide();
|
|
72
|
+
s.ownerDoc.removeEventListener("selectionchange", onSel);
|
|
73
|
+
s.container.removeEventListener("keyup", onSel);
|
|
74
|
+
s.container.removeEventListener("mouseup", onSel);
|
|
75
|
+
s.container.removeEventListener("keydown", onKey);
|
|
76
|
+
},
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=selection-bubble.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"selection-bubble.js","sourceRoot":"","sources":["../../../src/editor-web/ux/selection-bubble.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shortcuts-sheet.d.ts","sourceRoot":"","sources":["../../../src/editor-web/ux/shortcuts-sheet.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAY1D,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,WAAW,GAAG;IAAE,IAAI,EAAE,MAAM,IAAI,CAAC;IAAC,OAAO,EAAE,MAAM,IAAI,CAAA;CAAE,CA4C7F"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
const ROWS = [
|
|
2
|
+
["Mod+Shift+P", "Command palette"],
|
|
3
|
+
["/", "Slash menu (empty paragraph)"],
|
|
4
|
+
["Mod+F / Mod+H", "Find / replace"],
|
|
5
|
+
["Mod+B / I / U", "Bold / italic / underline"],
|
|
6
|
+
["Mod+Z / Mod+Y", "Undo / redo"],
|
|
7
|
+
["?", "This shortcut list"],
|
|
8
|
+
["Esc", "Close overlays"],
|
|
9
|
+
];
|
|
10
|
+
export function attachShortcutSheet(s) {
|
|
11
|
+
let sheet = null;
|
|
12
|
+
function destroy() { sheet?.remove(); sheet = null; }
|
|
13
|
+
function open() {
|
|
14
|
+
destroy();
|
|
15
|
+
sheet = s.ownerDoc.createElement("div");
|
|
16
|
+
sheet.className = "pde-keys";
|
|
17
|
+
sheet.setAttribute("role", "dialog");
|
|
18
|
+
sheet.setAttribute("aria-label", "Keyboard shortcuts");
|
|
19
|
+
const table = s.ownerDoc.createElement("table");
|
|
20
|
+
for (const [k, v] of ROWS) {
|
|
21
|
+
const tr = s.ownerDoc.createElement("tr");
|
|
22
|
+
const td1 = s.ownerDoc.createElement("th");
|
|
23
|
+
const td2 = s.ownerDoc.createElement("td");
|
|
24
|
+
td1.textContent = k;
|
|
25
|
+
td2.textContent = v;
|
|
26
|
+
tr.append(td1, td2);
|
|
27
|
+
table.appendChild(tr);
|
|
28
|
+
}
|
|
29
|
+
const close = s.ownerDoc.createElement("button");
|
|
30
|
+
close.type = "button";
|
|
31
|
+
close.textContent = "Close";
|
|
32
|
+
close.onclick = () => destroy();
|
|
33
|
+
sheet.append(table, close);
|
|
34
|
+
s.wrapper.appendChild(sheet);
|
|
35
|
+
}
|
|
36
|
+
const onKey = (e) => {
|
|
37
|
+
const t = e.target;
|
|
38
|
+
if (t.closest?.("input, textarea"))
|
|
39
|
+
return;
|
|
40
|
+
if (e.key === "?" && !e.ctrlKey && !e.metaKey) {
|
|
41
|
+
e.preventDefault();
|
|
42
|
+
open();
|
|
43
|
+
}
|
|
44
|
+
if (e.key === "Escape")
|
|
45
|
+
destroy();
|
|
46
|
+
};
|
|
47
|
+
s.container.addEventListener("keydown", onKey);
|
|
48
|
+
s.ownerDoc.addEventListener("keydown", onKey);
|
|
49
|
+
return {
|
|
50
|
+
open,
|
|
51
|
+
destroy() {
|
|
52
|
+
destroy();
|
|
53
|
+
s.container.removeEventListener("keydown", onKey);
|
|
54
|
+
s.ownerDoc.removeEventListener("keydown", onKey);
|
|
55
|
+
},
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=shortcuts-sheet.js.map
|