@jackuait/blok 0.4.3-beta.4 → 0.4.3-beta.6
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.
- package/dist/blok.mjs +2 -2
- package/dist/chunks/{blok-N-sAekLt.mjs → blok-B6xeFB1r.mjs} +153 -125
- package/dist/chunks/{i18next-loader-aMaQI76a.mjs → i18next-loader-DolG6O7i.mjs} +1 -1
- package/dist/chunks/{index-B6xvzBsa.mjs → index-Bqo-x11-.mjs} +1 -1
- package/dist/chunks/{inline-tool-convert-BBeAtLcM.mjs → inline-tool-convert-DqYXfC5g.mjs} +8 -8
- package/dist/full.mjs +2 -2
- package/dist/tools.mjs +128 -87
- package/package.json +1 -1
- package/src/components/modules/api/i18n.ts +1 -0
- package/src/components/tools/block.ts +10 -1
- package/src/components/tools/factory.ts +50 -1
- package/src/tools/header/index.ts +73 -0
- 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
|
*
|
package/types/api/i18n.d.ts
CHANGED
|
@@ -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
|
}
|