bridgerte 0.9.3 → 0.9.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"index-GaS65GL0.cjs","sources":["../../core/src/index.ts"],"sourcesContent":["export type * from './type';\nexport { resolvePayloadPanelSchema } from './payloadPanel';\n\n/**\n * 内容结构版本号,用于后续内容协议升级时做兼容判断。\n */\nexport const BRIDGERTE_CONTENT_VERSION = '0.1.0';\n\n/**\n * 默认表格插入能力上限。\n *\n * schema、自绘和 DOM 命令执行共用这组边界;DOM 默认面板可以用更小的首屏网格展示,\n * 但最终提交和 API 执行都不应超过这里声明的库内置上限。\n */\nexport const BRIDGERTE_TABLE_INSERT_MAX_ROWS = 20;\nexport const BRIDGERTE_TABLE_INSERT_MAX_COLS = 20;\n"],"names":["BRIDGERTE_CONTENT_VERSION"],"mappings":"aAMO,MAAMA,EAA4B"}
1
+ {"version":3,"file":"index-GaS65GL0.cjs","sources":["../../core/src/index.ts"],"sourcesContent":["export type * from './type';\nexport { isEditorContentEmpty } from './content';\nexport { resolvePayloadPanelSchema } from './payloadPanel';\n\r\n/**\r\n * 内容结构版本号,用于后续内容协议升级时做兼容判断。\r\n */\r\nexport const BRIDGERTE_CONTENT_VERSION = '0.1.0';\r\n\r\n/**\r\n * 默认表格插入能力上限。\r\n *\r\n * schema、自绘和 DOM 命令执行共用这组边界;DOM 默认面板可以用更小的首屏网格展示,\r\n * 但最终提交和 API 执行都不应超过这里声明的库内置上限。\r\n */\r\nexport const BRIDGERTE_TABLE_INSERT_MAX_ROWS = 20;\r\nexport const BRIDGERTE_TABLE_INSERT_MAX_COLS = 20;\r\n"],"names":["BRIDGERTE_CONTENT_VERSION"],"mappings":"aAOO,MAAMA,EAA4B"}
@@ -0,0 +1,54 @@
1
+ const b = (e) => e !== void 0 && Object.keys(e).length > 0, h = (e, t) => {
2
+ var o, m;
3
+ const a = (o = t.options) != null && o.length ? t.options : e, r = new Map(a.map((s) => [s.value, s])), u = (m = t.includeValues) != null && m.length ? t.includeValues.flatMap((s) => {
4
+ const l = r.get(s);
5
+ return l ? [l] : [];
6
+ }) : a, O = new Set(t.excludeValues ?? []), p = u.filter((s) => !O.has(s.value)).map((s) => {
7
+ var l, v;
8
+ return {
9
+ ...s,
10
+ label: ((l = t.optionLabels) == null ? void 0 : l[s.value]) ?? s.label,
11
+ value: ((v = t.optionValues) == null ? void 0 : v[s.value]) ?? s.value
12
+ };
13
+ });
14
+ return p.length > 0 ? p : a;
15
+ }, n = (e, t) => ({
16
+ label: t.label ?? e.label,
17
+ defaultValue: t.defaultValue ?? e.defaultValue,
18
+ placeholder: t.placeholder ?? e.placeholder
19
+ }), V = (e, t) => !t || !b(t) ? e : e.type === "select" ? {
20
+ ...e,
21
+ ...n(e, t),
22
+ options: h(e.options, t)
23
+ } : e.type === "color" ? {
24
+ ...e,
25
+ ...n(e, t),
26
+ options: h(e.options ?? [], t)
27
+ } : e.type === "number" ? {
28
+ ...e,
29
+ ...n(e, t),
30
+ min: t.min ?? e.min,
31
+ max: t.max ?? e.max,
32
+ step: t.step ?? e.step
33
+ } : {
34
+ ...e,
35
+ ...n(e, t)
36
+ }, y = (e, t) => {
37
+ const a = t == null ? void 0 : t[e.id];
38
+ return !a || !b(a) ? e : {
39
+ ...e,
40
+ title: a.title ?? e.title,
41
+ description: a.description ?? e.description,
42
+ fields: e.fields.map((r) => {
43
+ var u;
44
+ return V(
45
+ r,
46
+ (u = a.fields) == null ? void 0 : u[r.name]
47
+ );
48
+ })
49
+ };
50
+ };
51
+ export {
52
+ y as r
53
+ };
54
+ //# sourceMappingURL=index-sbZNOcCB.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-sbZNOcCB.js","sources":["../../core/src/payloadPanel/index.ts"],"sourcesContent":["import type {\r\n PayloadPanelConfig,\r\n PayloadPanelField,\r\n PayloadPanelFieldConfig,\r\n PayloadPanelOption,\r\n PayloadPanelSchema\r\n} from './type';\r\n\r\nexport type * from './type';\r\n\r\nconst hasOwnConfigKeys = (config: object | undefined) => (\r\n config !== undefined && Object.keys(config).length > 0\r\n);\r\n\r\nconst resolveOptionList = (\r\n options: PayloadPanelOption[],\r\n config: PayloadPanelFieldConfig\r\n) => {\r\n const baseOptions = config.options?.length ? config.options : options;\r\n const optionByValue = new Map(baseOptions.map((option) => [option.value, option]));\r\n const includedOptions = config.includeValues?.length\r\n ? config.includeValues.flatMap((value) => {\r\n const option = optionByValue.get(value);\r\n\r\n return option ? [option] : [];\r\n })\r\n : baseOptions;\r\n const excludeValues = new Set(config.excludeValues ?? []);\r\n const filteredOptions = includedOptions.filter((option) => !excludeValues.has(option.value));\r\n const nextOptions = filteredOptions.map((option) => ({\r\n ...option,\r\n label: config.optionLabels?.[option.value] ?? option.label,\r\n value: config.optionValues?.[option.value] ?? option.value\r\n }));\r\n\r\n /*\r\n * 配置写错时不返回空候选,避免默认 DOM 面板、自绘 request 和原生菜单拿到\r\n * 无法操作的空列表;业务真要完全隐藏菜单应通过菜单 config 排除入口。\r\n */\r\n return nextOptions.length > 0 ? nextOptions : baseOptions;\r\n};\r\n\r\nconst resolveFieldBaseOverride = (\r\n field: PayloadPanelField,\r\n config: PayloadPanelFieldConfig\r\n) => ({\r\n label: config.label ?? field.label,\r\n defaultValue: config.defaultValue ?? field.defaultValue,\r\n placeholder: config.placeholder ?? field.placeholder\r\n});\r\n\r\nconst resolvePayloadPanelField = (\r\n field: PayloadPanelField,\r\n config: PayloadPanelFieldConfig | undefined\r\n): PayloadPanelField => {\r\n if (!config || !hasOwnConfigKeys(config)) return field;\r\n\r\n if (field.type === 'select') {\r\n return {\r\n ...field,\r\n ...resolveFieldBaseOverride(field, config),\r\n options: resolveOptionList(field.options, config)\r\n };\r\n }\r\n\r\n if (field.type === 'color') {\r\n return {\r\n ...field,\r\n ...resolveFieldBaseOverride(field, config),\r\n options: resolveOptionList(field.options ?? [], config)\r\n };\r\n }\r\n\r\n if (field.type === 'number') {\r\n return {\r\n ...field,\r\n ...resolveFieldBaseOverride(field, config),\r\n min: config.min ?? field.min,\r\n max: config.max ?? field.max,\r\n step: config.step ?? field.step\r\n };\r\n }\r\n\r\n return {\r\n ...field,\r\n ...resolveFieldBaseOverride(field, config)\r\n };\r\n};\r\n\r\n/**\r\n * 解析参数面板 schema。\r\n *\r\n * 这个纯函数只处理 schema 数据,不理解 DOM、Lexical 或具体命令;toolbar、hoverbar、\r\n * code block header 和 WebView host request 都应先走这里,保证默认 UI 和业务自绘同源。\r\n */\r\nexport const resolvePayloadPanelSchema = (\r\n panel: PayloadPanelSchema,\r\n config?: PayloadPanelConfig\r\n): PayloadPanelSchema => {\r\n const panelConfig = config?.[panel.id];\r\n\r\n if (!panelConfig || !hasOwnConfigKeys(panelConfig)) return panel;\r\n\r\n return {\r\n ...panel,\r\n title: panelConfig.title ?? panel.title,\r\n description: panelConfig.description ?? panel.description,\r\n fields: panel.fields.map((field) => resolvePayloadPanelField(\r\n field,\r\n panelConfig.fields?.[field.name]\r\n ))\r\n };\r\n};\r\n"],"names":["hasOwnConfigKeys","config","resolveOptionList","options","_a","_b","baseOptions","optionByValue","option","includedOptions","value","excludeValues","nextOptions","resolveFieldBaseOverride","field","resolvePayloadPanelField","resolvePayloadPanelSchema","panel","panelConfig"],"mappings":"AAUA,MAAMA,IAAmB,CAACC,MACxBA,MAAW,UAAa,OAAO,KAAKA,CAAM,EAAE,SAAS,GAGjDC,IAAoB,CACxBC,GACAF,MACG;AAPL,MAAAG,GAAAC;AAQE,QAAMC,KAAcF,IAAAH,EAAO,YAAP,QAAAG,EAAgB,SAASH,EAAO,UAAUE,GACxDI,IAAgB,IAAI,IAAID,EAAY,IAAI,CAACE,MAAW,CAACA,EAAO,OAAOA,CAAM,CAAC,CAAC,GAC3EC,KAAkBJ,IAAAJ,EAAO,kBAAP,QAAAI,EAAsB,SAC1CJ,EAAO,cAAc,QAAQ,CAACS,MAAU;AACxC,UAAMF,IAASD,EAAc,IAAIG,CAAK;AAEtC,WAAOF,IAAS,CAACA,CAAM,IAAI,CAAA;AAAA,EAC7B,CAAC,IACCF,GACEK,IAAgB,IAAI,IAAIV,EAAO,iBAAiB,CAAA,CAAE,GAElDW,IADkBH,EAAgB,OAAO,CAACD,MAAW,CAACG,EAAc,IAAIH,EAAO,KAAK,CAAC,EACvD,IAAI,CAACA,MAAA;AAnB3C,QAAAJ,GAAAC;AAmBuD;AAAA,MACnD,GAAGG;AAAA,MACH,SAAOJ,IAAAH,EAAO,iBAAP,gBAAAG,EAAsBI,EAAO,WAAUA,EAAO;AAAA,MACrD,SAAOH,IAAAJ,EAAO,iBAAP,gBAAAI,EAAsBG,EAAO,WAAUA,EAAO;AAAA,IAAA;AAAA,GACrD;AAMF,SAAOI,EAAY,SAAS,IAAIA,IAAcN;AAChD,GAEMO,IAA2B,CAC/BC,GACAb,OACI;AAAA,EACJ,OAAOA,EAAO,SAASa,EAAM;AAAA,EAC7B,cAAcb,EAAO,gBAAgBa,EAAM;AAAA,EAC3C,aAAab,EAAO,eAAea,EAAM;AAC3C,IAEMC,IAA2B,CAC/BD,GACAb,MAEI,CAACA,KAAU,CAACD,EAAiBC,CAAM,IAAUa,IAE7CA,EAAM,SAAS,WACV;AAAA,EACL,GAAGA;AAAA,EACH,GAAGD,EAAyBC,GAAOb,CAAM;AAAA,EACzC,SAASC,EAAkBY,EAAM,SAASb,CAAM;AAAA,IAIhDa,EAAM,SAAS,UACV;AAAA,EACL,GAAGA;AAAA,EACH,GAAGD,EAAyBC,GAAOb,CAAM;AAAA,EACzC,SAASC,EAAkBY,EAAM,WAAW,CAAA,GAAIb,CAAM;AAAA,IAItDa,EAAM,SAAS,WACV;AAAA,EACL,GAAGA;AAAA,EACH,GAAGD,EAAyBC,GAAOb,CAAM;AAAA,EACzC,KAAKA,EAAO,OAAOa,EAAM;AAAA,EACzB,KAAKb,EAAO,OAAOa,EAAM;AAAA,EACzB,MAAMb,EAAO,QAAQa,EAAM;AAAA,IAIxB;AAAA,EACL,GAAGA;AAAA,EACH,GAAGD,EAAyBC,GAAOb,CAAM;AAAA,GAUhCe,IAA4B,CACvCC,GACAhB,MACuB;AACvB,QAAMiB,IAAcjB,KAAA,gBAAAA,EAASgB,EAAM;AAEnC,SAAI,CAACC,KAAe,CAAClB,EAAiBkB,CAAW,IAAUD,IAEpD;AAAA,IACL,GAAGA;AAAA,IACH,OAAOC,EAAY,SAASD,EAAM;AAAA,IAClC,aAAaC,EAAY,eAAeD,EAAM;AAAA,IAC9C,QAAQA,EAAM,OAAO,IAAI,CAACH,MAAA;AAjG9B,UAAAV;AAiGwC,aAAAW;AAAA,QAClCD;AAAA,SACAV,IAAAc,EAAY,WAAZ,gBAAAd,EAAqBU,EAAM;AAAA,MAAI;AAAA,KAChC;AAAA,EAAA;AAEL;"}
package/dist/index.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("./index-GaS65GL0.cjs"),a=require("./bridge.cjs"),e=require("./native-spec.cjs"),o=require("./index-BaOlPu8L.cjs"),r=require("./index-hd9Zi2DV.cjs"),n=require("./core.cjs");exports.BRIDGERTE_CONTENT_VERSION=t.BRIDGERTE_CONTENT_VERSION;exports.BRIDGERTE_TABLE_INSERT_MAX_COLS=t.BRIDGERTE_TABLE_INSERT_MAX_COLS;exports.BRIDGERTE_TABLE_INSERT_MAX_ROWS=t.BRIDGERTE_TABLE_INSERT_MAX_ROWS;exports.BRIDGE_CONTENT_CHANGE_DEBOUNCE_MS=a.BRIDGE_CONTENT_CHANGE_DEBOUNCE_MS;exports.BRIDGE_HEIGHT_CHANGE_THROTTLE_MS=a.BRIDGE_HEIGHT_CHANGE_THROTTLE_MS;exports.defaultBridgeEventTiming=a.defaultBridgeEventTiming;exports.isBridgeMessage=a.isBridgeMessage;exports.codeBlockLanguagePanel=e.codeBlockLanguagePanel;exports.codeBlockLanguagePayloadPanel=e.codeBlockLanguagePayloadPanel;exports.createDisabledCommandStates=e.createDisabledCommandStates;exports.defaultMenuSchema=e.defaultMenuSchema;exports.defaultToolbarConfig=e.defaultToolbarConfig;exports.getCommandStateMatchValue=e.getCommandStateMatchValue;exports.isCommandStateForCommand=e.isCommandStateForCommand;exports.isMenuItemCommandState=e.isMenuItemCommandState;exports.resolveToolbarMenu=e.resolveToolbarMenu;exports.tableHeaderMenuItems=e.tableHeaderMenuItems;exports.createFloatingLayer=o.createFloatingLayer;exports.createRichTextEditor=o.createRichTextEditor;exports.createWebViewBridgeRuntime=o.createWebViewBridgeRuntime;exports.createRichTextToolbar=r.createRichTextToolbar;exports.resolvePayloadPanelSchema=n.resolvePayloadPanelSchema;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("./index-GaS65GL0.cjs"),a=require("./bridge.cjs"),e=require("./native-spec.cjs"),n=require("./index-DKalD8mx.cjs"),o=require("./index-5d8qaSP5.cjs"),r=require("./core.cjs"),i=require("./index-DF8OhKI4.cjs");exports.BRIDGERTE_CONTENT_VERSION=t.BRIDGERTE_CONTENT_VERSION;exports.BRIDGERTE_TABLE_INSERT_MAX_COLS=t.BRIDGERTE_TABLE_INSERT_MAX_COLS;exports.BRIDGERTE_TABLE_INSERT_MAX_ROWS=t.BRIDGERTE_TABLE_INSERT_MAX_ROWS;exports.BRIDGE_CONTENT_CHANGE_DEBOUNCE_MS=a.BRIDGE_CONTENT_CHANGE_DEBOUNCE_MS;exports.BRIDGE_HEIGHT_CHANGE_THROTTLE_MS=a.BRIDGE_HEIGHT_CHANGE_THROTTLE_MS;exports.defaultBridgeEventTiming=a.defaultBridgeEventTiming;exports.isBridgeMessage=a.isBridgeMessage;exports.codeBlockLanguagePanel=e.codeBlockLanguagePanel;exports.codeBlockLanguagePayloadPanel=e.codeBlockLanguagePayloadPanel;exports.createDisabledCommandStates=e.createDisabledCommandStates;exports.defaultMenuSchema=e.defaultMenuSchema;exports.defaultToolbarConfig=e.defaultToolbarConfig;exports.getCommandStateMatchValue=e.getCommandStateMatchValue;exports.isCommandStateForCommand=e.isCommandStateForCommand;exports.isMenuItemCommandState=e.isMenuItemCommandState;exports.resolveToolbarMenu=e.resolveToolbarMenu;exports.tableHeaderMenuItems=e.tableHeaderMenuItems;exports.createFloatingLayer=n.createFloatingLayer;exports.createRichTextEditor=n.createRichTextEditor;exports.createWebViewBridgeRuntime=n.createWebViewBridgeRuntime;exports.createRichTextToolbar=o.createRichTextToolbar;exports.hasMeaningfulHtmlContent=o.hasMeaningfulHtmlContent;exports.isEditorContentEmpty=r.isEditorContentEmpty;exports.resolvePayloadPanelSchema=i.resolvePayloadPanelSchema;
2
2
  //# sourceMappingURL=index.cjs.map
package/dist/index.js CHANGED
@@ -1,31 +1,34 @@
1
- import { B as o, a as t, b as r } from "./index-CuNKUHed.js";
2
- import { BRIDGE_CONTENT_CHANGE_DEBOUNCE_MS as m, BRIDGE_HEIGHT_CHANGE_THROTTLE_MS as T, defaultBridgeEventTiming as l, isBridgeMessage as n } from "./bridge.js";
3
- import { codeBlockLanguagePanel as _, codeBlockLanguagePayloadPanel as s, createDisabledCommandStates as c, defaultMenuSchema as i, defaultToolbarConfig as R, getCommandStateMatchValue as B, isCommandStateForCommand as S, isMenuItemCommandState as g, resolveToolbarMenu as C, tableHeaderMenuItems as u } from "./native-spec.js";
4
- import { c as f, a as M, b as N } from "./index-BwZ0II4h.js";
5
- import { c as x } from "./index-bN5Hs6-3.js";
6
- import { resolvePayloadPanelSchema as D } from "./core.js";
1
+ import { B as t, a as o, b as r } from "./index-CuNKUHed.js";
2
+ import { BRIDGE_CONTENT_CHANGE_DEBOUNCE_MS as n, BRIDGE_HEIGHT_CHANGE_THROTTLE_MS as E, defaultBridgeEventTiming as l, isBridgeMessage as s } from "./bridge.js";
3
+ import { codeBlockLanguagePanel as d, codeBlockLanguagePayloadPanel as i, createDisabledCommandStates as _, defaultMenuSchema as c, defaultToolbarConfig as R, getCommandStateMatchValue as B, isCommandStateForCommand as C, isMenuItemCommandState as g, resolveToolbarMenu as S, tableHeaderMenuItems as f } from "./native-spec.js";
4
+ import { c as I, a as M, b as N } from "./index-BzpD9bI2.js";
5
+ import { c as b, h as p } from "./index-C26bdJ7I.js";
6
+ import { isEditorContentEmpty as h } from "./core.js";
7
+ import { r as H } from "./index-sbZNOcCB.js";
7
8
  export {
8
- o as BRIDGERTE_CONTENT_VERSION,
9
- t as BRIDGERTE_TABLE_INSERT_MAX_COLS,
9
+ t as BRIDGERTE_CONTENT_VERSION,
10
+ o as BRIDGERTE_TABLE_INSERT_MAX_COLS,
10
11
  r as BRIDGERTE_TABLE_INSERT_MAX_ROWS,
11
- m as BRIDGE_CONTENT_CHANGE_DEBOUNCE_MS,
12
- T as BRIDGE_HEIGHT_CHANGE_THROTTLE_MS,
13
- _ as codeBlockLanguagePanel,
14
- s as codeBlockLanguagePayloadPanel,
15
- c as createDisabledCommandStates,
16
- f as createFloatingLayer,
12
+ n as BRIDGE_CONTENT_CHANGE_DEBOUNCE_MS,
13
+ E as BRIDGE_HEIGHT_CHANGE_THROTTLE_MS,
14
+ d as codeBlockLanguagePanel,
15
+ i as codeBlockLanguagePayloadPanel,
16
+ _ as createDisabledCommandStates,
17
+ I as createFloatingLayer,
17
18
  M as createRichTextEditor,
18
- x as createRichTextToolbar,
19
+ b as createRichTextToolbar,
19
20
  N as createWebViewBridgeRuntime,
20
21
  l as defaultBridgeEventTiming,
21
- i as defaultMenuSchema,
22
+ c as defaultMenuSchema,
22
23
  R as defaultToolbarConfig,
23
24
  B as getCommandStateMatchValue,
24
- n as isBridgeMessage,
25
- S as isCommandStateForCommand,
25
+ p as hasMeaningfulHtmlContent,
26
+ s as isBridgeMessage,
27
+ C as isCommandStateForCommand,
28
+ h as isEditorContentEmpty,
26
29
  g as isMenuItemCommandState,
27
- D as resolvePayloadPanelSchema,
28
- C as resolveToolbarMenu,
29
- u as tableHeaderMenuItems
30
+ H as resolvePayloadPanelSchema,
31
+ S as resolveToolbarMenu,
32
+ f as tableHeaderMenuItems
30
33
  };
31
34
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"native-spec.cjs","sources":["../../native-spec/src/menuSchema/payloadPanels.ts","../../native-spec/src/menuSchema/tableHeaderMenuItems.ts","../../native-spec/src/menuSchema/defaultMenuSchema.ts","../../native-spec/src/commandState/index.ts","../../native-spec/src/toolbarConfig/index.ts"],"sourcesContent":["import {\n BRIDGERTE_TABLE_INSERT_MAX_COLS,\n BRIDGERTE_TABLE_INSERT_MAX_ROWS,\n type PayloadPanelSchema\n} from '@bridgerte/core';\n\n/**\n * 代码块语言列表给 DOM 代码块顶部控制栏和原生侧自绘使用。\n *\n * 空字符串表示纯文本;默认候选按 Shiki 高频技术文档语言维护。业务如需裁剪语言、\n * 调整顺序或接入更多 Shiki 语言,传入自己的 `codeBlockLanguagePanel` 即可。\n */\nexport const codeBlockLanguagePanel: PayloadPanelSchema = {\n id: 'code-block-language',\n title: '代码语言',\n fields: [\n {\n type: 'select',\n name: 'language',\n label: '语言',\n defaultValue: '',\n options: [\n { label: '纯文本', value: '' },\n { label: 'Bash', value: 'shellscript' },\n { label: 'C', value: 'c' },\n { label: 'C++', value: 'cpp' },\n { label: 'C#', value: 'csharp' },\n { label: 'CSS', value: 'css' },\n { label: 'Dart', value: 'dart' },\n { label: 'Dockerfile', value: 'docker' },\n { label: 'Go', value: 'go' },\n { label: 'HTML', value: 'html' },\n { label: 'Java', value: 'java' },\n { label: 'JavaScript', value: 'javascript' },\n { label: 'JSON', value: 'json' },\n { label: 'Kotlin', value: 'kotlin' },\n { label: 'Markdown', value: 'markdown' },\n { label: 'PHP', value: 'php' },\n { label: 'Python', value: 'python' },\n { label: 'Rust', value: 'rust' },\n { label: 'SQL', value: 'sql' },\n { label: 'Swift', value: 'swift' },\n { label: 'TOML', value: 'toml' },\n { label: 'TSX', value: 'tsx' },\n { label: 'TypeScript', value: 'typescript' },\n { label: 'Vue', value: 'vue' },\n { label: 'XML', value: 'xml' },\n { label: 'YAML', value: 'yaml' }\n ]\n }\n ]\n};\n\n/**\n * 兼容旧导出名。\n *\n * 代码块语言现在由代码块 header 触发,不再代表 toolbar 菜单 payload。\n */\nexport const codeBlockLanguagePayloadPanel = codeBlockLanguagePanel;\n\n/**\n * 颜色菜单使用 color 字段而不是预设色列表。\n *\n * DOM 默认面板可以渲染内置颜色控件,RN/Flutter/WebView 或业务自绘层仍读取同一份 schema。\n */\nexport const textColorPanel: PayloadPanelSchema = {\n id: 'text-color',\n title: '文字颜色',\n fields: [\n {\n type: 'color',\n name: 'value',\n label: '颜色'\n }\n ]\n};\n\nexport const backgroundColorPanel: PayloadPanelSchema = {\n id: 'background-color',\n title: '背景色',\n fields: [\n {\n type: 'color',\n name: 'value',\n label: '背景'\n }\n ]\n};\n\nexport const fontSizePanel: PayloadPanelSchema = {\n id: 'font-size',\n title: '字号',\n fields: [\n {\n type: 'select',\n name: 'value',\n label: '字号',\n defaultValue: '16px',\n options: [\n { label: '小号 14px', value: '14px' },\n { label: '正文 16px', value: '16px' },\n { label: '强调 18px', value: '18px' },\n { label: '标题 20px', value: '20px' },\n { label: '大标题 24px', value: '24px' }\n ]\n }\n ]\n};\n\nexport const fontFamilyPanel: PayloadPanelSchema = {\n id: 'font-family',\n title: '字体',\n fields: [\n {\n type: 'select',\n name: 'value',\n label: '字体',\n defaultValue: '',\n options: [\n { label: '跟随页面', value: '' },\n { label: '无衬线', value: 'sans-serif' },\n { label: '衬线', value: 'serif' },\n { label: '等宽', value: 'monospace' }\n ]\n }\n ]\n};\n\nexport const lineHeightPanel: PayloadPanelSchema = {\n id: 'line-height',\n title: '行高',\n fields: [\n {\n type: 'select',\n name: 'value',\n label: '行高',\n defaultValue: '1.7',\n options: [\n { label: '紧凑 1.4', value: '1.4' },\n { label: '常规 1.7', value: '1.7' },\n { label: '舒展 2', value: '2' }\n ]\n }\n ]\n};\n\n/**\n * 表格插入使用 number 字段收集行列。\n *\n * DOM 默认面板、H5 自绘和 RN/Flutter 原生表单都读取同一份 schema;真正的表格进阶操作\n * 仍放后续表格菜单阶段继续扩展。\n */\nexport const tableInsertPanel: PayloadPanelSchema = {\n id: 'table-insert',\n title: '插入表格',\n fields: [\n {\n type: 'number',\n name: 'rows',\n label: '行数',\n defaultValue: '3',\n min: 1,\n max: BRIDGERTE_TABLE_INSERT_MAX_ROWS,\n step: 1\n },\n {\n type: 'number',\n name: 'cols',\n label: '列数',\n defaultValue: '3',\n min: 1,\n max: BRIDGERTE_TABLE_INSERT_MAX_COLS,\n step: 1\n }\n ]\n};\n","import type { MenuItem } from './type';\n\n/*\n * 表格 header 和后续表格浮动菜单共用这组操作入口。\n * 这些菜单默认不进入 toolbar 排列,但仍放在 native-spec,保证 DOM/RN/Flutter 自绘读取同一份\n * command/label/icon 协议。\n */\nexport const tableHeaderMenuItems: MenuItem[] = [\n {\n id: 'table-insert-row-after',\n command: { type: 'table.insertRow', direction: 'after' },\n label: '插入行',\n icon: 'rows-plus',\n group: 'table'\n },\n {\n id: 'table-delete-row',\n command: { type: 'table.deleteRow' },\n label: '删除行',\n icon: 'rows-minus',\n group: 'table'\n },\n {\n id: 'table-insert-column-after',\n command: { type: 'table.insertColumn', direction: 'after' },\n label: '插入列',\n icon: 'columns-plus',\n group: 'table'\n },\n {\n id: 'table-delete-column',\n command: { type: 'table.deleteColumn' },\n label: '删除列',\n icon: 'columns-minus',\n group: 'table'\n },\n {\n id: 'table-delete',\n command: { type: 'table.delete' },\n label: '删除表格',\n icon: 'table-delete',\n group: 'table'\n }\n];\n","import type { MenuItem } from './type';\nimport {\n backgroundColorPanel,\n fontFamilyPanel,\n fontSizePanel,\n lineHeightPanel,\n tableInsertPanel,\n textColorPanel\n} from './payloadPanels';\nimport { tableHeaderMenuItems } from './tableHeaderMenuItems';\n\n/**\n * 默认菜单 schema 覆盖 wangEditor 常用入口。\n *\n * RN/Flutter 可以按 group 渲染分组,也可以基于 id 做业务侧排序或裁剪。\n */\nexport const defaultMenuSchema: MenuItem[] = [\n {\n id: 'bold',\n command: { type: 'format.bold' },\n label: '加粗',\n icon: 'bold',\n group: 'text'\n },\n {\n id: 'italic',\n command: { type: 'format.italic' },\n label: '斜体',\n icon: 'italic',\n group: 'text'\n },\n {\n id: 'underline',\n command: { type: 'format.underline' },\n label: '下划线',\n icon: 'underline',\n group: 'text'\n },\n {\n id: 'strike',\n command: { type: 'format.strike' },\n label: '删除线',\n icon: 'strikethrough',\n group: 'text'\n },\n {\n id: 'inline-code',\n command: { type: 'format.inlineCode' },\n label: '行内代码',\n icon: 'code',\n group: 'text'\n },\n {\n id: 'superscript',\n command: { type: 'format.superscript' },\n label: '上标',\n icon: 'superscript',\n group: 'text'\n },\n {\n id: 'subscript',\n command: { type: 'format.subscript' },\n label: '下标',\n icon: 'subscript',\n group: 'text'\n },\n {\n id: 'clear-style',\n command: { type: 'format.clear' },\n label: '清除样式',\n icon: 'remove-formatting',\n group: 'text'\n },\n {\n id: 'color',\n command: { type: 'format.color', value: '' },\n label: '文字颜色',\n icon: 'palette',\n group: 'style',\n requiresPayload: true,\n payloadPanel: textColorPanel\n },\n {\n id: 'background-color',\n command: { type: 'format.backgroundColor', value: '' },\n label: '背景色',\n icon: 'paint-bucket',\n group: 'style',\n requiresPayload: true,\n payloadPanel: backgroundColorPanel\n },\n {\n id: 'font-size',\n command: { type: 'format.fontSize', value: '' },\n label: '字号',\n icon: 'case-sensitive',\n group: 'style',\n requiresPayload: true,\n payloadPanel: fontSizePanel\n },\n {\n id: 'font-family',\n command: { type: 'format.fontFamily', value: '' },\n label: '字体',\n icon: 'type',\n group: 'style',\n requiresPayload: true,\n payloadPanel: fontFamilyPanel\n },\n {\n id: 'line-height',\n command: { type: 'format.lineHeight', value: '' },\n label: '行高',\n icon: 'wrap-text',\n group: 'style',\n requiresPayload: true,\n payloadPanel: lineHeightPanel\n },\n {\n id: 'paragraph',\n command: { type: 'block.paragraph' },\n label: '正文',\n icon: 'pilcrow',\n group: 'block'\n },\n {\n id: 'heading-1',\n command: { type: 'block.heading', level: 1 },\n label: '一级标题',\n icon: 'heading-1',\n group: 'block'\n },\n {\n id: 'heading-2',\n command: { type: 'block.heading', level: 2 },\n label: '二级标题',\n icon: 'heading-2',\n group: 'block'\n },\n {\n id: 'heading-3',\n command: { type: 'block.heading', level: 3 },\n label: '三级标题',\n icon: 'heading-3',\n group: 'block'\n },\n {\n id: 'heading-4',\n command: { type: 'block.heading', level: 4 },\n label: '四级标题',\n icon: 'heading-4',\n group: 'block'\n },\n {\n id: 'heading-5',\n command: { type: 'block.heading', level: 5 },\n label: '五级标题',\n icon: 'heading-5',\n group: 'block'\n },\n {\n id: 'heading-6',\n command: { type: 'block.heading', level: 6 },\n label: '六级标题',\n icon: 'heading-6',\n group: 'block'\n },\n {\n id: 'quote',\n command: { type: 'block.quote' },\n label: '引用',\n icon: 'quote',\n group: 'block'\n },\n {\n id: 'divider',\n command: { type: 'block.divider' },\n label: '分割线',\n icon: 'minus',\n group: 'block'\n },\n {\n id: 'code-block',\n command: { type: 'block.code' },\n label: '代码块',\n icon: 'square-code',\n group: 'block'\n },\n {\n id: 'ordered-list',\n command: { type: 'list.ordered' },\n label: '有序列表',\n icon: 'list-ordered',\n group: 'list'\n },\n {\n id: 'unordered-list',\n command: { type: 'list.unordered' },\n label: '无序列表',\n icon: 'list',\n group: 'list'\n },\n {\n id: 'todo-list',\n command: { type: 'list.todo' },\n label: '待办列表',\n icon: 'list-todo',\n group: 'list'\n },\n {\n id: 'align-left',\n command: { type: 'align', value: 'left' },\n label: '左对齐',\n icon: 'align-left',\n group: 'align'\n },\n {\n id: 'align-center',\n command: { type: 'align', value: 'center' },\n label: '居中',\n icon: 'align-center',\n group: 'align'\n },\n {\n id: 'align-right',\n command: { type: 'align', value: 'right' },\n label: '右对齐',\n icon: 'align-right',\n group: 'align'\n },\n {\n id: 'align-justify',\n command: { type: 'align', value: 'justify' },\n label: '两端对齐',\n icon: 'align-justify',\n group: 'align'\n },\n {\n id: 'indent-increase',\n command: { type: 'indent.increase' },\n label: '增加缩进',\n icon: 'indent-increase',\n group: 'align'\n },\n {\n id: 'indent-decrease',\n command: { type: 'indent.decrease' },\n label: '减少缩进',\n icon: 'indent-decrease',\n group: 'align'\n },\n {\n id: 'mention',\n command: { type: 'mention.insert', item: { id: '', label: '', value: '' } },\n label: '@ 提及',\n icon: 'at-sign',\n group: 'insert',\n requiresPayload: true\n },\n {\n id: 'upload-image',\n command: { type: 'media.pickImage' },\n label: '上传图片',\n icon: 'upload-image',\n group: 'media'\n },\n {\n id: 'upload-video',\n command: { type: 'media.pickVideo' },\n label: '上传视频',\n icon: 'upload-video',\n group: 'media'\n },\n {\n id: 'table',\n command: { type: 'table.insert', rows: 3, cols: 3 },\n label: '表格',\n icon: 'table',\n group: 'table',\n requiresPayload: true,\n payloadPanel: tableInsertPanel\n },\n ...tableHeaderMenuItems,\n {\n id: 'slash-command',\n command: { type: 'slash.open' },\n label: '/ 命令',\n icon: 'list-plus',\n group: 'insert'\n },\n {\n id: 'undo',\n command: { type: 'history.undo' },\n label: '撤销',\n icon: 'undo',\n group: 'history'\n },\n {\n id: 'redo',\n command: { type: 'history.redo' },\n label: '重做',\n icon: 'redo',\n group: 'history'\n },\n {\n id: 'clear',\n command: { type: 'content.clear' },\n label: '清空',\n icon: 'trash-2',\n group: 'history'\n },\n {\n id: 'fullscreen',\n command: { type: 'fullscreen.toggle' },\n label: '全屏',\n icon: 'maximize',\n group: 'view'\n }\n];\n","import type { CommandState, EditorCommand } from '@bridgerte/core';\nimport type { MenuItem } from '../menuSchema';\nimport { defaultMenuSchema } from '../menuSchema';\n\nconst commandStateValueByType: Partial<Record<EditorCommand['type'], (command: EditorCommand) => (\n CommandState['value'] | undefined\n)>> = {\n align: (command) => command.type === 'align' ? command.value : undefined,\n 'block.heading': (command) => command.type === 'block.heading' ? command.level : undefined,\n 'block.setCodeLanguage': (command) => (\n command.type === 'block.setCodeLanguage' ? command.language : undefined\n )\n};\n\n/**\n * 取出菜单命令用于匹配 `CommandState.value` 的稳定值。\n *\n * 同类命令存在多个菜单项时使用这个值区分,比如对齐方式和标题级别。\n */\nexport const getCommandStateMatchValue = (\n command: EditorCommand\n): CommandState['value'] | undefined => commandStateValueByType[command.type]?.(command);\n\n/**\n * 判断某条命令状态是否对应一个完整命令 payload。\n */\nexport const isCommandStateForCommand = (\n command: EditorCommand,\n state: CommandState\n): boolean => {\n const matchValue = getCommandStateMatchValue(command);\n\n return state.command === command.type\n && (matchValue === undefined || state.value === matchValue);\n};\n\n/**\n * 判断某条命令状态是否对应一个菜单项。\n *\n * 原生 toolbar 可以用它把 `CommandState[]` 映射回具体按钮 active/disabled 状态。\n */\nexport const isMenuItemCommandState = (item: MenuItem, state: CommandState): boolean => (\n isCommandStateForCommand(item.command, state)\n);\n\n/**\n * 为给定菜单生成默认禁用状态。\n *\n * 编辑器未 ready 或无选区时,原生 toolbar 可以先使用这组状态兜底。\n */\nexport function createDisabledCommandStates(menuSchema = defaultMenuSchema): CommandState[] {\n return menuSchema.map((item) => ({\n command: item.command.type,\n active: false,\n disabled: true,\n value: getCommandStateMatchValue(item.command)\n }));\n}\n","import type { ToolbarConfig, ToolbarGroupConfig, ToolbarKey } from '@bridgerte/core';\nimport type { MenuItem } from '../menuSchema';\nimport { defaultMenuSchema } from '../menuSchema';\nimport type { ResolvedToolbarItem } from './type';\n\nexport type * from './type';\n\n/**\n * 默认 DOM toolbar 配置。\n *\n * 这里只选择已实现或带参数面板的基础按钮;完整菜单全集仍由 `defaultMenuSchema` 维护。\n */\nexport const defaultToolbarConfig: ToolbarConfig = {\n toolbarKeys: [\n 'undo',\n 'redo',\n 'clear',\n '|',\n 'paragraph',\n 'heading-1',\n 'heading-2',\n 'heading-3',\n 'heading-4',\n 'heading-5',\n 'heading-6',\n 'quote',\n 'divider',\n 'code-block',\n '|',\n 'bold',\n 'italic',\n 'underline',\n 'strike',\n 'inline-code',\n 'superscript',\n 'subscript',\n 'clear-style',\n 'color',\n 'background-color',\n 'font-size',\n 'font-family',\n 'line-height',\n '|',\n 'ordered-list',\n 'unordered-list',\n 'todo-list',\n '|',\n 'upload-image',\n 'upload-video',\n '|',\n 'table',\n '|',\n 'align-left',\n 'align-center',\n 'align-right',\n 'align-justify',\n 'indent-increase',\n 'indent-decrease',\n '|',\n 'fullscreen'\n ]\n};\n\nconst isToolbarGroupConfig = (key: ToolbarKey): key is ToolbarGroupConfig => (\n typeof key === 'object' && Array.isArray(key.menuKeys)\n);\n\nconst createMenuMap = (menuSchema: MenuItem[]) => new Map(\n menuSchema.map((item) => [item.id, item])\n);\n\nconst shouldExcludeToolbarKey = (\n key: ToolbarKey,\n excludeKeys: Set<string>\n) => {\n if (typeof key === 'string') return key !== '|' && excludeKeys.has(key);\n\n return excludeKeys.has(key.key) || key.menuKeys.every((menuKey) => excludeKeys.has(menuKey));\n};\n\nconst applyToolbarConfigOverrides = (\n baseKeys: ToolbarKey[],\n toolbarConfig?: ToolbarConfig\n): ToolbarKey[] => {\n const excludeKeys = new Set(toolbarConfig?.excludeKeys ?? []);\n /*\n * 先排除再插入,等价于“在用户最终想保留的默认菜单里加东西”。\n * insert index 做夹取,避免业务传入负数或超长下标时破坏默认 toolbar。\n */\n const filteredKeys = baseKeys.filter((key) => !shouldExcludeToolbarKey(key, excludeKeys));\n\n if (!toolbarConfig?.insertKeys) return filteredKeys;\n\n const insertIndex = Math.max(0, Math.min(toolbarConfig.insertKeys.index, filteredKeys.length));\n\n return [\n ...filteredKeys.slice(0, insertIndex),\n ...toolbarConfig.insertKeys.keys,\n ...filteredKeys.slice(insertIndex)\n ];\n};\n\nconst resolveToolbarKey = (\n key: ToolbarKey,\n menuMap: Map<string, MenuItem>,\n excludeKeys: Set<string>,\n separatorIndex: number\n): ResolvedToolbarItem[] => {\n if (key === '|') {\n return [{ type: 'separator', key: `separator-${separatorIndex}` }];\n }\n\n if (typeof key === 'string') {\n const item = menuMap.get(key);\n\n // 未知 key 直接忽略;需要 payload 但没有 panel 的菜单暂不渲染,避免按钮点击后无法生成合法命令。\n if (!item || (item.requiresPayload && !item.payloadPanel) || excludeKeys.has(item.id)) {\n return [];\n }\n\n return [{ type: 'button', item }];\n }\n\n if (isToolbarGroupConfig(key)) {\n const items = key.menuKeys\n .filter((menuKey) => !excludeKeys.has(menuKey))\n .map((menuKey) => menuMap.get(menuKey))\n .filter((item): item is MenuItem => (\n item !== undefined && (!item.requiresPayload || item.payloadPanel !== undefined)\n ));\n\n return items.length > 0 ? [{\n type: 'group',\n key: key.key,\n title: key.title,\n icon: key.icon,\n items\n }] : [];\n }\n\n return [];\n};\n\nconst shouldKeepResolvedToolbarItem = (\n item: ResolvedToolbarItem,\n items: ResolvedToolbarItem[]\n) => {\n if (item.type !== 'separator') return true;\n\n const previousItem = items[items.length - 1];\n\n return previousItem !== undefined && previousItem.type !== 'separator';\n};\n\nconst trimTrailingToolbarSeparators = (items: ResolvedToolbarItem[]) => {\n while (items.at(-1)?.type === 'separator') {\n items.pop();\n }\n\n return items;\n};\n\n/**\n * 把 wangEditor 风格的 JSON 配置解析成 DOM/RN/Flutter 都能消费的菜单结构。\n *\n * 未知 key 和缺少 payloadPanel 的 requiresPayload 菜单会被忽略,避免默认 toolbar 渲染无法处理的按钮。\n * 分割线会自动去掉开头、结尾和连续项,避免被跳过的菜单留下空分隔。\n */\nexport const resolveToolbarMenu = (\n toolbarConfig: ToolbarConfig = defaultToolbarConfig,\n menuSchema: MenuItem[] = defaultMenuSchema\n): ResolvedToolbarItem[] => {\n const menuMap = createMenuMap(menuSchema);\n const baseKeys = toolbarConfig.toolbarKeys ?? defaultToolbarConfig.toolbarKeys ?? [];\n const toolbarKeys = applyToolbarConfigOverrides(baseKeys, toolbarConfig);\n const excludeKeys = new Set(toolbarConfig.excludeKeys ?? []);\n let separatorIndex = 0;\n\n const resolvedItems = toolbarKeys.reduce<ResolvedToolbarItem[]>((items, key) => {\n const nextItems = resolveToolbarKey(key, menuMap, excludeKeys, separatorIndex);\n\n if (key === '|') separatorIndex += 1;\n\n nextItems.forEach((item) => {\n if (shouldKeepResolvedToolbarItem(item, items)) {\n items.push(item);\n }\n });\n\n return items;\n }, []);\n\n return trimTrailingToolbarSeparators(resolvedItems);\n};\n"],"names":["codeBlockLanguagePanel","codeBlockLanguagePayloadPanel","textColorPanel","backgroundColorPanel","fontSizePanel","fontFamilyPanel","lineHeightPanel","tableInsertPanel","BRIDGERTE_TABLE_INSERT_MAX_ROWS","BRIDGERTE_TABLE_INSERT_MAX_COLS","tableHeaderMenuItems","defaultMenuSchema","commandStateValueByType","command","getCommandStateMatchValue","_a","isCommandStateForCommand","state","matchValue","isMenuItemCommandState","item","createDisabledCommandStates","menuSchema","defaultToolbarConfig","isToolbarGroupConfig","key","createMenuMap","shouldExcludeToolbarKey","excludeKeys","menuKey","applyToolbarConfigOverrides","baseKeys","toolbarConfig","filteredKeys","insertIndex","resolveToolbarKey","menuMap","separatorIndex","items","shouldKeepResolvedToolbarItem","previousItem","trimTrailingToolbarSeparators","resolveToolbarMenu","toolbarKeys","resolvedItems","nextItems"],"mappings":"wHAYaA,EAA6C,CACxD,GAAI,sBACJ,MAAO,OACP,OAAQ,CACN,CACE,KAAM,SACN,KAAM,WACN,MAAO,KACP,aAAc,GACd,QAAS,CACP,CAAE,MAAO,MAAO,MAAO,EAAA,EACvB,CAAE,MAAO,OAAQ,MAAO,aAAA,EACxB,CAAE,MAAO,IAAK,MAAO,GAAA,EACrB,CAAE,MAAO,MAAO,MAAO,KAAA,EACvB,CAAE,MAAO,KAAM,MAAO,QAAA,EACtB,CAAE,MAAO,MAAO,MAAO,KAAA,EACvB,CAAE,MAAO,OAAQ,MAAO,MAAA,EACxB,CAAE,MAAO,aAAc,MAAO,QAAA,EAC9B,CAAE,MAAO,KAAM,MAAO,IAAA,EACtB,CAAE,MAAO,OAAQ,MAAO,MAAA,EACxB,CAAE,MAAO,OAAQ,MAAO,MAAA,EACxB,CAAE,MAAO,aAAc,MAAO,YAAA,EAC9B,CAAE,MAAO,OAAQ,MAAO,MAAA,EACxB,CAAE,MAAO,SAAU,MAAO,QAAA,EAC1B,CAAE,MAAO,WAAY,MAAO,UAAA,EAC5B,CAAE,MAAO,MAAO,MAAO,KAAA,EACvB,CAAE,MAAO,SAAU,MAAO,QAAA,EAC1B,CAAE,MAAO,OAAQ,MAAO,MAAA,EACxB,CAAE,MAAO,MAAO,MAAO,KAAA,EACvB,CAAE,MAAO,QAAS,MAAO,OAAA,EACzB,CAAE,MAAO,OAAQ,MAAO,MAAA,EACxB,CAAE,MAAO,MAAO,MAAO,KAAA,EACvB,CAAE,MAAO,aAAc,MAAO,YAAA,EAC9B,CAAE,MAAO,MAAO,MAAO,KAAA,EACvB,CAAE,MAAO,MAAO,MAAO,KAAA,EACvB,CAAE,MAAO,OAAQ,MAAO,MAAA,CAAO,CACjC,CACF,CAEJ,EAOaC,EAAgCD,EAOhCE,EAAqC,CAChD,GAAI,aACJ,MAAO,OACP,OAAQ,CACN,CACE,KAAM,QACN,KAAM,QACN,MAAO,IAAA,CACT,CAEJ,EAEaC,EAA2C,CACtD,GAAI,mBACJ,MAAO,MACP,OAAQ,CACN,CACE,KAAM,QACN,KAAM,QACN,MAAO,IAAA,CACT,CAEJ,EAEaC,EAAoC,CAC/C,GAAI,YACJ,MAAO,KACP,OAAQ,CACN,CACE,KAAM,SACN,KAAM,QACN,MAAO,KACP,aAAc,OACd,QAAS,CACP,CAAE,MAAO,UAAW,MAAO,MAAA,EAC3B,CAAE,MAAO,UAAW,MAAO,MAAA,EAC3B,CAAE,MAAO,UAAW,MAAO,MAAA,EAC3B,CAAE,MAAO,UAAW,MAAO,MAAA,EAC3B,CAAE,MAAO,WAAY,MAAO,MAAA,CAAO,CACrC,CACF,CAEJ,EAEaC,EAAsC,CACjD,GAAI,cACJ,MAAO,KACP,OAAQ,CACN,CACE,KAAM,SACN,KAAM,QACN,MAAO,KACP,aAAc,GACd,QAAS,CACP,CAAE,MAAO,OAAQ,MAAO,EAAA,EACxB,CAAE,MAAO,MAAO,MAAO,YAAA,EACvB,CAAE,MAAO,KAAM,MAAO,OAAA,EACtB,CAAE,MAAO,KAAM,MAAO,WAAA,CAAY,CACpC,CACF,CAEJ,EAEaC,EAAsC,CACjD,GAAI,cACJ,MAAO,KACP,OAAQ,CACN,CACE,KAAM,SACN,KAAM,QACN,MAAO,KACP,aAAc,MACd,QAAS,CACP,CAAE,MAAO,SAAU,MAAO,KAAA,EAC1B,CAAE,MAAO,SAAU,MAAO,KAAA,EAC1B,CAAE,MAAO,OAAQ,MAAO,GAAA,CAAI,CAC9B,CACF,CAEJ,EAQaC,EAAuC,CAClD,GAAI,eACJ,MAAO,OACP,OAAQ,CACN,CACE,KAAM,SACN,KAAM,OACN,MAAO,KACP,aAAc,IACd,IAAK,EACL,IAAKC,EAAAA,gCACL,KAAM,CAAA,EAER,CACE,KAAM,SACN,KAAM,OACN,MAAO,KACP,aAAc,IACd,IAAK,EACL,IAAKC,EAAAA,gCACL,KAAM,CAAA,CACR,CAEJ,ECxKaC,EAAmC,CAC9C,CACE,GAAI,yBACJ,QAAS,CAAE,KAAM,kBAAmB,UAAW,OAAA,EAC/C,MAAO,MACP,KAAM,YACN,MAAO,OAAA,EAET,CACE,GAAI,mBACJ,QAAS,CAAE,KAAM,iBAAA,EACjB,MAAO,MACP,KAAM,aACN,MAAO,OAAA,EAET,CACE,GAAI,4BACJ,QAAS,CAAE,KAAM,qBAAsB,UAAW,OAAA,EAClD,MAAO,MACP,KAAM,eACN,MAAO,OAAA,EAET,CACE,GAAI,sBACJ,QAAS,CAAE,KAAM,oBAAA,EACjB,MAAO,MACP,KAAM,gBACN,MAAO,OAAA,EAET,CACE,GAAI,eACJ,QAAS,CAAE,KAAM,cAAA,EACjB,MAAO,OACP,KAAM,eACN,MAAO,OAAA,CAEX,EC3BaC,EAAgC,CAC3C,CACE,GAAI,OACJ,QAAS,CAAE,KAAM,aAAA,EACjB,MAAO,KACP,KAAM,OACN,MAAO,MAAA,EAET,CACE,GAAI,SACJ,QAAS,CAAE,KAAM,eAAA,EACjB,MAAO,KACP,KAAM,SACN,MAAO,MAAA,EAET,CACE,GAAI,YACJ,QAAS,CAAE,KAAM,kBAAA,EACjB,MAAO,MACP,KAAM,YACN,MAAO,MAAA,EAET,CACE,GAAI,SACJ,QAAS,CAAE,KAAM,eAAA,EACjB,MAAO,MACP,KAAM,gBACN,MAAO,MAAA,EAET,CACE,GAAI,cACJ,QAAS,CAAE,KAAM,mBAAA,EACjB,MAAO,OACP,KAAM,OACN,MAAO,MAAA,EAET,CACE,GAAI,cACJ,QAAS,CAAE,KAAM,oBAAA,EACjB,MAAO,KACP,KAAM,cACN,MAAO,MAAA,EAET,CACE,GAAI,YACJ,QAAS,CAAE,KAAM,kBAAA,EACjB,MAAO,KACP,KAAM,YACN,MAAO,MAAA,EAET,CACE,GAAI,cACJ,QAAS,CAAE,KAAM,cAAA,EACjB,MAAO,OACP,KAAM,oBACN,MAAO,MAAA,EAET,CACE,GAAI,QACJ,QAAS,CAAE,KAAM,eAAgB,MAAO,EAAA,EACxC,MAAO,OACP,KAAM,UACN,MAAO,QACP,gBAAiB,GACjB,aAAcT,CAAA,EAEhB,CACE,GAAI,mBACJ,QAAS,CAAE,KAAM,yBAA0B,MAAO,EAAA,EAClD,MAAO,MACP,KAAM,eACN,MAAO,QACP,gBAAiB,GACjB,aAAcC,CAAA,EAEhB,CACE,GAAI,YACJ,QAAS,CAAE,KAAM,kBAAmB,MAAO,EAAA,EAC3C,MAAO,KACP,KAAM,iBACN,MAAO,QACP,gBAAiB,GACjB,aAAcC,CAAA,EAEhB,CACE,GAAI,cACJ,QAAS,CAAE,KAAM,oBAAqB,MAAO,EAAA,EAC7C,MAAO,KACP,KAAM,OACN,MAAO,QACP,gBAAiB,GACjB,aAAcC,CAAA,EAEhB,CACE,GAAI,cACJ,QAAS,CAAE,KAAM,oBAAqB,MAAO,EAAA,EAC7C,MAAO,KACP,KAAM,YACN,MAAO,QACP,gBAAiB,GACjB,aAAcC,CAAA,EAEhB,CACE,GAAI,YACJ,QAAS,CAAE,KAAM,iBAAA,EACjB,MAAO,KACP,KAAM,UACN,MAAO,OAAA,EAET,CACE,GAAI,YACJ,QAAS,CAAE,KAAM,gBAAiB,MAAO,CAAA,EACzC,MAAO,OACP,KAAM,YACN,MAAO,OAAA,EAET,CACE,GAAI,YACJ,QAAS,CAAE,KAAM,gBAAiB,MAAO,CAAA,EACzC,MAAO,OACP,KAAM,YACN,MAAO,OAAA,EAET,CACE,GAAI,YACJ,QAAS,CAAE,KAAM,gBAAiB,MAAO,CAAA,EACzC,MAAO,OACP,KAAM,YACN,MAAO,OAAA,EAET,CACE,GAAI,YACJ,QAAS,CAAE,KAAM,gBAAiB,MAAO,CAAA,EACzC,MAAO,OACP,KAAM,YACN,MAAO,OAAA,EAET,CACE,GAAI,YACJ,QAAS,CAAE,KAAM,gBAAiB,MAAO,CAAA,EACzC,MAAO,OACP,KAAM,YACN,MAAO,OAAA,EAET,CACE,GAAI,YACJ,QAAS,CAAE,KAAM,gBAAiB,MAAO,CAAA,EACzC,MAAO,OACP,KAAM,YACN,MAAO,OAAA,EAET,CACE,GAAI,QACJ,QAAS,CAAE,KAAM,aAAA,EACjB,MAAO,KACP,KAAM,QACN,MAAO,OAAA,EAET,CACE,GAAI,UACJ,QAAS,CAAE,KAAM,eAAA,EACjB,MAAO,MACP,KAAM,QACN,MAAO,OAAA,EAET,CACE,GAAI,aACJ,QAAS,CAAE,KAAM,YAAA,EACjB,MAAO,MACP,KAAM,cACN,MAAO,OAAA,EAET,CACE,GAAI,eACJ,QAAS,CAAE,KAAM,cAAA,EACjB,MAAO,OACP,KAAM,eACN,MAAO,MAAA,EAET,CACE,GAAI,iBACJ,QAAS,CAAE,KAAM,gBAAA,EACjB,MAAO,OACP,KAAM,OACN,MAAO,MAAA,EAET,CACE,GAAI,YACJ,QAAS,CAAE,KAAM,WAAA,EACjB,MAAO,OACP,KAAM,YACN,MAAO,MAAA,EAET,CACE,GAAI,aACJ,QAAS,CAAE,KAAM,QAAS,MAAO,MAAA,EACjC,MAAO,MACP,KAAM,aACN,MAAO,OAAA,EAET,CACE,GAAI,eACJ,QAAS,CAAE,KAAM,QAAS,MAAO,QAAA,EACjC,MAAO,KACP,KAAM,eACN,MAAO,OAAA,EAET,CACE,GAAI,cACJ,QAAS,CAAE,KAAM,QAAS,MAAO,OAAA,EACjC,MAAO,MACP,KAAM,cACN,MAAO,OAAA,EAET,CACE,GAAI,gBACJ,QAAS,CAAE,KAAM,QAAS,MAAO,SAAA,EACjC,MAAO,OACP,KAAM,gBACN,MAAO,OAAA,EAET,CACE,GAAI,kBACJ,QAAS,CAAE,KAAM,iBAAA,EACjB,MAAO,OACP,KAAM,kBACN,MAAO,OAAA,EAET,CACE,GAAI,kBACJ,QAAS,CAAE,KAAM,iBAAA,EACjB,MAAO,OACP,KAAM,kBACN,MAAO,OAAA,EAET,CACE,GAAI,UACJ,QAAS,CAAE,KAAM,iBAAkB,KAAM,CAAE,GAAI,GAAI,MAAO,GAAI,MAAO,EAAA,CAAG,EACxE,MAAO,OACP,KAAM,UACN,MAAO,SACP,gBAAiB,EAAA,EAEnB,CACE,GAAI,eACJ,QAAS,CAAE,KAAM,iBAAA,EACjB,MAAO,OACP,KAAM,eACN,MAAO,OAAA,EAET,CACE,GAAI,eACJ,QAAS,CAAE,KAAM,iBAAA,EACjB,MAAO,OACP,KAAM,eACN,MAAO,OAAA,EAET,CACE,GAAI,QACJ,QAAS,CAAE,KAAM,eAAgB,KAAM,EAAG,KAAM,CAAA,EAChD,MAAO,KACP,KAAM,QACN,MAAO,QACP,gBAAiB,GACjB,aAAcC,CAAA,EAEhB,GAAGG,EACH,CACE,GAAI,gBACJ,QAAS,CAAE,KAAM,YAAA,EACjB,MAAO,OACP,KAAM,YACN,MAAO,QAAA,EAET,CACE,GAAI,OACJ,QAAS,CAAE,KAAM,cAAA,EACjB,MAAO,KACP,KAAM,OACN,MAAO,SAAA,EAET,CACE,GAAI,OACJ,QAAS,CAAE,KAAM,cAAA,EACjB,MAAO,KACP,KAAM,OACN,MAAO,SAAA,EAET,CACE,GAAI,QACJ,QAAS,CAAE,KAAM,eAAA,EACjB,MAAO,KACP,KAAM,UACN,MAAO,SAAA,EAET,CACE,GAAI,aACJ,QAAS,CAAE,KAAM,mBAAA,EACjB,MAAO,KACP,KAAM,WACN,MAAO,MAAA,CAEX,EC1TME,EAEA,CACJ,MAAQC,GAAYA,EAAQ,OAAS,QAAUA,EAAQ,MAAQ,OAC/D,gBAAkBA,GAAYA,EAAQ,OAAS,gBAAkBA,EAAQ,MAAQ,OACjF,wBAA0BA,GACxBA,EAAQ,OAAS,wBAA0BA,EAAQ,SAAW,MAElE,EAOaC,EACXD,GAAA,OACsC,OAAAE,EAAAH,EAAwBC,EAAQ,QAAhC,YAAAE,EAAA,KAAAH,EAAwCC,IAKnEG,EAA2B,CACtCH,EACAI,IACY,CACZ,MAAMC,EAAaJ,EAA0BD,CAAO,EAEpD,OAAOI,EAAM,UAAYJ,EAAQ,OAC3BK,IAAe,QAAaD,EAAM,QAAUC,EACpD,EAOaC,EAAyB,CAACC,EAAgBH,IACrDD,EAAyBI,EAAK,QAASH,CAAK,EAQvC,SAASI,EAA4BC,EAAaX,EAAmC,CAC1F,OAAOW,EAAW,IAAKF,IAAU,CAC/B,QAASA,EAAK,QAAQ,KACtB,OAAQ,GACR,SAAU,GACV,MAAON,EAA0BM,EAAK,OAAO,CAAA,EAC7C,CACJ,CC7CO,MAAMG,EAAsC,CACjD,YAAa,CACX,OACA,OACA,QACA,IACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,QACA,UACA,aACA,IACA,OACA,SACA,YACA,SACA,cACA,cACA,YACA,cACA,QACA,mBACA,YACA,cACA,cACA,IACA,eACA,iBACA,YACA,IACA,eACA,eACA,IACA,QACA,IACA,aACA,eACA,cACA,gBACA,kBACA,kBACA,IACA,YAAA,CAEJ,EAEMC,EAAwBC,GAC5B,OAAOA,GAAQ,UAAY,MAAM,QAAQA,EAAI,QAAQ,EAGjDC,EAAiBJ,GAA2B,IAAI,IACpDA,EAAW,IAAKF,GAAS,CAACA,EAAK,GAAIA,CAAI,CAAC,CAC1C,EAEMO,EAA0B,CAC9BF,EACAG,IAEI,OAAOH,GAAQ,SAAiBA,IAAQ,KAAOG,EAAY,IAAIH,CAAG,EAE/DG,EAAY,IAAIH,EAAI,GAAG,GAAKA,EAAI,SAAS,MAAOI,GAAYD,EAAY,IAAIC,CAAO,CAAC,EAGvFC,EAA8B,CAClCC,EACAC,IACiB,CACjB,MAAMJ,EAAc,IAAI,KAAII,GAAA,YAAAA,EAAe,cAAe,CAAA,CAAE,EAKtDC,EAAeF,EAAS,OAAQN,GAAQ,CAACE,EAAwBF,EAAKG,CAAW,CAAC,EAExF,GAAI,EAACI,GAAA,MAAAA,EAAe,YAAY,OAAOC,EAEvC,MAAMC,EAAc,KAAK,IAAI,EAAG,KAAK,IAAIF,EAAc,WAAW,MAAOC,EAAa,MAAM,CAAC,EAE7F,MAAO,CACL,GAAGA,EAAa,MAAM,EAAGC,CAAW,EACpC,GAAGF,EAAc,WAAW,KAC5B,GAAGC,EAAa,MAAMC,CAAW,CAAA,CAErC,EAEMC,EAAoB,CACxBV,EACAW,EACAR,EACAS,IAC0B,CAC1B,GAAIZ,IAAQ,IACV,MAAO,CAAC,CAAE,KAAM,YAAa,IAAK,aAAaY,CAAc,GAAI,EAGnE,GAAI,OAAOZ,GAAQ,SAAU,CAC3B,MAAML,EAAOgB,EAAQ,IAAIX,CAAG,EAG5B,MAAI,CAACL,GAASA,EAAK,iBAAmB,CAACA,EAAK,cAAiBQ,EAAY,IAAIR,EAAK,EAAE,EAC3E,CAAA,EAGF,CAAC,CAAE,KAAM,SAAU,KAAAA,EAAM,CAClC,CAEA,GAAII,EAAqBC,CAAG,EAAG,CAC7B,MAAMa,EAAQb,EAAI,SACf,OAAQI,GAAY,CAACD,EAAY,IAAIC,CAAO,CAAC,EAC7C,IAAKA,GAAYO,EAAQ,IAAIP,CAAO,CAAC,EACrC,OAAQT,GACPA,IAAS,SAAc,CAACA,EAAK,iBAAmBA,EAAK,eAAiB,OACvE,EAEH,OAAOkB,EAAM,OAAS,EAAI,CAAC,CACzB,KAAM,QACN,IAAKb,EAAI,IACT,MAAOA,EAAI,MACX,KAAMA,EAAI,KACV,MAAAa,CAAA,CACD,EAAI,CAAA,CACP,CAEA,MAAO,CAAA,CACT,EAEMC,EAAgC,CACpCnB,EACAkB,IACG,CACH,GAAIlB,EAAK,OAAS,YAAa,MAAO,GAEtC,MAAMoB,EAAeF,EAAMA,EAAM,OAAS,CAAC,EAE3C,OAAOE,IAAiB,QAAaA,EAAa,OAAS,WAC7D,EAEMC,EAAiCH,GAAiC,OACtE,OAAOvB,EAAAuB,EAAM,GAAG,EAAE,IAAX,YAAAvB,EAAc,QAAS,aAC5BuB,EAAM,IAAA,EAGR,OAAOA,CACT,EAQaI,EAAqB,CAChCV,EAA+BT,EAC/BD,EAAyBX,IACC,CAC1B,MAAMyB,EAAUV,EAAcJ,CAAU,EAClCS,EAAWC,EAAc,aAAeT,EAAqB,aAAe,CAAA,EAC5EoB,EAAcb,EAA4BC,EAAUC,CAAa,EACjEJ,EAAc,IAAI,IAAII,EAAc,aAAe,CAAA,CAAE,EAC3D,IAAIK,EAAiB,EAErB,MAAMO,EAAgBD,EAAY,OAA8B,CAACL,EAAOb,IAAQ,CAC9E,MAAMoB,EAAYV,EAAkBV,EAAKW,EAASR,EAAaS,CAAc,EAE7E,OAAIZ,IAAQ,MAAKY,GAAkB,GAEnCQ,EAAU,QAASzB,GAAS,CACtBmB,EAA8BnB,EAAMkB,CAAK,GAC3CA,EAAM,KAAKlB,CAAI,CAEnB,CAAC,EAEMkB,CACT,EAAG,CAAA,CAAE,EAEL,OAAOG,EAA8BG,CAAa,CACpD"}
1
+ {"version":3,"file":"native-spec.cjs","sources":["../../native-spec/src/menuSchema/payloadPanels.ts","../../native-spec/src/menuSchema/tableHeaderMenuItems.ts","../../native-spec/src/menuSchema/defaultMenuSchema.ts","../../native-spec/src/commandState/index.ts","../../native-spec/src/toolbarConfig/index.ts"],"sourcesContent":["import {\n BRIDGERTE_TABLE_INSERT_MAX_COLS,\n BRIDGERTE_TABLE_INSERT_MAX_ROWS,\n type PayloadPanelSchema\n} from '@bridgerte/core';\n\n/**\n * 代码块语言列表给 DOM 代码块顶部控制栏和原生侧自绘使用。\n *\n * 空字符串表示纯文本;默认候选按 Shiki 高频技术文档语言维护。业务如需裁剪语言、\n * 调整顺序或接入更多 Shiki 语言,传入自己的 `codeBlockLanguagePanel` 即可。\n */\nexport const codeBlockLanguagePanel: PayloadPanelSchema = {\n id: 'code-block-language',\n title: '代码语言',\n fields: [\n {\n type: 'select',\n name: 'language',\n label: '语言',\n defaultValue: '',\n options: [\n { label: '纯文本', value: '' },\n { label: 'Bash', value: 'shellscript' },\n { label: 'C', value: 'c' },\n { label: 'C++', value: 'cpp' },\n { label: 'C#', value: 'csharp' },\n { label: 'CSS', value: 'css' },\n { label: 'Dart', value: 'dart' },\n { label: 'Dockerfile', value: 'docker' },\n { label: 'Go', value: 'go' },\n { label: 'HTML', value: 'html' },\n { label: 'Java', value: 'java' },\n { label: 'JavaScript', value: 'javascript' },\n { label: 'JSON', value: 'json' },\n { label: 'Kotlin', value: 'kotlin' },\n { label: 'Markdown', value: 'markdown' },\n { label: 'PHP', value: 'php' },\n { label: 'Python', value: 'python' },\n { label: 'Rust', value: 'rust' },\n { label: 'SQL', value: 'sql' },\n { label: 'Swift', value: 'swift' },\n { label: 'TOML', value: 'toml' },\n { label: 'TSX', value: 'tsx' },\n { label: 'TypeScript', value: 'typescript' },\n { label: 'Vue', value: 'vue' },\n { label: 'XML', value: 'xml' },\n { label: 'YAML', value: 'yaml' }\n ]\n }\n ]\n};\n\n/**\n * 兼容旧导出名。\n *\n * 代码块语言现在由代码块 header 触发,不再代表 toolbar 菜单 payload。\n */\nexport const codeBlockLanguagePayloadPanel = codeBlockLanguagePanel;\n\n/**\n * 颜色菜单使用 color 字段而不是预设色列表。\n *\n * DOM 默认面板可以渲染内置颜色控件,RN/Flutter/WebView 或业务自绘层仍读取同一份 schema。\n */\nexport const textColorPanel: PayloadPanelSchema = {\n id: 'text-color',\n title: '文字颜色',\n fields: [\n {\n type: 'color',\n name: 'value',\n label: '颜色'\n }\n ]\n};\n\nexport const backgroundColorPanel: PayloadPanelSchema = {\n id: 'background-color',\n title: '背景色',\n fields: [\n {\n type: 'color',\n name: 'value',\n label: '背景'\n }\n ]\n};\n\nexport const fontSizePanel: PayloadPanelSchema = {\n id: 'font-size',\n title: '字号',\n fields: [\n {\n type: 'select',\n name: 'value',\n label: '字号',\n defaultValue: '16px',\n options: [\n { label: '小号 14px', value: '14px' },\n { label: '正文 16px', value: '16px' },\n { label: '强调 18px', value: '18px' },\n { label: '标题 20px', value: '20px' },\n { label: '大标题 24px', value: '24px' }\n ]\n }\n ]\n};\n\nexport const fontFamilyPanel: PayloadPanelSchema = {\n id: 'font-family',\n title: '字体',\n fields: [\n {\n type: 'select',\n name: 'value',\n label: '字体',\n defaultValue: '',\n options: [\n { label: '跟随页面', value: '' },\n { label: '无衬线', value: 'sans-serif' },\n { label: '衬线', value: 'serif' },\n { label: '等宽', value: 'monospace' }\n ]\n }\n ]\n};\n\nexport const lineHeightPanel: PayloadPanelSchema = {\n id: 'line-height',\n title: '行高',\n fields: [\n {\n type: 'select',\n name: 'value',\n label: '行高',\n defaultValue: '1.7',\n options: [\n { label: '紧凑 1.4', value: '1.4' },\n { label: '常规 1.7', value: '1.7' },\n { label: '舒展 2', value: '2' }\n ]\n }\n ]\n};\n\n/**\n * 表格插入使用 number 字段收集行列。\n *\n * DOM 默认面板、H5 自绘和 RN/Flutter 原生表单都读取同一份 schema;真正的表格进阶操作\n * 仍放后续表格菜单阶段继续扩展。\n */\nexport const tableInsertPanel: PayloadPanelSchema = {\n id: 'table-insert',\n title: '插入表格',\n fields: [\n {\n type: 'number',\n name: 'rows',\n label: '行数',\n defaultValue: '3',\n min: 1,\n max: BRIDGERTE_TABLE_INSERT_MAX_ROWS,\n step: 1\n },\n {\n type: 'number',\n name: 'cols',\n label: '列数',\n defaultValue: '3',\n min: 1,\n max: BRIDGERTE_TABLE_INSERT_MAX_COLS,\n step: 1\n }\n ]\n};\n","import type { MenuItem } from './type';\n\n/*\n * 表格 header 和后续表格浮动菜单共用这组操作入口。\n * 这些菜单默认不进入 toolbar 排列,但仍放在 native-spec,保证 DOM/RN/Flutter 自绘读取同一份\n * command/label/icon 协议。\n */\nexport const tableHeaderMenuItems: MenuItem[] = [\n {\n id: 'table-insert-row-after',\n command: { type: 'table.insertRow', direction: 'after' },\n label: '插入行',\n icon: 'rows-plus',\n group: 'table'\n },\n {\n id: 'table-delete-row',\n command: { type: 'table.deleteRow' },\n label: '删除行',\n icon: 'rows-minus',\n group: 'table'\n },\n {\n id: 'table-insert-column-after',\n command: { type: 'table.insertColumn', direction: 'after' },\n label: '插入列',\n icon: 'columns-plus',\n group: 'table'\n },\n {\n id: 'table-delete-column',\n command: { type: 'table.deleteColumn' },\n label: '删除列',\n icon: 'columns-minus',\n group: 'table'\n },\n {\n id: 'table-delete',\n command: { type: 'table.delete' },\n label: '删除表格',\n icon: 'table-delete',\n group: 'table'\n }\n];\n","import type { MenuItem } from './type';\r\nimport {\r\n backgroundColorPanel,\r\n fontFamilyPanel,\r\n fontSizePanel,\r\n lineHeightPanel,\r\n tableInsertPanel,\r\n textColorPanel\r\n} from './payloadPanels';\r\nimport { tableHeaderMenuItems } from './tableHeaderMenuItems';\r\n\r\n/**\r\n * 默认菜单 schema 覆盖 wangEditor 常用入口。\r\n *\r\n * RN/Flutter 可以按 group 渲染分组,也可以基于 id 做业务侧排序或裁剪。\r\n */\r\nexport const defaultMenuSchema: MenuItem[] = [\r\n {\r\n id: 'bold',\r\n command: { type: 'format.bold' },\r\n label: '加粗',\r\n icon: 'bold',\r\n group: 'text'\r\n },\r\n {\r\n id: 'italic',\r\n command: { type: 'format.italic' },\r\n label: '斜体',\r\n icon: 'italic',\r\n group: 'text'\r\n },\r\n {\r\n id: 'underline',\r\n command: { type: 'format.underline' },\r\n label: '下划线',\r\n icon: 'underline',\r\n group: 'text'\r\n },\r\n {\r\n id: 'strike',\r\n command: { type: 'format.strike' },\r\n label: '删除线',\r\n icon: 'strikethrough',\r\n group: 'text'\r\n },\r\n {\r\n id: 'inline-code',\r\n command: { type: 'format.inlineCode' },\r\n label: '行内代码',\r\n icon: 'code',\r\n group: 'text'\r\n },\r\n {\r\n id: 'superscript',\r\n command: { type: 'format.superscript' },\r\n label: '上标',\r\n icon: 'superscript',\r\n group: 'text'\r\n },\r\n {\r\n id: 'subscript',\r\n command: { type: 'format.subscript' },\r\n label: '下标',\r\n icon: 'subscript',\r\n group: 'text'\r\n },\r\n {\r\n id: 'clear-style',\r\n command: { type: 'format.clear' },\r\n label: '清除样式',\r\n icon: 'remove-formatting',\r\n group: 'text'\r\n },\r\n {\r\n id: 'color',\r\n command: { type: 'format.color', value: '' },\r\n label: '文字颜色',\r\n icon: 'palette',\r\n group: 'style',\r\n requiresPayload: true,\r\n payloadPanel: textColorPanel\r\n },\r\n {\r\n id: 'background-color',\r\n command: { type: 'format.backgroundColor', value: '' },\r\n label: '背景色',\r\n icon: 'paint-bucket',\r\n group: 'style',\r\n requiresPayload: true,\r\n payloadPanel: backgroundColorPanel\r\n },\r\n {\r\n id: 'font-size',\r\n command: { type: 'format.fontSize', value: '' },\r\n label: '字号',\r\n icon: 'case-sensitive',\r\n group: 'style',\r\n requiresPayload: true,\r\n payloadPanel: fontSizePanel\r\n },\r\n {\r\n id: 'font-family',\r\n command: { type: 'format.fontFamily', value: '' },\r\n label: '字体',\r\n icon: 'type',\r\n group: 'style',\r\n requiresPayload: true,\r\n payloadPanel: fontFamilyPanel\r\n },\r\n {\r\n id: 'line-height',\r\n command: { type: 'format.lineHeight', value: '' },\r\n label: '行高',\r\n icon: 'wrap-text',\r\n group: 'style',\r\n requiresPayload: true,\r\n payloadPanel: lineHeightPanel\r\n },\r\n {\r\n id: 'paragraph',\r\n command: { type: 'block.paragraph' },\r\n label: '正文',\r\n icon: 'pilcrow',\r\n group: 'block'\r\n },\r\n {\r\n id: 'heading-1',\r\n command: { type: 'block.heading', level: 1 },\r\n label: '一级标题',\r\n icon: 'heading-1',\r\n group: 'block'\r\n },\r\n {\r\n id: 'heading-2',\r\n command: { type: 'block.heading', level: 2 },\r\n label: '二级标题',\r\n icon: 'heading-2',\r\n group: 'block'\r\n },\r\n {\r\n id: 'heading-3',\r\n command: { type: 'block.heading', level: 3 },\r\n label: '三级标题',\r\n icon: 'heading-3',\r\n group: 'block'\r\n },\r\n {\r\n id: 'heading-4',\r\n command: { type: 'block.heading', level: 4 },\r\n label: '四级标题',\r\n icon: 'heading-4',\r\n group: 'block'\r\n },\r\n {\r\n id: 'heading-5',\r\n command: { type: 'block.heading', level: 5 },\r\n label: '五级标题',\r\n icon: 'heading-5',\r\n group: 'block'\r\n },\r\n {\r\n id: 'heading-6',\r\n command: { type: 'block.heading', level: 6 },\r\n label: '六级标题',\r\n icon: 'heading-6',\r\n group: 'block'\r\n },\r\n {\r\n id: 'quote',\r\n command: { type: 'block.quote' },\r\n label: '引用',\r\n icon: 'quote',\r\n group: 'block'\r\n },\r\n {\r\n id: 'divider',\r\n command: { type: 'block.divider' },\r\n label: '分割线',\r\n icon: 'minus',\r\n group: 'block'\r\n },\r\n {\r\n id: 'code-block',\r\n command: { type: 'block.code' },\r\n label: '代码块',\r\n icon: 'square-code',\r\n group: 'block'\r\n },\r\n {\r\n id: 'ordered-list',\r\n command: { type: 'list.ordered' },\r\n label: '有序列表',\r\n icon: 'list-ordered',\r\n group: 'list'\r\n },\r\n {\r\n id: 'unordered-list',\r\n command: { type: 'list.unordered' },\r\n label: '无序列表',\r\n icon: 'list',\r\n group: 'list'\r\n },\r\n {\r\n id: 'todo-list',\r\n command: { type: 'list.todo' },\r\n label: '待办列表',\r\n icon: 'list-todo',\r\n group: 'list'\r\n },\r\n {\r\n id: 'align-left',\r\n command: { type: 'align', value: 'left' },\r\n label: '左对齐',\r\n icon: 'align-left',\r\n group: 'align'\r\n },\r\n {\r\n id: 'align-center',\r\n command: { type: 'align', value: 'center' },\r\n label: '居中',\r\n icon: 'align-center',\r\n group: 'align'\r\n },\r\n {\r\n id: 'align-right',\r\n command: { type: 'align', value: 'right' },\r\n label: '右对齐',\r\n icon: 'align-right',\r\n group: 'align'\r\n },\r\n {\r\n id: 'align-justify',\r\n command: { type: 'align', value: 'justify' },\r\n label: '两端对齐',\r\n icon: 'align-justify',\r\n group: 'align'\r\n },\r\n {\r\n id: 'indent-increase',\r\n command: { type: 'indent.increase' },\r\n label: '增加缩进',\r\n icon: 'indent-increase',\r\n group: 'align'\r\n },\r\n {\r\n id: 'indent-decrease',\r\n command: { type: 'indent.decrease' },\r\n label: '减少缩进',\r\n icon: 'indent-decrease',\r\n group: 'align'\r\n },\r\n {\r\n id: 'mention',\r\n command: { type: 'mention.insert', item: { id: '', label: '', value: '' } },\r\n label: '@ 提及',\r\n icon: 'at-sign',\r\n group: 'insert',\r\n requiresPayload: true\r\n },\r\n {\r\n id: 'upload-image',\r\n command: { type: 'media.pickImage' },\r\n label: '上传图片',\r\n icon: 'upload-image',\r\n group: 'media'\r\n },\r\n {\r\n id: 'upload-video',\r\n command: { type: 'media.pickVideo' },\r\n label: '上传视频',\r\n icon: 'upload-video',\r\n group: 'media'\r\n },\r\n {\r\n id: 'table',\r\n command: { type: 'table.insert', rows: 3, cols: 3 },\r\n label: '表格',\r\n icon: 'table',\r\n group: 'table',\r\n requiresPayload: true,\r\n payloadPanel: tableInsertPanel\r\n },\r\n ...tableHeaderMenuItems,\r\n {\r\n id: 'slash-command',\r\n command: { type: 'slash.open' },\r\n label: '/ 命令',\r\n icon: 'list-plus',\r\n group: 'insert'\r\n },\r\n {\r\n id: 'undo',\r\n command: { type: 'history.undo' },\r\n label: '撤销',\r\n icon: 'undo',\r\n group: 'history'\r\n },\r\n {\r\n id: 'redo',\r\n command: { type: 'history.redo' },\r\n label: '重做',\r\n icon: 'redo',\r\n group: 'history'\r\n },\r\n {\r\n id: 'clear',\r\n command: { type: 'content.clear' },\r\n label: '清空',\r\n icon: 'trash-2',\r\n group: 'history'\r\n },\r\n {\r\n id: 'fullscreen',\r\n command: { type: 'fullscreen.toggle' },\r\n label: '全屏',\r\n icon: 'maximize',\r\n group: 'view'\r\n }\r\n];\r\n","import type { CommandState, EditorCommand } from '@bridgerte/core';\r\nimport type { MenuItem } from '../menuSchema';\r\nimport { defaultMenuSchema } from '../menuSchema';\r\n\r\nconst commandStateValueByType: Partial<Record<EditorCommand['type'], (command: EditorCommand) => (\r\n CommandState['value'] | undefined\r\n)>> = {\r\n align: (command) => command.type === 'align' ? command.value : undefined,\r\n 'block.heading': (command) => command.type === 'block.heading' ? command.level : undefined,\r\n 'block.setCodeLanguage': (command) => (\r\n command.type === 'block.setCodeLanguage' ? command.language : undefined\r\n )\r\n};\r\n\r\n/**\r\n * 取出菜单命令用于匹配 `CommandState.value` 的稳定值。\r\n *\r\n * 同类命令存在多个菜单项时使用这个值区分,比如对齐方式和标题级别。\r\n */\r\nexport const getCommandStateMatchValue = (\r\n command: EditorCommand\r\n): CommandState['value'] | undefined => commandStateValueByType[command.type]?.(command);\r\n\r\n/**\r\n * 判断某条命令状态是否对应一个完整命令 payload。\r\n */\r\nexport const isCommandStateForCommand = (\r\n command: EditorCommand,\r\n state: CommandState\r\n): boolean => {\r\n const matchValue = getCommandStateMatchValue(command);\r\n\r\n return state.command === command.type\r\n && (matchValue === undefined || state.value === matchValue);\r\n};\r\n\r\n/**\r\n * 判断某条命令状态是否对应一个菜单项。\r\n *\r\n * 原生 toolbar 可以用它把 `CommandState[]` 映射回具体按钮 active/disabled 状态。\r\n */\r\nexport const isMenuItemCommandState = (item: MenuItem, state: CommandState): boolean => (\r\n isCommandStateForCommand(item.command, state)\r\n);\r\n\r\n/**\r\n * 为给定菜单生成默认禁用状态。\r\n *\r\n * 编辑器未 ready 或无选区时,原生 toolbar 可以先使用这组状态兜底。\r\n */\r\nexport function createDisabledCommandStates(menuSchema = defaultMenuSchema): CommandState[] {\r\n return menuSchema.map((item) => ({\r\n command: item.command.type,\r\n active: false,\r\n disabled: true,\r\n value: getCommandStateMatchValue(item.command)\r\n }));\r\n}\r\n","import type { ToolbarConfig, ToolbarGroupConfig, ToolbarKey } from '@bridgerte/core';\r\nimport type { MenuItem } from '../menuSchema';\r\nimport { defaultMenuSchema } from '../menuSchema';\r\nimport type { ResolvedToolbarItem } from './type';\r\n\r\nexport type * from './type';\r\n\r\n/**\r\n * 默认 DOM toolbar 配置。\r\n *\r\n * 这里只选择已实现或带参数面板的基础按钮;完整菜单全集仍由 `defaultMenuSchema` 维护。\r\n */\r\nexport const defaultToolbarConfig: ToolbarConfig = {\r\n toolbarKeys: [\r\n 'undo',\r\n 'redo',\r\n 'clear',\r\n '|',\r\n 'paragraph',\r\n 'heading-1',\r\n 'heading-2',\r\n 'heading-3',\r\n 'heading-4',\r\n 'heading-5',\r\n 'heading-6',\r\n 'quote',\r\n 'divider',\r\n 'code-block',\r\n '|',\r\n 'bold',\r\n 'italic',\r\n 'underline',\r\n 'strike',\r\n 'inline-code',\r\n 'superscript',\r\n 'subscript',\r\n 'clear-style',\r\n 'color',\r\n 'background-color',\r\n 'font-size',\r\n 'font-family',\r\n 'line-height',\r\n '|',\r\n 'ordered-list',\n 'unordered-list',\n 'todo-list',\n '|',\n 'upload-image',\n 'upload-video',\n '|',\n 'table',\n '|',\n 'align-left',\r\n 'align-center',\r\n 'align-right',\r\n 'align-justify',\r\n 'indent-increase',\r\n 'indent-decrease',\r\n '|',\r\n 'fullscreen'\r\n ]\r\n};\r\n\r\nconst isToolbarGroupConfig = (key: ToolbarKey): key is ToolbarGroupConfig => (\r\n typeof key === 'object' && Array.isArray(key.menuKeys)\r\n);\r\n\r\nconst createMenuMap = (menuSchema: MenuItem[]) => new Map(\r\n menuSchema.map((item) => [item.id, item])\r\n);\r\n\r\nconst shouldExcludeToolbarKey = (\r\n key: ToolbarKey,\r\n excludeKeys: Set<string>\r\n) => {\r\n if (typeof key === 'string') return key !== '|' && excludeKeys.has(key);\r\n\r\n return excludeKeys.has(key.key) || key.menuKeys.every((menuKey) => excludeKeys.has(menuKey));\r\n};\r\n\r\nconst applyToolbarConfigOverrides = (\r\n baseKeys: ToolbarKey[],\r\n toolbarConfig?: ToolbarConfig\r\n): ToolbarKey[] => {\r\n const excludeKeys = new Set(toolbarConfig?.excludeKeys ?? []);\r\n /*\r\n * 先排除再插入,等价于“在用户最终想保留的默认菜单里加东西”。\r\n * insert index 做夹取,避免业务传入负数或超长下标时破坏默认 toolbar。\r\n */\r\n const filteredKeys = baseKeys.filter((key) => !shouldExcludeToolbarKey(key, excludeKeys));\r\n\r\n if (!toolbarConfig?.insertKeys) return filteredKeys;\r\n\r\n const insertIndex = Math.max(0, Math.min(toolbarConfig.insertKeys.index, filteredKeys.length));\r\n\r\n return [\r\n ...filteredKeys.slice(0, insertIndex),\r\n ...toolbarConfig.insertKeys.keys,\r\n ...filteredKeys.slice(insertIndex)\r\n ];\r\n};\r\n\r\nconst resolveToolbarKey = (\r\n key: ToolbarKey,\r\n menuMap: Map<string, MenuItem>,\r\n excludeKeys: Set<string>,\r\n separatorIndex: number\r\n): ResolvedToolbarItem[] => {\r\n if (key === '|') {\r\n return [{ type: 'separator', key: `separator-${separatorIndex}` }];\r\n }\r\n\r\n if (typeof key === 'string') {\r\n const item = menuMap.get(key);\r\n\r\n // 未知 key 直接忽略;需要 payload 但没有 panel 的菜单暂不渲染,避免按钮点击后无法生成合法命令。\r\n if (!item || (item.requiresPayload && !item.payloadPanel) || excludeKeys.has(item.id)) {\r\n return [];\r\n }\r\n\r\n return [{ type: 'button', item }];\r\n }\r\n\r\n if (isToolbarGroupConfig(key)) {\r\n const items = key.menuKeys\r\n .filter((menuKey) => !excludeKeys.has(menuKey))\r\n .map((menuKey) => menuMap.get(menuKey))\r\n .filter((item): item is MenuItem => (\r\n item !== undefined && (!item.requiresPayload || item.payloadPanel !== undefined)\r\n ));\r\n\r\n return items.length > 0 ? [{\r\n type: 'group',\r\n key: key.key,\r\n title: key.title,\r\n icon: key.icon,\r\n items\r\n }] : [];\r\n }\r\n\r\n return [];\r\n};\r\n\r\nconst shouldKeepResolvedToolbarItem = (\r\n item: ResolvedToolbarItem,\r\n items: ResolvedToolbarItem[]\r\n) => {\r\n if (item.type !== 'separator') return true;\r\n\r\n const previousItem = items[items.length - 1];\r\n\r\n return previousItem !== undefined && previousItem.type !== 'separator';\r\n};\r\n\r\nconst trimTrailingToolbarSeparators = (items: ResolvedToolbarItem[]) => {\r\n while (items.at(-1)?.type === 'separator') {\r\n items.pop();\r\n }\r\n\r\n return items;\r\n};\r\n\r\n/**\r\n * 把 wangEditor 风格的 JSON 配置解析成 DOM/RN/Flutter 都能消费的菜单结构。\r\n *\r\n * 未知 key 和缺少 payloadPanel 的 requiresPayload 菜单会被忽略,避免默认 toolbar 渲染无法处理的按钮。\r\n * 分割线会自动去掉开头、结尾和连续项,避免被跳过的菜单留下空分隔。\r\n */\r\nexport const resolveToolbarMenu = (\r\n toolbarConfig: ToolbarConfig = defaultToolbarConfig,\r\n menuSchema: MenuItem[] = defaultMenuSchema\r\n): ResolvedToolbarItem[] => {\r\n const menuMap = createMenuMap(menuSchema);\r\n const baseKeys = toolbarConfig.toolbarKeys ?? defaultToolbarConfig.toolbarKeys ?? [];\r\n const toolbarKeys = applyToolbarConfigOverrides(baseKeys, toolbarConfig);\r\n const excludeKeys = new Set(toolbarConfig.excludeKeys ?? []);\r\n let separatorIndex = 0;\r\n\r\n const resolvedItems = toolbarKeys.reduce<ResolvedToolbarItem[]>((items, key) => {\r\n const nextItems = resolveToolbarKey(key, menuMap, excludeKeys, separatorIndex);\r\n\r\n if (key === '|') separatorIndex += 1;\r\n\r\n nextItems.forEach((item) => {\r\n if (shouldKeepResolvedToolbarItem(item, items)) {\r\n items.push(item);\r\n }\r\n });\r\n\r\n return items;\r\n }, []);\r\n\r\n return trimTrailingToolbarSeparators(resolvedItems);\r\n};\r\n"],"names":["codeBlockLanguagePanel","codeBlockLanguagePayloadPanel","textColorPanel","backgroundColorPanel","fontSizePanel","fontFamilyPanel","lineHeightPanel","tableInsertPanel","BRIDGERTE_TABLE_INSERT_MAX_ROWS","BRIDGERTE_TABLE_INSERT_MAX_COLS","tableHeaderMenuItems","defaultMenuSchema","commandStateValueByType","command","getCommandStateMatchValue","_a","isCommandStateForCommand","state","matchValue","isMenuItemCommandState","item","createDisabledCommandStates","menuSchema","defaultToolbarConfig","isToolbarGroupConfig","key","createMenuMap","shouldExcludeToolbarKey","excludeKeys","menuKey","applyToolbarConfigOverrides","baseKeys","toolbarConfig","filteredKeys","insertIndex","resolveToolbarKey","menuMap","separatorIndex","items","shouldKeepResolvedToolbarItem","previousItem","trimTrailingToolbarSeparators","resolveToolbarMenu","toolbarKeys","resolvedItems","nextItems"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"native-spec.js","sources":["../../native-spec/src/menuSchema/payloadPanels.ts","../../native-spec/src/menuSchema/tableHeaderMenuItems.ts","../../native-spec/src/menuSchema/defaultMenuSchema.ts","../../native-spec/src/commandState/index.ts","../../native-spec/src/toolbarConfig/index.ts"],"sourcesContent":["import {\n BRIDGERTE_TABLE_INSERT_MAX_COLS,\n BRIDGERTE_TABLE_INSERT_MAX_ROWS,\n type PayloadPanelSchema\n} from '@bridgerte/core';\n\n/**\n * 代码块语言列表给 DOM 代码块顶部控制栏和原生侧自绘使用。\n *\n * 空字符串表示纯文本;默认候选按 Shiki 高频技术文档语言维护。业务如需裁剪语言、\n * 调整顺序或接入更多 Shiki 语言,传入自己的 `codeBlockLanguagePanel` 即可。\n */\nexport const codeBlockLanguagePanel: PayloadPanelSchema = {\n id: 'code-block-language',\n title: '代码语言',\n fields: [\n {\n type: 'select',\n name: 'language',\n label: '语言',\n defaultValue: '',\n options: [\n { label: '纯文本', value: '' },\n { label: 'Bash', value: 'shellscript' },\n { label: 'C', value: 'c' },\n { label: 'C++', value: 'cpp' },\n { label: 'C#', value: 'csharp' },\n { label: 'CSS', value: 'css' },\n { label: 'Dart', value: 'dart' },\n { label: 'Dockerfile', value: 'docker' },\n { label: 'Go', value: 'go' },\n { label: 'HTML', value: 'html' },\n { label: 'Java', value: 'java' },\n { label: 'JavaScript', value: 'javascript' },\n { label: 'JSON', value: 'json' },\n { label: 'Kotlin', value: 'kotlin' },\n { label: 'Markdown', value: 'markdown' },\n { label: 'PHP', value: 'php' },\n { label: 'Python', value: 'python' },\n { label: 'Rust', value: 'rust' },\n { label: 'SQL', value: 'sql' },\n { label: 'Swift', value: 'swift' },\n { label: 'TOML', value: 'toml' },\n { label: 'TSX', value: 'tsx' },\n { label: 'TypeScript', value: 'typescript' },\n { label: 'Vue', value: 'vue' },\n { label: 'XML', value: 'xml' },\n { label: 'YAML', value: 'yaml' }\n ]\n }\n ]\n};\n\n/**\n * 兼容旧导出名。\n *\n * 代码块语言现在由代码块 header 触发,不再代表 toolbar 菜单 payload。\n */\nexport const codeBlockLanguagePayloadPanel = codeBlockLanguagePanel;\n\n/**\n * 颜色菜单使用 color 字段而不是预设色列表。\n *\n * DOM 默认面板可以渲染内置颜色控件,RN/Flutter/WebView 或业务自绘层仍读取同一份 schema。\n */\nexport const textColorPanel: PayloadPanelSchema = {\n id: 'text-color',\n title: '文字颜色',\n fields: [\n {\n type: 'color',\n name: 'value',\n label: '颜色'\n }\n ]\n};\n\nexport const backgroundColorPanel: PayloadPanelSchema = {\n id: 'background-color',\n title: '背景色',\n fields: [\n {\n type: 'color',\n name: 'value',\n label: '背景'\n }\n ]\n};\n\nexport const fontSizePanel: PayloadPanelSchema = {\n id: 'font-size',\n title: '字号',\n fields: [\n {\n type: 'select',\n name: 'value',\n label: '字号',\n defaultValue: '16px',\n options: [\n { label: '小号 14px', value: '14px' },\n { label: '正文 16px', value: '16px' },\n { label: '强调 18px', value: '18px' },\n { label: '标题 20px', value: '20px' },\n { label: '大标题 24px', value: '24px' }\n ]\n }\n ]\n};\n\nexport const fontFamilyPanel: PayloadPanelSchema = {\n id: 'font-family',\n title: '字体',\n fields: [\n {\n type: 'select',\n name: 'value',\n label: '字体',\n defaultValue: '',\n options: [\n { label: '跟随页面', value: '' },\n { label: '无衬线', value: 'sans-serif' },\n { label: '衬线', value: 'serif' },\n { label: '等宽', value: 'monospace' }\n ]\n }\n ]\n};\n\nexport const lineHeightPanel: PayloadPanelSchema = {\n id: 'line-height',\n title: '行高',\n fields: [\n {\n type: 'select',\n name: 'value',\n label: '行高',\n defaultValue: '1.7',\n options: [\n { label: '紧凑 1.4', value: '1.4' },\n { label: '常规 1.7', value: '1.7' },\n { label: '舒展 2', value: '2' }\n ]\n }\n ]\n};\n\n/**\n * 表格插入使用 number 字段收集行列。\n *\n * DOM 默认面板、H5 自绘和 RN/Flutter 原生表单都读取同一份 schema;真正的表格进阶操作\n * 仍放后续表格菜单阶段继续扩展。\n */\nexport const tableInsertPanel: PayloadPanelSchema = {\n id: 'table-insert',\n title: '插入表格',\n fields: [\n {\n type: 'number',\n name: 'rows',\n label: '行数',\n defaultValue: '3',\n min: 1,\n max: BRIDGERTE_TABLE_INSERT_MAX_ROWS,\n step: 1\n },\n {\n type: 'number',\n name: 'cols',\n label: '列数',\n defaultValue: '3',\n min: 1,\n max: BRIDGERTE_TABLE_INSERT_MAX_COLS,\n step: 1\n }\n ]\n};\n","import type { MenuItem } from './type';\n\n/*\n * 表格 header 和后续表格浮动菜单共用这组操作入口。\n * 这些菜单默认不进入 toolbar 排列,但仍放在 native-spec,保证 DOM/RN/Flutter 自绘读取同一份\n * command/label/icon 协议。\n */\nexport const tableHeaderMenuItems: MenuItem[] = [\n {\n id: 'table-insert-row-after',\n command: { type: 'table.insertRow', direction: 'after' },\n label: '插入行',\n icon: 'rows-plus',\n group: 'table'\n },\n {\n id: 'table-delete-row',\n command: { type: 'table.deleteRow' },\n label: '删除行',\n icon: 'rows-minus',\n group: 'table'\n },\n {\n id: 'table-insert-column-after',\n command: { type: 'table.insertColumn', direction: 'after' },\n label: '插入列',\n icon: 'columns-plus',\n group: 'table'\n },\n {\n id: 'table-delete-column',\n command: { type: 'table.deleteColumn' },\n label: '删除列',\n icon: 'columns-minus',\n group: 'table'\n },\n {\n id: 'table-delete',\n command: { type: 'table.delete' },\n label: '删除表格',\n icon: 'table-delete',\n group: 'table'\n }\n];\n","import type { MenuItem } from './type';\nimport {\n backgroundColorPanel,\n fontFamilyPanel,\n fontSizePanel,\n lineHeightPanel,\n tableInsertPanel,\n textColorPanel\n} from './payloadPanels';\nimport { tableHeaderMenuItems } from './tableHeaderMenuItems';\n\n/**\n * 默认菜单 schema 覆盖 wangEditor 常用入口。\n *\n * RN/Flutter 可以按 group 渲染分组,也可以基于 id 做业务侧排序或裁剪。\n */\nexport const defaultMenuSchema: MenuItem[] = [\n {\n id: 'bold',\n command: { type: 'format.bold' },\n label: '加粗',\n icon: 'bold',\n group: 'text'\n },\n {\n id: 'italic',\n command: { type: 'format.italic' },\n label: '斜体',\n icon: 'italic',\n group: 'text'\n },\n {\n id: 'underline',\n command: { type: 'format.underline' },\n label: '下划线',\n icon: 'underline',\n group: 'text'\n },\n {\n id: 'strike',\n command: { type: 'format.strike' },\n label: '删除线',\n icon: 'strikethrough',\n group: 'text'\n },\n {\n id: 'inline-code',\n command: { type: 'format.inlineCode' },\n label: '行内代码',\n icon: 'code',\n group: 'text'\n },\n {\n id: 'superscript',\n command: { type: 'format.superscript' },\n label: '上标',\n icon: 'superscript',\n group: 'text'\n },\n {\n id: 'subscript',\n command: { type: 'format.subscript' },\n label: '下标',\n icon: 'subscript',\n group: 'text'\n },\n {\n id: 'clear-style',\n command: { type: 'format.clear' },\n label: '清除样式',\n icon: 'remove-formatting',\n group: 'text'\n },\n {\n id: 'color',\n command: { type: 'format.color', value: '' },\n label: '文字颜色',\n icon: 'palette',\n group: 'style',\n requiresPayload: true,\n payloadPanel: textColorPanel\n },\n {\n id: 'background-color',\n command: { type: 'format.backgroundColor', value: '' },\n label: '背景色',\n icon: 'paint-bucket',\n group: 'style',\n requiresPayload: true,\n payloadPanel: backgroundColorPanel\n },\n {\n id: 'font-size',\n command: { type: 'format.fontSize', value: '' },\n label: '字号',\n icon: 'case-sensitive',\n group: 'style',\n requiresPayload: true,\n payloadPanel: fontSizePanel\n },\n {\n id: 'font-family',\n command: { type: 'format.fontFamily', value: '' },\n label: '字体',\n icon: 'type',\n group: 'style',\n requiresPayload: true,\n payloadPanel: fontFamilyPanel\n },\n {\n id: 'line-height',\n command: { type: 'format.lineHeight', value: '' },\n label: '行高',\n icon: 'wrap-text',\n group: 'style',\n requiresPayload: true,\n payloadPanel: lineHeightPanel\n },\n {\n id: 'paragraph',\n command: { type: 'block.paragraph' },\n label: '正文',\n icon: 'pilcrow',\n group: 'block'\n },\n {\n id: 'heading-1',\n command: { type: 'block.heading', level: 1 },\n label: '一级标题',\n icon: 'heading-1',\n group: 'block'\n },\n {\n id: 'heading-2',\n command: { type: 'block.heading', level: 2 },\n label: '二级标题',\n icon: 'heading-2',\n group: 'block'\n },\n {\n id: 'heading-3',\n command: { type: 'block.heading', level: 3 },\n label: '三级标题',\n icon: 'heading-3',\n group: 'block'\n },\n {\n id: 'heading-4',\n command: { type: 'block.heading', level: 4 },\n label: '四级标题',\n icon: 'heading-4',\n group: 'block'\n },\n {\n id: 'heading-5',\n command: { type: 'block.heading', level: 5 },\n label: '五级标题',\n icon: 'heading-5',\n group: 'block'\n },\n {\n id: 'heading-6',\n command: { type: 'block.heading', level: 6 },\n label: '六级标题',\n icon: 'heading-6',\n group: 'block'\n },\n {\n id: 'quote',\n command: { type: 'block.quote' },\n label: '引用',\n icon: 'quote',\n group: 'block'\n },\n {\n id: 'divider',\n command: { type: 'block.divider' },\n label: '分割线',\n icon: 'minus',\n group: 'block'\n },\n {\n id: 'code-block',\n command: { type: 'block.code' },\n label: '代码块',\n icon: 'square-code',\n group: 'block'\n },\n {\n id: 'ordered-list',\n command: { type: 'list.ordered' },\n label: '有序列表',\n icon: 'list-ordered',\n group: 'list'\n },\n {\n id: 'unordered-list',\n command: { type: 'list.unordered' },\n label: '无序列表',\n icon: 'list',\n group: 'list'\n },\n {\n id: 'todo-list',\n command: { type: 'list.todo' },\n label: '待办列表',\n icon: 'list-todo',\n group: 'list'\n },\n {\n id: 'align-left',\n command: { type: 'align', value: 'left' },\n label: '左对齐',\n icon: 'align-left',\n group: 'align'\n },\n {\n id: 'align-center',\n command: { type: 'align', value: 'center' },\n label: '居中',\n icon: 'align-center',\n group: 'align'\n },\n {\n id: 'align-right',\n command: { type: 'align', value: 'right' },\n label: '右对齐',\n icon: 'align-right',\n group: 'align'\n },\n {\n id: 'align-justify',\n command: { type: 'align', value: 'justify' },\n label: '两端对齐',\n icon: 'align-justify',\n group: 'align'\n },\n {\n id: 'indent-increase',\n command: { type: 'indent.increase' },\n label: '增加缩进',\n icon: 'indent-increase',\n group: 'align'\n },\n {\n id: 'indent-decrease',\n command: { type: 'indent.decrease' },\n label: '减少缩进',\n icon: 'indent-decrease',\n group: 'align'\n },\n {\n id: 'mention',\n command: { type: 'mention.insert', item: { id: '', label: '', value: '' } },\n label: '@ 提及',\n icon: 'at-sign',\n group: 'insert',\n requiresPayload: true\n },\n {\n id: 'upload-image',\n command: { type: 'media.pickImage' },\n label: '上传图片',\n icon: 'upload-image',\n group: 'media'\n },\n {\n id: 'upload-video',\n command: { type: 'media.pickVideo' },\n label: '上传视频',\n icon: 'upload-video',\n group: 'media'\n },\n {\n id: 'table',\n command: { type: 'table.insert', rows: 3, cols: 3 },\n label: '表格',\n icon: 'table',\n group: 'table',\n requiresPayload: true,\n payloadPanel: tableInsertPanel\n },\n ...tableHeaderMenuItems,\n {\n id: 'slash-command',\n command: { type: 'slash.open' },\n label: '/ 命令',\n icon: 'list-plus',\n group: 'insert'\n },\n {\n id: 'undo',\n command: { type: 'history.undo' },\n label: '撤销',\n icon: 'undo',\n group: 'history'\n },\n {\n id: 'redo',\n command: { type: 'history.redo' },\n label: '重做',\n icon: 'redo',\n group: 'history'\n },\n {\n id: 'clear',\n command: { type: 'content.clear' },\n label: '清空',\n icon: 'trash-2',\n group: 'history'\n },\n {\n id: 'fullscreen',\n command: { type: 'fullscreen.toggle' },\n label: '全屏',\n icon: 'maximize',\n group: 'view'\n }\n];\n","import type { CommandState, EditorCommand } from '@bridgerte/core';\nimport type { MenuItem } from '../menuSchema';\nimport { defaultMenuSchema } from '../menuSchema';\n\nconst commandStateValueByType: Partial<Record<EditorCommand['type'], (command: EditorCommand) => (\n CommandState['value'] | undefined\n)>> = {\n align: (command) => command.type === 'align' ? command.value : undefined,\n 'block.heading': (command) => command.type === 'block.heading' ? command.level : undefined,\n 'block.setCodeLanguage': (command) => (\n command.type === 'block.setCodeLanguage' ? command.language : undefined\n )\n};\n\n/**\n * 取出菜单命令用于匹配 `CommandState.value` 的稳定值。\n *\n * 同类命令存在多个菜单项时使用这个值区分,比如对齐方式和标题级别。\n */\nexport const getCommandStateMatchValue = (\n command: EditorCommand\n): CommandState['value'] | undefined => commandStateValueByType[command.type]?.(command);\n\n/**\n * 判断某条命令状态是否对应一个完整命令 payload。\n */\nexport const isCommandStateForCommand = (\n command: EditorCommand,\n state: CommandState\n): boolean => {\n const matchValue = getCommandStateMatchValue(command);\n\n return state.command === command.type\n && (matchValue === undefined || state.value === matchValue);\n};\n\n/**\n * 判断某条命令状态是否对应一个菜单项。\n *\n * 原生 toolbar 可以用它把 `CommandState[]` 映射回具体按钮 active/disabled 状态。\n */\nexport const isMenuItemCommandState = (item: MenuItem, state: CommandState): boolean => (\n isCommandStateForCommand(item.command, state)\n);\n\n/**\n * 为给定菜单生成默认禁用状态。\n *\n * 编辑器未 ready 或无选区时,原生 toolbar 可以先使用这组状态兜底。\n */\nexport function createDisabledCommandStates(menuSchema = defaultMenuSchema): CommandState[] {\n return menuSchema.map((item) => ({\n command: item.command.type,\n active: false,\n disabled: true,\n value: getCommandStateMatchValue(item.command)\n }));\n}\n","import type { ToolbarConfig, ToolbarGroupConfig, ToolbarKey } from '@bridgerte/core';\nimport type { MenuItem } from '../menuSchema';\nimport { defaultMenuSchema } from '../menuSchema';\nimport type { ResolvedToolbarItem } from './type';\n\nexport type * from './type';\n\n/**\n * 默认 DOM toolbar 配置。\n *\n * 这里只选择已实现或带参数面板的基础按钮;完整菜单全集仍由 `defaultMenuSchema` 维护。\n */\nexport const defaultToolbarConfig: ToolbarConfig = {\n toolbarKeys: [\n 'undo',\n 'redo',\n 'clear',\n '|',\n 'paragraph',\n 'heading-1',\n 'heading-2',\n 'heading-3',\n 'heading-4',\n 'heading-5',\n 'heading-6',\n 'quote',\n 'divider',\n 'code-block',\n '|',\n 'bold',\n 'italic',\n 'underline',\n 'strike',\n 'inline-code',\n 'superscript',\n 'subscript',\n 'clear-style',\n 'color',\n 'background-color',\n 'font-size',\n 'font-family',\n 'line-height',\n '|',\n 'ordered-list',\n 'unordered-list',\n 'todo-list',\n '|',\n 'upload-image',\n 'upload-video',\n '|',\n 'table',\n '|',\n 'align-left',\n 'align-center',\n 'align-right',\n 'align-justify',\n 'indent-increase',\n 'indent-decrease',\n '|',\n 'fullscreen'\n ]\n};\n\nconst isToolbarGroupConfig = (key: ToolbarKey): key is ToolbarGroupConfig => (\n typeof key === 'object' && Array.isArray(key.menuKeys)\n);\n\nconst createMenuMap = (menuSchema: MenuItem[]) => new Map(\n menuSchema.map((item) => [item.id, item])\n);\n\nconst shouldExcludeToolbarKey = (\n key: ToolbarKey,\n excludeKeys: Set<string>\n) => {\n if (typeof key === 'string') return key !== '|' && excludeKeys.has(key);\n\n return excludeKeys.has(key.key) || key.menuKeys.every((menuKey) => excludeKeys.has(menuKey));\n};\n\nconst applyToolbarConfigOverrides = (\n baseKeys: ToolbarKey[],\n toolbarConfig?: ToolbarConfig\n): ToolbarKey[] => {\n const excludeKeys = new Set(toolbarConfig?.excludeKeys ?? []);\n /*\n * 先排除再插入,等价于“在用户最终想保留的默认菜单里加东西”。\n * insert index 做夹取,避免业务传入负数或超长下标时破坏默认 toolbar。\n */\n const filteredKeys = baseKeys.filter((key) => !shouldExcludeToolbarKey(key, excludeKeys));\n\n if (!toolbarConfig?.insertKeys) return filteredKeys;\n\n const insertIndex = Math.max(0, Math.min(toolbarConfig.insertKeys.index, filteredKeys.length));\n\n return [\n ...filteredKeys.slice(0, insertIndex),\n ...toolbarConfig.insertKeys.keys,\n ...filteredKeys.slice(insertIndex)\n ];\n};\n\nconst resolveToolbarKey = (\n key: ToolbarKey,\n menuMap: Map<string, MenuItem>,\n excludeKeys: Set<string>,\n separatorIndex: number\n): ResolvedToolbarItem[] => {\n if (key === '|') {\n return [{ type: 'separator', key: `separator-${separatorIndex}` }];\n }\n\n if (typeof key === 'string') {\n const item = menuMap.get(key);\n\n // 未知 key 直接忽略;需要 payload 但没有 panel 的菜单暂不渲染,避免按钮点击后无法生成合法命令。\n if (!item || (item.requiresPayload && !item.payloadPanel) || excludeKeys.has(item.id)) {\n return [];\n }\n\n return [{ type: 'button', item }];\n }\n\n if (isToolbarGroupConfig(key)) {\n const items = key.menuKeys\n .filter((menuKey) => !excludeKeys.has(menuKey))\n .map((menuKey) => menuMap.get(menuKey))\n .filter((item): item is MenuItem => (\n item !== undefined && (!item.requiresPayload || item.payloadPanel !== undefined)\n ));\n\n return items.length > 0 ? [{\n type: 'group',\n key: key.key,\n title: key.title,\n icon: key.icon,\n items\n }] : [];\n }\n\n return [];\n};\n\nconst shouldKeepResolvedToolbarItem = (\n item: ResolvedToolbarItem,\n items: ResolvedToolbarItem[]\n) => {\n if (item.type !== 'separator') return true;\n\n const previousItem = items[items.length - 1];\n\n return previousItem !== undefined && previousItem.type !== 'separator';\n};\n\nconst trimTrailingToolbarSeparators = (items: ResolvedToolbarItem[]) => {\n while (items.at(-1)?.type === 'separator') {\n items.pop();\n }\n\n return items;\n};\n\n/**\n * 把 wangEditor 风格的 JSON 配置解析成 DOM/RN/Flutter 都能消费的菜单结构。\n *\n * 未知 key 和缺少 payloadPanel 的 requiresPayload 菜单会被忽略,避免默认 toolbar 渲染无法处理的按钮。\n * 分割线会自动去掉开头、结尾和连续项,避免被跳过的菜单留下空分隔。\n */\nexport const resolveToolbarMenu = (\n toolbarConfig: ToolbarConfig = defaultToolbarConfig,\n menuSchema: MenuItem[] = defaultMenuSchema\n): ResolvedToolbarItem[] => {\n const menuMap = createMenuMap(menuSchema);\n const baseKeys = toolbarConfig.toolbarKeys ?? defaultToolbarConfig.toolbarKeys ?? [];\n const toolbarKeys = applyToolbarConfigOverrides(baseKeys, toolbarConfig);\n const excludeKeys = new Set(toolbarConfig.excludeKeys ?? []);\n let separatorIndex = 0;\n\n const resolvedItems = toolbarKeys.reduce<ResolvedToolbarItem[]>((items, key) => {\n const nextItems = resolveToolbarKey(key, menuMap, excludeKeys, separatorIndex);\n\n if (key === '|') separatorIndex += 1;\n\n nextItems.forEach((item) => {\n if (shouldKeepResolvedToolbarItem(item, items)) {\n items.push(item);\n }\n });\n\n return items;\n }, []);\n\n return trimTrailingToolbarSeparators(resolvedItems);\n};\n"],"names":["codeBlockLanguagePanel","codeBlockLanguagePayloadPanel","textColorPanel","backgroundColorPanel","fontSizePanel","fontFamilyPanel","lineHeightPanel","tableInsertPanel","BRIDGERTE_TABLE_INSERT_MAX_ROWS","BRIDGERTE_TABLE_INSERT_MAX_COLS","tableHeaderMenuItems","defaultMenuSchema","commandStateValueByType","command","getCommandStateMatchValue","_a","isCommandStateForCommand","state","matchValue","isMenuItemCommandState","item","createDisabledCommandStates","menuSchema","defaultToolbarConfig","isToolbarGroupConfig","key","createMenuMap","shouldExcludeToolbarKey","excludeKeys","menuKey","applyToolbarConfigOverrides","baseKeys","toolbarConfig","filteredKeys","insertIndex","resolveToolbarKey","menuMap","separatorIndex","items","shouldKeepResolvedToolbarItem","previousItem","trimTrailingToolbarSeparators","resolveToolbarMenu","toolbarKeys","resolvedItems","nextItems"],"mappings":"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"}
1
+ {"version":3,"file":"native-spec.js","sources":["../../native-spec/src/menuSchema/payloadPanels.ts","../../native-spec/src/menuSchema/tableHeaderMenuItems.ts","../../native-spec/src/menuSchema/defaultMenuSchema.ts","../../native-spec/src/commandState/index.ts","../../native-spec/src/toolbarConfig/index.ts"],"sourcesContent":["import {\n BRIDGERTE_TABLE_INSERT_MAX_COLS,\n BRIDGERTE_TABLE_INSERT_MAX_ROWS,\n type PayloadPanelSchema\n} from '@bridgerte/core';\n\n/**\n * 代码块语言列表给 DOM 代码块顶部控制栏和原生侧自绘使用。\n *\n * 空字符串表示纯文本;默认候选按 Shiki 高频技术文档语言维护。业务如需裁剪语言、\n * 调整顺序或接入更多 Shiki 语言,传入自己的 `codeBlockLanguagePanel` 即可。\n */\nexport const codeBlockLanguagePanel: PayloadPanelSchema = {\n id: 'code-block-language',\n title: '代码语言',\n fields: [\n {\n type: 'select',\n name: 'language',\n label: '语言',\n defaultValue: '',\n options: [\n { label: '纯文本', value: '' },\n { label: 'Bash', value: 'shellscript' },\n { label: 'C', value: 'c' },\n { label: 'C++', value: 'cpp' },\n { label: 'C#', value: 'csharp' },\n { label: 'CSS', value: 'css' },\n { label: 'Dart', value: 'dart' },\n { label: 'Dockerfile', value: 'docker' },\n { label: 'Go', value: 'go' },\n { label: 'HTML', value: 'html' },\n { label: 'Java', value: 'java' },\n { label: 'JavaScript', value: 'javascript' },\n { label: 'JSON', value: 'json' },\n { label: 'Kotlin', value: 'kotlin' },\n { label: 'Markdown', value: 'markdown' },\n { label: 'PHP', value: 'php' },\n { label: 'Python', value: 'python' },\n { label: 'Rust', value: 'rust' },\n { label: 'SQL', value: 'sql' },\n { label: 'Swift', value: 'swift' },\n { label: 'TOML', value: 'toml' },\n { label: 'TSX', value: 'tsx' },\n { label: 'TypeScript', value: 'typescript' },\n { label: 'Vue', value: 'vue' },\n { label: 'XML', value: 'xml' },\n { label: 'YAML', value: 'yaml' }\n ]\n }\n ]\n};\n\n/**\n * 兼容旧导出名。\n *\n * 代码块语言现在由代码块 header 触发,不再代表 toolbar 菜单 payload。\n */\nexport const codeBlockLanguagePayloadPanel = codeBlockLanguagePanel;\n\n/**\n * 颜色菜单使用 color 字段而不是预设色列表。\n *\n * DOM 默认面板可以渲染内置颜色控件,RN/Flutter/WebView 或业务自绘层仍读取同一份 schema。\n */\nexport const textColorPanel: PayloadPanelSchema = {\n id: 'text-color',\n title: '文字颜色',\n fields: [\n {\n type: 'color',\n name: 'value',\n label: '颜色'\n }\n ]\n};\n\nexport const backgroundColorPanel: PayloadPanelSchema = {\n id: 'background-color',\n title: '背景色',\n fields: [\n {\n type: 'color',\n name: 'value',\n label: '背景'\n }\n ]\n};\n\nexport const fontSizePanel: PayloadPanelSchema = {\n id: 'font-size',\n title: '字号',\n fields: [\n {\n type: 'select',\n name: 'value',\n label: '字号',\n defaultValue: '16px',\n options: [\n { label: '小号 14px', value: '14px' },\n { label: '正文 16px', value: '16px' },\n { label: '强调 18px', value: '18px' },\n { label: '标题 20px', value: '20px' },\n { label: '大标题 24px', value: '24px' }\n ]\n }\n ]\n};\n\nexport const fontFamilyPanel: PayloadPanelSchema = {\n id: 'font-family',\n title: '字体',\n fields: [\n {\n type: 'select',\n name: 'value',\n label: '字体',\n defaultValue: '',\n options: [\n { label: '跟随页面', value: '' },\n { label: '无衬线', value: 'sans-serif' },\n { label: '衬线', value: 'serif' },\n { label: '等宽', value: 'monospace' }\n ]\n }\n ]\n};\n\nexport const lineHeightPanel: PayloadPanelSchema = {\n id: 'line-height',\n title: '行高',\n fields: [\n {\n type: 'select',\n name: 'value',\n label: '行高',\n defaultValue: '1.7',\n options: [\n { label: '紧凑 1.4', value: '1.4' },\n { label: '常规 1.7', value: '1.7' },\n { label: '舒展 2', value: '2' }\n ]\n }\n ]\n};\n\n/**\n * 表格插入使用 number 字段收集行列。\n *\n * DOM 默认面板、H5 自绘和 RN/Flutter 原生表单都读取同一份 schema;真正的表格进阶操作\n * 仍放后续表格菜单阶段继续扩展。\n */\nexport const tableInsertPanel: PayloadPanelSchema = {\n id: 'table-insert',\n title: '插入表格',\n fields: [\n {\n type: 'number',\n name: 'rows',\n label: '行数',\n defaultValue: '3',\n min: 1,\n max: BRIDGERTE_TABLE_INSERT_MAX_ROWS,\n step: 1\n },\n {\n type: 'number',\n name: 'cols',\n label: '列数',\n defaultValue: '3',\n min: 1,\n max: BRIDGERTE_TABLE_INSERT_MAX_COLS,\n step: 1\n }\n ]\n};\n","import type { MenuItem } from './type';\n\n/*\n * 表格 header 和后续表格浮动菜单共用这组操作入口。\n * 这些菜单默认不进入 toolbar 排列,但仍放在 native-spec,保证 DOM/RN/Flutter 自绘读取同一份\n * command/label/icon 协议。\n */\nexport const tableHeaderMenuItems: MenuItem[] = [\n {\n id: 'table-insert-row-after',\n command: { type: 'table.insertRow', direction: 'after' },\n label: '插入行',\n icon: 'rows-plus',\n group: 'table'\n },\n {\n id: 'table-delete-row',\n command: { type: 'table.deleteRow' },\n label: '删除行',\n icon: 'rows-minus',\n group: 'table'\n },\n {\n id: 'table-insert-column-after',\n command: { type: 'table.insertColumn', direction: 'after' },\n label: '插入列',\n icon: 'columns-plus',\n group: 'table'\n },\n {\n id: 'table-delete-column',\n command: { type: 'table.deleteColumn' },\n label: '删除列',\n icon: 'columns-minus',\n group: 'table'\n },\n {\n id: 'table-delete',\n command: { type: 'table.delete' },\n label: '删除表格',\n icon: 'table-delete',\n group: 'table'\n }\n];\n","import type { MenuItem } from './type';\r\nimport {\r\n backgroundColorPanel,\r\n fontFamilyPanel,\r\n fontSizePanel,\r\n lineHeightPanel,\r\n tableInsertPanel,\r\n textColorPanel\r\n} from './payloadPanels';\r\nimport { tableHeaderMenuItems } from './tableHeaderMenuItems';\r\n\r\n/**\r\n * 默认菜单 schema 覆盖 wangEditor 常用入口。\r\n *\r\n * RN/Flutter 可以按 group 渲染分组,也可以基于 id 做业务侧排序或裁剪。\r\n */\r\nexport const defaultMenuSchema: MenuItem[] = [\r\n {\r\n id: 'bold',\r\n command: { type: 'format.bold' },\r\n label: '加粗',\r\n icon: 'bold',\r\n group: 'text'\r\n },\r\n {\r\n id: 'italic',\r\n command: { type: 'format.italic' },\r\n label: '斜体',\r\n icon: 'italic',\r\n group: 'text'\r\n },\r\n {\r\n id: 'underline',\r\n command: { type: 'format.underline' },\r\n label: '下划线',\r\n icon: 'underline',\r\n group: 'text'\r\n },\r\n {\r\n id: 'strike',\r\n command: { type: 'format.strike' },\r\n label: '删除线',\r\n icon: 'strikethrough',\r\n group: 'text'\r\n },\r\n {\r\n id: 'inline-code',\r\n command: { type: 'format.inlineCode' },\r\n label: '行内代码',\r\n icon: 'code',\r\n group: 'text'\r\n },\r\n {\r\n id: 'superscript',\r\n command: { type: 'format.superscript' },\r\n label: '上标',\r\n icon: 'superscript',\r\n group: 'text'\r\n },\r\n {\r\n id: 'subscript',\r\n command: { type: 'format.subscript' },\r\n label: '下标',\r\n icon: 'subscript',\r\n group: 'text'\r\n },\r\n {\r\n id: 'clear-style',\r\n command: { type: 'format.clear' },\r\n label: '清除样式',\r\n icon: 'remove-formatting',\r\n group: 'text'\r\n },\r\n {\r\n id: 'color',\r\n command: { type: 'format.color', value: '' },\r\n label: '文字颜色',\r\n icon: 'palette',\r\n group: 'style',\r\n requiresPayload: true,\r\n payloadPanel: textColorPanel\r\n },\r\n {\r\n id: 'background-color',\r\n command: { type: 'format.backgroundColor', value: '' },\r\n label: '背景色',\r\n icon: 'paint-bucket',\r\n group: 'style',\r\n requiresPayload: true,\r\n payloadPanel: backgroundColorPanel\r\n },\r\n {\r\n id: 'font-size',\r\n command: { type: 'format.fontSize', value: '' },\r\n label: '字号',\r\n icon: 'case-sensitive',\r\n group: 'style',\r\n requiresPayload: true,\r\n payloadPanel: fontSizePanel\r\n },\r\n {\r\n id: 'font-family',\r\n command: { type: 'format.fontFamily', value: '' },\r\n label: '字体',\r\n icon: 'type',\r\n group: 'style',\r\n requiresPayload: true,\r\n payloadPanel: fontFamilyPanel\r\n },\r\n {\r\n id: 'line-height',\r\n command: { type: 'format.lineHeight', value: '' },\r\n label: '行高',\r\n icon: 'wrap-text',\r\n group: 'style',\r\n requiresPayload: true,\r\n payloadPanel: lineHeightPanel\r\n },\r\n {\r\n id: 'paragraph',\r\n command: { type: 'block.paragraph' },\r\n label: '正文',\r\n icon: 'pilcrow',\r\n group: 'block'\r\n },\r\n {\r\n id: 'heading-1',\r\n command: { type: 'block.heading', level: 1 },\r\n label: '一级标题',\r\n icon: 'heading-1',\r\n group: 'block'\r\n },\r\n {\r\n id: 'heading-2',\r\n command: { type: 'block.heading', level: 2 },\r\n label: '二级标题',\r\n icon: 'heading-2',\r\n group: 'block'\r\n },\r\n {\r\n id: 'heading-3',\r\n command: { type: 'block.heading', level: 3 },\r\n label: '三级标题',\r\n icon: 'heading-3',\r\n group: 'block'\r\n },\r\n {\r\n id: 'heading-4',\r\n command: { type: 'block.heading', level: 4 },\r\n label: '四级标题',\r\n icon: 'heading-4',\r\n group: 'block'\r\n },\r\n {\r\n id: 'heading-5',\r\n command: { type: 'block.heading', level: 5 },\r\n label: '五级标题',\r\n icon: 'heading-5',\r\n group: 'block'\r\n },\r\n {\r\n id: 'heading-6',\r\n command: { type: 'block.heading', level: 6 },\r\n label: '六级标题',\r\n icon: 'heading-6',\r\n group: 'block'\r\n },\r\n {\r\n id: 'quote',\r\n command: { type: 'block.quote' },\r\n label: '引用',\r\n icon: 'quote',\r\n group: 'block'\r\n },\r\n {\r\n id: 'divider',\r\n command: { type: 'block.divider' },\r\n label: '分割线',\r\n icon: 'minus',\r\n group: 'block'\r\n },\r\n {\r\n id: 'code-block',\r\n command: { type: 'block.code' },\r\n label: '代码块',\r\n icon: 'square-code',\r\n group: 'block'\r\n },\r\n {\r\n id: 'ordered-list',\r\n command: { type: 'list.ordered' },\r\n label: '有序列表',\r\n icon: 'list-ordered',\r\n group: 'list'\r\n },\r\n {\r\n id: 'unordered-list',\r\n command: { type: 'list.unordered' },\r\n label: '无序列表',\r\n icon: 'list',\r\n group: 'list'\r\n },\r\n {\r\n id: 'todo-list',\r\n command: { type: 'list.todo' },\r\n label: '待办列表',\r\n icon: 'list-todo',\r\n group: 'list'\r\n },\r\n {\r\n id: 'align-left',\r\n command: { type: 'align', value: 'left' },\r\n label: '左对齐',\r\n icon: 'align-left',\r\n group: 'align'\r\n },\r\n {\r\n id: 'align-center',\r\n command: { type: 'align', value: 'center' },\r\n label: '居中',\r\n icon: 'align-center',\r\n group: 'align'\r\n },\r\n {\r\n id: 'align-right',\r\n command: { type: 'align', value: 'right' },\r\n label: '右对齐',\r\n icon: 'align-right',\r\n group: 'align'\r\n },\r\n {\r\n id: 'align-justify',\r\n command: { type: 'align', value: 'justify' },\r\n label: '两端对齐',\r\n icon: 'align-justify',\r\n group: 'align'\r\n },\r\n {\r\n id: 'indent-increase',\r\n command: { type: 'indent.increase' },\r\n label: '增加缩进',\r\n icon: 'indent-increase',\r\n group: 'align'\r\n },\r\n {\r\n id: 'indent-decrease',\r\n command: { type: 'indent.decrease' },\r\n label: '减少缩进',\r\n icon: 'indent-decrease',\r\n group: 'align'\r\n },\r\n {\r\n id: 'mention',\r\n command: { type: 'mention.insert', item: { id: '', label: '', value: '' } },\r\n label: '@ 提及',\r\n icon: 'at-sign',\r\n group: 'insert',\r\n requiresPayload: true\r\n },\r\n {\r\n id: 'upload-image',\r\n command: { type: 'media.pickImage' },\r\n label: '上传图片',\r\n icon: 'upload-image',\r\n group: 'media'\r\n },\r\n {\r\n id: 'upload-video',\r\n command: { type: 'media.pickVideo' },\r\n label: '上传视频',\r\n icon: 'upload-video',\r\n group: 'media'\r\n },\r\n {\r\n id: 'table',\r\n command: { type: 'table.insert', rows: 3, cols: 3 },\r\n label: '表格',\r\n icon: 'table',\r\n group: 'table',\r\n requiresPayload: true,\r\n payloadPanel: tableInsertPanel\r\n },\r\n ...tableHeaderMenuItems,\r\n {\r\n id: 'slash-command',\r\n command: { type: 'slash.open' },\r\n label: '/ 命令',\r\n icon: 'list-plus',\r\n group: 'insert'\r\n },\r\n {\r\n id: 'undo',\r\n command: { type: 'history.undo' },\r\n label: '撤销',\r\n icon: 'undo',\r\n group: 'history'\r\n },\r\n {\r\n id: 'redo',\r\n command: { type: 'history.redo' },\r\n label: '重做',\r\n icon: 'redo',\r\n group: 'history'\r\n },\r\n {\r\n id: 'clear',\r\n command: { type: 'content.clear' },\r\n label: '清空',\r\n icon: 'trash-2',\r\n group: 'history'\r\n },\r\n {\r\n id: 'fullscreen',\r\n command: { type: 'fullscreen.toggle' },\r\n label: '全屏',\r\n icon: 'maximize',\r\n group: 'view'\r\n }\r\n];\r\n","import type { CommandState, EditorCommand } from '@bridgerte/core';\r\nimport type { MenuItem } from '../menuSchema';\r\nimport { defaultMenuSchema } from '../menuSchema';\r\n\r\nconst commandStateValueByType: Partial<Record<EditorCommand['type'], (command: EditorCommand) => (\r\n CommandState['value'] | undefined\r\n)>> = {\r\n align: (command) => command.type === 'align' ? command.value : undefined,\r\n 'block.heading': (command) => command.type === 'block.heading' ? command.level : undefined,\r\n 'block.setCodeLanguage': (command) => (\r\n command.type === 'block.setCodeLanguage' ? command.language : undefined\r\n )\r\n};\r\n\r\n/**\r\n * 取出菜单命令用于匹配 `CommandState.value` 的稳定值。\r\n *\r\n * 同类命令存在多个菜单项时使用这个值区分,比如对齐方式和标题级别。\r\n */\r\nexport const getCommandStateMatchValue = (\r\n command: EditorCommand\r\n): CommandState['value'] | undefined => commandStateValueByType[command.type]?.(command);\r\n\r\n/**\r\n * 判断某条命令状态是否对应一个完整命令 payload。\r\n */\r\nexport const isCommandStateForCommand = (\r\n command: EditorCommand,\r\n state: CommandState\r\n): boolean => {\r\n const matchValue = getCommandStateMatchValue(command);\r\n\r\n return state.command === command.type\r\n && (matchValue === undefined || state.value === matchValue);\r\n};\r\n\r\n/**\r\n * 判断某条命令状态是否对应一个菜单项。\r\n *\r\n * 原生 toolbar 可以用它把 `CommandState[]` 映射回具体按钮 active/disabled 状态。\r\n */\r\nexport const isMenuItemCommandState = (item: MenuItem, state: CommandState): boolean => (\r\n isCommandStateForCommand(item.command, state)\r\n);\r\n\r\n/**\r\n * 为给定菜单生成默认禁用状态。\r\n *\r\n * 编辑器未 ready 或无选区时,原生 toolbar 可以先使用这组状态兜底。\r\n */\r\nexport function createDisabledCommandStates(menuSchema = defaultMenuSchema): CommandState[] {\r\n return menuSchema.map((item) => ({\r\n command: item.command.type,\r\n active: false,\r\n disabled: true,\r\n value: getCommandStateMatchValue(item.command)\r\n }));\r\n}\r\n","import type { ToolbarConfig, ToolbarGroupConfig, ToolbarKey } from '@bridgerte/core';\r\nimport type { MenuItem } from '../menuSchema';\r\nimport { defaultMenuSchema } from '../menuSchema';\r\nimport type { ResolvedToolbarItem } from './type';\r\n\r\nexport type * from './type';\r\n\r\n/**\r\n * 默认 DOM toolbar 配置。\r\n *\r\n * 这里只选择已实现或带参数面板的基础按钮;完整菜单全集仍由 `defaultMenuSchema` 维护。\r\n */\r\nexport const defaultToolbarConfig: ToolbarConfig = {\r\n toolbarKeys: [\r\n 'undo',\r\n 'redo',\r\n 'clear',\r\n '|',\r\n 'paragraph',\r\n 'heading-1',\r\n 'heading-2',\r\n 'heading-3',\r\n 'heading-4',\r\n 'heading-5',\r\n 'heading-6',\r\n 'quote',\r\n 'divider',\r\n 'code-block',\r\n '|',\r\n 'bold',\r\n 'italic',\r\n 'underline',\r\n 'strike',\r\n 'inline-code',\r\n 'superscript',\r\n 'subscript',\r\n 'clear-style',\r\n 'color',\r\n 'background-color',\r\n 'font-size',\r\n 'font-family',\r\n 'line-height',\r\n '|',\r\n 'ordered-list',\n 'unordered-list',\n 'todo-list',\n '|',\n 'upload-image',\n 'upload-video',\n '|',\n 'table',\n '|',\n 'align-left',\r\n 'align-center',\r\n 'align-right',\r\n 'align-justify',\r\n 'indent-increase',\r\n 'indent-decrease',\r\n '|',\r\n 'fullscreen'\r\n ]\r\n};\r\n\r\nconst isToolbarGroupConfig = (key: ToolbarKey): key is ToolbarGroupConfig => (\r\n typeof key === 'object' && Array.isArray(key.menuKeys)\r\n);\r\n\r\nconst createMenuMap = (menuSchema: MenuItem[]) => new Map(\r\n menuSchema.map((item) => [item.id, item])\r\n);\r\n\r\nconst shouldExcludeToolbarKey = (\r\n key: ToolbarKey,\r\n excludeKeys: Set<string>\r\n) => {\r\n if (typeof key === 'string') return key !== '|' && excludeKeys.has(key);\r\n\r\n return excludeKeys.has(key.key) || key.menuKeys.every((menuKey) => excludeKeys.has(menuKey));\r\n};\r\n\r\nconst applyToolbarConfigOverrides = (\r\n baseKeys: ToolbarKey[],\r\n toolbarConfig?: ToolbarConfig\r\n): ToolbarKey[] => {\r\n const excludeKeys = new Set(toolbarConfig?.excludeKeys ?? []);\r\n /*\r\n * 先排除再插入,等价于“在用户最终想保留的默认菜单里加东西”。\r\n * insert index 做夹取,避免业务传入负数或超长下标时破坏默认 toolbar。\r\n */\r\n const filteredKeys = baseKeys.filter((key) => !shouldExcludeToolbarKey(key, excludeKeys));\r\n\r\n if (!toolbarConfig?.insertKeys) return filteredKeys;\r\n\r\n const insertIndex = Math.max(0, Math.min(toolbarConfig.insertKeys.index, filteredKeys.length));\r\n\r\n return [\r\n ...filteredKeys.slice(0, insertIndex),\r\n ...toolbarConfig.insertKeys.keys,\r\n ...filteredKeys.slice(insertIndex)\r\n ];\r\n};\r\n\r\nconst resolveToolbarKey = (\r\n key: ToolbarKey,\r\n menuMap: Map<string, MenuItem>,\r\n excludeKeys: Set<string>,\r\n separatorIndex: number\r\n): ResolvedToolbarItem[] => {\r\n if (key === '|') {\r\n return [{ type: 'separator', key: `separator-${separatorIndex}` }];\r\n }\r\n\r\n if (typeof key === 'string') {\r\n const item = menuMap.get(key);\r\n\r\n // 未知 key 直接忽略;需要 payload 但没有 panel 的菜单暂不渲染,避免按钮点击后无法生成合法命令。\r\n if (!item || (item.requiresPayload && !item.payloadPanel) || excludeKeys.has(item.id)) {\r\n return [];\r\n }\r\n\r\n return [{ type: 'button', item }];\r\n }\r\n\r\n if (isToolbarGroupConfig(key)) {\r\n const items = key.menuKeys\r\n .filter((menuKey) => !excludeKeys.has(menuKey))\r\n .map((menuKey) => menuMap.get(menuKey))\r\n .filter((item): item is MenuItem => (\r\n item !== undefined && (!item.requiresPayload || item.payloadPanel !== undefined)\r\n ));\r\n\r\n return items.length > 0 ? [{\r\n type: 'group',\r\n key: key.key,\r\n title: key.title,\r\n icon: key.icon,\r\n items\r\n }] : [];\r\n }\r\n\r\n return [];\r\n};\r\n\r\nconst shouldKeepResolvedToolbarItem = (\r\n item: ResolvedToolbarItem,\r\n items: ResolvedToolbarItem[]\r\n) => {\r\n if (item.type !== 'separator') return true;\r\n\r\n const previousItem = items[items.length - 1];\r\n\r\n return previousItem !== undefined && previousItem.type !== 'separator';\r\n};\r\n\r\nconst trimTrailingToolbarSeparators = (items: ResolvedToolbarItem[]) => {\r\n while (items.at(-1)?.type === 'separator') {\r\n items.pop();\r\n }\r\n\r\n return items;\r\n};\r\n\r\n/**\r\n * 把 wangEditor 风格的 JSON 配置解析成 DOM/RN/Flutter 都能消费的菜单结构。\r\n *\r\n * 未知 key 和缺少 payloadPanel 的 requiresPayload 菜单会被忽略,避免默认 toolbar 渲染无法处理的按钮。\r\n * 分割线会自动去掉开头、结尾和连续项,避免被跳过的菜单留下空分隔。\r\n */\r\nexport const resolveToolbarMenu = (\r\n toolbarConfig: ToolbarConfig = defaultToolbarConfig,\r\n menuSchema: MenuItem[] = defaultMenuSchema\r\n): ResolvedToolbarItem[] => {\r\n const menuMap = createMenuMap(menuSchema);\r\n const baseKeys = toolbarConfig.toolbarKeys ?? defaultToolbarConfig.toolbarKeys ?? [];\r\n const toolbarKeys = applyToolbarConfigOverrides(baseKeys, toolbarConfig);\r\n const excludeKeys = new Set(toolbarConfig.excludeKeys ?? []);\r\n let separatorIndex = 0;\r\n\r\n const resolvedItems = toolbarKeys.reduce<ResolvedToolbarItem[]>((items, key) => {\r\n const nextItems = resolveToolbarKey(key, menuMap, excludeKeys, separatorIndex);\r\n\r\n if (key === '|') separatorIndex += 1;\r\n\r\n nextItems.forEach((item) => {\r\n if (shouldKeepResolvedToolbarItem(item, items)) {\r\n items.push(item);\r\n }\r\n });\r\n\r\n return items;\r\n }, []);\r\n\r\n return trimTrailingToolbarSeparators(resolvedItems);\r\n};\r\n"],"names":["codeBlockLanguagePanel","codeBlockLanguagePayloadPanel","textColorPanel","backgroundColorPanel","fontSizePanel","fontFamilyPanel","lineHeightPanel","tableInsertPanel","BRIDGERTE_TABLE_INSERT_MAX_ROWS","BRIDGERTE_TABLE_INSERT_MAX_COLS","tableHeaderMenuItems","defaultMenuSchema","commandStateValueByType","command","getCommandStateMatchValue","_a","isCommandStateForCommand","state","matchValue","isMenuItemCommandState","item","createDisabledCommandStates","menuSchema","defaultToolbarConfig","isToolbarGroupConfig","key","createMenuMap","shouldExcludeToolbarKey","excludeKeys","menuKey","applyToolbarConfigOverrides","baseKeys","toolbarConfig","filteredKeys","insertIndex","resolveToolbarKey","menuMap","separatorIndex","items","shouldKeepResolvedToolbarItem","previousItem","trimTrailingToolbarSeparators","resolveToolbarMenu","toolbarKeys","resolvedItems","nextItems"],"mappings":"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"}