@pixerate/editor 0.172.0 → 0.174.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/animation-editor/index.cjs +9 -9
- package/dist/animation-editor/index.js +1 -1
- package/dist/canvas/index.cjs +7 -7
- package/dist/canvas/index.js +1 -1
- package/dist/{chunk-CYKWYP6D.cjs → chunk-6DUEV36F.cjs} +14 -14
- package/dist/{chunk-7KWJEYIK.js → chunk-6G2NLMVK.js} +36 -4
- package/dist/{chunk-RUZQMYXH.cjs → chunk-A3A5TI6R.cjs} +43 -11
- package/dist/chunk-NZ3CTY7K.js +260 -0
- package/dist/{chunk-YN4AYYBJ.js → chunk-OZSA5YEJ.js} +1 -1
- package/dist/chunk-VCL7CB56.cjs +260 -0
- package/dist/{chunk-HCC2LBCW.js → chunk-WMVEYSOA.js} +1 -1
- package/dist/{chunk-3OSXHLIT.cjs → chunk-Z64NRDEH.cjs} +7 -7
- package/dist/commands/format.d.cts +43 -0
- package/dist/commands/format.d.ts +43 -0
- package/dist/commands/index.cjs +7 -1
- package/dist/commands/index.d.cts +1 -0
- package/dist/commands/index.d.ts +1 -0
- package/dist/commands/index.js +6 -0
- package/dist/effects/helpers.d.cts +11 -2
- package/dist/effects/helpers.d.ts +11 -2
- package/dist/effects/index.cjs +40 -34
- package/dist/effects/index.js +8 -2
- package/dist/effects/types.d.cts +2 -0
- package/dist/effects/types.d.ts +2 -0
- package/dist/image-editor/index.cjs +13 -13
- package/dist/image-editor/index.js +1 -1
- package/dist/index.cjs +7 -1
- package/dist/index.d.cts +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +6 -0
- package/dist/paint-editor/index.cjs +7 -7
- package/dist/paint-editor/index.js +2 -2
- package/dist/vector/index.cjs +6 -6
- package/dist/vector/index.js +1 -1
- package/dist/video-editor/index.cjs +309 -309
- package/dist/video-editor/index.js +3 -3
- package/package.json +3 -2
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
// ../markdown-conformance/manifest.json
|
|
2
|
+
var manifest_default = {
|
|
3
|
+
$schema: "./schema/manifest.schema.json",
|
|
4
|
+
commands: [
|
|
5
|
+
{
|
|
6
|
+
id: "format.bold",
|
|
7
|
+
label: "Bold",
|
|
8
|
+
group: "Format",
|
|
9
|
+
shortcut: "Mod+B",
|
|
10
|
+
surfaces: ["bubble", "menu"],
|
|
11
|
+
enabledWhen: ["notInCode"]
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
id: "format.italic",
|
|
15
|
+
label: "Italic",
|
|
16
|
+
group: "Format",
|
|
17
|
+
shortcut: "Mod+I",
|
|
18
|
+
surfaces: ["bubble", "menu"],
|
|
19
|
+
enabledWhen: ["notInCode"]
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
id: "format.strikethrough",
|
|
23
|
+
label: "Strikethrough",
|
|
24
|
+
group: "Format",
|
|
25
|
+
shortcut: "Mod+Shift+X",
|
|
26
|
+
surfaces: ["bubble", "menu"],
|
|
27
|
+
enabledWhen: ["notInCode"]
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
id: "format.code",
|
|
31
|
+
label: "Inline Code",
|
|
32
|
+
group: "Format",
|
|
33
|
+
shortcut: "Mod+E",
|
|
34
|
+
surfaces: ["bubble", "menu"]
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
id: "format.link",
|
|
38
|
+
label: "Link\u2026",
|
|
39
|
+
group: "Format",
|
|
40
|
+
shortcut: "Mod+K",
|
|
41
|
+
surfaces: ["bubble", "menu"],
|
|
42
|
+
params: {
|
|
43
|
+
type: "object",
|
|
44
|
+
properties: {
|
|
45
|
+
url: { type: ["string", "null"] }
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
id: "format.heading",
|
|
51
|
+
label: "Heading",
|
|
52
|
+
group: "Block",
|
|
53
|
+
surfaces: ["bubble", "menu"],
|
|
54
|
+
params: {
|
|
55
|
+
type: "object",
|
|
56
|
+
properties: {
|
|
57
|
+
level: { type: "integer", minimum: 1, maximum: 6 }
|
|
58
|
+
},
|
|
59
|
+
required: ["level"]
|
|
60
|
+
},
|
|
61
|
+
shortcuts: {
|
|
62
|
+
"level=1": "Mod+Alt+1",
|
|
63
|
+
"level=2": "Mod+Alt+2",
|
|
64
|
+
"level=3": "Mod+Alt+3"
|
|
65
|
+
}
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
id: "format.paragraph",
|
|
69
|
+
label: "Paragraph",
|
|
70
|
+
group: "Block",
|
|
71
|
+
shortcut: "Mod+Alt+0",
|
|
72
|
+
surfaces: ["menu"]
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
id: "format.bulletList",
|
|
76
|
+
label: "Bullet List",
|
|
77
|
+
group: "Block",
|
|
78
|
+
shortcut: "Mod+Shift+8",
|
|
79
|
+
surfaces: ["bubble", "menu"]
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
id: "format.numberedList",
|
|
83
|
+
label: "Numbered List",
|
|
84
|
+
group: "Block",
|
|
85
|
+
shortcut: "Mod+Shift+7",
|
|
86
|
+
surfaces: ["bubble", "menu"]
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
id: "format.taskList",
|
|
90
|
+
label: "To-do List",
|
|
91
|
+
group: "Block",
|
|
92
|
+
shortcut: "Mod+Shift+9",
|
|
93
|
+
surfaces: ["menu"]
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
id: "format.quote",
|
|
97
|
+
label: "Quote",
|
|
98
|
+
group: "Block",
|
|
99
|
+
shortcut: "Mod+Shift+.",
|
|
100
|
+
surfaces: ["bubble", "menu"]
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
id: "format.codeBlock",
|
|
104
|
+
label: "Code Block",
|
|
105
|
+
group: "Block",
|
|
106
|
+
shortcut: "Mod+Alt+C",
|
|
107
|
+
surfaces: ["bubble", "menu"],
|
|
108
|
+
params: {
|
|
109
|
+
type: "object",
|
|
110
|
+
properties: {
|
|
111
|
+
language: { type: ["string", "null"] }
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
id: "format.table",
|
|
117
|
+
label: "Table",
|
|
118
|
+
group: "Insert",
|
|
119
|
+
surfaces: ["bubble"],
|
|
120
|
+
enabledWhen: ["inTable"]
|
|
121
|
+
}
|
|
122
|
+
],
|
|
123
|
+
codeLanguages: [
|
|
124
|
+
{ id: "javascript", label: "JavaScript", shortLabel: "JS" },
|
|
125
|
+
{ id: "swift", label: "Swift" },
|
|
126
|
+
{ id: "python", label: "Python" },
|
|
127
|
+
{ id: "html", label: "HTML" },
|
|
128
|
+
{ id: "css", label: "CSS" },
|
|
129
|
+
{ id: "json", label: "JSON" },
|
|
130
|
+
{ id: "bash", label: "Bash" }
|
|
131
|
+
]
|
|
132
|
+
};
|
|
133
|
+
|
|
134
|
+
// src/commands/format.ts
|
|
135
|
+
function formatCommandsFor(surface, manifest = manifest_default) {
|
|
136
|
+
return manifest.commands.filter((cmd) => cmd.surfaces?.includes(surface));
|
|
137
|
+
}
|
|
138
|
+
function createFormatCommands(editor, options = {}) {
|
|
139
|
+
const manifest = options.manifest ?? manifest_default;
|
|
140
|
+
const prefix = options.prefix ?? "format.";
|
|
141
|
+
const scope = options.scope ? { scope: options.scope } : {};
|
|
142
|
+
const shouldFocus = options.focus ?? true;
|
|
143
|
+
const withFocus = () => {
|
|
144
|
+
return shouldFocus ? editor.chain().focus() : editor.chain();
|
|
145
|
+
};
|
|
146
|
+
return manifest.commands.map((cmdDef) => {
|
|
147
|
+
const canonicalId = cmdDef.id.startsWith("format.") ? cmdDef.id.slice("format.".length) : cmdDef.id;
|
|
148
|
+
const id = `${prefix}${canonicalId}`;
|
|
149
|
+
let run;
|
|
150
|
+
let enabled;
|
|
151
|
+
switch (canonicalId) {
|
|
152
|
+
case "bold":
|
|
153
|
+
enabled = () => editor.can().toggleBold() ? true : "Cannot toggle bold at current selection.";
|
|
154
|
+
run = () => withFocus().toggleBold().run();
|
|
155
|
+
break;
|
|
156
|
+
case "italic":
|
|
157
|
+
enabled = () => editor.can().toggleItalic() ? true : "Cannot toggle italic at current selection.";
|
|
158
|
+
run = () => withFocus().toggleItalic().run();
|
|
159
|
+
break;
|
|
160
|
+
case "strikethrough":
|
|
161
|
+
enabled = () => editor.can().toggleStrike() ? true : "Cannot toggle strikethrough at current selection.";
|
|
162
|
+
run = () => withFocus().toggleStrike().run();
|
|
163
|
+
break;
|
|
164
|
+
case "code":
|
|
165
|
+
enabled = () => editor.can().toggleCode() ? true : "Cannot toggle inline code at current selection.";
|
|
166
|
+
run = () => withFocus().toggleCode().run();
|
|
167
|
+
break;
|
|
168
|
+
case "link":
|
|
169
|
+
enabled = (_ctx, p) => {
|
|
170
|
+
if (p?.url) {
|
|
171
|
+
return editor.can().setLink({ href: p.url }) ? true : "Cannot set link at current selection.";
|
|
172
|
+
}
|
|
173
|
+
return editor.can().unsetLink() || editor.can().setLink({ href: "https://example.com" }) ? true : "Cannot modify link at current selection.";
|
|
174
|
+
};
|
|
175
|
+
run = (_ctx, p) => {
|
|
176
|
+
if (p?.url) {
|
|
177
|
+
return withFocus().setLink({ href: p.url }).run();
|
|
178
|
+
}
|
|
179
|
+
return withFocus().unsetLink().run();
|
|
180
|
+
};
|
|
181
|
+
break;
|
|
182
|
+
case "heading":
|
|
183
|
+
enabled = (_ctx, p) => {
|
|
184
|
+
const level = p?.level;
|
|
185
|
+
if (level) {
|
|
186
|
+
return editor.can().toggleHeading({ level }) ? true : `Cannot toggle heading level ${level}.`;
|
|
187
|
+
}
|
|
188
|
+
return true;
|
|
189
|
+
};
|
|
190
|
+
run = (_ctx, p) => {
|
|
191
|
+
return withFocus().toggleHeading({ level: p.level }).run();
|
|
192
|
+
};
|
|
193
|
+
break;
|
|
194
|
+
case "paragraph":
|
|
195
|
+
enabled = () => editor.can().setParagraph() ? true : "Cannot set paragraph at current selection.";
|
|
196
|
+
run = () => withFocus().setParagraph().run();
|
|
197
|
+
break;
|
|
198
|
+
case "bulletList":
|
|
199
|
+
enabled = () => editor.can().toggleBulletList() ? true : "Cannot toggle bullet list at current selection.";
|
|
200
|
+
run = () => withFocus().toggleBulletList().run();
|
|
201
|
+
break;
|
|
202
|
+
case "numberedList":
|
|
203
|
+
enabled = () => editor.can().toggleOrderedList() ? true : "Cannot toggle numbered list at current selection.";
|
|
204
|
+
run = () => withFocus().toggleOrderedList().run();
|
|
205
|
+
break;
|
|
206
|
+
case "taskList":
|
|
207
|
+
enabled = () => editor.can().toggleTaskList() ? true : "Cannot toggle task list at current selection.";
|
|
208
|
+
run = () => withFocus().toggleTaskList().run();
|
|
209
|
+
break;
|
|
210
|
+
case "quote":
|
|
211
|
+
enabled = () => editor.can().toggleBlockquote() ? true : "Cannot toggle blockquote at current selection.";
|
|
212
|
+
run = () => withFocus().toggleBlockquote().run();
|
|
213
|
+
break;
|
|
214
|
+
case "codeBlock":
|
|
215
|
+
enabled = (_ctx, p) => {
|
|
216
|
+
const lang = p?.language;
|
|
217
|
+
if (editor.isActive("codeBlock")) {
|
|
218
|
+
return true;
|
|
219
|
+
}
|
|
220
|
+
return editor.can().toggleCodeBlock(lang ? { language: lang } : void 0) ? true : "Cannot toggle code block at current selection.";
|
|
221
|
+
};
|
|
222
|
+
run = (_ctx, p) => {
|
|
223
|
+
const lang = p?.language;
|
|
224
|
+
if (editor.isActive("codeBlock")) {
|
|
225
|
+
if (p !== void 0 && "language" in p) {
|
|
226
|
+
return withFocus().updateAttributes("codeBlock", { language: lang ?? null }).run();
|
|
227
|
+
}
|
|
228
|
+
return withFocus().toggleCodeBlock().run();
|
|
229
|
+
}
|
|
230
|
+
return withFocus().toggleCodeBlock(lang ? { language: lang } : void 0).run();
|
|
231
|
+
};
|
|
232
|
+
break;
|
|
233
|
+
case "table":
|
|
234
|
+
enabled = () => editor.isActive("table") ? true : "Not inside a table.";
|
|
235
|
+
run = () => {
|
|
236
|
+
return true;
|
|
237
|
+
};
|
|
238
|
+
break;
|
|
239
|
+
default:
|
|
240
|
+
enabled = () => true;
|
|
241
|
+
run = () => true;
|
|
242
|
+
break;
|
|
243
|
+
}
|
|
244
|
+
return {
|
|
245
|
+
id,
|
|
246
|
+
label: cmdDef.label,
|
|
247
|
+
group: cmdDef.group,
|
|
248
|
+
shortcut: cmdDef.shortcut,
|
|
249
|
+
...cmdDef.params ? { params: cmdDef.params } : {},
|
|
250
|
+
...scope,
|
|
251
|
+
enabled,
|
|
252
|
+
run
|
|
253
|
+
};
|
|
254
|
+
});
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
export {
|
|
258
|
+
formatCommandsFor,
|
|
259
|
+
createFormatCommands
|
|
260
|
+
};
|
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }// ../markdown-conformance/manifest.json
|
|
2
|
+
var manifest_default = {
|
|
3
|
+
$schema: "./schema/manifest.schema.json",
|
|
4
|
+
commands: [
|
|
5
|
+
{
|
|
6
|
+
id: "format.bold",
|
|
7
|
+
label: "Bold",
|
|
8
|
+
group: "Format",
|
|
9
|
+
shortcut: "Mod+B",
|
|
10
|
+
surfaces: ["bubble", "menu"],
|
|
11
|
+
enabledWhen: ["notInCode"]
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
id: "format.italic",
|
|
15
|
+
label: "Italic",
|
|
16
|
+
group: "Format",
|
|
17
|
+
shortcut: "Mod+I",
|
|
18
|
+
surfaces: ["bubble", "menu"],
|
|
19
|
+
enabledWhen: ["notInCode"]
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
id: "format.strikethrough",
|
|
23
|
+
label: "Strikethrough",
|
|
24
|
+
group: "Format",
|
|
25
|
+
shortcut: "Mod+Shift+X",
|
|
26
|
+
surfaces: ["bubble", "menu"],
|
|
27
|
+
enabledWhen: ["notInCode"]
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
id: "format.code",
|
|
31
|
+
label: "Inline Code",
|
|
32
|
+
group: "Format",
|
|
33
|
+
shortcut: "Mod+E",
|
|
34
|
+
surfaces: ["bubble", "menu"]
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
id: "format.link",
|
|
38
|
+
label: "Link\u2026",
|
|
39
|
+
group: "Format",
|
|
40
|
+
shortcut: "Mod+K",
|
|
41
|
+
surfaces: ["bubble", "menu"],
|
|
42
|
+
params: {
|
|
43
|
+
type: "object",
|
|
44
|
+
properties: {
|
|
45
|
+
url: { type: ["string", "null"] }
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
id: "format.heading",
|
|
51
|
+
label: "Heading",
|
|
52
|
+
group: "Block",
|
|
53
|
+
surfaces: ["bubble", "menu"],
|
|
54
|
+
params: {
|
|
55
|
+
type: "object",
|
|
56
|
+
properties: {
|
|
57
|
+
level: { type: "integer", minimum: 1, maximum: 6 }
|
|
58
|
+
},
|
|
59
|
+
required: ["level"]
|
|
60
|
+
},
|
|
61
|
+
shortcuts: {
|
|
62
|
+
"level=1": "Mod+Alt+1",
|
|
63
|
+
"level=2": "Mod+Alt+2",
|
|
64
|
+
"level=3": "Mod+Alt+3"
|
|
65
|
+
}
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
id: "format.paragraph",
|
|
69
|
+
label: "Paragraph",
|
|
70
|
+
group: "Block",
|
|
71
|
+
shortcut: "Mod+Alt+0",
|
|
72
|
+
surfaces: ["menu"]
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
id: "format.bulletList",
|
|
76
|
+
label: "Bullet List",
|
|
77
|
+
group: "Block",
|
|
78
|
+
shortcut: "Mod+Shift+8",
|
|
79
|
+
surfaces: ["bubble", "menu"]
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
id: "format.numberedList",
|
|
83
|
+
label: "Numbered List",
|
|
84
|
+
group: "Block",
|
|
85
|
+
shortcut: "Mod+Shift+7",
|
|
86
|
+
surfaces: ["bubble", "menu"]
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
id: "format.taskList",
|
|
90
|
+
label: "To-do List",
|
|
91
|
+
group: "Block",
|
|
92
|
+
shortcut: "Mod+Shift+9",
|
|
93
|
+
surfaces: ["menu"]
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
id: "format.quote",
|
|
97
|
+
label: "Quote",
|
|
98
|
+
group: "Block",
|
|
99
|
+
shortcut: "Mod+Shift+.",
|
|
100
|
+
surfaces: ["bubble", "menu"]
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
id: "format.codeBlock",
|
|
104
|
+
label: "Code Block",
|
|
105
|
+
group: "Block",
|
|
106
|
+
shortcut: "Mod+Alt+C",
|
|
107
|
+
surfaces: ["bubble", "menu"],
|
|
108
|
+
params: {
|
|
109
|
+
type: "object",
|
|
110
|
+
properties: {
|
|
111
|
+
language: { type: ["string", "null"] }
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
id: "format.table",
|
|
117
|
+
label: "Table",
|
|
118
|
+
group: "Insert",
|
|
119
|
+
surfaces: ["bubble"],
|
|
120
|
+
enabledWhen: ["inTable"]
|
|
121
|
+
}
|
|
122
|
+
],
|
|
123
|
+
codeLanguages: [
|
|
124
|
+
{ id: "javascript", label: "JavaScript", shortLabel: "JS" },
|
|
125
|
+
{ id: "swift", label: "Swift" },
|
|
126
|
+
{ id: "python", label: "Python" },
|
|
127
|
+
{ id: "html", label: "HTML" },
|
|
128
|
+
{ id: "css", label: "CSS" },
|
|
129
|
+
{ id: "json", label: "JSON" },
|
|
130
|
+
{ id: "bash", label: "Bash" }
|
|
131
|
+
]
|
|
132
|
+
};
|
|
133
|
+
|
|
134
|
+
// src/commands/format.ts
|
|
135
|
+
function formatCommandsFor(surface, manifest = manifest_default) {
|
|
136
|
+
return manifest.commands.filter((cmd) => _optionalChain([cmd, 'access', _ => _.surfaces, 'optionalAccess', _2 => _2.includes, 'call', _3 => _3(surface)]));
|
|
137
|
+
}
|
|
138
|
+
function createFormatCommands(editor, options = {}) {
|
|
139
|
+
const manifest = _nullishCoalesce(options.manifest, () => ( manifest_default));
|
|
140
|
+
const prefix = _nullishCoalesce(options.prefix, () => ( "format."));
|
|
141
|
+
const scope = options.scope ? { scope: options.scope } : {};
|
|
142
|
+
const shouldFocus = _nullishCoalesce(options.focus, () => ( true));
|
|
143
|
+
const withFocus = () => {
|
|
144
|
+
return shouldFocus ? editor.chain().focus() : editor.chain();
|
|
145
|
+
};
|
|
146
|
+
return manifest.commands.map((cmdDef) => {
|
|
147
|
+
const canonicalId = cmdDef.id.startsWith("format.") ? cmdDef.id.slice("format.".length) : cmdDef.id;
|
|
148
|
+
const id = `${prefix}${canonicalId}`;
|
|
149
|
+
let run;
|
|
150
|
+
let enabled;
|
|
151
|
+
switch (canonicalId) {
|
|
152
|
+
case "bold":
|
|
153
|
+
enabled = () => editor.can().toggleBold() ? true : "Cannot toggle bold at current selection.";
|
|
154
|
+
run = () => withFocus().toggleBold().run();
|
|
155
|
+
break;
|
|
156
|
+
case "italic":
|
|
157
|
+
enabled = () => editor.can().toggleItalic() ? true : "Cannot toggle italic at current selection.";
|
|
158
|
+
run = () => withFocus().toggleItalic().run();
|
|
159
|
+
break;
|
|
160
|
+
case "strikethrough":
|
|
161
|
+
enabled = () => editor.can().toggleStrike() ? true : "Cannot toggle strikethrough at current selection.";
|
|
162
|
+
run = () => withFocus().toggleStrike().run();
|
|
163
|
+
break;
|
|
164
|
+
case "code":
|
|
165
|
+
enabled = () => editor.can().toggleCode() ? true : "Cannot toggle inline code at current selection.";
|
|
166
|
+
run = () => withFocus().toggleCode().run();
|
|
167
|
+
break;
|
|
168
|
+
case "link":
|
|
169
|
+
enabled = (_ctx, p) => {
|
|
170
|
+
if (_optionalChain([p, 'optionalAccess', _4 => _4.url])) {
|
|
171
|
+
return editor.can().setLink({ href: p.url }) ? true : "Cannot set link at current selection.";
|
|
172
|
+
}
|
|
173
|
+
return editor.can().unsetLink() || editor.can().setLink({ href: "https://example.com" }) ? true : "Cannot modify link at current selection.";
|
|
174
|
+
};
|
|
175
|
+
run = (_ctx, p) => {
|
|
176
|
+
if (_optionalChain([p, 'optionalAccess', _5 => _5.url])) {
|
|
177
|
+
return withFocus().setLink({ href: p.url }).run();
|
|
178
|
+
}
|
|
179
|
+
return withFocus().unsetLink().run();
|
|
180
|
+
};
|
|
181
|
+
break;
|
|
182
|
+
case "heading":
|
|
183
|
+
enabled = (_ctx, p) => {
|
|
184
|
+
const level = _optionalChain([p, 'optionalAccess', _6 => _6.level]);
|
|
185
|
+
if (level) {
|
|
186
|
+
return editor.can().toggleHeading({ level }) ? true : `Cannot toggle heading level ${level}.`;
|
|
187
|
+
}
|
|
188
|
+
return true;
|
|
189
|
+
};
|
|
190
|
+
run = (_ctx, p) => {
|
|
191
|
+
return withFocus().toggleHeading({ level: p.level }).run();
|
|
192
|
+
};
|
|
193
|
+
break;
|
|
194
|
+
case "paragraph":
|
|
195
|
+
enabled = () => editor.can().setParagraph() ? true : "Cannot set paragraph at current selection.";
|
|
196
|
+
run = () => withFocus().setParagraph().run();
|
|
197
|
+
break;
|
|
198
|
+
case "bulletList":
|
|
199
|
+
enabled = () => editor.can().toggleBulletList() ? true : "Cannot toggle bullet list at current selection.";
|
|
200
|
+
run = () => withFocus().toggleBulletList().run();
|
|
201
|
+
break;
|
|
202
|
+
case "numberedList":
|
|
203
|
+
enabled = () => editor.can().toggleOrderedList() ? true : "Cannot toggle numbered list at current selection.";
|
|
204
|
+
run = () => withFocus().toggleOrderedList().run();
|
|
205
|
+
break;
|
|
206
|
+
case "taskList":
|
|
207
|
+
enabled = () => editor.can().toggleTaskList() ? true : "Cannot toggle task list at current selection.";
|
|
208
|
+
run = () => withFocus().toggleTaskList().run();
|
|
209
|
+
break;
|
|
210
|
+
case "quote":
|
|
211
|
+
enabled = () => editor.can().toggleBlockquote() ? true : "Cannot toggle blockquote at current selection.";
|
|
212
|
+
run = () => withFocus().toggleBlockquote().run();
|
|
213
|
+
break;
|
|
214
|
+
case "codeBlock":
|
|
215
|
+
enabled = (_ctx, p) => {
|
|
216
|
+
const lang = _optionalChain([p, 'optionalAccess', _7 => _7.language]);
|
|
217
|
+
if (editor.isActive("codeBlock")) {
|
|
218
|
+
return true;
|
|
219
|
+
}
|
|
220
|
+
return editor.can().toggleCodeBlock(lang ? { language: lang } : void 0) ? true : "Cannot toggle code block at current selection.";
|
|
221
|
+
};
|
|
222
|
+
run = (_ctx, p) => {
|
|
223
|
+
const lang = _optionalChain([p, 'optionalAccess', _8 => _8.language]);
|
|
224
|
+
if (editor.isActive("codeBlock")) {
|
|
225
|
+
if (p !== void 0 && "language" in p) {
|
|
226
|
+
return withFocus().updateAttributes("codeBlock", { language: _nullishCoalesce(lang, () => ( null)) }).run();
|
|
227
|
+
}
|
|
228
|
+
return withFocus().toggleCodeBlock().run();
|
|
229
|
+
}
|
|
230
|
+
return withFocus().toggleCodeBlock(lang ? { language: lang } : void 0).run();
|
|
231
|
+
};
|
|
232
|
+
break;
|
|
233
|
+
case "table":
|
|
234
|
+
enabled = () => editor.isActive("table") ? true : "Not inside a table.";
|
|
235
|
+
run = () => {
|
|
236
|
+
return true;
|
|
237
|
+
};
|
|
238
|
+
break;
|
|
239
|
+
default:
|
|
240
|
+
enabled = () => true;
|
|
241
|
+
run = () => true;
|
|
242
|
+
break;
|
|
243
|
+
}
|
|
244
|
+
return {
|
|
245
|
+
id,
|
|
246
|
+
label: cmdDef.label,
|
|
247
|
+
group: cmdDef.group,
|
|
248
|
+
shortcut: cmdDef.shortcut,
|
|
249
|
+
...cmdDef.params ? { params: cmdDef.params } : {},
|
|
250
|
+
...scope,
|
|
251
|
+
enabled,
|
|
252
|
+
run
|
|
253
|
+
};
|
|
254
|
+
});
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
|
|
258
|
+
|
|
259
|
+
|
|
260
|
+
exports.formatCommandsFor = formatCommandsFor; exports.createFormatCommands = createFormatCommands;
|
|
@@ -7,7 +7,7 @@ var _chunkPY4GWSE2cjs = require('./chunk-PY4GWSE2.cjs');
|
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
|
|
10
|
-
var
|
|
10
|
+
var _chunkA3A5TI6Rcjs = require('./chunk-A3A5TI6R.cjs');
|
|
11
11
|
|
|
12
12
|
|
|
13
13
|
var _chunkWOFXZ3XUcjs = require('./chunk-WOFXZ3XU.cjs');
|
|
@@ -1307,12 +1307,12 @@ function videoEffectLayerKey(layer, width, height) {
|
|
|
1307
1307
|
}
|
|
1308
1308
|
function mixEffectPixels(a, b, k) {
|
|
1309
1309
|
if (k >= 1) return b;
|
|
1310
|
-
const out =
|
|
1310
|
+
const out = _chunkA3A5TI6Rcjs.createEffectPixels.call(void 0, a.width, a.height);
|
|
1311
1311
|
for (let i = 0; i < out.data.length; i++) out.data[i] = a.data[i] + (b.data[i] - a.data[i]) * k;
|
|
1312
1312
|
return out;
|
|
1313
1313
|
}
|
|
1314
1314
|
function overEffectPixels(base, top, opacity = 1) {
|
|
1315
|
-
const out =
|
|
1315
|
+
const out = _chunkA3A5TI6Rcjs.createEffectPixels.call(void 0, base.width, base.height);
|
|
1316
1316
|
const o = out.data;
|
|
1317
1317
|
const b = base.data;
|
|
1318
1318
|
const t = top.data;
|
|
@@ -1357,7 +1357,7 @@ var VideoEffectsEngine = (_class2 = class {
|
|
|
1357
1357
|
__init10() {this.generation = 0}
|
|
1358
1358
|
|
|
1359
1359
|
constructor(options = {}) {;_class2.prototype.__init5.call(this);_class2.prototype.__init6.call(this);_class2.prototype.__init7.call(this);_class2.prototype.__init8.call(this);_class2.prototype.__init9.call(this);_class2.prototype.__init10.call(this);
|
|
1360
|
-
this.slot = _nullishCoalesce(options.slot, () => ( new (0,
|
|
1360
|
+
this.slot = _nullishCoalesce(options.slot, () => ( new (0, _chunkA3A5TI6Rcjs.EffectsSlot)()));
|
|
1361
1361
|
this.maxEntries = _nullishCoalesce(options.maxEntries, () => ( 120));
|
|
1362
1362
|
this.toImage = _nullishCoalesce(options.toImage, () => ( defaultToImage));
|
|
1363
1363
|
this.pool = new (0, _chunkPY4GWSE2cjs.EffectRendererPool)({ maxRenderers: options.maxRenderers });
|
|
@@ -1499,7 +1499,7 @@ function checkVideoEffectPlace(d, place) {
|
|
|
1499
1499
|
if (d.kind === "motion" || !d.uses.some((u) => allowed.includes(u))) {
|
|
1500
1500
|
const where = place === "clip" ? "on a clip" : place === "transition" ? "as a transition" : "as an effect clip";
|
|
1501
1501
|
const instead = d.uses.includes("transition") ? "set_video_effect_transition" : d.uses.some((u) => VIDEO_EFFECT_PLACES.generator.includes(u)) ? "add_video_effect_clip" : d.uses.some((u) => u === "filter") ? "apply_effect" : null;
|
|
1502
|
-
throw new (0,
|
|
1502
|
+
throw new (0, _chunkA3A5TI6Rcjs.EffectUnsupportedError)(
|
|
1503
1503
|
`"${d.id}" (${d.name}) is a ${d.uses.join(" / ")} effect and cannot be used ${where}, which takes ${allowed.join(" or ")} effects${instead ? `; use ${instead} instead` : ""}. search_effects with use "${allowed[0]}" lists ones that fit.`,
|
|
1504
1504
|
d.id
|
|
1505
1505
|
);
|
|
@@ -1520,12 +1520,12 @@ function checkVideoEffectValues(d, values, options = {}) {
|
|
|
1520
1520
|
else if (type !== "number" && type !== "integer") errors.push({ path: `/${k}`, message: "only number controls can be keyframed." });
|
|
1521
1521
|
else for (const [i, key] of v.keys.entries()) for (const e of _chunkWOFXZ3XUcjs.validateJsonSchema.call(void 0, key.v, schema)) errors.push({ path: `/${k}/keys/${i}/v`, message: e.message });
|
|
1522
1522
|
}
|
|
1523
|
-
for (const e of
|
|
1523
|
+
for (const e of _chunkA3A5TI6Rcjs.effectValueErrors.call(void 0, d, plain)) {
|
|
1524
1524
|
const name = e.path.split("/")[1];
|
|
1525
1525
|
const about = name && _optionalChain([d, 'access', _46 => _46.controls, 'access', _47 => _47.properties, 'access', _48 => _48[name], 'optionalAccess', _49 => _49.description]);
|
|
1526
1526
|
errors.push(about ? { path: e.path, message: `${e.message} (${about})` } : e);
|
|
1527
1527
|
}
|
|
1528
|
-
if (errors.length) throw new (0,
|
|
1528
|
+
if (errors.length) throw new (0, _chunkA3A5TI6Rcjs.EffectControlError)(d.id, errors);
|
|
1529
1529
|
return { ..._nullishCoalesce(options.base, () => ( d.defaults)), ..._nullishCoalesce(values, () => ( {})) };
|
|
1530
1530
|
}
|
|
1531
1531
|
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { Editor } from '@tiptap/core';
|
|
2
|
+
import type { CommandParamsSchema, CommandSpec } from './registry.cjs';
|
|
3
|
+
import type { ShortcutInput } from './shortcuts.cjs';
|
|
4
|
+
export interface FormatManifestCommand {
|
|
5
|
+
id: string;
|
|
6
|
+
label: string;
|
|
7
|
+
group?: string;
|
|
8
|
+
shortcut?: ShortcutInput;
|
|
9
|
+
shortcuts?: Record<string, string>;
|
|
10
|
+
surfaces?: readonly string[];
|
|
11
|
+
params?: CommandParamsSchema;
|
|
12
|
+
enabledWhen?: readonly string[];
|
|
13
|
+
}
|
|
14
|
+
export interface CodeLanguageOption {
|
|
15
|
+
id: string;
|
|
16
|
+
label: string;
|
|
17
|
+
shortLabel?: string;
|
|
18
|
+
}
|
|
19
|
+
export interface FormatManifest {
|
|
20
|
+
$schema?: string;
|
|
21
|
+
commands: readonly FormatManifestCommand[];
|
|
22
|
+
codeLanguages?: readonly CodeLanguageOption[];
|
|
23
|
+
}
|
|
24
|
+
export interface FormatCommandOptions {
|
|
25
|
+
/** Custom manifest or subset; defaults to the full manifest from `@pixerate/markdown-conformance`. */
|
|
26
|
+
manifest?: FormatManifest;
|
|
27
|
+
/** Id prefix (default `format.`). Commands in manifest matching this prefix will be stripped/remapped appropriately. */
|
|
28
|
+
prefix?: string;
|
|
29
|
+
/** Scope the commands belong to, e.g. `editor`. */
|
|
30
|
+
scope?: string;
|
|
31
|
+
/** Focus the editor when a command runs (default `true`). */
|
|
32
|
+
focus?: boolean;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Returns commands from a format manifest filtered for a specific UI surface
|
|
36
|
+
* (e.g. `'bubble'`, `'menu'`, `'palette'`, or `'keyboardBar'`).
|
|
37
|
+
*/
|
|
38
|
+
export declare function formatCommandsFor(surface: 'bubble' | 'menu' | 'palette' | 'keyboardBar' | string, manifest?: FormatManifest): FormatManifestCommand[];
|
|
39
|
+
/**
|
|
40
|
+
* Creates format commands (`format.*`) registered from the format manifest in `@pixerate/markdown-conformance`.
|
|
41
|
+
* Commands can be placed in bubble menus, menus, keyboard bars, or palettes, or called programmatically by agent tools.
|
|
42
|
+
*/
|
|
43
|
+
export declare function createFormatCommands(editor: Editor, options?: FormatCommandOptions): CommandSpec[];
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { Editor } from '@tiptap/core';
|
|
2
|
+
import type { CommandParamsSchema, CommandSpec } from './registry.js';
|
|
3
|
+
import type { ShortcutInput } from './shortcuts.js';
|
|
4
|
+
export interface FormatManifestCommand {
|
|
5
|
+
id: string;
|
|
6
|
+
label: string;
|
|
7
|
+
group?: string;
|
|
8
|
+
shortcut?: ShortcutInput;
|
|
9
|
+
shortcuts?: Record<string, string>;
|
|
10
|
+
surfaces?: readonly string[];
|
|
11
|
+
params?: CommandParamsSchema;
|
|
12
|
+
enabledWhen?: readonly string[];
|
|
13
|
+
}
|
|
14
|
+
export interface CodeLanguageOption {
|
|
15
|
+
id: string;
|
|
16
|
+
label: string;
|
|
17
|
+
shortLabel?: string;
|
|
18
|
+
}
|
|
19
|
+
export interface FormatManifest {
|
|
20
|
+
$schema?: string;
|
|
21
|
+
commands: readonly FormatManifestCommand[];
|
|
22
|
+
codeLanguages?: readonly CodeLanguageOption[];
|
|
23
|
+
}
|
|
24
|
+
export interface FormatCommandOptions {
|
|
25
|
+
/** Custom manifest or subset; defaults to the full manifest from `@pixerate/markdown-conformance`. */
|
|
26
|
+
manifest?: FormatManifest;
|
|
27
|
+
/** Id prefix (default `format.`). Commands in manifest matching this prefix will be stripped/remapped appropriately. */
|
|
28
|
+
prefix?: string;
|
|
29
|
+
/** Scope the commands belong to, e.g. `editor`. */
|
|
30
|
+
scope?: string;
|
|
31
|
+
/** Focus the editor when a command runs (default `true`). */
|
|
32
|
+
focus?: boolean;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Returns commands from a format manifest filtered for a specific UI surface
|
|
36
|
+
* (e.g. `'bubble'`, `'menu'`, `'palette'`, or `'keyboardBar'`).
|
|
37
|
+
*/
|
|
38
|
+
export declare function formatCommandsFor(surface: 'bubble' | 'menu' | 'palette' | 'keyboardBar' | string, manifest?: FormatManifest): FormatManifestCommand[];
|
|
39
|
+
/**
|
|
40
|
+
* Creates format commands (`format.*`) registered from the format manifest in `@pixerate/markdown-conformance`.
|
|
41
|
+
* Commands can be placed in bubble menus, menus, keyboard bars, or palettes, or called programmatically by agent tools.
|
|
42
|
+
*/
|
|
43
|
+
export declare function createFormatCommands(editor: Editor, options?: FormatCommandOptions): CommandSpec[];
|