@uipath/apollo-react 4.63.0 → 4.64.0
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/canvas/components/StickyNoteNode/StickyNoteMedia.cjs +449 -0
- package/dist/canvas/components/StickyNoteNode/StickyNoteMedia.d.ts +45 -0
- package/dist/canvas/components/StickyNoteNode/StickyNoteMedia.d.ts.map +1 -0
- package/dist/canvas/components/StickyNoteNode/StickyNoteMedia.js +394 -0
- package/dist/canvas/components/StickyNoteNode/StickyNoteMediaDialog.cjs +379 -0
- package/dist/canvas/components/StickyNoteNode/StickyNoteMediaDialog.d.ts +8 -0
- package/dist/canvas/components/StickyNoteNode/StickyNoteMediaDialog.d.ts.map +1 -0
- package/dist/canvas/components/StickyNoteNode/StickyNoteMediaDialog.js +345 -0
- package/dist/canvas/components/StickyNoteNode/StickyNoteMediaMarkdown.cjs +272 -0
- package/dist/canvas/components/StickyNoteNode/StickyNoteMediaMarkdown.d.ts +18 -0
- package/dist/canvas/components/StickyNoteNode/StickyNoteMediaMarkdown.d.ts.map +1 -0
- package/dist/canvas/components/StickyNoteNode/StickyNoteMediaMarkdown.js +235 -0
- package/dist/canvas/components/StickyNoteNode/StickyNoteNode.cjs +130 -17
- package/dist/canvas/components/StickyNoteNode/StickyNoteNode.d.ts +2 -1
- package/dist/canvas/components/StickyNoteNode/StickyNoteNode.d.ts.map +1 -1
- package/dist/canvas/components/StickyNoteNode/StickyNoteNode.js +130 -17
- package/dist/canvas/locales/en.cjs +1 -1
- package/dist/canvas/locales/en.d.ts.map +1 -1
- package/dist/canvas/locales/en.js +1 -1
- package/dist/canvas/styles/tailwind.canvas.css +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,449 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __webpack_require__ = {};
|
|
3
|
+
(()=>{
|
|
4
|
+
__webpack_require__.d = (exports1, definition)=>{
|
|
5
|
+
for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: definition[key]
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
})();
|
|
11
|
+
(()=>{
|
|
12
|
+
__webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
|
|
13
|
+
})();
|
|
14
|
+
(()=>{
|
|
15
|
+
__webpack_require__.r = (exports1)=>{
|
|
16
|
+
if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
|
|
17
|
+
value: 'Module'
|
|
18
|
+
});
|
|
19
|
+
Object.defineProperty(exports1, '__esModule', {
|
|
20
|
+
value: true
|
|
21
|
+
});
|
|
22
|
+
};
|
|
23
|
+
})();
|
|
24
|
+
var __webpack_exports__ = {};
|
|
25
|
+
__webpack_require__.r(__webpack_exports__);
|
|
26
|
+
__webpack_require__.d(__webpack_exports__, {
|
|
27
|
+
findStickyNoteMediaAtSelection: ()=>findStickyNoteMediaAtSelection,
|
|
28
|
+
insertStickyNoteMedia: ()=>insertStickyNoteMedia,
|
|
29
|
+
parseStickyNoteMediaMarker: ()=>parseStickyNoteMediaMarker,
|
|
30
|
+
parseStickyNoteMediaSource: ()=>parseStickyNoteMediaSource,
|
|
31
|
+
parseStickyNoteMediaTokens: ()=>parseStickyNoteMediaTokens,
|
|
32
|
+
parseStickyNoteMediaUrl: ()=>parseStickyNoteMediaUrl,
|
|
33
|
+
replaceStickyNoteMedia: ()=>replaceStickyNoteMedia,
|
|
34
|
+
serializeStickyNoteMedia: ()=>serializeStickyNoteMedia
|
|
35
|
+
});
|
|
36
|
+
const YOUTUBE_VIDEO_ID = /^[A-Za-z0-9_-]{11}$/;
|
|
37
|
+
const YOUTUBE_HOSTS = new Set([
|
|
38
|
+
'youtube.com',
|
|
39
|
+
'www.youtube.com',
|
|
40
|
+
'm.youtube.com',
|
|
41
|
+
'music.youtube.com',
|
|
42
|
+
'youtu.be',
|
|
43
|
+
'www.youtu.be',
|
|
44
|
+
'youtube-nocookie.com',
|
|
45
|
+
'www.youtube-nocookie.com'
|
|
46
|
+
]);
|
|
47
|
+
const PAGE_BASED_VIDEO_HOSTS = new Set([
|
|
48
|
+
'vimeo.com',
|
|
49
|
+
'www.vimeo.com',
|
|
50
|
+
'player.vimeo.com',
|
|
51
|
+
'loom.com',
|
|
52
|
+
'www.loom.com'
|
|
53
|
+
]);
|
|
54
|
+
const MEDIA_TITLE_PREFIX = 'sticky-note-media';
|
|
55
|
+
const MEDIA_TITLE_PATTERN = /^sticky-note-media;kind=(image|youtube|publicVideo);layout=(natural-width|full-width)$/;
|
|
56
|
+
const FLOW_MEDIA_TITLE_PATTERN = /^flow-media:(image|youtube|video):(natural-width|full-width)$/;
|
|
57
|
+
const LEGACY_FULL_WIDTH_IMAGE_TITLE = 'flow-full-width';
|
|
58
|
+
function parseHttpsUrl(rawUrl) {
|
|
59
|
+
let url;
|
|
60
|
+
try {
|
|
61
|
+
url = new URL(rawUrl.trim());
|
|
62
|
+
} catch {
|
|
63
|
+
return {
|
|
64
|
+
ok: false,
|
|
65
|
+
error: 'invalid-url'
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
if ('https:' !== url.protocol) return {
|
|
69
|
+
ok: false,
|
|
70
|
+
error: 'https-required'
|
|
71
|
+
};
|
|
72
|
+
if (url.username || url.password) return {
|
|
73
|
+
ok: false,
|
|
74
|
+
error: 'invalid-url'
|
|
75
|
+
};
|
|
76
|
+
return {
|
|
77
|
+
ok: true,
|
|
78
|
+
url
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
function youtubeVideoId(url) {
|
|
82
|
+
const hostname = url.hostname.toLowerCase();
|
|
83
|
+
let candidate = null;
|
|
84
|
+
if ('youtu.be' === hostname || 'www.youtu.be' === hostname) candidate = url.pathname.split('/').filter(Boolean)[0] ?? null;
|
|
85
|
+
else if ('/watch' === url.pathname) candidate = url.searchParams.get('v');
|
|
86
|
+
else {
|
|
87
|
+
const [kind, id] = url.pathname.split('/').filter(Boolean);
|
|
88
|
+
if ('embed' === kind || 'live' === kind || 'shorts' === kind) candidate = id ?? null;
|
|
89
|
+
}
|
|
90
|
+
return candidate && YOUTUBE_VIDEO_ID.test(candidate) ? candidate : null;
|
|
91
|
+
}
|
|
92
|
+
function parseStickyNoteMediaUrl(rawUrl, mediaType, options = {}) {
|
|
93
|
+
const parsed = parseHttpsUrl(rawUrl);
|
|
94
|
+
if (!parsed.ok) return parsed;
|
|
95
|
+
const { url } = parsed;
|
|
96
|
+
const hostname = url.hostname.toLowerCase();
|
|
97
|
+
const fullWidth = options.fullWidth ?? false;
|
|
98
|
+
if ('image' === mediaType) {
|
|
99
|
+
if (YOUTUBE_HOSTS.has(hostname)) return {
|
|
100
|
+
ok: false,
|
|
101
|
+
error: 'invalid-url'
|
|
102
|
+
};
|
|
103
|
+
return {
|
|
104
|
+
ok: true,
|
|
105
|
+
value: {
|
|
106
|
+
kind: 'image',
|
|
107
|
+
url: url.toString(),
|
|
108
|
+
alt: options.alt ?? '',
|
|
109
|
+
fullWidth
|
|
110
|
+
}
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
if (YOUTUBE_HOSTS.has(hostname)) {
|
|
114
|
+
const videoId = youtubeVideoId(url);
|
|
115
|
+
return videoId ? {
|
|
116
|
+
ok: true,
|
|
117
|
+
value: {
|
|
118
|
+
kind: 'youtube',
|
|
119
|
+
videoId,
|
|
120
|
+
fullWidth
|
|
121
|
+
}
|
|
122
|
+
} : {
|
|
123
|
+
ok: false,
|
|
124
|
+
error: 'invalid-youtube-url'
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
if (hostname.includes('youtube.') || hostname.includes('youtu.be')) return {
|
|
128
|
+
ok: false,
|
|
129
|
+
error: 'invalid-url'
|
|
130
|
+
};
|
|
131
|
+
if (PAGE_BASED_VIDEO_HOSTS.has(hostname)) return {
|
|
132
|
+
ok: false,
|
|
133
|
+
error: 'unsupported-video-url'
|
|
134
|
+
};
|
|
135
|
+
return {
|
|
136
|
+
ok: true,
|
|
137
|
+
value: {
|
|
138
|
+
kind: 'publicVideo',
|
|
139
|
+
url: url.toString(),
|
|
140
|
+
fullWidth
|
|
141
|
+
}
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
function escapeMarkdownLabel(value) {
|
|
145
|
+
return value.replace(/\r\n?|\n/g, ' ').replace(/\\/g, '\\\\').replace(/\[/g, '\\[').replace(/\]/g, '\\]');
|
|
146
|
+
}
|
|
147
|
+
function serializeStickyNoteMedia(media) {
|
|
148
|
+
const layout = media.fullWidth ? 'full-width' : 'natural-width';
|
|
149
|
+
const title = `${MEDIA_TITLE_PREFIX};kind=${media.kind};layout=${layout}`;
|
|
150
|
+
if ('youtube' === media.kind) return ``;
|
|
151
|
+
const label = 'image' === media.kind ? escapeMarkdownLabel(media.alt) : '';
|
|
152
|
+
return `.toString()}> "${title}")`;
|
|
153
|
+
}
|
|
154
|
+
function parseStickyNoteMediaMarker(title) {
|
|
155
|
+
if (title === LEGACY_FULL_WIDTH_IMAGE_TITLE) return {
|
|
156
|
+
kind: 'image',
|
|
157
|
+
fullWidth: true
|
|
158
|
+
};
|
|
159
|
+
const marker = title?.match(MEDIA_TITLE_PATTERN);
|
|
160
|
+
const flowMarker = title?.match(FLOW_MEDIA_TITLE_PATTERN);
|
|
161
|
+
const kind = marker?.[1] ?? flowMarker?.[1];
|
|
162
|
+
const layout = marker?.[2] ?? flowMarker?.[2];
|
|
163
|
+
if (!kind || !layout) return null;
|
|
164
|
+
const normalizedKind = 'video' === kind ? 'publicVideo' : 'image' === kind || 'youtube' === kind || 'publicVideo' === kind ? kind : null;
|
|
165
|
+
if (!normalizedKind) return null;
|
|
166
|
+
return {
|
|
167
|
+
kind: normalizedKind,
|
|
168
|
+
fullWidth: 'full-width' === layout
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
function mediaTypeForKind(kind) {
|
|
172
|
+
return 'image' === kind ? 'image' : 'video';
|
|
173
|
+
}
|
|
174
|
+
function parseStickyNoteMediaSource(source, alt = '', title) {
|
|
175
|
+
const marker = parseStickyNoteMediaMarker(title);
|
|
176
|
+
if (!marker) return null;
|
|
177
|
+
const result = parseStickyNoteMediaUrl(source, mediaTypeForKind(marker.kind), {
|
|
178
|
+
alt,
|
|
179
|
+
fullWidth: marker.fullWidth
|
|
180
|
+
});
|
|
181
|
+
return result.ok && result.value.kind === marker.kind ? result.value : null;
|
|
182
|
+
}
|
|
183
|
+
function normalizedRange(length, selectionStart, selectionEnd) {
|
|
184
|
+
const start = Math.max(0, Math.min(length, Math.min(selectionStart, selectionEnd)));
|
|
185
|
+
const end = Math.max(0, Math.min(length, Math.max(selectionStart, selectionEnd)));
|
|
186
|
+
return [
|
|
187
|
+
start,
|
|
188
|
+
end
|
|
189
|
+
];
|
|
190
|
+
}
|
|
191
|
+
function separatorAfter(prefix) {
|
|
192
|
+
if (!prefix || prefix.endsWith('\n\n')) return '';
|
|
193
|
+
return prefix.endsWith('\n') ? '\n' : '\n\n';
|
|
194
|
+
}
|
|
195
|
+
function separatorBefore(suffix) {
|
|
196
|
+
if (!suffix || suffix.startsWith('\n\n')) return '';
|
|
197
|
+
return suffix.startsWith('\n') ? '\n' : '\n\n';
|
|
198
|
+
}
|
|
199
|
+
function insertStickyNoteMedia(currentValue, block, selection) {
|
|
200
|
+
const selectionIsCurrent = selection?.value === currentValue;
|
|
201
|
+
const [start, end] = selectionIsCurrent ? normalizedRange(currentValue.length, selection.selectionStart, selection.selectionEnd) : [
|
|
202
|
+
currentValue.length,
|
|
203
|
+
currentValue.length
|
|
204
|
+
];
|
|
205
|
+
const before = currentValue.slice(0, start);
|
|
206
|
+
const after = currentValue.slice(end);
|
|
207
|
+
const leadingSeparator = separatorAfter(before);
|
|
208
|
+
const trailingSeparator = separatorBefore(after);
|
|
209
|
+
const value = `${before}${leadingSeparator}${block}${trailingSeparator}${after}`;
|
|
210
|
+
const caret = before.length + leadingSeparator.length + block.length + trailingSeparator.length;
|
|
211
|
+
return {
|
|
212
|
+
value,
|
|
213
|
+
selectionStart: caret,
|
|
214
|
+
selectionEnd: caret
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
function replaceTextRange(currentValue, selectionStart, selectionEnd, replacement) {
|
|
218
|
+
const [start, end] = normalizedRange(currentValue.length, selectionStart, selectionEnd);
|
|
219
|
+
const value = currentValue.slice(0, start) + replacement + currentValue.slice(end);
|
|
220
|
+
const caret = start + replacement.length;
|
|
221
|
+
return {
|
|
222
|
+
value,
|
|
223
|
+
selectionStart: caret,
|
|
224
|
+
selectionEnd: caret
|
|
225
|
+
};
|
|
226
|
+
}
|
|
227
|
+
function unescapeMarkdownLabel(value) {
|
|
228
|
+
return value.replace(/\\(.)/g, (match, escaped)=>'\\' === escaped || '[' === escaped || ']' === escaped ? escaped : match);
|
|
229
|
+
}
|
|
230
|
+
function fencedCodeRanges(content) {
|
|
231
|
+
const ranges = [];
|
|
232
|
+
let openFence = null;
|
|
233
|
+
let lineStart = 0;
|
|
234
|
+
while(lineStart < content.length){
|
|
235
|
+
let lineEnd = lineStart;
|
|
236
|
+
while(lineEnd < content.length && '\n' !== content[lineEnd] && '\r' !== content[lineEnd])lineEnd += 1;
|
|
237
|
+
let nextLineStart = lineEnd;
|
|
238
|
+
if ('\r' === content[nextLineStart]) nextLineStart += 1;
|
|
239
|
+
if ('\n' === content[nextLineStart]) nextLineStart += 1;
|
|
240
|
+
const line = content.slice(lineStart, lineEnd);
|
|
241
|
+
if (openFence) {
|
|
242
|
+
const closingFence = new RegExp(`^ {0,3}${openFence.marker}{${openFence.length},}[ \\t]*$`);
|
|
243
|
+
if (closingFence.test(line)) {
|
|
244
|
+
ranges.push({
|
|
245
|
+
start: openFence.start,
|
|
246
|
+
end: nextLineStart
|
|
247
|
+
});
|
|
248
|
+
openFence = null;
|
|
249
|
+
}
|
|
250
|
+
} else {
|
|
251
|
+
const openingFence = /^ {0,3}(`{3,}|~{3,})/.exec(line);
|
|
252
|
+
const fence = openingFence?.[1];
|
|
253
|
+
const marker = fence?.[0];
|
|
254
|
+
const info = openingFence ? line.slice((openingFence.index ?? 0) + openingFence[0].length) : '';
|
|
255
|
+
if (openingFence && fence && ('`' === marker || '~' === marker) && !('`' === marker && info.includes('`'))) openFence = {
|
|
256
|
+
marker,
|
|
257
|
+
length: fence.length,
|
|
258
|
+
start: lineStart
|
|
259
|
+
};
|
|
260
|
+
}
|
|
261
|
+
lineStart = nextLineStart;
|
|
262
|
+
}
|
|
263
|
+
if (openFence) ranges.push({
|
|
264
|
+
start: openFence.start,
|
|
265
|
+
end: content.length
|
|
266
|
+
});
|
|
267
|
+
return ranges;
|
|
268
|
+
}
|
|
269
|
+
function isBackslashEscaped(content, index, segmentStart) {
|
|
270
|
+
let count = 0;
|
|
271
|
+
for(let cursor = index - 1; cursor >= segmentStart && '\\' === content[cursor]; cursor -= 1)count += 1;
|
|
272
|
+
return count % 2 === 1;
|
|
273
|
+
}
|
|
274
|
+
function inlineCodeRanges(content, start, end) {
|
|
275
|
+
const ranges = [];
|
|
276
|
+
let index = start;
|
|
277
|
+
while(index < end){
|
|
278
|
+
if ('`' !== content[index] || isBackslashEscaped(content, index, start)) {
|
|
279
|
+
index += 1;
|
|
280
|
+
continue;
|
|
281
|
+
}
|
|
282
|
+
let openingEnd = index + 1;
|
|
283
|
+
while(openingEnd < end && '`' === content[openingEnd])openingEnd += 1;
|
|
284
|
+
const markerLength = openingEnd - index;
|
|
285
|
+
let closingStart = openingEnd;
|
|
286
|
+
let found = false;
|
|
287
|
+
while(closingStart < end){
|
|
288
|
+
closingStart = content.indexOf('`', closingStart);
|
|
289
|
+
if (closingStart < 0 || closingStart >= end) break;
|
|
290
|
+
let closingEnd = closingStart + 1;
|
|
291
|
+
while(closingEnd < end && '`' === content[closingEnd])closingEnd += 1;
|
|
292
|
+
if (closingEnd - closingStart === markerLength) {
|
|
293
|
+
ranges.push({
|
|
294
|
+
start: index,
|
|
295
|
+
end: closingEnd
|
|
296
|
+
});
|
|
297
|
+
index = closingEnd;
|
|
298
|
+
found = true;
|
|
299
|
+
break;
|
|
300
|
+
}
|
|
301
|
+
closingStart = closingEnd;
|
|
302
|
+
}
|
|
303
|
+
if (!found) index = openingEnd;
|
|
304
|
+
}
|
|
305
|
+
return ranges;
|
|
306
|
+
}
|
|
307
|
+
function markdownCodeRanges(content) {
|
|
308
|
+
const fencedRanges = fencedCodeRanges(content);
|
|
309
|
+
const ranges = [
|
|
310
|
+
...fencedRanges
|
|
311
|
+
];
|
|
312
|
+
let segmentStart = 0;
|
|
313
|
+
for (const fencedRange of fencedRanges){
|
|
314
|
+
ranges.push(...inlineCodeRanges(content, segmentStart, fencedRange.start));
|
|
315
|
+
segmentStart = fencedRange.end;
|
|
316
|
+
}
|
|
317
|
+
ranges.push(...inlineCodeRanges(content, segmentStart, content.length));
|
|
318
|
+
return ranges.sort((left, right)=>left.start - right.start);
|
|
319
|
+
}
|
|
320
|
+
function isLineBreak(character) {
|
|
321
|
+
return '\n' === character || '\r' === character;
|
|
322
|
+
}
|
|
323
|
+
function readMarkdownImageToken(content, start) {
|
|
324
|
+
const failedAt = (index)=>({
|
|
325
|
+
nextIndex: Math.max(start + 2, index)
|
|
326
|
+
});
|
|
327
|
+
const nestedCandidateAt = (index)=>'!' === content[index] && '[' === content[index + 1];
|
|
328
|
+
let index = start + 2;
|
|
329
|
+
const altStart = index;
|
|
330
|
+
while(index < content.length && ']' !== content[index]){
|
|
331
|
+
if (nestedCandidateAt(index)) return failedAt(index);
|
|
332
|
+
if (isLineBreak(content[index])) return failedAt(index + 1);
|
|
333
|
+
if ('\\' === content[index]) index += 1;
|
|
334
|
+
index += 1;
|
|
335
|
+
}
|
|
336
|
+
if (']' !== content[index] || '(' !== content[index + 1]) return failedAt(index + 1);
|
|
337
|
+
const alt = content.slice(altStart, index);
|
|
338
|
+
index += 2;
|
|
339
|
+
let source = '';
|
|
340
|
+
if ('<' === content[index]) {
|
|
341
|
+
const sourceStart = ++index;
|
|
342
|
+
while(index < content.length && '>' !== content[index]){
|
|
343
|
+
if (nestedCandidateAt(index)) return failedAt(index);
|
|
344
|
+
if (isLineBreak(content[index])) return failedAt(index + 1);
|
|
345
|
+
index += 1;
|
|
346
|
+
}
|
|
347
|
+
if ('>' !== content[index]) return failedAt(index);
|
|
348
|
+
source = content.slice(sourceStart, index);
|
|
349
|
+
index += 1;
|
|
350
|
+
} else {
|
|
351
|
+
const sourceStart = index;
|
|
352
|
+
while(index < content.length && ')' !== content[index] && ' ' !== content[index] && '\t' !== content[index] && !isLineBreak(content[index])){
|
|
353
|
+
if (nestedCandidateAt(index)) return failedAt(index);
|
|
354
|
+
index += 1;
|
|
355
|
+
}
|
|
356
|
+
source = content.slice(sourceStart, index);
|
|
357
|
+
}
|
|
358
|
+
if (!source) return failedAt(index + 1);
|
|
359
|
+
while(' ' === content[index] || '\t' === content[index])index += 1;
|
|
360
|
+
let title;
|
|
361
|
+
if ('"' === content[index]) {
|
|
362
|
+
const titleStart = ++index;
|
|
363
|
+
while(index < content.length && '"' !== content[index]){
|
|
364
|
+
if (nestedCandidateAt(index)) return failedAt(index);
|
|
365
|
+
if (isLineBreak(content[index])) return failedAt(index + 1);
|
|
366
|
+
if ('\\' === content[index]) index += 1;
|
|
367
|
+
index += 1;
|
|
368
|
+
}
|
|
369
|
+
if ('"' !== content[index]) return failedAt(index);
|
|
370
|
+
title = content.slice(titleStart, index);
|
|
371
|
+
index += 1;
|
|
372
|
+
while(' ' === content[index] || '\t' === content[index])index += 1;
|
|
373
|
+
}
|
|
374
|
+
if (')' !== content[index]) return failedAt(index + 1);
|
|
375
|
+
const end = index + 1;
|
|
376
|
+
return {
|
|
377
|
+
token: {
|
|
378
|
+
alt,
|
|
379
|
+
source,
|
|
380
|
+
title,
|
|
381
|
+
end
|
|
382
|
+
},
|
|
383
|
+
nextIndex: end
|
|
384
|
+
};
|
|
385
|
+
}
|
|
386
|
+
function parseStickyNoteMediaTokens(content) {
|
|
387
|
+
const tokens = [];
|
|
388
|
+
const codeRanges = markdownCodeRanges(content);
|
|
389
|
+
let codeRangeIndex = 0;
|
|
390
|
+
let cursor = 0;
|
|
391
|
+
while(cursor < content.length){
|
|
392
|
+
const start = content.indexOf('![', cursor);
|
|
393
|
+
if (start < 0) break;
|
|
394
|
+
while(codeRanges[codeRangeIndex] && (codeRanges[codeRangeIndex]?.end ?? 1 / 0) <= start)codeRangeIndex += 1;
|
|
395
|
+
const codeRange = codeRanges[codeRangeIndex];
|
|
396
|
+
if (codeRange && start >= codeRange.start && start < codeRange.end) {
|
|
397
|
+
cursor = Math.max(start + 2, codeRange.end);
|
|
398
|
+
continue;
|
|
399
|
+
}
|
|
400
|
+
const parsed = readMarkdownImageToken(content, start);
|
|
401
|
+
cursor = parsed.nextIndex;
|
|
402
|
+
if (!parsed.token) continue;
|
|
403
|
+
const media = parseStickyNoteMediaSource(parsed.token.source, unescapeMarkdownLabel(parsed.token.alt), parsed.token.title);
|
|
404
|
+
if (media) tokens.push({
|
|
405
|
+
media,
|
|
406
|
+
start,
|
|
407
|
+
end: parsed.token.end
|
|
408
|
+
});
|
|
409
|
+
}
|
|
410
|
+
return tokens;
|
|
411
|
+
}
|
|
412
|
+
function findStickyNoteMediaAtSelection(content, selectionStart, selectionEnd) {
|
|
413
|
+
const [start, end] = normalizedRange(content.length, selectionStart, selectionEnd);
|
|
414
|
+
return parseStickyNoteMediaTokens(content).find((token)=>start === end ? start >= token.start && start < token.end : start < token.end && end > token.start) ?? null;
|
|
415
|
+
}
|
|
416
|
+
function sameSource(left, right) {
|
|
417
|
+
if (left.kind !== right.kind) return false;
|
|
418
|
+
if ('image' === left.kind && 'image' === right.kind) return left.url === right.url;
|
|
419
|
+
if ('youtube' === left.kind && 'youtube' === right.kind) return left.videoId === right.videoId;
|
|
420
|
+
return 'publicVideo' === left.kind && 'publicVideo' === right.kind && left.url === right.url;
|
|
421
|
+
}
|
|
422
|
+
function replaceStickyNoteMedia(content, original, replacement) {
|
|
423
|
+
let closest = null;
|
|
424
|
+
for (const token of parseStickyNoteMediaTokens(content))if (sameSource(token.media, original.media)) {
|
|
425
|
+
if (!closest || Math.abs(token.start - original.start) < Math.abs(closest.start - original.start)) closest = token;
|
|
426
|
+
}
|
|
427
|
+
return closest ? replaceTextRange(content, closest.start, closest.end, replacement) : null;
|
|
428
|
+
}
|
|
429
|
+
exports.findStickyNoteMediaAtSelection = __webpack_exports__.findStickyNoteMediaAtSelection;
|
|
430
|
+
exports.insertStickyNoteMedia = __webpack_exports__.insertStickyNoteMedia;
|
|
431
|
+
exports.parseStickyNoteMediaMarker = __webpack_exports__.parseStickyNoteMediaMarker;
|
|
432
|
+
exports.parseStickyNoteMediaSource = __webpack_exports__.parseStickyNoteMediaSource;
|
|
433
|
+
exports.parseStickyNoteMediaTokens = __webpack_exports__.parseStickyNoteMediaTokens;
|
|
434
|
+
exports.parseStickyNoteMediaUrl = __webpack_exports__.parseStickyNoteMediaUrl;
|
|
435
|
+
exports.replaceStickyNoteMedia = __webpack_exports__.replaceStickyNoteMedia;
|
|
436
|
+
exports.serializeStickyNoteMedia = __webpack_exports__.serializeStickyNoteMedia;
|
|
437
|
+
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
438
|
+
"findStickyNoteMediaAtSelection",
|
|
439
|
+
"insertStickyNoteMedia",
|
|
440
|
+
"parseStickyNoteMediaMarker",
|
|
441
|
+
"parseStickyNoteMediaSource",
|
|
442
|
+
"parseStickyNoteMediaTokens",
|
|
443
|
+
"parseStickyNoteMediaUrl",
|
|
444
|
+
"replaceStickyNoteMedia",
|
|
445
|
+
"serializeStickyNoteMedia"
|
|
446
|
+
].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
|
|
447
|
+
Object.defineProperty(exports, '__esModule', {
|
|
448
|
+
value: true
|
|
449
|
+
});
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { TextSelection } from './StickyNoteNode.types';
|
|
2
|
+
export type StickyNoteMediaType = 'image' | 'video';
|
|
3
|
+
export type StickyNoteMedia = {
|
|
4
|
+
kind: 'image';
|
|
5
|
+
url: string;
|
|
6
|
+
alt: string;
|
|
7
|
+
fullWidth: boolean;
|
|
8
|
+
} | {
|
|
9
|
+
kind: 'youtube';
|
|
10
|
+
videoId: string;
|
|
11
|
+
fullWidth: boolean;
|
|
12
|
+
} | {
|
|
13
|
+
kind: 'publicVideo';
|
|
14
|
+
url: string;
|
|
15
|
+
fullWidth: boolean;
|
|
16
|
+
};
|
|
17
|
+
export type StickyNoteMediaError = 'invalid-url' | 'https-required' | 'invalid-youtube-url' | 'unsupported-video-url';
|
|
18
|
+
export type StickyNoteMediaParseResult = {
|
|
19
|
+
ok: true;
|
|
20
|
+
value: StickyNoteMedia;
|
|
21
|
+
} | {
|
|
22
|
+
ok: false;
|
|
23
|
+
error: StickyNoteMediaError;
|
|
24
|
+
};
|
|
25
|
+
export interface StickyNoteMediaToken {
|
|
26
|
+
media: StickyNoteMedia;
|
|
27
|
+
start: number;
|
|
28
|
+
end: number;
|
|
29
|
+
}
|
|
30
|
+
export interface StickyNoteMediaMarker {
|
|
31
|
+
kind: StickyNoteMedia['kind'];
|
|
32
|
+
fullWidth: boolean;
|
|
33
|
+
}
|
|
34
|
+
export declare function parseStickyNoteMediaUrl(rawUrl: string, mediaType: StickyNoteMediaType, options?: {
|
|
35
|
+
alt?: string;
|
|
36
|
+
fullWidth?: boolean;
|
|
37
|
+
}): StickyNoteMediaParseResult;
|
|
38
|
+
export declare function serializeStickyNoteMedia(media: StickyNoteMedia): string;
|
|
39
|
+
export declare function parseStickyNoteMediaMarker(title?: string): StickyNoteMediaMarker | null;
|
|
40
|
+
export declare function parseStickyNoteMediaSource(source: string, alt?: string, title?: string): StickyNoteMedia | null;
|
|
41
|
+
export declare function insertStickyNoteMedia(currentValue: string, block: string, selection: TextSelection | null): TextSelection;
|
|
42
|
+
export declare function parseStickyNoteMediaTokens(content: string): StickyNoteMediaToken[];
|
|
43
|
+
export declare function findStickyNoteMediaAtSelection(content: string, selectionStart: number, selectionEnd: number): StickyNoteMediaToken | null;
|
|
44
|
+
export declare function replaceStickyNoteMedia(content: string, original: StickyNoteMediaToken, replacement: string): TextSelection | null;
|
|
45
|
+
//# sourceMappingURL=StickyNoteMedia.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StickyNoteMedia.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/StickyNoteNode/StickyNoteMedia.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAE5D,MAAM,MAAM,mBAAmB,GAAG,OAAO,GAAG,OAAO,CAAC;AAEpD,MAAM,MAAM,eAAe,GACvB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,GAC/D;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,GACxD;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAAC;AAE7D,MAAM,MAAM,oBAAoB,GAC5B,aAAa,GACb,gBAAgB,GAChB,qBAAqB,GACrB,uBAAuB,CAAC;AAE5B,MAAM,MAAM,0BAA0B,GAClC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,eAAe,CAAA;CAAE,GACpC;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,oBAAoB,CAAA;CAAE,CAAC;AAE/C,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,eAAe,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC;IAC9B,SAAS,EAAE,OAAO,CAAC;CACpB;AAyDD,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,mBAAmB,EAC9B,OAAO,GAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAAO,GAClD,0BAA0B,CA8B5B;AAUD,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,CAUvE;AAED,wBAAgB,0BAA0B,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,qBAAqB,GAAG,IAAI,CAsBvF;AAMD,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,MAAM,EACd,GAAG,SAAK,EACR,KAAK,CAAC,EAAE,MAAM,GACb,eAAe,GAAG,IAAI,CASxB;AAsBD,wBAAgB,qBAAqB,CACnC,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,aAAa,GAAG,IAAI,GAC9B,aAAa,CAYf;AAyND,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,MAAM,GAAG,oBAAoB,EAAE,CAkClF;AAED,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,MAAM,EACf,cAAc,EAAE,MAAM,EACtB,YAAY,EAAE,MAAM,GACnB,oBAAoB,GAAG,IAAI,CAS7B;AASD,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,oBAAoB,EAC9B,WAAW,EAAE,MAAM,GAClB,aAAa,GAAG,IAAI,CAYtB"}
|