@jackuait/blok 0.7.0-beta.4 → 0.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/blok.mjs +3 -7
- package/dist/chunks/blok-D-7DpjTs.mjs +12435 -0
- package/dist/chunks/constants-DXYRzX7f.mjs +2934 -0
- package/dist/chunks/i18next-DymC16cN.mjs +1146 -0
- package/dist/chunks/i18next-loader-qjweOJ-t.mjs +35 -0
- package/dist/chunks/lightweight-i18n-vbtPx5C4.mjs +105 -0
- package/dist/chunks/messages-3bOAVT3X2.mjs +80 -0
- package/dist/chunks/messages-43N0Vfg42.mjs +80 -0
- package/dist/chunks/messages-B0cg-ThO2.mjs +80 -0
- package/dist/chunks/messages-B3StvafX.mjs +80 -0
- package/dist/chunks/messages-B7LU-b6n2.mjs +80 -0
- package/dist/chunks/messages-B87-89os.mjs +80 -0
- package/dist/chunks/messages-BFiMCfDX2.mjs +80 -0
- package/dist/chunks/messages-BLxyso1L.mjs +80 -0
- package/dist/chunks/messages-BQZtOYxr2.mjs +80 -0
- package/dist/chunks/messages-BRrtoRdw2.mjs +80 -0
- package/dist/chunks/messages-BU_YdaAf.mjs +80 -0
- package/dist/chunks/messages-BWbZYIs12.mjs +80 -0
- package/dist/chunks/messages-B_Qcy8kr2.mjs +80 -0
- package/dist/chunks/messages-B_uTiuQ-.mjs +80 -0
- package/dist/chunks/messages-BdWTM73p.mjs +80 -0
- package/dist/chunks/messages-BhZcNoIQ.mjs +80 -0
- package/dist/chunks/messages-Bn6LwI4B.mjs +80 -0
- package/dist/chunks/messages-BoTtYEct2.mjs +80 -0
- package/dist/chunks/messages-BrvAiuWT.mjs +80 -0
- package/dist/chunks/messages-Byp0YFMg.mjs +80 -0
- package/dist/chunks/messages-C0ZWDShx2.mjs +80 -0
- package/dist/chunks/messages-CA-jms9R.mjs +80 -0
- package/dist/chunks/messages-CFr0Ha6p2.mjs +80 -0
- package/dist/chunks/messages-CG2xl0IV.mjs +80 -0
- package/dist/chunks/messages-CIGX0FfW.mjs +80 -0
- package/dist/chunks/messages-CRMdL0jG.mjs +80 -0
- package/dist/chunks/messages-CRdl14uE.mjs +80 -0
- package/dist/chunks/messages-Cimsel4e.mjs +80 -0
- package/dist/chunks/messages-CjcSWeud.mjs +80 -0
- package/dist/chunks/messages-ClDJuy8K2.mjs +80 -0
- package/dist/chunks/messages-Cn1AC0Qk.mjs +80 -0
- package/dist/chunks/messages-CpnXbVOK2.mjs +80 -0
- package/dist/chunks/messages-CqsES1wk2.mjs +80 -0
- package/dist/chunks/messages-Csq7JatN.mjs +80 -0
- package/dist/chunks/messages-CtufKbaD.mjs +80 -0
- package/dist/chunks/messages-Cuk0QaLM.mjs +80 -0
- package/dist/chunks/messages-CvamFN6x.mjs +80 -0
- package/dist/chunks/messages-CwRhVVui.mjs +80 -0
- package/dist/chunks/messages-CzCezryo.mjs +80 -0
- package/dist/chunks/messages-D0v0Xa_i2.mjs +80 -0
- package/dist/chunks/messages-D3JVx_CH2.mjs +80 -0
- package/dist/chunks/messages-D4jR5Oc-.mjs +80 -0
- package/dist/chunks/messages-D7fI9Pj52.mjs +80 -0
- package/dist/chunks/messages-DGodJU2R.mjs +80 -0
- package/dist/chunks/messages-DLrmLkco2.mjs +80 -0
- package/dist/chunks/messages-DPe7kW6J.mjs +80 -0
- package/dist/chunks/messages-DRYKKPk8.mjs +80 -0
- package/dist/chunks/messages-DV5c_ZRQ.mjs +80 -0
- package/dist/chunks/messages-Dg6kSnxq.mjs +80 -0
- package/dist/chunks/messages-Dgfbmyf-.mjs +80 -0
- package/dist/chunks/messages-DihczS7L.mjs +80 -0
- package/dist/chunks/messages-DkSwQvmi2.mjs +80 -0
- package/dist/chunks/messages-Doxcj7Qy.mjs +80 -0
- package/dist/chunks/messages-DqGQvcXv2.mjs +80 -0
- package/dist/chunks/messages-Dr7yA3xM.mjs +80 -0
- package/dist/chunks/messages-DriB5lEF.mjs +80 -0
- package/dist/chunks/messages-FB_MePlt.mjs +80 -0
- package/dist/chunks/messages-JyZvGvrN.mjs +80 -0
- package/dist/chunks/messages-KdvbGwLH.mjs +80 -0
- package/dist/chunks/messages-M0HT-kBW.mjs +80 -0
- package/dist/chunks/messages-M8noQ6Kp2.mjs +80 -0
- package/dist/chunks/messages-elZUbCrN.mjs +80 -0
- package/dist/chunks/messages-iWMOMK822.mjs +80 -0
- package/dist/chunks/messages-kC92TJI72.mjs +80 -0
- package/dist/chunks/messages-tfyq1JIh2.mjs +80 -0
- package/dist/chunks/messages-v1HkA3kF2.mjs +80 -0
- package/dist/chunks/messages-yuqArCc6.mjs +80 -0
- package/dist/chunks/notifier-BqYxvxnV.mjs +96 -0
- package/dist/chunks/objectSpread2-CyPxu8-u.mjs +62 -0
- package/dist/chunks/tools-Chd7Auwx.mjs +6004 -0
- package/dist/chunks/tw-DmW6-pCY.mjs +237 -0
- package/dist/cli.mjs +36 -49
- package/dist/full.mjs +26 -52
- package/dist/locales.mjs +181 -254
- package/dist/messages-2iHnlF0U.mjs +80 -0
- package/dist/messages-49ZJ_ISf.mjs +80 -0
- package/dist/messages-B8jjwMLK.mjs +80 -0
- package/dist/messages-BEDVb3ZX.mjs +80 -0
- package/dist/messages-BEEr6Vh82.mjs +80 -0
- package/dist/messages-BFT0F9pw.mjs +80 -0
- package/dist/messages-BHOI7R4K.mjs +80 -0
- package/dist/messages-BRPH_a6a.mjs +80 -0
- package/dist/messages-BSlQrYwp.mjs +80 -0
- package/dist/messages-BTNuOkhL.mjs +80 -0
- package/dist/messages-BX2KVzJp2.mjs +80 -0
- package/dist/messages-BaGwIHPb2.mjs +80 -0
- package/dist/messages-BdA_xvxj.mjs +80 -0
- package/dist/messages-BeJaje7e2.mjs +80 -0
- package/dist/messages-BfgHOkAy.mjs +80 -0
- package/dist/messages-BflWzIcP2.mjs +80 -0
- package/dist/messages-BigRnQS92.mjs +80 -0
- package/dist/messages-BjnJajTO2.mjs +80 -0
- package/dist/messages-BpA30dPf.mjs +80 -0
- package/dist/messages-BrPEPj382.mjs +80 -0
- package/dist/messages-Bt_9ptDu.mjs +80 -0
- package/dist/messages-C0cXOCHN2.mjs +80 -0
- package/dist/messages-C3tLCwJp2.mjs +80 -0
- package/dist/messages-C45IBZtA2.mjs +80 -0
- package/dist/messages-CA0hwajz.mjs +80 -0
- package/dist/messages-CCKZS2f4.mjs +80 -0
- package/dist/messages-CCm71gq3.mjs +80 -0
- package/dist/messages-CERs9LC9.mjs +80 -0
- package/dist/messages-CLQvtc_8.mjs +80 -0
- package/dist/messages-CPx1R-PH.mjs +80 -0
- package/dist/messages-CYFdbooL2.mjs +80 -0
- package/dist/messages-CYLYnOV82.mjs +80 -0
- package/dist/messages-CYZVFnaF.mjs +80 -0
- package/dist/messages-CaAdEXoh2.mjs +80 -0
- package/dist/messages-CicggErN2.mjs +80 -0
- package/dist/messages-CkAWTSc4.mjs +80 -0
- package/dist/messages-CkVfziK_2.mjs +80 -0
- package/dist/messages-CsM2iz1H2.mjs +80 -0
- package/dist/messages-D-12TeCM2.mjs +80 -0
- package/dist/messages-D0i5Vdyy2.mjs +80 -0
- package/dist/messages-D5KmRsUV2.mjs +80 -0
- package/dist/messages-DBwaWI0X.mjs +80 -0
- package/dist/messages-DDGzypb4.mjs +80 -0
- package/dist/messages-DQGzw4IC.mjs +80 -0
- package/dist/messages-DWZyaZNA.mjs +80 -0
- package/dist/messages-DYlxQEIv.mjs +80 -0
- package/dist/messages-DZo0x7Bd.mjs +80 -0
- package/dist/messages-Dc1yFFBM.mjs +80 -0
- package/dist/messages-DdUpYaJ1.mjs +80 -0
- package/dist/messages-DgstU8GH.mjs +80 -0
- package/dist/messages-DhdWq5oQ2.mjs +80 -0
- package/dist/messages-DmX52AQr.mjs +80 -0
- package/dist/messages-Dr-YJYIK2.mjs +80 -0
- package/dist/messages-DuubRyFf.mjs +80 -0
- package/dist/messages-DvTVsLOK2.mjs +80 -0
- package/dist/messages-DwPfgL_u.mjs +80 -0
- package/dist/messages-DxKIxLKw.mjs +80 -0
- package/dist/messages-DzhR8Klk.mjs +80 -0
- package/dist/messages-MBBSKGjJ2.mjs +80 -0
- package/dist/messages-RNusm48G2.mjs +80 -0
- package/dist/messages-XwPD18Kk.mjs +80 -0
- package/dist/messages-YfjdnhUF.mjs +80 -0
- package/dist/messages-aNMLsF8T2.mjs +80 -0
- package/dist/messages-cOqXp22e.mjs +80 -0
- package/dist/messages-g58itYPI.mjs +80 -0
- package/dist/messages-vfkwiKQo.mjs +80 -0
- package/dist/messages-vssmW7KO.mjs +80 -0
- package/dist/react.mjs +108 -0
- package/dist/tools.mjs +3 -7485
- package/dist/vendor.LICENSE.txt +86 -86
- package/package.json +56 -29
- package/src/blok.ts +52 -2
- package/src/components/block/api.ts +8 -0
- package/src/components/block/mutation-handler.ts +29 -4
- package/src/components/block/style-manager.ts +1 -1
- package/src/components/block-tunes/block-tune-width.ts +39 -0
- package/src/components/blocks.ts +56 -2
- package/src/components/core.ts +1 -0
- package/src/components/i18n/locales/am/messages.json +6 -1
- package/src/components/i18n/locales/ar/messages.json +6 -1
- package/src/components/i18n/locales/az/messages.json +6 -1
- package/src/components/i18n/locales/bg/messages.json +8 -3
- package/src/components/i18n/locales/bn/messages.json +6 -1
- package/src/components/i18n/locales/bs/messages.json +6 -1
- package/src/components/i18n/locales/cs/messages.json +6 -1
- package/src/components/i18n/locales/da/messages.json +6 -1
- package/src/components/i18n/locales/de/messages.json +8 -3
- package/src/components/i18n/locales/dv/messages.json +6 -1
- package/src/components/i18n/locales/el/messages.json +8 -3
- package/src/components/i18n/locales/en/messages.json +5 -0
- package/src/components/i18n/locales/es/messages.json +6 -1
- package/src/components/i18n/locales/et/messages.json +6 -1
- package/src/components/i18n/locales/fa/messages.json +8 -3
- package/src/components/i18n/locales/fi/messages.json +6 -1
- package/src/components/i18n/locales/fil/messages.json +21 -16
- package/src/components/i18n/locales/fr/messages.json +6 -1
- package/src/components/i18n/locales/gu/messages.json +6 -1
- package/src/components/i18n/locales/he/messages.json +6 -1
- package/src/components/i18n/locales/hi/messages.json +6 -1
- package/src/components/i18n/locales/hr/messages.json +6 -1
- package/src/components/i18n/locales/hu/messages.json +6 -1
- package/src/components/i18n/locales/hy/messages.json +8 -3
- package/src/components/i18n/locales/id/messages.json +12 -7
- package/src/components/i18n/locales/it/messages.json +6 -1
- package/src/components/i18n/locales/ja/messages.json +6 -1
- package/src/components/i18n/locales/ka/messages.json +6 -1
- package/src/components/i18n/locales/km/messages.json +6 -1
- package/src/components/i18n/locales/kn/messages.json +6 -1
- package/src/components/i18n/locales/ko/messages.json +6 -1
- package/src/components/i18n/locales/ku/messages.json +7 -2
- package/src/components/i18n/locales/lo/messages.json +7 -2
- package/src/components/i18n/locales/lt/messages.json +6 -1
- package/src/components/i18n/locales/lv/messages.json +6 -1
- package/src/components/i18n/locales/mk/messages.json +6 -1
- package/src/components/i18n/locales/ml/messages.json +6 -1
- package/src/components/i18n/locales/mn/messages.json +6 -1
- package/src/components/i18n/locales/mr/messages.json +6 -1
- package/src/components/i18n/locales/ms/messages.json +6 -1
- package/src/components/i18n/locales/my/messages.json +6 -1
- package/src/components/i18n/locales/ne/messages.json +9 -4
- package/src/components/i18n/locales/nl/messages.json +6 -1
- package/src/components/i18n/locales/no/messages.json +6 -1
- package/src/components/i18n/locales/pa/messages.json +6 -1
- package/src/components/i18n/locales/pl/messages.json +6 -1
- package/src/components/i18n/locales/ps/messages.json +8 -3
- package/src/components/i18n/locales/pt/messages.json +6 -1
- package/src/components/i18n/locales/ro/messages.json +6 -1
- package/src/components/i18n/locales/ru/messages.json +10 -5
- package/src/components/i18n/locales/sd/messages.json +6 -1
- package/src/components/i18n/locales/si/messages.json +6 -1
- package/src/components/i18n/locales/sk/messages.json +6 -1
- package/src/components/i18n/locales/sl/messages.json +6 -1
- package/src/components/i18n/locales/sq/messages.json +6 -1
- package/src/components/i18n/locales/sr/messages.json +6 -1
- package/src/components/i18n/locales/sv/messages.json +6 -1
- package/src/components/i18n/locales/sw/messages.json +6 -1
- package/src/components/i18n/locales/ta/messages.json +6 -1
- package/src/components/i18n/locales/te/messages.json +9 -4
- package/src/components/i18n/locales/th/messages.json +6 -1
- package/src/components/i18n/locales/tr/messages.json +6 -1
- package/src/components/i18n/locales/ug/messages.json +7 -2
- package/src/components/i18n/locales/uk/messages.json +6 -1
- package/src/components/i18n/locales/ur/messages.json +6 -1
- package/src/components/i18n/locales/vi/messages.json +6 -1
- package/src/components/i18n/locales/yi/messages.json +7 -2
- package/src/components/i18n/locales/zh/messages.json +6 -1
- package/src/components/icons/index.ts +16 -0
- package/src/components/inline-tools/inline-tool-link.ts +1 -1
- package/src/components/modules/api/blocks.ts +45 -2
- package/src/components/modules/api/index.ts +1 -0
- package/src/components/modules/api/width.ts +17 -0
- package/src/components/modules/blockEvents/composers/keyboardNavigation.ts +99 -0
- package/src/components/modules/blockEvents/composers/markdownShortcuts.ts +109 -2
- package/src/components/modules/blockEvents/constants.ts +7 -0
- package/src/components/modules/blockManager/blockManager.ts +113 -9
- package/src/components/modules/blockManager/hierarchy.ts +61 -0
- package/src/components/modules/blockManager/operations.ts +133 -15
- package/src/components/modules/blockManager/yjs-sync.ts +112 -4
- package/src/components/modules/blockSelection.ts +36 -2
- package/src/components/modules/crossBlockSelection.ts +22 -2
- package/src/components/modules/drag/DragController.ts +178 -4
- package/src/components/modules/drag/operations/DragOperations.ts +48 -9
- package/src/components/modules/drag/preview/DragPreview.ts +21 -1
- package/src/components/modules/drag/state/DragStateMachine.ts +6 -1
- package/src/components/modules/drag/target/DropTargetDetector.ts +80 -4
- package/src/components/modules/drag/utils/ToggleSpringLoader.ts +71 -0
- package/src/components/modules/drag/utils/drag.constants.ts +1 -1
- package/src/components/modules/index.ts +7 -1
- package/src/components/modules/modificationsObserver.ts +19 -0
- package/src/components/modules/paste/constants.ts +2 -0
- package/src/components/modules/paste/handlers/base.ts +33 -1
- package/src/components/modules/paste/handlers/html-handler.ts +121 -54
- package/src/components/modules/paste/index.ts +5 -0
- package/src/components/modules/paste/types.ts +5 -0
- package/src/components/modules/rectangleSelection.ts +74 -81
- package/src/components/modules/toolbar/blockSettings.ts +25 -7
- package/src/components/modules/toolbar/index.ts +9 -7
- package/src/components/modules/toolbar/inline/index.ts +6 -1
- package/src/components/modules/toolbar/plus-button.ts +2 -6
- package/src/components/modules/toolbar/positioning.ts +10 -1
- package/src/components/modules/toolbar/settings-toggler.ts +1 -1
- package/src/components/modules/toolbar/styles.ts +4 -8
- package/src/components/modules/ui.ts +59 -5
- package/src/components/modules/uiControllers/handlers/click.ts +3 -2
- package/src/components/modules/widthManager.ts +69 -0
- package/src/components/modules/yjs/document-store.ts +11 -0
- package/src/components/modules/yjs/index.ts +11 -0
- package/src/components/shared/color-picker.ts +3 -3
- package/src/components/tools/block.ts +1 -11
- package/src/components/ui/toolbox.ts +52 -8
- package/src/components/utils/blocks.ts +37 -7
- package/src/components/utils/mutations.ts +2 -2
- package/src/components/utils/notifier/draw.ts +1 -1
- package/src/components/utils/placeholder.ts +5 -6
- package/src/components/utils/popover/components/popover-header/popover-header.const.ts +1 -1
- package/src/components/utils/popover/components/popover-item/popover-item-default/popover-item-default.const.ts +4 -4
- package/src/components/utils/popover/components/popover-item/popover-item-default/popover-item-default.ts +6 -6
- package/src/components/utils/popover/components/popover-item/popover-item-separator/popover-item-separator.const.ts +2 -2
- package/src/components/utils/popover/components/search-input/search-input.const.ts +2 -2
- package/src/components/utils/popover/components/search-input/search-input.ts +7 -11
- package/src/components/utils/popover/components/search-input/search-input.types.ts +149 -10
- package/src/components/utils/popover/popover-abstract.ts +3 -2
- package/src/components/utils/popover/popover-desktop.ts +133 -11
- package/src/components/utils/popover/popover-inline.ts +1 -1
- package/src/components/utils/popover/popover.const.ts +3 -3
- package/src/components/utils/shortcut.ts +2 -0
- package/src/components/utils/tooltip.ts +11 -1
- package/src/react/BlokContent.tsx +46 -0
- package/src/react/holder-map.ts +17 -0
- package/src/react/index.ts +3 -0
- package/src/react/types.ts +16 -0
- package/src/react/useBlok.ts +173 -0
- package/src/stories/Placeholder.stories.ts +0 -59
- package/src/styles/main.css +663 -52
- package/src/tools/header/header-toggle-keyboard.ts +115 -0
- package/src/tools/header/index.ts +382 -187
- package/src/tools/list/block-operations.ts +1 -1
- package/src/tools/list/caret-manager.ts +9 -12
- package/src/tools/list/index.ts +2 -6
- package/src/tools/list/list-keyboard.ts +2 -2
- package/src/tools/paragraph/index.ts +1 -1
- package/src/tools/table/index.ts +37 -3
- package/src/tools/table/table-add-controls.ts +97 -8
- package/src/tools/table/table-cell-blocks.ts +17 -8
- package/src/tools/table/table-cell-clipboard.ts +1 -1
- package/src/tools/table/table-cell-selection.ts +27 -2
- package/src/tools/table/table-operations.ts +3 -2
- package/src/tools/toggle/block-operations.ts +4 -2
- package/src/tools/toggle/constants.ts +26 -2
- package/src/tools/toggle/dom-builder.ts +90 -25
- package/src/tools/toggle/index.ts +112 -9
- package/src/tools/toggle/toggle-keyboard.ts +5 -3
- package/src/tools/toggle/toggle-lifecycle.ts +79 -7
- package/src/tools/toggle/toggle-shortcuts.ts +214 -20
- package/src/tools/toggle/types.ts +2 -0
- package/src/types-internal/blok-modules.d.ts +4 -0
- package/types/api/block.d.ts +5 -0
- package/types/api/blocks.d.ts +29 -0
- package/types/api/index.d.ts +1 -0
- package/types/api/width.d.ts +19 -0
- package/types/configs/blok-config.d.ts +33 -0
- package/types/index.d.ts +4 -0
- package/types/react.d.ts +58 -0
- package/types/utils/popover/popover.d.ts +7 -0
- package/dist/chunks/blok-B0pAWdVk.mjs +0 -20102
- package/dist/chunks/constants-DmDwNSTM.mjs +0 -5123
- package/dist/chunks/i18next-B47TKgbU.mjs +0 -1303
- package/dist/chunks/i18next-loader-v9SlYZ0i.mjs +0 -43
- package/dist/chunks/index-DHLWzZaA.mjs +0 -130
- package/dist/chunks/messages-0Pxnqd4N.mjs +0 -75
- package/dist/chunks/messages-0ZXYUq7S.mjs +0 -75
- package/dist/chunks/messages-2OD2uUDS.mjs +0 -75
- package/dist/chunks/messages-7cEMfYzh.mjs +0 -75
- package/dist/chunks/messages-8mwfda1Q.mjs +0 -75
- package/dist/chunks/messages-B-FqWsBM.mjs +0 -75
- package/dist/chunks/messages-B1jzqWiQ.mjs +0 -75
- package/dist/chunks/messages-B5wk4Ezz.mjs +0 -75
- package/dist/chunks/messages-BAZ5Ld8x.mjs +0 -75
- package/dist/chunks/messages-BBhGp198.mjs +0 -75
- package/dist/chunks/messages-BC9IjIb7.mjs +0 -75
- package/dist/chunks/messages-BFEmpeV-.mjs +0 -75
- package/dist/chunks/messages-BGqzTZy0.mjs +0 -75
- package/dist/chunks/messages-BICs1abK.mjs +0 -75
- package/dist/chunks/messages-BJX6rOnd.mjs +0 -75
- package/dist/chunks/messages-BL2bXRhN.mjs +0 -75
- package/dist/chunks/messages-BMs5qdlH.mjs +0 -75
- package/dist/chunks/messages-BRsjUNwB.mjs +0 -75
- package/dist/chunks/messages-BSqV8OUR.mjs +0 -75
- package/dist/chunks/messages-BTqu3DfG.mjs +0 -75
- package/dist/chunks/messages-BXnDEsur.mjs +0 -75
- package/dist/chunks/messages-BYcre4-6.mjs +0 -75
- package/dist/chunks/messages-BZ9LRJf-.mjs +0 -75
- package/dist/chunks/messages-BgypBy7y.mjs +0 -75
- package/dist/chunks/messages-BsuGf70G.mjs +0 -75
- package/dist/chunks/messages-BwaoF4lQ.mjs +0 -75
- package/dist/chunks/messages-C1l8_7-y.mjs +0 -75
- package/dist/chunks/messages-C5NA_r9v.mjs +0 -75
- package/dist/chunks/messages-C6zgZ5pA.mjs +0 -75
- package/dist/chunks/messages-CAo5ghFI.mjs +0 -75
- package/dist/chunks/messages-CH9qlJ9I.mjs +0 -75
- package/dist/chunks/messages-CI0HqAeS.mjs +0 -75
- package/dist/chunks/messages-CJJtms9k.mjs +0 -75
- package/dist/chunks/messages-CM2hJqk6.mjs +0 -75
- package/dist/chunks/messages-CRMiDPIQ.mjs +0 -75
- package/dist/chunks/messages-CWsZuBj1.mjs +0 -75
- package/dist/chunks/messages-C_gLHo6A.mjs +0 -75
- package/dist/chunks/messages-Cbu-NUDn.mjs +0 -75
- package/dist/chunks/messages-Cjb_MCeh.mjs +0 -75
- package/dist/chunks/messages-ClXYO9Wn.mjs +0 -75
- package/dist/chunks/messages-CsH20vhP.mjs +0 -75
- package/dist/chunks/messages-CsjAGhzA.mjs +0 -75
- package/dist/chunks/messages-Cx7VKFOE.mjs +0 -75
- package/dist/chunks/messages-D3JeBwxo.mjs +0 -75
- package/dist/chunks/messages-D541fieJ.mjs +0 -75
- package/dist/chunks/messages-D7XPdglc.mjs +0 -75
- package/dist/chunks/messages-DBhylfvt.mjs +0 -75
- package/dist/chunks/messages-DCA120lW.mjs +0 -75
- package/dist/chunks/messages-DCf_xZMN.mjs +0 -75
- package/dist/chunks/messages-DDwXKCpe.mjs +0 -75
- package/dist/chunks/messages-DNKDlxcy.mjs +0 -75
- package/dist/chunks/messages-DPvEjrGK.mjs +0 -75
- package/dist/chunks/messages-DQ-AkNxA.mjs +0 -75
- package/dist/chunks/messages-DVuvkNap.mjs +0 -75
- package/dist/chunks/messages-DaglyqUT.mjs +0 -75
- package/dist/chunks/messages-Di0bAfwA.mjs +0 -75
- package/dist/chunks/messages-DuLct0Yr.mjs +0 -75
- package/dist/chunks/messages-DzEYYhZh.mjs +0 -75
- package/dist/chunks/messages-DznNGAB2.mjs +0 -75
- package/dist/chunks/messages-DzoIzyu8.mjs +0 -75
- package/dist/chunks/messages-QYOGmket.mjs +0 -75
- package/dist/chunks/messages-cEjGDAgI.mjs +0 -75
- package/dist/chunks/messages-ddhvrdpE.mjs +0 -75
- package/dist/chunks/messages-mwfNK5nZ.mjs +0 -75
- package/dist/chunks/messages-nG_vNDte.mjs +0 -75
- package/dist/chunks/messages-tDq3Owh7.mjs +0 -75
- package/dist/chunks/messages-x6VJVZKx.mjs +0 -75
- package/dist/messages-0Pxnqd4N.mjs +0 -75
- package/dist/messages-0ZXYUq7S.mjs +0 -75
- package/dist/messages-2OD2uUDS.mjs +0 -75
- package/dist/messages-7cEMfYzh.mjs +0 -75
- package/dist/messages-8mwfda1Q.mjs +0 -75
- package/dist/messages-B-FqWsBM.mjs +0 -75
- package/dist/messages-B1jzqWiQ.mjs +0 -75
- package/dist/messages-B5wk4Ezz.mjs +0 -75
- package/dist/messages-BAZ5Ld8x.mjs +0 -75
- package/dist/messages-BBhGp198.mjs +0 -75
- package/dist/messages-BC9IjIb7.mjs +0 -75
- package/dist/messages-BFEmpeV-.mjs +0 -75
- package/dist/messages-BGqzTZy0.mjs +0 -75
- package/dist/messages-BICs1abK.mjs +0 -75
- package/dist/messages-BJX6rOnd.mjs +0 -75
- package/dist/messages-BL2bXRhN.mjs +0 -75
- package/dist/messages-BMs5qdlH.mjs +0 -75
- package/dist/messages-BRsjUNwB.mjs +0 -75
- package/dist/messages-BSqV8OUR.mjs +0 -75
- package/dist/messages-BTqu3DfG.mjs +0 -75
- package/dist/messages-BXnDEsur.mjs +0 -75
- package/dist/messages-BYcre4-6.mjs +0 -75
- package/dist/messages-BZ9LRJf-.mjs +0 -75
- package/dist/messages-BgypBy7y.mjs +0 -75
- package/dist/messages-BsuGf70G.mjs +0 -75
- package/dist/messages-BwaoF4lQ.mjs +0 -75
- package/dist/messages-C1l8_7-y.mjs +0 -75
- package/dist/messages-C5NA_r9v.mjs +0 -75
- package/dist/messages-C6zgZ5pA.mjs +0 -75
- package/dist/messages-CAo5ghFI.mjs +0 -75
- package/dist/messages-CH9qlJ9I.mjs +0 -75
- package/dist/messages-CI0HqAeS.mjs +0 -75
- package/dist/messages-CJJtms9k.mjs +0 -75
- package/dist/messages-CM2hJqk6.mjs +0 -75
- package/dist/messages-CRMiDPIQ.mjs +0 -75
- package/dist/messages-CWsZuBj1.mjs +0 -75
- package/dist/messages-C_gLHo6A.mjs +0 -75
- package/dist/messages-Cbu-NUDn.mjs +0 -75
- package/dist/messages-Cjb_MCeh.mjs +0 -75
- package/dist/messages-ClXYO9Wn.mjs +0 -75
- package/dist/messages-CsH20vhP.mjs +0 -75
- package/dist/messages-CsjAGhzA.mjs +0 -75
- package/dist/messages-Cx7VKFOE.mjs +0 -75
- package/dist/messages-D3JeBwxo.mjs +0 -75
- package/dist/messages-D541fieJ.mjs +0 -75
- package/dist/messages-D7XPdglc.mjs +0 -75
- package/dist/messages-DBhylfvt.mjs +0 -75
- package/dist/messages-DCA120lW.mjs +0 -75
- package/dist/messages-DCf_xZMN.mjs +0 -75
- package/dist/messages-DDwXKCpe.mjs +0 -75
- package/dist/messages-DNKDlxcy.mjs +0 -75
- package/dist/messages-DPvEjrGK.mjs +0 -75
- package/dist/messages-DQ-AkNxA.mjs +0 -75
- package/dist/messages-DVuvkNap.mjs +0 -75
- package/dist/messages-DaglyqUT.mjs +0 -75
- package/dist/messages-Di0bAfwA.mjs +0 -75
- package/dist/messages-DuLct0Yr.mjs +0 -75
- package/dist/messages-DzEYYhZh.mjs +0 -75
- package/dist/messages-DznNGAB2.mjs +0 -75
- package/dist/messages-DzoIzyu8.mjs +0 -75
- package/dist/messages-QYOGmket.mjs +0 -75
- package/dist/messages-cEjGDAgI.mjs +0 -75
- package/dist/messages-ddhvrdpE.mjs +0 -75
- package/dist/messages-mwfNK5nZ.mjs +0 -75
- package/dist/messages-nG_vNDte.mjs +0 -75
- package/dist/messages-tDq3Owh7.mjs +0 -75
- package/dist/messages-x6VJVZKx.mjs +0 -75
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import type { Block } from '../../../block';
|
|
2
|
+
|
|
3
|
+
const SPRING_LOAD_DELAY_MS = 500;
|
|
4
|
+
const SPRING_LOADING_ATTR = 'data-blok-spring-loading';
|
|
5
|
+
const SPRING_LOADED_ATTR = 'data-blok-spring-loaded';
|
|
6
|
+
const SPRING_LOADED_DURATION_MS = 700;
|
|
7
|
+
|
|
8
|
+
function isClosedToggle(block: Block): boolean {
|
|
9
|
+
return block.holder.querySelector('[data-blok-toggle-open="false"]') !== null;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Manages the spring-loading hover timer for collapsed toggle blocks during drag.
|
|
14
|
+
* After SPRING_LOAD_DELAY_MS of hovering over a closed toggle, it auto-expands it.
|
|
15
|
+
*/
|
|
16
|
+
export class ToggleSpringLoader {
|
|
17
|
+
private timerId: ReturnType<typeof setTimeout> | null = null;
|
|
18
|
+
private currentBlock: Block | null = null;
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Called on every mousemove during drag with the current hovered block (or null).
|
|
22
|
+
* Starts/resets/cancels the spring-load timer as appropriate.
|
|
23
|
+
*/
|
|
24
|
+
public update(block: Block | null): void {
|
|
25
|
+
if (block === this.currentBlock) {
|
|
26
|
+
return; // Same block — don't restart timer
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
this.clearTimer();
|
|
30
|
+
|
|
31
|
+
if (block === null || !isClosedToggle(block)) {
|
|
32
|
+
this.currentBlock = null;
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
this.currentBlock = block;
|
|
37
|
+
block.holder.setAttribute(SPRING_LOADING_ATTR, '');
|
|
38
|
+
|
|
39
|
+
this.timerId = setTimeout(() => {
|
|
40
|
+
this.timerId = null;
|
|
41
|
+
if (this.currentBlock) {
|
|
42
|
+
this.currentBlock.holder.removeAttribute(SPRING_LOADING_ATTR);
|
|
43
|
+
this.currentBlock.call('expand');
|
|
44
|
+
this.currentBlock.holder.setAttribute(SPRING_LOADED_ATTR, '');
|
|
45
|
+
const expandedBlock = this.currentBlock;
|
|
46
|
+
setTimeout(() => expandedBlock.holder.removeAttribute(SPRING_LOADED_ATTR), SPRING_LOADED_DURATION_MS);
|
|
47
|
+
this.currentBlock = null;
|
|
48
|
+
}
|
|
49
|
+
}, SPRING_LOAD_DELAY_MS);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Cancels any pending spring-load timer and cleans up visual state.
|
|
54
|
+
* Call on drag end / cleanup.
|
|
55
|
+
*/
|
|
56
|
+
public cancel(): void {
|
|
57
|
+
this.clearTimer();
|
|
58
|
+
this.currentBlock = null;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
private clearTimer(): void {
|
|
62
|
+
if (this.timerId !== null) {
|
|
63
|
+
clearTimeout(this.timerId);
|
|
64
|
+
this.timerId = null;
|
|
65
|
+
}
|
|
66
|
+
if (this.currentBlock) {
|
|
67
|
+
this.currentBlock.holder.removeAttribute(SPRING_LOADING_ATTR);
|
|
68
|
+
this.currentBlock = null;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
@@ -22,7 +22,7 @@ export const DRAG_CONFIG = {
|
|
|
22
22
|
*/
|
|
23
23
|
export const PREVIEW_STYLES = {
|
|
24
24
|
base: 'fixed pointer-events-none z-10000 opacity-80 transition-none',
|
|
25
|
-
content: 'relative mx-auto max-w-content',
|
|
25
|
+
content: 'relative mx-auto max-w-blok-content',
|
|
26
26
|
} as const;
|
|
27
27
|
|
|
28
28
|
/**
|
|
@@ -16,6 +16,7 @@ import { ToolbarAPI } from './api/toolbar';
|
|
|
16
16
|
import { ToolsAPI } from './api/tools';
|
|
17
17
|
import { TooltipAPI } from './api/tooltip';
|
|
18
18
|
import { UiAPI } from './api/ui';
|
|
19
|
+
import { WidthAPI } from './api/width';
|
|
19
20
|
import { BlockEvents } from './blockEvents';
|
|
20
21
|
import { BlockManager } from './blockManager';
|
|
21
22
|
import { BlockSelection } from './blockSelection';
|
|
@@ -34,6 +35,7 @@ import { Toolbar } from './toolbar/index';
|
|
|
34
35
|
import { InlineToolbar } from './toolbar/inline';
|
|
35
36
|
import { Tools } from './tools';
|
|
36
37
|
import { UI } from './ui';
|
|
38
|
+
import { WidthManager } from './widthManager';
|
|
37
39
|
import { YjsManager } from './yjs';
|
|
38
40
|
|
|
39
41
|
/**
|
|
@@ -60,6 +62,7 @@ export {
|
|
|
60
62
|
ToolbarAPI,
|
|
61
63
|
TooltipAPI,
|
|
62
64
|
UiAPI,
|
|
65
|
+
WidthAPI,
|
|
63
66
|
|
|
64
67
|
// Toolbar Modules
|
|
65
68
|
BlockSettings,
|
|
@@ -82,6 +85,7 @@ export {
|
|
|
82
85
|
Saver,
|
|
83
86
|
Tools,
|
|
84
87
|
UI,
|
|
88
|
+
WidthManager,
|
|
85
89
|
YjsManager,
|
|
86
90
|
};
|
|
87
91
|
|
|
@@ -108,6 +112,7 @@ export const Modules = {
|
|
|
108
112
|
ToolbarAPI,
|
|
109
113
|
TooltipAPI,
|
|
110
114
|
UiAPI,
|
|
115
|
+
WidthAPI,
|
|
111
116
|
|
|
112
117
|
// Toolbar Modules
|
|
113
118
|
BlockSettings,
|
|
@@ -130,5 +135,6 @@ export const Modules = {
|
|
|
130
135
|
Saver,
|
|
131
136
|
Tools,
|
|
132
137
|
UI,
|
|
138
|
+
WidthManager,
|
|
133
139
|
YjsManager,
|
|
134
|
-
};
|
|
140
|
+
};
|
|
@@ -135,6 +135,25 @@ export class ModificationsObserver extends Module {
|
|
|
135
135
|
}, this.batchTime);
|
|
136
136
|
}
|
|
137
137
|
|
|
138
|
+
/**
|
|
139
|
+
* Cleans up the module: disconnects the MutationObserver and cancels any
|
|
140
|
+
* pending batching timeout. Called by the editor's destroy() chain so that
|
|
141
|
+
* webkit (and other browsers) can close the page cleanly without the
|
|
142
|
+
* MutationObserver firing on an already-destroyed instance or the pending
|
|
143
|
+
* setTimeout keeping the JS engine alive.
|
|
144
|
+
*/
|
|
145
|
+
public destroy(): void {
|
|
146
|
+
this.disabled = true;
|
|
147
|
+
this.mutationObserver.disconnect();
|
|
148
|
+
|
|
149
|
+
if (this.batchingTimeout !== null) {
|
|
150
|
+
clearTimeout(this.batchingTimeout);
|
|
151
|
+
this.batchingTimeout = null;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
this.batchingOnChangeQueue.clear();
|
|
155
|
+
}
|
|
156
|
+
|
|
138
157
|
/**
|
|
139
158
|
* Fired on every blocks wrapper dom change
|
|
140
159
|
* @param mutations - mutations happened
|
|
@@ -115,6 +115,8 @@ export abstract class BasePasteHandler implements PasteHandler {
|
|
|
115
115
|
if (isMultipleItems) {
|
|
116
116
|
this.redirectToTableParentIfNeeded(data, BlockManager);
|
|
117
117
|
|
|
118
|
+
const insertedByIndex: Array<Awaited<ReturnType<BlokModules['BlockManager']['paste']>>> = [];
|
|
119
|
+
|
|
118
120
|
for (const [index, pasteData] of data.entries()) {
|
|
119
121
|
/**
|
|
120
122
|
* Force each pasted block into its own Yjs undo entry so that
|
|
@@ -126,7 +128,15 @@ export abstract class BasePasteHandler implements PasteHandler {
|
|
|
126
128
|
* captureTimeout get merged into a single undo entry.
|
|
127
129
|
*/
|
|
128
130
|
this.Blok.YjsManager.stopCapturing();
|
|
129
|
-
|
|
131
|
+
const shouldReplace = index === 0 && canReplaceCurrentBlock && BlockManager.currentBlock?.isEmpty === true;
|
|
132
|
+
const block = shouldReplace
|
|
133
|
+
? await BlockManager.paste(pasteData.tool, pasteData.event, true)
|
|
134
|
+
: await BlockManager.paste(pasteData.tool, pasteData.event);
|
|
135
|
+
|
|
136
|
+
Caret.setToBlock(block, Caret.positions.END);
|
|
137
|
+
insertedByIndex.push(block);
|
|
138
|
+
|
|
139
|
+
this.applyPastedBlockParent(block, pasteData, insertedByIndex, BlockManager);
|
|
130
140
|
}
|
|
131
141
|
|
|
132
142
|
BlockManager.currentBlock && Caret.setToBlock(BlockManager.currentBlock, Caret.positions.END);
|
|
@@ -146,6 +156,28 @@ export abstract class BasePasteHandler implements PasteHandler {
|
|
|
146
156
|
await this.processInlinePaste(singleItem, canReplaceCurrentBlock);
|
|
147
157
|
}
|
|
148
158
|
|
|
159
|
+
/**
|
|
160
|
+
* Wire up the parent relationship for a pasted block.
|
|
161
|
+
*/
|
|
162
|
+
private applyPastedBlockParent(
|
|
163
|
+
block: Awaited<ReturnType<BlokModules['BlockManager']['paste']>>,
|
|
164
|
+
pasteData: PasteData,
|
|
165
|
+
insertedByIndex: Array<Awaited<ReturnType<BlokModules['BlockManager']['paste']>>>,
|
|
166
|
+
BlockManager: BlokModules['BlockManager']
|
|
167
|
+
): void {
|
|
168
|
+
if (pasteData.parentPasteIndex !== undefined) {
|
|
169
|
+
const parentBlock = insertedByIndex[pasteData.parentPasteIndex];
|
|
170
|
+
|
|
171
|
+
if (parentBlock) {
|
|
172
|
+
BlockManager.setBlockParent(block, parentBlock.id);
|
|
173
|
+
}
|
|
174
|
+
} else if (block.parentId != null) {
|
|
175
|
+
// Root-level pasted block: clear any parent that was inherited from
|
|
176
|
+
// the predecessor (e.g. the previous child block that had a parent).
|
|
177
|
+
BlockManager.setBlockParent(block, null);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
|
|
149
181
|
/**
|
|
150
182
|
* Insert a single block.
|
|
151
183
|
*/
|
|
@@ -66,74 +66,131 @@ export class HtmlHandler extends BasePasteHandler implements PasteHandler {
|
|
|
66
66
|
|
|
67
67
|
const nodes = this.getNodes(wrapper);
|
|
68
68
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
69
|
+
// Pre-expand DETAILS nodes: extract child elements (non-summary) before
|
|
70
|
+
// sanitization strips them, and carry a parentExpandedIndex reference so
|
|
71
|
+
// we can remap to final post-filter indices later.
|
|
72
|
+
type NodeEntry = { node: Node; parentExpandedIndex?: number };
|
|
73
|
+
|
|
74
|
+
const expandedNodes: NodeEntry[] = [];
|
|
75
|
+
|
|
76
|
+
for (const node of nodes) {
|
|
77
|
+
const isDetailsElement =
|
|
78
|
+
node.nodeType === Node.ELEMENT_NODE &&
|
|
79
|
+
(node as HTMLElement).tagName === 'DETAILS';
|
|
80
|
+
|
|
81
|
+
if (!isDetailsElement) {
|
|
82
|
+
expandedNodes.push({ node });
|
|
83
|
+
continue;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
const toggleExpandedIndex = expandedNodes.length;
|
|
87
|
+
|
|
88
|
+
expandedNodes.push({ node });
|
|
89
|
+
|
|
90
|
+
// Only direct children are extracted (not deeply nested structures), which
|
|
91
|
+
// is correct for Google Docs DETAILS format where children are flat siblings.
|
|
92
|
+
const childElements = Array.from((node as HTMLElement).children).filter(
|
|
93
|
+
(child) => child.tagName !== 'SUMMARY'
|
|
94
|
+
);
|
|
95
|
+
|
|
96
|
+
for (const child of childElements) {
|
|
97
|
+
expandedNodes.push({ node: child, parentExpandedIndex: toggleExpandedIndex });
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
// Map expanded nodes to intermediate results, preserving original index.
|
|
102
|
+
type MappedEntry = { data: PasteData; originalIndex: number } | null;
|
|
103
|
+
|
|
104
|
+
const mapped: MappedEntry[] = expandedNodes.map(({ node, parentExpandedIndex }, originalIndex) => {
|
|
105
|
+
const nodeData = (() => {
|
|
106
|
+
switch (node.nodeType) {
|
|
107
|
+
case Node.DOCUMENT_FRAGMENT_NODE: {
|
|
108
|
+
const fragmentWrapper = dom$.make('div');
|
|
109
|
+
|
|
110
|
+
fragmentWrapper.appendChild(node);
|
|
111
|
+
|
|
112
|
+
return {
|
|
113
|
+
content: fragmentWrapper,
|
|
114
|
+
tool: Tools.defaultTool,
|
|
115
|
+
isBlock: false,
|
|
116
|
+
};
|
|
98
117
|
}
|
|
99
|
-
})();
|
|
100
118
|
|
|
101
|
-
|
|
102
|
-
|
|
119
|
+
case Node.ELEMENT_NODE: {
|
|
120
|
+
const elementContent = node as HTMLElement;
|
|
121
|
+
const tagSubstitute = this.toolRegistry.findToolForTag(elementContent.tagName) ?? undefined;
|
|
122
|
+
|
|
123
|
+
return {
|
|
124
|
+
content: elementContent,
|
|
125
|
+
tool: tagSubstitute?.tool ?? Tools.defaultTool,
|
|
126
|
+
isBlock: true,
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
default:
|
|
131
|
+
return null;
|
|
103
132
|
}
|
|
133
|
+
})();
|
|
104
134
|
|
|
105
|
-
|
|
135
|
+
if (!nodeData) {
|
|
136
|
+
return null;
|
|
137
|
+
}
|
|
106
138
|
|
|
107
|
-
|
|
139
|
+
const { content, tool, isBlock } = nodeData;
|
|
108
140
|
|
|
109
|
-
|
|
110
|
-
const customConfig: SanitizerConfig = { ...structuralSanitizeConfig, ...toolTags, ...tool.baseSanitizeConfig, br: {} };
|
|
111
|
-
const sanitizedContent = this.sanitizeContent(content, customConfig);
|
|
141
|
+
const toolTags = this.buildToolTags(tool);
|
|
112
142
|
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
143
|
+
const structuralSanitizeConfig = this.sanitizerBuilder.getStructuralTagsConfig(content);
|
|
144
|
+
const customConfig: SanitizerConfig = { ...structuralSanitizeConfig, ...toolTags, ...tool.baseSanitizeConfig, br: {} };
|
|
145
|
+
const sanitizedContent = this.sanitizeContent(content, customConfig);
|
|
116
146
|
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
147
|
+
if (!sanitizedContent) {
|
|
148
|
+
return null;
|
|
149
|
+
}
|
|
120
150
|
|
|
121
|
-
|
|
151
|
+
const event = this.composePasteEvent('tag', {
|
|
152
|
+
data: sanitizedContent,
|
|
153
|
+
});
|
|
154
|
+
|
|
155
|
+
return {
|
|
156
|
+
data: {
|
|
122
157
|
content: sanitizedContent,
|
|
123
158
|
isBlock,
|
|
124
159
|
tool: tool.name,
|
|
125
160
|
event,
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
161
|
+
parentPasteIndex: parentExpandedIndex,
|
|
162
|
+
},
|
|
163
|
+
originalIndex,
|
|
164
|
+
};
|
|
165
|
+
});
|
|
166
|
+
|
|
167
|
+
// Filter, tracking the mapping from original (expandedNodes) index → final index.
|
|
168
|
+
const oldToNewIndex = new Map<number, number>();
|
|
169
|
+
const filtered: PasteData[] = [];
|
|
170
|
+
|
|
171
|
+
for (const entry of mapped) {
|
|
172
|
+
if (!entry) {
|
|
173
|
+
continue;
|
|
174
|
+
}
|
|
175
|
+
const { data, originalIndex } = entry;
|
|
176
|
+
const isContentEmpty = dom$.isEmpty(data.content);
|
|
177
|
+
const isSingleTag = dom$.isSingleTag(data.content);
|
|
134
178
|
|
|
135
|
-
|
|
136
|
-
|
|
179
|
+
if (!isContentEmpty || isSingleTag) {
|
|
180
|
+
oldToNewIndex.set(originalIndex, filtered.length);
|
|
181
|
+
filtered.push(data);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
// Remap parentPasteIndex from expandedNodes indices to final filtered indices.
|
|
186
|
+
for (const item of filtered) {
|
|
187
|
+
if (item.parentPasteIndex !== undefined) {
|
|
188
|
+
// undefined means parent was filtered out → child becomes root-level
|
|
189
|
+
item.parentPasteIndex = oldToNewIndex.get(item.parentPasteIndex);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
return filtered;
|
|
137
194
|
}
|
|
138
195
|
|
|
139
196
|
/**
|
|
@@ -189,6 +246,16 @@ export class HtmlHandler extends BasePasteHandler implements PasteHandler {
|
|
|
189
246
|
const toolTags = tool ? this.toolRegistry.getToolTags(tool.name) : [];
|
|
190
247
|
|
|
191
248
|
const isSubstitutable = tags.includes(element.tagName);
|
|
249
|
+
|
|
250
|
+
// DETAILS is a container-type substitutable element. Always return it as an
|
|
251
|
+
// atomic block so the toggle tool's onPaste receives the full <details>
|
|
252
|
+
// element (including <summary> and children), rather than having them split
|
|
253
|
+
// into flat blocks when the paragraph tool's <p> registration triggers
|
|
254
|
+
// containsAnotherToolTags = true.
|
|
255
|
+
if (isSubstitutable && element.tagName === 'DETAILS') {
|
|
256
|
+
return [...nodes, destNode, element];
|
|
257
|
+
}
|
|
258
|
+
|
|
192
259
|
const isBlockElement = dom$.blockElements.includes(element.tagName.toLowerCase());
|
|
193
260
|
const isStructuralElement = SAFE_STRUCTURAL_TAGS.has(element.tagName.toLowerCase());
|
|
194
261
|
const containsAnotherToolTags = Array
|
|
@@ -3,6 +3,7 @@ import { Module } from '../../__module';
|
|
|
3
3
|
import { Dom as dom$ } from '../../dom';
|
|
4
4
|
import { composeSanitizerConfig, clean } from '../../utils/sanitizer';
|
|
5
5
|
|
|
6
|
+
import { SAFE_STRUCTURAL_TAGS } from './constants';
|
|
6
7
|
import { preprocessGoogleDocsHtml } from './google-docs-preprocessor';
|
|
7
8
|
import type { PasteHandler } from './handlers/base';
|
|
8
9
|
import { BlokDataHandler } from './handlers/blok-data-handler';
|
|
@@ -202,8 +203,12 @@ export class Paste extends Module {
|
|
|
202
203
|
// Build sanitize config first
|
|
203
204
|
const toolsTags = this.sanitizerBuilder.buildToolsTagsConfig(this.toolRegistry.toolsTags);
|
|
204
205
|
const inlineSanitizeConfig = this.Blok.Tools.getAllInlineToolsSanitizeConfig();
|
|
206
|
+
const structuralTagsConfig = Object.fromEntries(
|
|
207
|
+
[...SAFE_STRUCTURAL_TAGS].map((tag) => [tag, {}])
|
|
208
|
+
) as SanitizerConfig;
|
|
205
209
|
const customConfig = composeSanitizerConfig(
|
|
206
210
|
this.config.sanitizer as SanitizerConfig,
|
|
211
|
+
structuralTagsConfig,
|
|
207
212
|
toolsTags,
|
|
208
213
|
inlineSanitizeConfig,
|
|
209
214
|
{ br: {} }
|
|
@@ -36,6 +36,11 @@ export interface PasteData {
|
|
|
36
36
|
content: HTMLElement;
|
|
37
37
|
event: PasteEvent;
|
|
38
38
|
isBlock: boolean;
|
|
39
|
+
/**
|
|
40
|
+
* Index into the current paste batch that is this block's parent.
|
|
41
|
+
* When set, `insertPasteData` will call `setBlockParent` after inserting.
|
|
42
|
+
*/
|
|
43
|
+
parentPasteIndex?: number;
|
|
39
44
|
}
|
|
40
45
|
|
|
41
46
|
/**
|