@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.
Files changed (226) hide show
  1. package/dist/blok.mjs +2 -2
  2. package/dist/chunks/{blok-NcdNQ0I6.mjs → blok-DSP5zC_s.mjs} +141 -112
  3. package/dist/chunks/{constants-DtfShkXT.mjs → constants-B0Tns0mh.mjs} +1 -1
  4. package/dist/chunks/{i18next-loader-D32EUWLr.mjs → i18next-loader-D_v0EmDP.mjs} +1 -1
  5. package/dist/chunks/{lightweight-i18n-DpkvRXEd.mjs → lightweight-i18n-DTYoSr_o.mjs} +2 -0
  6. package/dist/chunks/{messages-CGFlOwst.mjs → messages--X-ZzYSb.mjs} +8 -5
  7. package/dist/{messages-DQ1icG7L.mjs → chunks/messages--tSqMtkx2.mjs} +8 -5
  8. package/dist/{messages-bh8BiOee2.mjs → chunks/messages-3w1e16T2.mjs} +9 -6
  9. package/dist/{messages-C6yKu_PJ.mjs → chunks/messages-B5BaA6AV.mjs} +8 -5
  10. package/dist/chunks/{messages-D_kZN9rB.mjs → messages-B5ZVSxG4.mjs} +9 -6
  11. package/dist/{messages-Di3-WVzq.mjs → chunks/messages-B9PUHq4t.mjs} +8 -5
  12. package/dist/{messages-BLfK27kX.mjs → chunks/messages-BAxCMQgm.mjs} +8 -5
  13. package/dist/{messages-Dl0bfeA-.mjs → chunks/messages-BDhWRN6Y.mjs} +9 -6
  14. package/dist/chunks/{messages-Cfbmwdep2.mjs → messages-BGpx2ecP2.mjs} +8 -5
  15. package/dist/{messages-D6RYu9JW2.mjs → chunks/messages-BHUQs6402.mjs} +8 -5
  16. package/dist/{messages-gZEhkRrR2.mjs → chunks/messages-BIXCvkbG.mjs} +8 -5
  17. package/dist/chunks/{messages-RiqdVwuN2.mjs → messages-BKeL1zk-2.mjs} +8 -5
  18. package/dist/{messages-BCMFYqKc2.mjs → chunks/messages-Bedied602.mjs} +8 -5
  19. package/dist/chunks/{messages-BJNFCDv42.mjs → messages-Bg8uBETk2.mjs} +8 -5
  20. package/dist/{messages-BLW2GX7J2.mjs → chunks/messages-Blg1X6YL.mjs} +8 -5
  21. package/dist/{messages-BwttyHDI2.mjs → chunks/messages-BmDMK9Dg.mjs} +8 -5
  22. package/dist/chunks/{messages-ChayV9WY2.mjs → messages-BmDw1fZF2.mjs} +8 -5
  23. package/dist/{messages-C-8qb9sf2.mjs → chunks/messages-BqKIunt0.mjs} +8 -5
  24. package/dist/{messages-CVMngZNA.mjs → chunks/messages-BszGK0ox.mjs} +10 -7
  25. package/dist/{messages-B4zPxKl62.mjs → chunks/messages-Buwm8xrX2.mjs} +8 -5
  26. package/dist/chunks/{messages-CGPxUESo.mjs → messages-BvoElEE_.mjs} +8 -5
  27. package/dist/{messages-BPw_x-6H.mjs → chunks/messages-ByHXyVi6.mjs} +7 -4
  28. package/dist/chunks/{messages-CGLTjtRv2.mjs → messages-C9HPruJj2.mjs} +8 -5
  29. package/dist/{messages-D8U5D391.mjs → chunks/messages-CDtmVcBc.mjs} +11 -8
  30. package/dist/{messages-CLZoy5fQ.mjs → chunks/messages-CEWKcK-Q.mjs} +7 -4
  31. package/dist/chunks/{messages-D9syZVGi2.mjs → messages-CRLvJfNU2.mjs} +6 -3
  32. package/dist/chunks/{messages-BBe45sPH.mjs → messages-CXjSY5Fy.mjs} +8 -5
  33. package/dist/{messages-DfqM_XvD.mjs → chunks/messages-CdWS0hvw.mjs} +16 -13
  34. package/dist/chunks/{messages-H6vLy8wJ.mjs → messages-Cic0Y1z6.mjs} +8 -5
  35. package/dist/{messages-DwiykEgr2.mjs → chunks/messages-CmGixnBb2.mjs} +8 -5
  36. package/dist/{messages-C67YUZ9-.mjs → chunks/messages-CrCalcxK.mjs} +8 -5
  37. package/dist/{messages-VrQw3tQ62.mjs → chunks/messages-D3wlt9eE.mjs} +6 -3
  38. package/dist/chunks/{messages-DkP3Jf4F.mjs → messages-D5NWb-B9.mjs} +7 -4
  39. package/dist/chunks/{messages-DSbI0vJf.mjs → messages-D5lY22F4.mjs} +8 -5
  40. package/dist/{messages-BSNsrZVN.mjs → chunks/messages-DGYjioKM.mjs} +10 -7
  41. package/dist/{messages-D8dO6OMN.mjs → chunks/messages-DIH2U0ZD.mjs} +16 -13
  42. package/dist/{messages-5wuR90qS.mjs → chunks/messages-DIUegdwv2.mjs} +8 -5
  43. package/dist/chunks/{messages-Ci7UXRVI2.mjs → messages-DKZHsfXy2.mjs} +9 -6
  44. package/dist/{messages-CFUBJfnf.mjs → chunks/messages-DKjUcEfs.mjs} +8 -5
  45. package/dist/chunks/{messages-DjSuq0-y2.mjs → messages-DOPK-Xif2.mjs} +8 -5
  46. package/dist/chunks/{messages-AD17iDBx.mjs → messages-DSMFg80t.mjs} +9 -6
  47. package/dist/{messages-DCdP2ujL.mjs → chunks/messages-DT6eM0I22.mjs} +6 -3
  48. package/dist/chunks/{messages-wYQksm10.mjs → messages-DZTQIS9F.mjs} +8 -5
  49. package/dist/chunks/{messages-VtfKWZ2S.mjs → messages-DalLfJNC.mjs} +8 -5
  50. package/dist/{messages-DzknMM7W.mjs → chunks/messages-DggaAu362.mjs} +8 -5
  51. package/dist/chunks/{messages-oXBbHW9A.mjs → messages-DgoJDjHm.mjs} +8 -5
  52. package/dist/chunks/{messages-Br6bE1FD2.mjs → messages-DhgEjOjw2.mjs} +9 -6
  53. package/dist/{messages-PyOr_YgV.mjs → chunks/messages-Dk-d3mmM.mjs} +6 -3
  54. package/dist/{messages-Do3mHd9U.mjs → chunks/messages-DlTG06-j.mjs} +9 -6
  55. package/dist/{messages-CR4gHjd82.mjs → chunks/messages-Dle6Hv30.mjs} +6 -3
  56. package/dist/{messages-DB4UKN8D.mjs → chunks/messages-DoD9yWMu2.mjs} +6 -3
  57. package/dist/{messages-KVerxvZC.mjs → chunks/messages-DpnhbDoK2.mjs} +8 -5
  58. package/dist/chunks/{messages-Cxy_E2IS.mjs → messages-DqGv-lj6.mjs} +8 -5
  59. package/dist/chunks/{messages-VlEyFUxF2.mjs → messages-DslnYTHU2.mjs} +8 -5
  60. package/dist/{messages-OOiDDmVw.mjs → chunks/messages-IjEU7XAq.mjs} +8 -5
  61. package/dist/chunks/{messages-DRJxSTqs.mjs → messages-JRjsu_bC.mjs} +9 -6
  62. package/dist/{messages-DUYxMxrQ2.mjs → chunks/messages-PkO_43Eb.mjs} +8 -5
  63. package/dist/chunks/{messages-fbL5y58u2.mjs → messages-W2zpf0Mu2.mjs} +8 -5
  64. package/dist/chunks/{messages-C85zv_7x.mjs → messages-adEATsLK.mjs} +7 -4
  65. package/dist/{messages-BORkMoil2.mjs → chunks/messages-b8XGiuAa2.mjs} +7 -4
  66. package/dist/chunks/{messages-zWqsggJh.mjs → messages-bteFpBer.mjs} +8 -5
  67. package/dist/chunks/{messages-YbckahVx2.mjs → messages-cR48x2Aq2.mjs} +8 -5
  68. package/dist/chunks/{messages-C7Pjof0d2.mjs → messages-f-YBthdd2.mjs} +8 -5
  69. package/dist/{messages-Cd5CW5Tt.mjs → chunks/messages-fUpUvsRN.mjs} +9 -6
  70. package/dist/chunks/{messages-OSP4Hj5o.mjs → messages-gNK1EolD.mjs} +9 -6
  71. package/dist/{messages-DA4T9WBe.mjs → chunks/messages-vqR3RAU4.mjs} +8 -5
  72. package/dist/chunks/{messages-Bop7vrhU.mjs → messages-wSX_4fK1.mjs} +8 -5
  73. package/dist/chunks/{tools-DMSi-3RW.mjs → tools-KZmhOKEo.mjs} +8 -43
  74. package/dist/full.mjs +3 -3
  75. package/dist/locales.mjs +69 -67
  76. package/dist/{chunks/messages-CPFB2_m-2.mjs → messages--zgIPYtb.mjs} +6 -3
  77. package/dist/{chunks/messages-THR8q8bJ.mjs → messages-4jULpVvw.mjs} +16 -13
  78. package/dist/{chunks/messages-CNaaqQVz.mjs → messages-AbwSlRf_.mjs} +10 -7
  79. package/dist/{messages-BrYeJsSE2.mjs → messages-B-dl7Pwb2.mjs} +9 -6
  80. package/dist/{messages-B_UKuqrH.mjs → messages-B3rCRhb1.mjs} +8 -5
  81. package/dist/{chunks/messages-CCEgR9GN2.mjs → messages-B73L8nKc2.mjs} +8 -5
  82. package/dist/{messages-9L4qqCKh2.mjs → messages-BAjsD2Vm2.mjs} +8 -5
  83. package/dist/{messages-C34dTwF72.mjs → messages-BBodSb5B2.mjs} +8 -5
  84. package/dist/{chunks/messages-O6FOfUgF.mjs → messages-BTpn6H9x2.mjs} +6 -3
  85. package/dist/{chunks/messages-Cql2ozf_2.mjs → messages-BWb0GjTj2.mjs} +8 -5
  86. package/dist/{messages-ELvF3qMl2.mjs → messages-BbCgnri12.mjs} +8 -5
  87. package/dist/{messages-DqDlcEPn.mjs → messages-Bfon_Y3q.mjs} +9 -6
  88. package/dist/{messages-WsUHzXMu2.mjs → messages-BhOtow9J2.mjs} +8 -5
  89. package/dist/{messages-6eX0fWGR2.mjs → messages-BoB7m0uu2.mjs} +9 -6
  90. package/dist/{chunks/messages-C3X7dv3f.mjs → messages-BsOZPjeg.mjs} +8 -5
  91. package/dist/{chunks/messages-vDgsEqQW2.mjs → messages-BuzKUYPV.mjs} +8 -5
  92. package/dist/{chunks/messages-BjyYZeBm2.mjs → messages-BzOKMdMQ.mjs} +6 -3
  93. package/dist/{messages-CxZarWTm2.mjs → messages-C2H3PeQW2.mjs} +8 -5
  94. package/dist/{messages-D0eT_eWA.mjs → messages-C5KNzSTk.mjs} +8 -5
  95. package/dist/{messages-CNGwdIEz.mjs → messages-CIDYjE6l.mjs} +8 -5
  96. package/dist/{chunks/messages-CTdSIOAc.mjs → messages-CJmyF5ye.mjs} +7 -4
  97. package/dist/{chunks/messages-CDSyoUft.mjs → messages-CTwiYb2a2.mjs} +6 -3
  98. package/dist/{messages-BM2kx9Td.mjs → messages-CUHoJaDO.mjs} +8 -5
  99. package/dist/{messages-DPFuzIdF2.mjs → messages-CVeuqUjQ2.mjs} +8 -5
  100. package/dist/{chunks/messages-C7sBaZOO2.mjs → messages-CW75b4sz.mjs} +8 -5
  101. package/dist/{chunks/messages-DVvrZRyZ.mjs → messages-CXd7YeWV.mjs} +8 -5
  102. package/dist/{chunks/messages-CXVWb9js.mjs → messages-CjlYkunD.mjs} +8 -5
  103. package/dist/{chunks/messages-B8hICx3L.mjs → messages-CrGx64yd.mjs} +9 -6
  104. package/dist/{messages-0lOPMv8u.mjs → messages-Ct0jbgHd.mjs} +8 -5
  105. package/dist/{chunks/messages-DpydMd36.mjs → messages-CtKrCYD1.mjs} +8 -5
  106. package/dist/{chunks/messages-B03yUEra2.mjs → messages-Cu2eLjfJ.mjs} +8 -5
  107. package/dist/{chunks/messages-dpXwA3Sz.mjs → messages-CvwQ-fK_2.mjs} +8 -5
  108. package/dist/{chunks/messages-zQOpKjl3.mjs → messages-Cy6UYN9b.mjs} +6 -3
  109. package/dist/{messages-CrjQ2Op0.mjs → messages-D01vnfA9.mjs} +8 -5
  110. package/dist/{chunks/messages-C-EBhOHE.mjs → messages-D0BAV45W.mjs} +8 -5
  111. package/dist/{messages-DxEiqa-B.mjs → messages-D5LGpdga.mjs} +9 -6
  112. package/dist/{chunks/messages-D9uWAWjW.mjs → messages-DATK4ftv.mjs} +9 -6
  113. package/dist/{messages-aoO_TtoE2.mjs → messages-DEl77Urv2.mjs} +9 -6
  114. package/dist/{messages-BRY51SEw2.mjs → messages-DHNjM2nv2.mjs} +6 -3
  115. package/dist/{chunks/messages-ZhHLC6dk.mjs → messages-DMW8b_sO.mjs} +8 -5
  116. package/dist/{messages-tb1FD_ge.mjs → messages-DNmgANKr.mjs} +7 -4
  117. package/dist/{chunks/messages-DY8zPIZW.mjs → messages-DQaa3cEM.mjs} +9 -6
  118. package/dist/{messages-DT7dwzEe.mjs → messages-DSlD4bV9.mjs} +8 -5
  119. package/dist/{messages-Dxr1BBvo.mjs → messages-DTzbkXFt.mjs} +8 -5
  120. package/dist/{chunks/messages-SP659Sal2.mjs → messages-DbZihxtV.mjs} +8 -5
  121. package/dist/{messages-Cv1PSaNk.mjs → messages-DeE8fyKQ.mjs} +8 -5
  122. package/dist/{chunks/messages-DtZ9U9g72.mjs → messages-Dg-TpO2S2.mjs} +8 -5
  123. package/dist/{chunks/messages-BouFtpfO.mjs → messages-DgP82LzF.mjs} +7 -4
  124. package/dist/{messages-CA6J_QoC.mjs → messages-Dh3Vt7WC.mjs} +7 -4
  125. package/dist/{chunks/messages-bFEdH3lv.mjs → messages-DiVVyZD22.mjs} +9 -6
  126. package/dist/{chunks/messages-DoPdy75l.mjs → messages-DpRnGjoe.mjs} +10 -7
  127. package/dist/{messages-Dx5n6MLQ2.mjs → messages-DqZmrFaa2.mjs} +8 -5
  128. package/dist/{chunks/messages-oPV2oMxM.mjs → messages-Dra9Fz5Q.mjs} +11 -8
  129. package/dist/{chunks/messages-CpXvyGWv2.mjs → messages-DuPBRgEF2.mjs} +7 -4
  130. package/dist/{messages-JVJdC0Er2.mjs → messages-DuxEyAY-2.mjs} +9 -6
  131. package/dist/{chunks/messages-BGmvvtg_.mjs → messages-FmJD6lHR2.mjs} +8 -5
  132. package/dist/{chunks/messages-HzH9_QH8.mjs → messages-ONielGl92.mjs} +8 -5
  133. package/dist/{chunks/messages-B2dU00Z3.mjs → messages-RzgUqCGb2.mjs} +8 -5
  134. package/dist/{messages-CLUBh7O_.mjs → messages-U22AKGKs.mjs} +8 -5
  135. package/dist/{messages-BKXjO3NH.mjs → messages-XufeeRfO.mjs} +8 -5
  136. package/dist/{chunks/messages-yGedmr61.mjs → messages-fprUm7SO2.mjs} +8 -5
  137. package/dist/{chunks/messages-BCifzMVO2.mjs → messages-gFNdz3Tn2.mjs} +8 -5
  138. package/dist/{chunks/messages-BcHZf9o-.mjs → messages-h_n5GBm6.mjs} +16 -13
  139. package/dist/{messages-ZHgPRUj02.mjs → messages-oOogIpsL2.mjs} +8 -5
  140. package/dist/{messages-D_V0kHD7.mjs → messages-otwg3KcK.mjs} +8 -5
  141. package/dist/{chunks/messages-BNy4e7Xl.mjs → messages-rDDoBMWb.mjs} +8 -5
  142. package/dist/{messages-hya8YLMj.mjs → messages-trQPxZIu.mjs} +8 -5
  143. package/dist/react.mjs +2 -2
  144. package/dist/tools.mjs +2 -2
  145. package/package.json +1 -1
  146. package/src/blok.ts +55 -0
  147. package/src/components/i18n/locales/am/messages.json +8 -5
  148. package/src/components/i18n/locales/ar/messages.json +8 -5
  149. package/src/components/i18n/locales/az/messages.json +8 -5
  150. package/src/components/i18n/locales/bg/messages.json +7 -4
  151. package/src/components/i18n/locales/bn/messages.json +8 -5
  152. package/src/components/i18n/locales/bs/messages.json +10 -7
  153. package/src/components/i18n/locales/cs/messages.json +9 -6
  154. package/src/components/i18n/locales/da/messages.json +9 -6
  155. package/src/components/i18n/locales/de/messages.json +9 -6
  156. package/src/components/i18n/locales/dv/messages.json +8 -5
  157. package/src/components/i18n/locales/el/messages.json +8 -5
  158. package/src/components/i18n/locales/en/messages.json +2 -0
  159. package/src/components/i18n/locales/es/messages.json +9 -6
  160. package/src/components/i18n/locales/et/messages.json +7 -4
  161. package/src/components/i18n/locales/fa/messages.json +8 -5
  162. package/src/components/i18n/locales/fi/messages.json +8 -5
  163. package/src/components/i18n/locales/fil/messages.json +16 -13
  164. package/src/components/i18n/locales/fr/messages.json +8 -5
  165. package/src/components/i18n/locales/gu/messages.json +8 -5
  166. package/src/components/i18n/locales/he/messages.json +8 -5
  167. package/src/components/i18n/locales/hi/messages.json +8 -5
  168. package/src/components/i18n/locales/hr/messages.json +10 -7
  169. package/src/components/i18n/locales/hu/messages.json +9 -6
  170. package/src/components/i18n/locales/hy/messages.json +16 -13
  171. package/src/components/i18n/locales/id/messages.json +7 -4
  172. package/src/components/i18n/locales/it/messages.json +11 -8
  173. package/src/components/i18n/locales/ja/messages.json +8 -5
  174. package/src/components/i18n/locales/ka/messages.json +8 -5
  175. package/src/components/i18n/locales/km/messages.json +6 -3
  176. package/src/components/i18n/locales/kn/messages.json +8 -5
  177. package/src/components/i18n/locales/ko/messages.json +8 -5
  178. package/src/components/i18n/locales/ku/messages.json +8 -5
  179. package/src/components/i18n/locales/lo/messages.json +6 -3
  180. package/src/components/i18n/locales/lt/messages.json +8 -5
  181. package/src/components/i18n/locales/lv/messages.json +8 -5
  182. package/src/components/i18n/locales/mk/messages.json +8 -5
  183. package/src/components/i18n/locales/ml/messages.json +8 -5
  184. package/src/components/i18n/locales/mn/messages.json +8 -5
  185. package/src/components/i18n/locales/mr/messages.json +8 -5
  186. package/src/components/i18n/locales/ms/messages.json +6 -3
  187. package/src/components/i18n/locales/my/messages.json +8 -5
  188. package/src/components/i18n/locales/ne/messages.json +8 -5
  189. package/src/components/i18n/locales/nl/messages.json +8 -5
  190. package/src/components/i18n/locales/no/messages.json +9 -6
  191. package/src/components/i18n/locales/pa/messages.json +8 -5
  192. package/src/components/i18n/locales/pl/messages.json +9 -6
  193. package/src/components/i18n/locales/ps/messages.json +8 -5
  194. package/src/components/i18n/locales/pt/messages.json +8 -5
  195. package/src/components/i18n/locales/ro/messages.json +8 -5
  196. package/src/components/i18n/locales/ru/messages.json +7 -4
  197. package/src/components/i18n/locales/sd/messages.json +8 -5
  198. package/src/components/i18n/locales/si/messages.json +8 -5
  199. package/src/components/i18n/locales/sk/messages.json +9 -6
  200. package/src/components/i18n/locales/sl/messages.json +9 -6
  201. package/src/components/i18n/locales/sq/messages.json +9 -6
  202. package/src/components/i18n/locales/sr/messages.json +8 -5
  203. package/src/components/i18n/locales/sv/messages.json +8 -5
  204. package/src/components/i18n/locales/sw/messages.json +6 -3
  205. package/src/components/i18n/locales/ta/messages.json +8 -5
  206. package/src/components/i18n/locales/te/messages.json +8 -5
  207. package/src/components/i18n/locales/th/messages.json +6 -3
  208. package/src/components/i18n/locales/tr/messages.json +8 -5
  209. package/src/components/i18n/locales/ug/messages.json +8 -5
  210. package/src/components/i18n/locales/uk/messages.json +7 -4
  211. package/src/components/i18n/locales/ur/messages.json +8 -5
  212. package/src/components/i18n/locales/vi/messages.json +6 -3
  213. package/src/components/i18n/locales/yi/messages.json +8 -5
  214. package/src/components/i18n/locales/zh/messages.json +8 -5
  215. package/src/components/inline-tools/inline-tool-code.ts +0 -19
  216. package/src/components/inline-tools/inline-tool-italic.ts +3 -20
  217. package/src/components/inline-tools/inline-tool-strikethrough.ts +0 -19
  218. package/src/components/inline-tools/inline-tool-underline.ts +0 -19
  219. package/src/components/inline-tools/services/bold-normalization-pass.ts +1 -29
  220. package/src/components/modules/blockEvents/composers/keyboardNavigation.ts +11 -5
  221. package/src/components/modules/toolbar/blockSettings.ts +2 -2
  222. package/src/components/modules/ui.ts +1 -0
  223. package/src/components/modules/uiControllers/controllers/keyboard.ts +55 -5
  224. package/src/styles/main.css +3 -0
  225. package/src/tools/database/database-view.ts +269 -0
  226. 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": "{default} {mode}",
29
- "tools.colorPicker.colorSwatchLabel": "{color} {mode}",
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": "Edit title",
155
- "tools.database.cardMenuLabel": "Card options",
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": "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": "{color} {mode}",
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": "Edit title",
155
- "tools.database.cardMenuLabel": "Card options",
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": "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": "{default} {mode}",
29
- "tools.colorPicker.colorSwatchLabel": "{color} {mode}",
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": "Edit title",
155
- "tools.database.cardMenuLabel": "Card options",
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": "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": "Edit title",
155
- "tools.database.cardMenuLabel": "Card options",
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": "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": "{default} {mode}",
29
- "tools.colorPicker.colorSwatchLabel": "{color} {mode}",
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": "Edit title",
155
- "tools.database.cardMenuLabel": "Card options",
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": "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": "{default} {mode}",
29
- "tools.colorPicker.colorSwatchLabel": "{color} {mode}",
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": "Edit title",
155
- "tools.database.cardMenuLabel": "Card options",
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": "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 = keepTrailing
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
- * Always prevent default Tab behaviour to keep focus inside the editor.
98
- * Without this, pressing Tab on the last block of a nested editor (e.g. a
99
- * database card drawer) lets the browser move focus out of the editor entirely.
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
- event.preventDefault();
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 = `Last edited by ${block.lastEditedBy}`;
466
+ label.textContent = this.Blok.I18n.t('blockSettings.lastEditedBy', { name: block.lastEditedBy });
467
467
  } else {
468
- label.textContent = 'Last edited';
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.Blok.UI.nodes.wrapper) {
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
- return;
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.Blok.UI.nodes.wrapper) {
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);
@@ -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;