@jackuait/blok 0.10.4 → 0.10.5
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-NcdNQ0I6.mjs → blok-DSP5zC_s.mjs} +141 -112
- package/dist/chunks/{constants-DtfShkXT.mjs → constants-B0Tns0mh.mjs} +1 -1
- package/dist/chunks/{i18next-loader-D32EUWLr.mjs → i18next-loader-D_v0EmDP.mjs} +1 -1
- package/dist/chunks/{lightweight-i18n-DpkvRXEd.mjs → lightweight-i18n-DTYoSr_o.mjs} +2 -0
- package/dist/chunks/{messages-CGFlOwst.mjs → messages--X-ZzYSb.mjs} +8 -5
- package/dist/{messages-DQ1icG7L.mjs → chunks/messages--tSqMtkx2.mjs} +8 -5
- package/dist/{messages-bh8BiOee2.mjs → chunks/messages-3w1e16T2.mjs} +9 -6
- package/dist/{messages-C6yKu_PJ.mjs → chunks/messages-B5BaA6AV.mjs} +8 -5
- package/dist/chunks/{messages-D_kZN9rB.mjs → messages-B5ZVSxG4.mjs} +9 -6
- package/dist/{messages-Di3-WVzq.mjs → chunks/messages-B9PUHq4t.mjs} +8 -5
- package/dist/{messages-BLfK27kX.mjs → chunks/messages-BAxCMQgm.mjs} +8 -5
- package/dist/{messages-Dl0bfeA-.mjs → chunks/messages-BDhWRN6Y.mjs} +9 -6
- package/dist/chunks/{messages-Cfbmwdep2.mjs → messages-BGpx2ecP2.mjs} +8 -5
- package/dist/{messages-D6RYu9JW2.mjs → chunks/messages-BHUQs6402.mjs} +8 -5
- package/dist/{messages-gZEhkRrR2.mjs → chunks/messages-BIXCvkbG.mjs} +8 -5
- package/dist/chunks/{messages-RiqdVwuN2.mjs → messages-BKeL1zk-2.mjs} +8 -5
- package/dist/{messages-BCMFYqKc2.mjs → chunks/messages-Bedied602.mjs} +8 -5
- package/dist/chunks/{messages-BJNFCDv42.mjs → messages-Bg8uBETk2.mjs} +8 -5
- package/dist/{messages-BLW2GX7J2.mjs → chunks/messages-Blg1X6YL.mjs} +8 -5
- package/dist/{messages-BwttyHDI2.mjs → chunks/messages-BmDMK9Dg.mjs} +8 -5
- package/dist/chunks/{messages-ChayV9WY2.mjs → messages-BmDw1fZF2.mjs} +8 -5
- package/dist/{messages-C-8qb9sf2.mjs → chunks/messages-BqKIunt0.mjs} +8 -5
- package/dist/{messages-CVMngZNA.mjs → chunks/messages-BszGK0ox.mjs} +10 -7
- package/dist/{messages-B4zPxKl62.mjs → chunks/messages-Buwm8xrX2.mjs} +8 -5
- package/dist/chunks/{messages-CGPxUESo.mjs → messages-BvoElEE_.mjs} +8 -5
- package/dist/{messages-BPw_x-6H.mjs → chunks/messages-ByHXyVi6.mjs} +7 -4
- package/dist/chunks/{messages-CGLTjtRv2.mjs → messages-C9HPruJj2.mjs} +8 -5
- package/dist/{messages-D8U5D391.mjs → chunks/messages-CDtmVcBc.mjs} +11 -8
- package/dist/{messages-CLZoy5fQ.mjs → chunks/messages-CEWKcK-Q.mjs} +7 -4
- package/dist/chunks/{messages-D9syZVGi2.mjs → messages-CRLvJfNU2.mjs} +6 -3
- package/dist/chunks/{messages-BBe45sPH.mjs → messages-CXjSY5Fy.mjs} +8 -5
- package/dist/{messages-DfqM_XvD.mjs → chunks/messages-CdWS0hvw.mjs} +16 -13
- package/dist/chunks/{messages-H6vLy8wJ.mjs → messages-Cic0Y1z6.mjs} +8 -5
- package/dist/{messages-DwiykEgr2.mjs → chunks/messages-CmGixnBb2.mjs} +8 -5
- package/dist/{messages-C67YUZ9-.mjs → chunks/messages-CrCalcxK.mjs} +8 -5
- package/dist/{messages-VrQw3tQ62.mjs → chunks/messages-D3wlt9eE.mjs} +6 -3
- package/dist/chunks/{messages-DkP3Jf4F.mjs → messages-D5NWb-B9.mjs} +7 -4
- package/dist/chunks/{messages-DSbI0vJf.mjs → messages-D5lY22F4.mjs} +8 -5
- package/dist/{messages-BSNsrZVN.mjs → chunks/messages-DGYjioKM.mjs} +10 -7
- package/dist/{messages-D8dO6OMN.mjs → chunks/messages-DIH2U0ZD.mjs} +16 -13
- package/dist/{messages-5wuR90qS.mjs → chunks/messages-DIUegdwv2.mjs} +8 -5
- package/dist/chunks/{messages-Ci7UXRVI2.mjs → messages-DKZHsfXy2.mjs} +9 -6
- package/dist/{messages-CFUBJfnf.mjs → chunks/messages-DKjUcEfs.mjs} +8 -5
- package/dist/chunks/{messages-DjSuq0-y2.mjs → messages-DOPK-Xif2.mjs} +8 -5
- package/dist/chunks/{messages-AD17iDBx.mjs → messages-DSMFg80t.mjs} +9 -6
- package/dist/{messages-DCdP2ujL.mjs → chunks/messages-DT6eM0I22.mjs} +6 -3
- package/dist/chunks/{messages-wYQksm10.mjs → messages-DZTQIS9F.mjs} +8 -5
- package/dist/chunks/{messages-VtfKWZ2S.mjs → messages-DalLfJNC.mjs} +8 -5
- package/dist/{messages-DzknMM7W.mjs → chunks/messages-DggaAu362.mjs} +8 -5
- package/dist/chunks/{messages-oXBbHW9A.mjs → messages-DgoJDjHm.mjs} +8 -5
- package/dist/chunks/{messages-Br6bE1FD2.mjs → messages-DhgEjOjw2.mjs} +9 -6
- package/dist/{messages-PyOr_YgV.mjs → chunks/messages-Dk-d3mmM.mjs} +6 -3
- package/dist/{messages-Do3mHd9U.mjs → chunks/messages-DlTG06-j.mjs} +9 -6
- package/dist/{messages-CR4gHjd82.mjs → chunks/messages-Dle6Hv30.mjs} +6 -3
- package/dist/{messages-DB4UKN8D.mjs → chunks/messages-DoD9yWMu2.mjs} +6 -3
- package/dist/{messages-KVerxvZC.mjs → chunks/messages-DpnhbDoK2.mjs} +8 -5
- package/dist/chunks/{messages-Cxy_E2IS.mjs → messages-DqGv-lj6.mjs} +8 -5
- package/dist/chunks/{messages-VlEyFUxF2.mjs → messages-DslnYTHU2.mjs} +8 -5
- package/dist/{messages-OOiDDmVw.mjs → chunks/messages-IjEU7XAq.mjs} +8 -5
- package/dist/chunks/{messages-DRJxSTqs.mjs → messages-JRjsu_bC.mjs} +9 -6
- package/dist/{messages-DUYxMxrQ2.mjs → chunks/messages-PkO_43Eb.mjs} +8 -5
- package/dist/chunks/{messages-fbL5y58u2.mjs → messages-W2zpf0Mu2.mjs} +8 -5
- package/dist/chunks/{messages-C85zv_7x.mjs → messages-adEATsLK.mjs} +7 -4
- package/dist/{messages-BORkMoil2.mjs → chunks/messages-b8XGiuAa2.mjs} +7 -4
- package/dist/chunks/{messages-zWqsggJh.mjs → messages-bteFpBer.mjs} +8 -5
- package/dist/chunks/{messages-YbckahVx2.mjs → messages-cR48x2Aq2.mjs} +8 -5
- package/dist/chunks/{messages-C7Pjof0d2.mjs → messages-f-YBthdd2.mjs} +8 -5
- package/dist/{messages-Cd5CW5Tt.mjs → chunks/messages-fUpUvsRN.mjs} +9 -6
- package/dist/chunks/{messages-OSP4Hj5o.mjs → messages-gNK1EolD.mjs} +9 -6
- package/dist/{messages-DA4T9WBe.mjs → chunks/messages-vqR3RAU4.mjs} +8 -5
- package/dist/chunks/{messages-Bop7vrhU.mjs → messages-wSX_4fK1.mjs} +8 -5
- package/dist/chunks/{tools-DMSi-3RW.mjs → tools-KZmhOKEo.mjs} +8 -43
- package/dist/full.mjs +3 -3
- package/dist/locales.mjs +69 -67
- package/dist/{chunks/messages-CPFB2_m-2.mjs → messages--zgIPYtb.mjs} +6 -3
- package/dist/{chunks/messages-THR8q8bJ.mjs → messages-4jULpVvw.mjs} +16 -13
- package/dist/{chunks/messages-CNaaqQVz.mjs → messages-AbwSlRf_.mjs} +10 -7
- package/dist/{messages-BrYeJsSE2.mjs → messages-B-dl7Pwb2.mjs} +9 -6
- package/dist/{messages-B_UKuqrH.mjs → messages-B3rCRhb1.mjs} +8 -5
- package/dist/{chunks/messages-CCEgR9GN2.mjs → messages-B73L8nKc2.mjs} +8 -5
- package/dist/{messages-9L4qqCKh2.mjs → messages-BAjsD2Vm2.mjs} +8 -5
- package/dist/{messages-C34dTwF72.mjs → messages-BBodSb5B2.mjs} +8 -5
- package/dist/{chunks/messages-O6FOfUgF.mjs → messages-BTpn6H9x2.mjs} +6 -3
- package/dist/{chunks/messages-Cql2ozf_2.mjs → messages-BWb0GjTj2.mjs} +8 -5
- package/dist/{messages-ELvF3qMl2.mjs → messages-BbCgnri12.mjs} +8 -5
- package/dist/{messages-DqDlcEPn.mjs → messages-Bfon_Y3q.mjs} +9 -6
- package/dist/{messages-WsUHzXMu2.mjs → messages-BhOtow9J2.mjs} +8 -5
- package/dist/{messages-6eX0fWGR2.mjs → messages-BoB7m0uu2.mjs} +9 -6
- package/dist/{chunks/messages-C3X7dv3f.mjs → messages-BsOZPjeg.mjs} +8 -5
- package/dist/{chunks/messages-vDgsEqQW2.mjs → messages-BuzKUYPV.mjs} +8 -5
- package/dist/{chunks/messages-BjyYZeBm2.mjs → messages-BzOKMdMQ.mjs} +6 -3
- package/dist/{messages-CxZarWTm2.mjs → messages-C2H3PeQW2.mjs} +8 -5
- package/dist/{messages-D0eT_eWA.mjs → messages-C5KNzSTk.mjs} +8 -5
- package/dist/{messages-CNGwdIEz.mjs → messages-CIDYjE6l.mjs} +8 -5
- package/dist/{chunks/messages-CTdSIOAc.mjs → messages-CJmyF5ye.mjs} +7 -4
- package/dist/{chunks/messages-CDSyoUft.mjs → messages-CTwiYb2a2.mjs} +6 -3
- package/dist/{messages-BM2kx9Td.mjs → messages-CUHoJaDO.mjs} +8 -5
- package/dist/{messages-DPFuzIdF2.mjs → messages-CVeuqUjQ2.mjs} +8 -5
- package/dist/{chunks/messages-C7sBaZOO2.mjs → messages-CW75b4sz.mjs} +8 -5
- package/dist/{chunks/messages-DVvrZRyZ.mjs → messages-CXd7YeWV.mjs} +8 -5
- package/dist/{chunks/messages-CXVWb9js.mjs → messages-CjlYkunD.mjs} +8 -5
- package/dist/{chunks/messages-B8hICx3L.mjs → messages-CrGx64yd.mjs} +9 -6
- package/dist/{messages-0lOPMv8u.mjs → messages-Ct0jbgHd.mjs} +8 -5
- package/dist/{chunks/messages-DpydMd36.mjs → messages-CtKrCYD1.mjs} +8 -5
- package/dist/{chunks/messages-B03yUEra2.mjs → messages-Cu2eLjfJ.mjs} +8 -5
- package/dist/{chunks/messages-dpXwA3Sz.mjs → messages-CvwQ-fK_2.mjs} +8 -5
- package/dist/{chunks/messages-zQOpKjl3.mjs → messages-Cy6UYN9b.mjs} +6 -3
- package/dist/{messages-CrjQ2Op0.mjs → messages-D01vnfA9.mjs} +8 -5
- package/dist/{chunks/messages-C-EBhOHE.mjs → messages-D0BAV45W.mjs} +8 -5
- package/dist/{messages-DxEiqa-B.mjs → messages-D5LGpdga.mjs} +9 -6
- package/dist/{chunks/messages-D9uWAWjW.mjs → messages-DATK4ftv.mjs} +9 -6
- package/dist/{messages-aoO_TtoE2.mjs → messages-DEl77Urv2.mjs} +9 -6
- package/dist/{messages-BRY51SEw2.mjs → messages-DHNjM2nv2.mjs} +6 -3
- package/dist/{chunks/messages-ZhHLC6dk.mjs → messages-DMW8b_sO.mjs} +8 -5
- package/dist/{messages-tb1FD_ge.mjs → messages-DNmgANKr.mjs} +7 -4
- package/dist/{chunks/messages-DY8zPIZW.mjs → messages-DQaa3cEM.mjs} +9 -6
- package/dist/{messages-DT7dwzEe.mjs → messages-DSlD4bV9.mjs} +8 -5
- package/dist/{messages-Dxr1BBvo.mjs → messages-DTzbkXFt.mjs} +8 -5
- package/dist/{chunks/messages-SP659Sal2.mjs → messages-DbZihxtV.mjs} +8 -5
- package/dist/{messages-Cv1PSaNk.mjs → messages-DeE8fyKQ.mjs} +8 -5
- package/dist/{chunks/messages-DtZ9U9g72.mjs → messages-Dg-TpO2S2.mjs} +8 -5
- package/dist/{chunks/messages-BouFtpfO.mjs → messages-DgP82LzF.mjs} +7 -4
- package/dist/{messages-CA6J_QoC.mjs → messages-Dh3Vt7WC.mjs} +7 -4
- package/dist/{chunks/messages-bFEdH3lv.mjs → messages-DiVVyZD22.mjs} +9 -6
- package/dist/{chunks/messages-DoPdy75l.mjs → messages-DpRnGjoe.mjs} +10 -7
- package/dist/{messages-Dx5n6MLQ2.mjs → messages-DqZmrFaa2.mjs} +8 -5
- package/dist/{chunks/messages-oPV2oMxM.mjs → messages-Dra9Fz5Q.mjs} +11 -8
- package/dist/{chunks/messages-CpXvyGWv2.mjs → messages-DuPBRgEF2.mjs} +7 -4
- package/dist/{messages-JVJdC0Er2.mjs → messages-DuxEyAY-2.mjs} +9 -6
- package/dist/{chunks/messages-BGmvvtg_.mjs → messages-FmJD6lHR2.mjs} +8 -5
- package/dist/{chunks/messages-HzH9_QH8.mjs → messages-ONielGl92.mjs} +8 -5
- package/dist/{chunks/messages-B2dU00Z3.mjs → messages-RzgUqCGb2.mjs} +8 -5
- package/dist/{messages-CLUBh7O_.mjs → messages-U22AKGKs.mjs} +8 -5
- package/dist/{messages-BKXjO3NH.mjs → messages-XufeeRfO.mjs} +8 -5
- package/dist/{chunks/messages-yGedmr61.mjs → messages-fprUm7SO2.mjs} +8 -5
- package/dist/{chunks/messages-BCifzMVO2.mjs → messages-gFNdz3Tn2.mjs} +8 -5
- package/dist/{chunks/messages-BcHZf9o-.mjs → messages-h_n5GBm6.mjs} +16 -13
- package/dist/{messages-ZHgPRUj02.mjs → messages-oOogIpsL2.mjs} +8 -5
- package/dist/{messages-D_V0kHD7.mjs → messages-otwg3KcK.mjs} +8 -5
- package/dist/{chunks/messages-BNy4e7Xl.mjs → messages-rDDoBMWb.mjs} +8 -5
- package/dist/{messages-hya8YLMj.mjs → messages-trQPxZIu.mjs} +8 -5
- package/dist/react.mjs +2 -2
- package/dist/tools.mjs +2 -2
- package/package.json +1 -1
- package/src/blok.ts +55 -0
- package/src/components/i18n/locales/am/messages.json +8 -5
- package/src/components/i18n/locales/ar/messages.json +8 -5
- package/src/components/i18n/locales/az/messages.json +8 -5
- package/src/components/i18n/locales/bg/messages.json +7 -4
- package/src/components/i18n/locales/bn/messages.json +8 -5
- package/src/components/i18n/locales/bs/messages.json +10 -7
- package/src/components/i18n/locales/cs/messages.json +9 -6
- package/src/components/i18n/locales/da/messages.json +9 -6
- package/src/components/i18n/locales/de/messages.json +9 -6
- package/src/components/i18n/locales/dv/messages.json +8 -5
- package/src/components/i18n/locales/el/messages.json +8 -5
- package/src/components/i18n/locales/en/messages.json +2 -0
- package/src/components/i18n/locales/es/messages.json +9 -6
- package/src/components/i18n/locales/et/messages.json +7 -4
- package/src/components/i18n/locales/fa/messages.json +8 -5
- package/src/components/i18n/locales/fi/messages.json +8 -5
- package/src/components/i18n/locales/fil/messages.json +16 -13
- package/src/components/i18n/locales/fr/messages.json +8 -5
- package/src/components/i18n/locales/gu/messages.json +8 -5
- package/src/components/i18n/locales/he/messages.json +8 -5
- package/src/components/i18n/locales/hi/messages.json +8 -5
- package/src/components/i18n/locales/hr/messages.json +10 -7
- package/src/components/i18n/locales/hu/messages.json +9 -6
- package/src/components/i18n/locales/hy/messages.json +16 -13
- package/src/components/i18n/locales/id/messages.json +7 -4
- package/src/components/i18n/locales/it/messages.json +11 -8
- package/src/components/i18n/locales/ja/messages.json +8 -5
- package/src/components/i18n/locales/ka/messages.json +8 -5
- package/src/components/i18n/locales/km/messages.json +6 -3
- package/src/components/i18n/locales/kn/messages.json +8 -5
- package/src/components/i18n/locales/ko/messages.json +8 -5
- package/src/components/i18n/locales/ku/messages.json +8 -5
- package/src/components/i18n/locales/lo/messages.json +6 -3
- package/src/components/i18n/locales/lt/messages.json +8 -5
- package/src/components/i18n/locales/lv/messages.json +8 -5
- package/src/components/i18n/locales/mk/messages.json +8 -5
- package/src/components/i18n/locales/ml/messages.json +8 -5
- package/src/components/i18n/locales/mn/messages.json +8 -5
- package/src/components/i18n/locales/mr/messages.json +8 -5
- package/src/components/i18n/locales/ms/messages.json +6 -3
- package/src/components/i18n/locales/my/messages.json +8 -5
- package/src/components/i18n/locales/ne/messages.json +8 -5
- package/src/components/i18n/locales/nl/messages.json +8 -5
- package/src/components/i18n/locales/no/messages.json +9 -6
- package/src/components/i18n/locales/pa/messages.json +8 -5
- package/src/components/i18n/locales/pl/messages.json +9 -6
- package/src/components/i18n/locales/ps/messages.json +8 -5
- package/src/components/i18n/locales/pt/messages.json +8 -5
- package/src/components/i18n/locales/ro/messages.json +8 -5
- package/src/components/i18n/locales/ru/messages.json +7 -4
- package/src/components/i18n/locales/sd/messages.json +8 -5
- package/src/components/i18n/locales/si/messages.json +8 -5
- package/src/components/i18n/locales/sk/messages.json +9 -6
- package/src/components/i18n/locales/sl/messages.json +9 -6
- package/src/components/i18n/locales/sq/messages.json +9 -6
- package/src/components/i18n/locales/sr/messages.json +8 -5
- package/src/components/i18n/locales/sv/messages.json +8 -5
- package/src/components/i18n/locales/sw/messages.json +6 -3
- package/src/components/i18n/locales/ta/messages.json +8 -5
- package/src/components/i18n/locales/te/messages.json +8 -5
- package/src/components/i18n/locales/th/messages.json +6 -3
- package/src/components/i18n/locales/tr/messages.json +8 -5
- package/src/components/i18n/locales/ug/messages.json +8 -5
- package/src/components/i18n/locales/uk/messages.json +7 -4
- package/src/components/i18n/locales/ur/messages.json +8 -5
- package/src/components/i18n/locales/vi/messages.json +6 -3
- package/src/components/i18n/locales/yi/messages.json +8 -5
- package/src/components/i18n/locales/zh/messages.json +8 -5
- package/src/components/inline-tools/inline-tool-code.ts +0 -19
- package/src/components/inline-tools/inline-tool-italic.ts +3 -20
- package/src/components/inline-tools/inline-tool-strikethrough.ts +0 -19
- package/src/components/inline-tools/inline-tool-underline.ts +0 -19
- package/src/components/inline-tools/services/bold-normalization-pass.ts +1 -29
- package/src/components/modules/blockEvents/composers/keyboardNavigation.ts +11 -5
- package/src/components/modules/toolbar/blockSettings.ts +2 -2
- package/src/components/modules/ui.ts +1 -0
- package/src/components/modules/uiControllers/controllers/keyboard.ts +55 -5
- package/src/styles/main.css +3 -0
- package/src/tools/database/database-view.ts +269 -0
- package/src/tools/database/types.ts +16 -0
|
@@ -25,8 +25,8 @@
|
|
|
25
25
|
"tools.marker.textColor": "تېكىست",
|
|
26
26
|
"tools.marker.background": "تەگلىك",
|
|
27
27
|
"tools.marker.default": "سۈكۈتتىكى",
|
|
28
|
-
"tools.colorPicker.defaultSwatchLabel": "{
|
|
29
|
-
"tools.colorPicker.colorSwatchLabel": "{
|
|
28
|
+
"tools.colorPicker.defaultSwatchLabel": "{mode} {default}",
|
|
29
|
+
"tools.colorPicker.colorSwatchLabel": "{mode} {color}",
|
|
30
30
|
"tools.colorPicker.color.gray": "كۈلرەڭ",
|
|
31
31
|
"tools.colorPicker.color.brown": "قوڭۇر",
|
|
32
32
|
"tools.colorPicker.color.orange": "تۈختۈرەڭ",
|
|
@@ -73,6 +73,9 @@
|
|
|
73
73
|
"tools.table.clickToAddColumn": "يېڭى ئىستون قوشۇش ئۈچۈن چېكىڭ",
|
|
74
74
|
"tools.table.dragToAddRemoveColumns": "ئىستون قوشۇش ياكى ئۆچۈرۈش ئۈچۈن سۆرەڭ",
|
|
75
75
|
"blockSettings.delete": "ئۆچۈرۈش",
|
|
76
|
+
"blockSettings.copyLink": "بۆلەككە ئۇلانما كۆچۈرۈش",
|
|
77
|
+
"blockSettings.lastEdited": "ئاخىرقى تەھرىرلەش",
|
|
78
|
+
"blockSettings.lastEditedBy": "{name} ئاخىرقى تەھرىرلىگەن",
|
|
76
79
|
"a11y.dragHandle": "بۆلەكنى يۆتكەش ئۈچۈن سۆرەڭ ياكى تىزىملىك ئۈچۈن چېكىڭ",
|
|
77
80
|
"a11y.dragHandleRole": "سۆرەش تۇتقۇچى",
|
|
78
81
|
"a11y.dragStarted": "بۆلەك سۆرىلىۋاتىدۇ",
|
|
@@ -151,8 +154,8 @@
|
|
|
151
154
|
"tools.database.cardTitlePlaceholder": "بوش بەت",
|
|
152
155
|
"tools.database.columnTitlePlaceholder": "ئىستون",
|
|
153
156
|
"tools.database.deleteCard": "كارتىنى ئۆچۈرۈش",
|
|
154
|
-
"tools.database.editCardTitle": "
|
|
155
|
-
"tools.database.cardMenuLabel": "
|
|
157
|
+
"tools.database.editCardTitle": "ماۋزۇنى تەھرىرلەش",
|
|
158
|
+
"tools.database.cardMenuLabel": "كارتا تاللانمىلىرى",
|
|
156
159
|
"tools.database.deleteColumn": "ئىستوننى ئۆچۈرۈش",
|
|
157
160
|
"tools.database.emptyColumn": "كارتا يوق",
|
|
158
161
|
"tools.database.rowTitlePlaceholder": "بوش بەت",
|
|
@@ -202,5 +205,5 @@
|
|
|
202
205
|
"searchTerms.code": "كود",
|
|
203
206
|
"searchTerms.snippet": "پارچە",
|
|
204
207
|
"searchTerms.program": "پروگرامما",
|
|
205
|
-
"searchTerms.pre": "
|
|
208
|
+
"searchTerms.pre": "فورماتلانغان"
|
|
206
209
|
}
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
"tools.marker.background": "Тло",
|
|
27
27
|
"tools.marker.default": "за замовчуванням",
|
|
28
28
|
"tools.colorPicker.defaultSwatchLabel": "{mode} {default}",
|
|
29
|
-
"tools.colorPicker.colorSwatchLabel": "{
|
|
29
|
+
"tools.colorPicker.colorSwatchLabel": "{mode} {color}",
|
|
30
30
|
"tools.colorPicker.color.gray": "Сірий",
|
|
31
31
|
"tools.colorPicker.color.brown": "Коричневий",
|
|
32
32
|
"tools.colorPicker.color.orange": "Помаранчевий",
|
|
@@ -50,6 +50,9 @@
|
|
|
50
50
|
"tools.header.toggleHeading3": "Згортний заголовок 3",
|
|
51
51
|
"tools.list.placeholder": "Список",
|
|
52
52
|
"blockSettings.delete": "Видалити",
|
|
53
|
+
"blockSettings.copyLink": "Копіювати посилання на блок",
|
|
54
|
+
"blockSettings.lastEdited": "Останнє редагування",
|
|
55
|
+
"blockSettings.lastEditedBy": "Останнє редагування: {name}",
|
|
53
56
|
"a11y.dragHandle": "Перетягніть або натисніть для меню",
|
|
54
57
|
"a11y.dragHandleRole": "елемент керування блоком",
|
|
55
58
|
"a11y.dragStarted": "Переміщення блока",
|
|
@@ -151,8 +154,8 @@
|
|
|
151
154
|
"tools.database.cardTitlePlaceholder": "Порожня сторінка",
|
|
152
155
|
"tools.database.columnTitlePlaceholder": "Стовпець",
|
|
153
156
|
"tools.database.deleteCard": "Видалити картку",
|
|
154
|
-
"tools.database.editCardTitle": "
|
|
155
|
-
"tools.database.cardMenuLabel": "
|
|
157
|
+
"tools.database.editCardTitle": "Редагувати заголовок",
|
|
158
|
+
"tools.database.cardMenuLabel": "Параметри картки",
|
|
156
159
|
"tools.database.deleteColumn": "Видалити стовпець",
|
|
157
160
|
"tools.database.emptyColumn": "Немає карток",
|
|
158
161
|
"tools.database.rowTitlePlaceholder": "Порожня сторінка",
|
|
@@ -202,5 +205,5 @@
|
|
|
202
205
|
"searchTerms.code": "код",
|
|
203
206
|
"searchTerms.snippet": "фрагмент",
|
|
204
207
|
"searchTerms.program": "програма",
|
|
205
|
-
"searchTerms.pre": "
|
|
208
|
+
"searchTerms.pre": "форматований"
|
|
206
209
|
}
|
|
@@ -25,8 +25,8 @@
|
|
|
25
25
|
"tools.marker.textColor": "متن",
|
|
26
26
|
"tools.marker.background": "پس منظر",
|
|
27
27
|
"tools.marker.default": "طے شدہ",
|
|
28
|
-
"tools.colorPicker.defaultSwatchLabel": "{
|
|
29
|
-
"tools.colorPicker.colorSwatchLabel": "{
|
|
28
|
+
"tools.colorPicker.defaultSwatchLabel": "{mode} {default}",
|
|
29
|
+
"tools.colorPicker.colorSwatchLabel": "{mode} {color}",
|
|
30
30
|
"tools.colorPicker.color.gray": "سرمئی",
|
|
31
31
|
"tools.colorPicker.color.brown": "بھورا",
|
|
32
32
|
"tools.colorPicker.color.orange": "نارنجی",
|
|
@@ -50,6 +50,9 @@
|
|
|
50
50
|
"tools.header.toggleHeading3": "ٹوگل عنوان 3",
|
|
51
51
|
"tools.list.placeholder": "فہرست",
|
|
52
52
|
"blockSettings.delete": "حذف کریں",
|
|
53
|
+
"blockSettings.copyLink": "بلاک کا لنک کاپی کریں",
|
|
54
|
+
"blockSettings.lastEdited": "آخری ترمیم",
|
|
55
|
+
"blockSettings.lastEditedBy": "{name} نے آخری ترمیم کی",
|
|
53
56
|
"a11y.dragHandle": "بلاک منتقل کرنے کے لیے گھسیٹیں یا مینو کے لیے کلک کریں",
|
|
54
57
|
"a11y.dragHandleRole": "گھسیٹنے کا ہینڈل",
|
|
55
58
|
"a11y.dragStarted": "بلاک گھسیٹا جا رہا ہے",
|
|
@@ -151,8 +154,8 @@
|
|
|
151
154
|
"tools.database.cardTitlePlaceholder": "خالی صفحہ",
|
|
152
155
|
"tools.database.columnTitlePlaceholder": "کالم",
|
|
153
156
|
"tools.database.deleteCard": "کارڈ حذف کریں",
|
|
154
|
-
"tools.database.editCardTitle": "
|
|
155
|
-
"tools.database.cardMenuLabel": "
|
|
157
|
+
"tools.database.editCardTitle": "عنوان ترمیم کریں",
|
|
158
|
+
"tools.database.cardMenuLabel": "کارڈ کے اختیارات",
|
|
156
159
|
"tools.database.deleteColumn": "کالم حذف کریں",
|
|
157
160
|
"tools.database.emptyColumn": "کوئی کارڈ نہیں",
|
|
158
161
|
"tools.database.rowTitlePlaceholder": "خالی صفحہ",
|
|
@@ -202,5 +205,5 @@
|
|
|
202
205
|
"searchTerms.code": "کوڈ",
|
|
203
206
|
"searchTerms.snippet": "ٹکڑا",
|
|
204
207
|
"searchTerms.program": "پروگرام",
|
|
205
|
-
"searchTerms.pre": "
|
|
208
|
+
"searchTerms.pre": "فارمیٹ شدہ"
|
|
206
209
|
}
|
|
@@ -73,6 +73,9 @@
|
|
|
73
73
|
"tools.table.clickToAddColumn": "Nhấp để thêm cột mới",
|
|
74
74
|
"tools.table.dragToAddRemoveColumns": "Kéo để thêm hoặc xóa cột",
|
|
75
75
|
"blockSettings.delete": "Xóa",
|
|
76
|
+
"blockSettings.copyLink": "Sao chép liên kết đến khối",
|
|
77
|
+
"blockSettings.lastEdited": "Chỉnh sửa lần cuối",
|
|
78
|
+
"blockSettings.lastEditedBy": "Chỉnh sửa lần cuối bởi {name}",
|
|
76
79
|
"a11y.dragHandle": "Kéo để di chuyển khối hoặc nhấp để mở menu",
|
|
77
80
|
"a11y.dragHandleRole": "tay nắm kéo",
|
|
78
81
|
"a11y.dragStarted": "Đang kéo khối",
|
|
@@ -151,8 +154,8 @@
|
|
|
151
154
|
"tools.database.cardTitlePlaceholder": "Trang trống",
|
|
152
155
|
"tools.database.columnTitlePlaceholder": "Cột",
|
|
153
156
|
"tools.database.deleteCard": "Xóa thẻ",
|
|
154
|
-
"tools.database.editCardTitle": "
|
|
155
|
-
"tools.database.cardMenuLabel": "
|
|
157
|
+
"tools.database.editCardTitle": "Chỉnh sửa tiêu đề",
|
|
158
|
+
"tools.database.cardMenuLabel": "Tùy chọn thẻ",
|
|
156
159
|
"tools.database.deleteColumn": "Xóa cột",
|
|
157
160
|
"tools.database.emptyColumn": "Không có thẻ",
|
|
158
161
|
"tools.database.rowTitlePlaceholder": "Trang trống",
|
|
@@ -202,5 +205,5 @@
|
|
|
202
205
|
"searchTerms.code": "mã",
|
|
203
206
|
"searchTerms.snippet": "đoạn mã",
|
|
204
207
|
"searchTerms.program": "chương trình",
|
|
205
|
-
"searchTerms.pre": "
|
|
208
|
+
"searchTerms.pre": "định dạng"
|
|
206
209
|
}
|
|
@@ -25,8 +25,8 @@
|
|
|
25
25
|
"tools.marker.textColor": "טעקסט",
|
|
26
26
|
"tools.marker.background": "הינטערגרונט",
|
|
27
27
|
"tools.marker.default": "שטאַנדאַרד",
|
|
28
|
-
"tools.colorPicker.defaultSwatchLabel": "{
|
|
29
|
-
"tools.colorPicker.colorSwatchLabel": "{
|
|
28
|
+
"tools.colorPicker.defaultSwatchLabel": "{mode} {default}",
|
|
29
|
+
"tools.colorPicker.colorSwatchLabel": "{mode} {color}",
|
|
30
30
|
"tools.colorPicker.color.gray": "גרוי",
|
|
31
31
|
"tools.colorPicker.color.brown": "ברוין",
|
|
32
32
|
"tools.colorPicker.color.orange": "אָראַנזש",
|
|
@@ -73,6 +73,9 @@
|
|
|
73
73
|
"tools.table.clickToAddColumn": "קליק צו צולייגן אַ נײַע שפּאַלט",
|
|
74
74
|
"tools.table.dragToAddRemoveColumns": "שלעפּ צו צולייגן אָדער אויסמעקן שפּאַלטן",
|
|
75
75
|
"blockSettings.delete": "אויסמעקן",
|
|
76
|
+
"blockSettings.copyLink": "קאָפּירן לינק צום בלאָק",
|
|
77
|
+
"blockSettings.lastEdited": "לעצט רעדאַקטירט",
|
|
78
|
+
"blockSettings.lastEditedBy": "לעצט רעדאַקטירט דורך {name}",
|
|
76
79
|
"a11y.dragHandle": "שלעפּ צו באַוועגן בלאָק אָדער קליק פֿאַר מעניו",
|
|
77
80
|
"a11y.dragHandleRole": "שלעפּ האַנטל",
|
|
78
81
|
"a11y.dragStarted": "שלעפּט בלאָק",
|
|
@@ -151,8 +154,8 @@
|
|
|
151
154
|
"tools.database.cardTitlePlaceholder": "ליידיק בלאַט",
|
|
152
155
|
"tools.database.columnTitlePlaceholder": "שפּאַלט",
|
|
153
156
|
"tools.database.deleteCard": "אויסמעקן קאַרטל",
|
|
154
|
-
"tools.database.editCardTitle": "
|
|
155
|
-
"tools.database.cardMenuLabel": "
|
|
157
|
+
"tools.database.editCardTitle": "רעדאַקטירן טיטל",
|
|
158
|
+
"tools.database.cardMenuLabel": "קאַרטל אָפּציעס",
|
|
156
159
|
"tools.database.deleteColumn": "אויסמעקן שפּאַלט",
|
|
157
160
|
"tools.database.emptyColumn": "קיין קארטן",
|
|
158
161
|
"tools.database.rowTitlePlaceholder": "ליידיק בלאַט",
|
|
@@ -202,5 +205,5 @@
|
|
|
202
205
|
"searchTerms.code": "קאָד",
|
|
203
206
|
"searchTerms.snippet": "שניצל",
|
|
204
207
|
"searchTerms.program": "פּראָגראַם",
|
|
205
|
-
"searchTerms.pre": "
|
|
208
|
+
"searchTerms.pre": "פֿאָרמאַטירט"
|
|
206
209
|
}
|
|
@@ -25,8 +25,8 @@
|
|
|
25
25
|
"tools.marker.textColor": "文字",
|
|
26
26
|
"tools.marker.background": "背景",
|
|
27
27
|
"tools.marker.default": "默认",
|
|
28
|
-
"tools.colorPicker.defaultSwatchLabel": "{
|
|
29
|
-
"tools.colorPicker.colorSwatchLabel": "{
|
|
28
|
+
"tools.colorPicker.defaultSwatchLabel": "{mode} {default}",
|
|
29
|
+
"tools.colorPicker.colorSwatchLabel": "{mode} {color}",
|
|
30
30
|
"tools.colorPicker.color.gray": "灰色",
|
|
31
31
|
"tools.colorPicker.color.brown": "棕色",
|
|
32
32
|
"tools.colorPicker.color.orange": "橙色",
|
|
@@ -55,6 +55,9 @@
|
|
|
55
55
|
"tools.toggle.ariaLabelCollapse": "折叠",
|
|
56
56
|
"tools.toggle.ariaLabelExpand": "展开",
|
|
57
57
|
"blockSettings.delete": "删除",
|
|
58
|
+
"blockSettings.copyLink": "复制块链接",
|
|
59
|
+
"blockSettings.lastEdited": "上次编辑",
|
|
60
|
+
"blockSettings.lastEditedBy": "{name} 上次编辑",
|
|
58
61
|
"a11y.dragHandle": "拖动移动或点击打开菜单",
|
|
59
62
|
"a11y.dragHandleRole": "拖动控件",
|
|
60
63
|
"a11y.dragStarted": "正在拖动内容块",
|
|
@@ -151,8 +154,8 @@
|
|
|
151
154
|
"tools.database.cardTitlePlaceholder": "空白页面",
|
|
152
155
|
"tools.database.columnTitlePlaceholder": "列",
|
|
153
156
|
"tools.database.deleteCard": "删除卡片",
|
|
154
|
-
"tools.database.editCardTitle": "
|
|
155
|
-
"tools.database.cardMenuLabel": "
|
|
157
|
+
"tools.database.editCardTitle": "编辑标题",
|
|
158
|
+
"tools.database.cardMenuLabel": "卡片选项",
|
|
156
159
|
"tools.database.deleteColumn": "删除列",
|
|
157
160
|
"tools.database.emptyColumn": "没有卡片",
|
|
158
161
|
"tools.database.rowTitlePlaceholder": "空白页面",
|
|
@@ -202,5 +205,5 @@
|
|
|
202
205
|
"searchTerms.code": "代码",
|
|
203
206
|
"searchTerms.snippet": "片段",
|
|
204
207
|
"searchTerms.program": "程序",
|
|
205
|
-
"searchTerms.pre": "
|
|
208
|
+
"searchTerms.pre": "预格式化"
|
|
206
209
|
}
|
|
@@ -208,27 +208,8 @@ export class CodeInlineTool implements InlineTool {
|
|
|
208
208
|
continue;
|
|
209
209
|
}
|
|
210
210
|
|
|
211
|
-
const keepTrailing = node.textContent.endsWith('\u00A0') && this.isEffectivelyLastChild(node);
|
|
212
|
-
|
|
213
211
|
node.textContent = node.textContent.replace(/\u00A0/g, ' ');
|
|
214
|
-
|
|
215
|
-
if (keepTrailing) {
|
|
216
|
-
node.textContent = node.textContent.slice(0, -1) + '\u00A0';
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
/**
|
|
222
|
-
* Check whether all siblings after a node are empty
|
|
223
|
-
*/
|
|
224
|
-
private isEffectivelyLastChild(node: Node): boolean {
|
|
225
|
-
const next = node.nextSibling;
|
|
226
|
-
|
|
227
|
-
if (!next) {
|
|
228
|
-
return true;
|
|
229
212
|
}
|
|
230
|
-
|
|
231
|
-
return (next.textContent ?? '').length === 0 && this.isEffectivelyLastChild(next);
|
|
232
213
|
}
|
|
233
214
|
|
|
234
215
|
/**
|
|
@@ -196,7 +196,9 @@ export class ItalicInlineTool implements InlineTool {
|
|
|
196
196
|
}
|
|
197
197
|
|
|
198
198
|
/**
|
|
199
|
-
* Replace non-breaking spaces (\u00A0) with regular spaces in all text nodes of an element
|
|
199
|
+
* Replace non-breaking spaces (\u00A0) with regular spaces in all text nodes of an element.
|
|
200
|
+
* The browser's contenteditable engine will re-insert nbsp where needed for rendering
|
|
201
|
+
* (e.g. trailing spaces, consecutive spaces) on the next input event.
|
|
200
202
|
* @param element - The element to normalize
|
|
201
203
|
*/
|
|
202
204
|
private normalizeNbspInElement(element: HTMLElement): void {
|
|
@@ -212,27 +214,8 @@ export class ItalicInlineTool implements InlineTool {
|
|
|
212
214
|
continue;
|
|
213
215
|
}
|
|
214
216
|
|
|
215
|
-
const keepTrailing = node.textContent.endsWith('\u00A0') && this.isEffectivelyLastChild(node);
|
|
216
|
-
|
|
217
217
|
node.textContent = node.textContent.replace(/\u00A0/g, ' ');
|
|
218
|
-
|
|
219
|
-
if (keepTrailing) {
|
|
220
|
-
node.textContent = node.textContent.slice(0, -1) + '\u00A0';
|
|
221
|
-
}
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
/**
|
|
226
|
-
* Check whether all siblings after a node are empty
|
|
227
|
-
*/
|
|
228
|
-
private isEffectivelyLastChild(node: Node): boolean {
|
|
229
|
-
const next = node.nextSibling;
|
|
230
|
-
|
|
231
|
-
if (!next) {
|
|
232
|
-
return true;
|
|
233
218
|
}
|
|
234
|
-
|
|
235
|
-
return (next.textContent ?? '').length === 0 && this.isEffectivelyLastChild(next);
|
|
236
219
|
}
|
|
237
220
|
|
|
238
221
|
/**
|
|
@@ -209,27 +209,8 @@ export class StrikethroughInlineTool implements InlineTool {
|
|
|
209
209
|
continue;
|
|
210
210
|
}
|
|
211
211
|
|
|
212
|
-
const keepTrailing = node.textContent.endsWith('\u00A0') && this.isEffectivelyLastChild(node);
|
|
213
|
-
|
|
214
212
|
node.textContent = node.textContent.replace(/\u00A0/g, ' ');
|
|
215
|
-
|
|
216
|
-
if (keepTrailing) {
|
|
217
|
-
node.textContent = node.textContent.slice(0, -1) + '\u00A0';
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
/**
|
|
223
|
-
* Check whether all siblings after a node are empty
|
|
224
|
-
*/
|
|
225
|
-
private isEffectivelyLastChild(node: Node): boolean {
|
|
226
|
-
const next = node.nextSibling;
|
|
227
|
-
|
|
228
|
-
if (!next) {
|
|
229
|
-
return true;
|
|
230
213
|
}
|
|
231
|
-
|
|
232
|
-
return (next.textContent ?? '').length === 0 && this.isEffectivelyLastChild(next);
|
|
233
214
|
}
|
|
234
215
|
|
|
235
216
|
/**
|
|
@@ -209,27 +209,8 @@ export class UnderlineInlineTool implements InlineTool {
|
|
|
209
209
|
continue;
|
|
210
210
|
}
|
|
211
211
|
|
|
212
|
-
const keepTrailing = node.textContent.endsWith('\u00A0') && this.isEffectivelyLastChild(node);
|
|
213
|
-
|
|
214
212
|
node.textContent = node.textContent.replace(/\u00A0/g, ' ');
|
|
215
|
-
|
|
216
|
-
if (keepTrailing) {
|
|
217
|
-
node.textContent = node.textContent.slice(0, -1) + '\u00A0';
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
/**
|
|
223
|
-
* Check whether all siblings after a node are empty
|
|
224
|
-
*/
|
|
225
|
-
private isEffectivelyLastChild(node: Node): boolean {
|
|
226
|
-
const next = node.nextSibling;
|
|
227
|
-
|
|
228
|
-
if (!next) {
|
|
229
|
-
return true;
|
|
230
213
|
}
|
|
231
|
-
|
|
232
|
-
return (next.textContent ?? '').length === 0 && this.isEffectivelyLastChild(next);
|
|
233
214
|
}
|
|
234
215
|
|
|
235
216
|
/**
|
|
@@ -202,9 +202,6 @@ export class BoldNormalizationPass {
|
|
|
202
202
|
|
|
203
203
|
/**
|
|
204
204
|
* Replace non-breaking spaces with regular spaces in a text node.
|
|
205
|
-
* Preserves a trailing \u00A0 when the text node is the last child of its
|
|
206
|
-
* parent, because converting it to a regular space (char 32) would make it
|
|
207
|
-
* invisible under CSS white-space:normal.
|
|
208
205
|
* @param textNode - The text node to process
|
|
209
206
|
*/
|
|
210
207
|
private replaceNbspInTextNode(textNode: Text): void {
|
|
@@ -214,13 +211,8 @@ export class BoldNormalizationPass {
|
|
|
214
211
|
return;
|
|
215
212
|
}
|
|
216
213
|
|
|
217
|
-
const keepTrailing = text.endsWith('\u00A0') && BoldNormalizationPass.isEffectivelyLastChild(textNode);
|
|
218
|
-
const replaced = text.replace(/\u00A0/g, ' ');
|
|
219
|
-
|
|
220
214
|
// eslint-disable-next-line no-param-reassign
|
|
221
|
-
textNode.textContent =
|
|
222
|
-
? replaced.slice(0, -1) + '\u00A0'
|
|
223
|
-
: replaced;
|
|
215
|
+
textNode.textContent = text.replace(/\u00A0/g, ' ');
|
|
224
216
|
}
|
|
225
217
|
|
|
226
218
|
/**
|
|
@@ -285,26 +277,6 @@ export class BoldNormalizationPass {
|
|
|
285
277
|
rightStrong.remove();
|
|
286
278
|
}
|
|
287
279
|
|
|
288
|
-
/**
|
|
289
|
-
* Check whether all siblings after a node are empty (zero-length text nodes
|
|
290
|
-
* or empty elements). The unbold process can leave behind empty text nodes
|
|
291
|
-
* which would cause `!node.nextSibling` to return false even though the node
|
|
292
|
-
* is effectively the last meaningful child.
|
|
293
|
-
*/
|
|
294
|
-
private static isEffectivelyLastChild(node: Node): boolean {
|
|
295
|
-
const next = node.nextSibling;
|
|
296
|
-
|
|
297
|
-
if (!next) {
|
|
298
|
-
return true;
|
|
299
|
-
}
|
|
300
|
-
|
|
301
|
-
if ((next.textContent ?? '').length > 0) {
|
|
302
|
-
return false;
|
|
303
|
-
}
|
|
304
|
-
|
|
305
|
-
return BoldNormalizationPass.isEffectivelyLastChild(next);
|
|
306
|
-
}
|
|
307
|
-
|
|
308
280
|
/**
|
|
309
281
|
* Find the appropriate scope element from a selection
|
|
310
282
|
* @param selection - The current selection
|
|
@@ -91,14 +91,20 @@ export class KeyboardNavigation extends BlockEventComposer {
|
|
|
91
91
|
return;
|
|
92
92
|
}
|
|
93
93
|
|
|
94
|
-
event.shiftKey ? Caret.navigatePrevious(true) : Caret.navigateNext(true);
|
|
94
|
+
const isNavigated = event.shiftKey ? Caret.navigatePrevious(true) : Caret.navigateNext(true);
|
|
95
95
|
|
|
96
96
|
/**
|
|
97
|
-
*
|
|
98
|
-
*
|
|
99
|
-
*
|
|
97
|
+
* Prevent default Tab behaviour only when navigation occurred within the
|
|
98
|
+
* editor. When navigateNext/navigatePrevious returns false (no next/prev
|
|
99
|
+
* block), allow the browser default so focus can leave the editor to
|
|
100
|
+
* external elements (e.g. inputs after the editor).
|
|
101
|
+
*
|
|
102
|
+
* Nested editors (e.g. database card drawer) are safe because the table
|
|
103
|
+
* cell guard above returns early, and those editors handle Tab themselves.
|
|
100
104
|
*/
|
|
101
|
-
|
|
105
|
+
if (isNavigated) {
|
|
106
|
+
event.preventDefault();
|
|
107
|
+
}
|
|
102
108
|
}
|
|
103
109
|
|
|
104
110
|
/**
|
|
@@ -463,9 +463,9 @@ export class BlockSettings extends Module<BlockSettingsNodes> {
|
|
|
463
463
|
label.setAttribute('data-edit-meta-label', '');
|
|
464
464
|
|
|
465
465
|
if (block.lastEditedBy !== null && block.lastEditedBy !== undefined) {
|
|
466
|
-
label.textContent =
|
|
466
|
+
label.textContent = this.Blok.I18n.t('blockSettings.lastEditedBy', { name: block.lastEditedBy });
|
|
467
467
|
} else {
|
|
468
|
-
label.textContent = '
|
|
468
|
+
label.textContent = this.Blok.I18n.t('blockSettings.lastEdited');
|
|
469
469
|
}
|
|
470
470
|
|
|
471
471
|
container.appendChild(label);
|
|
@@ -205,6 +205,7 @@ export class UI extends Module<UINodes> {
|
|
|
205
205
|
});
|
|
206
206
|
this.keyboardController.state = this.Blok;
|
|
207
207
|
this.keyboardController.setRedactorElement(this.nodes.redactor);
|
|
208
|
+
this.keyboardController.setWrapperElement(this.nodes.wrapper);
|
|
208
209
|
|
|
209
210
|
/**
|
|
210
211
|
* Selection controller needs wrapper element for click detection
|
|
@@ -29,6 +29,20 @@ export class KeyboardController extends Controller {
|
|
|
29
29
|
*/
|
|
30
30
|
private redactorElement: HTMLElement | null = null;
|
|
31
31
|
|
|
32
|
+
/**
|
|
33
|
+
* The editor wrapper element for editor boundary checks.
|
|
34
|
+
* Stored directly because the keyboard controller's Blok reference
|
|
35
|
+
* (created by getModulesDiff) does not include the UI module itself.
|
|
36
|
+
*/
|
|
37
|
+
private wrapperElement: HTMLElement | null = null;
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Flag set when the controller is disabled (editor destroyed or read-only).
|
|
41
|
+
* Used instead of checking this.Blok.UI which is unavailable to controllers
|
|
42
|
+
* owned by the UI module (getModulesDiff excludes the owning module).
|
|
43
|
+
*/
|
|
44
|
+
private isDisabled = false;
|
|
45
|
+
|
|
32
46
|
/**
|
|
33
47
|
* Stable handler references for deduplication via Listeners.findOne.
|
|
34
48
|
* Storing as class properties ensures the same function reference is passed
|
|
@@ -61,7 +75,7 @@ export class KeyboardController extends Controller {
|
|
|
61
75
|
if (target instanceof Element) {
|
|
62
76
|
const closestEditor = target.closest('[data-blok-testid="blok-editor"]');
|
|
63
77
|
|
|
64
|
-
if (closestEditor !== null && closestEditor !== this.
|
|
78
|
+
if (closestEditor !== null && closestEditor !== this.wrapperElement) {
|
|
65
79
|
return;
|
|
66
80
|
}
|
|
67
81
|
}
|
|
@@ -87,6 +101,13 @@ export class KeyboardController extends Controller {
|
|
|
87
101
|
this.redactorElement = element;
|
|
88
102
|
}
|
|
89
103
|
|
|
104
|
+
/**
|
|
105
|
+
* Set the editor wrapper element for editor boundary checks
|
|
106
|
+
*/
|
|
107
|
+
public setWrapperElement(element: HTMLElement): void {
|
|
108
|
+
this.wrapperElement = element;
|
|
109
|
+
}
|
|
110
|
+
|
|
90
111
|
/**
|
|
91
112
|
* Enable keyboard event listeners
|
|
92
113
|
*/
|
|
@@ -95,6 +116,8 @@ export class KeyboardController extends Controller {
|
|
|
95
116
|
return;
|
|
96
117
|
}
|
|
97
118
|
|
|
119
|
+
this.isDisabled = false;
|
|
120
|
+
|
|
98
121
|
// Document-level keydown handler
|
|
99
122
|
this.readOnlyMutableListeners.on(document, 'keydown', this.documentKeydownHandler, true);
|
|
100
123
|
|
|
@@ -112,27 +135,54 @@ export class KeyboardController extends Controller {
|
|
|
112
135
|
this.readOnlyMutableListeners.on(this.redactorElement, 'keydown', this.redactorKeydownHandler, true);
|
|
113
136
|
}
|
|
114
137
|
|
|
138
|
+
/**
|
|
139
|
+
* Disable the controller — marks it as inactive so stale handlers bail out.
|
|
140
|
+
*/
|
|
141
|
+
public override disable(): void {
|
|
142
|
+
this.isDisabled = true;
|
|
143
|
+
super.disable();
|
|
144
|
+
}
|
|
145
|
+
|
|
115
146
|
/**
|
|
116
147
|
* Main keyboard event router
|
|
117
148
|
* @param event - keyboard event
|
|
118
149
|
*/
|
|
119
150
|
private handleKeydown(event: KeyboardEvent): void {
|
|
151
|
+
/**
|
|
152
|
+
* Guard against destroyed or disabled editor instances whose listeners
|
|
153
|
+
* were not properly removed. When the controller is disabled the handler
|
|
154
|
+
* bails out early so it does not throw or interfere with other editors.
|
|
155
|
+
*/
|
|
156
|
+
if (this.isDisabled) {
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
|
|
120
160
|
const target = event.target;
|
|
161
|
+
const key = event.key ?? '';
|
|
121
162
|
|
|
163
|
+
/**
|
|
164
|
+
* Skip input/textarea targets for most keys to avoid intercepting normal
|
|
165
|
+
* typing. Escape is exempted only for inputs inside popovers (e.g. the
|
|
166
|
+
* search input) so the keyboard controller can close the popover.
|
|
167
|
+
* Inputs elsewhere (e.g. database title edit inputs) keep their own
|
|
168
|
+
* Escape handling.
|
|
169
|
+
*/
|
|
122
170
|
if (target instanceof HTMLInputElement || target instanceof HTMLTextAreaElement) {
|
|
123
|
-
|
|
171
|
+
const isInsidePopover = target.closest('[data-blok-popover]') !== null;
|
|
172
|
+
|
|
173
|
+
if (key !== 'Escape' || !isInsidePopover) {
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
124
176
|
}
|
|
125
177
|
|
|
126
178
|
if (target instanceof Element) {
|
|
127
179
|
const closestEditor = target.closest('[data-blok-testid="blok-editor"]');
|
|
128
180
|
|
|
129
|
-
if (closestEditor !== null && closestEditor !== this.
|
|
181
|
+
if (closestEditor !== null && closestEditor !== this.wrapperElement) {
|
|
130
182
|
return;
|
|
131
183
|
}
|
|
132
184
|
}
|
|
133
185
|
|
|
134
|
-
const key = event.key ?? '';
|
|
135
|
-
|
|
136
186
|
switch (key) {
|
|
137
187
|
case 'Enter':
|
|
138
188
|
this.handleEnter(event);
|
package/src/styles/main.css
CHANGED
|
@@ -967,6 +967,8 @@
|
|
|
967
967
|
--blok-database-card-shadow: 0 1px 2px rgba(0, 0, 0, 0.2);
|
|
968
968
|
--blok-database-card-shadow-hover: 0 4px 12px rgba(0, 0, 0, 0.45);
|
|
969
969
|
--blok-database-card-border: rgba(255, 255, 255, 0.06);
|
|
970
|
+
--blok-database-card-border-active: rgba(35, 131, 226, 0.7);
|
|
971
|
+
--blok-database-card-placeholder: rgba(255, 255, 255, 0.3);
|
|
970
972
|
--blok-database-card-colored-overlay: rgba(255, 255, 255, 0.06);
|
|
971
973
|
--blok-database-card-colored-overlay-hover: rgba(255, 255, 255, 0.11);
|
|
972
974
|
--blok-database-card-colored-border: rgba(255, 255, 255, 0.07);
|
|
@@ -995,6 +997,7 @@
|
|
|
995
997
|
--blok-checklist-border: rgba(255, 255, 255, 0.22);
|
|
996
998
|
--blok-checklist-shadow: rgba(0, 0, 0, 0.3);
|
|
997
999
|
--blok-checklist-hover-ring: rgba(82, 156, 202, 0.2);
|
|
1000
|
+
--blok-checklist-readonly-fill: #475569;
|
|
998
1001
|
|
|
999
1002
|
/* Color picker swatch */
|
|
1000
1003
|
--blok-swatch-neutral-bg: #3a3a38;
|