@jackuait/blok 0.10.2 → 0.10.4

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 (293) hide show
  1. package/dist/blok.mjs +2 -2
  2. package/dist/chunks/{blok-D-T1XZ92.mjs → blok-NcdNQ0I6.mjs} +2304 -2101
  3. package/dist/chunks/{constants-CaB-mlB5.mjs → constants-DtfShkXT.mjs} +414 -317
  4. package/dist/chunks/{i18next-loader-CDnSPae_.mjs → i18next-loader-D32EUWLr.mjs} +1 -1
  5. package/dist/chunks/{lightweight-i18n-DZmo8dAI.mjs → lightweight-i18n-DpkvRXEd.mjs} +19 -0
  6. package/dist/{messages-Ddq3Ce3E2.mjs → chunks/messages-AD17iDBx.mjs} +18 -0
  7. package/dist/{messages-neGD3WGq.mjs → chunks/messages-B03yUEra2.mjs} +18 -0
  8. package/dist/chunks/{messages-CIfUm1Oa.mjs → messages-B2dU00Z3.mjs} +18 -0
  9. package/dist/chunks/{messages-BKN3YVIj.mjs → messages-B8hICx3L.mjs} +18 -0
  10. package/dist/{messages-Dnd5YSWv.mjs → chunks/messages-BBe45sPH.mjs} +18 -0
  11. package/dist/{messages-C7lJg8fy2.mjs → chunks/messages-BCifzMVO2.mjs} +18 -0
  12. package/dist/chunks/{messages-D7dx_6k8.mjs → messages-BGmvvtg_.mjs} +18 -0
  13. package/dist/{messages-Q5sQeVap2.mjs → chunks/messages-BJNFCDv42.mjs} +18 -0
  14. package/dist/chunks/{messages-BlxwW7M6.mjs → messages-BNy4e7Xl.mjs} +18 -0
  15. package/dist/chunks/{messages-C15z2r5U.mjs → messages-BcHZf9o-.mjs} +18 -0
  16. package/dist/{messages-A96tMxeU.mjs → chunks/messages-BjyYZeBm2.mjs} +18 -0
  17. package/dist/{messages-BbJ7ZXY8.mjs → chunks/messages-Bop7vrhU.mjs} +18 -0
  18. package/dist/{messages-BiTMwiKH.mjs → chunks/messages-BouFtpfO.mjs} +18 -0
  19. package/dist/chunks/{messages-ElIGUi0O2.mjs → messages-Br6bE1FD2.mjs} +18 -0
  20. package/dist/chunks/{messages-BHMiK51R.mjs → messages-C-EBhOHE.mjs} +18 -0
  21. package/dist/chunks/{messages-kGmxkeFH.mjs → messages-C3X7dv3f.mjs} +18 -0
  22. package/dist/chunks/{messages-4Ck88DYZ2.mjs → messages-C7Pjof0d2.mjs} +18 -0
  23. package/dist/{messages-D0lLw9KM.mjs → chunks/messages-C7sBaZOO2.mjs} +18 -0
  24. package/dist/chunks/{messages-QMOmwcZb.mjs → messages-C85zv_7x.mjs} +18 -0
  25. package/dist/chunks/{messages-DSrdy9Nw2.mjs → messages-CCEgR9GN2.mjs} +18 -0
  26. package/dist/chunks/{messages-DUr9WAkD.mjs → messages-CDSyoUft.mjs} +18 -0
  27. package/dist/{messages-bkGniiaz.mjs → chunks/messages-CGFlOwst.mjs} +18 -0
  28. package/dist/chunks/{messages-DBMaLL8b2.mjs → messages-CGLTjtRv2.mjs} +18 -0
  29. package/dist/{messages-2ZWBTerL.mjs → chunks/messages-CGPxUESo.mjs} +18 -0
  30. package/dist/chunks/{messages-BfAcUavP.mjs → messages-CNaaqQVz.mjs} +18 -0
  31. package/dist/{messages-DBhvm8NK.mjs → chunks/messages-CPFB2_m-2.mjs} +18 -0
  32. package/dist/chunks/{messages-zt6zdYWh.mjs → messages-CTdSIOAc.mjs} +18 -0
  33. package/dist/chunks/{messages-1_6UkKLS.mjs → messages-CXVWb9js.mjs} +18 -0
  34. package/dist/{messages-CdEASHDp2.mjs → chunks/messages-Cfbmwdep2.mjs} +18 -0
  35. package/dist/chunks/{messages-DxHh0O8j2.mjs → messages-ChayV9WY2.mjs} +18 -0
  36. package/dist/chunks/{messages-BgM91Lxm2.mjs → messages-Ci7UXRVI2.mjs} +18 -0
  37. package/dist/chunks/{messages-Clku7Cf-2.mjs → messages-CpXvyGWv2.mjs} +18 -0
  38. package/dist/chunks/{messages-DjvaiALg2.mjs → messages-Cql2ozf_2.mjs} +18 -0
  39. package/dist/{messages-DODrhcop.mjs → chunks/messages-Cxy_E2IS.mjs} +18 -0
  40. package/dist/chunks/{messages-CZSlfnkO2.mjs → messages-D9syZVGi2.mjs} +18 -0
  41. package/dist/chunks/{messages-BRAoJpOu.mjs → messages-D9uWAWjW.mjs} +18 -0
  42. package/dist/chunks/{messages-BK8Cp2d0.mjs → messages-DRJxSTqs.mjs} +18 -0
  43. package/dist/{messages-C_Qn9SbQ.mjs → chunks/messages-DSbI0vJf.mjs} +18 -0
  44. package/dist/chunks/{messages-CD_MnBln.mjs → messages-DVvrZRyZ.mjs} +18 -0
  45. package/dist/{messages-BE_z-zrb.mjs → chunks/messages-DY8zPIZW.mjs} +18 -0
  46. package/dist/chunks/{messages-Bz0-KNEB.mjs → messages-D_kZN9rB.mjs} +18 -0
  47. package/dist/{messages-C1vc5584.mjs → chunks/messages-DjSuq0-y2.mjs} +18 -0
  48. package/dist/chunks/{messages-DPzHD51Y.mjs → messages-DkP3Jf4F.mjs} +18 -0
  49. package/dist/{messages-_PLyRfVw.mjs → chunks/messages-DoPdy75l.mjs} +18 -0
  50. package/dist/chunks/{messages-JSQjKQ8I.mjs → messages-DpydMd36.mjs} +18 -0
  51. package/dist/{messages-BckDk9aq2.mjs → chunks/messages-DtZ9U9g72.mjs} +18 -0
  52. package/dist/{messages-JNrYldAa2.mjs → chunks/messages-H6vLy8wJ.mjs} +18 -0
  53. package/dist/chunks/{messages-DTN1XGll.mjs → messages-HzH9_QH8.mjs} +18 -0
  54. package/dist/chunks/{messages-C0IFfhnp.mjs → messages-O6FOfUgF.mjs} +18 -0
  55. package/dist/{messages-Be_2RHZD.mjs → chunks/messages-OSP4Hj5o.mjs} +18 -0
  56. package/dist/chunks/{messages-DMoERagV2.mjs → messages-RiqdVwuN2.mjs} +18 -0
  57. package/dist/chunks/{messages-BJ-vT1SU2.mjs → messages-SP659Sal2.mjs} +18 -0
  58. package/dist/{messages-Che99vKP.mjs → chunks/messages-THR8q8bJ.mjs} +18 -0
  59. package/dist/chunks/{messages-CvANwuht2.mjs → messages-VlEyFUxF2.mjs} +18 -0
  60. package/dist/{messages-apA6BStA.mjs → chunks/messages-VtfKWZ2S.mjs} +18 -0
  61. package/dist/{messages-DpJGbx3q.mjs → chunks/messages-YbckahVx2.mjs} +18 -0
  62. package/dist/{messages-DYuD5-rO.mjs → chunks/messages-ZhHLC6dk.mjs} +18 -0
  63. package/dist/{messages-C0GSBBCo2.mjs → chunks/messages-bFEdH3lv.mjs} +18 -0
  64. package/dist/chunks/{messages-euM2m3wQ.mjs → messages-dpXwA3Sz.mjs} +18 -0
  65. package/dist/chunks/{messages-CQBo3lmL2.mjs → messages-fbL5y58u2.mjs} +18 -0
  66. package/dist/chunks/{messages-CxiURE2X.mjs → messages-oPV2oMxM.mjs} +18 -0
  67. package/dist/{messages-DM4Gjc9h.mjs → chunks/messages-oXBbHW9A.mjs} +18 -0
  68. package/dist/chunks/{messages-QilfinOn2.mjs → messages-vDgsEqQW2.mjs} +18 -0
  69. package/dist/{messages-ClGvlFcH2.mjs → chunks/messages-wYQksm10.mjs} +18 -0
  70. package/dist/{messages-CnuH-BZK2.mjs → chunks/messages-yGedmr61.mjs} +18 -0
  71. package/dist/chunks/{messages-sDdNf8O9.mjs → messages-zQOpKjl3.mjs} +18 -0
  72. package/dist/chunks/{messages-eFd4YYzt.mjs → messages-zWqsggJh.mjs} +18 -0
  73. package/dist/chunks/{tools-BFK2MvVI.mjs → tools-DMSi-3RW.mjs} +3434 -1240
  74. package/dist/full.mjs +10 -10
  75. package/dist/locales.mjs +86 -67
  76. package/dist/{messages-BK_LsgY4.mjs → messages-0lOPMv8u.mjs} +18 -0
  77. package/dist/{messages-LYJbLq_F.mjs → messages-5wuR90qS.mjs} +18 -0
  78. package/dist/{messages-98nQiC7t2.mjs → messages-6eX0fWGR2.mjs} +18 -0
  79. package/dist/{chunks/messages-DUeiPraX.mjs → messages-9L4qqCKh2.mjs} +18 -0
  80. package/dist/{chunks/messages-Q7-4ZJLB2.mjs → messages-B4zPxKl62.mjs} +18 -0
  81. package/dist/{messages-D0005ti32.mjs → messages-BCMFYqKc2.mjs} +18 -0
  82. package/dist/{chunks/messages-CC_noR8y.mjs → messages-BKXjO3NH.mjs} +18 -0
  83. package/dist/{messages-CRNogopy2.mjs → messages-BLW2GX7J2.mjs} +18 -0
  84. package/dist/{messages-D81w6AmW.mjs → messages-BLfK27kX.mjs} +18 -0
  85. package/dist/{chunks/messages-CPBN4zWc.mjs → messages-BM2kx9Td.mjs} +18 -0
  86. package/dist/{messages-E8NjqzWq2.mjs → messages-BORkMoil2.mjs} +18 -0
  87. package/dist/{messages-Dqu4aX9s.mjs → messages-BPw_x-6H.mjs} +18 -0
  88. package/dist/{messages-DSmxJWju2.mjs → messages-BRY51SEw2.mjs} +18 -0
  89. package/dist/{chunks/messages-BONyZroH.mjs → messages-BSNsrZVN.mjs} +18 -0
  90. package/dist/{chunks/messages-BAlZjPcl.mjs → messages-B_UKuqrH.mjs} +18 -0
  91. package/dist/{chunks/messages-DB_-5Xln.mjs → messages-BrYeJsSE2.mjs} +18 -0
  92. package/dist/{messages-Brd5R-da2.mjs → messages-BwttyHDI2.mjs} +18 -0
  93. package/dist/{messages-qfvXgPpu2.mjs → messages-C-8qb9sf2.mjs} +18 -0
  94. package/dist/{chunks/messages-BbEW9bQz.mjs → messages-C34dTwF72.mjs} +18 -0
  95. package/dist/{messages-BmH2cQHQ.mjs → messages-C67YUZ9-.mjs} +18 -0
  96. package/dist/{messages-DpwMKDV0.mjs → messages-C6yKu_PJ.mjs} +18 -0
  97. package/dist/{messages-Do7Xjy0n.mjs → messages-CA6J_QoC.mjs} +18 -0
  98. package/dist/{messages-DVL0KZE5.mjs → messages-CFUBJfnf.mjs} +18 -0
  99. package/dist/{chunks/messages-DVr1sqfI2.mjs → messages-CLUBh7O_.mjs} +18 -0
  100. package/dist/{chunks/messages-wl8YrvGG.mjs → messages-CLZoy5fQ.mjs} +18 -0
  101. package/dist/{messages-CisR4PNV.mjs → messages-CNGwdIEz.mjs} +18 -0
  102. package/dist/{messages-DopaMHC42.mjs → messages-CR4gHjd82.mjs} +18 -0
  103. package/dist/{messages-DK6dA0O2.mjs → messages-CVMngZNA.mjs} +18 -0
  104. package/dist/{messages-Xc0KUbYl.mjs → messages-Cd5CW5Tt.mjs} +18 -0
  105. package/dist/{chunks/messages-ChK7v1PV.mjs → messages-CrjQ2Op0.mjs} +18 -0
  106. package/dist/{chunks/messages-CRF7nNrO.mjs → messages-Cv1PSaNk.mjs} +18 -0
  107. package/dist/{messages-DOGbHYv-2.mjs → messages-CxZarWTm2.mjs} +18 -0
  108. package/dist/{messages-D3rwCtKn.mjs → messages-D0eT_eWA.mjs} +18 -0
  109. package/dist/{messages-C6ONf71u2.mjs → messages-D6RYu9JW2.mjs} +18 -0
  110. package/dist/{messages-DQORja0D.mjs → messages-D8U5D391.mjs} +18 -0
  111. package/dist/{chunks/messages-EDMC5ukV.mjs → messages-D8dO6OMN.mjs} +18 -0
  112. package/dist/{messages-DfFZ6Yj5.mjs → messages-DA4T9WBe.mjs} +18 -0
  113. package/dist/{chunks/messages-D22e9h7V2.mjs → messages-DB4UKN8D.mjs} +18 -0
  114. package/dist/{chunks/messages-DEBy3nuJ2.mjs → messages-DCdP2ujL.mjs} +18 -0
  115. package/dist/{messages-D05jqBIa2.mjs → messages-DPFuzIdF2.mjs} +18 -0
  116. package/dist/{chunks/messages-DrfRYiM32.mjs → messages-DQ1icG7L.mjs} +18 -0
  117. package/dist/{chunks/messages-a07QVz8U.mjs → messages-DT7dwzEe.mjs} +18 -0
  118. package/dist/{chunks/messages-CszmHAvQ.mjs → messages-DUYxMxrQ2.mjs} +18 -0
  119. package/dist/{chunks/messages-DtoId_bw2.mjs → messages-D_V0kHD7.mjs} +18 -0
  120. package/dist/{messages-BesJaI6A.mjs → messages-DfqM_XvD.mjs} +18 -0
  121. package/dist/{messages-CT-Kdas6.mjs → messages-Di3-WVzq.mjs} +18 -0
  122. package/dist/{messages-BcVB3osF.mjs → messages-Dl0bfeA-.mjs} +18 -0
  123. package/dist/{chunks/messages-C1S9ztpF.mjs → messages-Do3mHd9U.mjs} +18 -0
  124. package/dist/{chunks/messages-BeGZqQwz.mjs → messages-DqDlcEPn.mjs} +18 -0
  125. package/dist/{chunks/messages-CTCe595D2.mjs → messages-DwiykEgr2.mjs} +18 -0
  126. package/dist/{chunks/messages-8Ld7P_9j2.mjs → messages-Dx5n6MLQ2.mjs} +18 -0
  127. package/dist/{messages-LMaR2_bE.mjs → messages-DxEiqa-B.mjs} +18 -0
  128. package/dist/{chunks/messages-CxxyR4vY.mjs → messages-Dxr1BBvo.mjs} +18 -0
  129. package/dist/{messages-D6VIFnSW.mjs → messages-DzknMM7W.mjs} +18 -0
  130. package/dist/{chunks/messages-oMc7qugU2.mjs → messages-ELvF3qMl2.mjs} +18 -0
  131. package/dist/{messages-53w0fPZS2.mjs → messages-JVJdC0Er2.mjs} +18 -0
  132. package/dist/{chunks/messages-BMD37y3q2.mjs → messages-KVerxvZC.mjs} +18 -0
  133. package/dist/{chunks/messages-Du2BffA7.mjs → messages-OOiDDmVw.mjs} +18 -0
  134. package/dist/{messages-uwK7ktqk.mjs → messages-PyOr_YgV.mjs} +18 -0
  135. package/dist/{messages-qbKjjvgd2.mjs → messages-VrQw3tQ62.mjs} +18 -0
  136. package/dist/{messages-CTTmWn4Y2.mjs → messages-WsUHzXMu2.mjs} +18 -0
  137. package/dist/{messages-CZbcxlZt2.mjs → messages-ZHgPRUj02.mjs} +18 -0
  138. package/dist/{messages-DKHbt-7l2.mjs → messages-aoO_TtoE2.mjs} +18 -0
  139. package/dist/{chunks/messages-CW35K1pq.mjs → messages-bh8BiOee2.mjs} +18 -0
  140. package/dist/{messages-BrOWqNCu2.mjs → messages-gZEhkRrR2.mjs} +18 -0
  141. package/dist/{chunks/messages-BRoa9tGl.mjs → messages-hya8YLMj.mjs} +18 -0
  142. package/dist/{messages-CdduYw-q.mjs → messages-tb1FD_ge.mjs} +18 -0
  143. package/dist/react.mjs +2 -2
  144. package/dist/tools.mjs +3 -3
  145. package/dist/vendor.LICENSE.txt +135 -0
  146. package/package.json +2 -1
  147. package/src/blok.ts +48 -0
  148. package/src/components/block/index.ts +21 -2
  149. package/src/components/block-tunes/block-tune-copy-link.ts +82 -0
  150. package/src/components/i18n/locales/am/messages.json +18 -0
  151. package/src/components/i18n/locales/ar/messages.json +18 -0
  152. package/src/components/i18n/locales/az/messages.json +18 -0
  153. package/src/components/i18n/locales/bg/messages.json +18 -0
  154. package/src/components/i18n/locales/bn/messages.json +18 -0
  155. package/src/components/i18n/locales/bs/messages.json +18 -0
  156. package/src/components/i18n/locales/cs/messages.json +18 -0
  157. package/src/components/i18n/locales/da/messages.json +18 -0
  158. package/src/components/i18n/locales/de/messages.json +18 -0
  159. package/src/components/i18n/locales/dv/messages.json +18 -0
  160. package/src/components/i18n/locales/el/messages.json +18 -0
  161. package/src/components/i18n/locales/en/messages.json +19 -0
  162. package/src/components/i18n/locales/es/messages.json +18 -0
  163. package/src/components/i18n/locales/et/messages.json +18 -0
  164. package/src/components/i18n/locales/fa/messages.json +18 -0
  165. package/src/components/i18n/locales/fi/messages.json +18 -0
  166. package/src/components/i18n/locales/fil/messages.json +18 -0
  167. package/src/components/i18n/locales/fr/messages.json +18 -0
  168. package/src/components/i18n/locales/gu/messages.json +18 -0
  169. package/src/components/i18n/locales/he/messages.json +18 -0
  170. package/src/components/i18n/locales/hi/messages.json +18 -0
  171. package/src/components/i18n/locales/hr/messages.json +18 -0
  172. package/src/components/i18n/locales/hu/messages.json +18 -0
  173. package/src/components/i18n/locales/hy/messages.json +18 -0
  174. package/src/components/i18n/locales/id/messages.json +18 -0
  175. package/src/components/i18n/locales/it/messages.json +18 -0
  176. package/src/components/i18n/locales/ja/messages.json +18 -0
  177. package/src/components/i18n/locales/ka/messages.json +18 -0
  178. package/src/components/i18n/locales/km/messages.json +18 -0
  179. package/src/components/i18n/locales/kn/messages.json +18 -0
  180. package/src/components/i18n/locales/ko/messages.json +18 -0
  181. package/src/components/i18n/locales/ku/messages.json +18 -0
  182. package/src/components/i18n/locales/lo/messages.json +18 -0
  183. package/src/components/i18n/locales/lt/messages.json +18 -0
  184. package/src/components/i18n/locales/lv/messages.json +18 -0
  185. package/src/components/i18n/locales/mk/messages.json +18 -0
  186. package/src/components/i18n/locales/ml/messages.json +18 -0
  187. package/src/components/i18n/locales/mn/messages.json +18 -0
  188. package/src/components/i18n/locales/mr/messages.json +18 -0
  189. package/src/components/i18n/locales/ms/messages.json +18 -0
  190. package/src/components/i18n/locales/my/messages.json +18 -0
  191. package/src/components/i18n/locales/ne/messages.json +18 -0
  192. package/src/components/i18n/locales/nl/messages.json +18 -0
  193. package/src/components/i18n/locales/no/messages.json +18 -0
  194. package/src/components/i18n/locales/pa/messages.json +18 -0
  195. package/src/components/i18n/locales/pl/messages.json +18 -0
  196. package/src/components/i18n/locales/ps/messages.json +18 -0
  197. package/src/components/i18n/locales/pt/messages.json +18 -0
  198. package/src/components/i18n/locales/ro/messages.json +18 -0
  199. package/src/components/i18n/locales/ru/messages.json +18 -0
  200. package/src/components/i18n/locales/sd/messages.json +18 -0
  201. package/src/components/i18n/locales/si/messages.json +18 -0
  202. package/src/components/i18n/locales/sk/messages.json +18 -0
  203. package/src/components/i18n/locales/sl/messages.json +18 -0
  204. package/src/components/i18n/locales/sq/messages.json +18 -0
  205. package/src/components/i18n/locales/sr/messages.json +18 -0
  206. package/src/components/i18n/locales/sv/messages.json +18 -0
  207. package/src/components/i18n/locales/sw/messages.json +18 -0
  208. package/src/components/i18n/locales/ta/messages.json +18 -0
  209. package/src/components/i18n/locales/te/messages.json +18 -0
  210. package/src/components/i18n/locales/th/messages.json +18 -0
  211. package/src/components/i18n/locales/tr/messages.json +18 -0
  212. package/src/components/i18n/locales/ug/messages.json +18 -0
  213. package/src/components/i18n/locales/uk/messages.json +18 -0
  214. package/src/components/i18n/locales/ur/messages.json +18 -0
  215. package/src/components/i18n/locales/vi/messages.json +18 -0
  216. package/src/components/i18n/locales/yi/messages.json +18 -0
  217. package/src/components/i18n/locales/zh/messages.json +18 -0
  218. package/src/components/icons/index.ts +65 -0
  219. package/src/components/inline-tools/inline-tool-bold.ts +10 -0
  220. package/src/components/inline-tools/inline-tool-code.ts +54 -1
  221. package/src/components/inline-tools/inline-tool-italic.ts +54 -1
  222. package/src/components/inline-tools/inline-tool-strikethrough.ts +54 -1
  223. package/src/components/inline-tools/inline-tool-underline.ts +54 -1
  224. package/src/components/inline-tools/services/bold-normalization-pass.ts +29 -3
  225. package/src/components/inline-tools/utils/formatting-range-utils.ts +83 -0
  226. package/src/components/modules/api/tools.ts +19 -0
  227. package/src/components/modules/blockEvents/composers/keyboardNavigation.ts +5 -5
  228. package/src/components/modules/blockManager/blockManager.ts +22 -0
  229. package/src/components/modules/blockManager/event-binder.ts +12 -1
  230. package/src/components/modules/blockManager/factory.ts +4 -0
  231. package/src/components/modules/blockManager/types.ts +4 -0
  232. package/src/components/modules/blockManager/yjs-sync.ts +16 -2
  233. package/src/components/modules/paste/google-docs-preprocessor.ts +49 -3
  234. package/src/components/modules/paste/handlers/table-cells-handler.ts +12 -2
  235. package/src/components/modules/paste/index.ts +8 -4
  236. package/src/components/modules/paste/types.ts +2 -0
  237. package/src/components/modules/renderer.ts +22 -2
  238. package/src/components/modules/saver.ts +19 -1
  239. package/src/components/modules/themeManager.ts +3 -1
  240. package/src/components/modules/toolbar/blockSettings.ts +51 -1
  241. package/src/components/modules/toolbar/index.ts +95 -3
  242. package/src/components/modules/toolbar/inline/index.ts +0 -3
  243. package/src/components/modules/toolbar/plus-button.ts +37 -0
  244. package/src/components/modules/toolbar/settings-toggler.ts +6 -0
  245. package/src/components/modules/tools.ts +5 -0
  246. package/src/components/modules/uiControllers/controllers/keyboard.ts +85 -22
  247. package/src/components/modules/uiControllers/controllers/selection.ts +14 -2
  248. package/src/components/modules/yjs/document-store.ts +22 -0
  249. package/src/components/modules/yjs/index.ts +10 -0
  250. package/src/components/modules/yjs/serializer.ts +20 -0
  251. package/src/components/selection/cursor.ts +12 -2
  252. package/src/components/ui/toolbox.ts +31 -5
  253. package/src/components/utils/id-generator.ts +11 -0
  254. package/src/components/utils/key-icon.ts +187 -0
  255. package/src/components/utils/popover/components/hint/hint.ts +3 -1
  256. package/src/components/utils/popover/components/popover-item/popover-item-default/popover-item-default.ts +18 -5
  257. package/src/components/utils/popover/popover-abstract.ts +45 -0
  258. package/src/components/utils/popover/popover-desktop.ts +1 -0
  259. package/src/components/utils/popover/popover-position.ts +12 -5
  260. package/src/components/utils/popover/popover.const.ts +2 -0
  261. package/src/components/utils.ts +1 -0
  262. package/src/styles/main.css +1269 -0
  263. package/src/tools/code/index.ts +4 -0
  264. package/src/tools/database/database-backend-sync.ts +132 -0
  265. package/src/tools/database/database-board-view.ts +410 -0
  266. package/src/tools/database/database-card-drag.ts +306 -0
  267. package/src/tools/database/database-card-drawer.ts +546 -0
  268. package/src/tools/database/database-column-controls.ts +141 -0
  269. package/src/tools/database/database-column-drag.ts +262 -0
  270. package/src/tools/database/database-keyboard.ts +35 -0
  271. package/src/tools/database/database-list-row-drag.ts +245 -0
  272. package/src/tools/database/database-list-view.ts +333 -0
  273. package/src/tools/database/database-model.ts +214 -0
  274. package/src/tools/database/database-property-type-popover.ts +108 -0
  275. package/src/tools/database/database-tab-bar.ts +558 -0
  276. package/src/tools/database/database-view-popover.ts +129 -0
  277. package/src/tools/database/database-view-renderer.ts +25 -0
  278. package/src/tools/database/index.ts +1223 -0
  279. package/src/tools/database/types.ts +152 -0
  280. package/src/tools/database-row/index.ts +74 -0
  281. package/src/tools/index.ts +4 -0
  282. package/src/tools/table/index.ts +10 -19
  283. package/src/tools/table/table-cell-selection.ts +126 -7
  284. package/src/tools/table/table-core.ts +59 -5
  285. package/src/tools/table/table-model.ts +8 -0
  286. package/src/tools/table/table-row-col-controls.ts +40 -18
  287. package/types/api/tools.d.ts +18 -0
  288. package/types/configs/blok-config.d.ts +27 -0
  289. package/types/data-formats/output-data.d.ts +13 -0
  290. package/types/index.d.ts +17 -0
  291. package/types/tools/database.d.ts +152 -0
  292. package/types/tools-entry.d.ts +7 -4
  293. package/types/utils/popover/popover.d.ts +6 -0
@@ -713,6 +713,33 @@
713
713
  --blok-table-grip-outline: transparent;
714
714
  --blok-table-drag-source-bg: #f3f4f6;
715
715
 
716
+ /* Database / Kanban */
717
+ --blok-database-card-bg: #fff;
718
+ --blok-database-card-bg-hover: #f7f7f5;
719
+ --blok-database-card-shadow: 0 1px 3px rgba(0, 0, 0, 0.08);
720
+ --blok-database-card-shadow-hover: 0 4px 12px rgba(0, 0, 0, 0.12);
721
+ --blok-database-card-border: rgba(0, 0, 0, 0.06);
722
+ --blok-database-card-border-active: rgba(35, 131, 226, 0.57);
723
+ --blok-database-card-placeholder: rgba(55, 53, 47, 0.4);
724
+ --blok-database-card-colored-overlay: var(--blok-database-card-bg);
725
+ --blok-database-card-colored-overlay-hover: var(--blok-database-card-bg-hover);
726
+ --blok-database-card-colored-border: var(--blok-database-card-border);
727
+ --blok-database-column-bg: rgba(0, 0, 0, 0.04);
728
+ --blok-database-add-text: rgba(55, 53, 47, 0.5);
729
+ --blok-database-add-border: rgba(55, 53, 47, 0.25);
730
+ --blok-database-add-hover-bg: rgba(55, 53, 47, 0.06);
731
+ --blok-database-delete-text: rgba(55, 53, 47, 0.35);
732
+ --blok-database-delete-hover-text: rgba(55, 53, 47, 0.65);
733
+ --blok-database-drawer-border: #e8e8eb;
734
+ --blok-database-tab-bg: transparent;
735
+ --blok-database-tab-bg-active: rgba(0, 0, 0, 0.06);
736
+ --blok-database-tab-bg-hover: rgba(0, 0, 0, 0.04);
737
+ --blok-database-tab-text: rgba(55, 53, 47, 0.5);
738
+ --blok-database-tab-text-active: #37352f;
739
+ --blok-database-popover-bg: #fff;
740
+ --blok-database-popover-shadow: 0 4px 24px rgba(0, 0, 0, 0.12), 0 0 0 1px rgba(0, 0, 0, 0.04);
741
+ --blok-database-popover-hover: rgba(0, 0, 0, 0.04);
742
+
716
743
  /* Toggle switch */
717
744
  --blok-toggle-off-bg: #d4d4d8;
718
745
  --blok-toggle-on-bg: #2383e2;
@@ -810,6 +837,33 @@
810
837
  --blok-table-grip-outline: rgba(255, 255, 255, 0.12);
811
838
  --blok-table-drag-source-bg: rgba(255, 255, 255, 0.07);
812
839
 
840
+ /* Database / Kanban */
841
+ --blok-database-card-bg: #2d2d2c;
842
+ --blok-database-card-bg-hover: #353534;
843
+ --blok-database-card-shadow: 0 1px 3px rgba(0, 0, 0, 0.25);
844
+ --blok-database-card-shadow-hover: 0 4px 12px rgba(0, 0, 0, 0.45);
845
+ --blok-database-card-border: rgba(255, 255, 255, 0.06);
846
+ --blok-database-card-border-active: rgba(35, 131, 226, 0.7);
847
+ --blok-database-card-placeholder: rgba(255, 255, 255, 0.3);
848
+ --blok-database-card-colored-overlay: rgba(255, 255, 255, 0.06);
849
+ --blok-database-card-colored-overlay-hover: rgba(255, 255, 255, 0.11);
850
+ --blok-database-card-colored-border: rgba(255, 255, 255, 0.07);
851
+ --blok-database-column-bg: rgba(255, 255, 255, 0.05);
852
+ --blok-database-add-text: rgba(255, 255, 255, 0.4);
853
+ --blok-database-add-border: rgba(255, 255, 255, 0.2);
854
+ --blok-database-add-hover-bg: rgba(255, 255, 255, 0.06);
855
+ --blok-database-delete-text: rgba(255, 255, 255, 0.3);
856
+ --blok-database-delete-hover-text: rgba(255, 255, 255, 0.55);
857
+ --blok-database-drawer-border: rgba(255, 255, 255, 0.1);
858
+ --blok-database-tab-bg: transparent;
859
+ --blok-database-tab-bg-active: rgba(255, 255, 255, 0.08);
860
+ --blok-database-tab-bg-hover: rgba(255, 255, 255, 0.04);
861
+ --blok-database-tab-text: rgba(255, 255, 255, 0.45);
862
+ --blok-database-tab-text-active: rgba(255, 255, 255, 0.9);
863
+ --blok-database-popover-bg: #2d2d2c;
864
+ --blok-database-popover-shadow: 0 4px 24px rgba(0, 0, 0, 0.35), 0 0 0 1px rgba(255, 255, 255, 0.08);
865
+ --blok-database-popover-hover: rgba(255, 255, 255, 0.06);
866
+
813
867
  /* Toggle switch */
814
868
  --blok-toggle-off-bg: #3f3f46;
815
869
  --blok-toggle-on-bg: #529cca;
@@ -907,6 +961,31 @@
907
961
  --blok-table-grip-outline: rgba(255, 255, 255, 0.12);
908
962
  --blok-table-drag-source-bg: rgba(255, 255, 255, 0.07);
909
963
 
964
+ /* Database / Kanban */
965
+ --blok-database-card-bg: #2d2d2c;
966
+ --blok-database-card-bg-hover: #353534;
967
+ --blok-database-card-shadow: 0 1px 2px rgba(0, 0, 0, 0.2);
968
+ --blok-database-card-shadow-hover: 0 4px 12px rgba(0, 0, 0, 0.45);
969
+ --blok-database-card-border: rgba(255, 255, 255, 0.06);
970
+ --blok-database-card-colored-overlay: rgba(255, 255, 255, 0.06);
971
+ --blok-database-card-colored-overlay-hover: rgba(255, 255, 255, 0.11);
972
+ --blok-database-card-colored-border: rgba(255, 255, 255, 0.07);
973
+ --blok-database-column-bg: rgba(255, 255, 255, 0.03);
974
+ --blok-database-add-text: rgba(255, 255, 255, 0.4);
975
+ --blok-database-add-border: rgba(255, 255, 255, 0.2);
976
+ --blok-database-add-hover-bg: rgba(255, 255, 255, 0.06);
977
+ --blok-database-delete-text: rgba(255, 255, 255, 0.3);
978
+ --blok-database-delete-hover-text: rgba(255, 255, 255, 0.55);
979
+ --blok-database-drawer-border: rgba(255, 255, 255, 0.1);
980
+ --blok-database-tab-bg: transparent;
981
+ --blok-database-tab-bg-active: rgba(255, 255, 255, 0.08);
982
+ --blok-database-tab-bg-hover: rgba(255, 255, 255, 0.04);
983
+ --blok-database-tab-text: rgba(255, 255, 255, 0.45);
984
+ --blok-database-tab-text-active: rgba(255, 255, 255, 0.9);
985
+ --blok-database-popover-bg: #2d2d2c;
986
+ --blok-database-popover-shadow: 0 4px 24px rgba(0, 0, 0, 0.35), 0 0 0 1px rgba(255, 255, 255, 0.08);
987
+ --blok-database-popover-hover: rgba(255, 255, 255, 0.06);
988
+
910
989
  /* Toggle switch */
911
990
  --blok-toggle-off-bg: #3f3f46;
912
991
  --blok-toggle-on-bg: #e4e4e7;
@@ -1484,3 +1563,1193 @@
1484
1563
  [data-emoji-picker-body]::-webkit-scrollbar-thumb:hover {
1485
1564
  background: color-mix(in srgb, currentColor 22%, transparent);
1486
1565
  }
1566
+
1567
+ /* ═══════════════════════════════════════════════════════
1568
+ Database / Kanban board
1569
+ ═══════════════════════════════════════════════════════ */
1570
+
1571
+ /**
1572
+ * Board area — scrollable padding on both sides so columns can be
1573
+ * scrolled all the way to either edge of the editor. The initial
1574
+ * scrollLeft (set in DatabaseTool.rendered()) positions the first
1575
+ * column at the content-area left edge.
1576
+ */
1577
+ [data-blok-database-board] {
1578
+ padding-left: max(0px, calc((100% - var(--max-width-content)) / 2));
1579
+ padding-right: max(0px, calc((100% - var(--max-width-content)) / 2));
1580
+
1581
+ /* macOS-style scrollbar — thin, rounded, visible on hover/scroll */
1582
+ scrollbar-width: thin;
1583
+ scrollbar-color: transparent transparent;
1584
+ }
1585
+ [data-blok-database-board]:hover {
1586
+ scrollbar-color: color-mix(in srgb, currentColor 15%, transparent) transparent;
1587
+ }
1588
+ [data-blok-database-board]::-webkit-scrollbar {
1589
+ height: 8px;
1590
+ }
1591
+ [data-blok-database-board]::-webkit-scrollbar-track {
1592
+ background: transparent;
1593
+ }
1594
+ [data-blok-database-board]::-webkit-scrollbar-thumb {
1595
+ background: transparent;
1596
+ border-radius: 4px;
1597
+ }
1598
+ [data-blok-database-board]:hover::-webkit-scrollbar-thumb {
1599
+ background: color-mix(in srgb, currentColor 15%, transparent);
1600
+ }
1601
+ [data-blok-database-board]::-webkit-scrollbar-thumb:hover {
1602
+ background: color-mix(in srgb, currentColor 25%, transparent);
1603
+ }
1604
+
1605
+ /**
1606
+ * Column background tint — a subtle fill so columns read as lanes.
1607
+ */
1608
+ [data-blok-database-column] {
1609
+ background-color: var(--blok-database-column-bg);
1610
+ border-radius: 10px;
1611
+ padding: 8px;
1612
+ }
1613
+
1614
+ /**
1615
+ * Column header — grab cursor to indicate draggable area.
1616
+ */
1617
+ [data-blok-database-column-header] {
1618
+ cursor: grab;
1619
+ }
1620
+
1621
+ /**
1622
+ * Cards — elevated surface with subtle border and shadow.
1623
+ */
1624
+ [data-blok-database-card] {
1625
+ background-color: var(--blok-database-card-bg);
1626
+ box-shadow: var(--blok-database-card-shadow);
1627
+ border: 1px solid var(--blok-database-card-border);
1628
+ border-radius: 8px;
1629
+ transition: background-color 150ms ease, box-shadow 150ms ease, border-color 150ms ease, outline-color 150ms ease;
1630
+ }
1631
+
1632
+ [data-blok-database-card]:hover {
1633
+ background-color: var(--blok-database-card-bg-hover);
1634
+ }
1635
+
1636
+ [data-blok-database-card-active] {
1637
+ background-color: var(--blok-database-card-bg-hover);
1638
+ outline: 2px solid var(--blok-database-card-border-active);
1639
+ outline-offset: -1px;
1640
+ }
1641
+
1642
+ /**
1643
+ * Colored columns — cards use a transparent overlay so the column
1644
+ * background color shows through, matching the "New page" button.
1645
+ */
1646
+ [data-blok-database-column][data-color] [data-blok-database-card] {
1647
+ background-color: var(--blok-database-card-colored-overlay);
1648
+ box-shadow: none;
1649
+ border-color: var(--blok-database-card-colored-border);
1650
+ }
1651
+
1652
+ [data-blok-database-column][data-color] [data-blok-database-card]:hover {
1653
+ background-color: var(--blok-database-card-colored-overlay-hover);
1654
+ }
1655
+
1656
+ /**
1657
+ * During drag — smooth card displacement transitions.
1658
+ */
1659
+ [data-blok-database-dragging] [data-blok-database-card] {
1660
+ transition: box-shadow 150ms ease, border-color 150ms ease, margin-top 200ms cubic-bezier(0.25, 0.1, 0.25, 1);
1661
+ }
1662
+
1663
+ [data-blok-database-dragging] [data-blok-database-cards] {
1664
+ transition: padding-bottom 200ms cubic-bezier(0.25, 0.1, 0.25, 1);
1665
+ }
1666
+
1667
+ /**
1668
+ * During column reorder — smooth gap displacement and grab cursor.
1669
+ */
1670
+ [data-blok-database-column-reordering] {
1671
+ cursor: grabbing;
1672
+ }
1673
+
1674
+ [data-blok-database-column-reordering] [data-blok-database-column] {
1675
+ transition: margin-left 200ms cubic-bezier(0.25, 0.1, 0.25, 1);
1676
+ }
1677
+
1678
+ [data-blok-database-column-reordering] [data-blok-database-board] {
1679
+ transition: padding-right 200ms cubic-bezier(0.25, 0.1, 0.25, 1);
1680
+ }
1681
+
1682
+ /**
1683
+ * Card action group — edit + menu buttons revealed on hover.
1684
+ */
1685
+ [data-blok-database-card-actions] {
1686
+ position: absolute;
1687
+ top: 8px;
1688
+ right: 8px;
1689
+ display: flex;
1690
+ gap: 2px;
1691
+ opacity: 0;
1692
+ pointer-events: none;
1693
+ transition: opacity 120ms ease;
1694
+ background: var(--blok-database-card-actions-bg, #1e2533);
1695
+ border-radius: 8px;
1696
+ padding: 2px;
1697
+ }
1698
+
1699
+ [data-blok-database-card]:hover [data-blok-database-card-actions],
1700
+ [data-blok-database-card][data-popover-open] [data-blok-database-card-actions],
1701
+ [data-blok-database-card-actions]:focus-within {
1702
+ opacity: 1;
1703
+ pointer-events: auto;
1704
+ }
1705
+
1706
+ [data-blok-database-edit-card],
1707
+ [data-blok-database-card-menu] {
1708
+ background: none;
1709
+ border: none;
1710
+ cursor: pointer;
1711
+ color: var(--blok-database-card-actions-icon, rgba(255,255,255,0.75));
1712
+ width: 28px;
1713
+ height: 28px;
1714
+ border-radius: 6px;
1715
+ display: flex;
1716
+ align-items: center;
1717
+ justify-content: center;
1718
+ transition: background-color 120ms ease, color 120ms ease;
1719
+ padding: 0;
1720
+ flex-shrink: 0;
1721
+ }
1722
+
1723
+ [data-blok-database-edit-card]:hover,
1724
+ [data-blok-database-card-menu]:hover {
1725
+ background: rgba(255, 255, 255, 0.12);
1726
+ color: #fff;
1727
+ }
1728
+
1729
+ /**
1730
+ * Inline title edit input inside a card.
1731
+ */
1732
+ [data-blok-database-card-title-input] {
1733
+ font-size: 14px;
1734
+ font-weight: 500;
1735
+ line-height: 1.45;
1736
+ background: none;
1737
+ border: none;
1738
+ border-bottom: 1px solid var(--blok-database-card-actions-icon, rgba(255,255,255,0.4));
1739
+ color: inherit;
1740
+ outline: none;
1741
+ width: 100%;
1742
+ box-sizing: border-box;
1743
+ padding: 0;
1744
+ }
1745
+
1746
+ /**
1747
+ * Add card / Add column buttons — muted text with hover fill.
1748
+ */
1749
+ [data-blok-database-add-card],
1750
+ [data-blok-database-add-column] {
1751
+ background: none;
1752
+ border: 1px solid var(--blok-database-add-border);
1753
+ cursor: pointer;
1754
+ color: var(--blok-database-add-text);
1755
+ font-size: 14px;
1756
+ padding: 6px 8px;
1757
+ border-radius: 8px;
1758
+ text-align: left;
1759
+ width: 100%;
1760
+ display: flex;
1761
+ align-items: center;
1762
+ gap: 6px;
1763
+ transition: background-color 120ms ease, color 120ms ease, border-color 120ms ease;
1764
+ }
1765
+
1766
+ [data-blok-database-add-card]:hover,
1767
+ [data-blok-database-add-column]:hover {
1768
+ background-color: var(--blok-database-add-hover-bg);
1769
+ color: var(--blok-text-primary, inherit);
1770
+ }
1771
+
1772
+ /* In colored columns, add-card keeps the accent color on hover too */
1773
+ [data-blok-database-column][data-color] [data-blok-database-add-card]:hover {
1774
+ background-color: color-mix(in srgb, currentColor 8%, transparent);
1775
+ }
1776
+
1777
+ [data-blok-database-add-column] {
1778
+ white-space: nowrap;
1779
+ align-self: flex-start;
1780
+ flex-shrink: 0;
1781
+ padding: 10px 12px;
1782
+ border-radius: 8px;
1783
+ }
1784
+
1785
+ /**
1786
+ * Column header delete button — hidden until column header hover.
1787
+ */
1788
+ [data-blok-database-delete-column] {
1789
+ opacity: 0;
1790
+ background: none;
1791
+ border: none;
1792
+ cursor: pointer;
1793
+ color: var(--blok-database-delete-text);
1794
+ font-size: 14px;
1795
+ line-height: 1;
1796
+ padding: 2px 4px;
1797
+ border-radius: 3px;
1798
+ flex-shrink: 0;
1799
+ transition: opacity 120ms ease, color 120ms ease;
1800
+ }
1801
+
1802
+ [data-blok-database-column-header]:hover [data-blok-database-delete-column] {
1803
+ opacity: 1;
1804
+ }
1805
+
1806
+ [data-blok-database-delete-column]:hover {
1807
+ color: var(--blok-database-delete-hover-text);
1808
+ }
1809
+
1810
+ /**
1811
+ * Column header pill — rounded badge containing dot + title.
1812
+ * When the column has a color, the pill gets a colored background (set inline via JS).
1813
+ * Sized to content only — never stretches to fill available space.
1814
+ */
1815
+ [data-blok-database-column-pill] {
1816
+ display: inline-flex;
1817
+ align-items: center;
1818
+ gap: 5px;
1819
+ padding: 2px 7px 2px 5px;
1820
+ border-radius: 20px;
1821
+ flex: 0 0 auto;
1822
+ min-width: 0;
1823
+ width: fit-content;
1824
+ }
1825
+
1826
+ /**
1827
+ * In dark theme, colored pills use white text for legibility over the
1828
+ * saturated background (overrides the inline color set by JS).
1829
+ */
1830
+ @media (prefers-color-scheme: dark) {
1831
+ :root:not([data-blok-theme="light"]) [data-blok-database-column][data-color] [data-blok-database-column-pill] {
1832
+ color: rgba(255, 255, 255, 0.9) !important;
1833
+ }
1834
+ }
1835
+
1836
+ [data-blok-theme="dark"] [data-blok-database-column][data-color] [data-blok-database-column-pill] {
1837
+ color: rgba(255, 255, 255, 0.9) !important;
1838
+ }
1839
+
1840
+ /**
1841
+ * Column status dot — solid circle using the accent text color.
1842
+ */
1843
+ [data-blok-database-column-dot] {
1844
+ width: 8px;
1845
+ height: 8px;
1846
+ border-radius: 50%;
1847
+ flex-shrink: 0;
1848
+ }
1849
+
1850
+ /**
1851
+ * Column title text — uppercase status-label style, never truncate.
1852
+ */
1853
+ [data-blok-database-column-title],
1854
+ [data-blok-database-column-title-input] {
1855
+ white-space: nowrap;
1856
+ font-size: 14px;
1857
+ font-weight: 400;
1858
+ text-transform: capitalize;
1859
+ letter-spacing: 0.04em;
1860
+ }
1861
+
1862
+ [data-blok-database-column-title-input] {
1863
+ border: none;
1864
+ outline: none;
1865
+ padding: 0;
1866
+ min-width: 0;
1867
+ field-sizing: content;
1868
+ }
1869
+
1870
+ /**
1871
+ * Card title text — clamp to two lines.
1872
+ */
1873
+ [data-blok-database-card-title] {
1874
+ font-size: 14px;
1875
+ font-weight: 500;
1876
+ line-height: 1.45;
1877
+ word-break: break-word;
1878
+ }
1879
+
1880
+ [data-blok-database-card-title][data-placeholder] {
1881
+ color: var(--blok-database-card-placeholder);
1882
+ font-style: normal;
1883
+ }
1884
+
1885
+ [data-blok-database-card][data-empty] {
1886
+ background-color: transparent !important;
1887
+ box-shadow: none !important;
1888
+ }
1889
+
1890
+ /**
1891
+ * Drawer — base layout (fixed right panel) with slide-in animation.
1892
+ */
1893
+ [data-blok-database-drawer] {
1894
+ position: fixed;
1895
+ top: 0;
1896
+ right: 0;
1897
+ height: 100%;
1898
+ width: 0;
1899
+ z-index: 1000;
1900
+ overflow: hidden;
1901
+ display: flex;
1902
+ flex-direction: column;
1903
+ border-left: 1px solid var(--blok-popover-border, #e8e8eb);
1904
+ background-color: var(--blok-popover-bg, #fff);
1905
+ box-shadow: -4px 0 12px rgba(0, 0, 0, 0.08);
1906
+ transition: width 200ms ease;
1907
+ }
1908
+
1909
+ /**
1910
+ * Drawer toolbar — thin top bar with close button.
1911
+ */
1912
+ [data-blok-database-drawer-toolbar] {
1913
+ display: flex;
1914
+ align-items: center;
1915
+ padding: 8px 12px;
1916
+ flex-shrink: 0;
1917
+ border-bottom: 1px solid var(--blok-database-drawer-border);
1918
+ }
1919
+
1920
+ /**
1921
+ * Drawer close button — double-chevron icon.
1922
+ */
1923
+ [data-blok-database-drawer-close] {
1924
+ display: inline-flex;
1925
+ align-items: center;
1926
+ background: none;
1927
+ border: none;
1928
+ cursor: pointer;
1929
+ padding: 4px;
1930
+ border-radius: 4px;
1931
+ color: var(--blok-database-add-text);
1932
+ gap: -4px;
1933
+ }
1934
+
1935
+ [data-blok-database-drawer-close]:hover {
1936
+ background-color: var(--blok-database-drawer-border);
1937
+ }
1938
+
1939
+ [data-blok-database-drawer-close] svg {
1940
+ width: 14px;
1941
+ height: 14px;
1942
+ margin-left: -6px;
1943
+ }
1944
+
1945
+ [data-blok-database-drawer-close] svg:first-child {
1946
+ margin-left: 0;
1947
+ }
1948
+
1949
+ /**
1950
+ * Drawer scrollable content area.
1951
+ */
1952
+ [data-blok-database-drawer-content] {
1953
+ flex: 1;
1954
+ overflow-y: auto;
1955
+ padding: 40px 60px 20px;
1956
+ }
1957
+
1958
+ /**
1959
+ * Drawer title — large, Notion-style textarea that auto-resizes.
1960
+ */
1961
+ [data-blok-database-drawer-title] {
1962
+ display: block;
1963
+ width: 100%;
1964
+ font-size: 32px;
1965
+ font-weight: 700;
1966
+ border: none;
1967
+ outline: none;
1968
+ background-color: transparent;
1969
+ color: inherit;
1970
+ padding: 0;
1971
+ margin-bottom: 12px;
1972
+ line-height: 1.2;
1973
+ resize: none;
1974
+ overflow: hidden;
1975
+ font-family: inherit;
1976
+ }
1977
+
1978
+ [data-blok-database-drawer-title]::placeholder {
1979
+ color: var(--blok-database-add-text);
1980
+ }
1981
+
1982
+ /**
1983
+ * Drawer properties section.
1984
+ */
1985
+ [data-blok-database-drawer-props] {
1986
+ display: flex;
1987
+ flex-direction: column;
1988
+ gap: 4px;
1989
+ margin-bottom: 16px;
1990
+ }
1991
+
1992
+ /**
1993
+ * Drawer property row — label + value pair.
1994
+ */
1995
+ [data-blok-database-drawer-prop-row] {
1996
+ display: flex;
1997
+ align-items: center;
1998
+ gap: 8px;
1999
+ min-height: 32px;
2000
+ font-size: 14px;
2001
+ }
2002
+
2003
+ /**
2004
+ * Drawer property label — muted left column.
2005
+ */
2006
+ [data-blok-database-drawer-prop-label] {
2007
+ color: var(--blok-database-add-text);
2008
+ min-width: 100px;
2009
+ flex-shrink: 0;
2010
+ font-size: 14px;
2011
+ }
2012
+
2013
+ /**
2014
+ * Drawer status pill badge — colored chip.
2015
+ */
2016
+ [data-blok-database-drawer-status-pill] {
2017
+ display: inline-flex;
2018
+ align-items: center;
2019
+ gap: 6px;
2020
+ padding: 2px 8px;
2021
+ border-radius: 4px;
2022
+ font-size: 14px;
2023
+ font-weight: 500;
2024
+ line-height: 1.4;
2025
+ }
2026
+
2027
+ /**
2028
+ * Drawer status dot — small circle inside pill.
2029
+ */
2030
+ [data-blok-database-drawer-status-dot] {
2031
+ width: 8px;
2032
+ height: 8px;
2033
+ border-radius: 50%;
2034
+ flex-shrink: 0;
2035
+ }
2036
+
2037
+ /**
2038
+ * Drawer divider.
2039
+ */
2040
+ [data-blok-database-drawer] hr {
2041
+ border: none;
2042
+ border-top: 1px solid var(--blok-database-drawer-border);
2043
+ margin: 0 0 4px;
2044
+ }
2045
+
2046
+ /**
2047
+ * Drawer editor holder.
2048
+ */
2049
+ [data-blok-database-drawer-editor] {
2050
+ flex: 1;
2051
+ min-height: 200px;
2052
+ margin-left: -53px;
2053
+ }
2054
+
2055
+ /**
2056
+ * Add card — match card height and visual rhythm.
2057
+ */
2058
+ [data-blok-database-add-card] {
2059
+ margin-top: 6px;
2060
+ padding: 10px 12px;
2061
+ border-radius: 12px;
2062
+ }
2063
+
2064
+ [data-blok-database-add-card-icon] {
2065
+ display: flex;
2066
+ align-items: center;
2067
+ flex-shrink: 0;
2068
+ }
2069
+
2070
+ [data-blok-database-add-card-icon] svg {
2071
+ width: 18px;
2072
+ height: 18px;
2073
+ }
2074
+
2075
+ /**
2076
+ * Card count badge — muted counter after column title.
2077
+ */
2078
+ [data-blok-database-column-count] {
2079
+ color: var(--blok-database-add-text);
2080
+ font-size: 13px;
2081
+ font-weight: 400;
2082
+ margin-left: 2px;
2083
+ flex-shrink: 0;
2084
+ }
2085
+
2086
+ /**
2087
+ * Empty column placeholder — centered muted text.
2088
+ */
2089
+ [data-blok-database-empty-placeholder] {
2090
+ color: var(--blok-database-add-text);
2091
+ font-size: 13px;
2092
+ text-align: center;
2093
+ padding: 12px 0;
2094
+ }
2095
+
2096
+ /**
2097
+ * Drawer — ensure editor tools toolbar doesn't overflow.
2098
+ */
2099
+ [data-blok-database-drawer-editor] .ce-toolbar {
2100
+ left: 0;
2101
+ right: 0;
2102
+ }
2103
+
2104
+ /* Database Title */
2105
+ [data-blok-database-title] {
2106
+ padding-left: max(0px, calc((100% - var(--max-width-content)) / 2));
2107
+ padding-right: max(0px, calc((100% - var(--max-width-content)) / 2));
2108
+ }
2109
+
2110
+ /* Database Tab Bar */
2111
+ [data-blok-database-tab-bar] {
2112
+ display: flex;
2113
+ align-items: center;
2114
+ gap: 2px;
2115
+ padding: 4px 0 8px;
2116
+ padding-left: max(0px, calc((100% - var(--max-width-content)) / 2));
2117
+ }
2118
+
2119
+ [data-blok-database-title-row] {
2120
+ display: flex;
2121
+ align-items: center;
2122
+ margin-bottom: 4px;
2123
+ }
2124
+
2125
+ /* Single-view mode: move centering offset to the row, strip it from the title
2126
+ so the + button sits exactly 4px after the title text */
2127
+ [data-blok-database-title-row][data-single-view] {
2128
+ padding-left: max(0px, calc((100% - var(--max-width-content)) / 2));
2129
+ }
2130
+
2131
+ [data-blok-database-title-row][data-single-view] [data-blok-database-title] {
2132
+ flex: 0 1 auto;
2133
+ min-width: 0;
2134
+ padding-left: 0;
2135
+ padding-right: 0;
2136
+ }
2137
+
2138
+ [data-blok-database-title-row][data-single-view] [data-blok-database-add-view] {
2139
+ margin-left: 4px;
2140
+ }
2141
+
2142
+ /* When + button is inside the title row, show it on row hover */
2143
+ [data-blok-database-title-row]:hover [data-blok-database-add-view],
2144
+ [data-blok-database-title-row] [data-blok-database-add-view][data-popover-open] {
2145
+ opacity: 1;
2146
+ }
2147
+
2148
+ [data-blok-database-tab] {
2149
+ display: flex;
2150
+ align-items: center;
2151
+ gap: 6px;
2152
+ padding: 8px 16px;
2153
+ border-radius: 10px;
2154
+ cursor: grab;
2155
+ font-size: 14px;
2156
+ font-weight: 400;
2157
+ color: var(--blok-database-tab-text);
2158
+ user-select: none;
2159
+ white-space: nowrap;
2160
+ transition: background-color 120ms ease;
2161
+ }
2162
+
2163
+ [data-blok-database-tab-bar][data-dragging] [data-blok-database-tab] {
2164
+ cursor: grabbing;
2165
+ }
2166
+
2167
+ [data-blok-database-tab] svg {
2168
+ width: 16px;
2169
+ height: 16px;
2170
+ flex-shrink: 0;
2171
+ }
2172
+
2173
+ [data-blok-database-tab]:hover {
2174
+ background-color: var(--blok-database-tab-bg-hover);
2175
+ }
2176
+
2177
+ [data-blok-database-tab][data-active] {
2178
+ background-color: var(--blok-database-tab-bg-active);
2179
+ color: var(--blok-database-tab-text-active);
2180
+ }
2181
+
2182
+ [data-blok-database-add-view] {
2183
+ display: flex;
2184
+ align-items: center;
2185
+ justify-content: center;
2186
+ width: 32px;
2187
+ height: 32px;
2188
+ border: none;
2189
+ background: none;
2190
+ border-radius: 8px;
2191
+ cursor: pointer;
2192
+ color: var(--blok-database-tab-text);
2193
+ margin-left: 2px;
2194
+ transition: background-color 120ms ease, opacity 120ms ease;
2195
+ opacity: 0;
2196
+ }
2197
+
2198
+ [data-blok-database-add-view] svg {
2199
+ width: 20px;
2200
+ height: 20px;
2201
+ flex-shrink: 0;
2202
+ }
2203
+
2204
+ [data-blok-database-tab-bar]:hover [data-blok-database-add-view],
2205
+ [data-blok-database-tab-bar][data-popover-open] [data-blok-database-add-view],
2206
+ [data-blok-database-add-view][data-popover-open] {
2207
+ opacity: 1;
2208
+ }
2209
+
2210
+ [data-blok-database-add-view]:hover,
2211
+ [data-blok-database-add-view][data-popover-open] {
2212
+ background-color: var(--blok-database-tab-bg-hover);
2213
+ }
2214
+
2215
+ [data-blok-database-tab-more] {
2216
+ padding: 4px 10px;
2217
+ border-radius: 6px;
2218
+ font-size: 13px;
2219
+ color: var(--blok-database-tab-text);
2220
+ cursor: pointer;
2221
+ white-space: nowrap;
2222
+ transition: background-color 120ms ease;
2223
+ }
2224
+
2225
+ [data-blok-database-tab-more]:hover {
2226
+ background-color: var(--blok-database-tab-bg-hover);
2227
+ }
2228
+
2229
+ /* Overflow dropdown */
2230
+ [data-blok-database-tab-overflow-dropdown] {
2231
+ background: var(--blok-database-popover-bg);
2232
+ border-radius: 10px;
2233
+ box-shadow: var(--blok-database-popover-shadow);
2234
+ padding: 6px;
2235
+ }
2236
+
2237
+ /* View option items (rendered as Html items inside PopoverDesktop) */
2238
+ [data-blok-database-view-popover-heading] {
2239
+ padding: 6px 8px 4px;
2240
+ font-size: 11px;
2241
+ font-weight: 600;
2242
+ letter-spacing: 0.05em;
2243
+ text-transform: uppercase;
2244
+ color: var(--blok-database-tab-text);
2245
+ }
2246
+
2247
+ [data-blok-database-view-option] {
2248
+ display: flex;
2249
+ flex-direction: row;
2250
+ align-items: flex-start;
2251
+ gap: 10px;
2252
+ padding: 7px 8px;
2253
+ border-radius: 6px;
2254
+ cursor: pointer;
2255
+ transition: background-color 120ms ease;
2256
+ }
2257
+
2258
+ [data-blok-database-view-option]:hover {
2259
+ background-color: var(--blok-database-popover-hover);
2260
+ }
2261
+
2262
+ [data-blok-database-view-option-icon] {
2263
+ display: flex;
2264
+ align-items: center;
2265
+ justify-content: center;
2266
+ width: 30px;
2267
+ height: 30px;
2268
+ border-radius: 7px;
2269
+ background: var(--blok-database-popover-hover);
2270
+ color: var(--blok-database-tab-text-active);
2271
+ flex-shrink: 0;
2272
+ }
2273
+
2274
+ [data-blok-database-view-option-icon] svg {
2275
+ width: 16px;
2276
+ height: 16px;
2277
+ }
2278
+
2279
+ [data-blok-database-view-option-text] {
2280
+ display: flex;
2281
+ flex-direction: column;
2282
+ gap: 1px;
2283
+ min-width: 0;
2284
+ }
2285
+
2286
+ [data-blok-database-view-option-label] {
2287
+ font-size: 13px;
2288
+ font-weight: 500;
2289
+ color: var(--blok-database-tab-text-active);
2290
+ line-height: 1.3;
2291
+ }
2292
+
2293
+ [data-blok-database-view-option-desc] {
2294
+ font-size: 11px;
2295
+ color: var(--blok-database-tab-text);
2296
+ line-height: 1.3;
2297
+ }
2298
+
2299
+ /* Overflow dropdown items */
2300
+ [data-blok-database-tab-overflow-item] {
2301
+ display: flex;
2302
+ align-items: center;
2303
+ gap: 10px;
2304
+ padding: 7px 10px;
2305
+ border-radius: 6px;
2306
+ cursor: pointer;
2307
+ font-size: 14px;
2308
+ font-weight: 400;
2309
+ transition: background-color 120ms ease;
2310
+ }
2311
+
2312
+ [data-blok-database-tab-overflow-item]:hover {
2313
+ background-color: var(--blok-database-popover-hover);
2314
+ }
2315
+
2316
+ [data-blok-database-tab-overflow-item][data-active] {
2317
+ background-color: var(--blok-database-tab-bg-active);
2318
+ }
2319
+
2320
+ [data-blok-database-tab-overflow-new] {
2321
+ padding: 7px 10px;
2322
+ font-size: 14px;
2323
+ color: var(--blok-database-tab-text);
2324
+ cursor: pointer;
2325
+ border-radius: 6px;
2326
+ transition: background-color 120ms ease;
2327
+ }
2328
+
2329
+ [data-blok-database-tab-overflow-new]:hover {
2330
+ background-color: var(--blok-database-popover-hover);
2331
+ }
2332
+
2333
+ [data-blok-database-tab-overflow-separator] {
2334
+ height: 1px;
2335
+ margin: 4px 10px;
2336
+ background-color: var(--blok-database-drawer-border);
2337
+ }
2338
+
2339
+ /* Tab rename input */
2340
+ [data-blok-database-tab-rename-input] {
2341
+ border: 1px solid var(--blok-database-drawer-border);
2342
+ border-radius: 4px;
2343
+ padding: 2px 6px;
2344
+ font-size: 14px;
2345
+ font-family: inherit;
2346
+ background: var(--blok-database-popover-bg);
2347
+ color: var(--blok-database-tab-text-active);
2348
+ outline: none;
2349
+ width: 80px;
2350
+ }
2351
+
2352
+ /* Tab ghost during drag */
2353
+ [data-blok-database-tab-ghost] {
2354
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
2355
+ border-radius: 6px;
2356
+ background: var(--blok-database-tab-bg-active);
2357
+ }
2358
+
2359
+ /* Board container for slide transitions */
2360
+ [data-blok-database-board-container] {
2361
+ position: relative;
2362
+ overflow: hidden;
2363
+ }
2364
+
2365
+ /* ─── List View ──────────────────────────────────────── */
2366
+
2367
+ /**
2368
+ * List wrapper — constrained to content width, centered like the editor body.
2369
+ * Uses the same padding trick as the tab bar and board view.
2370
+ */
2371
+ [data-blok-database-list] {
2372
+ display: flex;
2373
+ flex-direction: column;
2374
+ padding-left: max(0px, calc((100% - var(--max-width-content)) / 2));
2375
+ padding-right: max(0px, calc((100% - var(--max-width-content)) / 2));
2376
+ }
2377
+
2378
+ /**
2379
+ * List row — horizontal flex item. Hover reveals the delete button and
2380
+ * highlights the row with a subtle background fill, matching Notion style.
2381
+ */
2382
+ [data-blok-database-list-row] {
2383
+ display: flex;
2384
+ align-items: center;
2385
+ gap: 8px;
2386
+ padding: 5px 8px;
2387
+ border-radius: 4px;
2388
+ cursor: pointer;
2389
+ position: relative;
2390
+ font-size: 14px;
2391
+ transition: background-color 80ms ease;
2392
+ /* Thin rule between rows */
2393
+ border-bottom: 1px solid transparent;
2394
+ }
2395
+
2396
+ [data-blok-database-list-row]:not(:last-child) {
2397
+ border-bottom-color: color-mix(in srgb, currentColor 5%, transparent);
2398
+ }
2399
+
2400
+ [data-blok-database-list-row]:hover {
2401
+ background-color: var(--blok-database-add-hover-bg);
2402
+ }
2403
+
2404
+ /**
2405
+ * Row title — fills available space, truncates overflow.
2406
+ */
2407
+ [data-blok-database-list-row-title] {
2408
+ flex: 1;
2409
+ overflow: hidden;
2410
+ text-overflow: ellipsis;
2411
+ white-space: nowrap;
2412
+ line-height: 1.5;
2413
+ min-width: 0;
2414
+ }
2415
+
2416
+ [data-blok-database-list-row-title][data-placeholder] {
2417
+ color: var(--blok-database-add-text);
2418
+ font-style: italic;
2419
+ }
2420
+
2421
+ /**
2422
+ * Properties area — flex row of badges + open button, right-aligned.
2423
+ */
2424
+ [data-blok-database-list-row-properties] {
2425
+ display: flex;
2426
+ align-items: center;
2427
+ gap: 6px;
2428
+ flex-shrink: 0;
2429
+ }
2430
+
2431
+ /**
2432
+ * Property badge — compact colored pill.
2433
+ */
2434
+ [data-blok-database-list-row-property] {
2435
+ display: inline-flex;
2436
+ align-items: center;
2437
+ font-size: 12px;
2438
+ font-weight: 500;
2439
+ line-height: 1;
2440
+ padding: 2px 7px;
2441
+ border-radius: 4px;
2442
+ white-space: nowrap;
2443
+ background: var(--blok-database-add-hover-bg);
2444
+ color: var(--blok-database-tab-text-active);
2445
+ }
2446
+
2447
+ /**
2448
+ * Open-row button — muted arrow, visible on hover.
2449
+ */
2450
+ [data-blok-database-list-row-open] {
2451
+ display: inline-flex;
2452
+ align-items: center;
2453
+ justify-content: center;
2454
+ width: 22px;
2455
+ height: 22px;
2456
+ opacity: 0;
2457
+ background: none;
2458
+ border: none;
2459
+ cursor: pointer;
2460
+ border-radius: 4px;
2461
+ color: var(--blok-database-add-text);
2462
+ flex-shrink: 0;
2463
+ transition: opacity 80ms ease, background-color 80ms ease, color 80ms ease;
2464
+ }
2465
+
2466
+ [data-blok-database-list-row-open]::after {
2467
+ content: '';
2468
+ display: block;
2469
+ width: 7px;
2470
+ height: 7px;
2471
+ border-right: 2px solid currentColor;
2472
+ border-top: 2px solid currentColor;
2473
+ transform: rotate(45deg);
2474
+ border-radius: 1px;
2475
+ flex-shrink: 0;
2476
+ }
2477
+
2478
+ [data-blok-database-list-row]:hover [data-blok-database-list-row-open] {
2479
+ opacity: 1;
2480
+ }
2481
+
2482
+ [data-blok-database-list-row-open]:hover {
2483
+ background-color: var(--blok-database-add-hover-bg);
2484
+ color: var(--blok-database-tab-text-active);
2485
+ }
2486
+
2487
+ /**
2488
+ * Delete row button — hidden until hover, inline after the open button.
2489
+ */
2490
+ [data-blok-database-list-row-properties] [data-blok-database-delete-row] {
2491
+ display: flex;
2492
+ align-items: center;
2493
+ justify-content: center;
2494
+ width: 18px;
2495
+ height: 18px;
2496
+ opacity: 0;
2497
+ background: none;
2498
+ border: none;
2499
+ cursor: pointer;
2500
+ border-radius: 3px;
2501
+ color: var(--blok-database-delete-text);
2502
+ font-size: 15px;
2503
+ line-height: 1;
2504
+ padding: 0;
2505
+ flex-shrink: 0;
2506
+ transition: opacity 80ms ease, color 80ms ease, background-color 80ms ease;
2507
+ }
2508
+
2509
+ [data-blok-database-list-row]:hover [data-blok-database-delete-row] {
2510
+ opacity: 1;
2511
+ }
2512
+
2513
+ [data-blok-database-list-row-properties] [data-blok-database-delete-row]:hover {
2514
+ color: var(--blok-database-delete-hover-text);
2515
+ background-color: color-mix(in srgb, currentColor 8%, transparent);
2516
+ }
2517
+
2518
+ /**
2519
+ * Add-row button — muted "+ New row" at bottom of list.
2520
+ */
2521
+ [data-blok-database-list] > [data-blok-database-add-row],
2522
+ [data-blok-database-list-rows] ~ [data-blok-database-add-row] {
2523
+ display: flex;
2524
+ align-items: center;
2525
+ gap: 6px;
2526
+ width: 100%;
2527
+ padding: 6px 8px;
2528
+ background: none;
2529
+ border: none;
2530
+ border-radius: 8px;
2531
+ cursor: pointer;
2532
+ font-size: 13px;
2533
+ color: var(--blok-database-add-text);
2534
+ text-align: left;
2535
+ transition: background-color 80ms ease, color 80ms ease;
2536
+ margin-top: 2px;
2537
+ }
2538
+
2539
+ [data-blok-database-list] > [data-blok-database-add-row]:hover,
2540
+ [data-blok-database-list-rows] ~ [data-blok-database-add-row]:hover {
2541
+ background-color: var(--blok-database-add-hover-bg);
2542
+ color: var(--blok-text-primary, inherit);
2543
+ }
2544
+
2545
+ /**
2546
+ * Group container — stacked sections when grouped by a select property.
2547
+ */
2548
+ [data-blok-database-list-group] {
2549
+ display: flex;
2550
+ flex-direction: column;
2551
+ margin-bottom: 4px;
2552
+ }
2553
+
2554
+ /**
2555
+ * Group header — clickable row containing toggle chevron, dot, title, count.
2556
+ */
2557
+ [data-blok-database-list-group-header] {
2558
+ display: flex;
2559
+ align-items: center;
2560
+ gap: 6px;
2561
+ padding: 6px 8px 4px;
2562
+ cursor: pointer;
2563
+ border-radius: 4px;
2564
+ user-select: none;
2565
+ transition: background-color 80ms ease;
2566
+ }
2567
+
2568
+ [data-blok-database-list-group-header]:hover {
2569
+ background-color: var(--blok-database-add-hover-bg);
2570
+ }
2571
+
2572
+ /**
2573
+ * Collapse toggle — small chevron, rotates when expanded/collapsed.
2574
+ */
2575
+ [data-blok-database-list-group-toggle] {
2576
+ font-size: 10px;
2577
+ color: var(--blok-database-add-text);
2578
+ line-height: 1;
2579
+ flex-shrink: 0;
2580
+ width: 12px;
2581
+ text-align: center;
2582
+ transition: color 80ms ease;
2583
+ }
2584
+
2585
+ [data-blok-database-list-group-header]:hover [data-blok-database-list-group-toggle] {
2586
+ color: var(--blok-database-tab-text-active);
2587
+ }
2588
+
2589
+ /**
2590
+ * Status dot — small colored circle before the group title.
2591
+ */
2592
+ [data-blok-database-list-group-dot] {
2593
+ width: 8px;
2594
+ height: 8px;
2595
+ border-radius: 50%;
2596
+ flex-shrink: 0;
2597
+ }
2598
+
2599
+ /**
2600
+ * Group title text.
2601
+ */
2602
+ [data-blok-database-list-group-title] {
2603
+ font-size: 13px;
2604
+ font-weight: 600;
2605
+ color: var(--blok-database-tab-text-active);
2606
+ letter-spacing: 0.01em;
2607
+ }
2608
+
2609
+ /**
2610
+ * Row count badge — muted number after the group title.
2611
+ */
2612
+ [data-blok-database-list-group-count] {
2613
+ font-size: 12px;
2614
+ color: var(--blok-database-add-text);
2615
+ font-weight: 400;
2616
+ margin-left: 2px;
2617
+ }
2618
+
2619
+ /**
2620
+ * Rows container within a group — indented slightly, role=list.
2621
+ */
2622
+ [data-blok-database-list-rows] {
2623
+ display: flex;
2624
+ flex-direction: column;
2625
+ padding-left: 8px;
2626
+ }
2627
+
2628
+ /* ─── "Add a property" button ────────────────────────────────────────────── */
2629
+
2630
+ /**
2631
+ * Ghost dashed button that reveals itself on hover.
2632
+ * Full-width, sits below the last property row.
2633
+ */
2634
+ [data-blok-database-drawer-add-prop] {
2635
+ display: flex;
2636
+ align-items: center;
2637
+ gap: 7px;
2638
+ width: 100%;
2639
+ padding: 6px 8px;
2640
+ margin-top: 4px;
2641
+ background: none;
2642
+ border: 1.5px dashed transparent;
2643
+ border-radius: 6px;
2644
+ cursor: pointer;
2645
+ font-size: 13px;
2646
+ font-weight: 500;
2647
+ color: var(--blok-database-add-text);
2648
+ text-align: left;
2649
+ transition:
2650
+ background-color 130ms ease,
2651
+ border-color 130ms ease,
2652
+ color 130ms ease;
2653
+ }
2654
+
2655
+ [data-blok-database-drawer-add-prop]:hover {
2656
+ background-color: var(--blok-database-add-hover-bg);
2657
+ border-color: var(--blok-database-add-border);
2658
+ color: var(--blok-database-tab-text-active);
2659
+ }
2660
+
2661
+ [data-blok-database-drawer-add-prop]:active {
2662
+ background-color: var(--blok-item-hover-bg);
2663
+ }
2664
+
2665
+ /* ─── Property type popover ──────────────────────────────────────────────── */
2666
+
2667
+ /**
2668
+ * Entrance keyframe — subtle pop-in from slightly above.
2669
+ */
2670
+ @keyframes blok-prop-popover-in {
2671
+ from {
2672
+ opacity: 0;
2673
+ transform: scale(0.96) translateY(-4px);
2674
+ }
2675
+ to {
2676
+ opacity: 1;
2677
+ transform: scale(1) translateY(0);
2678
+ }
2679
+ }
2680
+
2681
+ /**
2682
+ * Popover container — vertical list, clean card.
2683
+ */
2684
+ [data-blok-database-property-type-popover] {
2685
+ min-width: 210px;
2686
+ background: var(--blok-database-popover-bg);
2687
+ border-radius: 10px;
2688
+ box-shadow: var(--blok-database-popover-shadow);
2689
+ padding: 6px;
2690
+ animation: blok-prop-popover-in 120ms cubic-bezier(0.16, 1, 0.3, 1) both;
2691
+ transform-origin: top left;
2692
+ }
2693
+
2694
+ /**
2695
+ * Section heading — "Property type" label above the list.
2696
+ */
2697
+ [data-blok-database-property-type-heading] {
2698
+ padding: 6px 8px 4px;
2699
+ font-size: 11px;
2700
+ font-weight: 600;
2701
+ letter-spacing: 0.06em;
2702
+ text-transform: uppercase;
2703
+ color: var(--blok-database-add-text);
2704
+ user-select: none;
2705
+ }
2706
+
2707
+ /**
2708
+ * Each property type item — icon chip + label row.
2709
+ */
2710
+ [data-blok-database-property-type-option] {
2711
+ display: flex;
2712
+ align-items: center;
2713
+ gap: 10px;
2714
+ padding: 6px 8px;
2715
+ border-radius: 6px;
2716
+ cursor: pointer;
2717
+ font-size: 13.5px;
2718
+ color: var(--blok-database-tab-text-active);
2719
+ transition: background-color 100ms ease;
2720
+ user-select: none;
2721
+ }
2722
+
2723
+ [data-blok-database-property-type-option]:hover {
2724
+ background-color: var(--blok-database-popover-hover);
2725
+ }
2726
+
2727
+ [data-blok-database-property-type-option]:active {
2728
+ background-color: var(--blok-item-hover-bg);
2729
+ }
2730
+
2731
+ /**
2732
+ * Icon chip — small tinted square to the left of the label.
2733
+ */
2734
+ [data-blok-database-property-type-option-icon] {
2735
+ display: flex;
2736
+ align-items: center;
2737
+ justify-content: center;
2738
+ width: 26px;
2739
+ height: 26px;
2740
+ border-radius: 5px;
2741
+ background: var(--blok-popover-icon-bg);
2742
+ color: var(--blok-database-tab-text-active);
2743
+ flex-shrink: 0;
2744
+ transition: background-color 100ms ease;
2745
+ }
2746
+
2747
+ [data-blok-database-property-type-option]:hover [data-blok-database-property-type-option-icon] {
2748
+ background: var(--blok-popover-icon-active-bg);
2749
+ color: var(--blok-active-icon);
2750
+ }
2751
+
2752
+ [data-blok-database-property-type-option-icon] svg {
2753
+ width: 14px;
2754
+ height: 14px;
2755
+ }