@pixerate/editor-svelte 0.23.0 → 0.25.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/README.md +4 -2
- package/dist/ExportDocxButton.svelte +48 -0
- package/dist/ExportDocxButton.svelte.d.ts +13 -0
- package/dist/ExportDocxButton.svelte.d.ts.map +1 -0
- package/dist/StylesGallery.svelte +169 -0
- package/dist/StylesGallery.svelte.d.ts +27 -0
- package/dist/StylesGallery.svelte.d.ts.map +1 -0
- package/dist/canvas/AnimationTimeline.svelte +217 -0
- package/dist/canvas/AnimationTimeline.svelte.d.ts +20 -0
- package/dist/canvas/AnimationTimeline.svelte.d.ts.map +1 -0
- package/dist/canvas/CanvasComponentsPanel.svelte +73 -0
- package/dist/canvas/CanvasComponentsPanel.svelte.d.ts +13 -0
- package/dist/canvas/CanvasComponentsPanel.svelte.d.ts.map +1 -0
- package/dist/canvas/CanvasInstanceInspector.svelte +136 -0
- package/dist/canvas/CanvasInstanceInspector.svelte.d.ts +16 -0
- package/dist/canvas/CanvasInstanceInspector.svelte.d.ts.map +1 -0
- package/dist/canvas/TokenBindingPicker.svelte +93 -0
- package/dist/canvas/TokenBindingPicker.svelte.d.ts +20 -0
- package/dist/canvas/TokenBindingPicker.svelte.d.ts.map +1 -0
- package/dist/canvas/TokenModeSwitcher.svelte +55 -0
- package/dist/canvas/TokenModeSwitcher.svelte.d.ts +18 -0
- package/dist/canvas/TokenModeSwitcher.svelte.d.ts.map +1 -0
- package/dist/canvas/createCanvasAnimation.svelte.d.ts +98 -0
- package/dist/canvas/createCanvasAnimation.svelte.d.ts.map +1 -0
- package/dist/canvas/createCanvasAnimation.svelte.js +79 -0
- package/dist/canvas/createCanvasArrange.svelte.d.ts +4 -0
- package/dist/canvas/createCanvasArrange.svelte.d.ts.map +1 -1
- package/dist/canvas/createCanvasAutoLayout.svelte.d.ts.map +1 -1
- package/dist/canvas/createCanvasComponents.svelte.d.ts +68 -0
- package/dist/canvas/createCanvasComponents.svelte.d.ts.map +1 -0
- package/dist/canvas/createCanvasComponents.svelte.js +31 -0
- package/dist/canvas/createCanvasTokens.svelte.d.ts +31 -0
- package/dist/canvas/createCanvasTokens.svelte.d.ts.map +1 -0
- package/dist/canvas/createCanvasTokens.svelte.js +50 -0
- package/dist/canvas/index.d.ts +12 -0
- package/dist/canvas/index.d.ts.map +1 -1
- package/dist/canvas/index.js +16 -0
- package/dist/docxExport.svelte.d.ts +26 -0
- package/dist/docxExport.svelte.d.ts.map +1 -0
- package/dist/docxExport.svelte.js +36 -0
- package/dist/fileImport.svelte.d.ts +8 -1
- package/dist/fileImport.svelte.d.ts.map +1 -1
- package/dist/fileImport.svelte.js +11 -1
- package/dist/generation/AssetMentionChips.svelte +130 -0
- package/dist/generation/AssetMentionChips.svelte.d.ts +21 -0
- package/dist/generation/AssetMentionChips.svelte.d.ts.map +1 -0
- package/dist/generation/GenerationHistory.svelte +161 -0
- package/dist/generation/GenerationHistory.svelte.d.ts +28 -0
- package/dist/generation/GenerationHistory.svelte.d.ts.map +1 -0
- package/dist/generation/index.d.ts +7 -0
- package/dist/generation/index.d.ts.map +1 -1
- package/dist/generation/index.js +3 -0
- package/dist/generation/records.svelte.d.ts +18 -0
- package/dist/generation/records.svelte.d.ts.map +1 -0
- package/dist/generation/records.svelte.js +66 -0
- package/dist/image-editor/ImageEditor.svelte +72 -1
- package/dist/image-editor/ImageEditor.svelte.d.ts.map +1 -1
- package/dist/image-editor/RefineEdgePanel.svelte +180 -0
- package/dist/image-editor/RefineEdgePanel.svelte.d.ts +13 -0
- package/dist/image-editor/RefineEdgePanel.svelte.d.ts.map +1 -0
- package/dist/image-editor/SelectionOptionsBar.svelte +135 -0
- package/dist/image-editor/SelectionOptionsBar.svelte.d.ts +15 -0
- package/dist/image-editor/SelectionOptionsBar.svelte.d.ts.map +1 -0
- package/dist/image-editor/index.d.ts +6 -0
- package/dist/image-editor/index.d.ts.map +1 -1
- package/dist/image-editor/index.js +2 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -0
- package/dist/paragraphStyles.svelte.d.ts +30 -0
- package/dist/paragraphStyles.svelte.d.ts.map +1 -0
- package/dist/paragraphStyles.svelte.js +44 -0
- package/dist/review/TrackedChangesList.svelte +67 -0
- package/dist/review/TrackedChangesList.svelte.d.ts +13 -0
- package/dist/review/TrackedChangesList.svelte.d.ts.map +1 -0
- package/dist/review/index.d.ts +3 -0
- package/dist/review/index.d.ts.map +1 -1
- package/dist/review/index.js +1 -0
- package/dist/review/review.svelte.d.ts +6 -0
- package/dist/review/review.svelte.d.ts.map +1 -1
- package/dist/review/review.svelte.js +3 -0
- package/dist/spreadsheet/FormulaBar.svelte +13 -4
- package/dist/spreadsheet/FormulaBar.svelte.d.ts.map +1 -1
- package/dist/spreadsheet/FormulaHints.svelte +7 -5
- package/dist/spreadsheet/FormulaHints.svelte.d.ts +3 -0
- package/dist/spreadsheet/FormulaHints.svelte.d.ts.map +1 -1
- package/dist/spreadsheet/NameManager.svelte +165 -0
- package/dist/spreadsheet/NameManager.svelte.d.ts +11 -0
- package/dist/spreadsheet/NameManager.svelte.d.ts.map +1 -0
- package/dist/spreadsheet/SheetTabs.svelte +161 -0
- package/dist/spreadsheet/SheetTabs.svelte.d.ts +10 -0
- package/dist/spreadsheet/SheetTabs.svelte.d.ts.map +1 -0
- package/dist/spreadsheet/SpreadsheetConditionalFormatPanel.svelte +184 -0
- package/dist/spreadsheet/SpreadsheetConditionalFormatPanel.svelte.d.ts +9 -0
- package/dist/spreadsheet/SpreadsheetConditionalFormatPanel.svelte.d.ts.map +1 -0
- package/dist/spreadsheet/SpreadsheetContextMenu.svelte +9 -4
- package/dist/spreadsheet/SpreadsheetContextMenu.svelte.d.ts +5 -1
- package/dist/spreadsheet/SpreadsheetContextMenu.svelte.d.ts.map +1 -1
- package/dist/spreadsheet/SpreadsheetDataValidationPanel.svelte +141 -0
- package/dist/spreadsheet/SpreadsheetDataValidationPanel.svelte.d.ts +9 -0
- package/dist/spreadsheet/SpreadsheetDataValidationPanel.svelte.d.ts.map +1 -0
- package/dist/spreadsheet/SpreadsheetEditor.svelte +273 -19
- package/dist/spreadsheet/SpreadsheetEditor.svelte.d.ts +8 -0
- package/dist/spreadsheet/SpreadsheetEditor.svelte.d.ts.map +1 -1
- package/dist/spreadsheet/SpreadsheetGroupRow.svelte +31 -3
- package/dist/spreadsheet/SpreadsheetGroupRow.svelte.d.ts +6 -0
- package/dist/spreadsheet/SpreadsheetGroupRow.svelte.d.ts.map +1 -1
- package/dist/spreadsheet/SpreadsheetValidationDialog.svelte +92 -0
- package/dist/spreadsheet/SpreadsheetValidationDialog.svelte.d.ts +9 -0
- package/dist/spreadsheet/SpreadsheetValidationDialog.svelte.d.ts.map +1 -0
- package/dist/spreadsheet/index.d.ts +10 -0
- package/dist/spreadsheet/index.d.ts.map +1 -1
- package/dist/spreadsheet/index.js +6 -0
- package/dist/spreadsheet/spreadsheet.svelte.d.ts +56 -3
- package/dist/spreadsheet/spreadsheet.svelte.d.ts.map +1 -1
- package/dist/spreadsheet/spreadsheet.svelte.js +105 -6
- package/dist/spreadsheet/viewport.svelte.d.ts +26 -0
- package/dist/spreadsheet/viewport.svelte.d.ts.map +1 -0
- package/dist/spreadsheet/viewport.svelte.js +93 -0
- package/dist/tables/InsertTableGrid.svelte +85 -0
- package/dist/tables/InsertTableGrid.svelte.d.ts +21 -0
- package/dist/tables/InsertTableGrid.svelte.d.ts.map +1 -0
- package/dist/tables/TableBubbleMenu.svelte +43 -0
- package/dist/tables/TableBubbleMenu.svelte.d.ts +18 -0
- package/dist/tables/TableBubbleMenu.svelte.d.ts.map +1 -0
- package/dist/tables/TableToolbar.svelte +81 -0
- package/dist/tables/TableToolbar.svelte.d.ts +19 -0
- package/dist/tables/TableToolbar.svelte.d.ts.map +1 -0
- package/dist/tables/index.d.ts +12 -0
- package/dist/tables/index.d.ts.map +1 -0
- package/dist/tables/index.js +4 -0
- package/dist/tables/tableMenu.svelte.d.ts +21 -0
- package/dist/tables/tableMenu.svelte.d.ts.map +1 -0
- package/dist/tables/tableMenu.svelte.js +27 -0
- package/dist/tokens/TokenSwatch.svelte +14 -0
- package/dist/tokens/TokenSwatch.svelte.d.ts +8 -0
- package/dist/tokens/TokenSwatch.svelte.d.ts.map +1 -0
- package/dist/tokens/TokensPanel.svelte +323 -0
- package/dist/tokens/TokensPanel.svelte.d.ts +14 -0
- package/dist/tokens/TokensPanel.svelte.d.ts.map +1 -0
- package/dist/tokens/createTokens.svelte.d.ts +31 -0
- package/dist/tokens/createTokens.svelte.d.ts.map +1 -0
- package/dist/tokens/createTokens.svelte.js +43 -0
- package/dist/tokens/index.d.ts +7 -0
- package/dist/tokens/index.d.ts.map +1 -0
- package/dist/tokens/index.js +3 -0
- package/package.json +10 -2
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type { Editor } from "@tiptap/core";
|
|
3
|
+
import { createTableMenu, type SvelteTableMenu } from "./tableMenu.svelte.js";
|
|
4
|
+
|
|
5
|
+
interface Props {
|
|
6
|
+
editor?: Editor | null;
|
|
7
|
+
/** Grid size offered (default 8 × 8). */
|
|
8
|
+
rows?: number;
|
|
9
|
+
cols?: number;
|
|
10
|
+
/** Insert with a header row (default `true`). */
|
|
11
|
+
withHeaderRow?: boolean;
|
|
12
|
+
class?: string;
|
|
13
|
+
cellClass?: string;
|
|
14
|
+
activeCellClass?: string;
|
|
15
|
+
/** Called after a table was inserted. */
|
|
16
|
+
oninsert?: (size: { rows: number; cols: number }) => void;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
let {
|
|
20
|
+
editor = null,
|
|
21
|
+
rows = 8,
|
|
22
|
+
cols = 8,
|
|
23
|
+
withHeaderRow = true,
|
|
24
|
+
class: className = "inline-flex flex-col gap-1 rounded-md border border-border bg-background p-2 text-xs shadow-md",
|
|
25
|
+
cellClass = "h-4 w-4 rounded-sm border border-border bg-background disabled:opacity-40",
|
|
26
|
+
activeCellClass = "border-primary bg-primary/20",
|
|
27
|
+
oninsert,
|
|
28
|
+
}: Props = $props();
|
|
29
|
+
|
|
30
|
+
let table = $state.raw<SvelteTableMenu>(createTableMenu(null));
|
|
31
|
+
$effect(() => {
|
|
32
|
+
const menu = createTableMenu(editor);
|
|
33
|
+
table = menu;
|
|
34
|
+
return () => menu.destroy();
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
let hover = $state<{ rows: number; cols: number } | null>(null);
|
|
38
|
+
let status = $derived(table.current.actions.insertTable);
|
|
39
|
+
let disabled = $derived(!editor || !status.enabled);
|
|
40
|
+
let sizes = $derived(
|
|
41
|
+
Array.from({ length: rows * cols }, (_, i) => ({ rows: Math.floor(i / cols) + 1, cols: (i % cols) + 1 })),
|
|
42
|
+
);
|
|
43
|
+
|
|
44
|
+
const keepSelection = (event: MouseEvent) => event.preventDefault();
|
|
45
|
+
|
|
46
|
+
function insert(size: { rows: number; cols: number }) {
|
|
47
|
+
if (table.run("insertTable", { ...size, withHeaderRow })) oninsert?.(size);
|
|
48
|
+
hover = null;
|
|
49
|
+
}
|
|
50
|
+
</script>
|
|
51
|
+
|
|
52
|
+
<div
|
|
53
|
+
class={className}
|
|
54
|
+
role="group"
|
|
55
|
+
aria-label="Insert table"
|
|
56
|
+
title={disabled ? status.reason : undefined}
|
|
57
|
+
data-insert-table-grid=""
|
|
58
|
+
onmouseleave={() => (hover = null)}
|
|
59
|
+
>
|
|
60
|
+
<div
|
|
61
|
+
role="grid"
|
|
62
|
+
aria-label="Table size"
|
|
63
|
+
style="display: grid; grid-template-columns: repeat({cols}, max-content); gap: 2px"
|
|
64
|
+
>
|
|
65
|
+
{#each sizes as size, i (i)}
|
|
66
|
+
{@const active = !!hover && size.rows <= hover.rows && size.cols <= hover.cols}
|
|
67
|
+
<button
|
|
68
|
+
type="button"
|
|
69
|
+
data-rows={size.rows}
|
|
70
|
+
data-cols={size.cols}
|
|
71
|
+
data-active={active}
|
|
72
|
+
aria-label="{size.rows} × {size.cols} table"
|
|
73
|
+
{disabled}
|
|
74
|
+
class={active ? `${cellClass} ${activeCellClass}` : cellClass}
|
|
75
|
+
onmousedown={keepSelection}
|
|
76
|
+
onmouseenter={() => (hover = size)}
|
|
77
|
+
onfocus={() => (hover = size)}
|
|
78
|
+
onclick={() => insert(size)}
|
|
79
|
+
></button>
|
|
80
|
+
{/each}
|
|
81
|
+
</div>
|
|
82
|
+
<div aria-live="polite" data-testid="insert-table-size">
|
|
83
|
+
{disabled ? status.reason : hover ? `${hover.rows} × ${hover.cols}` : "Insert table"}
|
|
84
|
+
</div>
|
|
85
|
+
</div>
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { Editor } from "@tiptap/core";
|
|
2
|
+
interface Props {
|
|
3
|
+
editor?: Editor | null;
|
|
4
|
+
/** Grid size offered (default 8 × 8). */
|
|
5
|
+
rows?: number;
|
|
6
|
+
cols?: number;
|
|
7
|
+
/** Insert with a header row (default `true`). */
|
|
8
|
+
withHeaderRow?: boolean;
|
|
9
|
+
class?: string;
|
|
10
|
+
cellClass?: string;
|
|
11
|
+
activeCellClass?: string;
|
|
12
|
+
/** Called after a table was inserted. */
|
|
13
|
+
oninsert?: (size: {
|
|
14
|
+
rows: number;
|
|
15
|
+
cols: number;
|
|
16
|
+
}) => void;
|
|
17
|
+
}
|
|
18
|
+
declare const InsertTableGrid: import("svelte").Component<Props, {}, "">;
|
|
19
|
+
type InsertTableGrid = ReturnType<typeof InsertTableGrid>;
|
|
20
|
+
export default InsertTableGrid;
|
|
21
|
+
//# sourceMappingURL=InsertTableGrid.svelte.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InsertTableGrid.svelte.d.ts","sourceRoot":"","sources":["../../src/tables/InsertTableGrid.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAIzC,UAAU,KAAK;IACb,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,yCAAyC;IACzC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,iDAAiD;IACjD,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,yCAAyC;IACzC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;CAC3D;AAqDH,QAAA,MAAM,eAAe,2CAAwC,CAAC;AAC9D,KAAK,eAAe,GAAG,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC;AAC1D,eAAe,eAAe,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type { Snippet } from "svelte";
|
|
3
|
+
import type { Editor } from "@tiptap/core";
|
|
4
|
+
import { shouldShowTableBubbleMenu, type TableToolbarItem } from "@pixerate/editor";
|
|
5
|
+
import BubbleMenu from "../BubbleMenu.svelte";
|
|
6
|
+
import TableToolbar from "./TableToolbar.svelte";
|
|
7
|
+
|
|
8
|
+
interface Props {
|
|
9
|
+
editor?: Editor;
|
|
10
|
+
class?: string;
|
|
11
|
+
pluginKey?: any;
|
|
12
|
+
updateDelay?: number;
|
|
13
|
+
tippyOptions?: Record<string, any>;
|
|
14
|
+
/** Buttons of the default toolbar. */
|
|
15
|
+
items?: readonly TableToolbarItem[];
|
|
16
|
+
/** Custom content (default: a `TableToolbar`). */
|
|
17
|
+
children?: Snippet;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
let {
|
|
21
|
+
editor,
|
|
22
|
+
class: className = "flex h-fit w-fit items-center gap-1 rounded-md border border-gray-200 bg-white p-1 shadow-md",
|
|
23
|
+
pluginKey = "tableBubbleMenu",
|
|
24
|
+
updateDelay = 250,
|
|
25
|
+
tippyOptions = {},
|
|
26
|
+
items,
|
|
27
|
+
children,
|
|
28
|
+
}: Props = $props();
|
|
29
|
+
</script>
|
|
30
|
+
|
|
31
|
+
<!--
|
|
32
|
+
A bubble menu that follows the selection while it is in a table (even a
|
|
33
|
+
collapsed cursor), with the table toolbar or your own children. It uses its
|
|
34
|
+
own plugin key (`tableBubbleMenu`), so it can be combined with the
|
|
35
|
+
formatting `BubbleMenu`.
|
|
36
|
+
-->
|
|
37
|
+
<BubbleMenu {editor} class={className} {pluginKey} {updateDelay} {tippyOptions} shouldShow={shouldShowTableBubbleMenu}>
|
|
38
|
+
{#if children}
|
|
39
|
+
{@render children()}
|
|
40
|
+
{:else}
|
|
41
|
+
<TableToolbar {editor} {...items ? { items } : {}} />
|
|
42
|
+
{/if}
|
|
43
|
+
</BubbleMenu>
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { Snippet } from "svelte";
|
|
2
|
+
import type { Editor } from "@tiptap/core";
|
|
3
|
+
import { type TableToolbarItem } from "@pixerate/editor";
|
|
4
|
+
interface Props {
|
|
5
|
+
editor?: Editor;
|
|
6
|
+
class?: string;
|
|
7
|
+
pluginKey?: any;
|
|
8
|
+
updateDelay?: number;
|
|
9
|
+
tippyOptions?: Record<string, any>;
|
|
10
|
+
/** Buttons of the default toolbar. */
|
|
11
|
+
items?: readonly TableToolbarItem[];
|
|
12
|
+
/** Custom content (default: a `TableToolbar`). */
|
|
13
|
+
children?: Snippet;
|
|
14
|
+
}
|
|
15
|
+
declare const TableBubbleMenu: import("svelte").Component<Props, {}, "">;
|
|
16
|
+
type TableBubbleMenu = ReturnType<typeof TableBubbleMenu>;
|
|
17
|
+
export default TableBubbleMenu;
|
|
18
|
+
//# sourceMappingURL=TableBubbleMenu.svelte.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TableBubbleMenu.svelte.d.ts","sourceRoot":"","sources":["../../src/tables/TableBubbleMenu.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAA6B,KAAK,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAKlF,UAAU,KAAK;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,GAAG,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACnC,sCAAsC;IACtC,KAAK,CAAC,EAAE,SAAS,gBAAgB,EAAE,CAAC;IACpC,kDAAkD;IAClD,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AA+BH,QAAA,MAAM,eAAe,2CAAwC,CAAC;AAC9D,KAAK,eAAe,GAAG,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC;AAC1D,eAAe,eAAe,CAAC"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type { Editor } from "@tiptap/core";
|
|
3
|
+
import { DEFAULT_TABLE_TOOLBAR, type TableToolbarItem } from "@pixerate/editor";
|
|
4
|
+
import { createTableMenu, type SvelteTableMenu } from "./tableMenu.svelte.js";
|
|
5
|
+
|
|
6
|
+
interface Props {
|
|
7
|
+
editor?: Editor | null;
|
|
8
|
+
/** Buttons to show (default `DEFAULT_TABLE_TOOLBAR`). */
|
|
9
|
+
items?: readonly TableToolbarItem[];
|
|
10
|
+
/** Render (with disabled buttons) when the selection is not in a table. Default `false`. */
|
|
11
|
+
showWhenOutside?: boolean;
|
|
12
|
+
class?: string;
|
|
13
|
+
buttonClass?: string;
|
|
14
|
+
activeButtonClass?: string;
|
|
15
|
+
separatorClass?: string;
|
|
16
|
+
/** Called after a button ran its action. */
|
|
17
|
+
onaction?: (item: TableToolbarItem) => void;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
let {
|
|
21
|
+
editor = null,
|
|
22
|
+
items = DEFAULT_TABLE_TOOLBAR,
|
|
23
|
+
showWhenOutside = false,
|
|
24
|
+
class: className = "flex flex-wrap items-center gap-1 text-xs",
|
|
25
|
+
buttonClass = "rounded px-2 py-1 text-foreground hover:bg-muted disabled:opacity-40 disabled:hover:bg-transparent",
|
|
26
|
+
activeButtonClass = "bg-primary/10 text-primary",
|
|
27
|
+
separatorClass = "mx-1 h-4 w-px bg-border",
|
|
28
|
+
onaction,
|
|
29
|
+
}: Props = $props();
|
|
30
|
+
|
|
31
|
+
let table = $state.raw<SvelteTableMenu>(createTableMenu(null));
|
|
32
|
+
$effect(() => {
|
|
33
|
+
const menu = createTableMenu(editor);
|
|
34
|
+
table = menu;
|
|
35
|
+
return () => menu.destroy();
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
// Recomputed whenever the table state changes.
|
|
39
|
+
let buttons = $derived.by(() => {
|
|
40
|
+
const state = table.current;
|
|
41
|
+
return items.map((item, index) => {
|
|
42
|
+
const status = table.check(item.action, item.params);
|
|
43
|
+
return {
|
|
44
|
+
item,
|
|
45
|
+
enabled: status === true,
|
|
46
|
+
title: status === true ? item.title : `${item.title}: ${status}`,
|
|
47
|
+
active: item.active ? item.active(state) : undefined,
|
|
48
|
+
separator: index > 0 && items[index - 1].group !== item.group,
|
|
49
|
+
};
|
|
50
|
+
});
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
const keepSelection = (event: MouseEvent) => event.preventDefault();
|
|
54
|
+
|
|
55
|
+
function run(item: TableToolbarItem) {
|
|
56
|
+
if (table.run(item.action, item.params)) onaction?.(item);
|
|
57
|
+
}
|
|
58
|
+
</script>
|
|
59
|
+
|
|
60
|
+
{#if editor && (table.current.inTable || showWhenOutside)}
|
|
61
|
+
<div class={className} role="toolbar" aria-label="Table" data-table-toolbar="">
|
|
62
|
+
{#each buttons as button (button.item.id)}
|
|
63
|
+
{#if button.separator}
|
|
64
|
+
<span class={separatorClass} aria-hidden="true"></span>
|
|
65
|
+
{/if}
|
|
66
|
+
<button
|
|
67
|
+
type="button"
|
|
68
|
+
data-action={button.item.id}
|
|
69
|
+
aria-label={button.item.title}
|
|
70
|
+
title={button.title}
|
|
71
|
+
aria-pressed={button.active === undefined ? undefined : button.active}
|
|
72
|
+
disabled={!button.enabled}
|
|
73
|
+
class={button.active ? `${buttonClass} ${activeButtonClass}` : buttonClass}
|
|
74
|
+
onmousedown={keepSelection}
|
|
75
|
+
onclick={() => run(button.item)}
|
|
76
|
+
>
|
|
77
|
+
{button.item.label}
|
|
78
|
+
</button>
|
|
79
|
+
{/each}
|
|
80
|
+
</div>
|
|
81
|
+
{/if}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { Editor } from "@tiptap/core";
|
|
2
|
+
import { type TableToolbarItem } from "@pixerate/editor";
|
|
3
|
+
interface Props {
|
|
4
|
+
editor?: Editor | null;
|
|
5
|
+
/** Buttons to show (default `DEFAULT_TABLE_TOOLBAR`). */
|
|
6
|
+
items?: readonly TableToolbarItem[];
|
|
7
|
+
/** Render (with disabled buttons) when the selection is not in a table. Default `false`. */
|
|
8
|
+
showWhenOutside?: boolean;
|
|
9
|
+
class?: string;
|
|
10
|
+
buttonClass?: string;
|
|
11
|
+
activeButtonClass?: string;
|
|
12
|
+
separatorClass?: string;
|
|
13
|
+
/** Called after a button ran its action. */
|
|
14
|
+
onaction?: (item: TableToolbarItem) => void;
|
|
15
|
+
}
|
|
16
|
+
declare const TableToolbar: import("svelte").Component<Props, {}, "">;
|
|
17
|
+
type TableToolbar = ReturnType<typeof TableToolbar>;
|
|
18
|
+
export default TableToolbar;
|
|
19
|
+
//# sourceMappingURL=TableToolbar.svelte.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TableToolbar.svelte.d.ts","sourceRoot":"","sources":["../../src/tables/TableToolbar.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAyB,KAAK,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAI9E,UAAU,KAAK;IACb,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,yDAAyD;IACzD,KAAK,CAAC,EAAE,SAAS,gBAAgB,EAAE,CAAC;IACpC,4FAA4F;IAC5F,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,4CAA4C;IAC5C,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,gBAAgB,KAAK,IAAI,CAAC;CAC7C;AA8DH,QAAA,MAAM,YAAY,2CAAwC,CAAC;AAC3D,KAAK,YAAY,GAAG,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC;AACpD,eAAe,YAAY,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { ComponentProps } from "svelte";
|
|
2
|
+
import type TableToolbarComponent from "./TableToolbar.svelte";
|
|
3
|
+
import type InsertTableGridComponent from "./InsertTableGrid.svelte";
|
|
4
|
+
import type TableBubbleMenuComponent from "./TableBubbleMenu.svelte";
|
|
5
|
+
export { default as TableToolbar } from "./TableToolbar.svelte";
|
|
6
|
+
export { default as InsertTableGrid } from "./InsertTableGrid.svelte";
|
|
7
|
+
export { default as TableBubbleMenu } from "./TableBubbleMenu.svelte";
|
|
8
|
+
export * from "./tableMenu.svelte.js";
|
|
9
|
+
export type TableToolbarProps = ComponentProps<typeof TableToolbarComponent>;
|
|
10
|
+
export type InsertTableGridProps = ComponentProps<typeof InsertTableGridComponent>;
|
|
11
|
+
export type TableBubbleMenuProps = ComponentProps<typeof TableBubbleMenuComponent>;
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tables/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAC7C,OAAO,KAAK,qBAAqB,MAAM,uBAAuB,CAAC;AAC/D,OAAO,KAAK,wBAAwB,MAAM,0BAA0B,CAAC;AACrE,OAAO,KAAK,wBAAwB,MAAM,0BAA0B,CAAC;AAErE,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,0BAA0B,CAAC;AACtE,cAAc,uBAAuB,CAAC;AAEtC,MAAM,MAAM,iBAAiB,GAAG,cAAc,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAC7E,MAAM,MAAM,oBAAoB,GAAG,cAAc,CAAC,OAAO,wBAAwB,CAAC,CAAC;AACnF,MAAM,MAAM,oBAAoB,GAAG,cAAc,CAAC,OAAO,wBAAwB,CAAC,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { Editor } from "@tiptap/core";
|
|
2
|
+
import { type TableAction, type TableActionParams, type TableState } from "@pixerate/editor";
|
|
3
|
+
export type { TableAction, TableActionParams, TableState } from "@pixerate/editor";
|
|
4
|
+
export interface SvelteTableMenu {
|
|
5
|
+
/** The table state at the selection (replaced only when it changes). */
|
|
6
|
+
readonly current: TableState;
|
|
7
|
+
/** Runs a table action (focusing the editor); `false` when it cannot run. */
|
|
8
|
+
run(action: TableAction, params?: TableActionParams): boolean;
|
|
9
|
+
/** `true`, or why the action cannot run with these params. */
|
|
10
|
+
check(action: TableAction, params?: TableActionParams): true | string;
|
|
11
|
+
destroy(): void;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Reactive table state for Svelte 5 (the counterpart of React's
|
|
15
|
+
* `useTableMenu`): whether the selection is in a table, its size, header
|
|
16
|
+
* state, cell alignment/background and the enablement (with reasons) of every
|
|
17
|
+
* table action. Call `destroy()` when done (or create it inside a
|
|
18
|
+
* component's `$effect`).
|
|
19
|
+
*/
|
|
20
|
+
export declare function createTableMenu(editor: Editor | null | undefined): SvelteTableMenu;
|
|
21
|
+
//# sourceMappingURL=tableMenu.svelte.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tableMenu.svelte.d.ts","sourceRoot":"","sources":["../../src/tables/tableMenu.svelte.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAIL,KAAK,WAAW,EAChB,KAAK,iBAAiB,EACtB,KAAK,UAAU,EAChB,MAAM,kBAAkB,CAAC;AAE1B,YAAY,EAAE,WAAW,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnF,MAAM,WAAW,eAAe;IAC9B,wEAAwE;IACxE,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;IAC7B,6EAA6E;IAC7E,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC;IAC9D,8DAA8D;IAC9D,KAAK,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,iBAAiB,GAAG,IAAI,GAAG,MAAM,CAAC;IACtE,OAAO,IAAI,IAAI,CAAC;CACjB;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,eAAe,CAmBlF"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { createTableStore, getTableActionState, runTableAction, } from "@pixerate/editor";
|
|
2
|
+
/**
|
|
3
|
+
* Reactive table state for Svelte 5 (the counterpart of React's
|
|
4
|
+
* `useTableMenu`): whether the selection is in a table, its size, header
|
|
5
|
+
* state, cell alignment/background and the enablement (with reasons) of every
|
|
6
|
+
* table action. Call `destroy()` when done (or create it inside a
|
|
7
|
+
* component's `$effect`).
|
|
8
|
+
*/
|
|
9
|
+
export function createTableMenu(editor) {
|
|
10
|
+
const store = createTableStore(editor);
|
|
11
|
+
let current = $state.raw(store.getSnapshot());
|
|
12
|
+
const unsubscribe = store.subscribe(() => {
|
|
13
|
+
current = store.getSnapshot();
|
|
14
|
+
});
|
|
15
|
+
current = store.getSnapshot();
|
|
16
|
+
return {
|
|
17
|
+
get current() {
|
|
18
|
+
return current;
|
|
19
|
+
},
|
|
20
|
+
run: (action, params) => runTableAction(editor, action, params, { focus: true }),
|
|
21
|
+
check: (action, params) => getTableActionState(editor, action, params),
|
|
22
|
+
destroy() {
|
|
23
|
+
unsubscribe();
|
|
24
|
+
store.destroy();
|
|
25
|
+
},
|
|
26
|
+
};
|
|
27
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
interface Props {
|
|
3
|
+
color: string;
|
|
4
|
+
class?: string;
|
|
5
|
+
}
|
|
6
|
+
let { color, class: className = '' }: Props = $props();
|
|
7
|
+
</script>
|
|
8
|
+
|
|
9
|
+
<span
|
|
10
|
+
data-token-swatch={color}
|
|
11
|
+
class="inline-block h-4 w-4 shrink-0 rounded border border-border {className}"
|
|
12
|
+
style="background: linear-gradient({color}, {color}), repeating-conic-gradient(#ccc 0 25%, #fff 0 50%) 0 0 / 8px 8px"
|
|
13
|
+
aria-hidden="true"
|
|
14
|
+
></span>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TokenSwatch.svelte.d.ts","sourceRoot":"","sources":["../../src/tokens/TokenSwatch.svelte.ts"],"names":[],"mappings":"AAGE,UAAU,KAAK;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAUH,QAAA,MAAM,WAAW,2CAAwC,CAAC;AAC1D,KAAK,WAAW,GAAG,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC;AAClD,eAAe,WAAW,CAAC"}
|