@jackuait/blok 0.6.0-beta.8 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/blok.mjs +2 -2
- package/dist/chunks/{blok-bzxy6Olq.mjs → blok-BAh1rvUC.mjs} +3410 -2927
- package/dist/chunks/i18next-B47TKgbU.mjs +1303 -0
- package/dist/chunks/{i18next-loader-CzL6YHyQ.mjs → i18next-loader-CHtGO6IK.mjs} +2 -2
- package/dist/chunks/{index-DSSrx_Co.mjs → index-DBWWKrDe.mjs} +12 -12
- package/dist/chunks/{inline-tool-convert-D4SXxjDd.mjs → inline-tool-convert-DduRc0fF.mjs} +1467 -951
- package/dist/chunks/{messages-BogRq8lt.mjs → messages-0AbcLMLm.mjs} +6 -0
- package/dist/chunks/{messages-DJDG55Vq.mjs → messages-0E0AkrNu.mjs} +6 -0
- package/dist/{messages-DnXLrlHh.mjs → chunks/messages-4v4MuVEc.mjs} +6 -0
- package/dist/chunks/{messages-DnIhyAJk.mjs → messages-62v-CLC-.mjs} +6 -0
- package/dist/chunks/{messages-Dzwxv9v1.mjs → messages-8DeO60Oo.mjs} +6 -0
- package/dist/chunks/{messages-B1Aww8q7.mjs → messages-8IPXkrDl.mjs} +6 -0
- package/dist/{messages-uKX8WBaD.mjs → chunks/messages-96kNZDll.mjs} +6 -0
- package/dist/chunks/{messages-BL0tXcDf.mjs → messages-B1FZ8lxU.mjs} +6 -0
- package/dist/{messages-DBn76jVV.mjs → chunks/messages-B217znr-.mjs} +8 -2
- package/dist/{messages-DT4dP5uK.mjs → chunks/messages-B8WNljW3.mjs} +6 -0
- package/dist/chunks/{messages-BdeLo0N9.mjs → messages-BC8IN4Bf.mjs} +6 -0
- package/dist/{messages-CZygwLwM.mjs → chunks/messages-BI43k_BD.mjs} +6 -0
- package/dist/{messages-CzTufCHu.mjs → chunks/messages-BJ6zrz2j.mjs} +6 -0
- package/dist/{messages-BoJc_p1r.mjs → chunks/messages-BUl_Rcnj.mjs} +6 -0
- package/dist/chunks/{messages-CnwibSvh.mjs → messages-BZlmVRwn.mjs} +6 -0
- package/dist/{messages-C2htQ_3F.mjs → chunks/messages-BcpCubnC.mjs} +6 -0
- package/dist/{messages-D5C3J9qr.mjs → chunks/messages-Bm-E4iRC.mjs} +6 -0
- package/dist/chunks/{messages-BELRf6DU.mjs → messages-C4jL-90N.mjs} +6 -0
- package/dist/chunks/{messages-1fC8IMyX.mjs → messages-CDBLbUOQ.mjs} +6 -0
- package/dist/chunks/{messages-7QoX8DkW.mjs → messages-CH4hrauY.mjs} +6 -0
- package/dist/{messages-Dz9L52ol.mjs → chunks/messages-CRJ_mchV.mjs} +6 -0
- package/dist/chunks/{messages-JELdtT6E.mjs → messages-CW4c4cRk.mjs} +6 -0
- package/dist/chunks/{messages-CKI54h6O.mjs → messages-C_4otP7U.mjs} +6 -0
- package/dist/{messages-R3hUSvr3.mjs → chunks/messages-CfiyT2Wi.mjs} +6 -0
- package/dist/{messages-CJdUsQ-c.mjs → chunks/messages-CgTq3QhU.mjs} +6 -0
- package/dist/chunks/{messages-D1Hv8XGo.mjs → messages-Chb7k3Rg.mjs} +6 -0
- package/dist/{messages-Q7AO_FLv.mjs → chunks/messages-Cjjo7yHR.mjs} +6 -0
- package/dist/{messages-C99mq906.mjs → chunks/messages-Cl6ayUaq.mjs} +6 -0
- package/dist/chunks/{messages-Diu6jAaR.mjs → messages-CmR9ftc_.mjs} +6 -0
- package/dist/chunks/{messages-LPVfA-8K.mjs → messages-Cr49Nt3U.mjs} +6 -0
- package/dist/chunks/{messages-DqM1LFg5.mjs → messages-Cr94GzbX.mjs} +6 -0
- package/dist/{messages-BWF-zUpY.mjs → chunks/messages-CrCYPCk3.mjs} +6 -0
- package/dist/{messages-D-ZtY5v0.mjs → chunks/messages-Cs8zmZ3L.mjs} +6 -0
- package/dist/{messages-DprmQg6V.mjs → chunks/messages-CzK0LEhb.mjs} +6 -0
- package/dist/chunks/{messages-BSbjsyHY.mjs → messages-D00x4S8o.mjs} +6 -0
- package/dist/chunks/{messages-Xq8UmkVs.mjs → messages-D1mn7Zd5.mjs} +6 -0
- package/dist/chunks/{messages-BC86qLvI.mjs → messages-D2NOpHn9.mjs} +6 -0
- package/dist/{messages-kep5wtm4.mjs → chunks/messages-D4qqwVgQ.mjs} +6 -0
- package/dist/chunks/{messages-7W4d0DwD.mjs → messages-D5S1Dnpm.mjs} +6 -0
- package/dist/{messages-CY8_RyFE.mjs → chunks/messages-D7u2bmP2.mjs} +6 -0
- package/dist/chunks/{messages-BFG6Wlgy.mjs → messages-D85FqxgY.mjs} +6 -0
- package/dist/{messages-DLfR5bMd.mjs → chunks/messages-D9ndgBnU.mjs} +6 -0
- package/dist/{messages-CVw84KdI.mjs → chunks/messages-DDTQgImT.mjs} +6 -0
- package/dist/{messages-_ErNTNhk.mjs → chunks/messages-DH_jBeED.mjs} +6 -0
- package/dist/chunks/{messages-CMkNSDTo.mjs → messages-DRXWF0PV.mjs} +6 -0
- package/dist/chunks/{messages-BYyy6Wqf.mjs → messages-DVQvl8Qj.mjs} +6 -0
- package/dist/chunks/{messages-CznZadDf.mjs → messages-DXktiao_.mjs} +6 -0
- package/dist/chunks/{messages-DhLKYm2j.mjs → messages-DdK-nFGm.mjs} +6 -0
- package/dist/chunks/{messages-BMXCuEKO.mjs → messages-DlJbPF2T.mjs} +6 -0
- package/dist/chunks/{messages-CvGLfqmV.mjs → messages-DnVlmiNT.mjs} +6 -0
- package/dist/{messages-Z9nEU2xK.mjs → chunks/messages-DviiFSv2.mjs} +6 -0
- package/dist/chunks/{messages-BB5z9Uba.mjs → messages-DzqM3Fel.mjs} +6 -0
- package/dist/{messages-w7v1GNaE.mjs → chunks/messages-Dzzn6XoD.mjs} +6 -0
- package/dist/{messages-CqWJcCbY.mjs → chunks/messages-GSByFygY.mjs} +6 -0
- package/dist/chunks/{messages-_ncGrKHh.mjs → messages-L_kl2Qvh.mjs} +6 -0
- package/dist/chunks/{messages-BrPFGbM-.mjs → messages-Phkd7XmE.mjs} +6 -0
- package/dist/{messages-BU2nlrLK.mjs → chunks/messages-RonBBCnh.mjs} +6 -0
- package/dist/{messages-Bmu_S7GM.mjs → chunks/messages-VDriF5Qy.mjs} +6 -0
- package/dist/{messages-CLhcMlTc.mjs → chunks/messages-ZjUAIWb1.mjs} +6 -0
- package/dist/{messages-9SihnaXQ.mjs → chunks/messages-b1EdvUm0.mjs} +6 -0
- package/dist/{messages-DvFLX36Q.mjs → chunks/messages-begYOTgC.mjs} +6 -0
- package/dist/{messages-BMv4xwIr.mjs → chunks/messages-jrncnb-H.mjs} +6 -0
- package/dist/{messages-D5iv1Kox.mjs → chunks/messages-nefz1S71.mjs} +6 -0
- package/dist/{messages-CQwpzUFp.mjs → chunks/messages-ucTVgS5G.mjs} +6 -0
- package/dist/chunks/{messages-DBRw-7Zc.mjs → messages-v3GipbFl.mjs} +6 -0
- package/dist/{messages-C9eaarcK.mjs → chunks/messages-wmi-iFkH.mjs} +6 -0
- package/dist/chunks/{messages-O5tQus_0.mjs → messages-yHcs38yI.mjs} +6 -0
- package/dist/full.mjs +2 -2
- package/dist/locales.mjs +90 -84
- package/dist/{messages-BogRq8lt.mjs → messages-0AbcLMLm.mjs} +6 -0
- package/dist/{messages-DJDG55Vq.mjs → messages-0E0AkrNu.mjs} +6 -0
- package/dist/{chunks/messages-DnXLrlHh.mjs → messages-4v4MuVEc.mjs} +6 -0
- package/dist/{messages-DnIhyAJk.mjs → messages-62v-CLC-.mjs} +6 -0
- package/dist/{messages-Dzwxv9v1.mjs → messages-8DeO60Oo.mjs} +6 -0
- package/dist/{messages-B1Aww8q7.mjs → messages-8IPXkrDl.mjs} +6 -0
- package/dist/{chunks/messages-uKX8WBaD.mjs → messages-96kNZDll.mjs} +6 -0
- package/dist/{messages-BL0tXcDf.mjs → messages-B1FZ8lxU.mjs} +6 -0
- package/dist/{chunks/messages-DBn76jVV.mjs → messages-B217znr-.mjs} +8 -2
- package/dist/{chunks/messages-DT4dP5uK.mjs → messages-B8WNljW3.mjs} +6 -0
- package/dist/{messages-BdeLo0N9.mjs → messages-BC8IN4Bf.mjs} +6 -0
- package/dist/{chunks/messages-CZygwLwM.mjs → messages-BI43k_BD.mjs} +6 -0
- package/dist/{chunks/messages-CzTufCHu.mjs → messages-BJ6zrz2j.mjs} +6 -0
- package/dist/{chunks/messages-BoJc_p1r.mjs → messages-BUl_Rcnj.mjs} +6 -0
- package/dist/{messages-CnwibSvh.mjs → messages-BZlmVRwn.mjs} +6 -0
- package/dist/{chunks/messages-C2htQ_3F.mjs → messages-BcpCubnC.mjs} +6 -0
- package/dist/{chunks/messages-D5C3J9qr.mjs → messages-Bm-E4iRC.mjs} +6 -0
- package/dist/{messages-BELRf6DU.mjs → messages-C4jL-90N.mjs} +6 -0
- package/dist/{messages-1fC8IMyX.mjs → messages-CDBLbUOQ.mjs} +6 -0
- package/dist/{messages-7QoX8DkW.mjs → messages-CH4hrauY.mjs} +6 -0
- package/dist/{chunks/messages-Dz9L52ol.mjs → messages-CRJ_mchV.mjs} +6 -0
- package/dist/{messages-JELdtT6E.mjs → messages-CW4c4cRk.mjs} +6 -0
- package/dist/{messages-CKI54h6O.mjs → messages-C_4otP7U.mjs} +6 -0
- package/dist/{chunks/messages-R3hUSvr3.mjs → messages-CfiyT2Wi.mjs} +6 -0
- package/dist/{chunks/messages-CJdUsQ-c.mjs → messages-CgTq3QhU.mjs} +6 -0
- package/dist/{messages-D1Hv8XGo.mjs → messages-Chb7k3Rg.mjs} +6 -0
- package/dist/{chunks/messages-Q7AO_FLv.mjs → messages-Cjjo7yHR.mjs} +6 -0
- package/dist/{chunks/messages-C99mq906.mjs → messages-Cl6ayUaq.mjs} +6 -0
- package/dist/{messages-Diu6jAaR.mjs → messages-CmR9ftc_.mjs} +6 -0
- package/dist/{messages-LPVfA-8K.mjs → messages-Cr49Nt3U.mjs} +6 -0
- package/dist/{messages-DqM1LFg5.mjs → messages-Cr94GzbX.mjs} +6 -0
- package/dist/{chunks/messages-BWF-zUpY.mjs → messages-CrCYPCk3.mjs} +6 -0
- package/dist/{chunks/messages-D-ZtY5v0.mjs → messages-Cs8zmZ3L.mjs} +6 -0
- package/dist/{chunks/messages-DprmQg6V.mjs → messages-CzK0LEhb.mjs} +6 -0
- package/dist/{messages-BSbjsyHY.mjs → messages-D00x4S8o.mjs} +6 -0
- package/dist/{messages-Xq8UmkVs.mjs → messages-D1mn7Zd5.mjs} +6 -0
- package/dist/{messages-BC86qLvI.mjs → messages-D2NOpHn9.mjs} +6 -0
- package/dist/{chunks/messages-kep5wtm4.mjs → messages-D4qqwVgQ.mjs} +6 -0
- package/dist/{messages-7W4d0DwD.mjs → messages-D5S1Dnpm.mjs} +6 -0
- package/dist/{chunks/messages-CY8_RyFE.mjs → messages-D7u2bmP2.mjs} +6 -0
- package/dist/{messages-BFG6Wlgy.mjs → messages-D85FqxgY.mjs} +6 -0
- package/dist/{chunks/messages-DLfR5bMd.mjs → messages-D9ndgBnU.mjs} +6 -0
- package/dist/{chunks/messages-CVw84KdI.mjs → messages-DDTQgImT.mjs} +6 -0
- package/dist/{chunks/messages-_ErNTNhk.mjs → messages-DH_jBeED.mjs} +6 -0
- package/dist/{messages-CMkNSDTo.mjs → messages-DRXWF0PV.mjs} +6 -0
- package/dist/{messages-BYyy6Wqf.mjs → messages-DVQvl8Qj.mjs} +6 -0
- package/dist/{messages-CznZadDf.mjs → messages-DXktiao_.mjs} +6 -0
- package/dist/{messages-DhLKYm2j.mjs → messages-DdK-nFGm.mjs} +6 -0
- package/dist/{messages-BMXCuEKO.mjs → messages-DlJbPF2T.mjs} +6 -0
- package/dist/{messages-CvGLfqmV.mjs → messages-DnVlmiNT.mjs} +6 -0
- package/dist/{chunks/messages-Z9nEU2xK.mjs → messages-DviiFSv2.mjs} +6 -0
- package/dist/{messages-BB5z9Uba.mjs → messages-DzqM3Fel.mjs} +6 -0
- package/dist/{chunks/messages-w7v1GNaE.mjs → messages-Dzzn6XoD.mjs} +6 -0
- package/dist/{chunks/messages-CqWJcCbY.mjs → messages-GSByFygY.mjs} +6 -0
- package/dist/{messages-_ncGrKHh.mjs → messages-L_kl2Qvh.mjs} +6 -0
- package/dist/{messages-BrPFGbM-.mjs → messages-Phkd7XmE.mjs} +6 -0
- package/dist/{chunks/messages-BU2nlrLK.mjs → messages-RonBBCnh.mjs} +6 -0
- package/dist/{chunks/messages-Bmu_S7GM.mjs → messages-VDriF5Qy.mjs} +6 -0
- package/dist/{chunks/messages-CLhcMlTc.mjs → messages-ZjUAIWb1.mjs} +6 -0
- package/dist/{chunks/messages-9SihnaXQ.mjs → messages-b1EdvUm0.mjs} +6 -0
- package/dist/{chunks/messages-DvFLX36Q.mjs → messages-begYOTgC.mjs} +6 -0
- package/dist/{chunks/messages-BMv4xwIr.mjs → messages-jrncnb-H.mjs} +6 -0
- package/dist/{chunks/messages-D5iv1Kox.mjs → messages-nefz1S71.mjs} +6 -0
- package/dist/{chunks/messages-CQwpzUFp.mjs → messages-ucTVgS5G.mjs} +6 -0
- package/dist/{messages-DBRw-7Zc.mjs → messages-v3GipbFl.mjs} +6 -0
- package/dist/{chunks/messages-C9eaarcK.mjs → messages-wmi-iFkH.mjs} +6 -0
- package/dist/{messages-O5tQus_0.mjs → messages-yHcs38yI.mjs} +6 -0
- package/dist/tools.mjs +3194 -1690
- package/dist/vendor.LICENSE.txt +109 -109
- package/package.json +43 -57
- package/src/blok.ts +12 -0
- package/src/components/__module.ts +21 -0
- package/src/components/block/api.ts +17 -0
- package/src/components/block/style-manager.ts +6 -2
- package/src/components/block/tool-renderer.ts +33 -30
- package/src/components/blocks.ts +132 -15
- package/src/components/i18n/locales/am/messages.json +6 -0
- package/src/components/i18n/locales/ar/messages.json +6 -0
- package/src/components/i18n/locales/az/messages.json +6 -0
- package/src/components/i18n/locales/bg/messages.json +6 -0
- package/src/components/i18n/locales/bn/messages.json +6 -0
- package/src/components/i18n/locales/bs/messages.json +6 -0
- package/src/components/i18n/locales/cs/messages.json +6 -0
- package/src/components/i18n/locales/da/messages.json +6 -0
- package/src/components/i18n/locales/de/messages.json +6 -0
- package/src/components/i18n/locales/dv/messages.json +6 -0
- package/src/components/i18n/locales/el/messages.json +6 -0
- package/src/components/i18n/locales/en/messages.json +6 -0
- package/src/components/i18n/locales/es/messages.json +6 -0
- package/src/components/i18n/locales/et/messages.json +6 -0
- package/src/components/i18n/locales/fa/messages.json +6 -0
- package/src/components/i18n/locales/fi/messages.json +6 -0
- package/src/components/i18n/locales/fil/messages.json +6 -0
- package/src/components/i18n/locales/fr/messages.json +6 -0
- package/src/components/i18n/locales/gu/messages.json +6 -0
- package/src/components/i18n/locales/he/messages.json +6 -0
- package/src/components/i18n/locales/hi/messages.json +6 -0
- package/src/components/i18n/locales/hr/messages.json +6 -0
- package/src/components/i18n/locales/hu/messages.json +6 -0
- package/src/components/i18n/locales/hy/messages.json +6 -0
- package/src/components/i18n/locales/id/messages.json +6 -0
- package/src/components/i18n/locales/it/messages.json +6 -0
- package/src/components/i18n/locales/ja/messages.json +6 -0
- package/src/components/i18n/locales/ka/messages.json +6 -0
- package/src/components/i18n/locales/km/messages.json +6 -0
- package/src/components/i18n/locales/kn/messages.json +6 -0
- package/src/components/i18n/locales/ko/messages.json +6 -0
- package/src/components/i18n/locales/ku/messages.json +6 -0
- package/src/components/i18n/locales/lo/messages.json +6 -0
- package/src/components/i18n/locales/lt/messages.json +6 -0
- package/src/components/i18n/locales/lv/messages.json +6 -0
- package/src/components/i18n/locales/mk/messages.json +6 -0
- package/src/components/i18n/locales/ml/messages.json +6 -0
- package/src/components/i18n/locales/mn/messages.json +6 -0
- package/src/components/i18n/locales/mr/messages.json +6 -0
- package/src/components/i18n/locales/ms/messages.json +6 -0
- package/src/components/i18n/locales/my/messages.json +6 -0
- package/src/components/i18n/locales/ne/messages.json +6 -0
- package/src/components/i18n/locales/nl/messages.json +6 -0
- package/src/components/i18n/locales/no/messages.json +6 -0
- package/src/components/i18n/locales/pa/messages.json +6 -0
- package/src/components/i18n/locales/pl/messages.json +6 -0
- package/src/components/i18n/locales/ps/messages.json +6 -0
- package/src/components/i18n/locales/pt/messages.json +6 -0
- package/src/components/i18n/locales/ro/messages.json +6 -0
- package/src/components/i18n/locales/ru/messages.json +6 -0
- package/src/components/i18n/locales/sd/messages.json +6 -0
- package/src/components/i18n/locales/si/messages.json +6 -0
- package/src/components/i18n/locales/sk/messages.json +6 -0
- package/src/components/i18n/locales/sl/messages.json +6 -0
- package/src/components/i18n/locales/sq/messages.json +6 -0
- package/src/components/i18n/locales/sr/messages.json +6 -0
- package/src/components/i18n/locales/sv/messages.json +6 -0
- package/src/components/i18n/locales/sw/messages.json +6 -0
- package/src/components/i18n/locales/ta/messages.json +6 -0
- package/src/components/i18n/locales/te/messages.json +6 -0
- package/src/components/i18n/locales/th/messages.json +6 -0
- package/src/components/i18n/locales/tr/messages.json +6 -0
- package/src/components/i18n/locales/ug/messages.json +6 -0
- package/src/components/i18n/locales/uk/messages.json +6 -0
- package/src/components/i18n/locales/ur/messages.json +6 -0
- package/src/components/i18n/locales/vi/messages.json +6 -0
- package/src/components/i18n/locales/yi/messages.json +6 -0
- package/src/components/i18n/locales/zh/messages.json +6 -0
- package/src/components/icons/index.ts +17 -0
- package/src/components/inline-tools/inline-tool-link.ts +1 -1
- package/src/components/inline-tools/inline-tool-marker.ts +737 -0
- package/src/components/inline-tools/utils/formatting-range-utils.ts +6 -3
- package/src/components/inline-tools/utils/marker-dom-utils.ts +17 -0
- package/src/components/modules/api/blocks.ts +34 -9
- package/src/components/modules/blockEvents/composers/keyboardNavigation.ts +75 -29
- package/src/components/modules/blockEvents/index.ts +13 -5
- package/src/components/modules/blockManager/blockManager.ts +81 -2
- package/src/components/modules/blockManager/hierarchy.ts +20 -2
- package/src/components/modules/blockManager/operations.ts +70 -35
- package/src/components/modules/blockManager/repository.ts +22 -0
- package/src/components/modules/blockManager/types.ts +3 -1
- package/src/components/modules/blockManager/yjs-sync.ts +173 -39
- package/src/components/modules/blockSelection.ts +3 -0
- package/src/components/modules/crossBlockSelection.ts +11 -3
- package/src/components/modules/drag/preview/DragPreview.ts +10 -2
- package/src/components/modules/drag/target/DropTargetDetector.ts +100 -11
- package/src/components/modules/drag/utils/drag.constants.ts +1 -1
- package/src/components/modules/normalizeInlineImages.ts +263 -0
- package/src/components/modules/paste/google-docs-preprocessor.ts +197 -0
- package/src/components/modules/paste/handlers/base.ts +43 -2
- package/src/components/modules/paste/handlers/html-handler.ts +1 -1
- package/src/components/modules/paste/handlers/index.ts +1 -0
- package/src/components/modules/paste/handlers/table-cells-handler.ts +104 -0
- package/src/components/modules/paste/index.ts +20 -3
- package/src/components/modules/readonly.ts +8 -2
- package/src/components/modules/rectangleSelection.ts +5 -2
- package/src/components/modules/renderer.ts +35 -0
- package/src/components/modules/saver.ts +52 -2
- package/src/components/modules/toolbar/blockSettings.ts +52 -44
- package/src/components/modules/toolbar/index.ts +124 -17
- package/src/components/modules/toolbar/inline/index.ts +4 -4
- package/src/components/modules/toolbar/plus-button.ts +3 -3
- package/src/components/modules/toolbar/settings-toggler.ts +3 -3
- package/src/components/modules/toolbar/styles.ts +7 -7
- package/src/components/modules/ui.ts +6 -6
- package/src/components/modules/uiControllers/controllers/blockHover.ts +16 -2
- package/src/components/modules/uiControllers/handlers/touch.ts +83 -10
- package/src/components/modules/yjs/block-observer.ts +9 -3
- package/src/components/modules/yjs/document-store.ts +10 -7
- package/src/components/modules/yjs/types.ts +8 -6
- package/src/components/modules/yjs/undo-history.ts +90 -11
- package/src/components/selection/fake-background/shadows.ts +1 -1
- package/src/components/shared/color-picker.ts +211 -0
- package/src/components/shared/color-presets.ts +25 -0
- package/src/components/ui/toolbox.ts +19 -11
- package/src/components/utils/color-mapping.ts +241 -0
- package/src/components/utils/notifier/draw.ts +9 -9
- package/src/components/utils/placeholder.ts +24 -8
- package/src/components/utils/popover/components/popover-item/popover-item-default/popover-item-default.const.ts +2 -2
- package/src/components/utils/popover/components/popover-item/popover-item-default/popover-item-default.ts +14 -12
- package/src/components/utils/popover/components/search-input/search-input.const.ts +2 -2
- package/src/components/utils/popover/popover-abstract.ts +27 -3
- package/src/components/utils/popover/popover-desktop.ts +26 -3
- package/src/components/utils/popover/popover-inline.ts +14 -1
- package/src/components/utils/popover/popover-mobile.ts +4 -4
- package/src/components/utils/popover/popover.const.ts +2 -2
- package/src/components/utils/sanitizer.ts +24 -3
- package/src/components/utils/tw.ts +17 -5
- package/src/stories/Header.stories.ts +106 -0
- package/src/stories/MarkerColors.stories.ts +730 -0
- package/src/stories/Popover.stories.ts +1 -3
- package/src/stories/Table.stories.ts +1662 -0
- package/src/styles/main.css +207 -37
- package/src/tools/header/index.ts +1 -1
- package/src/tools/index.ts +3 -1
- package/src/tools/list/caret-manager.ts +28 -10
- package/src/tools/list/constants.ts +2 -2
- package/src/tools/list/dom-builder.ts +3 -3
- package/src/tools/list/static-configs.ts +0 -1
- package/src/tools/paragraph/index.ts +15 -7
- package/src/tools/table/core/table-commands.ts +99 -0
- package/src/tools/table/core/table-controller.ts +231 -0
- package/src/tools/table/core/table-events.ts +102 -0
- package/src/tools/table/index.ts +1070 -174
- package/src/tools/table/ownership/table-event-broker.ts +74 -0
- package/src/tools/table/ownership/table-ownership-registry.ts +126 -0
- package/src/tools/table/table-add-controls.ts +85 -15
- package/src/tools/table/table-cell-blocks.ts +336 -38
- package/src/tools/table/table-cell-clipboard.ts +415 -0
- package/src/tools/table/table-cell-color-picker.ts +34 -0
- package/src/tools/table/table-cell-selection.ts +264 -15
- package/src/tools/table/table-core.ts +3 -42
- package/src/tools/table/table-heading-toggle.ts +2 -2
- package/src/tools/table/table-model.ts +623 -0
- package/src/tools/table/table-operations.ts +59 -78
- package/src/tools/table/table-resize.ts +15 -11
- package/src/tools/table/table-restrictions.ts +69 -3
- package/src/tools/table/table-row-col-action-handler.ts +22 -7
- package/src/tools/table/table-row-col-controls.ts +129 -12
- package/src/tools/table/table-row-col-drag.ts +14 -0
- package/src/tools/table/table-scroll-haze.ts +152 -0
- package/src/tools/table/types.ts +22 -1
- package/src/tools/table/view/table-cell-blocks-adapter.ts +47 -0
- package/src/variants/blok-minimum.ts +13 -0
- package/types/api/block.d.ts +13 -0
- package/types/api/blocks.d.ts +16 -0
- package/types/tools/table.d.ts +2 -0
- package/dist/chunks/i18next-CugVlwWp.mjs +0 -1292
- package/src/tools/table/data-normalizer.ts +0 -32
|
@@ -56,6 +56,7 @@ export class TableRowColDrag {
|
|
|
56
56
|
|
|
57
57
|
private boundDocPointerMove: (e: PointerEvent) => void;
|
|
58
58
|
private boundDocPointerUp: (e: PointerEvent) => void;
|
|
59
|
+
private boundDocPointerCancel: () => void;
|
|
59
60
|
|
|
60
61
|
/** Resolves when drag ends — set by beginTracking, consumed by caller */
|
|
61
62
|
private resolveTracking: ((wasDrag: boolean) => void) | null = null;
|
|
@@ -67,6 +68,7 @@ export class TableRowColDrag {
|
|
|
67
68
|
|
|
68
69
|
this.boundDocPointerMove = this.handleDocPointerMove.bind(this);
|
|
69
70
|
this.boundDocPointerUp = this.handleDocPointerUp.bind(this);
|
|
71
|
+
this.boundDocPointerCancel = this.handleDocPointerCancel.bind(this);
|
|
70
72
|
}
|
|
71
73
|
|
|
72
74
|
/**
|
|
@@ -87,6 +89,7 @@ export class TableRowColDrag {
|
|
|
87
89
|
|
|
88
90
|
document.addEventListener('pointermove', this.boundDocPointerMove);
|
|
89
91
|
document.addEventListener('pointerup', this.boundDocPointerUp);
|
|
92
|
+
document.addEventListener('pointercancel', this.boundDocPointerCancel);
|
|
90
93
|
|
|
91
94
|
return new Promise<boolean>(resolve => {
|
|
92
95
|
this.resolveTracking = resolve;
|
|
@@ -113,6 +116,7 @@ export class TableRowColDrag {
|
|
|
113
116
|
|
|
114
117
|
document.removeEventListener('pointermove', this.boundDocPointerMove);
|
|
115
118
|
document.removeEventListener('pointerup', this.boundDocPointerUp);
|
|
119
|
+
document.removeEventListener('pointercancel', this.boundDocPointerCancel);
|
|
116
120
|
|
|
117
121
|
this.onDragStateChange?.(false, null);
|
|
118
122
|
this.isDragging = false;
|
|
@@ -139,6 +143,7 @@ export class TableRowColDrag {
|
|
|
139
143
|
private handleDocPointerUp(e: PointerEvent): void {
|
|
140
144
|
document.removeEventListener('pointermove', this.boundDocPointerMove);
|
|
141
145
|
document.removeEventListener('pointerup', this.boundDocPointerUp);
|
|
146
|
+
document.removeEventListener('pointercancel', this.boundDocPointerCancel);
|
|
142
147
|
|
|
143
148
|
if (this.isDragging) {
|
|
144
149
|
this.finishDrag(e);
|
|
@@ -150,6 +155,15 @@ export class TableRowColDrag {
|
|
|
150
155
|
this.cleanup();
|
|
151
156
|
}
|
|
152
157
|
|
|
158
|
+
/**
|
|
159
|
+
* Handle pointercancel — browser aborted the pointer (touch gesture, system dialog, etc.).
|
|
160
|
+
* Cleans up without applying the move (treats as abort).
|
|
161
|
+
*/
|
|
162
|
+
private handleDocPointerCancel(): void {
|
|
163
|
+
this.resolveTracking?.(this.isDragging);
|
|
164
|
+
this.cleanup();
|
|
165
|
+
}
|
|
166
|
+
|
|
153
167
|
private startDrag(): void {
|
|
154
168
|
this.grid.style.userSelect = 'none';
|
|
155
169
|
document.body.style.cursor = 'grabbing';
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Scroll haze overlays for the Table tool.
|
|
3
|
+
*
|
|
4
|
+
* Adds gradient overlays on the left/right edges of the table wrapper
|
|
5
|
+
* to indicate that the table content is horizontally scrollable.
|
|
6
|
+
* Uses a passive scroll event listener with rAF throttling.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
const HAZE_ATTR = 'data-blok-table-haze';
|
|
10
|
+
const HAZE_VISIBLE_ATTR = 'data-blok-table-haze-visible';
|
|
11
|
+
|
|
12
|
+
/** Minimum scrollLeft delta to consider "scrolled" (avoids sub-pixel flicker). */
|
|
13
|
+
const SCROLL_THRESHOLD = 1;
|
|
14
|
+
|
|
15
|
+
const HAZE_CLASSES = [
|
|
16
|
+
'absolute',
|
|
17
|
+
'top-0',
|
|
18
|
+
'bottom-0',
|
|
19
|
+
'w-12',
|
|
20
|
+
'pointer-events-none',
|
|
21
|
+
'opacity-0',
|
|
22
|
+
'transition-opacity',
|
|
23
|
+
'duration-150',
|
|
24
|
+
'z-1',
|
|
25
|
+
];
|
|
26
|
+
|
|
27
|
+
const LEFT_HAZE_CLASSES = [
|
|
28
|
+
'left-0',
|
|
29
|
+
'bg-linear-to-r',
|
|
30
|
+
'from-white/80',
|
|
31
|
+
'to-transparent',
|
|
32
|
+
];
|
|
33
|
+
|
|
34
|
+
const RIGHT_HAZE_CLASSES = [
|
|
35
|
+
'right-5',
|
|
36
|
+
'bg-linear-to-l',
|
|
37
|
+
'from-white/80',
|
|
38
|
+
'to-transparent',
|
|
39
|
+
];
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Manages left/right gradient haze overlays that indicate
|
|
43
|
+
* the table can be scrolled horizontally.
|
|
44
|
+
*/
|
|
45
|
+
export class TableScrollHaze {
|
|
46
|
+
private leftHaze: HTMLDivElement | null = null;
|
|
47
|
+
private rightHaze: HTMLDivElement | null = null;
|
|
48
|
+
private scrollContainer: HTMLElement | null = null;
|
|
49
|
+
private boundOnScroll: (() => void) | null = null;
|
|
50
|
+
private ticking = false;
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Create haze overlay elements and attach the scroll listener.
|
|
54
|
+
*
|
|
55
|
+
* @param wrapper - The table wrapper element (position: relative)
|
|
56
|
+
* @param scrollContainer - The scroll container with overflow-x: auto
|
|
57
|
+
*/
|
|
58
|
+
public init(wrapper: HTMLElement, scrollContainer: HTMLElement): void {
|
|
59
|
+
this.scrollContainer = scrollContainer;
|
|
60
|
+
|
|
61
|
+
this.leftHaze = this.createHazeElement('left');
|
|
62
|
+
this.rightHaze = this.createHazeElement('right');
|
|
63
|
+
|
|
64
|
+
wrapper.appendChild(this.leftHaze);
|
|
65
|
+
wrapper.appendChild(this.rightHaze);
|
|
66
|
+
|
|
67
|
+
this.boundOnScroll = (): void => {
|
|
68
|
+
if (!this.ticking) {
|
|
69
|
+
requestAnimationFrame(() => {
|
|
70
|
+
this.syncVisibility();
|
|
71
|
+
this.ticking = false;
|
|
72
|
+
});
|
|
73
|
+
this.ticking = true;
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
scrollContainer.addEventListener('scroll', this.boundOnScroll, { passive: true });
|
|
78
|
+
|
|
79
|
+
this.syncVisibility();
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Recalculate haze visibility (e.g. after column resize or add/delete).
|
|
84
|
+
*/
|
|
85
|
+
public update(): void {
|
|
86
|
+
this.syncVisibility();
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Remove overlay elements and detach the scroll listener.
|
|
91
|
+
*/
|
|
92
|
+
public destroy(): void {
|
|
93
|
+
if (this.boundOnScroll && this.scrollContainer) {
|
|
94
|
+
this.scrollContainer.removeEventListener('scroll', this.boundOnScroll);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
this.leftHaze?.remove();
|
|
98
|
+
this.rightHaze?.remove();
|
|
99
|
+
|
|
100
|
+
this.leftHaze = null;
|
|
101
|
+
this.rightHaze = null;
|
|
102
|
+
this.scrollContainer = null;
|
|
103
|
+
this.boundOnScroll = null;
|
|
104
|
+
this.ticking = false;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
private createHazeElement(side: 'left' | 'right'): HTMLDivElement {
|
|
108
|
+
const el = document.createElement('div');
|
|
109
|
+
|
|
110
|
+
el.setAttribute(HAZE_ATTR, side);
|
|
111
|
+
el.setAttribute('aria-hidden', 'true');
|
|
112
|
+
el.classList.add(...HAZE_CLASSES, ...(side === 'left' ? LEFT_HAZE_CLASSES : RIGHT_HAZE_CLASSES));
|
|
113
|
+
|
|
114
|
+
return el;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
private syncVisibility(): void {
|
|
118
|
+
const sc = this.scrollContainer;
|
|
119
|
+
|
|
120
|
+
if (!sc) {
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
const { overflowX } = getComputedStyle(sc);
|
|
125
|
+
const canScroll = overflowX === 'auto' || overflowX === 'scroll';
|
|
126
|
+
|
|
127
|
+
if (!canScroll) {
|
|
128
|
+
this.setVisible(this.leftHaze, false);
|
|
129
|
+
this.setVisible(this.rightHaze, false);
|
|
130
|
+
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
const { scrollLeft, scrollWidth, clientWidth } = sc;
|
|
135
|
+
const maxScroll = scrollWidth - clientWidth;
|
|
136
|
+
|
|
137
|
+
this.setVisible(this.leftHaze, scrollLeft > SCROLL_THRESHOLD);
|
|
138
|
+
this.setVisible(this.rightHaze, maxScroll > SCROLL_THRESHOLD && scrollLeft < maxScroll - SCROLL_THRESHOLD);
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
private setVisible(el: HTMLElement | null, visible: boolean): void {
|
|
142
|
+
if (!el) {
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
if (visible) {
|
|
147
|
+
el.setAttribute(HAZE_VISIBLE_ATTR, '');
|
|
148
|
+
} else {
|
|
149
|
+
el.removeAttribute(HAZE_VISIBLE_ATTR);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
}
|
package/src/tools/table/types.ts
CHANGED
|
@@ -4,7 +4,7 @@ import type { BlockToolData } from '../../../types';
|
|
|
4
4
|
* Cell content always contains block IDs.
|
|
5
5
|
* Every cell in the table is represented as an array of block references.
|
|
6
6
|
*/
|
|
7
|
-
export type CellContent = { blocks: string[] };
|
|
7
|
+
export type CellContent = { blocks: string[]; color?: string; textColor?: string; text?: string };
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
10
|
* Legacy cell content type for migration from string-based cells.
|
|
@@ -53,4 +53,25 @@ export interface TableConfig {
|
|
|
53
53
|
withHeadings?: boolean;
|
|
54
54
|
/** Whether to start stretched */
|
|
55
55
|
stretched?: boolean;
|
|
56
|
+
/** Additional tool names to restrict from being inserted into table cells */
|
|
57
|
+
restrictedTools?: string[];
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Block data within a clipboard cell (no IDs — those are assigned on paste).
|
|
62
|
+
*/
|
|
63
|
+
export interface ClipboardBlockData {
|
|
64
|
+
tool: string;
|
|
65
|
+
data: Record<string, unknown>;
|
|
66
|
+
tunes?: Record<string, unknown>;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Clipboard payload for copied table cells.
|
|
71
|
+
* Stored as JSON in a data attribute on the HTML table element.
|
|
72
|
+
*/
|
|
73
|
+
export interface TableCellsClipboard {
|
|
74
|
+
rows: number;
|
|
75
|
+
cols: number;
|
|
76
|
+
cells: Array<Array<{ blocks: ClipboardBlockData[]; color?: string; textColor?: string }>>;
|
|
56
77
|
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import type { TableEventBroker, BlockLifecycleEvent } from '../ownership/table-event-broker';
|
|
2
|
+
import type { TableOwnershipRegistry } from '../ownership/table-ownership-registry';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Adapter that bridges the ownership-based event broker into the existing
|
|
6
|
+
* TableCellBlocks event handling.
|
|
7
|
+
*
|
|
8
|
+
* In shadow mode, this adapter subscribes the table to the broker and
|
|
9
|
+
* forwards routed events to the table's handler. It does NOT replace the
|
|
10
|
+
* existing global event listener — both paths run in parallel for validation.
|
|
11
|
+
*
|
|
12
|
+
* After cutover (Task 7), this adapter becomes the sole event path.
|
|
13
|
+
*/
|
|
14
|
+
export class TableCellBlocksAdapter {
|
|
15
|
+
private readonly tableId: string;
|
|
16
|
+
private readonly broker: TableEventBroker;
|
|
17
|
+
private readonly registry: TableOwnershipRegistry;
|
|
18
|
+
private readonly onEvent: (blockId: string, event: BlockLifecycleEvent) => void;
|
|
19
|
+
|
|
20
|
+
constructor(options: {
|
|
21
|
+
tableId: string;
|
|
22
|
+
broker: TableEventBroker;
|
|
23
|
+
registry: TableOwnershipRegistry;
|
|
24
|
+
onEvent: (blockId: string, event: BlockLifecycleEvent) => void;
|
|
25
|
+
}) {
|
|
26
|
+
this.tableId = options.tableId;
|
|
27
|
+
this.broker = options.broker;
|
|
28
|
+
this.registry = options.registry;
|
|
29
|
+
this.onEvent = options.onEvent;
|
|
30
|
+
|
|
31
|
+
this.broker.subscribe(this.tableId, this.handleBrokerEvent);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Destroy the adapter — unsubscribe from the broker.
|
|
36
|
+
*/
|
|
37
|
+
destroy(): void {
|
|
38
|
+
this.broker.unsubscribe(this.tableId);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Handler for events routed through the broker.
|
|
43
|
+
*/
|
|
44
|
+
private handleBrokerEvent = (blockId: string, event: BlockLifecycleEvent): void => {
|
|
45
|
+
this.onEvent(blockId, event);
|
|
46
|
+
};
|
|
47
|
+
}
|
|
@@ -59,6 +59,19 @@ class Blok {
|
|
|
59
59
|
public exportAPI(blok: Core): void {
|
|
60
60
|
const fieldsToExport = ['configuration'];
|
|
61
61
|
const destroy = (): void => {
|
|
62
|
+
// Mark all modules as destroyed first so any in-flight async work stops gracefully
|
|
63
|
+
Object.values(blok.moduleInstances).forEach((moduleInstance) => {
|
|
64
|
+
if (moduleInstance === undefined || moduleInstance === null) {
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
if (
|
|
69
|
+
isFunction((moduleInstance as { markDestroyed?: () => void }).markDestroyed)
|
|
70
|
+
) {
|
|
71
|
+
(moduleInstance as { markDestroyed: () => void }).markDestroyed();
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
|
|
62
75
|
Object.values(blok.moduleInstances).forEach((moduleInstance) => {
|
|
63
76
|
if (moduleInstance === undefined || moduleInstance === null) {
|
|
64
77
|
return;
|
package/types/api/block.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import {BlockToolData, ToolConfig, ToolboxConfigEntry} from '../tools';
|
|
2
|
+
import {BlockTuneData} from '../block-tunes/block-tune-data';
|
|
2
3
|
import {SavedData} from '../data-formats';
|
|
3
4
|
|
|
4
5
|
/**
|
|
@@ -35,6 +36,18 @@ export interface BlockAPI {
|
|
|
35
36
|
*/
|
|
36
37
|
readonly selected: boolean;
|
|
37
38
|
|
|
39
|
+
/**
|
|
40
|
+
* Last successfully extracted block tool data (synchronous).
|
|
41
|
+
* Useful when async save() is not feasible, e.g. during clipboard operations.
|
|
42
|
+
*/
|
|
43
|
+
readonly preservedData: BlockToolData;
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Last successfully extracted tune data (synchronous).
|
|
47
|
+
* Useful when async save() is not feasible, e.g. during clipboard operations.
|
|
48
|
+
*/
|
|
49
|
+
readonly preservedTunes: { [name: string]: BlockTuneData };
|
|
50
|
+
|
|
38
51
|
/**
|
|
39
52
|
* True if Block has inputs to be focused
|
|
40
53
|
*/
|
package/types/api/blocks.d.ts
CHANGED
|
@@ -7,6 +7,12 @@ import {BlockTuneData} from '../block-tunes/block-tune-data';
|
|
|
7
7
|
* Describes methods to manipulate with Blok`s blocks
|
|
8
8
|
*/
|
|
9
9
|
export interface Blocks {
|
|
10
|
+
/**
|
|
11
|
+
* Returns true when a Yjs sync operation (undo/redo) is in progress.
|
|
12
|
+
* Tools can use this to skip cleanup that would interfere with Yjs state management.
|
|
13
|
+
*/
|
|
14
|
+
readonly isSyncingFromYjs: boolean;
|
|
15
|
+
|
|
10
16
|
/**
|
|
11
17
|
* Remove all blocks from Blok zone
|
|
12
18
|
*/
|
|
@@ -175,4 +181,14 @@ export interface Blocks {
|
|
|
175
181
|
newBlockData: BlockToolData,
|
|
176
182
|
insertIndex: number,
|
|
177
183
|
): BlockAPI;
|
|
184
|
+
|
|
185
|
+
/**
|
|
186
|
+
* Execute a function within a transaction.
|
|
187
|
+
* All block operations (insert, delete, move) within fn are grouped
|
|
188
|
+
* into a single undo entry. Prevents undo-group splitting that would
|
|
189
|
+
* make structural operations partially undoable.
|
|
190
|
+
*
|
|
191
|
+
* @param fn - The function containing block operations to group
|
|
192
|
+
*/
|
|
193
|
+
transact?(fn: () => void): void;
|
|
178
194
|
}
|
package/types/tools/table.d.ts
CHANGED