@limetech/lime-elements 40.6.0 → 40.6.2
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 +15 -0
- package/dist/cjs/{adapt-color-contrast-Beo1IEl_.js → adapt-color-contrast-h6iwOfZd.js} +1 -1
- package/dist/cjs/{checkbox.template-BPk8WkQF.js → checkbox.template-CoNVC4Nf.js} +2 -2
- package/dist/cjs/{component-CFk7Dfoi.js → component-Cz24PdGy.js} +3 -3
- package/dist/cjs/{component-BrNWuGdj.js → component-DNiVfYHV.js} +1 -1
- package/dist/cjs/{component-y8swlNNR.js → component-GW2n79GH.js} +1 -1
- package/dist/cjs/{component-UyqdiWGc.js → component-xiw46M1b.js} +1 -1
- package/dist/cjs/{files-DI4jItxi.js → files-DpGigQ8k.js} +1 -1
- package/dist/cjs/{format-bytes-CpUKKU86.js → format-bytes-WTHVI718.js} +1 -4
- package/dist/cjs/{hotkeys-BtR8uxvl.js → hotkeys-D761KWnZ.js} +1 -0
- package/dist/cjs/{image-resize-CG2fitJT.js → image-resize-JlRLB97I.js} +1 -0
- package/dist/cjs/{image.template-DY7qwbuy.js → image.template-DlF-f23b.js} +1 -1
- package/dist/cjs/{index--B6-r0uo.js → index-BlsqxTB1.js} +1 -7
- package/dist/cjs/index.cjs.js +1 -1
- package/dist/cjs/{keycodes-k-EdzcMX.js → keycodes-BQ_AERli.js} +4 -0
- package/dist/cjs/{language-CaqPKPyW.js → language-v-MMS6ym.js} +1 -1
- package/dist/cjs/lime-elements.cjs.js +2 -2
- package/dist/cjs/limel-3d-hover-effect-glow.cjs.entry.js +2 -2
- package/dist/cjs/limel-action-bar_3.cjs.entry.js +20 -18
- package/dist/cjs/limel-ai-avatar.cjs.entry.js +5 -5
- package/dist/cjs/limel-badge.cjs.entry.js +3 -3
- package/dist/cjs/limel-banner.cjs.entry.js +2 -2
- package/dist/cjs/limel-breadcrumbs_6.cjs.entry.js +86 -86
- package/dist/cjs/limel-button-group.cjs.entry.js +3 -3
- package/dist/cjs/limel-button.cjs.entry.js +4 -4
- package/dist/cjs/limel-callout.cjs.entry.js +6 -6
- package/dist/cjs/limel-card.cjs.entry.js +8 -7
- package/dist/cjs/limel-chart.cjs.entry.js +5 -5
- package/dist/cjs/limel-checkbox.cjs.entry.js +12 -10
- package/dist/cjs/limel-chip-set.cjs.entry.js +35 -44
- package/dist/cjs/limel-chip_2.cjs.entry.js +10 -10
- package/dist/cjs/limel-circular-progress.cjs.entry.js +2 -2
- package/dist/cjs/limel-code-diff.cjs.entry.js +25 -28
- package/dist/cjs/limel-code-editor.cjs.entry.js +17 -12
- package/dist/cjs/limel-collapsible-section.cjs.entry.js +8 -8
- package/dist/cjs/limel-color-picker-palette.cjs.entry.js +3 -3
- package/dist/cjs/limel-color-picker.cjs.entry.js +6 -5
- package/dist/cjs/limel-config.cjs.entry.js +3 -3
- package/dist/cjs/limel-date-picker.cjs.entry.js +12 -15
- package/dist/cjs/limel-dialog.cjs.entry.js +8 -11
- package/dist/cjs/limel-dock-button.cjs.entry.js +6 -11
- package/dist/cjs/limel-dock.cjs.entry.js +3 -3
- package/dist/cjs/limel-drag-handle.cjs.entry.js +6 -6
- package/dist/cjs/limel-dynamic-label.cjs.entry.js +1 -1
- package/dist/cjs/limel-email-viewer.cjs.entry.js +11 -17
- package/dist/cjs/limel-file-dropzone_2.cjs.entry.js +11 -12
- package/dist/cjs/limel-file-viewer.cjs.entry.js +1098 -1146
- package/dist/cjs/limel-file.cjs.entry.js +17 -16
- package/dist/cjs/limel-flatpickr-adapter.cjs.entry.js +100 -94
- package/dist/cjs/limel-flex-container.cjs.entry.js +2 -2
- package/dist/cjs/limel-form.cjs.entry.js +65 -50
- package/dist/cjs/limel-grid.cjs.entry.js +2 -2
- package/dist/cjs/limel-header.cjs.entry.js +2 -2
- package/dist/cjs/limel-help-content.cjs.entry.js +2 -2
- package/dist/cjs/limel-help.cjs.entry.js +3 -3
- package/dist/cjs/limel-helper-line_3.cjs.entry.js +14 -16
- package/dist/cjs/limel-hotkey_4.cjs.entry.js +23 -23
- package/dist/cjs/limel-icon-button.cjs.entry.js +4 -4
- package/dist/cjs/limel-icon.cjs.entry.js +15 -13
- package/dist/cjs/limel-info-tile.cjs.entry.js +10 -10
- package/dist/cjs/limel-list-item.cjs.entry.js +10 -10
- package/dist/cjs/limel-markdown.cjs.entry.js +25 -22
- package/dist/cjs/limel-masonry-layout.cjs.entry.js +6 -5
- package/dist/cjs/limel-menu-item-meta.cjs.entry.js +3 -3
- package/dist/cjs/limel-pagination-jump.cjs.entry.js +18 -16
- package/dist/cjs/limel-pagination.cjs.entry.js +10 -9
- package/dist/cjs/limel-picker.cjs.entry.js +32 -30
- package/dist/cjs/limel-popover_2.cjs.entry.js +26 -22
- package/dist/cjs/limel-profile-picture.cjs.entry.js +12 -11
- package/dist/cjs/limel-progress-flow-item.cjs.entry.js +1 -1
- package/dist/cjs/limel-progress-flow.cjs.entry.js +11 -10
- package/dist/cjs/limel-prosemirror-adapter.cjs.entry.js +475 -407
- package/dist/cjs/limel-radio-button-group.cjs.entry.js +2 -2
- package/dist/cjs/limel-radio-button.cjs.entry.js +3 -3
- package/dist/cjs/limel-scroller.cjs.entry.js +180 -0
- package/dist/cjs/limel-select.cjs.entry.js +20 -20
- package/dist/cjs/limel-shortcut.cjs.entry.js +1 -1
- package/dist/cjs/limel-slider.cjs.entry.js +18 -27
- package/dist/cjs/limel-snackbar.cjs.entry.js +5 -5
- package/dist/cjs/limel-split-button.cjs.entry.js +1 -1
- package/dist/cjs/limel-switch.cjs.entry.js +3 -3
- package/dist/cjs/limel-tab-bar.cjs.entry.js +235 -2036
- package/dist/cjs/limel-tab-panel.cjs.entry.js +12 -9
- package/dist/cjs/limel-table.cjs.entry.js +527 -106
- package/dist/cjs/limel-text-editor-link-menu.cjs.entry.js +16 -15
- package/dist/cjs/limel-text-editor.cjs.entry.js +3 -3
- package/dist/cjs/loader.cjs.js +2 -2
- package/dist/cjs/{make-enter-clickable-NuTMC9MU.js → make-enter-clickable-BZHEWIJD.js} +19 -12
- package/dist/cjs/{markdown-exporter-9p7d3Q76.js → markdown-exporter-C-UW43FF.js} +1 -1
- package/dist/cjs/{markdown-parser-Cgv5Y9Z4.js → markdown-parser-ssDij8_l.js} +24 -22
- package/dist/cjs/{moment-CqRdiK10.js → moment-Cfsz2WF1.js} +1062 -833
- package/dist/cjs/{ponyfill-BgIFyUG5.js → ponyfill-CHp7Zocr.js} +0 -1
- package/dist/cjs/{random-string-BTzDB2ee.js → random-string-CFCtFh5l.js} +1 -0
- package/dist/cjs/{render-list-component-5ZKWpCnM.js → render-list-component-BtAliHQp.js} +3 -5
- package/dist/cjs/{sv-BSR4W58y.js → sv-Co78RX70.js} +31 -3
- package/dist/cjs/{translations-DFFpR6AZ.js → translations-CNTWud2a.js} +5 -8
- package/dist/collection/collection-manifest.json +1 -0
- package/dist/collection/components/3d-hover-effect-glow/3d-hover-effect-glow.js +1 -1
- package/dist/collection/components/action-bar/action-bar-item/action-bar-item.js +8 -7
- package/dist/collection/components/action-bar/action-bar-item/action-bar-overflow-menu.js +1 -1
- package/dist/collection/components/action-bar/action-bar.js +6 -5
- package/dist/collection/components/ai-avatar/ai-avatar.js +1 -1
- package/dist/collection/components/badge/badge.js +2 -2
- package/dist/collection/components/banner/banner.js +1 -1
- package/dist/collection/components/breadcrumbs/breadcrumbs.js +2 -2
- package/dist/collection/components/button/button.js +2 -2
- package/dist/collection/components/button-group/button-group.js +1 -1
- package/dist/collection/components/callout/callout.js +1 -1
- package/dist/collection/components/card/card.js +6 -5
- package/dist/collection/components/checkbox/checkbox.js +9 -7
- package/dist/collection/components/checkbox/checkbox.template.js +1 -1
- package/dist/collection/components/chip/chip.js +1 -1
- package/dist/collection/components/chip-set/chip-set-input-helpers.js +18 -21
- package/dist/collection/components/chip-set/chip-set.js +7 -13
- package/dist/collection/components/circular-progress/circular-progress.js +1 -1
- package/dist/collection/components/code-diff/code-diff.js +19 -22
- package/dist/collection/components/code-diff/diff-engine.js +2 -2
- package/dist/collection/components/code-editor/code-editor.js +8 -3
- package/dist/collection/components/collapsible-section/collapsible-section.js +1 -1
- package/dist/collection/components/color-picker/color-picker-palette.js +2 -2
- package/dist/collection/components/color-picker/color-picker.js +5 -4
- package/dist/collection/components/config/config.js +2 -2
- package/dist/collection/components/date-picker/date-picker.js +3 -6
- package/dist/collection/components/date-picker/flatpickr-adapter/deferred-destroy.js +4 -3
- package/dist/collection/components/date-picker/flatpickr-adapter/flatpickr-adapter.js +1 -1
- package/dist/collection/components/date-picker/pickers/month-picker.js +40 -36
- package/dist/collection/components/date-picker/pickers/quarter-picker.js +35 -30
- package/dist/collection/components/date-picker/pickers/year-picker.js +16 -20
- package/dist/collection/components/dialog/dialog.js +4 -7
- package/dist/collection/components/dock/dock-button/dock-button.js +4 -9
- package/dist/collection/components/dock/dock.js +2 -2
- package/dist/collection/components/drag-handle/drag-handle.js +1 -1
- package/dist/collection/components/email-viewer/email-loader.js +14 -10
- package/dist/collection/components/email-viewer/email-viewer.js +1 -1
- package/dist/collection/components/email-viewer/sanitize-email-html.js +1 -4
- package/dist/collection/components/email-viewer/split-email-address-list.js +4 -10
- package/dist/collection/components/file/file.js +11 -10
- package/dist/collection/components/file-dropzone/file-dropzone.js +1 -1
- package/dist/collection/components/file-input/file-input.js +7 -8
- package/dist/collection/components/file-viewer/file-viewer.js +12 -9
- package/dist/collection/components/flex-container/flex-container.js +1 -1
- package/dist/collection/components/form/fields/schema-field.js +1 -1
- package/dist/collection/components/form/form.js +2 -5
- package/dist/collection/components/form/form.test-schemas.js +8 -10
- package/dist/collection/components/form/templates/array-field.js +7 -9
- package/dist/collection/components/form/templates/common.js +19 -19
- package/dist/collection/components/form/templates/object-field.js +1 -1
- package/dist/collection/components/form/validation-display.js +2 -2
- package/dist/collection/components/form/validators/format.js +1 -0
- package/dist/collection/components/form/widgets/code-editor.js +6 -9
- package/dist/collection/components/form/widgets/date-picker.js +1 -3
- package/dist/collection/components/grid/grid.js +1 -1
- package/dist/collection/components/header/header.js +1 -1
- package/dist/collection/components/help/help-content.js +1 -1
- package/dist/collection/components/help/help.js +2 -2
- package/dist/collection/components/helper-line/helper-line.js +3 -3
- package/dist/collection/components/hotkey/hotkey.js +1 -1
- package/dist/collection/components/icon/icon.js +11 -9
- package/dist/collection/components/icon-button/icon-button.js +1 -1
- package/dist/collection/components/info-tile/info-tile.js +9 -9
- package/dist/collection/components/input-field/input-field.js +11 -11
- package/dist/collection/components/list/list-renderer.js +5 -7
- package/dist/collection/components/list/list.js +2 -2
- package/dist/collection/components/list-item/list-item.js +2 -2
- package/dist/collection/components/list-item/menu-item-meta/menu-item-meta.js +1 -1
- package/dist/collection/components/markdown/hydrate-custom-elements.js +6 -5
- package/dist/collection/components/markdown/image-intersection-observer.js +9 -8
- package/dist/collection/components/markdown/image-markdown-plugin.js +9 -7
- package/dist/collection/components/markdown/link-markdown-plugin.js +11 -10
- package/dist/collection/components/markdown/markdown.js +6 -5
- package/dist/collection/components/markdown/remove-empty-paragraphs-plugin.js +4 -5
- package/dist/collection/components/masonry-layout/masonry-layout.js +5 -4
- package/dist/collection/components/menu/menu.js +48 -46
- package/dist/collection/components/menu-list/menu-list-renderer.js +8 -8
- package/dist/collection/components/menu-list/menu-list.js +1 -1
- package/dist/collection/components/menu-surface/menu-surface.js +6 -8
- package/dist/collection/components/notched-outline/notched-outline.js +1 -1
- package/dist/collection/components/pagination/jump/pagination-jump.js +13 -11
- package/dist/collection/components/pagination/pagination.js +5 -4
- package/dist/collection/components/picker/picker.js +25 -23
- package/dist/collection/components/popover/popover.js +13 -10
- package/dist/collection/components/popover-surface/popover-surface.js +1 -1
- package/dist/collection/components/portal/contains.js +9 -8
- package/dist/collection/components/portal/portal.js +16 -16
- package/dist/collection/components/profile-picture/profile-picture.js +4 -3
- package/dist/collection/components/progress-flow/progress-flow.js +10 -9
- package/dist/collection/components/radio-button-group/radio-button-group.js +1 -1
- package/dist/collection/components/radio-button-group/radio-button.js +2 -2
- package/dist/collection/components/scroller/scroller.css +317 -0
- package/dist/collection/components/scroller/scroller.js +284 -0
- package/dist/collection/components/select/select.js +13 -11
- package/dist/collection/components/select/select.template.js +1 -3
- package/dist/collection/components/slider/get-percentage-class.js +9 -18
- package/dist/collection/components/slider/slider.js +2 -2
- package/dist/collection/components/tab-bar/tab-bar.css +7 -289
- package/dist/collection/components/tab-bar/tab-bar.js +98 -128
- package/dist/collection/components/tab-panel/tab-panel.js +11 -8
- package/dist/collection/components/table/columns.js +1 -3
- package/dist/collection/components/table/element-pool.js +1 -1
- package/dist/collection/components/table/table-selection.js +6 -5
- package/dist/collection/components/table/table.css +15 -17
- package/dist/collection/components/table/table.js +44 -39
- package/dist/collection/components/text-editor/link-menu/editor-link-menu.js +11 -10
- package/dist/collection/components/text-editor/prosemirror-adapter/menu/menu-command-utils/list-utils.js +1 -1
- package/dist/collection/components/text-editor/prosemirror-adapter/menu/menu-commands.js +6 -10
- package/dist/collection/components/text-editor/prosemirror-adapter/plugins/image/inserter.js +37 -40
- package/dist/collection/components/text-editor/prosemirror-adapter/plugins/image/node.js +2 -1
- package/dist/collection/components/text-editor/prosemirror-adapter/plugins/link/link-plugin.js +21 -20
- package/dist/collection/components/text-editor/prosemirror-adapter/plugins/menu-state-tracking-plugin.js +6 -5
- package/dist/collection/components/text-editor/prosemirror-adapter/plugins/trigger/factory-helpers/detect-trigger-removal.js +15 -14
- package/dist/collection/components/text-editor/prosemirror-adapter/prosemirror-adapter.js +40 -34
- package/dist/collection/components/text-editor/text-editor.js +1 -1
- package/dist/collection/components/text-editor/utils/metadata-utils.js +1 -1
- package/dist/collection/components/text-editor/utils/plugin-factory.js +3 -3
- package/dist/collection/components/tooltip/tooltip-content.js +1 -1
- package/dist/collection/components/tooltip/tooltip.js +2 -2
- package/dist/collection/global/icon-cache/factory.js +2 -3
- package/dist/collection/global/icon-cache/in-memory-icon-cache.js +2 -0
- package/dist/collection/global/translations.js +1 -3
- package/dist/collection/translations/fr.js +3 -3
- package/dist/collection/util/adapt-color-contrast.js +1 -1
- package/dist/collection/util/files.js +1 -1
- package/dist/collection/util/format-bytes.js +1 -4
- package/dist/collection/util/hotkeys.js +1 -0
- package/dist/collection/util/image-resize.js +1 -0
- package/dist/collection/util/keyboard-navigation.js +144 -0
- package/dist/collection/util/keycodes.js +2 -0
- package/dist/collection/util/language.js +1 -1
- package/dist/collection/util/make-enter-clickable.js +19 -12
- package/dist/collection/util/random-string.js +1 -0
- package/dist/collection/util/render-list-component.js +2 -4
- package/dist/esm/{adapt-color-contrast-Dgcw_h7C.js → adapt-color-contrast-BQoih_t0.js} +1 -1
- package/dist/esm/{checkbox.template-Cx_3u92S.js → checkbox.template-IDyv2bgn.js} +2 -2
- package/dist/esm/{component-wGVqvUmL.js → component-CVihTrav.js} +3 -3
- package/dist/esm/{component-7QB0OUSF.js → component-CrjPGt1I.js} +1 -1
- package/dist/esm/{component-D4qgwaTf.js → component-CyFeUQ0l.js} +1 -1
- package/dist/esm/{component-B2Vy44Z3.js → component-kP1jCDLp.js} +1 -1
- package/dist/esm/{files-DnkFEKoB.js → files-CKnLqPDj.js} +1 -1
- package/dist/esm/{format-bytes-u_sd2HMb.js → format-bytes-24yUSW40.js} +1 -4
- package/dist/esm/{hotkeys-BxrRWYts.js → hotkeys-DjmlD0Mw.js} +1 -0
- package/dist/esm/{image-resize-BTSG--2-.js → image-resize-Dv2HOgWN.js} +1 -0
- package/dist/esm/{image.template-wqMwmOF-.js → image.template-BGjw97m_.js} +1 -1
- package/dist/esm/{index-Bnc9lzk2.js → index-BU9IJqli.js} +1 -7
- package/dist/esm/index.js +1 -1
- package/dist/esm/{keycodes-C4_9qUMP.js → keycodes-DQ5DmW_Y.js} +3 -1
- package/dist/esm/{language-C3hECvXE.js → language-ChagAaNf.js} +1 -1
- package/dist/esm/lime-elements.js +3 -3
- package/dist/esm/limel-3d-hover-effect-glow.entry.js +2 -2
- package/dist/esm/limel-action-bar_3.entry.js +20 -18
- package/dist/esm/limel-ai-avatar.entry.js +5 -5
- package/dist/esm/limel-badge.entry.js +3 -3
- package/dist/esm/limel-banner.entry.js +2 -2
- package/dist/esm/limel-breadcrumbs_6.entry.js +86 -86
- package/dist/esm/limel-button-group.entry.js +3 -3
- package/dist/esm/limel-button.entry.js +4 -4
- package/dist/esm/limel-callout.entry.js +6 -6
- package/dist/esm/limel-card.entry.js +8 -7
- package/dist/esm/limel-chart.entry.js +5 -5
- package/dist/esm/limel-checkbox.entry.js +12 -10
- package/dist/esm/limel-chip-set.entry.js +35 -44
- package/dist/esm/limel-chip_2.entry.js +10 -10
- package/dist/esm/limel-circular-progress.entry.js +2 -2
- package/dist/esm/limel-code-diff.entry.js +25 -28
- package/dist/esm/limel-code-editor.entry.js +17 -12
- package/dist/esm/limel-collapsible-section.entry.js +8 -8
- package/dist/esm/limel-color-picker-palette.entry.js +3 -3
- package/dist/esm/limel-color-picker.entry.js +6 -5
- package/dist/esm/limel-config.entry.js +3 -3
- package/dist/esm/limel-date-picker.entry.js +12 -15
- package/dist/esm/limel-dialog.entry.js +8 -11
- package/dist/esm/limel-dock-button.entry.js +6 -11
- package/dist/esm/limel-dock.entry.js +3 -3
- package/dist/esm/limel-drag-handle.entry.js +6 -6
- package/dist/esm/limel-dynamic-label.entry.js +1 -1
- package/dist/esm/limel-email-viewer.entry.js +11 -17
- package/dist/esm/limel-file-dropzone_2.entry.js +11 -12
- package/dist/esm/limel-file-viewer.entry.js +1098 -1146
- package/dist/esm/limel-file.entry.js +17 -16
- package/dist/esm/limel-flatpickr-adapter.entry.js +100 -94
- package/dist/esm/limel-flex-container.entry.js +2 -2
- package/dist/esm/limel-form.entry.js +65 -50
- package/dist/esm/limel-grid.entry.js +2 -2
- package/dist/esm/limel-header.entry.js +2 -2
- package/dist/esm/limel-help-content.entry.js +2 -2
- package/dist/esm/limel-help.entry.js +3 -3
- package/dist/esm/limel-helper-line_3.entry.js +14 -16
- package/dist/esm/limel-hotkey_4.entry.js +23 -23
- package/dist/esm/limel-icon-button.entry.js +4 -4
- package/dist/esm/limel-icon.entry.js +15 -13
- package/dist/esm/limel-info-tile.entry.js +10 -10
- package/dist/esm/limel-list-item.entry.js +10 -10
- package/dist/esm/limel-markdown.entry.js +25 -22
- package/dist/esm/limel-masonry-layout.entry.js +6 -5
- package/dist/esm/limel-menu-item-meta.entry.js +3 -3
- package/dist/esm/limel-pagination-jump.entry.js +18 -16
- package/dist/esm/limel-pagination.entry.js +10 -9
- package/dist/esm/limel-picker.entry.js +32 -30
- package/dist/esm/limel-popover_2.entry.js +26 -22
- package/dist/esm/limel-profile-picture.entry.js +12 -11
- package/dist/esm/limel-progress-flow-item.entry.js +1 -1
- package/dist/esm/limel-progress-flow.entry.js +11 -10
- package/dist/esm/limel-prosemirror-adapter.entry.js +475 -407
- package/dist/esm/limel-radio-button-group.entry.js +2 -2
- package/dist/esm/limel-radio-button.entry.js +3 -3
- package/dist/esm/limel-scroller.entry.js +178 -0
- package/dist/esm/limel-select.entry.js +20 -20
- package/dist/esm/limel-shortcut.entry.js +1 -1
- package/dist/esm/limel-slider.entry.js +18 -27
- package/dist/esm/limel-snackbar.entry.js +5 -5
- package/dist/esm/limel-split-button.entry.js +1 -1
- package/dist/esm/limel-switch.entry.js +3 -3
- package/dist/esm/limel-tab-bar.entry.js +235 -2036
- package/dist/esm/limel-tab-panel.entry.js +12 -9
- package/dist/esm/limel-table.entry.js +527 -106
- package/dist/esm/limel-text-editor-link-menu.entry.js +16 -15
- package/dist/esm/limel-text-editor.entry.js +3 -3
- package/dist/esm/loader.js +3 -3
- package/dist/esm/{make-enter-clickable-BgTwPGeH.js → make-enter-clickable-CIf8aGSd.js} +19 -12
- package/dist/esm/{markdown-exporter--3_MaqwD.js → markdown-exporter-DblYRMhY.js} +1 -1
- package/dist/esm/{markdown-parser-DCf-3dKZ.js → markdown-parser-CAPDx7i8.js} +24 -22
- package/dist/esm/{moment-DQRNe8qq.js → moment-_DadZLWp.js} +1062 -833
- package/dist/esm/{ponyfill-ChRGk668.js → ponyfill-6YuZiAPi.js} +1 -1
- package/dist/esm/{random-string-JbKhhoXs.js → random-string-BrjD-ITe.js} +1 -0
- package/dist/esm/{render-list-component-cicbMp0l.js → render-list-component-J1IzNpbv.js} +3 -5
- package/dist/esm/{sv-CY-6-yEp.js → sv-DpsDSi7k.js} +31 -3
- package/dist/esm/{translations-DMtX4tTX.js → translations-Y4i8PVc9.js} +5 -8
- package/dist/lime-elements/index.esm.js +1 -1
- package/dist/lime-elements/lime-elements.esm.js +1 -1
- package/dist/lime-elements/p-02a06cf7.entry.js +1 -0
- package/dist/lime-elements/{p-3916b316.entry.js → p-03cb609e.entry.js} +1 -1
- package/dist/lime-elements/p-05038bbb.entry.js +1 -0
- package/dist/lime-elements/{p-835149c4.entry.js → p-0d6925f4.entry.js} +1 -1
- package/dist/lime-elements/p-0e13ec91.entry.js +1 -0
- package/dist/lime-elements/p-0ece667e.entry.js +1 -0
- package/dist/lime-elements/{p-19344984.entry.js → p-107654bb.entry.js} +4 -4
- package/dist/lime-elements/p-120ca628.entry.js +1 -0
- package/dist/lime-elements/{p-BwJGg-WI.js → p-1CgnIGyd.js} +4 -4
- package/dist/lime-elements/p-22fd1c87.entry.js +1 -0
- package/dist/lime-elements/p-24yUSW40.js +1 -0
- package/dist/lime-elements/{p-f717cd7a.entry.js → p-271662d4.entry.js} +1 -1
- package/dist/lime-elements/{p-c2a60508.entry.js → p-29c73bdf.entry.js} +1 -1
- package/dist/lime-elements/{p-deceda00.entry.js → p-2a902e77.entry.js} +1 -1
- package/dist/lime-elements/{p-d0cec424.entry.js → p-2b033dfa.entry.js} +1 -1
- package/dist/lime-elements/{p-acba5700.entry.js → p-2b2253d4.entry.js} +1 -1
- package/dist/lime-elements/p-2e33d2a4.entry.js +1 -0
- package/dist/lime-elements/p-32a050a3.entry.js +1 -0
- package/dist/lime-elements/{p-3735111e.entry.js → p-3cfe0eaf.entry.js} +1 -1
- package/dist/lime-elements/{p-fbcd99a3.entry.js → p-3d3bdf45.entry.js} +1 -1
- package/dist/lime-elements/p-45461ec5.entry.js +1 -0
- package/dist/lime-elements/p-45c39fb4.entry.js +1 -0
- package/dist/lime-elements/p-45fde7a1.entry.js +1 -0
- package/dist/lime-elements/p-48afa6b7.entry.js +1 -0
- package/dist/lime-elements/{p-f04f7c8e.entry.js → p-4a88d365.entry.js} +1 -1
- package/dist/lime-elements/p-4b75e653.entry.js +1 -0
- package/dist/lime-elements/{p-5698e493.entry.js → p-4ecbc9f4.entry.js} +1 -1
- package/dist/lime-elements/{p-2e568c56.entry.js → p-54a9f48f.entry.js} +1 -1
- package/dist/lime-elements/{p-0fba64eb.entry.js → p-5df21b25.entry.js} +2 -2
- package/dist/lime-elements/p-5e448070.entry.js +1 -0
- package/dist/lime-elements/{p-408c4dcb.entry.js → p-5f5c6e7d.entry.js} +1 -1
- package/dist/lime-elements/{p-052c3bc6.entry.js → p-681cb6de.entry.js} +1 -1
- package/dist/lime-elements/{p-ChRGk668.js → p-6YuZiAPi.js} +3 -3
- package/dist/lime-elements/{p-90df3e1b.entry.js → p-6d9961f7.entry.js} +1 -1
- package/dist/lime-elements/p-74060535.entry.js +159 -0
- package/dist/lime-elements/{p-74bd0c1a.entry.js → p-7b4351f6.entry.js} +1 -1
- package/dist/lime-elements/{p-3fd7e8aa.entry.js → p-7eab1341.entry.js} +1 -1
- package/dist/lime-elements/p-7fa85785.entry.js +23 -0
- package/dist/lime-elements/{p-35fa1063.entry.js → p-85318636.entry.js} +1 -1
- package/dist/lime-elements/{p-4ffbfc79.entry.js → p-8ac79ef5.entry.js} +1 -1
- package/dist/lime-elements/{p-4902fb3f.entry.js → p-9218fa6a.entry.js} +1 -1
- package/dist/lime-elements/{p-38b09f87.entry.js → p-9415411e.entry.js} +1 -1
- package/dist/lime-elements/{p-be8610ff.entry.js → p-958396b5.entry.js} +1 -1
- package/dist/lime-elements/p-95ccd9e7.entry.js +1 -0
- package/dist/lime-elements/p-970e0810.entry.js +1 -0
- package/dist/lime-elements/{p-cb407bef.entry.js → p-9afa4721.entry.js} +1 -1
- package/dist/lime-elements/{p-54dcf46f.entry.js → p-9c8c2fb7.entry.js} +1 -1
- package/dist/lime-elements/p-9e084e7c.entry.js +1 -0
- package/dist/lime-elements/{p-B8hoCfhT.js → p-B3YP9GOq.js} +1 -1
- package/dist/lime-elements/{p-Dgcw_h7C.js → p-BQoih_t0.js} +1 -1
- package/dist/lime-elements/{p-Bnc9lzk2.js → p-BU9IJqli.js} +1 -1
- package/dist/lime-elements/{p-BN1-aIOw.js → p-BZXGwiAr.js} +1 -1
- package/dist/lime-elements/{p-CGVVDGcv.js → p-Bkvc4sus.js} +1 -1
- package/dist/lime-elements/{p-BPzhuHcl.js → p-Bvyt2bmV.js} +1 -1
- package/dist/lime-elements/{p-DZkKQUDM.js → p-C1FFnUvf.js} +3 -3
- package/dist/lime-elements/{p-BgTwPGeH.js → p-CIf8aGSd.js} +1 -1
- package/dist/lime-elements/{p-C3hECvXE.js → p-ChagAaNf.js} +1 -1
- package/dist/lime-elements/{p-C9yTLqR8.js → p-CmtleG1y.js} +1 -1
- package/dist/lime-elements/{p-C4_9qUMP.js → p-DQ5DmW_Y.js} +1 -1
- package/dist/lime-elements/p-DTcfed02.js +3 -0
- package/dist/lime-elements/{p-BY85K-4J.js → p-DqQOawxc.js} +1 -1
- package/dist/lime-elements/{p-CC4Usa-Q.js → p-I0PrvthC.js} +1 -1
- package/dist/lime-elements/p-N9vxZMhe.js +1 -0
- package/dist/lime-elements/{p-DsDkl4Sy.js → p-ZDFVISfu.js} +3 -3
- package/dist/lime-elements/p-a1c69e0c.entry.js +1 -0
- package/dist/lime-elements/{p-2daf0482.entry.js → p-a1d1470c.entry.js} +1 -1
- package/dist/lime-elements/{p-cef66e53.entry.js → p-a2e6f16e.entry.js} +1 -1
- package/dist/lime-elements/{p-36ce4fbc.entry.js → p-a42f8c2d.entry.js} +1 -1
- package/dist/lime-elements/p-a550ba18.entry.js +1 -0
- package/dist/lime-elements/{p-d146feda.entry.js → p-a65eb58e.entry.js} +1 -1
- package/dist/lime-elements/{p-03fb2603.entry.js → p-b22b52a1.entry.js} +1 -1
- package/dist/lime-elements/{p-c2a3ca7c.entry.js → p-b6d39581.entry.js} +1 -1
- package/dist/lime-elements/{p-8475a3b8.entry.js → p-c439b68b.entry.js} +1 -1
- package/dist/lime-elements/p-d19c7a3a.entry.js +1 -0
- package/dist/lime-elements/{p-d3bd4b80.entry.js → p-d1b7cc55.entry.js} +3 -3
- package/dist/lime-elements/{p-7cbf50fc.entry.js → p-d1e5dd12.entry.js} +1 -1
- package/dist/lime-elements/p-de4719a6.entry.js +1 -0
- package/dist/lime-elements/{p-b81a2728.entry.js → p-e02e2c5f.entry.js} +1 -1
- package/dist/lime-elements/{p-d351b9ae.entry.js → p-e6a34047.entry.js} +1 -1
- package/dist/lime-elements/p-eF09GxA_.js +1 -0
- package/dist/lime-elements/{p-8fa9c9ea.entry.js → p-ee719744.entry.js} +1 -1
- package/dist/lime-elements/p-f3cae1e7.entry.js +1 -0
- package/dist/lime-elements/{p-8115da75.entry.js → p-f4a0b1bc.entry.js} +1 -1
- package/dist/lime-elements/{p-4855dc9b.entry.js → p-f82f72e7.entry.js} +1 -1
- package/dist/lime-elements/{p-2d84ea04.entry.js → p-f97ec7a5.entry.js} +1 -1
- package/dist/lime-elements/{p-21109d9b.entry.js → p-fdd674fc.entry.js} +1 -1
- package/dist/lime-elements/{p-459eea13.entry.js → p-fdec09e9.entry.js} +1 -1
- package/dist/lime-elements/{p-2f57c3fa.entry.js → p-fe492ff3.entry.js} +1 -1
- package/dist/lime-elements/{p-65cded0e.entry.js → p-ff1a8b2e.entry.js} +1 -1
- package/dist/types/components/chip-set/chip-set-input-helpers.d.ts +1 -1
- package/dist/types/components/pagination/jump/pagination-jump.d.ts +1 -1
- package/dist/types/components/scroller/scroller.d.ts +67 -0
- package/dist/types/components/tab-bar/tab-bar.d.ts +23 -21
- package/dist/types/components.d.ts +132 -0
- package/dist/types/global/icon-cache/factory.d.ts +2 -2
- package/dist/types/global/translations.d.ts +2 -2
- package/dist/types/util/keyboard-navigation.d.ts +105 -0
- package/dist/types/util/keycodes.d.ts +2 -0
- package/package.json +12 -12
- package/dist/lime-elements/p-1e93473a.entry.js +0 -1
- package/dist/lime-elements/p-20658306.entry.js +0 -1
- package/dist/lime-elements/p-26c5c6b9.entry.js +0 -1
- package/dist/lime-elements/p-452b9b01.entry.js +0 -1
- package/dist/lime-elements/p-4aae63bd.entry.js +0 -1
- package/dist/lime-elements/p-507cc8a1.entry.js +0 -159
- package/dist/lime-elements/p-531b6a64.entry.js +0 -1
- package/dist/lime-elements/p-54793c06.entry.js +0 -1
- package/dist/lime-elements/p-5d974afa.entry.js +0 -1
- package/dist/lime-elements/p-66b125f2.entry.js +0 -1
- package/dist/lime-elements/p-7e212fa7.entry.js +0 -1
- package/dist/lime-elements/p-82696d24.entry.js +0 -1
- package/dist/lime-elements/p-9ac39039.entry.js +0 -1
- package/dist/lime-elements/p-9b631363.entry.js +0 -1
- package/dist/lime-elements/p-DQJU9gzh.js +0 -1
- package/dist/lime-elements/p-DpJgXIWf.js +0 -1
- package/dist/lime-elements/p-a1de9bbe.entry.js +0 -1
- package/dist/lime-elements/p-a71f6e87.entry.js +0 -67
- package/dist/lime-elements/p-bd7b3f8e.entry.js +0 -1
- package/dist/lime-elements/p-c72e5007.entry.js +0 -1
- package/dist/lime-elements/p-cafec335.entry.js +0 -1
- package/dist/lime-elements/p-d6dadc61.entry.js +0 -1
- package/dist/lime-elements/p-d93b7b9f.entry.js +0 -23
- package/dist/lime-elements/p-dc9cd793.entry.js +0 -1
- package/dist/lime-elements/p-dd62042a.entry.js +0 -1
- package/dist/lime-elements/p-u_sd2HMb.js +0 -1
- package/dist/lime-elements/p-zo6O9LC9.js +0 -3
- /package/dist/lime-elements/{p-JbKhhoXs.js → p-BrjD-ITe.js} +0 -0
- /package/dist/lime-elements/{p-BxrRWYts.js → p-DjmlD0Mw.js} +0 -0
- /package/dist/lime-elements/{p-BTSG--2-.js → p-Dv2HOgWN.js} +0 -0
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var index$1 = require('./index
|
|
3
|
+
var index$1 = require('./index-BlsqxTB1.js');
|
|
4
4
|
var types = require('./types-C7gNcwzE.js');
|
|
5
|
-
var markdownParser = require('./markdown-parser-
|
|
5
|
+
var markdownParser = require('./markdown-parser-ssDij8_l.js');
|
|
6
6
|
var cloneDeep = require('./cloneDeep-D2immmwT.js');
|
|
7
|
-
var translations = require('./translations-
|
|
7
|
+
var translations = require('./translations-CNTWud2a.js');
|
|
8
8
|
var index = require('./index-zZvs6xK-.js');
|
|
9
|
-
var randomString = require('./random-string-
|
|
9
|
+
var randomString = require('./random-string-CFCtFh5l.js');
|
|
10
10
|
var isItem = require('./is-item-DMELyaao.js');
|
|
11
|
-
var files = require('./files-
|
|
11
|
+
var files = require('./files-DpGigQ8k.js');
|
|
12
12
|
var isEqual = require('./isEqual-D3eFkhqd.js');
|
|
13
13
|
var debounce = require('./debounce-DgDnRSlt.js');
|
|
14
14
|
require('./_commonjsHelpers-CFO10eej.js');
|
|
@@ -25,7 +25,7 @@ require('./_isIndex-Bu45fvR7.js');
|
|
|
25
25
|
require('./_assignValue-DQh76m39.js');
|
|
26
26
|
require('./_defineProperty-Csu6P9HT.js');
|
|
27
27
|
require('./_getPrototype-CCLHkBHj.js');
|
|
28
|
-
require('./language-
|
|
28
|
+
require('./language-v-MMS6ym.js');
|
|
29
29
|
require('./file-metadata-BrhOssGG.js');
|
|
30
30
|
require('./icons-isR5V1X0.js');
|
|
31
31
|
require('./get-icon-props-CwpDdQDI.js');
|
|
@@ -6873,15 +6873,15 @@ function scanFor(node, off, targetNode, targetOff, dir) {
|
|
|
6873
6873
|
return true;
|
|
6874
6874
|
if (off == (dir < 0 ? 0 : nodeSize(node))) {
|
|
6875
6875
|
let parent = node.parentNode;
|
|
6876
|
-
if (!parent || parent
|
|
6876
|
+
if (!parent || !isElt(parent) || hasBlockDesc(node) || atomElements.test(node.nodeName) ||
|
|
6877
6877
|
node.contentEditable == "false")
|
|
6878
6878
|
return false;
|
|
6879
6879
|
off = domIndex(node) + (dir < 0 ? 0 : 1);
|
|
6880
6880
|
node = parent;
|
|
6881
6881
|
}
|
|
6882
|
-
else if (node
|
|
6882
|
+
else if (isElt(node)) {
|
|
6883
6883
|
let child = node.childNodes[off + (dir < 0 ? -1 : 0)];
|
|
6884
|
-
if (child
|
|
6884
|
+
if (isElt(child) && child.contentEditable == "false") {
|
|
6885
6885
|
if ((_a = child.pmViewDesc) === null || _a === void 0 ? void 0 : _a.ignoreForSelection)
|
|
6886
6886
|
off += dir;
|
|
6887
6887
|
else
|
|
@@ -6900,11 +6900,16 @@ function scanFor(node, off, targetNode, targetOff, dir) {
|
|
|
6900
6900
|
function nodeSize(node) {
|
|
6901
6901
|
return node.nodeType == 3 ? node.nodeValue.length : node.childNodes.length;
|
|
6902
6902
|
}
|
|
6903
|
+
function isElt(node) { return node.nodeType == 1; }
|
|
6904
|
+
function isText(node) { return node.nodeType == 3; }
|
|
6905
|
+
function contains(parent, child) {
|
|
6906
|
+
return child ? parent.contains(isElt(child) ? child : child.parentNode) : false;
|
|
6907
|
+
}
|
|
6903
6908
|
function textNodeBefore$1(node, offset) {
|
|
6904
6909
|
for (;;) {
|
|
6905
|
-
if (node
|
|
6910
|
+
if (isText(node) && offset)
|
|
6906
6911
|
return node;
|
|
6907
|
-
if (node
|
|
6912
|
+
if (isElt(node) && offset > 0) {
|
|
6908
6913
|
if (node.contentEditable == "false")
|
|
6909
6914
|
return null;
|
|
6910
6915
|
node = node.childNodes[offset - 1];
|
|
@@ -6921,9 +6926,9 @@ function textNodeBefore$1(node, offset) {
|
|
|
6921
6926
|
}
|
|
6922
6927
|
function textNodeAfter$1(node, offset) {
|
|
6923
6928
|
for (;;) {
|
|
6924
|
-
if (node
|
|
6929
|
+
if (isText(node) && offset < node.nodeValue.length)
|
|
6925
6930
|
return node;
|
|
6926
|
-
if (node
|
|
6931
|
+
if (isElt(node) && offset < node.childNodes.length) {
|
|
6927
6932
|
if (node.contentEditable == "false")
|
|
6928
6933
|
return null;
|
|
6929
6934
|
node = node.childNodes[offset];
|
|
@@ -7038,18 +7043,20 @@ function clientRect(node) {
|
|
|
7038
7043
|
top: rect.top, bottom: rect.top + node.clientHeight * scaleY };
|
|
7039
7044
|
}
|
|
7040
7045
|
function scrollRectIntoView(view, rect, startDOM) {
|
|
7046
|
+
// Skip empty rects with all sides at 0, for example, when the element has no CSS box (display: none)
|
|
7047
|
+
if (!nonZero(rect) && rect.left == 0)
|
|
7048
|
+
return;
|
|
7041
7049
|
let scrollThreshold = view.someProp("scrollThreshold") || 0, scrollMargin = view.someProp("scrollMargin") || 5;
|
|
7042
7050
|
let doc = view.dom.ownerDocument;
|
|
7043
7051
|
for (let parent = startDOM || view.dom;;) {
|
|
7044
7052
|
if (!parent)
|
|
7045
7053
|
break;
|
|
7046
|
-
if (parent
|
|
7054
|
+
if (!isElt(parent)) {
|
|
7047
7055
|
parent = parentNode(parent);
|
|
7048
7056
|
continue;
|
|
7049
7057
|
}
|
|
7050
|
-
let
|
|
7051
|
-
let
|
|
7052
|
-
let bounding = atTop ? windowRect(doc) : clientRect(elt);
|
|
7058
|
+
let atTop = parent == doc.body;
|
|
7059
|
+
let bounding = atTop ? windowRect(doc) : clientRect(parent);
|
|
7053
7060
|
let moveX = 0, moveY = 0;
|
|
7054
7061
|
if (rect.top < bounding.top + getSide(scrollThreshold, "top"))
|
|
7055
7062
|
moveY = -(bounding.top - rect.top + getSide(scrollMargin, "top"));
|
|
@@ -7066,12 +7073,12 @@ function scrollRectIntoView(view, rect, startDOM) {
|
|
|
7066
7073
|
doc.defaultView.scrollBy(moveX, moveY);
|
|
7067
7074
|
}
|
|
7068
7075
|
else {
|
|
7069
|
-
let startX =
|
|
7076
|
+
let startX = parent.scrollLeft, startY = parent.scrollTop;
|
|
7070
7077
|
if (moveY)
|
|
7071
|
-
|
|
7078
|
+
parent.scrollTop += moveY;
|
|
7072
7079
|
if (moveX)
|
|
7073
|
-
|
|
7074
|
-
let dX =
|
|
7080
|
+
parent.scrollLeft += moveX;
|
|
7081
|
+
let dX = parent.scrollLeft - startX, dY = parent.scrollTop - startY;
|
|
7075
7082
|
rect = { left: rect.left - dX, top: rect.top - dY, right: rect.right - dX, bottom: rect.bottom - dY };
|
|
7076
7083
|
}
|
|
7077
7084
|
}
|
|
@@ -7146,14 +7153,15 @@ function focusPreventScroll(dom) {
|
|
|
7146
7153
|
}
|
|
7147
7154
|
}
|
|
7148
7155
|
function findOffsetInNode(node, coords) {
|
|
7149
|
-
let closest
|
|
7156
|
+
let closest;
|
|
7157
|
+
let dxClosest = 2e8, coordsClosest, offset = 0;
|
|
7150
7158
|
let rowBot = coords.top, rowTop = coords.top;
|
|
7151
7159
|
let firstBelow, coordsBelow;
|
|
7152
7160
|
for (let child = node.firstChild, childIndex = 0; child; child = child.nextSibling, childIndex++) {
|
|
7153
7161
|
let rects;
|
|
7154
|
-
if (child
|
|
7162
|
+
if (isElt(child))
|
|
7155
7163
|
rects = child.getClientRects();
|
|
7156
|
-
else if (child
|
|
7164
|
+
else if (isText(child))
|
|
7157
7165
|
rects = textRange(child).getClientRects();
|
|
7158
7166
|
else
|
|
7159
7167
|
continue;
|
|
@@ -7167,11 +7175,11 @@ function findOffsetInNode(node, coords) {
|
|
|
7167
7175
|
if (dx < dxClosest) {
|
|
7168
7176
|
closest = child;
|
|
7169
7177
|
dxClosest = dx;
|
|
7170
|
-
coordsClosest = dx && closest
|
|
7178
|
+
coordsClosest = dx && isText(closest) ? {
|
|
7171
7179
|
left: rect.right < coords.left ? rect.right : rect.left,
|
|
7172
7180
|
top: coords.top
|
|
7173
7181
|
} : coords;
|
|
7174
|
-
if (child
|
|
7182
|
+
if (isElt(child) && dx)
|
|
7175
7183
|
offset = childIndex + (coords.left >= (rect.left + rect.right) / 2 ? 1 : 0);
|
|
7176
7184
|
continue;
|
|
7177
7185
|
}
|
|
@@ -7190,9 +7198,9 @@ function findOffsetInNode(node, coords) {
|
|
|
7190
7198
|
coordsClosest = coordsBelow;
|
|
7191
7199
|
dxClosest = 0;
|
|
7192
7200
|
}
|
|
7193
|
-
if (closest && closest
|
|
7201
|
+
if (closest && isText(closest))
|
|
7194
7202
|
return findOffsetInText(closest, coordsClosest);
|
|
7195
|
-
if (!closest ||
|
|
7203
|
+
if (!closest || dxClosest)
|
|
7196
7204
|
return { node, offset };
|
|
7197
7205
|
return findOffsetInNode(closest, coordsClosest);
|
|
7198
7206
|
}
|
|
@@ -7225,7 +7233,7 @@ function targetKludge(dom, coords) {
|
|
|
7225
7233
|
}
|
|
7226
7234
|
function posFromElement(view, elt, coords) {
|
|
7227
7235
|
let { node, offset } = findOffsetInNode(elt, coords), bias = -1;
|
|
7228
|
-
if (node
|
|
7236
|
+
if (isElt(node) && !node.firstChild) {
|
|
7229
7237
|
let rect = node.getBoundingClientRect();
|
|
7230
7238
|
bias = rect.left != rect.right && coords.left > (rect.left + rect.right) / 2 ? 1 : -1;
|
|
7231
7239
|
}
|
|
@@ -7245,7 +7253,7 @@ function posFromCaret(view, node, offset, coords) {
|
|
|
7245
7253
|
let desc = view.docView.nearestDesc(cur, true), rect;
|
|
7246
7254
|
if (!desc)
|
|
7247
7255
|
return null;
|
|
7248
|
-
if (desc.dom
|
|
7256
|
+
if (isElt(desc.dom) && (desc.node.isBlock && desc.parent || !desc.contentDOM) &&
|
|
7249
7257
|
// Ignore elements with zero-size bounding rectangles
|
|
7250
7258
|
((rect = desc.dom.getBoundingClientRect()).width || rect.height)) {
|
|
7251
7259
|
if (desc.node.isBlock && desc.parent && !/^T(R|BODY|HEAD|FOOT)$/.test(desc.dom.nodeName)) {
|
|
@@ -7272,7 +7280,7 @@ function elementFromPoint(element, coords, box) {
|
|
|
7272
7280
|
if (len && box.top < box.bottom) {
|
|
7273
7281
|
for (let startI = Math.max(0, Math.min(len - 1, Math.floor(len * (coords.top - box.top) / (box.bottom - box.top)) - 2)), i = startI;;) {
|
|
7274
7282
|
let child = element.childNodes[i];
|
|
7275
|
-
if (child
|
|
7283
|
+
if (isElt(child)) {
|
|
7276
7284
|
let rects = child.getClientRects();
|
|
7277
7285
|
for (let j = 0; j < rects.length; j++) {
|
|
7278
7286
|
let rect = rects[j];
|
|
@@ -7295,7 +7303,7 @@ function posAtCoords(view, coords) {
|
|
|
7295
7303
|
let elt = (view.root.elementFromPoint ? view.root : doc)
|
|
7296
7304
|
.elementFromPoint(coords.left, coords.top);
|
|
7297
7305
|
let pos;
|
|
7298
|
-
if (!elt || !view.dom.contains(elt
|
|
7306
|
+
if (!elt || !view.dom.contains(elt)) {
|
|
7299
7307
|
let box = view.dom.getBoundingClientRect();
|
|
7300
7308
|
if (!inRect(coords, box))
|
|
7301
7309
|
return null;
|
|
@@ -7311,7 +7319,7 @@ function posAtCoords(view, coords) {
|
|
|
7311
7319
|
}
|
|
7312
7320
|
elt = targetKludge(elt, coords);
|
|
7313
7321
|
if (node) {
|
|
7314
|
-
if (gecko && node
|
|
7322
|
+
if (gecko && isElt(node)) {
|
|
7315
7323
|
// Firefox will sometimes return offsets into <input> nodes, which
|
|
7316
7324
|
// have no actual children, from caretPositionFromPoint (#953)
|
|
7317
7325
|
offset = Math.min(offset, node.childNodes.length);
|
|
@@ -7326,18 +7334,18 @@ function posAtCoords(view, coords) {
|
|
|
7326
7334
|
}
|
|
7327
7335
|
let prev;
|
|
7328
7336
|
// When clicking above the right side of an uneditable node, Chrome will report a cursor position after that node.
|
|
7329
|
-
if (webkit && offset && node
|
|
7337
|
+
if (webkit && offset && isElt(node) && isElt(prev = node.childNodes[offset - 1]) &&
|
|
7330
7338
|
prev.contentEditable == "false" && prev.getBoundingClientRect().top >= coords.top)
|
|
7331
7339
|
offset--;
|
|
7332
7340
|
// Suspiciously specific kludge to work around caret*FromPoint
|
|
7333
7341
|
// never returning a position at the end of the document
|
|
7334
|
-
if (node == view.dom && offset == node.childNodes.length - 1 && node.lastChild
|
|
7342
|
+
if (node == view.dom && offset == node.childNodes.length - 1 && isElt(node.lastChild) &&
|
|
7335
7343
|
coords.top > node.lastChild.getBoundingClientRect().bottom)
|
|
7336
7344
|
pos = view.state.doc.content.size;
|
|
7337
7345
|
// Ignore positions directly after a BR, since caret*FromPoint
|
|
7338
7346
|
// 'round up' positions that would be more accurately placed
|
|
7339
7347
|
// before the BR node.
|
|
7340
|
-
else if (offset == 0 || node
|
|
7348
|
+
else if (offset == 0 || !isElt(node) || node.childNodes[offset - 1].nodeName != "BR")
|
|
7341
7349
|
pos = posFromCaret(view, node, offset, coords);
|
|
7342
7350
|
}
|
|
7343
7351
|
if (pos == null)
|
|
@@ -7363,7 +7371,7 @@ const BIDI = /[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/;
|
|
|
7363
7371
|
function coordsAtPos(view, pos, side) {
|
|
7364
7372
|
let { node, offset, atom } = view.docView.domFromPos(pos, side < 0 ? -1 : 1);
|
|
7365
7373
|
let supportEmptyRange = webkit || gecko;
|
|
7366
|
-
if (node
|
|
7374
|
+
if (isText(node)) {
|
|
7367
7375
|
// These browsers support querying empty text ranges. Prefer that in
|
|
7368
7376
|
// bidi context or when at the end of a node.
|
|
7369
7377
|
if (supportEmptyRange && (BIDI.test(node.nodeValue) || (side < 0 ? !offset : offset == node.nodeValue.length))) {
|
|
@@ -7405,12 +7413,12 @@ function coordsAtPos(view, pos, side) {
|
|
|
7405
7413
|
if (!$dom.parent.inlineContent) {
|
|
7406
7414
|
if (atom == null && offset && (side < 0 || offset == nodeSize(node))) {
|
|
7407
7415
|
let before = node.childNodes[offset - 1];
|
|
7408
|
-
if (before
|
|
7416
|
+
if (isElt(before))
|
|
7409
7417
|
return flattenH(before.getBoundingClientRect(), false);
|
|
7410
7418
|
}
|
|
7411
7419
|
if (atom == null && offset < nodeSize(node)) {
|
|
7412
7420
|
let after = node.childNodes[offset];
|
|
7413
|
-
if (after
|
|
7421
|
+
if (isElt(after))
|
|
7414
7422
|
return flattenH(after.getBoundingClientRect(), true);
|
|
7415
7423
|
}
|
|
7416
7424
|
return flattenH(node.getBoundingClientRect(), side >= 0);
|
|
@@ -7418,10 +7426,10 @@ function coordsAtPos(view, pos, side) {
|
|
|
7418
7426
|
// Inline, not in text node (this is not Bidi-safe)
|
|
7419
7427
|
if (atom == null && offset && (side < 0 || offset == nodeSize(node))) {
|
|
7420
7428
|
let before = node.childNodes[offset - 1];
|
|
7421
|
-
let target = before
|
|
7429
|
+
let target = isText(before) ? textRange(before, nodeSize(before) - (supportEmptyRange ? 0 : 1))
|
|
7422
7430
|
// BR nodes tend to only return the rectangle before them.
|
|
7423
7431
|
// Only use them if they are the last element in their parent
|
|
7424
|
-
: before
|
|
7432
|
+
: isElt(before) && (before.nodeName != "BR" || !before.nextSibling) ? before : null;
|
|
7425
7433
|
if (target)
|
|
7426
7434
|
return flattenV(singleRect(target, 1), false);
|
|
7427
7435
|
}
|
|
@@ -7429,13 +7437,13 @@ function coordsAtPos(view, pos, side) {
|
|
|
7429
7437
|
let after = node.childNodes[offset];
|
|
7430
7438
|
while (after.pmViewDesc && after.pmViewDesc.ignoreForCoords)
|
|
7431
7439
|
after = after.nextSibling;
|
|
7432
|
-
let target = !after ? null : after
|
|
7433
|
-
: after
|
|
7440
|
+
let target = !after ? null : isText(after) ? textRange(after, 0, (supportEmptyRange ? 0 : 1))
|
|
7441
|
+
: isElt(after) ? after : null;
|
|
7434
7442
|
if (target)
|
|
7435
7443
|
return flattenV(singleRect(target, -1), true);
|
|
7436
7444
|
}
|
|
7437
7445
|
// All else failed, just try to get a rectangle for the target node
|
|
7438
|
-
return flattenV(singleRect(node
|
|
7446
|
+
return flattenV(singleRect(isText(node) ? textRange(node) : node, -side), side >= 0);
|
|
7439
7447
|
}
|
|
7440
7448
|
function flattenV(rect, left) {
|
|
7441
7449
|
if (rect.width == 0)
|
|
@@ -7485,9 +7493,9 @@ function endOfTextblockVertical(view, state, dir) {
|
|
|
7485
7493
|
let coords = coordsAtPos(view, $pos.pos, 1);
|
|
7486
7494
|
for (let child = dom.firstChild; child; child = child.nextSibling) {
|
|
7487
7495
|
let boxes;
|
|
7488
|
-
if (child
|
|
7496
|
+
if (isElt(child))
|
|
7489
7497
|
boxes = child.getClientRects();
|
|
7490
|
-
else if (child
|
|
7498
|
+
else if (isText(child))
|
|
7491
7499
|
boxes = textRange(child, 0, child.nodeValue.length).getClientRects();
|
|
7492
7500
|
else
|
|
7493
7501
|
continue;
|
|
@@ -7527,8 +7535,7 @@ function endOfTextblockHorizontal(view, state, dir) {
|
|
|
7527
7535
|
sel.modify("move", dir, "character");
|
|
7528
7536
|
let parentDOM = $head.depth ? view.docView.domAfterPos($head.before()) : view.dom;
|
|
7529
7537
|
let { focusNode: newNode, focusOffset: newOff } = view.domSelectionRange();
|
|
7530
|
-
let result = newNode && !
|
|
7531
|
-
(oldNode == newNode && oldOff == newOff);
|
|
7538
|
+
let result = newNode && !contains(parentDOM, newNode) || (oldNode == newNode && oldOff == newOff);
|
|
7532
7539
|
// Restore the previous selection
|
|
7533
7540
|
try {
|
|
7534
7541
|
sel.collapse(anchorNode, anchorOffset);
|
|
@@ -7592,7 +7599,7 @@ class ViewDesc {
|
|
|
7592
7599
|
// When parsing in-editor content (in domchange.js), we allow
|
|
7593
7600
|
// descriptions to determine the parse rules that should be used to
|
|
7594
7601
|
// parse them.
|
|
7595
|
-
parseRule() { return null; }
|
|
7602
|
+
parseRule(addedNodes) { return null; }
|
|
7596
7603
|
// Used by the editor's event handler to ignore events that come
|
|
7597
7604
|
// from certain descs.
|
|
7598
7605
|
stopEvent(event) { return false; }
|
|
@@ -7636,7 +7643,7 @@ class ViewDesc {
|
|
|
7636
7643
|
localPosFromDOM(dom, offset, bias) {
|
|
7637
7644
|
// If the DOM position is in the content, use the child desc after
|
|
7638
7645
|
// it to figure out a position.
|
|
7639
|
-
if (this.contentDOM && this.contentDOM
|
|
7646
|
+
if (this.contentDOM && contains(this.contentDOM, dom)) {
|
|
7640
7647
|
if (bias < 0) {
|
|
7641
7648
|
let domBefore, desc;
|
|
7642
7649
|
if (dom == this.contentDOM) {
|
|
@@ -7674,7 +7681,7 @@ class ViewDesc {
|
|
|
7674
7681
|
atEnd = offset > domIndex(this.contentDOM);
|
|
7675
7682
|
}
|
|
7676
7683
|
else if (this.contentDOM && this.contentDOM != this.dom && this.dom.contains(this.contentDOM)) {
|
|
7677
|
-
atEnd = dom.compareDocumentPosition(this.contentDOM) &
|
|
7684
|
+
atEnd = !!(dom.compareDocumentPosition(this.contentDOM) & 4);
|
|
7678
7685
|
}
|
|
7679
7686
|
else if (this.dom.firstChild) {
|
|
7680
7687
|
if (offset == 0)
|
|
@@ -7704,7 +7711,7 @@ class ViewDesc {
|
|
|
7704
7711
|
if (desc && (!onlyNodes || desc.node)) {
|
|
7705
7712
|
// If dom is outside of this desc's nodeDOM, don't count it.
|
|
7706
7713
|
if (first && (nodeDOM = desc.nodeDOM) &&
|
|
7707
|
-
!(nodeDOM
|
|
7714
|
+
!(isElt(nodeDOM) ? contains(nodeDOM, dom) : nodeDOM == dom))
|
|
7708
7715
|
first = false;
|
|
7709
7716
|
else
|
|
7710
7717
|
return desc;
|
|
@@ -7754,7 +7761,7 @@ class ViewDesc {
|
|
|
7754
7761
|
let i = 0, offset = 0;
|
|
7755
7762
|
for (let curPos = 0; i < this.children.length; i++) {
|
|
7756
7763
|
let child = this.children[i], end = curPos + child.size;
|
|
7757
|
-
if (end > pos
|
|
7764
|
+
if (end > pos) {
|
|
7758
7765
|
offset = pos - curPos;
|
|
7759
7766
|
break;
|
|
7760
7767
|
}
|
|
@@ -7764,7 +7771,11 @@ class ViewDesc {
|
|
|
7764
7771
|
if (offset)
|
|
7765
7772
|
return this.children[i].domFromPos(offset - this.children[i].border, side);
|
|
7766
7773
|
// Go back if there were any zero-length widgets with side >= 0 before this point
|
|
7767
|
-
for (
|
|
7774
|
+
for (; i > 0; i--) {
|
|
7775
|
+
let prev = this.children[i - 1];
|
|
7776
|
+
if (prev.size || !(prev instanceof BufferHackViewDesc || prev instanceof WidgetViewDesc && prev.side >= 0))
|
|
7777
|
+
break;
|
|
7778
|
+
}
|
|
7768
7779
|
// Scan towards the first useable node
|
|
7769
7780
|
if (side <= 0) {
|
|
7770
7781
|
let prev, enter = true;
|
|
@@ -7841,7 +7852,7 @@ class ViewDesc {
|
|
|
7841
7852
|
}
|
|
7842
7853
|
domAfterPos(pos) {
|
|
7843
7854
|
let { node, offset } = this.domFromPos(pos, 0);
|
|
7844
|
-
if (node
|
|
7855
|
+
if (!isElt(node) || offset == node.childNodes.length)
|
|
7845
7856
|
throw new RangeError("No node after pos " + pos);
|
|
7846
7857
|
return node.childNodes[offset];
|
|
7847
7858
|
}
|
|
@@ -7870,7 +7881,7 @@ class ViewDesc {
|
|
|
7870
7881
|
// reported position in such situations (#1092).
|
|
7871
7882
|
if ((gecko || safari) && anchor == head) {
|
|
7872
7883
|
let { node, offset } = anchorDOM;
|
|
7873
|
-
if (node
|
|
7884
|
+
if (isText(node)) {
|
|
7874
7885
|
brKludge = !!(offset && node.nodeValue[offset - 1] == "\n");
|
|
7875
7886
|
// Issue #1128
|
|
7876
7887
|
if (brKludge && offset == node.nodeValue.length) {
|
|
@@ -7893,7 +7904,7 @@ class ViewDesc {
|
|
|
7893
7904
|
}
|
|
7894
7905
|
// Firefox can act strangely when the selection is in front of an
|
|
7895
7906
|
// uneditable node. See #1163 and https://bugzilla.mozilla.org/show_bug.cgi?id=1709536
|
|
7896
|
-
if (gecko && selRange.focusNode && selRange.focusNode != headDOM.node && selRange.focusNode
|
|
7907
|
+
if (gecko && selRange.focusNode && selRange.focusNode != headDOM.node && isElt(selRange.focusNode)) {
|
|
7897
7908
|
let after = selRange.focusNode.childNodes[selRange.focusOffset];
|
|
7898
7909
|
if (after && after.contentEditable == "false")
|
|
7899
7910
|
force = true;
|
|
@@ -7992,13 +8003,12 @@ class WidgetViewDesc extends ViewDesc {
|
|
|
7992
8003
|
return self.parent.posBeforeChild(self);
|
|
7993
8004
|
});
|
|
7994
8005
|
if (!widget.type.spec.raw) {
|
|
7995
|
-
|
|
7996
|
-
|
|
7997
|
-
|
|
7998
|
-
|
|
7999
|
-
|
|
8000
|
-
|
|
8001
|
-
dom.classList.add("ProseMirror-widget");
|
|
8006
|
+
let elt = isElt(dom) ? dom : document.createElement("span");
|
|
8007
|
+
if (elt != dom)
|
|
8008
|
+
elt.appendChild(dom);
|
|
8009
|
+
if (!elt.hasAttribute("contenteditable"))
|
|
8010
|
+
elt.contentEditable = "false";
|
|
8011
|
+
elt.classList.add("ProseMirror-widget");
|
|
8002
8012
|
}
|
|
8003
8013
|
super(parent, [], dom, null);
|
|
8004
8014
|
this.widget = widget;
|
|
@@ -8104,7 +8114,7 @@ class MarkViewDesc extends ViewDesc {
|
|
|
8104
8114
|
// correspond to an actual node in the document. Unlike mark descs,
|
|
8105
8115
|
// they populate their child array themselves.
|
|
8106
8116
|
class NodeViewDesc extends ViewDesc {
|
|
8107
|
-
constructor(parent, node, outerDeco, innerDeco, dom, contentDOM, nodeDOM
|
|
8117
|
+
constructor(parent, node, outerDeco, innerDeco, dom, contentDOM, nodeDOM) {
|
|
8108
8118
|
super(parent, [], dom, contentDOM);
|
|
8109
8119
|
this.node = node;
|
|
8110
8120
|
this.outerDeco = outerDeco;
|
|
@@ -8134,7 +8144,7 @@ class NodeViewDesc extends ViewDesc {
|
|
|
8134
8144
|
if (node.isText) {
|
|
8135
8145
|
if (!dom)
|
|
8136
8146
|
dom = document.createTextNode(node.text);
|
|
8137
|
-
else if (dom
|
|
8147
|
+
else if (!isText(dom))
|
|
8138
8148
|
throw new RangeError("Text must be rendered as a DOM text node");
|
|
8139
8149
|
}
|
|
8140
8150
|
else if (!dom) {
|
|
@@ -8150,13 +8160,13 @@ class NodeViewDesc extends ViewDesc {
|
|
|
8150
8160
|
let nodeDOM = dom;
|
|
8151
8161
|
dom = applyOuterDeco(dom, outerDeco, node);
|
|
8152
8162
|
if (spec)
|
|
8153
|
-
return descObj = new CustomNodeViewDesc(parent, node, outerDeco, innerDeco, dom, contentDOM || null, nodeDOM, spec
|
|
8163
|
+
return descObj = new CustomNodeViewDesc(parent, node, outerDeco, innerDeco, dom, contentDOM || null, nodeDOM, spec);
|
|
8154
8164
|
else if (node.isText)
|
|
8155
|
-
return new TextViewDesc(parent, node, outerDeco, innerDeco, dom, nodeDOM
|
|
8165
|
+
return new TextViewDesc(parent, node, outerDeco, innerDeco, dom, nodeDOM);
|
|
8156
8166
|
else
|
|
8157
|
-
return new NodeViewDesc(parent, node, outerDeco, innerDeco, dom, contentDOM || null, nodeDOM
|
|
8167
|
+
return new NodeViewDesc(parent, node, outerDeco, innerDeco, dom, contentDOM || null, nodeDOM);
|
|
8158
8168
|
}
|
|
8159
|
-
parseRule() {
|
|
8169
|
+
parseRule(addedNodes) {
|
|
8160
8170
|
// Experimental kludge to allow opt-in re-parsing of nodes
|
|
8161
8171
|
if (this.node.type.spec.reparseInView)
|
|
8162
8172
|
return null;
|
|
@@ -8184,8 +8194,14 @@ class NodeViewDesc extends ViewDesc {
|
|
|
8184
8194
|
break;
|
|
8185
8195
|
}
|
|
8186
8196
|
}
|
|
8187
|
-
if (!rule.contentElement)
|
|
8188
|
-
|
|
8197
|
+
if (!rule.contentElement) {
|
|
8198
|
+
let found = addedNodes &&
|
|
8199
|
+
addedNodes.find(n => isElt(n) && addedNodes.indexOf(n.parentNode) < 0 && this.dom.contains(n));
|
|
8200
|
+
if (found)
|
|
8201
|
+
rule.contentElement = found;
|
|
8202
|
+
else
|
|
8203
|
+
rule.getContent = () => Fragment.empty;
|
|
8204
|
+
}
|
|
8189
8205
|
}
|
|
8190
8206
|
return rule;
|
|
8191
8207
|
}
|
|
@@ -8205,6 +8221,7 @@ class NodeViewDesc extends ViewDesc {
|
|
|
8205
8221
|
let localComposition = composition && composition.pos > -1 ? composition : null;
|
|
8206
8222
|
let compositionInChild = composition && composition.pos < 0;
|
|
8207
8223
|
let updater = new ViewTreeUpdater(this, localComposition && localComposition.node, view);
|
|
8224
|
+
let addBuffers = this.node.inlineContent, atBufferPos = addBuffers && this.node.isBlock;
|
|
8208
8225
|
iterDeco(this.node, this.innerDeco, (widget, i, insideNode) => {
|
|
8209
8226
|
if (widget.spec.marks)
|
|
8210
8227
|
updater.syncToMarks(widget.spec.marks, inline, view, i);
|
|
@@ -8216,6 +8233,8 @@ class NodeViewDesc extends ViewDesc {
|
|
|
8216
8233
|
}, (child, outerDeco, innerDeco, i) => {
|
|
8217
8234
|
// Make sure the wrapping mark descs match the node's marks.
|
|
8218
8235
|
updater.syncToMarks(child.marks, inline, view, i);
|
|
8236
|
+
if (atBufferPos && child.isAtom && !child.isText)
|
|
8237
|
+
updater.addHackNode("IMG", updater.top);
|
|
8219
8238
|
// Try several strategies for drawing this node
|
|
8220
8239
|
let compIndex;
|
|
8221
8240
|
if (updater.findNodeMatch(child, outerDeco, innerDeco, i)) ;
|
|
@@ -8229,6 +8248,8 @@ class NodeViewDesc extends ViewDesc {
|
|
|
8229
8248
|
updater.addNode(child, outerDeco, innerDeco, view, off);
|
|
8230
8249
|
}
|
|
8231
8250
|
off += child.nodeSize;
|
|
8251
|
+
if (addBuffers)
|
|
8252
|
+
atBufferPos = child.isAtom && !child.isText;
|
|
8232
8253
|
});
|
|
8233
8254
|
// Drop all remaining descs after the current position.
|
|
8234
8255
|
updater.syncToMarks([], inline, view, 0);
|
|
@@ -8307,7 +8328,7 @@ class NodeViewDesc extends ViewDesc {
|
|
|
8307
8328
|
updateOuterDeco(outerDeco) {
|
|
8308
8329
|
if (sameOuterDeco(outerDeco, this.outerDeco))
|
|
8309
8330
|
return;
|
|
8310
|
-
let needsWrap = this.nodeDOM
|
|
8331
|
+
let needsWrap = !isElt(this.nodeDOM);
|
|
8311
8332
|
let oldDOM = this.dom;
|
|
8312
8333
|
this.dom = patchOuterDeco(this.dom, this.nodeDOM, computeOuterDeco(this.outerDeco, this.node, needsWrap), computeOuterDeco(outerDeco, this.node, needsWrap));
|
|
8313
8334
|
if (this.dom != oldDOM) {
|
|
@@ -8318,7 +8339,7 @@ class NodeViewDesc extends ViewDesc {
|
|
|
8318
8339
|
}
|
|
8319
8340
|
// Mark this node as being the selected node.
|
|
8320
8341
|
selectNode() {
|
|
8321
|
-
if (this.nodeDOM
|
|
8342
|
+
if (isElt(this.nodeDOM)) {
|
|
8322
8343
|
this.nodeDOM.classList.add("ProseMirror-selectednode");
|
|
8323
8344
|
if (this.contentDOM || !this.node.type.spec.draggable)
|
|
8324
8345
|
this.nodeDOM.draggable = true;
|
|
@@ -8326,7 +8347,7 @@ class NodeViewDesc extends ViewDesc {
|
|
|
8326
8347
|
}
|
|
8327
8348
|
// Remove selected node marking from this node.
|
|
8328
8349
|
deselectNode() {
|
|
8329
|
-
if (this.nodeDOM
|
|
8350
|
+
if (isElt(this.nodeDOM)) {
|
|
8330
8351
|
this.nodeDOM.classList.remove("ProseMirror-selectednode");
|
|
8331
8352
|
if (this.contentDOM || !this.node.type.spec.draggable)
|
|
8332
8353
|
this.nodeDOM.removeAttribute("draggable");
|
|
@@ -8338,14 +8359,14 @@ class NodeViewDesc extends ViewDesc {
|
|
|
8338
8359
|
// and used by the view class.
|
|
8339
8360
|
function docViewDesc(doc, outerDeco, innerDeco, dom, view) {
|
|
8340
8361
|
applyOuterDeco(dom, outerDeco, doc);
|
|
8341
|
-
let docView = new NodeViewDesc(undefined, doc, outerDeco, innerDeco, dom, dom, dom
|
|
8362
|
+
let docView = new NodeViewDesc(undefined, doc, outerDeco, innerDeco, dom, dom, dom);
|
|
8342
8363
|
if (docView.contentDOM)
|
|
8343
8364
|
docView.updateChildren(view, 0);
|
|
8344
8365
|
return docView;
|
|
8345
8366
|
}
|
|
8346
8367
|
class TextViewDesc extends NodeViewDesc {
|
|
8347
|
-
constructor(parent, node, outerDeco, innerDeco, dom, nodeDOM
|
|
8348
|
-
super(parent, node, outerDeco, innerDeco, dom, null, nodeDOM
|
|
8368
|
+
constructor(parent, node, outerDeco, innerDeco, dom, nodeDOM) {
|
|
8369
|
+
super(parent, node, outerDeco, innerDeco, dom, null, nodeDOM);
|
|
8349
8370
|
}
|
|
8350
8371
|
parseRule() {
|
|
8351
8372
|
let skip = this.nodeDOM.parentNode;
|
|
@@ -8385,9 +8406,9 @@ class TextViewDesc extends NodeViewDesc {
|
|
|
8385
8406
|
ignoreMutation(mutation) {
|
|
8386
8407
|
return mutation.type != "characterData" && mutation.type != "selection";
|
|
8387
8408
|
}
|
|
8388
|
-
slice(from, to,
|
|
8409
|
+
slice(from, to, _view) {
|
|
8389
8410
|
let node = this.node.cut(from, to), dom = document.createTextNode(node.text);
|
|
8390
|
-
return new TextViewDesc(this.parent, node, this.outerDeco, this.innerDeco, dom, dom
|
|
8411
|
+
return new TextViewDesc(this.parent, node, this.outerDeco, this.innerDeco, dom, dom);
|
|
8391
8412
|
}
|
|
8392
8413
|
markDirty(from, to) {
|
|
8393
8414
|
super.markDirty(from, to);
|
|
@@ -8397,9 +8418,9 @@ class TextViewDesc extends NodeViewDesc {
|
|
|
8397
8418
|
get domAtom() { return false; }
|
|
8398
8419
|
isText(text) { return this.node.text == text; }
|
|
8399
8420
|
}
|
|
8400
|
-
// A dummy desc used to tag
|
|
8421
|
+
// A dummy desc used to tag extra BR or IMG nodes created to work
|
|
8401
8422
|
// around contentEditable terribleness.
|
|
8402
|
-
class
|
|
8423
|
+
class BufferHackViewDesc extends ViewDesc {
|
|
8403
8424
|
parseRule() { return { ignore: true }; }
|
|
8404
8425
|
matchesHack(nodeName) { return this.dirty == NOT_DIRTY && this.dom.nodeName == nodeName; }
|
|
8405
8426
|
get domAtom() { return true; }
|
|
@@ -8409,8 +8430,8 @@ class TrailingHackViewDesc extends ViewDesc {
|
|
|
8409
8430
|
// extra checks only have to be made for nodes that are actually
|
|
8410
8431
|
// customized.
|
|
8411
8432
|
class CustomNodeViewDesc extends NodeViewDesc {
|
|
8412
|
-
constructor(parent, node, outerDeco, innerDeco, dom, contentDOM, nodeDOM, spec
|
|
8413
|
-
super(parent, node, outerDeco, innerDeco, dom, contentDOM, nodeDOM
|
|
8433
|
+
constructor(parent, node, outerDeco, innerDeco, dom, contentDOM, nodeDOM, spec) {
|
|
8434
|
+
super(parent, node, outerDeco, innerDeco, dom, contentDOM, nodeDOM);
|
|
8414
8435
|
this.spec = spec;
|
|
8415
8436
|
}
|
|
8416
8437
|
// A custom `update` method gets to decide whether the update goes
|
|
@@ -8572,7 +8593,7 @@ function patchAttributes(dom, prev, cur) {
|
|
|
8572
8593
|
}
|
|
8573
8594
|
}
|
|
8574
8595
|
function applyOuterDeco(dom, deco, node) {
|
|
8575
|
-
return patchOuterDeco(dom, dom, noDeco, computeOuterDeco(deco, node, dom
|
|
8596
|
+
return patchOuterDeco(dom, dom, noDeco, computeOuterDeco(deco, node, !isElt(dom)));
|
|
8576
8597
|
}
|
|
8577
8598
|
function sameOuterDeco(a, b) {
|
|
8578
8599
|
if (a.length != b.length)
|
|
@@ -8647,6 +8668,19 @@ class ViewTreeUpdater {
|
|
|
8647
8668
|
break;
|
|
8648
8669
|
}
|
|
8649
8670
|
}
|
|
8671
|
+
// When nothing matches, try to update the mark view at this position
|
|
8672
|
+
// in place, so a custom mark view can adapt to a changed mark without
|
|
8673
|
+
// re-creating its DOM.
|
|
8674
|
+
if (found < 0 && this.index < this.top.children.length) {
|
|
8675
|
+
let cur = this.top.children[this.index];
|
|
8676
|
+
if (cur instanceof MarkViewDesc && cur.dirty != NODE_DIRTY &&
|
|
8677
|
+
cur.mark.type == marks[depth].type && cur.spec.update &&
|
|
8678
|
+
!this.isLocked(cur.dom) && cur.spec.update(marks[depth])) {
|
|
8679
|
+
cur.mark = marks[depth];
|
|
8680
|
+
found = this.index;
|
|
8681
|
+
this.changed = true;
|
|
8682
|
+
}
|
|
8683
|
+
}
|
|
8650
8684
|
if (found > -1) {
|
|
8651
8685
|
if (found > this.index) {
|
|
8652
8686
|
this.changed = true;
|
|
@@ -8822,7 +8856,7 @@ class ViewTreeUpdater {
|
|
|
8822
8856
|
}
|
|
8823
8857
|
if (nodeName == "BR")
|
|
8824
8858
|
dom.className = "ProseMirror-trailingBreak";
|
|
8825
|
-
let hack = new
|
|
8859
|
+
let hack = new BufferHackViewDesc(this.top, [], dom, null);
|
|
8826
8860
|
if (parent != this.top)
|
|
8827
8861
|
parent.children.push(hack);
|
|
8828
8862
|
else
|
|
@@ -8831,7 +8865,7 @@ class ViewTreeUpdater {
|
|
|
8831
8865
|
}
|
|
8832
8866
|
}
|
|
8833
8867
|
isLocked(node) {
|
|
8834
|
-
return this.lock && (node == this.lock || node
|
|
8868
|
+
return this.lock && (node == this.lock || isElt(node) && node.contains(this.lock.parentNode));
|
|
8835
8869
|
}
|
|
8836
8870
|
}
|
|
8837
8871
|
// Iterate from the end of the fragment and array of descs to find
|
|
@@ -9033,12 +9067,27 @@ function selectionFromDOM(view, origin = null) {
|
|
|
9033
9067
|
anchor = head;
|
|
9034
9068
|
while (nearestDesc && !nearestDesc.node)
|
|
9035
9069
|
nearestDesc = nearestDesc.parent;
|
|
9036
|
-
|
|
9037
|
-
|
|
9038
|
-
|
|
9070
|
+
if (nearestDesc && nearestDesc.node.isAtom && NodeSelection.isSelectable(nearestDesc.node) &&
|
|
9071
|
+
nearestDesc.parent &&
|
|
9072
|
+
!(nearestDesc.node.isInline && isOnEdge(domSel.focusNode, domSel.focusOffset, nearestDesc.dom))) {
|
|
9039
9073
|
let pos = nearestDesc.posBefore;
|
|
9040
9074
|
selection = new NodeSelection(head == pos ? $head : doc.resolve(pos));
|
|
9041
9075
|
}
|
|
9076
|
+
else if (gecko && origin == "key" && head > view.state.selection.to &&
|
|
9077
|
+
isElt(domSel.focusNode) && domSel.focusOffset == domSel.focusNode.childNodes.length &&
|
|
9078
|
+
nearestDesc && nearestDesc.posAtStart > view.state.selection.to) {
|
|
9079
|
+
// Firefox will jump across scrollable wrapper nodes on keyboard
|
|
9080
|
+
// cursor motion (#1594). This tries to detect this situation
|
|
9081
|
+
// and work around it.
|
|
9082
|
+
for (let scan = domSel.focusNode;; scan = scan.parentNode) {
|
|
9083
|
+
if (getComputedStyle(scan).overflow != "visible") {
|
|
9084
|
+
selection = Selection.findFrom(doc.resolve(nearestDesc.posAtStart), 1);
|
|
9085
|
+
break;
|
|
9086
|
+
}
|
|
9087
|
+
if (scan == nearestDesc.dom || scan.nextSibling || !scan.parentNode || !isElt(scan.parentNode))
|
|
9088
|
+
break;
|
|
9089
|
+
}
|
|
9090
|
+
}
|
|
9042
9091
|
}
|
|
9043
9092
|
else {
|
|
9044
9093
|
if (domSel instanceof view.dom.ownerDocument.defaultView.Selection && domSel.rangeCount > 1) {
|
|
@@ -9075,14 +9124,14 @@ function selectionToDOM(view, force = false) {
|
|
|
9075
9124
|
syncNodeSelection(view, sel);
|
|
9076
9125
|
if (!editorOwnsSelection(view))
|
|
9077
9126
|
return;
|
|
9078
|
-
//
|
|
9079
|
-
//
|
|
9080
|
-
|
|
9081
|
-
if (!force &&
|
|
9127
|
+
// Need to delay selection normalization during a native selection
|
|
9128
|
+
// drag on Chrome, or it will cause further dragging to glitch.
|
|
9129
|
+
let mouseDown = view.input.mouseDown;
|
|
9130
|
+
if (!force && chrome && mouseDown) {
|
|
9082
9131
|
let domSel = view.domSelectionRange(), curSel = view.domObserver.currentSelection;
|
|
9083
9132
|
if (domSel.anchorNode && curSel.anchorNode &&
|
|
9084
|
-
isEquivalentPosition(domSel.anchorNode, domSel.anchorOffset, curSel.anchorNode, curSel.anchorOffset)
|
|
9085
|
-
|
|
9133
|
+
isEquivalentPosition(domSel.anchorNode, domSel.anchorOffset, curSel.anchorNode, curSel.anchorOffset) &&
|
|
9134
|
+
mouseDown.delaySelUpdate()) {
|
|
9086
9135
|
view.domObserver.setCurSelection();
|
|
9087
9136
|
return;
|
|
9088
9137
|
}
|
|
@@ -9224,8 +9273,7 @@ function hasSelection(view) {
|
|
|
9224
9273
|
// Firefox will raise 'permission denied' errors when accessing
|
|
9225
9274
|
// properties of `sel.anchorNode` when it's in a generated CSS
|
|
9226
9275
|
// element.
|
|
9227
|
-
return view.dom
|
|
9228
|
-
(view.editable || view.dom.contains(sel.focusNode.nodeType == 3 ? sel.focusNode.parentNode : sel.focusNode));
|
|
9276
|
+
return contains(view.dom, sel.anchorNode) && (view.editable || contains(view.dom, sel.focusNode));
|
|
9229
9277
|
}
|
|
9230
9278
|
catch (_) {
|
|
9231
9279
|
return false;
|
|
@@ -9276,15 +9324,14 @@ function selectHorizontally(view, dir, mods) {
|
|
|
9276
9324
|
if (NodeSelection.isSelectable(node)) {
|
|
9277
9325
|
return apply(view, new NodeSelection(dir < 0 ? view.state.doc.resolve($head.pos - node.nodeSize) : $head));
|
|
9278
9326
|
}
|
|
9279
|
-
else
|
|
9327
|
+
else {
|
|
9280
9328
|
// Chrome and Safari will introduce extra pointless cursor
|
|
9281
|
-
// positions around inline uneditable nodes,
|
|
9282
|
-
//
|
|
9329
|
+
// positions around inline uneditable nodes (#937), and
|
|
9330
|
+
// Firefox will sometimes just plain refuse to move across
|
|
9331
|
+
// them (#1592), so in this situation we move the cursor
|
|
9332
|
+
// ourselves.
|
|
9283
9333
|
return apply(view, new TextSelection(view.state.doc.resolve(dir < 0 ? nodePos : nodePos + node.nodeSize)));
|
|
9284
9334
|
}
|
|
9285
|
-
else {
|
|
9286
|
-
return false;
|
|
9287
|
-
}
|
|
9288
9335
|
}
|
|
9289
9336
|
}
|
|
9290
9337
|
else if (sel instanceof NodeSelection && sel.node.isInline) {
|
|
@@ -9297,12 +9344,10 @@ function selectHorizontally(view, dir, mods) {
|
|
|
9297
9344
|
return false;
|
|
9298
9345
|
}
|
|
9299
9346
|
}
|
|
9300
|
-
function nodeLen(node) {
|
|
9301
|
-
return node.nodeType == 3 ? node.nodeValue.length : node.childNodes.length;
|
|
9302
|
-
}
|
|
9303
9347
|
function isIgnorable(dom, dir) {
|
|
9304
9348
|
let desc = dom.pmViewDesc;
|
|
9305
|
-
return desc
|
|
9349
|
+
return desc ? desc.size == 0 && (dir < 0 || dom.nextSibling || dom.nodeName != "BR")
|
|
9350
|
+
: isElt(dom) && dom.contentEditable == "false";
|
|
9306
9351
|
}
|
|
9307
9352
|
function skipIgnoredNodes(view, dir) {
|
|
9308
9353
|
return dir < 0 ? skipIgnoredNodesBefore(view) : skipIgnoredNodesAfter(view);
|
|
@@ -9318,25 +9363,23 @@ function skipIgnoredNodesBefore(view) {
|
|
|
9318
9363
|
// Gecko will do odd things when the selection is directly in front
|
|
9319
9364
|
// of a non-editable node, so in that case, move it into the next
|
|
9320
9365
|
// node if possible. Issue prosemirror/prosemirror#832.
|
|
9321
|
-
if (gecko && node
|
|
9366
|
+
if (gecko && isElt(node) && offset < nodeSize(node) && isIgnorable(node.childNodes[offset], -1))
|
|
9322
9367
|
force = true;
|
|
9323
9368
|
for (;;) {
|
|
9324
9369
|
if (offset > 0) {
|
|
9325
|
-
if (node
|
|
9370
|
+
if (!isElt(node))
|
|
9326
9371
|
break;
|
|
9372
|
+
let before = node.childNodes[offset - 1];
|
|
9373
|
+
if (isIgnorable(before, -1)) {
|
|
9374
|
+
moveNode = node;
|
|
9375
|
+
moveOffset = --offset;
|
|
9376
|
+
}
|
|
9377
|
+
else if (isText(before)) {
|
|
9378
|
+
node = before;
|
|
9379
|
+
offset = node.nodeValue.length;
|
|
9327
9380
|
}
|
|
9328
9381
|
else {
|
|
9329
|
-
|
|
9330
|
-
if (isIgnorable(before, -1)) {
|
|
9331
|
-
moveNode = node;
|
|
9332
|
-
moveOffset = --offset;
|
|
9333
|
-
}
|
|
9334
|
-
else if (before.nodeType == 3) {
|
|
9335
|
-
node = before;
|
|
9336
|
-
offset = node.nodeValue.length;
|
|
9337
|
-
}
|
|
9338
|
-
else
|
|
9339
|
-
break;
|
|
9382
|
+
break;
|
|
9340
9383
|
}
|
|
9341
9384
|
}
|
|
9342
9385
|
else if (isBlockNode(node)) {
|
|
@@ -9357,7 +9400,7 @@ function skipIgnoredNodesBefore(view) {
|
|
|
9357
9400
|
}
|
|
9358
9401
|
else {
|
|
9359
9402
|
node = prev;
|
|
9360
|
-
offset =
|
|
9403
|
+
offset = nodeSize(node);
|
|
9361
9404
|
}
|
|
9362
9405
|
}
|
|
9363
9406
|
}
|
|
@@ -9373,19 +9416,20 @@ function skipIgnoredNodesAfter(view) {
|
|
|
9373
9416
|
let node = sel.focusNode, offset = sel.focusOffset;
|
|
9374
9417
|
if (!node)
|
|
9375
9418
|
return;
|
|
9376
|
-
let len =
|
|
9419
|
+
let len = nodeSize(node);
|
|
9377
9420
|
let moveNode, moveOffset;
|
|
9378
9421
|
for (;;) {
|
|
9379
9422
|
if (offset < len) {
|
|
9380
|
-
if (node
|
|
9423
|
+
if (!isElt(node))
|
|
9381
9424
|
break;
|
|
9382
9425
|
let after = node.childNodes[offset];
|
|
9383
9426
|
if (isIgnorable(after, 1)) {
|
|
9384
9427
|
moveNode = node;
|
|
9385
9428
|
moveOffset = ++offset;
|
|
9386
9429
|
}
|
|
9387
|
-
else
|
|
9430
|
+
else {
|
|
9388
9431
|
break;
|
|
9432
|
+
}
|
|
9389
9433
|
}
|
|
9390
9434
|
else if (isBlockNode(node)) {
|
|
9391
9435
|
break;
|
|
@@ -9406,7 +9450,7 @@ function skipIgnoredNodesAfter(view) {
|
|
|
9406
9450
|
else {
|
|
9407
9451
|
node = next;
|
|
9408
9452
|
offset = 0;
|
|
9409
|
-
len =
|
|
9453
|
+
len = nodeSize(node);
|
|
9410
9454
|
}
|
|
9411
9455
|
}
|
|
9412
9456
|
}
|
|
@@ -9424,9 +9468,9 @@ function textNodeAfter(node, offset) {
|
|
|
9424
9468
|
}
|
|
9425
9469
|
while (node && offset < node.childNodes.length) {
|
|
9426
9470
|
let next = node.childNodes[offset];
|
|
9427
|
-
if (next
|
|
9471
|
+
if (isText(next))
|
|
9428
9472
|
return next;
|
|
9429
|
-
if (next
|
|
9473
|
+
if (isElt(next) && next.contentEditable == "false")
|
|
9430
9474
|
break;
|
|
9431
9475
|
node = next;
|
|
9432
9476
|
offset = 0;
|
|
@@ -9439,16 +9483,16 @@ function textNodeBefore(node, offset) {
|
|
|
9439
9483
|
}
|
|
9440
9484
|
while (node && offset) {
|
|
9441
9485
|
let next = node.childNodes[offset - 1];
|
|
9442
|
-
if (next
|
|
9486
|
+
if (isText(next))
|
|
9443
9487
|
return next;
|
|
9444
|
-
if (next
|
|
9488
|
+
if (isElt(next) && next.contentEditable == "false")
|
|
9445
9489
|
break;
|
|
9446
9490
|
node = next;
|
|
9447
9491
|
offset = node.childNodes.length;
|
|
9448
9492
|
}
|
|
9449
9493
|
}
|
|
9450
9494
|
function setSelFocus(view, node, offset) {
|
|
9451
|
-
if (node
|
|
9495
|
+
if (!isText(node)) {
|
|
9452
9496
|
let before, after;
|
|
9453
9497
|
if (after = textNodeAfter(node, offset)) {
|
|
9454
9498
|
node = after;
|
|
@@ -9558,8 +9602,8 @@ function safariDownArrowBug(view) {
|
|
|
9558
9602
|
if (!safari || view.state.selection.$head.parentOffset > 0)
|
|
9559
9603
|
return false;
|
|
9560
9604
|
let { focusNode, focusOffset } = view.domSelectionRange();
|
|
9561
|
-
if (focusNode && focusNode
|
|
9562
|
-
focusNode.firstChild && focusNode.firstChild.contentEditable == "false") {
|
|
9605
|
+
if (focusNode && isElt(focusNode) && focusOffset == 0 &&
|
|
9606
|
+
focusNode.firstChild && isElt(focusNode.firstChild) && focusNode.firstChild.contentEditable == "false") {
|
|
9563
9607
|
let child = focusNode.firstChild;
|
|
9564
9608
|
switchEditable(view, child, "true");
|
|
9565
9609
|
setTimeout(() => switchEditable(view, child, "false"), 20);
|
|
@@ -9630,7 +9674,7 @@ function serializeForClipboard(view, slice) {
|
|
|
9630
9674
|
let doc = detachedDoc(), wrap = doc.createElement("div");
|
|
9631
9675
|
wrap.appendChild(serializer.serializeFragment(content, { document: doc }));
|
|
9632
9676
|
let firstChild = wrap.firstChild, needsWrap, wrappers = 0;
|
|
9633
|
-
while (firstChild && firstChild
|
|
9677
|
+
while (firstChild && isElt(firstChild) && (needsWrap = wrapMap[firstChild.nodeName.toLowerCase()])) {
|
|
9634
9678
|
for (let i = needsWrap.length - 1; i >= 0; i--) {
|
|
9635
9679
|
let wrapper = doc.createElement(needsWrap[i]);
|
|
9636
9680
|
while (wrap.firstChild)
|
|
@@ -9640,7 +9684,7 @@ function serializeForClipboard(view, slice) {
|
|
|
9640
9684
|
}
|
|
9641
9685
|
firstChild = wrap.firstChild;
|
|
9642
9686
|
}
|
|
9643
|
-
if (firstChild && firstChild
|
|
9687
|
+
if (firstChild && isElt(firstChild))
|
|
9644
9688
|
firstChild.setAttribute("data-pm-slice", `${openStart} ${openEnd}${wrappers ? ` -${wrappers}` : ""} ${JSON.stringify(context)}`);
|
|
9645
9689
|
let text = view.someProp("clipboardTextSerializer", f => f(slice, view)) ||
|
|
9646
9690
|
slice.content.textBetween(0, slice.content.size, "\n\n");
|
|
@@ -9686,7 +9730,7 @@ function parseFromClipboard(view, text, html, plainText, $context) {
|
|
|
9686
9730
|
if (sliceData && sliceData[3])
|
|
9687
9731
|
for (let i = +sliceData[3]; i > 0; i--) {
|
|
9688
9732
|
let child = dom.firstChild;
|
|
9689
|
-
while (child && child
|
|
9733
|
+
while (child && !isElt(child))
|
|
9690
9734
|
child = child.nextSibling;
|
|
9691
9735
|
if (!child)
|
|
9692
9736
|
break;
|
|
@@ -9815,9 +9859,8 @@ const wrapMap = {
|
|
|
9815
9859
|
td: ["table", "tbody", "tr"],
|
|
9816
9860
|
th: ["table", "tbody", "tr"]
|
|
9817
9861
|
};
|
|
9818
|
-
let _detachedDoc = null;
|
|
9819
9862
|
function detachedDoc() {
|
|
9820
|
-
return
|
|
9863
|
+
return document.implementation.createHTMLDocument("title");
|
|
9821
9864
|
}
|
|
9822
9865
|
let _policy = null;
|
|
9823
9866
|
function maybeWrapTrusted(html) {
|
|
@@ -9827,15 +9870,21 @@ function maybeWrapTrusted(html) {
|
|
|
9827
9870
|
// With the require-trusted-types-for CSP, Chrome will block
|
|
9828
9871
|
// innerHTML, even on a detached document. This wraps the string in
|
|
9829
9872
|
// a way that makes the browser allow us to use its parser again.
|
|
9830
|
-
if (!_policy)
|
|
9831
|
-
_policy = trustedTypes.defaultPolicy
|
|
9873
|
+
if (!_policy) {
|
|
9874
|
+
if (_policy = trustedTypes.defaultPolicy)
|
|
9875
|
+
try {
|
|
9876
|
+
return _policy.createHTML(html);
|
|
9877
|
+
}
|
|
9878
|
+
catch (_a) { }
|
|
9879
|
+
_policy = trustedTypes.createPolicy("ProseMirrorClipboard", { createHTML: (s) => s });
|
|
9880
|
+
}
|
|
9832
9881
|
return _policy.createHTML(html);
|
|
9833
9882
|
}
|
|
9834
9883
|
function readHTML(html) {
|
|
9835
9884
|
let metas = /^(\s*<meta [^>]*>)*/.exec(html);
|
|
9836
9885
|
if (metas)
|
|
9837
9886
|
html = html.slice(metas[0].length);
|
|
9838
|
-
let
|
|
9887
|
+
let doc = detachedDoc(), elt = doc.body;
|
|
9839
9888
|
let firstTag = /<([a-z][^>\s]+)/i.exec(html), wrap;
|
|
9840
9889
|
if (wrap = firstTag && wrapMap[firstTag[1].toLowerCase()])
|
|
9841
9890
|
html = wrap.map(n => "<" + n + ">").join("") + html + wrap.map(n => "</" + n + ">").reverse().join("");
|
|
@@ -9843,6 +9892,18 @@ function readHTML(html) {
|
|
|
9843
9892
|
if (wrap)
|
|
9844
9893
|
for (let i = 0; i < wrap.length; i++)
|
|
9845
9894
|
elt = elt.querySelector(wrap[i]) || elt;
|
|
9895
|
+
// Inline styles defined in the pasted content, so that parse rules pick them up
|
|
9896
|
+
for (let i = 0; i < doc.styleSheets.length; i++) {
|
|
9897
|
+
let style = doc.styleSheets[i];
|
|
9898
|
+
for (let j = 0; j < style.rules.length; j++) {
|
|
9899
|
+
let rule = style.rules[j];
|
|
9900
|
+
if (rule instanceof CSSStyleRule) {
|
|
9901
|
+
let matches = elt.querySelectorAll(rule.selectorText);
|
|
9902
|
+
for (let k = 0; k < matches.length; k++)
|
|
9903
|
+
matches[k].style.cssText += rule.style.cssText;
|
|
9904
|
+
}
|
|
9905
|
+
}
|
|
9906
|
+
}
|
|
9846
9907
|
return elt;
|
|
9847
9908
|
}
|
|
9848
9909
|
// Webkit browsers do some hard-to-predict replacement of regular
|
|
@@ -9873,7 +9934,12 @@ function addContext(slice, context) {
|
|
|
9873
9934
|
let type = schema.nodes[array[i]];
|
|
9874
9935
|
if (!type || type.hasRequiredAttrs())
|
|
9875
9936
|
break;
|
|
9876
|
-
|
|
9937
|
+
try {
|
|
9938
|
+
content = Fragment.from(type.create(array[i + 1], content));
|
|
9939
|
+
}
|
|
9940
|
+
catch (e) {
|
|
9941
|
+
break;
|
|
9942
|
+
}
|
|
9877
9943
|
openStart++;
|
|
9878
9944
|
openEnd++;
|
|
9879
9945
|
}
|
|
@@ -9934,6 +10000,8 @@ function setSelectionOrigin(view, origin) {
|
|
|
9934
10000
|
view.input.lastSelectionTime = Date.now();
|
|
9935
10001
|
}
|
|
9936
10002
|
function destroyInput(view) {
|
|
10003
|
+
if (view.input.mouseDown)
|
|
10004
|
+
view.input.mouseDown.done();
|
|
9937
10005
|
view.domObserver.stop();
|
|
9938
10006
|
for (let type in view.input.eventHandlers)
|
|
9939
10007
|
view.dom.removeEventListener(type, view.input.eventHandlers[type]);
|
|
@@ -9972,7 +10040,7 @@ function dispatchEvent(view, event) {
|
|
|
9972
10040
|
editHandlers.keydown = (view, _event) => {
|
|
9973
10041
|
let event = _event;
|
|
9974
10042
|
view.input.shiftKey = event.keyCode == 16 || event.shiftKey;
|
|
9975
|
-
if (inOrNearComposition(view
|
|
10043
|
+
if (inOrNearComposition(view))
|
|
9976
10044
|
return;
|
|
9977
10045
|
view.input.lastKeyCode = event.keyCode;
|
|
9978
10046
|
view.input.lastKeyCodeTime = Date.now();
|
|
@@ -10010,7 +10078,7 @@ editHandlers.keyup = (view, event) => {
|
|
|
10010
10078
|
};
|
|
10011
10079
|
editHandlers.keypress = (view, _event) => {
|
|
10012
10080
|
let event = _event;
|
|
10013
|
-
if (inOrNearComposition(view
|
|
10081
|
+
if (inOrNearComposition(view) || !event.charCode ||
|
|
10014
10082
|
event.ctrlKey && !event.altKey || mac$4 && event.metaKey)
|
|
10015
10083
|
return;
|
|
10016
10084
|
if (view.someProp("handleKeyPress", f => f(view, event))) {
|
|
@@ -10104,26 +10172,28 @@ function handleTripleClick$1(view, pos, inside, event) {
|
|
|
10104
10172
|
function defaultTripleClick(view, inside, event) {
|
|
10105
10173
|
if (event.button != 0)
|
|
10106
10174
|
return false;
|
|
10107
|
-
let doc = view.state.doc;
|
|
10108
|
-
if (
|
|
10109
|
-
if (doc.inlineContent) {
|
|
10110
|
-
updateSelection(view, TextSelection.create(doc, 0, doc.content.size));
|
|
10111
|
-
return true;
|
|
10112
|
-
}
|
|
10175
|
+
let selection = selectionForTripleClick(view, inside, true), doc = view.state.doc;
|
|
10176
|
+
if (!selection)
|
|
10113
10177
|
return false;
|
|
10114
|
-
|
|
10178
|
+
updateSelection(view, selection);
|
|
10179
|
+
if (selection instanceof TextSelection && doc.eq(view.state.doc))
|
|
10180
|
+
view.input.mouseDown = new TripleClickDrag(view, selection);
|
|
10181
|
+
return true;
|
|
10182
|
+
}
|
|
10183
|
+
function selectionForTripleClick(view, inside, selectNodes) {
|
|
10184
|
+
let doc = view.state.doc;
|
|
10185
|
+
if (inside == -1)
|
|
10186
|
+
return doc.inlineContent ? TextSelection.create(doc, 0, doc.content.size) : null;
|
|
10115
10187
|
let $pos = doc.resolve(inside);
|
|
10116
10188
|
for (let i = $pos.depth + 1; i > 0; i--) {
|
|
10117
10189
|
let node = i > $pos.depth ? $pos.nodeAfter : $pos.node(i);
|
|
10118
10190
|
let nodePos = $pos.before(i);
|
|
10119
10191
|
if (node.inlineContent)
|
|
10120
|
-
|
|
10121
|
-
else if (NodeSelection.isSelectable(node))
|
|
10122
|
-
|
|
10123
|
-
else
|
|
10124
|
-
continue;
|
|
10125
|
-
return true;
|
|
10192
|
+
return TextSelection.create(doc, nodePos + 1, nodePos + 1 + node.content.size);
|
|
10193
|
+
else if (selectNodes && NodeSelection.isSelectable(node))
|
|
10194
|
+
return NodeSelection.create(doc, nodePos);
|
|
10126
10195
|
}
|
|
10196
|
+
return null;
|
|
10127
10197
|
}
|
|
10128
10198
|
function forceDOMFlush(view) {
|
|
10129
10199
|
return endComposition(view);
|
|
@@ -10142,13 +10212,13 @@ handlers.mousedown = (view, _event) => {
|
|
|
10142
10212
|
type = "tripleClick";
|
|
10143
10213
|
}
|
|
10144
10214
|
view.input.lastClick = { time: now, x: event.clientX, y: event.clientY, type, button: event.button };
|
|
10215
|
+
if (view.input.mouseDown)
|
|
10216
|
+
view.input.mouseDown.done();
|
|
10145
10217
|
let pos = view.posAtCoords(eventCoords(event));
|
|
10146
10218
|
if (!pos)
|
|
10147
10219
|
return;
|
|
10148
10220
|
if (type == "singleClick") {
|
|
10149
|
-
|
|
10150
|
-
view.input.mouseDown.done();
|
|
10151
|
-
view.input.mouseDown = new MouseDown(view, pos, event, !!flushed);
|
|
10221
|
+
view.input.mouseDown = new LeftMouseDown(view, pos, event, !!flushed);
|
|
10152
10222
|
}
|
|
10153
10223
|
else if ((type == "doubleClick" ? handleDoubleClick : handleTripleClick$1)(view, pos.pos, pos.inside, event)) {
|
|
10154
10224
|
event.preventDefault();
|
|
@@ -10158,13 +10228,34 @@ handlers.mousedown = (view, _event) => {
|
|
|
10158
10228
|
}
|
|
10159
10229
|
};
|
|
10160
10230
|
class MouseDown {
|
|
10161
|
-
constructor(view
|
|
10231
|
+
constructor(view) {
|
|
10162
10232
|
this.view = view;
|
|
10233
|
+
this.mightDrag = null;
|
|
10234
|
+
view.root.addEventListener("mouseup", this.up = this.up.bind(this));
|
|
10235
|
+
view.root.addEventListener("mousemove", this.move = this.move.bind(this));
|
|
10236
|
+
}
|
|
10237
|
+
up(event) {
|
|
10238
|
+
this.done();
|
|
10239
|
+
}
|
|
10240
|
+
move(event) {
|
|
10241
|
+
if (event.buttons == 0)
|
|
10242
|
+
this.done();
|
|
10243
|
+
}
|
|
10244
|
+
done() {
|
|
10245
|
+
this.view.root.removeEventListener("mouseup", this.up);
|
|
10246
|
+
this.view.root.removeEventListener("mousemove", this.move);
|
|
10247
|
+
if (this.view.input.mouseDown == this)
|
|
10248
|
+
this.view.input.mouseDown = null;
|
|
10249
|
+
}
|
|
10250
|
+
delaySelUpdate() { return false; }
|
|
10251
|
+
}
|
|
10252
|
+
class LeftMouseDown extends MouseDown {
|
|
10253
|
+
constructor(view, pos, event, flushed) {
|
|
10254
|
+
super(view);
|
|
10163
10255
|
this.pos = pos;
|
|
10164
10256
|
this.event = event;
|
|
10165
10257
|
this.flushed = flushed;
|
|
10166
10258
|
this.delayedSelectionSync = false;
|
|
10167
|
-
this.mightDrag = null;
|
|
10168
10259
|
this.startDoc = view.state.doc;
|
|
10169
10260
|
this.selectNode = !!event[selectNodeModifier];
|
|
10170
10261
|
this.allowDefault = event.shiftKey;
|
|
@@ -10180,7 +10271,7 @@ class MouseDown {
|
|
|
10180
10271
|
}
|
|
10181
10272
|
const target = flushed ? null : event.target;
|
|
10182
10273
|
const targetDesc = target ? view.docView.nearestDesc(target, true) : null;
|
|
10183
|
-
this.target = targetDesc && targetDesc.nodeDOM
|
|
10274
|
+
this.target = targetDesc && isElt(targetDesc.nodeDOM) ? targetDesc.nodeDOM : null;
|
|
10184
10275
|
let { selection } = view.state;
|
|
10185
10276
|
if (event.button == 0 &&
|
|
10186
10277
|
(targetNode.type.spec.draggable && targetNode.type.spec.selectable !== false ||
|
|
@@ -10202,13 +10293,10 @@ class MouseDown {
|
|
|
10202
10293
|
}, 20);
|
|
10203
10294
|
this.view.domObserver.start();
|
|
10204
10295
|
}
|
|
10205
|
-
view.root.addEventListener("mouseup", this.up = this.up.bind(this));
|
|
10206
|
-
view.root.addEventListener("mousemove", this.move = this.move.bind(this));
|
|
10207
10296
|
setSelectionOrigin(view, "pointer");
|
|
10208
10297
|
}
|
|
10209
10298
|
done() {
|
|
10210
|
-
|
|
10211
|
-
this.view.root.removeEventListener("mousemove", this.move);
|
|
10299
|
+
super.done();
|
|
10212
10300
|
if (this.mightDrag && this.target) {
|
|
10213
10301
|
this.view.domObserver.stop();
|
|
10214
10302
|
if (this.mightDrag.addAttr)
|
|
@@ -10218,8 +10306,10 @@ class MouseDown {
|
|
|
10218
10306
|
this.view.domObserver.start();
|
|
10219
10307
|
}
|
|
10220
10308
|
if (this.delayedSelectionSync)
|
|
10221
|
-
setTimeout(() =>
|
|
10222
|
-
|
|
10309
|
+
setTimeout(() => {
|
|
10310
|
+
if (!this.view.isDestroyed)
|
|
10311
|
+
selectionToDOM(this.view);
|
|
10312
|
+
});
|
|
10223
10313
|
}
|
|
10224
10314
|
up(event) {
|
|
10225
10315
|
this.done();
|
|
@@ -10258,14 +10348,41 @@ class MouseDown {
|
|
|
10258
10348
|
move(event) {
|
|
10259
10349
|
this.updateAllowDefault(event);
|
|
10260
10350
|
setSelectionOrigin(this.view, "pointer");
|
|
10261
|
-
|
|
10262
|
-
this.done();
|
|
10351
|
+
super.move(event);
|
|
10263
10352
|
}
|
|
10264
10353
|
updateAllowDefault(event) {
|
|
10265
10354
|
if (!this.allowDefault && (Math.abs(this.event.x - event.clientX) > 4 ||
|
|
10266
10355
|
Math.abs(this.event.y - event.clientY) > 4))
|
|
10267
10356
|
this.allowDefault = true;
|
|
10268
10357
|
}
|
|
10358
|
+
delaySelUpdate() {
|
|
10359
|
+
if (!this.allowDefault)
|
|
10360
|
+
return false;
|
|
10361
|
+
this.delayedSelectionSync = true;
|
|
10362
|
+
return true;
|
|
10363
|
+
}
|
|
10364
|
+
}
|
|
10365
|
+
class TripleClickDrag extends MouseDown {
|
|
10366
|
+
constructor(view, startSelection) {
|
|
10367
|
+
super(view);
|
|
10368
|
+
this.startSelection = startSelection;
|
|
10369
|
+
this.startDoc = view.state.doc;
|
|
10370
|
+
}
|
|
10371
|
+
move(event) {
|
|
10372
|
+
if (event.buttons == 0 || this.view.isDestroyed || !this.view.state.doc.eq(this.startDoc)) {
|
|
10373
|
+
this.done();
|
|
10374
|
+
return;
|
|
10375
|
+
}
|
|
10376
|
+
event.preventDefault();
|
|
10377
|
+
setSelectionOrigin(this.view, "pointer");
|
|
10378
|
+
let pos = this.view.posAtCoords(eventCoords(event));
|
|
10379
|
+
let target = pos && selectionForTripleClick(this.view, pos.inside, false);
|
|
10380
|
+
if (!target)
|
|
10381
|
+
return;
|
|
10382
|
+
let { doc } = this.view.state, start = this.startSelection;
|
|
10383
|
+
let [anchor, head] = target.from < start.from ? [start.to, target.from] : [start.from, target.to];
|
|
10384
|
+
updateSelection(this.view, TextSelection.create(doc, anchor, head));
|
|
10385
|
+
}
|
|
10269
10386
|
}
|
|
10270
10387
|
handlers.touchstart = view => {
|
|
10271
10388
|
view.input.lastTouch = Date.now();
|
|
@@ -10290,7 +10407,7 @@ function inOrNearComposition(view, event) {
|
|
|
10290
10407
|
// This guards against the case where compositionend is triggered without the keyboard
|
|
10291
10408
|
// (e.g. character confirmation may be done with the mouse), and keydown is triggered
|
|
10292
10409
|
// afterwards- we wouldn't want to ignore the keydown event in this case.
|
|
10293
|
-
if (safari && Math.abs(
|
|
10410
|
+
if (safari && Math.abs(Date.now() - view.input.compositionEndedAt) < 500) {
|
|
10294
10411
|
view.input.compositionEndedAt = -2e8;
|
|
10295
10412
|
return true;
|
|
10296
10413
|
}
|
|
@@ -10302,7 +10419,7 @@ editHandlers.compositionstart = editHandlers.compositionupdate = view => {
|
|
|
10302
10419
|
if (!view.composing) {
|
|
10303
10420
|
view.domObserver.flush();
|
|
10304
10421
|
let { state } = view, $pos = state.selection.$to;
|
|
10305
|
-
if (state.selection instanceof TextSelection &&
|
|
10422
|
+
if (state.selection instanceof TextSelection && state.selection.empty &&
|
|
10306
10423
|
(state.storedMarks ||
|
|
10307
10424
|
(!$pos.textOffset && $pos.parentOffset && $pos.nodeBefore.marks.some(m => m.type.spec.inclusive === false)) ||
|
|
10308
10425
|
chrome && windows$1 && selectionBeforeUneditable(view))) { // Issue #1500
|
|
@@ -10318,11 +10435,11 @@ editHandlers.compositionstart = editHandlers.compositionupdate = view => {
|
|
|
10318
10435
|
// inside if necessary.
|
|
10319
10436
|
if (gecko && state.selection.empty && $pos.parentOffset && !$pos.textOffset && $pos.nodeBefore.marks.length) {
|
|
10320
10437
|
let sel = view.domSelectionRange();
|
|
10321
|
-
for (let node = sel.focusNode, offset = sel.focusOffset; node && node
|
|
10438
|
+
for (let node = sel.focusNode, offset = sel.focusOffset; node && isElt(node) && offset != 0;) {
|
|
10322
10439
|
let before = offset < 0 ? node.lastChild : node.childNodes[offset - 1];
|
|
10323
10440
|
if (!before)
|
|
10324
10441
|
break;
|
|
10325
|
-
if (before
|
|
10442
|
+
if (isText(before)) {
|
|
10326
10443
|
let sel = view.domSelection();
|
|
10327
10444
|
if (sel)
|
|
10328
10445
|
sel.collapse(before, before.nodeValue.length);
|
|
@@ -10341,15 +10458,15 @@ editHandlers.compositionstart = editHandlers.compositionupdate = view => {
|
|
|
10341
10458
|
};
|
|
10342
10459
|
function selectionBeforeUneditable(view) {
|
|
10343
10460
|
let { focusNode, focusOffset } = view.domSelectionRange();
|
|
10344
|
-
if (!focusNode || focusNode
|
|
10461
|
+
if (!focusNode || !isElt(focusNode) || focusOffset >= focusNode.childNodes.length)
|
|
10345
10462
|
return false;
|
|
10346
10463
|
let next = focusNode.childNodes[focusOffset];
|
|
10347
|
-
return next
|
|
10464
|
+
return isElt(next) && next.contentEditable == "false";
|
|
10348
10465
|
}
|
|
10349
10466
|
editHandlers.compositionend = (view, event) => {
|
|
10350
10467
|
if (view.composing) {
|
|
10351
10468
|
view.input.composing = false;
|
|
10352
|
-
view.input.compositionEndedAt =
|
|
10469
|
+
view.input.compositionEndedAt = Date.now();
|
|
10353
10470
|
view.input.compositionPendingChanges = view.domObserver.pendingRecords().length ? view.input.compositionID : 0;
|
|
10354
10471
|
view.input.compositionNode = null;
|
|
10355
10472
|
if (view.input.badSafariComposition)
|
|
@@ -10368,7 +10485,7 @@ function scheduleComposeEnd(view, delay) {
|
|
|
10368
10485
|
function clearComposition(view) {
|
|
10369
10486
|
if (view.composing) {
|
|
10370
10487
|
view.input.composing = false;
|
|
10371
|
-
view.input.compositionEndedAt =
|
|
10488
|
+
view.input.compositionEndedAt = Date.now();
|
|
10372
10489
|
}
|
|
10373
10490
|
while (view.input.compositionNodes.length > 0)
|
|
10374
10491
|
view.input.compositionNodes.pop().markParentsDirty();
|
|
@@ -10394,11 +10511,6 @@ function findCompositionNode(view) {
|
|
|
10394
10511
|
}
|
|
10395
10512
|
return textBefore || textAfter;
|
|
10396
10513
|
}
|
|
10397
|
-
function timestampFromCustomEvent() {
|
|
10398
|
-
let event = document.createEvent("Event");
|
|
10399
|
-
event.initEvent("event", true, true);
|
|
10400
|
-
return event.timeStamp;
|
|
10401
|
-
}
|
|
10402
10514
|
/**
|
|
10403
10515
|
@internal
|
|
10404
10516
|
*/
|
|
@@ -10551,7 +10663,7 @@ handlers.dragstart = (view, _event) => {
|
|
|
10551
10663
|
else if (mouseDown && mouseDown.mightDrag) {
|
|
10552
10664
|
node = NodeSelection.create(view.state.doc, mouseDown.mightDrag.pos);
|
|
10553
10665
|
}
|
|
10554
|
-
else if (event.target && event.target
|
|
10666
|
+
else if (event.target && isElt(event.target)) {
|
|
10555
10667
|
let desc = view.docView.nearestDesc(event.target, true);
|
|
10556
10668
|
if (desc && desc.node.type.spec.draggable && desc != view.docView)
|
|
10557
10669
|
node = NodeSelection.create(view.state.doc, desc.posBefore);
|
|
@@ -10668,8 +10780,8 @@ handlers.beforeinput = (view, _event) => {
|
|
|
10668
10780
|
// We should probably do more with beforeinput events, but support
|
|
10669
10781
|
// is so spotty that I'm still waiting to see where they are going.
|
|
10670
10782
|
// Very specific hack to deal with backspace sometimes failing on
|
|
10671
|
-
// Chrome Android when after an uneditable node.
|
|
10672
|
-
if (
|
|
10783
|
+
// Chrome and Firefox Android when after an uneditable node.
|
|
10784
|
+
if (android && event.inputType == "deleteContentBackward") {
|
|
10673
10785
|
view.domObserver.flushSoon();
|
|
10674
10786
|
let { domChangeCount } = view.input;
|
|
10675
10787
|
setTimeout(() => {
|
|
@@ -11522,7 +11634,7 @@ class DOMObserver {
|
|
|
11522
11634
|
let desc = container && this.view.docView.nearestDesc(container);
|
|
11523
11635
|
if (desc && desc.ignoreMutation({
|
|
11524
11636
|
type: "selection",
|
|
11525
|
-
target: container
|
|
11637
|
+
target: isText(container) ? container.parentNode : container
|
|
11526
11638
|
})) {
|
|
11527
11639
|
this.setCurSelection();
|
|
11528
11640
|
return true;
|
|
@@ -11555,13 +11667,16 @@ class DOMObserver {
|
|
|
11555
11667
|
}
|
|
11556
11668
|
}
|
|
11557
11669
|
}
|
|
11558
|
-
if (added.some(n => n.nodeName == "BR") &&
|
|
11670
|
+
if (added.some(n => n.nodeName == "BR") &&
|
|
11671
|
+
(view.input.lastKeyCode == 8 || view.input.lastKeyCode == 46 ||
|
|
11672
|
+
chrome && (view.composing || view.input.compositionEndedAt > Date.now() - 50) &&
|
|
11673
|
+
mutations.some(m => m.type == "childList" && m.removedNodes.length))) {
|
|
11559
11674
|
// Browsers sometimes insert a bogus break node if you
|
|
11560
11675
|
// backspace out the last bit of text before an inline-flex node (#1552)
|
|
11561
11676
|
for (let node of added)
|
|
11562
11677
|
if (node.nodeName == "BR" && node.parentNode) {
|
|
11563
11678
|
let after = node.nextSibling;
|
|
11564
|
-
while (after && after
|
|
11679
|
+
while (after && isElt(after)) {
|
|
11565
11680
|
if (after.contentEditable == "false") {
|
|
11566
11681
|
node.parentNode.removeChild(node);
|
|
11567
11682
|
break;
|
|
@@ -11634,7 +11749,7 @@ class DOMObserver {
|
|
|
11634
11749
|
for (let i = 0; i < mut.addedNodes.length; i++) {
|
|
11635
11750
|
let node = mut.addedNodes[i];
|
|
11636
11751
|
added.push(node);
|
|
11637
|
-
if (node
|
|
11752
|
+
if (isText(node))
|
|
11638
11753
|
this.lastChangedTextNode = node;
|
|
11639
11754
|
}
|
|
11640
11755
|
if (desc.contentDOM && desc.contentDOM != desc.dom && !desc.contentDOM.contains(mut.target))
|
|
@@ -11749,8 +11864,7 @@ function fixUpBadSafariComposition(view, addedNodes) {
|
|
|
11749
11864
|
let parent = nextCell;
|
|
11750
11865
|
for (;;) {
|
|
11751
11866
|
let first = parent.firstChild;
|
|
11752
|
-
if (!first || first
|
|
11753
|
-
/^(BR|IMG)$/.test(first.nodeName))
|
|
11867
|
+
if (!first || !isElt(first) || first.contentEditable == "false" || /^(BR|IMG)$/.test(first.nodeName))
|
|
11754
11868
|
break;
|
|
11755
11869
|
parent = first;
|
|
11756
11870
|
}
|
|
@@ -11770,12 +11884,12 @@ function fixUpBadSafariComposition(view, addedNodes) {
|
|
|
11770
11884
|
// that the DOM represents. If any changes came in in the meantime,
|
|
11771
11885
|
// the modification is mapped over those before it is applied, in
|
|
11772
11886
|
// readDOMChange.
|
|
11773
|
-
function parseBetween(view, from_, to_) {
|
|
11887
|
+
function parseBetween(view, from_, to_, addedNodes) {
|
|
11774
11888
|
let { node: parent, fromOffset, toOffset, from, to } = view.docView.parseRange(from_, to_);
|
|
11775
11889
|
let domSel = view.domSelectionRange();
|
|
11776
11890
|
let find;
|
|
11777
11891
|
let anchor = domSel.anchorNode;
|
|
11778
|
-
if (anchor && view.dom
|
|
11892
|
+
if (anchor && contains(view.dom, anchor)) {
|
|
11779
11893
|
find = [{ node: anchor, offset: domSel.anchorOffset }];
|
|
11780
11894
|
if (!selectionCollapsed(domSel))
|
|
11781
11895
|
find.push({ node: domSel.focusNode, offset: domSel.focusOffset });
|
|
@@ -11804,7 +11918,7 @@ function parseBetween(view, from_, to_) {
|
|
|
11804
11918
|
to: toOffset,
|
|
11805
11919
|
preserveWhitespace: $from.parent.type.whitespace == "pre" ? "full" : true,
|
|
11806
11920
|
findPositions: find,
|
|
11807
|
-
ruleFromNode,
|
|
11921
|
+
ruleFromNode: ruleFromNode(addedNodes),
|
|
11808
11922
|
context: $from
|
|
11809
11923
|
});
|
|
11810
11924
|
if (find && find[0].pos != null) {
|
|
@@ -11815,10 +11929,10 @@ function parseBetween(view, from_, to_) {
|
|
|
11815
11929
|
}
|
|
11816
11930
|
return { doc, sel, from, to };
|
|
11817
11931
|
}
|
|
11818
|
-
|
|
11932
|
+
const ruleFromNode = (added) => (dom) => {
|
|
11819
11933
|
let desc = dom.pmViewDesc;
|
|
11820
11934
|
if (desc) {
|
|
11821
|
-
return desc.parseRule();
|
|
11935
|
+
return desc.parseRule(added);
|
|
11822
11936
|
}
|
|
11823
11937
|
else if (dom.nodeName == "BR" && dom.parentNode) {
|
|
11824
11938
|
// Safari replaces the list item or table cell with a BR
|
|
@@ -11837,7 +11951,7 @@ function ruleFromNode(dom) {
|
|
|
11837
11951
|
return { ignore: true };
|
|
11838
11952
|
}
|
|
11839
11953
|
return null;
|
|
11840
|
-
}
|
|
11954
|
+
};
|
|
11841
11955
|
const isInline = /^(a|abbr|acronym|b|bd[io]|big|br|button|cite|code|data(list)?|del|dfn|em|i|img|ins|kbd|label|map|mark|meter|output|q|ruby|s|samp|small|span|strong|su[bp]|time|u|tt|var)$/i;
|
|
11842
11956
|
function readDOMChange(view, from, to, typeOver, addedNodes) {
|
|
11843
11957
|
let compositionID = view.input.compositionPendingChanges || (view.composing ? view.input.compositionID : 0);
|
|
@@ -11866,7 +11980,7 @@ function readDOMChange(view, from, to, typeOver, addedNodes) {
|
|
|
11866
11980
|
from = $before.before(shared + 1);
|
|
11867
11981
|
to = view.state.doc.resolve(to).after(shared + 1);
|
|
11868
11982
|
let sel = view.state.selection;
|
|
11869
|
-
let parse = parseBetween(view, from, to);
|
|
11983
|
+
let parse = parseBetween(view, from, to, addedNodes);
|
|
11870
11984
|
let doc = view.state.doc, compare = doc.slice(parse.from, parse.to);
|
|
11871
11985
|
let preferredPos, preferredSide;
|
|
11872
11986
|
// Prefer anchoring to end when Backspace is pressed
|
|
@@ -11883,7 +11997,7 @@ function readDOMChange(view, from, to, typeOver, addedNodes) {
|
|
|
11883
11997
|
if (change)
|
|
11884
11998
|
view.input.domChangeCount++;
|
|
11885
11999
|
if ((ios && view.input.lastIOSEnter > Date.now() - 225 || android) &&
|
|
11886
|
-
addedNodes.some(n => n
|
|
12000
|
+
addedNodes.some(n => isElt(n) && !isInline.test(n.nodeName)) &&
|
|
11887
12001
|
(!change || change.endA >= change.endB) &&
|
|
11888
12002
|
view.someProp("handleKeyDown", f => f(view, keyEvent(13, "Enter")))) {
|
|
11889
12003
|
view.input.lastIOSEnter = 0;
|
|
@@ -11941,9 +12055,7 @@ function readDOMChange(view, from, to, typeOver, addedNodes) {
|
|
|
11941
12055
|
// as being an iOS enter press), just dispatch an Enter key instead.
|
|
11942
12056
|
if (((ios && view.input.lastIOSEnter > Date.now() - 225 &&
|
|
11943
12057
|
(!inlineChange || addedNodes.some(n => n.nodeName == "DIV" || n.nodeName == "P"))) ||
|
|
11944
|
-
(!inlineChange && $from.pos
|
|
11945
|
-
(!$from.sameParent($to) || !$from.parent.inlineContent) &&
|
|
11946
|
-
$from.pos < $to.pos && !/\S/.test(parse.doc.textBetween($from.pos, $to.pos, "", "")))) &&
|
|
12058
|
+
(!inlineChange && looksLikeEnter(parse.doc, $from.pos, $to.pos))) &&
|
|
11947
12059
|
view.someProp("handleKeyDown", f => f(view, keyEvent(13, "Enter")))) {
|
|
11948
12060
|
view.input.lastIOSEnter = 0;
|
|
11949
12061
|
return;
|
|
@@ -12094,6 +12206,16 @@ function looksLikeBackspace(old, start, end, $newStart, $newEnd) {
|
|
|
12094
12206
|
// The fragments after the join point must match
|
|
12095
12207
|
return $newStart.parent.content.cut($newStart.parentOffset).eq($next.parent.content);
|
|
12096
12208
|
}
|
|
12209
|
+
function looksLikeEnter(content, from, to) {
|
|
12210
|
+
let newTextlines = 0, newLeaves = 0;
|
|
12211
|
+
content.nodesBetween(from, to, (node, pos) => {
|
|
12212
|
+
if (node.isTextblock && pos >= from && pos < to)
|
|
12213
|
+
newTextlines++;
|
|
12214
|
+
else if (node.isText ? /\S/.test(node.text.slice(Math.max(0, from - pos), Math.min(node.nodeSize, to - pos))) : node.isLeaf)
|
|
12215
|
+
newLeaves++;
|
|
12216
|
+
});
|
|
12217
|
+
return newLeaves == 0 && newTextlines == 1;
|
|
12218
|
+
}
|
|
12097
12219
|
function skipClosingAndOpening($pos, fromEnd, mayOpen) {
|
|
12098
12220
|
let depth = $pos.depth, end = fromEnd ? $pos.end() : $pos.pos;
|
|
12099
12221
|
while (depth > 0 && (fromEnd || $pos.indexAfter(depth) == $pos.node(depth).childCount)) {
|
|
@@ -12111,38 +12233,28 @@ function skipClosingAndOpening($pos, fromEnd, mayOpen) {
|
|
|
12111
12233
|
return end;
|
|
12112
12234
|
}
|
|
12113
12235
|
function findDiff(a, b, pos, preferredPos, preferredSide) {
|
|
12114
|
-
let start = a.findDiffStart(b, pos);
|
|
12236
|
+
let start = a.findDiffStart(b, pos), lenA = pos + a.size, lenB = pos + b.size;
|
|
12115
12237
|
if (start == null)
|
|
12116
12238
|
return null;
|
|
12117
|
-
let { a: endA, b: endB } = a.findDiffEnd(b,
|
|
12239
|
+
let { a: endA, b: endB } = a.findDiffEnd(b, lenA, lenB);
|
|
12118
12240
|
if (preferredSide == "end") {
|
|
12119
12241
|
let adjust = Math.max(0, start - Math.min(endA, endB));
|
|
12120
12242
|
preferredPos -= endA + adjust - start;
|
|
12121
12243
|
}
|
|
12122
|
-
if (endA < start &&
|
|
12244
|
+
if (endA < start && lenA < lenB) {
|
|
12123
12245
|
let move = preferredPos <= start && preferredPos >= endA ? start - preferredPos : 0;
|
|
12124
12246
|
start -= move;
|
|
12125
|
-
if (start && start < b.size && isSurrogatePair(b.textBetween(start - 1, start + 1)))
|
|
12126
|
-
start += move ? 1 : -1;
|
|
12127
12247
|
endB = start + (endB - endA);
|
|
12128
12248
|
endA = start;
|
|
12129
12249
|
}
|
|
12130
12250
|
else if (endB < start) {
|
|
12131
12251
|
let move = preferredPos <= start && preferredPos >= endB ? start - preferredPos : 0;
|
|
12132
12252
|
start -= move;
|
|
12133
|
-
if (start && start < a.size && isSurrogatePair(a.textBetween(start - 1, start + 1)))
|
|
12134
|
-
start += move ? 1 : -1;
|
|
12135
12253
|
endA = start + (endA - endB);
|
|
12136
12254
|
endB = start;
|
|
12137
12255
|
}
|
|
12138
12256
|
return { start, endA, endB };
|
|
12139
12257
|
}
|
|
12140
|
-
function isSurrogatePair(str) {
|
|
12141
|
-
if (str.length != 2)
|
|
12142
|
-
return false;
|
|
12143
|
-
let a = str.charCodeAt(0), b = str.charCodeAt(1);
|
|
12144
|
-
return a >= 0xDC00 && a <= 0xDFFF && b >= 0xD800 && b <= 0xDBFF;
|
|
12145
|
-
}
|
|
12146
12258
|
/**
|
|
12147
12259
|
An editor view manages the DOM structure that represents an
|
|
12148
12260
|
editable document. Its state and behavior are determined by its
|
|
@@ -12334,9 +12446,10 @@ class EditorView {
|
|
|
12334
12446
|
// a DOM selection change and the "selectionchange" event for it
|
|
12335
12447
|
// can cause a spurious DOM selection update, disrupting mouse
|
|
12336
12448
|
// drag selection.
|
|
12449
|
+
let mouseDown = this.input.mouseDown;
|
|
12337
12450
|
if (forceSelUpdate ||
|
|
12338
|
-
!(
|
|
12339
|
-
anchorInRightPlace(this))) {
|
|
12451
|
+
!(mouseDown && this.domObserver.currentSelection.eq(this.domSelectionRange()) &&
|
|
12452
|
+
anchorInRightPlace(this) && mouseDown.delaySelUpdate())) {
|
|
12340
12453
|
selectionToDOM(this, forceSelUpdate);
|
|
12341
12454
|
}
|
|
12342
12455
|
else {
|
|
@@ -12363,11 +12476,11 @@ class EditorView {
|
|
|
12363
12476
|
*/
|
|
12364
12477
|
scrollToSelection() {
|
|
12365
12478
|
let startDOM = this.domSelectionRange().focusNode;
|
|
12366
|
-
if (!startDOM || !this.dom
|
|
12479
|
+
if (!startDOM || !contains(this.dom, startDOM)) ;
|
|
12367
12480
|
else if (this.someProp("handleScrollToSelection", f => f(this))) ;
|
|
12368
12481
|
else if (this.state.selection instanceof NodeSelection) {
|
|
12369
12482
|
let target = this.docView.domAfterPos(this.state.selection.from);
|
|
12370
|
-
if (target
|
|
12483
|
+
if (isElt(target))
|
|
12371
12484
|
scrollRectIntoView(this, target.getBoundingClientRect(), startDOM);
|
|
12372
12485
|
}
|
|
12373
12486
|
else {
|
|
@@ -12632,7 +12745,7 @@ class EditorView {
|
|
|
12632
12745
|
@internal
|
|
12633
12746
|
*/
|
|
12634
12747
|
domSelectionRange() {
|
|
12635
|
-
let sel = this.domSelection();
|
|
12748
|
+
let sel = this.dom.isConnected !== false && this.domSelection();
|
|
12636
12749
|
if (!sel)
|
|
12637
12750
|
return { focusNode: null, focusOffset: 0, anchorNode: null, anchorOffset: 0 };
|
|
12638
12751
|
return safari && this.root.nodeType === 11 &&
|
|
@@ -13920,7 +14033,7 @@ const convertListsAndWrapRuns = (tr, state, targetType, startIndex, endIndex) =>
|
|
|
13920
14033
|
const inRange = i >= startIndex && i <= endIndex;
|
|
13921
14034
|
const isList = isListNode(child, state.schema);
|
|
13922
14035
|
if (inRange && child.type === state.schema.nodes.paragraph) {
|
|
13923
|
-
runStart
|
|
14036
|
+
runStart !== null && runStart !== void 0 ? runStart : (runStart = pos);
|
|
13924
14037
|
runEnd = pos + child.nodeSize;
|
|
13925
14038
|
}
|
|
13926
14039
|
else if (runStart !== null && runEnd !== null) {
|
|
@@ -14027,17 +14140,13 @@ const toggleNodeType = (schema, type, attrs = {}, shouldWrap = false) => {
|
|
|
14027
14140
|
}
|
|
14028
14141
|
return true;
|
|
14029
14142
|
}
|
|
14030
|
-
|
|
14031
|
-
|
|
14032
|
-
|
|
14033
|
-
|
|
14034
|
-
|
|
14035
|
-
return wrapIn(nodeType, attrs)(state, dispatch);
|
|
14036
|
-
}
|
|
14037
|
-
else {
|
|
14038
|
-
return setBlockType(nodeType, attrs)(state, dispatch);
|
|
14039
|
-
}
|
|
14143
|
+
if (hasActiveWrap) {
|
|
14144
|
+
return lift(state, dispatch);
|
|
14145
|
+
}
|
|
14146
|
+
if (shouldWrap) {
|
|
14147
|
+
return wrapIn(nodeType, attrs)(state, dispatch);
|
|
14040
14148
|
}
|
|
14149
|
+
return setBlockType(nodeType, attrs)(state, dispatch);
|
|
14041
14150
|
}
|
|
14042
14151
|
return false;
|
|
14043
14152
|
};
|
|
@@ -14442,7 +14551,7 @@ function buildInlineImageDOMAttrs(attrs) {
|
|
|
14442
14551
|
}
|
|
14443
14552
|
function getStatusHTML(state, alt, language) {
|
|
14444
14553
|
const key = state === 'failed' ? 'failed' : 'loading';
|
|
14445
|
-
const text = translations.
|
|
14554
|
+
const text = translations.translations.get(`editor-image-view.${key}`, language, {
|
|
14446
14555
|
filename: alt || 'file',
|
|
14447
14556
|
});
|
|
14448
14557
|
return `<span>${text}</span>`;
|
|
@@ -14554,7 +14663,8 @@ function createImageParseDOM(inlineImages) {
|
|
|
14554
14663
|
return rules;
|
|
14555
14664
|
}
|
|
14556
14665
|
function isEditorImageState(state) {
|
|
14557
|
-
|
|
14666
|
+
const states = ['loading', 'failed', 'success'];
|
|
14667
|
+
return states.includes(state);
|
|
14558
14668
|
}
|
|
14559
14669
|
function getOrCreateImageElement(fileInfoId, node) {
|
|
14560
14670
|
let img = imageCache.get(fileInfoId);
|
|
@@ -14572,7 +14682,7 @@ function createStatusSpanForState(state, node, language) {
|
|
|
14572
14682
|
return createStatusSpan(statusKey, node, language);
|
|
14573
14683
|
}
|
|
14574
14684
|
function createStatusSpan(key, node, language) {
|
|
14575
|
-
const text = translations.
|
|
14685
|
+
const text = translations.translations.get(`editor-image-view.${key}`, language, {
|
|
14576
14686
|
filename: node.attrs.alt || 'file',
|
|
14577
14687
|
});
|
|
14578
14688
|
const span = document.createElement('span');
|
|
@@ -15179,54 +15289,6 @@ var ucmicro = /*#__PURE__*/Object.freeze({
|
|
|
15179
15289
|
Z: Z
|
|
15180
15290
|
});
|
|
15181
15291
|
|
|
15182
|
-
// Generated using scripts/write-encode-map.ts
|
|
15183
|
-
function restoreDiff(arr) {
|
|
15184
|
-
for (let i = 1; i < arr.length; i++) {
|
|
15185
|
-
arr[i][0] += arr[i - 1][0] + 1;
|
|
15186
|
-
}
|
|
15187
|
-
return arr;
|
|
15188
|
-
}
|
|
15189
|
-
// prettier-ignore
|
|
15190
|
-
new Map(/* #__PURE__ */ restoreDiff([[9, "	"], [0, "
"], [22, "!"], [0, """], [0, "#"], [0, "$"], [0, "%"], [0, "&"], [0, "'"], [0, "("], [0, ")"], [0, "*"], [0, "+"], [0, ","], [1, "."], [0, "/"], [10, ":"], [0, ";"], [0, { v: "<", n: 8402, o: "<⃒" }], [0, { v: "=", n: 8421, o: "=⃥" }], [0, { v: ">", n: 8402, o: ">⃒" }], [0, "?"], [0, "@"], [26, "["], [0, "\"], [0, "]"], [0, "^"], [0, "_"], [0, "`"], [5, { n: 106, o: "fj" }], [20, "{"], [0, "|"], [0, "}"], [34, " "], [0, "¡"], [0, "¢"], [0, "£"], [0, "¤"], [0, "¥"], [0, "¦"], [0, "§"], [0, "¨"], [0, "©"], [0, "ª"], [0, "«"], [0, "¬"], [0, "­"], [0, "®"], [0, "¯"], [0, "°"], [0, "±"], [0, "²"], [0, "³"], [0, "´"], [0, "µ"], [0, "¶"], [0, "·"], [0, "¸"], [0, "¹"], [0, "º"], [0, "»"], [0, "¼"], [0, "½"], [0, "¾"], [0, "¿"], [0, "À"], [0, "Á"], [0, "Â"], [0, "Ã"], [0, "Ä"], [0, "Å"], [0, "Æ"], [0, "Ç"], [0, "È"], [0, "É"], [0, "Ê"], [0, "Ë"], [0, "Ì"], [0, "Í"], [0, "Î"], [0, "Ï"], [0, "Ð"], [0, "Ñ"], [0, "Ò"], [0, "Ó"], [0, "Ô"], [0, "Õ"], [0, "Ö"], [0, "×"], [0, "Ø"], [0, "Ù"], [0, "Ú"], [0, "Û"], [0, "Ü"], [0, "Ý"], [0, "Þ"], [0, "ß"], [0, "à"], [0, "á"], [0, "â"], [0, "ã"], [0, "ä"], [0, "å"], [0, "æ"], [0, "ç"], [0, "è"], [0, "é"], [0, "ê"], [0, "ë"], [0, "ì"], [0, "í"], [0, "î"], [0, "ï"], [0, "ð"], [0, "ñ"], [0, "ò"], [0, "ó"], [0, "ô"], [0, "õ"], [0, "ö"], [0, "÷"], [0, "ø"], [0, "ù"], [0, "ú"], [0, "û"], [0, "ü"], [0, "ý"], [0, "þ"], [0, "ÿ"], [0, "Ā"], [0, "ā"], [0, "Ă"], [0, "ă"], [0, "Ą"], [0, "ą"], [0, "Ć"], [0, "ć"], [0, "Ĉ"], [0, "ĉ"], [0, "Ċ"], [0, "ċ"], [0, "Č"], [0, "č"], [0, "Ď"], [0, "ď"], [0, "Đ"], [0, "đ"], [0, "Ē"], [0, "ē"], [2, "Ė"], [0, "ė"], [0, "Ę"], [0, "ę"], [0, "Ě"], [0, "ě"], [0, "Ĝ"], [0, "ĝ"], [0, "Ğ"], [0, "ğ"], [0, "Ġ"], [0, "ġ"], [0, "Ģ"], [1, "Ĥ"], [0, "ĥ"], [0, "Ħ"], [0, "ħ"], [0, "Ĩ"], [0, "ĩ"], [0, "Ī"], [0, "ī"], [2, "Į"], [0, "į"], [0, "İ"], [0, "ı"], [0, "IJ"], [0, "ij"], [0, "Ĵ"], [0, "ĵ"], [0, "Ķ"], [0, "ķ"], [0, "ĸ"], [0, "Ĺ"], [0, "ĺ"], [0, "Ļ"], [0, "ļ"], [0, "Ľ"], [0, "ľ"], [0, "Ŀ"], [0, "ŀ"], [0, "Ł"], [0, "ł"], [0, "Ń"], [0, "ń"], [0, "Ņ"], [0, "ņ"], [0, "Ň"], [0, "ň"], [0, "ʼn"], [0, "Ŋ"], [0, "ŋ"], [0, "Ō"], [0, "ō"], [2, "Ő"], [0, "ő"], [0, "Œ"], [0, "œ"], [0, "Ŕ"], [0, "ŕ"], [0, "Ŗ"], [0, "ŗ"], [0, "Ř"], [0, "ř"], [0, "Ś"], [0, "ś"], [0, "Ŝ"], [0, "ŝ"], [0, "Ş"], [0, "ş"], [0, "Š"], [0, "š"], [0, "Ţ"], [0, "ţ"], [0, "Ť"], [0, "ť"], [0, "Ŧ"], [0, "ŧ"], [0, "Ũ"], [0, "ũ"], [0, "Ū"], [0, "ū"], [0, "Ŭ"], [0, "ŭ"], [0, "Ů"], [0, "ů"], [0, "Ű"], [0, "ű"], [0, "Ų"], [0, "ų"], [0, "Ŵ"], [0, "ŵ"], [0, "Ŷ"], [0, "ŷ"], [0, "Ÿ"], [0, "Ź"], [0, "ź"], [0, "Ż"], [0, "ż"], [0, "Ž"], [0, "ž"], [19, "ƒ"], [34, "Ƶ"], [63, "ǵ"], [65, "ȷ"], [142, "ˆ"], [0, "ˇ"], [16, "˘"], [0, "˙"], [0, "˚"], [0, "˛"], [0, "˜"], [0, "˝"], [51, "̑"], [127, "Α"], [0, "Β"], [0, "Γ"], [0, "Δ"], [0, "Ε"], [0, "Ζ"], [0, "Η"], [0, "Θ"], [0, "Ι"], [0, "Κ"], [0, "Λ"], [0, "Μ"], [0, "Ν"], [0, "Ξ"], [0, "Ο"], [0, "Π"], [0, "Ρ"], [1, "Σ"], [0, "Τ"], [0, "Υ"], [0, "Φ"], [0, "Χ"], [0, "Ψ"], [0, "Ω"], [7, "α"], [0, "β"], [0, "γ"], [0, "δ"], [0, "ε"], [0, "ζ"], [0, "η"], [0, "θ"], [0, "ι"], [0, "κ"], [0, "λ"], [0, "μ"], [0, "ν"], [0, "ξ"], [0, "ο"], [0, "π"], [0, "ρ"], [0, "ς"], [0, "σ"], [0, "τ"], [0, "υ"], [0, "φ"], [0, "χ"], [0, "ψ"], [0, "ω"], [7, "ϑ"], [0, "ϒ"], [2, "ϕ"], [0, "ϖ"], [5, "Ϝ"], [0, "ϝ"], [18, "ϰ"], [0, "ϱ"], [3, "ϵ"], [0, "϶"], [10, "Ё"], [0, "Ђ"], [0, "Ѓ"], [0, "Є"], [0, "Ѕ"], [0, "І"], [0, "Ї"], [0, "Ј"], [0, "Љ"], [0, "Њ"], [0, "Ћ"], [0, "Ќ"], [1, "Ў"], [0, "Џ"], [0, "А"], [0, "Б"], [0, "В"], [0, "Г"], [0, "Д"], [0, "Е"], [0, "Ж"], [0, "З"], [0, "И"], [0, "Й"], [0, "К"], [0, "Л"], [0, "М"], [0, "Н"], [0, "О"], [0, "П"], [0, "Р"], [0, "С"], [0, "Т"], [0, "У"], [0, "Ф"], [0, "Х"], [0, "Ц"], [0, "Ч"], [0, "Ш"], [0, "Щ"], [0, "Ъ"], [0, "Ы"], [0, "Ь"], [0, "Э"], [0, "Ю"], [0, "Я"], [0, "а"], [0, "б"], [0, "в"], [0, "г"], [0, "д"], [0, "е"], [0, "ж"], [0, "з"], [0, "и"], [0, "й"], [0, "к"], [0, "л"], [0, "м"], [0, "н"], [0, "о"], [0, "п"], [0, "р"], [0, "с"], [0, "т"], [0, "у"], [0, "ф"], [0, "х"], [0, "ц"], [0, "ч"], [0, "ш"], [0, "щ"], [0, "ъ"], [0, "ы"], [0, "ь"], [0, "э"], [0, "ю"], [0, "я"], [1, "ё"], [0, "ђ"], [0, "ѓ"], [0, "є"], [0, "ѕ"], [0, "і"], [0, "ї"], [0, "ј"], [0, "љ"], [0, "њ"], [0, "ћ"], [0, "ќ"], [1, "ў"], [0, "џ"], [7074, " "], [0, " "], [0, " "], [0, " "], [1, " "], [0, " "], [0, " "], [0, " "], [0, "​"], [0, "‌"], [0, "‍"], [0, "‎"], [0, "‏"], [0, "‐"], [2, "–"], [0, "—"], [0, "―"], [0, "‖"], [1, "‘"], [0, "’"], [0, "‚"], [1, "“"], [0, "”"], [0, "„"], [1, "†"], [0, "‡"], [0, "•"], [2, "‥"], [0, "…"], [9, "‰"], [0, "‱"], [0, "′"], [0, "″"], [0, "‴"], [0, "‵"], [3, "‹"], [0, "›"], [3, "‾"], [2, "⁁"], [1, "⁃"], [0, "⁄"], [10, "⁏"], [7, "⁗"], [7, { v: " ", n: 8202, o: "  " }], [0, "⁠"], [0, "⁡"], [0, "⁢"], [0, "⁣"], [72, "€"], [46, "⃛"], [0, "⃜"], [37, "ℂ"], [2, "℅"], [4, "ℊ"], [0, "ℋ"], [0, "ℌ"], [0, "ℍ"], [0, "ℎ"], [0, "ℏ"], [0, "ℐ"], [0, "ℑ"], [0, "ℒ"], [0, "ℓ"], [1, "ℕ"], [0, "№"], [0, "℗"], [0, "℘"], [0, "ℙ"], [0, "ℚ"], [0, "ℛ"], [0, "ℜ"], [0, "ℝ"], [0, "℞"], [3, "™"], [1, "ℤ"], [2, "℧"], [0, "ℨ"], [0, "℩"], [2, "ℬ"], [0, "ℭ"], [1, "ℯ"], [0, "ℰ"], [0, "ℱ"], [1, "ℳ"], [0, "ℴ"], [0, "ℵ"], [0, "ℶ"], [0, "ℷ"], [0, "ℸ"], [12, "ⅅ"], [0, "ⅆ"], [0, "ⅇ"], [0, "ⅈ"], [10, "⅓"], [0, "⅔"], [0, "⅕"], [0, "⅖"], [0, "⅗"], [0, "⅘"], [0, "⅙"], [0, "⅚"], [0, "⅛"], [0, "⅜"], [0, "⅝"], [0, "⅞"], [49, "←"], [0, "↑"], [0, "→"], [0, "↓"], [0, "↔"], [0, "↕"], [0, "↖"], [0, "↗"], [0, "↘"], [0, "↙"], [0, "↚"], [0, "↛"], [1, { v: "↝", n: 824, o: "↝̸" }], [0, "↞"], [0, "↟"], [0, "↠"], [0, "↡"], [0, "↢"], [0, "↣"], [0, "↤"], [0, "↥"], [0, "↦"], [0, "↧"], [1, "↩"], [0, "↪"], [0, "↫"], [0, "↬"], [0, "↭"], [0, "↮"], [1, "↰"], [0, "↱"], [0, "↲"], [0, "↳"], [1, "↵"], [0, "↶"], [0, "↷"], [2, "↺"], [0, "↻"], [0, "↼"], [0, "↽"], [0, "↾"], [0, "↿"], [0, "⇀"], [0, "⇁"], [0, "⇂"], [0, "⇃"], [0, "⇄"], [0, "⇅"], [0, "⇆"], [0, "⇇"], [0, "⇈"], [0, "⇉"], [0, "⇊"], [0, "⇋"], [0, "⇌"], [0, "⇍"], [0, "⇎"], [0, "⇏"], [0, "⇐"], [0, "⇑"], [0, "⇒"], [0, "⇓"], [0, "⇔"], [0, "⇕"], [0, "⇖"], [0, "⇗"], [0, "⇘"], [0, "⇙"], [0, "⇚"], [0, "⇛"], [1, "⇝"], [6, "⇤"], [0, "⇥"], [15, "⇵"], [7, "⇽"], [0, "⇾"], [0, "⇿"], [0, "∀"], [0, "∁"], [0, { v: "∂", n: 824, o: "∂̸" }], [0, "∃"], [0, "∄"], [0, "∅"], [1, "∇"], [0, "∈"], [0, "∉"], [1, "∋"], [0, "∌"], [2, "∏"], [0, "∐"], [0, "∑"], [0, "−"], [0, "∓"], [0, "∔"], [1, "∖"], [0, "∗"], [0, "∘"], [1, "√"], [2, "∝"], [0, "∞"], [0, "∟"], [0, { v: "∠", n: 8402, o: "∠⃒" }], [0, "∡"], [0, "∢"], [0, "∣"], [0, "∤"], [0, "∥"], [0, "∦"], [0, "∧"], [0, "∨"], [0, { v: "∩", n: 65024, o: "∩︀" }], [0, { v: "∪", n: 65024, o: "∪︀" }], [0, "∫"], [0, "∬"], [0, "∭"], [0, "∮"], [0, "∯"], [0, "∰"], [0, "∱"], [0, "∲"], [0, "∳"], [0, "∴"], [0, "∵"], [0, "∶"], [0, "∷"], [0, "∸"], [1, "∺"], [0, "∻"], [0, { v: "∼", n: 8402, o: "∼⃒" }], [0, { v: "∽", n: 817, o: "∽̱" }], [0, { v: "∾", n: 819, o: "∾̳" }], [0, "∿"], [0, "≀"], [0, "≁"], [0, { v: "≂", n: 824, o: "≂̸" }], [0, "≃"], [0, "≄"], [0, "≅"], [0, "≆"], [0, "≇"], [0, "≈"], [0, "≉"], [0, "≊"], [0, { v: "≋", n: 824, o: "≋̸" }], [0, "≌"], [0, { v: "≍", n: 8402, o: "≍⃒" }], [0, { v: "≎", n: 824, o: "≎̸" }], [0, { v: "≏", n: 824, o: "≏̸" }], [0, { v: "≐", n: 824, o: "≐̸" }], [0, "≑"], [0, "≒"], [0, "≓"], [0, "≔"], [0, "≕"], [0, "≖"], [0, "≗"], [1, "≙"], [0, "≚"], [1, "≜"], [2, "≟"], [0, "≠"], [0, { v: "≡", n: 8421, o: "≡⃥" }], [0, "≢"], [1, { v: "≤", n: 8402, o: "≤⃒" }], [0, { v: "≥", n: 8402, o: "≥⃒" }], [0, { v: "≦", n: 824, o: "≦̸" }], [0, { v: "≧", n: 824, o: "≧̸" }], [0, { v: "≨", n: 65024, o: "≨︀" }], [0, { v: "≩", n: 65024, o: "≩︀" }], [0, { v: "≪", n: new Map(/* #__PURE__ */ restoreDiff([[824, "≪̸"], [7577, "≪⃒"]])) }], [0, { v: "≫", n: new Map(/* #__PURE__ */ restoreDiff([[824, "≫̸"], [7577, "≫⃒"]])) }], [0, "≬"], [0, "≭"], [0, "≮"], [0, "≯"], [0, "≰"], [0, "≱"], [0, "≲"], [0, "≳"], [0, "≴"], [0, "≵"], [0, "≶"], [0, "≷"], [0, "≸"], [0, "≹"], [0, "≺"], [0, "≻"], [0, "≼"], [0, "≽"], [0, "≾"], [0, { v: "≿", n: 824, o: "≿̸" }], [0, "⊀"], [0, "⊁"], [0, { v: "⊂", n: 8402, o: "⊂⃒" }], [0, { v: "⊃", n: 8402, o: "⊃⃒" }], [0, "⊄"], [0, "⊅"], [0, "⊆"], [0, "⊇"], [0, "⊈"], [0, "⊉"], [0, { v: "⊊", n: 65024, o: "⊊︀" }], [0, { v: "⊋", n: 65024, o: "⊋︀" }], [1, "⊍"], [0, "⊎"], [0, { v: "⊏", n: 824, o: "⊏̸" }], [0, { v: "⊐", n: 824, o: "⊐̸" }], [0, "⊑"], [0, "⊒"], [0, { v: "⊓", n: 65024, o: "⊓︀" }], [0, { v: "⊔", n: 65024, o: "⊔︀" }], [0, "⊕"], [0, "⊖"], [0, "⊗"], [0, "⊘"], [0, "⊙"], [0, "⊚"], [0, "⊛"], [1, "⊝"], [0, "⊞"], [0, "⊟"], [0, "⊠"], [0, "⊡"], [0, "⊢"], [0, "⊣"], [0, "⊤"], [0, "⊥"], [1, "⊧"], [0, "⊨"], [0, "⊩"], [0, "⊪"], [0, "⊫"], [0, "⊬"], [0, "⊭"], [0, "⊮"], [0, "⊯"], [0, "⊰"], [1, "⊲"], [0, "⊳"], [0, { v: "⊴", n: 8402, o: "⊴⃒" }], [0, { v: "⊵", n: 8402, o: "⊵⃒" }], [0, "⊶"], [0, "⊷"], [0, "⊸"], [0, "⊹"], [0, "⊺"], [0, "⊻"], [1, "⊽"], [0, "⊾"], [0, "⊿"], [0, "⋀"], [0, "⋁"], [0, "⋂"], [0, "⋃"], [0, "⋄"], [0, "⋅"], [0, "⋆"], [0, "⋇"], [0, "⋈"], [0, "⋉"], [0, "⋊"], [0, "⋋"], [0, "⋌"], [0, "⋍"], [0, "⋎"], [0, "⋏"], [0, "⋐"], [0, "⋑"], [0, "⋒"], [0, "⋓"], [0, "⋔"], [0, "⋕"], [0, "⋖"], [0, "⋗"], [0, { v: "⋘", n: 824, o: "⋘̸" }], [0, { v: "⋙", n: 824, o: "⋙̸" }], [0, { v: "⋚", n: 65024, o: "⋚︀" }], [0, { v: "⋛", n: 65024, o: "⋛︀" }], [2, "⋞"], [0, "⋟"], [0, "⋠"], [0, "⋡"], [0, "⋢"], [0, "⋣"], [2, "⋦"], [0, "⋧"], [0, "⋨"], [0, "⋩"], [0, "⋪"], [0, "⋫"], [0, "⋬"], [0, "⋭"], [0, "⋮"], [0, "⋯"], [0, "⋰"], [0, "⋱"], [0, "⋲"], [0, "⋳"], [0, "⋴"], [0, { v: "⋵", n: 824, o: "⋵̸" }], [0, "⋶"], [0, "⋷"], [1, { v: "⋹", n: 824, o: "⋹̸" }], [0, "⋺"], [0, "⋻"], [0, "⋼"], [0, "⋽"], [0, "⋾"], [6, "⌅"], [0, "⌆"], [1, "⌈"], [0, "⌉"], [0, "⌊"], [0, "⌋"], [0, "⌌"], [0, "⌍"], [0, "⌎"], [0, "⌏"], [0, "⌐"], [1, "⌒"], [0, "⌓"], [1, "⌕"], [0, "⌖"], [5, "⌜"], [0, "⌝"], [0, "⌞"], [0, "⌟"], [2, "⌢"], [0, "⌣"], [9, "⌭"], [0, "⌮"], [7, "⌶"], [6, "⌽"], [1, "⌿"], [60, "⍼"], [51, "⎰"], [0, "⎱"], [2, "⎴"], [0, "⎵"], [0, "⎶"], [37, "⏜"], [0, "⏝"], [0, "⏞"], [0, "⏟"], [2, "⏢"], [4, "⏧"], [59, "␣"], [164, "Ⓢ"], [55, "─"], [1, "│"], [9, "┌"], [3, "┐"], [3, "└"], [3, "┘"], [3, "├"], [7, "┤"], [7, "┬"], [7, "┴"], [7, "┼"], [19, "═"], [0, "║"], [0, "╒"], [0, "╓"], [0, "╔"], [0, "╕"], [0, "╖"], [0, "╗"], [0, "╘"], [0, "╙"], [0, "╚"], [0, "╛"], [0, "╜"], [0, "╝"], [0, "╞"], [0, "╟"], [0, "╠"], [0, "╡"], [0, "╢"], [0, "╣"], [0, "╤"], [0, "╥"], [0, "╦"], [0, "╧"], [0, "╨"], [0, "╩"], [0, "╪"], [0, "╫"], [0, "╬"], [19, "▀"], [3, "▄"], [3, "█"], [8, "░"], [0, "▒"], [0, "▓"], [13, "□"], [8, "▪"], [0, "▫"], [1, "▭"], [0, "▮"], [2, "▱"], [1, "△"], [0, "▴"], [0, "▵"], [2, "▸"], [0, "▹"], [3, "▽"], [0, "▾"], [0, "▿"], [2, "◂"], [0, "◃"], [6, "◊"], [0, "○"], [32, "◬"], [2, "◯"], [8, "◸"], [0, "◹"], [0, "◺"], [0, "◻"], [0, "◼"], [8, "★"], [0, "☆"], [7, "☎"], [49, "♀"], [1, "♂"], [29, "♠"], [2, "♣"], [1, "♥"], [0, "♦"], [3, "♪"], [2, "♭"], [0, "♮"], [0, "♯"], [163, "✓"], [3, "✗"], [8, "✠"], [21, "✶"], [33, "❘"], [25, "❲"], [0, "❳"], [84, "⟈"], [0, "⟉"], [28, "⟦"], [0, "⟧"], [0, "⟨"], [0, "⟩"], [0, "⟪"], [0, "⟫"], [0, "⟬"], [0, "⟭"], [7, "⟵"], [0, "⟶"], [0, "⟷"], [0, "⟸"], [0, "⟹"], [0, "⟺"], [1, "⟼"], [2, "⟿"], [258, "⤂"], [0, "⤃"], [0, "⤄"], [0, "⤅"], [6, "⤌"], [0, "⤍"], [0, "⤎"], [0, "⤏"], [0, "⤐"], [0, "⤑"], [0, "⤒"], [0, "⤓"], [2, "⤖"], [2, "⤙"], [0, "⤚"], [0, "⤛"], [0, "⤜"], [0, "⤝"], [0, "⤞"], [0, "⤟"], [0, "⤠"], [2, "⤣"], [0, "⤤"], [0, "⤥"], [0, "⤦"], [0, "⤧"], [0, "⤨"], [0, "⤩"], [0, "⤪"], [8, { v: "⤳", n: 824, o: "⤳̸" }], [1, "⤵"], [0, "⤶"], [0, "⤷"], [0, "⤸"], [0, "⤹"], [2, "⤼"], [0, "⤽"], [7, "⥅"], [2, "⥈"], [0, "⥉"], [0, "⥊"], [0, "⥋"], [2, "⥎"], [0, "⥏"], [0, "⥐"], [0, "⥑"], [0, "⥒"], [0, "⥓"], [0, "⥔"], [0, "⥕"], [0, "⥖"], [0, "⥗"], [0, "⥘"], [0, "⥙"], [0, "⥚"], [0, "⥛"], [0, "⥜"], [0, "⥝"], [0, "⥞"], [0, "⥟"], [0, "⥠"], [0, "⥡"], [0, "⥢"], [0, "⥣"], [0, "⥤"], [0, "⥥"], [0, "⥦"], [0, "⥧"], [0, "⥨"], [0, "⥩"], [0, "⥪"], [0, "⥫"], [0, "⥬"], [0, "⥭"], [0, "⥮"], [0, "⥯"], [0, "⥰"], [0, "⥱"], [0, "⥲"], [0, "⥳"], [0, "⥴"], [0, "⥵"], [0, "⥶"], [1, "⥸"], [0, "⥹"], [1, "⥻"], [0, "⥼"], [0, "⥽"], [0, "⥾"], [0, "⥿"], [5, "⦅"], [0, "⦆"], [4, "⦋"], [0, "⦌"], [0, "⦍"], [0, "⦎"], [0, "⦏"], [0, "⦐"], [0, "⦑"], [0, "⦒"], [0, "⦓"], [0, "⦔"], [0, "⦕"], [0, "⦖"], [3, "⦚"], [1, "⦜"], [0, "⦝"], [6, "⦤"], [0, "⦥"], [0, "⦦"], [0, "⦧"], [0, "⦨"], [0, "⦩"], [0, "⦪"], [0, "⦫"], [0, "⦬"], [0, "⦭"], [0, "⦮"], [0, "⦯"], [0, "⦰"], [0, "⦱"], [0, "⦲"], [0, "⦳"], [0, "⦴"], [0, "⦵"], [0, "⦶"], [0, "⦷"], [1, "⦹"], [1, "⦻"], [0, "⦼"], [1, "⦾"], [0, "⦿"], [0, "⧀"], [0, "⧁"], [0, "⧂"], [0, "⧃"], [0, "⧄"], [0, "⧅"], [3, "⧉"], [3, "⧍"], [0, "⧎"], [0, { v: "⧏", n: 824, o: "⧏̸" }], [0, { v: "⧐", n: 824, o: "⧐̸" }], [11, "⧜"], [0, "⧝"], [0, "⧞"], [4, "⧣"], [0, "⧤"], [0, "⧥"], [5, "⧫"], [8, "⧴"], [1, "⧶"], [9, "⨀"], [0, "⨁"], [0, "⨂"], [1, "⨄"], [1, "⨆"], [5, "⨌"], [0, "⨍"], [2, "⨐"], [0, "⨑"], [0, "⨒"], [0, "⨓"], [0, "⨔"], [0, "⨕"], [0, "⨖"], [0, "⨗"], [10, "⨢"], [0, "⨣"], [0, "⨤"], [0, "⨥"], [0, "⨦"], [0, "⨧"], [1, "⨩"], [0, "⨪"], [2, "⨭"], [0, "⨮"], [0, "⨯"], [0, "⨰"], [0, "⨱"], [1, "⨳"], [0, "⨴"], [0, "⨵"], [0, "⨶"], [0, "⨷"], [0, "⨸"], [0, "⨹"], [0, "⨺"], [0, "⨻"], [0, "⨼"], [2, "⨿"], [0, "⩀"], [1, "⩂"], [0, "⩃"], [0, "⩄"], [0, "⩅"], [0, "⩆"], [0, "⩇"], [0, "⩈"], [0, "⩉"], [0, "⩊"], [0, "⩋"], [0, "⩌"], [0, "⩍"], [2, "⩐"], [2, "⩓"], [0, "⩔"], [0, "⩕"], [0, "⩖"], [0, "⩗"], [0, "⩘"], [1, "⩚"], [0, "⩛"], [0, "⩜"], [0, "⩝"], [1, "⩟"], [6, "⩦"], [3, "⩪"], [2, { v: "⩭", n: 824, o: "⩭̸" }], [0, "⩮"], [0, "⩯"], [0, { v: "⩰", n: 824, o: "⩰̸" }], [0, "⩱"], [0, "⩲"], [0, "⩳"], [0, "⩴"], [0, "⩵"], [1, "⩷"], [0, "⩸"], [0, "⩹"], [0, "⩺"], [0, "⩻"], [0, "⩼"], [0, { v: "⩽", n: 824, o: "⩽̸" }], [0, { v: "⩾", n: 824, o: "⩾̸" }], [0, "⩿"], [0, "⪀"], [0, "⪁"], [0, "⪂"], [0, "⪃"], [0, "⪄"], [0, "⪅"], [0, "⪆"], [0, "⪇"], [0, "⪈"], [0, "⪉"], [0, "⪊"], [0, "⪋"], [0, "⪌"], [0, "⪍"], [0, "⪎"], [0, "⪏"], [0, "⪐"], [0, "⪑"], [0, "⪒"], [0, "⪓"], [0, "⪔"], [0, "⪕"], [0, "⪖"], [0, "⪗"], [0, "⪘"], [0, "⪙"], [0, "⪚"], [2, "⪝"], [0, "⪞"], [0, "⪟"], [0, "⪠"], [0, { v: "⪡", n: 824, o: "⪡̸" }], [0, { v: "⪢", n: 824, o: "⪢̸" }], [1, "⪤"], [0, "⪥"], [0, "⪦"], [0, "⪧"], [0, "⪨"], [0, "⪩"], [0, "⪪"], [0, "⪫"], [0, { v: "⪬", n: 65024, o: "⪬︀" }], [0, { v: "⪭", n: 65024, o: "⪭︀" }], [0, "⪮"], [0, { v: "⪯", n: 824, o: "⪯̸" }], [0, { v: "⪰", n: 824, o: "⪰̸" }], [2, "⪳"], [0, "⪴"], [0, "⪵"], [0, "⪶"], [0, "⪷"], [0, "⪸"], [0, "⪹"], [0, "⪺"], [0, "⪻"], [0, "⪼"], [0, "⪽"], [0, "⪾"], [0, "⪿"], [0, "⫀"], [0, "⫁"], [0, "⫂"], [0, "⫃"], [0, "⫄"], [0, { v: "⫅", n: 824, o: "⫅̸" }], [0, { v: "⫆", n: 824, o: "⫆̸" }], [0, "⫇"], [0, "⫈"], [2, { v: "⫋", n: 65024, o: "⫋︀" }], [0, { v: "⫌", n: 65024, o: "⫌︀" }], [2, "⫏"], [0, "⫐"], [0, "⫑"], [0, "⫒"], [0, "⫓"], [0, "⫔"], [0, "⫕"], [0, "⫖"], [0, "⫗"], [0, "⫘"], [0, "⫙"], [0, "⫚"], [0, "⫛"], [8, "⫤"], [1, "⫦"], [0, "⫧"], [0, "⫨"], [0, "⫩"], [1, "⫫"], [0, "⫬"], [0, "⫭"], [0, "⫮"], [0, "⫯"], [0, "⫰"], [0, "⫱"], [0, "⫲"], [0, "⫳"], [9, { v: "⫽", n: 8421, o: "⫽⃥" }], [44343, { n: new Map(/* #__PURE__ */ restoreDiff([[56476, "𝒜"], [1, "𝒞"], [0, "𝒟"], [2, "𝒢"], [2, "𝒥"], [0, "𝒦"], [2, "𝒩"], [0, "𝒪"], [0, "𝒫"], [0, "𝒬"], [1, "𝒮"], [0, "𝒯"], [0, "𝒰"], [0, "𝒱"], [0, "𝒲"], [0, "𝒳"], [0, "𝒴"], [0, "𝒵"], [0, "𝒶"], [0, "𝒷"], [0, "𝒸"], [0, "𝒹"], [1, "𝒻"], [1, "𝒽"], [0, "𝒾"], [0, "𝒿"], [0, "𝓀"], [0, "𝓁"], [0, "𝓂"], [0, "𝓃"], [1, "𝓅"], [0, "𝓆"], [0, "𝓇"], [0, "𝓈"], [0, "𝓉"], [0, "𝓊"], [0, "𝓋"], [0, "𝓌"], [0, "𝓍"], [0, "𝓎"], [0, "𝓏"], [52, "𝔄"], [0, "𝔅"], [1, "𝔇"], [0, "𝔈"], [0, "𝔉"], [0, "𝔊"], [2, "𝔍"], [0, "𝔎"], [0, "𝔏"], [0, "𝔐"], [0, "𝔑"], [0, "𝔒"], [0, "𝔓"], [0, "𝔔"], [1, "𝔖"], [0, "𝔗"], [0, "𝔘"], [0, "𝔙"], [0, "𝔚"], [0, "𝔛"], [0, "𝔜"], [1, "𝔞"], [0, "𝔟"], [0, "𝔠"], [0, "𝔡"], [0, "𝔢"], [0, "𝔣"], [0, "𝔤"], [0, "𝔥"], [0, "𝔦"], [0, "𝔧"], [0, "𝔨"], [0, "𝔩"], [0, "𝔪"], [0, "𝔫"], [0, "𝔬"], [0, "𝔭"], [0, "𝔮"], [0, "𝔯"], [0, "𝔰"], [0, "𝔱"], [0, "𝔲"], [0, "𝔳"], [0, "𝔴"], [0, "𝔵"], [0, "𝔶"], [0, "𝔷"], [0, "𝔸"], [0, "𝔹"], [1, "𝔻"], [0, "𝔼"], [0, "𝔽"], [0, "𝔾"], [1, "𝕀"], [0, "𝕁"], [0, "𝕂"], [0, "𝕃"], [0, "𝕄"], [1, "𝕆"], [3, "𝕊"], [0, "𝕋"], [0, "𝕌"], [0, "𝕍"], [0, "𝕎"], [0, "𝕏"], [0, "𝕐"], [1, "𝕒"], [0, "𝕓"], [0, "𝕔"], [0, "𝕕"], [0, "𝕖"], [0, "𝕗"], [0, "𝕘"], [0, "𝕙"], [0, "𝕚"], [0, "𝕛"], [0, "𝕜"], [0, "𝕝"], [0, "𝕞"], [0, "𝕟"], [0, "𝕠"], [0, "𝕡"], [0, "𝕢"], [0, "𝕣"], [0, "𝕤"], [0, "𝕥"], [0, "𝕦"], [0, "𝕧"], [0, "𝕨"], [0, "𝕩"], [0, "𝕪"], [0, "𝕫"]])) }], [8906, "ff"], [0, "fi"], [0, "fl"], [0, "ffi"], [0, "ffl"]]));
|
|
15191
|
-
|
|
15192
|
-
/** The level of entities to support. */
|
|
15193
|
-
var EntityLevel;
|
|
15194
|
-
(function (EntityLevel) {
|
|
15195
|
-
/** Support only XML entities. */
|
|
15196
|
-
EntityLevel[EntityLevel["XML"] = 0] = "XML";
|
|
15197
|
-
/** Support HTML entities, which are a superset of XML entities. */
|
|
15198
|
-
EntityLevel[EntityLevel["HTML"] = 1] = "HTML";
|
|
15199
|
-
})(EntityLevel || (EntityLevel = {}));
|
|
15200
|
-
var EncodingMode;
|
|
15201
|
-
(function (EncodingMode) {
|
|
15202
|
-
/**
|
|
15203
|
-
* The output is UTF-8 encoded. Only characters that need escaping within
|
|
15204
|
-
* XML will be escaped.
|
|
15205
|
-
*/
|
|
15206
|
-
EncodingMode[EncodingMode["UTF8"] = 0] = "UTF8";
|
|
15207
|
-
/**
|
|
15208
|
-
* The output consists only of ASCII characters. Characters that need
|
|
15209
|
-
* escaping within HTML, and characters that aren't ASCII characters will
|
|
15210
|
-
* be escaped.
|
|
15211
|
-
*/
|
|
15212
|
-
EncodingMode[EncodingMode["ASCII"] = 1] = "ASCII";
|
|
15213
|
-
/**
|
|
15214
|
-
* Encode all characters that have an equivalent entity, as well as all
|
|
15215
|
-
* characters that are not ASCII characters.
|
|
15216
|
-
*/
|
|
15217
|
-
EncodingMode[EncodingMode["Extensive"] = 2] = "Extensive";
|
|
15218
|
-
/**
|
|
15219
|
-
* Encode all characters that have to be escaped in HTML attributes,
|
|
15220
|
-
* following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}.
|
|
15221
|
-
*/
|
|
15222
|
-
EncodingMode[EncodingMode["Attribute"] = 3] = "Attribute";
|
|
15223
|
-
/**
|
|
15224
|
-
* Encode all characters that have to be escaped in HTML text,
|
|
15225
|
-
* following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}.
|
|
15226
|
-
*/
|
|
15227
|
-
EncodingMode[EncodingMode["Text"] = 4] = "Text";
|
|
15228
|
-
})(EncodingMode || (EncodingMode = {}));
|
|
15229
|
-
|
|
15230
15292
|
// Utilities
|
|
15231
15293
|
//
|
|
15232
15294
|
|
|
@@ -25520,12 +25582,11 @@ const updateLink = (view, updateLinkCallback) => {
|
|
|
25520
25582
|
const fromInNode = Math.max(0, from - pos);
|
|
25521
25583
|
const toInNode = Math.min(node.text.length, to - pos);
|
|
25522
25584
|
text += node.text.slice(fromInNode, toInNode);
|
|
25523
|
-
|
|
25524
|
-
node.marks.forEach((mark) => {
|
|
25585
|
+
for (const mark of node.marks) {
|
|
25525
25586
|
if (mark.type.name === 'link') {
|
|
25526
25587
|
href = mark.attrs.href;
|
|
25527
25588
|
}
|
|
25528
|
-
}
|
|
25589
|
+
}
|
|
25529
25590
|
});
|
|
25530
25591
|
if (updateLinkCallback) {
|
|
25531
25592
|
updateLinkCallback(text, href);
|
|
@@ -25542,8 +25603,8 @@ const findStart = (doc, pos, href) => {
|
|
|
25542
25603
|
while (pos > 0) {
|
|
25543
25604
|
const node = doc.nodeAt(pos - 1);
|
|
25544
25605
|
if (!(node === null || node === void 0 ? void 0 : node.isText) ||
|
|
25545
|
-
|
|
25546
|
-
mark.attrs.href
|
|
25606
|
+
node.marks.every((mark) => mark.type.name !== types.EditorMenuTypes.Link ||
|
|
25607
|
+
mark.attrs.href !== href)) {
|
|
25547
25608
|
break;
|
|
25548
25609
|
}
|
|
25549
25610
|
pos--;
|
|
@@ -25561,8 +25622,8 @@ const findEnd = (doc, pos, href) => {
|
|
|
25561
25622
|
while (pos < doc.content.size) {
|
|
25562
25623
|
const node = doc.nodeAt(pos);
|
|
25563
25624
|
if (!(node === null || node === void 0 ? void 0 : node.isText) ||
|
|
25564
|
-
|
|
25565
|
-
mark.attrs.href
|
|
25625
|
+
node.marks.every((mark) => mark.type.name !== types.EditorMenuTypes.Link ||
|
|
25626
|
+
mark.attrs.href !== href)) {
|
|
25566
25627
|
break;
|
|
25567
25628
|
}
|
|
25568
25629
|
pos++;
|
|
@@ -25698,16 +25759,17 @@ const createNodesWithLinksAndBreaks = (text, schema) => {
|
|
|
25698
25759
|
if (line.length > 0) {
|
|
25699
25760
|
nodes.push(...createNodesWithLinks(line, schema));
|
|
25700
25761
|
}
|
|
25701
|
-
if (index
|
|
25702
|
-
|
|
25703
|
-
|
|
25704
|
-
|
|
25705
|
-
|
|
25706
|
-
|
|
25707
|
-
|
|
25708
|
-
|
|
25709
|
-
|
|
25710
|
-
|
|
25762
|
+
if (index >= lines.length - 1) {
|
|
25763
|
+
continue;
|
|
25764
|
+
}
|
|
25765
|
+
const hb = schema.nodes.hard_break;
|
|
25766
|
+
if (hb) {
|
|
25767
|
+
nodes.push(hb.create());
|
|
25768
|
+
}
|
|
25769
|
+
else {
|
|
25770
|
+
// Fallback: if schema lacks hard_break, defer to default paste behavior
|
|
25771
|
+
// (Do NOT throw; keep behavior stable across versions)
|
|
25772
|
+
console.warn('hard_break node not found in schema');
|
|
25711
25773
|
}
|
|
25712
25774
|
}
|
|
25713
25775
|
return nodes;
|
|
@@ -25844,10 +25906,11 @@ const createLinkPlugin = (updateLinkCallback) => {
|
|
|
25844
25906
|
}
|
|
25845
25907
|
// Prevent unhandled navigation and bubbling for link clicks
|
|
25846
25908
|
const link = event.target.closest('a');
|
|
25847
|
-
if (link) {
|
|
25848
|
-
|
|
25849
|
-
event.stopPropagation();
|
|
25909
|
+
if (!link) {
|
|
25910
|
+
return;
|
|
25850
25911
|
}
|
|
25912
|
+
event.preventDefault();
|
|
25913
|
+
event.stopPropagation();
|
|
25851
25914
|
},
|
|
25852
25915
|
},
|
|
25853
25916
|
},
|
|
@@ -25918,11 +25981,12 @@ const replaceImageNodeByFileInfoId = (view, fileInfoId, buildNode) => {
|
|
|
25918
25981
|
if (found) {
|
|
25919
25982
|
return false;
|
|
25920
25983
|
}
|
|
25921
|
-
if (node.attrs.fileInfoId
|
|
25922
|
-
|
|
25923
|
-
found = true;
|
|
25924
|
-
return false;
|
|
25984
|
+
if (node.attrs.fileInfoId !== fileInfoId) {
|
|
25985
|
+
return true;
|
|
25925
25986
|
}
|
|
25987
|
+
tr.replaceWith(pos, pos + node.nodeSize, buildNode(node));
|
|
25988
|
+
found = true;
|
|
25989
|
+
return false;
|
|
25926
25990
|
});
|
|
25927
25991
|
if (found) {
|
|
25928
25992
|
dispatch(tr);
|
|
@@ -25994,24 +26058,20 @@ const isImageNode$1 = (node) => {
|
|
|
25994
26058
|
if (node.type.name === 'image') {
|
|
25995
26059
|
return true;
|
|
25996
26060
|
}
|
|
25997
|
-
|
|
25998
|
-
// eslint-disable-next-line unicorn/no-array-for-each
|
|
25999
|
-
node.content.forEach((child) => {
|
|
26061
|
+
for (const child of node.children) {
|
|
26000
26062
|
if (isImageNode$1(child)) {
|
|
26001
|
-
|
|
26063
|
+
return true;
|
|
26002
26064
|
}
|
|
26003
|
-
}
|
|
26004
|
-
return
|
|
26065
|
+
}
|
|
26066
|
+
return false;
|
|
26005
26067
|
}
|
|
26006
|
-
|
|
26007
|
-
|
|
26008
|
-
// eslint-disable-next-line unicorn/no-array-for-each
|
|
26009
|
-
node.forEach((child) => {
|
|
26068
|
+
if (node instanceof Fragment) {
|
|
26069
|
+
for (const child of node.content) {
|
|
26010
26070
|
if (isImageNode$1(child)) {
|
|
26011
|
-
|
|
26071
|
+
return true;
|
|
26012
26072
|
}
|
|
26013
|
-
}
|
|
26014
|
-
return
|
|
26073
|
+
}
|
|
26074
|
+
return false;
|
|
26015
26075
|
}
|
|
26016
26076
|
return false;
|
|
26017
26077
|
};
|
|
@@ -26022,8 +26082,7 @@ const isImageNode$1 = (node) => {
|
|
|
26022
26082
|
*/
|
|
26023
26083
|
const filterImageNodes = (fragment) => {
|
|
26024
26084
|
const filteredChildren = [];
|
|
26025
|
-
|
|
26026
|
-
fragment.forEach((child) => {
|
|
26085
|
+
for (const child of fragment.content) {
|
|
26027
26086
|
if (!isImageNode$1(child)) {
|
|
26028
26087
|
if (child.content.size > 0) {
|
|
26029
26088
|
const filteredContent = filterImageNodes(child.content);
|
|
@@ -26034,7 +26093,7 @@ const filterImageNodes = (fragment) => {
|
|
|
26034
26093
|
filteredChildren.push(child);
|
|
26035
26094
|
}
|
|
26036
26095
|
}
|
|
26037
|
-
}
|
|
26096
|
+
}
|
|
26038
26097
|
return Fragment.fromArray(filteredChildren);
|
|
26039
26098
|
};
|
|
26040
26099
|
/**
|
|
@@ -26074,27 +26133,28 @@ function handlePastedImages(view, clipboardData, inlineImages) {
|
|
|
26074
26133
|
let isImageFilePasted = false;
|
|
26075
26134
|
const files$1 = [...(clipboardData.files || [])];
|
|
26076
26135
|
for (const file of files$1) {
|
|
26077
|
-
if (isImageFile(file, clipboardData)) {
|
|
26078
|
-
|
|
26079
|
-
const reader = new FileReader();
|
|
26080
|
-
reader.onloadend = () => {
|
|
26081
|
-
const base64Data = reader.result;
|
|
26082
|
-
const fileInfo = files.createFileInfo(file);
|
|
26083
|
-
if (inlineImages) {
|
|
26084
|
-
// Once inline images are configured they own the paste
|
|
26085
|
-
// lifecycle; never fall back to the legacy imagePasted
|
|
26086
|
-
// event. Without an upload handler the paste is a no-op.
|
|
26087
|
-
if (inlineImages.upload) {
|
|
26088
|
-
runInlineImageUpload(view, file, base64Data, fileInfo, inlineImages);
|
|
26089
|
-
}
|
|
26090
|
-
return;
|
|
26091
|
-
}
|
|
26092
|
-
view.dom.dispatchEvent(new CustomEvent('imagePasted', {
|
|
26093
|
-
detail: imageInserterFactory(view, base64Data, fileInfo),
|
|
26094
|
-
}));
|
|
26095
|
-
};
|
|
26096
|
-
reader.readAsDataURL(file);
|
|
26136
|
+
if (!isImageFile(file, clipboardData)) {
|
|
26137
|
+
continue;
|
|
26097
26138
|
}
|
|
26139
|
+
isImageFilePasted = true;
|
|
26140
|
+
const reader = new FileReader();
|
|
26141
|
+
reader.onloadend = () => {
|
|
26142
|
+
const base64Data = reader.result;
|
|
26143
|
+
const fileInfo = files.createFileInfo(file);
|
|
26144
|
+
if (inlineImages) {
|
|
26145
|
+
// Once inline images are configured they own the paste
|
|
26146
|
+
// lifecycle; never fall back to the legacy imagePasted
|
|
26147
|
+
// event. Without an upload handler the paste is a no-op.
|
|
26148
|
+
if (inlineImages.upload) {
|
|
26149
|
+
runInlineImageUpload(view, file, base64Data, fileInfo, inlineImages);
|
|
26150
|
+
}
|
|
26151
|
+
return;
|
|
26152
|
+
}
|
|
26153
|
+
view.dom.dispatchEvent(new CustomEvent('imagePasted', {
|
|
26154
|
+
detail: imageInserterFactory(view, base64Data, fileInfo),
|
|
26155
|
+
}));
|
|
26156
|
+
};
|
|
26157
|
+
reader.readAsDataURL(file);
|
|
26098
26158
|
}
|
|
26099
26159
|
return isImageFilePasted;
|
|
26100
26160
|
}
|
|
@@ -26154,7 +26214,7 @@ class ImageView {
|
|
|
26154
26214
|
const handle = document.createElement('div');
|
|
26155
26215
|
handle.className = `resize-handle ${position}`;
|
|
26156
26216
|
handle.setAttribute('role', 'slider');
|
|
26157
|
-
handle.setAttribute('aria-label', translations.
|
|
26217
|
+
handle.setAttribute('aria-label', translations.translations.get('editor-image-view.resize-handle', this.language));
|
|
26158
26218
|
handle.setAttribute('tabindex', '0');
|
|
26159
26219
|
handle.setAttribute('aria-valuemin', MIN_WIDTH.toString());
|
|
26160
26220
|
handle.setAttribute('aria-valuenow', this.img.offsetWidth.toString());
|
|
@@ -26195,7 +26255,7 @@ class ImageView {
|
|
|
26195
26255
|
this.createLoadingState = () => {
|
|
26196
26256
|
this.dom.setAttribute('aria-live', 'polite');
|
|
26197
26257
|
this.dom.setAttribute('aria-busy', 'true');
|
|
26198
|
-
this.dom.setAttribute('aria-label', translations.
|
|
26258
|
+
this.dom.setAttribute('aria-label', translations.translations.get('editor-image-view.loading', this.language, {
|
|
26199
26259
|
filename: this.node.attrs.alt || 'file',
|
|
26200
26260
|
}));
|
|
26201
26261
|
const spinnerElement = document.createElement('limel-linear-progress');
|
|
@@ -26205,7 +26265,7 @@ class ImageView {
|
|
|
26205
26265
|
this.createSuccessState = () => {
|
|
26206
26266
|
this.dom.setAttribute('aria-live', 'polite');
|
|
26207
26267
|
this.dom.setAttribute('aria-busy', 'false');
|
|
26208
|
-
this.dom.setAttribute('aria-label', translations.
|
|
26268
|
+
this.dom.setAttribute('aria-label', translations.translations.get('editor-image-view.success', this.language, {
|
|
26209
26269
|
filename: this.node.attrs.alt || 'file',
|
|
26210
26270
|
}));
|
|
26211
26271
|
const bottomRightHandle = this.createResizeHandle('bottom-right');
|
|
@@ -26216,7 +26276,7 @@ class ImageView {
|
|
|
26216
26276
|
this.createFailedState = () => {
|
|
26217
26277
|
this.dom.setAttribute('aria-live', 'assertive');
|
|
26218
26278
|
this.dom.setAttribute('aria-busy', 'false');
|
|
26219
|
-
this.dom.setAttribute('aria-label', translations.
|
|
26279
|
+
this.dom.setAttribute('aria-label', translations.translations.get('editor-image-view.failed', this.language, {
|
|
26220
26280
|
filename: this.node.attrs.alt || 'file',
|
|
26221
26281
|
}));
|
|
26222
26282
|
};
|
|
@@ -26288,7 +26348,7 @@ const getMenuItemStates = (menuTypes, menuCommandFactory, view) => {
|
|
|
26288
26348
|
const allowedTypes = {};
|
|
26289
26349
|
for (const type of menuTypes) {
|
|
26290
26350
|
const command = menuCommandFactory.getCommand(type);
|
|
26291
|
-
activeTypes[type] = !!((_a = command === null || command === void 0 ? void 0 : command.active) === null || _a === void 0 ? void 0 : _a.call(command, view.state))
|
|
26351
|
+
activeTypes[type] = !!((_a = command === null || command === void 0 ? void 0 : command.active) === null || _a === void 0 ? void 0 : _a.call(command, view.state));
|
|
26292
26352
|
allowedTypes[type] = !!((_c = (_b = command === null || command === void 0 ? void 0 : command.allowed) === null || _b === void 0 ? void 0 : _b.call(command, view.state)) !== null && _c !== void 0 ? _c : true);
|
|
26293
26353
|
}
|
|
26294
26354
|
return { active: activeTypes, allowed: allowedTypes };
|
|
@@ -26309,11 +26369,12 @@ const createMenuStateTrackingPlugin = (menuTypes, menuCommandFactory, updateCall
|
|
|
26309
26369
|
update: (view) => {
|
|
26310
26370
|
const oldItemStates = actionBarPluginKey.getState(view.state);
|
|
26311
26371
|
const menuItemStates = getMenuItemStates(menuTypes, menuCommandFactory, view);
|
|
26312
|
-
if (
|
|
26313
|
-
|
|
26314
|
-
view.dispatch(tr);
|
|
26315
|
-
updateCallback(menuItemStates.active, menuItemStates.allowed);
|
|
26372
|
+
if (isEqual.isEqual(oldItemStates, menuItemStates)) {
|
|
26373
|
+
return;
|
|
26316
26374
|
}
|
|
26375
|
+
const tr = view.state.tr.setMeta(actionBarPluginKey, menuItemStates);
|
|
26376
|
+
view.dispatch(tr);
|
|
26377
|
+
updateCallback(menuItemStates.active, menuItemStates.allowed);
|
|
26317
26378
|
},
|
|
26318
26379
|
}),
|
|
26319
26380
|
});
|
|
@@ -26539,20 +26600,21 @@ const detectTriggerRemoval = (transaction, activeTrigger, resetActiveTrigger, co
|
|
|
26539
26600
|
return false;
|
|
26540
26601
|
}
|
|
26541
26602
|
for (const step of transaction.steps) {
|
|
26542
|
-
if (step instanceof ReplaceStep) {
|
|
26543
|
-
|
|
26544
|
-
|
|
26545
|
-
|
|
26546
|
-
|
|
26547
|
-
|
|
26548
|
-
|
|
26549
|
-
|
|
26550
|
-
|
|
26551
|
-
|
|
26552
|
-
|
|
26553
|
-
|
|
26554
|
-
|
|
26555
|
-
|
|
26603
|
+
if (!(step instanceof ReplaceStep)) {
|
|
26604
|
+
continue;
|
|
26605
|
+
}
|
|
26606
|
+
const { from, to, slice } = step; // Access properties specific to ReplaceStep
|
|
26607
|
+
// Check if the step affects the trigger position
|
|
26608
|
+
if (!(from <= activeTrigger.position && to >= activeTrigger.position)) {
|
|
26609
|
+
continue;
|
|
26610
|
+
}
|
|
26611
|
+
const text = slice.content.textBetween(0, slice.content.size, '');
|
|
26612
|
+
// Check if the trigger character has been removed
|
|
26613
|
+
// `text` is the text after the step has been applied
|
|
26614
|
+
if (!text.includes(activeTrigger.character)) {
|
|
26615
|
+
resetActiveTrigger();
|
|
26616
|
+
sendTriggerEvent('triggerStop', view, contentConverter, activeTrigger, '');
|
|
26617
|
+
return true;
|
|
26556
26618
|
}
|
|
26557
26619
|
}
|
|
26558
26620
|
return false;
|
|
@@ -28024,9 +28086,9 @@ const createNodeSpec = (config) => {
|
|
|
28024
28086
|
tag: tag,
|
|
28025
28087
|
getAttrs: (dom) => {
|
|
28026
28088
|
const attributes = {};
|
|
28027
|
-
|
|
28028
|
-
|
|
28029
|
-
|
|
28089
|
+
for (const attribute of config.attributes) {
|
|
28090
|
+
attributes[attribute] = dom.getAttribute(attribute);
|
|
28091
|
+
}
|
|
28030
28092
|
return attributes;
|
|
28031
28093
|
},
|
|
28032
28094
|
},
|
|
@@ -28207,7 +28269,7 @@ function areFrequencyMapsEqual(map1, map2) {
|
|
|
28207
28269
|
if (map1.size !== map2.size) {
|
|
28208
28270
|
return false;
|
|
28209
28271
|
}
|
|
28210
|
-
for (const [key, count] of map1
|
|
28272
|
+
for (const [key, count] of map1) {
|
|
28211
28273
|
if (map2.get(key) !== count) {
|
|
28212
28274
|
return false;
|
|
28213
28275
|
}
|
|
@@ -28279,7 +28341,7 @@ const ProsemirrorAdapter = class {
|
|
|
28279
28341
|
if (isItem.isItem(item)) {
|
|
28280
28342
|
const translationId = menuTranslationIDs[item.value];
|
|
28281
28343
|
if (translationId) {
|
|
28282
|
-
newItem.text = translations.
|
|
28344
|
+
newItem.text = translations.translations.get(translationId, this.language);
|
|
28283
28345
|
}
|
|
28284
28346
|
}
|
|
28285
28347
|
return newItem;
|
|
@@ -28289,7 +28351,9 @@ const ProsemirrorAdapter = class {
|
|
|
28289
28351
|
.map(this.getTranslatedItem)
|
|
28290
28352
|
.map((item) => {
|
|
28291
28353
|
if (isItem.isItem(item)) {
|
|
28292
|
-
return Object.assign(Object.assign({}, item), { selected: activeTypes[item.value],
|
|
28354
|
+
return Object.assign(Object.assign({}, item), { selected: activeTypes[item.value],
|
|
28355
|
+
// eslint-disable-next-line unicorn/no-computed-property-existence-check -- reads a boolean value, not key existence
|
|
28356
|
+
disabled: !allowedTypes[item.value] });
|
|
28293
28357
|
}
|
|
28294
28358
|
return item;
|
|
28295
28359
|
});
|
|
@@ -28346,35 +28410,38 @@ const ProsemirrorAdapter = class {
|
|
|
28346
28410
|
};
|
|
28347
28411
|
this.handleFocus = () => {
|
|
28348
28412
|
var _a;
|
|
28349
|
-
if (
|
|
28350
|
-
|
|
28351
|
-
// Workaround: On some focus interactions (especially clicking the first line and the last line),
|
|
28352
|
-
// ProseMirror does not dispatch a transaction or update the selection. This can cause
|
|
28353
|
-
// the cursor to fall back to the end of the document instead of placing it where the user clicked.
|
|
28354
|
-
//
|
|
28355
|
-
// To detect this, we wait one tick after focus. If no transaction has fired by then,
|
|
28356
|
-
// we assume the selection is unresolved and manually move the cursor to the last clicked position.
|
|
28357
|
-
//
|
|
28358
|
-
// The clicked position is only meaningful for the focus event that the
|
|
28359
|
-
// click itself triggered, so it is consumed here and cleared on blur.
|
|
28360
|
-
// Focus regained without a click (e.g. switching back to the window)
|
|
28361
|
-
// must leave the selection untouched.
|
|
28362
|
-
this.transactionFired = false;
|
|
28363
|
-
this.focusRestoreTimeout = setTimeout(() => {
|
|
28364
|
-
const clickedPos = this.lastClickedPos;
|
|
28365
|
-
this.lastClickedPos = null;
|
|
28366
|
-
if (!this.transactionFired &&
|
|
28367
|
-
clickedPos !== null &&
|
|
28368
|
-
clickedPos <= this.view.state.doc.content.size) {
|
|
28369
|
-
const { doc, tr } = this.view.state;
|
|
28370
|
-
const resolvedPos = doc.resolve(clickedPos);
|
|
28371
|
-
const selection = Selection.near(resolvedPos);
|
|
28372
|
-
tr.setMeta('pointer', true);
|
|
28373
|
-
this.view.dispatch(tr.setSelection(selection));
|
|
28374
|
-
}
|
|
28375
|
-
}, 0);
|
|
28413
|
+
if (this.disabled) {
|
|
28414
|
+
return;
|
|
28376
28415
|
}
|
|
28416
|
+
(_a = this.view) === null || _a === void 0 ? void 0 : _a.focus();
|
|
28417
|
+
// Workaround: On some focus interactions (especially clicking the first line and the last line),
|
|
28418
|
+
// ProseMirror does not dispatch a transaction or update the selection. This can cause
|
|
28419
|
+
// the cursor to fall back to the end of the document instead of placing it where the user clicked.
|
|
28420
|
+
//
|
|
28421
|
+
// To detect this, we wait one tick after focus. If no transaction has fired by then,
|
|
28422
|
+
// we assume the selection is unresolved and manually move the cursor to the last clicked position.
|
|
28423
|
+
//
|
|
28424
|
+
// The clicked position is only meaningful for the focus event that the
|
|
28425
|
+
// click itself triggered, so it is consumed here and cleared on blur.
|
|
28426
|
+
// Focus regained without a click (e.g. switching back to the window)
|
|
28427
|
+
// must leave the selection untouched.
|
|
28428
|
+
this.transactionFired = false;
|
|
28429
|
+
this.focusRestoreTimeout = setTimeout(() => {
|
|
28430
|
+
const clickedPos = this.lastClickedPos;
|
|
28431
|
+
this.lastClickedPos = null;
|
|
28432
|
+
if (this.transactionFired ||
|
|
28433
|
+
clickedPos === null ||
|
|
28434
|
+
clickedPos > this.view.state.doc.content.size) {
|
|
28435
|
+
return;
|
|
28436
|
+
}
|
|
28437
|
+
const { doc, tr } = this.view.state;
|
|
28438
|
+
const resolvedPos = doc.resolve(clickedPos);
|
|
28439
|
+
const selection = Selection.near(resolvedPos);
|
|
28440
|
+
tr.setMeta('pointer', true);
|
|
28441
|
+
this.view.dispatch(tr.setSelection(selection));
|
|
28442
|
+
}, 0);
|
|
28377
28443
|
};
|
|
28444
|
+
// eslint-disable-next-line unicorn/prefer-default-parameters -- a default parameter would not cover an empty string
|
|
28378
28445
|
this.handleNewLinkSelection = (text, href) => {
|
|
28379
28446
|
this.link.text = text;
|
|
28380
28447
|
this.link.href = href || 'https://';
|
|
@@ -28501,13 +28568,13 @@ const ProsemirrorAdapter = class {
|
|
|
28501
28568
|
(_e = this.view) === null || _e === void 0 ? void 0 : _e.destroy();
|
|
28502
28569
|
}
|
|
28503
28570
|
render() {
|
|
28504
|
-
return (index$1.h(index$1.Host, { key: '
|
|
28571
|
+
return (index$1.h(index$1.Host, { key: '16ef71481dea1fcefa1735e5a6350f47bf1d78ca', onFocus: this.handleFocus }, index$1.h("div", { key: '3b6598d8efd561afb6191d3d650f3a32e86f6904', id: "editor" }), this.renderToolbar(), this.renderLinkMenu()));
|
|
28505
28572
|
}
|
|
28506
28573
|
renderToolbar() {
|
|
28507
28574
|
if (this.actionBarItems.length === 0 || this.ui === 'no-toolbar') {
|
|
28508
28575
|
return;
|
|
28509
28576
|
}
|
|
28510
|
-
return (index$1.h("div", { class: "toolbar" }, index$1.h("limel-action-bar", { ref: (el) => (this.actionBarElement = el), accessibleLabel: translations.
|
|
28577
|
+
return (index$1.h("div", { class: "toolbar" }, index$1.h("limel-action-bar", { ref: (el) => (this.actionBarElement = el), accessibleLabel: translations.translations.get('editor-menu.toolbar', this.language), actions: this.actionBarItems, onItemSelected: this.handleActionBarItem })));
|
|
28511
28578
|
}
|
|
28512
28579
|
renderLinkMenu() {
|
|
28513
28580
|
if (!this.isLinkMenuOpen) {
|
|
@@ -28620,17 +28687,18 @@ const ProsemirrorAdapter = class {
|
|
|
28620
28687
|
}
|
|
28621
28688
|
}
|
|
28622
28689
|
metadataEmitter(metadata) {
|
|
28623
|
-
if (hasMetadataChanged(this.metadata, metadata)) {
|
|
28624
|
-
|
|
28625
|
-
this.metadata = metadata;
|
|
28626
|
-
this.metadataChange.emit(metadata);
|
|
28690
|
+
if (!hasMetadataChanged(this.metadata, metadata)) {
|
|
28691
|
+
return;
|
|
28627
28692
|
}
|
|
28693
|
+
this.removeImagesFromCache(this.metadata, metadata);
|
|
28694
|
+
this.metadata = metadata;
|
|
28695
|
+
this.metadataChange.emit(metadata);
|
|
28628
28696
|
}
|
|
28629
28697
|
// When the deprecated metadata events are removed, this cache eviction
|
|
28630
28698
|
// must be kept: re-derive the removed fileInfoIds from the node attrs so
|
|
28631
28699
|
// pasted images still get evicted from `imageCache` when deleted.
|
|
28632
28700
|
removeImagesFromCache(oldMetadata, newMetadata) {
|
|
28633
|
-
const removedImages = oldMetadata.images.filter((oldImage) =>
|
|
28701
|
+
const removedImages = oldMetadata.images.filter((oldImage) => newMetadata.images.every((newImage) => newImage.fileInfoId !== oldImage.fileInfoId));
|
|
28634
28702
|
for (const image of removedImages) {
|
|
28635
28703
|
imageCache.delete(image.fileInfoId);
|
|
28636
28704
|
this.imageRemoved.emit(image);
|