@teriusu/rich-editor 0.4.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.
Files changed (90) hide show
  1. package/README.md +178 -0
  2. package/dist/components/BubbleToolbar.svelte +299 -0
  3. package/dist/components/BubbleToolbar.svelte.d.ts +9 -0
  4. package/dist/components/BubbleToolbar.svelte.d.ts.map +1 -0
  5. package/dist/components/FixedToolbar.svelte +892 -0
  6. package/dist/components/FixedToolbar.svelte.d.ts +11 -0
  7. package/dist/components/FixedToolbar.svelte.d.ts.map +1 -0
  8. package/dist/components/InputModal.svelte +102 -0
  9. package/dist/components/InputModal.svelte.d.ts +11 -0
  10. package/dist/components/InputModal.svelte.d.ts.map +1 -0
  11. package/dist/components/PdfViewer.svelte +152 -0
  12. package/dist/components/PdfViewer.svelte.d.ts +8 -0
  13. package/dist/components/PdfViewer.svelte.d.ts.map +1 -0
  14. package/dist/components/SlashCommandMenu.svelte +315 -0
  15. package/dist/components/SlashCommandMenu.svelte.d.ts +14 -0
  16. package/dist/components/SlashCommandMenu.svelte.d.ts.map +1 -0
  17. package/dist/components/TableBubbleMenu.svelte +472 -0
  18. package/dist/components/TableBubbleMenu.svelte.d.ts +8 -0
  19. package/dist/components/TableBubbleMenu.svelte.d.ts.map +1 -0
  20. package/dist/components/TipTapEditor.svelte +649 -0
  21. package/dist/components/TipTapEditor.svelte.d.ts +17 -0
  22. package/dist/components/TipTapEditor.svelte.d.ts.map +1 -0
  23. package/dist/extensions/Column.d.ts +3 -0
  24. package/dist/extensions/Column.d.ts.map +1 -0
  25. package/dist/extensions/Column.js +20 -0
  26. package/dist/extensions/Columns.d.ts +11 -0
  27. package/dist/extensions/Columns.d.ts.map +1 -0
  28. package/dist/extensions/Columns.js +103 -0
  29. package/dist/extensions/Columns.test.d.ts +2 -0
  30. package/dist/extensions/Columns.test.d.ts.map +1 -0
  31. package/dist/extensions/Columns.test.js +62 -0
  32. package/dist/extensions/FileAttachment.d.ts +24 -0
  33. package/dist/extensions/FileAttachment.d.ts.map +1 -0
  34. package/dist/extensions/FileAttachment.js +190 -0
  35. package/dist/extensions/FileAttachment.test.d.ts +2 -0
  36. package/dist/extensions/FileAttachment.test.d.ts.map +1 -0
  37. package/dist/extensions/FileAttachment.test.js +63 -0
  38. package/dist/extensions/FixedDetails.d.ts +2 -0
  39. package/dist/extensions/FixedDetails.d.ts.map +1 -0
  40. package/dist/extensions/FixedDetails.js +100 -0
  41. package/dist/extensions/FixedDetails.test.d.ts +2 -0
  42. package/dist/extensions/FixedDetails.test.d.ts.map +1 -0
  43. package/dist/extensions/FixedDetails.test.js +40 -0
  44. package/dist/extensions/Indent.d.ts +11 -0
  45. package/dist/extensions/Indent.d.ts.map +1 -0
  46. package/dist/extensions/Indent.js +87 -0
  47. package/dist/extensions/Indent.test.d.ts +2 -0
  48. package/dist/extensions/Indent.test.d.ts.map +1 -0
  49. package/dist/extensions/Indent.test.js +78 -0
  50. package/dist/extensions/PdfBlock.d.ts +3 -0
  51. package/dist/extensions/PdfBlock.d.ts.map +1 -0
  52. package/dist/extensions/PdfBlock.js +301 -0
  53. package/dist/extensions/PdfBlock.test.d.ts +2 -0
  54. package/dist/extensions/PdfBlock.test.d.ts.map +1 -0
  55. package/dist/extensions/PdfBlock.test.js +51 -0
  56. package/dist/extensions/VideoBlock.d.ts +16 -0
  57. package/dist/extensions/VideoBlock.d.ts.map +1 -0
  58. package/dist/extensions/VideoBlock.js +87 -0
  59. package/dist/extensions/VideoBlock.test.d.ts +2 -0
  60. package/dist/extensions/VideoBlock.test.d.ts.map +1 -0
  61. package/dist/extensions/VideoBlock.test.js +54 -0
  62. package/dist/index.d.ts +20 -0
  63. package/dist/index.d.ts.map +1 -0
  64. package/dist/index.js +20 -0
  65. package/dist/styles/editor.css +698 -0
  66. package/dist/types.d.ts +44 -0
  67. package/dist/types.d.ts.map +1 -0
  68. package/dist/types.js +1 -0
  69. package/dist/utils/cn.d.ts +3 -0
  70. package/dist/utils/cn.d.ts.map +1 -0
  71. package/dist/utils/cn.js +5 -0
  72. package/dist/utils/cn.test.d.ts +2 -0
  73. package/dist/utils/cn.test.d.ts.map +1 -0
  74. package/dist/utils/cn.test.js +28 -0
  75. package/dist/utils/escape-html.d.ts +2 -0
  76. package/dist/utils/escape-html.d.ts.map +1 -0
  77. package/dist/utils/escape-html.js +7 -0
  78. package/dist/utils/escape-html.test.d.ts +2 -0
  79. package/dist/utils/escape-html.test.d.ts.map +1 -0
  80. package/dist/utils/escape-html.test.js +25 -0
  81. package/dist/utils/pdf.d.ts +9 -0
  82. package/dist/utils/pdf.d.ts.map +1 -0
  83. package/dist/utils/pdf.js +33 -0
  84. package/dist/utils/sanitize.d.ts +9 -0
  85. package/dist/utils/sanitize.d.ts.map +1 -0
  86. package/dist/utils/sanitize.js +115 -0
  87. package/dist/utils/sanitize.test.d.ts +2 -0
  88. package/dist/utils/sanitize.test.d.ts.map +1 -0
  89. package/dist/utils/sanitize.test.js +206 -0
  90. package/package.json +76 -0
@@ -0,0 +1,472 @@
1
+ <script lang="ts">
2
+ import type { Editor } from "@tiptap/core";
3
+ import {
4
+ ArrowUpToLine,
5
+ ArrowDownToLine,
6
+ ArrowLeftToLine,
7
+ ArrowRightToLine,
8
+ Trash2,
9
+ PanelTop,
10
+ PanelLeft,
11
+ Combine,
12
+ SplitSquareHorizontal,
13
+ Paintbrush,
14
+ UnfoldVertical,
15
+ EqualApproximately,
16
+ RowsIcon,
17
+ ColumnsIcon,
18
+ } from "lucide-svelte";
19
+ import { onMount } from "svelte";
20
+ import { cn } from "../utils/cn";
21
+
22
+ const PRESET_COLORS = [
23
+ { label: "없음", value: "" },
24
+ { label: "밝은 회색", value: "#f1f5f9" },
25
+ { label: "밝은 파랑", value: "#dbeafe" },
26
+ { label: "밝은 초록", value: "#dcfce7" },
27
+ { label: "밝은 노랑", value: "#fef9c3" },
28
+ { label: "밝은 주황", value: "#ffedd5" },
29
+ { label: "밝은 빨강", value: "#fee2e2" },
30
+ { label: "밝은 보라", value: "#ede9fe" },
31
+ { label: "밝은 분홍", value: "#fce7f3" },
32
+ ];
33
+
34
+ const LINE_HEIGHTS = [
35
+ { label: "좁게", value: "0.8" },
36
+ { label: "보통", value: "1.0" },
37
+ { label: "넓게", value: "1.4" },
38
+ ];
39
+
40
+ let { editor }: { editor: Editor } = $props();
41
+
42
+ let visible = $state(false);
43
+ let pos = $state({ top: 0, left: 0, width: 0 });
44
+ let showColors = $state(false);
45
+ let showLineHeight = $state(false);
46
+ let menuEl: HTMLDivElement | undefined = $state();
47
+ const iconSize = 14;
48
+
49
+ function findTableNode() {
50
+ const { state } = editor;
51
+ const { from } = state.selection;
52
+ let tablePos = -1;
53
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
54
+ let tableNode: any = null;
55
+ state.doc.descendants((node, nodePos) => {
56
+ if (
57
+ node.type.name === "table" &&
58
+ nodePos <= from &&
59
+ nodePos + node.nodeSize >= from
60
+ ) {
61
+ tablePos = nodePos;
62
+ tableNode = node;
63
+ return false;
64
+ }
65
+ });
66
+ return { tableNode, tablePos };
67
+ }
68
+
69
+ function updatePosition() {
70
+ if (!editor.isActive("table")) {
71
+ visible = false;
72
+ return;
73
+ }
74
+ const { from } = editor.state.selection;
75
+ const domAtPos = editor.view.domAtPos(from);
76
+ const tableEl =
77
+ (domAtPos.node as HTMLElement)?.closest?.("table") ||
78
+ (domAtPos.node.parentElement as HTMLElement)?.closest?.("table");
79
+ if (!tableEl) {
80
+ visible = false;
81
+ return;
82
+ }
83
+ const wrapper = editor.view.dom.closest(".hce-editor-wrapper");
84
+ if (!wrapper) return;
85
+
86
+ const tableRect = tableEl.getBoundingClientRect();
87
+ const wrapperRect = wrapper.getBoundingClientRect();
88
+
89
+ pos = {
90
+ top: tableRect.top - wrapperRect.top - 44,
91
+ left: tableRect.left - wrapperRect.left,
92
+ width: tableRect.width,
93
+ };
94
+ visible = true;
95
+ }
96
+
97
+ onMount(() => {
98
+ editor.on("selectionUpdate", updatePosition);
99
+ editor.on("update", updatePosition);
100
+
101
+ return () => {
102
+ editor.off("selectionUpdate", updatePosition);
103
+ editor.off("update", updatePosition);
104
+ };
105
+ });
106
+
107
+ $effect(() => {
108
+ if (!showColors && !showLineHeight) return;
109
+ const handler = (e: MouseEvent) => {
110
+ if (menuEl && !menuEl.contains(e.target as Node)) {
111
+ showColors = false;
112
+ showLineHeight = false;
113
+ }
114
+ };
115
+ document.addEventListener("mousedown", handler);
116
+ return () => document.removeEventListener("mousedown", handler);
117
+ });
118
+ </script>
119
+
120
+ {#if visible}
121
+ <div
122
+ bind:this={menuEl}
123
+ class="absolute z-50"
124
+ style="top: {pos.top}px; left: {pos.left}px; width: {pos.width}px"
125
+ >
126
+ <div
127
+ class="flex items-center justify-center gap-0.5 px-1.5 py-1 bg-foreground rounded-lg shadow-xl w-fit mx-auto"
128
+ >
129
+ <!-- Row/Col buttons -->
130
+ <div class="hce-table-btn-wrap">
131
+ <button
132
+ type="button"
133
+ onclick={() => editor.chain().focus().addRowBefore().run()}
134
+ disabled={!editor.can().addRowBefore()}
135
+ class={cn(
136
+ "p-1.5 rounded-md transition-colors",
137
+ "text-white/70 hover:text-white hover:bg-white/10",
138
+ !editor.can().addRowBefore() && "opacity-30 pointer-events-none",
139
+ )}
140
+ >
141
+ <ArrowUpToLine size={iconSize} />
142
+ </button>
143
+ <span class="hce-table-btn-tooltip">행 위에 추가</span>
144
+ </div>
145
+
146
+ <div class="hce-table-btn-wrap">
147
+ <button
148
+ type="button"
149
+ onclick={() => editor.chain().focus().addRowAfter().run()}
150
+ disabled={!editor.can().addRowAfter()}
151
+ class={cn(
152
+ "p-1.5 rounded-md transition-colors",
153
+ "text-white/70 hover:text-white hover:bg-white/10",
154
+ !editor.can().addRowAfter() && "opacity-30 pointer-events-none",
155
+ )}
156
+ >
157
+ <ArrowDownToLine size={iconSize} />
158
+ </button>
159
+ <span class="hce-table-btn-tooltip">행 아래에 추가</span>
160
+ </div>
161
+
162
+ <div class="hce-table-btn-wrap">
163
+ <button
164
+ type="button"
165
+ onclick={() => editor.chain().focus().addColumnBefore().run()}
166
+ disabled={!editor.can().addColumnBefore()}
167
+ class={cn(
168
+ "p-1.5 rounded-md transition-colors",
169
+ "text-white/70 hover:text-white hover:bg-white/10",
170
+ !editor.can().addColumnBefore() &&
171
+ "opacity-30 pointer-events-none",
172
+ )}
173
+ >
174
+ <ArrowLeftToLine size={iconSize} />
175
+ </button>
176
+ <span class="hce-table-btn-tooltip">열 왼쪽에 추가</span>
177
+ </div>
178
+
179
+ <div class="hce-table-btn-wrap">
180
+ <button
181
+ type="button"
182
+ onclick={() => editor.chain().focus().addColumnAfter().run()}
183
+ disabled={!editor.can().addColumnAfter()}
184
+ class={cn(
185
+ "p-1.5 rounded-md transition-colors",
186
+ "text-white/70 hover:text-white hover:bg-white/10",
187
+ !editor.can().addColumnAfter() &&
188
+ "opacity-30 pointer-events-none",
189
+ )}
190
+ >
191
+ <ArrowRightToLine size={iconSize} />
192
+ </button>
193
+ <span class="hce-table-btn-tooltip">열 오른쪽에 추가</span>
194
+ </div>
195
+
196
+ <div class="w-px h-5 bg-white/20 mx-0.5"></div>
197
+
198
+ <div class="hce-table-btn-wrap">
199
+ <button
200
+ type="button"
201
+ onclick={() => editor.chain().focus().toggleHeaderRow().run()}
202
+ disabled={!editor.can().toggleHeaderRow()}
203
+ class={cn(
204
+ "p-1.5 rounded-md transition-colors",
205
+ "text-white/70 hover:text-white hover:bg-white/10",
206
+ !editor.can().toggleHeaderRow() &&
207
+ "opacity-30 pointer-events-none",
208
+ )}
209
+ >
210
+ <PanelTop size={iconSize} />
211
+ </button>
212
+ <span class="hce-table-btn-tooltip">헤더 행 토글</span>
213
+ </div>
214
+
215
+ <div class="hce-table-btn-wrap">
216
+ <button
217
+ type="button"
218
+ onclick={() => editor.chain().focus().toggleHeaderColumn().run()}
219
+ disabled={!editor.can().toggleHeaderColumn()}
220
+ class={cn(
221
+ "p-1.5 rounded-md transition-colors",
222
+ "text-white/70 hover:text-white hover:bg-white/10",
223
+ !editor.can().toggleHeaderColumn() &&
224
+ "opacity-30 pointer-events-none",
225
+ )}
226
+ >
227
+ <PanelLeft size={iconSize} />
228
+ </button>
229
+ <span class="hce-table-btn-tooltip">헤더 열 토글</span>
230
+ </div>
231
+
232
+ <div class="hce-table-btn-wrap">
233
+ <button
234
+ type="button"
235
+ onclick={() => editor.chain().focus().mergeCells().run()}
236
+ disabled={!editor.can().mergeCells()}
237
+ class={cn(
238
+ "p-1.5 rounded-md transition-colors",
239
+ "text-white/70 hover:text-white hover:bg-white/10",
240
+ !editor.can().mergeCells() && "opacity-30 pointer-events-none",
241
+ )}
242
+ >
243
+ <Combine size={iconSize} />
244
+ </button>
245
+ <span class="hce-table-btn-tooltip">셀 병합</span>
246
+ </div>
247
+
248
+ <div class="hce-table-btn-wrap">
249
+ <button
250
+ type="button"
251
+ onclick={() => editor.chain().focus().splitCell().run()}
252
+ disabled={!editor.can().splitCell()}
253
+ class={cn(
254
+ "p-1.5 rounded-md transition-colors",
255
+ "text-white/70 hover:text-white hover:bg-white/10",
256
+ !editor.can().splitCell() && "opacity-30 pointer-events-none",
257
+ )}
258
+ >
259
+ <SplitSquareHorizontal size={iconSize} />
260
+ </button>
261
+ <span class="hce-table-btn-tooltip">셀 분할</span>
262
+ </div>
263
+
264
+ <div class="w-px h-5 bg-white/20 mx-0.5"></div>
265
+
266
+ <!-- Line height -->
267
+ <div class="relative">
268
+ <div class="hce-table-btn-wrap">
269
+ <button
270
+ type="button"
271
+ onclick={() => {
272
+ showLineHeight = !showLineHeight;
273
+ showColors = false;
274
+ }}
275
+ class="p-1.5 rounded-md transition-colors text-white/70 hover:text-white hover:bg-white/10"
276
+ >
277
+ <UnfoldVertical size={iconSize} />
278
+ </button>
279
+ <span class="hce-table-btn-tooltip">줄 간격</span>
280
+ </div>
281
+ {#if showLineHeight}
282
+ <div
283
+ class="absolute bottom-full left-1/2 -translate-x-1/2 mb-2 bg-foreground rounded-lg shadow-xl border border-white/10 py-1"
284
+ style="min-width: 100px"
285
+ >
286
+ {#each LINE_HEIGHTS as lh}
287
+ <button
288
+ type="button"
289
+ class="w-full text-left px-3 py-1.5 text-xs text-white/80 hover:text-white hover:bg-white/10 transition-colors"
290
+ onclick={() => {
291
+ const { tr } = editor.state;
292
+ const { tableNode, tablePos } = findTableNode();
293
+ if (!tableNode || tablePos < 0) return;
294
+ tableNode.descendants(
295
+ (
296
+ node: {
297
+ type: { name: string };
298
+ attrs: Record<string, unknown>;
299
+ },
300
+ childPos: number,
301
+ ) => {
302
+ if (
303
+ node.type.name === "tableCell" ||
304
+ node.type.name === "tableHeader"
305
+ ) {
306
+ tr.setNodeMarkup(tablePos + childPos + 1, undefined, {
307
+ ...node.attrs,
308
+ lineHeight: lh.value,
309
+ });
310
+ }
311
+ },
312
+ );
313
+ editor.view.dispatch(tr);
314
+ showLineHeight = false;
315
+ }}
316
+ >
317
+ {lh.label}
318
+ </button>
319
+ {/each}
320
+ </div>
321
+ {/if}
322
+ </div>
323
+
324
+ <!-- Equal width -->
325
+ <div class="hce-table-btn-wrap">
326
+ <button
327
+ type="button"
328
+ onclick={() => {
329
+ const { tableNode, tablePos } = findTableNode();
330
+ if (!tableNode || tablePos < 0) return;
331
+ const firstRow = tableNode.firstChild;
332
+ if (!firstRow) return;
333
+ const colCount = firstRow.childCount;
334
+ if (colCount === 0) return;
335
+ const domAtPos = editor.view.domAtPos(tablePos + 1);
336
+ const tableEl =
337
+ (domAtPos.node as HTMLElement)?.closest?.("table") ||
338
+ (domAtPos.node.parentElement as HTMLElement)?.closest?.("table");
339
+ const tableWidth = tableEl?.clientWidth || 600;
340
+ const equalWidth = Math.floor(tableWidth / colCount);
341
+ const { tr } = editor.state;
342
+ tableNode.descendants(
343
+ (
344
+ node: {
345
+ type: { name: string };
346
+ attrs: Record<string, unknown>;
347
+ },
348
+ childPos: number,
349
+ ) => {
350
+ if (
351
+ node.type.name === "tableCell" ||
352
+ node.type.name === "tableHeader"
353
+ ) {
354
+ tr.setNodeMarkup(tablePos + childPos + 1, undefined, {
355
+ ...node.attrs,
356
+ colwidth: [equalWidth],
357
+ });
358
+ }
359
+ },
360
+ );
361
+ editor.view.dispatch(tr);
362
+ }}
363
+ class="p-1.5 rounded-md transition-colors text-white/70 hover:text-white hover:bg-white/10"
364
+ >
365
+ <EqualApproximately size={iconSize} />
366
+ </button>
367
+ <span class="hce-table-btn-tooltip">너비 동일</span>
368
+ </div>
369
+
370
+ <!-- Background color -->
371
+ <div class="relative">
372
+ <div class="hce-table-btn-wrap">
373
+ <button
374
+ type="button"
375
+ onclick={() => {
376
+ showColors = !showColors;
377
+ showLineHeight = false;
378
+ }}
379
+ class="p-1.5 rounded-md transition-colors text-white/70 hover:text-white hover:bg-white/10"
380
+ >
381
+ <Paintbrush size={iconSize} />
382
+ </button>
383
+ <span class="hce-table-btn-tooltip">셀 배경색</span>
384
+ </div>
385
+ {#if showColors}
386
+ <div
387
+ class="absolute bottom-full left-1/2 -translate-x-1/2 mb-2 bg-foreground rounded-lg shadow-xl border border-white/10 p-2"
388
+ style="min-width: 160px"
389
+ >
390
+ <p
391
+ class="text-[10px] font-medium text-white/50 uppercase tracking-wider mb-1.5 px-1"
392
+ >
393
+ 배경색
394
+ </p>
395
+ <div class="grid grid-cols-3 gap-1">
396
+ {#each PRESET_COLORS as c}
397
+ <button
398
+ type="button"
399
+ title={c.label}
400
+ class="w-full h-7 rounded-md border border-white/20 transition-transform hover:scale-110"
401
+ style="background: {c.value ||
402
+ 'transparent'}; {!c.value
403
+ ? 'background-image: linear-gradient(135deg, transparent 45%, #ef4444 45%, #ef4444 55%, transparent 55%)'
404
+ : ''}"
405
+ onclick={() => {
406
+ editor
407
+ .chain()
408
+ .focus()
409
+ .setCellAttribute("backgroundColor", c.value || null)
410
+ .run();
411
+ showColors = false;
412
+ }}
413
+ ></button>
414
+ {/each}
415
+ </div>
416
+ </div>
417
+ {/if}
418
+ </div>
419
+
420
+ <div class="w-px h-5 bg-white/20 mx-0.5"></div>
421
+
422
+ <!-- Delete buttons -->
423
+ <div class="hce-table-btn-wrap">
424
+ <button
425
+ type="button"
426
+ onclick={() => editor.chain().focus().deleteRow().run()}
427
+ disabled={!editor.can().deleteRow()}
428
+ class={cn(
429
+ "p-1.5 rounded-md transition-colors",
430
+ "text-white/70 hover:text-red-300 hover:bg-white/10",
431
+ !editor.can().deleteRow() && "opacity-30 pointer-events-none",
432
+ )}
433
+ >
434
+ <RowsIcon size={iconSize} />
435
+ </button>
436
+ <span class="hce-table-btn-tooltip">행 삭제</span>
437
+ </div>
438
+
439
+ <div class="hce-table-btn-wrap">
440
+ <button
441
+ type="button"
442
+ onclick={() => editor.chain().focus().deleteColumn().run()}
443
+ disabled={!editor.can().deleteColumn()}
444
+ class={cn(
445
+ "p-1.5 rounded-md transition-colors",
446
+ "text-white/70 hover:text-red-300 hover:bg-white/10",
447
+ !editor.can().deleteColumn() && "opacity-30 pointer-events-none",
448
+ )}
449
+ >
450
+ <ColumnsIcon size={iconSize} />
451
+ </button>
452
+ <span class="hce-table-btn-tooltip">열 삭제</span>
453
+ </div>
454
+
455
+ <div class="hce-table-btn-wrap">
456
+ <button
457
+ type="button"
458
+ onclick={() => editor.chain().focus().deleteTable().run()}
459
+ disabled={!editor.can().deleteTable()}
460
+ class={cn(
461
+ "p-1.5 rounded-md transition-colors",
462
+ "text-white/70 hover:text-red-300 hover:bg-white/10",
463
+ !editor.can().deleteTable() && "opacity-30 pointer-events-none",
464
+ )}
465
+ >
466
+ <Trash2 size={iconSize} />
467
+ </button>
468
+ <span class="hce-table-btn-tooltip">표 삭제</span>
469
+ </div>
470
+ </div>
471
+ </div>
472
+ {/if}
@@ -0,0 +1,8 @@
1
+ import type { Editor } from "@tiptap/core";
2
+ type $$ComponentProps = {
3
+ editor: Editor;
4
+ };
5
+ declare const TableBubbleMenu: import("svelte").Component<$$ComponentProps, {}, "">;
6
+ type TableBubbleMenu = ReturnType<typeof TableBubbleMenu>;
7
+ export default TableBubbleMenu;
8
+ //# sourceMappingURL=TableBubbleMenu.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TableBubbleMenu.svelte.d.ts","sourceRoot":"","sources":["../../src/components/TableBubbleMenu.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAoB1C,KAAK,gBAAgB,GAAI;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAkX7C,QAAA,MAAM,eAAe,sDAAwC,CAAC;AAC9D,KAAK,eAAe,GAAG,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC;AAC1D,eAAe,eAAe,CAAC"}