@jackuait/blok 0.9.0 → 0.10.0-beta.10

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 (492) hide show
  1. package/codemod/migrate-editorjs-to-blok.js +50 -2
  2. package/codemod/test.js +39 -6
  3. package/dist/blok.mjs +3 -3
  4. package/dist/chunks/_basePickBy-DISiGhsr.mjs +410 -0
  5. package/dist/chunks/_baseUniq-gAuHRtRF.mjs +1045 -0
  6. package/dist/chunks/_getTag-Aj56Wgor.mjs +26 -0
  7. package/dist/chunks/arc-D-pL2Ftf.mjs +80 -0
  8. package/dist/chunks/architecture-YZFGNWBL-CuqTb_ae.mjs +3 -0
  9. package/dist/chunks/architectureDiagram-Q4EWVU46-DS7mqjL2.mjs +4066 -0
  10. package/dist/chunks/array-BsrkCVSZ.mjs +6 -0
  11. package/dist/chunks/blockDiagram-DXYQGD6D-BTtcn4NG.mjs +3259 -0
  12. package/dist/chunks/{blok-RJ3hyzDH.mjs → blok-Bg3-zpSu.mjs} +2192 -2156
  13. package/dist/chunks/c-C6JXJf5K.mjs +5 -0
  14. package/dist/chunks/c4Diagram-AHTNJAMY-Y4Dcwcoo.mjs +2956 -0
  15. package/dist/chunks/ccount-C9Y7nqDe.mjs +10 -0
  16. package/dist/chunks/channel-Cln-eWE0.mjs +5 -0
  17. package/dist/chunks/chunk-2KRD3SAO-DkM7qh-k.mjs +20 -0
  18. package/dist/chunks/chunk-336JU56O-B17AtzlK.mjs +49 -0
  19. package/dist/chunks/chunk-426QAEUC-D6UAVUog.mjs +13 -0
  20. package/dist/chunks/chunk-4BX2VUAB-CgIkjF7Z.mjs +19 -0
  21. package/dist/chunks/chunk-4TB4RGXK-BUP4eON3.mjs +3250 -0
  22. package/dist/chunks/chunk-55IACEB6-zZ-IgaSt.mjs +8 -0
  23. package/dist/chunks/chunk-5FUZZQ4R-DsZnJYxM.mjs +3786 -0
  24. package/dist/chunks/chunk-5PVQY5BW-CORl9dnu.mjs +1692 -0
  25. package/dist/chunks/chunk-67CJDMHE-m0UKdcSH.mjs +20 -0
  26. package/dist/chunks/chunk-7N4EOEYR-DKNajFZd.mjs +29 -0
  27. package/dist/chunks/chunk-AA7GKIK3-BeLhNzKa.mjs +24 -0
  28. package/dist/chunks/chunk-BSJP7CBP-CJExmx8a.mjs +83 -0
  29. package/dist/chunks/chunk-CIAEETIT-CTikoJ19.mjs +20 -0
  30. package/dist/chunks/chunk-D6kmoKXy.mjs +20 -0
  31. package/dist/chunks/chunk-EDXVE4YY-DjInnnwb.mjs +26 -0
  32. package/dist/chunks/chunk-ENJZ2VHE-CIl5FRDA.mjs +566 -0
  33. package/dist/chunks/chunk-FMBD7UC4-DjV0W7UE.mjs +5 -0
  34. package/dist/chunks/chunk-FOC6F5B3-LmHCCWYY.mjs +20 -0
  35. package/dist/chunks/chunk-ICPOFSXX-BHZIN46A.mjs +3290 -0
  36. package/dist/chunks/chunk-K5T4RW27-BPZ6fFnW.mjs +16370 -0
  37. package/dist/chunks/chunk-KGLVRYIC-S1OQdW76.mjs +20 -0
  38. package/dist/chunks/chunk-LIHQZDEY-CjtyJlI6.mjs +55 -0
  39. package/dist/chunks/chunk-ORNJ4GCN-CdO0hAge.mjs +25 -0
  40. package/dist/chunks/chunk-OYMX7WX6-ApX8eV4o.mjs +2038 -0
  41. package/dist/chunks/chunk-QZHKN3VN-BGFuA6-k.mjs +12 -0
  42. package/dist/chunks/chunk-U2HBQHQK-B88ZUOTL.mjs +1875 -0
  43. package/dist/chunks/chunk-X2U36JSP-1VS5TyCr.mjs +68 -0
  44. package/dist/chunks/chunk-XPW4576I-BMupdrvo.mjs +1146 -0
  45. package/dist/chunks/chunk-YZCP3GAM-BQ7eEsm2.mjs +60 -0
  46. package/dist/chunks/chunk-ZZ45TVLE-D1xks9zd.mjs +33 -0
  47. package/dist/chunks/classDiagram-6PBFFD2Q-C59BZJxp.mjs +30 -0
  48. package/dist/chunks/classDiagram-v2-HSJHXN6E-7a0qeMsE.mjs +30 -0
  49. package/dist/chunks/clone-Ckjt1LtE.mjs +8 -0
  50. package/dist/chunks/{constants-A3iVmQL8.mjs → constants-D7zjGD5W.mjs} +529 -530
  51. package/dist/chunks/core-Bm6DWt7D.mjs +4501 -0
  52. package/dist/chunks/cose-bilkent-S5V4N54A-Bpcs2jA_.mjs +2246 -0
  53. package/dist/chunks/cpp-BdjvAny0.mjs +16 -0
  54. package/dist/chunks/csharp-YHxeHpeH.mjs +3 -0
  55. package/dist/chunks/css-DdLevFaX.mjs +3 -0
  56. package/dist/chunks/cytoscape.esm-BvD8wo00.mjs +18108 -0
  57. package/dist/chunks/dagre-CGNbYTKq.mjs +1536 -0
  58. package/dist/chunks/dagre-KV5264BT-DUD9ikgN.mjs +298 -0
  59. package/dist/chunks/dart-DrPWqfcC.mjs +3 -0
  60. package/dist/chunks/default-qigT1Xpq.mjs +4 -0
  61. package/dist/chunks/defaultLocale-ChuSeAxU.mjs +201 -0
  62. package/dist/chunks/diagram-5BDNPKRD-CZGfTYEe.mjs +112 -0
  63. package/dist/chunks/diagram-G4DWMVQ6-CuS0-h95.mjs +546 -0
  64. package/dist/chunks/diagram-MMDJMWI5-C-AEApYz.mjs +234 -0
  65. package/dist/chunks/diagram-TYMM5635-CiwAJVMq.mjs +144 -0
  66. package/dist/chunks/dist-Ctq-pyfb.mjs +59 -0
  67. package/dist/chunks/dockerfile-C68ALcaN.mjs +3 -0
  68. package/dist/chunks/engine-javascript-CJpnSvzf.mjs +2373 -0
  69. package/dist/chunks/erDiagram-SMLLAGMA-DeH5yck2.mjs +1712 -0
  70. package/dist/chunks/flowDiagram-DWJPFMVM-Cr6dwmQ5.mjs +4175 -0
  71. package/dist/chunks/ganttDiagram-T4ZO3ILL-K-divBg_.mjs +3083 -0
  72. package/dist/chunks/gitGraph-7Q5UKJZL-Dl-vQzrq.mjs +3 -0
  73. package/dist/chunks/gitGraphDiagram-UUTBAWPF-UytPZv72.mjs +792 -0
  74. package/dist/chunks/go-Fm5N96DN.mjs +3 -0
  75. package/dist/chunks/graphlib-Cye9EPNq.mjs +223 -0
  76. package/dist/chunks/graphql-BSnqmqgO.mjs +11 -0
  77. package/dist/chunks/html-BLNeZvnp.mjs +10 -0
  78. package/dist/chunks/{i18next-Ch0gVA3V.mjs → i18next-CXx5niYF.mjs} +1 -1
  79. package/dist/chunks/{i18next-loader-dH3UPF7S.mjs → i18next-loader-CwsYu0n6.mjs} +2 -2
  80. package/dist/chunks/info-OMHHGYJF-BOejJvJR.mjs +3 -0
  81. package/dist/chunks/infoDiagram-42DDH7IO-DuYnDbF3.mjs +29 -0
  82. package/dist/chunks/init-C6T-mugb.mjs +15 -0
  83. package/dist/chunks/ishikawaDiagram-UXIWVN3A-CHc59dLn.mjs +719 -0
  84. package/dist/chunks/java-83DWBpzu.mjs +5 -0
  85. package/dist/chunks/javascript-CBgeF1Xx.mjs +3 -0
  86. package/dist/chunks/journeyDiagram-VCZTEJTY-CD25C4_n.mjs +885 -0
  87. package/dist/chunks/json-BI17y-1H.mjs +3 -0
  88. package/dist/chunks/kanban-definition-6JOO6SKY-CTCT6N_p.mjs +980 -0
  89. package/dist/chunks/katex-CmTPfM0f.mjs +22026 -0
  90. package/dist/chunks/kotlin-DjnvsrfO.mjs +3 -0
  91. package/dist/chunks/latex-24n3TcOR.mjs +5 -0
  92. package/dist/chunks/{lightweight-i18n-1rbaxIZW.mjs → lightweight-i18n-Cvv8CWh4.mjs} +69 -2
  93. package/dist/chunks/line-Dct5pMmw.mjs +34 -0
  94. package/dist/chunks/linear-BRCpMvtr.mjs +289 -0
  95. package/dist/chunks/lua-DV0fuZWx.mjs +5 -0
  96. package/dist/chunks/markdown-BqQYT45f.mjs +3 -0
  97. package/dist/chunks/mdast-util-math-BlK2Zu-1.mjs +151 -0
  98. package/dist/chunks/mermaid-parser.core-CA3DKkuk.mjs +57 -0
  99. package/dist/chunks/mermaid-vF0cEnZ0.mjs +3 -0
  100. package/dist/chunks/mermaid.core-CA8nc1sZ.mjs +989 -0
  101. package/dist/{messages-DaOnbI6d.mjs → chunks/messages-8IHf7ZP3.mjs} +68 -1
  102. package/dist/chunks/{messages-C9aKfCro.mjs → messages-A_MkXDlG.mjs} +68 -1
  103. package/dist/{messages-BLEVLZve.mjs → chunks/messages-B0vPBsWq.mjs} +68 -1
  104. package/dist/chunks/{messages-C0hQPZmh2.mjs → messages-B2N4fUi72.mjs} +68 -1
  105. package/dist/{messages-HNAtlVax.mjs → chunks/messages-B4UMuyjT.mjs} +73 -6
  106. package/dist/chunks/{messages-DRUkmDVZ.mjs → messages-B9kmbUWV.mjs} +68 -1
  107. package/dist/{messages-Dbsx9m5q2.mjs → chunks/messages-BA8Iv99Y2.mjs} +68 -1
  108. package/dist/chunks/{messages-Da-SOTFW.mjs → messages-BAsb5CgZ.mjs} +68 -1
  109. package/dist/{messages-D1P0QGLz2.mjs → chunks/messages-BDZA10kl2.mjs} +68 -1
  110. package/dist/chunks/{messages-ComLU2T32.mjs → messages-BE6lHKwf.mjs} +68 -1
  111. package/dist/chunks/{messages-gaxTO-87.mjs → messages-BQYvBqm2.mjs} +68 -1
  112. package/dist/chunks/{messages-BwKs-9DF.mjs → messages-BSghd0ez.mjs} +68 -1
  113. package/dist/{messages-BPRR6TMf.mjs → chunks/messages-BUVhHx0q2.mjs} +68 -1
  114. package/dist/{messages-B7jZvo-m.mjs → chunks/messages-BVjoM7P0.mjs} +68 -1
  115. package/dist/{messages-C-4z1-Dh.mjs → chunks/messages-BXM80fdr2.mjs} +68 -1
  116. package/dist/{messages-Bm0nvUuj2.mjs → chunks/messages-BYlSMRkd.mjs} +68 -1
  117. package/dist/chunks/{messages-DLPrj3Dh.mjs → messages-BYxLFj7y.mjs} +68 -1
  118. package/dist/{messages-BRcLIBCd2.mjs → chunks/messages-BeFqtIrc2.mjs} +68 -1
  119. package/dist/{messages-zHkURG6V2.mjs → chunks/messages-Bfnq1xv4.mjs} +68 -1
  120. package/dist/chunks/{messages-Z762-GLL.mjs → messages-BhzzNkN-.mjs} +68 -1
  121. package/dist/chunks/{messages-COJ0CbVV2.mjs → messages-BjadX8jR2.mjs} +68 -1
  122. package/dist/{messages-B2ZwD4n9.mjs → chunks/messages-Bp8qin1R.mjs} +68 -1
  123. package/dist/chunks/{messages-DdEWnfAR.mjs → messages-Bphq_Bt3.mjs} +71 -4
  124. package/dist/{messages-CUDbNJG5.mjs → chunks/messages-Bxvi1ebN.mjs} +68 -1
  125. package/dist/chunks/{messages-B0t2L3bi.mjs → messages-C0HvoMPb.mjs} +68 -1
  126. package/dist/{messages-D6qfWi6H2.mjs → chunks/messages-C3aX3q0H.mjs} +68 -1
  127. package/dist/chunks/{messages-v9NkxRcL.mjs → messages-C6Mpiacw.mjs} +68 -1
  128. package/dist/chunks/{messages-CqZ9vFyx.mjs → messages-C7VGpihw.mjs} +69 -2
  129. package/dist/chunks/{messages-Yj4Q1_uX2.mjs → messages-CKBhDGI3.mjs} +69 -2
  130. package/dist/chunks/{messages-DxtnwNPo.mjs → messages-COO5xmcA.mjs} +68 -1
  131. package/dist/{messages-CZTcgUzd.mjs → chunks/messages-CSJ_zb3a2.mjs} +68 -1
  132. package/dist/{messages-A8aZS7d_2.mjs → chunks/messages-CSL-6xfb2.mjs} +68 -1
  133. package/dist/{messages-CxruHsuD2.mjs → chunks/messages-CVdpweyf2.mjs} +69 -2
  134. package/dist/{messages-D2Mf9z2D.mjs → chunks/messages-Cdf0W9H02.mjs} +68 -1
  135. package/dist/chunks/{messages-DAbCNake2.mjs → messages-Ck81cQkn2.mjs} +68 -1
  136. package/dist/chunks/{messages-Dyku8Cut.mjs → messages-Cmf6NhSC.mjs} +68 -1
  137. package/dist/chunks/{messages-DQ6bFum9.mjs → messages-Cs81Z_Bh.mjs} +68 -1
  138. package/dist/chunks/{messages-cegxHurd2.mjs → messages-Cu-Wevxs2.mjs} +68 -1
  139. package/dist/{messages-D2HwpoUE.mjs → chunks/messages-D3zojZ94.mjs} +69 -2
  140. package/dist/{messages-BfTBVFd9.mjs → chunks/messages-D55HRx5O2.mjs} +68 -1
  141. package/dist/chunks/{messages-Dl03jd4b2.mjs → messages-D9N2MvQx2.mjs} +68 -1
  142. package/dist/{messages-DfXh-i9o.mjs → chunks/messages-DG-4DPmP.mjs} +68 -1
  143. package/dist/chunks/{messages-DmJf9laH2.mjs → messages-DGL1ySqb2.mjs} +68 -1
  144. package/dist/chunks/{messages-DfU4yvkL.mjs → messages-DJoNVjqP.mjs} +68 -1
  145. package/dist/{messages-Bsd4ruEY.mjs → chunks/messages-DMVXnAYj.mjs} +70 -3
  146. package/dist/{messages-3WhPEFd7.mjs → chunks/messages-DOuS1Qge.mjs} +68 -1
  147. package/dist/chunks/{messages-B1kDfIN82.mjs → messages-DWu1r4gc2.mjs} +68 -1
  148. package/dist/{messages-Dtih3ffa2.mjs → chunks/messages-DlLXpgWM2.mjs} +68 -1
  149. package/dist/chunks/{messages-DKNULJpc.mjs → messages-DlonA3wa.mjs} +69 -2
  150. package/dist/{messages-C5pBfa_W.mjs → chunks/messages-Dr0Ekmbz.mjs} +81 -14
  151. package/dist/{messages-Du62vI49.mjs → chunks/messages-DzTk8bJ5.mjs} +68 -1
  152. package/dist/{messages-DNAp0U4l2.mjs → chunks/messages-FWfsxpBz.mjs} +68 -1
  153. package/dist/{messages-B2YeJw8s2.mjs → chunks/messages-G416eyjY.mjs} +68 -1
  154. package/dist/chunks/{messages-C5-aaU2b.mjs → messages-Je5YvxiY.mjs} +68 -1
  155. package/dist/chunks/{messages-DHHZUf_H2.mjs → messages-JyvWu4rf2.mjs} +68 -1
  156. package/dist/chunks/{messages-D_6vPBzT.mjs → messages-KdawW5Na.mjs} +68 -1
  157. package/dist/chunks/{messages-DnuhgHG0.mjs → messages-MxpWO1db.mjs} +68 -1
  158. package/dist/{messages-DT4rHATO2.mjs → chunks/messages-NEqrrYvE2.mjs} +68 -1
  159. package/dist/chunks/{messages-DeSSxLsh.mjs → messages-RInp1ytX.mjs} +68 -1
  160. package/dist/{messages-DfEPVRdJ.mjs → chunks/messages-TRUuyiFB.mjs} +68 -1
  161. package/dist/chunks/{messages--eH7tTJV2.mjs → messages-aZcy0JQq2.mjs} +68 -1
  162. package/dist/{messages-O6z1uabG.mjs → chunks/messages-iS34FHFB.mjs} +68 -1
  163. package/dist/{messages-BE0DjTEC.mjs → chunks/messages-ihCjSFJI2.mjs} +68 -1
  164. package/dist/chunks/{messages-_5Pg5fKy2.mjs → messages-jfVpL9c-2.mjs} +68 -1
  165. package/dist/chunks/{messages-CaRSYuhO.mjs → messages-p1mbe__S.mjs} +68 -1
  166. package/dist/chunks/{messages-BGssMBWM2.mjs → messages-rCd0Rrw6.mjs} +69 -2
  167. package/dist/{messages-COgvIEeW.mjs → chunks/messages-xuqyb6Ff2.mjs} +68 -1
  168. package/dist/chunks/micromark-extension-math-BbkUb36G.mjs +169 -0
  169. package/dist/chunks/micromark-factory-space-y4SDWQKm.mjs +36 -0
  170. package/dist/chunks/mindmap-definition-QFDTVHPH-hNnyBkEP.mjs +1013 -0
  171. package/dist/chunks/{notifier-Butv4Dvo.mjs → notifier-CuvTt9pe.mjs} +1 -1
  172. package/dist/chunks/objectWithoutProperties-D0XxKB4n.mjs +23 -0
  173. package/dist/chunks/one-light-DmNO_Y4X.mjs +4 -0
  174. package/dist/chunks/ordinal-B-kolV-i.mjs +65 -0
  175. package/dist/chunks/packet-4T2RLAQJ-B5ZMgwzZ.mjs +3 -0
  176. package/dist/chunks/path-rIMjg_tH.mjs +85 -0
  177. package/dist/chunks/php-DmXKyPwJ.mjs +18 -0
  178. package/dist/chunks/pie-ZZUOXDRM-B9l6y0XJ.mjs +3 -0
  179. package/dist/chunks/pieDiagram-DEJITSTG-Gw-fsc6U.mjs +179 -0
  180. package/dist/chunks/python-DfwfY9t5.mjs +3 -0
  181. package/dist/chunks/quadrantDiagram-34T5L4WZ-CQ5fGYI5.mjs +1960 -0
  182. package/dist/chunks/r-BD2D7qEW.mjs +5 -0
  183. package/dist/chunks/radar-PYXPWWZC-D5kYmUaB.mjs +3 -0
  184. package/dist/chunks/requirementDiagram-MS252O5E-DjWKB42c.mjs +2224 -0
  185. package/dist/chunks/rough.esm-cmMIcj7N.mjs +1353 -0
  186. package/dist/chunks/ruby-DdOo03Kg.mjs +33 -0
  187. package/dist/chunks/rust-DEDueB5R.mjs +3 -0
  188. package/dist/chunks/sankeyDiagram-XADWPNL6-BIN2evSB.mjs +909 -0
  189. package/dist/chunks/scala-CsjqvxE4.mjs +3 -0
  190. package/dist/chunks/sequenceDiagram-FGHM5R23-CQz2lMoS.mjs +4181 -0
  191. package/dist/chunks/shellscript-Bh5zEpnQ.mjs +3 -0
  192. package/dist/chunks/sql-D9CrOi1i.mjs +3 -0
  193. package/dist/chunks/src-DVJl6f6s.mjs +2149 -0
  194. package/dist/chunks/stateDiagram-FHFEXIEX-BIBFsF65.mjs +218 -0
  195. package/dist/chunks/stateDiagram-v2-QKLJ7IA2-BZUmAVw7.mjs +28 -0
  196. package/dist/chunks/swift-Dpyt0s2c.mjs +3 -0
  197. package/dist/chunks/timeline-definition-GMOUNBTQ-CzvQ7Lav.mjs +1084 -0
  198. package/dist/chunks/{tools-nT6zA9QL.mjs → tools-CrRhWn8L.mjs} +3043 -1303
  199. package/dist/chunks/treeView-SZITEDCU-BNtnNxpI.mjs +3 -0
  200. package/dist/chunks/treemap-W4RFUUIX-DYENULz2.mjs +3 -0
  201. package/dist/chunks/typescript-DO5cd4m8.mjs +5 -0
  202. package/dist/chunks/vennDiagram-DHZGUBPP-B0DmLQqe.mjs +1876 -0
  203. package/dist/chunks/vitesse-dark-CcorSKT2.mjs +4 -0
  204. package/dist/chunks/wardley-RL74JXVD-ByNHVBTb.mjs +3 -0
  205. package/dist/chunks/wardleyDiagram-NUSXRM2D-CzoKesUw.mjs +594 -0
  206. package/dist/chunks/xml-g8kXXALs.mjs +5 -0
  207. package/dist/chunks/xychartDiagram-5P7HB3ND-CixwR8r2.mjs +2017 -0
  208. package/dist/chunks/yaml-CrNNZyLb.mjs +3 -0
  209. package/dist/cli.mjs +1 -1
  210. package/dist/full.mjs +14 -14
  211. package/dist/locales.mjs +135 -68
  212. package/dist/markdown.mjs +3954 -0
  213. package/dist/{messages-D_CUdqU12.mjs → messages-5jvKxQNu2.mjs} +68 -1
  214. package/dist/{chunks/messages-CFfpHyTU.mjs → messages-7QD-X6XT2.mjs} +68 -1
  215. package/dist/{messages-CdX1odk_2.mjs → messages-96iaAUds2.mjs} +68 -1
  216. package/dist/{messages-C8ca-jEa.mjs → messages-B19o-Teb.mjs} +69 -2
  217. package/dist/{messages-I03yFhup.mjs → messages-B1ZUQagA.mjs} +68 -1
  218. package/dist/{chunks/messages-BSw88lIo2.mjs → messages-B7ieAJBd2.mjs} +68 -1
  219. package/dist/{messages-sNSXCkeB.mjs → messages-BECMxmfX.mjs} +68 -1
  220. package/dist/{messages-DgGZsxBB.mjs → messages-BIHc0KHY.mjs} +68 -1
  221. package/dist/{messages-yZj20Fvf.mjs → messages-BIoeoik5.mjs} +68 -1
  222. package/dist/{chunks/messages-D8JFu42v.mjs → messages-BJeGJksD.mjs} +68 -1
  223. package/dist/{messages-BSLErTnW2.mjs → messages-BRZX964b2.mjs} +68 -1
  224. package/dist/{chunks/messages-BW8arxf72.mjs → messages-BTQPpoM42.mjs} +68 -1
  225. package/dist/{messages-C52AiyVV.mjs → messages-BYNcD6uR.mjs} +68 -1
  226. package/dist/{messages-BxJv0qBn2.mjs → messages-BYmmMDrN2.mjs} +68 -1
  227. package/dist/{messages-CoCy2JIP.mjs → messages-BbYq1pk-.mjs} +68 -1
  228. package/dist/{messages-Cnz_SHE32.mjs → messages-BiUGXvYr2.mjs} +68 -1
  229. package/dist/{chunks/messages-Dl6SVT1Z.mjs → messages-BiiongNz2.mjs} +68 -1
  230. package/dist/{chunks/messages-C912bk5I.mjs → messages-Bm0Feca1.mjs} +69 -2
  231. package/dist/{chunks/messages-CTuCPqpJ.mjs → messages-BmAn22OX.mjs} +68 -1
  232. package/dist/{messages-DdiPWkV8.mjs → messages-Bq3F2Tp_.mjs} +68 -1
  233. package/dist/{chunks/messages-DJxXZi1D2.mjs → messages-BsycN_JI2.mjs} +68 -1
  234. package/dist/{chunks/messages-OdEuBvgf.mjs → messages-BwHs4cm1.mjs} +70 -3
  235. package/dist/{chunks/messages-C4ZAJzBh.mjs → messages-CJTy6JZt.mjs} +68 -1
  236. package/dist/{chunks/messages-D2OZ9dbO.mjs → messages-CR_L_UtK.mjs} +68 -1
  237. package/dist/{messages-ypuLZyw12.mjs → messages-CSUHBs4c2.mjs} +68 -1
  238. package/dist/{chunks/messages-BkES2MDr2.mjs → messages-CWIXvnDf2.mjs} +68 -1
  239. package/dist/{messages-Cpeko5kB.mjs → messages-CcF4y-E4.mjs} +68 -1
  240. package/dist/{messages-BmnC-s4X.mjs → messages-Ce6KVEbT.mjs} +68 -1
  241. package/dist/{messages-DTNfG4ZH.mjs → messages-Ci0KqX-J.mjs} +71 -4
  242. package/dist/{chunks/messages-CGh56r-H2.mjs → messages-CjbnogEC.mjs} +68 -1
  243. package/dist/{messages-B3jq5Hpa.mjs → messages-CmB406HW.mjs} +69 -2
  244. package/dist/{chunks/messages-BsZz1Hnn2.mjs → messages-CqXtJTpU.mjs} +68 -1
  245. package/dist/{messages-DL000FUf2.mjs → messages-D0aw5_0k2.mjs} +68 -1
  246. package/dist/{chunks/messages-Df2RYuup2.mjs → messages-D8FQWulF2.mjs} +68 -1
  247. package/dist/{messages-CxHn7cs2.mjs → messages-DBiVgUs2.mjs} +68 -1
  248. package/dist/{chunks/messages-Dsapm4K9.mjs → messages-DIJlIqlQ2.mjs} +68 -1
  249. package/dist/{chunks/messages-517llQmh.mjs → messages-DLX_iBDJ.mjs} +68 -1
  250. package/dist/{chunks/messages-BG8Nq35G.mjs → messages-DLlc9QPw.mjs} +68 -1
  251. package/dist/{messages-cokJPuUp2.mjs → messages-DMr62KiO2.mjs} +68 -1
  252. package/dist/{chunks/messages-Dkp-Eyu02.mjs → messages-DPA-mMWC2.mjs} +68 -1
  253. package/dist/{chunks/messages-7uCUVFea.mjs → messages-DTh9a8mR.mjs} +68 -1
  254. package/dist/{messages-VBFioL2M.mjs → messages-DY4IqlhY.mjs} +68 -1
  255. package/dist/{chunks/messages-C4X0xP3h.mjs → messages-DYTTu0O12.mjs} +68 -1
  256. package/dist/{messages-diSPQ2Da2.mjs → messages-DbySKTKt2.mjs} +69 -2
  257. package/dist/{chunks/messages-BGE43_6M.mjs → messages-Ddnj2iTG2.mjs} +68 -1
  258. package/dist/{chunks/messages-BtUqUzMG2.mjs → messages-DkLU_rWm.mjs} +68 -1
  259. package/dist/{messages-DSX2HaeN2.mjs → messages-Dl3Sv6Rq2.mjs} +68 -1
  260. package/dist/{chunks/messages-BDvpl6Ox.mjs → messages-Dl5Y2-Ia.mjs} +81 -14
  261. package/dist/{chunks/messages-C7plNvNE2.mjs → messages-DnG0ef8t2.mjs} +69 -2
  262. package/dist/{chunks/messages-qS8tM3Dk.mjs → messages-DnGJD4TL.mjs} +68 -1
  263. package/dist/{messages-Ct468oX22.mjs → messages-Dnp9N6RU2.mjs} +68 -1
  264. package/dist/{chunks/messages-CjIA--kO.mjs → messages-Dvn35ksS.mjs} +68 -1
  265. package/dist/{messages-BRxNqmJ8.mjs → messages-Dw__BcTj.mjs} +68 -1
  266. package/dist/{chunks/messages-0zhE8A9X.mjs → messages-Dy-Y_nEI.mjs} +68 -1
  267. package/dist/{chunks/messages-CCH4OETw2.mjs → messages-E_ZuzGDt.mjs} +68 -1
  268. package/dist/{chunks/messages-DZzoT0T_.mjs → messages-F2xRoY1w.mjs} +68 -1
  269. package/dist/{chunks/messages-zGdqNZbH.mjs → messages-Smt4GBbj.mjs} +73 -6
  270. package/dist/{messages-CvIxHHp92.mjs → messages-aMXpHt5X2.mjs} +68 -1
  271. package/dist/{messages-C8JVJUp12.mjs → messages-aWZH50vu2.mjs} +68 -1
  272. package/dist/{messages-Phrqr7a6.mjs → messages-dv19AkyJ.mjs} +68 -1
  273. package/dist/{chunks/messages-DngM4hda2.mjs → messages-hWwSRF-2.mjs} +68 -1
  274. package/dist/{messages-DpGo_Da5.mjs → messages-j7o5rT9s.mjs} +68 -1
  275. package/dist/{messages-C6WJx6Z0.mjs → messages-nUVjeh7K.mjs} +68 -1
  276. package/dist/{messages-CbVilNPE.mjs → messages-nlhESX9t.mjs} +68 -1
  277. package/dist/{messages-C6o0FVy02.mjs → messages-rk-A1Wa42.mjs} +69 -2
  278. package/dist/{messages-D4mCIODv.mjs → messages-xh2eOLvs.mjs} +68 -1
  279. package/dist/{chunks/messages-Ct9UUOrl2.mjs → messages-ynAe7ewZ.mjs} +68 -1
  280. package/dist/react.mjs +26 -25
  281. package/dist/tools.mjs +3 -3
  282. package/dist/vendor.LICENSE.txt +5404 -80
  283. package/package.json +16 -1
  284. package/src/components/blocks.ts +26 -1
  285. package/src/components/constants/data-attributes.ts +2 -2
  286. package/src/components/i18n/locales/am/messages.json +68 -1
  287. package/src/components/i18n/locales/ar/messages.json +68 -1
  288. package/src/components/i18n/locales/az/messages.json +68 -1
  289. package/src/components/i18n/locales/bg/messages.json +68 -1
  290. package/src/components/i18n/locales/bn/messages.json +68 -1
  291. package/src/components/i18n/locales/bs/messages.json +69 -2
  292. package/src/components/i18n/locales/cs/messages.json +70 -3
  293. package/src/components/i18n/locales/da/messages.json +71 -4
  294. package/src/components/i18n/locales/de/messages.json +73 -6
  295. package/src/components/i18n/locales/dv/messages.json +68 -1
  296. package/src/components/i18n/locales/el/messages.json +68 -1
  297. package/src/components/i18n/locales/en/messages.json +68 -1
  298. package/src/components/i18n/locales/es/messages.json +68 -1
  299. package/src/components/i18n/locales/et/messages.json +69 -2
  300. package/src/components/i18n/locales/fa/messages.json +68 -1
  301. package/src/components/i18n/locales/fi/messages.json +68 -1
  302. package/src/components/i18n/locales/fil/messages.json +81 -14
  303. package/src/components/i18n/locales/fr/messages.json +68 -1
  304. package/src/components/i18n/locales/gu/messages.json +68 -1
  305. package/src/components/i18n/locales/he/messages.json +68 -1
  306. package/src/components/i18n/locales/hi/messages.json +68 -1
  307. package/src/components/i18n/locales/hr/messages.json +69 -2
  308. package/src/components/i18n/locales/hu/messages.json +68 -1
  309. package/src/components/i18n/locales/hy/messages.json +68 -1
  310. package/src/components/i18n/locales/id/messages.json +68 -1
  311. package/src/components/i18n/locales/it/messages.json +68 -1
  312. package/src/components/i18n/locales/ja/messages.json +68 -1
  313. package/src/components/i18n/locales/ka/messages.json +68 -1
  314. package/src/components/i18n/locales/km/messages.json +68 -1
  315. package/src/components/i18n/locales/kn/messages.json +68 -1
  316. package/src/components/i18n/locales/ko/messages.json +68 -1
  317. package/src/components/i18n/locales/ku/messages.json +68 -1
  318. package/src/components/i18n/locales/lo/messages.json +68 -1
  319. package/src/components/i18n/locales/lt/messages.json +68 -1
  320. package/src/components/i18n/locales/lv/messages.json +68 -1
  321. package/src/components/i18n/locales/mk/messages.json +68 -1
  322. package/src/components/i18n/locales/ml/messages.json +68 -1
  323. package/src/components/i18n/locales/mn/messages.json +68 -1
  324. package/src/components/i18n/locales/mr/messages.json +68 -1
  325. package/src/components/i18n/locales/ms/messages.json +69 -2
  326. package/src/components/i18n/locales/my/messages.json +68 -1
  327. package/src/components/i18n/locales/ne/messages.json +68 -1
  328. package/src/components/i18n/locales/nl/messages.json +68 -1
  329. package/src/components/i18n/locales/no/messages.json +68 -1
  330. package/src/components/i18n/locales/pa/messages.json +68 -1
  331. package/src/components/i18n/locales/pl/messages.json +68 -1
  332. package/src/components/i18n/locales/ps/messages.json +68 -1
  333. package/src/components/i18n/locales/pt/messages.json +68 -1
  334. package/src/components/i18n/locales/ro/messages.json +68 -1
  335. package/src/components/i18n/locales/ru/messages.json +68 -1
  336. package/src/components/i18n/locales/sd/messages.json +68 -1
  337. package/src/components/i18n/locales/si/messages.json +68 -1
  338. package/src/components/i18n/locales/sk/messages.json +69 -2
  339. package/src/components/i18n/locales/sl/messages.json +69 -2
  340. package/src/components/i18n/locales/sq/messages.json +68 -1
  341. package/src/components/i18n/locales/sr/messages.json +68 -1
  342. package/src/components/i18n/locales/sv/messages.json +68 -1
  343. package/src/components/i18n/locales/sw/messages.json +68 -1
  344. package/src/components/i18n/locales/ta/messages.json +68 -1
  345. package/src/components/i18n/locales/te/messages.json +68 -1
  346. package/src/components/i18n/locales/th/messages.json +68 -1
  347. package/src/components/i18n/locales/tr/messages.json +68 -1
  348. package/src/components/i18n/locales/ug/messages.json +68 -1
  349. package/src/components/i18n/locales/uk/messages.json +68 -1
  350. package/src/components/i18n/locales/ur/messages.json +68 -1
  351. package/src/components/i18n/locales/vi/messages.json +68 -1
  352. package/src/components/i18n/locales/yi/messages.json +68 -1
  353. package/src/components/i18n/locales/zh/messages.json +68 -1
  354. package/src/components/icons/index.ts +78 -0
  355. package/src/components/inline-tools/inline-tool-code.ts +399 -0
  356. package/src/components/modules/api/blocks.ts +17 -0
  357. package/src/components/modules/api/ui.ts +0 -3
  358. package/src/components/modules/blockEvents/composers/blockSelectionKeys.ts +20 -3
  359. package/src/components/modules/paste/handlers/html-handler.ts +13 -10
  360. package/src/components/modules/paste/handlers/index.ts +1 -0
  361. package/src/components/modules/paste/index.ts +6 -0
  362. package/src/components/modules/renderer.ts +17 -0
  363. package/src/components/modules/ui.ts +1 -13
  364. package/src/components/ui/toolbox.ts +9 -0
  365. package/src/components/utils/caret/boundaries.ts +15 -4
  366. package/src/components/utils/popover/popover-desktop.ts +11 -0
  367. package/src/markdown/index.ts +63 -0
  368. package/src/markdown/markdown-handler.ts +110 -0
  369. package/src/markdown/mdast-to-blocks.ts +418 -0
  370. package/src/markdown/phrasing-to-html.ts +60 -0
  371. package/src/markdown/types.ts +42 -0
  372. package/src/stories/EditorModes.stories.ts +0 -60
  373. package/src/styles/main.css +57 -2
  374. package/src/tools/callout/constants.ts +2 -1
  375. package/src/tools/callout/emoji-picker/index.ts +41 -2
  376. package/src/tools/callout/index.ts +25 -0
  377. package/src/tools/code/code-keyboard.ts +142 -0
  378. package/src/tools/code/constants.ts +96 -0
  379. package/src/tools/code/dom-builder.ts +181 -0
  380. package/src/tools/code/highlight-applier.ts +229 -0
  381. package/src/tools/code/index.ts +462 -0
  382. package/src/tools/code/katex-loader.ts +50 -0
  383. package/src/tools/code/language-picker.ts +241 -0
  384. package/src/tools/code/mermaid-loader.ts +45 -0
  385. package/src/tools/code/shiki-loader.ts +135 -0
  386. package/src/tools/divider/index.ts +11 -2
  387. package/src/tools/header/index.ts +2 -0
  388. package/src/tools/index.ts +6 -0
  389. package/src/tools/list/block-operations.ts +3 -1
  390. package/src/tools/list/depth-validator.ts +4 -7
  391. package/src/tools/list/dom-builder.ts +5 -3
  392. package/src/tools/list/index.ts +21 -3
  393. package/src/tools/list/list-helpers.ts +9 -2
  394. package/src/tools/list/list-keyboard.ts +56 -14
  395. package/src/tools/list/list-lifecycle.ts +3 -1
  396. package/src/tools/list/marker-calculator.ts +37 -0
  397. package/src/tools/list/ordered-marker-manager.ts +4 -2
  398. package/src/tools/list/style-config.ts +3 -0
  399. package/src/tools/paragraph/index.ts +1 -0
  400. package/src/tools/quote/index.ts +229 -0
  401. package/src/tools/table/core/table-commands.ts +16 -0
  402. package/src/tools/table/core/table-controller.ts +29 -0
  403. package/src/tools/table/core/table-events.ts +17 -0
  404. package/src/tools/table/index.ts +220 -14
  405. package/src/tools/table/table-cell-blocks.ts +51 -6
  406. package/src/tools/table/table-cell-clipboard.ts +7 -2
  407. package/src/tools/table/table-cell-placement-picker.ts +133 -0
  408. package/src/tools/table/table-cell-selection.ts +174 -19
  409. package/src/tools/table/table-core.ts +321 -113
  410. package/src/tools/table/table-map.ts +279 -0
  411. package/src/tools/table/table-model.ts +901 -1
  412. package/src/tools/table/table-operations.ts +87 -44
  413. package/src/tools/table/table-resize.ts +19 -17
  414. package/src/tools/table/table-row-col-drag.ts +24 -10
  415. package/src/tools/table/types.ts +24 -2
  416. package/src/tools/toggle/index.ts +1 -0
  417. package/types/configs/blok-config.d.ts +7 -0
  418. package/types/data-attributes.d.ts +0 -1
  419. package/types/markdown.d.ts +2 -0
  420. package/types/tools/callout.d.ts +16 -0
  421. package/types/tools/code.d.ts +13 -0
  422. package/types/tools/quote.d.ts +13 -0
  423. package/types/tools/tool-settings.d.ts +7 -0
  424. package/types/tools-entry.d.ts +7 -0
  425. /package/dist/chunks/{am-CHDDMHkd.mjs → am-BxlkYGsI.mjs} +0 -0
  426. /package/dist/chunks/{ar-DoqfNqut.mjs → ar-9vlpr9V8.mjs} +0 -0
  427. /package/dist/chunks/{az-C34P9iEa.mjs → az-ON63W_FP.mjs} +0 -0
  428. /package/dist/chunks/{bg-jroXLY8Y.mjs → bg-CtXWTP5w.mjs} +0 -0
  429. /package/dist/chunks/{bn-BRI-WqxY.mjs → bn-BERvhXM4.mjs} +0 -0
  430. /package/dist/chunks/{bs-CCGUpNHu.mjs → bs-CBg8NVPG.mjs} +0 -0
  431. /package/dist/chunks/{cs-D5qZOGuc.mjs → cs-DeQddxS7.mjs} +0 -0
  432. /package/dist/chunks/{da-DrJ7W37K.mjs → da-DyTo-ec_.mjs} +0 -0
  433. /package/dist/chunks/{de-BW6-kp2c.mjs → de-Cu7545m1.mjs} +0 -0
  434. /package/dist/chunks/{el-C-Vc_Otu.mjs → el-oiubLRBq.mjs} +0 -0
  435. /package/dist/chunks/{es-B6fI5K9i.mjs → es-DZUC6Klv.mjs} +0 -0
  436. /package/dist/chunks/{et-BhVlZ-Yz.mjs → et-CDeklAog.mjs} +0 -0
  437. /package/dist/chunks/{fa-D55Ijdqa.mjs → fa-Cafp7_Li.mjs} +0 -0
  438. /package/dist/chunks/{fi-jNLjhKUQ.mjs → fi-BD_V_aVW.mjs} +0 -0
  439. /package/dist/chunks/{fil-DYd0T5aX.mjs → fil-Crsfbtx4.mjs} +0 -0
  440. /package/dist/chunks/{fr-yxy5xWw_.mjs → fr-BGGc04Zv.mjs} +0 -0
  441. /package/dist/chunks/{gu-CcY_LJe7.mjs → gu-Vg_BgCTp.mjs} +0 -0
  442. /package/dist/chunks/{he-DL9s7wNw.mjs → he-DTY9chlZ.mjs} +0 -0
  443. /package/dist/chunks/{hi-C8eGXgw5.mjs → hi-DChMXk0x.mjs} +0 -0
  444. /package/dist/chunks/{hr-DLpybOhU.mjs → hr-BWVgNU8k.mjs} +0 -0
  445. /package/dist/chunks/{hu-BkT0gT00.mjs → hu-B37awHXA.mjs} +0 -0
  446. /package/dist/chunks/{hy-CVFDCp2S.mjs → hy-DGC_GDHh.mjs} +0 -0
  447. /package/dist/chunks/{id-0P4W9Az0.mjs → id-V7cw6La2.mjs} +0 -0
  448. /package/dist/chunks/{it-mLY6_uoW.mjs → it-DrTGP8Rn.mjs} +0 -0
  449. /package/dist/chunks/{ja-7RkeRNWG.mjs → ja-DS4pbJEG.mjs} +0 -0
  450. /package/dist/chunks/{ka-C7Lx-Qsh.mjs → ka-BueyosRh.mjs} +0 -0
  451. /package/dist/chunks/{km-Q8udaraH.mjs → km-B0K891yW.mjs} +0 -0
  452. /package/dist/chunks/{kn-BiETM-iq.mjs → kn-BQ__skg8.mjs} +0 -0
  453. /package/dist/chunks/{ko-tiB80pF1.mjs → ko-BuPxi_7e.mjs} +0 -0
  454. /package/dist/chunks/{ku-CY-OABkR.mjs → ku-nQjwPRw2.mjs} +0 -0
  455. /package/dist/chunks/{lo-CTBhEnyk.mjs → lo-K5NVFoq1.mjs} +0 -0
  456. /package/dist/chunks/{lt-BHKHEtqK.mjs → lt-D3xD6Eb2.mjs} +0 -0
  457. /package/dist/chunks/{lv-DWxgtfUg.mjs → lv-DH13mzZj.mjs} +0 -0
  458. /package/dist/chunks/{mk-BjookGdx.mjs → mk-Bb48BcDA.mjs} +0 -0
  459. /package/dist/chunks/{ml-L-NnZcp9.mjs → ml-BHPEj1kD.mjs} +0 -0
  460. /package/dist/chunks/{mn-OMWi7Hl_.mjs → mn-BNGzpdI6.mjs} +0 -0
  461. /package/dist/chunks/{mr-B6JPzITo.mjs → mr-D5PgU-cH.mjs} +0 -0
  462. /package/dist/chunks/{ms-CG3S-sPB.mjs → ms-DPkxqKz5.mjs} +0 -0
  463. /package/dist/chunks/{my-BLAmGfhT.mjs → my-DZGcyfxy.mjs} +0 -0
  464. /package/dist/chunks/{native-BPcABu9z.mjs → native-D0cfLXsM.mjs} +0 -0
  465. /package/dist/chunks/{ne-D1JHLfYw.mjs → ne-BU_Wh4Wv.mjs} +0 -0
  466. /package/dist/chunks/{nl-Ca7Q8FnY.mjs → nl-DtAPk1mK.mjs} +0 -0
  467. /package/dist/chunks/{no-Coxcohcz.mjs → no-CdW3n3BY.mjs} +0 -0
  468. /package/dist/chunks/{objectSpread2-CyPxu8-u.mjs → objectSpread2-CWwMYL_U.mjs} +0 -0
  469. /package/dist/chunks/{pa-CCaXqpaI.mjs → pa-BacCHz87.mjs} +0 -0
  470. /package/dist/chunks/{pl-Cl_fAZ84.mjs → pl-8zBJbmhZ.mjs} +0 -0
  471. /package/dist/chunks/{ps-WD5qGAWy.mjs → ps-c6nGXD-W.mjs} +0 -0
  472. /package/dist/chunks/{pt-C4zvLfvq.mjs → pt-B5yR8Qhr.mjs} +0 -0
  473. /package/dist/chunks/{ro-DbefHcmM.mjs → ro-Nscylsqb.mjs} +0 -0
  474. /package/dist/chunks/{ru-uU1J14jd.mjs → ru-DxERQkVJ.mjs} +0 -0
  475. /package/dist/chunks/{sd-DKu368Ip.mjs → sd-5z-QY3q9.mjs} +0 -0
  476. /package/dist/chunks/{si-BsJCiPkZ.mjs → si-DTL0mzrx.mjs} +0 -0
  477. /package/dist/chunks/{sk-CD-a3SN6.mjs → sk-DrGczTvY.mjs} +0 -0
  478. /package/dist/chunks/{sl-CXhrPJe_.mjs → sl-D8nJjig4.mjs} +0 -0
  479. /package/dist/chunks/{sq-CTctCoFQ.mjs → sq-C74Hm3YL.mjs} +0 -0
  480. /package/dist/chunks/{sr-BZkhBwXj.mjs → sr-DAwB05Gj.mjs} +0 -0
  481. /package/dist/chunks/{sv-NmRZb_xi.mjs → sv-BkHBsN4y.mjs} +0 -0
  482. /package/dist/chunks/{sw-Be5ik3H6.mjs → sw-BBQLTq_z.mjs} +0 -0
  483. /package/dist/chunks/{ta-DsXh6neL.mjs → ta-DRRzdKky.mjs} +0 -0
  484. /package/dist/chunks/{te-CwpCbM8M.mjs → te-CedXLsKM.mjs} +0 -0
  485. /package/dist/chunks/{th-CcZ15OLk.mjs → th-DDOlGA0W.mjs} +0 -0
  486. /package/dist/chunks/{tr-q3bTgvhW.mjs → tr-ClgvwOlL.mjs} +0 -0
  487. /package/dist/chunks/{tw-DmW6-pCY.mjs → tw-CqxBf-1Y.mjs} +0 -0
  488. /package/dist/chunks/{ug-919EhLsL.mjs → ug-bXxwiinM.mjs} +0 -0
  489. /package/dist/chunks/{uk-aNMEzd0Y.mjs → uk-Dp46o_VT.mjs} +0 -0
  490. /package/dist/chunks/{ur-BwQI77sh.mjs → ur-MfEEhdFq.mjs} +0 -0
  491. /package/dist/chunks/{vi-Dxq806-F.mjs → vi-bt-3LPGO.mjs} +0 -0
  492. /package/dist/chunks/{zh-BcHuy1Ti.mjs → zh-Dgyb5Ly8.mjs} +0 -0
@@ -63,6 +63,32 @@ const SKIN_TONE_HANDS: readonly string[] = [
63
63
  '✋', '✋🏻', '✋🏼', '✋🏽', '✋🏾', '✋🏿',
64
64
  ];
65
65
 
66
+ const SKIN_TONE_STORAGE_KEY = 'blok-emoji-skin-tone';
67
+
68
+ function loadSkinTone(): number {
69
+ try {
70
+ const raw = localStorage.getItem(SKIN_TONE_STORAGE_KEY);
71
+
72
+ if (raw === null) {
73
+ return 0;
74
+ }
75
+
76
+ const n = parseInt(raw, 10);
77
+
78
+ return n >= 0 && n <= 5 ? n : 0;
79
+ } catch {
80
+ return 0;
81
+ }
82
+ }
83
+
84
+ function saveSkinTone(index: number): void {
85
+ try {
86
+ localStorage.setItem(SKIN_TONE_STORAGE_KEY, String(index));
87
+ } catch {
88
+ // Silently ignore — storage quota or access denied
89
+ }
90
+ }
91
+
66
92
  /** Dice SVG for the random button. */
67
93
  const ICON_DICE = '<svg width="14" height="14" viewBox="0 0 14 14" fill="none"><rect x="1.5" y="1.5" width="11" height="11" rx="2" stroke="currentColor" stroke-width="1.2"/><circle cx="4.5" cy="4.5" r=".9" fill="currentColor"/><circle cx="7" cy="7" r=".9" fill="currentColor"/><circle cx="9.5" cy="9.5" r=".9" fill="currentColor"/></svg>';
68
94
 
@@ -138,6 +164,17 @@ export class EmojiPicker {
138
164
  this._filterInput.value = '';
139
165
  this._element.setAttribute('data-theme', this.resolveTheme());
140
166
 
167
+ const storedTone = loadSkinTone();
168
+
169
+ if (storedTone !== this._skinTone) {
170
+ this._skinTone = storedTone;
171
+ this._skinToneToggle.textContent = SKIN_TONE_HANDS[storedTone];
172
+
173
+ for (const [i, btn] of this._skinToneButtons.entries()) {
174
+ this.applySkinToneActiveStyle(btn, i === storedTone);
175
+ }
176
+ }
177
+
141
178
  if (this._allEmojis.length === 0) {
142
179
  this._allEmojis = await loadEmojiData();
143
180
  }
@@ -399,6 +436,7 @@ export class EmojiPicker {
399
436
 
400
437
  private setSkinTone(index: number): void {
401
438
  this._skinTone = index;
439
+ saveSkinTone(index);
402
440
 
403
441
  // Update the hand toggle to reflect current skin tone
404
442
  this._skinToneToggle.textContent = SKIN_TONE_HANDS[index];
@@ -575,8 +613,9 @@ export class EmojiPicker {
575
613
  this._body.appendChild(section);
576
614
  }
577
615
 
578
- // Standard categories
579
- const byCategory = groupEmojisByCategory(emojis);
616
+ // Standard categories (exclude curated emojis to avoid duplicates)
617
+ const curatedSet = new Set(CURATED_CALLOUT_EMOJIS);
618
+ const byCategory = groupEmojisByCategory(emojis.filter(e => !curatedSet.has(e.native)));
580
619
 
581
620
  for (const [category, categoryEmojis] of byCategory) {
582
621
  visibleCategories.add(category);
@@ -7,6 +7,8 @@ import type {
7
7
  ToolboxConfig,
8
8
  ConversionConfig,
9
9
  ToolSanitizerConfig,
10
+ PasteConfig,
11
+ HTMLPasteEvent,
10
12
  } from '../../../types';
11
13
  import type { MenuConfig } from '../../../types/tools/menu-config';
12
14
  import { PopoverItemType } from '../../components/utils/popover';
@@ -177,6 +179,22 @@ export class CalloutTool implements BlockTool {
177
179
  return true;
178
180
  }
179
181
 
182
+ public onPaste(event: HTMLPasteEvent): void {
183
+ const content = event.detail.data;
184
+ const style = content.getAttribute('style') ?? '';
185
+ const bgMatch = /background(?:-color)?\s*:\s*([^;]+)/i.exec(style);
186
+
187
+ if (bgMatch?.[1]) {
188
+ const presetName = mapToNearestPresetName(bgMatch[1].trim(), 'bg');
189
+
190
+ if (presetName) {
191
+ this._data.backgroundColor = presetName;
192
+ }
193
+ }
194
+
195
+ this.applyColors();
196
+ }
197
+
180
198
  public renderSettings(): MenuConfig {
181
199
  if (this._colorPicker === null) {
182
200
  const picker = createColorPicker({
@@ -360,6 +378,7 @@ export class CalloutTool implements BlockTool {
360
378
  titleKey: 'callout',
361
379
  name: TOOL_NAME,
362
380
  searchTerms: ['callout', 'note', 'info', 'warning', 'tip', 'alert'],
381
+ searchTermKeys: ['callout', 'note', 'info', 'warning', 'tip', 'alert'],
363
382
  };
364
383
  }
365
384
 
@@ -373,6 +392,12 @@ export class CalloutTool implements BlockTool {
373
392
  };
374
393
  }
375
394
 
395
+ public static get pasteConfig(): PasteConfig {
396
+ return {
397
+ tags: [{ ASIDE: { style: true } }],
398
+ };
399
+ }
400
+
376
401
  public static get sanitize(): ToolSanitizerConfig {
377
402
  return {
378
403
  emoji: false,
@@ -0,0 +1,142 @@
1
+ import { TAB_STRING } from './constants';
2
+
3
+ /**
4
+ * Handle keydown events inside the code block.
5
+ * Returns true if the event was handled (caller should preventDefault).
6
+ */
7
+ export function handleCodeKeydown(
8
+ event: KeyboardEvent,
9
+ codeElement: HTMLElement,
10
+ onExit: () => void
11
+ ): boolean {
12
+ if (event.key === 'Enter' && event.shiftKey) {
13
+ onExit();
14
+ return true;
15
+ }
16
+
17
+ if (event.key === 'Enter') {
18
+ insertNewline(codeElement);
19
+ return true;
20
+ }
21
+
22
+ if (event.key === 'Tab' && !event.shiftKey) {
23
+ insertTab();
24
+ return true;
25
+ }
26
+
27
+ if (event.key === 'Tab' && event.shiftKey) {
28
+ removeTab(codeElement);
29
+ return true;
30
+ }
31
+
32
+ return false;
33
+ }
34
+
35
+ function insertNewline(codeElement: HTMLElement): void {
36
+ const selection = window.getSelection();
37
+ if (!selection || selection.rangeCount === 0) return;
38
+
39
+ const range = selection.getRangeAt(0);
40
+
41
+ const preCaretRange = range.cloneRange();
42
+ preCaretRange.selectNodeContents(codeElement);
43
+ preCaretRange.setEnd(range.startContainer, range.startOffset);
44
+ const caretOffset = preCaretRange.toString().length;
45
+
46
+ const text = codeElement.textContent ?? '';
47
+ const before = text.substring(0, caretOffset);
48
+ const after = text.substring(caretOffset);
49
+
50
+ while (codeElement.firstChild) {
51
+ codeElement.removeChild(codeElement.firstChild);
52
+ }
53
+ codeElement.appendChild(document.createTextNode(before + '\n' + after));
54
+
55
+ restoreCaretOffset(codeElement, caretOffset + 1);
56
+ }
57
+
58
+ function insertTab(): void {
59
+ const selection = window.getSelection();
60
+ if (!selection || selection.rangeCount === 0) return;
61
+
62
+ const range = selection.getRangeAt(0);
63
+ range.deleteContents();
64
+
65
+ const tab = document.createTextNode(TAB_STRING);
66
+ range.insertNode(tab);
67
+ range.setStartAfter(tab);
68
+ range.collapse(true);
69
+
70
+ selection.removeAllRanges();
71
+ selection.addRange(range);
72
+ }
73
+
74
+ /**
75
+ * Count leading spaces on the line (up to TAB_STRING length).
76
+ */
77
+ function countLeadingSpaces(lineContent: string): number {
78
+ const limit = Math.min(TAB_STRING.length, lineContent.length);
79
+ const match = lineContent.substring(0, limit).match(/^ */);
80
+
81
+ return match ? match[0].length : 0;
82
+ }
83
+
84
+ function removeTab(codeElement: HTMLElement): void {
85
+ const selection = window.getSelection();
86
+ if (!selection || selection.rangeCount === 0) return;
87
+
88
+ const range = selection.getRangeAt(0);
89
+ const textContent = codeElement.textContent ?? '';
90
+
91
+ const preCaretRange = range.cloneRange();
92
+ preCaretRange.selectNodeContents(codeElement);
93
+ preCaretRange.setEnd(range.startContainer, range.startOffset);
94
+
95
+ const caretOffset = preCaretRange.toString().length;
96
+ const lineStart = textContent.lastIndexOf('\n', caretOffset - 1) + 1;
97
+ const lineContent = textContent.substring(lineStart);
98
+
99
+ const spacesToRemove = countLeadingSpaces(lineContent);
100
+
101
+ if (spacesToRemove === 0) return;
102
+
103
+ const before = textContent.substring(0, lineStart);
104
+ const after = textContent.substring(lineStart + spacesToRemove);
105
+ const updated = before + after;
106
+
107
+ // Replace text by clearing children and inserting a new text node
108
+ while (codeElement.firstChild) {
109
+ codeElement.removeChild(codeElement.firstChild);
110
+ }
111
+ codeElement.appendChild(document.createTextNode(updated));
112
+
113
+ const newCaretOffset = Math.max(lineStart, caretOffset - spacesToRemove);
114
+ restoreCaretOffset(codeElement, newCaretOffset);
115
+ }
116
+
117
+ function restoreCaretOffset(element: HTMLElement, offset: number): void {
118
+ const selection = window.getSelection();
119
+ if (!selection) return;
120
+
121
+ const walker = document.createTreeWalker(element, NodeFilter.SHOW_TEXT);
122
+
123
+ const findNode = (accumulated: number): void => {
124
+ const current = walker.nextNode();
125
+ if (!current) return;
126
+
127
+ const nodeLength = (current.textContent ?? '').length;
128
+
129
+ if (accumulated + nodeLength >= offset) {
130
+ const range = document.createRange();
131
+ range.setStart(current, offset - accumulated);
132
+ range.collapse(true);
133
+ selection.removeAllRanges();
134
+ selection.addRange(range);
135
+ return;
136
+ }
137
+
138
+ findNode(accumulated + nodeLength);
139
+ };
140
+
141
+ findNode(0);
142
+ }
@@ -0,0 +1,96 @@
1
+ export const TOOL_NAME = 'code';
2
+
3
+ // i18n keys
4
+ export const PLACEHOLDER_KEY = 'tools.code.placeholder';
5
+ export const LANGUAGE_KEY = 'tools.code.language';
6
+ export const COPIED_KEY = 'tools.code.copied';
7
+ export const COPY_CODE_KEY = 'tools.code.copyCode';
8
+ export const WRAP_LINES_KEY = 'tools.code.wrapLines';
9
+ export const SEARCH_LANGUAGE_KEY = 'tools.code.searchLanguage';
10
+
11
+ // Default values
12
+ export const DEFAULT_LANGUAGE = 'plain text';
13
+ export const TAB_STRING = ' '; // 2 spaces
14
+
15
+ // Language list — display name + lowercase identifier
16
+ export interface LanguageEntry {
17
+ id: string;
18
+ name: string;
19
+ }
20
+
21
+ export const LANGUAGES: LanguageEntry[] = [
22
+ { id: 'plain text', name: 'Plain Text' },
23
+ { id: 'javascript', name: 'JavaScript' },
24
+ { id: 'typescript', name: 'TypeScript' },
25
+ { id: 'python', name: 'Python' },
26
+ { id: 'java', name: 'Java' },
27
+ { id: 'c', name: 'C' },
28
+ { id: 'cpp', name: 'C++' },
29
+ { id: 'csharp', name: 'C#' },
30
+ { id: 'go', name: 'Go' },
31
+ { id: 'rust', name: 'Rust' },
32
+ { id: 'ruby', name: 'Ruby' },
33
+ { id: 'php', name: 'PHP' },
34
+ { id: 'swift', name: 'Swift' },
35
+ { id: 'kotlin', name: 'Kotlin' },
36
+ { id: 'latex', name: 'LaTeX' },
37
+ { id: 'mermaid', name: 'Mermaid' },
38
+ { id: 'sql', name: 'SQL' },
39
+ { id: 'html', name: 'HTML' },
40
+ { id: 'css', name: 'CSS' },
41
+ { id: 'json', name: 'JSON' },
42
+ { id: 'yaml', name: 'YAML' },
43
+ { id: 'markdown', name: 'Markdown' },
44
+ { id: 'bash', name: 'Bash' },
45
+ { id: 'shell', name: 'Shell' },
46
+ { id: 'dockerfile', name: 'Dockerfile' },
47
+ { id: 'xml', name: 'XML' },
48
+ { id: 'graphql', name: 'GraphQL' },
49
+ { id: 'r', name: 'R' },
50
+ { id: 'scala', name: 'Scala' },
51
+ { id: 'dart', name: 'Dart' },
52
+ { id: 'lua', name: 'Lua' },
53
+ ];
54
+
55
+ // CSS — Tailwind classes
56
+ export const WRAPPER_STYLES = 'flex flex-col rounded-lg bg-bg-secondary overflow-hidden my-1';
57
+ export const HEADER_STYLES = 'flex items-center gap-1 px-3 py-1.5 border-b border-border-primary text-xs text-gray-text';
58
+ export const LANGUAGE_BUTTON_STYLES = 'px-1.5 py-0.5 rounded cursor-pointer bg-transparent border-0 text-xs text-gray-text font-medium transition-colors can-hover:hover:bg-item-hover-bg select-none';
59
+ export const HEADER_BUTTON_STYLES = 'p-1 rounded cursor-pointer bg-transparent border-0 text-gray-text transition-colors can-hover:hover:bg-item-hover-bg flex items-center justify-center';
60
+ export const CODE_AREA_STYLES = 'block px-4 py-3 font-mono text-sm leading-relaxed outline-hidden whitespace-pre-wrap overflow-x-auto min-h-[1.5em]';
61
+ export const COPIED_FEEDBACK_STYLES = 'text-xs text-gray-text font-medium select-none';
62
+
63
+ // Languages that support preview rendering
64
+ export const PREVIEWABLE_LANGUAGES = new Set(['latex', 'mermaid']);
65
+
66
+ // i18n keys — preview tabs
67
+ export const CODE_TAB_KEY = 'tools.code.codeTab';
68
+ export const PREVIEW_TAB_KEY = 'tools.code.previewTab';
69
+
70
+ // CSS — preview tab styles
71
+ export const TAB_STYLES = 'px-2 py-0.5 rounded text-xs font-medium cursor-pointer border-0 transition-colors select-none';
72
+ export const TAB_ACTIVE_STYLES = 'bg-blue-500 text-white';
73
+ export const TAB_INACTIVE_STYLES = 'bg-transparent text-gray-text can-hover:hover:bg-item-hover-bg';
74
+ export const PREVIEW_AREA_STYLES = 'px-4 py-3 overflow-x-auto min-h-[1.5em] flex justify-center';
75
+
76
+ // Shiki theme names for syntax highlighting
77
+ export const SHIKI_LIGHT_THEME = 'one-light';
78
+ export const SHIKI_DARK_THEME = 'vitesse-dark';
79
+
80
+ // CSS selector for dark mode (Tailwind convention)
81
+ export const DARK_MODE_SELECTOR = '.dark';
82
+
83
+ // Languages that support syntax highlighting (all except plain text)
84
+ export const HIGHLIGHTABLE_LANGUAGES = new Set(
85
+ LANGUAGES
86
+ .map((lang) => lang.id)
87
+ .filter((id) => id !== DEFAULT_LANGUAGE)
88
+ );
89
+
90
+ // i18n key — line numbers toggle
91
+ export const LINE_NUMBERS_KEY = 'tools.code.lineNumbers';
92
+
93
+ // CSS — line number gutter
94
+ export const CODE_BODY_STYLES = 'flex overflow-hidden';
95
+ export const GUTTER_STYLES = 'select-none text-right pr-3 py-3 font-mono text-sm leading-relaxed text-gray-text/40 border-r border-border-primary shrink-0';
96
+ export const GUTTER_LINE_STYLES = 'leading-relaxed';
@@ -0,0 +1,181 @@
1
+ import {
2
+ WRAPPER_STYLES,
3
+ HEADER_STYLES,
4
+ LANGUAGE_BUTTON_STYLES,
5
+ HEADER_BUTTON_STYLES,
6
+ CODE_AREA_STYLES,
7
+ TAB_STYLES,
8
+ TAB_ACTIVE_STYLES,
9
+ TAB_INACTIVE_STYLES,
10
+ PREVIEW_AREA_STYLES,
11
+ CODE_BODY_STYLES,
12
+ GUTTER_STYLES,
13
+ GUTTER_LINE_STYLES,
14
+ } from './constants';
15
+ import { IconCopy, IconWrap, IconLineNumbers } from '../../components/icons';
16
+
17
+ export interface CodeDOMRefs {
18
+ wrapper: HTMLElement;
19
+ languageButton: HTMLButtonElement;
20
+ lineNumbersButton: HTMLButtonElement;
21
+ copyButton: HTMLButtonElement;
22
+ wrapButton: HTMLButtonElement;
23
+ preElement: HTMLPreElement;
24
+ codeElement: HTMLElement;
25
+ gutterElement: HTMLElement;
26
+ codeTab: HTMLButtonElement | null;
27
+ previewTab: HTMLButtonElement | null;
28
+ previewElement: HTMLDivElement | null;
29
+ }
30
+
31
+ export interface BuildCodeDOMOptions {
32
+ code: string;
33
+ languageName: string;
34
+ readOnly: boolean;
35
+ copyLabel: string;
36
+ wrapLabel: string;
37
+ lineNumbersLabel?: string;
38
+ previewable?: boolean;
39
+ codeTabLabel?: string;
40
+ previewTabLabel?: string;
41
+ }
42
+
43
+ function buildPreviewElements(
44
+ codeTabLabel?: string,
45
+ previewTabLabel?: string,
46
+ ): { codeTab: HTMLButtonElement; previewTab: HTMLButtonElement; previewElement: HTMLDivElement } {
47
+ const codeTab = document.createElement('button');
48
+
49
+ codeTab.type = 'button';
50
+ codeTab.className = `${TAB_STYLES} ${TAB_INACTIVE_STYLES}`;
51
+ codeTab.textContent = codeTabLabel ?? 'Code';
52
+ codeTab.setAttribute('data-blok-testid', 'code-code-tab');
53
+
54
+ const previewTab = document.createElement('button');
55
+
56
+ previewTab.type = 'button';
57
+ previewTab.className = `${TAB_STYLES} ${TAB_ACTIVE_STYLES}`;
58
+ previewTab.textContent = previewTabLabel ?? 'Preview';
59
+ previewTab.setAttribute('data-blok-testid', 'code-preview-tab');
60
+
61
+ const previewElement = document.createElement('div');
62
+
63
+ previewElement.className = PREVIEW_AREA_STYLES;
64
+ previewElement.setAttribute('data-blok-testid', 'code-preview');
65
+
66
+ return { codeTab, previewTab, previewElement };
67
+ }
68
+
69
+ export function buildCodeDOM(options: BuildCodeDOMOptions): CodeDOMRefs {
70
+ const { code, languageName, readOnly, copyLabel, wrapLabel, lineNumbersLabel, previewable, codeTabLabel, previewTabLabel } = options;
71
+
72
+ // Wrapper
73
+ const wrapper = document.createElement('div');
74
+ wrapper.className = WRAPPER_STYLES;
75
+
76
+ // Header
77
+ const header = document.createElement('div');
78
+ header.className = HEADER_STYLES;
79
+
80
+ // Language button (opens language picker)
81
+ const languageButton = document.createElement('button');
82
+ languageButton.type = 'button';
83
+ languageButton.className = LANGUAGE_BUTTON_STYLES;
84
+ languageButton.textContent = languageName;
85
+ languageButton.setAttribute('aria-haspopup', 'listbox');
86
+ languageButton.setAttribute('data-blok-testid', 'code-language-btn');
87
+
88
+ // Spacer
89
+ const spacer = document.createElement('div');
90
+ spacer.className = 'flex-1';
91
+
92
+ // Tab buttons (only when previewable)
93
+ const { codeTab, previewTab, previewElement } = previewable
94
+ ? buildPreviewElements(codeTabLabel, previewTabLabel)
95
+ : { codeTab: null, previewTab: null, previewElement: null };
96
+
97
+ // Wrap toggle button
98
+ const wrapButton = document.createElement('button');
99
+ wrapButton.type = 'button';
100
+ wrapButton.className = HEADER_BUTTON_STYLES;
101
+ wrapButton.innerHTML = IconWrap;
102
+ wrapButton.setAttribute('aria-label', wrapLabel);
103
+ wrapButton.setAttribute('data-blok-testid', 'code-wrap-btn');
104
+
105
+ // Line numbers toggle button
106
+ const lineNumbersButton = document.createElement('button');
107
+ lineNumbersButton.type = 'button';
108
+ lineNumbersButton.className = HEADER_BUTTON_STYLES;
109
+ lineNumbersButton.innerHTML = IconLineNumbers;
110
+ lineNumbersButton.setAttribute('aria-label', lineNumbersLabel ?? 'Line numbers');
111
+ lineNumbersButton.setAttribute('data-blok-testid', 'code-line-numbers-btn');
112
+
113
+ // Copy button
114
+ const copyButton = document.createElement('button');
115
+ copyButton.type = 'button';
116
+ copyButton.className = HEADER_BUTTON_STYLES;
117
+ copyButton.innerHTML = IconCopy;
118
+ copyButton.setAttribute('aria-label', copyLabel);
119
+ copyButton.setAttribute('data-blok-testid', 'code-copy-btn');
120
+
121
+ // Code area
122
+ const codeElement = document.createElement('code');
123
+ codeElement.className = CODE_AREA_STYLES;
124
+ codeElement.setAttribute('data-blok-testid', 'code-content');
125
+
126
+ if (code) {
127
+ codeElement.textContent = code;
128
+ }
129
+
130
+ if (!readOnly) {
131
+ codeElement.setAttribute('contenteditable', 'plaintext-only');
132
+ codeElement.setAttribute('spellcheck', 'false');
133
+ }
134
+
135
+ // Line number gutter
136
+ const gutterElement = document.createElement('div');
137
+ gutterElement.className = GUTTER_STYLES;
138
+ gutterElement.setAttribute('aria-hidden', 'true');
139
+ gutterElement.setAttribute('data-blok-testid', 'code-gutter');
140
+
141
+ const lineCount = code ? code.split('\n').length : 1;
142
+ Array.from({ length: lineCount }, (_, idx) => {
143
+ const lineEl = document.createElement('div');
144
+ lineEl.className = GUTTER_LINE_STYLES;
145
+ lineEl.textContent = String(idx + 1);
146
+ gutterElement.appendChild(lineEl);
147
+ });
148
+
149
+ // Assemble header
150
+ header.appendChild(languageButton);
151
+ header.appendChild(spacer);
152
+
153
+ if (codeTab && previewTab) {
154
+ header.appendChild(codeTab);
155
+ header.appendChild(previewTab);
156
+ }
157
+
158
+ header.appendChild(lineNumbersButton);
159
+ header.appendChild(wrapButton);
160
+ header.appendChild(copyButton);
161
+
162
+ // Pre wrapper for semantic HTML
163
+ const preElement = document.createElement('pre');
164
+ preElement.appendChild(codeElement);
165
+
166
+ // Code body container (flex: gutter + pre)
167
+ const codeBody = document.createElement('div');
168
+ codeBody.className = CODE_BODY_STYLES;
169
+ codeBody.appendChild(gutterElement);
170
+ codeBody.appendChild(preElement);
171
+
172
+ // Assemble wrapper
173
+ wrapper.appendChild(header);
174
+ wrapper.appendChild(codeBody);
175
+
176
+ if (previewElement) {
177
+ wrapper.appendChild(previewElement);
178
+ }
179
+
180
+ return { wrapper, languageButton, lineNumbersButton, copyButton, wrapButton, preElement, codeElement, gutterElement, codeTab, previewTab, previewElement };
181
+ }