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