@jackuait/blok 0.4.3-beta.5 → 0.4.3-beta.7

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 (217) hide show
  1. package/dist/blok.mjs +2 -2
  2. package/dist/chunks/{blok-CC3asvLc.mjs → blok-B-fFKCc3.mjs} +174 -168
  3. package/dist/chunks/{i18next-loader-DESAFQPB.mjs → i18next-loader-BFNg4Ihu.mjs} +1 -1
  4. package/dist/chunks/{index-qoZny9Yh.mjs → index-DwJjM4zN.mjs} +1 -1
  5. package/dist/chunks/{inline-tool-convert-DtMsnFGn.mjs → inline-tool-convert-BQzo9tk1.mjs} +8 -8
  6. package/dist/chunks/{messages-BFiUomgG.mjs → messages--yMo5vYp.mjs} +1 -1
  7. package/dist/chunks/{messages-2434tVOK.mjs → messages-82j7Sb1f.mjs} +1 -1
  8. package/dist/chunks/{messages-p9BZJaFV.mjs → messages-9-pnvSWZ.mjs} +1 -1
  9. package/dist/{messages-D5WeksbV.mjs → chunks/messages-B-b_IFZh.mjs} +1 -1
  10. package/dist/chunks/{messages-ez3w5NBn.mjs → messages-B5OIvtYB.mjs} +1 -1
  11. package/dist/{messages-FTOZNhRD.mjs → chunks/messages-B7zIiLTq.mjs} +1 -1
  12. package/dist/{messages-JF2fzCkK.mjs → chunks/messages-BCidD-VB.mjs} +1 -1
  13. package/dist/chunks/{messages-WYWIbQwo.mjs → messages-BWDnoNq0.mjs} +1 -1
  14. package/dist/chunks/{messages-BIPNHHAV.mjs → messages-BXsoyz5-.mjs} +1 -1
  15. package/dist/{messages-CXHt3eCC.mjs → chunks/messages-BYeiscyc.mjs} +1 -1
  16. package/dist/chunks/{messages-er-kd-VO.mjs → messages-BZ-Ia4tk.mjs} +1 -1
  17. package/dist/chunks/{messages-CmymP_Ar.mjs → messages-BaaIMBL8.mjs} +1 -1
  18. package/dist/chunks/{messages-Dd5iZN3c.mjs → messages-BgbVziWf.mjs} +1 -1
  19. package/dist/chunks/{messages-76-iJV9Q.mjs → messages-BgmPDL9Z.mjs} +1 -1
  20. package/dist/chunks/{messages-BextV3Qh.mjs → messages-Bi0X1QMU.mjs} +1 -1
  21. package/dist/chunks/{messages-QgYhPL-3.mjs → messages-BjZll4R7.mjs} +1 -1
  22. package/dist/{messages-D_FCyfW6.mjs → chunks/messages-BnmcUH66.mjs} +1 -1
  23. package/dist/chunks/{messages-DueVe0F1.mjs → messages-Bo9JrN9m.mjs} +1 -1
  24. package/dist/{messages-f3uXjegd.mjs → chunks/messages-BuKgyEeU.mjs} +1 -1
  25. package/dist/chunks/{messages-ohwI1UGv.mjs → messages-CJQt8nzO.mjs} +1 -1
  26. package/dist/chunks/{messages-D3vTzIpL.mjs → messages-CNRsIuSS.mjs} +1 -1
  27. package/dist/chunks/{messages-qWkXPggi.mjs → messages-CPdlHIEi.mjs} +1 -1
  28. package/dist/{messages-CbmsBrB0.mjs → chunks/messages-CTeYgNo1.mjs} +1 -1
  29. package/dist/{messages-BCm2eudQ.mjs → chunks/messages-CVvHbBlx.mjs} +1 -1
  30. package/dist/{messages-D3GrDwXh.mjs → chunks/messages-CbP4KoKV.mjs} +1 -1
  31. package/dist/chunks/{messages-Dg1OHftD.mjs → messages-CbepBt3K.mjs} +1 -1
  32. package/dist/{messages-BqWaOGMn.mjs → chunks/messages-CbtBGtJT.mjs} +1 -1
  33. package/dist/chunks/{messages-BqkL2_Ro.mjs → messages-CcYGSGRh.mjs} +1 -1
  34. package/dist/{messages-57uL5htT.mjs → chunks/messages-CjksZqgf.mjs} +1 -1
  35. package/dist/chunks/{messages-CFrKE-TN.mjs → messages-Cm4WhO4g.mjs} +1 -1
  36. package/dist/{messages-BiXe9G-O.mjs → chunks/messages-CoY-hJgp.mjs} +1 -1
  37. package/dist/chunks/{messages-qIQ4L4rw.mjs → messages-CpkO-V0C.mjs} +1 -1
  38. package/dist/{messages-DKha57ZU.mjs → chunks/messages-CwYueRo5.mjs} +1 -1
  39. package/dist/chunks/{messages-3DcCwXMF.mjs → messages-D-tDNAzW.mjs} +1 -1
  40. package/dist/{messages-DehM7135.mjs → chunks/messages-D2h_bTrn.mjs} +1 -1
  41. package/dist/chunks/{messages-IQxGfQIV.mjs → messages-D5J2Xlpx.mjs} +1 -1
  42. package/dist/chunks/{messages-Cm0LJLtB.mjs → messages-D8VsV_Ro.mjs} +1 -1
  43. package/dist/chunks/{messages-CHz8VlG-.mjs → messages-D8sk1mxH.mjs} +1 -1
  44. package/dist/chunks/{messages-MOGl7I5v.mjs → messages-D8tlQmPj.mjs} +1 -1
  45. package/dist/chunks/{messages-BiPSFlUG.mjs → messages-D9xzl8Wn.mjs} +1 -1
  46. package/dist/{messages-BoO8gsVD.mjs → chunks/messages-DG2QXu_f.mjs} +1 -1
  47. package/dist/{messages-DGaab4EP.mjs → chunks/messages-DHdkT1vy.mjs} +1 -1
  48. package/dist/{messages-4kMwVAKY.mjs → chunks/messages-DIbeBo-6.mjs} +1 -1
  49. package/dist/{messages-DVbPLd_0.mjs → chunks/messages-DR0sRlko.mjs} +1 -1
  50. package/dist/{messages-BX-DPa-z.mjs → chunks/messages-DRTt_xBc.mjs} +1 -1
  51. package/dist/{messages-CV7OM_qk.mjs → chunks/messages-DT43ZUKr.mjs} +1 -1
  52. package/dist/{messages-Di6Flq-b.mjs → chunks/messages-DT5djAjs.mjs} +1 -1
  53. package/dist/{messages-C6tbPLoj.mjs → chunks/messages-Df6LYOt5.mjs} +1 -1
  54. package/dist/chunks/{messages-BUlwu9mo.mjs → messages-DhdzbzrS.mjs} +1 -1
  55. package/dist/chunks/{messages-Ceo1KtFx.mjs → messages-DiyoZ_Oa.mjs} +1 -1
  56. package/dist/chunks/{messages-8p86Eyf2.mjs → messages-DkJ5aV3V.mjs} +1 -1
  57. package/dist/{messages-Dx3eFwI0.mjs → chunks/messages-DvwZEFTL.mjs} +1 -1
  58. package/dist/{messages-Bl5z_Igo.mjs → chunks/messages-Dw5GZ4YT.mjs} +1 -1
  59. package/dist/chunks/{messages-CLixzySl.mjs → messages-HSxl9MoN.mjs} +1 -1
  60. package/dist/chunks/{messages-DOaujgMW.mjs → messages-JztkG3tZ.mjs} +1 -1
  61. package/dist/{messages-BnsE97ku.mjs → chunks/messages-KLzTvDED.mjs} +1 -1
  62. package/dist/{messages-BBX0p0Pi.mjs → chunks/messages-TulYnz1f.mjs} +1 -1
  63. package/dist/chunks/{messages-D0ohMB5H.mjs → messages-Uexhy7C9.mjs} +1 -1
  64. package/dist/{messages-Dqhhex6e.mjs → chunks/messages-ctRNTfv5.mjs} +1 -1
  65. package/dist/chunks/{messages-CA6T3-gQ.mjs → messages-dIzxSHR2.mjs} +1 -1
  66. package/dist/chunks/{messages-bSf31LJi.mjs → messages-g7Njot5w.mjs} +1 -1
  67. package/dist/chunks/{messages-w5foGze_.mjs → messages-iNIhRBkQ.mjs} +1 -1
  68. package/dist/chunks/{messages-FOtiUoKl.mjs → messages-jmh1Gbfd.mjs} +1 -1
  69. package/dist/chunks/{messages-a6A_LgDv.mjs → messages-oO_lJ-_I.mjs} +1 -1
  70. package/dist/chunks/{messages-BvCkXKX-.mjs → messages-qFesO1Lu.mjs} +1 -1
  71. package/dist/{messages-diGozhTn.mjs → chunks/messages-sSYZ0Mz9.mjs} +1 -1
  72. package/dist/chunks/{messages-CFFPFdWP.mjs → messages-zs9AgeBF.mjs} +1 -1
  73. package/dist/full.mjs +2 -2
  74. package/dist/locales.mjs +68 -68
  75. package/dist/{messages-BFiUomgG.mjs → messages--yMo5vYp.mjs} +1 -1
  76. package/dist/{messages-2434tVOK.mjs → messages-82j7Sb1f.mjs} +1 -1
  77. package/dist/{messages-p9BZJaFV.mjs → messages-9-pnvSWZ.mjs} +1 -1
  78. package/dist/{chunks/messages-D5WeksbV.mjs → messages-B-b_IFZh.mjs} +1 -1
  79. package/dist/{messages-ez3w5NBn.mjs → messages-B5OIvtYB.mjs} +1 -1
  80. package/dist/{chunks/messages-FTOZNhRD.mjs → messages-B7zIiLTq.mjs} +1 -1
  81. package/dist/{chunks/messages-JF2fzCkK.mjs → messages-BCidD-VB.mjs} +1 -1
  82. package/dist/{messages-WYWIbQwo.mjs → messages-BWDnoNq0.mjs} +1 -1
  83. package/dist/{messages-BIPNHHAV.mjs → messages-BXsoyz5-.mjs} +1 -1
  84. package/dist/{chunks/messages-CXHt3eCC.mjs → messages-BYeiscyc.mjs} +1 -1
  85. package/dist/{messages-er-kd-VO.mjs → messages-BZ-Ia4tk.mjs} +1 -1
  86. package/dist/{messages-CmymP_Ar.mjs → messages-BaaIMBL8.mjs} +1 -1
  87. package/dist/{messages-Dd5iZN3c.mjs → messages-BgbVziWf.mjs} +1 -1
  88. package/dist/{messages-76-iJV9Q.mjs → messages-BgmPDL9Z.mjs} +1 -1
  89. package/dist/{messages-BextV3Qh.mjs → messages-Bi0X1QMU.mjs} +1 -1
  90. package/dist/{messages-QgYhPL-3.mjs → messages-BjZll4R7.mjs} +1 -1
  91. package/dist/{chunks/messages-D_FCyfW6.mjs → messages-BnmcUH66.mjs} +1 -1
  92. package/dist/{messages-DueVe0F1.mjs → messages-Bo9JrN9m.mjs} +1 -1
  93. package/dist/{chunks/messages-f3uXjegd.mjs → messages-BuKgyEeU.mjs} +1 -1
  94. package/dist/{messages-ohwI1UGv.mjs → messages-CJQt8nzO.mjs} +1 -1
  95. package/dist/{messages-D3vTzIpL.mjs → messages-CNRsIuSS.mjs} +1 -1
  96. package/dist/{messages-qWkXPggi.mjs → messages-CPdlHIEi.mjs} +1 -1
  97. package/dist/{chunks/messages-CbmsBrB0.mjs → messages-CTeYgNo1.mjs} +1 -1
  98. package/dist/{chunks/messages-BCm2eudQ.mjs → messages-CVvHbBlx.mjs} +1 -1
  99. package/dist/{chunks/messages-D3GrDwXh.mjs → messages-CbP4KoKV.mjs} +1 -1
  100. package/dist/{messages-Dg1OHftD.mjs → messages-CbepBt3K.mjs} +1 -1
  101. package/dist/{chunks/messages-BqWaOGMn.mjs → messages-CbtBGtJT.mjs} +1 -1
  102. package/dist/{messages-BqkL2_Ro.mjs → messages-CcYGSGRh.mjs} +1 -1
  103. package/dist/{chunks/messages-57uL5htT.mjs → messages-CjksZqgf.mjs} +1 -1
  104. package/dist/{messages-CFrKE-TN.mjs → messages-Cm4WhO4g.mjs} +1 -1
  105. package/dist/{chunks/messages-BiXe9G-O.mjs → messages-CoY-hJgp.mjs} +1 -1
  106. package/dist/{messages-qIQ4L4rw.mjs → messages-CpkO-V0C.mjs} +1 -1
  107. package/dist/{chunks/messages-DKha57ZU.mjs → messages-CwYueRo5.mjs} +1 -1
  108. package/dist/{messages-3DcCwXMF.mjs → messages-D-tDNAzW.mjs} +1 -1
  109. package/dist/{chunks/messages-DehM7135.mjs → messages-D2h_bTrn.mjs} +1 -1
  110. package/dist/{messages-IQxGfQIV.mjs → messages-D5J2Xlpx.mjs} +1 -1
  111. package/dist/{messages-Cm0LJLtB.mjs → messages-D8VsV_Ro.mjs} +1 -1
  112. package/dist/{messages-CHz8VlG-.mjs → messages-D8sk1mxH.mjs} +1 -1
  113. package/dist/{messages-MOGl7I5v.mjs → messages-D8tlQmPj.mjs} +1 -1
  114. package/dist/{messages-BiPSFlUG.mjs → messages-D9xzl8Wn.mjs} +1 -1
  115. package/dist/{chunks/messages-BoO8gsVD.mjs → messages-DG2QXu_f.mjs} +1 -1
  116. package/dist/{chunks/messages-DGaab4EP.mjs → messages-DHdkT1vy.mjs} +1 -1
  117. package/dist/{chunks/messages-4kMwVAKY.mjs → messages-DIbeBo-6.mjs} +1 -1
  118. package/dist/{chunks/messages-DVbPLd_0.mjs → messages-DR0sRlko.mjs} +1 -1
  119. package/dist/{chunks/messages-BX-DPa-z.mjs → messages-DRTt_xBc.mjs} +1 -1
  120. package/dist/{chunks/messages-CV7OM_qk.mjs → messages-DT43ZUKr.mjs} +1 -1
  121. package/dist/{chunks/messages-Di6Flq-b.mjs → messages-DT5djAjs.mjs} +1 -1
  122. package/dist/{chunks/messages-C6tbPLoj.mjs → messages-Df6LYOt5.mjs} +1 -1
  123. package/dist/{messages-BUlwu9mo.mjs → messages-DhdzbzrS.mjs} +1 -1
  124. package/dist/{messages-Ceo1KtFx.mjs → messages-DiyoZ_Oa.mjs} +1 -1
  125. package/dist/{messages-8p86Eyf2.mjs → messages-DkJ5aV3V.mjs} +1 -1
  126. package/dist/{chunks/messages-Dx3eFwI0.mjs → messages-DvwZEFTL.mjs} +1 -1
  127. package/dist/{chunks/messages-Bl5z_Igo.mjs → messages-Dw5GZ4YT.mjs} +1 -1
  128. package/dist/{messages-CLixzySl.mjs → messages-HSxl9MoN.mjs} +1 -1
  129. package/dist/{messages-DOaujgMW.mjs → messages-JztkG3tZ.mjs} +1 -1
  130. package/dist/{chunks/messages-BnsE97ku.mjs → messages-KLzTvDED.mjs} +1 -1
  131. package/dist/{chunks/messages-BBX0p0Pi.mjs → messages-TulYnz1f.mjs} +1 -1
  132. package/dist/{messages-D0ohMB5H.mjs → messages-Uexhy7C9.mjs} +1 -1
  133. package/dist/{chunks/messages-Dqhhex6e.mjs → messages-ctRNTfv5.mjs} +1 -1
  134. package/dist/{messages-CA6T3-gQ.mjs → messages-dIzxSHR2.mjs} +1 -1
  135. package/dist/{messages-bSf31LJi.mjs → messages-g7Njot5w.mjs} +1 -1
  136. package/dist/{messages-w5foGze_.mjs → messages-iNIhRBkQ.mjs} +1 -1
  137. package/dist/{messages-FOtiUoKl.mjs → messages-jmh1Gbfd.mjs} +1 -1
  138. package/dist/{messages-a6A_LgDv.mjs → messages-oO_lJ-_I.mjs} +1 -1
  139. package/dist/{messages-BvCkXKX-.mjs → messages-qFesO1Lu.mjs} +1 -1
  140. package/dist/{chunks/messages-diGozhTn.mjs → messages-sSYZ0Mz9.mjs} +1 -1
  141. package/dist/{messages-CFFPFdWP.mjs → messages-zs9AgeBF.mjs} +1 -1
  142. package/dist/tools.mjs +128 -87
  143. package/package.json +1 -1
  144. package/src/components/i18n/locales/am/messages.json +1 -1
  145. package/src/components/i18n/locales/ar/messages.json +1 -1
  146. package/src/components/i18n/locales/az/messages.json +1 -1
  147. package/src/components/i18n/locales/bg/messages.json +1 -1
  148. package/src/components/i18n/locales/bn/messages.json +1 -1
  149. package/src/components/i18n/locales/bs/messages.json +1 -1
  150. package/src/components/i18n/locales/cs/messages.json +1 -1
  151. package/src/components/i18n/locales/da/messages.json +1 -1
  152. package/src/components/i18n/locales/de/messages.json +1 -1
  153. package/src/components/i18n/locales/dv/messages.json +1 -1
  154. package/src/components/i18n/locales/el/messages.json +1 -1
  155. package/src/components/i18n/locales/en/messages.json +1 -1
  156. package/src/components/i18n/locales/es/messages.json +1 -1
  157. package/src/components/i18n/locales/et/messages.json +1 -1
  158. package/src/components/i18n/locales/fa/messages.json +1 -1
  159. package/src/components/i18n/locales/fi/messages.json +1 -1
  160. package/src/components/i18n/locales/fil/messages.json +1 -1
  161. package/src/components/i18n/locales/fr/messages.json +1 -1
  162. package/src/components/i18n/locales/gu/messages.json +1 -1
  163. package/src/components/i18n/locales/he/messages.json +1 -1
  164. package/src/components/i18n/locales/hi/messages.json +1 -1
  165. package/src/components/i18n/locales/hr/messages.json +1 -1
  166. package/src/components/i18n/locales/hu/messages.json +1 -1
  167. package/src/components/i18n/locales/hy/messages.json +1 -1
  168. package/src/components/i18n/locales/id/messages.json +1 -1
  169. package/src/components/i18n/locales/it/messages.json +1 -1
  170. package/src/components/i18n/locales/ja/messages.json +1 -1
  171. package/src/components/i18n/locales/ka/messages.json +1 -1
  172. package/src/components/i18n/locales/km/messages.json +1 -1
  173. package/src/components/i18n/locales/kn/messages.json +1 -1
  174. package/src/components/i18n/locales/ko/messages.json +1 -1
  175. package/src/components/i18n/locales/ku/messages.json +1 -1
  176. package/src/components/i18n/locales/lo/messages.json +1 -1
  177. package/src/components/i18n/locales/lt/messages.json +1 -1
  178. package/src/components/i18n/locales/lv/messages.json +1 -1
  179. package/src/components/i18n/locales/mk/messages.json +1 -1
  180. package/src/components/i18n/locales/ml/messages.json +1 -1
  181. package/src/components/i18n/locales/mn/messages.json +1 -1
  182. package/src/components/i18n/locales/mr/messages.json +1 -1
  183. package/src/components/i18n/locales/ms/messages.json +1 -1
  184. package/src/components/i18n/locales/my/messages.json +1 -1
  185. package/src/components/i18n/locales/ne/messages.json +1 -1
  186. package/src/components/i18n/locales/nl/messages.json +1 -1
  187. package/src/components/i18n/locales/no/messages.json +1 -1
  188. package/src/components/i18n/locales/pa/messages.json +1 -1
  189. package/src/components/i18n/locales/pl/messages.json +1 -1
  190. package/src/components/i18n/locales/ps/messages.json +1 -1
  191. package/src/components/i18n/locales/pt/messages.json +1 -1
  192. package/src/components/i18n/locales/ro/messages.json +1 -1
  193. package/src/components/i18n/locales/ru/messages.json +1 -1
  194. package/src/components/i18n/locales/sd/messages.json +1 -1
  195. package/src/components/i18n/locales/si/messages.json +1 -1
  196. package/src/components/i18n/locales/sk/messages.json +1 -1
  197. package/src/components/i18n/locales/sl/messages.json +1 -1
  198. package/src/components/i18n/locales/sq/messages.json +1 -1
  199. package/src/components/i18n/locales/sr/messages.json +1 -1
  200. package/src/components/i18n/locales/sv/messages.json +1 -1
  201. package/src/components/i18n/locales/sw/messages.json +1 -1
  202. package/src/components/i18n/locales/ta/messages.json +1 -1
  203. package/src/components/i18n/locales/te/messages.json +1 -1
  204. package/src/components/i18n/locales/th/messages.json +1 -1
  205. package/src/components/i18n/locales/tr/messages.json +1 -1
  206. package/src/components/i18n/locales/ug/messages.json +1 -1
  207. package/src/components/i18n/locales/uk/messages.json +1 -1
  208. package/src/components/i18n/locales/ur/messages.json +1 -1
  209. package/src/components/i18n/locales/vi/messages.json +1 -1
  210. package/src/components/i18n/locales/yi/messages.json +1 -1
  211. package/src/components/i18n/locales/zh/messages.json +1 -1
  212. package/src/components/modules/api/i18n.ts +1 -0
  213. package/src/components/tools/block.ts +10 -1
  214. package/src/components/tools/factory.ts +8 -7
  215. package/src/tools/header/index.ts +73 -0
  216. package/src/tools/list/index.ts +2 -2
  217. package/types/api/i18n.d.ts +8 -0
@@ -16,6 +16,7 @@ import type {
16
16
  BlockToolData,
17
17
  PasteEvent,
18
18
  ToolboxConfig,
19
+ ToolboxConfigEntry,
19
20
  ConversionConfig,
20
21
  SanitizerConfig,
21
22
  PasteConfig,
@@ -60,6 +61,11 @@ export interface HeaderConfig {
60
61
  defaultLevel?: number;
61
62
  /** Level-specific overrides keyed by level number (1-6) */
62
63
  levelOverrides?: Record<number, HeaderLevelConfig>;
64
+ /**
65
+ * @internal Injected by BlockToolAdapter - merged toolbox entries.
66
+ * When present, renderSettings() will use these entries instead of the default levels.
67
+ */
68
+ _toolboxEntries?: ToolboxConfigEntry[];
63
69
  }
64
70
 
65
71
  /**
@@ -195,6 +201,19 @@ export class Header implements BlockTool {
195
201
  * @returns MenuConfig array
196
202
  */
197
203
  public renderSettings(): MenuConfig {
204
+ const toolboxEntries = this._settings._toolboxEntries;
205
+
206
+ /**
207
+ * If user provided custom toolbox entries, use them to build settings menu.
208
+ * This ensures block settings match the toolbox configuration.
209
+ */
210
+ if (toolboxEntries !== undefined && toolboxEntries.length > 0) {
211
+ return this.buildSettingsFromToolboxEntries(toolboxEntries);
212
+ }
213
+
214
+ /**
215
+ * Fall back to existing behavior using levels config
216
+ */
198
217
  return this.levels.map(level => {
199
218
  const translated = this.api.i18n.t(level.nameKey);
200
219
  const title = translated !== level.nameKey ? translated : level.name;
@@ -212,6 +231,60 @@ export class Header implements BlockTool {
212
231
  });
213
232
  }
214
233
 
234
+ /**
235
+ * Build settings menu items from toolbox entries.
236
+ * This allows users to customize which levels appear in block settings
237
+ * by configuring the toolbox.
238
+ *
239
+ * @param entries - Merged toolbox entries from user config
240
+ * @returns MenuConfig array
241
+ */
242
+ private buildSettingsFromToolboxEntries(entries: ToolboxConfigEntry[]): MenuConfig {
243
+ return entries.map(entry => {
244
+ const entryData = entry.data as { level?: number } | undefined;
245
+ const level = entryData?.level ?? this.defaultLevel.number;
246
+ const defaultLevel = Header.DEFAULT_LEVELS.find(l => l.number === level);
247
+ const fallbackTitle = defaultLevel?.name ?? `Heading ${level}`;
248
+
249
+ const title = this.resolveToolboxEntryTitle(entry, fallbackTitle);
250
+ const icon = entry.icon ?? defaultLevel?.icon ?? IconHeading;
251
+
252
+ return {
253
+ icon,
254
+ title,
255
+ onActivate: (): void => this.setLevel(level),
256
+ closeOnActivate: true,
257
+ isActive: this.currentLevel.number === level,
258
+ dataset: {
259
+ 'blok-header-level': String(level),
260
+ },
261
+ };
262
+ });
263
+ }
264
+
265
+ /**
266
+ * Resolves the title for a toolbox entry.
267
+ * Priority: custom title > i18n key translation > fallback
268
+ *
269
+ * @param entry - Toolbox entry
270
+ * @param fallback - Fallback title if no custom title or translation found
271
+ * @returns Resolved title string
272
+ */
273
+ private resolveToolboxEntryTitle(entry: ToolboxConfigEntry, fallback: string): string {
274
+ if (entry.title !== undefined) {
275
+ return entry.title;
276
+ }
277
+
278
+ if (entry.titleKey === undefined) {
279
+ return fallback;
280
+ }
281
+
282
+ const namespacedKey = `toolNames.${entry.titleKey}`;
283
+ const translated = this.api.i18n.t(namespacedKey);
284
+
285
+ return translated !== namespacedKey ? translated : fallback;
286
+ }
287
+
215
288
  /**
216
289
  * Callback for Block's settings buttons
217
290
  *
@@ -226,10 +226,10 @@ export class ListItem implements BlockTool {
226
226
  return this._settings.itemSize;
227
227
  }
228
228
 
229
- private static readonly DEFAULT_PLACEHOLDER = 'List';
229
+ private static readonly PLACEHOLDER_KEY = 'tools.list.placeholder';
230
230
 
231
231
  private get placeholder(): string {
232
- return this.api.i18n.t(ListItem.DEFAULT_PLACEHOLDER);
232
+ return this.api.i18n.t(ListItem.PLACEHOLDER_KEY);
233
233
  }
234
234
 
235
235
  private applyItemStyles(element: HTMLElement): void {
@@ -10,4 +10,12 @@ export interface I18n {
10
10
  * @returns Translated string, or the key itself if translation is missing
11
11
  */
12
12
  t(dictKey: string): string;
13
+
14
+ /**
15
+ * Check if a translation exists for the given key.
16
+ *
17
+ * @param dictKey - Full translation key to check
18
+ * @returns True if translation exists, false otherwise
19
+ */
20
+ has(dictKey: string): boolean;
13
21
  }